From 3ac409ba427170af77c9d97440b30d98fc0464dd Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Sun, 19 Apr 2020 05:57:16 -0400 Subject: [PATCH 001/167] Revise docs on randomness (#5497) * Initial attempt to revise docs. * Remove incorrect warning from Babe pallet * Add more hints that collective flip is for low security --- frame/babe/src/lib.rs | 15 ++++++++++ frame/randomness-collective-flip/src/lib.rs | 32 ++------------------- 2 files changed, 18 insertions(+), 29 deletions(-) diff --git a/frame/babe/src/lib.rs b/frame/babe/src/lib.rs index ea2f97e7a95..5227dd94423 100644 --- a/frame/babe/src/lib.rs +++ b/frame/babe/src/lib.rs @@ -205,6 +205,21 @@ decl_module! { } impl RandomnessT<::Hash> for Module { + /// Some BABE blocks have VRF outputs where the block producer has exactly one bit of influence, + /// either they make the block or they do not make the block and thus someone else makes the + /// next block. Yet, this randomness is not fresh in all BABE blocks. + /// + /// If that is an insufficient security guarantee then two things can be used to improve this + /// randomness: + /// + /// - Name, in advance, the block number whose random value will be used; ensure your module + /// retains a buffer of previous random values for its subject and then index into these in + /// order to obviate the ability of your user to look up the parent hash and choose when to + /// transact based upon it. + /// - Require your user to first commit to an additional value by first posting its hash. + /// Require them to reveal the value to determine the final result, hashing it with the + /// output of this random function. This reduces the ability of a cabal of block producers + /// from conspiring against individuals. fn random(subject: &[u8]) -> T::Hash { let mut subject = subject.to_vec(); subject.reserve(VRF_OUTPUT_LENGTH); diff --git a/frame/randomness-collective-flip/src/lib.rs b/frame/randomness-collective-flip/src/lib.rs index 194879eb65b..cf6dadf7cb9 100644 --- a/frame/randomness-collective-flip/src/lib.rs +++ b/frame/randomness-collective-flip/src/lib.rs @@ -19,7 +19,8 @@ //! The Randomness Collective Flip module provides a [`random`](./struct.Module.html#method.random) //! function that generates low-influence random values based on the block hashes from the previous //! `81` blocks. Low-influence randomness can be useful when defending against relatively weak -//! adversaries. +//! adversaries. Using this pallet as a randomness source is advisable primarily in low-security +//! situations like testing. //! //! ## Public Functions //! @@ -43,7 +44,7 @@ //! pub struct Module for enum Call where origin: T::Origin { //! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] //! pub fn random_module_example(origin) -> dispatch::DispatchResult { -//! let _random_seed = >::random_seed(); +//! let _random_value = >::random(&b"my context"[..]); //! Ok(()) //! } //! } @@ -98,17 +99,6 @@ decl_storage! { } impl Randomness for Module { - /// Get a low-influence "random" value. - /// - /// Being a deterministic block chain, real randomness is difficult to come by. This gives you - /// something that approximates it. `subject` is a context identifier and allows you to get a - /// different result to other callers of this function; use it like - /// `random(&b"my context"[..])`. This is initially implemented through a low-influence - /// "triplet mix" convolution of previous block hash values. In the future it will be generated - /// from a secure verifiable random function (VRF). - /// - /// ### Security Notes - /// /// This randomness uses a low-influence function, drawing upon the block hashes from the /// previous 81 blocks. Its result for any given subject will be known far in advance by anyone /// observing the chain. Any block producer has significant influence over their block hashes @@ -116,22 +106,6 @@ impl Randomness for Module { /// block producer's influence over the randomness, but increases the influence of small /// colluding groups of recent block producers. /// - /// Some BABE blocks have VRF outputs where the block producer has exactly one bit of influence, - /// either they make the block or they do not make the block and thus someone else makes the - /// next block. Yet, this randomness is not fresh in all BABE blocks. - /// - /// If that is an insufficient security guarantee then two things can be used to improve this - /// randomness: - /// - /// - Name, in advance, the block number whose random value will be used; ensure your module - /// retains a buffer of previous random values for its subject and then index into these in - /// order to obviate the ability of your user to look up the parent hash and choose when to - /// transact based upon it. - /// - Require your user to first commit to an additional value by first posting its hash. - /// Require them to reveal the value to determine the final result, hashing it with the - /// output of this random function. This reduces the ability of a cabal of block producers - /// from conspiring against individuals. - /// /// WARNING: Hashing the result of this function will remove any low-influence properties it has /// and mean that all bits of the resulting value are entirely manipulatable by the author of /// the parent block, who can determine the value of `parent_hash`. -- GitLab From 58d32c138f44021e8064b42230f2abf46b5149f2 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Mon, 20 Apr 2020 11:03:58 +0200 Subject: [PATCH 002/167] Allow to expose a subset of unsafe RPCs (#5233) * sc-cli: Use type-safe constructors for RPC/Prometheus interfaces * service: Simplify rpc handler creation Could probably be further simplifies once [this][commit] lands. [commit]: https://github.com/paritytech/jsonrpc/commit/20485387ed06a48f1a70bf4d609a7cde6cf0accf * service: Streamline some HTTP & WS server start logic * client: Introduce a simple RPC policy mechanism * rpc/system: Check unsafe RPCs * rpc/offchain: Check unsafe RPCs * rpc/author: Check unsafe RPCs --- client/cli/src/commands/mod.rs | 6 ++ client/cli/src/commands/runcmd.rs | 83 ++++++++++++++-------------- client/cli/src/config.rs | 8 +++ client/rpc-api/src/author/error.rs | 4 ++ client/rpc-api/src/lib.rs | 2 + client/rpc-api/src/offchain/error.rs | 8 ++- client/rpc-api/src/policy.rs | 60 ++++++++++++++++++++ client/rpc-api/src/system/mod.rs | 6 +- client/rpc/src/author/mod.rs | 16 +++++- client/rpc/src/author/tests.rs | 1 + client/rpc/src/lib.rs | 2 +- client/rpc/src/offchain/mod.rs | 9 ++- client/rpc/src/offchain/tests.rs | 19 ++++++- client/rpc/src/system/mod.rs | 39 +++++++++++-- client/rpc/src/system/tests.rs | 40 +++++++++----- client/service/src/builder.rs | 48 ++++++++-------- client/service/src/config.rs | 2 + client/service/src/lib.rs | 23 ++++++-- client/service/test/src/lib.rs | 1 + utils/browser/src/lib.rs | 1 + 20 files changed, 282 insertions(+), 96 deletions(-) create mode 100644 client/rpc-api/src/policy.rs diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index ae2fe554675..ec36fb3b64b 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -279,6 +279,12 @@ macro_rules! substrate_cli_subcommands { } } + fn unsafe_rpc_expose(&self) -> $crate::Result { + match self { + $($enum::$variant(cmd) => cmd.unsafe_rpc_expose()),* + } + } + fn rpc_ws_max_connections(&self) -> $crate::Result<::std::option::Option> { match self { $($enum::$variant(cmd) => cmd.rpc_ws_max_connections()),* diff --git a/client/cli/src/commands/runcmd.rs b/client/cli/src/commands/runcmd.rs index b3ce6ce6d11..3a3a17ea3fa 100644 --- a/client/cli/src/commands/runcmd.rs +++ b/client/cli/src/commands/runcmd.rs @@ -27,7 +27,7 @@ use sc_service::{ ChainSpec, Role, }; use sc_telemetry::TelemetryEndpoints; -use std::net::SocketAddr; +use std::net::{IpAddr, Ipv4Addr, SocketAddr}; use structopt::{clap::arg_enum, StructOpt}; arg_enum! { @@ -93,6 +93,14 @@ pub struct RunCmd { #[structopt(long = "unsafe-rpc-external")] pub unsafe_rpc_external: bool, + /// Don't deny potentially unsafe RPCs when listening on external interfaces. + /// + /// Default is false. This allows exposing RPC methods publicly (same as `--unsafe-{rpc,ws}-external` ) + /// but will allow doing so even on validator nodes, which is prohibited by default. + /// Please do this if you know what you're doing. + #[structopt(long = "unsafe-rpc-expose")] + pub unsafe_rpc_expose: bool, + /// Listen to all Websocket interfaces. /// /// Default is local. Note: not all RPC methods are safe to be exposed publicly. Use an RPC proxy @@ -361,22 +369,19 @@ impl CliConfiguration for RunCmd { } fn prometheus_config(&self) -> Result> { - if self.no_prometheus { - Ok(None) + Ok(if self.no_prometheus { + None } else { - let prometheus_interface: &str = if self.prometheus_external { - "0.0.0.0" + let interface = if self.prometheus_external { + Ipv4Addr::UNSPECIFIED } else { - "127.0.0.1" + Ipv4Addr::LOCALHOST }; - Ok(Some(PrometheusConfig::new_with_default_registry( - parse_address( - &format!("{}:{}", prometheus_interface, 9615), - self.prometheus_port, - )?, - ))) - } + Some(PrometheusConfig::new_with_default_registry( + SocketAddr::new(interface.into(), self.prometheus_port.unwrap_or(9615)) + )) + }) } fn disable_grandpa(&self) -> Result { @@ -409,23 +414,29 @@ impl CliConfiguration for RunCmd { } fn rpc_http(&self) -> Result> { - let rpc_interface: &str = - interface_str(self.rpc_external, self.unsafe_rpc_external, self.validator)?; + let interface = rpc_interface( + self.rpc_external, + self.unsafe_rpc_external, + self.unsafe_rpc_expose, + self.validator + )?; - Ok(Some(parse_address( - &format!("{}:{}", rpc_interface, 9933), - self.rpc_port, - )?)) + Ok(Some(SocketAddr::new(interface, self.rpc_port.unwrap_or(9933)))) } fn rpc_ws(&self) -> Result> { - let ws_interface: &str = - interface_str(self.ws_external, self.unsafe_ws_external, self.validator)?; + let interface = rpc_interface( + self.ws_external, + self.unsafe_ws_external, + self.unsafe_rpc_expose, + self.validator + )?; - Ok(Some(parse_address( - &format!("{}:{}", ws_interface, 9944), - self.ws_port, - )?)) + Ok(Some(SocketAddr::new(interface, self.ws_port.unwrap_or(9944)))) + } + + fn unsafe_rpc_expose(&self) -> Result { + Ok(self.unsafe_rpc_expose) } fn offchain_worker(&self, role: &Role) -> Result { @@ -468,23 +479,13 @@ pub fn is_node_name_valid(_name: &str) -> std::result::Result<(), &str> { Ok(()) } -fn parse_address(address: &str, port: Option) -> std::result::Result { - let mut address: SocketAddr = address - .parse() - .map_err(|_| format!("Invalid address: {}", address))?; - if let Some(port) = port { - address.set_port(port); - } - - Ok(address) -} - -fn interface_str( +fn rpc_interface( is_external: bool, is_unsafe_external: bool, + is_unsafe_rpc_expose: bool, is_validator: bool, -) -> Result<&'static str> { - if is_external && is_validator { +) -> Result { + if is_external && is_validator && !is_unsafe_rpc_expose { return Err(Error::Input( "--rpc-external and --ws-external options shouldn't be \ used if the node is running as a validator. Use `--unsafe-rpc-external` if you understand \ @@ -499,9 +500,9 @@ fn interface_str( available set of RPC methods." ); - Ok("0.0.0.0") + Ok(Ipv4Addr::UNSPECIFIED.into()) } else { - Ok("127.0.0.1") + Ok(Ipv4Addr::LOCALHOST.into()) } } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 04a66474028..9de2022a592 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -249,6 +249,13 @@ pub trait CliConfiguration: Sized { Ok(Default::default()) } + /// Returns `Ok(true) if potentially unsafe RPC is to be exposed. + /// + /// By default this is `false`. + fn unsafe_rpc_expose(&self) -> Result { + Ok(Default::default()) + } + /// Get the RPC websockets maximum connections (`None` if unlimited). /// /// By default this is `None`. @@ -419,6 +426,7 @@ pub trait CliConfiguration: Sized { execution_strategies: self.execution_strategies(is_dev)?, rpc_http: self.rpc_http()?, rpc_ws: self.rpc_ws()?, + unsafe_rpc_expose: self.unsafe_rpc_expose()?, rpc_ws_max_connections: self.rpc_ws_max_connections()?, rpc_cors: self.rpc_cors(is_dev)?, prometheus_config: self.prometheus_config()?, diff --git a/client/rpc-api/src/author/error.rs b/client/rpc-api/src/author/error.rs index f1b56910086..dfd488e5da3 100644 --- a/client/rpc-api/src/author/error.rs +++ b/client/rpc-api/src/author/error.rs @@ -57,6 +57,8 @@ pub enum Error { /// Invalid session keys encoding. #[display(fmt="Session keys are not encoded correctly")] InvalidSessionKeys, + /// Call to an unsafe RPC was denied. + UnsafeRpcCalled(crate::policy::UnsafeRpcError), } impl std::error::Error for Error { @@ -65,6 +67,7 @@ impl std::error::Error for Error { Error::Client(ref err) => Some(&**err), Error::Pool(ref err) => Some(err), Error::Verification(ref err) => Some(&**err), + Error::UnsafeRpcCalled(ref err) => Some(err), _ => None, } } @@ -152,6 +155,7 @@ impl From for rpc::Error { request to insert the key successfully.".into() ), }, + Error::UnsafeRpcCalled(e) => e.into(), e => errors::internal(e), } } diff --git a/client/rpc-api/src/lib.rs b/client/rpc-api/src/lib.rs index 8ad2d94bfd2..2d541be2a70 100644 --- a/client/rpc-api/src/lib.rs +++ b/client/rpc-api/src/lib.rs @@ -22,11 +22,13 @@ mod errors; mod helpers; +mod policy; mod subscriptions; pub use jsonrpc_core::IoHandlerExtension as RpcExtension; pub use subscriptions::{Subscriptions, TaskExecutor}; pub use helpers::Receiver; +pub use policy::DenyUnsafe; pub mod author; pub mod chain; diff --git a/client/rpc-api/src/offchain/error.rs b/client/rpc-api/src/offchain/error.rs index c28a2a2f391..695c0cf41fd 100644 --- a/client/rpc-api/src/offchain/error.rs +++ b/client/rpc-api/src/offchain/error.rs @@ -27,11 +27,16 @@ pub enum Error { /// Unavailable storage kind error. #[display(fmt="This storage kind is not available yet.")] UnavailableStorageKind, + /// Call to an unsafe RPC was denied. + UnsafeRpcCalled(crate::policy::UnsafeRpcError), } impl std::error::Error for Error { fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { - None + match self { + Self::UnsafeRpcCalled(err) => Some(err), + _ => None, + } } } @@ -46,6 +51,7 @@ impl From for rpc::Error { message: "This storage kind is not available yet" .into(), data: None, }, + Error::UnsafeRpcCalled(e) => e.into(), } } } diff --git a/client/rpc-api/src/policy.rs b/client/rpc-api/src/policy.rs new file mode 100644 index 00000000000..c01b5232f35 --- /dev/null +++ b/client/rpc-api/src/policy.rs @@ -0,0 +1,60 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Policy-related types. +//! +//! Contains a `DenyUnsafe` type that can be used to deny potentially unsafe +//! RPC when accessed externally. + +use jsonrpc_core as rpc; + +/// Signifies whether a potentially unsafe RPC should be denied. +#[derive(Clone, Copy, Debug)] +pub enum DenyUnsafe { + /// Denies only potentially unsafe RPCs. + Yes, + /// Allows calling every RPCs. + No +} + +impl DenyUnsafe { + /// Returns `Ok(())` if the RPCs considered unsafe are safe to call, + /// otherwise returns `Err(UnsafeRpcError)`. + pub fn check_if_safe(self) -> Result<(), UnsafeRpcError> { + match self { + DenyUnsafe::Yes => Err(UnsafeRpcError), + DenyUnsafe::No => Ok(()) + } + } +} + +/// Signifies whether an RPC considered unsafe is denied to be called externally. +#[derive(Debug)] +pub struct UnsafeRpcError; + +impl std::fmt::Display for UnsafeRpcError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "RPC call is unsafe to be called externally") + } +} + +impl std::error::Error for UnsafeRpcError {} + +impl From for rpc::Error { + fn from(_: UnsafeRpcError) -> rpc::Error { + rpc::Error::method_not_found() + } +} diff --git a/client/rpc-api/src/system/mod.rs b/client/rpc-api/src/system/mod.rs index e66ac97a683..486623477ec 100644 --- a/client/rpc-api/src/system/mod.rs +++ b/client/rpc-api/src/system/mod.rs @@ -72,14 +72,16 @@ pub trait SystemApi { /// Returns currently connected peers #[rpc(name = "system_peers", returns = "Vec>")] - fn system_peers(&self) -> Receiver>>; + fn system_peers(&self) + -> Compat>>>>; /// Returns current state of the network. /// /// **Warning**: This API is not stable. // TODO: make this stable and move structs https://github.com/paritytech/substrate/issues/1890 #[rpc(name = "system_networkState", returns = "jsonrpc_core::Value")] - fn system_network_state(&self) -> Receiver; + fn system_network_state(&self) + -> Compat>>; /// Adds a reserved peer. Returns the empty string or an error. The string /// parameter should encode a `p2p` multiaddr. diff --git a/client/rpc/src/author/mod.rs b/client/rpc/src/author/mod.rs index a3f23e8e143..23aed953d01 100644 --- a/client/rpc/src/author/mod.rs +++ b/client/rpc/src/author/mod.rs @@ -30,7 +30,7 @@ use rpc::futures::{ }; use futures::{StreamExt as _, compat::Compat}; use futures::future::{ready, FutureExt, TryFutureExt}; -use sc_rpc_api::Subscriptions; +use sc_rpc_api::{DenyUnsafe, Subscriptions}; use jsonrpc_pubsub::{typed::Subscriber, SubscriptionId}; use codec::{Encode, Decode}; use sp_core::{Bytes, traits::BareCryptoStorePtr}; @@ -56,6 +56,8 @@ pub struct Author { subscriptions: Subscriptions, /// The key store. keystore: BareCryptoStorePtr, + /// Whether to deny unsafe calls + deny_unsafe: DenyUnsafe, } impl Author { @@ -65,12 +67,14 @@ impl Author { pool: Arc

, subscriptions: Subscriptions, keystore: BareCryptoStorePtr, + deny_unsafe: DenyUnsafe, ) -> Self { Author { client, pool, subscriptions, keystore, + deny_unsafe, } } } @@ -97,6 +101,8 @@ impl AuthorApi, BlockHash

> for Author suri: String, public: Bytes, ) -> Result<()> { + self.deny_unsafe.check_if_safe()?; + let key_type = key_type.as_str().try_into().map_err(|_| Error::BadKeyType)?; let mut keystore = self.keystore.write(); keystore.insert_unknown(key_type, &suri, &public[..]) @@ -105,6 +111,8 @@ impl AuthorApi, BlockHash

> for Author } fn rotate_keys(&self) -> Result { + self.deny_unsafe.check_if_safe()?; + let best_block_hash = self.client.info().best_hash; self.client.runtime_api().generate_session_keys( &generic::BlockId::Hash(best_block_hash), @@ -113,6 +121,8 @@ impl AuthorApi, BlockHash

> for Author } fn has_session_keys(&self, session_keys: Bytes) -> Result { + self.deny_unsafe.check_if_safe()?; + let best_block_hash = self.client.info().best_hash; let keys = self.client.runtime_api().decode_session_keys( &generic::BlockId::Hash(best_block_hash), @@ -124,6 +134,8 @@ impl AuthorApi, BlockHash

> for Author } fn has_key(&self, public_key: Bytes, key_type: String) -> Result { + self.deny_unsafe.check_if_safe()?; + let key_type = key_type.as_str().try_into().map_err(|_| Error::BadKeyType)?; Ok(self.keystore.read().has_keys(&[(public_key.to_vec(), key_type)])) } @@ -151,6 +163,8 @@ impl AuthorApi, BlockHash

> for Author &self, bytes_or_hash: Vec>>, ) -> Result>> { + self.deny_unsafe.check_if_safe()?; + let hashes = bytes_or_hash.into_iter() .map(|x| match x { hash::ExtrinsicOrHash::Hash(h) => Ok(h), diff --git a/client/rpc/src/author/tests.rs b/client/rpc/src/author/tests.rs index 445888c523f..de2ee92fe36 100644 --- a/client/rpc/src/author/tests.rs +++ b/client/rpc/src/author/tests.rs @@ -83,6 +83,7 @@ impl TestSetup { pool: self.pool.clone(), subscriptions: Subscriptions::new(Arc::new(self.runtime.executor())), keystore: self.keystore.clone(), + deny_unsafe: DenyUnsafe::No, } } } diff --git a/client/rpc/src/lib.rs b/client/rpc/src/lib.rs index ea65785c20a..c4389913b4f 100644 --- a/client/rpc/src/lib.rs +++ b/client/rpc/src/lib.rs @@ -22,7 +22,7 @@ mod metadata; -pub use sc_rpc_api::Subscriptions; +pub use sc_rpc_api::{DenyUnsafe, Subscriptions}; pub use self::metadata::Metadata; pub use rpc::IoHandlerExtension as RpcExtension; diff --git a/client/rpc/src/offchain/mod.rs b/client/rpc/src/offchain/mod.rs index 61984d4845a..16c03395c73 100644 --- a/client/rpc/src/offchain/mod.rs +++ b/client/rpc/src/offchain/mod.rs @@ -21,6 +21,7 @@ mod tests; /// Re-export the API for backward compatibility. pub use sc_rpc_api::offchain::*; +use sc_rpc_api::DenyUnsafe; use self::error::{Error, Result}; use sp_core::{ Bytes, @@ -34,13 +35,15 @@ use std::sync::Arc; pub struct Offchain { /// Offchain storage storage: Arc>, + deny_unsafe: DenyUnsafe, } impl Offchain { /// Create new instance of Offchain API. - pub fn new(storage: T) -> Self { + pub fn new(storage: T, deny_unsafe: DenyUnsafe) -> Self { Offchain { storage: Arc::new(RwLock::new(storage)), + deny_unsafe, } } } @@ -48,6 +51,8 @@ impl Offchain { impl OffchainApi for Offchain { /// Set offchain local storage under given key and prefix. fn set_local_storage(&self, kind: StorageKind, key: Bytes, value: Bytes) -> Result<()> { + self.deny_unsafe.check_if_safe()?; + let prefix = match kind { StorageKind::PERSISTENT => sp_offchain::STORAGE_PREFIX, StorageKind::LOCAL => return Err(Error::UnavailableStorageKind), @@ -58,6 +63,8 @@ impl OffchainApi for Offchain { /// Get offchain local storage under given key and prefix. fn get_local_storage(&self, kind: StorageKind, key: Bytes) -> Result> { + self.deny_unsafe.check_if_safe()?; + let prefix = match kind { StorageKind::PERSISTENT => sp_offchain::STORAGE_PREFIX, StorageKind::LOCAL => return Err(Error::UnavailableStorageKind), diff --git a/client/rpc/src/offchain/tests.rs b/client/rpc/src/offchain/tests.rs index ac1a6a4de31..cb05f3d4dbb 100644 --- a/client/rpc/src/offchain/tests.rs +++ b/client/rpc/src/offchain/tests.rs @@ -21,7 +21,7 @@ use sp_core::{Bytes, offchain::storage::InMemOffchainStorage}; #[test] fn local_storage_should_work() { let storage = InMemOffchainStorage::default(); - let offchain = Offchain::new(storage); + let offchain = Offchain::new(storage, DenyUnsafe::No); let key = Bytes(b"offchain_storage".to_vec()); let value = Bytes(b"offchain_value".to_vec()); @@ -34,3 +34,20 @@ fn local_storage_should_work() { Ok(Some(ref v)) if *v == value ); } + +#[test] +fn offchain_calls_considered_unsafe() { + let storage = InMemOffchainStorage::default(); + let offchain = Offchain::new(storage, DenyUnsafe::Yes); + let key = Bytes(b"offchain_storage".to_vec()); + let value = Bytes(b"offchain_value".to_vec()); + + assert_matches!( + offchain.set_local_storage(StorageKind::PERSISTENT, key.clone(), value.clone()), + Err(Error::UnsafeRpcCalled(_)) + ); + assert_matches!( + offchain.get_local_storage(StorageKind::PERSISTENT, key), + Err(Error::UnsafeRpcCalled(_)) + ); +} diff --git a/client/rpc/src/system/mod.rs b/client/rpc/src/system/mod.rs index 84e06c20a67..2a19e5412ed 100644 --- a/client/rpc/src/system/mod.rs +++ b/client/rpc/src/system/mod.rs @@ -21,7 +21,7 @@ mod tests; use futures::{future::BoxFuture, FutureExt, TryFutureExt}; use futures::{channel::oneshot, compat::Compat}; -use sc_rpc_api::Receiver; +use sc_rpc_api::{DenyUnsafe, Receiver}; use sp_utils::mpsc::TracingUnboundedSender; use sp_runtime::traits::{self, Header as HeaderT}; @@ -31,10 +31,19 @@ pub use sc_rpc_api::system::*; pub use self::helpers::{SystemInfo, Health, PeerInfo, NodeRole}; pub use self::gen_client::Client as SystemClient; +macro_rules! bail_if_unsafe { + ($value: expr) => { + if let Err(err) = $value.check_if_safe() { + return async move { Err(err.into()) }.boxed().compat(); + } + }; +} + /// System API implementation pub struct System { info: SystemInfo, send_back: TracingUnboundedSender>, + deny_unsafe: DenyUnsafe, } /// Request to be processed. @@ -66,10 +75,12 @@ impl System { pub fn new( info: SystemInfo, send_back: TracingUnboundedSender>, + deny_unsafe: DenyUnsafe, ) -> Self { System { info, send_back, + deny_unsafe, } } } @@ -113,21 +124,37 @@ impl SystemApi::Number> for Sy Receiver(Compat::new(rx)) } - fn system_peers(&self) -> Receiver::Number>>> { + fn system_peers(&self) + -> Compat::Number>>>>> + { + bail_if_unsafe!(self.deny_unsafe); + let (tx, rx) = oneshot::channel(); let _ = self.send_back.unbounded_send(Request::Peers(tx)); - Receiver(Compat::new(rx)) + + async move { + rx.await.map_err(|_| rpc::Error::internal_error()) + }.boxed().compat() } - fn system_network_state(&self) -> Receiver { + fn system_network_state(&self) + -> Compat>> + { + bail_if_unsafe!(self.deny_unsafe); + let (tx, rx) = oneshot::channel(); let _ = self.send_back.unbounded_send(Request::NetworkState(tx)); - Receiver(Compat::new(rx)) + + async move { + rx.await.map_err(|_| rpc::Error::internal_error()) + }.boxed().compat() } fn system_add_reserved_peer(&self, peer: String) -> Compat>> { + bail_if_unsafe!(self.deny_unsafe); + let (tx, rx) = oneshot::channel(); let _ = self.send_back.unbounded_send(Request::NetworkAddReservedPeer(peer, tx)); async move { @@ -142,6 +169,8 @@ impl SystemApi::Number> for Sy fn system_remove_reserved_peer(&self, peer: String) -> Compat>> { + bail_if_unsafe!(self.deny_unsafe); + let (tx, rx) = oneshot::channel(); let _ = self.send_back.unbounded_send(Request::NetworkRemoveReservedPeer(peer, tx)); async move { diff --git a/client/rpc/src/system/tests.rs b/client/rpc/src/system/tests.rs index 921d941a1ca..d0ec6951260 100644 --- a/client/rpc/src/system/tests.rs +++ b/client/rpc/src/system/tests.rs @@ -109,13 +109,17 @@ fn api>>(sync: T) -> System { future::ready(()) })) }); - System::new(SystemInfo { - impl_name: "testclient".into(), - impl_version: "0.2.0".into(), - chain_name: "testchain".into(), - properties: Default::default(), - chain_type: Default::default(), - }, tx) + System::new( + SystemInfo { + impl_name: "testclient".into(), + impl_version: "0.2.0".into(), + chain_name: "testchain".into(), + properties: Default::default(), + chain_type: Default::default(), + }, + tx, + sc_rpc_api::DenyUnsafe::No + ) } fn wait_receiver(rx: Receiver) -> T { @@ -238,14 +242,19 @@ fn system_local_listen_addresses_works() { #[test] fn system_peers() { + let mut runtime = tokio::runtime::current_thread::Runtime::new().unwrap(); + let peer_id = PeerId::random(); + let req = api(Status { + peer_id: peer_id.clone(), + peers: 1, + is_syncing: false, + is_dev: true, + }).system_peers(); + let res = runtime.block_on(req).unwrap(); + assert_eq!( - wait_receiver(api(Status { - peer_id: peer_id.clone(), - peers: 1, - is_syncing: false, - is_dev: true, - }).system_peers()), + res, vec![PeerInfo { peer_id: peer_id.to_base58(), roles: "FULL".into(), @@ -258,7 +267,10 @@ fn system_peers() { #[test] fn system_network_state() { - let res = wait_receiver(api(None).system_network_state()); + let mut runtime = tokio::runtime::current_thread::Runtime::new().unwrap(); + let req = api(None).system_network_state(); + let res = runtime.block_on(req).unwrap(); + assert_eq!( serde_json::from_value::(res).unwrap(), sc_network::network_state::NetworkState { diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 90e644481f7..200707dad44 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -46,6 +46,7 @@ use sp_runtime::traits::{ use sp_api::ProvideRuntimeApi; use sc_executor::{NativeExecutor, NativeExecutionDispatch}; use std::{ + collections::HashMap, io::{Read, Write, Seek}, marker::PhantomData, sync::Arc, pin::Pin }; @@ -1001,7 +1002,7 @@ ServiceBuilder< // RPC let (system_rpc_tx, system_rpc_rx) = tracing_unbounded("mpsc_system_rpc"); - let gen_handler = || { + let gen_handler = |deny_unsafe: sc_rpc::DenyUnsafe| { use sc_rpc::{chain, state, author, system, offchain}; let system_info = sc_rpc::system::SystemInfo { @@ -1043,32 +1044,31 @@ ServiceBuilder< transaction_pool.clone(), subscriptions, keystore.clone(), + deny_unsafe, ); - let system = system::System::new(system_info, system_rpc_tx.clone()); - - match offchain_storage.clone() { - Some(storage) => { - let offchain = sc_rpc::offchain::Offchain::new(storage); - sc_rpc_server::rpc_handler(( - state::StateApi::to_delegate(state), - chain::ChainApi::to_delegate(chain), - offchain::OffchainApi::to_delegate(offchain), - author::AuthorApi::to_delegate(author), - system::SystemApi::to_delegate(system), - rpc_extensions.clone(), - )) - }, - None => sc_rpc_server::rpc_handler(( - state::StateApi::to_delegate(state), - chain::ChainApi::to_delegate(chain), - author::AuthorApi::to_delegate(author), - system::SystemApi::to_delegate(system), - rpc_extensions.clone(), - )) - } + let system = system::System::new(system_info, system_rpc_tx.clone(), deny_unsafe); + + let maybe_offchain_rpc = offchain_storage.clone() + .map(|storage| { + let offchain = sc_rpc::offchain::Offchain::new(storage, deny_unsafe); + // FIXME: Use plain Option (don't collect into HashMap) when we upgrade to jsonrpc 14.1 + // https://github.com/paritytech/jsonrpc/commit/20485387ed06a48f1a70bf4d609a7cde6cf0accf + let delegate = offchain::OffchainApi::to_delegate(offchain); + delegate.into_iter().collect::>() + }).unwrap_or_default(); + + sc_rpc_server::rpc_handler(( + state::StateApi::to_delegate(state), + chain::ChainApi::to_delegate(chain), + maybe_offchain_rpc, + author::AuthorApi::to_delegate(author), + system::SystemApi::to_delegate(system), + rpc_extensions.clone(), + )) }; - let rpc_handlers = gen_handler(); let rpc = start_rpc_servers(&config, gen_handler)?; + // This is used internally, so don't restrict access to unsafe RPC + let rpc_handlers = gen_handler(sc_rpc::DenyUnsafe::No); spawn_handle.spawn( "network-worker", diff --git a/client/service/src/config.rs b/client/service/src/config.rs index b90bed723f0..affb4aabfc6 100644 --- a/client/service/src/config.rs +++ b/client/service/src/config.rs @@ -59,6 +59,8 @@ pub struct Configuration { pub wasm_method: WasmExecutionMethod, /// Execution strategies. pub execution_strategies: ExecutionStrategies, + /// Whether potentially unsafe RPC is considered safe to be exposed. + pub unsafe_rpc_expose: bool, /// RPC over HTTP binding address. `None` if disabled. pub rpc_http: Option, /// RPC over Websockets binding address. `None` if disabled. diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 97481fcc251..039e0257ab5 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -511,7 +511,7 @@ mod waiting { /// Starts RPC servers that run in their own thread, and returns an opaque object that keeps them alive. #[cfg(not(target_os = "unknown"))] -fn start_rpc_servers sc_rpc_server::RpcHandler>( +fn start_rpc_servers sc_rpc_server::RpcHandler>( config: &Configuration, mut gen_handler: H ) -> Result, error::Error> { @@ -533,10 +533,23 @@ fn start_rpc_servers sc_rpc_server::RpcHandler>( }) } + fn deny_unsafe(addr: &Option, unsafe_rpc_expose: bool) -> sc_rpc::DenyUnsafe { + let is_exposed_addr = addr.map(|x| x.ip().is_loopback()).unwrap_or(false); + if is_exposed_addr && !unsafe_rpc_expose { + sc_rpc::DenyUnsafe::Yes + } else { + sc_rpc::DenyUnsafe::No + } + } + Ok(Box::new(( maybe_start_server( config.rpc_http, - |address| sc_rpc_server::start_http(address, config.rpc_cors.as_ref(), gen_handler()), + |address| sc_rpc_server::start_http( + address, + config.rpc_cors.as_ref(), + gen_handler(deny_unsafe(&config.rpc_http, config.unsafe_rpc_expose)), + ), )?.map(|s| waiting::HttpServer(Some(s))), maybe_start_server( config.rpc_ws, @@ -544,15 +557,15 @@ fn start_rpc_servers sc_rpc_server::RpcHandler>( address, config.rpc_ws_max_connections, config.rpc_cors.as_ref(), - gen_handler(), + gen_handler(deny_unsafe(&config.rpc_ws, config.unsafe_rpc_expose)), ), - )?.map(|s| waiting::WsServer(Some(s))).map(Mutex::new), + )?.map(|s| waiting::WsServer(Some(s))), ))) } /// Starts RPC servers that run in their own thread, and returns an opaque object that keeps them alive. #[cfg(target_os = "unknown")] -fn start_rpc_servers sc_rpc_server::RpcHandler>( +fn start_rpc_servers sc_rpc_server::RpcHandler>( _: &Configuration, _: H ) -> Result, error::Error> { diff --git a/client/service/test/src/lib.rs b/client/service/test/src/lib.rs index 1e824cb2734..9b9140dd8d3 100644 --- a/client/service/test/src/lib.rs +++ b/client/service/test/src/lib.rs @@ -184,6 +184,7 @@ fn node_config Date: Mon, 20 Apr 2020 13:13:45 +0200 Subject: [PATCH 003/167] Pass max-total to RewardRemainder on end_era (#5697) * Pass max-total to RewardRemainder on end_era * add test and event * add doc Co-authored-by: thiolliere --- frame/staking/src/inflation.rs | 5 +++-- frame/staking/src/lib.rs | 31 ++++++++++++++++++++++++++++--- frame/staking/src/mock.rs | 27 ++++++++++++++++++++++++++- frame/staking/src/tests.rs | 5 +++++ 4 files changed, 62 insertions(+), 6 deletions(-) diff --git a/frame/staking/src/inflation.rs b/frame/staking/src/inflation.rs index d20741d9bc4..63d008a197c 100644 --- a/frame/staking/src/inflation.rs +++ b/frame/staking/src/inflation.rs @@ -21,10 +21,11 @@ use sp_runtime::{Perbill, traits::AtLeast32Bit, curve::PiecewiseLinear}; -/// The total payout to all validators (and their nominators) per era. +/// The total payout to all validators (and their nominators) per era and maximum payout. /// /// Defined as such: -/// `payout = yearly_inflation(npos_token_staked / total_tokens) * total_tokens / era_per_year` +/// `staker-payout = yearly_inflation(npos_token_staked / total_tokens) * total_tokens / era_per_year` +/// `maximum-payout = max_yearly_inflation * total_tokens / era_per_year` /// /// `era_duration` is expressed in millisecond. pub fn compute_total_payout( diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index b6ffa9081bb..40fce5b0d44 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -172,6 +172,22 @@ //! //! ## Implementation Details //! +//! ### Era payout +//! +//! The era payout is computed using yearly inflation curve defined at +//! [`T::RewardCurve`](./trait.Trait.html#associatedtype.RewardCurve) as such: +//! +//! ```nocompile +//! staker_payout = yearly_inflation(npos_token_staked / total_tokens) * total_tokens / era_per_year +//! ``` +//! This payout is used to reward stakers as defined in next section +//! +//! ```nocompile +//! remaining_payout = max_yearly_inflation * total_tokens / era_per_year - staker_payout +//! ``` +//! The remaining reward is send to the configurable end-point +//! [`T::RewardRemainder`](./trait.Trait.html#associatedtype.RewardRemainder). +//! //! ### Reward Calculation //! //! Validators and nominators are rewarded at the end of each era. The total reward of an era is @@ -744,6 +760,7 @@ pub trait Trait: frame_system::Trait { type CurrencyToVote: Convert, VoteWeight> + Convert>; /// Tokens have been minted and are unused for validator-reward. + /// See [Era payout](./index.html#era-payout). type RewardRemainder: OnUnbalanced>; /// The overarching event type. @@ -772,7 +789,8 @@ pub trait Trait: frame_system::Trait { /// Interface for interacting with a session module. type SessionInterface: self::SessionInterface; - /// The NPoS reward curve to use. + /// The NPoS reward curve used to define yearly inflation. + /// See [Era payout](./index.html#era-payout). type RewardCurve: Get<&'static PiecewiseLinear<'static>>; /// Something that can estimate the next session change, accurately or as a best effort guess. @@ -1059,6 +1077,9 @@ decl_storage! { decl_event!( pub enum Event where Balance = BalanceOf, ::AccountId { + /// The era payout has been set; the first balance is the validator-payout; the second is + /// the remainder from the maximum amount of reward. + EraPayout(EraIndex, Balance, Balance), /// The staker has been rewarded by this amount. `AccountId` is the stash account. Reward(AccountId, Balance), /// One validator (and its nominators) has been slashed by the given amount. @@ -2570,16 +2591,20 @@ impl Module { let now_as_millis_u64 = T::UnixTime::now().as_millis().saturated_into::(); let era_duration = now_as_millis_u64 - active_era_start; - let (total_payout, _max_payout) = inflation::compute_total_payout( + let (validator_payout, max_payout) = inflation::compute_total_payout( &T::RewardCurve::get(), Self::eras_total_stake(&active_era.index), T::Currency::total_issuance(), // Duration of era; more than u64::MAX is rewarded as u64::MAX. era_duration.saturated_into::(), ); + let rest = max_payout.saturating_sub(validator_payout); + + Self::deposit_event(RawEvent::EraPayout(active_era.index, validator_payout, rest)); // Set ending era reward. - >::insert(&active_era.index, total_payout); + >::insert(&active_era.index, validator_payout); + T::RewardRemainder::on_unbalanced(T::Currency::issue(rest)); } } diff --git a/frame/staking/src/mock.rs b/frame/staking/src/mock.rs index d522a196159..20ec6f46a6b 100644 --- a/frame/staking/src/mock.rs +++ b/frame/staking/src/mock.rs @@ -277,11 +277,26 @@ parameter_types! { pub const UnsignedPriority: u64 = 1 << 20; } +thread_local! { + pub static REWARD_REMAINDER_UNBALANCED: RefCell = RefCell::new(0); +} + +pub struct RewardRemainderMock; + +impl OnUnbalanced> for RewardRemainderMock { + fn on_nonzero_unbalanced(amount: NegativeImbalanceOf) { + REWARD_REMAINDER_UNBALANCED.with(|v| { + *v.borrow_mut() += amount.peek(); + }); + drop(amount); + } +} + impl Trait for Test { type Currency = Balances; type UnixTime = Timestamp; type CurrencyToVote = CurrencyToVoteHandler; - type RewardRemainder = (); + type RewardRemainder = RewardRemainderMock; type Event = MetaEvent; type Slash = (); type Reward = (); @@ -976,3 +991,13 @@ macro_rules! assert_session_era { ); }; } + +pub(crate) fn staking_events() -> Vec> { + System::events().into_iter().map(|r| r.event).filter_map(|e| { + if let MetaEvent::staking(inner) = e { + Some(inner) + } else { + None + } + }).collect() +} diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index 15afda1e3af..3920b7bc0d7 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -152,6 +152,7 @@ fn rewards_should_work() { // should check that: // * rewards get recorded per session // * rewards get paid per Era + // * `RewardRemainder::on_unbalanced` is called // * Check that nominators are also rewarded ExtBuilder::default().nominate(true).build_and_execute(|| { let init_balance_10 = Balances::total_balance(&10); @@ -197,6 +198,8 @@ fn rewards_should_work() { start_session(3); assert_eq!(Staking::active_era().unwrap().index, 1); + assert_eq!(mock::REWARD_REMAINDER_UNBALANCED.with(|v| *v.borrow()), 7050); + assert_eq!(*mock::staking_events().last().unwrap(), RawEvent::EraPayout(0, 2350, 7050)); mock::make_all_reward_payment(0); assert_eq_error_rate!(Balances::total_balance(&10), init_balance_10 + part_for_10 * total_payout_0*2/3, 2); @@ -220,6 +223,8 @@ fn rewards_should_work() { assert!(total_payout_1 > 10); // Test is meaningful if reward something mock::start_era(2); + assert_eq!(mock::REWARD_REMAINDER_UNBALANCED.with(|v| *v.borrow()), 7050*2); + assert_eq!(*mock::staking_events().last().unwrap(), RawEvent::EraPayout(1, 2350, 7050)); mock::make_all_reward_payment(1); assert_eq_error_rate!(Balances::total_balance(&10), init_balance_10 + part_for_10 * (total_payout_0 * 2/3 + total_payout_1), 2); -- GitLab From f8879226cc05f19868d9647cb0bd799e65250f5c Mon Sep 17 00:00:00 2001 From: thiolliere Date: Mon, 20 Apr 2020 13:37:05 +0200 Subject: [PATCH 004/167] update code owners (#5700) --- docs/CODEOWNERS | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index d1eb924d0d3..ddb776ea22a 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -57,15 +57,12 @@ /primitives/consensus/pow/ @sorpaas # Contracts -/frame/contracts/ @pepyakin @thiolliere +/frame/contracts/ @pepyakin /frame/contracts/src/wasm/runtime.rs @Robbepop # EVM /frame/evm/ @sorpaas -# Inflation points -/frame/staking/src/inflation.rs @thiolliere - # NPoS and Governance and Phragmén /frame/staking/ @kianenigma /frame/elections/ @kianenigma @@ -73,7 +70,7 @@ /primitives/phragmen/ @kianenigma # Fixed point arithmetic -/primitives/sp-arithmetic/ @kianenigma @thiolliere +/primitives/sp-arithmetic/ @kianenigma # End to end testing of substrate node /bin/node/executor/ @kianenigma @@ -82,7 +79,7 @@ /frame/support/src/weights.rs @kianenigma # Support crates -/frame/support/ @thiolliere @kianenigma +/frame/support/ @kianenigma # Authority discovery /client/authority-discovery/ @mxinden -- GitLab From 217d5c60ca08bbecd368c330862f8a78dccc6359 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 20 Apr 2020 14:35:17 +0200 Subject: [PATCH 005/167] Move around definitions in sc_network (#5701) --- client/network/src/config.rs | 59 +++++++++++++++++- client/network/src/lib.rs | 37 +++++++++++- client/network/src/protocol.rs | 14 +++-- client/network/src/service.rs | 92 +---------------------------- client/network/src/service/tests.rs | 2 +- 5 files changed, 104 insertions(+), 100 deletions(-) diff --git a/client/network/src/config.rs b/client/network/src/config.rs index 4914ad680a4..c53d2734d25 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -21,7 +21,6 @@ pub use crate::chain::{Client, FinalityProofProvider}; pub use crate::on_demand_layer::{AlwaysBadChecker, OnDemand}; -pub use crate::service::{TransactionPool, EmptyTransactionPool}; pub use libp2p::{identity, core::PublicKey, wasm_ext::ExtTransport, build_multiaddr}; // Note: this re-export shouldn't be part of the public API of the crate and will be removed in @@ -29,17 +28,19 @@ pub use libp2p::{identity, core::PublicKey, wasm_ext::ExtTransport, build_multia #[doc(hidden)] pub use crate::protocol::ProtocolConfig; -use crate::service::ExHashT; +use crate::{ExHashT, ReportHandle}; use core::{fmt, iter}; use libp2p::identity::{ed25519, Keypair}; use libp2p::wasm_ext; use libp2p::{multiaddr, Multiaddr, PeerId}; use prometheus_endpoint::Registry; +use sc_peerset::ReputationChange; use sp_consensus::{block_validation::BlockAnnounceValidator, import_queue::ImportQueue}; use sp_runtime::{traits::Block as BlockT, ConsensusEngineId}; use std::{borrow::Cow, convert::TryFrom, future::Future, pin::Pin, str::FromStr}; use std::{ + collections::HashMap, error::Error, fs, io::{self, Write}, @@ -166,6 +167,60 @@ impl FinalityProofRequestBuilder for DummyFinalityProofRequestBuil /// Shared finality proof request builder struct used by the queue. pub type BoxFinalityProofRequestBuilder = Box + Send + Sync>; +/// Transaction pool interface +pub trait TransactionPool: Send + Sync { + /// Get transactions from the pool that are ready to be propagated. + fn transactions(&self) -> Vec<(H, B::Extrinsic)>; + /// Get hash of transaction. + fn hash_of(&self, transaction: &B::Extrinsic) -> H; + /// Import a transaction into the pool. + /// + /// Peer reputation is changed by reputation_change if transaction is accepted by the pool. + fn import( + &self, + report_handle: ReportHandle, + who: PeerId, + reputation_change_good: ReputationChange, + reputation_change_bad: ReputationChange, + transaction: B::Extrinsic, + ); + /// Notify the pool about transactions broadcast. + fn on_broadcasted(&self, propagations: HashMap>); + /// Get transaction by hash. + fn transaction(&self, hash: &H) -> Option; +} + +/// Dummy implementation of the [`TransactionPool`] trait for a transaction pool that is always +/// empty and discards all incoming transactions. +/// +/// Requires the "hash" type to implement the `Default` trait. +/// +/// Useful for testing purposes. +pub struct EmptyTransactionPool; + +impl TransactionPool for EmptyTransactionPool { + fn transactions(&self) -> Vec<(H, B::Extrinsic)> { + Vec::new() + } + + fn hash_of(&self, _transaction: &B::Extrinsic) -> H { + Default::default() + } + + fn import( + &self, + _report_handle: ReportHandle, + _who: PeerId, + _rep_change_good: ReputationChange, + _rep_change_bad: ReputationChange, + _transaction: B::Extrinsic + ) {} + + fn on_broadcasted(&self, _: HashMap>) {} + + fn transaction(&self, _h: &H) -> Option { None } +} + /// Name of a protocol, transmitted on the wire. Should be unique for each chain. #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ProtocolId(smallvec::SmallVec<[u8; 6]>); diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index d8afa1f1530..ed96215d207 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -246,7 +246,7 @@ pub mod config; pub mod error; pub mod network_state; -pub use service::{NetworkService, NetworkStateInfo, NetworkWorker, ExHashT, ReportHandle}; +pub use service::{NetworkService, NetworkWorker}; pub use protocol::PeerInfo; pub use protocol::event::{Event, DhtEvent, ObservedRole}; pub use protocol::sync::SyncState; @@ -264,3 +264,38 @@ pub use sc_peerset::ReputationChange; /// case of (possibly repeated) simultaneous dialing attempts between /// two peers, the per-peer connection limit is not set to 1 but 2. const MAX_CONNECTIONS_PER_PEER: usize = 2; + +/// Minimum Requirements for a Hash within Networking +pub trait ExHashT: std::hash::Hash + Eq + std::fmt::Debug + Clone + Send + Sync + 'static {} + +impl ExHashT for T where T: std::hash::Hash + Eq + std::fmt::Debug + Clone + Send + Sync + 'static +{} + +/// A cloneable handle for reporting cost/benefits of peers. +#[derive(Clone)] +pub struct ReportHandle { + inner: sc_peerset::PeersetHandle, // wraps it so we don't have to worry about breaking API. +} + +impl From for ReportHandle { + fn from(peerset_handle: sc_peerset::PeersetHandle) -> Self { + ReportHandle { inner: peerset_handle } + } +} + +impl ReportHandle { + /// Report a given peer as either beneficial (+) or costly (-) according to the + /// given scalar. + pub fn report_peer(&self, who: PeerId, cost_benefit: ReputationChange) { + self.inner.report_peer(who, cost_benefit); + } +} + +/// Trait for providing information about the local network state +pub trait NetworkStateInfo { + /// Returns the local external addresses. + fn external_addresses(&self) -> Vec; + + /// Returns the local Peer ID. + fn local_peer_id(&self) -> PeerId; +} diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 49479aa2d4f..f59a7752163 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -14,8 +14,14 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use crate::config::ProtocolId; -use crate::utils::interval; +use crate::{ + ExHashT, + chain::{Client, FinalityProofProvider}, + config::{BoxFinalityProofRequestBuilder, ProtocolId, TransactionPool}, + error, + utils::interval +}; + use bytes::{Bytes, BytesMut}; use futures::prelude::*; use generic_proto::{GenericProto, GenericProtoOut}; @@ -42,17 +48,13 @@ use message::{BlockAnnounce, Message}; use message::generic::{Message as GenericMessage, ConsensusMessage, Roles}; use prometheus_endpoint::{Registry, Gauge, GaugeVec, HistogramVec, PrometheusError, Opts, register, U64}; use sync::{ChainSync, SyncState}; -use crate::service::{TransactionPool, ExHashT}; -use crate::config::BoxFinalityProofRequestBuilder; use std::borrow::Cow; use std::collections::{BTreeMap, HashMap, HashSet, VecDeque}; use std::sync::Arc; use std::fmt::Write; use std::{cmp, io, num::NonZeroUsize, pin::Pin, task::Poll, time}; use log::{log, Level, trace, debug, warn, error}; -use crate::chain::{Client, FinalityProofProvider}; use sc_client_api::{ChangesProof, StorageProof}; -use crate::error; use util::LruHashSet; use wasm_timer::Instant; diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 091c75d6356..d29cb94ee8a 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -26,6 +26,7 @@ //! which is then processed by [`NetworkWorker::poll`]. use crate::{ + ExHashT, NetworkStateInfo, behaviour::{Behaviour, BehaviourOut}, config::{parse_addr, parse_str_addr, NonReservedPeerMode, Params, Role, TransportConfig}, discovery::DiscoveryConfig, @@ -57,7 +58,7 @@ use sp_runtime::{ use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender}; use std::{ borrow::Cow, - collections::{HashMap, HashSet}, + collections::HashSet, fs, io, marker::PhantomData, pin::Pin, @@ -73,86 +74,6 @@ mod out_events; #[cfg(test)] mod tests; -/// Minimum Requirements for a Hash within Networking -pub trait ExHashT: std::hash::Hash + Eq + std::fmt::Debug + Clone + Send + Sync + 'static {} - -impl ExHashT for T where T: std::hash::Hash + Eq + std::fmt::Debug + Clone + Send + Sync + 'static -{} - -/// Transaction pool interface -pub trait TransactionPool: Send + Sync { - /// Get transactions from the pool that are ready to be propagated. - fn transactions(&self) -> Vec<(H, B::Extrinsic)>; - /// Get hash of transaction. - fn hash_of(&self, transaction: &B::Extrinsic) -> H; - /// Import a transaction into the pool. - /// - /// Peer reputation is changed by reputation_change if transaction is accepted by the pool. - fn import( - &self, - report_handle: ReportHandle, - who: PeerId, - reputation_change_good: ReputationChange, - reputation_change_bad: ReputationChange, - transaction: B::Extrinsic, - ); - /// Notify the pool about transactions broadcast. - fn on_broadcasted(&self, propagations: HashMap>); - /// Get transaction by hash. - fn transaction(&self, hash: &H) -> Option; -} - -/// Dummy implementation of the [`TransactionPool`] trait for a transaction pool that is always -/// empty and discards all incoming transactions. -/// -/// Requires the "hash" type to implement the `Default` trait. -/// -/// Useful for testing purposes. -pub struct EmptyTransactionPool; - -impl TransactionPool for EmptyTransactionPool { - fn transactions(&self) -> Vec<(H, B::Extrinsic)> { - Vec::new() - } - - fn hash_of(&self, _transaction: &B::Extrinsic) -> H { - Default::default() - } - - fn import( - &self, - _report_handle: ReportHandle, - _who: PeerId, - _rep_change_good: ReputationChange, - _rep_change_bad: ReputationChange, - _transaction: B::Extrinsic - ) {} - - fn on_broadcasted(&self, _: HashMap>) {} - - fn transaction(&self, _h: &H) -> Option { None } -} - -/// A cloneable handle for reporting cost/benefits of peers. -#[derive(Clone)] -pub struct ReportHandle { - inner: PeersetHandle, // wraps it so we don't have to worry about breaking API. -} - -impl From for ReportHandle { - fn from(peerset_handle: PeersetHandle) -> Self { - ReportHandle { inner: peerset_handle } - } -} - -impl ReportHandle { - /// Report a given peer as either beneficial (+) or costly (-) according to the - /// given scalar. - pub fn report_peer(&self, who: PeerId, cost_benefit: ReputationChange) { - self.inner.report_peer(who, cost_benefit); - } -} - /// Substrate network service. Handles network IO and manages connectivity. pub struct NetworkService { /// Number of peers we're connected to. @@ -792,15 +713,6 @@ impl<'a, B: BlockT + 'static, H: ExHashT> sp_consensus::SyncOracle } } -/// Trait for providing information about the local network state -pub trait NetworkStateInfo { - /// Returns the local external addresses. - fn external_addresses(&self) -> Vec; - - /// Returns the local Peer ID. - fn local_peer_id(&self) -> PeerId; -} - impl NetworkStateInfo for NetworkService where B: sp_runtime::traits::Block, diff --git a/client/network/src/service/tests.rs b/client/network/src/service/tests.rs index a60b32efb41..84c393fbd2f 100644 --- a/client/network/src/service/tests.rs +++ b/client/network/src/service/tests.rs @@ -95,7 +95,7 @@ fn build_test_full_node(config: config::NetworkConfiguration) finality_proof_provider: None, finality_proof_request_builder: None, on_demand: None, - transaction_pool: Arc::new(crate::service::EmptyTransactionPool), + transaction_pool: Arc::new(crate::config::EmptyTransactionPool), protocol_id: config::ProtocolId::from(&b"/test-protocol-name"[..]), import_queue, block_announce_validator: Box::new( -- GitLab From b9a9589d23efb1043fc43e46ffe3817770d3494e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 20 Apr 2020 14:37:27 +0200 Subject: [PATCH 006/167] Improve tracing (#5698) * Improve tracing implementation * Enable tracing in runtime interfaces * Switch to `TRACE` level --- Cargo.lock | 14 +++- Cargo.toml | 1 + client/tracing/src/lib.rs | 14 +--- client/transaction-pool/Cargo.toml | 2 +- client/transaction-pool/src/api.rs | 14 ++-- frame/executive/Cargo.toml | 2 + frame/executive/src/lib.rs | 23 ++--- frame/support/Cargo.toml | 4 +- frame/support/src/dispatch.rs | 56 +++---------- frame/support/src/lib.rs | 37 +------- primitives/runtime-interface/Cargo.toml | 2 + .../bare_function_interface.rs | 2 + .../host_function_interface.rs | 1 + primitives/runtime-interface/src/lib.rs | 3 + primitives/runtime-interface/test/Cargo.toml | 1 + primitives/runtime-interface/test/src/lib.rs | 46 ++++++++++ primitives/tracing/Cargo.toml | 19 +++++ primitives/tracing/src/lib.rs | 84 +++++++++++++++++++ 18 files changed, 206 insertions(+), 119 deletions(-) create mode 100644 primitives/tracing/Cargo.toml create mode 100644 primitives/tracing/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index f7f85106414..078f0c67085 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1453,6 +1453,7 @@ dependencies = [ "sp-io", "sp-runtime", "sp-std", + "sp-tracing", "sp-version", ] @@ -1488,7 +1489,7 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-std", - "tracing", + "sp-tracing", ] [[package]] @@ -6765,12 +6766,12 @@ dependencies = [ "sp-core", "sp-keyring", "sp-runtime", + "sp-tracing", "sp-transaction-pool", "sp-utils", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "substrate-test-runtime-transaction-pool", - "tracing", "wasm-timer", ] @@ -7574,6 +7575,7 @@ dependencies = [ "sp-runtime-interface-test-wasm", "sp-state-machine", "sp-std", + "sp-tracing", "sp-wasm-interface", "static_assertions", "trybuild", @@ -7601,6 +7603,7 @@ dependencies = [ "sp-runtime-interface-test-wasm", "sp-runtime-interface-test-wasm-deprecated", "sp-state-machine", + "tracing", ] [[package]] @@ -7725,6 +7728,13 @@ dependencies = [ "wasm-timer", ] +[[package]] +name = "sp-tracing" +version = "2.0.0-dev" +dependencies = [ + "tracing", +] + [[package]] name = "sp-transaction-pool" version = "2.0.0-dev" diff --git a/Cargo.toml b/Cargo.toml index 5c4e93d84cb..f5ecad013c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -159,6 +159,7 @@ members = [ "primitives/timestamp", "primitives/test-primitives", "primitives/transaction-pool", + "primitives/tracing", "primitives/trie", "primitives/utils", "primitives/wasm-interface", diff --git a/client/tracing/src/lib.rs b/client/tracing/src/lib.rs index c00bca9275e..d450700ed3c 100644 --- a/client/tracing/src/lib.rs +++ b/client/tracing/src/lib.rs @@ -20,20 +20,8 @@ //! //! # Usage //! -//! Monitor performance throughout the codebase via the creation of `Span`s. -//! A span is set in the following way: -//! ``` -//! let span = tracing::span!(tracing::Level::INFO, "my_span_name"); -//! let _guard = span.enter(); -//! ``` -//! To begin timing, a span must be entered. When the span is dropped, the execution time -//! is recorded and details sent to the `Receiver` which defines how to process it. +//! See `sp-tracing` for examples on how to use tracing. //! -//! It's possible to record values with each span in the following way: -//! ``` -//! let span = tracing::span!(tracing::Level::INFO, "my_span_name", my_number = 10, a_key = "a value"); -//! let _guard = span.enter(); -//! ``` //! Currently we provide `Log` (default), `Telemetry` variants for `Receiver` use std::collections::HashMap; diff --git a/client/transaction-pool/Cargo.toml b/client/transaction-pool/Cargo.toml index c96e4c03324..6d4f69676c6 100644 --- a/client/transaction-pool/Cargo.toml +++ b/client/transaction-pool/Cargo.toml @@ -26,10 +26,10 @@ sc-transaction-graph = { version = "2.0.0-dev", path = "./graph" } sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", path = "../../primitives/tracing" } sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -tracing = "0.1.10" wasm-timer = "0.2" [dev-dependencies] diff --git a/client/transaction-pool/src/api.rs b/client/transaction-pool/src/api.rs index 2e590ccad8a..bd7e11a3a69 100644 --- a/client/transaction-pool/src/api.rs +++ b/client/transaction-pool/src/api.rs @@ -89,17 +89,17 @@ impl sc_transaction_graph::ChainApi for FullChainApi, _>( &at, |v| v >= 2, ) - .unwrap_or_default(); - std::mem::drop(guard); - let span = tracing::span!(tracing::Level::DEBUG, "validate_transaction"); - let _guard = span.enter(); + .unwrap_or_default() + }; + + sp_tracing::enter_span!("runtime::validate_transaction"); let res = if has_v2 { runtime_api.validate_transaction(&at, source, uxt) } else { diff --git a/frame/executive/Cargo.toml b/frame/executive/Cargo.toml index f46dc8462d3..3e0e1c938a8 100644 --- a/frame/executive/Cargo.toml +++ b/frame/executive/Cargo.toml @@ -17,6 +17,7 @@ frame-support = { version = "2.0.0-dev", default-features = false, path = "../su frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } serde = { version = "1.0.101", optional = true } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } @@ -37,5 +38,6 @@ std = [ "frame-system/std", "serde", "sp-runtime/std", + "sp-tracing/std", "sp-std/std", ] diff --git a/frame/executive/src/lib.rs b/frame/executive/src/lib.rs index 747fc858668..f3a4388dcfd 100644 --- a/frame/executive/src/lib.rs +++ b/frame/executive/src/lib.rs @@ -348,25 +348,20 @@ where source: TransactionSource, uxt: Block::Extrinsic, ) -> TransactionValidity { - use frame_support::tracing_span; + use sp_tracing::tracing_span; - tracing_span!{ "validate_transaction::using_encoded"; - let encoded_len = uxt.using_encoded(|d| d.len()); - }; + sp_tracing::enter_span!("validate_transaction"); - tracing_span!{ "validate_transaction::check"; - let xt = uxt.check(&Default::default())?; - }; + let encoded_len = tracing_span!{ "using_encoded"; uxt.using_encoded(|d| d.len()) }; - tracing_span!{ "validate_transaction::dispatch_info"; - let dispatch_info = xt.get_dispatch_info(); - }; + let xt = tracing_span!{ "check"; uxt.check(&Default::default())? }; - tracing_span!{ "validate_transaction::validate"; - let result = xt.validate::(source, &dispatch_info, encoded_len); - }; + let dispatch_info = tracing_span!{ "dispatch_info"; xt.get_dispatch_info() }; - result + tracing_span! { + "validate"; + xt.validate::(source, &dispatch_info, encoded_len) + } } /// Start an offchain worker and generate extrinsics. diff --git a/frame/support/Cargo.toml b/frame/support/Cargo.toml index aee2dd79fc6..0168705da7e 100644 --- a/frame/support/Cargo.toml +++ b/frame/support/Cargo.toml @@ -19,6 +19,7 @@ frame-metadata = { version = "11.0.0-dev", default-features = false, path = "../ sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../../primitives/arithmetic" } sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } @@ -28,7 +29,6 @@ once_cell = { version = "1", default-features = false, optional = true } sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } bitmask = { version = "0.5.0", default-features = false } impl-trait-for-tuples = "0.1.3" -tracing = { version = "0.1.10", optional = true } [dev-dependencies] pretty_assertions = "0.6.1" @@ -37,7 +37,6 @@ frame-system = { version = "2.0.0-dev", path = "../system" } [features] default = ["std"] std = [ - "tracing", "once_cell", "bitmask/std", "serde", @@ -45,6 +44,7 @@ std = [ "codec/std", "sp-std/std", "sp-runtime/std", + "sp-tracing/std", "sp-arithmetic/std", "frame-metadata/std", "sp-inherents/std", diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 8512ccb0a8e..4287f2c1ceb 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -1030,12 +1030,7 @@ macro_rules! decl_module { for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )* { fn on_initialize(_block_number_not_used: $trait_instance::BlockNumber) -> $return { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, "on_initialize"); - let _enter = span.enter(); - } + $crate::sp_tracing::enter_span!("on_initialize"); { $( $impl )* } } } @@ -1051,12 +1046,7 @@ macro_rules! decl_module { for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )* { fn on_initialize($param: $param_ty) -> $return { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, "on_initialize"); - let _enter = span.enter(); - } + $crate::sp_tracing::enter_span!("on_initialize"); { $( $impl )* } } } @@ -1082,12 +1072,7 @@ macro_rules! decl_module { for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )* { fn on_runtime_upgrade() -> $return { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, "on_runtime_upgrade"); - let _enter = span.enter(); - } + $crate::sp_tracing::enter_span!("on_runtime_upgrade"); { $( $impl )* } } } @@ -1114,12 +1099,7 @@ macro_rules! decl_module { for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )* { fn on_finalize(_block_number_not_used: $trait_instance::BlockNumber) { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, "on_finalize"); - let _enter = span.enter(); - } + $crate::sp_tracing::enter_span!("on_finalize"); { $( $impl )* } } } @@ -1135,12 +1115,7 @@ macro_rules! decl_module { for $module<$trait_instance$(, $instance)?> where $( $other_where_bounds )* { fn on_finalize($param: $param_ty) { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, "on_finalize"); - let _enter = span.enter(); - } + $crate::sp_tracing::enter_span!("on_finalize"); { $( $impl )* } } } @@ -1209,15 +1184,9 @@ macro_rules! decl_module { $vis fn $name( $origin: $origin_ty $(, $param: $param_ty )* ) -> $crate::dispatch::DispatchResult { - $crate::sp_std::if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, stringify!($name)); - let _enter = span.enter(); - } - { - { $( $impl )* } - Ok(()) - } + $crate::sp_tracing::enter_span!(stringify!($name)); + { $( $impl )* } + Ok(()) } }; @@ -1234,13 +1203,8 @@ macro_rules! decl_module { ) => { $(#[doc = $doc_attr])* $vis fn $name($origin: $origin_ty $(, $param: $param_ty )* ) -> $result { - use $crate::sp_std::if_std; - if_std! { - use $crate::tracing; - let span = tracing::span!(tracing::Level::DEBUG, stringify!($name)); - let _enter = span.enter(); - } - { $( $impl )* } + $crate::sp_tracing::enter_span!(stringify!($name)); + $( $impl )* } }; diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index eed5c95b17e..8a88496eda0 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -23,8 +23,9 @@ extern crate self as frame_support; #[macro_use] extern crate bitmask; -#[cfg(feature = "std")] -pub extern crate tracing; + +#[doc(hidden)] +pub use sp_tracing; #[cfg(feature = "std")] pub use serde; @@ -222,38 +223,6 @@ macro_rules! assert_ok { } } -/// Runs given code within a tracing span, measuring it's execution time. -/// -/// Has effect only when running in native environment. In WASM, it simply inserts the -/// code in-place, without any metrics added. -#[macro_export] -macro_rules! tracing_span { - ($name:expr; $( $code:tt )*) => { - let span = $crate::if_tracing!( - $crate::tracing::span!($crate::tracing::Level::TRACE, $name) - , - () - ); - let guard = $crate::if_tracing!(span.enter(), ()); - $( $code )* - - $crate::sp_std::mem::drop(guard); - $crate::sp_std::mem::drop(span); - } -} - -#[macro_export] -#[cfg(feature = "tracing")] -macro_rules! if_tracing { - ( $if:expr, $else:expr ) => {{ $if }} -} - -#[macro_export] -#[cfg(not(feature = "tracing"))] -macro_rules! if_tracing { - ( $if:expr, $else:expr ) => {{ $else }} -} - /// The void type - it cannot exist. // Oh rust, you crack me up... #[derive(Clone, Eq, PartialEq, RuntimeDebug)] diff --git a/primitives/runtime-interface/Cargo.toml b/primitives/runtime-interface/Cargo.toml index 362d79f1501..1d0ae8f9512 100644 --- a/primitives/runtime-interface/Cargo.toml +++ b/primitives/runtime-interface/Cargo.toml @@ -15,6 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sp-wasm-interface = { version = "2.0.0-dev", path = "../wasm-interface", default-features = false } sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../tracing" } sp-runtime-interface-proc-macro = { version = "2.0.0-dev", path = "proc-macro" } sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } @@ -34,6 +35,7 @@ default = [ "std" ] std = [ "sp-wasm-interface/std", "sp-std/std", + "sp-tracing/std", "codec/std", "sp-externalities", "primitive-types/std", diff --git a/primitives/runtime-interface/proc-macro/src/runtime_interface/bare_function_interface.rs b/primitives/runtime-interface/proc-macro/src/runtime_interface/bare_function_interface.rs index e7c34fbf993..8e83556f045 100644 --- a/primitives/runtime-interface/proc-macro/src/runtime_interface/bare_function_interface.rs +++ b/primitives/runtime-interface/proc-macro/src/runtime_interface/bare_function_interface.rs @@ -146,6 +146,7 @@ fn function_std_impl( is_wasm_only: bool, ) -> Result { let function_name = create_function_ident_with_version(&method.sig.ident, version); + let function_name_str = function_name.to_string(); let crate_ = generate_crate_access(); let args = get_function_arguments(&method.sig).map(FnArg::Typed).chain( @@ -172,6 +173,7 @@ fn function_std_impl( #[cfg(feature = "std")] #( #attrs )* fn #function_name( #( #args, )* ) #return_value { + #crate_::sp_tracing::enter_span!(#function_name_str); #call_to_trait } } diff --git a/primitives/runtime-interface/proc-macro/src/runtime_interface/host_function_interface.rs b/primitives/runtime-interface/proc-macro/src/runtime_interface/host_function_interface.rs index 205ee87105c..46de98c3c3f 100644 --- a/primitives/runtime-interface/proc-macro/src/runtime_interface/host_function_interface.rs +++ b/primitives/runtime-interface/proc-macro/src/runtime_interface/host_function_interface.rs @@ -226,6 +226,7 @@ fn generate_host_function_implementation( __function_context__: &mut dyn #crate_::sp_wasm_interface::FunctionContext, args: &mut dyn Iterator, ) -> std::result::Result, String> { + #crate_::sp_tracing::enter_span!(#name); #( #wasm_to_ffi_values )* #( #ffi_to_host_values )* #host_function_call diff --git a/primitives/runtime-interface/src/lib.rs b/primitives/runtime-interface/src/lib.rs index fd158d4b8aa..4f748825e5b 100644 --- a/primitives/runtime-interface/src/lib.rs +++ b/primitives/runtime-interface/src/lib.rs @@ -109,6 +109,9 @@ extern crate self as sp_runtime_interface; #[cfg(feature = "std")] pub use sp_wasm_interface; +#[doc(hidden)] +pub use sp_tracing; + #[doc(hidden)] pub use sp_std; diff --git a/primitives/runtime-interface/test/Cargo.toml b/primitives/runtime-interface/test/Cargo.toml index b3cdb906be1..0809eeb8a1c 100644 --- a/primitives/runtime-interface/test/Cargo.toml +++ b/primitives/runtime-interface/test/Cargo.toml @@ -19,3 +19,4 @@ sp-runtime-interface-test-wasm-deprecated = { version = "2.0.0-dev", path = "../ sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } sp-io = { version = "2.0.0-dev", path = "../../io" } +tracing = "0.1.13" diff --git a/primitives/runtime-interface/test/src/lib.rs b/primitives/runtime-interface/test/src/lib.rs index 110eda980fd..8815a17a087 100644 --- a/primitives/runtime-interface/test/src/lib.rs +++ b/primitives/runtime-interface/test/src/lib.rs @@ -27,6 +27,8 @@ use sp_runtime_interface_test_wasm_deprecated::WASM_BINARY as WASM_BINARY_DEPREC use sp_wasm_interface::HostFunctions as HostFunctionsT; use sc_executor::CallInWasm; +use std::{collections::HashSet, sync::{Arc, Mutex}}; + type TestExternalities = sp_state_machine::TestExternalities; fn call_wasm_method(binary: &[u8], method: &str) -> TestExternalities { @@ -150,3 +152,47 @@ fn test_versionining_with_new_host_works() { "test_versionning_works", ); } + +#[test] +fn test_tracing() { + use tracing::span::Id as SpanId; + + #[derive(Clone)] + struct TracingSubscriber(Arc>); + + #[derive(Default)] + struct Inner { + spans: HashSet<&'static str>, + } + + impl tracing::subscriber::Subscriber for TracingSubscriber { + fn enabled(&self, _: &tracing::Metadata) -> bool { true } + + fn new_span(&self, span: &tracing::span::Attributes) -> tracing::Id { + let mut inner = self.0.lock().unwrap(); + let id = SpanId::from_u64((inner.spans.len() + 1) as _); + inner.spans.insert(span.metadata().name()); + id + } + + fn record(&self, _: &SpanId, _: &tracing::span::Record) {} + + fn record_follows_from(&self, _: &SpanId, _: &SpanId) {} + + fn event(&self, _: &tracing::Event) {} + + fn enter(&self, _: &SpanId) {} + + fn exit(&self, _: &SpanId) {} + } + + let subscriber = TracingSubscriber(Default::default()); + let _guard = tracing::subscriber::set_default(subscriber.clone()); + + // Call some method to generate a trace + call_wasm_method::(&WASM_BINARY[..], "test_return_data"); + + let inner = subscriber.0.lock().unwrap(); + assert!(inner.spans.contains("return_input_version_1")); + assert!(inner.spans.contains("ext_test_api_return_input_version_1")); +} diff --git a/primitives/tracing/Cargo.toml b/primitives/tracing/Cargo.toml new file mode 100644 index 00000000000..8eb3bc2beaa --- /dev/null +++ b/primitives/tracing/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "sp-tracing" +version = "2.0.0-dev" +license = "GPL-3.0" +authors = ["Parity Technologies "] +edition = "2018" +homepage = "https://substrate.dev" +repository = "https://github.com/paritytech/substrate/" +description = "Instrumentation primitives and macros for Substrate." + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +tracing = { version = "0.1.13", optional = true } + +[features] +default = [ "std" ] +std = [ "tracing" ] diff --git a/primitives/tracing/src/lib.rs b/primitives/tracing/src/lib.rs new file mode 100644 index 00000000000..e5bc93cf9ee --- /dev/null +++ b/primitives/tracing/src/lib.rs @@ -0,0 +1,84 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Substrate tracing primitives and macros. +//! +//! To trace functions or invidual code in Substrate, this crate provides [`tracing_span`] +//! and [`enter_span`]. See the individual docs for how to use these macros. + +#![cfg_attr(not(feature = "std"), no_std)] + +#[cfg(feature = "std")] +#[doc(hidden)] +pub use tracing; + +/// Runs given code within a tracing span, measuring it's execution time. +/// +/// If tracing is not enabled, the code is still executed. +/// +/// # Example +/// +/// ``` +/// sp_tracing::tracing_span! { +/// "test-span"; +/// 1 + 1; +/// // some other complex code +/// } +/// ``` +#[macro_export] +macro_rules! tracing_span { + ( + $name:expr; + $( $code:tt )* + ) => { + { + $crate::enter_span!($name); + $( $code )* + } + } +} + +/// Enter a span. +/// +/// The span will be valid, until the scope is left. +/// +/// # Example +/// +/// ``` +/// sp_tracing::enter_span!("test-span"); +/// ``` +#[macro_export] +macro_rules! enter_span { + ( $name:expr ) => { + let __tracing_span__ = $crate::if_tracing!( + $crate::tracing::span!($crate::tracing::Level::TRACE, $name) + ); + let __tracing_guard__ = $crate::if_tracing!(__tracing_span__.enter()); + } +} + +/// Generates the given code if the tracing dependency is enabled. +#[macro_export] +#[cfg(feature = "std")] +macro_rules! if_tracing { + ( $if:expr ) => {{ $if }} +} + +#[macro_export] +#[cfg(not(feature = "std"))] +macro_rules! if_tracing { + ( $if:expr ) => {{}} +} -- GitLab From 9207eda27cd2a58c3b482034b205988dde67928e Mon Sep 17 00:00:00 2001 From: Ashley Date: Mon, 20 Apr 2020 14:45:13 +0200 Subject: [PATCH 007/167] Add a crate to test the in-browser light client. (#4887) Co-Authored-By: Pierre Krieger --- .gitlab-ci.yml | 13 +++- Cargo.lock | 43 +++++++++++++ Cargo.toml | 1 + bin/node/browser-testing/Cargo.toml | 21 +++++++ bin/node/browser-testing/src/lib.rs | 84 +++++++++++++++++++++++++ bin/node/browser-testing/webdriver.json | 7 +++ bin/node/cli/src/browser.rs | 1 - 7 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 bin/node/browser-testing/Cargo.toml create mode 100644 bin/node/browser-testing/src/lib.rs create mode 100644 bin/node/browser-testing/webdriver.json diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a7cf6f2ed8f..e5eba33e554 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -40,6 +40,9 @@ variables: # FIXME set to release CARGO_UNLEASH_INSTALL_PARAMS: "--version 1.0.0-alpha.10" CARGO_UNLEASH_PKG_DEF: "--skip node node-* pallet-template pallet-example pallet-example-* subkey chain-spec-builder sp-arithmetic-fuzzer" + CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER: "wasm-bindgen-test-runner" + WASM_BINDGEN_TEST_TIMEOUT: 120 + CHROMEDRIVER_ARGS: "--log-level=INFO --whitelisted-ips=127.0.0.1" .collect-artifacts: &collect-artifacts @@ -312,7 +315,6 @@ test-linux-stable-int: paths: - ${CI_COMMIT_SHORT_SHA}_int_failure.log - check-web-wasm: stage: test <<: *docker-env @@ -354,6 +356,15 @@ test-full-crypto-feature: #### stage: build +test-browser-node: + stage: build + <<: *docker-env + needs: + - job: check-web-wasm + artifacts: false + script: + - cargo +nightly test --target wasm32-unknown-unknown -p node-browser-testing -Z features=itarget + build-linux-substrate: &build-binary stage: build <<: *collect-artifacts diff --git a/Cargo.lock b/Cargo.lock index 078f0c67085..fd131ec18fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3372,6 +3372,23 @@ dependencies = [ "tempfile", ] +[[package]] +name = "node-browser-testing" +version = "2.0.0" +dependencies = [ + "futures 0.3.4", + "futures-timer 3.0.2", + "jsonrpc-core", + "libp2p", + "node-cli", + "sc-rpc-api", + "serde", + "serde_json", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", +] + [[package]] name = "node-cli" version = "2.0.0-dev" @@ -9075,6 +9092,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" dependencies = [ "cfg-if", + "serde", + "serde_json", "wasm-bindgen-macro", ] @@ -9134,6 +9153,30 @@ version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" +[[package]] +name = "wasm-bindgen-test" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648da3460c6d2aa04b715a936329e2e311180efe650b2127d6267f4193ccac14" +dependencies = [ + "console_error_panic_hook", + "js-sys", + "scoped-tls", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2f86cd78a2aa7b1fb4bb6ed854eccb7f9263089c79542dca1576a1518a8467" +dependencies = [ + "proc-macro2", + "quote 1.0.3", +] + [[package]] name = "wasm-gc-api" version = "0.1.11" diff --git a/Cargo.toml b/Cargo.toml index f5ecad013c0..abb0cca39c4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "bin/node-template/runtime", "bin/node-template/pallets/template", "bin/node/bench", + "bin/node/browser-testing", "bin/node/cli", "bin/node/executor", "bin/node/primitives", diff --git a/bin/node/browser-testing/Cargo.toml b/bin/node/browser-testing/Cargo.toml new file mode 100644 index 00000000000..4b8d08af90a --- /dev/null +++ b/bin/node/browser-testing/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "node-browser-testing" +version = "2.0.0" +authors = ["Parity Technologies "] +description = "Tests for the in-browser light client." +edition = "2018" +license = "GPL-3.0" + +[dependencies] +futures-timer = "3.0.2" +libp2p = { version = "0.18.0", default-features = false } +jsonrpc-core = "14.0.5" +serde = "1.0.106" +serde_json = "1.0.48" +wasm-bindgen = { version = "0.2.60", features = ["serde-serialize"] } +wasm-bindgen-futures = "0.4.10" +wasm-bindgen-test = "0.3.10" +futures = "0.3.4" + +node-cli = { path = "../cli", default-features = false, features = ["browser"] } +sc-rpc-api = { path = "../../../client/rpc-api" } diff --git a/bin/node/browser-testing/src/lib.rs b/bin/node/browser-testing/src/lib.rs new file mode 100644 index 00000000000..06038f90af7 --- /dev/null +++ b/bin/node/browser-testing/src/lib.rs @@ -0,0 +1,84 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! # Running +//! Running this test can be done with +//! ```text +//! wasm-pack test --firefox --release --headless bin/node/browser-testing +//! ``` +//! or (without `wasm-pack`) +//! ```text +//! CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner WASM_BINDGEN_TEST_TIMEOUT=60 cargo test --target wasm32-unknown-unknown +//! ``` +//! For debug infomation, such as the informant, run without the `--headless` +//! flag and open a browser to the url that `wasm-pack test` outputs. +//! For more infomation see https://rustwasm.github.io/docs/wasm-pack/. + +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; +use wasm_bindgen_futures::JsFuture; +use wasm_bindgen::JsValue; +use jsonrpc_core::types::{MethodCall, Success, Version, Params, Id}; +use serde::de::DeserializeOwned; +use futures_timer::Delay; +use std::time::Duration; +use futures::FutureExt; + +wasm_bindgen_test_configure!(run_in_browser); + +const CHAIN_SPEC: &str = include_str!("../../cli/res/flaming-fir.json"); + +fn rpc_call(method: &str) -> String { + serde_json::to_string(&MethodCall { + jsonrpc: Some(Version::V2), + method: method.into(), + params: Params::None, + id: Id::Num(1) + }).unwrap() +} + +fn deserialize_rpc_result(js_value: JsValue) -> T { + let string = js_value.as_string().unwrap(); + let value = serde_json::from_str::(&string).unwrap().result; + // We need to convert a `Value::Object` into a proper type. + let value_string = serde_json::to_string(&value).unwrap(); + serde_json::from_str(&value_string).unwrap() +} + +#[wasm_bindgen_test] +async fn runs() { + let mut client = node_cli::start_client(CHAIN_SPEC.into(), "info".into()) + .await + .unwrap(); + + let mut test_timeout = Delay::new(Duration::from_secs(45)); + loop { + // Check that timeout hasn't expired. + assert!((&mut test_timeout).now_or_never().is_none(), "Test timed out."); + + // Let the node do a bit of work. + Delay::new(Duration::from_secs(5)).await; + + let state: sc_rpc_api::system::Health = deserialize_rpc_result( + JsFuture::from(client.rpc_send(&rpc_call("system_health"))) + .await + .unwrap() + ); + + if state.should_have_peers && state.peers > 0 && state.is_syncing { + break; + } + } +} diff --git a/bin/node/browser-testing/webdriver.json b/bin/node/browser-testing/webdriver.json new file mode 100644 index 00000000000..417ac35a7bc --- /dev/null +++ b/bin/node/browser-testing/webdriver.json @@ -0,0 +1,7 @@ +{ + "goog:chromeOptions": { + "args": [ + "--whitelisted-ips=127.0.0.1" + ] + } +} diff --git a/bin/node/cli/src/browser.rs b/bin/node/cli/src/browser.rs index 6cd98dfe8d0..8c4d964d958 100644 --- a/bin/node/cli/src/browser.rs +++ b/bin/node/cli/src/browser.rs @@ -17,7 +17,6 @@ use crate::chain_spec::ChainSpec; use log::info; use wasm_bindgen::prelude::*; -use sc_service::Configuration; use browser_utils::{ Client, browser_configuration, set_console_error_panic_hook, init_console_log, -- GitLab From 89c598442291cf9c8e6621bf004f8f5fa598870a Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Mon, 20 Apr 2020 15:05:20 +0200 Subject: [PATCH 008/167] Implement `try_mutate` for storage value and storage double map (#5699) * impl try_mutate for storage value and storage double map * Docs + Reuse `try_mutate` in `mutate` --- frame/support/src/dispatch.rs | 6 +-- frame/support/src/error.rs | 2 +- frame/support/src/lib.rs | 4 ++ .../src/storage/generator/double_map.rs | 18 +++++-- frame/support/src/storage/generator/map.rs | 22 ++------ frame/support/src/storage/generator/mod.rs | 52 +++++++++++++++++++ frame/support/src/storage/generator/value.rs | 19 +++++-- frame/support/src/storage/mod.rs | 26 ++++++++++ 8 files changed, 116 insertions(+), 33 deletions(-) diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 4287f2c1ceb..31e3efb001a 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -46,10 +46,6 @@ pub type DispatchResult = Result<(), sp_runtime::DispatchError>; pub type DispatchErrorWithPostInfo = sp_runtime::DispatchErrorWithPostInfo; - -/// A type that cannot be instantiated. -pub enum Never {} - /// Serializable version of Dispatchable. /// This value can be used as a "function" in an extrinsic. pub trait Callable { @@ -1316,7 +1312,7 @@ macro_rules! decl_module { { #[doc(hidden)] #[codec(skip)] - __PhantomItem($crate::sp_std::marker::PhantomData<($trait_instance, $($instance)?)>, $crate::dispatch::Never), + __PhantomItem($crate::sp_std::marker::PhantomData<($trait_instance, $($instance)?)>, $crate::Never), $( $generated_variants )* } }; diff --git a/frame/support/src/error.rs b/frame/support/src/error.rs index a06f4688922..2fdba881564 100644 --- a/frame/support/src/error.rs +++ b/frame/support/src/error.rs @@ -89,7 +89,7 @@ macro_rules! decl_error { #[doc(hidden)] __Ignore( $crate::sp_std::marker::PhantomData<($generic, $( $inst_generic)?)>, - $crate::dispatch::Never, + $crate::Never, ), $( $( #[doc = $doc_attr] )* diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index 8a88496eda0..49ad802d07d 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -78,6 +78,10 @@ pub use self::storage::{ pub use self::dispatch::{Parameter, Callable, IsSubType}; pub use sp_runtime::{self, ConsensusEngineId, print, traits::Printable}; +/// A type that cannot be instantiated. +#[derive(Debug)] +pub enum Never {} + /// Macro for easily creating a new implementation of the `Get` trait. Use similarly to /// how you would declare a `const`: /// diff --git a/frame/support/src/storage/generator/double_map.rs b/frame/support/src/storage/generator/double_map.rs index e23b332383c..c7e4c10017e 100644 --- a/frame/support/src/storage/generator/double_map.rs +++ b/frame/support/src/storage/generator/double_map.rs @@ -17,7 +17,7 @@ use sp_std::prelude::*; use sp_std::borrow::Borrow; use codec::{Ref, FullCodec, FullEncode, Decode, Encode, EncodeLike, EncodeAppend}; -use crate::{storage::{self, unhashed}, traits::Len}; +use crate::{storage::{self, unhashed}, traits::Len, Never}; use crate::hash::{StorageHasher, Twox128, ReversibleStorageHasher}; /// Generator for `StorageDoubleMap` used by `decl_storage`. @@ -223,14 +223,24 @@ impl storage::StorageDoubleMap for G where KArg1: EncodeLike, KArg2: EncodeLike, F: FnOnce(&mut Self::Query) -> R, + { + Self::try_mutate(k1, k2, |v| Ok::(f(v))).expect("`Never` can not be constructed; qed") + } + + fn try_mutate(k1: KArg1, k2: KArg2, f: F) -> Result where + KArg1: EncodeLike, + KArg2: EncodeLike, + F: FnOnce(&mut Self::Query) -> Result, { let final_key = Self::storage_double_map_final_key(k1, k2); let mut val = G::from_optional_value_to_query(unhashed::get(final_key.as_ref())); let ret = f(&mut val); - match G::from_query_to_optional_value(val) { - Some(ref val) => unhashed::put(final_key.as_ref(), val), - None => unhashed::kill(final_key.as_ref()), + if ret.is_ok() { + match G::from_query_to_optional_value(val) { + Some(ref val) => unhashed::put(final_key.as_ref(), val), + None => unhashed::kill(final_key.as_ref()), + } } ret } diff --git a/frame/support/src/storage/generator/map.rs b/frame/support/src/storage/generator/map.rs index c29a9a223aa..cc871072f5f 100644 --- a/frame/support/src/storage/generator/map.rs +++ b/frame/support/src/storage/generator/map.rs @@ -18,7 +18,7 @@ use sp_std::prelude::*; use sp_std::borrow::Borrow; use codec::{FullCodec, FullEncode, Decode, Encode, EncodeLike, Ref, EncodeAppend}; -use crate::{storage::{self, unhashed}, traits::Len}; +use crate::{storage::{self, unhashed}, traits::Len, Never}; use crate::hash::{StorageHasher, Twox128, ReversibleStorageHasher}; /// Generator for `StorageMap` used by `decl_storage`. @@ -229,27 +229,11 @@ impl> storage::StorageMap } fn mutate, R, F: FnOnce(&mut Self::Query) -> R>(key: KeyArg, f: F) -> R { - let final_key = Self::storage_map_final_key(key); - let mut val = G::from_optional_value_to_query(unhashed::get(final_key.as_ref())); - - let ret = f(&mut val); - match G::from_query_to_optional_value(val) { - Some(ref val) => unhashed::put(final_key.as_ref(), &val), - None => unhashed::kill(final_key.as_ref()), - } - ret + Self::try_mutate(key, |v| Ok::(f(v))).expect("`Never` can not be constructed; qed") } fn mutate_exists, R, F: FnOnce(&mut Option) -> R>(key: KeyArg, f: F) -> R { - let final_key = Self::storage_map_final_key(key); - let mut val = unhashed::get(final_key.as_ref()); - - let ret = f(&mut val); - match val { - Some(ref val) => unhashed::put(final_key.as_ref(), &val), - None => unhashed::kill(final_key.as_ref()), - } - ret + Self::try_mutate_exists(key, |v| Ok::(f(v))).expect("`Never` can not be constructed; qed") } fn try_mutate, R, E, F: FnOnce(&mut Self::Query) -> Result>( diff --git a/frame/support/src/storage/generator/mod.rs b/frame/support/src/storage/generator/mod.rs index 687d8a3c936..07e75055f35 100644 --- a/frame/support/src/storage/generator/mod.rs +++ b/frame/support/src/storage/generator/mod.rs @@ -37,6 +37,7 @@ mod tests { use sp_io::TestExternalities; use codec::Encode; use crate::storage::{unhashed, generator::StorageValue, IterableStorageMap}; + use crate::{assert_noop, assert_ok}; struct Runtime {} pub trait Trait { @@ -57,6 +58,7 @@ mod tests { trait Store for Module as Runtime { Value get(fn value) config(): (u64, u64); NumberMap: map hasher(identity) u32 => u64; + DoubleMap: double_map hasher(identity) u32, hasher(identity) u32 => u64; } } @@ -102,4 +104,54 @@ mod tests { ); }) } + + #[test] + fn try_mutate_works() { + let t = GenesisConfig::default().build_storage().unwrap(); + TestExternalities::new(t).execute_with(|| { + assert_eq!(Value::get(), (0, 0)); + assert_eq!(NumberMap::get(0), 0); + assert_eq!(DoubleMap::get(0, 0), 0); + + // `assert_noop` ensures that the state does not change + assert_noop!(Value::try_mutate(|value| -> Result<(), &'static str> { + *value = (2, 2); + Err("don't change value") + }), "don't change value"); + + assert_noop!(NumberMap::try_mutate(0, |value| -> Result<(), &'static str> { + *value = 4; + Err("don't change value") + }), "don't change value"); + + assert_noop!(DoubleMap::try_mutate(0, 0, |value| -> Result<(), &'static str> { + *value = 6; + Err("don't change value") + }), "don't change value"); + + // Showing this explicitly for clarity + assert_eq!(Value::get(), (0, 0)); + assert_eq!(NumberMap::get(0), 0); + assert_eq!(DoubleMap::get(0, 0), 0); + + assert_ok!(Value::try_mutate(|value| -> Result<(), &'static str> { + *value = (2, 2); + Ok(()) + })); + + assert_ok!(NumberMap::try_mutate(0, |value| -> Result<(), &'static str> { + *value = 4; + Ok(()) + })); + + assert_ok!(DoubleMap::try_mutate(0, 0, |value| -> Result<(), &'static str> { + *value = 6; + Ok(()) + })); + + assert_eq!(Value::get(), (2, 2)); + assert_eq!(NumberMap::get(0), 4); + assert_eq!(DoubleMap::get(0, 0), 6); + }); + } } diff --git a/frame/support/src/storage/generator/value.rs b/frame/support/src/storage/generator/value.rs index 9e26131f489..dd9bbded4b8 100644 --- a/frame/support/src/storage/generator/value.rs +++ b/frame/support/src/storage/generator/value.rs @@ -17,7 +17,12 @@ #[cfg(not(feature = "std"))] use sp_std::prelude::*; use codec::{FullCodec, Encode, EncodeAppend, EncodeLike, Decode}; -use crate::{storage::{self, unhashed}, hash::{Twox128, StorageHasher}, traits::Len}; +use crate::{ + Never, + storage::{self, unhashed}, + hash::{Twox128, StorageHasher}, + traits::Len +}; /// Generator for `StorageValue` used by `decl_storage`. /// @@ -104,12 +109,18 @@ impl> storage::StorageValue for G { } fn mutate R>(f: F) -> R { + Self::try_mutate(|v| Ok::(f(v))).expect("`Never` can not be constructed; qed") + } + + fn try_mutate Result>(f: F) -> Result { let mut val = G::get(); let ret = f(&mut val); - match G::from_query_to_optional_value(val) { - Some(ref val) => G::put(val), - None => G::kill(), + if ret.is_ok() { + match G::from_query_to_optional_value(val) { + Some(ref val) => G::put(val), + None => G::kill(), + } } ret } diff --git a/frame/support/src/storage/mod.rs b/frame/support/src/storage/mod.rs index 47201e22e60..3a811c20e36 100644 --- a/frame/support/src/storage/mod.rs +++ b/frame/support/src/storage/mod.rs @@ -80,6 +80,9 @@ pub trait StorageValue { /// Mutate the value fn mutate R>(f: F) -> R; + /// Mutate the value if closure returns `Ok` + fn try_mutate Result>(f: F) -> Result; + /// Clear the storage value. fn kill(); @@ -280,21 +283,25 @@ pub trait StorageDoubleMap { /// The type that get/take returns. type Query; + /// Get the storage key used to fetch a value corresponding to a specific key. fn hashed_key_for(k1: KArg1, k2: KArg2) -> Vec where KArg1: EncodeLike, KArg2: EncodeLike; + /// Does the value (explicitly) exist in storage? fn contains_key(k1: KArg1, k2: KArg2) -> bool where KArg1: EncodeLike, KArg2: EncodeLike; + /// Load the value associated with the given key from the double map. fn get(k1: KArg1, k2: KArg2) -> Self::Query where KArg1: EncodeLike, KArg2: EncodeLike; + /// Take a value from storage, removing it afterwards. fn take(k1: KArg1, k2: KArg2) -> Self::Query where KArg1: EncodeLike, @@ -308,28 +315,43 @@ pub trait StorageDoubleMap { YKArg1: EncodeLike, YKArg2: EncodeLike; + /// Store a value to be associated with the given keys from the double map. fn insert(k1: KArg1, k2: KArg2, val: VArg) where KArg1: EncodeLike, KArg2: EncodeLike, VArg: EncodeLike; + /// Remove the value under the given keys. fn remove(k1: KArg1, k2: KArg2) where KArg1: EncodeLike, KArg2: EncodeLike; + /// Remove all values under the first key. fn remove_prefix(k1: KArg1) where KArg1: ?Sized + EncodeLike; + /// Iterate over values that share the first key. fn iter_prefix_values(k1: KArg1) -> PrefixIterator where KArg1: ?Sized + EncodeLike; + /// Mutate the value under the given keys. fn mutate(k1: KArg1, k2: KArg2, f: F) -> R where KArg1: EncodeLike, KArg2: EncodeLike, F: FnOnce(&mut Self::Query) -> R; + /// Mutate the value under the given keys when the closure returns `Ok`. + fn try_mutate(k1: KArg1, k2: KArg2, f: F) -> Result + where + KArg1: EncodeLike, + KArg2: EncodeLike, + F: FnOnce(&mut Self::Query) -> Result; + + /// Append the given item to the value in the storage. + /// + /// `V` is required to implement `codec::EncodeAppend`. fn append( k1: KArg1, k2: KArg2, @@ -344,6 +366,10 @@ pub trait StorageDoubleMap { Items: IntoIterator, Items::IntoIter: ExactSizeIterator; + /// Safely append the given items to the value in the storage. If a codec error occurs, then the + /// old (presumably corrupt) value is replaced with the given `items`. + /// + /// `V` is required to implement `codec::EncodeAppend`. fn append_or_insert( k1: KArg1, k2: KArg2, -- GitLab From fc6e2a625d807509605c8e790ba3f5136236aa12 Mon Sep 17 00:00:00 2001 From: cheme Date: Mon, 20 Apr 2020 15:21:22 +0200 Subject: [PATCH 009/167] Child trie api changes BREAKING (#4857) Co-Authored-By: thiolliere --- Cargo.lock | 21 ++ bin/node/cli/res/flaming-fir.json | 2 +- bin/node/executor/tests/basic.rs | 12 +- bin/node/executor/tests/fees.rs | 2 +- client/api/src/backend.rs | 14 +- client/api/src/light.rs | 11 +- client/api/src/proof_provider.rs | 7 +- client/chain-spec/src/chain_spec.rs | 47 +-- client/db/src/bench.rs | 40 +-- client/db/src/changes_tries_storage.rs | 3 +- client/db/src/lib.rs | 53 ++- client/db/src/storage_cache.rs | 72 ++-- client/executor/src/integration_tests/mod.rs | 4 +- client/network/src/protocol.rs | 71 ++-- .../src/protocol/light_client_handler.rs | 80 ++--- client/network/src/protocol/message.rs | 5 - .../src/protocol/schema/light.v1.proto | 8 +- client/rpc-api/src/child_state/mod.rs | 69 ++++ client/rpc-api/src/lib.rs | 1 + client/rpc-api/src/state/mod.rs | 44 --- client/rpc/src/state/mod.rs | 212 ++++++------ client/rpc/src/state/state_full.rs | 143 ++++---- client/rpc/src/state/state_light.rs | 129 ++++--- client/rpc/src/state/tests.rs | 55 ++- client/service/src/builder.rs | 11 +- client/src/client.rs | 39 +-- client/src/in_mem.rs | 11 +- client/src/light/backend.rs | 37 +- client/src/light/fetcher.rs | 28 +- frame/contracts/src/account_db.rs | 13 +- frame/contracts/src/lib.rs | 39 +-- frame/contracts/src/rent.rs | 10 +- frame/contracts/src/tests.rs | 3 - frame/support/src/storage/child.rs | 195 +++++------ frame/support/test/tests/instance.rs | 2 +- frame/system/src/lib.rs | 2 +- primitives/externalities/src/lib.rs | 36 +- primitives/io/src/lib.rs | 275 +++++++-------- primitives/runtime/src/lib.rs | 8 +- primitives/state-machine/src/backend.rs | 70 ++-- primitives/state-machine/src/basic.rs | 98 +++--- .../state-machine/src/changes_trie/build.rs | 107 +++--- .../src/changes_trie/build_cache.rs | 15 +- .../src/changes_trie/changes_iterator.rs | 26 +- .../state-machine/src/changes_trie/input.rs | 5 +- .../state-machine/src/changes_trie/mod.rs | 3 +- .../state-machine/src/changes_trie/prune.rs | 3 +- .../state-machine/src/changes_trie/storage.rs | 5 +- primitives/state-machine/src/ext.rs | 157 ++++----- .../state-machine/src/in_memory_backend.rs | 86 +++-- primitives/state-machine/src/lib.rs | 58 ++-- .../state-machine/src/overlayed_changes.rs | 98 +++--- .../state-machine/src/proving_backend.rs | 65 ++-- primitives/state-machine/src/testing.rs | 10 +- primitives/state-machine/src/trie_backend.rs | 48 ++- .../state-machine/src/trie_backend_essence.rs | 58 ++-- primitives/storage/Cargo.toml | 1 + primitives/storage/src/lib.rs | 323 ++++++++++-------- primitives/trie/src/lib.rs | 10 +- test-utils/client/src/lib.rs | 18 +- test-utils/runtime/client/src/lib.rs | 21 +- test-utils/runtime/src/genesismap.rs | 4 +- test-utils/runtime/src/lib.rs | 22 +- test-utils/runtime/src/system.rs | 2 +- 64 files changed, 1493 insertions(+), 1634 deletions(-) create mode 100644 client/rpc-api/src/child_state/mod.rs diff --git a/Cargo.lock b/Cargo.lock index fd131ec18fa..325d602c8ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5536,6 +5536,26 @@ dependencies = [ "rust-argon2", ] +[[package]] +name = "ref-cast" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "077f197a31bfe7e4169145f9eca08d32705c6c6126c139c26793acdf163ac3ef" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c36eb52b69b87c9e3a07387f476c88fd0dba9a1713b38e56617ed66b45392c1f" +dependencies = [ + "proc-macro2", + "quote 1.0.3", + "syn 1.0.17", +] + [[package]] name = "regex" version = "1.3.6" @@ -7715,6 +7735,7 @@ name = "sp-storage" version = "2.0.0-dev" dependencies = [ "impl-serde 0.2.3", + "ref-cast", "serde", "sp-debug-derive", "sp-std", diff --git a/bin/node/cli/res/flaming-fir.json b/bin/node/cli/res/flaming-fir.json index 7ed98239b54..3612d7284fa 100644 --- a/bin/node/cli/res/flaming-fir.json +++ b/bin/node/cli/res/flaming-fir.json @@ -134,7 +134,7 @@ "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x00" }, - "children": {} + "childrenDefault": {} } } } diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 7fdf4e9c596..5b3d8f20e9d 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -170,7 +170,7 @@ fn panic_execution_with_foreign_code_gives_error() { vec![0u8; 32] } ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( @@ -206,7 +206,7 @@ fn bad_extrinsic_with_native_equivalent_code_gives_error() { vec![0u8; 32] } ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( @@ -240,7 +240,7 @@ fn successful_execution_with_native_equivalent_code_gives_ok() { }, >::hashed_key_for(0) => vec![0u8; 32] ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( @@ -282,7 +282,7 @@ fn successful_execution_with_foreign_code_gives_ok() { }, >::hashed_key_for(0) => vec![0u8; 32] ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( @@ -704,7 +704,7 @@ fn panic_execution_gives_error() { }, >::hashed_key_for(0) => vec![0u8; 32] ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( @@ -738,7 +738,7 @@ fn successful_execution_gives_ok() { }, >::hashed_key_for(0) => vec![0u8; 32] ], - children: map![], + children_default: map![], }); let r = executor_call:: _>( diff --git a/bin/node/executor/tests/fees.rs b/bin/node/executor/tests/fees.rs index 32fef3b3266..91c58d68fca 100644 --- a/bin/node/executor/tests/fees.rs +++ b/bin/node/executor/tests/fees.rs @@ -143,7 +143,7 @@ fn transaction_fee_is_correct_ultimate() { }, >::hashed_key_for(0) => vec![0u8; 32] ], - children: map![], + children_default: map![], }); let tip = 1_000_000; diff --git a/client/api/src/backend.rs b/client/api/src/backend.rs index d10e62cc549..33a370c7cb2 100644 --- a/client/api/src/backend.rs +++ b/client/api/src/backend.rs @@ -26,7 +26,7 @@ use sp_state_machine::{ ChangesTrieState, ChangesTrieStorage as StateChangesTrieStorage, ChangesTrieTransaction, StorageCollection, ChildStorageCollection, }; -use sp_storage::{StorageData, StorageKey, ChildInfo}; +use sp_storage::{StorageData, StorageKey, PrefixedStorageKey, ChildInfo}; use crate::{ blockchain::{ Backend as BlockchainBackend, well_known_cache_keys @@ -280,6 +280,7 @@ impl<'a, State, Block> Iterator for KeyIterator<'a, State, Block> where Some(StorageKey(next_key)) } } + /// Provides acess to storage primitives pub trait StorageProvider> { /// Given a `BlockId` and a key, return the value under the key in that block. @@ -310,8 +311,7 @@ pub trait StorageProvider> { fn child_storage( &self, id: &BlockId, - storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &StorageKey ) -> sp_blockchain::Result>; @@ -319,8 +319,7 @@ pub trait StorageProvider> { fn child_storage_keys( &self, id: &BlockId, - child_storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key_prefix: &StorageKey ) -> sp_blockchain::Result>; @@ -328,8 +327,7 @@ pub trait StorageProvider> { fn child_storage_hash( &self, id: &BlockId, - storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &StorageKey ) -> sp_blockchain::Result>; @@ -351,7 +349,7 @@ pub trait StorageProvider> { &self, first: NumberFor, last: BlockId, - storage_key: Option<&StorageKey>, + storage_key: Option<&PrefixedStorageKey>, key: &StorageKey ) -> sp_blockchain::Result, u32)>>; } diff --git a/client/api/src/light.rs b/client/api/src/light.rs index c0bebc1740a..30e6d14d557 100644 --- a/client/api/src/light.rs +++ b/client/api/src/light.rs @@ -26,7 +26,7 @@ use sp_runtime::{ }, generic::BlockId }; -use sp_core::ChangesTrieConfigurationRange; +use sp_core::{ChangesTrieConfigurationRange, storage::PrefixedStorageKey}; use sp_state_machine::StorageProof; use sp_blockchain::{ HeaderMetadata, well_known_cache_keys, HeaderBackend, Cache as BlockchainCache, @@ -81,12 +81,7 @@ pub struct RemoteReadChildRequest { /// Header of block at which read is performed. pub header: Header, /// Storage key for child. - pub storage_key: Vec, - /// Child trie source information. - pub child_info: Vec, - /// Child type, its required to resolve `child_info` - /// content and choose child implementation. - pub child_type: u32, + pub storage_key: PrefixedStorageKey, /// Child storage key to read. pub keys: Vec>, /// Number of times to retry request. None means that default RETRY_COUNT is used. @@ -110,7 +105,7 @@ pub struct RemoteChangesRequest { /// Proofs for roots of ascendants of tries_roots.0 are provided by the remote node. pub tries_roots: (Header::Number, Header::Hash, Vec), /// Optional Child Storage key to read. - pub storage_key: Option>, + pub storage_key: Option, /// Storage key to read. pub key: Vec, /// Number of times to retry request. None means that default RETRY_COUNT is used. diff --git a/client/api/src/proof_provider.rs b/client/api/src/proof_provider.rs index 2d9876f7ad2..93160855eae 100644 --- a/client/api/src/proof_provider.rs +++ b/client/api/src/proof_provider.rs @@ -19,7 +19,7 @@ use sp_runtime::{ traits::{Block as BlockT}, }; use crate::{StorageProof, ChangesProof}; -use sp_storage::{ChildInfo, StorageKey}; +use sp_storage::{ChildInfo, StorageKey, PrefixedStorageKey}; /// Interface for providing block proving utilities. pub trait ProofProvider { @@ -35,8 +35,7 @@ pub trait ProofProvider { fn read_child_proof( &self, id: &BlockId, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, keys: &mut dyn Iterator, ) -> sp_blockchain::Result; @@ -65,7 +64,7 @@ pub trait ProofProvider { last: Block::Hash, min: Block::Hash, max: Block::Hash, - storage_key: Option<&StorageKey>, + storage_key: Option<&PrefixedStorageKey>, key: &StorageKey, ) -> sp_blockchain::Result>; } diff --git a/client/chain-spec/src/chain_spec.rs b/client/chain-spec/src/chain_spec.rs index 9f3a10ee897..fbe7b7e7a8e 100644 --- a/client/chain-spec/src/chain_spec.rs +++ b/client/chain-spec/src/chain_spec.rs @@ -74,17 +74,14 @@ impl BuildStorage for ChainSpec { fn build_storage(&self) -> Result { match self.genesis.resolve()? { Genesis::Runtime(gc) => gc.build_storage(), - Genesis::Raw(RawGenesis { top: map, children: children_map }) => Ok(Storage { + Genesis::Raw(RawGenesis { top: map, children_default: children_map }) => Ok(Storage { top: map.into_iter().map(|(k, v)| (k.0, v.0)).collect(), - children: children_map.into_iter().map(|(sk, child_content)| { - let child_info = ChildInfo::resolve_child_info( - child_content.child_type, - child_content.child_info.as_slice(), - ).expect("chain spec contains correct content").to_owned(); + children_default: children_map.into_iter().map(|(storage_key, child_content)| { + let child_info = ChildInfo::new_default(storage_key.0.as_slice()); ( - sk.0, + storage_key.0, StorageChild { - data: child_content.data.into_iter().map(|(k, v)| (k.0, v.0)).collect(), + data: child_content.into_iter().map(|(k, v)| (k.0, v.0)).collect(), child_info, }, ) @@ -103,22 +100,13 @@ impl BuildStorage for ChainSpec { type GenesisStorage = HashMap; -#[derive(Serialize, Deserialize)] -#[serde(rename_all = "camelCase")] -#[serde(deny_unknown_fields)] -struct ChildRawStorage { - data: GenesisStorage, - child_info: Vec, - child_type: u32, -} - #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] #[serde(deny_unknown_fields)] /// Storage content for genesis block. struct RawGenesis { top: GenesisStorage, - children: HashMap, + children_default: HashMap, } #[derive(Serialize, Deserialize)] @@ -291,23 +279,16 @@ impl ChainSpec { let top = storage.top.into_iter() .map(|(k, v)| (StorageKey(k), StorageData(v))) .collect(); - let children = storage.children.into_iter() - .map(|(sk, child)| { - let info = child.child_info.as_ref(); - let (info, ci_type) = info.info(); - ( - StorageKey(sk), - ChildRawStorage { - data: child.data.into_iter() - .map(|(k, v)| (StorageKey(k), StorageData(v))) - .collect(), - child_info: info.to_vec(), - child_type: ci_type, - }, - )}) + let children_default = storage.children_default.into_iter() + .map(|(sk, child)| ( + StorageKey(sk), + child.data.into_iter() + .map(|(k, v)| (StorageKey(k), StorageData(v))) + .collect(), + )) .collect(); - Genesis::Raw(RawGenesis { top, children }) + Genesis::Raw(RawGenesis { top, children_default }) }, (_, genesis) => genesis, }; diff --git a/client/db/src/bench.rs b/client/db/src/bench.rs index ddac2109d75..9d6f595498b 100644 --- a/client/db/src/bench.rs +++ b/client/db/src/bench.rs @@ -77,10 +77,9 @@ impl BenchmarkingState { }; state.reopen()?; - let child_delta = genesis.children.into_iter().map(|(storage_key, child_content)| ( - storage_key, + let child_delta = genesis.children_default.into_iter().map(|(_storage_key, child_content)| ( + child_content.child_info, child_content.data.into_iter().map(|(k, v)| (k, Some(v))), - child_content.child_info )); let (root, transaction): (B::Hash, _) = state.state.borrow_mut().as_mut().unwrap().full_storage_root( genesis.top.into_iter().map(|(k, v)| (k, Some(v))), @@ -129,11 +128,10 @@ impl StateBackend> for BenchmarkingState { fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.state.borrow().as_ref().ok_or_else(state_err)?.child_storage(storage_key, child_info, key) + self.state.borrow().as_ref().ok_or_else(state_err)?.child_storage(child_info, key) } fn exists_storage(&self, key: &[u8]) -> Result { @@ -142,11 +140,10 @@ impl StateBackend> for BenchmarkingState { fn exists_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result { - self.state.borrow().as_ref().ok_or_else(state_err)?.exists_child_storage(storage_key, child_info, key) + self.state.borrow().as_ref().ok_or_else(state_err)?.exists_child_storage(child_info, key) } fn next_storage_key(&self, key: &[u8]) -> Result>, Self::Error> { @@ -155,11 +152,10 @@ impl StateBackend> for BenchmarkingState { fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.state.borrow().as_ref().ok_or_else(state_err)?.next_child_storage_key(storage_key, child_info, key) + self.state.borrow().as_ref().ok_or_else(state_err)?.next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -176,24 +172,22 @@ impl StateBackend> for BenchmarkingState { fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { if let Some(ref state) = *self.state.borrow() { - state.for_keys_in_child_storage(storage_key, child_info, f) + state.for_keys_in_child_storage(child_info, f) } } fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { if let Some(ref state) = *self.state.borrow() { - state.for_child_keys_with_prefix(storage_key, child_info, prefix, f) + state.for_child_keys_with_prefix(child_info, prefix, f) } } @@ -205,13 +199,12 @@ impl StateBackend> for BenchmarkingState { fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (B::Hash, bool, Self::Transaction) where I: IntoIterator, Option>)>, { - self.state.borrow().as_ref().map_or(Default::default(), |s| s.child_storage_root(storage_key, child_info, delta)) + self.state.borrow().as_ref().map_or(Default::default(), |s| s.child_storage_root(child_info, delta)) } fn pairs(&self) -> Vec<(Vec, Vec)> { @@ -224,11 +217,10 @@ impl StateBackend> for BenchmarkingState { fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec> { - self.state.borrow().as_ref().map_or(Default::default(), |s| s.child_keys(storage_key, child_info, prefix)) + self.state.borrow().as_ref().map_or(Default::default(), |s| s.child_keys(child_info, prefix)) } fn as_trie_backend(&mut self) diff --git a/client/db/src/changes_tries_storage.rs b/client/db/src/changes_tries_storage.rs index 5447e8b7256..985251f403d 100644 --- a/client/db/src/changes_tries_storage.rs +++ b/client/db/src/changes_tries_storage.rs @@ -26,6 +26,7 @@ use sp_trie::MemoryDB; use sc_client_api::backend::PrunableStateChangesTrieStorage; use sp_blockchain::{well_known_cache_keys, Cache as BlockchainCache}; use sp_core::{ChangesTrieConfiguration, ChangesTrieConfigurationRange, convert_hash}; +use sp_core::storage::PrefixedStorageKey; use sp_database::Transaction; use sp_runtime::traits::{ Block as BlockT, Header as HeaderT, HashFor, NumberFor, One, Zero, CheckedSub, @@ -482,7 +483,7 @@ where fn with_cached_changed_keys( &self, root: &Block::Hash, - functor: &mut dyn FnMut(&HashMap>, HashSet>>), + functor: &mut dyn FnMut(&HashMap, HashSet>>), ) -> bool { self.build_cache.read().with_changed_keys(root, functor) } diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index 782e0f6db2a..579ea2db4ad 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -159,11 +159,10 @@ impl StateBackend> for RefTrackingState { fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.state.child_storage(storage_key, child_info, key) + self.state.child_storage(child_info, key) } fn exists_storage(&self, key: &[u8]) -> Result { @@ -172,11 +171,10 @@ impl StateBackend> for RefTrackingState { fn exists_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result { - self.state.exists_child_storage(storage_key, child_info, key) + self.state.exists_child_storage(child_info, key) } fn next_storage_key(&self, key: &[u8]) -> Result>, Self::Error> { @@ -185,11 +183,10 @@ impl StateBackend> for RefTrackingState { fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.state.next_child_storage_key(storage_key, child_info, key) + self.state.next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -202,21 +199,19 @@ impl StateBackend> for RefTrackingState { fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - self.state.for_keys_in_child_storage(storage_key, child_info, f) + self.state.for_keys_in_child_storage(child_info, f) } fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.state.for_child_keys_with_prefix(storage_key, child_info, prefix, f) + self.state.for_child_keys_with_prefix(child_info, prefix, f) } fn storage_root(&self, delta: I) -> (B::Hash, Self::Transaction) @@ -228,14 +223,13 @@ impl StateBackend> for RefTrackingState { fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (B::Hash, bool, Self::Transaction) where I: IntoIterator, Option>)>, { - self.state.child_storage_root(storage_key, child_info, delta) + self.state.child_storage_root(child_info, delta) } fn pairs(&self) -> Vec<(Vec, Vec)> { @@ -248,11 +242,10 @@ impl StateBackend> for RefTrackingState { fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec> { - self.state.child_keys(storage_key, child_info, prefix) + self.state.child_keys(child_info, prefix) } fn as_trie_backend(&mut self) @@ -631,16 +624,10 @@ impl sc_client_api::backend::BlockImportOperation for Bloc return Err(sp_blockchain::Error::GenesisInvalid.into()); } - for child_key in storage.children.keys() { - if !well_known_keys::is_child_storage_key(&child_key) { - return Err(sp_blockchain::Error::GenesisInvalid.into()); - } - } - - let child_delta = storage.children.into_iter().map(|(storage_key, child_content)| ( - storage_key, - child_content.data.into_iter().map(|(k, v)| (k, Some(v))), child_content.child_info), - ); + let child_delta = storage.children_default.into_iter().map(|(_storage_key, child_content)|( + child_content.child_info, + child_content.data.into_iter().map(|(k, v)| (k, Some(v))), + )); let mut changes_trie_config: Option = None; let (root, transaction) = self.old_state.full_storage_root( @@ -1808,7 +1795,7 @@ pub(crate) mod tests { op.reset_storage(Storage { top: storage.iter().cloned().collect(), - children: Default::default(), + children_default: Default::default(), }).unwrap(); op.set_block_data( header.clone(), @@ -1894,7 +1881,7 @@ pub(crate) mod tests { op.reset_storage(Storage { top: storage.iter().cloned().collect(), - children: Default::default(), + children_default: Default::default(), }).unwrap(); key = op.db_updates.insert(EMPTY_PREFIX, b"hello"); diff --git a/client/db/src/storage_cache.rs b/client/db/src/storage_cache.rs index 63268992632..66ac74afa4f 100644 --- a/client/db/src/storage_cache.rs +++ b/client/db/src/storage_cache.rs @@ -542,11 +542,10 @@ impl>, B: BlockT> StateBackend> for Cachin fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - let key = (storage_key.to_vec(), key.to_vec()); + let key = (child_info.storage_key().to_vec(), key.to_vec()); let local_cache = self.cache.local_cache.upgradable_read(); if let Some(entry) = local_cache.child_storage.get(&key).cloned() { trace!("Found in local cache: {:?}", key); @@ -564,7 +563,7 @@ impl>, B: BlockT> StateBackend> for Cachin } } trace!("Cache miss: {:?}", key); - let value = self.state.child_storage(storage_key, child_info, &key.1[..])?; + let value = self.state.child_storage(child_info, &key.1[..])?; // just pass it through the usage counter let value = self.usage.tally_child_key_read(&key, value, false); @@ -579,20 +578,18 @@ impl>, B: BlockT> StateBackend> for Cachin fn exists_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result { - self.state.exists_child_storage(storage_key, child_info, key) + self.state.exists_child_storage(child_info, key) } fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - self.state.for_keys_in_child_storage(storage_key, child_info, f) + self.state.for_keys_in_child_storage(child_info, f) } fn next_storage_key(&self, key: &[u8]) -> Result>, Self::Error> { @@ -601,11 +598,10 @@ impl>, B: BlockT> StateBackend> for Cachin fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.state.next_child_storage_key(storage_key, child_info, key) + self.state.next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -618,12 +614,11 @@ impl>, B: BlockT> StateBackend> for Cachin fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.state.for_child_keys_with_prefix(storage_key, child_info, prefix, f) + self.state.for_child_keys_with_prefix(child_info, prefix, f) } fn storage_root(&self, delta: I) -> (B::Hash, Self::Transaction) @@ -635,14 +630,13 @@ impl>, B: BlockT> StateBackend> for Cachin fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (B::Hash, bool, Self::Transaction) where I: IntoIterator, Option>)>, { - self.state.child_storage_root(storage_key, child_info, delta) + self.state.child_storage_root(child_info, delta) } fn pairs(&self) -> Vec<(Vec, Vec)> { @@ -655,11 +649,10 @@ impl>, B: BlockT> StateBackend> for Cachin fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec> { - self.state.child_keys(storage_key, child_info, prefix) + self.state.child_keys(child_info, prefix) } fn as_trie_backend(&mut self) -> Option<&TrieBackend>> { @@ -758,11 +751,10 @@ impl>, B: BlockT> StateBackend> for Syncin fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.caching_state().child_storage(storage_key, child_info, key) + self.caching_state().child_storage(child_info, key) } fn exists_storage(&self, key: &[u8]) -> Result { @@ -771,20 +763,18 @@ impl>, B: BlockT> StateBackend> for Syncin fn exists_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result { - self.caching_state().exists_child_storage(storage_key, child_info, key) + self.caching_state().exists_child_storage(child_info, key) } fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - self.caching_state().for_keys_in_child_storage(storage_key, child_info, f) + self.caching_state().for_keys_in_child_storage(child_info, f) } fn next_storage_key(&self, key: &[u8]) -> Result>, Self::Error> { @@ -793,11 +783,10 @@ impl>, B: BlockT> StateBackend> for Syncin fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.caching_state().next_child_storage_key(storage_key, child_info, key) + self.caching_state().next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -810,12 +799,11 @@ impl>, B: BlockT> StateBackend> for Syncin fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.caching_state().for_child_keys_with_prefix(storage_key, child_info, prefix, f) + self.caching_state().for_child_keys_with_prefix(child_info, prefix, f) } fn storage_root(&self, delta: I) -> (B::Hash, Self::Transaction) @@ -827,14 +815,13 @@ impl>, B: BlockT> StateBackend> for Syncin fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (B::Hash, bool, Self::Transaction) where I: IntoIterator, Option>)>, { - self.caching_state().child_storage_root(storage_key, child_info, delta) + self.caching_state().child_storage_root(child_info, delta) } fn pairs(&self) -> Vec<(Vec, Vec)> { @@ -847,11 +834,10 @@ impl>, B: BlockT> StateBackend> for Syncin fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec> { - self.caching_state().child_keys(storage_key, child_info, prefix) + self.caching_state().child_keys(child_info, prefix) } fn as_trie_backend(&mut self) -> Option<&TrieBackend>> { diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 72055b77884..e1ef18a0853 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -186,7 +186,7 @@ fn storage_should_work(wasm_method: WasmExecutionMethod) { b"foo".to_vec() => b"bar".to_vec(), b"baz".to_vec() => b"bar".to_vec() ], - children: map![], + children_default: map![], }); assert_eq!(ext, expected); } @@ -220,7 +220,7 @@ fn clear_prefix_should_work(wasm_method: WasmExecutionMethod) { b"aab".to_vec() => b"2".to_vec(), b"bbb".to_vec() => b"5".to_vec() ], - children: map![], + children_default: map![], }); assert_eq!(expected, ext); } diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index f59a7752163..6ad82594849 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -30,7 +30,7 @@ use libp2p::core::{ConnectedPoint, connection::{ConnectionId, ListenerId}}; use libp2p::swarm::{ProtocolsHandler, IntoProtocolsHandler}; use libp2p::swarm::{NetworkBehaviour, NetworkBehaviourAction, PollParameters}; use sp_core::{ - storage::{StorageKey, ChildInfo}, + storage::{StorageKey, PrefixedStorageKey, ChildInfo, ChildType}, hexdisplay::HexDisplay }; use sp_consensus::{ @@ -1522,37 +1522,28 @@ impl Protocol { trace!(target: "sync", "Remote read child request {} from {} ({} {} at {})", request.id, who, HexDisplay::from(&request.storage_key), keys_str(), request.block); - let proof = if let Some(child_info) = ChildInfo::resolve_child_info(request.child_type, &request.child_info[..]) { - match self.context_data.chain.read_child_proof( - &BlockId::Hash(request.block), - &request.storage_key, - child_info, - &mut request.keys.iter().map(AsRef::as_ref), - ) { - Ok(proof) => proof, - Err(error) => { - trace!(target: "sync", "Remote read child request {} from {} ({} {} at {}) failed with: {}", - request.id, - who, - HexDisplay::from(&request.storage_key), - keys_str(), - request.block, - error - ); - StorageProof::empty() - } + let prefixed_key = PrefixedStorageKey::new_ref(&request.storage_key); + let child_info = match ChildType::from_prefixed_key(prefixed_key) { + Some((ChildType::ParentKeyId, storage_key)) => Ok(ChildInfo::new_default(storage_key)), + None => Err("Invalid child storage key".into()), + }; + let proof = match child_info.and_then(|child_info| self.context_data.chain.read_child_proof( + &BlockId::Hash(request.block), + &child_info, + &mut request.keys.iter().map(AsRef::as_ref), + )) { + Ok(proof) => proof, + Err(error) => { + trace!(target: "sync", "Remote read child request {} from {} ({} {} at {}) failed with: {}", + request.id, + who, + HexDisplay::from(&request.storage_key), + keys_str(), + request.block, + error + ); + StorageProof::empty() } - } else { - trace!(target: "sync", "Remote read child request {} from {} ({} {} at {}) failed with: {}", - request.id, - who, - HexDisplay::from(&request.storage_key), - keys_str(), - request.block, - "invalid child info and type", - ); - - StorageProof::empty() }; self.send_message( &who, @@ -1610,14 +1601,16 @@ impl Protocol { request.first, request.last ); - let storage_key = request.storage_key.map(|sk| StorageKey(sk)); let key = StorageKey(request.key); + let prefixed_key = request.storage_key.as_ref() + .map(|storage_key| PrefixedStorageKey::new_ref(storage_key)); + let (first, last, min, max) = (request.first, request.last, request.min, request.max); let proof = match self.context_data.chain.key_changes_proof( - request.first, - request.last, - request.min, - request.max, - storage_key.as_ref(), + first, + last, + min, + max, + prefixed_key, &key, ) { Ok(proof) => proof, @@ -1625,8 +1618,8 @@ impl Protocol { trace!(target: "sync", "Remote changes proof request {} from {} for key {} ({}..{}) failed with: {}", request.id, who, - if let Some(sk) = storage_key { - format!("{} : {}", HexDisplay::from(&sk.0), HexDisplay::from(&key.0)) + if let Some(sk) = request.storage_key.as_ref() { + format!("{} : {}", HexDisplay::from(sk), HexDisplay::from(&key.0)) } else { HexDisplay::from(&key.0).to_string() }, diff --git a/client/network/src/protocol/light_client_handler.rs b/client/network/src/protocol/light_client_handler.rs index 85312b08032..f4e877d675e 100644 --- a/client/network/src/protocol/light_client_handler.rs +++ b/client/network/src/protocol/light_client_handler.rs @@ -58,7 +58,7 @@ use sc_client::light::fetcher; use sc_client_api::StorageProof; use sc_peerset::ReputationChange; use sp_core::{ - storage::{ChildInfo, StorageKey}, + storage::{ChildInfo, ChildType,StorageKey, PrefixedStorageKey}, hexdisplay::HexDisplay, }; use smallvec::SmallVec; @@ -617,35 +617,27 @@ where let block = Decode::decode(&mut request.block.as_ref())?; - let proof = - if let Some(info) = ChildInfo::resolve_child_info(request.child_type, &request.child_info[..]) { - match self.chain.read_child_proof( - &BlockId::Hash(block), - &request.storage_key, - info, - &mut request.keys.iter().map(AsRef::as_ref) - ) { - Ok(proof) => proof, - Err(error) => { - log::trace!("remote read child request from {} ({} {} at {:?}) failed with: {}", - peer, - HexDisplay::from(&request.storage_key), - fmt_keys(request.keys.first(), request.keys.last()), - request.block, - error); - StorageProof::empty() - } - } - } else { + let prefixed_key = PrefixedStorageKey::new_ref(&request.storage_key); + let child_info = match ChildType::from_prefixed_key(prefixed_key) { + Some((ChildType::ParentKeyId, storage_key)) => Ok(ChildInfo::new_default(storage_key)), + None => Err("Invalid child storage key".into()), + }; + let proof = match child_info.and_then(|child_info| self.chain.read_child_proof( + &BlockId::Hash(block), + &child_info, + &mut request.keys.iter().map(AsRef::as_ref) + )) { + Ok(proof) => proof, + Err(error) => { log::trace!("remote read child request from {} ({} {} at {:?}) failed with: {}", peer, HexDisplay::from(&request.storage_key), fmt_keys(request.keys.first(), request.keys.last()), request.block, - "invalid child info and type" - ); + error); StorageProof::empty() - }; + } + }; let response = { let r = api::v1::light::RemoteReadResponse { proof: proof.encode() }; @@ -704,23 +696,18 @@ where let min = Decode::decode(&mut request.min.as_ref())?; let max = Decode::decode(&mut request.max.as_ref())?; let key = StorageKey(request.key.clone()); - let storage_key = - if request.storage_key.is_empty() { - None - } else { - Some(StorageKey(request.storage_key.clone())) - }; + let storage_key = if request.storage_key.is_empty() { + None + } else { + Some(PrefixedStorageKey::new_ref(&request.storage_key)) + }; - let proof = match self.chain.key_changes_proof(first, last, min, max, storage_key.as_ref(), &key) { + let proof = match self.chain.key_changes_proof(first, last, min, max, storage_key, &key) { Ok(proof) => proof, Err(error) => { log::trace!("remote changes proof request from {} for key {} ({:?}..{:?}) failed with: {}", peer, - if let Some(sk) = storage_key { - format!("{} : {}", HexDisplay::from(&sk.0), HexDisplay::from(&key.0)) - } else { - HexDisplay::from(&key.0).to_string() - }, + format!("{} : {}", HexDisplay::from(&request.storage_key), HexDisplay::from(&key.0)), request.first, request.last, error); @@ -1092,9 +1079,7 @@ fn serialize_request(request: &Request) -> Result, prost::E Request::ReadChild { request, .. } => { let r = api::v1::light::RemoteReadChildRequest { block: request.block.encode(), - storage_key: request.storage_key.clone(), - child_type: request.child_type.clone(), - child_info: request.child_info.clone(), + storage_key: request.storage_key.clone().into_inner(), keys: request.keys.clone(), }; api::v1::light::request::Request::RemoteReadChildRequest(r) @@ -1113,7 +1098,8 @@ fn serialize_request(request: &Request) -> Result, prost::E last: request.last_block.1.encode(), min: request.tries_roots.1.encode(), max: request.max_block.1.encode(), - storage_key: request.storage_key.clone().unwrap_or_default(), + storage_key: request.storage_key.clone().map(|s| s.into_inner()) + .unwrap_or_default(), key: request.key.clone(), }; api::v1::light::request::Request::RemoteChangesRequest(r) @@ -1343,8 +1329,6 @@ mod tests { use super::{Event, LightClientHandler, Request, Response, OutboundProtocol, PeerStatus}; use void::Void; - const CHILD_INFO: ChildInfo<'static> = ChildInfo::new_default(b"foobarbaz"); - type Block = sp_runtime::generic::Block, substrate_test_runtime::Extrinsic>; type Handler = LightClientHandler; type Swarm = libp2p::swarm::Swarm; @@ -1894,15 +1878,13 @@ mod tests { #[test] fn receives_remote_read_child_response() { - let info = CHILD_INFO.info(); let mut chan = oneshot::channel(); + let child_info = ChildInfo::new_default(&b":child_storage:default:sub"[..]); let request = fetcher::RemoteReadChildRequest { header: dummy_header(), block: Default::default(), - storage_key: b":child_storage:sub".to_vec(), + storage_key: child_info.prefixed_storage_key(), keys: vec![b":key".to_vec()], - child_info: info.0.to_vec(), - child_type: info.1, retry_count: None, }; issue_request(Request::ReadChild { request, sender: chan.0 }); @@ -1997,15 +1979,13 @@ mod tests { #[test] fn send_receive_read_child() { - let info = CHILD_INFO.info(); let chan = oneshot::channel(); + let child_info = ChildInfo::new_default(&b":child_storage:default:sub"[..]); let request = fetcher::RemoteReadChildRequest { header: dummy_header(), block: Default::default(), - storage_key: b":child_storage:sub".to_vec(), + storage_key: child_info.prefixed_storage_key(), keys: vec![b":key".to_vec()], - child_info: info.0.to_vec(), - child_type: info.1, retry_count: None, }; send_receive(Request::ReadChild { request, sender: chan.0 }); diff --git a/client/network/src/protocol/message.rs b/client/network/src/protocol/message.rs index ae83b49e60f..8638e9afc59 100644 --- a/client/network/src/protocol/message.rs +++ b/client/network/src/protocol/message.rs @@ -477,11 +477,6 @@ pub mod generic { pub block: H, /// Child Storage key. pub storage_key: Vec, - /// Child trie source information. - pub child_info: Vec, - /// Child type, its required to resolve `child_info` - /// content and choose child implementation. - pub child_type: u32, /// Storage key. pub keys: Vec>, } diff --git a/client/network/src/protocol/schema/light.v1.proto b/client/network/src/protocol/schema/light.v1.proto index 1c98d49730c..9b5d47719dc 100644 --- a/client/network/src/protocol/schema/light.v1.proto +++ b/client/network/src/protocol/schema/light.v1.proto @@ -67,13 +67,9 @@ message RemoteReadResponse { message RemoteReadChildRequest { // Block at which to perform call. bytes block = 2; - // Child Storage key. + // Child Storage key, this is relative + // to the child type storage location. bytes storage_key = 3; - // Child trie source information. - bytes child_info = 4; - /// Child type, its required to resolve `child_info` - /// content and choose child implementation. - uint32 child_type = 5; // Storage keys. repeated bytes keys = 6; } diff --git a/client/rpc-api/src/child_state/mod.rs b/client/rpc-api/src/child_state/mod.rs new file mode 100644 index 00000000000..a46269cad6c --- /dev/null +++ b/client/rpc-api/src/child_state/mod.rs @@ -0,0 +1,69 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Substrate state API. + +use jsonrpc_derive::rpc; +use sp_core::storage::{StorageKey, PrefixedStorageKey, StorageData}; +use crate::state::error::FutureResult; + +pub use self::gen_client::Client as ChildStateClient; + +/// Substrate child state API +/// +/// Note that all `PrefixedStorageKey` are desierialized +/// from json and not guaranted valid. +#[rpc] +pub trait ChildStateApi { + /// RPC Metadata + type Metadata; + + /// Returns the keys with prefix from a child storage, leave empty to get all the keys + #[rpc(name = "childstate_getKeys")] + fn storage_keys( + &self, + child_storage_key: PrefixedStorageKey, + prefix: StorageKey, + hash: Option + ) -> FutureResult>; + + /// Returns a child storage entry at a specific block's state. + #[rpc(name = "childstate_getStorage")] + fn storage( + &self, + child_storage_key: PrefixedStorageKey, + key: StorageKey, + hash: Option + ) -> FutureResult>; + + /// Returns the hash of a child storage entry at a block's state. + #[rpc(name = "childstate_getStorageHash")] + fn storage_hash( + &self, + child_storage_key: PrefixedStorageKey, + key: StorageKey, + hash: Option + ) -> FutureResult>; + + /// Returns the size of a child storage entry at a block's state. + #[rpc(name = "childstate_getStorageSize")] + fn storage_size( + &self, + child_storage_key: PrefixedStorageKey, + key: StorageKey, + hash: Option + ) -> FutureResult>; +} diff --git a/client/rpc-api/src/lib.rs b/client/rpc-api/src/lib.rs index 2d541be2a70..f742d73b692 100644 --- a/client/rpc-api/src/lib.rs +++ b/client/rpc-api/src/lib.rs @@ -34,4 +34,5 @@ pub mod author; pub mod chain; pub mod offchain; pub mod state; +pub mod child_state; pub mod system; diff --git a/client/rpc-api/src/state/mod.rs b/client/rpc-api/src/state/mod.rs index d29e46a4b56..243a33c18d4 100644 --- a/client/rpc-api/src/state/mod.rs +++ b/client/rpc-api/src/state/mod.rs @@ -72,50 +72,6 @@ pub trait StateApi { #[rpc(name = "state_getStorageSize", alias("state_getStorageSizeAt"))] fn storage_size(&self, key: StorageKey, hash: Option) -> FutureResult>; - /// Returns the keys with prefix from a child storage, leave empty to get all the keys - #[rpc(name = "state_getChildKeys")] - fn child_storage_keys( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - prefix: StorageKey, - hash: Option - ) -> FutureResult>; - - /// Returns a child storage entry at a specific block's state. - #[rpc(name = "state_getChildStorage")] - fn child_storage( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - hash: Option - ) -> FutureResult>; - - /// Returns the hash of a child storage entry at a block's state. - #[rpc(name = "state_getChildStorageHash")] - fn child_storage_hash( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - hash: Option - ) -> FutureResult>; - - /// Returns the size of a child storage entry at a block's state. - #[rpc(name = "state_getChildStorageSize")] - fn child_storage_size( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - hash: Option - ) -> FutureResult>; - /// Returns the runtime metadata as an opaque blob. #[rpc(name = "state_getMetadata")] fn metadata(&self, hash: Option) -> FutureResult; diff --git a/client/rpc/src/state/mod.rs b/client/rpc/src/state/mod.rs index 2747405c04f..e6962824333 100644 --- a/client/rpc/src/state/mod.rs +++ b/client/rpc/src/state/mod.rs @@ -28,7 +28,7 @@ use rpc::{Result as RpcResult, futures::{Future, future::result}}; use sc_rpc_api::Subscriptions; use sc_client::{light::{blockchain::RemoteBlockchain, fetcher::Fetcher}}; -use sp_core::{Bytes, storage::{StorageKey, StorageData, StorageChangeSet}}; +use sp_core::{Bytes, storage::{StorageKey, PrefixedStorageKey, StorageData, StorageChangeSet}}; use sp_version::RuntimeVersion; use sp_runtime::traits::Block as BlockT; @@ -37,6 +37,7 @@ use sp_api::{Metadata, ProvideRuntimeApi, CallApiAt}; use self::error::{Error, FutureResult}; pub use sc_rpc_api::state::*; +pub use sc_rpc_api::child_state::*; use sc_client_api::{ExecutorProvider, StorageProvider, BlockchainEvents, Backend}; use sp_blockchain::{HeaderMetadata, HeaderBackend}; @@ -103,49 +104,6 @@ pub trait StateBackend: Send + Sync + 'static .map(|x| x.map(|x| x.0.len() as u64))) } - /// Returns the keys with prefix from a child storage, leave empty to get all the keys - fn child_storage_keys( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - prefix: StorageKey, - ) -> FutureResult>; - - /// Returns a child storage entry at a specific block's state. - fn child_storage( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult>; - - /// Returns the hash of a child storage entry at a block's state. - fn child_storage_hash( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult>; - - /// Returns the size of a child storage entry at a block's state. - fn child_storage_size( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult> { - Box::new(self.child_storage(block, child_storage_key, child_info, child_type, key) - .map(|x| x.map(|x| x.0.len() as u64))) - } - /// Returns the runtime metadata as an opaque blob. fn metadata(&self, block: Option) -> FutureResult; @@ -204,7 +162,7 @@ pub trait StateBackend: Send + Sync + 'static pub fn new_full( client: Arc, subscriptions: Subscriptions, -) -> State +) -> (State, ChildState) where Block: BlockT + 'static, BE: Backend + 'static, @@ -214,9 +172,11 @@ pub fn new_full( + ProvideRuntimeApi + Send + Sync + 'static, Client::Api: Metadata, { - State { - backend: Box::new(self::state_full::FullState::new(client, subscriptions)), - } + let child_backend = Box::new( + self::state_full::FullState::new(client.clone(), subscriptions.clone()) + ); + let backend = Box::new(self::state_full::FullState::new(client, subscriptions)); + (State { backend }, ChildState { backend: child_backend }) } /// Create new state API that works on light node. @@ -225,7 +185,7 @@ pub fn new_light>( subscriptions: Subscriptions, remote_blockchain: Arc>, fetcher: Arc, -) -> State +) -> (State, ChildState) where Block: BlockT + 'static, BE: Backend + 'static, @@ -235,14 +195,20 @@ pub fn new_light>( + Send + Sync + 'static, F: Send + Sync + 'static, { - State { - backend: Box::new(self::state_light::LightState::new( + let child_backend = Box::new(self::state_light::LightState::new( + client.clone(), + subscriptions.clone(), + remote_blockchain.clone(), + fetcher.clone(), + )); + + let backend = Box::new(self::state_light::LightState::new( client, subscriptions, remote_blockchain, fetcher, - )), - } + )); + (State { backend }, ChildState { backend: child_backend }) } /// State API with subscriptions support. @@ -307,50 +273,6 @@ impl StateApi for State self.backend.storage_size(block, key) } - fn child_storage( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - block: Option - ) -> FutureResult> { - self.backend.child_storage(block, child_storage_key, child_info, child_type, key) - } - - fn child_storage_keys( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key_prefix: StorageKey, - block: Option - ) -> FutureResult> { - self.backend.child_storage_keys(block, child_storage_key, child_info, child_type, key_prefix) - } - - fn child_storage_hash( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - block: Option - ) -> FutureResult> { - self.backend.child_storage_hash(block, child_storage_key, child_info, child_type, key) - } - - fn child_storage_size( - &self, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - block: Option - ) -> FutureResult> { - self.backend.child_storage_size(block, child_storage_key, child_info, child_type, key) - } - fn metadata(&self, block: Option) -> FutureResult { self.backend.metadata(block) } @@ -402,12 +324,98 @@ impl StateApi for State } } -fn client_err(err: sp_blockchain::Error) -> Error { - Error::Client(Box::new(err)) +/// Child state backend API. +pub trait ChildStateBackend: Send + Sync + 'static + where + Block: BlockT + 'static, + Client: Send + Sync + 'static, +{ + /// Returns the keys with prefix from a child storage, + /// leave prefix empty to get all the keys. + fn storage_keys( + &self, + block: Option, + storage_key: PrefixedStorageKey, + prefix: StorageKey, + ) -> FutureResult>; + + /// Returns a child storage entry at a specific block's state. + fn storage( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult>; + + /// Returns the hash of a child storage entry at a block's state. + fn storage_hash( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult>; + + /// Returns the size of a child storage entry at a block's state. + fn storage_size( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult> { + Box::new(self.storage(block, storage_key, key) + .map(|x| x.map(|x| x.0.len() as u64))) + } } -const CHILD_RESOLUTION_ERROR: &str = "Unexpected child info and type"; +/// Child state API with subscriptions support. +pub struct ChildState { + backend: Box>, +} + +impl ChildStateApi for ChildState + where + Block: BlockT + 'static, + Client: Send + Sync + 'static, +{ + type Metadata = crate::metadata::Metadata; + + fn storage( + &self, + storage_key: PrefixedStorageKey, + key: StorageKey, + block: Option + ) -> FutureResult> { + self.backend.storage(block, storage_key, key) + } + + fn storage_keys( + &self, + storage_key: PrefixedStorageKey, + key_prefix: StorageKey, + block: Option + ) -> FutureResult> { + self.backend.storage_keys(block, storage_key, key_prefix) + } -fn child_resolution_error() -> sp_blockchain::Error { - sp_blockchain::Error::Msg(CHILD_RESOLUTION_ERROR.to_string()) + fn storage_hash( + &self, + storage_key: PrefixedStorageKey, + key: StorageKey, + block: Option + ) -> FutureResult> { + self.backend.storage_hash(block, storage_key, key) + } + + fn storage_size( + &self, + storage_key: PrefixedStorageKey, + key: StorageKey, + block: Option + ) -> FutureResult> { + self.backend.storage_size(block, storage_key, key) + } +} + +fn client_err(err: sp_blockchain::Error) -> Error { + Error::Client(Box::new(err)) } diff --git a/client/rpc/src/state/state_full.rs b/client/rpc/src/state/state_full.rs index bf808205431..a9767c34fcf 100644 --- a/client/rpc/src/state/state_full.rs +++ b/client/rpc/src/state/state_full.rs @@ -29,7 +29,8 @@ use sc_client_api::backend::Backend; use sp_blockchain::{Result as ClientResult, Error as ClientError, HeaderMetadata, CachedHeaderMetadata, HeaderBackend}; use sc_client::BlockchainEvents; use sp_core::{ - Bytes, storage::{well_known_keys, StorageKey, StorageData, StorageChangeSet, ChildInfo}, + Bytes, storage::{well_known_keys, StorageKey, StorageData, StorageChangeSet, + ChildInfo, ChildType, PrefixedStorageKey}, }; use sp_version::RuntimeVersion; use sp_runtime::{ @@ -38,7 +39,7 @@ use sp_runtime::{ use sp_api::{Metadata, ProvideRuntimeApi, CallApiAt}; -use super::{StateBackend, error::{FutureResult, Error, Result}, client_err, child_resolution_error}; +use super::{StateBackend, ChildStateBackend, error::{FutureResult, Error, Result}, client_err}; use std::marker::PhantomData; use sc_client_api::{CallExecutor, StorageProvider, ExecutorProvider}; @@ -308,66 +309,6 @@ impl StateBackend for FullState, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - prefix: StorageKey, - ) -> FutureResult> { - Box::new(result( - self.block_or_best(block) - .and_then(|block| self.client.child_storage_keys( - &BlockId::Hash(block), - &child_storage_key, - ChildInfo::resolve_child_info(child_type, &child_info.0[..]) - .ok_or_else(child_resolution_error)?, - &prefix, - )) - .map_err(client_err))) - } - - fn child_storage( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult> { - Box::new(result( - self.block_or_best(block) - .and_then(|block| self.client.child_storage( - &BlockId::Hash(block), - &child_storage_key, - ChildInfo::resolve_child_info(child_type, &child_info.0[..]) - .ok_or_else(child_resolution_error)?, - &key, - )) - .map_err(client_err))) - } - - fn child_storage_hash( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult> { - Box::new(result( - self.block_or_best(block) - .and_then(|block| self.client.child_storage_hash( - &BlockId::Hash(block), - &child_storage_key, - ChildInfo::resolve_child_info(child_type, &child_info.0[..]) - .ok_or_else(child_resolution_error)?, - &key, - )) - .map_err(client_err))) - } - fn metadata(&self, block: Option) -> FutureResult { Box::new(result( self.block_or_best(block) @@ -493,7 +434,7 @@ impl StateBackend for FullState StateBackend for FullState ChildStateBackend for FullState where + Block: BlockT + 'static, + BE: Backend + 'static, + Client: ExecutorProvider + StorageProvider + HeaderBackend + + HeaderMetadata + BlockchainEvents + + CallApiAt + ProvideRuntimeApi + + Send + Sync + 'static, + Client::Api: Metadata, +{ + fn storage_keys( + &self, + block: Option, + storage_key: PrefixedStorageKey, + prefix: StorageKey, + ) -> FutureResult> { + Box::new(result( + self.block_or_best(block) + .and_then(|block| { + let child_info = match ChildType::from_prefixed_key(&storage_key) { + Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), + None => return Err("Invalid child storage key".into()), + }; + self.client.child_storage_keys( + &BlockId::Hash(block), + &child_info, + &prefix, + ) + }) + .map_err(client_err))) + } + + fn storage( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult> { + Box::new(result( + self.block_or_best(block) + .and_then(|block| { + let child_info = match ChildType::from_prefixed_key(&storage_key) { + Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), + None => return Err("Invalid child storage key".into()), + }; + self.client.child_storage( + &BlockId::Hash(block), + &child_info, + &key, + ) + }) + .map_err(client_err))) + } + + fn storage_hash( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult> { + Box::new(result( + self.block_or_best(block) + .and_then(|block| { + let child_info = match ChildType::from_prefixed_key(&storage_key) { + Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), + None => return Err("Invalid child storage key".into()), + }; + self.client.child_storage_hash( + &BlockId::Hash(block), + &child_info, + &key, + ) + }) + .map_err(client_err))) + } +} + /// Splits passed range into two subranges where: /// - first range has at least one element in it; /// - second range (optionally) starts at given `middle` element. diff --git a/client/rpc/src/state/state_light.rs b/client/rpc/src/state/state_light.rs index 092419ad012..27adbcd6919 100644 --- a/client/rpc/src/state/state_light.rs +++ b/client/rpc/src/state/state_light.rs @@ -48,17 +48,19 @@ use sc_client::{ }, }; use sp_core::{ - Bytes, OpaqueMetadata, storage::{StorageKey, StorageData, StorageChangeSet}, + Bytes, OpaqueMetadata, + storage::{StorageKey, PrefixedStorageKey, StorageData, StorageChangeSet}, }; use sp_version::RuntimeVersion; use sp_runtime::{generic::BlockId, traits::{Block as BlockT, HashFor}}; -use super::{StateBackend, error::{FutureResult, Error}, client_err}; +use super::{StateBackend, ChildStateBackend, error::{FutureResult, Error}, client_err}; /// Storage data map of storage keys => (optional) storage value. type StorageMap = HashMap>; /// State API backend for light nodes. +#[derive(Clone)] pub struct LightState, Client> { client: Arc, subscriptions: Subscriptions, @@ -233,69 +235,7 @@ impl StateBackend for LightState, key: StorageKey, ) -> FutureResult> { - Box::new(self - .storage(block, key) - .and_then(|maybe_storage| - result(Ok(maybe_storage.map(|storage| HashFor::::hash(&storage.0)))) - ) - ) - } - - fn child_storage_keys( - &self, - _block: Option, - _child_storage_key: StorageKey, - _child_info: StorageKey, - _child_type: u32, - _prefix: StorageKey, - ) -> FutureResult> { - Box::new(result(Err(client_err(ClientError::NotAvailableOnLightClient)))) - } - - fn child_storage( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult> { - let block = self.block_or_best(block); - let fetcher = self.fetcher.clone(); - let child_storage = resolve_header(&*self.remote_blockchain, &*self.fetcher, block) - .then(move |result| match result { - Ok(header) => Either::Left(fetcher.remote_read_child(RemoteReadChildRequest { - block, - header, - storage_key: child_storage_key.0, - child_info: child_info.0, - child_type, - keys: vec![key.0.clone()], - retry_count: Default::default(), - }).then(move |result| ready(result - .map(|mut data| data - .remove(&key.0) - .expect("successful result has entry for all keys; qed") - .map(StorageData) - ) - .map_err(client_err) - ))), - Err(error) => Either::Right(ready(Err(error))), - }); - - Box::new(child_storage.boxed().compat()) - } - - fn child_storage_hash( - &self, - block: Option, - child_storage_key: StorageKey, - child_info: StorageKey, - child_type: u32, - key: StorageKey, - ) -> FutureResult> { - Box::new(self - .child_storage(block, child_storage_key, child_info, child_type, key) + Box::new(StateBackend::storage(self, block, key) .and_then(|maybe_storage| result(Ok(maybe_storage.map(|storage| HashFor::::hash(&storage.0)))) ) @@ -518,6 +458,65 @@ impl StateBackend for LightState ChildStateBackend for LightState + where + Block: BlockT, + Client: BlockchainEvents + HeaderBackend + Send + Sync + 'static, + F: Fetcher + 'static +{ + fn storage_keys( + &self, + _block: Option, + _storage_key: PrefixedStorageKey, + _prefix: StorageKey, + ) -> FutureResult> { + Box::new(result(Err(client_err(ClientError::NotAvailableOnLightClient)))) + } + + fn storage( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult> { + let block = self.block_or_best(block); + let fetcher = self.fetcher.clone(); + let child_storage = resolve_header(&*self.remote_blockchain, &*self.fetcher, block) + .then(move |result| match result { + Ok(header) => Either::Left(fetcher.remote_read_child(RemoteReadChildRequest { + block, + header, + storage_key, + keys: vec![key.0.clone()], + retry_count: Default::default(), + }).then(move |result| ready(result + .map(|mut data| data + .remove(&key.0) + .expect("successful result has entry for all keys; qed") + .map(StorageData) + ) + .map_err(client_err) + ))), + Err(error) => Either::Right(ready(Err(error))), + }); + + Box::new(child_storage.boxed().compat()) + } + + fn storage_hash( + &self, + block: Option, + storage_key: PrefixedStorageKey, + key: StorageKey, + ) -> FutureResult> { + Box::new(ChildStateBackend::storage(self, block, storage_key, key) + .and_then(|maybe_storage| + result(Ok(maybe_storage.map(|storage| HashFor::::hash(&storage.0)))) + ) + ) + } +} + /// Resolve header by hash. fn resolve_header>( remote_blockchain: &dyn RemoteBlockchain, diff --git a/client/rpc/src/state/tests.rs b/client/rpc/src/state/tests.rs index 0f2358a3ed1..f9c6982929b 100644 --- a/client/rpc/src/state/tests.rs +++ b/client/rpc/src/state/tests.rs @@ -21,7 +21,7 @@ use self::error::Error; use std::sync::Arc; use assert_matches::assert_matches; use futures01::stream::Stream; -use sp_core::{storage::{well_known_keys, ChildInfo}, ChangesTrieConfiguration}; +use sp_core::{storage::ChildInfo, ChangesTrieConfiguration}; use sp_core::hash::H256; use sc_block_builder::BlockBuilderProvider; use sp_io::hashing::blake2_256; @@ -32,26 +32,28 @@ use substrate_test_runtime_client::{ }; use sp_runtime::generic::BlockId; -const CHILD_INFO: ChildInfo<'static> = ChildInfo::new_default(b"unique_id"); +const STORAGE_KEY: &[u8] = b"child"; + +fn prefixed_storage_key() -> PrefixedStorageKey { + let child_info = ChildInfo::new_default(&STORAGE_KEY[..]); + child_info.prefixed_storage_key() +} #[test] fn should_return_storage() { const KEY: &[u8] = b":mock"; const VALUE: &[u8] = b"hello world"; - const STORAGE_KEY: &[u8] = b":child_storage:default:child"; const CHILD_VALUE: &[u8] = b"hello world !"; + let child_info = ChildInfo::new_default(STORAGE_KEY); let mut core = tokio::runtime::Runtime::new().unwrap(); let client = TestClientBuilder::new() .add_extra_storage(KEY.to_vec(), VALUE.to_vec()) - .add_extra_child_storage(STORAGE_KEY.to_vec(), CHILD_INFO, KEY.to_vec(), CHILD_VALUE.to_vec()) + .add_extra_child_storage(&child_info, KEY.to_vec(), CHILD_VALUE.to_vec()) .build(); let genesis_hash = client.genesis_hash(); - let client = new_full(Arc::new(client), Subscriptions::new(Arc::new(core.executor()))); + let (client, child) = new_full(Arc::new(client), Subscriptions::new(Arc::new(core.executor()))); let key = StorageKey(KEY.to_vec()); - let storage_key = StorageKey(STORAGE_KEY.to_vec()); - let (child_info, child_type) = CHILD_INFO.info(); - let child_info = StorageKey(child_info.to_vec()); assert_eq!( client.storage(key.clone(), Some(genesis_hash).into()).wait() @@ -69,7 +71,7 @@ fn should_return_storage() { ); assert_eq!( core.block_on( - client.child_storage(storage_key, child_info, child_type, key, Some(genesis_hash).into()) + child.storage(prefixed_storage_key(), key, Some(genesis_hash).into()) .map(|x| x.map(|x| x.0.len())) ).unwrap().unwrap() as usize, CHILD_VALUE.len(), @@ -79,45 +81,36 @@ fn should_return_storage() { #[test] fn should_return_child_storage() { - let (child_info, child_type) = CHILD_INFO.info(); - let child_info = StorageKey(child_info.to_vec()); + let child_info = ChildInfo::new_default(STORAGE_KEY); let core = tokio::runtime::Runtime::new().unwrap(); let client = Arc::new(substrate_test_runtime_client::TestClientBuilder::new() - .add_child_storage("test", "key", CHILD_INFO, vec![42_u8]) + .add_child_storage(&child_info, "key", vec![42_u8]) .build()); let genesis_hash = client.genesis_hash(); - let client = new_full(client, Subscriptions::new(Arc::new(core.executor()))); - let child_key = StorageKey( - well_known_keys::CHILD_STORAGE_KEY_PREFIX.iter().chain(b"test").cloned().collect() - ); + let (_client, child) = new_full(client, Subscriptions::new(Arc::new(core.executor()))); + let child_key = prefixed_storage_key(); let key = StorageKey(b"key".to_vec()); assert_matches!( - client.child_storage( + child.storage( child_key.clone(), - child_info.clone(), - child_type, key.clone(), Some(genesis_hash).into(), ).wait(), Ok(Some(StorageData(ref d))) if d[0] == 42 && d.len() == 1 ); assert_matches!( - client.child_storage_hash( + child.storage_hash( child_key.clone(), - child_info.clone(), - child_type, key.clone(), Some(genesis_hash).into(), ).wait().map(|x| x.is_some()), Ok(true) ); assert_matches!( - client.child_storage_size( + child.storage_size( child_key.clone(), - child_info.clone(), - child_type, key.clone(), None, ).wait(), @@ -130,7 +123,7 @@ fn should_call_contract() { let core = tokio::runtime::Runtime::new().unwrap(); let client = Arc::new(substrate_test_runtime_client::new()); let genesis_hash = client.genesis_hash(); - let client = new_full(client, Subscriptions::new(Arc::new(core.executor()))); + let (client, _child) = new_full(client, Subscriptions::new(Arc::new(core.executor()))); assert_matches!( client.call("balanceOf".into(), Bytes(vec![1,2,3]), Some(genesis_hash).into()).wait(), @@ -146,7 +139,7 @@ fn should_notify_about_storage_changes() { { let mut client = Arc::new(substrate_test_runtime_client::new()); - let api = new_full(client.clone(), Subscriptions::new(Arc::new(remote))); + let (api, _child) = new_full(client.clone(), Subscriptions::new(Arc::new(remote))); api.subscribe_storage(Default::default(), subscriber, None.into()); @@ -179,7 +172,7 @@ fn should_send_initial_storage_changes_and_notifications() { { let mut client = Arc::new(substrate_test_runtime_client::new()); - let api = new_full(client.clone(), Subscriptions::new(Arc::new(remote))); + let (api, _child) = new_full(client.clone(), Subscriptions::new(Arc::new(remote))); let alice_balance_key = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Alice.into())); @@ -215,7 +208,7 @@ fn should_send_initial_storage_changes_and_notifications() { fn should_query_storage() { fn run_tests(mut client: Arc, has_changes_trie_config: bool) { let core = tokio::runtime::Runtime::new().unwrap(); - let api = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); + let (api, _child) = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); let mut add_block = |nonce| { let mut builder = client.new_block(Default::default()).unwrap(); @@ -434,7 +427,7 @@ fn should_return_runtime_version() { let core = tokio::runtime::Runtime::new().unwrap(); let client = Arc::new(substrate_test_runtime_client::new()); - let api = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); + let (api, _child) = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); let result = "{\"specName\":\"test\",\"implName\":\"parity-test\",\"authoringVersion\":1,\ \"specVersion\":2,\"implVersion\":2,\"apis\":[[\"0xdf6acb689907609b\",3],\ @@ -458,7 +451,7 @@ fn should_notify_on_runtime_version_initially() { { let client = Arc::new(substrate_test_runtime_client::new()); - let api = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); + let (api, _child) = new_full(client.clone(), Subscriptions::new(Arc::new(core.executor()))); api.subscribe_runtime_version(Default::default(), subscriber); diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 200707dad44..1cdebe8b14b 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -1015,7 +1015,7 @@ ServiceBuilder< let subscriptions = sc_rpc::Subscriptions::new(Arc::new(tasks_builder.spawn_handle())); - let (chain, state) = if let (Some(remote_backend), Some(on_demand)) = + let (chain, state, child_state) = if let (Some(remote_backend), Some(on_demand)) = (remote_backend.as_ref(), on_demand.as_ref()) { // Light clients let chain = sc_rpc::chain::new_light( @@ -1024,19 +1024,19 @@ ServiceBuilder< remote_backend.clone(), on_demand.clone() ); - let state = sc_rpc::state::new_light( + let (state, child_state) = sc_rpc::state::new_light( client.clone(), subscriptions.clone(), remote_backend.clone(), on_demand.clone() ); - (chain, state) + (chain, state, child_state) } else { // Full nodes let chain = sc_rpc::chain::new_full(client.clone(), subscriptions.clone()); - let state = sc_rpc::state::new_full(client.clone(), subscriptions.clone()); - (chain, state) + let (state, child_state) = sc_rpc::state::new_full(client.clone(), subscriptions.clone()); + (chain, state, child_state) }; let author = sc_rpc::author::Author::new( @@ -1059,6 +1059,7 @@ ServiceBuilder< sc_rpc_server::rpc_handler(( state::StateApi::to_delegate(state), + state::ChildStateApi::to_delegate(child_state), chain::ChainApi::to_delegate(chain), maybe_offchain_rpc, author::AuthorApi::to_delegate(author), diff --git a/client/src/client.rs b/client/src/client.rs index a71d6bf964e..2a8040febf3 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -25,8 +25,8 @@ use parking_lot::{Mutex, RwLock}; use codec::{Encode, Decode}; use hash_db::Prefix; use sp_core::{ - ChangesTrieConfiguration, convert_hash, traits::CodeExecutor, - NativeOrEncoded, storage::{StorageKey, StorageData, well_known_keys, ChildInfo}, + ChangesTrieConfiguration, convert_hash, traits::CodeExecutor, NativeOrEncoded, + storage::{StorageKey, PrefixedStorageKey, StorageData, well_known_keys, ChildInfo}, }; use sc_telemetry::{telemetry, SUBSTRATE_INFO}; use sp_runtime::{ @@ -344,7 +344,7 @@ impl Client where last: Block::Hash, min: Block::Hash, max: Block::Hash, - storage_key: Option<&StorageKey>, + storage_key: Option<&PrefixedStorageKey>, key: &StorageKey, cht_size: NumberFor, ) -> sp_blockchain::Result> { @@ -393,7 +393,7 @@ impl Client where fn with_cached_changed_keys( &self, root: &Block::Hash, - functor: &mut dyn FnMut(&HashMap>, HashSet>>), + functor: &mut dyn FnMut(&HashMap, HashSet>>), ) -> bool { self.storage.with_cached_changed_keys(root, functor) } @@ -438,7 +438,7 @@ impl Client where number: last_number, }, max_number, - storage_key.as_ref().map(|x| &x.0[..]), + storage_key, &key.0, ) .map_err(|err| sp_blockchain::Error::ChangesTrieAccessFailed(err))?; @@ -1109,12 +1109,11 @@ impl ProofProvider for Client where fn read_child_proof( &self, id: &BlockId, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, keys: &mut dyn Iterator, ) -> sp_blockchain::Result { self.state_at(id) - .and_then(|state| prove_child_read(state, storage_key, child_info, keys) + .and_then(|state| prove_child_read(state, child_info, keys) .map_err(Into::into)) } @@ -1156,7 +1155,7 @@ impl ProofProvider for Client where last: Block::Hash, min: Block::Hash, max: Block::Hash, - storage_key: Option<&StorageKey>, + storage_key: Option<&PrefixedStorageKey>, key: &StorageKey, ) -> sp_blockchain::Result> { self.key_changes_proof_with_cht_size( @@ -1286,46 +1285,40 @@ impl StorageProvider for Client wher ) } - fn child_storage_keys( &self, id: &BlockId, - child_storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key_prefix: &StorageKey ) -> sp_blockchain::Result> { let keys = self.state_at(id)? - .child_keys(&child_storage_key.0, child_info, &key_prefix.0) + .child_keys(child_info, &key_prefix.0) .into_iter() .map(StorageKey) .collect(); Ok(keys) } - fn child_storage( &self, id: &BlockId, - storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &StorageKey ) -> sp_blockchain::Result> { Ok(self.state_at(id)? - .child_storage(&storage_key.0, child_info, &key.0) + .child_storage(child_info, &key.0) .map_err(|e| sp_blockchain::Error::from_state(Box::new(e)))? .map(StorageData)) } - fn child_storage_hash( &self, id: &BlockId, - storage_key: &StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &StorageKey ) -> sp_blockchain::Result> { Ok(self.state_at(id)? - .child_storage_hash(&storage_key.0, child_info, &key.0) + .child_storage_hash(child_info, &key.0) .map_err(|e| sp_blockchain::Error::from_state(Box::new(e)))? ) } @@ -1361,7 +1354,7 @@ impl StorageProvider for Client wher &self, first: NumberFor, last: BlockId, - storage_key: Option<&StorageKey>, + storage_key: Option<&PrefixedStorageKey>, key: &StorageKey ) -> sp_blockchain::Result, u32)>> { let last_number = self.backend.blockchain().expect_block_number_from_id(&last)?; @@ -1392,7 +1385,7 @@ impl StorageProvider for Client wher range_first, &range_anchor, best_number, - storage_key.as_ref().map(|x| &x.0[..]), + storage_key, &key.0) .and_then(|r| r.map(|r| r.map(|(block, tx)| (block, tx))).collect::>()) .map_err(|err| sp_blockchain::Error::ChangesTrieAccessFailed(err))?; diff --git a/client/src/in_mem.rs b/client/src/in_mem.rs index 3672da1822d..20b227e790f 100644 --- a/client/src/in_mem.rs +++ b/client/src/in_mem.rs @@ -516,9 +516,9 @@ impl backend::BlockImportOperation for BlockImportOperatio fn reset_storage(&mut self, storage: Storage) -> sp_blockchain::Result { check_genesis_storage(&storage)?; - let child_delta = storage.children.into_iter() - .map(|(storage_key, child_content)| - (storage_key, child_content.data.into_iter().map(|(k, v)| (k, Some(v))), child_content.child_info)); + let child_delta = storage.children_default.into_iter() + .map(|(_storage_key, child_content)| + (child_content.child_info, child_content.data.into_iter().map(|(k, v)| (k, Some(v))))); let (root, transaction) = self.old_state.full_storage_root( storage.top.into_iter().map(|(k, v)| (k, Some(v))), @@ -725,8 +725,9 @@ pub fn check_genesis_storage(storage: &Storage) -> sp_blockchain::Result<()> { return Err(sp_blockchain::Error::GenesisInvalid.into()); } - if storage.children.keys().any(|child_key| !well_known_keys::is_child_storage_key(&child_key)) { - return Err(sp_blockchain::Error::GenesisInvalid.into()); + if storage.children_default.keys() + .any(|child_key| !well_known_keys::is_child_storage_key(&child_key)) { + return Err(sp_blockchain::Error::GenesisInvalid.into()); } Ok(()) diff --git a/client/src/light/backend.rs b/client/src/light/backend.rs index 0b334d48b7a..01e98548640 100644 --- a/client/src/light/backend.rs +++ b/client/src/light/backend.rs @@ -24,7 +24,7 @@ use parking_lot::RwLock; use codec::{Decode, Encode}; use sp_core::ChangesTrieConfiguration; -use sp_core::storage::{well_known_keys, ChildInfo, OwnedChildInfo}; +use sp_core::storage::{well_known_keys, ChildInfo}; use sp_core::offchain::storage::InMemOffchainStorage; use sp_state_machine::{ Backend as StateBackend, TrieBackend, InMemoryBackend, ChangesTrieTransaction, @@ -312,17 +312,17 @@ impl BlockImportOperation for ImportOperation self.changes_trie_config_update = Some(changes_trie_config); // this is only called when genesis block is imported => shouldn't be performance bottleneck - let mut storage: HashMap, OwnedChildInfo)>, _> = HashMap::new(); + let mut storage: HashMap, _> = HashMap::new(); storage.insert(None, input.top); // create a list of children keys to re-compute roots for - let child_delta = input.children.iter() - .map(|(storage_key, storage_child)| (storage_key.clone(), None, storage_child.child_info.clone())) + let child_delta = input.children_default.iter() + .map(|(_storage_key, storage_child)| (storage_child.child_info.clone(), None)) .collect::>(); // make sure to persist the child storage - for (child_key, storage_child) in input.children { - storage.insert(Some((child_key, storage_child.child_info)), storage_child.data); + for (_child_key, storage_child) in input.children_default { + storage.insert(Some(storage_child.child_info), storage_child.data); } let storage_update = InMemoryBackend::from(storage); @@ -386,13 +386,12 @@ impl StateBackend for GenesisOrUnavailableState fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> ClientResult>> { match *self { GenesisOrUnavailableState::Genesis(ref state) => - Ok(state.child_storage(storage_key, child_info, key).expect(IN_MEMORY_EXPECT_PROOF)), + Ok(state.child_storage(child_info, key).expect(IN_MEMORY_EXPECT_PROOF)), GenesisOrUnavailableState::Unavailable => Err(ClientError::NotAvailableOnLightClient), } } @@ -407,13 +406,12 @@ impl StateBackend for GenesisOrUnavailableState fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { match *self { GenesisOrUnavailableState::Genesis(ref state) => Ok( - state.next_child_storage_key(storage_key, child_info, key) + state.next_child_storage_key(child_info, key) .expect(IN_MEMORY_EXPECT_PROOF) ), GenesisOrUnavailableState::Unavailable => Err(ClientError::NotAvailableOnLightClient), @@ -436,27 +434,25 @@ impl StateBackend for GenesisOrUnavailableState fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, action: A, ) { match *self { GenesisOrUnavailableState::Genesis(ref state) => - state.for_keys_in_child_storage(storage_key, child_info, action), + state.for_keys_in_child_storage(child_info, action), GenesisOrUnavailableState::Unavailable => (), } } fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], action: A, ) { match *self { GenesisOrUnavailableState::Genesis(ref state) => - state.for_child_keys_with_prefix(storage_key, child_info, prefix, action), + state.for_child_keys_with_prefix(child_info, prefix, action), GenesisOrUnavailableState::Unavailable => (), } } @@ -474,8 +470,7 @@ impl StateBackend for GenesisOrUnavailableState fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where @@ -483,7 +478,7 @@ impl StateBackend for GenesisOrUnavailableState { match *self { GenesisOrUnavailableState::Genesis(ref state) => { - let (root, is_equal, _) = state.child_storage_root(storage_key, child_info, delta); + let (root, is_equal, _) = state.child_storage_root(child_info, delta); (root, is_equal, Default::default()) }, GenesisOrUnavailableState::Unavailable => diff --git a/client/src/light/fetcher.rs b/client/src/light/fetcher.rs index 0ae0e68e0c8..ef6a062cf3c 100644 --- a/client/src/light/fetcher.rs +++ b/client/src/light/fetcher.rs @@ -23,6 +23,7 @@ use std::marker::PhantomData; use hash_db::{HashDB, Hasher, EMPTY_PREFIX}; use codec::{Decode, Encode}; use sp_core::{convert_hash, traits::CodeExecutor}; +use sp_core::storage::{ChildInfo, ChildType}; use sp_runtime::traits::{ Block as BlockT, Header as HeaderT, Hash, HashFor, NumberFor, AtLeast32Bit, CheckedConversion, @@ -135,7 +136,7 @@ impl> LightDataChecker { number: request.last_block.0, }, remote_max_block, - request.storage_key.as_ref().map(Vec::as_slice), + request.storage_key.as_ref(), &request.key) .map_err(|err| ClientError::ChangesTrieAccessFailed(err))?; result.extend(result_range); @@ -242,10 +243,14 @@ impl FetchChecker for LightDataChecker request: &RemoteReadChildRequest, remote_proof: StorageProof, ) -> ClientResult, Option>>> { + let child_info = match ChildType::from_prefixed_key(&request.storage_key) { + Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), + None => return Err("Invalid child type".into()), + }; read_child_proof_check::( convert_hash(request.header.state_root()), remote_proof, - &request.storage_key, + &child_info, request.keys.iter(), ).map_err(Into::into) } @@ -360,8 +365,6 @@ pub mod tests { use sc_client_api::{StorageProvider, ProofProvider}; use sc_block_builder::BlockBuilderProvider; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - type TestChecker = LightDataChecker< NativeExecutor, BlakeTwo256, @@ -411,11 +414,12 @@ pub mod tests { fn prepare_for_read_child_proof_check() -> (TestChecker, Header, StorageProof, Vec) { use substrate_test_runtime_client::DefaultTestClientBuilderExt; use substrate_test_runtime_client::TestClientBuilderExt; + let child_info = ChildInfo::new_default(b"child1"); + let child_info = &child_info; // prepare remote client let remote_client = substrate_test_runtime_client::TestClientBuilder::new() .add_extra_child_storage( - b":child_storage:default:child1".to_vec(), - CHILD_INFO_1, + child_info, b"key1".to_vec(), b"value1".to_vec(), ).build(); @@ -428,15 +432,13 @@ pub mod tests { // 'fetch' child read proof from remote node let child_value = remote_client.child_storage( &remote_block_id, - &StorageKey(b":child_storage:default:child1".to_vec()), - CHILD_INFO_1, + child_info, &StorageKey(b"key1".to_vec()), ).unwrap().unwrap().0; assert_eq!(b"value1"[..], child_value[..]); let remote_read_proof = remote_client.read_child_proof( &remote_block_id, - b":child_storage:default:child1", - CHILD_INFO_1, + child_info, &mut std::iter::once("key1".as_bytes()), ).unwrap(); @@ -510,20 +512,18 @@ pub mod tests { #[test] fn storage_child_read_proof_is_generated_and_checked() { + let child_info = ChildInfo::new_default(&b"child1"[..]); let ( local_checker, remote_block_header, remote_read_proof, result, ) = prepare_for_read_child_proof_check(); - let child_infos = CHILD_INFO_1.info(); assert_eq!((&local_checker as &dyn FetchChecker).check_read_child_proof( &RemoteReadChildRequest::

{ block: remote_block_header.hash(), header: remote_block_header, - storage_key: b":child_storage:default:child1".to_vec(), - child_info: child_infos.0.to_vec(), - child_type: child_infos.1, + storage_key: child_info.prefixed_storage_key(), keys: vec![b"key1".to_vec()], retry_count: None, }, diff --git a/frame/contracts/src/account_db.rs b/frame/contracts/src/account_db.rs index 165581e6764..aae853d2ff9 100644 --- a/frame/contracts/src/account_db.rs +++ b/frame/contracts/src/account_db.rs @@ -128,7 +128,7 @@ impl AccountDb for DirectAccountDb { trie_id: Option<&TrieId>, location: &StorageKey ) -> Option> { - trie_id.and_then(|id| child::get_raw(id, crate::trie_unique_id(&id[..]), &blake2_256(location))) + trie_id.and_then(|id| child::get_raw(&crate::child_trie_info(&id[..]), &blake2_256(location))) } fn get_code_hash(&self, account: &T::AccountId) -> Option> { >::get(account).and_then(|i| i.as_alive().map(|i| i.code_hash)) @@ -167,13 +167,13 @@ impl AccountDb for DirectAccountDb { (false, Some(info), _) => info, // Existing contract is being removed. (true, Some(info), None) => { - child::kill_storage(&info.trie_id, info.child_trie_unique_id()); + child::kill_storage(&info.child_trie_info()); >::remove(&address); continue; } // Existing contract is being replaced by a new one. (true, Some(info), Some(code_hash)) => { - child::kill_storage(&info.trie_id, info.child_trie_unique_id()); + child::kill_storage(&info.child_trie_info()); AliveContractInfo:: { code_hash, storage_size: T::StorageSizeOffset::get(), @@ -212,17 +212,16 @@ impl AccountDb for DirectAccountDb { for (k, v) in changed.storage.into_iter() { if let Some(value) = child::get_raw( - &new_info.trie_id[..], - new_info.child_trie_unique_id(), + &new_info.child_trie_info(), &blake2_256(&k), ) { new_info.storage_size -= value.len() as u32; } if let Some(value) = v { new_info.storage_size += value.len() as u32; - child::put_raw(&new_info.trie_id[..], new_info.child_trie_unique_id(), &blake2_256(&k), &value[..]); + child::put_raw(&new_info.child_trie_info(), &blake2_256(&k), &value[..]); } else { - child::kill(&new_info.trie_id[..], new_info.child_trie_unique_id(), &blake2_256(&k)); + child::kill(&new_info.child_trie_info(), &blake2_256(&k)); } } diff --git a/frame/contracts/src/lib.rs b/frame/contracts/src/lib.rs index 91f06d5607c..00b23cad199 100644 --- a/frame/contracts/src/lib.rs +++ b/frame/contracts/src/lib.rs @@ -125,12 +125,11 @@ use sp_runtime::{ use frame_support::dispatch::{DispatchResult, Dispatchable}; use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; use frame_support::{ - Parameter, decl_module, decl_event, decl_storage, decl_error, storage::child, - parameter_types, IsSubType, + Parameter, decl_module, decl_event, decl_storage, decl_error, + parameter_types, IsSubType, storage::child::{self, ChildInfo}, }; use frame_support::traits::{OnUnbalanced, Currency, Get, Time, Randomness}; use frame_system::{self as system, ensure_signed, RawOrigin, ensure_root}; -use sp_core::storage::well_known_keys::CHILD_STORAGE_KEY_PREFIX; use pallet_contracts_primitives::{RentProjection, ContractAccessError}; pub type CodeHash = ::Hash; @@ -229,15 +228,14 @@ pub struct RawAliveContractInfo { impl RawAliveContractInfo { /// Associated child trie unique id is built from the hash part of the trie id. - pub fn child_trie_unique_id(&self) -> child::ChildInfo { - trie_unique_id(&self.trie_id[..]) + pub fn child_trie_info(&self) -> ChildInfo { + child_trie_info(&self.trie_id[..]) } } /// Associated child trie unique id is built from the hash part of the trie id. -pub(crate) fn trie_unique_id(trie_id: &[u8]) -> child::ChildInfo { - let start = CHILD_STORAGE_KEY_PREFIX.len() + b"default:".len(); - child::ChildInfo::new_default(&trie_id[start ..]) +pub(crate) fn child_trie_info(trie_id: &[u8]) -> ChildInfo { + ChildInfo::new_default(trie_id) } pub type TombstoneContractInfo = @@ -270,10 +268,6 @@ pub trait TrieIdGenerator { /// /// The implementation must ensure every new trie id is unique: two consecutive calls with the /// same parameter needs to return different trie id values. - /// - /// Also, the implementation is responsible for ensuring that `TrieId` starts with - /// `:child_storage:`. - /// TODO: We want to change this, see https://github.com/paritytech/substrate/issues/2325 fn trie_id(account_id: &AccountId) -> TrieId; } @@ -297,13 +291,7 @@ where let mut buf = Vec::new(); buf.extend_from_slice(account_id.as_ref()); buf.extend_from_slice(&new_seed.to_le_bytes()[..]); - - // TODO: see https://github.com/paritytech/substrate/issues/2325 - CHILD_STORAGE_KEY_PREFIX.iter() - .chain(b"default:") - .chain(T::Hashing::hash(&buf[..]).as_ref().iter()) - .cloned() - .collect() + T::Hashing::hash(&buf[..]).as_ref().into() } } @@ -824,13 +812,11 @@ impl Module { let key_values_taken = delta.iter() .filter_map(|key| { child::get_raw( - &origin_contract.trie_id, - origin_contract.child_trie_unique_id(), + &origin_contract.child_trie_info(), &blake2_256(key), ).map(|value| { child::kill( - &origin_contract.trie_id, - origin_contract.child_trie_unique_id(), + &origin_contract.child_trie_info(), &blake2_256(key), ); @@ -842,8 +828,8 @@ impl Module { let tombstone = >::new( // This operation is cheap enough because last_write (delta not included) // is not this block as it has been checked earlier. - &child::child_root( - &origin_contract.trie_id, + &child::root( + &origin_contract.child_trie_info(), )[..], code_hash, ); @@ -851,8 +837,7 @@ impl Module { if tombstone != dest_tombstone { for (key, value) in key_values_taken { child::put_raw( - &origin_contract.trie_id, - origin_contract.child_trie_unique_id(), + &origin_contract.child_trie_info(), &blake2_256(key), &value, ); diff --git a/frame/contracts/src/rent.rs b/frame/contracts/src/rent.rs index 8b6825419c8..1aa52fff314 100644 --- a/frame/contracts/src/rent.rs +++ b/frame/contracts/src/rent.rs @@ -223,8 +223,7 @@ fn enact_verdict( Verdict::Kill => { >::remove(account); child::kill_storage( - &alive_contract_info.trie_id, - alive_contract_info.child_trie_unique_id(), + &alive_contract_info.child_trie_info(), ); >::deposit_event(RawEvent::Evicted(account.clone(), false)); None @@ -235,7 +234,9 @@ fn enact_verdict( } // Note: this operation is heavy. - let child_storage_root = child::child_root(&alive_contract_info.trie_id); + let child_storage_root = child::root( + &alive_contract_info.child_trie_info(), + ); let tombstone = >::new( &child_storage_root[..], @@ -245,8 +246,7 @@ fn enact_verdict( >::insert(account, &tombstone_info); child::kill_storage( - &alive_contract_info.trie_id, - alive_contract_info.child_trie_unique_id(), + &alive_contract_info.child_trie_info(), ); >::deposit_event(RawEvent::Evicted(account.clone(), true)); diff --git a/frame/contracts/src/tests.rs b/frame/contracts/src/tests.rs index 2bcd708904b..f7170e9172e 100644 --- a/frame/contracts/src/tests.rs +++ b/frame/contracts/src/tests.rs @@ -200,10 +200,7 @@ impl TrieIdGenerator for DummyTrieIdGenerator { *v }); - // TODO: see https://github.com/paritytech/substrate/issues/2325 let mut res = vec![]; - res.extend_from_slice(well_known_keys::CHILD_STORAGE_KEY_PREFIX); - res.extend_from_slice(b"default:"); res.extend_from_slice(&new_seed.to_le_bytes()); res.extend_from_slice(&account_id.to_le_bytes()); res diff --git a/frame/support/src/storage/child.rs b/frame/support/src/storage/child.rs index d4d046a9d42..658908d258a 100644 --- a/frame/support/src/storage/child.rs +++ b/frame/support/src/storage/child.rs @@ -16,100 +16,90 @@ //! Operation on runtime child storages. //! -//! This module is a currently only a variant of unhashed with additional `storage_key`. -//! Note that `storage_key` must be unique and strong (strong in the sense of being long enough to -//! avoid collision from a resistant hash function (which unique implies)). -//! -//! A **key collision free** unique id is required as parameter to avoid key collision -//! between child tries. -//! This unique id management and generation responsibility is delegated to pallet module. -// NOTE: could replace unhashed by having only one kind of storage (root being null storage key (storage_key can become Option<&[u8]>). +//! This module is a currently only a variant of unhashed with additional `child_info`. +// NOTE: could replace unhashed by having only one kind of storage (top trie being the child info +// of null length parent storage key). use crate::sp_std::prelude::*; use codec::{Codec, Encode, Decode}; -pub use sp_core::storage::ChildInfo; +pub use sp_core::storage::{ChildInfo, ChildType}; /// Return the value of the item in storage under `key`, or `None` if there is no explicit entry. pub fn get( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { - let (data, child_type) = child_info.info(); - sp_io::storage::child_get( - storage_key, - data, - child_type, - key, - ).and_then(|v| { - Decode::decode(&mut &v[..]).map(Some).unwrap_or_else(|_| { - // TODO #3700: error should be handleable. - runtime_print!("ERROR: Corrupted state in child trie at {:?}/{:?}", storage_key, key); - None - }) - }) + match child_info.child_type() { + ChildType::ParentKeyId => { + let storage_key = child_info.storage_key(); + sp_io::default_child_storage::get( + storage_key, + key, + ).and_then(|v| { + Decode::decode(&mut &v[..]).map(Some).unwrap_or_else(|_| { + // TODO #3700: error should be handleable. + runtime_print!("ERROR: Corrupted state in child trie at {:?}/{:?}", storage_key, key); + None + }) + }) + }, + } } /// Return the value of the item in storage under `key`, or the type's default if there is no /// explicit entry. pub fn get_or_default( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> T { - get(storage_key, child_info, key).unwrap_or_else(Default::default) + get(child_info, key).unwrap_or_else(Default::default) } /// Return the value of the item in storage under `key`, or `default_value` if there is no /// explicit entry. pub fn get_or( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], default_value: T, ) -> T { - get(storage_key, child_info, key).unwrap_or(default_value) + get(child_info, key).unwrap_or(default_value) } /// Return the value of the item in storage under `key`, or `default_value()` if there is no /// explicit entry. pub fn get_or_else T>( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], default_value: F, ) -> T { - get(storage_key, child_info, key).unwrap_or_else(default_value) + get(child_info, key).unwrap_or_else(default_value) } /// Put `value` in storage under `key`. pub fn put( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], value: &T, ) { - let (data, child_type) = child_info.info(); - value.using_encoded(|slice| - sp_io::storage::child_set( - storage_key, - data, - child_type, - key, - slice, - ) - ); + match child_info.child_type() { + ChildType::ParentKeyId => value.using_encoded(|slice| + sp_io::default_child_storage::set( + child_info.storage_key(), + key, + slice, + ) + ), + } } /// Remove `key` from storage, returning its value if it had an explicit entry or `None` otherwise. pub fn take( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { - let r = get(storage_key, child_info, key); + let r = get(child_info, key); if r.is_some() { - kill(storage_key, child_info, key); + kill(child_info, key); } r } @@ -117,113 +107,106 @@ pub fn take( /// Remove `key` from storage, returning its value, or, if there was no explicit entry in storage, /// the default for its type. pub fn take_or_default( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> T { - take(storage_key, child_info, key).unwrap_or_else(Default::default) + take(child_info, key).unwrap_or_else(Default::default) } /// Return the value of the item in storage under `key`, or `default_value` if there is no /// explicit entry. Ensure there is no explicit entry on return. pub fn take_or( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], default_value: T, ) -> T { - take(storage_key, child_info, key).unwrap_or(default_value) + take(child_info, key).unwrap_or(default_value) } /// Return the value of the item in storage under `key`, or `default_value()` if there is no /// explicit entry. Ensure there is no explicit entry on return. pub fn take_or_else T>( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], default_value: F, ) -> T { - take(storage_key, child_info, key).unwrap_or_else(default_value) + take(child_info, key).unwrap_or_else(default_value) } /// Check to see if `key` has an explicit entry in storage. pub fn exists( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> bool { - let (data, child_type) = child_info.info(); - sp_io::storage::child_read( - storage_key, data, child_type, - key, &mut [0;0][..], 0, - ).is_some() + match child_info.child_type() { + ChildType::ParentKeyId => sp_io::default_child_storage::read( + child_info.storage_key(), + key, &mut [0;0][..], 0, + ).is_some(), + } } /// Remove all `storage_key` key/values pub fn kill_storage( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, ) { - let (data, child_type) = child_info.info(); - sp_io::storage::child_storage_kill( - storage_key, - data, - child_type, - ) + match child_info.child_type() { + ChildType::ParentKeyId => sp_io::default_child_storage::storage_kill( + child_info.storage_key(), + ), + } } /// Ensure `key` has no explicit entry in storage. pub fn kill( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) { - let (data, child_type) = child_info.info(); - sp_io::storage::child_clear( - storage_key, - data, - child_type, - key, - ); + match child_info.child_type() { + ChildType::ParentKeyId => { + sp_io::default_child_storage::clear( + child_info.storage_key(), + key, + ); + }, + } } /// Get a Vec of bytes from storage. pub fn get_raw( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option> { - let (data, child_type) = child_info.info(); - sp_io::storage::child_get( - storage_key, - data, - child_type, - key, - ) + match child_info.child_type() { + ChildType::ParentKeyId => sp_io::default_child_storage::get( + child_info.storage_key(), + key, + ), + } } /// Put a raw byte slice into storage. pub fn put_raw( - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], value: &[u8], ) { - let (data, child_type) = child_info.info(); - sp_io::storage::child_set( - storage_key, - data, - child_type, - key, - value, - ) + match child_info.child_type() { + ChildType::ParentKeyId => sp_io::default_child_storage::set( + child_info.storage_key(), + key, + value, + ), + } } /// Calculate current child root value. -pub fn child_root( - storage_key: &[u8], +pub fn root( + child_info: &ChildInfo, ) -> Vec { - sp_io::storage::child_root( - storage_key, - ) + match child_info.child_type() { + ChildType::ParentKeyId => sp_io::default_child_storage::root( + child_info.storage_key(), + ), + } } diff --git a/frame/support/test/tests/instance.rs b/frame/support/test/tests/instance.rs index 00b110ffb90..779460ce313 100644 --- a/frame/support/test/tests/instance.rs +++ b/frame/support/test/tests/instance.rs @@ -301,7 +301,7 @@ fn new_test_ext() -> sp_io::TestExternalities { fn storage_instance_independence() { let mut storage = sp_core::storage::Storage { top: std::collections::BTreeMap::new(), - children: std::collections::HashMap::new() + children_default: std::collections::HashMap::new() }; sp_state_machine::BasicExternalities::execute_with_storage(&mut storage, || { module2::Value::::put(0); diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 50f2b089f20..d1bc3c1a51e 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -930,7 +930,7 @@ impl Module { >::hashed_key().to_vec() => T::BlockNumber::one().encode(), >::hashed_key().to_vec() => [69u8; 32].encode() ], - children: map![], + children_default: map![], }) } diff --git a/primitives/externalities/src/lib.rs b/primitives/externalities/src/lib.rs index 2c0f50cd743..96f17579a29 100644 --- a/primitives/externalities/src/lib.rs +++ b/primitives/externalities/src/lib.rs @@ -24,7 +24,7 @@ use std::any::{Any, TypeId}; -use sp_storage::{ChildStorageKey, ChildInfo}; +use sp_storage::ChildInfo; pub use scope_limited::{set_and_run_with_externalities, with_externalities}; pub use extensions::{Extension, Extensions, ExtensionStore}; @@ -62,8 +62,7 @@ pub trait Externalities: ExtensionStore { /// Returns an `Option` that holds the SCALE encoded hash. fn child_storage_hash( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option>; @@ -72,8 +71,7 @@ pub trait Externalities: ExtensionStore { /// Returns an `Option` that holds the SCALE encoded hash. fn child_storage( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option>; @@ -85,12 +83,11 @@ pub trait Externalities: ExtensionStore { /// Set child storage entry `key` of current contract being called (effective immediately). fn set_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: Vec, value: Vec, ) { - self.place_child_storage(storage_key, child_info, key, Some(value)) + self.place_child_storage(child_info, key, Some(value)) } /// Clear a storage entry (`key`) of current contract being called (effective immediately). @@ -101,11 +98,10 @@ pub trait Externalities: ExtensionStore { /// Clear a child storage entry (`key`) of current contract being called (effective immediately). fn clear_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) { - self.place_child_storage(storage_key, child_info, key.to_vec(), None) + self.place_child_storage(child_info, key.to_vec(), None) } /// Whether a storage entry exists. @@ -116,11 +112,10 @@ pub trait Externalities: ExtensionStore { /// Whether a child storage entry exists. fn exists_child_storage( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> bool { - self.child_storage(storage_key, child_info, key).is_some() + self.child_storage(child_info, key).is_some() } /// Returns the key immediately following the given key, if it exists. @@ -129,13 +124,12 @@ pub trait Externalities: ExtensionStore { /// Returns the key immediately following the given key, if it exists, in child storage. fn next_child_storage_key( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option>; /// Clear an entire child storage. - fn kill_child_storage(&mut self, storage_key: ChildStorageKey, child_info: ChildInfo); + fn kill_child_storage(&mut self, child_info: &ChildInfo); /// Clear storage entries which keys are start with the given prefix. fn clear_prefix(&mut self, prefix: &[u8]); @@ -143,8 +137,7 @@ pub trait Externalities: ExtensionStore { /// Clear child storage entries which keys are start with the given prefix. fn clear_child_prefix( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ); @@ -154,8 +147,7 @@ pub trait Externalities: ExtensionStore { /// Set or clear a child storage entry. fn place_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: Vec, value: Option>, ); @@ -178,7 +170,7 @@ pub trait Externalities: ExtensionStore { /// storage map will be removed. fn child_storage_root( &mut self, - storage_key: ChildStorageKey, + child_info: &ChildInfo, ) -> Vec; /// Get the changes trie root of the current storage overlay at a block with given `parent`. diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index ee146dbc292..b5827202333 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -37,7 +37,7 @@ use sp_core::{ traits::{KeystoreExt, CallInWasmExt, TaskExecutorExt}, offchain::{OffchainExt, TransactionPoolExt}, hexdisplay::HexDisplay, - storage::{ChildStorageKey, ChildInfo}, + storage::ChildInfo, }; use sp_core::{ @@ -74,19 +74,6 @@ pub enum EcdsaVerifyError { BadSignature, } -/// Returns a `ChildStorageKey` if the given `storage_key` slice is a valid storage -/// key or panics otherwise. -/// -/// Panicking here is aligned with what the `without_std` environment would do -/// in the case of an invalid child storage key. -#[cfg(feature = "std")] -fn child_storage_key_or_panic(storage_key: &[u8]) -> ChildStorageKey { - match ChildStorageKey::from_slice(storage_key) { - Some(storage_key) => storage_key, - None => panic!("child storage key is invalid"), - } -} - /// Interface for accessing the storage from within the runtime. #[runtime_interface] pub trait Storage { @@ -95,30 +82,6 @@ pub trait Storage { self.storage(key).map(|s| s.to_vec()) } - /// All Child api uses : - /// - A `child_storage_key` to define the anchor point for the child proof - /// (commonly the location where the child root is stored in its parent trie). - /// - A `child_storage_types` to identify the kind of the child type and how its - /// `child definition` parameter is encoded. - /// - A `child_definition_parameter` which is the additional information required - /// to use the child trie. For instance defaults child tries requires this to - /// contain a collision free unique id. - /// - /// This function specifically returns the data for `key` in the child storage or `None` - /// if the key can not be found. - fn child_get( - &self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, - key: &[u8], - ) -> Option> { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.child_storage(storage_key, child_info, key).map(|s| s.to_vec()) - } - /// Get `key` from storage, placing the value into `value_out` and return the number of /// bytes that the entry in storage has beyond the offset or `None` if the storage entry /// doesn't exist at all. @@ -134,26 +97,87 @@ pub trait Storage { }) } + /// Set `key` to `value` in the storage. + fn set(&mut self, key: &[u8], value: &[u8]) { + self.set_storage(key.to_vec(), value.to_vec()); + } + + /// Clear the storage of the given `key` and its value. + fn clear(&mut self, key: &[u8]) { + self.clear_storage(key) + } + + /// Check whether the given `key` exists in storage. + fn exists(&self, key: &[u8]) -> bool { + self.exists_storage(key) + } + + /// Clear the storage of each key-value pair where the key starts with the given `prefix`. + fn clear_prefix(&mut self, prefix: &[u8]) { + Externalities::clear_prefix(*self, prefix) + } + + /// "Commit" all existing operations and compute the resulting storage root. + /// + /// The hashing algorithm is defined by the `Block`. + /// + /// Returns the SCALE encoded hash. + fn root(&mut self) -> Vec { + self.storage_root() + } + + /// "Commit" all existing operations and get the resulting storage change root. + /// `parent_hash` is a SCALE encoded hash. + /// + /// The hashing algorithm is defined by the `Block`. + /// + /// Returns an `Some(_)` which holds the SCALE encoded hash or `None` when + /// changes trie is disabled. + fn changes_root(&mut self, parent_hash: &[u8]) -> Option> { + self.storage_changes_root(parent_hash) + .expect("Invalid `parent_hash` given to `changes_root`.") + } + + /// Get the next key in storage after the given one in lexicographic order. + fn next_key(&mut self, key: &[u8]) -> Option> { + self.next_storage_key(&key) + } +} + +/// Interface for accessing the child storage for default child trie, +/// from within the runtime. +#[runtime_interface] +pub trait DefaultChildStorage { + + /// Get a default child storage value for a given key. + /// + /// Parameter `storage_key` is the unprefixed location of the root of the child trie in the parent trie. + /// Result is `None` if the value for `key` in the child storage can not be found. + fn get( + &self, + storage_key: &[u8], + key: &[u8], + ) -> Option> { + let child_info = ChildInfo::new_default(storage_key); + self.child_storage(&child_info, key).map(|s| s.to_vec()) + } + + /// Allocation efficient variant of `get`. + /// /// Get `key` from child storage, placing the value into `value_out` and return the number /// of bytes that the entry in storage has beyond the offset or `None` if the storage entry /// doesn't exist at all. /// If `value_out` length is smaller than the returned length, only `value_out` length bytes /// are copied into `value_out`. - /// - /// See `child_get` for common child api parameters. - fn child_read( + fn read( &self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], key: &[u8], value_out: &mut [u8], value_offset: u32, ) -> Option { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.child_storage(storage_key, child_info, key) + let child_info = ChildInfo::new_default(storage_key); + self.child_storage(&child_info, key) .map(|value| { let value_offset = value_offset as usize; let data = &value[value_offset.min(value.len())..]; @@ -163,159 +187,91 @@ pub trait Storage { }) } - /// Set `key` to `value` in the storage. - fn set(&mut self, key: &[u8], value: &[u8]) { - self.set_storage(key.to_vec(), value.to_vec()); - } - - /// Set `key` to `value` in the child storage denoted by `child_storage_key`. + /// Set a child storage value. /// - /// See `child_get` for common child api parameters. - fn child_set( + /// Set `key` to `value` in the child storage denoted by `storage_key`. + fn set( &mut self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], key: &[u8], value: &[u8], ) { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.set_child_storage(storage_key, child_info, key.to_vec(), value.to_vec()); + let child_info = ChildInfo::new_default(storage_key); + self.set_child_storage(&child_info, key.to_vec(), value.to_vec()); } - /// Clear the storage of the given `key` and its value. - fn clear(&mut self, key: &[u8]) { - self.clear_storage(key) - } - - /// Clear the given child storage of the given `key` and its value. + /// Clear a child storage key. /// - /// See `child_get` for common child api parameters. - fn child_clear( + /// For the default child storage at `storage_key`, clear value at `key`. + fn clear ( &mut self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], key: &[u8], ) { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.clear_child_storage(storage_key, child_info, key); + let child_info = ChildInfo::new_default(storage_key); + self.clear_child_storage(&child_info, key); } /// Clear an entire child storage. /// - /// See `child_get` for common child api parameters. - fn child_storage_kill( + /// If it exists, the child storage for `storage_key` + /// is removed. + fn storage_kill( &mut self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], ) { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.kill_child_storage(storage_key, child_info); - } - - /// Check whether the given `key` exists in storage. - fn exists(&self, key: &[u8]) -> bool { - self.exists_storage(key) + let child_info = ChildInfo::new_default(storage_key); + self.kill_child_storage(&child_info); } - /// Check whether the given `key` exists in storage. + /// Check a child storage key. /// - /// See `child_get` for common child api parameters. - fn child_exists( + /// Check whether the given `key` exists in default child defined at `storage_key`. + fn exists( &self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], key: &[u8], ) -> bool { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.exists_child_storage(storage_key, child_info, key) - } - - /// Clear the storage of each key-value pair where the key starts with the given `prefix`. - fn clear_prefix(&mut self, prefix: &[u8]) { - Externalities::clear_prefix(*self, prefix) + let child_info = ChildInfo::new_default(storage_key); + self.exists_child_storage(&child_info, key) } - /// Clear the child storage of each key-value pair where the key starts with the given `prefix`. + /// Clear child default key by prefix. /// - /// See `child_get` for common child api parameters. - fn child_clear_prefix( + /// Clear the child storage of each key-value pair where the key starts with the given `prefix`. + fn clear_prefix( &mut self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], prefix: &[u8], ) { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.clear_child_prefix(storage_key, child_info, prefix); + let child_info = ChildInfo::new_default(storage_key); + self.clear_child_prefix(&child_info, prefix); } - /// "Commit" all existing operations and compute the resulting storage root. + /// Default child root calculation. /// - /// The hashing algorithm is defined by the `Block`. - /// - /// Returns the SCALE encoded hash. - fn root(&mut self) -> Vec { - self.storage_root() - } - /// "Commit" all existing operations and compute the resulting child storage root. - /// /// The hashing algorithm is defined by the `Block`. /// /// Returns the SCALE encoded hash. - /// - /// See `child_get` for common child api parameters. - fn child_root( + fn root( &mut self, - child_storage_key: &[u8], + storage_key: &[u8], ) -> Vec { - let storage_key = child_storage_key_or_panic(child_storage_key); - self.child_storage_root(storage_key) + let child_info = ChildInfo::new_default(storage_key); + self.child_storage_root(&child_info) } - /// "Commit" all existing operations and get the resulting storage change root. - /// `parent_hash` is a SCALE encoded hash. + /// Child storage key iteration. /// - /// The hashing algorithm is defined by the `Block`. - /// - /// Returns an `Some(_)` which holds the SCALE encoded hash or `None` when - /// changes trie is disabled. - fn changes_root(&mut self, parent_hash: &[u8]) -> Option> { - self.storage_changes_root(parent_hash) - .expect("Invalid `parent_hash` given to `changes_root`.") - } - - /// Get the next key in storage after the given one in lexicographic order. - fn next_key(&mut self, key: &[u8]) -> Option> { - self.next_storage_key(&key) - } - /// Get the next key in storage after the given one in lexicographic order in child storage. - fn child_next_key( + fn next_key( &mut self, - child_storage_key: &[u8], - child_definition: &[u8], - child_type: u32, + storage_key: &[u8], key: &[u8], ) -> Option> { - let storage_key = child_storage_key_or_panic(child_storage_key); - let child_info = ChildInfo::resolve_child_info(child_type, child_definition) - .expect("Invalid child definition"); - self.next_child_storage_key(storage_key, child_info, key) + let child_info = ChildInfo::new_default(storage_key); + self.next_child_storage_key(&child_info, key) } } @@ -1019,6 +975,7 @@ pub type TestExternalities = sp_state_machine::TestExternalities b"bar".to_vec()], - children: map![], + children_default: map![], }); t.execute_with(|| { @@ -1063,7 +1020,7 @@ mod tests { fn read_storage_works() { let mut t = BasicExternalities::new(Storage { top: map![b":test".to_vec() => b"\x0b\0\0\0Hello world".to_vec()], - children: map![], + children_default: map![], }); t.execute_with(|| { @@ -1085,7 +1042,7 @@ mod tests { b":abc".to_vec() => b"\x0b\0\0\0Hello world".to_vec(), b":abdd".to_vec() => b"\x0b\0\0\0Hello world".to_vec() ], - children: map![], + children_default: map![], }); t.execute_with(|| { diff --git a/primitives/runtime/src/lib.rs b/primitives/runtime/src/lib.rs index e69f892626b..0f609b00500 100644 --- a/primitives/runtime/src/lib.rs +++ b/primitives/runtime/src/lib.rs @@ -136,15 +136,15 @@ impl BuildStorage for sp_core::storage::Storage { storage: &mut sp_core::storage::Storage, )-> Result<(), String> { storage.top.extend(self.top.iter().map(|(k, v)| (k.clone(), v.clone()))); - for (k, other_map) in self.children.iter() { + for (k, other_map) in self.children_default.iter() { let k = k.clone(); - if let Some(map) = storage.children.get_mut(&k) { + if let Some(map) = storage.children_default.get_mut(&k) { map.data.extend(other_map.data.iter().map(|(k, v)| (k.clone(), v.clone()))); - if !map.child_info.try_update(other_map.child_info.as_ref()) { + if !map.child_info.try_update(&other_map.child_info) { return Err("Incompatible child info update".to_string()); } } else { - storage.children.insert(k, other_map.clone()); + storage.children_default.insert(k, other_map.clone()); } } Ok(()) diff --git a/primitives/state-machine/src/backend.rs b/primitives/state-machine/src/backend.rs index 94144fdb90f..df8f810ceb7 100644 --- a/primitives/state-machine/src/backend.rs +++ b/primitives/state-machine/src/backend.rs @@ -20,7 +20,7 @@ use log::warn; use hash_db::Hasher; use codec::{Decode, Encode}; -use sp_core::{traits::RuntimeCode, storage::{ChildInfo, OwnedChildInfo, well_known_keys}}; +use sp_core::{traits::RuntimeCode, storage::{ChildInfo, well_known_keys}}; use sp_trie::{TrieMut, MemoryDB, trie_types::TrieDBMut}; use crate::{ @@ -54,19 +54,17 @@ pub trait Backend: std::fmt::Debug { /// Get keyed child storage or None if there is nothing associated. fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error>; /// Get child keyed storage value hash or None if there is nothing associated. fn child_storage_hash( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - self.child_storage(storage_key, child_info, key).map(|v| v.map(|v| H::hash(&v))) + self.child_storage(child_info, key).map(|v| v.map(|v| H::hash(&v))) } /// true if a key exists in storage. @@ -77,11 +75,10 @@ pub trait Backend: std::fmt::Debug { /// true if a key exists in child storage. fn exists_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result { - Ok(self.child_storage(storage_key, child_info, key)?.is_some()) + Ok(self.child_storage(child_info, key)?.is_some()) } /// Return the next key in storage in lexicographic order or `None` if there is no value. @@ -90,16 +87,14 @@ pub trait Backend: std::fmt::Debug { /// Return the next key in child storage in lexicographic order or `None` if there is no value. fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8] ) -> Result, Self::Error>; /// Retrieve all entries keys of child storage and call `f` for each of those keys. fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ); @@ -118,8 +113,7 @@ pub trait Backend: std::fmt::Debug { /// call `f` for each of those keys. fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ); @@ -137,8 +131,7 @@ pub trait Backend: std::fmt::Debug { /// is true if child storage root equals default storage root. fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where @@ -158,12 +151,11 @@ pub trait Backend: std::fmt::Debug { /// Get all keys of child storage with given prefix fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec { let mut all = Vec::new(); - self.for_child_keys_with_prefix(storage_key, child_info, prefix, |k| all.push(k.to_vec())); + self.for_child_keys_with_prefix(child_info, prefix, |k| all.push(k.to_vec())); all } @@ -183,20 +175,21 @@ pub trait Backend: std::fmt::Debug { where I1: IntoIterator)>, I2i: IntoIterator)>, - I2: IntoIterator, + I2: IntoIterator, H::Out: Ord + Encode, { let mut txs: Self::Transaction = Default::default(); let mut child_roots: Vec<_> = Default::default(); // child first - for (storage_key, child_delta, child_info) in child_deltas { + for (child_info, child_delta) in child_deltas { let (child_root, empty, child_txs) = - self.child_storage_root(&storage_key[..], child_info.as_ref(), child_delta); + self.child_storage_root(&child_info, child_delta); + let prefixed_storage_key = child_info.prefixed_storage_key(); txs.consolidate(child_txs); if empty { - child_roots.push((storage_key, None)); + child_roots.push((prefixed_storage_key.into_inner(), None)); } else { - child_roots.push((storage_key, Some(child_root.encode()))); + child_roots.push((prefixed_storage_key.into_inner(), Some(child_root.encode()))); } } let (root, parent_txs) = self.storage_root( @@ -239,20 +232,18 @@ impl<'a, T: Backend, H: Hasher> Backend for &'a T { fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - (*self).child_storage(storage_key, child_info, key) + (*self).child_storage(child_info, key) } fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - (*self).for_keys_in_child_storage(storage_key, child_info, f) + (*self).for_keys_in_child_storage(child_info, f) } fn next_storage_key(&self, key: &[u8]) -> Result, Self::Error> { @@ -261,11 +252,10 @@ impl<'a, T: Backend, H: Hasher> Backend for &'a T { fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - (*self).next_child_storage_key(storage_key, child_info, key) + (*self).next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -274,12 +264,11 @@ impl<'a, T: Backend, H: Hasher> Backend for &'a T { fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - (*self).for_child_keys_with_prefix(storage_key, child_info, prefix, f) + (*self).for_child_keys_with_prefix(child_info, prefix, f) } fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) @@ -292,15 +281,14 @@ impl<'a, T: Backend, H: Hasher> Backend for &'a T { fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where I: IntoIterator)>, H::Out: Ord, { - (*self).child_storage_root(storage_key, child_info, delta) + (*self).child_storage_root(child_info, delta) } fn pairs(&self) -> Vec<(StorageKey, StorageValue)> { @@ -331,7 +319,7 @@ impl Consolidate for () { } impl Consolidate for Vec<( - Option<(StorageKey, OwnedChildInfo)>, + Option, StorageCollection, )> { fn consolidate(&mut self, mut other: Self) { diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index b49913418a4..7f26085958e 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -21,11 +21,11 @@ use std::{ }; use crate::{Backend, InMemoryBackend, StorageKey, StorageValue}; use hash_db::Hasher; -use sp_trie::{TrieConfiguration, default_child_trie_root}; +use sp_trie::{TrieConfiguration, empty_child_trie_root}; use sp_trie::trie_types::Layout; use sp_core::{ storage::{ - well_known_keys::is_child_storage_key, ChildStorageKey, Storage, + well_known_keys::is_child_storage_key, Storage, ChildInfo, StorageChild, }, traits::Externalities, Blake2Hasher, @@ -83,7 +83,7 @@ impl BasicExternalities { let mut ext = Self { inner: Storage { top: std::mem::replace(&mut storage.top, Default::default()), - children: std::mem::replace(&mut storage.children, Default::default()), + children_default: std::mem::replace(&mut storage.children_default, Default::default()), }, extensions: Default::default(), }; @@ -111,7 +111,7 @@ impl BasicExternalities { impl PartialEq for BasicExternalities { fn eq(&self, other: &BasicExternalities) -> bool { self.inner.top.eq(&other.inner.top) - && self.inner.children.eq(&other.inner.children) + && self.inner.children_default.eq(&other.inner.children_default) } } @@ -132,7 +132,7 @@ impl From> for BasicExternalities { BasicExternalities { inner: Storage { top: hashmap, - children: Default::default(), + children_default: Default::default(), }, extensions: Default::default(), } @@ -150,20 +150,19 @@ impl Externalities for BasicExternalities { fn child_storage( &self, - storage_key: ChildStorageKey, - _child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { - self.inner.children.get(storage_key.as_ref()).and_then(|child| child.data.get(key)).cloned() + self.inner.children_default.get(child_info.storage_key()) + .and_then(|child| child.data.get(key)).cloned() } fn child_storage_hash( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option> { - self.child_storage(storage_key, child_info, key).map(|v| Blake2Hasher::hash(&v).encode()) + self.child_storage(child_info, key).map(|v| Blake2Hasher::hash(&v).encode()) } fn next_storage_key(&self, key: &[u8]) -> Option { @@ -173,12 +172,11 @@ impl Externalities for BasicExternalities { fn next_child_storage_key( &self, - storage_key: ChildStorageKey, - _child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { let range = (Bound::Excluded(key), Bound::Unbounded); - self.inner.children.get(storage_key.as_ref()) + self.inner.children_default.get(child_info.storage_key()) .and_then(|child| child.data.range::<[u8], _>(range).next().map(|(k, _)| k).cloned()) } @@ -196,12 +194,11 @@ impl Externalities for BasicExternalities { fn place_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: StorageKey, value: Option, ) { - let child_map = self.inner.children.entry(storage_key.into_owned()) + let child_map = self.inner.children_default.entry(child_info.storage_key().to_vec()) .or_insert_with(|| StorageChild { data: Default::default(), child_info: child_info.to_owned(), @@ -215,10 +212,9 @@ impl Externalities for BasicExternalities { fn kill_child_storage( &mut self, - storage_key: ChildStorageKey, - _child_info: ChildInfo, + child_info: &ChildInfo, ) { - self.inner.children.remove(storage_key.as_ref()); + self.inner.children_default.remove(child_info.storage_key()); } fn clear_prefix(&mut self, prefix: &[u8]) { @@ -243,11 +239,10 @@ impl Externalities for BasicExternalities { fn clear_child_prefix( &mut self, - storage_key: ChildStorageKey, - _child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) { - if let Some(child) = self.inner.children.get_mut(storage_key.as_ref()) { + if let Some(child) = self.inner.children_default.get_mut(child_info.storage_key()) { let to_remove = child.data.range::<[u8], _>((Bound::Included(prefix), Bound::Unbounded)) .map(|(k, _)| k) .take_while(|k| k.starts_with(prefix)) @@ -264,20 +259,19 @@ impl Externalities for BasicExternalities { fn storage_root(&mut self) -> Vec { let mut top = self.inner.top.clone(); - let keys: Vec<_> = self.inner.children.keys().map(|k| k.to_vec()).collect(); + let prefixed_keys: Vec<_> = self.inner.children_default.iter().map(|(_k, v)| { + (v.child_info.prefixed_storage_key(), v.child_info.clone()) + }).collect(); // Single child trie implementation currently allows using the same child // empty root for all child trie. Using null storage key until multiple // type of child trie support. - let empty_hash = default_child_trie_root::>(&[]); - for storage_key in keys { - let child_root = self.child_storage_root( - ChildStorageKey::from_slice(storage_key.as_slice()) - .expect("Map only feed by valid keys; qed"), - ); + let empty_hash = empty_child_trie_root::>(); + for (prefixed_storage_key, child_info) in prefixed_keys { + let child_root = self.child_storage_root(&child_info); if &empty_hash[..] == &child_root[..] { - top.remove(storage_key.as_slice()); + top.remove(prefixed_storage_key.as_slice()); } else { - top.insert(storage_key, child_root); + top.insert(prefixed_storage_key.into_inner(), child_root); } } @@ -286,15 +280,15 @@ impl Externalities for BasicExternalities { fn child_storage_root( &mut self, - storage_key: ChildStorageKey, + child_info: &ChildInfo, ) -> Vec { - if let Some(child) = self.inner.children.get(storage_key.as_ref()) { + if let Some(child) = self.inner.children_default.get(child_info.storage_key()) { let delta = child.data.clone().into_iter().map(|(k, v)| (k, Some(v))); InMemoryBackend::::default() - .child_storage_root(storage_key.as_ref(), child.child_info.as_ref(), delta).0 + .child_storage_root(&child.child_info, delta).0 } else { - default_child_trie_root::>(storage_key.as_ref()) + empty_child_trie_root::>() }.encode() } @@ -336,8 +330,6 @@ mod tests { use sp_core::storage::well_known_keys::CODE; use hex_literal::hex; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - #[test] fn commit_should_work() { let mut ext = BasicExternalities::default(); @@ -361,30 +353,28 @@ mod tests { #[test] fn children_works() { - let child_storage = b":child_storage:default:test".to_vec(); - + let child_info = ChildInfo::new_default(b"storage_key"); + let child_info = &child_info; let mut ext = BasicExternalities::new(Storage { top: Default::default(), - children: map![ - child_storage.clone() => StorageChild { - data: map![ b"doe".to_vec() => b"reindeer".to_vec() ], - child_info: CHILD_INFO_1.to_owned(), + children_default: map![ + child_info.storage_key().to_vec() => StorageChild { + data: map![ b"doe".to_vec() => b"reindeer".to_vec() ], + child_info: child_info.to_owned(), } ] }); - let child = || ChildStorageKey::from_vec(child_storage.clone()).unwrap(); - - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, b"doe"), Some(b"reindeer".to_vec())); + assert_eq!(ext.child_storage(child_info, b"doe"), Some(b"reindeer".to_vec())); - ext.set_child_storage(child(), CHILD_INFO_1, b"dog".to_vec(), b"puppy".to_vec()); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, b"dog"), Some(b"puppy".to_vec())); + ext.set_child_storage(child_info, b"dog".to_vec(), b"puppy".to_vec()); + assert_eq!(ext.child_storage(child_info, b"dog"), Some(b"puppy".to_vec())); - ext.clear_child_storage(child(), CHILD_INFO_1, b"dog"); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, b"dog"), None); + ext.clear_child_storage(child_info, b"dog"); + assert_eq!(ext.child_storage(child_info, b"dog"), None); - ext.kill_child_storage(child(), CHILD_INFO_1); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, b"doe"), None); + ext.kill_child_storage(child_info); + assert_eq!(ext.child_storage(child_info, b"doe"), None); } #[test] @@ -392,6 +382,6 @@ mod tests { // Make sure no values are set by default in `BasicExternalities`. let storage = BasicExternalities::new_empty().into_storages(); assert!(storage.top.is_empty()); - assert!(storage.children.is_empty()); + assert!(storage.children_default.is_empty()); } } diff --git a/primitives/state-machine/src/changes_trie/build.rs b/primitives/state-machine/src/changes_trie/build.rs index 39ad81ed59a..45535204e08 100644 --- a/primitives/state-machine/src/changes_trie/build.rs +++ b/primitives/state-machine/src/changes_trie/build.rs @@ -32,6 +32,7 @@ use crate::{ input::{InputKey, InputPair, DigestIndex, ExtrinsicIndex, ChildIndex}, }, }; +use sp_core::storage::{ChildInfo, ChildType, PrefixedStorageKey}; /// Prepare input pairs for building a changes trie of given block. /// @@ -105,19 +106,19 @@ fn prepare_extrinsics_input<'a, B, H, Number>( Number: BlockNumber, { - let mut children_keys = BTreeSet::::new(); + let mut children_info = BTreeSet::::new(); let mut children_result = BTreeMap::new(); - for (storage_key, _) in changes.prospective.children.iter() - .chain(changes.committed.children.iter()) { - children_keys.insert(storage_key.clone()); + for (_storage_key, (_map, child_info)) in changes.prospective.children_default.iter() + .chain(changes.committed.children_default.iter()) { + children_info.insert(child_info.clone()); } - for storage_key in children_keys { + for child_info in children_info { let child_index = ChildIndex:: { block: block.clone(), - storage_key: storage_key.clone(), + storage_key: child_info.prefixed_storage_key(), }; - let iter = prepare_extrinsics_input_inner(backend, block, changes, Some(storage_key))?; + let iter = prepare_extrinsics_input_inner(backend, block, changes, Some(child_info))?; children_result.insert(child_index, iter); } @@ -130,22 +131,22 @@ fn prepare_extrinsics_input_inner<'a, B, H, Number>( backend: &'a B, block: &Number, changes: &'a OverlayedChanges, - storage_key: Option, + child_info: Option, ) -> Result> + 'a, String> where B: Backend, H: Hasher, Number: BlockNumber, { - let (committed, prospective, child_info) = if let Some(sk) = storage_key.as_ref() { - let child_info = changes.child_info(sk).cloned(); - ( - changes.committed.children.get(sk).map(|c| &c.0), - changes.prospective.children.get(sk).map(|c| &c.0), - child_info, - ) + let (committed, prospective) = if let Some(child_info) = child_info.as_ref() { + match child_info.child_type() { + ChildType::ParentKeyId => ( + changes.committed.children_default.get(child_info.storage_key()).map(|c| &c.0), + changes.prospective.children_default.get(child_info.storage_key()).map(|c| &c.0), + ), + } } else { - (Some(&changes.committed.top), Some(&changes.prospective.top), None) + (Some(&changes.committed.top), Some(&changes.prospective.top)) }; committed.iter().flat_map(|c| c.iter()) .chain(prospective.iter().flat_map(|c| c.iter())) @@ -155,13 +156,11 @@ fn prepare_extrinsics_input_inner<'a, B, H, Number>( Entry::Vacant(entry) => { // ignore temporary values (values that have null value at the end of operation // AND are not in storage at the beginning of operation - if let Some(sk) = storage_key.as_ref() { - if !changes.child_storage(sk, k).map(|v| v.is_some()).unwrap_or_default() { - if let Some(child_info) = child_info.as_ref() { - if !backend.exists_child_storage(sk, child_info.as_ref(), k) - .map_err(|e| format!("{}", e))? { - return Ok(map); - } + if let Some(child_info) = child_info.as_ref() { + if !changes.child_storage(child_info, k).map(|v| v.is_some()).unwrap_or_default() { + if !backend.exists_child_storage(&child_info, k) + .map_err(|e| format!("{}", e))? { + return Ok(map); } } } else { @@ -281,7 +280,7 @@ fn prepare_digest_input<'a, H, Number>( return Ok((map, child_map)); } - let mut children_roots = BTreeMap::::new(); + let mut children_roots = BTreeMap::::new(); { let trie_storage = TrieBackendEssence::<_, H>::new( crate::changes_trie::TrieBackendStorageAdapter(storage), @@ -344,22 +343,20 @@ mod test { use codec::Encode; use sp_core::Blake2Hasher; use sp_core::storage::well_known_keys::EXTRINSIC_INDEX; - use sp_core::storage::ChildInfo; use crate::InMemoryBackend; use crate::changes_trie::{RootsStorage, Configuration, storage::InMemoryStorage}; use crate::changes_trie::build_cache::{IncompleteCacheAction, IncompleteCachedBuildData}; use crate::overlayed_changes::{OverlayedValue, OverlayedChangeSet}; use super::*; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - const CHILD_INFO_2: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_2"); - fn prepare_for_build(zero: u64) -> ( InMemoryBackend, InMemoryStorage, OverlayedChanges, Configuration, ) { + let child_info_1 = ChildInfo::new_default(b"storage_key1"); + let child_info_2 = ChildInfo::new_default(b"storage_key2"); let backend: InMemoryBackend<_> = vec![ (vec![100], vec![255]), (vec![101], vec![255]), @@ -368,8 +365,9 @@ mod test { (vec![104], vec![255]), (vec![105], vec![255]), ].into_iter().collect::>().into(); - let child_trie_key1 = b"1".to_vec(); - let child_trie_key2 = b"2".to_vec(); + let prefixed_child_trie_key1 = child_info_1.prefixed_storage_key(); + let child_trie_key1 = child_info_1.storage_key().to_vec(); + let child_trie_key2 = child_info_2.storage_key().to_vec(); let storage = InMemoryStorage::with_inputs(vec![ (zero + 1, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 1, key: vec![100] }, vec![1, 3]), @@ -403,7 +401,7 @@ mod test { ]), (zero + 9, Vec::new()), (zero + 10, Vec::new()), (zero + 11, Vec::new()), (zero + 12, Vec::new()), (zero + 13, Vec::new()), (zero + 14, Vec::new()), (zero + 15, Vec::new()), - ], vec![(child_trie_key1.clone(), vec![ + ], vec![(prefixed_child_trie_key1.clone(), vec![ (zero + 1, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 1, key: vec![100] }, vec![1, 3]), InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 1, key: vec![101] }, vec![0, 2]), @@ -430,19 +428,19 @@ mod test { extrinsics: Some(vec![0, 1].into_iter().collect()) }), ].into_iter().collect(), - children: vec![ + children_default: vec![ (child_trie_key1.clone(), (vec![ (vec![100], OverlayedValue { value: Some(vec![200]), extrinsics: Some(vec![0, 2].into_iter().collect()) }) - ].into_iter().collect(), CHILD_INFO_1.to_owned())), + ].into_iter().collect(), child_info_1.to_owned())), (child_trie_key2, (vec![ (vec![100], OverlayedValue { value: Some(vec![200]), extrinsics: Some(vec![0, 2].into_iter().collect()) }) - ].into_iter().collect(), CHILD_INFO_2.to_owned())), + ].into_iter().collect(), child_info_2.to_owned())), ].into_iter().collect() }, committed: OverlayedChangeSet { top: vec![ @@ -459,13 +457,13 @@ mod test { extrinsics: Some(vec![1].into_iter().collect()) }), ].into_iter().collect(), - children: vec![ + children_default: vec![ (child_trie_key1, (vec![ (vec![100], OverlayedValue { value: Some(vec![202]), extrinsics: Some(vec![3].into_iter().collect()) }) - ].into_iter().collect(), CHILD_INFO_1.to_owned())), + ].into_iter().collect(), child_info_1.to_owned())), ].into_iter().collect(), }, collect_extrinsics: true, @@ -487,6 +485,8 @@ mod test { #[test] fn build_changes_trie_nodes_on_non_digest_block() { fn test_with_zero(zero: u64) { + let child_trie_key1 = ChildInfo::new_default(b"storage_key1").prefixed_storage_key(); + let child_trie_key2 = ChildInfo::new_default(b"storage_key2").prefixed_storage_key(); let (backend, storage, changes, config) = prepare_for_build(zero); let parent = AnchorBlockId { hash: Default::default(), number: zero + 4 }; let changes_trie_nodes = prepare_input( @@ -503,11 +503,11 @@ mod test { ]); assert_eq!(changes_trie_nodes.1.into_iter() .map(|(k,v)| (k, v.collect::>())).collect::>(), vec![ - (ChildIndex { block: zero + 5u64, storage_key: b"1".to_vec() }, + (ChildIndex { block: zero + 5u64, storage_key: child_trie_key1 }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 5u64, key: vec![100] }, vec![0, 2, 3]), ]), - (ChildIndex { block: zero + 5, storage_key: b"2".to_vec() }, + (ChildIndex { block: zero + 5, storage_key: child_trie_key2 }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 5, key: vec![100] }, vec![0, 2]), ]), @@ -523,6 +523,8 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l1() { fn test_with_zero(zero: u64) { + let child_trie_key1 = ChildInfo::new_default(b"storage_key1").prefixed_storage_key(); + let child_trie_key2 = ChildInfo::new_default(b"storage_key2").prefixed_storage_key(); let (backend, storage, changes, config) = prepare_for_build(zero); let parent = AnchorBlockId { hash: Default::default(), number: zero + 3 }; let changes_trie_nodes = prepare_input( @@ -544,7 +546,7 @@ mod test { ]); assert_eq!(changes_trie_nodes.1.into_iter() .map(|(k,v)| (k, v.collect::>())).collect::>(), vec![ - (ChildIndex { block: zero + 4u64, storage_key: b"1".to_vec() }, + (ChildIndex { block: zero + 4u64, storage_key: child_trie_key1.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 4u64, key: vec![100] }, vec![0, 2, 3]), @@ -553,7 +555,7 @@ mod test { InputPair::DigestIndex(DigestIndex { block: zero + 4, key: vec![102] }, vec![zero + 2]), InputPair::DigestIndex(DigestIndex { block: zero + 4, key: vec![105] }, vec![zero + 1]), ]), - (ChildIndex { block: zero + 4, storage_key: b"2".to_vec() }, + (ChildIndex { block: zero + 4, storage_key: child_trie_key2.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 4, key: vec![100] }, vec![0, 2]), ]), @@ -568,6 +570,8 @@ mod test { #[test] fn build_changes_trie_nodes_on_digest_block_l2() { fn test_with_zero(zero: u64) { + let child_trie_key1 = ChildInfo::new_default(b"storage_key1").prefixed_storage_key(); + let child_trie_key2 = ChildInfo::new_default(b"storage_key2").prefixed_storage_key(); let (backend, storage, changes, config) = prepare_for_build(zero); let parent = AnchorBlockId { hash: Default::default(), number: zero + 15 }; let changes_trie_nodes = prepare_input( @@ -590,13 +594,13 @@ mod test { ]); assert_eq!(changes_trie_nodes.1.into_iter() .map(|(k,v)| (k, v.collect::>())).collect::>(), vec![ - (ChildIndex { block: zero + 16u64, storage_key: b"1".to_vec() }, + (ChildIndex { block: zero + 16u64, storage_key: child_trie_key1.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 16u64, key: vec![100] }, vec![0, 2, 3]), InputPair::DigestIndex(DigestIndex { block: zero + 16, key: vec![102] }, vec![zero + 4]), ]), - (ChildIndex { block: zero + 16, storage_key: b"2".to_vec() }, + (ChildIndex { block: zero + 16, storage_key: child_trie_key2.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 16, key: vec![100] }, vec![0, 2]), ]), @@ -657,6 +661,8 @@ mod test { #[test] fn build_changes_trie_nodes_ignores_temporary_storage_values() { fn test_with_zero(zero: u64) { + let child_trie_key1 = ChildInfo::new_default(b"storage_key1").prefixed_storage_key(); + let child_trie_key2 = ChildInfo::new_default(b"storage_key2").prefixed_storage_key(); let (backend, storage, mut changes, config) = prepare_for_build(zero); // 110: missing from backend, set to None in overlay @@ -685,7 +691,7 @@ mod test { ]); assert_eq!(changes_trie_nodes.1.into_iter() .map(|(k,v)| (k, v.collect::>())).collect::>(), vec![ - (ChildIndex { block: zero + 4u64, storage_key: b"1".to_vec() }, + (ChildIndex { block: zero + 4u64, storage_key: child_trie_key1.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 4u64, key: vec![100] }, vec![0, 2, 3]), @@ -694,7 +700,7 @@ mod test { InputPair::DigestIndex(DigestIndex { block: zero + 4, key: vec![102] }, vec![zero + 2]), InputPair::DigestIndex(DigestIndex { block: zero + 4, key: vec![105] }, vec![zero + 1]), ]), - (ChildIndex { block: zero + 4, storage_key: b"2".to_vec() }, + (ChildIndex { block: zero + 4, storage_key: child_trie_key2.clone() }, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: zero + 4, key: vec![100] }, vec![0, 2]), ]), @@ -709,6 +715,8 @@ mod test { #[test] fn cache_is_used_when_changes_trie_is_built() { + let child_trie_key1 = ChildInfo::new_default(b"storage_key1").prefixed_storage_key(); + let child_trie_key2 = ChildInfo::new_default(b"storage_key2").prefixed_storage_key(); let (backend, mut storage, changes, config) = prepare_for_build(0); let parent = AnchorBlockId { hash: Default::default(), number: 15 }; @@ -728,8 +736,8 @@ mod test { let cached_data4 = IncompleteCacheAction::CacheBuildData(IncompleteCachedBuildData::new()) .set_digest_input_blocks(vec![1, 2, 3]) .insert(None, vec![vec![100], vec![102]].into_iter().collect()) - .insert(Some(b"1".to_vec()), vec![vec![103], vec![104]].into_iter().collect()) - .insert(Some(b"2".to_vec()), vec![vec![105], vec![106]].into_iter().collect()) + .insert(Some(child_trie_key1.clone()), vec![vec![103], vec![104]].into_iter().collect()) + .insert(Some(child_trie_key2.clone()), vec![vec![105], vec![106]].into_iter().collect()) .complete(4, &trie_root4); storage.cache_mut().perform(cached_data4); @@ -755,7 +763,10 @@ mod test { .map(|(k, i)| (k, i.collect::>())) .collect::>(); assert_eq!( - child_changes_tries_nodes.get(&ChildIndex { block: 16u64, storage_key: b"1".to_vec() }).unwrap(), + child_changes_tries_nodes.get(&ChildIndex { + block: 16u64, + storage_key: child_trie_key1.clone(), + }).unwrap(), &vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16u64, key: vec![100] }, vec![0, 2, 3]), @@ -764,7 +775,7 @@ mod test { ], ); assert_eq!( - child_changes_tries_nodes.get(&ChildIndex { block: 16u64, storage_key: b"2".to_vec() }).unwrap(), + child_changes_tries_nodes.get(&ChildIndex { block: 16u64, storage_key: child_trie_key2.clone() }).unwrap(), &vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 16u64, key: vec![100] }, vec![0, 2]), diff --git a/primitives/state-machine/src/changes_trie/build_cache.rs b/primitives/state-machine/src/changes_trie/build_cache.rs index 9d0dbb4c1f3..aebebf3a17f 100644 --- a/primitives/state-machine/src/changes_trie/build_cache.rs +++ b/primitives/state-machine/src/changes_trie/build_cache.rs @@ -19,6 +19,7 @@ use std::collections::{HashMap, HashSet}; use crate::StorageKey; +use sp_core::storage::PrefixedStorageKey; /// Changes trie build cache. /// @@ -38,7 +39,7 @@ pub struct BuildCache { /// The `Option>` in inner `HashMap` stands for the child storage key. /// If it is `None`, then the `HashSet` contains keys changed in top-level storage. /// If it is `Some`, then the `HashSet` contains keys changed in child storage, identified by the key. - changed_keys: HashMap, HashSet>>, + changed_keys: HashMap, HashSet>>, } /// The action to perform when block-with-changes-trie is imported. @@ -56,7 +57,7 @@ pub struct CachedBuildData { block: N, trie_root: H, digest_input_blocks: Vec, - changed_keys: HashMap, HashSet>, + changed_keys: HashMap, HashSet>, } /// The action to perform when block-with-changes-trie is imported. @@ -72,7 +73,7 @@ pub(crate) enum IncompleteCacheAction { #[derive(Debug, PartialEq)] pub(crate) struct IncompleteCachedBuildData { digest_input_blocks: Vec, - changed_keys: HashMap, HashSet>, + changed_keys: HashMap, HashSet>, } impl BuildCache @@ -89,7 +90,7 @@ impl BuildCache } /// Get cached changed keys for changes trie with given root. - pub fn get(&self, root: &H) -> Option<&HashMap, HashSet>> { + pub fn get(&self, root: &H) -> Option<&HashMap, HashSet>> { self.changed_keys.get(&root) } @@ -98,7 +99,7 @@ impl BuildCache pub fn with_changed_keys( &self, root: &H, - functor: &mut dyn FnMut(&HashMap, HashSet>), + functor: &mut dyn FnMut(&HashMap, HashSet>), ) -> bool { match self.changed_keys.get(&root) { Some(changed_keys) => { @@ -164,7 +165,7 @@ impl IncompleteCacheAction { /// Insert changed keys of given storage into cached data. pub(crate) fn insert( self, - storage_key: Option, + storage_key: Option, changed_keys: HashSet, ) -> Self { match self { @@ -200,7 +201,7 @@ impl IncompleteCachedBuildData { fn insert( mut self, - storage_key: Option, + storage_key: Option, changed_keys: HashSet, ) -> Self { self.changed_keys.insert(storage_key, changed_keys); diff --git a/primitives/state-machine/src/changes_trie/changes_iterator.rs b/primitives/state-machine/src/changes_trie/changes_iterator.rs index 685786218c7..f5a936069ba 100644 --- a/primitives/state-machine/src/changes_trie/changes_iterator.rs +++ b/primitives/state-machine/src/changes_trie/changes_iterator.rs @@ -22,6 +22,7 @@ use std::collections::VecDeque; use codec::{Decode, Encode, Codec}; use hash_db::Hasher; use num_traits::Zero; +use sp_core::storage::PrefixedStorageKey; use sp_trie::Recorder; use crate::changes_trie::{AnchorBlockId, ConfigurationRange, RootsStorage, Storage, BlockNumber}; use crate::changes_trie::input::{DigestIndex, ExtrinsicIndex, DigestIndexValue, ExtrinsicIndexValue}; @@ -40,7 +41,7 @@ pub fn key_changes<'a, H: Hasher, Number: BlockNumber>( begin: Number, end: &'a AnchorBlockId, max: Number, - storage_key: Option<&'a [u8]>, + storage_key: Option<&'a PrefixedStorageKey>, key: &'a [u8], ) -> Result, String> { // we can't query any roots before root @@ -79,7 +80,7 @@ pub fn key_changes_proof<'a, H: Hasher, Number: BlockNumber>( begin: Number, end: &AnchorBlockId, max: Number, - storage_key: Option<&[u8]>, + storage_key: Option<&PrefixedStorageKey>, key: &[u8], ) -> Result>, String> where H::Out: Codec { // we can't query any roots before root @@ -127,7 +128,7 @@ pub fn key_changes_proof_check<'a, H: Hasher, Number: BlockNumber>( begin: Number, end: &AnchorBlockId, max: Number, - storage_key: Option<&[u8]>, + storage_key: Option<&PrefixedStorageKey>, key: &[u8] ) -> Result, String> where H::Out: Encode { key_changes_proof_check_with_db( @@ -150,7 +151,7 @@ pub fn key_changes_proof_check_with_db<'a, H: Hasher, Number: BlockNumber>( begin: Number, end: &AnchorBlockId, max: Number, - storage_key: Option<&[u8]>, + storage_key: Option<&PrefixedStorageKey>, key: &[u8] ) -> Result, String> where H::Out: Encode { // we can't query any roots before root @@ -188,7 +189,7 @@ pub struct DrilldownIteratorEssence<'a, H, Number> Number: BlockNumber, H::Out: 'a, { - storage_key: Option<&'a [u8]>, + storage_key: Option<&'a PrefixedStorageKey>, key: &'a [u8], roots_storage: &'a dyn RootsStorage, storage: &'a dyn Storage, @@ -238,7 +239,7 @@ impl<'a, H, Number> DrilldownIteratorEssence<'a, H, Number> let trie_root = if let Some(storage_key) = self.storage_key { let child_key = ChildIndex { block: block.clone(), - storage_key: storage_key.to_vec(), + storage_key: storage_key.clone(), }.encode(); if let Some(trie_root) = trie_reader(self.storage, trie_root, &child_key)? .and_then(|v| >::decode(&mut &v[..]).ok()) @@ -382,6 +383,11 @@ mod tests { use sp_runtime::traits::BlakeTwo256; use super::*; + fn child_key() -> PrefixedStorageKey { + let child_info = sp_core::storage::ChildInfo::new_default(&b"1"[..]); + child_info.prefixed_storage_key() + } + fn prepare_for_drilldown() -> (Configuration, InMemoryStorage) { let config = Configuration { digest_interval: 4, digest_levels: 2 }; let backend = InMemoryStorage::with_inputs(vec![ @@ -418,7 +424,7 @@ mod tests { (16, vec![ InputPair::DigestIndex(DigestIndex { block: 16, key: vec![42] }, vec![4, 8]), ]), - ], vec![(b"1".to_vec(), vec![ + ], vec![(child_key(), vec![ (1, vec![ InputPair::ExtrinsicIndex(ExtrinsicIndex { block: 1, key: vec![42] }, vec![0]), ]), @@ -535,7 +541,7 @@ mod tests { 1, &AnchorBlockId { hash: Default::default(), number: 100 }, 1000, - Some(&b"1"[..]), + Some(&child_key()), &[42], ).and_then(|i| i.collect::, _>>()).is_err()); } @@ -577,7 +583,7 @@ mod tests { let (remote_config, remote_storage) = prepare_for_drilldown(); let remote_proof_child = key_changes_proof::( configuration_range(&remote_config, 0), &remote_storage, 1, - &AnchorBlockId { hash: Default::default(), number: 16 }, 16, Some(&b"1"[..]), &[42]).unwrap(); + &AnchorBlockId { hash: Default::default(), number: 16 }, 16, Some(&child_key()), &[42]).unwrap(); // happens on local light node: @@ -592,7 +598,7 @@ mod tests { local_storage.clear_storage(); let local_result_child = key_changes_proof_check::( configuration_range(&local_config, 0), &local_storage, remote_proof_child, 1, - &AnchorBlockId { hash: Default::default(), number: 16 }, 16, Some(&b"1"[..]), &[42]); + &AnchorBlockId { hash: Default::default(), number: 16 }, 16, Some(&child_key()), &[42]); // check that drilldown result is the same as if it was happening at the full node assert_eq!(local_result, Ok(vec![(8, 2), (8, 1), (6, 3), (3, 0)])); diff --git a/primitives/state-machine/src/changes_trie/input.rs b/primitives/state-machine/src/changes_trie/input.rs index 4a1420f8486..4f0f3da40c5 100644 --- a/primitives/state-machine/src/changes_trie/input.rs +++ b/primitives/state-machine/src/changes_trie/input.rs @@ -21,6 +21,7 @@ use crate::{ StorageKey, StorageValue, changes_trie::BlockNumber }; +use sp_core::storage::PrefixedStorageKey; /// Key of { changed key => set of extrinsic indices } mapping. #[derive(Clone, Debug, PartialEq, Eq)] @@ -49,7 +50,7 @@ pub struct ChildIndex { /// Block at which this key has been inserted in the trie. pub block: Number, /// Storage key this node is responsible for. - pub storage_key: StorageKey, + pub storage_key: PrefixedStorageKey, } /// Value of { changed key => block/digest block numbers } mapping. @@ -178,7 +179,7 @@ impl Decode for InputKey { })), 3 => Ok(InputKey::ChildIndex(ChildIndex { block: Decode::decode(input)?, - storage_key: Decode::decode(input)?, + storage_key: PrefixedStorageKey::new(Decode::decode(input)?), })), _ => Err("Invalid input key variant".into()), } diff --git a/primitives/state-machine/src/changes_trie/mod.rs b/primitives/state-machine/src/changes_trie/mod.rs index d614992df30..ee6c6778e0a 100644 --- a/primitives/state-machine/src/changes_trie/mod.rs +++ b/primitives/state-machine/src/changes_trie/mod.rs @@ -71,6 +71,7 @@ use hash_db::{Hasher, Prefix}; use num_traits::{One, Zero}; use codec::{Decode, Encode}; use sp_core; +use sp_core::storage::PrefixedStorageKey; use sp_trie::{MemoryDB, DBValue, TrieMut}; use sp_trie::trie_types::TrieDBMut; use crate::{ @@ -156,7 +157,7 @@ pub trait Storage: RootsStorage { fn with_cached_changed_keys( &self, root: &H::Out, - functor: &mut dyn FnMut(&HashMap, HashSet>), + functor: &mut dyn FnMut(&HashMap, HashSet>), ) -> bool; /// Get a trie node. fn get(&self, key: &H::Out, prefix: Prefix) -> Result, String>; diff --git a/primitives/state-machine/src/changes_trie/prune.rs b/primitives/state-machine/src/changes_trie/prune.rs index 87923dc2f59..05555df305b 100644 --- a/primitives/state-machine/src/changes_trie/prune.rs +++ b/primitives/state-machine/src/changes_trie/prune.rs @@ -137,7 +137,8 @@ mod tests { #[test] fn prune_works() { fn prepare_storage() -> InMemoryStorage { - let child_key = ChildIndex { block: 67u64, storage_key: b"1".to_vec() }.encode(); + let child_info = sp_core::storage::ChildInfo::new_default(&b"1"[..]); + let child_key = ChildIndex { block: 67u64, storage_key: child_info.prefixed_storage_key() }.encode(); let mut mdb1 = MemoryDB::::default(); let root1 = insert_into_memory_db::( &mut mdb1, vec![(vec![10], vec![20])]).unwrap(); diff --git a/primitives/state-machine/src/changes_trie/storage.rs b/primitives/state-machine/src/changes_trie/storage.rs index 7fb41867287..81651dd2e71 100644 --- a/primitives/state-machine/src/changes_trie/storage.rs +++ b/primitives/state-machine/src/changes_trie/storage.rs @@ -18,6 +18,7 @@ use std::collections::{BTreeMap, HashSet, HashMap}; use hash_db::{Hasher, Prefix, EMPTY_PREFIX}; +use sp_core::storage::PrefixedStorageKey; use sp_trie::DBValue; use sp_trie::MemoryDB; use parking_lot::RwLock; @@ -96,7 +97,7 @@ impl InMemoryStorage { #[cfg(test)] pub fn with_inputs( mut top_inputs: Vec<(Number, Vec>)>, - children_inputs: Vec<(StorageKey, Vec<(Number, Vec>)>)>, + children_inputs: Vec<(PrefixedStorageKey, Vec<(Number, Vec>)>)>, ) -> Self { let mut mdb = MemoryDB::default(); let mut roots = BTreeMap::new(); @@ -182,7 +183,7 @@ impl Storage for InMemoryStorage, HashSet>), + functor: &mut dyn FnMut(&HashMap, HashSet>), ) -> bool { self.cache.with_changed_keys(root, functor) } diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 3a6b5442906..399bfc69d86 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -24,10 +24,10 @@ use crate::{ use hash_db::Hasher; use sp_core::{ - storage::{ChildStorageKey, well_known_keys::is_child_storage_key, ChildInfo}, + storage::{well_known_keys::is_child_storage_key, ChildInfo}, traits::Externalities, hexdisplay::HexDisplay, }; -use sp_trie::{trie_types::Layout, default_child_trie_root}; +use sp_trie::{trie_types::Layout, empty_child_trie_root}; use sp_externalities::{Extensions, Extension}; use codec::{Decode, Encode}; @@ -181,22 +181,21 @@ where fn child_storage( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { let _guard = sp_panic_handler::AbortGuard::force_abort(); let result = self.overlay - .child_storage(storage_key.as_ref(), key) + .child_storage(child_info, key) .map(|x| x.map(|x| x.to_vec())) .unwrap_or_else(|| - self.backend.child_storage(storage_key.as_ref(), child_info, key) + self.backend.child_storage(child_info, key) .expect(EXT_NOT_ALLOWED_TO_FAIL) ); trace!(target: "state-trace", "{:04x}: GetChild({}) {}={:?}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), result.as_ref().map(HexDisplay::from) ); @@ -206,22 +205,21 @@ where fn child_storage_hash( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option> { let _guard = sp_panic_handler::AbortGuard::force_abort(); let result = self.overlay - .child_storage(storage_key.as_ref(), key) + .child_storage(child_info, key) .map(|x| x.map(|x| H::hash(x))) .unwrap_or_else(|| - self.backend.child_storage_hash(storage_key.as_ref(), child_info, key) + self.backend.child_storage_hash(child_info, key) .expect(EXT_NOT_ALLOWED_TO_FAIL) ); trace!(target: "state-trace", "{:04x}: ChildHash({}) {}={:?}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), result, ); @@ -247,22 +245,21 @@ where fn exists_child_storage( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> bool { let _guard = sp_panic_handler::AbortGuard::force_abort(); - let result = match self.overlay.child_storage(storage_key.as_ref(), key) { + let result = match self.overlay.child_storage(child_info, key) { Some(x) => x.is_some(), _ => self.backend - .exists_child_storage(storage_key.as_ref(), child_info, key) + .exists_child_storage(child_info, key) .expect(EXT_NOT_ALLOWED_TO_FAIL), }; trace!(target: "state-trace", "{:04x}: ChildExists({}) {}={:?}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), result, ); @@ -286,15 +283,14 @@ where fn next_child_storage_key( &self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Option { let next_backend_key = self.backend - .next_child_storage_key(storage_key.as_ref(), child_info, key) + .next_child_storage_key(child_info, key) .expect(EXT_NOT_ALLOWED_TO_FAIL); let next_overlay_key_change = self.overlay.next_child_storage_key_change( - storage_key.as_ref(), + child_info.storage_key(), key ); @@ -305,7 +301,6 @@ where Some(overlay_key.0.to_vec()) } else { self.next_child_storage_key( - storage_key, child_info, &overlay_key.0[..], ) @@ -331,38 +326,36 @@ where fn place_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: StorageKey, value: Option, ) { trace!(target: "state-trace", "{:04x}: PutChild({}) {}={:?}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), value.as_ref().map(HexDisplay::from) ); let _guard = sp_panic_handler::AbortGuard::force_abort(); self.mark_dirty(); - self.overlay.set_child_storage(storage_key.into_owned(), child_info, key, value); + self.overlay.set_child_storage(child_info, key, value); } fn kill_child_storage( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, ) { trace!(target: "state-trace", "{:04x}: KillChild({})", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), ); let _guard = sp_panic_handler::AbortGuard::force_abort(); self.mark_dirty(); - self.overlay.clear_child_storage(storage_key.as_ref(), child_info); - self.backend.for_keys_in_child_storage(storage_key.as_ref(), child_info, |key| { - self.overlay.set_child_storage(storage_key.as_ref().to_vec(), child_info, key.to_vec(), None); + self.overlay.clear_child_storage(child_info); + self.backend.for_keys_in_child_storage(child_info, |key| { + self.overlay.set_child_storage(child_info, key.to_vec(), None); }); } @@ -386,21 +379,20 @@ where fn clear_child_prefix( &mut self, - storage_key: ChildStorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) { trace!(target: "state-trace", "{:04x}: ClearChildPrefix({}) {}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&prefix), ); let _guard = sp_panic_handler::AbortGuard::force_abort(); self.mark_dirty(); - self.overlay.clear_child_prefix(storage_key.as_ref(), child_info, prefix); - self.backend.for_child_keys_with_prefix(storage_key.as_ref(), child_info, prefix, |key| { - self.overlay.set_child_storage(storage_key.as_ref().to_vec(), child_info, key.to_vec(), None); + self.overlay.clear_child_prefix(child_info, prefix); + self.backend.for_child_keys_with_prefix(child_info, prefix, |key| { + self.overlay.set_child_storage(child_info, key.to_vec(), None); }); } @@ -425,37 +417,38 @@ where fn child_storage_root( &mut self, - storage_key: ChildStorageKey, + child_info: &ChildInfo, ) -> Vec { let _guard = sp_panic_handler::AbortGuard::force_abort(); + let storage_key = child_info.storage_key(); + let prefixed_storage_key = child_info.prefixed_storage_key(); if self.storage_transaction_cache.transaction_storage_root.is_some() { let root = self - .storage(storage_key.as_ref()) + .storage(prefixed_storage_key.as_slice()) .and_then(|k| Decode::decode(&mut &k[..]).ok()) .unwrap_or( - default_child_trie_root::>(storage_key.as_ref()) + empty_child_trie_root::>() ); trace!(target: "state-trace", "{:04x}: ChildRoot({}) (cached) {}", self.id, - HexDisplay::from(&storage_key.as_ref()), + HexDisplay::from(&storage_key), HexDisplay::from(&root.as_ref()), ); root.encode() } else { - let storage_key = storage_key.as_ref(); - if let Some(child_info) = self.overlay.child_info(storage_key).cloned() { + if let Some(child_info) = self.overlay.default_child_info(storage_key).cloned() { let (root, is_empty, _) = { - let delta = self.overlay.committed.children.get(storage_key) + let delta = self.overlay.committed.children_default.get(storage_key) .into_iter() .flat_map(|(map, _)| map.clone().into_iter().map(|(k, v)| (k, v.value))) .chain( - self.overlay.prospective.children.get(storage_key) + self.overlay.prospective.children_default.get(storage_key) .into_iter() .flat_map(|(map, _)| map.clone().into_iter().map(|(k, v)| (k, v.value))) ); - self.backend.child_storage_root(storage_key, child_info.as_ref(), delta) + self.backend.child_storage_root(&child_info, delta) }; let root = root.encode(); @@ -465,9 +458,9 @@ where // A better design would be to manage 'child_storage_transaction' in a // similar way as 'storage_transaction' but for each child trie. if is_empty { - self.overlay.set_storage(storage_key.into(), None); + self.overlay.set_storage(prefixed_storage_key.into_inner(), None); } else { - self.overlay.set_storage(storage_key.into(), Some(root.clone())); + self.overlay.set_storage(prefixed_storage_key.into_inner(), Some(root.clone())); } trace!(target: "state-trace", "{:04x}: ChildRoot({}) {}", @@ -479,10 +472,10 @@ where } else { // empty overlay let root = self - .storage(storage_key.as_ref()) + .storage(prefixed_storage_key.as_slice()) .and_then(|k| Decode::decode(&mut &k[..]).ok()) .unwrap_or( - default_child_trie_root::>(storage_key.as_ref()) + empty_child_trie_root::>() ); trace!(target: "state-trace", "{:04x}: ChildRoot({}) (no change) {}", self.id, @@ -591,11 +584,6 @@ mod tests { type TestBackend = InMemoryBackend; type TestExt<'a> = Ext<'a, Blake2Hasher, u64, TestBackend>; - const CHILD_KEY_1: &[u8] = b":child_storage:default:Child1"; - - const CHILD_UUID_1: &[u8] = b"unique_id_1"; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(CHILD_UUID_1); - fn prepare_overlay_with_changes() -> OverlayedChanges { OverlayedChanges { prospective: vec![ @@ -680,7 +668,7 @@ mod tests { vec![20] => vec![20], vec![40] => vec![40] ], - children: map![] + children_default: map![] }.into(); let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); @@ -707,26 +695,23 @@ mod tests { #[test] fn next_child_storage_key_works() { - const CHILD_KEY_1: &[u8] = b":child_storage:default:Child1"; - - const CHILD_UUID_1: &[u8] = b"unique_id_1"; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(CHILD_UUID_1); + let child_info = ChildInfo::new_default(b"Child1"); + let child_info = &child_info; let mut cache = StorageTransactionCache::default(); - let child = || ChildStorageKey::from_slice(CHILD_KEY_1).unwrap(); let mut overlay = OverlayedChanges::default(); - overlay.set_child_storage(child().as_ref().to_vec(), CHILD_INFO_1, vec![20], None); - overlay.set_child_storage(child().as_ref().to_vec(), CHILD_INFO_1, vec![30], Some(vec![31])); + overlay.set_child_storage(child_info, vec![20], None); + overlay.set_child_storage(child_info, vec![30], Some(vec![31])); let backend = Storage { top: map![], - children: map![ - child().as_ref().to_vec() => StorageChild { + children_default: map![ + child_info.storage_key().to_vec() => StorageChild { data: map![ vec![10] => vec![10], vec![20] => vec![20], vec![40] => vec![40] ], - child_info: CHILD_INFO_1.to_owned(), + child_info: child_info.to_owned(), } ], }.into(); @@ -735,65 +720,65 @@ mod tests { let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); // next_backend < next_overlay - assert_eq!(ext.next_child_storage_key(child(), CHILD_INFO_1, &[5]), Some(vec![10])); + assert_eq!(ext.next_child_storage_key(child_info, &[5]), Some(vec![10])); // next_backend == next_overlay but next_overlay is a delete - assert_eq!(ext.next_child_storage_key(child(), CHILD_INFO_1, &[10]), Some(vec![30])); + assert_eq!(ext.next_child_storage_key(child_info, &[10]), Some(vec![30])); // next_overlay < next_backend - assert_eq!(ext.next_child_storage_key(child(), CHILD_INFO_1, &[20]), Some(vec![30])); + assert_eq!(ext.next_child_storage_key(child_info, &[20]), Some(vec![30])); // next_backend exist but next_overlay doesn't exist - assert_eq!(ext.next_child_storage_key(child(), CHILD_INFO_1, &[30]), Some(vec![40])); + assert_eq!(ext.next_child_storage_key(child_info, &[30]), Some(vec![40])); drop(ext); - overlay.set_child_storage(child().as_ref().to_vec(), CHILD_INFO_1, vec![50], Some(vec![50])); + overlay.set_child_storage(child_info, vec![50], Some(vec![50])); let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); // next_overlay exist but next_backend doesn't exist - assert_eq!(ext.next_child_storage_key(child(), CHILD_INFO_1, &[40]), Some(vec![50])); + assert_eq!(ext.next_child_storage_key(child_info, &[40]), Some(vec![50])); } #[test] fn child_storage_works() { + let child_info = ChildInfo::new_default(b"Child1"); + let child_info = &child_info; let mut cache = StorageTransactionCache::default(); - let child = || ChildStorageKey::from_slice(CHILD_KEY_1).unwrap(); let mut overlay = OverlayedChanges::default(); - overlay.set_child_storage(child().as_ref().to_vec(), CHILD_INFO_1, vec![20], None); - overlay.set_child_storage(child().as_ref().to_vec(), CHILD_INFO_1, vec![30], Some(vec![31])); + overlay.set_child_storage(child_info, vec![20], None); + overlay.set_child_storage(child_info, vec![30], Some(vec![31])); let backend = Storage { top: map![], - children: map![ - child().as_ref().to_vec() => StorageChild { + children_default: map![ + child_info.storage_key().to_vec() => StorageChild { data: map![ vec![10] => vec![10], vec![20] => vec![20], vec![30] => vec![40] ], - child_info: CHILD_INFO_1.to_owned(), + child_info: child_info.to_owned(), } ], }.into(); let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, &[10]), Some(vec![10])); + assert_eq!(ext.child_storage(child_info, &[10]), Some(vec![10])); assert_eq!( - ext.child_storage_hash(child(), CHILD_INFO_1, &[10]), + ext.child_storage_hash(child_info, &[10]), Some(Blake2Hasher::hash(&[10]).as_ref().to_vec()), ); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, &[20]), None); + assert_eq!(ext.child_storage(child_info, &[20]), None); assert_eq!( - ext.child_storage_hash(child(), CHILD_INFO_1, &[20]), + ext.child_storage_hash(child_info, &[20]), None, ); - assert_eq!(ext.child_storage(child(), CHILD_INFO_1, &[30]), Some(vec![31])); + assert_eq!(ext.child_storage(child_info, &[30]), Some(vec![31])); assert_eq!( - ext.child_storage_hash(child(), CHILD_INFO_1, &[30]), + ext.child_storage_hash(child_info, &[30]), Some(Blake2Hasher::hash(&[31]).as_ref().to_vec()), ); - } } diff --git a/primitives/state-machine/src/in_memory_backend.rs b/primitives/state-machine/src/in_memory_backend.rs index ecd4532cf26..83126abbf78 100644 --- a/primitives/state-machine/src/in_memory_backend.rs +++ b/primitives/state-machine/src/in_memory_backend.rs @@ -25,10 +25,10 @@ use crate::{ use std::{error, fmt, collections::{BTreeMap, HashMap}, marker::PhantomData, ops}; use hash_db::Hasher; use sp_trie::{ - MemoryDB, child_trie_root, default_child_trie_root, TrieConfiguration, trie_types::Layout, + MemoryDB, child_trie_root, empty_child_trie_root, TrieConfiguration, trie_types::Layout, }; use codec::Codec; -use sp_core::storage::{ChildInfo, OwnedChildInfo, Storage}; +use sp_core::storage::{ChildInfo, ChildType, Storage}; /// Error impossible. // FIXME: use `!` type when stabilized. https://github.com/rust-lang/rust/issues/35121 @@ -48,7 +48,7 @@ impl error::Error for Void { /// In-memory backend. Fully recomputes tries each time `as_trie_backend` is called but useful for /// tests and proof checking. pub struct InMemory { - inner: HashMap, BTreeMap>, + inner: HashMap, BTreeMap>, // This field is only needed for returning reference in `as_trie_backend`. trie: Option, H>>, _hasher: PhantomData, @@ -89,7 +89,7 @@ impl PartialEq for InMemory { impl InMemory { /// Copy the state, with applied updates pub fn update< - T: IntoIterator, StorageCollection)> + T: IntoIterator, StorageCollection)> >( &self, changes: T, @@ -108,10 +108,10 @@ impl InMemory { } } -impl From, BTreeMap>> +impl From, BTreeMap>> for InMemory { - fn from(inner: HashMap, BTreeMap>) -> Self { + fn from(inner: HashMap, BTreeMap>) -> Self { InMemory { inner, trie: None, @@ -122,8 +122,8 @@ impl From, BTreeMap From for InMemory { fn from(inners: Storage) -> Self { - let mut inner: HashMap, BTreeMap> - = inners.children.into_iter().map(|(k, c)| (Some((k, c.child_info)), c.data)).collect(); + let mut inner: HashMap, BTreeMap> + = inners.children_default.into_iter().map(|(_k, c)| (Some(c.child_info), c.data)).collect(); inner.insert(None, inners.top); InMemory { inner, @@ -145,12 +145,12 @@ impl From> for InMemory { } } -impl From, StorageCollection)>> +impl From, StorageCollection)>> for InMemory { fn from( - inner: Vec<(Option<(StorageKey, OwnedChildInfo)>, StorageCollection)>, + inner: Vec<(Option, StorageCollection)>, ) -> Self { - let mut expanded: HashMap, BTreeMap> + let mut expanded: HashMap, BTreeMap> = HashMap::new(); for (child_info, key_values) in inner { let entry = expanded.entry(child_info).or_default(); @@ -165,18 +165,16 @@ impl From, StorageCollectio } impl InMemory { - /// child storage key iterator - pub fn child_storage_keys(&self) -> impl Iterator { - self.inner.iter().filter_map(|item| - item.0.as_ref().map(|v|(&v.0[..], v.1.as_ref())) - ) + /// Child storage infos iterator. + pub fn child_storage_infos(&self) -> impl Iterator { + self.inner.iter().filter_map(|item| item.0.as_ref()) } } impl Backend for InMemory where H::Out: Codec { type Error = Void; type Transaction = Vec<( - Option<(StorageKey, OwnedChildInfo)>, + Option, StorageCollection, )>; type TrieBackendStorage = MemoryDB; @@ -187,11 +185,10 @@ impl Backend for InMemory where H::Out: Codec { fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - Ok(self.inner.get(&Some((storage_key.to_vec(), child_info.to_owned()))) + Ok(self.inner.get(&Some(child_info.to_owned())) .and_then(|map| map.get(key).map(Clone::clone))) } @@ -211,22 +208,20 @@ impl Backend for InMemory where H::Out: Codec { fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, mut f: F, ) { - self.inner.get(&Some((storage_key.to_vec(), child_info.to_owned()))) + self.inner.get(&Some(child_info.to_owned())) .map(|map| map.keys().for_each(|k| f(&k))); } fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.inner.get(&Some((storage_key.to_vec(), child_info.to_owned()))) + self.inner.get(&Some(child_info.to_owned())) .map(|map| map.keys().filter(|key| key.starts_with(prefix)).map(|k| &**k).for_each(f)); } @@ -253,16 +248,15 @@ impl Backend for InMemory where H::Out: Codec { fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where I: IntoIterator, Option>)>, H::Out: Ord { - let storage_key = storage_key.to_vec(); - let child_info = Some((storage_key.clone(), child_info.to_owned())); + let child_type = child_info.child_type(); + let child_info = Some(child_info.to_owned()); let existing_pairs = self.inner.get(&child_info) .into_iter() @@ -270,7 +264,6 @@ impl Backend for InMemory where H::Out: Codec { let transaction: Vec<_> = delta.into_iter().collect(); let root = child_trie_root::, _, _, _>( - &storage_key, existing_pairs.chain(transaction.iter().cloned()) .collect::>() .into_iter() @@ -279,7 +272,9 @@ impl Backend for InMemory where H::Out: Codec { let full_transaction = transaction.into_iter().collect(); - let is_default = root == default_child_trie_root::>(&storage_key); + let is_default = match child_type { + ChildType::ParentKeyId => root == empty_child_trie_root::>(), + }; (root, is_default, vec![(child_info, full_transaction)]) } @@ -294,12 +289,11 @@ impl Backend for InMemory where H::Out: Codec { fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { let range = (ops::Bound::Excluded(key), ops::Bound::Unbounded); - let next_key = self.inner.get(&Some((storage_key.to_vec(), child_info.to_owned()))) + let next_key = self.inner.get(&Some(child_info.to_owned())) .and_then(|map| map.range::<[u8], _>(range).next().map(|(k, _)| k).cloned()); Ok(next_key) @@ -321,11 +315,10 @@ impl Backend for InMemory where H::Out: Codec { fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec { - self.inner.get(&Some((storage_key.to_vec(), child_info.to_owned()))) + self.inner.get(&Some(child_info.to_owned())) .into_iter() .flat_map(|map| map.keys().filter(|k| k.starts_with(prefix)).cloned()) .collect() @@ -336,11 +329,10 @@ impl Backend for InMemory where H::Out: Codec { let mut new_child_roots = Vec::new(); let mut root_map = None; for (child_info, map) in &self.inner { - if let Some((storage_key, _child_info)) = child_info.as_ref() { - // no need to use child_info at this point because we use a MemoryDB for - // proof (with PrefixedMemoryDB it would be needed). + if let Some(child_info) = child_info.as_ref() { + let prefix_storage_key = child_info.prefixed_storage_key(); let ch = insert_into_memory_db::(&mut mdb, map.clone().into_iter())?; - new_child_roots.push((storage_key.clone(), ch.as_ref().into())); + new_child_roots.push((prefix_storage_key.into_inner(), ch.as_ref().into())); } else { root_map = Some(map); } @@ -379,16 +371,18 @@ mod tests { #[test] fn in_memory_with_child_trie_only() { let storage = InMemory::::default(); - let child_info = OwnedChildInfo::new_default(b"unique_id_1".to_vec()); + let child_info = ChildInfo::new_default(b"1"); + let child_info = &child_info; let mut storage = storage.update( vec![( - Some((b"1".to_vec(), child_info.clone())), + Some(child_info.clone()), vec![(b"2".to_vec(), Some(b"3".to_vec()))] )] ); let trie_backend = storage.as_trie_backend().unwrap(); - assert_eq!(trie_backend.child_storage(b"1", child_info.as_ref(), b"2").unwrap(), + assert_eq!(trie_backend.child_storage(child_info, b"2").unwrap(), Some(b"3".to_vec())); - assert!(trie_backend.storage(b"1").unwrap().is_some()); + let storage_key = child_info.prefixed_storage_key(); + assert!(trie_backend.storage(storage_key.as_slice()).unwrap().is_some()); } } diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index 9a2dc52cca2..1c0007c5f91 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -606,8 +606,7 @@ where /// Generate child storage read proof. pub fn prove_child_read( mut backend: B, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, keys: I, ) -> Result> where @@ -619,7 +618,7 @@ where { let trie_backend = backend.as_trie_backend() .ok_or_else(|| Box::new(ExecutionError::UnableToGenerateProof) as Box)?; - prove_child_read_on_trie_backend(trie_backend, storage_key, child_info, keys) + prove_child_read_on_trie_backend(trie_backend, child_info, keys) } /// Generate storage read proof on pre-created trie backend. @@ -646,8 +645,7 @@ where /// Generate storage read proof on pre-created trie backend. pub fn prove_child_read_on_trie_backend( trie_backend: &TrieBackend, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, keys: I, ) -> Result> where @@ -660,7 +658,7 @@ where let proving_backend = proving_backend::ProvingBackend::<_, H>::new(trie_backend); for key in keys.into_iter() { proving_backend - .child_storage(storage_key, child_info.clone(), key.as_ref()) + .child_storage(child_info, key.as_ref()) .map_err(|e| Box::new(e) as Box)?; } Ok(proving_backend.extract_proof()) @@ -691,7 +689,7 @@ where pub fn read_child_proof_check( root: H::Out, proof: StorageProof, - storage_key: &[u8], + child_info: &ChildInfo, keys: I, ) -> Result, Option>>, Box> where @@ -705,7 +703,7 @@ where for key in keys.into_iter() { let value = read_child_proof_check_on_proving_backend( &proving_backend, - storage_key, + child_info, key.as_ref(), )?; result.insert(key.as_ref().to_vec(), value); @@ -728,15 +726,14 @@ where /// Check child storage read proof on pre-created proving backend. pub fn read_child_proof_check_on_proving_backend( proving_backend: &TrieBackend, H>, - storage_key: &[u8], + child_info: &ChildInfo, key: &[u8], ) -> Result>, Box> where H: Hasher, H::Out: Ord + Codec, { - // Not a prefixed memory db, using empty unique id and include root resolution. - proving_backend.child_storage(storage_key, ChildInfo::new_default(&[]), key) + proving_backend.child_storage(child_info, key) .map_err(|e| Box::new(e) as Box) } @@ -748,7 +745,7 @@ mod tests { use super::*; use super::ext::Ext; use super::changes_trie::Configuration as ChangesTrieConfig; - use sp_core::{map, traits::{Externalities, RuntimeCode}, storage::ChildStorageKey}; + use sp_core::{map, traits::{Externalities, RuntimeCode}}; use sp_runtime::traits::BlakeTwo256; #[derive(Clone)] @@ -759,8 +756,6 @@ mod tests { fallback_succeeds: bool, } - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - impl CodeExecutor for DummyCodeExecutor { type Error = u8; @@ -1003,6 +998,8 @@ mod tests { #[test] fn set_child_storage_works() { + let child_info = ChildInfo::new_default(b"sub1"); + let child_info = &child_info; let mut state = InMemoryBackend::::default(); let backend = state.as_trie_backend().unwrap(); let mut overlay = OverlayedChanges::default(); @@ -1016,27 +1013,23 @@ mod tests { ); ext.set_child_storage( - ChildStorageKey::from_slice(b":child_storage:default:testchild").unwrap(), - CHILD_INFO_1, + child_info, b"abc".to_vec(), b"def".to_vec() ); assert_eq!( ext.child_storage( - ChildStorageKey::from_slice(b":child_storage:default:testchild").unwrap(), - CHILD_INFO_1, + child_info, b"abc" ), Some(b"def".to_vec()) ); ext.kill_child_storage( - ChildStorageKey::from_slice(b":child_storage:default:testchild").unwrap(), - CHILD_INFO_1, + child_info, ); assert_eq!( ext.child_storage( - ChildStorageKey::from_slice(b":child_storage:default:testchild").unwrap(), - CHILD_INFO_1, + child_info, b"abc" ), None @@ -1045,6 +1038,8 @@ mod tests { #[test] fn prove_read_and_proof_check_works() { + let child_info = ChildInfo::new_default(b"sub1"); + let child_info = &child_info; // fetch read proof from 'remote' full node let remote_backend = trie_backend::tests::test_trie(); let remote_root = remote_backend.storage_root(::std::iter::empty()).0; @@ -1071,20 +1066,19 @@ mod tests { let remote_root = remote_backend.storage_root(::std::iter::empty()).0; let remote_proof = prove_child_read( remote_backend, - b":child_storage:default:sub1", - CHILD_INFO_1, + child_info, &[b"value3"], ).unwrap(); let local_result1 = read_child_proof_check::( remote_root, remote_proof.clone(), - b":child_storage:default:sub1", + child_info, &[b"value3"], ).unwrap(); let local_result2 = read_child_proof_check::( remote_root, remote_proof.clone(), - b":child_storage:default:sub1", + child_info, &[b"value2"], ).unwrap(); assert_eq!( @@ -1099,13 +1093,13 @@ mod tests { #[test] fn child_storage_uuid() { - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - const CHILD_INFO_2: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_2"); + + let child_info_1 = ChildInfo::new_default(b"sub_test1"); + let child_info_2 = ChildInfo::new_default(b"sub_test2"); + use crate::trie_backend::tests::test_trie; let mut overlay = OverlayedChanges::default(); - let subtrie1 = ChildStorageKey::from_slice(b":child_storage:default:sub_test1").unwrap(); - let subtrie2 = ChildStorageKey::from_slice(b":child_storage:default:sub_test2").unwrap(); let mut transaction = { let backend = test_trie(); let mut cache = StorageTransactionCache::default(); @@ -1116,8 +1110,8 @@ mod tests { changes_trie::disabled_state::<_, u64>(), None, ); - ext.set_child_storage(subtrie1, CHILD_INFO_1, b"abc".to_vec(), b"def".to_vec()); - ext.set_child_storage(subtrie2, CHILD_INFO_2, b"abc".to_vec(), b"def".to_vec()); + ext.set_child_storage(&child_info_1, b"abc".to_vec(), b"def".to_vec()); + ext.set_child_storage(&child_info_2, b"abc".to_vec(), b"def".to_vec()); ext.storage_root(); cache.transaction.unwrap() }; diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index ab50c61391b..f57d13ee3ff 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -29,7 +29,7 @@ use crate::{ use std::iter::FromIterator; use std::collections::{HashMap, BTreeMap, BTreeSet}; use codec::{Decode, Encode}; -use sp_core::storage::{well_known_keys::EXTRINSIC_INDEX, OwnedChildInfo, ChildInfo}; +use sp_core::storage::{well_known_keys::EXTRINSIC_INDEX, ChildInfo}; use std::{mem, ops}; use hash_db::Hasher; @@ -79,8 +79,8 @@ pub struct OverlayedValue { pub struct OverlayedChangeSet { /// Top level storage changes. pub top: BTreeMap, - /// Child storage changes. - pub children: HashMap, OwnedChildInfo)>, + /// Child storage changes. The map key is the child storage key without the common prefix. + pub children_default: HashMap, ChildInfo)>, } /// A storage changes structure that can be generated by the data collected in [`OverlayedChanges`]. @@ -174,7 +174,7 @@ impl FromIterator<(StorageKey, OverlayedValue)> for OverlayedChangeSet { fn from_iter>(iter: T) -> Self { Self { top: iter.into_iter().collect(), - children: Default::default(), + children_default: Default::default(), } } } @@ -182,13 +182,13 @@ impl FromIterator<(StorageKey, OverlayedValue)> for OverlayedChangeSet { impl OverlayedChangeSet { /// Whether the change set is empty. pub fn is_empty(&self) -> bool { - self.top.is_empty() && self.children.is_empty() + self.top.is_empty() && self.children_default.is_empty() } /// Clear the change set. pub fn clear(&mut self) { self.top.clear(); - self.children.clear(); + self.children_default.clear(); } } @@ -219,8 +219,8 @@ impl OverlayedChanges { /// Returns a double-Option: None if the key is unknown (i.e. and the query should be referred /// to the backend); Some(None) if the key has been deleted. Some(Some(...)) for a key whose /// value has been set. - pub fn child_storage(&self, storage_key: &[u8], key: &[u8]) -> Option> { - if let Some(map) = self.prospective.children.get(storage_key) { + pub fn child_storage(&self, child_info: &ChildInfo, key: &[u8]) -> Option> { + if let Some(map) = self.prospective.children_default.get(child_info.storage_key()) { if let Some(val) = map.0.get(key) { let size_read = val.value.as_ref().map(|x| x.len() as u64).unwrap_or(0); self.stats.tally_read_modified(size_read); @@ -228,7 +228,7 @@ impl OverlayedChanges { } } - if let Some(map) = self.committed.children.get(storage_key) { + if let Some(map) = self.committed.children_default.get(child_info.storage_key()) { if let Some(val) = map.0.get(key) { let size_read = val.value.as_ref().map(|x| x.len() as u64).unwrap_or(0); self.stats.tally_read_modified(size_read); @@ -260,15 +260,15 @@ impl OverlayedChanges { /// `None` can be used to delete a value specified by the given key. pub(crate) fn set_child_storage( &mut self, - storage_key: StorageKey, - child_info: ChildInfo, + child_info: &ChildInfo, key: StorageKey, val: Option, ) { let size_write = val.as_ref().map(|x| x.len() as u64).unwrap_or(0); self.stats.tally_write_overlay(size_write); let extrinsic_index = self.extrinsic_index(); - let map_entry = self.prospective.children.entry(storage_key) + let storage_key = child_info.storage_key().to_vec(); + let map_entry = self.prospective.children_default.entry(storage_key) .or_insert_with(|| (Default::default(), child_info.to_owned())); let updatable = map_entry.1.try_update(child_info); debug_assert!(updatable); @@ -290,11 +290,11 @@ impl OverlayedChanges { /// [`discard_prospective`]: #method.discard_prospective pub(crate) fn clear_child_storage( &mut self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, ) { let extrinsic_index = self.extrinsic_index(); - let map_entry = self.prospective.children.entry(storage_key.to_vec()) + let storage_key = child_info.storage_key(); + let map_entry = self.prospective.children_default.entry(storage_key.to_vec()) .or_insert_with(|| (Default::default(), child_info.to_owned())); let updatable = map_entry.1.try_update(child_info); debug_assert!(updatable); @@ -308,7 +308,7 @@ impl OverlayedChanges { e.value = None; }); - if let Some((committed_map, _child_info)) = self.committed.children.get(storage_key) { + if let Some((committed_map, _child_info)) = self.committed.children_default.get(storage_key) { for (key, value) in committed_map.iter() { if !map_entry.0.contains_key(key) { map_entry.0.insert(key.clone(), OverlayedValue { @@ -364,12 +364,12 @@ impl OverlayedChanges { pub(crate) fn clear_child_prefix( &mut self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) { let extrinsic_index = self.extrinsic_index(); - let map_entry = self.prospective.children.entry(storage_key.to_vec()) + let storage_key = child_info.storage_key(); + let map_entry = self.prospective.children_default.entry(storage_key.to_vec()) .or_insert_with(|| (Default::default(), child_info.to_owned())); let updatable = map_entry.1.try_update(child_info); debug_assert!(updatable); @@ -385,7 +385,7 @@ impl OverlayedChanges { } } - if let Some((child_committed, _child_info)) = self.committed.children.get(storage_key) { + if let Some((child_committed, _child_info)) = self.committed.children_default.get(storage_key) { // Then do the same with keys from committed changes. // NOTE that we are making changes in the prospective change set. for key in child_committed.keys() { @@ -422,8 +422,8 @@ impl OverlayedChanges { .extend(prospective_extrinsics); } } - for (storage_key, (map, child_info)) in self.prospective.children.drain() { - let child_content = self.committed.children.entry(storage_key) + for (storage_key, (map, child_info)) in self.prospective.children_default.drain() { + let child_content = self.committed.children_default.entry(storage_key) .or_insert_with(|| (Default::default(), child_info)); // No update to child info at this point (will be needed for deletion). for (key, val) in map.into_iter() { @@ -445,14 +445,14 @@ impl OverlayedChanges { /// Will panic if there are any uncommitted prospective changes. fn drain_committed(&mut self) -> ( impl Iterator)>, - impl Iterator)>, OwnedChildInfo))>, + impl Iterator)>, ChildInfo))>, ) { assert!(self.prospective.is_empty()); ( std::mem::replace(&mut self.committed.top, Default::default()) .into_iter() .map(|(k, v)| (k, v.value)), - std::mem::replace(&mut self.committed.children, Default::default()) + std::mem::replace(&mut self.committed.children_default, Default::default()) .into_iter() .map(|(sk, (v, ci))| (sk, (v.into_iter().map(|(k, v)| (k, v.value)), ci))), ) @@ -549,21 +549,20 @@ impl OverlayedChanges { ) -> H::Out where H::Out: Ord + Encode, { - let child_storage_keys = self.prospective.children.keys() - .chain(self.committed.children.keys()); + let child_storage_keys = self.prospective.children_default.keys() + .chain(self.committed.children_default.keys()); let child_delta_iter = child_storage_keys.map(|storage_key| ( - storage_key.clone(), - self.committed.children.get(storage_key) + self.default_child_info(storage_key).cloned() + .expect("child info initialized in either committed or prospective"), + self.committed.children_default.get(storage_key) .into_iter() .flat_map(|(map, _)| map.iter().map(|(k, v)| (k.clone(), v.value.clone()))) .chain( - self.prospective.children.get(storage_key) + self.prospective.children_default.get(storage_key) .into_iter() .flat_map(|(map, _)| map.iter().map(|(k, v)| (k.clone(), v.value.clone()))) ), - self.child_info(storage_key).cloned() - .expect("child info initialized in either committed or prospective"), ) ); @@ -610,11 +609,11 @@ impl OverlayedChanges { /// Get child info for a storage key. /// Take the latest value so prospective first. - pub fn child_info(&self, storage_key: &[u8]) -> Option<&OwnedChildInfo> { - if let Some((_, ci)) = self.prospective.children.get(storage_key) { + pub fn default_child_info(&self, storage_key: &[u8]) -> Option<&ChildInfo> { + if let Some((_, ci)) = self.prospective.children_default.get(storage_key) { return Some(&ci); } - if let Some((_, ci)) = self.committed.children.get(storage_key) { + if let Some((_, ci)) = self.committed.children_default.get(storage_key) { return Some(&ci); } None @@ -654,10 +653,10 @@ impl OverlayedChanges { ) -> Option<(&[u8], &OverlayedValue)> { let range = (ops::Bound::Excluded(key), ops::Bound::Unbounded); - let next_prospective_key = self.prospective.children.get(storage_key) + let next_prospective_key = self.prospective.children_default.get(storage_key) .and_then(|(map, _)| map.range::<[u8], _>(range).next().map(|(k, v)| (&k[..], v))); - let next_committed_key = self.committed.children.get(storage_key) + let next_committed_key = self.committed.children_default.get(storage_key) .and_then(|(map, _)| map.range::<[u8], _>(range).next().map(|(k, v)| (&k[..], v))); match (next_committed_key, next_prospective_key) { @@ -866,39 +865,40 @@ mod tests { #[test] fn next_child_storage_key_change_works() { - let child = b"Child1".to_vec(); - let child_info = ChildInfo::new_default(b"uniqueid"); + let child_info = ChildInfo::new_default(b"Child1"); + let child_info = &child_info; + let child = child_info.storage_key(); let mut overlay = OverlayedChanges::default(); - overlay.set_child_storage(child.clone(), child_info, vec![20], Some(vec![20])); - overlay.set_child_storage(child.clone(), child_info, vec![30], Some(vec![30])); - overlay.set_child_storage(child.clone(), child_info, vec![40], Some(vec![40])); + overlay.set_child_storage(child_info, vec![20], Some(vec![20])); + overlay.set_child_storage(child_info, vec![30], Some(vec![30])); + overlay.set_child_storage(child_info, vec![40], Some(vec![40])); overlay.commit_prospective(); - overlay.set_child_storage(child.clone(), child_info, vec![10], Some(vec![10])); - overlay.set_child_storage(child.clone(), child_info, vec![30], None); + overlay.set_child_storage(child_info, vec![10], Some(vec![10])); + overlay.set_child_storage(child_info, vec![30], None); // next_prospective < next_committed - let next_to_5 = overlay.next_child_storage_key_change(&child, &[5]).unwrap(); + let next_to_5 = overlay.next_child_storage_key_change(child, &[5]).unwrap(); assert_eq!(next_to_5.0.to_vec(), vec![10]); assert_eq!(next_to_5.1.value, Some(vec![10])); // next_committed < next_prospective - let next_to_10 = overlay.next_child_storage_key_change(&child, &[10]).unwrap(); + let next_to_10 = overlay.next_child_storage_key_change(child, &[10]).unwrap(); assert_eq!(next_to_10.0.to_vec(), vec![20]); assert_eq!(next_to_10.1.value, Some(vec![20])); // next_committed == next_prospective - let next_to_20 = overlay.next_child_storage_key_change(&child, &[20]).unwrap(); + let next_to_20 = overlay.next_child_storage_key_change(child, &[20]).unwrap(); assert_eq!(next_to_20.0.to_vec(), vec![30]); assert_eq!(next_to_20.1.value, None); // next_committed, no next_prospective - let next_to_30 = overlay.next_child_storage_key_change(&child, &[30]).unwrap(); + let next_to_30 = overlay.next_child_storage_key_change(child, &[30]).unwrap(); assert_eq!(next_to_30.0.to_vec(), vec![40]); assert_eq!(next_to_30.1.value, Some(vec![40])); - overlay.set_child_storage(child.clone(), child_info, vec![50], Some(vec![50])); + overlay.set_child_storage(child_info, vec![50], Some(vec![50])); // next_prospective, no next_committed - let next_to_40 = overlay.next_child_storage_key_change(&child, &[40]).unwrap(); + let next_to_40 = overlay.next_child_storage_key_change(child, &[40]).unwrap(); assert_eq!(next_to_40.0.to_vec(), vec![50]); assert_eq!(next_to_40.1.value, Some(vec![50])); } diff --git a/primitives/state-machine/src/proving_backend.rs b/primitives/state-machine/src/proving_backend.rs index 747872af831..deafeb902d8 100644 --- a/primitives/state-machine/src/proving_backend.rs +++ b/primitives/state-machine/src/proving_backend.rs @@ -22,7 +22,7 @@ use codec::{Decode, Codec}; use log::debug; use hash_db::{Hasher, HashDB, EMPTY_PREFIX, Prefix}; use sp_trie::{ - MemoryDB, default_child_trie_root, read_trie_value_with, read_child_trie_value_with, + MemoryDB, empty_child_trie_root, read_trie_value_with, read_child_trie_value_with, record_all_keys, StorageProof, }; pub use sp_trie::Recorder; @@ -67,13 +67,13 @@ impl<'a, S, H> ProvingBackendRecorder<'a, S, H> /// Produce proof for a child key query. pub fn child_storage( &mut self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8] ) -> Result>, String> { + let storage_key = child_info.storage_key(); let root = self.storage(storage_key)? .and_then(|r| Decode::decode(&mut &r[..]).ok()) - .unwrap_or(default_child_trie_root::>(storage_key)); + .unwrap_or(empty_child_trie_root::>()); let mut read_overlay = S::Overlay::default(); let eph = Ephemeral::new( @@ -84,7 +84,6 @@ impl<'a, S, H> ProvingBackendRecorder<'a, S, H> let map_e = |e| format!("Trie lookup error: {}", e); read_child_trie_value_with::, _, _>( - storage_key, child_info.keyspace(), &eph, &root.as_ref(), @@ -201,20 +200,18 @@ impl<'a, S, H> Backend for ProvingBackend<'a, S, H> fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.0.child_storage(storage_key, child_info, key) + self.0.child_storage(child_info, key) } fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - self.0.for_keys_in_child_storage(storage_key, child_info, f) + self.0.for_keys_in_child_storage(child_info, f) } fn next_storage_key(&self, key: &[u8]) -> Result>, Self::Error> { @@ -223,11 +220,10 @@ impl<'a, S, H> Backend for ProvingBackend<'a, S, H> fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result>, Self::Error> { - self.0.next_child_storage_key(storage_key, child_info, key) + self.0.next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -240,12 +236,11 @@ impl<'a, S, H> Backend for ProvingBackend<'a, S, H> fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.0.for_child_keys_with_prefix(storage_key, child_info, prefix, f) + self.0.for_child_keys_with_prefix( child_info, prefix, f) } fn pairs(&self) -> Vec<(Vec, Vec)> { @@ -258,11 +253,10 @@ impl<'a, S, H> Backend for ProvingBackend<'a, S, H> fn child_keys( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], ) -> Vec> { - self.0.child_keys(storage_key, child_info, prefix) + self.0.child_keys(child_info, prefix) } fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) @@ -273,15 +267,14 @@ impl<'a, S, H> Backend for ProvingBackend<'a, S, H> fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where I: IntoIterator, Option>)>, H::Out: Ord { - self.0.child_storage_root(storage_key, child_info, delta) + self.0.child_storage_root(child_info, delta) } fn register_overlay_stats(&mut self, _stats: &crate::stats::StateMachineStats) { } @@ -314,14 +307,10 @@ mod tests { use crate::InMemoryBackend; use crate::trie_backend::tests::test_trie; use super::*; - use sp_core::storage::ChildStorageKey; use crate::proving_backend::create_proof_check_backend; use sp_trie::PrefixedMemoryDB; use sp_runtime::traits::BlakeTwo256; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_1"); - const CHILD_INFO_2: ChildInfo<'static> = ChildInfo::new_default(b"unique_id_2"); - fn test_proving<'a>( trie_backend: &'a TrieBackend,BlakeTwo256>, ) -> ProvingBackend<'a, PrefixedMemoryDB, BlakeTwo256> { @@ -389,33 +378,33 @@ mod tests { #[test] fn proof_recorded_and_checked_with_child() { - let subtrie1 = ChildStorageKey::from_slice(b":child_storage:default:sub1").unwrap(); - let subtrie2 = ChildStorageKey::from_slice(b":child_storage:default:sub2").unwrap(); - let own1 = subtrie1.into_owned(); - let own2 = subtrie2.into_owned(); + let child_info_1 = ChildInfo::new_default(b"sub1"); + let child_info_2 = ChildInfo::new_default(b"sub2"); + let child_info_1 = &child_info_1; + let child_info_2 = &child_info_2; let contents = vec![ (None, (0..64).map(|i| (vec![i], Some(vec![i]))).collect()), - (Some((own1.clone(), CHILD_INFO_1.to_owned())), + (Some(child_info_1.clone()), (28..65).map(|i| (vec![i], Some(vec![i]))).collect()), - (Some((own2.clone(), CHILD_INFO_2.to_owned())), + (Some(child_info_2.clone()), (10..15).map(|i| (vec![i], Some(vec![i]))).collect()), ]; let in_memory = InMemoryBackend::::default(); let mut in_memory = in_memory.update(contents); let in_memory_root = in_memory.full_storage_root::<_, Vec<_>, _>( ::std::iter::empty(), - in_memory.child_storage_keys().map(|k|(k.0.to_vec(), Vec::new(), k.1.to_owned())) + in_memory.child_storage_infos().map(|k|(k.to_owned(), Vec::new())) ).0; (0..64).for_each(|i| assert_eq!( in_memory.storage(&[i]).unwrap().unwrap(), vec![i] )); (28..65).for_each(|i| assert_eq!( - in_memory.child_storage(&own1[..], CHILD_INFO_1, &[i]).unwrap().unwrap(), + in_memory.child_storage(child_info_1, &[i]).unwrap().unwrap(), vec![i] )); (10..15).for_each(|i| assert_eq!( - in_memory.child_storage(&own2[..], CHILD_INFO_2, &[i]).unwrap().unwrap(), + in_memory.child_storage(child_info_2, &[i]).unwrap().unwrap(), vec![i] )); @@ -443,7 +432,7 @@ mod tests { assert_eq!(proof_check.storage(&[64]).unwrap(), None); let proving = ProvingBackend::new(trie); - assert_eq!(proving.child_storage(&own1[..], CHILD_INFO_1, &[64]), Ok(Some(vec![64]))); + assert_eq!(proving.child_storage(child_info_1, &[64]), Ok(Some(vec![64]))); let proof = proving.extract_proof(); let proof_check = create_proof_check_backend::( @@ -451,7 +440,7 @@ mod tests { proof ).unwrap(); assert_eq!( - proof_check.child_storage(&own1[..], CHILD_INFO_1, &[64]).unwrap().unwrap(), + proof_check.child_storage(child_info_1, &[64]).unwrap().unwrap(), vec![64] ); } diff --git a/primitives/state-machine/src/testing.rs b/primitives/state-machine/src/testing.rs index 2b971d816a5..70a96c623ad 100644 --- a/primitives/state-machine/src/testing.rs +++ b/primitives/state-machine/src/testing.rs @@ -93,7 +93,7 @@ impl TestExternalities overlay.set_collect_extrinsics(changes_trie_config.is_some()); assert!(storage.top.keys().all(|key| !is_child_storage_key(key))); - assert!(storage.children.keys().all(|key| is_child_storage_key(key))); + assert!(storage.children_default.keys().all(|key| is_child_storage_key(key))); storage.top.insert(HEAP_PAGES.to_vec(), 8u64.encode()); storage.top.insert(CODE.to_vec(), code.to_vec()); @@ -133,11 +133,11 @@ impl TestExternalities .map(|(k, v)| (k, v.value)).collect(); let mut transaction = vec![(None, top)]; - self.overlay.committed.children.clone().into_iter() - .chain(self.overlay.prospective.children.clone().into_iter()) - .for_each(|(keyspace, (map, child_info))| { + self.overlay.committed.children_default.clone().into_iter() + .chain(self.overlay.prospective.children_default.clone().into_iter()) + .for_each(|(_storage_key, (map, child_info))| { transaction.push(( - Some((keyspace, child_info)), + Some(child_info), map.into_iter() .map(|(k, v)| (k, v.value)) .collect::>(), diff --git a/primitives/state-machine/src/trie_backend.rs b/primitives/state-machine/src/trie_backend.rs index f88e306a2fc..08eea293604 100644 --- a/primitives/state-machine/src/trie_backend.rs +++ b/primitives/state-machine/src/trie_backend.rs @@ -18,9 +18,9 @@ use log::{warn, debug}; use hash_db::Hasher; -use sp_trie::{Trie, delta_trie_root, default_child_trie_root, child_delta_trie_root}; +use sp_trie::{Trie, delta_trie_root, empty_child_trie_root, child_delta_trie_root}; use sp_trie::trie_types::{TrieDB, TrieError, Layout}; -use sp_core::storage::ChildInfo; +use sp_core::storage::{ChildInfo, ChildType}; use codec::{Codec, Decode}; use crate::{ StorageKey, StorageValue, Backend, @@ -80,11 +80,10 @@ impl, H: Hasher> Backend for TrieBackend where fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - self.essence.child_storage(storage_key, child_info, key) + self.essence.child_storage(child_info, key) } fn next_storage_key(&self, key: &[u8]) -> Result, Self::Error> { @@ -93,11 +92,10 @@ impl, H: Hasher> Backend for TrieBackend where fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, Self::Error> { - self.essence.next_child_storage_key(storage_key, child_info, key) + self.essence.next_child_storage_key(child_info, key) } fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { @@ -110,21 +108,19 @@ impl, H: Hasher> Backend for TrieBackend where fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - self.essence.for_keys_in_child_storage(storage_key, child_info, f) + self.essence.for_keys_in_child_storage(child_info, f) } fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], f: F, ) { - self.essence.for_child_keys_with_prefix(storage_key, child_info, prefix, f) + self.essence.for_child_keys_with_prefix(child_info, prefix, f) } fn pairs(&self) -> Vec<(StorageKey, StorageValue)> { @@ -194,18 +190,20 @@ impl, H: Hasher> Backend for TrieBackend where fn child_storage_root( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, delta: I, ) -> (H::Out, bool, Self::Transaction) where I: IntoIterator)>, H::Out: Ord, { - let default_root = default_child_trie_root::>(storage_key); + let default_root = match child_info.child_type() { + ChildType::ParentKeyId => empty_child_trie_root::>() + }; let mut write_overlay = S::Overlay::default(); - let mut root = match self.storage(storage_key) { + let prefixed_storage_key = child_info.prefixed_storage_key(); + let mut root = match self.storage(prefixed_storage_key.as_slice()) { Ok(value) => value.and_then(|r| Decode::decode(&mut &r[..]).ok()).unwrap_or(default_root.clone()), Err(e) => { @@ -221,7 +219,6 @@ impl, H: Hasher> Backend for TrieBackend where ); match child_delta_trie_root::, _, _, _, _, _>( - storage_key, child_info.keyspace(), &mut eph, root, @@ -257,16 +254,14 @@ pub mod tests { use sp_runtime::traits::BlakeTwo256; use super::*; - const CHILD_KEY_1: &[u8] = b":child_storage:default:sub1"; - - const CHILD_UUID_1: &[u8] = b"unique_id_1"; - const CHILD_INFO_1: ChildInfo<'static> = ChildInfo::new_default(CHILD_UUID_1); + const CHILD_KEY_1: &[u8] = b"sub1"; fn test_db() -> (PrefixedMemoryDB, H256) { + let child_info = ChildInfo::new_default(CHILD_KEY_1); let mut root = H256::default(); let mut mdb = PrefixedMemoryDB::::default(); { - let mut mdb = KeySpacedDBMut::new(&mut mdb, CHILD_UUID_1); + let mut mdb = KeySpacedDBMut::new(&mut mdb, child_info.keyspace()); let mut trie = TrieDBMut::new(&mut mdb, &mut root); trie.insert(b"value3", &[142]).expect("insert failed"); trie.insert(b"value4", &[124]).expect("insert failed"); @@ -276,7 +271,8 @@ pub mod tests { let mut sub_root = Vec::new(); root.encode_to(&mut sub_root); let mut trie = TrieDBMut::new(&mut mdb, &mut root); - trie.insert(CHILD_KEY_1, &sub_root[..]).expect("insert failed"); + trie.insert(child_info.prefixed_storage_key().as_slice(), &sub_root[..]) + .expect("insert failed"); trie.insert(b"key", b"value").expect("insert failed"); trie.insert(b"value1", &[42]).expect("insert failed"); trie.insert(b"value2", &[24]).expect("insert failed"); @@ -302,7 +298,7 @@ pub mod tests { fn read_from_child_storage_returns_some() { let test_trie = test_trie(); assert_eq!( - test_trie.child_storage(CHILD_KEY_1, CHILD_INFO_1, b"value3").unwrap(), + test_trie.child_storage(&ChildInfo::new_default(CHILD_KEY_1), b"value3").unwrap(), Some(vec![142u8]), ); } diff --git a/primitives/state-machine/src/trie_backend_essence.rs b/primitives/state-machine/src/trie_backend_essence.rs index 125a823f57f..28d1c68ca2e 100644 --- a/primitives/state-machine/src/trie_backend_essence.rs +++ b/primitives/state-machine/src/trie_backend_essence.rs @@ -22,7 +22,7 @@ use std::sync::Arc; use log::{debug, warn}; use hash_db::{self, Hasher, EMPTY_PREFIX, Prefix}; use sp_trie::{Trie, MemoryDB, PrefixedMemoryDB, DBValue, - default_child_trie_root, read_trie_value, read_child_trie_value, + empty_child_trie_root, read_trie_value, read_child_trie_value, for_keys_in_child_trie, KeySpacedDB, TrieDBIterator}; use sp_trie::trie_types::{TrieDB, TrieError, Layout}; use crate::{backend::Consolidate, StorageKey, StorageValue}; @@ -71,15 +71,19 @@ impl, H: Hasher> TrieBackendEssence where H::Out: self.next_storage_key_from_root(&self.root, None, key) } + /// Access the root of the child storage in its parent trie + fn child_root(&self, child_info: &ChildInfo) -> Result, String> { + self.storage(child_info.prefixed_storage_key().as_slice()) + } + /// Return the next key in the child trie i.e. the minimum key that is strictly superior to /// `key` in lexicographic order. pub fn next_child_storage_key( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, String> { - let child_root = match self.storage(storage_key)? { + let child_root = match self.child_root(child_info)? { Some(child_root) => child_root, None => return Ok(None), }; @@ -87,7 +91,7 @@ impl, H: Hasher> TrieBackendEssence where H::Out: let mut hash = H::Out::default(); if child_root.len() != hash.as_ref().len() { - return Err(format!("Invalid child storage hash at {:?}", storage_key)); + return Err(format!("Invalid child storage hash at {:?}", child_info.storage_key())); } // note: child_root and hash must be same size, panics otherwise. hash.as_mut().copy_from_slice(&child_root[..]); @@ -99,7 +103,7 @@ impl, H: Hasher> TrieBackendEssence where H::Out: fn next_storage_key_from_root( &self, root: &H::Out, - child_info: Option, + child_info: Option<&ChildInfo>, key: &[u8], ) -> Result, String> { let mut read_overlay = S::Overlay::default(); @@ -161,12 +165,11 @@ impl, H: Hasher> TrieBackendEssence where H::Out: /// Get the value of child storage at given key. pub fn child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, key: &[u8], ) -> Result, String> { - let root = self.storage(storage_key)? - .unwrap_or(default_child_trie_root::>(storage_key).encode()); + let root = self.child_root(child_info)? + .unwrap_or(empty_child_trie_root::>().encode()); let mut read_overlay = S::Overlay::default(); let eph = Ephemeral { @@ -176,19 +179,18 @@ impl, H: Hasher> TrieBackendEssence where H::Out: let map_e = |e| format!("Trie lookup error: {}", e); - read_child_trie_value::, _>(storage_key, child_info.keyspace(), &eph, &root, key) + read_child_trie_value::, _>(child_info.keyspace(), &eph, &root, key) .map_err(map_e) } /// Retrieve all entries keys of child storage and call `f` for each of those keys. pub fn for_keys_in_child_storage( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, f: F, ) { - let root = match self.storage(storage_key) { - Ok(v) => v.unwrap_or(default_child_trie_root::>(storage_key).encode()), + let root = match self.child_root(child_info) { + Ok(v) => v.unwrap_or(empty_child_trie_root::>().encode()), Err(e) => { debug!(target: "trie", "Error while iterating child storage: {}", e); return; @@ -202,7 +204,6 @@ impl, H: Hasher> TrieBackendEssence where H::Out: }; if let Err(e) = for_keys_in_child_trie::, _, Ephemeral>( - storage_key, child_info.keyspace(), &eph, &root, @@ -215,13 +216,12 @@ impl, H: Hasher> TrieBackendEssence where H::Out: /// Execute given closure for all keys starting with prefix. pub fn for_child_keys_with_prefix( &self, - storage_key: &[u8], - child_info: ChildInfo, + child_info: &ChildInfo, prefix: &[u8], mut f: F, ) { - let root_vec = match self.storage(storage_key) { - Ok(v) => v.unwrap_or(default_child_trie_root::>(storage_key).encode()), + let root_vec = match self.child_root(child_info) { + Ok(v) => v.unwrap_or(empty_child_trie_root::>().encode()), Err(e) => { debug!(target: "trie", "Error while iterating child storage: {}", e); return; @@ -242,7 +242,7 @@ impl, H: Hasher> TrieBackendEssence where H::Out: root: &H::Out, prefix: &[u8], mut f: F, - child_info: Option, + child_info: Option<&ChildInfo>, ) { let mut read_overlay = S::Overlay::default(); let eph = Ephemeral { @@ -436,7 +436,8 @@ mod test { #[test] fn next_storage_key_and_next_child_storage_key_work() { - let child_info = ChildInfo::new_default(b"uniqueid"); + let child_info = ChildInfo::new_default(b"MyChild"); + let child_info = &child_info; // Contains values let mut root_1 = H256::default(); // Contains child trie @@ -460,7 +461,8 @@ mod test { } { let mut trie = TrieDBMut::new(&mut mdb, &mut root_2); - trie.insert(b"MyChild", root_1.as_ref()).expect("insert failed"); + trie.insert(child_info.prefixed_storage_key().as_slice(), root_1.as_ref()) + .expect("insert failed"); }; let essence_1 = TrieBackendEssence::new(mdb, root_1); @@ -475,19 +477,19 @@ mod test { let essence_2 = TrieBackendEssence::new(mdb, root_2); assert_eq!( - essence_2.next_child_storage_key(b"MyChild", child_info, b"2"), Ok(Some(b"3".to_vec())) + essence_2.next_child_storage_key(child_info, b"2"), Ok(Some(b"3".to_vec())) ); assert_eq!( - essence_2.next_child_storage_key(b"MyChild", child_info, b"3"), Ok(Some(b"4".to_vec())) + essence_2.next_child_storage_key(child_info, b"3"), Ok(Some(b"4".to_vec())) ); assert_eq!( - essence_2.next_child_storage_key(b"MyChild", child_info, b"4"), Ok(Some(b"6".to_vec())) + essence_2.next_child_storage_key(child_info, b"4"), Ok(Some(b"6".to_vec())) ); assert_eq!( - essence_2.next_child_storage_key(b"MyChild", child_info, b"5"), Ok(Some(b"6".to_vec())) + essence_2.next_child_storage_key(child_info, b"5"), Ok(Some(b"6".to_vec())) ); assert_eq!( - essence_2.next_child_storage_key(b"MyChild", child_info, b"6"), Ok(None) + essence_2.next_child_storage_key(child_info, b"6"), Ok(None) ); } } diff --git a/primitives/storage/Cargo.toml b/primitives/storage/Cargo.toml index d7ae342b2df..76174d13b03 100644 --- a/primitives/storage/Cargo.toml +++ b/primitives/storage/Cargo.toml @@ -16,6 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } impl-serde = { version = "0.2.3", optional = true } +ref-cast = "1.0.0" sp-debug-derive = { version = "2.0.0-dev", path = "../debug-derive" } [features] diff --git a/primitives/storage/src/lib.rs b/primitives/storage/src/lib.rs index 76fd4baac9c..d2c4a73e23d 100644 --- a/primitives/storage/src/lib.rs +++ b/primitives/storage/src/lib.rs @@ -22,7 +22,9 @@ use serde::{Serialize, Deserialize}; use sp_debug_derive::RuntimeDebug; -use sp_std::{vec::Vec, borrow::Cow}; +use sp_std::vec::Vec; +use sp_std::ops::{Deref, DerefMut}; +use ref_cast::RefCast; /// Storage key. #[derive(PartialEq, Eq, RuntimeDebug)] @@ -32,6 +34,51 @@ pub struct StorageKey( pub Vec, ); +/// Storage key of a child trie, it contains the prefix to the key. +#[derive(PartialEq, Eq, RuntimeDebug)] +#[cfg_attr(feature = "std", derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone))] +#[repr(transparent)] +#[derive(RefCast)] +pub struct PrefixedStorageKey( + #[cfg_attr(feature = "std", serde(with="impl_serde::serialize"))] + Vec, +); + +impl Deref for PrefixedStorageKey { + type Target = Vec; + + fn deref(&self) -> &Vec { + &self.0 + } +} + +impl DerefMut for PrefixedStorageKey { + fn deref_mut(&mut self) -> &mut Vec { + &mut self.0 + } +} + +impl PrefixedStorageKey { + /// Create a prefixed storage key from its byte array + /// representation. + pub fn new(inner: Vec) -> Self { + PrefixedStorageKey(inner) + } + + /// Create a prefixed storage key reference. + pub fn new_ref(inner: &Vec) -> &Self { + PrefixedStorageKey::ref_cast(inner) + } + + /// Get inner key, this should + /// only be needed when writing + /// into parent trie to avoid an + /// allocation. + pub fn into_inner(self) -> Vec { + self.0 + } +} + /// Storage data associated to a [`StorageKey`]. #[derive(PartialEq, Eq, RuntimeDebug)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Hash, PartialOrd, Ord, Clone))] @@ -53,7 +100,7 @@ pub struct StorageChild { pub data: StorageMap, /// Associated child info for a child /// trie. - pub child_info: OwnedChildInfo, + pub child_info: ChildInfo, } #[cfg(feature = "std")] @@ -62,8 +109,11 @@ pub struct StorageChild { pub struct Storage { /// Top trie storage data. pub top: StorageMap, - /// Children trie storage data by storage key. - pub children: std::collections::HashMap, StorageChild>, + /// Children trie storage data. + /// The key does not including prefix, for the `default` + /// trie kind, so this is exclusively for the `ChildType::ParentKeyId` + /// tries. + pub children_default: std::collections::HashMap, StorageChild>, } /// Storage change set @@ -106,133 +156,87 @@ pub mod well_known_keys { // Other code might depend on this, so be careful changing this. key.starts_with(CHILD_STORAGE_KEY_PREFIX) } - - /// Determine whether a child trie key is valid. - /// - /// For now, the only valid child trie keys are those starting with `:child_storage:default:`. - /// - /// `child_trie_root` and `child_delta_trie_root` can panic if invalid value is provided to them. - pub fn is_child_trie_key_valid(storage_key: &[u8]) -> bool { - let has_right_prefix = storage_key.starts_with(b":child_storage:default:"); - if has_right_prefix { - // This is an attempt to catch a change of `is_child_storage_key`, which - // just checks if the key has prefix `:child_storage:` at the moment of writing. - debug_assert!( - is_child_storage_key(&storage_key), - "`is_child_trie_key_valid` is a subset of `is_child_storage_key`", - ); - } - has_right_prefix - } -} - -/// A wrapper around a child storage key. -/// -/// This wrapper ensures that the child storage key is correct and properly used. It is -/// impossible to create an instance of this struct without providing a correct `storage_key`. -pub struct ChildStorageKey<'a> { - storage_key: Cow<'a, [u8]>, } -impl<'a> ChildStorageKey<'a> { - /// Create new instance of `Self`. - fn new(storage_key: Cow<'a, [u8]>) -> Option { - if well_known_keys::is_child_trie_key_valid(&storage_key) { - Some(ChildStorageKey { storage_key }) - } else { - None - } - } - - /// Create a new `ChildStorageKey` from a vector. - /// - /// `storage_key` need to start with `:child_storage:default:` - /// See `is_child_trie_key_valid` for more details. - pub fn from_vec(key: Vec) -> Option { - Self::new(Cow::Owned(key)) - } - - /// Create a new `ChildStorageKey` from a slice. - /// - /// `storage_key` need to start with `:child_storage:default:` - /// See `is_child_trie_key_valid` for more details. - pub fn from_slice(key: &'a [u8]) -> Option { - Self::new(Cow::Borrowed(key)) - } - - /// Get access to the byte representation of the storage key. - /// - /// This key is guaranteed to be correct. - pub fn as_ref(&self) -> &[u8] { - &*self.storage_key - } - - /// Destruct this instance into an owned vector that represents the storage key. - /// - /// This key is guaranteed to be correct. - pub fn into_owned(self) -> Vec { - self.storage_key.into_owned() - } -} - -#[derive(Clone, Copy)] /// Information related to a child state. -pub enum ChildInfo<'a> { - Default(ChildTrie<'a>), -} - -/// Owned version of `ChildInfo`. -/// To be use in persistence layers. #[derive(Debug, Clone)] #[cfg_attr(feature = "std", derive(PartialEq, Eq, Hash, PartialOrd, Ord))] -pub enum OwnedChildInfo { - Default(OwnedChildTrie), +pub enum ChildInfo { + /// This is the one used by default. + ParentKeyId(ChildTrieParentKeyId), } -impl<'a> ChildInfo<'a> { - /// Instantiates information for a default child trie. - pub const fn new_default(unique_id: &'a[u8]) -> Self { - ChildInfo::Default(ChildTrie { - data: unique_id, +impl ChildInfo { + /// Instantiates child information for a default child trie + /// of kind `ChildType::ParentKeyId`, using an unprefixed parent + /// storage key. + pub fn new_default(storage_key: &[u8]) -> Self { + let data = storage_key.to_vec(); + ChildInfo::ParentKeyId(ChildTrieParentKeyId { data }) + } + + /// Same as `new_default` but with `Vec` as input. + pub fn new_default_from_vec(storage_key: Vec) -> Self { + ChildInfo::ParentKeyId(ChildTrieParentKeyId { + data: storage_key, }) } - /// Instantiates a owned version of this child info. - pub fn to_owned(&self) -> OwnedChildInfo { + /// Try to update with another instance, return false if both instance + /// are not compatible. + pub fn try_update(&mut self, other: &ChildInfo) -> bool { match self { - ChildInfo::Default(ChildTrie { data }) - => OwnedChildInfo::Default(OwnedChildTrie { - data: data.to_vec(), - }), + ChildInfo::ParentKeyId(child_trie) => child_trie.try_update(other), } } - /// Create child info from a linear byte packed value and a given type. - pub fn resolve_child_info(child_type: u32, data: &'a[u8]) -> Option { - match child_type { - x if x == ChildType::CryptoUniqueId as u32 => Some(ChildInfo::new_default(data)), - _ => None, + /// Returns byte sequence (keyspace) that can be use by underlying db to isolate keys. + /// This is a unique id of the child trie. The collision resistance of this value + /// depends on the type of child info use. For `ChildInfo::Default` it is and need to be. + pub fn keyspace(&self) -> &[u8] { + match self { + ChildInfo::ParentKeyId(..) => self.storage_key(), } } - /// Return a single byte vector containing packed child info content and its child info type. - /// This can be use as input for `resolve_child_info`. - pub fn info(&self) -> (&[u8], u32) { + /// Returns a reference to the location in the direct parent of + /// this trie but without the common prefix for this kind of + /// child trie. + pub fn storage_key(&self) -> &[u8] { match self { - ChildInfo::Default(ChildTrie { + ChildInfo::ParentKeyId(ChildTrieParentKeyId { data, - }) => (data, ChildType::CryptoUniqueId as u32), + }) => &data[..], } } - /// Return byte sequence (keyspace) that can be use by underlying db to isolate keys. - /// This is a unique id of the child trie. The collision resistance of this value - /// depends on the type of child info use. For `ChildInfo::Default` it is and need to be. - pub fn keyspace(&self) -> &[u8] { + /// Return a the full location in the direct parent of + /// this trie. + pub fn prefixed_storage_key(&self) -> PrefixedStorageKey { match self { - ChildInfo::Default(ChildTrie { + ChildInfo::ParentKeyId(ChildTrieParentKeyId { data, - }) => &data[..], + }) => ChildType::ParentKeyId.new_prefixed_key(data.as_slice()), + } + } + + /// Returns a the full location in the direct parent of + /// this trie. + pub fn into_prefixed_storage_key(self) -> PrefixedStorageKey { + match self { + ChildInfo::ParentKeyId(ChildTrieParentKeyId { + mut data, + }) => { + ChildType::ParentKeyId.do_prefix_key(&mut data); + PrefixedStorageKey(data) + }, + } + } + + /// Returns the type for this child info. + pub fn child_type(&self) -> ChildType { + match self { + ChildInfo::ParentKeyId(..) => ChildType::ParentKeyId, } } } @@ -241,65 +245,98 @@ impl<'a> ChildInfo<'a> { /// It does not strictly define different child type, it can also /// be related to technical consideration or api variant. #[repr(u32)] +#[derive(Clone, Copy, PartialEq)] +#[cfg_attr(feature = "std", derive(Debug))] pub enum ChildType { - /// Default, it uses a cryptographic strong unique id as input. - CryptoUniqueId = 1, + /// If runtime module ensures that the child key is a unique id that will + /// only be used once, its parent key is used as a child trie unique id. + ParentKeyId = 1, } -impl OwnedChildInfo { - /// Instantiates info for a default child trie. - pub fn new_default(unique_id: Vec) -> Self { - OwnedChildInfo::Default(OwnedChildTrie { - data: unique_id, +impl ChildType { + /// Try to get a child type from its `u32` representation. + pub fn new(repr: u32) -> Option { + Some(match repr { + r if r == ChildType::ParentKeyId as u32 => ChildType::ParentKeyId, + _ => return None, }) } - /// Try to update with another instance, return false if both instance - /// are not compatible. - pub fn try_update(&mut self, other: ChildInfo) -> bool { - match self { - OwnedChildInfo::Default(owned_child_trie) => owned_child_trie.try_update(other), + /// Transform a prefixed key into a tuple of the child type + /// and the unprefixed representation of the key. + pub fn from_prefixed_key<'a>(storage_key: &'a PrefixedStorageKey) -> Option<(Self, &'a [u8])> { + let match_type = |storage_key: &'a [u8], child_type: ChildType| { + let prefix = child_type.parent_prefix(); + if storage_key.starts_with(prefix) { + Some((child_type, &storage_key[prefix.len()..])) + } else { + None + } + }; + match_type(storage_key, ChildType::ParentKeyId) + } + + /// Produce a prefixed key for a given child type. + fn new_prefixed_key(&self, key: &[u8]) -> PrefixedStorageKey { + let parent_prefix = self.parent_prefix(); + let mut result = Vec::with_capacity(parent_prefix.len() + key.len()); + result.extend_from_slice(parent_prefix); + result.extend_from_slice(key); + PrefixedStorageKey(result) + } + + /// Prefixes a vec with the prefix for this child type. + fn do_prefix_key(&self, key: &mut Vec) { + let parent_prefix = self.parent_prefix(); + let key_len = key.len(); + if parent_prefix.len() > 0 { + key.resize(key_len + parent_prefix.len(), 0); + key.copy_within(..key_len, parent_prefix.len()); + key[..parent_prefix.len()].copy_from_slice(parent_prefix); } } - /// Get `ChildInfo` reference to this owned child info. - pub fn as_ref(&self) -> ChildInfo { + /// Returns the location reserved for this child trie in their parent trie if there + /// is one. + pub fn parent_prefix(&self) -> &'static [u8] { match self { - OwnedChildInfo::Default(OwnedChildTrie { data }) - => ChildInfo::Default(ChildTrie { - data: data.as_slice(), - }), + &ChildType::ParentKeyId => DEFAULT_CHILD_TYPE_PARENT_PREFIX, } } } /// A child trie of default type. -/// Default is the same implementation as the top trie. -/// It share its trie node storage with any kind of key, -/// and its unique id needs to be collision free (eg strong -/// crypto hash). -#[derive(Clone, Copy)] -pub struct ChildTrie<'a> { - /// Data containing unique id. - /// Unique id must but unique and free of any possible key collision - /// (depending on its storage behavior). - data: &'a[u8], -} - -/// Owned version of default child trie `ChildTrie`. +/// It uses the same default implementation as the top trie, +/// top trie being a child trie with no keyspace and no storage key. +/// Its keyspace is the variable (unprefixed) part of its storage key. +/// It shares its trie nodes backend storage with every other +/// child trie, so its storage key needs to be a unique id +/// that will be use only once. +/// Those unique id also required to be long enough to avoid any +/// unique id to be prefixed by an other unique id. #[derive(Debug, Clone)] #[cfg_attr(feature = "std", derive(PartialEq, Eq, Hash, PartialOrd, Ord))] -pub struct OwnedChildTrie { - /// See `ChildTrie` reference field documentation. +pub struct ChildTrieParentKeyId { + /// Data is the storage key without prefix. data: Vec, } -impl OwnedChildTrie { +impl ChildTrieParentKeyId { /// Try to update with another instance, return false if both instance /// are not compatible. - fn try_update(&mut self, other: ChildInfo) -> bool { + fn try_update(&mut self, other: &ChildInfo) -> bool { match other { - ChildInfo::Default(other) => self.data[..] == other.data[..], + ChildInfo::ParentKeyId(other) => self.data[..] == other.data[..], } } } + +const DEFAULT_CHILD_TYPE_PARENT_PREFIX: &'static [u8] = b":child_storage:default:"; + +#[test] +fn test_prefix_default_child_info() { + let child_info = ChildInfo::new_default(b"any key"); + let prefix = child_info.child_type().parent_prefix(); + assert!(prefix.starts_with(well_known_keys::CHILD_STORAGE_KEY_PREFIX)); + assert!(prefix.starts_with(DEFAULT_CHILD_TYPE_PARENT_PREFIX)); +} diff --git a/primitives/trie/src/lib.rs b/primitives/trie/src/lib.rs index 80570a9792b..37fe9283363 100644 --- a/primitives/trie/src/lib.rs +++ b/primitives/trie/src/lib.rs @@ -211,9 +211,8 @@ pub fn read_trie_value_with< Ok(TrieDB::::new(&*db, root)?.get_with(key, query).map(|x| x.map(|val| val.to_vec()))?) } -/// Determine the default child trie root. -pub fn default_child_trie_root( - _storage_key: &[u8], +/// Determine the empty child trie root. +pub fn empty_child_trie_root( ) -> ::Out { L::trie_root::<_, Vec, Vec>(core::iter::empty()) } @@ -221,7 +220,6 @@ pub fn default_child_trie_root( /// Determine a child trie root given its ordered contents, closed form. H is the default hasher, /// but a generic implementation may ignore this type parameter and use other hashers. pub fn child_trie_root( - _storage_key: &[u8], input: I, ) -> ::Out where @@ -235,7 +233,6 @@ pub fn child_trie_root( /// Determine a child trie root given a hash DB and delta values. H is the default hasher, /// but a generic implementation may ignore this type parameter and use other hashers. pub fn child_delta_trie_root( - _storage_key: &[u8], keyspace: &[u8], db: &mut DB, root_data: RD, @@ -270,7 +267,6 @@ pub fn child_delta_trie_root( /// Call `f` for all keys in a child trie. pub fn for_keys_in_child_trie( - _storage_key: &[u8], keyspace: &[u8], db: &DB, root_slice: &[u8], @@ -321,7 +317,6 @@ pub fn record_all_keys( /// Read a value from the child trie. pub fn read_child_trie_value( - _storage_key: &[u8], keyspace: &[u8], db: &DB, root_slice: &[u8], @@ -341,7 +336,6 @@ pub fn read_child_trie_value( /// Read a value from the child trie with given query. pub fn read_child_trie_value_with, DB>( - _storage_key: &[u8], keyspace: &[u8], db: &DB, root_slice: &[u8], diff --git a/test-utils/client/src/lib.rs b/test-utils/client/src/lib.rs index d04e85fd10c..4880b296c70 100644 --- a/test-utils/client/src/lib.rs +++ b/test-utils/client/src/lib.rs @@ -40,7 +40,7 @@ pub use self::client_ext::{ClientExt, ClientBlockImportExt}; use std::sync::Arc; use std::collections::HashMap; -use sp_core::storage::{well_known_keys, ChildInfo}; +use sp_core::storage::ChildInfo; use sp_runtime::traits::{Block as BlockT, BlakeTwo256}; use sc_client::LocalCallExecutor; @@ -66,6 +66,8 @@ impl GenesisInit for () { pub struct TestClientBuilder { execution_strategies: ExecutionStrategies, genesis_init: G, + /// The key is an unprefixed storage key, this only contains + /// default child trie content. child_storage_extension: HashMap, StorageChild>, backend: Arc, _executor: std::marker::PhantomData, @@ -129,17 +131,17 @@ impl TestClientBuilder, - child_key: impl AsRef<[u8]>, - child_info: ChildInfo, value: impl AsRef<[u8]>, ) -> Self { - let entry = self.child_storage_extension.entry(key.as_ref().to_vec()) + let storage_key = child_info.storage_key(); + let entry = self.child_storage_extension.entry(storage_key.to_vec()) .or_insert_with(|| StorageChild { data: Default::default(), - child_info: child_info.to_owned(), + child_info: child_info.clone(), }); - entry.data.insert(child_key.as_ref().to_vec(), value.as_ref().to_vec()); + entry.data.insert(key.as_ref().to_vec(), value.as_ref().to_vec()); self } @@ -189,8 +191,8 @@ impl TestClientBuilder::Header as HeaderT>::Hashing as HashT>::trie_root( child_content.data.clone().into_iter().collect() ); - (sk.clone(), state_root.encode()) + let prefixed_storage_key = child_content.child_info.prefixed_storage_key(); + (prefixed_storage_key.into_inner(), state_root.encode()) }); let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( storage.top.clone().into_iter().chain(child_roots).collect() @@ -192,22 +193,21 @@ pub trait TestClientBuilderExt: Sized { /// # Panics /// /// Panics if the key is empty. - fn add_extra_child_storage>, K: Into>, V: Into>>( + fn add_extra_child_storage>, V: Into>>( mut self, - storage_key: SK, - child_info: ChildInfo, + child_info: &ChildInfo, key: K, value: V, ) -> Self { - let storage_key = storage_key.into(); + let storage_key = child_info.storage_key().to_vec(); let key = key.into(); assert!(!storage_key.is_empty()); assert!(!key.is_empty()); - self.genesis_init_mut().extra_storage.children + self.genesis_init_mut().extra_storage.children_default .entry(storage_key) .or_insert_with(|| StorageChild { data: Default::default(), - child_info: child_info.to_owned(), + child_info: child_info.clone(), }).data.insert(key, value.into()); self } @@ -311,7 +311,10 @@ impl Fetcher for LightFetcher { unimplemented!() } - fn remote_read_child(&self, _: RemoteReadChildRequest) -> Self::RemoteReadResult { + fn remote_read_child( + &self, + _: RemoteReadChildRequest, + ) -> Self::RemoteReadResult { unimplemented!() } diff --git a/test-utils/runtime/src/genesismap.rs b/test-utils/runtime/src/genesismap.rs index 25d9a807cce..b9de3ab3f4c 100644 --- a/test-utils/runtime/src/genesismap.rs +++ b/test-utils/runtime/src/genesismap.rs @@ -73,7 +73,7 @@ impl GenesisConfig { map.extend(self.extra_storage.top.clone().into_iter()); // Assimilate the system genesis config. - let mut storage = Storage { top: map, children: self.extra_storage.children.clone()}; + let mut storage = Storage { top: map, children_default: self.extra_storage.children_default.clone()}; let mut config = system::GenesisConfig::default(); config.authorities = self.authorities.clone(); config.assimilate_storage(&mut storage).expect("Adding `system::GensisConfig` to the genesis"); @@ -85,7 +85,7 @@ impl GenesisConfig { pub fn insert_genesis_block( storage: &mut Storage, ) -> sp_core::hash::H256 { - let child_roots = storage.children.iter().map(|(sk, child_content)| { + let child_roots = storage.children_default.iter().map(|(sk, child_content)| { let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( child_content.data.clone().into_iter().collect(), ); diff --git a/test-utils/runtime/src/lib.rs b/test-utils/runtime/src/lib.rs index 65fbf300bb8..cfafb76521a 100644 --- a/test-utils/runtime/src/lib.rs +++ b/test-utils/runtime/src/lib.rs @@ -50,7 +50,6 @@ use sp_version::NativeVersion; use frame_support::{impl_outer_origin, parameter_types, weights::{Weight, RuntimeDbWeight}}; use sp_inherents::{CheckInherentsResult, InherentData}; use cfg_if::cfg_if; -use sp_core::storage::ChildType; // Ensure Babe and Aura use the same crypto to simplify things a bit. pub use sp_consensus_babe::{AuthorityId, SlotNumber}; @@ -923,22 +922,17 @@ fn test_read_storage() { } fn test_read_child_storage() { - const CHILD_KEY: &[u8] = b":child_storage:default:read_child_storage"; - const UNIQUE_ID: &[u8] = b":unique_id"; + const STORAGE_KEY: &[u8] = b"unique_id_1"; const KEY: &[u8] = b":read_child_storage"; - sp_io::storage::child_set( - CHILD_KEY, - UNIQUE_ID, - ChildType::CryptoUniqueId as u32, + sp_io::default_child_storage::set( + STORAGE_KEY, KEY, b"test", ); let mut v = [0u8; 4]; - let r = sp_io::storage::child_read( - CHILD_KEY, - UNIQUE_ID, - ChildType::CryptoUniqueId as u32, + let r = sp_io::default_child_storage::read( + STORAGE_KEY, KEY, &mut v, 0, @@ -947,10 +941,8 @@ fn test_read_child_storage() { assert_eq!(&v, b"test"); let mut v = [0u8; 4]; - let r = sp_io::storage::child_read( - CHILD_KEY, - UNIQUE_ID, - ChildType::CryptoUniqueId as u32, + let r = sp_io::default_child_storage::read( + STORAGE_KEY, KEY, &mut v, 8, diff --git a/test-utils/runtime/src/system.rs b/test-utils/runtime/src/system.rs index c35850ae950..9cfec187ddb 100644 --- a/test-utils/runtime/src/system.rs +++ b/test-utils/runtime/src/system.rs @@ -373,7 +373,7 @@ mod tests { vec![111u8, 0, 0, 0, 0, 0, 0, 0] } ], - children: map![], + children_default: map![], }, ) } -- GitLab From 9a9322fe64cdc947e390d10ad61698378ae3029f Mon Sep 17 00:00:00 2001 From: Vladimir Komendantskiy Date: Mon, 20 Apr 2020 20:05:45 +0100 Subject: [PATCH 010/167] added the Polymath subkey ID (#5705) --- primitives/core/src/crypto.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/primitives/core/src/crypto.rs b/primitives/core/src/crypto.rs index 79a36b2ad23..6e294960376 100644 --- a/primitives/core/src/crypto.rs +++ b/primitives/core/src/crypto.rs @@ -455,6 +455,8 @@ ss58_address_format!( (10, "acala", "Acala mainnet, standard account (*25519).") LaminarAccount => (11, "laminar", "Laminar mainnet, standard account (*25519).") + PolymathAccount => + (12, "polymath", "Polymath network, standard account (*25519).") KulupuAccount => (16, "kulupu", "Kulupu mainnet, standard account (*25519).") DarwiniaAccount => -- GitLab From ac6e82ea017bd9df0c602dd938e61c1f0c82f6ba Mon Sep 17 00:00:00 2001 From: Yuanchao Sun Date: Tue, 21 Apr 2020 03:09:55 +0800 Subject: [PATCH 011/167] Add RPC function state_getProof, resolves #1110 (#5649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add RPC function state_getProof, resolves #1110 * Apply suggestions from code review * Update client/rpc/src/state/state_full.rs Co-Authored-By: Bastian Köcher * Update Cargo.lock * Make block hash optional * Wrap StorageProof as Bytes * Add struct ReadProof * Fix typo Co-authored-by: Bastian Köcher --- client/rpc-api/src/state/helpers.rs | 30 +++++++++++++++++++++++++++++ client/rpc-api/src/state/mod.rs | 6 ++++++ client/rpc/src/state/mod.rs | 17 +++++++++++++--- client/rpc/src/state/state_full.rs | 26 ++++++++++++++++++++++--- client/rpc/src/state/state_light.rs | 10 +++++++++- 5 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 client/rpc-api/src/state/helpers.rs diff --git a/client/rpc-api/src/state/helpers.rs b/client/rpc-api/src/state/helpers.rs new file mode 100644 index 00000000000..516b6c80c49 --- /dev/null +++ b/client/rpc-api/src/state/helpers.rs @@ -0,0 +1,30 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Substrate state API helpers. + +use sp_core::Bytes; +use serde::{Serialize, Deserialize}; + +/// ReadProof struct returned by the RPC +#[derive(Debug, PartialEq, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReadProof { + /// Block hash used to generate the proof + pub at: Hash, + /// A proof used to prove that storage entries are included in the storage trie + pub proof: Vec, +} diff --git a/client/rpc-api/src/state/mod.rs b/client/rpc-api/src/state/mod.rs index 243a33c18d4..3d38a16eb4a 100644 --- a/client/rpc-api/src/state/mod.rs +++ b/client/rpc-api/src/state/mod.rs @@ -17,6 +17,7 @@ //! Substrate state API. pub mod error; +pub mod helpers; use jsonrpc_core::Result as RpcResult; use jsonrpc_core::futures::Future; @@ -28,6 +29,7 @@ use sp_version::RuntimeVersion; use self::error::FutureResult; pub use self::gen_client::Client as StateClient; +pub use self::helpers::ReadProof; /// Substrate state API #[rpc] @@ -100,6 +102,10 @@ pub trait StateApi { at: Option, ) -> FutureResult>>; + /// Returns proof of storage entries at a specific block's state. + #[rpc(name = "state_getReadProof")] + fn read_proof(&self, keys: Vec, hash: Option) -> FutureResult>; + /// New runtime version subscription #[pubsub( subscription = "state_runtimeVersion", diff --git a/client/rpc/src/state/mod.rs b/client/rpc/src/state/mod.rs index e6962824333..b3ac3674225 100644 --- a/client/rpc/src/state/mod.rs +++ b/client/rpc/src/state/mod.rs @@ -26,7 +26,7 @@ use std::sync::Arc; use jsonrpc_pubsub::{typed::Subscriber, SubscriptionId}; use rpc::{Result as RpcResult, futures::{Future, future::result}}; -use sc_rpc_api::Subscriptions; +use sc_rpc_api::{Subscriptions, state::ReadProof}; use sc_client::{light::{blockchain::RemoteBlockchain, fetcher::Fetcher}}; use sp_core::{Bytes, storage::{StorageKey, PrefixedStorageKey, StorageData, StorageChangeSet}}; use sp_version::RuntimeVersion; @@ -38,7 +38,7 @@ use self::error::{Error, FutureResult}; pub use sc_rpc_api::state::*; pub use sc_rpc_api::child_state::*; -use sc_client_api::{ExecutorProvider, StorageProvider, BlockchainEvents, Backend}; +use sc_client_api::{ExecutorProvider, StorageProvider, BlockchainEvents, Backend, ProofProvider}; use sp_blockchain::{HeaderMetadata, HeaderBackend}; const STORAGE_KEYS_PAGED_MAX_COUNT: u32 = 1000; @@ -128,6 +128,13 @@ pub trait StateBackend: Send + Sync + 'static at: Option ) -> FutureResult>>; + /// Returns proof of storage entries at a specific block's state. + fn read_proof( + &self, + block: Option, + keys: Vec, + ) -> FutureResult>; + /// New runtime version subscription fn subscribe_runtime_version( &self, @@ -166,7 +173,7 @@ pub fn new_full( where Block: BlockT + 'static, BE: Backend + 'static, - Client: ExecutorProvider + StorageProvider + HeaderBackend + Client: ExecutorProvider + StorageProvider + ProofProvider + HeaderBackend + HeaderMetadata + BlockchainEvents + CallApiAt + ProvideRuntimeApi + Send + Sync + 'static, @@ -294,6 +301,10 @@ impl StateApi for State self.backend.query_storage_at(keys, at) } + fn read_proof(&self, keys: Vec, block: Option) -> FutureResult> { + self.backend.read_proof(block, keys) + } + fn subscribe_storage( &self, meta: Self::Metadata, diff --git a/client/rpc/src/state/state_full.rs b/client/rpc/src/state/state_full.rs index a9767c34fcf..4546692b7bd 100644 --- a/client/rpc/src/state/state_full.rs +++ b/client/rpc/src/state/state_full.rs @@ -24,7 +24,7 @@ use log::warn; use jsonrpc_pubsub::{typed::Subscriber, SubscriptionId}; use rpc::{Result as RpcResult, futures::{stream, Future, Sink, Stream, future::result}}; -use sc_rpc_api::Subscriptions; +use sc_rpc_api::{Subscriptions, state::ReadProof}; use sc_client_api::backend::Backend; use sp_blockchain::{Result as ClientResult, Error as ClientError, HeaderMetadata, CachedHeaderMetadata, HeaderBackend}; use sc_client::BlockchainEvents; @@ -41,7 +41,7 @@ use sp_api::{Metadata, ProvideRuntimeApi, CallApiAt}; use super::{StateBackend, ChildStateBackend, error::{FutureResult, Error, Result}, client_err}; use std::marker::PhantomData; -use sc_client_api::{CallExecutor, StorageProvider, ExecutorProvider}; +use sc_client_api::{CallExecutor, StorageProvider, ExecutorProvider, ProofProvider}; /// Ranges to query in state_queryStorage. struct QueryStorageRange { @@ -219,7 +219,7 @@ impl FullState impl StateBackend for FullState where Block: BlockT + 'static, BE: Backend + 'static, - Client: ExecutorProvider + StorageProvider + HeaderBackend + Client: ExecutorProvider + StorageProvider + ProofProvider + HeaderBackend + HeaderMetadata + BlockchainEvents + CallApiAt + ProvideRuntimeApi + Send + Sync + 'static, @@ -351,6 +351,26 @@ impl StateBackend for FullState, + keys: Vec, + ) -> FutureResult> { + Box::new(result( + self.block_or_best(block) + .and_then(|block| { + self.client + .read_proof( + &BlockId::Hash(block), + &mut keys.iter().map(|key| key.0.as_ref()), + ) + .map(|proof| proof.iter_nodes().map(|node| node.into()).collect()) + .map(|proof| ReadProof { at: block, proof }) + }) + .map_err(client_err), + )) + } + fn subscribe_runtime_version( &self, _meta: crate::metadata::Metadata, diff --git a/client/rpc/src/state/state_light.rs b/client/rpc/src/state/state_light.rs index 27adbcd6919..10adab9cc31 100644 --- a/client/rpc/src/state/state_light.rs +++ b/client/rpc/src/state/state_light.rs @@ -38,7 +38,7 @@ use rpc::{ futures::stream::Stream, }; -use sc_rpc_api::Subscriptions; +use sc_rpc_api::{Subscriptions, state::ReadProof}; use sp_blockchain::{Error as ClientError, HeaderBackend}; use sc_client::{ BlockchainEvents, @@ -279,6 +279,14 @@ impl StateBackend for LightState, + _keys: Vec, + ) -> FutureResult> { + Box::new(result(Err(client_err(ClientError::NotAvailableOnLightClient)))) + } + fn subscribe_storage( &self, _meta: crate::metadata::Metadata, -- GitLab From 99adaeb04f68c3be7f7b66366faaf492c44ec57d Mon Sep 17 00:00:00 2001 From: Max Inden Date: Mon, 20 Apr 2020 22:40:44 +0200 Subject: [PATCH 012/167] client/network-gossip: Move sink IO outside of state_machine (#5669) * client/network-gossip: Move sink IO outside of state_machine `ConsensusGossip` is supposed to be a deterministic state machine. `GossipEngine` wrapping `ConsensusGossip` should handle IO operations. This commit moves the `message_sink` IO operations to `GossipEngine`. More specifically on incoming messages a `GossipEngine` calls `ConsensusGossip::on_incoming` to validate and register the messages. `ConsensusGossip` returns the valid messages which are then forwarded by `GossipEngine` to the upper layer via the `message_sinks`. * client/network-gossip: Adjust and extend tests * Update client/network-gossip/src/bridge.rs Co-authored-by: Benjamin Kampmann --- Cargo.lock | 1 + client/network-gossip/Cargo.toml | 1 + client/network-gossip/src/bridge.rs | 190 +++++++++++++++++---- client/network-gossip/src/state_machine.rs | 100 ++++------- 4 files changed, 196 insertions(+), 96 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 325d602c8ef..7b36a7d08a4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6463,6 +6463,7 @@ dependencies = [ name = "sc-network-gossip" version = "0.8.0-dev" dependencies = [ + "async-std", "futures 0.3.4", "futures-timer 3.0.2", "libp2p", diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index a4b3f72b043..c6714375fe3 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -25,4 +25,5 @@ sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] +async-std = "1.5" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/network-gossip/src/bridge.rs b/client/network-gossip/src/bridge.rs index b3bfe606ba0..a15195111e8 100644 --- a/client/network-gossip/src/bridge.rs +++ b/client/network-gossip/src/bridge.rs @@ -21,9 +21,16 @@ use sc_network::{Event, ReputationChange}; use futures::prelude::*; use libp2p::PeerId; +use log::trace; use sp_runtime::{traits::Block as BlockT, ConsensusEngineId}; -use std::{borrow::Cow, pin::Pin, sync::Arc, task::{Context, Poll}}; -use sp_utils::mpsc::TracingUnboundedReceiver; +use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver}; +use std::{ + borrow::Cow, + collections::{HashMap, hash_map::Entry}, + pin::Pin, + sync::Arc, + task::{Context, Poll}, +}; /// Wraps around an implementation of the `Network` crate and provides gossiping capabilities on /// top of it. @@ -31,8 +38,12 @@ pub struct GossipEngine { state_machine: ConsensusGossip, network: Box + Send>, periodic_maintenance_interval: futures_timer::Delay, - network_event_stream: Pin + Send>>, engine_id: ConsensusEngineId, + + /// Incoming events from the network. + network_event_stream: Pin + Send>>, + /// Outgoing events to the consumer. + message_sinks: HashMap>>, } impl Unpin for GossipEngine {} @@ -54,8 +65,10 @@ impl GossipEngine { state_machine: ConsensusGossip::new(validator, engine_id), network: Box::new(network), periodic_maintenance_interval: futures_timer::Delay::new(PERIODIC_MAINTENANCE_INTERVAL), - network_event_stream, engine_id, + + network_event_stream, + message_sinks: HashMap::new(), } } @@ -85,7 +98,15 @@ impl GossipEngine { pub fn messages_for(&mut self, topic: B::Hash) -> TracingUnboundedReceiver { - self.state_machine.messages_for(topic) + let (tx, rx) = tracing_unbounded("mpsc_gossip_messages_for"); + + for notification in self.state_machine.messages_for(topic) { + tx.unbounded_send(notification).expect("receiver known to be live; qed"); + } + + self.message_sinks.entry(topic).or_default().push(tx); + + rx } /// Send all messages with given topic to a peer. @@ -147,16 +168,40 @@ impl Future for GossipEngine { this.state_machine.peer_disconnected(&mut *this.network, remote); }, Event::NotificationsReceived { remote, messages } => { - let engine_id = this.engine_id.clone(); - this.state_machine.on_incoming( + let messages = messages.into_iter().filter_map(|(engine, data)| { + if engine == this.engine_id { + Some(data.to_vec()) + } else { + None + } + }).collect(); + + let to_forward = this.state_machine.on_incoming( &mut *this.network, remote, - messages.into_iter() - .filter_map(|(engine, data)| if engine == engine_id { - Some(data.to_vec()) - } else { None }) - .collect() + messages, ); + + for (topic, notification) in to_forward.into_iter() { + if let Entry::Occupied(mut entry) = this.message_sinks.entry(topic) { + trace!( + target: "gossip", + "Pushing consensus message to sinks for {}.", topic, + ); + entry.get_mut().retain(move |sink| { + if let Err(e) = sink.unbounded_send(notification.clone()) { + trace!( + target: "gossip", + "Error broadcasting message notification: {:?}", e, + ); + } + !sink.is_closed() + }); + if entry.get().is_empty() { + entry.remove_entry(); + } + } + } }, Event::Dht(_) => {} } @@ -169,6 +214,11 @@ impl Future for GossipEngine { while let Poll::Ready(()) = this.periodic_maintenance_interval.poll_unpin(cx) { this.periodic_maintenance_interval.reset(PERIODIC_MAINTENANCE_INTERVAL); this.state_machine.tick(&mut *this.network); + + this.message_sinks.retain(|_, sinks| { + sinks.retain(|sink| !sink.is_closed()); + !sinks.is_empty() + }); } Poll::Pending @@ -177,23 +227,34 @@ impl Future for GossipEngine { #[cfg(test)] mod tests { - use super::*; + use async_std::task::spawn; use crate::{ValidationResult, ValidatorContext}; + use futures::{channel::mpsc::{channel, Sender}, executor::block_on_stream}; + use sc_network::ObservedRole; + use sp_runtime::{testing::H256, traits::{Block as BlockT}}; + use std::sync::{Arc, Mutex}; use substrate_test_runtime_client::runtime::Block; + use super::*; - struct TestNetwork {} + #[derive(Clone, Default)] + struct TestNetwork { + inner: Arc>, + } + + #[derive(Clone, Default)] + struct TestNetworkInner { + event_senders: Vec>, + } - impl Network for Arc { + impl Network for TestNetwork { fn event_stream(&self) -> Pin + Send>> { - let (_tx, rx) = futures::channel::mpsc::channel(0); + let (tx, rx) = channel(100); + self.inner.lock().unwrap().event_senders.push(tx); - // Return rx and drop tx. Thus the given channel will yield `Poll::Ready(None)` on first - // poll. Box::pin(rx) } fn report_peer(&self, _: PeerId, _: ReputationChange) { - unimplemented!(); } fn disconnect_peer(&self, _: PeerId) { @@ -211,16 +272,15 @@ mod tests { } } - struct TestValidator {} - - impl Validator for TestValidator { + struct AllowAll; + impl Validator for AllowAll { fn validate( &self, - _: &mut dyn ValidatorContext, - _: &PeerId, - _: &[u8] - ) -> ValidationResult { - unimplemented!(); + _context: &mut dyn ValidatorContext, + _sender: &PeerId, + _data: &[u8], + ) -> ValidationResult { + ValidationResult::ProcessAndKeep(H256::default()) } } @@ -230,13 +290,17 @@ mod tests { /// See https://github.com/paritytech/substrate/issues/5000 for details. #[test] fn returns_when_network_event_stream_closes() { + let network = TestNetwork::default(); let mut gossip_engine = GossipEngine::::new( - Arc::new(TestNetwork{}), + network.clone(), [1, 2, 3, 4], "my_protocol".as_bytes(), - Arc::new(TestValidator{}), + Arc::new(AllowAll{}), ); + // Drop network event stream sender side. + drop(network.inner.lock().unwrap().event_senders.pop()); + futures::executor::block_on(futures::future::poll_fn(move |ctx| { if let Poll::Pending = gossip_engine.poll_unpin(ctx) { panic!( @@ -247,4 +311,72 @@ mod tests { Poll::Ready(()) })) } + + #[test] + fn keeps_multiple_subscribers_per_topic_updated_with_both_old_and_new_messages() { + let topic = H256::default(); + let engine_id = [1, 2, 3, 4]; + let remote_peer = PeerId::random(); + let network = TestNetwork::default(); + + let mut gossip_engine = GossipEngine::::new( + network.clone(), + engine_id.clone(), + "my_protocol".as_bytes(), + Arc::new(AllowAll{}), + ); + + let mut event_sender = network.inner.lock() + .unwrap() + .event_senders + .pop() + .unwrap(); + + // Register the remote peer. + event_sender.start_send( + Event::NotificationStreamOpened { + remote: remote_peer.clone(), + engine_id: engine_id.clone(), + role: ObservedRole::Authority, + } + ).unwrap(); + + let messages = vec![vec![1], vec![2]]; + let events = messages.iter().cloned().map(|m| { + Event::NotificationsReceived { + remote: remote_peer.clone(), + messages: vec![(engine_id, m.into())] + } + }).collect::>(); + + // Send first event before subscribing. + event_sender.start_send(events[0].clone()).unwrap(); + + let mut subscribers = vec![]; + for _ in 0..2 { + subscribers.push(gossip_engine.messages_for(topic)); + } + + // Send second event after subscribing. + event_sender.start_send(events[1].clone()).unwrap(); + + spawn(gossip_engine); + + let mut subscribers = subscribers.into_iter() + .map(|s| block_on_stream(s)) + .collect::>(); + + // Expect each subscriber to receive both events. + for message in messages { + for subscriber in subscribers.iter_mut() { + assert_eq!( + subscriber.next(), + Some(TopicNotification { + message: message.clone(), + sender: Some(remote_peer.clone()), + }), + ); + } + } + } } diff --git a/client/network-gossip/src/state_machine.rs b/client/network-gossip/src/state_machine.rs index d93003fcfb4..53b5b98245a 100644 --- a/client/network-gossip/src/state_machine.rs +++ b/client/network-gossip/src/state_machine.rs @@ -16,7 +16,7 @@ use crate::{Network, MessageIntent, Validator, ValidatorContext, ValidationResult}; -use std::collections::{HashMap, HashSet, hash_map::Entry}; +use std::collections::{HashMap, HashSet}; use std::sync::Arc; use std::iter; use std::time; @@ -24,7 +24,6 @@ use log::trace; use lru::LruCache; use libp2p::PeerId; use sp_runtime::traits::{Block as BlockT, Hash, HashFor}; -use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver}; use sp_runtime::ConsensusEngineId; use sc_network::ObservedRole; use wasm_timer::Instant; @@ -51,7 +50,7 @@ struct PeerConsensus { } /// Topic stream message with sender. -#[derive(Debug, Eq, PartialEq)] +#[derive(Clone, Debug, Eq, PartialEq)] pub struct TopicNotification { /// Message data. pub message: Vec, @@ -147,7 +146,6 @@ fn propagate<'a, B: BlockT, I>( /// Consensus network protocol handler. Manages statements and candidate requests. pub struct ConsensusGossip { peers: HashMap>, - live_message_sinks: HashMap>>, messages: Vec>, known_messages: LruCache, engine_id: ConsensusEngineId, @@ -160,7 +158,6 @@ impl ConsensusGossip { pub fn new(validator: Arc>, engine_id: ConsensusEngineId) -> Self { ConsensusGossip { peers: HashMap::new(), - live_message_sinks: HashMap::new(), messages: Default::default(), known_messages: LruCache::new(KNOWN_MESSAGES_CACHE_SIZE), engine_id, @@ -256,11 +253,6 @@ impl ConsensusGossip { /// Prune old or no longer relevant consensus messages. Provide a predicate /// for pruning, which returns `false` when the items with a given topic should be pruned. pub fn collect_garbage(&mut self) { - self.live_message_sinks.retain(|_, sinks| { - sinks.retain(|sink| !sink.is_closed()); - !sinks.is_empty() - }); - let known_messages = &mut self.known_messages; let before = self.messages.len(); @@ -278,33 +270,24 @@ impl ConsensusGossip { } } - /// Get data of valid, incoming messages for a topic (but might have expired meanwhile) - pub fn messages_for(&mut self, topic: B::Hash) - -> TracingUnboundedReceiver - { - let (tx, rx) = tracing_unbounded("mpsc_gossip_messages_for"); - for entry in self.messages.iter_mut().filter(|e| e.topic == topic) { - tx.unbounded_send(TopicNotification { - message: entry.message.clone(), - sender: entry.sender.clone(), - }) - .expect("receiver known to be live; qed"); - } - - self.live_message_sinks.entry(topic).or_default().push(tx); - - rx + /// Get valid messages received in the past for a topic (might have expired meanwhile). + pub fn messages_for(&mut self, topic: B::Hash) -> impl Iterator + '_ { + self.messages.iter().filter(move |e| e.topic == topic).map(|entry| TopicNotification { + message: entry.message.clone(), + sender: entry.sender.clone(), + }) } - /// Handle an incoming message for topic by who via protocol. Discard message if topic already - /// known, the message is old, its source peers isn't a registered peer or the connection to - /// them is broken. + /// Register incoming messages and return the ones that are new and valid (according to a gossip + /// validator) and should thus be forwarded to the upper layers. pub fn on_incoming( &mut self, network: &mut dyn Network, who: PeerId, messages: Vec>, - ) { + ) -> Vec<(B::Hash, TopicNotification)> { + let mut to_forward = vec![]; + if !messages.is_empty() { trace!(target: "gossip", "Received {} messages from peer {}", messages.len(), who); } @@ -335,23 +318,19 @@ impl ConsensusGossip { network.report_peer(who.clone(), rep::GOSSIP_SUCCESS); if let Some(ref mut peer) = self.peers.get_mut(&who) { peer.known_messages.insert(message_hash); - if let Entry::Occupied(mut entry) = self.live_message_sinks.entry(topic) { - trace!(target: "gossip", "Pushing consensus message to sinks for {}.", topic); - entry.get_mut().retain(|sink| { - if let Err(e) = sink.unbounded_send(TopicNotification { - message: message.clone(), - sender: Some(who.clone()) - }) { - trace!(target: "gossip", "Error broadcasting message notification: {:?}", e); - } - !sink.is_closed() - }); - if entry.get().is_empty() { - entry.remove_entry(); - } - } + + to_forward.push((topic, TopicNotification { + message: message.clone(), + sender: Some(who.clone()) + })); + if keep { - self.register_message_hashed(message_hash, topic, message, Some(who.clone())); + self.register_message_hashed( + message_hash, + topic, + message, + Some(who.clone()), + ); } } else { trace!(target:"gossip", "Ignored statement from unregistered peer {}", who); @@ -361,6 +340,8 @@ impl ConsensusGossip { trace!(target:"gossip", "Discard message from peer {}", who); } } + + to_forward } /// Send all messages with given topic to a peer. @@ -437,7 +418,6 @@ impl ConsensusGossip { mod tests { use std::sync::Arc; use sp_runtime::testing::{H256, Block as RawBlock, ExtrinsicWrapper}; - use futures::executor::block_on_stream; use super::*; @@ -518,16 +498,18 @@ mod tests { } #[test] - fn message_stream_include_those_sent_before_asking_for_stream() { + fn message_stream_include_those_sent_before_asking() { let mut consensus = ConsensusGossip::::new(Arc::new(AllowAll), [0, 0, 0, 0]); + // Register message. let message = vec![4, 5, 6]; let topic = HashFor::::hash(&[1,2,3]); - consensus.register_message(topic, message.clone()); - let mut stream = block_on_stream(consensus.messages_for(topic)); - assert_eq!(stream.next(), Some(TopicNotification { message: message, sender: None })); + assert_eq!( + consensus.messages_for(topic).next(), + Some(TopicNotification { message: message, sender: None }), + ); } #[test] @@ -544,22 +526,6 @@ mod tests { assert_eq!(consensus.messages.len(), 2); } - #[test] - fn can_keep_multiple_subscribers_per_topic() { - let mut consensus = ConsensusGossip::::new(Arc::new(AllowAll), [0, 0, 0, 0]); - - let message = vec![4, 5, 6]; - let topic = HashFor::::hash(&[1, 2, 3]); - - consensus.register_message(topic, message.clone()); - - let mut stream1 = block_on_stream(consensus.messages_for(topic)); - let mut stream2 = block_on_stream(consensus.messages_for(topic)); - - assert_eq!(stream1.next(), Some(TopicNotification { message: message.clone(), sender: None })); - assert_eq!(stream2.next(), Some(TopicNotification { message, sender: None })); - } - #[test] fn peer_is_removed_on_disconnect() { struct TestNetwork; -- GitLab From 50c969fbb885fd02a2510c53838f09d0a23c386a Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 21 Apr 2020 10:47:37 +0200 Subject: [PATCH 013/167] Pass an encoded Roles as the notifications protocols handshakes (#5665) --- client/network/src/behaviour.rs | 8 +- client/network/src/lib.rs | 9 +- client/network/src/protocol.rs | 3 +- .../src/protocol/generic_proto/behaviour.rs | 2 + .../protocol/generic_proto/handler/group.rs | 87 +++++++++++-------- 5 files changed, 71 insertions(+), 38 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index cb9c5521157..880b381e669 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -20,6 +20,8 @@ use crate::{ Event, ObservedRole, DhtEvent, ExHashT, }; use crate::protocol::{self, light_client_handler, message::Roles, CustomMessageOutcome, Protocol}; + +use codec::Encode as _; use libp2p::NetworkBehaviour; use libp2p::core::{Multiaddr, PeerId, PublicKey}; use libp2p::kad::record; @@ -135,7 +137,11 @@ impl Behaviour { engine_id: ConsensusEngineId, protocol_name: impl Into>, ) { - let list = self.substrate.register_notifications_protocol(engine_id, protocol_name); + // This is the message that we will send to the remote as part of the initial handshake. + // At the moment, we force this to be an encoded `Roles`. + let handshake_message = Roles::from(&self.role).encode(); + + let list = self.substrate.register_notifications_protocol(engine_id, protocol_name, handshake_message); for (remote, roles) in list { let role = reported_roles_to_observed_role(&self.role, remote, roles); let ev = Event::NotificationStreamOpened { diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index ed96215d207..44bb1516bd4 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -210,7 +210,14 @@ //! notifications protocol. //! //! At the moment, for backwards-compatibility, notification protocols are tied to the legacy -//! Substrate substream. In the future, though, it will no longer be the case. +//! Substrate substream. Additionally, the handshake message is hardcoded to be a single 8-bits +//! integer representing the role of the node: +//! +//! - 1 for a full node. +//! - 2 for a light node. +//! - 4 for an authority. +//! +//! In the future, though, these restrictions will be removed. //! //! # Usage //! diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 6ad82594849..42084b7ce31 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -1043,12 +1043,13 @@ impl Protocol { &'a mut self, engine_id: ConsensusEngineId, protocol_name: impl Into>, + handshake_message: Vec, ) -> impl ExactSizeIterator + 'a { let protocol_name = protocol_name.into(); if self.protocol_name_by_engine.insert(engine_id, protocol_name.clone()).is_some() { error!(target: "sub-libp2p", "Notifications protocol already registered: {:?}", protocol_name); } else { - self.behaviour.register_notif_protocol(protocol_name.clone(), Vec::new()); + self.behaviour.register_notif_protocol(protocol_name.clone(), handshake_message); self.legacy_equiv_by_name.insert(protocol_name, Fallback::Consensus(engine_id)); } diff --git a/client/network/src/protocol/generic_proto/behaviour.rs b/client/network/src/protocol/generic_proto/behaviour.rs index e62edb37338..35a8b03d36f 100644 --- a/client/network/src/protocol/generic_proto/behaviour.rs +++ b/client/network/src/protocol/generic_proto/behaviour.rs @@ -113,6 +113,8 @@ pub struct GenericProto { legacy_protocol: RegisteredProtocol, /// Notification protocols. Entries are only ever added and not removed. + /// Contains, for each protocol, the protocol name and the message to send as part of the + /// initial handshake. notif_protocols: Vec<(Cow<'static, [u8]>, Vec)>, /// Receiver for instructions about who to connect to or disconnect from. diff --git a/client/network/src/protocol/generic_proto/handler/group.rs b/client/network/src/protocol/generic_proto/handler/group.rs index 46b759d4580..04293c7c9f1 100644 --- a/client/network/src/protocol/generic_proto/handler/group.rs +++ b/client/network/src/protocol/generic_proto/handler/group.rs @@ -75,11 +75,12 @@ use std::{borrow::Cow, error, io, str, task::{Context, Poll}}; /// /// See the documentation at the module level for more information. pub struct NotifsHandlerProto { - /// Prototypes for handlers for inbound substreams. - in_handlers: Vec, + /// Prototypes for handlers for inbound substreams, and the message we respond with in the + /// handshake. + in_handlers: Vec<(NotifsInHandlerProto, Vec)>, - /// Prototypes for handlers for outbound substreams. - out_handlers: Vec, + /// Prototypes for handlers for outbound substreams, and the initial handshake message we send. + out_handlers: Vec<(NotifsOutHandlerProto, Vec)>, /// Prototype for handler for backwards-compatibility. legacy: LegacyProtoHandlerProto, @@ -89,11 +90,11 @@ pub struct NotifsHandlerProto { /// /// See the documentation at the module level for more information. pub struct NotifsHandler { - /// Handlers for inbound substreams. - in_handlers: Vec, + /// Handlers for inbound substreams, and the message we respond with in the handshake. + in_handlers: Vec<(NotifsInHandler, Vec)>, - /// Handlers for outbound substreams. - out_handlers: Vec, + /// Handlers for outbound substreams, and the initial handshake message we send. + out_handlers: Vec<(NotifsOutHandler, Vec)>, /// Handler for backwards-compatibility. legacy: LegacyProtoHandler, @@ -119,7 +120,7 @@ impl IntoProtocolsHandler for NotifsHandlerProto { fn inbound_protocol(&self) -> SelectUpgrade, RegisteredProtocol> { let in_handlers = self.in_handlers.iter() - .map(|h| h.inbound_protocol()) + .map(|(h, _)| h.inbound_protocol()) .collect::>(); SelectUpgrade::new(in_handlers, self.legacy.inbound_protocol()) @@ -129,11 +130,11 @@ impl IntoProtocolsHandler for NotifsHandlerProto { NotifsHandler { in_handlers: self.in_handlers .into_iter() - .map(|p| p.into_handler(remote_peer_id, connected_point)) + .map(|(proto, msg)| (proto.into_handler(remote_peer_id, connected_point), msg)) .collect(), out_handlers: self.out_handlers .into_iter() - .map(|p| p.into_handler(remote_peer_id, connected_point)) + .map(|(proto, msg)| (proto.into_handler(remote_peer_id, connected_point), msg)) .collect(), legacy: self.legacy.into_handler(remote_peer_id, connected_point), enabled: EnabledState::Initial, @@ -232,28 +233,42 @@ pub enum NotifsHandlerOut { impl NotifsHandlerProto { /// Builds a new handler. /// + /// `list` is a list of notification protocols names, and the message to send as part of the + /// handshake. At the moment, the message is always the same whether we open a substream + /// ourselves or respond to handshake from the remote. + /// /// The `queue_size_report` is an optional Prometheus metric that can report the size of the /// messages queue. If passed, it must have one label for the protocol name. - pub fn new(legacy: RegisteredProtocol, list: impl Into, Vec)>>, queue_size_report: Option) -> Self { + pub fn new( + legacy: RegisteredProtocol, + list: impl Into, Vec)>>, + queue_size_report: Option + ) -> Self { let list = list.into(); let out_handlers = list .clone() .into_iter() - .map(|(p, _)| { + .map(|(proto_name, initial_message)| { let queue_size_report = queue_size_report.as_ref().and_then(|qs| { - if let Ok(utf8) = str::from_utf8(&p) { + if let Ok(utf8) = str::from_utf8(&proto_name) { Some(qs.with_label_values(&[utf8])) } else { - log::warn!("Ignoring Prometheus metric because {:?} isn't UTF-8", p); + log::warn!("Ignoring Prometheus metric because {:?} isn't UTF-8", proto_name); None } }); - NotifsOutHandlerProto::new(p, queue_size_report) + + (NotifsOutHandlerProto::new(proto_name, queue_size_report), initial_message) }).collect(); + let in_handlers = list.clone() + .into_iter() + .map(|(proto_name, msg)| (NotifsInHandlerProto::new(proto_name), msg)) + .collect(); + NotifsHandlerProto { - in_handlers: list.clone().into_iter().map(|(p, _)| NotifsInHandlerProto::new(p)).collect(), + in_handlers, out_handlers, legacy: LegacyProtoHandlerProto::new(legacy), } @@ -277,7 +292,7 @@ impl ProtocolsHandler for NotifsHandler { fn listen_protocol(&self) -> SubstreamProtocol { let in_handlers = self.in_handlers.iter() - .map(|h| h.listen_protocol().into_upgrade().1) + .map(|(h, _)| h.listen_protocol().into_upgrade().1) .collect::>(); let proto = SelectUpgrade::new(in_handlers, self.legacy.listen_protocol().into_upgrade().1); @@ -290,7 +305,7 @@ impl ProtocolsHandler for NotifsHandler { ) { match out { EitherOutput::First((out, num)) => - self.in_handlers[num].inject_fully_negotiated_inbound(out), + self.in_handlers[num].0.inject_fully_negotiated_inbound(out), EitherOutput::Second(out) => self.legacy.inject_fully_negotiated_inbound(out), } @@ -303,7 +318,7 @@ impl ProtocolsHandler for NotifsHandler { ) { match (out, num) { (EitherOutput::First(out), Some(num)) => - self.out_handlers[num].inject_fully_negotiated_outbound(out, ()), + self.out_handlers[num].0.inject_fully_negotiated_outbound(out, ()), (EitherOutput::Second(out), None) => self.legacy.inject_fully_negotiated_outbound(out, ()), _ => error!("inject_fully_negotiated_outbound called with wrong parameters"), @@ -318,13 +333,15 @@ impl ProtocolsHandler for NotifsHandler { } self.enabled = EnabledState::Enabled; self.legacy.inject_event(LegacyProtoHandlerIn::Enable); - for handler in &mut self.out_handlers { + for (handler, initial_message) in &mut self.out_handlers { handler.inject_event(NotifsOutHandlerIn::Enable { - initial_message: vec![] + initial_message: initial_message.clone(), }); } for num in self.pending_in.drain(..) { - self.in_handlers[num].inject_event(NotifsInHandlerIn::Accept(vec![])); + let handshake_message = self.in_handlers[num].1.clone(); + self.in_handlers[num].0 + .inject_event(NotifsInHandlerIn::Accept(handshake_message)); } }, NotifsHandlerIn::Disable => { @@ -335,19 +352,19 @@ impl ProtocolsHandler for NotifsHandler { // The notifications protocols start in the disabled state. If we were in the // "Initial" state, then we shouldn't disable the notifications protocols again. if self.enabled != EnabledState::Initial { - for handler in &mut self.out_handlers { + for (handler, _) in &mut self.out_handlers { handler.inject_event(NotifsOutHandlerIn::Disable); } } self.enabled = EnabledState::Disabled; for num in self.pending_in.drain(..) { - self.in_handlers[num].inject_event(NotifsInHandlerIn::Refuse); + self.in_handlers[num].0.inject_event(NotifsInHandlerIn::Refuse); } }, NotifsHandlerIn::SendLegacy { message } => self.legacy.inject_event(LegacyProtoHandlerIn::SendCustomMessage { message }), NotifsHandlerIn::SendNotification { message, encoded_fallback_message, protocol_name } => { - for handler in &mut self.out_handlers { + for (handler, _) in &mut self.out_handlers { if handler.protocol_name() != &protocol_name[..] { continue; } @@ -372,21 +389,21 @@ impl ProtocolsHandler for NotifsHandler { ) { match (err, num) { (ProtocolsHandlerUpgrErr::Timeout, Some(num)) => - self.out_handlers[num].inject_dial_upgrade_error( + self.out_handlers[num].0.inject_dial_upgrade_error( (), ProtocolsHandlerUpgrErr::Timeout ), (ProtocolsHandlerUpgrErr::Timeout, None) => self.legacy.inject_dial_upgrade_error((), ProtocolsHandlerUpgrErr::Timeout), (ProtocolsHandlerUpgrErr::Timer, Some(num)) => - self.out_handlers[num].inject_dial_upgrade_error( + self.out_handlers[num].0.inject_dial_upgrade_error( (), ProtocolsHandlerUpgrErr::Timer ), (ProtocolsHandlerUpgrErr::Timer, None) => self.legacy.inject_dial_upgrade_error((), ProtocolsHandlerUpgrErr::Timer), (ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Select(err)), Some(num)) => - self.out_handlers[num].inject_dial_upgrade_error( + self.out_handlers[num].0.inject_dial_upgrade_error( (), ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Select(err)) ), @@ -396,7 +413,7 @@ impl ProtocolsHandler for NotifsHandler { ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Select(err)) ), (ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Apply(EitherError::A(err))), Some(num)) => - self.out_handlers[num].inject_dial_upgrade_error( + self.out_handlers[num].0.inject_dial_upgrade_error( (), ProtocolsHandlerUpgrErr::Upgrade(UpgradeError::Apply(err)) ), @@ -417,7 +434,7 @@ impl ProtocolsHandler for NotifsHandler { return KeepAlive::Yes; } - for handler in &self.in_handlers { + for (handler, _) in &self.in_handlers { let val = handler.connection_keep_alive(); if val.is_yes() { return KeepAlive::Yes; @@ -425,7 +442,7 @@ impl ProtocolsHandler for NotifsHandler { if ret < val { ret = val; } } - for handler in &self.out_handlers { + for (handler, _) in &self.out_handlers { let val = handler.connection_keep_alive(); if val.is_yes() { return KeepAlive::Yes; @@ -474,7 +491,7 @@ impl ProtocolsHandler for NotifsHandler { } } - for (handler_num, handler) in self.in_handlers.iter_mut().enumerate() { + for (handler_num, (handler, handshake_message)) in self.in_handlers.iter_mut().enumerate() { while let Poll::Ready(ev) = handler.poll(cx) { match ev { ProtocolsHandlerEvent::OutboundSubstreamRequest { .. } => @@ -484,7 +501,7 @@ impl ProtocolsHandler for NotifsHandler { match self.enabled { EnabledState::Initial => self.pending_in.push(handler_num), EnabledState::Enabled => - handler.inject_event(NotifsInHandlerIn::Accept(vec![])), + handler.inject_event(NotifsInHandlerIn::Accept(handshake_message.clone())), EnabledState::Disabled => handler.inject_event(NotifsInHandlerIn::Refuse), }, @@ -504,7 +521,7 @@ impl ProtocolsHandler for NotifsHandler { } } - for (handler_num, handler) in self.out_handlers.iter_mut().enumerate() { + for (handler_num, (handler, _)) in self.out_handlers.iter_mut().enumerate() { while let Poll::Ready(ev) = handler.poll(cx) { match ev { ProtocolsHandlerEvent::OutboundSubstreamRequest { protocol, info: () } => -- GitLab From c5d81172d64cb958c3d61e160563006c72b8b0f4 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Tue, 21 Apr 2020 04:52:34 -0400 Subject: [PATCH 014/167] Move AuraPair import to new_full_start! macro (#5709) --- bin/node-template/node/src/command.rs | 1 - bin/node-template/node/src/service.rs | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/node-template/node/src/command.rs b/bin/node-template/node/src/command.rs index 7950df9a0bc..baac33e9aca 100644 --- a/bin/node-template/node/src/command.rs +++ b/bin/node-template/node/src/command.rs @@ -18,7 +18,6 @@ use crate::chain_spec; use crate::cli::Cli; use crate::service; use sc_cli::SubstrateCli; -use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; impl SubstrateCli for Cli { fn impl_name() -> &'static str { diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index b8e4d73db69..62177608a2e 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -26,6 +26,8 @@ native_executor_instance!( macro_rules! new_full_start { ($config:expr) => {{ use std::sync::Arc; + use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; + let mut import_setup = None; let inherent_data_providers = sp_inherents::InherentDataProviders::new(); -- GitLab From ededdc4f131da36f1da8954219fcea8eb513f521 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Tue, 21 Apr 2020 10:54:37 +0200 Subject: [PATCH 015/167] client/authority-discovery: Add metric exposing priority group size (#5707) Expose the amount of addresses that are passed from the authority discovery module down to the network peer set manager as a priority group in order to connect to the corresponding nodes. ``` authority_discovery_priority_group_size 10 ``` --- client/authority-discovery/src/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index 2cf455f17ba..91e8293dec8 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -475,6 +475,10 @@ where fn update_peer_set_priority_group(&self) -> Result<()> { let addresses = self.addr_cache.get_subset(); + if let Some(metrics) = &self.metrics { + metrics.priority_group_size.set(addresses.len().try_into().unwrap_or(std::u64::MAX)); + } + debug!( target: LOG_TARGET, "Applying priority group {:?} to peerset.", addresses, @@ -599,6 +603,7 @@ pub(crate) struct Metrics { amount_last_published: Gauge, request: Counter, dht_event_received: CounterVec, + priority_group_size: Gauge, } impl Metrics { @@ -637,6 +642,13 @@ impl Metrics { )?, registry, )?, + priority_group_size: register( + Gauge::new( + "authority_discovery_priority_group_size", + "Number of addresses passed to the peer set as a priority group." + )?, + registry, + )?, }) } } -- GitLab From b20dc82aedd47538a1f17ff125d58fe4f12e2b7c Mon Sep 17 00:00:00 2001 From: Rakan Alhneiti Date: Tue, 21 Apr 2020 14:55:05 +0200 Subject: [PATCH 016/167] Offchain signing (#5182) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * New approach to offchain signing. * Use in im-online * Rewrite to use Account * DRY signing. * Implement send_raw_unsigned_transaction * WiP * Expunge LocalCall * Expunge LocalCall * Fix compilation. * Solve call. * Make it compile again. * Finalize implementation. * Change CreateTransaction * Clear CreateTransaction. * Add price payload * Send raw transaction * Submit signed payload / unsigned transaction (WIP) * Supertrait requirements on T::Signature * Validate signature of payload on an unsigned transaction * Fix encoding - part 1 * Make it compile. * Fix compilation of unsigned validator. * Pass price payload to the transaction * Make block number part of the signed payload * Send signed transaction * Implement all_accounts, any_account * Fix formatting * Implement submit_transaction * Submit signed transaction (ForAll, ForAny) * Fix formatting * Implement CreateSignedTransaction * Move sign and verify to AppCrypto * Sign transaction * Call `use_encoded` * Remove SubmitAndSignTransaction * Implement runtime using new SigningTypes * Adapt offchain example to changes * Fix im-online pallet * Quick fix: rename AuthorityId2 * Fix offchain example tests * Add a comment on why keystore is required in unsigned transaction test * Use UintAuthorityId instead of u64 * WIP * Remove IdentifyAccount from UintAuthorityId * Implement PublicWrapper type * Fix im-online tests * Fix runtime test * Bump spec version * Fix executor tests * Rename ImOnlineAuthId -> ImOnlineAuthorityId and formatting * Fix merge * Documentation * Revert u64 -> UintAuthorityId conversion * Fix string errors * Document public members in offchain module * Introduce SubmitTransaction * Update pallets to use SubmitTransaction * WIP * Use SubmitTransaction in offchain * Use `submit_unsigned_transaction` * Fix tests * Update docs * Remove SigningTypes requirement from `SendTransactionTypes` * Fix tests * Update frame/system/src/offchain.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/system/src/offchain.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/example-offchain-worker/src/tests.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/system/src/offchain.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Update frame/system/src/offchain.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Remove leftover from previous iterations * Change enum to struct * Remove public * Move mock to node/executor/tests * Cleanup test-helpers * Make `application-crypto` `std` feature internal The macros should not generate code that requires that the calling crate has a feature with the name `std` defined. * Revert cargo lock update * Use TestAuthorityId from common * Restore members of account to public * Tidy up imports * Fix benchmarking pallet * Add tests demonstrating ForAll, ForAny on signer * Move definition of AppCrypto in example-offchain-worker from tests to mod::crypto * Cleanup stray comment * Fix ValidTransaction * Re-fix CreateSignedTransaction * Address PR feedback * Add can_sign method to signer * Propagate error * Improve documentation * Fix vec! macro not available * Document SendTransactiontypes * Add some docs. * Split signing examples * Add tests for signing examples * WIP can_sign - PR feedback * WIP * Split for_any / for_all into different calls * Verify payload and signature in test * Fix can_sign implementation * Fix impl_version * Import Box from sp_std * Create issues for TODOs * Ignore doctest. * Add test directly to system. Adjust UintTypes. * Add some tests to account filtering. * Remove code samples and point to example offchain worker * Fix doc links * Fix im-online tests using signatures. Co-authored-by: Tomasz Drwięga Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher --- bin/node/executor/tests/common.rs | 34 +- bin/node/executor/tests/submit_transaction.rs | 135 ++- bin/node/runtime/src/lib.rs | 127 +- frame/example-offchain-worker/src/lib.rs | 331 +++-- frame/example-offchain-worker/src/tests.rs | 166 ++- frame/im-online/src/lib.rs | 34 +- frame/im-online/src/mock.rs | 20 +- frame/im-online/src/tests.rs | 12 +- frame/session/benchmarking/src/mock.rs | 13 +- frame/staking/src/lib.rs | 9 +- frame/staking/src/mock.rs | 10 +- frame/staking/src/offchain_election.rs | 6 +- frame/system/src/lib.rs | 11 +- frame/system/src/offchain.rs | 1071 ++++++++++++----- primitives/application-crypto/src/lib.rs | 2 +- .../src/generic/unchecked_extrinsic.rs | 23 +- primitives/runtime/src/lib.rs | 21 + primitives/runtime/src/testing.rs | 50 +- 18 files changed, 1469 insertions(+), 606 deletions(-) diff --git a/bin/node/executor/tests/common.rs b/bin/node/executor/tests/common.rs index 6b6ef272f8a..5a51e4312c5 100644 --- a/bin/node/executor/tests/common.rs +++ b/bin/node/executor/tests/common.rs @@ -15,10 +15,21 @@ // along with Substrate. If not, see . use codec::{Encode, Decode}; +use frame_system::offchain::AppCrypto; use frame_support::Hashable; use sp_state_machine::TestExternalities as CoreTestExternalities; -use sp_core::{NeverNativeValue, NativeOrEncoded, traits::{CodeExecutor, RuntimeCode}}; -use sp_runtime::{ApplyExtrinsicResult, traits::{Header as HeaderT, BlakeTwo256}}; +use sp_core::{ + NeverNativeValue, NativeOrEncoded, + crypto::KeyTypeId, + sr25519::Signature, + traits::{CodeExecutor, RuntimeCode}, +}; +use sp_runtime::{ + ApplyExtrinsicResult, + MultiSigner, + MultiSignature, + traits::{Header as HeaderT, BlakeTwo256}, +}; use sc_executor::{NativeExecutor, WasmExecutionMethod}; use sc_executor::error::Result; @@ -31,6 +42,25 @@ use node_primitives::{Hash, BlockNumber}; use node_testing::keyring::*; use sp_externalities::Externalities; +pub const TEST_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"test"); + +pub mod sr25519 { + mod app_sr25519 { + use sp_application_crypto::{app_crypto, sr25519}; + use super::super::TEST_KEY_TYPE_ID; + app_crypto!(sr25519, TEST_KEY_TYPE_ID); + } + + pub type AuthorityId = app_sr25519::Public; +} + +pub struct TestAuthorityId; +impl AppCrypto for TestAuthorityId { + type RuntimeAppPublic = sr25519::AuthorityId; + type GenericSignature = Signature; + type GenericPublic = sp_core::sr25519::Public; +} + /// The wasm runtime code. /// /// `compact` since it is after post-processing with wasm-gc which performs tree-shaking thus diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index d92f3e3202f..3a41c3483c2 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -15,24 +15,29 @@ // along with Substrate. If not, see . use node_runtime::{ - Call, Executive, Indices, Runtime, TransactionSubmitterOf, UncheckedExtrinsic, + Executive, Indices, Runtime, UncheckedExtrinsic, }; use sp_application_crypto::AppKey; use sp_core::testing::KeyStore; -use sp_core::traits::KeystoreExt; -use sp_core::offchain::{ - TransactionPoolExt, - testing::TestTransactionPoolExt, +use sp_core::{ + offchain::{ + TransactionPoolExt, + testing::TestTransactionPoolExt, + }, + traits::KeystoreExt, +}; +use frame_system::{ + offchain::{ + Signer, + SubmitTransaction, + SendSignedTransaction, + } }; -use frame_system::offchain::{SubmitSignedTransaction, SubmitUnsignedTransaction}; -use pallet_im_online::sr25519::AuthorityPair as Key; use codec::Decode; pub mod common; use self::common::*; -type SubmitTransaction = TransactionSubmitterOf; - #[test] fn should_submit_unsigned_transaction() { let mut t = new_test_ext(COMPACT_CODE, false); @@ -49,8 +54,7 @@ fn should_submit_unsigned_transaction() { }; let call = pallet_im_online::Call::heartbeat(heartbeat_data, signature); - > - ::submit_unsigned(call) + SubmitTransaction::>::submit_unsigned_transaction(call.into()) .unwrap(); assert_eq!(state.read().transactions.len(), 1) @@ -66,23 +70,16 @@ fn should_submit_signed_transaction() { t.register_extension(TransactionPoolExt::new(pool)); let keystore = KeyStore::new(); - keystore.write().sr25519_generate_new(Key::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); - keystore.write().sr25519_generate_new(Key::ID, Some(&format!("{}/hunter2", PHRASE))).unwrap(); - keystore.write().sr25519_generate_new(Key::ID, Some(&format!("{}/hunter3", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter2", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter3", PHRASE))).unwrap(); t.register_extension(KeystoreExt(keystore)); t.execute_with(|| { - let keys = > - ::find_all_local_keys(); - assert_eq!(keys.len(), 3, "Missing keys: {:?}", keys); - - let can_sign = > - ::can_sign(); - assert!(can_sign, "Since there are keys, `can_sign` should return true"); - - let call = pallet_balances::Call::transfer(Default::default(), Default::default()); - let results = - >::submit_signed(call); + let results = Signer::::all_accounts() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); let len = results.len(); assert_eq!(len, 3); @@ -98,27 +95,26 @@ fn should_submit_signed_twice_from_the_same_account() { t.register_extension(TransactionPoolExt::new(pool)); let keystore = KeyStore::new(); - keystore.write().sr25519_generate_new(Key::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter2", PHRASE))).unwrap(); t.register_extension(KeystoreExt(keystore)); t.execute_with(|| { - let call = pallet_balances::Call::transfer(Default::default(), Default::default()); - let results = - >::submit_signed(call); + let result = Signer::::any_account() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); - let len = results.len(); - assert_eq!(len, 1); - assert_eq!(results.into_iter().filter_map(|x| x.1.ok()).count(), len); + assert!(result.is_some()); assert_eq!(state.read().transactions.len(), 1); // submit another one from the same account. The nonce should be incremented. - let call = pallet_balances::Call::transfer(Default::default(), Default::default()); - let results = - >::submit_signed(call); + let result = Signer::::any_account() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); - let len = results.len(); - assert_eq!(len, 1); - assert_eq!(results.into_iter().filter_map(|x| x.1.ok()).count(), len); + assert!(result.is_some()); assert_eq!(state.read().transactions.len(), 2); // now check that the transaction nonces are not equal @@ -136,6 +132,60 @@ fn should_submit_signed_twice_from_the_same_account() { }); } +#[test] +fn should_submit_signed_twice_from_all_accounts() { + let mut t = new_test_ext(COMPACT_CODE, false); + let (pool, state) = TestTransactionPoolExt::new(); + t.register_extension(TransactionPoolExt::new(pool)); + + let keystore = KeyStore::new(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter2", PHRASE))).unwrap(); + t.register_extension(KeystoreExt(keystore)); + + t.execute_with(|| { + let results = Signer::::all_accounts() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); + + let len = results.len(); + assert_eq!(len, 2); + assert_eq!(results.into_iter().filter_map(|x| x.1.ok()).count(), len); + assert_eq!(state.read().transactions.len(), 2); + + // submit another one from the same account. The nonce should be incremented. + let results = Signer::::all_accounts() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); + + let len = results.len(); + assert_eq!(len, 2); + assert_eq!(results.into_iter().filter_map(|x| x.1.ok()).count(), len); + assert_eq!(state.read().transactions.len(), 4); + + // now check that the transaction nonces are not equal + let s = state.read(); + fn nonce(tx: UncheckedExtrinsic) -> frame_system::CheckNonce { + let extra = tx.signature.unwrap().2; + extra.3 + } + let nonce1 = nonce(UncheckedExtrinsic::decode(&mut &*s.transactions[0]).unwrap()); + let nonce2 = nonce(UncheckedExtrinsic::decode(&mut &*s.transactions[1]).unwrap()); + let nonce3 = nonce(UncheckedExtrinsic::decode(&mut &*s.transactions[2]).unwrap()); + let nonce4 = nonce(UncheckedExtrinsic::decode(&mut &*s.transactions[3]).unwrap()); + assert!( + nonce1 != nonce3, + "Transactions should have different nonces. Got: 1st tx nonce: {:?}, 2nd nonce: {:?}", nonce1, nonce3 + ); + assert!( + nonce2 != nonce4, + "Transactions should have different nonces. Got: 1st tx nonce: {:?}, 2nd tx nonce: {:?}", nonce2, nonce4 + ); + }); +} + #[test] fn submitted_transaction_should_be_valid() { use codec::Encode; @@ -148,13 +198,14 @@ fn submitted_transaction_should_be_valid() { t.register_extension(TransactionPoolExt::new(pool)); let keystore = KeyStore::new(); - keystore.write().sr25519_generate_new(Key::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); + keystore.write().sr25519_generate_new(sr25519::AuthorityId::ID, Some(&format!("{}/hunter1", PHRASE))).unwrap(); t.register_extension(KeystoreExt(keystore)); t.execute_with(|| { - let call = pallet_balances::Call::transfer(Default::default(), Default::default()); - let results = - >::submit_signed(call); + let results = Signer::::all_accounts() + .send_signed_transaction(|_| { + pallet_balances::Call::transfer(Default::default(), Default::default()) + }); let len = results.len(); assert_eq!(len, 1); assert_eq!(results.into_iter().filter_map(|x| x.1.ok()).count(), len); diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 337242f884d..b1797fffb33 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -46,11 +46,10 @@ use sp_version::NativeVersion; use sp_core::OpaqueMetadata; use pallet_grandpa::AuthorityList as GrandpaAuthorityList; use pallet_grandpa::fg_primitives; -use pallet_im_online::sr25519::{AuthorityId as ImOnlineId}; +use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; use pallet_contracts_rpc_runtime_api::ContractExecResult; -use frame_system::offchain::TransactionSubmitter; use sp_inherents::{InherentData, CheckInherentsResult}; #[cfg(any(feature = "std", test))] @@ -60,6 +59,7 @@ pub use pallet_balances::Call as BalancesCall; pub use pallet_contracts::Gas; pub use frame_support::StorageValue; pub use pallet_staking::StakerStatus; +use codec::Encode; /// Implementations of some helper traits passed into runtime modules as associated types. pub mod impls; @@ -73,50 +73,6 @@ use constants::{time::*, currency::*}; #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -/// A transaction submitter with the given key type. -pub type TransactionSubmitterOf = TransactionSubmitter; - -/// Submits transaction with the node's public and signature type. Adheres to the signed extension -/// format of the chain. -impl frame_system::offchain::CreateTransaction for Runtime { - type Public = ::Signer; - type Signature = Signature; - - fn create_transaction>( - call: Call, - public: Self::Public, - account: AccountId, - index: Index, - ) -> Option<(Call, ::SignaturePayload)> { - // take the biggest period possible. - let period = BlockHashCount::get() - .checked_next_power_of_two() - .map(|c| c / 2) - .unwrap_or(2) as u64; - let current_block = System::block_number() - .saturated_into::() - // The `System::block_number` is initialized with `n+1`, - // so the actual block number is `n`. - .saturating_sub(1); - let tip = 0; - let extra: SignedExtra = ( - frame_system::CheckVersion::::new(), - frame_system::CheckGenesis::::new(), - frame_system::CheckEra::::from(generic::Era::mortal(period, current_block)), - frame_system::CheckNonce::::from(index), - frame_system::CheckWeight::::new(), - pallet_transaction_payment::ChargeTransactionPayment::::from(tip), - Default::default(), - ); - let raw_payload = SignedPayload::new(call, extra).map_err(|e| { - debug::warn!("Unable to create signed payload: {:?}", e); - }).ok()?; - let signature = TSigner::sign(public, &raw_payload)?; - let address = Indices::unlookup(account); - let (call, extra, _) = raw_payload.deconstruct(); - Some((call, (address, signature, extra))) - } -} /// Runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { @@ -127,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 243, + spec_version: 244, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -362,7 +318,6 @@ impl pallet_staking::Trait for Runtime { type NextNewSession = Session; type ElectionLookahead = ElectionLookahead; type Call = Call; - type SubmitTransaction = TransactionSubmitterOf<()>; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = StakingUnsignedPriority; } @@ -549,11 +504,63 @@ parameter_types! { pub const StakingUnsignedPriority: TransactionPriority = TransactionPriority::max_value() / 2; } + +impl frame_system::offchain::CreateSignedTransaction for Runtime where + Call: From, +{ + fn create_transaction>( + call: Call, + public: ::Signer, + account: AccountId, + nonce: Index, + ) -> Option<(Call, ::SignaturePayload)> { + // take the biggest period possible. + let period = BlockHashCount::get() + .checked_next_power_of_two() + .map(|c| c / 2) + .unwrap_or(2) as u64; + let current_block = System::block_number() + .saturated_into::() + // The `System::block_number` is initialized with `n+1`, + // so the actual block number is `n`. + .saturating_sub(1); + let tip = 0; + let extra: SignedExtra = ( + frame_system::CheckVersion::::new(), + frame_system::CheckGenesis::::new(), + frame_system::CheckEra::::from(generic::Era::mortal(period, current_block)), + frame_system::CheckNonce::::from(nonce), + frame_system::CheckWeight::::new(), + pallet_transaction_payment::ChargeTransactionPayment::::from(tip), + Default::default(), + ); + let raw_payload = SignedPayload::new(call, extra).map_err(|e| { + debug::warn!("Unable to create signed payload: {:?}", e); + }).ok()?; + let signature = raw_payload.using_encoded(|payload| { + C::sign(payload, public) + })?; + let address = Indices::unlookup(account); + let (call, extra, _) = raw_payload.deconstruct(); + Some((call, (address, signature.into(), extra))) + } +} + +impl frame_system::offchain::SigningTypes for Runtime { + type Public = ::Signer; + type Signature = Signature; +} + +impl frame_system::offchain::SendTransactionTypes for Runtime where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = UncheckedExtrinsic; +} + impl pallet_im_online::Trait for Runtime { type AuthorityId = ImOnlineId; type Event = Event; - type Call = Call; - type SubmitTransaction = TransactionSubmitterOf; type SessionDuration = SessionDuration; type ReportUnresponsiveness = Offences; type UnsignedPriority = ImOnlineUnsignedPriority; @@ -924,28 +931,14 @@ impl_runtime_apis! { #[cfg(test)] mod tests { use super::*; - use frame_system::offchain::{SignAndSubmitTransaction, SubmitSignedTransaction}; + use frame_system::offchain::CreateSignedTransaction; #[test] fn validate_transaction_submitter_bounds() { fn is_submit_signed_transaction() where - T: SubmitSignedTransaction< - Runtime, - Call, - >, - {} - - fn is_sign_and_submit_transaction() where - T: SignAndSubmitTransaction< - Runtime, - Call, - Extrinsic=UncheckedExtrinsic, - CreateTransaction=Runtime, - Signer=ImOnlineId, - >, + T: CreateSignedTransaction, {} - is_submit_signed_transaction::>(); - is_sign_and_submit_transaction::>(); + is_submit_signed_transaction::(); } } diff --git a/frame/example-offchain-worker/src/lib.rs b/frame/example-offchain-worker/src/lib.rs index 29a4859c78e..d2ebd1159e2 100644 --- a/frame/example-offchain-worker/src/lib.rs +++ b/frame/example-offchain-worker/src/lib.rs @@ -22,12 +22,12 @@ //! Run `cargo doc --package pallet-example-offchain-worker --open` to view this module's //! documentation. //! -//! - \[`pallet_example_offchain_worker::Trait`](./trait.Trait.html) -//! - \[`Call`](./enum.Call.html) -//! - \[`Module`](./struct.Module.html) +//! - [`pallet_example_offchain_worker::Trait`](./trait.Trait.html) +//! - [`Call`](./enum.Call.html) +//! - [`Module`](./struct.Module.html) //! //! -//! \## Overview +//! ## Overview //! //! In this example we are going to build a very simplistic, naive and definitely NOT //! production-ready oracle for BTC/USD price. @@ -40,15 +40,24 @@ //! one unsigned transaction floating in the network. #![cfg_attr(not(feature = "std"), no_std)] +use frame_system::{ + self as system, + ensure_signed, + ensure_none, + offchain::{ + AppCrypto, CreateSignedTransaction, SendUnsignedTransaction, + SignedPayload, SigningTypes, Signer, SubmitTransaction, + } +}; use frame_support::{ debug, dispatch::DispatchResult, decl_module, decl_storage, decl_event, traits::Get, weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, }; -use frame_system::{self as system, ensure_signed, ensure_none, offchain}; use sp_core::crypto::KeyTypeId; use sp_runtime::{ + RuntimeDebug, offchain::{http, Duration, storage::StorageValueRef}, traits::Zero, transaction_validity::{ @@ -56,6 +65,7 @@ use sp_runtime::{ TransactionPriority, }, }; +use codec::{Encode, Decode}; use sp_std::vec::Vec; use lite_json::json::JsonValue; @@ -76,18 +86,25 @@ pub const KEY_TYPE: KeyTypeId = KeyTypeId(*b"btc!"); /// the types with this pallet-specific identifier. pub mod crypto { use super::KEY_TYPE; - use sp_runtime::app_crypto::{app_crypto, sr25519}; + use sp_runtime::{ + app_crypto::{app_crypto, sr25519}, + traits::Verify, + }; + use sp_core::sr25519::Signature as Sr25519Signature; app_crypto!(sr25519, KEY_TYPE); + + pub struct TestAuthId; + impl frame_system::offchain::AppCrypto<::Signer, Sr25519Signature> for TestAuthId { + type RuntimeAppPublic = Public; + type GenericSignature = sp_core::sr25519::Signature; + type GenericPublic = sp_core::sr25519::Public; + } } /// This pallet's configuration trait -pub trait Trait: frame_system::Trait { - /// The type to sign and submit transactions. - type SubmitSignedTransaction: - offchain::SubmitSignedTransaction::Call>; - /// The type to submit unsigned transactions. - type SubmitUnsignedTransaction: - offchain::SubmitUnsignedTransaction::Call>; +pub trait Trait: CreateSignedTransaction> { + /// The identifier type for an offchain worker. + type AuthorityId: AppCrypto; /// The overarching event type. type Event: From> + Into<::Event>; @@ -115,6 +132,21 @@ pub trait Trait: frame_system::Trait { type UnsignedPriority: Get; } +/// Payload used by this example crate to hold price +/// data required to submit a transaction. +#[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug)] +pub struct PricePayload { + block_number: BlockNumber, + price: u32, + public: Public, +} + +impl SignedPayload for PricePayload { + fn public(&self) -> T::Public { + self.public.clone() + } +} + decl_storage! { trait Store for Module as ExampleOffchainWorker { /// A vector of recently submitted prices. @@ -196,6 +228,22 @@ decl_module! { Ok(()) } + #[weight = SimpleDispatchInfo::FixedNormal(10_000)] + pub fn submit_price_unsigned_with_signed_payload( + origin, + price_payload: PricePayload, + _signature: T::Signature, + ) -> DispatchResult { + // This ensures that the function can only be called via unsigned transaction. + ensure_none(origin)?; + // Add the price to the on-chain list, but mark it as coming from an empty address. + Self::add_price(Default::default(), price_payload.price); + // now increment the block number at which we expect next unsigned transaction. + let current_block = >::block_number(); + >::put(current_block + T::UnsignedInterval::get()); + Ok(()) + } + /// Offchain Worker entry point. /// /// By implementing `fn offchain_worker` within `decl_module!` you declare a new offchain @@ -236,7 +284,9 @@ decl_module! { let should_send = Self::choose_transaction_type(block_number); let res = match should_send { TransactionType::Signed => Self::fetch_price_and_send_signed(), - TransactionType::Unsigned => Self::fetch_price_and_send_unsigned(block_number), + TransactionType::UnsignedForAny => Self::fetch_price_and_send_unsigned_for_any_account(block_number), + TransactionType::UnsignedForAll => Self::fetch_price_and_send_unsigned_for_all_accounts(block_number), + TransactionType::Raw => Self::fetch_price_and_send_raw_unsigned(block_number), TransactionType::None => Ok(()), }; if let Err(e) = res { @@ -248,7 +298,9 @@ decl_module! { enum TransactionType { Signed, - Unsigned, + UnsignedForAny, + UnsignedForAll, + Raw, None, } @@ -311,12 +363,11 @@ impl Module { // transactions in a row. If a strict order is desired, it's better to use // the storage entry for that. (for instance store both block number and a flag // indicating the type of next transaction to send). - let send_signed = block_number % 2.into() == Zero::zero(); - if send_signed { - TransactionType::Signed - } else { - TransactionType::Unsigned - } + let transaction_type = block_number % 3.into(); + if transaction_type == Zero::zero() { TransactionType::Signed } + else if transaction_type == T::BlockNumber::from(1) { TransactionType::UnsignedForAny } + else if transaction_type == T::BlockNumber::from(2) { TransactionType::UnsignedForAll } + else { TransactionType::Raw } }, // We are in the grace period, we should not send a transaction this time. Err(RECENTLY_SENT) => TransactionType::None, @@ -331,44 +382,43 @@ impl Module { /// A helper function to fetch the price and send signed transaction. fn fetch_price_and_send_signed() -> Result<(), &'static str> { - use system::offchain::SubmitSignedTransaction; - // Firstly we check if there are any accounts in the local keystore that are capable of - // signing the transaction. - // If not it doesn't even make sense to make external HTTP requests, since we won't be able - // to put the results back on-chain. - if !T::SubmitSignedTransaction::can_sign() { + use frame_system::offchain::SendSignedTransaction; + + let signer = Signer::::all_accounts(); + if !signer.can_sign() { return Err( "No local accounts available. Consider adding one via `author_insertKey` RPC." )? } - // Make an external HTTP request to fetch the current price. // Note this call will block until response is received. let price = Self::fetch_price().map_err(|_| "Failed to fetch price")?; - // Received price is wrapped into a call to `submit_price` public function of this pallet. - // This means that the transaction, when executed, will simply call that function passing - // `price` as an argument. - let call = Call::submit_price(price); - - // Using `SubmitSignedTransaction` associated type we create and submit a transaction + // Using `send_signed_transaction` associated type we create and submit a transaction // representing the call, we've just created. // Submit signed will return a vector of results for all accounts that were found in the // local keystore with expected `KEY_TYPE`. - let results = T::SubmitSignedTransaction::submit_signed(call); + let results = signer.send_signed_transaction( + |_account| { + // Received price is wrapped into a call to `submit_price` public function of this pallet. + // This means that the transaction, when executed, will simply call that function passing + // `price` as an argument. + Call::submit_price(price) + } + ); + for (acc, res) in &results { match res { - Ok(()) => debug::info!("[{:?}] Submitted price of {} cents", acc, price), - Err(e) => debug::error!("[{:?}] Failed to submit transaction: {:?}", acc, e), + Ok(()) => debug::info!("[{:?}] Submitted price of {} cents", acc.id, price), + Err(e) => debug::error!("[{:?}] Failed to submit transaction: {:?}", acc.id, e), } } Ok(()) } - /// A helper function to fetch the price and send unsigned transaction. - fn fetch_price_and_send_unsigned(block_number: T::BlockNumber) -> Result<(), &'static str> { - use system::offchain::SubmitUnsignedTransaction; + /// A helper function to fetch the price and send a raw unsigned transaction. + fn fetch_price_and_send_raw_unsigned(block_number: T::BlockNumber) -> Result<(), &'static str> { // Make sure we don't fetch the price if unsigned transaction is going to be rejected // anyway. let next_unsigned_at = >::get(); @@ -385,14 +435,101 @@ impl Module { // passing `price` as an argument. let call = Call::submit_price_unsigned(block_number, price); - // Now let's create an unsigned transaction out of this call and submit it to the pool. + // Now let's create a transaction out of this call and submit it to the pool. + // Here we showcase two ways to send an unsigned transaction / unsigned payload (raw) + // // By default unsigned transactions are disallowed, so we need to whitelist this case // by writing `UnsignedValidator`. Note that it's EXTREMELY important to carefuly // implement unsigned validation logic, as any mistakes can lead to opening DoS or spam // attack vectors. See validation logic docs for more details. - T::SubmitUnsignedTransaction::submit_unsigned(call) - .map_err(|()| "Unable to submit unsigned transaction.".into()) + // + SubmitTransaction::>::submit_unsigned_transaction(call.into()) + .map_err(|()| "Unable to submit unsigned transaction.")?; + Ok(()) + } + + /// A helper function to fetch the price, sign payload and send an unsigned transaction + fn fetch_price_and_send_unsigned_for_any_account(block_number: T::BlockNumber) -> Result<(), &'static str> { + // Make sure we don't fetch the price if unsigned transaction is going to be rejected + // anyway. + let next_unsigned_at = >::get(); + if next_unsigned_at > block_number { + return Err("Too early to send unsigned transaction") + } + + // Make an external HTTP request to fetch the current price. + // Note this call will block until response is received. + let price = Self::fetch_price().map_err(|_| "Failed to fetch price")?; + + // Received price is wrapped into a call to `submit_price_unsigned` public function of this + // pallet. This means that the transaction, when executed, will simply call that function + // passing `price` as an argument. + let call = Call::submit_price_unsigned(block_number, price); + + // Now let's create a transaction out of this call and submit it to the pool. + // Here we showcase two ways to send an unsigned transaction with a signed payload + SubmitTransaction::>::submit_unsigned_transaction(call.into()) + .map_err(|()| "Unable to submit unsigned transaction.")?; + + // -- Sign using any account + let (_, result) = Signer::::any_account().send_unsigned_transaction( + |account| PricePayload { + price, + block_number, + public: account.public.clone() + }, + |payload, signature| { + Call::submit_price_unsigned_with_signed_payload(payload, signature) + } + ).ok_or("No local accounts accounts available.")?; + result.map_err(|()| "Unable to submit transaction")?; + + Ok(()) + } + + /// A helper function to fetch the price, sign payload and send an unsigned transaction + fn fetch_price_and_send_unsigned_for_all_accounts(block_number: T::BlockNumber) -> Result<(), &'static str> { + // Make sure we don't fetch the price if unsigned transaction is going to be rejected + // anyway. + let next_unsigned_at = >::get(); + if next_unsigned_at > block_number { + return Err("Too early to send unsigned transaction") + } + + // Make an external HTTP request to fetch the current price. + // Note this call will block until response is received. + let price = Self::fetch_price().map_err(|_| "Failed to fetch price")?; + + // Received price is wrapped into a call to `submit_price_unsigned` public function of this + // pallet. This means that the transaction, when executed, will simply call that function + // passing `price` as an argument. + let call = Call::submit_price_unsigned(block_number, price); + + // Now let's create a transaction out of this call and submit it to the pool. + // Here we showcase two ways to send an unsigned transaction with a signed payload + SubmitTransaction::>::submit_unsigned_transaction(call.into()) + .map_err(|()| "Unable to submit unsigned transaction.")?; + + // -- Sign using all accounts + let transaction_results = Signer::::all_accounts() + .send_unsigned_transaction( + |account| PricePayload { + price, + block_number, + public: account.public.clone() + }, + |payload, signature| { + Call::submit_price_unsigned_with_signed_payload(payload, signature) + } + ); + for (_account_id, result) in transaction_results.into_iter() { + if result.is_err() { + return Err("Unable to submit transaction"); + } + } + + Ok(()) } /// Fetch current price and return the result in cents. @@ -507,6 +644,58 @@ impl Module { Some(prices.iter().fold(0_u32, |a, b| a.saturating_add(*b)) / prices.len() as u32) } } + + fn validate_transaction_parameters( + block_number: &T::BlockNumber, + new_price: &u32, + ) -> TransactionValidity { + // Now let's check if the transaction has any chance to succeed. + let next_unsigned_at = >::get(); + if &next_unsigned_at > block_number { + return InvalidTransaction::Stale.into(); + } + // Let's make sure to reject transactions from the future. + let current_block = >::block_number(); + if ¤t_block < block_number { + return InvalidTransaction::Future.into(); + } + + // We prioritize transactions that are more far away from current average. + // + // Note this doesn't make much sense when building an actual oracle, but this example + // is here mostly to show off offchain workers capabilities, not about building an + // oracle. + let avg_price = Self::average_price() + .map(|price| if &price > new_price { price - new_price } else { new_price - price }) + .unwrap_or(0); + + ValidTransaction::with_tag_prefix("ExampleOffchainWorker") + // We set base priority to 2**20 and hope it's included before any other + // transactions in the pool. Next we tweak the priority depending on how much + // it differs from the current average. (the more it differs the more priority it + // has). + .priority(T::UnsignedPriority::get().saturating_add(avg_price as _)) + // This transaction does not require anything else to go before into the pool. + // In theory we could require `previous_unsigned_at` transaction to go first, + // but it's not necessary in our case. + //.and_requires() + // We set the `provides` tag to be the same as `next_unsigned_at`. This makes + // sure only one transaction produced after `next_unsigned_at` will ever + // get to the transaction pool and will end up in the block. + // We can still have multiple transactions compete for the same "spot", + // and the one with higher priority will replace other one in the pool. + .and_provides(next_unsigned_at) + // The transaction is only valid for next 5 blocks. After that it's + // going to be revalidated by the pool. + .longevity(5) + // It's fine to propagate that transaction to other peers, which means it can be + // created even by nodes that don't produce blocks. + // Note that sometimes it's better to keep it for yourself (if you are the block + // producer), since for instance in some schemes others may copy your solution and + // claim a reward. + .propagate(true) + .build() + } } #[allow(deprecated)] // ValidateUnsigned @@ -523,54 +712,16 @@ impl frame_support::unsigned::ValidateUnsigned for Module { call: &Self::Call, ) -> TransactionValidity { // Firstly let's check that we call the right function. - if let Call::submit_price_unsigned(block_number, new_price) = call { - // Now let's check if the transaction has any chance to succeed. - let next_unsigned_at = >::get(); - if &next_unsigned_at > block_number { - return InvalidTransaction::Stale.into(); - } - // Let's make sure to reject transactions from the future. - let current_block = >::block_number(); - if ¤t_block < block_number { - return InvalidTransaction::Future.into(); + if let Call::submit_price_unsigned_with_signed_payload( + ref payload, ref signature + ) = call { + let signature_valid = SignedPayload::::verify::(payload, signature.clone()); + if !signature_valid { + return InvalidTransaction::BadProof.into(); } - - // We prioritize transactions that are more far away from current average. - // - // Note this doesn't make much sense when building an actual oracle, but this example - // is here mostly to show off offchain workers capabilities, not about building an - // oracle. - let avg_price = Self::average_price() - .map(|price| if &price > new_price { price - new_price } else { new_price - price }) - .unwrap_or(0); - - ValidTransaction::with_tag_prefix("ExampleOffchainWorker") - // We set base priority to 2**20 to make sure it's included before any other - // transactions in the pool. Next we tweak the priority depending on how much - // it differs from the current average. (the more it differs the more priority it - // has). - .priority(T::UnsignedPriority::get().saturating_add(avg_price as _)) - // This transaction does not require anything else to go before into the pool. - // In theory we could require `previous_unsigned_at` transaction to go first, - // but it's not necessary in our case. - //.and_requires() - - // We set the `provides` tag to be the same as `next_unsigned_at`. This makes - // sure only one transaction produced after `next_unsigned_at` will ever - // get to the transaction pool and will end up in the block. - // We can still have multiple transactions compete for the same "spot", - // and the one with higher priority will replace other one in the pool. - .and_provides(next_unsigned_at) - // The transaction is only valid for next 5 blocks. After that it's - // going to be revalidated by the pool. - .longevity(5) - // It's fine to propagate that transaction to other peers, which means it can be - // created even by nodes that don't produce blocks. - // Note that sometimes it's better to keep it for yourself (if you are the block - // producer), since for instance in some schemes others may copy your solution and - // claim a reward. - .propagate(true) - .build() + Self::validate_transaction_parameters(&payload.block_number, &payload.price) + } else if let Call::submit_price_unsigned(block_number, new_price) = call { + Self::validate_transaction_parameters(block_number, new_price) } else { InvalidTransaction::Call.into() } diff --git a/frame/example-offchain-worker/src/tests.rs b/frame/example-offchain-worker/src/tests.rs index 279de7ef4a3..aebcbde451b 100644 --- a/frame/example-offchain-worker/src/tests.rs +++ b/frame/example-offchain-worker/src/tests.rs @@ -16,7 +16,7 @@ use crate::*; -use codec::Decode; +use codec::{Encode, Decode}; use frame_support::{ assert_ok, impl_outer_origin, parameter_types, weights::Weight, @@ -24,13 +24,17 @@ use frame_support::{ use sp_core::{ H256, offchain::{OffchainExt, TransactionPoolExt, testing}, + sr25519::Signature, testing::KeyStore, traits::KeystoreExt, }; use sp_runtime::{ Perbill, RuntimeAppPublic, testing::{Header, TestXt}, - traits::{BlakeTwo256, IdentityLookup, Extrinsic as ExtrinsicsT}, + traits::{ + BlakeTwo256, IdentityLookup, Extrinsic as ExtrinsicT, + IdentifyAccount, Verify, + }, }; impl_outer_origin! { @@ -40,7 +44,7 @@ impl_outer_origin! { // For testing the module, we construct most of a mock runtime. This means // first constructing a configuration type (`Test`) which `impl`s each of the // configuration traits of modules we want to use. -#[derive(Clone, Eq, PartialEq)] +#[derive(Clone, Eq, PartialEq, Encode, Decode)] pub struct Test; parameter_types! { pub const BlockHashCount: u64 = 250; @@ -72,22 +76,29 @@ impl frame_system::Trait for Test { } type Extrinsic = TestXt, ()>; -type SubmitTransaction = frame_system::offchain::TransactionSubmitter< - crypto::Public, - Test, - Extrinsic ->; - -impl frame_system::offchain::CreateTransaction for Test { - type Public = sp_core::sr25519::Public; - type Signature = sp_core::sr25519::Signature; - - fn create_transaction>( - call: ::Call, - _public: Self::Public, - _account: ::AccountId, - nonce: ::Index, - ) -> Option<(::Call, ::SignaturePayload)> { +type AccountId = <::Signer as IdentifyAccount>::AccountId; + +impl frame_system::offchain::SigningTypes for Test { + type Public = ::Signer; + type Signature = Signature; +} + +impl frame_system::offchain::SendTransactionTypes for Test where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = Extrinsic; +} + +impl frame_system::offchain::CreateSignedTransaction for Test where + Call: From, +{ + fn create_transaction>( + call: Call, + _public: ::Signer, + _account: AccountId, + nonce: u64, + ) -> Option<(Call, ::SignaturePayload)> { Some((call, (nonce, ()))) } } @@ -100,9 +111,8 @@ parameter_types! { impl Trait for Test { type Event = (); + type AuthorityId = crypto::TestAuthId; type Call = Call; - type SubmitSignedTransaction = SubmitTransaction; - type SubmitUnsignedTransaction = SubmitTransaction; type GracePeriod = GracePeriod; type UnsignedInterval = UnsignedInterval; type UnsignedPriority = UnsignedPriority; @@ -172,18 +182,128 @@ fn should_submit_signed_transaction_on_chain() { } #[test] -fn should_submit_unsigned_transaction_on_chain() { +fn should_submit_unsigned_transaction_on_chain_for_any_account() { + const PHRASE: &str = "news slush supreme milk chapter athlete soap sausage put clutch what kitten"; let (offchain, offchain_state) = testing::TestOffchainExt::new(); let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let keystore = KeyStore::new(); + + keystore.write().sr25519_generate_new( + crate::crypto::Public::ID, + Some(&format!("{}/hunter1", PHRASE)) + ).unwrap(); + let mut t = sp_io::TestExternalities::default(); t.register_extension(OffchainExt::new(offchain)); t.register_extension(TransactionPoolExt::new(pool)); + t.register_extension(KeystoreExt(keystore.clone())); + + price_oracle_response(&mut offchain_state.write()); + + let public_key = keystore.read() + .sr25519_public_keys(crate::crypto::Public::ID) + .get(0) + .unwrap() + .clone(); + + let price_payload = PricePayload { + block_number: 1, + price: 15523, + public: ::Public::from(public_key), + }; + + // let signature = price_payload.sign::().unwrap(); + t.execute_with(|| { + // when + Example::fetch_price_and_send_unsigned_for_any_account(1).unwrap(); + // then + let tx = pool_state.write().transactions.pop().unwrap(); + let tx = Extrinsic::decode(&mut &*tx).unwrap(); + assert_eq!(tx.signature, None); + if let Call::submit_price_unsigned_with_signed_payload(body, signature) = tx.call { + assert_eq!(body, price_payload); + + let signature_valid = ::Public, + ::BlockNumber + > as SignedPayload>::verify::(&price_payload, signature); + + assert!(signature_valid); + } + }); +} + +#[test] +fn should_submit_unsigned_transaction_on_chain_for_all_accounts() { + const PHRASE: &str = "news slush supreme milk chapter athlete soap sausage put clutch what kitten"; + let (offchain, offchain_state) = testing::TestOffchainExt::new(); + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let keystore = KeyStore::new(); + + keystore.write().sr25519_generate_new( + crate::crypto::Public::ID, + Some(&format!("{}/hunter1", PHRASE)) + ).unwrap(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(OffchainExt::new(offchain)); + t.register_extension(TransactionPoolExt::new(pool)); + t.register_extension(KeystoreExt(keystore.clone())); + + price_oracle_response(&mut offchain_state.write()); + + let public_key = keystore.read() + .sr25519_public_keys(crate::crypto::Public::ID) + .get(0) + .unwrap() + .clone(); + + let price_payload = PricePayload { + block_number: 1, + price: 15523, + public: ::Public::from(public_key), + }; + + // let signature = price_payload.sign::().unwrap(); + t.execute_with(|| { + // when + Example::fetch_price_and_send_unsigned_for_all_accounts(1).unwrap(); + // then + let tx = pool_state.write().transactions.pop().unwrap(); + let tx = Extrinsic::decode(&mut &*tx).unwrap(); + assert_eq!(tx.signature, None); + if let Call::submit_price_unsigned_with_signed_payload(body, signature) = tx.call { + assert_eq!(body, price_payload); + + let signature_valid = ::Public, + ::BlockNumber + > as SignedPayload>::verify::(&price_payload, signature); + + assert!(signature_valid); + } + }); +} + +#[test] +fn should_submit_raw_unsigned_transaction_on_chain() { + let (offchain, offchain_state) = testing::TestOffchainExt::new(); + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let keystore = KeyStore::new(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(OffchainExt::new(offchain)); + t.register_extension(TransactionPoolExt::new(pool)); + t.register_extension(KeystoreExt(keystore)); price_oracle_response(&mut offchain_state.write()); t.execute_with(|| { // when - Example::fetch_price_and_send_unsigned(1).unwrap(); + Example::fetch_price_and_send_raw_unsigned(1).unwrap(); // then let tx = pool_state.write().transactions.pop().unwrap(); assert!(pool_state.read().transactions.is_empty()); diff --git a/frame/im-online/src/lib.rs b/frame/im-online/src/lib.rs index 1137fc2699f..813b11bbc93 100644 --- a/frame/im-online/src/lib.rs +++ b/frame/im-online/src/lib.rs @@ -98,7 +98,10 @@ use frame_support::{ weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, }; use frame_system::{self as system, ensure_none}; -use frame_system::offchain::SubmitUnsignedTransaction; +use frame_system::offchain::{ + SendTransactionTypes, + SubmitTransaction, +}; pub mod sr25519 { mod app_sr25519 { @@ -221,19 +224,13 @@ pub struct Heartbeat pub authority_index: AuthIndex, } -pub trait Trait: frame_system::Trait + pallet_session::historical::Trait { +pub trait Trait: SendTransactionTypes> + pallet_session::historical::Trait { /// The identifier type for an authority. type AuthorityId: Member + Parameter + RuntimeAppPublic + Default + Ord; /// The overarching event type. type Event: From> + Into<::Event>; - /// A dispatchable call type. - type Call: From>; - - /// A transaction submitter. - type SubmitTransaction: SubmitUnsignedTransaction::Call>; - /// An expected duration of the session. /// /// This parameter is used to determine the longevity of `heartbeat` transaction @@ -444,6 +441,7 @@ impl Module { } let session_index = >::current_index(); + Ok(Self::local_authority_keys() .map(move |(authority_index, key)| Self::send_single_heartbeat(authority_index, key, session_index, block_number) @@ -467,7 +465,9 @@ impl Module { session_index, authority_index, }; + let signature = key.sign(&heartbeat_data.encode()).ok_or(OffchainErr::FailedSigning)?; + Ok(Call::heartbeat(heartbeat_data, signature)) }; @@ -492,7 +492,7 @@ impl Module { call, ); - T::SubmitTransaction::submit_unsigned(call) + SubmitTransaction::>::submit_unsigned_transaction(call.into()) .map_err(|_| OffchainErr::SubmitTransaction)?; Ok(()) @@ -501,9 +501,18 @@ impl Module { } fn local_authority_keys() -> impl Iterator { - // we run only when a local authority key is configured + // on-chain storage + // + // At index `idx`: + // 1. A (ImOnline) public key to be used by a validator at index `idx` to send im-online + // heartbeats. let authorities = Keys::::get(); + + // local keystore + // + // All `ImOnline` public (+private) keys currently in the local keystore. let mut local_keys = T::AuthorityId::all(); + local_keys.sort(); authorities.into_iter() @@ -565,6 +574,11 @@ impl Module { Keys::::put(keys); } } + + #[cfg(test)] + fn set_keys(keys: Vec) { + Keys::::put(&keys) + } } impl sp_runtime::BoundToRuntimeAppPublic for Module { diff --git a/frame/im-online/src/mock.rs b/frame/im-online/src/mock.rs index d620bb51b74..e9b5ef95ef4 100644 --- a/frame/im-online/src/mock.rs +++ b/frame/im-online/src/mock.rs @@ -27,7 +27,6 @@ use sp_runtime::testing::{Header, UintAuthorityId, TestXt}; use sp_runtime::traits::{IdentityLookup, BlakeTwo256, ConvertInto}; use sp_core::H256; use frame_support::{impl_outer_origin, impl_outer_dispatch, parameter_types, weights::Weight}; - use frame_system as system; impl_outer_origin!{ pub enum Origin for Runtime {} @@ -40,7 +39,11 @@ impl_outer_dispatch! { } thread_local! { - pub static VALIDATORS: RefCell>> = RefCell::new(Some(vec![1, 2, 3])); + pub static VALIDATORS: RefCell>> = RefCell::new(Some(vec![ + 1, + 2, + 3, + ])); } pub struct TestSessionManager; @@ -68,7 +71,6 @@ impl pallet_session::historical::SessionManager for TestSessionManager /// An extrinsic type used for tests. pub type Extrinsic = TestXt; -type SubmitTransaction = frame_system::offchain::TransactionSubmitter<(), Call, Extrinsic>; type IdentificationTuple = (u64, u64); type Offence = crate::UnresponsivenessOffence; @@ -90,7 +92,6 @@ pub fn new_test_ext() -> sp_io::TestExternalities { t.into() } - #[derive(Clone, PartialEq, Eq, Debug)] pub struct Runtime; @@ -168,13 +169,18 @@ parameter_types! { impl Trait for Runtime { type AuthorityId = UintAuthorityId; type Event = (); - type Call = Call; - type SubmitTransaction = SubmitTransaction; type ReportUnresponsiveness = OffenceHandler; type SessionDuration = Period; type UnsignedPriority = UnsignedPriority; } +impl frame_system::offchain::SendTransactionTypes for Runtime where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = Extrinsic; +} + /// Im Online module. pub type ImOnline = Module; pub type System = frame_system::Module; @@ -184,5 +190,7 @@ pub fn advance_session() { let now = System::block_number().max(1); System::set_block_number(now + 1); Session::rotate_session(); + let keys = Session::validators().into_iter().map(UintAuthorityId).collect(); + ImOnline::set_keys(keys); assert_eq!(Session::current_index(), (now / Period::get()) as u32); } diff --git a/frame/im-online/src/tests.rs b/frame/im-online/src/tests.rs index c7bf2afcca6..e49f28f4896 100644 --- a/frame/im-online/src/tests.rs +++ b/frame/im-online/src/tests.rs @@ -61,15 +61,15 @@ fn should_report_offline_validators() { let block = 1; System::set_block_number(block); // buffer new validators - Session::rotate_session(); + advance_session(); // enact the change and buffer another one let validators = vec![1, 2, 3, 4, 5, 6]; VALIDATORS.with(|l| *l.borrow_mut() = Some(validators.clone())); - Session::rotate_session(); + advance_session(); // when // we end current session and start the next one - Session::rotate_session(); + advance_session(); // then let offences = OFFENCES.with(|l| l.replace(vec![])); @@ -89,7 +89,7 @@ fn should_report_offline_validators() { for (idx, v) in validators.into_iter().take(4).enumerate() { let _ = heartbeat(block, 3, idx as u32, v.into()).unwrap(); } - Session::rotate_session(); + advance_session(); // then let offences = OFFENCES.with(|l| l.replace(vec![])); @@ -174,7 +174,7 @@ fn late_heartbeat_should_fail() { new_test_ext().execute_with(|| { advance_session(); // given - VALIDATORS.with(|l| *l.borrow_mut() = Some(vec![1, 2, 4, 4, 5, 6])); + VALIDATORS.with(|l| *l.borrow_mut() = Some(vec![1, 2, 3, 4, 5, 6])); assert_eq!(Session::validators(), Vec::::new()); // enact the change and buffer another one advance_session(); @@ -315,7 +315,7 @@ fn should_not_send_a_report_if_already_online() { ImOnline::note_uncle(3, 0); // when - UintAuthorityId::set_all_keys(vec![0]); // all authorities use pallet_session key 0 + UintAuthorityId::set_all_keys(vec![1, 2, 3]); // we expect error, since the authority is already online. let mut res = ImOnline::send_heartbeats(4).unwrap(); assert_eq!(res.next().unwrap().unwrap(), ()); diff --git a/frame/session/benchmarking/src/mock.rs b/frame/session/benchmarking/src/mock.rs index 4c022eb8b89..c3863e16bbb 100644 --- a/frame/session/benchmarking/src/mock.rs +++ b/frame/session/benchmarking/src/mock.rs @@ -151,11 +151,13 @@ parameter_types! { } pub type Extrinsic = sp_runtime::testing::TestXt; -type SubmitTransaction = frame_system::offchain::TransactionSubmitter< - sp_runtime::testing::UintAuthorityId, - Test, - Extrinsic, ->; + +impl frame_system::offchain::SendTransactionTypes for Test where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = Extrinsic; +} impl pallet_staking::Trait for Test { type Currency = Balances; @@ -174,7 +176,6 @@ impl pallet_staking::Trait for Test { type NextNewSession = Session; type ElectionLookahead = (); type Call = Call; - type SubmitTransaction = SubmitTransaction; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = UnsignedPriority; } diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 40fce5b0d44..25d9a10709d 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -320,7 +320,7 @@ use sp_staking::{ use sp_runtime::{Serialize, Deserialize}; use frame_system::{ self as system, ensure_signed, ensure_root, ensure_none, - offchain::SubmitUnsignedTransaction, + offchain::SendTransactionTypes, }; use sp_phragmen::{ ExtendedBalance, Assignment, PhragmenScore, PhragmenResult, build_support_map, evaluate_support, @@ -743,7 +743,7 @@ impl SessionInterface<::AccountId> for T whe } } -pub trait Trait: frame_system::Trait { +pub trait Trait: frame_system::Trait + SendTransactionTypes> { /// The staking balance. type Currency: LockableCurrency; @@ -804,10 +804,7 @@ pub trait Trait: frame_system::Trait { /// The overarching call type. type Call: Dispatchable + From> + IsSubType, Self> + Clone; - /// A transaction submitter. - type SubmitTransaction: SubmitUnsignedTransaction::Call>; - - /// The maximum number of nominators rewarded for each validator. + /// The maximum number of nominator rewarded for each validator. /// /// For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can claim /// their reward. This used to limit the i/o cost for the nominator payout. diff --git a/frame/staking/src/mock.rs b/frame/staking/src/mock.rs index 20ec6f46a6b..cd943abfa39 100644 --- a/frame/staking/src/mock.rs +++ b/frame/staking/src/mock.rs @@ -29,7 +29,6 @@ use frame_support::{ traits::{Currency, Get, FindAuthor, OnFinalize, OnInitialize}, weights::Weight, }; -use frame_system::offchain::TransactionSubmitter; use sp_io; use sp_phragmen::{ build_support_map, evaluate_support, reduce, ExtendedBalance, StakedAssignment, PhragmenScore, @@ -309,13 +308,18 @@ impl Trait for Test { type NextNewSession = Session; type ElectionLookahead = ElectionLookahead; type Call = Call; - type SubmitTransaction = SubmitTransaction; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = UnsignedPriority; } +impl frame_system::offchain::SendTransactionTypes for Test where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = Extrinsic; +} + pub type Extrinsic = TestXt; -type SubmitTransaction = TransactionSubmitter<(), Test, Extrinsic>; pub struct ExtBuilder { session_length: BlockNumber, diff --git a/frame/staking/src/offchain_election.rs b/frame/staking/src/offchain_election.rs index 4d8ccc6f25c..c2383d1eebb 100644 --- a/frame/staking/src/offchain_election.rs +++ b/frame/staking/src/offchain_election.rs @@ -19,7 +19,7 @@ use crate::{ Call, CompactAssignments, Module, NominatorIndex, OffchainAccuracy, Trait, ValidatorIndex, }; -use frame_system::offchain::SubmitUnsignedTransaction; +use frame_system::offchain::SubmitTransaction; use sp_phragmen::{ build_support_map, evaluate_support, reduce, Assignment, ExtendedBalance, PhragmenResult, PhragmenScore, @@ -117,14 +117,14 @@ pub(crate) fn compute_offchain_election() -> Result<(), OffchainElecti let current_era = >::current_era().unwrap_or_default(); // send it. - let call: ::Call = Call::submit_election_solution_unsigned( + let call = Call::submit_election_solution_unsigned( winners, compact, score, current_era, ).into(); - T::SubmitTransaction::submit_unsigned(call) + SubmitTransaction::>::submit_unsigned_transaction(call) .map_err(|_| OffchainElectionError::PoolSubmissionFailed) } diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index d1bc3c1a51e..49c404c0220 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -1591,7 +1591,7 @@ impl Lookup for ChainContext { } #[cfg(test)] -mod tests { +pub(crate) mod tests { use super::*; use sp_std::cell::RefCell; use sp_core::H256; @@ -1602,7 +1602,7 @@ mod tests { pub enum Origin for Test where system = super {} } - #[derive(Clone, Eq, PartialEq)] + #[derive(Clone, Eq, PartialEq, Debug)] pub struct Test; parameter_types! { @@ -1630,8 +1630,9 @@ mod tests { fn on_killed_account(who: &u64) { KILLED.with(|r| r.borrow_mut().push(*who)) } } - #[derive(Debug)] - pub struct Call {} + #[derive(Debug, codec::Encode, codec::Decode)] + pub struct Call; + impl Dispatchable for Call { type Origin = (); type Trait = (); @@ -1679,7 +1680,7 @@ mod tests { type System = Module; - const CALL: &::Call = &Call {}; + const CALL: &::Call = &Call; fn new_test_ext() -> sp_io::TestExternalities { GenesisConfig::default().build_storage::().unwrap().into() diff --git a/frame/system/src/offchain.rs b/frame/system/src/offchain.rs index a3fe3e00ca4..04cd3001e43 100644 --- a/frame/system/src/offchain.rs +++ b/frame/system/src/offchain.rs @@ -15,353 +15,832 @@ // along with Substrate. If not, see . //! Module helpers for off-chain calls. +//! +//! ## Overview +//! +//! This module provides transaction related helpers to: +//! - Submit a raw unsigned transaction +//! - Submit an unsigned transaction with a signed payload +//! - Submit a signed transction. +//! +//! ## Usage +//! +//! Please refer to [`example-offchain-worker`](../../pallet_example_offchain_worker/index.html) for +//! a concrete example usage of this crate. +//! +//! ### Submit a raw unsigned transaction +//! +//! To submit a raw unsigned transaction, [`SubmitTransaction`](./struct.SubmitTransaction.html) +//! can be used. +//! +//! ### Signing transactions +//! +//! To be able to use signing, the following trait should be implemented: +//! +//! - [`AppCrypto`](./trait.AppCrypto.html): where an application-specific key +//! is defined and can be used by this module's helpers for signing. +//! - [`CreateSignedTransaction`](./trait.CreateSignedTransaction.html): where +//! the manner in which the transaction is constructed is defined. +//! +//! #### Submit an unsigned transaction with a signed payload +//! +//! Initially, a payload instance that implements the `SignedPayload` trait should be defined. +//! See [`PricePayload`](../../pallet_example_offchain_worker/struct.PricePayload.html) +//! +//! The payload type that is defined defined can then be signed and submitted onchain. +//! +//! #### Submit a signed transaction +//! +//! [`Signer`](./struct.Signer.html) can be used to sign/verify payloads +//! + +#![warn(missing_docs)] use codec::Encode; -use sp_std::convert::TryInto; -use sp_std::prelude::Vec; -use sp_runtime::app_crypto::{RuntimeAppPublic, AppPublic, AppSignature}; +use sp_std::collections::btree_set::BTreeSet; +use sp_std::convert::{TryInto, TryFrom}; +use sp_std::prelude::{Box, Vec}; +use sp_runtime::app_crypto::RuntimeAppPublic; use sp_runtime::traits::{Extrinsic as ExtrinsicT, IdentifyAccount, One}; -use frame_support::{debug, storage::StorageMap}; +use frame_support::{debug, storage::StorageMap, RuntimeDebug}; -/// Creates runtime-specific signed transaction. +/// Marker struct used to flag using all supported keys to sign a payload. +pub struct ForAll {} +/// Marker struct used to flag using any of the supported keys to sign a payload. +pub struct ForAny {} + +/// Provides the ability to directly submit signed and unsigned +/// transaction onchain. /// -/// This trait should be implemented by your `Runtime` to be able -/// to submit `SignedTransaction`s` to the pool from off-chain code. -pub trait CreateTransaction { - /// A `Public` key representing a particular `AccountId`. - type Public: IdentifyAccount + Clone; - /// A `Signature` generated by the `Signer`. - type Signature; +/// For submitting unsigned transactions, `submit_unsigned_transaction` +/// utility function can be used. However, this struct is used by `Signer` +/// to submit a signed transactions providing the signature along with the call. +pub struct SubmitTransaction, OverarchingCall> { + _phantom: sp_std::marker::PhantomData<(T, OverarchingCall)> +} - /// Attempt to create signed extrinsic data that encodes call from given account. - /// - /// Runtime implementation is free to construct the payload to sign and the signature - /// in any way it wants. - /// Returns `None` if signed extrinsic could not be created (either because signing failed - /// or because of any other runtime-specific reason). - fn create_transaction>( - call: Extrinsic::Call, - public: Self::Public, - account: T::AccountId, - nonce: T::Index, - ) -> Option<(Extrinsic::Call, Extrinsic::SignaturePayload)>; +impl SubmitTransaction +where + T: SendTransactionTypes, +{ + /// Submit transaction onchain by providing the call and an optional signature + pub fn submit_transaction( + call: >::OverarchingCall, + signature: Option<::SignaturePayload>, + ) -> Result<(), ()> { + let xt = T::Extrinsic::new(call.into(), signature).ok_or(())?; + sp_io::offchain::submit_transaction(xt.encode()) + } + + /// A convenience method to submit an unsigned transaction onchain. + pub fn submit_unsigned_transaction( + call: >::OverarchingCall, + ) -> Result<(), ()> { + SubmitTransaction::::submit_transaction(call, None) + } } -/// A trait responsible for signing a payload using given account. +/// Provides an implementation for signing transaction payloads. /// -/// This trait is usually going to represent a local public key -/// that has ability to sign arbitrary `Payloads`. +/// Keys used for signing are defined when instantiating the signer object. +/// Signing can be done using: /// -/// NOTE: Most likely you don't need to implement this trait manually. -/// It has a blanket implementation for all `RuntimeAppPublic` types, -/// so it's enough to pass an application-specific crypto type. +/// - All supported keys in the keystore +/// - Any of the supported keys in the keystore +/// - An intersection of in-keystore keys and the list of provided keys /// -/// To easily create `SignedTransaction`s have a look at the -/// [`TransactionSubmitter`] type. -pub trait Signer { - /// Sign any encodable payload with given account and produce a signature. +/// The signer is then able to: +/// - Submit a unsigned transaction with a signed payload +/// - Submit a signed transaction +#[derive(RuntimeDebug)] +pub struct Signer, X = ForAny> { + accounts: Option>, + _phantom: sp_std::marker::PhantomData<(X, C)>, +} + +impl, X> Default for Signer { + fn default() -> Self { + Self { + accounts: Default::default(), + _phantom: Default::default(), + } + } +} + +impl, X> Signer { + /// Use all available keys for signing. + pub fn all_accounts() -> Signer { + Default::default() + } + + /// Use any of the available keys for signing. + pub fn any_account() -> Signer { + Default::default() + } + + /// Use provided `accounts` for signing. /// - /// Returns `Some` if signing succeeded and `None` in case the `account` couldn't - /// be used (for instance we couldn't convert it to required application specific crypto). - fn sign(public: Public, payload: &Payload) -> Option; + /// Note that not all keys will be necessarily used. The provided + /// vector of accounts will be intersected with the supported keys + /// in the keystore and the resulting list will be used for signing. + pub fn with_filter(mut self, accounts: Vec) -> Self { + self.accounts = Some(accounts); + self + } + + /// Check if there are any keys that could be used for signing. + pub fn can_sign(&self) -> bool { + self.accounts_from_keys().count() > 0 + } + + /// Return a vector of the intersection between + /// all available accounts and the provided accounts + /// in `with_filter`. If no accounts are provided, + /// use all accounts by default. + fn accounts_from_keys<'a>(&'a self) -> Box> + 'a> { + let keystore_accounts = self.keystore_accounts(); + match self.accounts { + None => Box::new(keystore_accounts), + Some(ref keys) => { + let keystore_lookup: BTreeSet<::Public> = keystore_accounts + .map(|account| account.public).collect(); + + Box::new(keys.into_iter() + .enumerate() + .map(|(index, key)| { + let account_id = key.clone().into_account(); + Account::new(index, account_id, key.clone()) + }) + .filter(move |account| keystore_lookup.contains(&account.public))) + } + } + } + + fn keystore_accounts(&self) -> impl Iterator> { + C::RuntimeAppPublic::all() + .into_iter() + .enumerate() + .map(|(index, key)| { + let generic_public = C::GenericPublic::from(key); + let public = generic_public.into(); + let account_id = public.clone().into_account(); + Account::new(index, account_id, public.clone()) + }) + } } -/// A `Signer` implementation for any `AppPublic` type. -/// -/// This implementation additionally supports conversion to/from multi-signature/multi-signer -/// wrappers. -/// If the wrapped crypto doesn't match `AppPublic`s crypto `None` is returned. -impl Signer for TAnyAppPublic where - TAnyAppPublic: RuntimeAppPublic - + AppPublic - + From<::Generic>, - ::Signature: AppSignature, - Signature: From< - <::Signature as AppSignature>::Generic - >, - Public: TryInto<::Generic> -{ - fn sign(public: Public, raw_payload: &Payload) -> Option { - raw_payload.using_encoded(|payload| { - let public = public.try_into().ok()?; - TAnyAppPublic::from(public).sign(&payload) - .map( - <::Signature as AppSignature> - ::Generic::from - ) - .map(Signature::from) + +impl> Signer { + fn for_all(&self, f: F) -> Vec<(Account, R)> where + F: Fn(&Account) -> Option, + { + let accounts = self.accounts_from_keys(); + accounts + .into_iter() + .filter_map(|account| { + f(&account).map(|res| (account, res)) + }) + .collect() + } +} + +impl> Signer { + fn for_any(&self, f: F) -> Option<(Account, R)> where + F: Fn(&Account) -> Option, + { + let accounts = self.accounts_from_keys(); + for account in accounts.into_iter() { + let res = f(&account); + if let Some(res) = res { + return Some((account, res)); + } + } + None + } +} + +impl> SignMessage for Signer { + type SignatureData = Vec<(Account, T::Signature)>; + + fn sign_message(&self, message: &[u8]) -> Self::SignatureData { + self.for_all(|account| C::sign(message, account.public.clone())) + } + + fn sign(&self, f: F) -> Self::SignatureData where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload, + { + self.for_all(|account| f(account).sign::()) + } +} + +impl> SignMessage for Signer { + type SignatureData = Option<(Account, T::Signature)>; + + fn sign_message(&self, message: &[u8]) -> Self::SignatureData { + self.for_any(|account| C::sign(message, account.public.clone())) + } + + fn sign(&self, f: F) -> Self::SignatureData where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload, + { + self.for_any(|account| f(account).sign::()) + } +} + +impl< + T: CreateSignedTransaction + SigningTypes, + C: AppCrypto, + LocalCall, +> SendSignedTransaction for Signer { + type Result = Option<(Account, Result<(), ()>)>; + + fn send_signed_transaction( + &self, + f: impl Fn(&Account) -> LocalCall, + ) -> Self::Result { + self.for_any(|account| { + let call = f(account); + self.send_single_signed_transaction(account, call) }) } } -/// Retrieves a public key type for given `SignAndSubmitTransaction`. -pub type PublicOf = -< - >::CreateTransaction - as - CreateTransaction>::Extrinsic> ->::Public; +impl< + T: SigningTypes + CreateSignedTransaction, + C: AppCrypto, + LocalCall, +> SendSignedTransaction for Signer { + type Result = Vec<(Account, Result<(), ()>)>; + + fn send_signed_transaction( + &self, + f: impl Fn(&Account) -> LocalCall, + ) -> Self::Result { + self.for_all(|account| { + let call = f(account); + self.send_single_signed_transaction(account, call) + }) + } +} + +impl< + T: SigningTypes + SendTransactionTypes, + C: AppCrypto, + LocalCall, +> SendUnsignedTransaction for Signer { + type Result = Option<(Account, Result<(), ()>)>; + + fn send_unsigned_transaction( + &self, + f: F, + f2: impl Fn(TPayload, T::Signature) -> LocalCall, + ) -> Self::Result + where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload, + { + self.for_any(|account| { + let payload = f(account); + let signature= payload.sign::()?; + let call = f2(payload, signature); + self.submit_unsigned_transaction(call) + }) + } +} + +impl< + T: SigningTypes + SendTransactionTypes, + C: AppCrypto, + LocalCall, +> SendUnsignedTransaction for Signer { + type Result = Vec<(Account, Result<(), ()>)>; + + fn send_unsigned_transaction( + &self, + f: F, + f2: impl Fn(TPayload, T::Signature) -> LocalCall, + ) -> Self::Result + where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload { + self.for_all(|account| { + let payload = f(account); + let signature = payload.sign::()?; + let call = f2(payload, signature); + self.submit_unsigned_transaction(call) + }) + } +} + +/// Details of an account for which a private key is contained in the keystore. +#[derive(RuntimeDebug, PartialEq)] +pub struct Account { + /// Index on the provided list of accounts or list of all accounts. + pub index: usize, + /// Runtime-specific `AccountId`. + pub id: T::AccountId, + /// A runtime-specific `Public` key for that key pair. + pub public: T::Public, +} + +impl Account { + /// Create a new Account instance + pub fn new(index: usize, id: T::AccountId, public: T::Public) -> Self { + Self { index, id, public } + } +} + +impl Clone for Account where + T::AccountId: Clone, + T::Public: Clone, +{ + fn clone(&self) -> Self { + Self { + index: self.index, + id: self.id.clone(), + public: self.public.clone(), + } + } +} -/// A trait to sign and submit transactions in off-chain calls. +/// A type binding runtime-level `Public/Signature` pair with crypto wrapped by `RuntimeAppPublic`. /// -/// NOTE: Most likely you should not implement this trait yourself. -/// There is an implementation for -/// [`TransactionSubmitter`] type, which -/// you should use. -pub trait SignAndSubmitTransaction { - /// Unchecked extrinsic type. - type Extrinsic: ExtrinsicT + Encode; - - /// A runtime-specific type to produce signed data for the extrinsic. - type CreateTransaction: CreateTransaction; - - /// A type used to sign transactions created using `CreateTransaction`. - type Signer: Signer< - PublicOf, - >::Signature, - >; - - /// Sign given call and submit it to the transaction pool. - /// - /// Returns `Ok` if the transaction was submitted correctly - /// and `Err` if the key for given `id` was not found or the - /// transaction was rejected from the pool. - fn sign_and_submit(call: impl Into, public: PublicOf) -> Result<(), ()> { - let call = call.into(); - let id = public.clone().into_account(); - let mut account = super::Account::::get(&id); - debug::native::debug!( - target: "offchain", - "Creating signed transaction from account: {:?} (nonce: {:?})", - id, - account.nonce, - ); - let (call, signature_data) = Self::CreateTransaction - ::create_transaction::(call, public, id.clone(), account.nonce) - .ok_or(())?; - // increment the nonce. This is fine, since the code should always - // be running in off-chain context, so we NEVER persists data. - account.nonce += One::one(); - super::Account::::insert(&id, account); - - let xt = Self::Extrinsic::new(call, Some(signature_data)).ok_or(())?; - sp_io::offchain::submit_transaction(xt.encode()) +/// Implementations of this trait should specify the app-specific public/signature types. +/// This is merely a wrapper around an existing `RuntimeAppPublic` type, but with +/// extra non-application-specific crypto type that is being wrapped (e.g. `sr25519`, `ed25519`). +/// This is needed to later on convert into runtime-specific `Public` key, which might support +/// multiple different crypto. +/// The point of this trait is to be able to easily convert between `RuntimeAppPublic`, the wrapped +/// (generic = non application-specific) crypto types and the `Public` type required by the runtime. +/// +/// TODO [#5662] Potentially use `IsWrappedBy` types, or find some other way to make it easy to +/// obtain unwrapped crypto (and wrap it back). +/// +/// Example (pseudo-)implementation: +/// ```ignore +/// // im-online specific crypto +/// type RuntimeAppPublic = ImOnline(sr25519::Public); +/// // wrapped "raw" crypto +/// type GenericPublic = sr25519::Public; +/// type GenericSignature = sr25519::Signature; +/// +/// // runtime-specific public key +/// type Public = MultiSigner: From; +/// type Signature = MulitSignature: From; +/// ``` +pub trait AppCrypto { + /// A application-specific crypto. + type RuntimeAppPublic: RuntimeAppPublic; + + /// A raw crypto public key wrapped by `RuntimeAppPublic`. + type GenericPublic: + From + + Into + + TryFrom + + Into; + + /// A matching raw crypto `Signature` type. + type GenericSignature: + From<::Signature> + + Into<::Signature> + + TryFrom + + Into; + + /// Sign payload with the private key to maps to the provided public key. + fn sign(payload: &[u8], public: Public) -> Option { + let p: Self::GenericPublic = public.try_into().ok()?; + let x = Into::::into(p); + x.sign(&payload) + .map(|x| { + let sig: Self::GenericSignature = x.into(); + sig + }) + .map(Into::into) + } + + /// Verify signature against the provided public key. + fn verify(payload: &[u8], public: Public, signature: Signature) -> bool { + let p: Self::GenericPublic = match public.try_into() { + Ok(a) => a, + _ => return false + }; + let x = Into::::into(p); + let signature: Self::GenericSignature = match signature.try_into() { + Ok(a) => a, + _ => return false + }; + let signature = Into::<< + Self::RuntimeAppPublic as RuntimeAppPublic + >::Signature>::into(signature); + + x.verify(&payload, &signature) } } -/// A trait to submit unsigned transactions in off-chain calls. +/// A wrapper around the types which are used for signing. +/// +/// This trait adds extra bounds to `Public` and `Signature` types of the runtime +/// that are necessary to use these types for signing. /// -/// NOTE: Most likely you should not implement this trait yourself. -/// There is an implementation for -/// [`TransactionSubmitter`] type, which -/// you should use. -pub trait SubmitUnsignedTransaction { - /// Unchecked extrinsic type. - type Extrinsic: ExtrinsicT + Encode; - - /// Submit given call to the transaction pool as unsigned transaction. +/// TODO [#5663] Could this be just `T::Signature as traits::Verify>::Signer`? +/// Seems that this may cause issues with bounds resolution. +pub trait SigningTypes: crate::Trait { + /// A public key that is capable of identifing `AccountId`s. /// - /// Returns `Ok` if the transaction was submitted correctly - /// and `Err` if transaction was rejected from the pool. - fn submit_unsigned(call: impl Into) -> Result<(), ()> { - let xt = Self::Extrinsic::new(call.into(), None).ok_or(())?; - let encoded_xt = xt.encode(); - sp_io::offchain::submit_transaction(encoded_xt) - } + /// Usually that's either a raw crypto public key (e.g. `sr25519::Public`) or + /// an aggregate type for multiple crypto public keys, like `MulitSigner`. + type Public: Clone + + PartialEq + + IdentifyAccount + + core::fmt::Debug + + codec::Codec + + Ord; + + /// A matching `Signature` type. + type Signature: Clone + + PartialEq + + core::fmt::Debug + + codec::Codec; } -/// A utility trait to easily create signed transactions -/// from accounts in node's local keystore. +/// A definition of types required to submit transactions from within the runtime. +pub trait SendTransactionTypes { + /// The extrinsic type expected by the runtime. + type Extrinsic: ExtrinsicT + codec::Encode; + /// The runtime's call type. + /// + /// This has additional bound to be able to be created from pallet-local `Call` types. + type OverarchingCall: From; +} + +/// Create signed transaction. /// -/// NOTE: Most likely you should not implement this trait yourself. -/// There is an implementation for -/// [`TransactionSubmitter`] type, which -/// you should use. -pub trait SubmitSignedTransaction { - /// A `SignAndSubmitTransaction` implementation. - type SignAndSubmit: SignAndSubmitTransaction; - - /// Find local keys that match given list of accounts. +/// This trait is meant to be implemented by the runtime and is responsible for constructing +/// a payload to be signed and contained within the extrinsic. +/// This will most likely include creation of `SignedExtra` (a set of `SignedExtensions`). +/// Note that the result can be altered by inspecting the `Call` (for instance adjusting +/// fees, or mortality depending on the `pallet` being called). +pub trait CreateSignedTransaction: SendTransactionTypes + SigningTypes { + /// Attempt to create signed extrinsic data that encodes call from given account. /// - /// Technically it finds an intersection between given list of `AccountId`s - /// and accounts that are represented by public keys in local keystore. - /// If `None` is passed it returns all accounts in the keystore. + /// Runtime implementation is free to construct the payload to sign and the signature + /// in any way it wants. + /// Returns `None` if signed extrinsic could not be created (either because signing failed + /// or because of any other runtime-specific reason). + fn create_transaction>( + call: Self::OverarchingCall, + public: Self::Public, + account: Self::AccountId, + nonce: Self::Index, + ) -> Option<(Self::OverarchingCall, ::SignaturePayload)>; +} + +/// A message signer. +pub trait SignMessage { + /// A signature data. /// - /// Returns both public keys and `AccountId`s of accounts that are available. - /// Such accounts can later be used to sign a payload or send signed transactions. - fn find_local_keys(accounts: Option>) -> Vec<( - T::AccountId, - PublicOf, - )>; - - /// Find all available local keys. + /// May contain account used for signing and the `Signature` itself. + type SignatureData; + + /// Sign a message. /// - /// This is equivalent of calling `find_local_keys(None)`. - fn find_all_local_keys() -> Vec<(T::AccountId, PublicOf)> { - Self::find_local_keys(None as Option>) - } + /// Implementation of this method should return + /// a result containing the signature. + fn sign_message(&self, message: &[u8]) -> Self::SignatureData; - /// Check if there are keys for any of given accounts that could be used to send a transaction. + /// Construct and sign given payload. /// - /// This check can be used as an early-exit condition to avoid doing too - /// much work, before we actually realise that there are no accounts that you - /// we could use for signing. - fn can_sign_with(accounts: Option>) -> bool { - !Self::find_local_keys(accounts).is_empty() - } + /// This method expects `f` to return a `SignedPayload` + /// object which is then used for signing. + fn sign(&self, f: F) -> Self::SignatureData where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload, + ; +} - /// Check if there are any keys that could be used for signing. +/// Submit a signed transaction to the transaction pool. +pub trait SendSignedTransaction< + T: SigningTypes + CreateSignedTransaction, + C: AppCrypto, + LocalCall +> { + /// A submission result. /// - /// This is equivalent of calling `can_sign_with(None)`. - fn can_sign() -> bool { - Self::can_sign_with(None as Option>) + /// This should contain an indication of success and the account that was used for signing. + type Result; + + /// Submit a signed transaction to the local pool. + /// + /// Given `f` closure will be called for every requested account and expects a `Call` object + /// to be returned. + /// The call is then wrapped into a transaction (see `#CreateSignedTransaction`), signed and + /// submitted to the pool. + fn send_signed_transaction( + &self, + f: impl Fn(&Account) -> LocalCall, + ) -> Self::Result; + + /// Wraps the call into transaction, signs using given account and submits to the pool. + fn send_single_signed_transaction( + &self, + account: &Account, + call: LocalCall, + ) -> Option> { + let mut account_data = crate::Account::::get(&account.id); + debug::native::debug!( + target: "offchain", + "Creating signed transaction from account: {:?} (nonce: {:?})", + account.id, + account_data.nonce, + ); + let (call, signature) = T::create_transaction::( + call.into(), + account.public.clone(), + account.id.clone(), + account_data.nonce + )?; + let res = SubmitTransaction:: + ::submit_transaction(call, Some(signature)); + + if res.is_ok() { + // increment the nonce. This is fine, since the code should always + // be running in off-chain context, so we NEVER persists data. + account_data.nonce += One::one(); + crate::Account::::insert(&account.id, account_data); + } + + Some(res) } +} - /// Create and submit signed transactions from supported accounts. +/// Submit an unsigned transaction onchain with a signed payload +pub trait SendUnsignedTransaction< + T: SigningTypes + SendTransactionTypes, + LocalCall, +> { + /// A submission result. /// - /// This method should intersect given list of accounts with the ones - /// supported locally and submit signed transaction containing given `Call` - /// with every of them. + /// Should contain the submission result and the account(s) that signed the payload. + type Result; + + /// Send an unsigned transaction with a signed payload. /// - /// Returns a vector of results and account ids that were supported. - #[must_use] - fn submit_signed_from( - call: impl Into + Clone, - accounts: impl IntoIterator, - ) -> Vec<(T::AccountId, Result<(), ()>)> { - let keys = Self::find_local_keys(Some(accounts)); - keys.into_iter().map(|(account, pub_key)| { - let call = call.clone().into(); - ( - account, - Self::SignAndSubmit::sign_and_submit(call, pub_key) - ) - }).collect() - } - - /// Create and submit signed transactions from all local accounts. + /// This method takes `f` and `f2` where: + /// - `f` is called for every account and is expected to return a `SignedPayload` object. + /// - `f2` is then called with the `SignedPayload` returned by `f` and the signature and is + /// expected to return a `Call` object to be embedded into transaction. + fn send_unsigned_transaction( + &self, + f: F, + f2: impl Fn(TPayload, T::Signature) -> LocalCall, + ) -> Self::Result + where + F: Fn(&Account) -> TPayload, + TPayload: SignedPayload; + + /// Submits an unsigned call to the transaction pool. + fn submit_unsigned_transaction( + &self, + call: LocalCall + ) -> Option> { + Some(SubmitTransaction:: + ::submit_unsigned_transaction(call.into())) + } +} + +/// Utility trait to be implemented on payloads that can be signed. +pub trait SignedPayload: Encode { + /// Return a public key that is expected to have a matching key in the keystore, + /// which should be used to sign the payload. + fn public(&self) -> T::Public; + + /// Sign the payload using the implementor's provided public key. /// - /// This method submits a signed transaction from all local accounts - /// for given application crypto. + /// Returns `Some(signature)` if public key is supported. + fn sign>(&self) -> Option { + self.using_encoded(|payload| C::sign(payload, self.public())) + } + + /// Verify signature against payload. /// - /// Returns a vector of results and account ids that were supported. - #[must_use] - fn submit_signed( - call: impl Into + Clone, - ) -> Vec<(T::AccountId, Result<(), ()>)> { - let keys = Self::find_all_local_keys(); - keys.into_iter().map(|(account, pub_key)| { - let call = call.clone().into(); - ( - account, - Self::SignAndSubmit::sign_and_submit(call, pub_key) - ) - }).collect() + /// Returns a bool indicating whether the signature is valid or not. + fn verify>(&self, signature: T::Signature) -> bool { + self.using_encoded(|payload| C::verify(payload, self.public(), signature)) } } -/// A default type used to submit transactions to the pool. -/// -/// This is passed into each runtime as an opaque associated type that can have either of: -/// - [`SignAndSubmitTransaction`] -/// - [`SubmitUnsignedTransaction`] -/// - [`SubmitSignedTransaction`] -/// and used accordingly. -/// -/// This struct should be constructed by providing the following generic parameters: -/// * `Signer` - Usually the application specific key type (see `app_crypto`). -/// * `CreateTransaction` - A type that is able to produce signed transactions, -/// usually it's going to be the entire `Runtime` object. -/// * `Extrinsic` - A runtime-specific type for in-block extrinsics. -/// -/// If you only need the ability to submit unsigned transactions, -/// you may substitute both `Signer` and `CreateTransaction` with any type. -pub struct TransactionSubmitter { - _signer: sp_std::marker::PhantomData<(Signer, CreateTransaction, Extrinsic)>, -} -impl Default for TransactionSubmitter { - fn default() -> Self { - Self { - _signer: Default::default(), - } +#[cfg(test)] +mod tests { + use super::*; + use codec::Decode; + use crate::tests::{Test as TestRuntime, Call}; + use sp_core::offchain::{testing, TransactionPoolExt}; + use sp_runtime::testing::{UintAuthorityId, TestSignature, TestXt}; + + impl SigningTypes for TestRuntime { + type Public = UintAuthorityId; + type Signature = TestSignature; } -} -/// A blanket implementation to simplify creation of transaction signer & submitter in the runtime. -impl SignAndSubmitTransaction for TransactionSubmitter where - T: crate::Trait, - C: CreateTransaction, - S: Signer<>::Public, >::Signature>, - E: ExtrinsicT + Encode, -{ - type Extrinsic = E; - type CreateTransaction = C; - type Signer = S; -} + type Extrinsic = TestXt; -/// A blanket implementation to use the same submitter for unsigned transactions as well. -impl SubmitUnsignedTransaction for TransactionSubmitter where - T: crate::Trait, - E: ExtrinsicT + Encode, -{ - type Extrinsic = E; -} + impl SendTransactionTypes for TestRuntime { + type Extrinsic = Extrinsic; + type OverarchingCall = Call; + } -/// A blanket implementation to support local keystore of application-crypto types. -impl SubmitSignedTransaction for TransactionSubmitter where - T: crate::Trait, - C: CreateTransaction, - E: ExtrinsicT + Encode, - S: Signer<>::Public, >::Signature>, - // Make sure we can unwrap the app crypto key. - S: RuntimeAppPublic + AppPublic + Into<::Generic>, - // Make sure we can convert from wrapped crypto to public key (e.g. `MultiSigner`) - S::Generic: Into>, - // For simplicity we require the same trait to implement `SignAndSubmitTransaction` too. - Self: SignAndSubmitTransaction, -{ - type SignAndSubmit = Self; - - fn find_local_keys(accounts: Option>) -> Vec<( - T::AccountId, - PublicOf, - )> { - // Convert app-specific keys into generic ones. - let local_accounts_and_keys = S::all() - .into_iter() - .map(|app_key| { - // unwrap app-crypto - let generic_pub_key: ::Generic = app_key.into(); - // convert to expected public key type (might be MultiSigner) - let signer_pub_key: PublicOf = generic_pub_key.into(); - // lookup accountid for that pubkey - let account = signer_pub_key.clone().into_account(); - (account, signer_pub_key) - }).collect::>(); - - if let Some(accounts) = accounts { - let mut local_accounts_and_keys = local_accounts_and_keys; - // sort by accountId to allow bin-search. - local_accounts_and_keys.sort_by(|a, b| a.0.cmp(&b.0)); - - // get all the matching accounts - accounts.into_iter().filter_map(|acc| { - let idx = local_accounts_and_keys.binary_search_by(|a| a.0.cmp(&acc)).ok()?; - local_accounts_and_keys.get(idx).cloned() - }).collect() - } else { - // just return all account ids and keys - local_accounts_and_keys - } + #[derive(codec::Encode, codec::Decode)] + struct SimplePayload { + pub public: UintAuthorityId, + pub data: Vec, } - fn can_sign_with(accounts: Option>) -> bool { - // early exit if we care about any account. - if accounts.is_none() { - !S::all().is_empty() - } else { - !Self::find_local_keys(accounts).is_empty() + impl SignedPayload for SimplePayload { + fn public(&self) -> UintAuthorityId { + self.public.clone() } } + + struct DummyAppCrypto; + // Bind together the `SigningTypes` with app-crypto and the wrapper types. + // here the implementation is pretty dummy, because we use the same type for + // both application-specific crypto and the runtime crypto, but in real-life + // runtimes it's going to use different types everywhere. + impl AppCrypto for DummyAppCrypto { + type RuntimeAppPublic = UintAuthorityId; + type GenericPublic = UintAuthorityId; + type GenericSignature = TestSignature; + } + + fn assert_account( + next: Option<(Account, Result<(), ()>)>, + index: usize, + id: u64, + ) { + assert_eq!(next, Some((Account { + index, + id, + public: id.into(), + }, Ok(())))); + } + + #[test] + fn should_send_unsigned_with_signed_payload_with_all_accounts() { + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(TransactionPoolExt::new(pool)); + + // given + UintAuthorityId::set_all_keys(vec![0xf0, 0xf1, 0xf2]); + + t.execute_with(|| { + // when + let result = Signer:: + ::all_accounts() + .send_unsigned_transaction( + |account| SimplePayload { + data: vec![1, 2, 3], + public: account.public.clone() + }, + |_payload, _signature| { + Call + } + ); + + // then + let mut res = result.into_iter(); + assert_account(res.next(), 0, 0xf0); + assert_account(res.next(), 1, 0xf1); + assert_account(res.next(), 2, 0xf2); + assert_eq!(res.next(), None); + + // check the transaction pool content: + let tx1 = pool_state.write().transactions.pop().unwrap(); + let _tx2 = pool_state.write().transactions.pop().unwrap(); + let _tx3 = pool_state.write().transactions.pop().unwrap(); + assert!(pool_state.read().transactions.is_empty()); + let tx1 = Extrinsic::decode(&mut &*tx1).unwrap(); + assert_eq!(tx1.signature, None); + }); + } + + #[test] + fn should_send_unsigned_with_signed_payload_with_any_account() { + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(TransactionPoolExt::new(pool)); + + // given + UintAuthorityId::set_all_keys(vec![0xf0, 0xf1, 0xf2]); + + t.execute_with(|| { + // when + let result = Signer:: + ::any_account() + .send_unsigned_transaction( + |account| SimplePayload { + data: vec![1, 2, 3], + public: account.public.clone() + }, + |_payload, _signature| { + Call + } + ); + + // then + let mut res = result.into_iter(); + assert_account(res.next(), 0, 0xf0); + assert_eq!(res.next(), None); + + // check the transaction pool content: + let tx1 = pool_state.write().transactions.pop().unwrap(); + assert!(pool_state.read().transactions.is_empty()); + let tx1 = Extrinsic::decode(&mut &*tx1).unwrap(); + assert_eq!(tx1.signature, None); + }); + } + + #[test] + fn should_send_unsigned_with_signed_payload_with_all_account_and_filter() { + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(TransactionPoolExt::new(pool)); + + // given + UintAuthorityId::set_all_keys(vec![0xf0, 0xf1, 0xf2]); + + t.execute_with(|| { + // when + let result = Signer:: + ::all_accounts() + .with_filter(vec![0xf2.into(), 0xf1.into()]) + .send_unsigned_transaction( + |account| SimplePayload { + data: vec![1, 2, 3], + public: account.public.clone() + }, + |_payload, _signature| { + Call + } + ); + + // then + let mut res = result.into_iter(); + assert_account(res.next(), 0, 0xf2); + assert_account(res.next(), 1, 0xf1); + assert_eq!(res.next(), None); + + // check the transaction pool content: + let tx1 = pool_state.write().transactions.pop().unwrap(); + let _tx2 = pool_state.write().transactions.pop().unwrap(); + assert!(pool_state.read().transactions.is_empty()); + let tx1 = Extrinsic::decode(&mut &*tx1).unwrap(); + assert_eq!(tx1.signature, None); + }); + } + + #[test] + fn should_send_unsigned_with_signed_payload_with_any_account_and_filter() { + let (pool, pool_state) = testing::TestTransactionPoolExt::new(); + + let mut t = sp_io::TestExternalities::default(); + t.register_extension(TransactionPoolExt::new(pool)); + + // given + UintAuthorityId::set_all_keys(vec![0xf0, 0xf1, 0xf2]); + + t.execute_with(|| { + // when + let result = Signer:: + ::any_account() + .with_filter(vec![0xf2.into(), 0xf1.into()]) + .send_unsigned_transaction( + |account| SimplePayload { + data: vec![1, 2, 3], + public: account.public.clone() + }, + |_payload, _signature| { + Call + } + ); + + // then + let mut res = result.into_iter(); + assert_account(res.next(), 0, 0xf2); + assert_eq!(res.next(), None); + + // check the transaction pool content: + let tx1 = pool_state.write().transactions.pop().unwrap(); + assert!(pool_state.read().transactions.is_empty()); + let tx1 = Extrinsic::decode(&mut &*tx1).unwrap(); + assert_eq!(tx1.signature, None); + }); + } + } diff --git a/primitives/application-crypto/src/lib.rs b/primitives/application-crypto/src/lib.rs index 79572eb49d1..8bad474ede8 100644 --- a/primitives/application-crypto/src/lib.rs +++ b/primitives/application-crypto/src/lib.rs @@ -25,7 +25,7 @@ pub use sp_core::{self, crypto::{CryptoType, CryptoTypePublicPair, Public, Deriv #[doc(hidden)] #[cfg(feature = "full_crypto")] pub use sp_core::crypto::{SecretStringError, DeriveJunction, Ss58Codec, Pair}; -pub use sp_core::crypto::{CryptoTypeId, KeyTypeId, key_types}; +pub use sp_core::crypto::{KeyTypeId, key_types}; #[doc(hidden)] pub use codec; diff --git a/primitives/runtime/src/generic/unchecked_extrinsic.rs b/primitives/runtime/src/generic/unchecked_extrinsic.rs index 4aae575b2c1..4eb96ff960b 100644 --- a/primitives/runtime/src/generic/unchecked_extrinsic.rs +++ b/primitives/runtime/src/generic/unchecked_extrinsic.rs @@ -320,29 +320,10 @@ mod tests { use super::*; use sp_io::hashing::blake2_256; use crate::codec::{Encode, Decode}; - use crate::traits::{SignedExtension, IdentifyAccount, IdentityLookup}; - use serde::{Serialize, Deserialize}; + use crate::traits::{SignedExtension, IdentityLookup}; + use crate::testing::TestSignature as TestSig; type TestContext = IdentityLookup; - - #[derive(Eq, PartialEq, Clone, Copy, Debug, Serialize, Deserialize, Encode, Decode)] - pub struct TestSigner(pub u64); - impl From for TestSigner { fn from(x: u64) -> Self { Self(x) } } - impl From for u64 { fn from(x: TestSigner) -> Self { x.0 } } - impl IdentifyAccount for TestSigner { - type AccountId = u64; - fn into_account(self) -> u64 { self.into() } - } - - #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize, Encode, Decode)] - struct TestSig(u64, Vec); - impl traits::Verify for TestSig { - type Signer = TestSigner; - fn verify>(&self, mut msg: L, signer: &u64) -> bool { - signer == &self.0 && msg.get() == &self.1[..] - } - } - type TestAccountId = u64; type TestCall = Vec; diff --git a/primitives/runtime/src/lib.rs b/primitives/runtime/src/lib.rs index 0f609b00500..a5b3e71edcd 100644 --- a/primitives/runtime/src/lib.rs +++ b/primitives/runtime/src/lib.rs @@ -182,18 +182,39 @@ impl From for MultiSignature { } } +impl TryFrom for ed25519::Signature { + type Error = (); + fn try_from(m: MultiSignature) -> Result { + if let MultiSignature::Ed25519(x) = m { Ok(x) } else { Err(()) } + } +} + impl From for MultiSignature { fn from(x: sr25519::Signature) -> Self { MultiSignature::Sr25519(x) } } +impl TryFrom for sr25519::Signature { + type Error = (); + fn try_from(m: MultiSignature) -> Result { + if let MultiSignature::Sr25519(x) = m { Ok(x) } else { Err(()) } + } +} + impl From for MultiSignature { fn from(x: ecdsa::Signature) -> Self { MultiSignature::Ecdsa(x) } } +impl TryFrom for ecdsa::Signature { + type Error = (); + fn try_from(m: MultiSignature) -> Result { + if let MultiSignature::Ecdsa(x) = m { Ok(x) } else { Err(()) } + } +} + impl Default for MultiSignature { fn default() -> Self { MultiSignature::Ed25519(Default::default()) diff --git a/primitives/runtime/src/testing.rs b/primitives/runtime/src/testing.rs index 1414a5f4f0a..40b4e23e3fa 100644 --- a/primitives/runtime/src/testing.rs +++ b/primitives/runtime/src/testing.rs @@ -17,7 +17,7 @@ //! Testing utilities. use serde::{Serialize, Serializer, Deserialize, de::Error as DeError, Deserializer}; -use std::{fmt::Debug, ops::Deref, fmt, cell::RefCell}; +use std::{fmt::{self, Debug}, ops::Deref, cell::RefCell}; use crate::codec::{Codec, Encode, Decode}; use crate::traits::{ self, Checkable, Applyable, BlakeTwo256, OpaqueKeys, @@ -29,7 +29,12 @@ pub use sp_core::{H256, sr25519}; use sp_core::{crypto::{CryptoType, Dummy, key_types, Public}, U256}; use crate::transaction_validity::{TransactionValidity, TransactionValidityError, TransactionSource}; -/// Authority Id +/// A dummy type which can be used instead of regular cryptographic primitives. +/// +/// 1. Wraps a `u64` `AccountId` and is able to `IdentifyAccount`. +/// 2. Can be converted to any `Public` key. +/// 3. Implements `RuntimeAppPublic` so it can be used instead of regular application-specific +/// crypto. #[derive(Default, PartialEq, Eq, Clone, Encode, Decode, Debug, Hash, Serialize, Deserialize, PartialOrd, Ord)] pub struct UintAuthorityId(pub u64); @@ -82,7 +87,7 @@ impl UintAuthorityId { impl sp_application_crypto::RuntimeAppPublic for UintAuthorityId { const ID: KeyTypeId = key_types::DUMMY; - type Signature = u64; + type Signature = TestSignature; fn all() -> Vec { ALL_KEYS.with(|l| l.borrow().clone()) @@ -94,25 +99,11 @@ impl sp_application_crypto::RuntimeAppPublic for UintAuthorityId { } fn sign>(&self, msg: &M) -> Option { - let mut signature = [0u8; 8]; - msg.as_ref().iter() - .chain(std::iter::repeat(&42u8)) - .take(8) - .enumerate() - .for_each(|(i, v)| { signature[i] = *v; }); - - Some(u64::from_le_bytes(signature)) + Some(TestSignature(self.0, msg.as_ref().to_vec())) } fn verify>(&self, msg: &M, signature: &Self::Signature) -> bool { - let mut msg_signature = [0u8; 8]; - msg.as_ref().iter() - .chain(std::iter::repeat(&42)) - .take(8) - .enumerate() - .for_each(|(i, v)| { msg_signature[i] = *v; }); - - u64::from_le_bytes(msg_signature) == *signature + traits::Verify::verify(signature, msg.as_ref(), &self.0) } fn to_raw_vec(&self) -> Vec { @@ -140,6 +131,26 @@ impl crate::BoundToRuntimeAppPublic for UintAuthorityId { type Public = Self; } +impl traits::IdentifyAccount for UintAuthorityId { + type AccountId = u64; + + fn into_account(self) -> Self::AccountId { + self.0 + } +} + +/// A dummy signature type, to match `UintAuthorityId`. +#[derive(Eq, PartialEq, Clone, Debug, Hash, Serialize, Deserialize, Encode, Decode)] +pub struct TestSignature(pub u64, pub Vec); + +impl traits::Verify for TestSignature { + type Signer = UintAuthorityId; + + fn verify>(&self, mut msg: L, signer: &u64) -> bool { + signer == &self.0 && msg.get() == &self.1[..] + } +} + /// Digest item pub type DigestItem = generic::DigestItem; @@ -332,6 +343,7 @@ impl Checkable for TestXt Result { Ok(self) } } + impl traits::Extrinsic for TestXt { type Call = Call; type SignaturePayload = (u64, Extra); -- GitLab From fa7bd73e6af12220f70a6ad7882582ac31b30ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 21 Apr 2020 16:58:57 +0200 Subject: [PATCH 017/167] Require `fn` token in `decl_storage` `get` (#5717) * Require `fn` token in `decl_storage` `get` The `fn` token was already for quite some time as an optional parameter. It was introduced to make these functions better findable. This pr makes the `fn` token required. * Remove `GetterNoFnkeyword` --- frame/democracy/src/lib.rs | 2 +- frame/offences/src/lib.rs | 2 +- frame/society/src/lib.rs | 10 +++++----- frame/support/procedural/src/storage/parse.rs | 2 +- frame/support/src/lib.rs | 11 ----------- 5 files changed, 8 insertions(+), 19 deletions(-) diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index a76567ba274..34287f9bae7 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -346,7 +346,7 @@ decl_storage! { /// Accounts for which there are locks in action which may be removed at some point in the /// future. The value is the block number at which the lock expires and may be removed. - pub Locks get(locks): map hasher(twox_64_concat) T::AccountId => Option; + pub Locks get(fn locks): map hasher(twox_64_concat) T::AccountId => Option; /// True if the last referendum tabled was submitted externally. False if it was a public /// proposal. diff --git a/frame/offences/src/lib.rs b/frame/offences/src/lib.rs index 2b59c5e796f..7fa4cd4132a 100644 --- a/frame/offences/src/lib.rs +++ b/frame/offences/src/lib.rs @@ -69,7 +69,7 @@ decl_storage! { /// Deferred reports that have been rejected by the offence handler and need to be submitted /// at a later time. - DeferredOffences get(deferred_offences): Vec>; + DeferredOffences get(fn deferred_offences): Vec>; /// A vector of reports of the same kind that happened at the same time slot. ConcurrentReportsIndex: diff --git a/frame/society/src/lib.rs b/frame/society/src/lib.rs index f9908f5d9c6..0c02c584ba6 100644 --- a/frame/society/src/lib.rs +++ b/frame/society/src/lib.rs @@ -402,18 +402,18 @@ impl BidKind { decl_storage! { trait Store for Module, I: Instance=DefaultInstance> as Society { /// The first member. - pub Founder get(founder) build(|config: &GenesisConfig| config.members.first().cloned()): + pub Founder get(fn founder) build(|config: &GenesisConfig| config.members.first().cloned()): Option; /// A hash of the rules of this society concerning membership. Can only be set once and /// only by the founder. - pub Rules get(rules): Option; + pub Rules get(fn rules): Option; /// The current set of candidates; bidders that are attempting to become members. - pub Candidates get(candidates): Vec>>; + pub Candidates get(fn candidates): Vec>>; /// The set of suspended candidates. - pub SuspendedCandidates get(suspended_candidate): + pub SuspendedCandidates get(fn suspended_candidate): map hasher(twox_64_concat) T::AccountId => Option<(BalanceOf, BidKind>)>; @@ -421,7 +421,7 @@ decl_storage! { pub Pot get(fn pot) config(): BalanceOf; /// The most primary from the most recently approved members. - pub Head get(head) build(|config: &GenesisConfig| config.members.first().cloned()): + pub Head get(fn head) build(|config: &GenesisConfig| config.members.first().cloned()): Option; /// The current set of members, ordered. diff --git a/frame/support/procedural/src/storage/parse.rs b/frame/support/procedural/src/storage/parse.rs index af568c78cc6..beb9beff707 100644 --- a/frame/support/procedural/src/storage/parse.rs +++ b/frame/support/procedural/src/storage/parse.rs @@ -166,7 +166,7 @@ struct DeclStorageLine { #[derive(Parse, ToTokens, Debug)] struct DeclStorageGetterBody { - fn_keyword: Option, + fn_keyword: Token![fn], ident: Ident, } diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index 49ad802d07d..df987e0b0ba 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -271,8 +271,6 @@ mod tests { map hasher(identity) T::BlockNumber => T::BlockNumber; pub GenericData2 get(fn generic_data2): map hasher(blake2_128_concat) T::BlockNumber => Option; - pub GetterNoFnKeyword get(no_fn): Option; - pub DataDM config(test_config) build(|_| vec![(15u32, 16u32, 42u64)]): double_map hasher(twox_64_concat) u32, hasher(blake2_128_concat) u32 => u64; pub GenericDataDM: @@ -558,15 +556,6 @@ mod tests { ), documentation: DecodeDifferent::Encode(&[]), }, - StorageEntryMetadata { - name: DecodeDifferent::Encode("GetterNoFnKeyword"), - modifier: StorageEntryModifier::Optional, - ty: StorageEntryType::Plain(DecodeDifferent::Encode("u32")), - default: DecodeDifferent::Encode( - DefaultByteGetter(&__GetByteStructGetterNoFnKeyword(PhantomData::)) - ), - documentation: DecodeDifferent::Encode(&[]), - }, StorageEntryMetadata { name: DecodeDifferent::Encode("DataDM"), modifier: StorageEntryModifier::Default, -- GitLab From 761d3c8ff210a9138a32a9317d31a798c90e22f9 Mon Sep 17 00:00:00 2001 From: pscott <30843220+pscott@users.noreply.github.com> Date: Wed, 22 Apr 2020 00:35:01 +0200 Subject: [PATCH 018/167] Remove TaskManagerBuilder (#5725) * Remove TaskManagerBuilder * Clean up use declaration fo SpawnTaskHandle Co-Authored-By: Pierre Krieger Co-authored-by: Pierre Krieger --- client/service/src/builder.rs | 54 +++++++------- client/service/src/lib.rs | 4 +- client/service/src/task_manager.rs | 116 ++++++----------------------- 3 files changed, 52 insertions(+), 122 deletions(-) diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 1cdebe8b14b..b819c47bee9 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use crate::{Service, NetworkStatus, NetworkState, error::Error, DEFAULT_PROTOCOL_ID, MallocSizeOfWasm}; -use crate::{TaskManagerBuilder, start_rpc_servers, build_network_future, TransactionPoolAdapter}; +use crate::{start_rpc_servers, build_network_future, TransactionPoolAdapter, TaskManager}; use crate::status_sinks; use crate::config::{Configuration, KeystoreConfig, PrometheusConfig}; use crate::metrics::MetricsService; @@ -81,7 +81,7 @@ pub struct ServiceBuilder, backend: Arc, - tasks_builder: TaskManagerBuilder, + task_manager: TaskManager, keystore: Arc>, fetcher: Option, select_chain: Option, @@ -145,7 +145,7 @@ type TFullParts = ( TFullClient, Arc>, Arc>, - TaskManagerBuilder, + TaskManager, ); /// Creates a new full client for the given config. @@ -172,9 +172,9 @@ fn new_full_parts( KeystoreConfig::InMemory => Keystore::new_in_memory(), }; - let tasks_builder = { + let task_manager = { let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); - TaskManagerBuilder::new(registry)? + TaskManager::new(config.task_executor.clone(), registry)? }; let executor = NativeExecutor::::new( @@ -213,12 +213,12 @@ fn new_full_parts( fork_blocks, bad_blocks, extensions, - Box::new(tasks_builder.spawn_handle()), + Box::new(task_manager.spawn_handle()), config.prometheus_config.as_ref().map(|config| config.registry.clone()), )? }; - Ok((client, backend, keystore, tasks_builder)) + Ok((client, backend, keystore, task_manager)) } impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { @@ -238,7 +238,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { (), TFullBackend, >, Error> { - let (client, backend, keystore, tasks_builder) = new_full_parts(&config)?; + let (client, backend, keystore, task_manager) = new_full_parts(&config)?; let client = Arc::new(client); @@ -247,7 +247,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { client, backend, keystore, - tasks_builder, + task_manager, fetcher: None, select_chain: None, import_queue: (), @@ -277,9 +277,9 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { (), TLightBackend, >, Error> { - let tasks_builder = { + let task_manager = { let registry = config.prometheus_config.as_ref().map(|cfg| &cfg.registry); - TaskManagerBuilder::new(registry)? + TaskManager::new(config.task_executor.clone(), registry)? }; let keystore = match &config.keystore { @@ -311,7 +311,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { sc_client::light::new_fetch_checker::<_, TBl, _>( light_blockchain.clone(), executor.clone(), - Box::new(tasks_builder.spawn_handle()), + Box::new(task_manager.spawn_handle()), ), ); let fetcher = Arc::new(sc_network::config::OnDemand::new(fetch_checker)); @@ -321,7 +321,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { backend.clone(), config.chain_spec.as_storage_builder(), executor, - Box::new(tasks_builder.spawn_handle()), + Box::new(task_manager.spawn_handle()), config.prometheus_config.as_ref().map(|config| config.registry.clone()), )?); @@ -329,7 +329,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { config, client, backend, - tasks_builder, + task_manager, keystore, fetcher: Some(fetcher.clone()), select_chain: None, @@ -402,7 +402,7 @@ impl config: self.config, client: self.client, backend: self.backend, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, keystore: self.keystore, fetcher: self.fetcher, select_chain, @@ -445,7 +445,7 @@ impl config: self.config, client: self.client, backend: self.backend, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, keystore: self.keystore, fetcher: self.fetcher, select_chain: self.select_chain, @@ -483,7 +483,7 @@ impl config: self.config, client: self.client, backend: self.backend, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, keystore: self.keystore, fetcher: self.fetcher, select_chain: self.select_chain, @@ -545,7 +545,7 @@ impl config: self.config, client: self.client, backend: self.backend, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, keystore: self.keystore, fetcher: self.fetcher, select_chain: self.select_chain, @@ -606,7 +606,7 @@ impl Ok(ServiceBuilder { config: self.config, client: self.client, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, backend: self.backend, keystore: self.keystore, fetcher: self.fetcher, @@ -635,7 +635,7 @@ impl config: self.config, client: self.client, backend: self.backend, - tasks_builder: self.tasks_builder, + task_manager: self.task_manager, keystore: self.keystore, fetcher: self.fetcher, select_chain: self.select_chain, @@ -745,7 +745,7 @@ ServiceBuilder< marker: _, mut config, client, - tasks_builder, + task_manager, fetcher: on_demand, backend, keystore, @@ -789,7 +789,7 @@ ServiceBuilder< imports_external_transactions: !matches!(config.role, Role::Light), pool: transaction_pool.clone(), client: client.clone(), - executor: tasks_builder.spawn_handle(), + executor: task_manager.spawn_handle(), }); let protocol_id = { @@ -811,7 +811,7 @@ ServiceBuilder< let network_params = sc_network::config::Params { role: config.role.clone(), executor: { - let spawn_handle = tasks_builder.spawn_handle(); + let spawn_handle = task_manager.spawn_handle(); Some(Box::new(move |fut| { spawn_handle.spawn("libp2p-node", fut); })) @@ -845,7 +845,7 @@ ServiceBuilder< _ => None, }; - let spawn_handle = tasks_builder.spawn_handle(); + let spawn_handle = task_manager.spawn_handle(); // Spawn background tasks which were stacked during the // service building. @@ -857,7 +857,7 @@ ServiceBuilder< // block notifications let txpool = Arc::downgrade(&transaction_pool); let offchain = offchain_workers.as_ref().map(Arc::downgrade); - let notifications_spawn_handle = tasks_builder.spawn_handle(); + let notifications_spawn_handle = task_manager.spawn_handle(); let network_state_info: Arc = network.clone(); let is_validator = config.role.is_authority(); @@ -1013,7 +1013,7 @@ ServiceBuilder< chain_type: chain_spec.chain_type().clone(), }; - let subscriptions = sc_rpc::Subscriptions::new(Arc::new(tasks_builder.spawn_handle())); + let subscriptions = sc_rpc::Subscriptions::new(Arc::new(task_manager.spawn_handle())); let (chain, state, child_state) = if let (Some(remote_backend), Some(on_demand)) = (remote_backend.as_ref(), on_demand.as_ref()) { @@ -1145,7 +1145,7 @@ ServiceBuilder< Ok(Service { client, - task_manager: tasks_builder.into_task_manager(config.task_executor), + task_manager, network, network_status_sinks, select_chain, diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 039e0257ab5..56fee6b6d74 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -74,7 +74,7 @@ pub use std::{ops::Deref, result::Result, sync::Arc}; #[doc(hidden)] pub use sc_network::config::{FinalityProofProvider, OnDemand, BoxFinalityProofRequestBuilder}; pub use sc_tracing::TracingReceiver; -pub use task_manager::{TaskManagerBuilder, SpawnTaskHandle}; +pub use task_manager::SpawnTaskHandle; use task_manager::TaskManager; const DEFAULT_PROTOCOL_ID: &str = "sup"; @@ -304,8 +304,6 @@ impl Future for } } - this.task_manager.process_receiver(cx); - // The service future never ends. Poll::Pending } diff --git a/client/service/src/task_manager.rs b/client/service/src/task_manager.rs index fd7fc62ab57..e6847d08811 100644 --- a/client/service/src/task_manager.rs +++ b/client/service/src/task_manager.rs @@ -15,13 +15,12 @@ use std::{ pin::Pin, - result::Result, sync::Arc, - task::{Poll, Context}, + result::Result, sync::Arc }; use exit_future::Signal; -use log::{debug, error}; +use log::{debug}; use futures::{ - Future, FutureExt, Stream, + Future, FutureExt, future::select, compat::*, task::{Spawn, FutureObj, SpawnError}, @@ -32,88 +31,17 @@ use prometheus_endpoint::{ CounterVec, HistogramOpts, HistogramVec, Opts, Registry, U64 }; use sc_client_api::CloneableSpawn; -use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver}; mod prometheus_future; /// Type alias for service task executor (usually runtime). pub type ServiceTaskExecutor = Arc + Send>>) + Send + Sync>; -/// Type alias for the task scheduler. -pub type TaskScheduler = TracingUnboundedSender + Send>>>; - -/// Helper struct to setup background tasks execution for service. -pub struct TaskManagerBuilder { - /// A future that resolves when the service has exited, this is useful to - /// make sure any internally spawned futures stop when the service does. - on_exit: exit_future::Exit, - /// A signal that makes the exit future above resolve, fired on service drop. - signal: Option, - /// Sender for futures that must be spawned as background tasks. - to_spawn_tx: TaskScheduler, - /// Receiver for futures that must be spawned as background tasks. - to_spawn_rx: TracingUnboundedReceiver + Send>>>, - /// Prometheus metrics where to report the stats about tasks. - metrics: Option, -} - -impl TaskManagerBuilder { - /// New asynchronous task manager setup. - /// - /// If a Prometheus registry is passed, it will be used to report statistics about the - /// service tasks. - pub fn new(prometheus_registry: Option<&Registry>) -> Result { - let (signal, on_exit) = exit_future::signal(); - let (to_spawn_tx, to_spawn_rx) = tracing_unbounded("mpsc_task_manager"); - - let metrics = prometheus_registry.map(Metrics::register).transpose()?; - - Ok(Self { - on_exit, - signal: Some(signal), - to_spawn_tx, - to_spawn_rx, - metrics, - }) - } - - /// Get spawn handle. - /// - /// Tasks spawned through this handle will get scheduled once - /// service is up and running. - pub fn spawn_handle(&self) -> SpawnTaskHandle { - SpawnTaskHandle { - on_exit: self.on_exit.clone(), - sender: self.to_spawn_tx.clone(), - metrics: self.metrics.clone(), - } - } - - /// Convert into actual task manager from initial setup. - pub(crate) fn into_task_manager(self, executor: ServiceTaskExecutor) -> TaskManager { - let TaskManagerBuilder { - on_exit, - signal, - to_spawn_rx, - to_spawn_tx, - metrics, - } = self; - TaskManager { - on_exit, - signal, - to_spawn_tx, - to_spawn_rx, - executor, - metrics, - } - } -} - /// An handle for spawning tasks in the service. #[derive(Clone)] pub struct SpawnTaskHandle { - sender: TaskScheduler, on_exit: exit_future::Exit, + executor: ServiceTaskExecutor, metrics: Option, } @@ -152,9 +80,7 @@ impl SpawnTaskHandle { } }; - if self.sender.unbounded_send(Box::pin(future)).is_err() { - error!("Failed to send task to spawn over channel"); - } + (self.executor)(Box::pin(future)); } } @@ -188,11 +114,6 @@ pub struct TaskManager { on_exit: exit_future::Exit, /// A signal that makes the exit future above resolve, fired on service drop. signal: Option, - /// Sender for futures that must be spawned as background tasks. - to_spawn_tx: TaskScheduler, - /// Receiver for futures that must be spawned as background tasks. - /// Note: please read comment on [`SpawnTaskHandle::spawn`] for why this is a `&'static str`. - to_spawn_rx: TracingUnboundedReceiver + Send>>>, /// How to spawn background tasks. executor: ServiceTaskExecutor, /// Prometheus metric where to report the polling times. @@ -200,6 +121,24 @@ pub struct TaskManager { } impl TaskManager { + /// If a Prometheus registry is passed, it will be used to report statistics about the + /// service tasks. + pub(super) fn new( + executor: ServiceTaskExecutor, + prometheus_registry: Option<&Registry> + ) -> Result { + let (signal, on_exit) = exit_future::signal(); + + let metrics = prometheus_registry.map(Metrics::register).transpose()?; + + Ok(Self { + on_exit, + signal: Some(signal), + executor, + metrics, + }) + } + /// Spawn background/async task, which will be aware on exit signal. /// /// See also the documentation of [`SpawnTaskHandler::spawn`]. @@ -210,18 +149,11 @@ impl TaskManager { pub(super) fn spawn_handle(&self) -> SpawnTaskHandle { SpawnTaskHandle { on_exit: self.on_exit.clone(), - sender: self.to_spawn_tx.clone(), + executor: self.executor.clone(), metrics: self.metrics.clone(), } } - /// Process background task receiver. - pub(super) fn process_receiver(&mut self, cx: &mut Context) { - while let Poll::Ready(Some(task_to_spawn)) = Pin::new(&mut self.to_spawn_rx).poll_next(cx) { - (self.executor)(task_to_spawn); - } - } - /// Clone on exit signal. pub(super) fn on_exit(&self) -> exit_future::Exit { self.on_exit.clone() -- GitLab From b17818775f6038a080390e3a63ea5cb11c50721c Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 22 Apr 2020 00:36:12 +0200 Subject: [PATCH 019/167] Fix warning reported in out_events when Registry is None (#5716) --- client/network/src/service/out_events.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/network/src/service/out_events.rs b/client/network/src/service/out_events.rs index 8f9c138095f..2d4d7ded213 100644 --- a/client/network/src/service/out_events.rs +++ b/client/network/src/service/out_events.rs @@ -97,10 +97,10 @@ impl Stream for Receiver { fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { if let Some(ev) = ready!(Pin::new(&mut self.inner).poll_next(cx)) { let metrics = self.metrics.lock().clone(); - if let Some(Some(metrics)) = metrics.as_ref().map(|m| &**m) { - metrics.event_out(&ev, self.name); - } else { - log::warn!("Inconsistency in out_events: event happened before sender associated"); + match metrics.as_ref().map(|m| m.as_ref()) { + Some(Some(metrics)) => metrics.event_out(&ev, self.name), + Some(None) => (), // no registry + None => log::warn!("Inconsistency in out_events: event happened before sender associated"), } Poll::Ready(Some(ev)) } else { -- GitLab From 3a36e511a516644c291f99b1ab9a23d097e65c44 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Wed, 22 Apr 2020 09:20:28 +0200 Subject: [PATCH 020/167] Migrate away from `SimpleDispatchInfo` (#5686) * Migrate away from SimpleDispatchInfo * Fix imports * Better doc * Update lib.rs Co-authored-by: Shawn Tabrizi --- bin/node-template/pallets/template/src/lib.rs | 6 +- frame/assets/src/lib.rs | 8 +- frame/authorship/src/lib.rs | 4 +- frame/benchmark/src/lib.rs | 28 +- frame/benchmarking/src/tests.rs | 6 +- frame/collective/src/lib.rs | 12 +- frame/contracts/src/lib.rs | 12 +- frame/democracy/src/lib.rs | 60 ++-- frame/elections-phragmen/src/lib.rs | 15 +- frame/elections/src/lib.rs | 30 +- frame/evm/src/lib.rs | 5 +- frame/example-offchain-worker/src/lib.rs | 8 +- frame/example/src/lib.rs | 10 +- frame/executive/src/lib.rs | 8 +- frame/finality-tracker/src/lib.rs | 8 +- frame/generic-asset/src/lib.rs | 14 +- frame/grandpa/src/lib.rs | 4 +- frame/identity/src/lib.rs | 24 +- frame/im-online/src/lib.rs | 8 +- frame/indices/src/lib.rs | 10 +- frame/membership/src/lib.rs | 15 +- frame/nicks/src/lib.rs | 9 +- frame/randomness-collective-flip/src/lib.rs | 4 +- frame/recovery/src/lib.rs | 18 +- frame/scored-pool/src/lib.rs | 16 +- frame/session/src/lib.rs | 6 +- frame/society/src/lib.rs | 26 +- frame/staking/src/lib.rs | 54 ++-- frame/sudo/src/lib.rs | 8 +- frame/support/src/dispatch.rs | 37 ++- frame/support/src/error.rs | 4 +- frame/support/src/metadata.rs | 4 +- frame/support/src/weights.rs | 302 +++++++++++------- frame/support/test/tests/decl_error.rs | 6 +- frame/support/test/tests/instance.rs | 4 +- .../tests/reserved_keyword/on_initialize.rs | 4 +- frame/system/src/lib.rs | 24 +- frame/timestamp/src/lib.rs | 8 +- frame/treasury/src/lib.rs | 18 +- frame/vesting/src/lib.rs | 8 +- 40 files changed, 454 insertions(+), 401 deletions(-) diff --git a/bin/node-template/pallets/template/src/lib.rs b/bin/node-template/pallets/template/src/lib.rs index adddbac21b5..ad721985b26 100644 --- a/bin/node-template/pallets/template/src/lib.rs +++ b/bin/node-template/pallets/template/src/lib.rs @@ -10,7 +10,7 @@ /// https://github.com/paritytech/substrate/blob/master/frame/example/src/lib.rs use frame_support::{decl_module, decl_storage, decl_event, decl_error, dispatch}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use frame_system::{self as system, ensure_signed}; #[cfg(test)] @@ -76,7 +76,7 @@ decl_module! { /// Just a dummy entry point. /// function that can be called by the external world as an extrinsics call /// takes a parameter of the type `AccountId`, stores it, and emits an event - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn do_something(origin, something: u32) -> dispatch::DispatchResult { // Check it was signed and get the signer. See also: ensure_root and ensure_none let who = ensure_signed(origin)?; @@ -92,7 +92,7 @@ decl_module! { /// Another dummy entry point. /// takes no parameters, attempts to increment storage value, and possibly throws an error - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn cause_error(origin) -> dispatch::DispatchResult { // Check it was signed and get the signer. See also: ensure_root and ensure_none let _who = ensure_signed(origin)?; diff --git a/frame/assets/src/lib.rs b/frame/assets/src/lib.rs index 15726c9bcb1..60a9ab87a75 100644 --- a/frame/assets/src/lib.rs +++ b/frame/assets/src/lib.rs @@ -133,7 +133,7 @@ #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{Parameter, decl_module, decl_event, decl_storage, decl_error, ensure}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use sp_runtime::traits::{Member, AtLeast32Bit, Zero, StaticLookup}; use frame_system::{self as system, ensure_signed}; use sp_runtime::traits::One; @@ -158,7 +158,7 @@ decl_module! { /// Issue a new class of fungible assets. There are, and will only ever be, `total` /// such assets and they'll all belong to the `origin` initially. It will have an /// identifier `AssetId` instance: this will be specified in the `Issued` event. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn issue(origin, #[compact] total: T::Balance) { let origin = ensure_signed(origin)?; @@ -172,7 +172,7 @@ decl_module! { } /// Move some assets from one holder to another. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn transfer(origin, #[compact] id: T::AssetId, target: ::Source, @@ -191,7 +191,7 @@ decl_module! { } /// Destroy any assets of `id` owned by `origin`. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn destroy(origin, #[compact] id: T::AssetId) { let origin = ensure_signed(origin)?; let balance = >::take((id, &origin)); diff --git a/frame/authorship/src/lib.rs b/frame/authorship/src/lib.rs index fac4b7d4820..a00bfc139f2 100644 --- a/frame/authorship/src/lib.rs +++ b/frame/authorship/src/lib.rs @@ -27,7 +27,7 @@ use frame_support::traits::{FindAuthor, VerifySeal, Get}; use codec::{Encode, Decode}; use frame_system::ensure_none; use sp_runtime::traits::{Header as HeaderT, One, Zero}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}; +use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass}; use sp_inherents::{InherentIdentifier, ProvideInherent, InherentData}; use sp_authorship::{INHERENT_IDENTIFIER, UnclesInherentData, InherentError}; @@ -207,7 +207,7 @@ decl_module! { } /// Provide a set of uncles. - #[weight = SimpleDispatchInfo::FixedMandatory(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] fn set_uncles(origin, new_uncles: Vec) -> dispatch::DispatchResult { ensure_none(origin)?; ensure!(new_uncles.len() <= MAX_UNCLES, Error::::TooManyUncles); diff --git a/frame/benchmark/src/lib.rs b/frame/benchmark/src/lib.rs index 24b0e433101..61b6ac94155 100644 --- a/frame/benchmark/src/lib.rs +++ b/frame/benchmark/src/lib.rs @@ -21,7 +21,7 @@ #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{decl_module, decl_storage, decl_event, decl_error}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use frame_support::traits::Currency; use frame_system::{self as system, ensure_signed}; use codec::{Encode, Decode}; @@ -71,7 +71,7 @@ decl_module! { fn deposit_event() = default; /// Do nothing. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn do_nothing(_origin, input: u32) { if input > 0 { return Ok(()); @@ -83,7 +83,7 @@ decl_module! { /// storage database, however, the `repeat` calls will all pull from the /// storage overlay cache. You must consider this when analyzing the /// results of the benchmark. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn read_value(_origin, repeat: u32) { for _ in 0..repeat { MyValue::get(); @@ -91,7 +91,7 @@ decl_module! { } /// Put a value into a storage value. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn put_value(_origin, repeat: u32) { for r in 0..repeat { MyValue::put(r); @@ -103,7 +103,7 @@ decl_module! { /// storage database, however, the `repeat` calls will all pull from the /// storage overlay cache. You must consider this when analyzing the /// results of the benchmark. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn exists_value(_origin, repeat: u32) { for _ in 0..repeat { MyValue::exists(); @@ -111,7 +111,7 @@ decl_module! { } /// Remove a value from storage `repeat` number of times. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn remove_value(_origin, repeat: u32) { for r in 0..repeat { MyMap::remove(r); @@ -119,7 +119,7 @@ decl_module! { } /// Read a value from storage map `repeat` number of times. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn read_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::get(r); @@ -127,7 +127,7 @@ decl_module! { } /// Insert a value into a map. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn insert_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::insert(r, r); @@ -135,7 +135,7 @@ decl_module! { } /// Check is a map contains a value `repeat` number of times. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn contains_key_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::contains_key(r); @@ -143,7 +143,7 @@ decl_module! { } /// Read a value from storage `repeat` number of times. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn remove_prefix(_origin, repeat: u32) { for r in 0..repeat { MyDoubleMap::remove_prefix(r); @@ -151,21 +151,21 @@ decl_module! { } /// Add user to the list. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn add_member_list(origin) { let who = ensure_signed(origin)?; MyMemberList::::mutate(|x| x.push(who)); } /// Append user to the list. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn append_member_list(origin) { let who = ensure_signed(origin)?; MyMemberList::::append(&[who])?; } /// Encode a vector of accounts to bytes. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn encode_accounts(_origin, accounts: Vec) { let bytes = accounts.encode(); @@ -177,7 +177,7 @@ decl_module! { } /// Decode bytes into a vector of accounts. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn decode_accounts(_origin, bytes: Vec) { let accounts: Vec = Decode::decode(&mut bytes.as_slice()).map_err(|_| "Could not decode")?; diff --git a/frame/benchmarking/src/tests.rs b/frame/benchmarking/src/tests.rs index 4b26ec732d2..cb8bb8603f6 100644 --- a/frame/benchmarking/src/tests.rs +++ b/frame/benchmarking/src/tests.rs @@ -24,7 +24,7 @@ use sp_std::prelude::*; use sp_runtime::{traits::{BlakeTwo256, IdentityLookup}, testing::{H256, Header}}; use frame_support::{ dispatch::DispatchResult, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, decl_module, decl_storage, impl_outer_origin, assert_ok, assert_err, ensure }; use frame_system::{RawOrigin, ensure_signed, ensure_none}; @@ -37,14 +37,14 @@ decl_storage! { decl_module! { pub struct Module for enum Call where origin: T::Origin { - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn set_value(origin, n: u32) -> DispatchResult { let _sender = ensure_signed(origin)?; Value::put(n); Ok(()) } - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn dummy(origin, _n: u32) -> DispatchResult { let _sender = ensure_none(origin)?; Ok(()) diff --git a/frame/collective/src/lib.rs b/frame/collective/src/lib.rs index b5626ae4a68..19a9a12b34b 100644 --- a/frame/collective/src/lib.rs +++ b/frame/collective/src/lib.rs @@ -40,11 +40,11 @@ use sp_std::{prelude::*, result}; use sp_core::u32_trait::Value as U32; use sp_runtime::RuntimeDebug; use sp_runtime::traits::Hash; -use frame_support::weights::SimpleDispatchInfo; use frame_support::{ dispatch::{Dispatchable, Parameter}, codec::{Encode, Decode}, traits::{Get, ChangeMembers, InitializeMembers, EnsureOrigin}, decl_module, decl_event, decl_storage, decl_error, ensure, + weights::DispatchClass, }; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -187,7 +187,7 @@ decl_module! { /// - `prime`: The prime member whose vote sets the default. /// /// Requires root origin. - #[weight = SimpleDispatchInfo::FixedOperational(100_000_000)] + #[weight = (100_000_000, DispatchClass::Operational)] fn set_members(origin, new_members: Vec, prime: Option) { ensure_root(origin)?; let mut new_members = new_members; @@ -200,7 +200,7 @@ decl_module! { /// Dispatch a proposal from a member using the `Member` origin. /// /// Origin must be a member of the collective. - #[weight = SimpleDispatchInfo::FixedOperational(100_000_000)] + #[weight = (100_000_000, DispatchClass::Operational)] fn execute(origin, proposal: Box<>::Proposal>) { let who = ensure_signed(origin)?; ensure!(Self::is_member(&who), Error::::NotMember); @@ -214,7 +214,7 @@ decl_module! { /// - Bounded storage reads and writes. /// - Argument `threshold` has bearing on weight. /// # - #[weight = SimpleDispatchInfo::FixedOperational(5_000_000_000)] + #[weight = (5_000_000_000, DispatchClass::Operational)] fn propose(origin, #[compact] threshold: MemberCount, proposal: Box<>::Proposal>) { let who = ensure_signed(origin)?; ensure!(Self::is_member(&who), Error::::NotMember); @@ -244,7 +244,7 @@ decl_module! { /// - Bounded storage read and writes. /// - Will be slightly heavier if the proposal is approved / disapproved after the vote. /// # - #[weight = SimpleDispatchInfo::FixedOperational(200_000_000)] + #[weight = (200_000_000, DispatchClass::Operational)] fn vote(origin, proposal: T::Hash, #[compact] index: ProposalIndex, approve: bool) { let who = ensure_signed(origin)?; ensure!(Self::is_member(&who), Error::::NotMember); @@ -303,7 +303,7 @@ decl_module! { /// - `M` is number of members, /// - `P` is number of active proposals, /// - `L` is the encoded length of `proposal` preimage. - #[weight = SimpleDispatchInfo::FixedOperational(200_000_000)] + #[weight = (200_000_000, DispatchClass::Operational)] fn close(origin, proposal: T::Hash, #[compact] index: ProposalIndex) { let _ = ensure_signed(origin)?; diff --git a/frame/contracts/src/lib.rs b/frame/contracts/src/lib.rs index 00b23cad199..2513f2fb618 100644 --- a/frame/contracts/src/lib.rs +++ b/frame/contracts/src/lib.rs @@ -123,7 +123,7 @@ use sp_runtime::{ RuntimeDebug, }; use frame_support::dispatch::{DispatchResult, Dispatchable}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, parameter_types, IsSubType, storage::child::{self, ChildInfo}, @@ -539,7 +539,7 @@ decl_module! { /// Updates the schedule for metering contracts. /// /// The schedule must have a greater version than the stored schedule. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn update_schedule(origin, schedule: Schedule) -> DispatchResult { ensure_root(origin)?; if >::current_schedule().version >= schedule.version { @@ -554,7 +554,7 @@ decl_module! { /// Stores the given binary Wasm code into the chain's storage and returns its `codehash`. /// You can instantiate contracts only with stored code. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn put_code( origin, #[compact] gas_limit: Gas, @@ -582,7 +582,7 @@ decl_module! { /// * If the account is a regular account, any value will be transferred. /// * If no account exists and the call value is not less than `existential_deposit`, /// a regular account will be created and any value will be transferred. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn call( origin, dest: ::Source, @@ -608,7 +608,7 @@ decl_module! { /// after the execution is saved as the `code` of the account. That code will be invoked /// upon any call received by this account. /// - The contract is initialized. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn instantiate( origin, #[compact] endowment: BalanceOf, @@ -631,7 +631,7 @@ decl_module! { /// /// If contract is not evicted as a result of this call, no actions are taken and /// the sender is not eligible for the reward. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn claim_surcharge(origin, dest: T::AccountId, aux_sender: Option) { let origin = origin.into(); let (signed, rewarded) = match (origin, aux_sender) { diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index 34287f9bae7..91fa625c5c1 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -171,7 +171,7 @@ use sp_runtime::{ use codec::{Ref, Encode, Decode}; use frame_support::{ decl_module, decl_storage, decl_event, decl_error, ensure, Parameter, - weights::{SimpleDispatchInfo, Weight, MINIMUM_WEIGHT}, + weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, traits::{ Currency, ReservableCurrency, LockableCurrency, WithdrawReason, LockIdentifier, Get, OnUnbalanced, BalanceStatus, schedule::Named as ScheduleNamed, EnsureOrigin @@ -546,7 +546,7 @@ decl_module! { /// - P is the number proposals in the `PublicProps` vec. /// - Two DB changes, one DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000_000)] + #[weight = 5_000_000_000] fn propose(origin, proposal_hash: T::Hash, #[compact] value: BalanceOf @@ -577,7 +577,7 @@ decl_module! { /// - S is the number of seconds a proposal already has. /// - One DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000_000)] + #[weight = 5_000_000_000] fn second(origin, #[compact] proposal: PropIndex) { let who = ensure_signed(origin)?; let mut deposit = Self::deposit_of(proposal) @@ -600,7 +600,7 @@ decl_module! { /// - R is the number of referendums the voter has voted on. /// - One DB change, one DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(200_000_000)] + #[weight = 200_000_000] fn vote(origin, #[compact] ref_index: ReferendumIndex, vote: AccountVote>, @@ -621,7 +621,7 @@ decl_module! { /// - `O(1)`. /// - One DB change, one DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(200_000_000)] + #[weight = 200_000_000] fn proxy_vote(origin, #[compact] ref_index: ReferendumIndex, vote: AccountVote>, @@ -641,7 +641,7 @@ decl_module! { /// # /// - `O(1)`. /// # - #[weight = SimpleDispatchInfo::FixedOperational(500_000_000)] + #[weight = (500_000_000, DispatchClass::Operational)] fn emergency_cancel(origin, ref_index: ReferendumIndex) { T::CancellationOrigin::ensure_origin(origin)?; @@ -664,7 +664,7 @@ decl_module! { /// - `O(1)`. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000_000)] + #[weight = 5_000_000_000] fn external_propose(origin, proposal_hash: T::Hash) { T::ExternalOrigin::ensure_origin(origin)?; ensure!(!>::exists(), Error::::DuplicateProposal); @@ -691,7 +691,7 @@ decl_module! { /// - `O(1)`. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000_000)] + #[weight = 5_000_000_000] fn external_propose_majority(origin, proposal_hash: T::Hash) { T::ExternalMajorityOrigin::ensure_origin(origin)?; >::put((proposal_hash, VoteThreshold::SimpleMajority)); @@ -711,7 +711,7 @@ decl_module! { /// - `O(1)`. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000_000)] + #[weight = 5_000_000_000] fn external_propose_default(origin, proposal_hash: T::Hash) { T::ExternalDefaultOrigin::ensure_origin(origin)?; >::put((proposal_hash, VoteThreshold::SuperMajorityAgainst)); @@ -736,7 +736,7 @@ decl_module! { /// - One DB change. /// - One extra DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(200_000_000)] + #[weight = 200_000_000] fn fast_track(origin, proposal_hash: T::Hash, voting_period: T::BlockNumber, @@ -787,7 +787,7 @@ decl_module! { /// be very large. /// - O(log v), v is number of `existing_vetoers` /// # - #[weight = SimpleDispatchInfo::FixedNormal(200_000_000)] + #[weight = 200_000_000] fn veto_external(origin, proposal_hash: T::Hash) { let who = T::VetoOrigin::ensure_origin(origin)?; @@ -820,7 +820,7 @@ decl_module! { /// # /// - `O(1)`. /// # - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn cancel_referendum(origin, #[compact] ref_index: ReferendumIndex) { ensure_root(origin)?; Self::internal_cancel_referendum(ref_index); @@ -836,7 +836,7 @@ decl_module! { /// - One DB change. /// - O(d) where d is the items in the dispatch queue. /// # - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn cancel_queued(origin, which: ReferendumIndex) { ensure_root(origin)?; T::Scheduler::cancel_named((DEMOCRACY_ID, which)) @@ -862,7 +862,7 @@ decl_module! { /// # /// - One extra DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn activate_proxy(origin, proxy: T::AccountId) { let who = ensure_signed(origin)?; Proxy::::try_mutate(&proxy, |a| match a.take() { @@ -885,7 +885,7 @@ decl_module! { /// # /// - One DB clear. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn close_proxy(origin) { let who = ensure_signed(origin)?; Proxy::::mutate(&who, |a| { @@ -909,7 +909,7 @@ decl_module! { /// # /// - One DB clear. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn deactivate_proxy(origin, proxy: T::AccountId) { let who = ensure_signed(origin)?; Proxy::::try_mutate(&proxy, |a| match a.take() { @@ -942,7 +942,7 @@ decl_module! { /// /// # /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] pub fn delegate(origin, to: T::AccountId, conviction: Conviction, balance: BalanceOf) { let who = ensure_signed(origin)?; Self::try_delegate(who, to, conviction, balance)?; @@ -961,7 +961,7 @@ decl_module! { /// # /// - O(1). /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn undelegate(origin) { let who = ensure_signed(origin)?; Self::try_undelegate(who)?; @@ -975,7 +975,7 @@ decl_module! { /// - `O(1)`. /// - One DB clear. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn clear_public_proposals(origin) { ensure_root(origin)?; @@ -995,7 +995,7 @@ decl_module! { /// - Dependent on the size of `encoded_proposal` but protected by a /// required deposit. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn note_preimage(origin, encoded_proposal: Vec) { let who = ensure_signed(origin)?; let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); @@ -1030,7 +1030,7 @@ decl_module! { /// # /// - Dependent on the size of `encoded_proposal` and length of dispatch queue. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn note_imminent_preimage(origin, encoded_proposal: Vec) { let who = ensure_signed(origin)?; let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); @@ -1066,7 +1066,7 @@ decl_module! { /// # /// - One DB clear. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn reap_preimage(origin, proposal_hash: T::Hash) { let who = ensure_signed(origin)?; let (provider, deposit, since, expiry) = >::get(&proposal_hash) @@ -1096,7 +1096,7 @@ decl_module! { /// # /// - `O(1)`. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn unlock(origin, target: T::AccountId) { ensure_signed(origin)?; Self::update_lock(&target); @@ -1115,7 +1115,7 @@ decl_module! { /// # /// - One extra DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn open_proxy(origin, target: T::AccountId) { let who = ensure_signed(origin)?; Proxy::::mutate(&who, |a| { @@ -1154,7 +1154,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn remove_vote(origin, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; Self::try_remove_vote(&who, index, UnvoteScope::Any) @@ -1176,7 +1176,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn remove_other_vote(origin, target: T::AccountId, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; let scope = if target == who { UnvoteScope::Any } else { UnvoteScope::OnlyExpired }; @@ -1207,7 +1207,7 @@ decl_module! { /// /// # /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] pub fn proxy_delegate(origin, to: T::AccountId, conviction: Conviction, @@ -1231,7 +1231,7 @@ decl_module! { /// # /// - O(1). /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn proxy_undelegate(origin) { let who = ensure_signed(origin)?; let target = Self::proxy(who).and_then(|a| a.as_active()).ok_or(Error::::NotProxy)?; @@ -1251,7 +1251,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn proxy_remove_vote(origin, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; let target = Self::proxy(who).and_then(|a| a.as_active()).ok_or(Error::::NotProxy)?; @@ -1259,7 +1259,7 @@ decl_module! { } /// Enact a proposal from a referendum. For now we just make the weight be the maximum. - #[weight = SimpleDispatchInfo::MaxNormal] + #[weight = Weight::max_value()] fn enact_proposal(origin, proposal_hash: T::Hash, index: ReferendumIndex) -> DispatchResult { ensure_root(origin)?; Self::do_enact_proposal(proposal_hash, index) diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 610f0084572..9247d6f3215 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -88,7 +88,8 @@ use sp_runtime::{ }; use frame_support::{ decl_storage, decl_event, ensure, decl_module, decl_error, - weights::{SimpleDispatchInfo, Weight, MINIMUM_WEIGHT}, storage::{StorageMap, IterableStorageMap}, + weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, + storage::{StorageMap, IterableStorageMap}, traits::{ Currency, Get, LockableCurrency, LockIdentifier, ReservableCurrency, WithdrawReasons, ChangeMembers, OnUnbalanced, WithdrawReason, Contains, BalanceStatus, InitializeMembers, @@ -291,7 +292,7 @@ decl_module! { /// Reads: O(1) /// Writes: O(V) given `V` votes. V is bounded by 16. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn vote(origin, votes: Vec, #[compact] value: BalanceOf) { let who = ensure_signed(origin)?; @@ -336,7 +337,7 @@ decl_module! { /// Reads: O(1) /// Writes: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn remove_voter(origin) { let who = ensure_signed(origin)?; @@ -358,7 +359,7 @@ decl_module! { /// Reads: O(NLogM) given M current candidates and N votes for `target`. /// Writes: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(1_000_000_000)] + #[weight = 1_000_000_000] fn report_defunct_voter(origin, target: ::Source) { let reporter = ensure_signed(origin)?; let target = T::Lookup::lookup(target)?; @@ -401,7 +402,7 @@ decl_module! { /// Reads: O(LogN) Given N candidates. /// Writes: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn submit_candidacy(origin) { let who = ensure_signed(origin)?; @@ -428,7 +429,7 @@ decl_module! { /// - `origin` is a current member. In this case, the bond is unreserved and origin is /// removed as a member, consequently not being a candidate for the next round anymore. /// Similar to [`remove_voter`], if replacement runners exists, they are immediately used. - #[weight = SimpleDispatchInfo::FixedOperational(2_000_000_000)] + #[weight = (2_000_000_000, DispatchClass::Operational)] fn renounce_candidacy(origin) { let who = ensure_signed(origin)?; @@ -487,7 +488,7 @@ decl_module! { /// Reads: O(do_phragmen) /// Writes: O(do_phragmen) /// # - #[weight = SimpleDispatchInfo::FixedOperational(2_000_000_000)] + #[weight = (2_000_000_000, DispatchClass::Operational)] fn remove_member(origin, who: ::Source) -> DispatchResult { ensure_root(origin)?; let who = T::Lookup::lookup(who)?; diff --git a/frame/elections/src/lib.rs b/frame/elections/src/lib.rs index a2398ad4859..a9166af9278 100644 --- a/frame/elections/src/lib.rs +++ b/frame/elections/src/lib.rs @@ -30,7 +30,7 @@ use sp_runtime::{ }; use frame_support::{ decl_storage, decl_event, ensure, decl_module, decl_error, - weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}, + weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, traits::{ Currency, ExistenceRequirement, Get, LockableCurrency, LockIdentifier, BalanceStatus, OnUnbalanced, ReservableCurrency, WithdrawReason, WithdrawReasons, ChangeMembers @@ -405,13 +405,13 @@ decl_module! { /// - Two extra DB entries, one DB change. /// - Argument `votes` is limited in length to number of candidates. /// # - #[weight = SimpleDispatchInfo::FixedNormal(2_500_000_000)] + #[weight = 2_500_000_000] fn set_approvals( origin, votes: Vec, #[compact] index: VoteIndex, hint: SetIndex, - #[compact] value: BalanceOf + #[compact] value: BalanceOf, ) -> DispatchResult { let who = ensure_signed(origin)?; Self::do_set_approvals(who, votes, index, hint, value) @@ -423,12 +423,12 @@ decl_module! { /// # /// - Same as `set_approvals` with one additional storage read. /// # - #[weight = SimpleDispatchInfo::FixedNormal(2_500_000_000)] + #[weight = 2_500_000_000] fn proxy_set_approvals(origin, votes: Vec, #[compact] index: VoteIndex, hint: SetIndex, - #[compact] value: BalanceOf + #[compact] value: BalanceOf, ) -> DispatchResult { let who = Self::proxy(ensure_signed(origin)?).ok_or(Error::::NotProxy)?; Self::do_set_approvals(who, votes, index, hint, value) @@ -446,13 +446,13 @@ decl_module! { /// - O(1). /// - Two fewer DB entries, one DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(2_500_000_000)] + #[weight = 2_500_000_000] fn reap_inactive_voter( origin, #[compact] reporter_index: u32, who: ::Source, #[compact] who_index: u32, - #[compact] assumed_vote_index: VoteIndex + #[compact] assumed_vote_index: VoteIndex, ) { let reporter = ensure_signed(origin)?; let who = T::Lookup::lookup(who)?; @@ -520,7 +520,7 @@ decl_module! { /// - O(1). /// - Two fewer DB entries, one DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(1_250_000_000)] + #[weight = 1_250_000_000] fn retract_voter(origin, #[compact] index: u32) { let who = ensure_signed(origin)?; @@ -548,7 +548,7 @@ decl_module! { /// - Independent of input. /// - Three DB changes. /// # - #[weight = SimpleDispatchInfo::FixedNormal(2_500_000_000)] + #[weight = 2_500_000_000] fn submit_candidacy(origin, #[compact] slot: u32) { let who = ensure_signed(origin)?; @@ -585,12 +585,12 @@ decl_module! { /// - O(voters) compute. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(10_000_000_000)] + #[weight = 10_000_000_000] fn present_winner( origin, candidate: ::Source, #[compact] total: BalanceOf, - #[compact] index: VoteIndex + #[compact] index: VoteIndex, ) -> DispatchResult { let who = ensure_signed(origin)?; ensure!( @@ -659,7 +659,7 @@ decl_module! { /// Set the desired member count; if lower than the current count, then seats will not be up /// election when they expire. If more, then a new vote will be started if one is not /// already in progress. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_desired_seats(origin, #[compact] count: u32) { ensure_root(origin)?; DesiredSeats::put(count); @@ -669,7 +669,7 @@ decl_module! { /// /// Note: A tally should happen instantly (if not already in a presentation /// period) to fill the seat if removal means that the desired members are not met. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn remove_member(origin, who: ::Source) { ensure_root(origin)?; let who = T::Lookup::lookup(who)?; @@ -684,7 +684,7 @@ decl_module! { /// Set the presentation duration. If there is currently a vote being presented for, will /// invoke `finalize_vote`. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_presentation_duration(origin, #[compact] count: T::BlockNumber) { ensure_root(origin)?; >::put(count); @@ -692,7 +692,7 @@ decl_module! { /// Set the presentation duration. If there is current a vote being presented for, will /// invoke `finalize_vote`. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_term_duration(origin, #[compact] count: T::BlockNumber) { ensure_root(origin)?; >::put(count); diff --git a/frame/evm/src/lib.rs b/frame/evm/src/lib.rs index f67ab767ed3..48946858dff 100644 --- a/frame/evm/src/lib.rs +++ b/frame/evm/src/lib.rs @@ -29,7 +29,6 @@ use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass, FunctionOf}; use frame_support::traits::{Currency, WithdrawReason, ExistenceRequirement}; use frame_system::{self as system, ensure_signed}; use sp_runtime::ModuleId; -use frame_support::weights::SimpleDispatchInfo; use sp_core::{U256, H256, H160, Hasher}; use sp_runtime::{ DispatchResult, traits::{UniqueSaturatedInto, AccountIdConversion, SaturatedConversion}, @@ -191,7 +190,7 @@ decl_module! { fn deposit_event() = default; /// Deposit balance from currency/balances module into EVM. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn deposit_balance(origin, value: BalanceOf) { let sender = ensure_signed(origin)?; @@ -212,7 +211,7 @@ decl_module! { } /// Withdraw balance from EVM into currency/balances module. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn withdraw_balance(origin, value: BalanceOf) { let sender = ensure_signed(origin)?; let address = T::ConvertAccountId::convert_account_id(&sender); diff --git a/frame/example-offchain-worker/src/lib.rs b/frame/example-offchain-worker/src/lib.rs index d2ebd1159e2..9936da88185 100644 --- a/frame/example-offchain-worker/src/lib.rs +++ b/frame/example-offchain-worker/src/lib.rs @@ -53,7 +53,7 @@ use frame_support::{ debug, dispatch::DispatchResult, decl_module, decl_storage, decl_event, traits::Get, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, }; use sp_core::crypto::KeyTypeId; use sp_runtime::{ @@ -189,7 +189,7 @@ decl_module! { /// working and receives (and provides) meaningful data. /// This example is not focused on correctness of the oracle itself, but rather its /// purpose is to showcase offchain worker capabilities. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn submit_price(origin, price: u32) -> DispatchResult { // Retrieve sender of the transaction. let who = ensure_signed(origin)?; @@ -214,7 +214,7 @@ decl_module! { /// /// This example is not focused on correctness of the oracle itself, but rather its /// purpose is to showcase offchain worker capabilities. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn submit_price_unsigned(origin, _block_number: T::BlockNumber, price: u32) -> DispatchResult { @@ -228,7 +228,7 @@ decl_module! { Ok(()) } - #[weight = SimpleDispatchInfo::FixedNormal(10_000)] + #[weight = MINIMUM_WEIGHT] pub fn submit_price_unsigned_with_signed_payload( origin, price_payload: PricePayload, diff --git a/frame/example/src/lib.rs b/frame/example/src/lib.rs index 97cad2856a0..e7a5a0c02e5 100644 --- a/frame/example/src/lib.rs +++ b/frame/example/src/lib.rs @@ -256,10 +256,7 @@ use sp_std::marker::PhantomData; use frame_support::{ dispatch::DispatchResult, decl_module, decl_storage, decl_event, - weights::{ - SimpleDispatchInfo, DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, - MINIMUM_WEIGHT, - }, + weights::{DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, MINIMUM_WEIGHT}, }; use sp_std::prelude::*; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -469,7 +466,7 @@ decl_module! { // weight (a numeric representation of pure execution time and difficulty) of the // transaction and the latter demonstrates the [`DispatchClass`] of the call. A higher // weight means a larger transaction (less of which can be placed in a single block). - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn accumulate_dummy(origin, increase_by: T::Balance) -> DispatchResult { // This is a public call, so we ensure that the origin is some signed account. let _sender = ensure_signed(origin)?; @@ -518,8 +515,7 @@ decl_module! { // The signature could also look like: `fn on_initialize()`. // This function could also very well have a weight annotation, similar to any other. The - // only difference being that if it is not annotated, the default is - // `SimpleDispatchInfo::zero()`, which resolves into no weight. + // only difference is that it mut be returned, not annotated. fn on_initialize(_n: T::BlockNumber) -> Weight { // Anything that needs to be done at the start of the block. // We don't do anything here. diff --git a/frame/executive/src/lib.rs b/frame/executive/src/lib.rs index f3a4388dcfd..52ef068b3e7 100644 --- a/frame/executive/src/lib.rs +++ b/frame/executive/src/lib.rs @@ -411,22 +411,22 @@ mod tests { use hex_literal::hex; mod custom { - use frame_support::weights::{SimpleDispatchInfo, Weight}; + use frame_support::weights::{Weight, DispatchClass}; pub trait Trait: frame_system::Trait {} frame_support::decl_module! { pub struct Module for enum Call where origin: T::Origin { - #[weight = SimpleDispatchInfo::FixedNormal(100)] + #[weight = 100] fn some_function(origin) { // NOTE: does not make any different. let _ = frame_system::ensure_signed(origin); } - #[weight = SimpleDispatchInfo::FixedOperational(200)] + #[weight = (200, DispatchClass::Operational)] fn some_root_operation(origin) { let _ = frame_system::ensure_root(origin); } - #[weight = SimpleDispatchInfo::InsecureFreeNormal] + #[weight = 0] fn some_unsigned_message(origin) { let _ = frame_system::ensure_none(origin); } diff --git a/frame/finality-tracker/src/lib.rs b/frame/finality-tracker/src/lib.rs index 54506784a9f..72d4d1c9167 100644 --- a/frame/finality-tracker/src/lib.rs +++ b/frame/finality-tracker/src/lib.rs @@ -23,7 +23,7 @@ use sp_runtime::traits::{One, Zero, SaturatedConversion}; use sp_std::{prelude::*, result, cmp, vec}; use frame_support::{decl_module, decl_storage, decl_error, ensure}; use frame_support::traits::Get; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::{MINIMUM_WEIGHT, DispatchClass}; use frame_system::{ensure_none, Trait as SystemTrait}; use sp_finality_tracker::{INHERENT_IDENTIFIER, FinalizedInherentData}; @@ -77,7 +77,7 @@ decl_module! { /// Hint that the author of this block thinks the best finalized /// block is the given number. - #[weight = SimpleDispatchInfo::FixedMandatory(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] fn final_hint(origin, #[compact] hint: T::BlockNumber) { ensure_none(origin)?; ensure!(!::Update::exists(), Error::::AlreadyUpdated); @@ -212,7 +212,9 @@ mod tests { traits::{BlakeTwo256, IdentityLookup, Header as HeaderT}, }; use frame_support::{ - assert_ok, impl_outer_origin, parameter_types, weights::Weight, traits::OnFinalize + assert_ok, impl_outer_origin, parameter_types, + weights::Weight, + traits::OnFinalize, }; use frame_system as system; use std::cell::RefCell; diff --git a/frame/generic-asset/src/lib.rs b/frame/generic-asset/src/lib.rs index 720ccd85ccc..b56c7243361 100644 --- a/frame/generic-asset/src/lib.rs +++ b/frame/generic-asset/src/lib.rs @@ -164,7 +164,7 @@ use sp_std::prelude::*; use sp_std::{cmp, result, fmt::Debug}; use frame_support::{ decl_event, decl_module, decl_storage, ensure, decl_error, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, traits::{ Currency, ExistenceRequirement, Imbalance, LockIdentifier, LockableCurrency, ReservableCurrency, SignedImbalance, WithdrawReason, WithdrawReasons, TryDrop, BalanceStatus, @@ -361,14 +361,14 @@ decl_module! { fn deposit_event() = default; /// Create a new kind of asset. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn create(origin, options: AssetOptions) -> DispatchResult { let origin = ensure_signed(origin)?; Self::create_asset(None, Some(origin), options) } /// Transfer some liquid free balance to another account. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn transfer(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, #[compact] amount: T::Balance) { let origin = ensure_signed(origin)?; ensure!(!amount.is_zero(), Error::::ZeroAmount); @@ -378,7 +378,7 @@ decl_module! { /// Updates permission for a given `asset_id` and an account. /// /// The `origin` must have `update` permission. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn update_permission( origin, #[compact] asset_id: T::AssetId, @@ -401,7 +401,7 @@ decl_module! { /// Mints an asset, increases its total issuance. /// The origin must have `mint` permissions. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn mint(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, amount: T::Balance) -> DispatchResult { let who = ensure_signed(origin)?; Self::mint_free(&asset_id, &who, &to, &amount)?; @@ -411,7 +411,7 @@ decl_module! { /// Burns an asset, decreases its total issuance. /// The `origin` must have `burn` permissions. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn burn(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, amount: T::Balance) -> DispatchResult { let who = ensure_signed(origin)?; Self::burn_free(&asset_id, &who, &to, &amount)?; @@ -421,7 +421,7 @@ decl_module! { /// Can be used to create reserved tokens. /// Requires Root call. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn create_reserved( origin, asset_id: T::AssetId, diff --git a/frame/grandpa/src/lib.rs b/frame/grandpa/src/lib.rs index 10cc8162db3..49326c71cb2 100644 --- a/frame/grandpa/src/lib.rs +++ b/frame/grandpa/src/lib.rs @@ -33,7 +33,7 @@ pub use sp_finality_grandpa as fg_primitives; use sp_std::prelude::*; use codec::{self as codec, Encode, Decode}; use frame_support::{decl_event, decl_storage, decl_module, decl_error, storage}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use sp_runtime::{ DispatchResult, generic::{DigestItem, OpaqueDigestItemId}, traits::Zero, Perbill, }; @@ -185,7 +185,7 @@ decl_module! { fn deposit_event() = default; /// Report some misbehavior. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn report_misbehavior(origin, _report: Vec) { ensure_signed(origin)?; // FIXME: https://github.com/paritytech/substrate/issues/1112 diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index ddb9bdcce21..31eb93f04b2 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -74,7 +74,7 @@ use sp_runtime::traits::{StaticLookup, Zero, AppendZerosInput}; use frame_support::{ decl_module, decl_event, decl_storage, ensure, decl_error, traits::{Currency, ReservableCurrency, OnUnbalanced, Get, BalanceStatus, EnsureOrigin}, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, }; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -474,7 +474,7 @@ decl_module! { /// - One storage mutation (codec `O(R)`). /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn add_registrar(origin, account: T::AccountId) { T::RegistrarOrigin::try_origin(origin) .map(|_| ()) @@ -506,7 +506,7 @@ decl_module! { /// - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`). /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_identity(origin, info: IdentityInfo) { let sender = ensure_signed(origin)?; let extra_fields = info.additional.len() as u32; @@ -552,7 +552,7 @@ decl_module! { /// - At most O(2 * S + 1) storage mutations; codec complexity `O(1 * S + S * 1)`); /// one storage-exists. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_subs(origin, subs: Vec<(T::AccountId, Data)>) { let sender = ensure_signed(origin)?; ensure!(>::contains_key(&sender), Error::::NotFound); @@ -599,7 +599,7 @@ decl_module! { /// - `S + 2` storage deletions. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn clear_identity(origin) { let sender = ensure_signed(origin)?; @@ -638,7 +638,7 @@ decl_module! { /// - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn request_judgement(origin, #[compact] reg_index: RegistrarIndex, #[compact] max_fee: BalanceOf, @@ -684,7 +684,7 @@ decl_module! { /// - One storage mutation `O(R + X)`. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn cancel_request(origin, reg_index: RegistrarIndex) { let sender = ensure_signed(origin)?; let mut id = >::get(&sender).ok_or(Error::::NoIdentity)?; @@ -715,7 +715,7 @@ decl_module! { /// - `O(R)`. /// - One storage mutation `O(R)`. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_fee(origin, #[compact] index: RegistrarIndex, #[compact] fee: BalanceOf, @@ -742,7 +742,7 @@ decl_module! { /// - `O(R)`. /// - One storage mutation `O(R)`. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_account_id(origin, #[compact] index: RegistrarIndex, new: T::AccountId, @@ -769,7 +769,7 @@ decl_module! { /// - `O(R)`. /// - One storage mutation `O(R)`. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_fields(origin, #[compact] index: RegistrarIndex, fields: IdentityFields, @@ -803,7 +803,7 @@ decl_module! { /// - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn provide_judgement(origin, #[compact] reg_index: RegistrarIndex, target: ::Source, @@ -852,7 +852,7 @@ decl_module! { /// - `S + 2` storage mutations. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn kill_identity(origin, target: ::Source) { T::ForceOrigin::try_origin(origin) .map(|_| ()) diff --git a/frame/im-online/src/lib.rs b/frame/im-online/src/lib.rs index 813b11bbc93..188f7056768 100644 --- a/frame/im-online/src/lib.rs +++ b/frame/im-online/src/lib.rs @@ -43,7 +43,7 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_im_online::{self as im_online}; //! @@ -51,7 +51,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn is_online(origin, authority_index: u32) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _is_online = >::is_online(authority_index); @@ -95,7 +95,7 @@ use sp_staking::{ use frame_support::{ decl_module, decl_event, decl_storage, Parameter, debug, decl_error, traits::Get, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, }; use frame_system::{self as system, ensure_none}; use frame_system::offchain::{ @@ -315,7 +315,7 @@ decl_module! { fn deposit_event() = default; - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn heartbeat( origin, heartbeat: Heartbeat, diff --git a/frame/indices/src/lib.rs b/frame/indices/src/lib.rs index 2a66af7e7f8..f4f5b69e8cd 100644 --- a/frame/indices/src/lib.rs +++ b/frame/indices/src/lib.rs @@ -25,7 +25,7 @@ use sp_runtime::traits::{ StaticLookup, Member, LookupError, Zero, One, BlakeTwo256, Hash, Saturating, AtLeast32Bit }; use frame_support::{Parameter, decl_module, decl_error, decl_event, decl_storage, ensure}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}; +use frame_support::weights::{Weight, MINIMUM_WEIGHT}; use frame_support::dispatch::DispatchResult; use frame_support::traits::{Currency, ReservableCurrency, Get, BalanceStatus::Reserved}; use frame_support::storage::migration::take_storage_value; @@ -121,7 +121,7 @@ decl_module! { /// - One reserve operation. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn claim(origin, index: T::AccountIndex) { let who = ensure_signed(origin)?; @@ -149,7 +149,7 @@ decl_module! { /// - One transfer operation. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn transfer(origin, new: T::AccountId, index: T::AccountIndex) { let who = ensure_signed(origin)?; ensure!(who != new, Error::::NotTransfer); @@ -180,7 +180,7 @@ decl_module! { /// - One reserve operation. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn free(origin, index: T::AccountIndex) { let who = ensure_signed(origin)?; @@ -209,7 +209,7 @@ decl_module! { /// - Up to one reserve operation. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn force_transfer(origin, new: T::AccountId, index: T::AccountIndex) { ensure_root(origin)?; diff --git a/frame/membership/src/lib.rs b/frame/membership/src/lib.rs index e968be19a6b..188a0b268c1 100644 --- a/frame/membership/src/lib.rs +++ b/frame/membership/src/lib.rs @@ -26,7 +26,6 @@ use sp_std::prelude::*; use frame_support::{ decl_module, decl_storage, decl_event, decl_error, traits::{ChangeMembers, InitializeMembers, EnsureOrigin}, - weights::SimpleDispatchInfo, }; use frame_system::{self as system, ensure_root, ensure_signed}; @@ -118,7 +117,7 @@ decl_module! { /// Add a member `who` to the set. /// /// May only be called from `AddOrigin` or root. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn add_member(origin, who: T::AccountId) { T::AddOrigin::try_origin(origin) .map(|_| ()) @@ -137,7 +136,7 @@ decl_module! { /// Remove a member `who` from the set. /// /// May only be called from `RemoveOrigin` or root. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn remove_member(origin, who: T::AccountId) { T::RemoveOrigin::try_origin(origin) .map(|_| ()) @@ -159,7 +158,7 @@ decl_module! { /// May only be called from `SwapOrigin` or root. /// /// Prime membership is *not* passed from `remove` to `add`, if extant. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn swap_member(origin, remove: T::AccountId, add: T::AccountId) { T::SwapOrigin::try_origin(origin) .map(|_| ()) @@ -188,7 +187,7 @@ decl_module! { /// pass `members` pre-sorted. /// /// May only be called from `ResetOrigin` or root. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn reset_members(origin, members: Vec) { T::ResetOrigin::try_origin(origin) .map(|_| ()) @@ -211,7 +210,7 @@ decl_module! { /// May only be called from `Signed` origin of a current member. /// /// Prime membership is passed from the origin account to `new`, if extant. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn change_key(origin, new: T::AccountId) { let remove = ensure_signed(origin)?; @@ -239,7 +238,7 @@ decl_module! { } /// Set the prime member. Must be a current member. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_prime(origin, who: T::AccountId) { T::PrimeOrigin::try_origin(origin) .map(|_| ()) @@ -250,7 +249,7 @@ decl_module! { } /// Remove the prime member if it exists. - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn clear_prime(origin) { T::PrimeOrigin::try_origin(origin) .map(|_| ()) diff --git a/frame/nicks/src/lib.rs b/frame/nicks/src/lib.rs index b8a23594504..97a50740461 100644 --- a/frame/nicks/src/lib.rs +++ b/frame/nicks/src/lib.rs @@ -45,7 +45,6 @@ use sp_runtime::{ use frame_support::{ decl_module, decl_event, decl_storage, ensure, decl_error, traits::{Currency, EnsureOrigin, ReservableCurrency, OnUnbalanced, Get}, - weights::SimpleDispatchInfo, }; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -141,7 +140,7 @@ decl_module! { /// - One storage read/write. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn set_name(origin, name: Vec) { let sender = ensure_signed(origin)?; @@ -171,7 +170,7 @@ decl_module! { /// - One storage read/write. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(70_000_000)] + #[weight = 70_000_000] fn clear_name(origin) { let sender = ensure_signed(origin)?; @@ -195,7 +194,7 @@ decl_module! { /// - One storage read/write. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(70_000_000)] + #[weight = 70_000_000] fn kill_name(origin, target: ::Source) { T::ForceOrigin::try_origin(origin) .map(|_| ()) @@ -223,7 +222,7 @@ decl_module! { /// - One storage read/write. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(70_000_000)] + #[weight = 70_000_000] fn force_name(origin, target: ::Source, name: Vec) { T::ForceOrigin::try_origin(origin) .map(|_| ()) diff --git a/frame/randomness-collective-flip/src/lib.rs b/frame/randomness-collective-flip/src/lib.rs index cf6dadf7cb9..b779a2757b5 100644 --- a/frame/randomness-collective-flip/src/lib.rs +++ b/frame/randomness-collective-flip/src/lib.rs @@ -36,13 +36,13 @@ //! ### Example - Get random seed for the current block //! //! ``` -//! use frame_support::{decl_module, dispatch, traits::Randomness, weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}}; +//! use frame_support::{decl_module, dispatch, traits::Randomness, weights::MINIMUM_WEIGHT}; //! //! pub trait Trait: frame_system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn random_module_example(origin) -> dispatch::DispatchResult { //! let _random_value = >::random(&b"my context"[..]); //! Ok(()) diff --git a/frame/recovery/src/lib.rs b/frame/recovery/src/lib.rs index 9f30061f935..e0397cc1a5d 100644 --- a/frame/recovery/src/lib.rs +++ b/frame/recovery/src/lib.rs @@ -159,7 +159,7 @@ use codec::{Encode, Decode}; use frame_support::{ decl_module, decl_event, decl_storage, decl_error, ensure, - Parameter, RuntimeDebug, weights::{MINIMUM_WEIGHT, GetDispatchInfo, SimpleDispatchInfo, FunctionOf}, + Parameter, RuntimeDebug, weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf}, traits::{Currency, ReservableCurrency, Get, BalanceStatus}, dispatch::PostDispatchInfo, }; @@ -365,7 +365,7 @@ decl_module! { /// - One storage write O(1) /// - One event /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn set_recovered(origin, lost: T::AccountId, rescuer: T::AccountId) { ensure_root(origin)?; // Create the recovery storage item. @@ -400,7 +400,7 @@ decl_module! { /// /// Total Complexity: O(F + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn create_recovery(origin, friends: Vec, threshold: u16, @@ -460,7 +460,7 @@ decl_module! { /// /// Total Complexity: O(F + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn initiate_recovery(origin, account: T::AccountId) { let who = ensure_signed(origin)?; // Check that the account is recoverable @@ -506,7 +506,7 @@ decl_module! { /// /// Total Complexity: O(F + logF + V + logV) /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn vouch_recovery(origin, lost: T::AccountId, rescuer: T::AccountId) { let who = ensure_signed(origin)?; // Get the recovery configuration for the lost account. @@ -545,7 +545,7 @@ decl_module! { /// /// Total Complexity: O(F + V) /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn claim_recovery(origin, account: T::AccountId) { let who = ensure_signed(origin)?; // Get the recovery configuration for the lost account @@ -590,7 +590,7 @@ decl_module! { /// /// Total Complexity: O(V + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(30_000_000)] + #[weight = 30_000_000] fn close_recovery(origin, rescuer: T::AccountId) { let who = ensure_signed(origin)?; // Take the active recovery process started by the rescuer for this account. @@ -622,7 +622,7 @@ decl_module! { /// /// Total Complexity: O(F + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(30_000_000)] + #[weight = 30_000_000] fn remove_recovery(origin) { let who = ensure_signed(origin)?; // Check there are no active recoveries @@ -647,7 +647,7 @@ decl_module! { /// # /// - One storage mutation to check account is recovered by `who`. O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn cancel_recovered(origin, account: T::AccountId) { let who = ensure_signed(origin)?; // Check `who` is allowed to make a call on behalf of `account` diff --git a/frame/scored-pool/src/lib.rs b/frame/scored-pool/src/lib.rs index eca877f0962..8cbf20af805 100644 --- a/frame/scored-pool/src/lib.rs +++ b/frame/scored-pool/src/lib.rs @@ -54,7 +54,7 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_scored_pool::{self as scored_pool}; //! @@ -62,7 +62,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn candidate(origin) -> dispatch::DispatchResult { //! let who = ensure_signed(origin)?; //! @@ -98,7 +98,7 @@ use sp_std::{ use frame_support::{ decl_module, decl_storage, decl_event, ensure, decl_error, traits::{EnsureOrigin, ChangeMembers, InitializeMembers, Currency, Get, ReservableCurrency}, - weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}, + weights::{Weight, MINIMUM_WEIGHT}, }; use frame_system::{self as system, ensure_root, ensure_signed}; use sp_runtime::{ @@ -267,7 +267,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the transactor in the `Pool`. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn submit_candidacy(origin) { let who = ensure_signed(origin)?; ensure!(!>::contains_key(&who), Error::::AlreadyInPool); @@ -297,7 +297,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the transactor in the `Pool`. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn withdraw_candidacy( origin, index: u32 @@ -317,7 +317,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of `dest` in the `Pool`. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn kick( origin, dest: ::Source, @@ -342,7 +342,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the `dest` in the `Pool`. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn score( origin, dest: ::Source, @@ -383,7 +383,7 @@ decl_module! { /// (this happens each `Period`). /// /// May only be called from root. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn change_member_count(origin, count: u32) { ensure_root(origin)?; >::put(&count); diff --git a/frame/session/src/lib.rs b/frame/session/src/lib.rs index f539004189a..afab71734ea 100644 --- a/frame/session/src/lib.rs +++ b/frame/session/src/lib.rs @@ -110,7 +110,7 @@ use frame_support::{ Get, FindAuthor, ValidatorRegistration, EstimateNextSessionRotation, EstimateNextNewSession, }, dispatch::{self, DispatchResult, DispatchError}, - weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}, + weights::{Weight, MINIMUM_WEIGHT}, }; use frame_system::{self as system, ensure_signed}; @@ -498,7 +498,7 @@ decl_module! { /// - Increases system account refs by one on success iff there were previously no keys set. /// In this case, purge_keys will need to be called before the account can be removed. /// # - #[weight = SimpleDispatchInfo::FixedNormal(150_000_000)] + #[weight = 150_000_000] pub fn set_keys(origin, keys: T::Keys, proof: Vec) -> dispatch::DispatchResult { let who = ensure_signed(origin)?; @@ -519,7 +519,7 @@ decl_module! { /// - Removes N + 1 DB entries. /// - Reduces system account refs by one on success. /// # - #[weight = SimpleDispatchInfo::FixedNormal(150_000_000)] + #[weight = 150_000_000] pub fn purge_keys(origin) { let who = ensure_signed(origin)?; Self::do_purge_keys(&who)?; diff --git a/frame/society/src/lib.rs b/frame/society/src/lib.rs index 0c02c584ba6..2feaab24b11 100644 --- a/frame/society/src/lib.rs +++ b/frame/society/src/lib.rs @@ -260,7 +260,7 @@ use sp_runtime::{Percent, ModuleId, RuntimeDebug, } }; use frame_support::{decl_error, decl_module, decl_storage, decl_event, ensure, dispatch::DispatchResult}; -use frame_support::weights::{SimpleDispatchInfo, Weight, MINIMUM_WEIGHT}; +use frame_support::weights::{Weight, MINIMUM_WEIGHT}; use frame_support::traits::{ Currency, ReservableCurrency, Randomness, Get, ChangeMembers, BalanceStatus, ExistenceRequirement::AllowDeath, EnsureOrigin @@ -527,7 +527,7 @@ decl_module! { /// /// Total Complexity: O(M + B + C + logM + logB + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] pub fn bid(origin, value: BalanceOf) -> DispatchResult { let who = ensure_signed(origin)?; ensure!(!>::contains_key(&who), Error::::Suspended); @@ -566,7 +566,7 @@ decl_module! { /// /// Total Complexity: O(B + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(20_000_000)] + #[weight = 20_000_000] pub fn unbid(origin, pos: u32) -> DispatchResult { let who = ensure_signed(origin)?; @@ -636,7 +636,7 @@ decl_module! { /// /// Total Complexity: O(M + B + C + logM + logB + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] pub fn vouch(origin, who: T::AccountId, value: BalanceOf, tip: BalanceOf) -> DispatchResult { let voucher = ensure_signed(origin)?; // Check user is not suspended. @@ -677,7 +677,7 @@ decl_module! { /// /// Total Complexity: O(B) /// # - #[weight = SimpleDispatchInfo::FixedNormal(20_000_000)] + #[weight = 20_000_000] pub fn unvouch(origin, pos: u32) -> DispatchResult { let voucher = ensure_signed(origin)?; ensure!(Self::vouching(&voucher) == Some(VouchingStatus::Vouching), Error::::NotVouching); @@ -715,7 +715,7 @@ decl_module! { /// /// Total Complexity: O(M + logM + C) /// # - #[weight = SimpleDispatchInfo::FixedNormal(30_000_000)] + #[weight = 30_000_000] pub fn vote(origin, candidate: ::Source, approve: bool) { let voter = ensure_signed(origin)?; let candidate = T::Lookup::lookup(candidate)?; @@ -746,7 +746,7 @@ decl_module! { /// /// Total Complexity: O(M + logM) /// # - #[weight = SimpleDispatchInfo::FixedNormal(20_000_000)] + #[weight = 20_000_000] pub fn defender_vote(origin, approve: bool) { let voter = ensure_signed(origin)?; let members = >::get(); @@ -778,7 +778,7 @@ decl_module! { /// /// Total Complexity: O(M + logM + P + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(30_000_000)] + #[weight = 30_000_000] pub fn payout(origin) { let who = ensure_signed(origin)?; @@ -820,7 +820,7 @@ decl_module! { /// /// Total Complexity: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn found(origin, founder: T::AccountId, max_members: u32, rules: Vec) { T::FounderSetOrigin::ensure_origin(origin)?; ensure!(!>::exists(), Error::::AlreadyFounded); @@ -847,7 +847,7 @@ decl_module! { /// /// Total Complexity: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(20_000_000)] + #[weight = 20_000_000] fn unfound(origin) { let founder = ensure_signed(origin)?; ensure!(Founder::::get() == Some(founder.clone()), Error::::NotFounder); @@ -889,7 +889,7 @@ decl_module! { /// /// Total Complexity: O(M + logM + B) /// # - #[weight = SimpleDispatchInfo::FixedNormal(30_000_000)] + #[weight = 30_000_000] fn judge_suspended_member(origin, who: T::AccountId, forgive: bool) { T::SuspensionJudgementOrigin::ensure_origin(origin)?; ensure!(>::contains_key(&who), Error::::NotSuspended); @@ -960,7 +960,7 @@ decl_module! { /// /// Total Complexity: O(M + logM + B + X) /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn judge_suspended_candidate(origin, who: T::AccountId, judgement: Judgement) { T::SuspensionJudgementOrigin::ensure_origin(origin)?; if let Some((value, kind)) = >::get(&who) { @@ -1020,7 +1020,7 @@ decl_module! { /// /// Total Complexity: O(1) /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn set_max_members(origin, max: u32) { ensure_root(origin)?; ensure!(max > 1, Error::::MaxMembers); diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 25d9a10709d..34b6a4f7958 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -150,7 +150,7 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_staking::{self as staking}; //! @@ -159,7 +159,7 @@ //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { //! /// Reward a validator. -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn reward_myself(origin) -> dispatch::DispatchResult { //! let reported = ensure_signed(origin)?; //! >::reward_by_ids(vec![(reported, 10)]); @@ -291,7 +291,7 @@ use sp_std::{ use codec::{HasCompact, Encode, Decode}; use frame_support::{ decl_module, decl_event, decl_storage, ensure, decl_error, debug, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT, Weight}, + weights::{MINIMUM_WEIGHT, Weight, DispatchClass}, storage::IterableStorageMap, dispatch::{IsSubType, DispatchResult}, traits::{ @@ -1268,7 +1268,7 @@ decl_module! { /// NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned /// unless the `origin` falls below _existential deposit_ and gets removed as dust. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] pub fn bond(origin, controller: ::Source, #[compact] value: BalanceOf, @@ -1332,7 +1332,7 @@ decl_module! { /// - O(1). /// - One DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn bond_extra(origin, #[compact] max_additional: BalanceOf) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let stash = ensure_signed(origin)?; @@ -1378,7 +1378,7 @@ decl_module! { /// `withdraw_unbonded`. /// - One DB entry. /// - #[weight = SimpleDispatchInfo::FixedNormal(400_000_000)] + #[weight = 400_000_000] fn unbond(origin, #[compact] value: BalanceOf) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1426,7 +1426,7 @@ decl_module! { /// - Contains a limited number of reads, yet the size of which could be large based on `ledger`. /// - Writes are limited to the `origin` account key. /// # - #[weight = SimpleDispatchInfo::FixedNormal(400_000_000)] + #[weight = 400_000_000] fn withdraw_unbonded(origin) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1469,7 +1469,7 @@ decl_module! { /// - Contains a limited number of reads. /// - Writes are limited to the `origin` account key. /// # - #[weight = SimpleDispatchInfo::FixedNormal(750_000_000)] + #[weight = 750_000_000] pub fn validate(origin, prefs: ValidatorPrefs) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1492,7 +1492,7 @@ decl_module! { /// which is capped at CompactAssignments::LIMIT. /// - Both the reads and writes follow a similar pattern. /// # - #[weight = SimpleDispatchInfo::FixedNormal(750_000_000)] + #[weight = 750_000_000] pub fn nominate(origin, targets: Vec<::Source>) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1527,7 +1527,7 @@ decl_module! { /// - Contains one read. /// - Writes are limited to the `origin` account key. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn chill(origin) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1546,7 +1546,7 @@ decl_module! { /// - Contains a limited number of reads. /// - Writes are limited to the `origin` account key. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn set_payee(origin, payee: RewardDestination) { let controller = ensure_signed(origin)?; let ledger = Self::ledger(&controller).ok_or(Error::::NotController)?; @@ -1565,7 +1565,7 @@ decl_module! { /// - Contains a limited number of reads. /// - Writes are limited to the `origin` account key. /// # - #[weight = SimpleDispatchInfo::FixedNormal(750_000_000)] + #[weight = 750_000_000] fn set_controller(origin, controller: ::Source) { let stash = ensure_signed(origin)?; let old_controller = Self::bonded(&stash).ok_or(Error::::NotStash)?; @@ -1582,7 +1582,7 @@ decl_module! { } /// The ideal number of validators. - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000)] + #[weight = 5_000_000] fn set_validator_count(origin, #[compact] new: u32) { ensure_root(origin)?; ValidatorCount::put(new); @@ -1593,7 +1593,7 @@ decl_module! { /// # /// - No arguments. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000)] + #[weight = 5_000_000] fn force_no_eras(origin) { ensure_root(origin)?; ForceEra::put(Forcing::ForceNone); @@ -1605,21 +1605,21 @@ decl_module! { /// # /// - No arguments. /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000)] + #[weight = 5_000_000] fn force_new_era(origin) { ensure_root(origin)?; ForceEra::put(Forcing::ForceNew); } /// Set the validators who cannot be slashed (if any). - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000)] + #[weight = 5_000_000] fn set_invulnerables(origin, validators: Vec) { ensure_root(origin)?; >::put(validators); } /// Force a current staker to become completely unstaked, immediately. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn force_unstake(origin, stash: T::AccountId) { ensure_root(origin)?; @@ -1635,7 +1635,7 @@ decl_module! { /// # /// - One storage write /// # - #[weight = SimpleDispatchInfo::FixedNormal(5_000_000)] + #[weight = 5_000_000] fn force_new_era_always(origin) { ensure_root(origin)?; ForceEra::put(Forcing::ForceAlways); @@ -1648,7 +1648,7 @@ decl_module! { /// # /// - One storage write. /// # - #[weight = SimpleDispatchInfo::FixedNormal(1_000_000_000)] + #[weight = 1_000_000_000] fn cancel_deferred_slash(origin, era: EraIndex, slash_indices: Vec) { T::SlashCancelOrigin::try_origin(origin) .map(|_| ()) @@ -1699,7 +1699,7 @@ decl_module! { /// maximum number of validators that may be nominated by a single nominator, it is /// bounded only economically (all nominators are required to place a minimum stake). /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn payout_nominator(origin, era: EraIndex, validators: Vec<(T::AccountId, u32)>) -> DispatchResult { @@ -1726,7 +1726,7 @@ decl_module! { /// - Time complexity: O(1). /// - Contains a limited number of reads and writes. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn payout_validator(origin, era: EraIndex) -> DispatchResult { let ctrl = ensure_signed(origin)?; Self::do_payout_validator(ctrl, era) @@ -1747,7 +1747,7 @@ decl_module! { /// - Time complexity: at most O(MaxNominatorRewardedPerValidator). /// - Contains a limited number of reads and writes. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn payout_stakers(origin, validator_stash: T::AccountId, era: EraIndex) -> DispatchResult { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); ensure_signed(origin)?; @@ -1763,7 +1763,7 @@ decl_module! { /// - Time complexity: O(1). Bounded by `MAX_UNLOCKING_CHUNKS`. /// - Storage changes: Can't increase storage, only decrease it. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn rebond(origin, #[compact] value: BalanceOf) { ensure!(Self::era_election_status().is_closed(), Error::::CallNotAllowed); let controller = ensure_signed(origin)?; @@ -1777,7 +1777,7 @@ decl_module! { /// Set history_depth value. /// /// Origin must be root. - #[weight = SimpleDispatchInfo::FixedOperational(500_000_000)] + #[weight = (500_000_000, DispatchClass::Operational)] fn set_history_depth(origin, #[compact] new_history_depth: EraIndex) { ensure_root(origin)?; if let Some(current_era) = Self::current_era() { @@ -1799,7 +1799,7 @@ decl_module! { /// This can be called from any origin. /// /// - `stash`: The stash account to reap. Its balance must be zero. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn reap_stash(_origin, stash: T::AccountId) { ensure!(T::Currency::total_balance(&stash).is_zero(), Error::::FundedTarget); Self::kill_stash(&stash)?; @@ -1880,7 +1880,7 @@ decl_module! { /// /// The weight of this call is 1/10th of the blocks total weight. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000_000)] + #[weight = 100_000_000_000] pub fn submit_election_solution( origin, winners: Vec, @@ -1903,7 +1903,7 @@ decl_module! { /// Note that this must pass the [`ValidateUnsigned`] check which only allows transactions /// from the local node to be included. In other words, only the block author can include a /// transaction in the block. - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000_000)] + #[weight = 100_000_000_000] pub fn submit_election_solution_unsigned( origin, winners: Vec, diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index b8cf9a353f3..ce0de2027c7 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -52,14 +52,14 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_root}; //! //! pub trait Trait: frame_system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn privileged_function(origin) -> dispatch::DispatchResult { //! ensure_root(origin)?; //! @@ -93,7 +93,7 @@ use sp_runtime::traits::{StaticLookup, Dispatchable}; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, ensure, }; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf}; +use frame_support::weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf}; use frame_system::{self as system, ensure_signed}; pub trait Trait: frame_system::Trait { @@ -151,7 +151,7 @@ decl_module! { /// - Limited storage reads. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn set_key(origin, new: ::Source) { // This is a public call, so we ensure that the origin is some signed account. let sender = ensure_signed(origin)?; diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 31e3efb001a..e25efec0a91 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -24,8 +24,8 @@ pub use frame_metadata::{ ModuleConstantMetadata, DefaultByte, DefaultByteGetter, ModuleErrorMetadata, ErrorMetadata }; pub use crate::weights::{ - SimpleDispatchInfo, GetDispatchInfo, DispatchInfo, WeighData, ClassifyDispatch, - TransactionPriority, Weight, PaysFee, PostDispatchInfo, WithPostDispatchInfo, + GetDispatchInfo, DispatchInfo, WeighData, ClassifyDispatch, TransactionPriority, Weight, + PaysFee, PostDispatchInfo, WithPostDispatchInfo, }; pub use sp_runtime::{traits::Dispatchable, DispatchError}; pub use crate::traits::{CallMetadata, GetCallMetadata, GetCallName}; @@ -70,14 +70,14 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { /// /// // Private functions are dispatchable, but not available to other /// // FRAME pallets. -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// fn my_function(origin, var: u64) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) @@ -85,7 +85,7 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// /// // Public functions are both dispatchable and available to other /// // FRAME pallets. -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// pub fn my_public_function(origin) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) @@ -113,17 +113,17 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// fn my_long_function(origin) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) /// } /// -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// fn my_short_function(origin) { /// // Your implementation /// } @@ -149,11 +149,10 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch::{DispatchResultWithPostInfo, WithPostDispatchInfo}; -/// # use frame_support::weights::SimpleDispatchInfo; /// # use frame_system::{self as system, Trait, ensure_signed}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { -/// #[weight = SimpleDispatchInfo::FixedNormal(1_000_000)] +/// #[weight = 1_000_000] /// fn my_long_function(origin, do_expensive_calc: bool) -> DispatchResultWithPostInfo { /// ensure_signed(origin).map_err(|e| e.with_weight(100_000))?; /// if do_expensive_calc { @@ -178,11 +177,11 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed, ensure_root}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// fn my_privileged_function(origin) -> dispatch::DispatchResult { /// ensure_root(origin)?; /// // Your implementation @@ -2072,25 +2071,25 @@ mod tests { decl_module! { pub struct Module for enum Call where origin: T::Origin, T::AccountId: From { /// Hi, this is a comment. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_0(_origin) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_1(_origin, #[compact] _data: u32,) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_2(_origin, _data: i32, _data2: String) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedNormal(3)] + #[weight = 3] fn aux_3(_origin) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_4(_origin, _data: i32) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_5(_origin, _data: i32, #[compact] _data2: u32,) -> DispatchResult { unreachable!() } - #[weight = SimpleDispatchInfo::FixedOperational(5)] + #[weight = (5, DispatchClass::Operational)] fn operational(_origin) { unreachable!() } fn on_initialize(n: T::BlockNumber,) -> Weight { if n.into() == 42 { panic!("on_initialize") } 7 } diff --git a/frame/support/src/error.rs b/frame/support/src/error.rs index 2fdba881564..49f15387981 100644 --- a/frame/support/src/error.rs +++ b/frame/support/src/error.rs @@ -35,7 +35,7 @@ pub use frame_metadata::{ModuleErrorMetadata, ErrorMetadata, DecodeDifferent}; /// /// ``` /// # use frame_support::{decl_error, decl_module}; -/// # use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +/// # use frame_support::weights::MINIMUM_WEIGHT; /// decl_error! { /// /// Errors that can occur in my module. /// pub enum MyError for Module { @@ -55,7 +55,7 @@ pub use frame_metadata::{ModuleErrorMetadata, ErrorMetadata, DecodeDifferent}; /// pub struct Module for enum Call where origin: T::Origin { /// type Error = MyError; /// -/// #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +/// #[weight = MINIMUM_WEIGHT] /// fn do_something(origin) -> frame_support::dispatch::DispatchResult { /// Err(MyError::::YouAreNotCoolEnough.into()) /// } diff --git a/frame/support/src/metadata.rs b/frame/support/src/metadata.rs index 6a3e41b8096..88fb1f7420a 100644 --- a/frame/support/src/metadata.rs +++ b/frame/support/src/metadata.rs @@ -334,7 +334,7 @@ mod tests { mod event_module { use crate::dispatch::DispatchResult; - use crate::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; + use crate::weights::MINIMUM_WEIGHT; pub trait Trait: super::system::Trait { type Balance; @@ -352,7 +352,7 @@ mod tests { pub struct Module for enum Call where origin: T::Origin { type Error = Error; - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn aux_0(_origin) -> DispatchResult { unreachable!() } } } diff --git a/frame/support/src/weights.rs b/frame/support/src/weights.rs index 79cfa1b3974..6cf2047cf6c 100644 --- a/frame/support/src/weights.rs +++ b/frame/support/src/weights.rs @@ -16,29 +16,104 @@ //! # Primitives for transaction weighting. //! -//! All dispatchable functions defined in `decl_module!` must provide two trait implementations: -//! - [`WeightData`]: To determine the weight of the dispatch. -//! - [`ClassifyDispatch`]: To determine the class of the dispatch. See the enum definition for -//! more information on dispatch classes. +//! Every dispatchable function is responsible for providing `#[weight = $x]` attribute. In this +//! snipped, `$x` can be any user provided struct that implements the following traits: //! -//! Every dispatchable function is responsible for providing this data via an optional `#[weight = -//! $x]` attribute. In this snipped, `$x` can be any user provided struct that implements the -//! two aforementioned traits. +//! - [`WeighData`]: the weight amount. +//! - [`ClassifyDispatch`]: class of the dispatch. +//! - [`PaysFee`]: weather this weight should be translated to fee and deducted upon dispatch. //! //! Substrate then bundles then output information of the two traits into [`DispatchInfo`] struct -//! and provides it by implementing the [`GetDispatchInfo`] for all `Call` variants, and opaque -//! extrinsic types. +//! and provides it by implementing the [`GetDispatchInfo`] for all `Call` both inner and outer call +//! types. //! -//! If no `#[weight]` is defined, the macro automatically injects the `Default` implementation of -//! the [`SimpleDispatchInfo`]. +//! Substrate provides two pre-defined ways to annotate weight: //! -//! Note that the decl_module macro _cannot_ enforce this and will simply fail if an invalid struct -//! (something that does not implement `Weighable`) is passed in. +//! ### 1. Fixed values +//! +//! This can only be used when all 3 traits can be resolved statically. You have 3 degrees of +//! configuration: +//! +//! 1. Define only weight, **in which case `ClassifyDispatch` will be `Normal` and `PaysFee` will be +//! `true`**. +//! +//! ``` +//! # use frame_system::{self as system, Trait}; +//! frame_support::decl_module! { +//! pub struct Module for enum Call where origin: T::Origin { +//! #[weight = 1000] +//! fn dispatching(origin) { unimplemented!() } +//! } +//! } +//! # fn main() {} +//! ``` +//! +//! 2. Define weight and class, **in which case `PaysFee` would be `true`**. +//! +//! ``` +//! # use frame_system::{self as system, Trait}; +//! # use frame_support::weights::DispatchClass; +//! frame_support::decl_module! { +//! pub struct Module for enum Call where origin: T::Origin { +//! #[weight = (1000, DispatchClass::Operational)] +//! fn dispatching(origin) { unimplemented!() } +//! } +//! } +//! # fn main() {} +//! ``` +//! +//! 3. Define all 3 parameters. +//! +//! ``` +//! # use frame_system::{self as system, Trait}; +//! # use frame_support::weights::DispatchClass; +//! frame_support::decl_module! { +//! pub struct Module for enum Call where origin: T::Origin { +//! #[weight = (1000, DispatchClass::Operational, false)] +//! fn dispatching(origin) { unimplemented!() } +//! } +//! } +//! # fn main() {} +//! ``` +//! +//! ### 2. Define weights as a function of input arguments using `FunctionOf` tuple struct. This struct works +//! in a similar manner as above. 3 items must be provided and each can be either a fixed value or a +//! function/closure with the same parameters list as the dispatchable function itself, wrapper in a +//! tuple. +//! +//! Using this only makes sense if you want to use a function for at least one of the elements. If +//! all 3 are static values, providing a raw tuple is easier. +//! +//! ``` +//! # use frame_system::{self as system, Trait}; +//! # use frame_support::weights::{DispatchClass, FunctionOf}; +//! frame_support::decl_module! { +//! pub struct Module for enum Call where origin: T::Origin { +//! #[weight = FunctionOf( +//! // weight, function. +//! |args: (&u32, &u64)| *args.0 as u64 + args.1, +//! // class, fixed. +//! DispatchClass::Operational, +//! // pays fee, function. +//! |args: (&u32, &u64)| *args.0 > 1000, +//! )] +//! fn dispatching(origin, a: u32, b: u64) { unimplemented!() } +//! } +//! } +//! # fn main() {} +//! ``` +//! FRAME assumes a weight of `1_000_000_000_000` equals 1 second of compute on a standard machine. +//! +//! Latest machine specification used to benchmark are: +//! - Digital Ocean: ubuntu-s-2vcpu-4gb-ams3-01 +//! - 2x Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz +//! - 4GB RAM +//! - Ubuntu 19.10 (GNU/Linux 5.3.0-18-generic x86_64) +//! - rustc 1.42.0 (b8cedc004 2020-03-09) #[cfg(feature = "std")] use serde::{Serialize, Deserialize}; use codec::{Encode, Decode}; -use sp_arithmetic::traits::Bounded; use sp_runtime::{ RuntimeDebug, traits::SignedExtension, @@ -50,9 +125,6 @@ use crate::dispatch::{DispatchErrorWithPostInfo, DispatchError}; pub use sp_runtime::transaction_validity::TransactionPriority; /// Numeric range of a transaction weight. -/// -/// FRAME assumes a weight of `1_000_000_000_000` equals 1 second of compute on a standard -/// machine: (TODO: DEFINE STANDARD MACHINE SPECIFICATIONS) pub type Weight = u64; /// The smallest total weight an extrinsic should have. @@ -81,8 +153,7 @@ pub trait PaysFee { } } -/// A generalized group of dispatch types. This is only distinguishing normal, user-triggered transactions -/// (`Normal`) and anything beyond which serves a higher purpose to the system (`Operational`). +/// A generalized group of dispatch types. #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] #[cfg_attr(feature = "std", serde(rename_all = "camelCase"))] #[derive(PartialEq, Eq, Clone, Copy, Encode, Decode, RuntimeDebug)] @@ -108,41 +179,7 @@ pub enum DispatchClass { impl Default for DispatchClass { fn default() -> Self { - DispatchClass::Normal - } -} - -// Implement traits for raw Weight value -impl WeighData for Weight { - fn weigh_data(&self, _: T) -> Weight { - return *self - } -} - -impl ClassifyDispatch for Weight { - fn classify_dispatch(&self, _: T) -> DispatchClass { - DispatchClass::default() - } -} - -impl PaysFee for Weight { - fn pays_fee(&self, _: T) -> bool { - true - } -} - -impl From for DispatchClass { - fn from(tx: SimpleDispatchInfo) -> Self { - match tx { - SimpleDispatchInfo::FixedOperational(_) => DispatchClass::Operational, - SimpleDispatchInfo::MaxOperational => DispatchClass::Operational, - - SimpleDispatchInfo::FixedNormal(_) => DispatchClass::Normal, - SimpleDispatchInfo::MaxNormal => DispatchClass::Normal, - SimpleDispatchInfo::InsecureFreeNormal => DispatchClass::Normal, - - SimpleDispatchInfo::FixedMandatory(_) => DispatchClass::Mandatory, - } + Self::Normal } } @@ -157,6 +194,15 @@ pub struct DispatchInfo { pub pays_fee: bool, } +/// A `Dispatchable` function (aka transaction) that can carry some static information along with +/// it, using the `#[weight]` attribute. +pub trait GetDispatchInfo { + /// Return a `DispatchInfo`, containing relevant information of this dispatch. + /// + /// This is done independently of its encoded size. + fn get_dispatch_info(&self) -> DispatchInfo; +} + /// Weight information that is only available post dispatch. #[derive(Clone, Copy, Eq, PartialEq, Default, RuntimeDebug, Encode, Decode)] pub struct PostDispatchInfo { @@ -206,7 +252,7 @@ impl sp_runtime::traits::Printable for PostDispatchInfo { } /// Allows easy conversion from `DispatchError` to `DispatchErrorWithPostInfo` for dispatchables -/// that want to return a custom a posteriori weight on error. +/// that want to return a custom a posterior weight on error. pub trait WithPostDispatchInfo { /// Call this on your modules custom errors type in order to return a custom weight on error. /// @@ -230,86 +276,75 @@ impl WithPostDispatchInfo for T where } } -/// A `Dispatchable` function (aka transaction) that can carry some static information along with -/// it, using the `#[weight]` attribute. -pub trait GetDispatchInfo { - /// Return a `DispatchInfo`, containing relevant information of this dispatch. - /// - /// This is done independently of its encoded size. - fn get_dispatch_info(&self) -> DispatchInfo; +impl WeighData for Weight { + fn weigh_data(&self, _: T) -> Weight { + return *self + } } -/// Default type used with the `#[weight = x]` attribute in a substrate chain. -/// -/// A user may pass in any other type that implements the correct traits. If not, the `Default` -/// implementation of [`SimpleDispatchInfo`] is used. -/// -/// For each generalized group (`Normal` and `Operation`): -/// - A `Fixed` variant means weight fee is charged normally and the weight is the number -/// specified in the inner value of the variant. -/// - A `Free` variant is equal to `::Fixed(0)`. Note that this does not guarantee inclusion. -/// - A `Max` variant is equal to `::Fixed(Weight::max_value())`. -/// -/// As for the generalized groups themselves: -/// - `Normal` variants will be assigned a priority proportional to their weight. They can only -/// consume a portion (defined in the system module) of the maximum block resource limits. -/// - `Operational` variants will be assigned the maximum priority. They can potentially consume -/// the entire block resource limit. -#[derive(Clone, Copy)] -pub enum SimpleDispatchInfo { - /// A normal dispatch with fixed weight. - FixedNormal(Weight), - /// A normal dispatch with the maximum weight. - MaxNormal, - /// A normal dispatch with no weight. Base and bytes fees still need to be paid. - InsecureFreeNormal, - /// An operational dispatch with fixed weight. - FixedOperational(Weight), - /// An operational dispatch with the maximum weight. - MaxOperational, - /// A mandatory dispatch with fixed weight. - /// - /// NOTE: Signed transactions may not (directly) dispatch this kind of a call, so the other - /// attributes concerning transactability (e.g. priority, fee paying) are moot. - FixedMandatory(Weight), +impl ClassifyDispatch for Weight { + fn classify_dispatch(&self, _: T) -> DispatchClass { + DispatchClass::Normal + } } -impl WeighData for SimpleDispatchInfo { +impl PaysFee for Weight { + fn pays_fee(&self, _: T) -> bool { + true + } +} + +impl WeighData for (Weight, DispatchClass, bool) { fn weigh_data(&self, _: T) -> Weight { - match self { - SimpleDispatchInfo::FixedNormal(w) => *w, - SimpleDispatchInfo::MaxNormal => Bounded::max_value(), - SimpleDispatchInfo::InsecureFreeNormal => Bounded::min_value(), - SimpleDispatchInfo::FixedOperational(w) => *w, - SimpleDispatchInfo::MaxOperational => Bounded::max_value(), - SimpleDispatchInfo::FixedMandatory(w) => *w, - } + return self.0 } } -impl ClassifyDispatch for SimpleDispatchInfo { +impl ClassifyDispatch for (Weight, DispatchClass, bool) { fn classify_dispatch(&self, _: T) -> DispatchClass { - DispatchClass::from(*self) + self.1 } } -impl PaysFee for SimpleDispatchInfo { +impl PaysFee for (Weight, DispatchClass, bool) { fn pays_fee(&self, _: T) -> bool { - match self { - SimpleDispatchInfo::FixedNormal(_) => true, - SimpleDispatchInfo::MaxNormal => true, - SimpleDispatchInfo::InsecureFreeNormal => true, - SimpleDispatchInfo::FixedOperational(_) => true, - SimpleDispatchInfo::MaxOperational => true, - SimpleDispatchInfo::FixedMandatory(_) => true, - } + self.2 } } -impl SimpleDispatchInfo { - /// An _additive zero_ variant of SimpleDispatchInfo. - pub fn zero() -> Self { - Self::FixedNormal(0) +impl WeighData for (Weight, DispatchClass) { + fn weigh_data(&self, _: T) -> Weight { + return self.0 + } +} + +impl ClassifyDispatch for (Weight, DispatchClass) { + fn classify_dispatch(&self, _: T) -> DispatchClass { + self.1 + } +} + +impl PaysFee for (Weight, DispatchClass) { + fn pays_fee(&self, _: T) -> bool { + true + } +} + +impl WeighData for (Weight, bool) { + fn weigh_data(&self, _: T) -> Weight { + return self.0 + } +} + +impl ClassifyDispatch for (Weight, bool) { + fn classify_dispatch(&self, _: T) -> DispatchClass { + DispatchClass::Normal + } +} + +impl PaysFee for (Weight, bool) { + fn pays_fee(&self, _: T) -> bool { + self.1 } } @@ -463,8 +498,14 @@ mod tests { decl_module! { pub struct Module for enum Call where origin: T::Origin { // no arguments, fixed weight - #[weight = SimpleDispatchInfo::FixedNormal(1000)] - fn f0(_origin) { unimplemented!(); } + #[weight = 1000] + fn f00(_origin) { unimplemented!(); } + + #[weight = (1000, DispatchClass::Mandatory)] + fn f01(_origin) { unimplemented!(); } + + #[weight = (1000, DispatchClass::Operational, false)] + fn f02(_origin) { unimplemented!(); } // weight = a x 10 + b #[weight = FunctionOf(|args: (&u32, &u32)| (args.0 * 10 + args.1) as Weight, DispatchClass::Normal, true)] @@ -484,7 +525,24 @@ mod tests { #[test] fn weights_are_correct() { - assert_eq!(Call::::f0().get_dispatch_info().weight, 1000); + // #[weight = 1000] + let info = Call::::f00().get_dispatch_info(); + assert_eq!(info.weight, 1000); + assert_eq!(info.class, DispatchClass::Normal); + assert_eq!(info.pays_fee, true); + + // #[weight = (1000, DispatchClass::Mandatory)] + let info = Call::::f01().get_dispatch_info(); + assert_eq!(info.weight, 1000); + assert_eq!(info.class, DispatchClass::Mandatory); + assert_eq!(info.pays_fee, true); + + // #[weight = (1000, DispatchClass::Operational, false)] + let info = Call::::f02().get_dispatch_info(); + assert_eq!(info.weight, 1000); + assert_eq!(info.class, DispatchClass::Operational); + assert_eq!(info.pays_fee, false); + assert_eq!(Call::::f11(10, 20).get_dispatch_info().weight, 120); assert_eq!(Call::::f11(10, 20).get_dispatch_info().class, DispatchClass::Normal); assert_eq!(Call::::f12(10, 20).get_dispatch_info().weight, 0); diff --git a/frame/support/test/tests/decl_error.rs b/frame/support/test/tests/decl_error.rs index cf50b009ddf..283e747a9ec 100644 --- a/frame/support/test/tests/decl_error.rs +++ b/frame/support/test/tests/decl_error.rs @@ -18,7 +18,7 @@ use sp_runtime::{generic, traits::{BlakeTwo256, Block as _, Verify}, DispatchError}; use sp_core::{H256, sr25519}; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; mod system; @@ -33,7 +33,7 @@ mod module1 { pub struct Module, I: Instance = DefaultInstance> for enum Call where origin: ::Origin { - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn fail(_origin) -> frame_support::dispatch::DispatchResult { Err(Error::::Something.into()) } @@ -60,7 +60,7 @@ mod module2 { pub struct Module for enum Call where origin: ::Origin { - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] pub fn fail(_origin) -> frame_support::dispatch::DispatchResult { Err(Error::::Something.into()) } diff --git a/frame/support/test/tests/instance.rs b/frame/support/test/tests/instance.rs index 779460ce313..37c13c19a35 100644 --- a/frame/support/test/tests/instance.rs +++ b/frame/support/test/tests/instance.rs @@ -23,7 +23,7 @@ use frame_support::{ DecodeDifferent, StorageMetadata, StorageEntryModifier, StorageEntryType, DefaultByteGetter, StorageEntryMetadata, StorageHasher, }, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::MINIMUM_WEIGHT, StorageValue, StorageMap, StorageDoubleMap, }; use sp_inherents::{ProvideInherent, InherentData, InherentIdentifier, MakeFatalError}; @@ -56,7 +56,7 @@ mod module1 { fn deposit_event() = default; - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn one(origin) { system::ensure_root(origin)?; Self::deposit_event(RawEvent::AnotherVariant(3)); diff --git a/frame/support/test/tests/reserved_keyword/on_initialize.rs b/frame/support/test/tests/reserved_keyword/on_initialize.rs index 00aac51cab3..ef19fee0e69 100644 --- a/frame/support/test/tests/reserved_keyword/on_initialize.rs +++ b/frame/support/test/tests/reserved_keyword/on_initialize.rs @@ -2,7 +2,7 @@ macro_rules! reserved { ($($reserved:ident)*) => { $( mod $reserved { - pub use frame_support::{dispatch, weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}}; + pub use frame_support::{dispatch, weights::MINIMUM_WEIGHT}; pub trait Trait { type Origin; @@ -19,7 +19,7 @@ macro_rules! reserved { frame_support::decl_module! { pub struct Module for enum Call where origin: T::Origin { - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn $reserved(_origin) -> dispatch::DispatchResult { unreachable!() } } } diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 49c404c0220..115b681adc6 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -68,14 +68,14 @@ //! ### Example - Get extrinsic count and parent hash for the current block //! //! ``` -//! use frame_support::{decl_module, dispatch, weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}}; +//! use frame_support::{decl_module, dispatch, weights::MINIMUM_WEIGHT}; //! use frame_system::{self as system, ensure_signed}; //! //! pub trait Trait: system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn system_module_example(origin) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _extrinsic_count = >::extrinsic_count(); @@ -120,7 +120,7 @@ use frame_support::{ Contains, Get, ModuleToIndex, OnNewAccount, OnKilledAccount, IsDeadAccount, Happened, StoredMap, EnsureOrigin, }, - weights::{Weight, MINIMUM_WEIGHT, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, SimpleDispatchInfo, FunctionOf} + weights::{Weight, MINIMUM_WEIGHT, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, FunctionOf} }; use codec::{Encode, Decode, FullCodec, EncodeLike}; @@ -485,20 +485,20 @@ decl_module! { } /// Make some on-chain remark. - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn remark(origin, _remark: Vec) { ensure_signed(origin)?; } /// Set the number of pages in the WebAssembly environment's heap. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_heap_pages(origin, pages: u64) { ensure_root(origin)?; storage::unhashed::put_raw(well_known_keys::HEAP_PAGES, &pages.encode()); } /// Set the new runtime code. - #[weight = SimpleDispatchInfo::FixedOperational(200_000_000)] + #[weight = (200_000_000, DispatchClass::Operational)] pub fn set_code(origin, code: Vec) { Self::can_set_code(origin, &code)?; @@ -507,7 +507,7 @@ decl_module! { } /// Set the new runtime code without doing any checks of the given `code`. - #[weight = SimpleDispatchInfo::FixedOperational(200_000_000)] + #[weight = (200_000_000, DispatchClass::Operational)] pub fn set_code_without_checks(origin, code: Vec) { ensure_root(origin)?; storage::unhashed::put_raw(well_known_keys::CODE, &code); @@ -515,7 +515,7 @@ decl_module! { } /// Set the new changes trie configuration. - #[weight = SimpleDispatchInfo::FixedOperational(20_000_000)] + #[weight = (20_000_000, DispatchClass::Operational)] pub fn set_changes_trie_config(origin, changes_trie_config: Option) { ensure_root(origin)?; match changes_trie_config.clone() { @@ -533,7 +533,7 @@ decl_module! { } /// Set some items of storage. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_storage(origin, items: Vec) { ensure_root(origin)?; for i in &items { @@ -542,7 +542,7 @@ decl_module! { } /// Kill some items from storage. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn kill_storage(origin, keys: Vec) { ensure_root(origin)?; for key in &keys { @@ -551,7 +551,7 @@ decl_module! { } /// Kill all storage items with a key that starts with the given prefix. - #[weight = SimpleDispatchInfo::FixedOperational(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn kill_prefix(origin, prefix: Key) { ensure_root(origin)?; storage::unhashed::kill_prefix(&prefix); @@ -559,7 +559,7 @@ decl_module! { /// Kill the sending account, assuming there are no references outstanding and the composite /// data is equal to its default value. - #[weight = SimpleDispatchInfo::FixedOperational(25_000_000)] + #[weight = (25_000_000, DispatchClass::Operational)] fn suicide(origin) { let who = ensure_signed(origin)?; let account = Account::::get(&who); diff --git a/frame/timestamp/src/lib.rs b/frame/timestamp/src/lib.rs index 822848bf7dc..cffe172c130 100644 --- a/frame/timestamp/src/lib.rs +++ b/frame/timestamp/src/lib.rs @@ -62,7 +62,7 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +//! use frame_support::weights::MINIMUM_WEIGHT; //! # use pallet_timestamp as timestamp; //! use frame_system::{self as system, ensure_signed}; //! @@ -70,7 +70,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] +//! #[weight = MINIMUM_WEIGHT] //! pub fn get_time(origin) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _now = >::get(); @@ -101,7 +101,7 @@ use frame_support::debug; use frame_support::{ Parameter, decl_storage, decl_module, traits::{Time, UnixTime, Get}, - weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}, + weights::{MINIMUM_WEIGHT, DispatchClass}, }; use sp_runtime::{ RuntimeString, @@ -148,7 +148,7 @@ decl_module! { /// `MinimumPeriod`. /// /// The dispatch origin for this call must be `Inherent`. - #[weight = SimpleDispatchInfo::FixedMandatory(MINIMUM_WEIGHT)] + #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] fn set(origin, #[compact] now: T::Moment) { ensure_none(origin)?; assert!(!::DidUpdate::exists(), "Timestamp must be updated only once in the block"); diff --git a/frame/treasury/src/lib.rs b/frame/treasury/src/lib.rs index af39985133c..2eb0f25fd0a 100644 --- a/frame/treasury/src/lib.rs +++ b/frame/treasury/src/lib.rs @@ -98,7 +98,7 @@ use frame_support::traits::{ use sp_runtime::{Permill, ModuleId, Percent, RuntimeDebug, traits::{ Zero, StaticLookup, AccountIdConversion, Saturating, Hash, BadOrigin }}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, SimpleDispatchInfo}; +use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass}; use frame_support::traits::{Contains, EnsureOrigin}; use codec::{Encode, Decode}; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -327,7 +327,7 @@ decl_module! { /// - Limited storage reads. /// - One DB change, one extra DB entry. /// # - #[weight = SimpleDispatchInfo::FixedNormal(500_000_000)] + #[weight = 500_000_000] fn propose_spend( origin, #[compact] value: BalanceOf, @@ -354,7 +354,7 @@ decl_module! { /// - Limited storage reads. /// - One DB clear. /// # - #[weight = SimpleDispatchInfo::FixedOperational(100_000_000)] + #[weight = (100_000_000, DispatchClass::Operational)] fn reject_proposal(origin, #[compact] proposal_id: ProposalIndex) { T::RejectOrigin::try_origin(origin) .map(|_| ()) @@ -376,7 +376,7 @@ decl_module! { /// - Limited storage reads. /// - One DB change. /// # - #[weight = SimpleDispatchInfo::FixedOperational(100_000_000)] + #[weight = (100_000_000, DispatchClass::Operational)] fn approve_proposal(origin, #[compact] proposal_id: ProposalIndex) { T::ApproveOrigin::try_origin(origin) .map(|_| ()) @@ -405,7 +405,7 @@ decl_module! { /// - One storage mutation (codec `O(R)`). /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(100_000_000)] + #[weight = 100_000_000] fn report_awesome(origin, reason: Vec, who: T::AccountId) { let finder = ensure_signed(origin)?; @@ -447,7 +447,7 @@ decl_module! { /// - Two storage removals (one read, codec `O(T)`). /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn retract_tip(origin, hash: T::Hash) { let who = ensure_signed(origin)?; let tip = Tips::::get(&hash).ok_or(Error::::UnknownTip)?; @@ -479,7 +479,7 @@ decl_module! { /// - Two storage insertions (codecs `O(R)`, `O(T)`), one read `O(1)`. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(150_000_000)] + #[weight = 150_000_000] fn tip_new(origin, reason: Vec, who: T::AccountId, tip_value: BalanceOf) { let tipper = ensure_signed(origin)?; ensure!(T::Tippers::contains(&tipper), BadOrigin); @@ -513,7 +513,7 @@ decl_module! { /// - One storage mutation (codec `O(T)`), one storage read `O(1)`. /// - Up to one event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn tip(origin, hash: T::Hash, tip_value: BalanceOf) { let tipper = ensure_signed(origin)?; ensure!(T::Tippers::contains(&tipper), BadOrigin); @@ -539,7 +539,7 @@ decl_module! { /// - One storage retrieval (codec `O(T)`) and two removals. /// - Up to three balance operations. /// # - #[weight = SimpleDispatchInfo::FixedNormal(50_000_000)] + #[weight = 50_000_000] fn close_tip(origin, hash: T::Hash) { ensure_signed(origin)?; diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index 85545d92b0f..6da92ea15a4 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -57,7 +57,7 @@ use frame_support::traits::{ Currency, LockableCurrency, VestingSchedule, WithdrawReason, LockIdentifier, ExistenceRequirement, Get }; -use frame_support::weights::{SimpleDispatchInfo, MINIMUM_WEIGHT}; +use frame_support::weights::MINIMUM_WEIGHT; use frame_system::{self as system, ensure_signed}; mod benchmarking; @@ -194,7 +194,7 @@ decl_module! { /// - One storage read (codec `O(1)`) and up to one removal. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn vest(origin) -> DispatchResult { let who = ensure_signed(origin)?; Self::update_lock(who) @@ -216,7 +216,7 @@ decl_module! { /// - One storage read (codec `O(1)`) and up to one removal. /// - One event. /// # - #[weight = SimpleDispatchInfo::FixedNormal(MINIMUM_WEIGHT)] + #[weight = MINIMUM_WEIGHT] fn vest_other(origin, target: ::Source) -> DispatchResult { ensure_signed(origin)?; Self::update_lock(T::Lookup::lookup(target)?) @@ -236,7 +236,7 @@ decl_module! { /// - Creates a new storage entry, but is protected by a minimum transfer /// amount needed to succeed. /// # - #[weight = SimpleDispatchInfo::FixedNormal(1_000_000_000)] + #[weight = 1_000_000_000] pub fn vested_transfer( origin, target: ::Source, -- GitLab From 932f40db7836ca67dd669a10239060653634f152 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 22 Apr 2020 10:20:52 +0200 Subject: [PATCH 021/167] Send a status message on block announce handshake (#5726) * Send a status message on block announce handshake * Make sure to send the handshake to all handlers --- client/network/src/protocol.rs | 34 +++++++++++++- .../src/protocol/generic_proto/behaviour.rs | 44 ++++++++++++++++++- .../protocol/generic_proto/handler/group.rs | 24 ++++++++++ 3 files changed, 100 insertions(+), 2 deletions(-) diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 42084b7ce31..c89aa4cf502 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -303,6 +303,31 @@ impl Default for ProtocolConfig { } } +/// Handshake sent when we open a block announces substream. +#[derive(Debug, PartialEq, Eq, Clone, Encode, Decode)] +struct BlockAnnouncesHandshake { + /// Roles of the node. + roles: Roles, + /// Best block number. + best_number: NumberFor, + /// Best block hash. + best_hash: B::Hash, + /// Genesis block hash. + genesis_hash: B::Hash, +} + +impl BlockAnnouncesHandshake { + fn build(protocol_config: &ProtocolConfig, chain: &Arc>) -> Self { + let info = chain.info(); + BlockAnnouncesHandshake { + genesis_hash: info.genesis_hash, + roles: protocol_config.roles.into(), + best_number: info.best_number, + best_hash: info.best_hash, + } + } +} + /// Fallback mechanism to use to send a notification if no substream is open. #[derive(Debug, Clone, PartialEq, Eq)] enum Fallback { @@ -369,7 +394,10 @@ impl Protocol { proto.extend(b"/block-announces/1"); proto }); - behaviour.register_notif_protocol(block_announces_protocol.clone(), Vec::new()); + behaviour.register_notif_protocol( + block_announces_protocol.clone(), + BlockAnnouncesHandshake::build(&config, &chain).encode() + ); legacy_equiv_by_name.insert(block_announces_protocol.clone(), Fallback::BlockAnnounce); let protocol = Protocol { @@ -1325,6 +1353,10 @@ impl Protocol { pub fn on_block_imported(&mut self, header: &B::Header, is_best: bool) { if is_best { self.sync.update_chain_info(header); + self.behaviour.set_notif_protocol_handshake( + &self.block_announces_protocol, + BlockAnnouncesHandshake::build(&self.config, &self.context_data.chain).encode() + ); } } diff --git a/client/network/src/protocol/generic_proto/behaviour.rs b/client/network/src/protocol/generic_proto/behaviour.rs index 35a8b03d36f..3ce98dc11ed 100644 --- a/client/network/src/protocol/generic_proto/behaviour.rs +++ b/client/network/src/protocol/generic_proto/behaviour.rs @@ -201,7 +201,21 @@ enum PeerState { } impl PeerState { - /// True if there exists an established connection to tbe peer + /// True if there exists any established connection to the peer. + fn is_connected(&self) -> bool { + match self { + PeerState::Disabled { .. } | + PeerState::DisabledPendingEnable { .. } | + PeerState::Enabled { .. } | + PeerState::PendingRequest { .. } | + PeerState::Requested | + PeerState::Incoming { .. } => true, + PeerState::Poisoned | + PeerState::Banned { .. } => false, + } + } + + /// True if there exists an established connection to the peer /// that is open for custom protocol traffic. fn is_open(&self) -> bool { self.get_open().is_some() @@ -338,6 +352,34 @@ impl GenericProto { self.notif_protocols.push((protocol_name.into(), handshake_msg.into())); } + /// Modifies the handshake of the given notifications protocol. + /// + /// Has no effect if the protocol is unknown. + pub fn set_notif_protocol_handshake( + &mut self, + protocol_name: &[u8], + handshake_message: impl Into> + ) { + let handshake_message = handshake_message.into(); + if let Some(protocol) = self.notif_protocols.iter_mut().find(|(name, _)| name == &protocol_name) { + protocol.1 = handshake_message.clone(); + } else { + return; + } + + // Send an event to all the peers we're connected to, updating the handshake message. + for (peer_id, _) in self.peers.iter().filter(|(_, state)| state.is_connected()) { + self.events.push(NetworkBehaviourAction::NotifyHandler { + peer_id: peer_id.clone(), + handler: NotifyHandler::All, + event: NotifsHandlerIn::UpdateHandshake { + protocol_name: Cow::Owned(protocol_name.to_owned()), + handshake_message: handshake_message.clone(), + }, + }); + } + } + /// Returns the number of discovered nodes that we keep in memory. pub fn num_discovered_peers(&self) -> usize { self.peerset.num_discovered_peers() diff --git a/client/network/src/protocol/generic_proto/handler/group.rs b/client/network/src/protocol/generic_proto/handler/group.rs index 04293c7c9f1..0e453a368c2 100644 --- a/client/network/src/protocol/generic_proto/handler/group.rs +++ b/client/network/src/protocol/generic_proto/handler/group.rs @@ -161,6 +161,18 @@ pub enum NotifsHandlerIn { message: Vec, }, + /// Modifies the handshake message of a notifications protocol. + UpdateHandshake { + /// Name of the protocol for the message. + /// + /// Must match one of the registered protocols. + protocol_name: Cow<'static, [u8]>, + + /// The new handshake message to send if we open a substream or if the remote opens a + /// substream towards us. + handshake_message: Vec, + }, + /// Sends a notifications message. SendNotification { /// Name of the protocol for the message. @@ -363,6 +375,18 @@ impl ProtocolsHandler for NotifsHandler { }, NotifsHandlerIn::SendLegacy { message } => self.legacy.inject_event(LegacyProtoHandlerIn::SendCustomMessage { message }), + NotifsHandlerIn::UpdateHandshake { protocol_name, handshake_message } => { + for (handler, current_handshake) in &mut self.in_handlers { + if handler.protocol_name() == &*protocol_name { + *current_handshake = handshake_message.clone(); + } + } + for (handler, current_handshake) in &mut self.out_handlers { + if handler.protocol_name() == &*protocol_name { + *current_handshake = handshake_message.clone(); + } + } + } NotifsHandlerIn::SendNotification { message, encoded_fallback_message, protocol_name } => { for (handler, _) in &mut self.out_handlers { if handler.protocol_name() != &protocol_name[..] { -- GitLab From 999f4832e715f20a17fc2a3060bbe2ec88e7dbff Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 22 Apr 2020 10:58:26 +0200 Subject: [PATCH 022/167] Add a protocol that answers finality proofs (#5718) * Add a protocol that answers finality proofs * Fix documentation * Use Toggle --- client/network/build.rs | 1 + client/network/src/behaviour.rs | 6 +- client/network/src/protocol.rs | 5 + .../network/src/protocol/finality_requests.rs | 266 ++++++++++++++++++ .../src/protocol/schema/finality.v1.proto | 19 ++ client/network/src/service.rs | 13 +- 6 files changed, 307 insertions(+), 3 deletions(-) create mode 100644 client/network/src/protocol/finality_requests.rs create mode 100644 client/network/src/protocol/schema/finality.v1.proto diff --git a/client/network/build.rs b/client/network/build.rs index 0fd1f128660..991b1cba5d6 100644 --- a/client/network/build.rs +++ b/client/network/build.rs @@ -1,5 +1,6 @@ const PROTOS: &[&str] = &[ "src/protocol/schema/api.v1.proto", + "src/protocol/schema/finality.v1.proto", "src/protocol/schema/light.v1.proto" ]; diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 880b381e669..14b2245be0a 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -25,7 +25,7 @@ use codec::Encode as _; use libp2p::NetworkBehaviour; use libp2p::core::{Multiaddr, PeerId, PublicKey}; use libp2p::kad::record; -use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollParameters}; +use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollParameters, toggle::Toggle}; use log::debug; use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}}; use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification}; @@ -45,6 +45,8 @@ pub struct Behaviour { discovery: DiscoveryBehaviour, /// Block request handling. block_requests: protocol::BlockRequests, + /// Finality proof request handling. + finality_proof_requests: Toggle>, /// Light client request handling. light_client_handler: protocol::LightClientHandler, @@ -75,6 +77,7 @@ impl Behaviour { user_agent: String, local_public_key: PublicKey, block_requests: protocol::BlockRequests, + finality_proof_requests: Option>, light_client_handler: protocol::LightClientHandler, disco_config: DiscoveryConfig, ) -> Self { @@ -83,6 +86,7 @@ impl Behaviour { debug_info: debug_info::DebugInfoBehaviour::new(user_agent, local_public_key.clone()), discovery: disco_config.finish(), block_requests, + finality_proof_requests: From::from(finality_proof_requests), light_client_handler, events: Vec::new(), role, diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index c89aa4cf502..dca74c8d607 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -62,6 +62,9 @@ use wasm_timer::Instant; pub mod api { pub mod v1 { include!(concat!(env!("OUT_DIR"), "/api.v1.rs")); + pub mod finality { + include!(concat!(env!("OUT_DIR"), "/api.v1.finality.rs")); + } pub mod light { include!(concat!(env!("OUT_DIR"), "/api.v1.light.rs")); } @@ -72,12 +75,14 @@ mod generic_proto; mod util; pub mod block_requests; +pub mod finality_requests; pub mod message; pub mod event; pub mod light_client_handler; pub mod sync; pub use block_requests::BlockRequests; +pub use finality_requests::FinalityProofRequests; pub use light_client_handler::LightClientHandler; pub use generic_proto::LegacyConnectionKillError; diff --git a/client/network/src/protocol/finality_requests.rs b/client/network/src/protocol/finality_requests.rs new file mode 100644 index 00000000000..b12b79f41bc --- /dev/null +++ b/client/network/src/protocol/finality_requests.rs @@ -0,0 +1,266 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. +// +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! `NetworkBehaviour` implementation which handles incoming finality proof requests. +//! +//! Every request is coming in on a separate connection substream which gets +//! closed after we have sent the response back. Incoming requests are encoded +//! as protocol buffers (cf. `finality.v1.proto`). + +#![allow(unused)] + +use bytes::Bytes; +use codec::{Encode, Decode}; +use crate::{ + chain::FinalityProofProvider, + config::ProtocolId, + protocol::{api, message::BlockAttributes} +}; +use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; +use libp2p::{ + core::{ + ConnectedPoint, + Multiaddr, + PeerId, + connection::ConnectionId, + upgrade::{InboundUpgrade, ReadOneError, UpgradeInfo, Negotiated}, + upgrade::{DeniedUpgrade, read_one, write_one} + }, + swarm::{ + NegotiatedSubstream, + NetworkBehaviour, + NetworkBehaviourAction, + OneShotHandler, + OneShotHandlerConfig, + PollParameters, + SubstreamProtocol + } +}; +use prost::Message; +use sp_runtime::{generic::BlockId, traits::{Block, Header, One, Zero}}; +use std::{ + cmp::min, + io, + iter, + sync::Arc, + time::Duration, + task::{Context, Poll} +}; +use void::{Void, unreachable}; + +// Type alias for convenience. +pub type Error = Box; + +/// Configuration options for `FinalityProofRequests`. +#[derive(Debug, Clone)] +pub struct Config { + max_request_len: usize, + inactivity_timeout: Duration, + protocol: Bytes, +} + +impl Config { + /// Create a fresh configuration with the following options: + /// + /// - max. request size = 1 MiB + /// - inactivity timeout = 15s + pub fn new(id: &ProtocolId) -> Self { + let mut c = Config { + max_request_len: 1024 * 1024, + inactivity_timeout: Duration::from_secs(15), + protocol: Bytes::new(), + }; + c.set_protocol(id); + c + } + + /// Limit the max. length of incoming finality proof request bytes. + pub fn set_max_request_len(&mut self, v: usize) -> &mut Self { + self.max_request_len = v; + self + } + + /// Limit the max. duration the substream may remain inactive before closing it. + pub fn set_inactivity_timeout(&mut self, v: Duration) -> &mut Self { + self.inactivity_timeout = v; + self + } + + /// Set protocol to use for upgrade negotiation. + pub fn set_protocol(&mut self, id: &ProtocolId) -> &mut Self { + let mut v = Vec::new(); + v.extend_from_slice(b"/"); + v.extend_from_slice(id.as_bytes()); + v.extend_from_slice(b"/finality-proof/1"); + self.protocol = v.into(); + self + } +} + +/// The finality proof request handling behaviour. +pub struct FinalityProofRequests { + /// This behaviour's configuration. + config: Config, + /// How to construct finality proofs. + finality_proof_provider: Arc>, + /// Futures sending back the finality proof request responses. + outgoing: FuturesUnordered>, +} + +impl FinalityProofRequests +where + B: Block, +{ + /// Initializes the behaviour. + pub fn new(cfg: Config, finality_proof_provider: Arc>) -> Self { + FinalityProofRequests { + config: cfg, + finality_proof_provider, + outgoing: FuturesUnordered::new(), + } + } + + /// Callback, invoked when a new finality request has been received from remote. + fn on_finality_request(&mut self, peer: &PeerId, request: &api::v1::finality::FinalityProofRequest) + -> Result + { + let block_hash = Decode::decode(&mut request.block_hash.as_ref())?; + + log::trace!(target: "sync", "Finality proof request from {} for {}", peer, block_hash); + + let finality_proof = self.finality_proof_provider + .prove_finality(block_hash, &request.request)? + .unwrap_or(Vec::new()); + // Note that an empty Vec is sent if no proof is available. + + Ok(api::v1::finality::FinalityProofResponse { proof: finality_proof }) + } +} + +impl NetworkBehaviour for FinalityProofRequests +where + B: Block +{ + type ProtocolsHandler = OneShotHandler>; + type OutEvent = Void; + + fn new_handler(&mut self) -> Self::ProtocolsHandler { + let p = Protocol { + max_request_len: self.config.max_request_len, + protocol: self.config.protocol.clone(), + }; + let mut cfg = OneShotHandlerConfig::default(); + cfg.inactive_timeout = self.config.inactivity_timeout; + OneShotHandler::new(SubstreamProtocol::new(p), cfg) + } + + fn addresses_of_peer(&mut self, _: &PeerId) -> Vec { + Vec::new() + } + + fn inject_connected(&mut self, _peer: &PeerId) { + } + + fn inject_disconnected(&mut self, _peer: &PeerId) { + } + + fn inject_event( + &mut self, + peer: PeerId, + connection: ConnectionId, + Request(request, mut stream): Request + ) { + match self.on_finality_request(&peer, &request) { + Ok(res) => { + log::trace!("enqueueing finality response for peer {}", peer); + let mut data = Vec::with_capacity(res.encoded_len()); + if let Err(e) = res.encode(&mut data) { + log::debug!("error encoding finality response for peer {}: {}", peer, e) + } else { + let future = async move { + if let Err(e) = write_one(&mut stream, data).await { + log::debug!("error writing finality response: {}", e) + } + }; + self.outgoing.push(future.boxed()) + } + } + Err(e) => log::debug!("error handling finality request from peer {}: {}", peer, e) + } + } + + fn poll(&mut self, cx: &mut Context, _: &mut impl PollParameters) -> Poll> { + while let Poll::Ready(Some(_)) = self.outgoing.poll_next_unpin(cx) {} + Poll::Pending + } +} + +/// The incoming finality proof request. +/// +/// Holds the protobuf value and the connection substream which made the +/// request and over which to send the response. +#[derive(Debug)] +pub struct Request(api::v1::finality::FinalityProofRequest, T); + +impl From for Request { + fn from(v: Void) -> Self { + unreachable(v) + } +} + +/// Substream upgrade protocol. +/// +/// We attempt to parse an incoming protobuf encoded request (cf. `Request`) +/// which will be handled by the `FinalityProofRequests` behaviour, i.e. the request +/// will become visible via `inject_node_event` which then dispatches to the +/// relevant callback to process the message and prepare a response. +#[derive(Debug, Clone)] +pub struct Protocol { + /// The max. request length in bytes. + max_request_len: usize, + /// The protocol to use during upgrade negotiation. + protocol: Bytes, +} + +impl UpgradeInfo for Protocol { + type Info = Bytes; + type InfoIter = iter::Once; + + fn protocol_info(&self) -> Self::InfoIter { + iter::once(self.protocol.clone()) + } +} + +impl InboundUpgrade for Protocol +where + T: AsyncRead + AsyncWrite + Unpin + Send + 'static +{ + type Output = Request; + type Error = ReadOneError; + type Future = BoxFuture<'static, Result>; + + fn upgrade_inbound(self, mut s: T, _: Self::Info) -> Self::Future { + async move { + let len = self.max_request_len; + let vec = read_one(&mut s, len).await?; + match api::v1::finality::FinalityProofRequest::decode(&vec[..]) { + Ok(r) => Ok(Request(r, s)), + Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) + } + }.boxed() + } +} + diff --git a/client/network/src/protocol/schema/finality.v1.proto b/client/network/src/protocol/schema/finality.v1.proto new file mode 100644 index 00000000000..843bc4eca09 --- /dev/null +++ b/client/network/src/protocol/schema/finality.v1.proto @@ -0,0 +1,19 @@ +// Schema definition for finality proof request/responses. + +syntax = "proto3"; + +package api.v1.finality; + +// Request a finality proof from a peer. +message FinalityProofRequest { + // SCALE-encoded hash of the block to request. + bytes block_hash = 1; + // Opaque chain-specific additional request data. + bytes request = 2; +} + +// Response to a finality proof request. +message FinalityProofResponse { + // Opaque chain-specific finality proof. Empty if no such proof exists. + bytes proof = 1; // optional +} diff --git a/client/network/src/service.rs b/client/network/src/service.rs index d29cb94ee8a..e360a8defec 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -225,6 +225,12 @@ impl NetworkWorker { let config = protocol::block_requests::Config::new(¶ms.protocol_id); protocol::BlockRequests::new(config, params.chain.clone()) }; + let finality_proof_requests = if let Some(pb) = ¶ms.finality_proof_provider { + let config = protocol::finality_requests::Config::new(¶ms.protocol_id); + Some(protocol::FinalityProofRequests::new(config, pb.clone())) + } else { + None + }; let light_client_handler = { let config = protocol::light_client_handler::Config::new(¶ms.protocol_id); protocol::LightClientHandler::new( @@ -261,6 +267,7 @@ impl NetworkWorker { user_agent, local_public, block_requests, + finality_proof_requests, light_client_handler, discovery_config ); @@ -1113,10 +1120,12 @@ impl Future for NetworkWorker { ConnectionError::IO(_) => metrics.connections_closed_total.with_label_values(&[dir, "transport-error"]).inc(), ConnectionError::Handler(NodeHandlerWrapperError::Handler(EitherError::A(EitherError::A( - EitherError::A(EitherError::B(EitherError::A(PingFailure::Timeout))))))) => + EitherError::A(EitherError::A(EitherError::B( + EitherError::A(PingFailure::Timeout)))))))) => metrics.connections_closed_total.with_label_values(&[dir, "ping-timeout"]).inc(), ConnectionError::Handler(NodeHandlerWrapperError::Handler(EitherError::A(EitherError::A( - EitherError::A(EitherError::A(EitherError::B(LegacyConnectionKillError))))))) => + EitherError::A(EitherError::A(EitherError::A( + EitherError::B(LegacyConnectionKillError)))))))) => metrics.connections_closed_total.with_label_values(&[dir, "force-closed"]).inc(), ConnectionError::Handler(NodeHandlerWrapperError::Handler(_)) => metrics.connections_closed_total.with_label_values(&[dir, "protocol-error"]).inc(), -- GitLab From e60eb97ffce144778ff36da8db99da63fa69cef3 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 22 Apr 2020 14:31:05 +0200 Subject: [PATCH 023/167] Enable yamux flow control by default (#5734) * Enable yamux flow control by default * Tweak description * Apply suggestions from code review --- client/cli/src/params/network_params.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/client/cli/src/params/network_params.rs b/client/cli/src/params/network_params.rs index 635fc51cfd5..c08a9e1c93e 100644 --- a/client/cli/src/params/network_params.rs +++ b/client/cli/src/params/network_params.rs @@ -85,9 +85,10 @@ pub struct NetworkParams { #[structopt(flatten)] pub node_key_params: NodeKeyParams, - /// Experimental feature flag. - #[structopt(long = "use-yamux-flow-control")] - pub use_yamux_flow_control: bool, + /// Disable the yamux flow control. This option will be removed in the future once there is + /// enough confidence that this feature is properly working. + #[structopt(long)] + pub no_yamux_flow_control: bool, } impl NetworkParams { @@ -137,7 +138,7 @@ impl NetworkParams { enable_mdns: !is_dev && !self.no_mdns, allow_private_ipv4: !self.no_private_ipv4, wasm_external_transport: None, - use_yamux_flow_control: self.use_yamux_flow_control, + use_yamux_flow_control: !self.no_yamux_flow_control, }, max_parallel_downloads: self.max_parallel_downloads, } -- GitLab From 8bcc42c2cafdc3eb9a5c9296846134e7f9f2e9b9 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Wed, 22 Apr 2020 15:50:25 +0200 Subject: [PATCH 024/167] enum Pays for PaysFee (#5733) * enum Pays for PaysFee * Fix doc test * Update bin/node/executor/tests/basic.rs * Update bin/node/executor/tests/basic.rs --- bin/node/executor/tests/basic.rs | 12 +-- frame/balances/src/tests.rs | 2 +- frame/contracts/src/tests.rs | 4 +- frame/evm/src/lib.rs | 23 +++++- frame/example/src/lib.rs | 6 +- frame/recovery/src/lib.rs | 4 +- frame/scheduler/src/lib.rs | 4 +- frame/sudo/src/lib.rs | 6 +- frame/support/src/dispatch.rs | 6 +- frame/support/src/weights.rs | 108 ++++++++++++++++++--------- frame/system/src/lib.rs | 23 ++++-- frame/transaction-payment/src/lib.rs | 25 ++++--- frame/utility/src/lib.rs | 12 +-- 13 files changed, 148 insertions(+), 87 deletions(-) diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 5b3d8f20e9d..758ea1a32e8 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -18,7 +18,7 @@ use codec::{Encode, Decode, Joiner}; use frame_support::{ StorageValue, StorageMap, traits::Currency, - weights::{GetDispatchInfo, DispatchInfo, DispatchClass}, + weights::{GetDispatchInfo, DispatchInfo, DispatchClass, Pays}, }; use sp_core::{ NeverNativeValue, map, traits::Externalities, storage::{well_known_keys, Storage}, @@ -338,7 +338,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(0), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, pays_fee: true } + DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, @@ -359,7 +359,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(1), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, class: DispatchClass::Normal, pays_fee: true } + DispatchInfo { weight: 200_000_000, ..Default::default() } )), topics: vec![], }, @@ -391,7 +391,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(0), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, pays_fee: true } + DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, pays_fee: Pays::Yes } )), topics: vec![], }, @@ -414,7 +414,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(1), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, class: DispatchClass::Normal, pays_fee: true } + DispatchInfo { weight: 200_000_000, ..Default::default() } )), topics: vec![], }, @@ -437,7 +437,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(2), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, class: DispatchClass::Normal, pays_fee: true } + DispatchInfo { weight: 200_000_000, ..Default::default() } )), topics: vec![], }, diff --git a/frame/balances/src/tests.rs b/frame/balances/src/tests.rs index 7ff7ec0fc45..7663b8922bc 100644 --- a/frame/balances/src/tests.rs +++ b/frame/balances/src/tests.rs @@ -57,7 +57,7 @@ macro_rules! decl_tests { /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: Weight) -> DispatchInfo { - DispatchInfo { weight: w, pays_fee: true, ..Default::default() } + DispatchInfo { weight: w, ..Default::default() } } #[test] diff --git a/frame/contracts/src/tests.rs b/frame/contracts/src/tests.rs index f7170e9172e..452a4517dbe 100644 --- a/frame/contracts/src/tests.rs +++ b/frame/contracts/src/tests.rs @@ -35,7 +35,7 @@ use sp_runtime::{ use frame_support::{ assert_ok, assert_err, impl_outer_dispatch, impl_outer_event, impl_outer_origin, parameter_types, storage::child, StorageMap, StorageValue, traits::{Currency, Get}, - weights::{DispatchInfo, DispatchClass, Weight}, + weights::{DispatchInfo, DispatchClass, Weight, Pays}, }; use std::{cell::RefCell, sync::atomic::{AtomicUsize, Ordering}}; use sp_core::storage::well_known_keys; @@ -1630,7 +1630,7 @@ fn cannot_self_destruct_in_constructor() { #[test] fn check_block_gas_limit_works() { ExtBuilder::default().block_gas_limit(50).build().execute_with(|| { - let info = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: true }; + let info = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; let check = CheckBlockGasLimit::(Default::default()); let call: Call = crate::Call::put_code(1000, vec![]).into(); diff --git a/frame/evm/src/lib.rs b/frame/evm/src/lib.rs index 48946858dff..eec8bc69d74 100644 --- a/frame/evm/src/lib.rs +++ b/frame/evm/src/lib.rs @@ -25,7 +25,7 @@ pub use crate::backend::{Account, Log, Vicinity, Backend}; use sp_std::{vec::Vec, marker::PhantomData}; use frame_support::{ensure, decl_module, decl_storage, decl_event, decl_error}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass, FunctionOf}; +use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass, FunctionOf, Pays}; use frame_support::traits::{Currency, WithdrawReason, ExistenceRequirement}; use frame_system::{self as system, ensure_signed}; use sp_runtime::ModuleId; @@ -235,7 +235,12 @@ decl_module! { } /// Issue an EVM call operation. This is similar to a message call transaction in Ethereum. - #[weight = FunctionOf(|(_, _, _, gas_limit, gas_price, _): (&H160, &Vec, &U256, &u32, &U256, &Option)| (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), DispatchClass::Normal, true)] + #[weight = FunctionOf( + |(_, _, _, gas_limit, gas_price, _): (&H160, &Vec, &U256, &u32, &U256, &Option)| + (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), + DispatchClass::Normal, + Pays::Yes, + )] fn call( origin, target: H160, @@ -266,7 +271,12 @@ decl_module! { /// Issue an EVM create operation. This is similar to a contract creation transaction in /// Ethereum. - #[weight = FunctionOf(|(_, _, gas_limit, gas_price, _): (&Vec, &U256, &u32, &U256, &Option)| (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), DispatchClass::Normal, true)] + #[weight = FunctionOf( + |(_, _, gas_limit, gas_price, _): (&Vec, &U256, &u32, &U256, &Option)| + (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), + DispatchClass::Normal, + Pays::Yes, + )] fn create( origin, init: Vec, @@ -301,7 +311,12 @@ decl_module! { } /// Issue an EVM create2 operation. - #[weight = FunctionOf(|(_, _, _, gas_limit, gas_price, _): (&Vec, &H256, &U256, &u32, &U256, &Option)| (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), DispatchClass::Normal, true)] + #[weight = FunctionOf( + |(_, _, _, gas_limit, gas_price, _): (&Vec, &H256, &U256, &u32, &U256, &Option)| + (*gas_price).saturated_into::().saturating_mul(*gas_limit as Weight), + DispatchClass::Normal, + Pays::Yes, + )] fn create2( origin, init: Vec, diff --git a/frame/example/src/lib.rs b/frame/example/src/lib.rs index e7a5a0c02e5..cfc313ad49c 100644 --- a/frame/example/src/lib.rs +++ b/frame/example/src/lib.rs @@ -256,7 +256,7 @@ use sp_std::marker::PhantomData; use frame_support::{ dispatch::DispatchResult, decl_module, decl_storage, decl_event, - weights::{DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, MINIMUM_WEIGHT}, + weights::{DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, MINIMUM_WEIGHT, Pays}, }; use sp_std::prelude::*; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -305,8 +305,8 @@ impl ClassifyDispatch<(&BalanceOf,)> for WeightFor } impl PaysFee<(&BalanceOf,)> for WeightForSetDummy { - fn pays_fee(&self, _target: (&BalanceOf,)) -> bool { - true + fn pays_fee(&self, _target: (&BalanceOf,)) -> Pays { + Pays::Yes } } diff --git a/frame/recovery/src/lib.rs b/frame/recovery/src/lib.rs index e0397cc1a5d..213696e5fb5 100644 --- a/frame/recovery/src/lib.rs +++ b/frame/recovery/src/lib.rs @@ -159,7 +159,7 @@ use codec::{Encode, Decode}; use frame_support::{ decl_module, decl_event, decl_storage, decl_error, ensure, - Parameter, RuntimeDebug, weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf}, + Parameter, RuntimeDebug, weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf, Pays}, traits::{Currency, ReservableCurrency, Get, BalanceStatus}, dispatch::PostDispatchInfo, }; @@ -338,7 +338,7 @@ decl_module! { #[weight = FunctionOf( |args: (&T::AccountId, &Box<::Call>)| args.1.get_dispatch_info().weight + 10_000, |args: (&T::AccountId, &Box<::Call>)| args.1.get_dispatch_info().class, - true + Pays::Yes, )] fn as_recovered(origin, account: T::AccountId, diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index 3e53b7a505b..1ff8a7ad795 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -250,7 +250,7 @@ mod tests { use frame_support::{ impl_outer_event, impl_outer_origin, impl_outer_dispatch, parameter_types, assert_ok, traits::{OnInitialize, OnFinalize, schedule::{Anon, Named}}, - weights::{DispatchClass, FunctionOf} + weights::{DispatchClass, FunctionOf, Pays} }; use sp_core::H256; // The testing primitives are very useful for avoiding having to work with signatures @@ -293,7 +293,7 @@ mod tests { #[weight = FunctionOf( |args: (&u32, &Weight)| *args.1, |_: (&u32, &Weight)| DispatchClass::Normal, - true + Pays::Yes, )] fn log(origin, i: u32, weight: Weight) { ensure_root(origin)?; diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index ce0de2027c7..edbdc5b8e05 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -93,7 +93,7 @@ use sp_runtime::traits::{StaticLookup, Dispatchable}; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, ensure, }; -use frame_support::weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf}; +use frame_support::weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf, Pays}; use frame_system::{self as system, ensure_signed}; pub trait Trait: frame_system::Trait { @@ -124,7 +124,7 @@ decl_module! { #[weight = FunctionOf( |args: (&Box<::Call>,)| args.0.get_dispatch_info().weight + 10_000, |args: (&Box<::Call>,)| args.0.get_dispatch_info().class, - true + Pays::Yes, )] fn sudo(origin, call: Box<::Call>) { // This is a public call, so we ensure that the origin is some signed account. @@ -180,7 +180,7 @@ decl_module! { |args: (&::Source, &Box<::Call>,)| { args.1.get_dispatch_info().class }, - true + Pays::Yes, )] fn sudo_as(origin, who: ::Source, call: Box<::Call>) { // This is a public call, so we ensure that the origin is some signed account. diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index e25efec0a91..6d3027dbd72 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -2045,7 +2045,7 @@ macro_rules! __check_reserved_fn_name { #[allow(dead_code)] mod tests { use super::*; - use crate::weights::{MINIMUM_WEIGHT, DispatchInfo, DispatchClass}; + use crate::weights::{MINIMUM_WEIGHT, DispatchInfo, DispatchClass, Pays}; use crate::traits::{ CallMetadata, GetCallMetadata, GetCallName, OnInitialize, OnFinalize, OnRuntimeUpgrade }; @@ -2248,12 +2248,12 @@ mod tests { // operational. assert_eq!( Call::::operational().get_dispatch_info(), - DispatchInfo { weight: 5, class: DispatchClass::Operational, pays_fee: true }, + DispatchInfo { weight: 5, class: DispatchClass::Operational, pays_fee: Pays::Yes }, ); // custom basic assert_eq!( Call::::aux_3().get_dispatch_info(), - DispatchInfo { weight: 3, class: DispatchClass::Normal, pays_fee: true }, + DispatchInfo { weight: 3, class: DispatchClass::Normal, pays_fee: Pays::Yes }, ); } diff --git a/frame/support/src/weights.rs b/frame/support/src/weights.rs index 6cf2047cf6c..cffb4f83a4a 100644 --- a/frame/support/src/weights.rs +++ b/frame/support/src/weights.rs @@ -35,7 +35,7 @@ //! configuration: //! //! 1. Define only weight, **in which case `ClassifyDispatch` will be `Normal` and `PaysFee` will be -//! `true`**. +//! `Yes`**. //! //! ``` //! # use frame_system::{self as system, Trait}; @@ -48,7 +48,7 @@ //! # fn main() {} //! ``` //! -//! 2. Define weight and class, **in which case `PaysFee` would be `true`**. +//! 2.1 Define weight and class, **in which case `PaysFee` would be `Yes`**. //! //! ``` //! # use frame_system::{self as system, Trait}; @@ -62,14 +62,28 @@ //! # fn main() {} //! ``` //! +//! 2.2 Define weight and `PaysFee`, **in which case `ClassifyDispatch` would be `Normal`**. +//! +//! ``` +//! # use frame_system::{self as system, Trait}; +//! # use frame_support::weights::Pays; +//! frame_support::decl_module! { +//! pub struct Module for enum Call where origin: T::Origin { +//! #[weight = (1000, Pays::No)] +//! fn dispatching(origin) { unimplemented!() } +//! } +//! } +//! # fn main() {} +//! ``` +//! //! 3. Define all 3 parameters. //! //! ``` //! # use frame_system::{self as system, Trait}; -//! # use frame_support::weights::DispatchClass; +//! # use frame_support::weights::{DispatchClass, Pays}; //! frame_support::decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = (1000, DispatchClass::Operational, false)] +//! #[weight = (1000, DispatchClass::Operational, Pays::No)] //! fn dispatching(origin) { unimplemented!() } //! } //! } @@ -86,7 +100,7 @@ //! //! ``` //! # use frame_system::{self as system, Trait}; -//! # use frame_support::weights::{DispatchClass, FunctionOf}; +//! # use frame_support::weights::{DispatchClass, FunctionOf, Pays}; //! frame_support::decl_module! { //! pub struct Module for enum Call where origin: T::Origin { //! #[weight = FunctionOf( @@ -95,7 +109,7 @@ //! // class, fixed. //! DispatchClass::Operational, //! // pays fee, function. -//! |args: (&u32, &u64)| *args.0 > 1000, +//! |args: (&u32, &u64)| if *args.0 > 1000 { Pays::Yes } else { Pays::No }, //! )] //! fn dispatching(origin, a: u32, b: u64) { unimplemented!() } //! } @@ -146,10 +160,23 @@ pub trait ClassifyDispatch { } /// Indicates if dispatch function should pay fees or not. -/// If set to false, the block resource limits are applied, yet no fee is deducted. +/// If set to `Pays::No`, the block resource limits are applied, yet no fee is deducted. pub trait PaysFee { - fn pays_fee(&self, _target: T) -> bool { - true + fn pays_fee(&self, _target: T) -> Pays; +} + +/// Explicit enum to denote if a transaction pays fee or not. +#[derive(Clone, Copy, Eq, PartialEq, RuntimeDebug, Encode, Decode)] +pub enum Pays { + /// Transactor will pay related fees. + Yes, + /// Transactor will NOT pay related fees. + No, +} + +impl Default for Pays { + fn default() -> Self { + Self::Yes } } @@ -191,7 +218,7 @@ pub struct DispatchInfo { /// Class of this transaction. pub class: DispatchClass, /// Does this transaction pay fees. - pub pays_fee: bool, + pub pays_fee: Pays, } /// A `Dispatchable` function (aka transaction) that can carry some static information along with @@ -289,25 +316,25 @@ impl ClassifyDispatch for Weight { } impl PaysFee for Weight { - fn pays_fee(&self, _: T) -> bool { - true + fn pays_fee(&self, _: T) -> Pays { + Pays::Yes } } -impl WeighData for (Weight, DispatchClass, bool) { +impl WeighData for (Weight, DispatchClass, Pays) { fn weigh_data(&self, _: T) -> Weight { return self.0 } } -impl ClassifyDispatch for (Weight, DispatchClass, bool) { +impl ClassifyDispatch for (Weight, DispatchClass, Pays) { fn classify_dispatch(&self, _: T) -> DispatchClass { self.1 } } -impl PaysFee for (Weight, DispatchClass, bool) { - fn pays_fee(&self, _: T) -> bool { +impl PaysFee for (Weight, DispatchClass, Pays) { + fn pays_fee(&self, _: T) -> Pays { self.2 } } @@ -325,25 +352,25 @@ impl ClassifyDispatch for (Weight, DispatchClass) { } impl PaysFee for (Weight, DispatchClass) { - fn pays_fee(&self, _: T) -> bool { - true + fn pays_fee(&self, _: T) -> Pays { + Pays::Yes } } -impl WeighData for (Weight, bool) { +impl WeighData for (Weight, Pays) { fn weigh_data(&self, _: T) -> Weight { return self.0 } } -impl ClassifyDispatch for (Weight, bool) { +impl ClassifyDispatch for (Weight, Pays) { fn classify_dispatch(&self, _: T) -> DispatchClass { DispatchClass::Normal } } -impl PaysFee for (Weight, bool) { - fn pays_fee(&self, _: T) -> bool { +impl PaysFee for (Weight, Pays) { + fn pays_fee(&self, _: T) -> Pays { self.1 } } @@ -355,8 +382,8 @@ impl PaysFee for (Weight, bool) { /// argument list as the dispatched, wrapped in a tuple. /// - `CD`: a raw `DispatchClass` value or a closure that returns a `DispatchClass` /// with the same argument list as the dispatched, wrapped in a tuple. -/// - `PF`: a `bool` for whether this dispatch pays fee or not or a closure that -/// returns a bool with the same argument list as the dispatched, wrapped in a tuple. +/// - `PF`: a `Pays` variant for whether this dispatch pays fee or not or a closure that +/// returns a `Pays` variant with the same argument list as the dispatched, wrapped in a tuple. pub struct FunctionOf(pub WD, pub CD, pub PF); // `WeighData` as a raw value @@ -392,17 +419,17 @@ impl ClassifyDispatch for FunctionOf where } // `PaysFee` as a raw value -impl PaysFee for FunctionOf { - fn pays_fee(&self, _: Args) -> bool { +impl PaysFee for FunctionOf { + fn pays_fee(&self, _: Args) -> Pays { self.2 } } // `PaysFee` as a closure impl PaysFee for FunctionOf where - PF : Fn(Args) -> bool + PF : Fn(Args) -> Pays { - fn pays_fee(&self, args: Args) -> bool { + fn pays_fee(&self, args: Args) -> Pays { (self.2)(args) } } @@ -437,7 +464,7 @@ impl GetDispatchInfo for sp_runtime::testing::TestX // for testing: weight == size. DispatchInfo { weight: self.encode().len() as _, - pays_fee: true, + pays_fee: Pays::Yes, ..Default::default() } } @@ -504,14 +531,17 @@ mod tests { #[weight = (1000, DispatchClass::Mandatory)] fn f01(_origin) { unimplemented!(); } - #[weight = (1000, DispatchClass::Operational, false)] + #[weight = (1000, Pays::No)] fn f02(_origin) { unimplemented!(); } + #[weight = (1000, DispatchClass::Operational, Pays::No)] + fn f03(_origin) { unimplemented!(); } + // weight = a x 10 + b - #[weight = FunctionOf(|args: (&u32, &u32)| (args.0 * 10 + args.1) as Weight, DispatchClass::Normal, true)] + #[weight = FunctionOf(|args: (&u32, &u32)| (args.0 * 10 + args.1) as Weight, DispatchClass::Normal, Pays::Yes)] fn f11(_origin, _a: u32, _eb: u32) { unimplemented!(); } - #[weight = FunctionOf(|_: (&u32, &u32)| 0, DispatchClass::Operational, true)] + #[weight = FunctionOf(|_: (&u32, &u32)| 0, DispatchClass::Operational, Pays::Yes)] fn f12(_origin, _a: u32, _eb: u32) { unimplemented!(); } #[weight = T::DbWeight::get().reads(3) + T::DbWeight::get().writes(2) + 10_000] @@ -529,19 +559,25 @@ mod tests { let info = Call::::f00().get_dispatch_info(); assert_eq!(info.weight, 1000); assert_eq!(info.class, DispatchClass::Normal); - assert_eq!(info.pays_fee, true); + assert_eq!(info.pays_fee, Pays::Yes); // #[weight = (1000, DispatchClass::Mandatory)] let info = Call::::f01().get_dispatch_info(); assert_eq!(info.weight, 1000); assert_eq!(info.class, DispatchClass::Mandatory); - assert_eq!(info.pays_fee, true); + assert_eq!(info.pays_fee, Pays::Yes); - // #[weight = (1000, DispatchClass::Operational, false)] + // #[weight = (1000, Pays::No)] let info = Call::::f02().get_dispatch_info(); assert_eq!(info.weight, 1000); + assert_eq!(info.class, DispatchClass::Normal); + assert_eq!(info.pays_fee, Pays::No); + + // #[weight = (1000, DispatchClass::Operational, Pays::No)] + let info = Call::::f03().get_dispatch_info(); + assert_eq!(info.weight, 1000); assert_eq!(info.class, DispatchClass::Operational); - assert_eq!(info.pays_fee, false); + assert_eq!(info.pays_fee, Pays::No); assert_eq!(Call::::f11(10, 20).get_dispatch_info().weight, 120); assert_eq!(Call::::f11(10, 20).get_dispatch_info().class, DispatchClass::Normal); diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 115b681adc6..d9b8b681087 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -120,7 +120,10 @@ use frame_support::{ Contains, Get, ModuleToIndex, OnNewAccount, OnKilledAccount, IsDeadAccount, Happened, StoredMap, EnsureOrigin, }, - weights::{Weight, MINIMUM_WEIGHT, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, FunctionOf} + weights::{ + Weight, MINIMUM_WEIGHT, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, + FunctionOf, Pays, + } }; use codec::{Encode, Decode, FullCodec, EncodeLike}; @@ -472,13 +475,19 @@ decl_module! { pub struct Module for enum Call where origin: T::Origin { type Error = Error; + /// The maximum weight of a block. + const MaximumBlockWeight: Weight = T::MaximumBlockWeight::get(); + + /// The maximum length of a block (in bytes). + const MaximumBlockLength: u32 = T::MaximumBlockLength::get(); + /// A dispatch that will fill the block weight up to the given ratio. // TODO: This should only be available for testing, rather than in general usage, but // that's not possible at present (since it's within the decl_module macro). #[weight = FunctionOf( |(ratio,): (&Perbill,)| *ratio * T::MaximumBlockWeight::get(), DispatchClass::Operational, - true, + Pays::Yes, )] fn fill_block(origin, _ratio: Perbill) { ensure_root(origin)?; @@ -1990,7 +1999,7 @@ pub(crate) mod tests { fn signed_ext_check_weight_works_operational_tx() { new_test_ext().execute_with(|| { let normal = DispatchInfo { weight: 100, ..Default::default() }; - let op = DispatchInfo { weight: 100, class: DispatchClass::Operational, pays_fee: true }; + let op = DispatchInfo { weight: 100, class: DispatchClass::Operational, pays_fee: Pays::Yes }; let len = 0_usize; let normal_limit = normal_weight_limit(); @@ -2012,8 +2021,8 @@ pub(crate) mod tests { #[test] fn signed_ext_check_weight_priority_works() { new_test_ext().execute_with(|| { - let normal = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: true }; - let op = DispatchInfo { weight: 100, class: DispatchClass::Operational, pays_fee: true }; + let normal = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; + let op = DispatchInfo { weight: 100, class: DispatchClass::Operational, pays_fee: Pays::Yes }; let len = 0_usize; let priority = CheckWeight::(PhantomData) @@ -2046,7 +2055,7 @@ pub(crate) mod tests { reset_check_weight(&normal, normal_limit + 1, true); // Operational ones don't have this limit. - let op = DispatchInfo { weight: 0, class: DispatchClass::Operational, pays_fee: true }; + let op = DispatchInfo { weight: 0, class: DispatchClass::Operational, pays_fee: Pays::Yes }; reset_check_weight(&op, normal_limit, false); reset_check_weight(&op, normal_limit + 100, false); reset_check_weight(&op, 1024, false); @@ -2073,7 +2082,7 @@ pub(crate) mod tests { #[test] fn signed_ext_check_era_should_change_longevity() { new_test_ext().execute_with(|| { - let normal = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: true }; + let normal = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; let len = 0_usize; let ext = ( CheckWeight::(PhantomData), diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 75809e0ed6c..95845990b8e 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -36,7 +36,7 @@ use codec::{Encode, Decode}; use frame_support::{ decl_storage, decl_module, traits::{Currency, Get, OnUnbalanced, ExistenceRequirement, WithdrawReason, Imbalance}, - weights::{Weight, DispatchInfo, PostDispatchInfo, GetDispatchInfo}, + weights::{Weight, DispatchInfo, PostDispatchInfo, GetDispatchInfo, Pays}, dispatch::DispatchResult, }; use sp_runtime::{ @@ -166,7 +166,7 @@ impl Module where info: &DispatchInfoOf, tip: BalanceOf, ) -> BalanceOf { - if info.pays_fee { + if info.pays_fee == Pays::Yes { let len = >::from(len); let per_byte = T::TransactionByteFee::get(); let len_fee = per_byte.saturating_mul(len); @@ -505,7 +505,8 @@ mod tests { /// create a transaction info struct from weight. Handy to avoid building the whole struct. pub fn info_from_weight(w: Weight) -> DispatchInfo { - DispatchInfo { weight: w, pays_fee: true, ..Default::default() } + // pays: yes -- class: normal + DispatchInfo { weight: w, ..Default::default() } } fn post_info_from_weight(w: Weight) -> PostDispatchInfo { @@ -565,7 +566,7 @@ mod tests { let pre = ChargeTransactionPayment::::from(5 /* tipped */) .pre_dispatch(&2, CALL, &info_from_weight(100), len) .unwrap(); - // 5 base fee, 3/2 * 10 byte fee, 3/2 * 100 weight fee, 5 tip + // 5 base fee, 3/2 * 10 byte fee, 3/2 * 100 weight fee, 5 tip assert_eq!(Balances::free_balance(2), 200 - 5 - 15 - 150 - 5); assert!( @@ -617,7 +618,7 @@ mod tests { let operational_transaction = DispatchInfo { weight: 0, class: DispatchClass::Operational, - pays_fee: false, + pays_fee: Pays::No, }; assert!( ChargeTransactionPayment::::from(0) @@ -629,7 +630,7 @@ mod tests { let free_transaction = DispatchInfo { weight: 0, class: DispatchClass::Normal, - pays_fee: true, + pays_fee: Pays::Yes, }; assert!( ChargeTransactionPayment::::from(0) @@ -711,14 +712,14 @@ mod tests { let dispatch_info = DispatchInfo { weight: 0, class: DispatchClass::Operational, - pays_fee: false, + pays_fee: Pays::No, }; assert_eq!(Module::::compute_fee(0, &dispatch_info, 10), 10); // No tip, only base fee works let dispatch_info = DispatchInfo { weight: 0, class: DispatchClass::Operational, - pays_fee: true, + pays_fee: Pays::Yes, }; assert_eq!(Module::::compute_fee(0, &dispatch_info, 0), 100); // Tip + base fee works @@ -729,7 +730,7 @@ mod tests { let dispatch_info = DispatchInfo { weight: 1000, class: DispatchClass::Operational, - pays_fee: true, + pays_fee: Pays::Yes, }; assert_eq!(Module::::compute_fee(0, &dispatch_info, 0), 1100); }); @@ -750,7 +751,7 @@ mod tests { let dispatch_info = DispatchInfo { weight: 0, class: DispatchClass::Operational, - pays_fee: true, + pays_fee: Pays::Yes, }; assert_eq!(Module::::compute_fee(0, &dispatch_info, 0), 100); @@ -758,7 +759,7 @@ mod tests { let dispatch_info = DispatchInfo { weight: 123, class: DispatchClass::Operational, - pays_fee: true, + pays_fee: Pays::Yes, }; // 123 weight, 456 length, 100 base // adjustable fee = (123 * 1) + (456 * 10) = 4683 @@ -781,7 +782,7 @@ mod tests { let dispatch_info = DispatchInfo { weight: Weight::max_value(), class: DispatchClass::Operational, - pays_fee: true, + pays_fee: Pays::Yes, }; assert_eq!( Module::::compute_fee( diff --git a/frame/utility/src/lib.rs b/frame/utility/src/lib.rs index 4a1c36b5ad2..0ad35c3e283 100644 --- a/frame/utility/src/lib.rs +++ b/frame/utility/src/lib.rs @@ -67,7 +67,7 @@ use sp_core::TypeId; use sp_io::hashing::blake2_256; use frame_support::{decl_module, decl_event, decl_error, decl_storage, Parameter, ensure, RuntimeDebug}; use frame_support::{traits::{Get, ReservableCurrency, Currency}, - weights::{Weight, GetDispatchInfo, DispatchClass, FunctionOf}, + weights::{Weight, GetDispatchInfo, DispatchClass, FunctionOf, Pays}, dispatch::PostDispatchInfo, }; use frame_system::{self as system, ensure_signed}; @@ -242,7 +242,7 @@ decl_module! { DispatchClass::Normal } }, - true + Pays::Yes, )] fn batch(origin, calls: Vec<::Call>) { for (index, call) in calls.into_iter().enumerate() { @@ -265,7 +265,7 @@ decl_module! { #[weight = FunctionOf( |args: (&u16, &Box<::Call>)| args.1.get_dispatch_info().weight + 10_000, |args: (&u16, &Box<::Call>)| args.1.get_dispatch_info().class, - true + Pays::Yes, )] fn as_sub(origin, index: u16, call: Box<::Call>) -> DispatchResult { let who = ensure_signed(origin)?; @@ -322,7 +322,7 @@ decl_module! { |args: (&u16, &Vec, &Option>, &Box<::Call>)| { args.3.get_dispatch_info().class }, - true + Pays::Yes, )] fn as_multi(origin, threshold: u16, @@ -421,7 +421,7 @@ decl_module! { 10_000 * (args.1.len() as Weight + 1) }, DispatchClass::Normal, - true + Pays::Yes, )] fn approve_as_multi(origin, threshold: u16, @@ -496,7 +496,7 @@ decl_module! { 10_000 * (args.1.len() as Weight + 1) }, DispatchClass::Normal, - true + Pays::Yes, )] fn cancel_as_multi(origin, threshold: u16, -- GitLab From 13f9c1f8a5ddc0ce05f6b008c26439dc9e74d278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 22 Apr 2020 15:56:27 +0200 Subject: [PATCH 025/167] Make `version_is_full` test work without `.git` being available (#5737) --- bin/node/cli/tests/version.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/node/cli/tests/version.rs b/bin/node/cli/tests/version.rs index 5555efd3854..6f99d7c24ae 100644 --- a/bin/node/cli/tests/version.rs +++ b/bin/node/cli/tests/version.rs @@ -20,7 +20,7 @@ use regex::Regex; use std::process::Command; fn expected_regex() -> Regex { - Regex::new(r"^substrate (\d+\.\d+\.\d+(?:-.+?)?)-([a-f\d]+)-(.+?)-(.+?)(?:-(.+))?$").unwrap() + Regex::new(r"^substrate (\d+\.\d+\.\d+(?:-.+?)?)-([a-f\d]+|unknown-commit)-(.+?)-(.+?)(?:-(.+))?$").unwrap() } #[test] -- GitLab From 68dbd07ba365595ee6303a58062f9eb2585a327a Mon Sep 17 00:00:00 2001 From: Ashley Date: Wed, 22 Apr 2020 16:28:08 +0200 Subject: [PATCH 026/167] Fix the browser tests by not relying on Flaming Fir (#5728) * Fix the browser tests * Mistyping * Fix warnings Co-authored-by: Pierre Krieger --- bin/node/browser-testing/src/lib.rs | 33 ++++++++--------------------- bin/node/cli/src/browser.rs | 11 ++++++---- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/bin/node/browser-testing/src/lib.rs b/bin/node/browser-testing/src/lib.rs index 06038f90af7..65f1e4620ba 100644 --- a/bin/node/browser-testing/src/lib.rs +++ b/bin/node/browser-testing/src/lib.rs @@ -32,14 +32,9 @@ use wasm_bindgen_futures::JsFuture; use wasm_bindgen::JsValue; use jsonrpc_core::types::{MethodCall, Success, Version, Params, Id}; use serde::de::DeserializeOwned; -use futures_timer::Delay; -use std::time::Duration; -use futures::FutureExt; wasm_bindgen_test_configure!(run_in_browser); -const CHAIN_SPEC: &str = include_str!("../../cli/res/flaming-fir.json"); - fn rpc_call(method: &str) -> String { serde_json::to_string(&MethodCall { jsonrpc: Some(Version::V2), @@ -59,26 +54,16 @@ fn deserialize_rpc_result(js_value: JsValue) -> T { #[wasm_bindgen_test] async fn runs() { - let mut client = node_cli::start_client(CHAIN_SPEC.into(), "info".into()) + let mut client = node_cli::start_client(None, "info".into()) .await .unwrap(); - let mut test_timeout = Delay::new(Duration::from_secs(45)); - loop { - // Check that timeout hasn't expired. - assert!((&mut test_timeout).now_or_never().is_none(), "Test timed out."); - - // Let the node do a bit of work. - Delay::new(Duration::from_secs(5)).await; - - let state: sc_rpc_api::system::Health = deserialize_rpc_result( - JsFuture::from(client.rpc_send(&rpc_call("system_health"))) - .await - .unwrap() - ); - - if state.should_have_peers && state.peers > 0 && state.is_syncing { - break; - } - } + // Check that the node handles rpc calls. + // TODO: Re-add the code that checks if the node is syncing. + let chain_name: String = deserialize_rpc_result( + JsFuture::from(client.rpc_send(&rpc_call("system_chain"))) + .await + .unwrap() + ); + assert_eq!(chain_name, "Development"); } diff --git a/bin/node/cli/src/browser.rs b/bin/node/cli/src/browser.rs index 8c4d964d958..861d37c6058 100644 --- a/bin/node/cli/src/browser.rs +++ b/bin/node/cli/src/browser.rs @@ -25,17 +25,20 @@ use std::str::FromStr; /// Starts the client. #[wasm_bindgen] -pub async fn start_client(chain_spec: String, log_level: String) -> Result { +pub async fn start_client(chain_spec: Option, log_level: String) -> Result { start_inner(chain_spec, log_level) .await .map_err(|err| JsValue::from_str(&err.to_string())) } -async fn start_inner(chain_spec: String, log_level: String) -> Result> { +async fn start_inner(chain_spec: Option, log_level: String) -> Result> { set_console_error_panic_hook(); init_console_log(log::Level::from_str(&log_level)?)?; - let chain_spec = ChainSpec::from_json_bytes(chain_spec.as_bytes().to_vec()) - .map_err(|e| format!("{:?}", e))?; + let chain_spec = match chain_spec { + Some(chain_spec) => ChainSpec::from_json_bytes(chain_spec.as_bytes().to_vec()) + .map_err(|e| format!("{:?}", e))?, + None => crate::chain_spec::development_config(), + }; let config = browser_configuration(chain_spec).await?; -- GitLab From e6e1f8f9b9ad84dc1124d75b2dc21796e5c111dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Thu, 23 Apr 2020 08:42:53 +0100 Subject: [PATCH 027/167] slots: fix slot lenience methods (#5742) * slots: extract slot lenience from babe and aura * slots: add tests for slot lenience * slots: fix comment in test --- client/consensus/aura/src/lib.rs | 29 ++++---- client/consensus/babe/src/lib.rs | 36 ++++----- client/consensus/slots/src/lib.rs | 117 ++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 37 deletions(-) diff --git a/client/consensus/aura/src/lib.rs b/client/consensus/aura/src/lib.rs index 56674546d37..038e9e458cf 100644 --- a/client/consensus/aura/src/lib.rs +++ b/client/consensus/aura/src/lib.rs @@ -299,27 +299,28 @@ impl sc_consensus_slots::SimpleSlotWorker for AuraW fn proposing_remaining_duration( &self, head: &B::Header, - slot_info: &SlotInfo + slot_info: &SlotInfo, ) -> Option { - // never give more than 20 times more lenience. - const BACKOFF_CAP: u64 = 20; - let slot_remaining = self.slot_remaining_duration(slot_info); + let parent_slot = match find_pre_digest::(head) { Err(_) => return Some(slot_remaining), Ok(d) => d, }; - // we allow a lenience of the number of slots since the head of the - // chain was produced, minus 1 (since there is always a difference of at least 1) - // - // linear back-off. - // in normal cases we only attempt to issue blocks up to the end of the slot. - // when the chain has been stalled for a few slots, we give more lenience. - let slot_lenience = slot_info.number.saturating_sub(parent_slot + 1); - let slot_lenience = std::cmp::min(slot_lenience, BACKOFF_CAP); - let slot_lenience = Duration::from_secs(slot_lenience * slot_info.duration); - Some(slot_lenience + slot_remaining) + if let Some(slot_lenience) = + sc_consensus_slots::slot_lenience_exponential(parent_slot, slot_info) + { + debug!(target: "aura", + "No block for {} slots. Applying linear lenience of {}s", + slot_info.number.saturating_sub(parent_slot + 1), + slot_lenience.as_secs(), + ); + + Some(slot_remaining + slot_lenience) + } else { + Some(slot_remaining) + } } } diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index 092bf8153b9..59b49541821 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -510,38 +510,28 @@ impl sc_consensus_slots::SimpleSlotWorker for BabeWork fn proposing_remaining_duration( &self, head: &B::Header, - slot_info: &SlotInfo + slot_info: &SlotInfo, ) -> Option { - // never give more than 2^this times the lenience. - const BACKOFF_CAP: u64 = 8; - - // how many slots it takes before we double the lenience. - const BACKOFF_STEP: u64 = 2; - let slot_remaining = self.slot_remaining_duration(slot_info); + let parent_slot = match find_pre_digest::(head) { Err(_) => return Some(slot_remaining), Ok(d) => d.slot_number(), }; - // we allow a lenience of the number of slots since the head of the - // chain was produced, minus 1 (since there is always a difference of at least 1) - // - // exponential back-off. - // in normal cases we only attempt to issue blocks up to the end of the slot. - // when the chain has been stalled for a few slots, we give more lenience. - let slot_lenience = slot_info.number.saturating_sub(parent_slot + 1); - - let slot_lenience = std::cmp::min(slot_lenience, BACKOFF_CAP); - let slot_duration = slot_info.duration << (slot_lenience / BACKOFF_STEP); + if let Some(slot_lenience) = + sc_consensus_slots::slot_lenience_exponential(parent_slot, slot_info) + { + debug!(target: "babe", + "No block for {} slots. Applying exponential lenience of {}s", + slot_info.number.saturating_sub(parent_slot + 1), + slot_lenience.as_secs(), + ); - if slot_lenience >= 1 { - debug!(target: "babe", "No block for {} slots. Applying 2^({}/{}) lenience", - slot_lenience, slot_lenience, BACKOFF_STEP); + Some(slot_remaining + slot_lenience) + } else { + Some(slot_remaining) } - - let slot_lenience = Duration::from_secs(slot_duration); - Some(slot_lenience + slot_remaining) } } diff --git a/client/consensus/slots/src/lib.rs b/client/consensus/slots/src/lib.rs index 2a0739a831b..611e0fbb7b8 100644 --- a/client/consensus/slots/src/lib.rs +++ b/client/consensus/slots/src/lib.rs @@ -483,3 +483,120 @@ impl SlotDuration { self.0.clone() } } + +/// Calculate a slot duration lenience based on the number of missed slots from current +/// to parent. If the number of skipped slots is greated than 0 this method will apply +/// an exponential backoff of at most `2^7 * slot_duration`, if no slots were skipped +/// this method will return `None.` +pub fn slot_lenience_exponential(parent_slot: u64, slot_info: &SlotInfo) -> Option { + // never give more than 2^this times the lenience. + const BACKOFF_CAP: u64 = 7; + + // how many slots it takes before we double the lenience. + const BACKOFF_STEP: u64 = 2; + + // we allow a lenience of the number of slots since the head of the + // chain was produced, minus 1 (since there is always a difference of at least 1) + // + // exponential back-off. + // in normal cases we only attempt to issue blocks up to the end of the slot. + // when the chain has been stalled for a few slots, we give more lenience. + let skipped_slots = slot_info.number.saturating_sub(parent_slot + 1); + + if skipped_slots == 0 { + None + } else { + let slot_lenience = skipped_slots / BACKOFF_STEP; + let slot_lenience = std::cmp::min(slot_lenience, BACKOFF_CAP); + let slot_lenience = 1 << slot_lenience; + Some(Duration::from_millis(slot_lenience * slot_info.duration)) + } +} + +/// Calculate a slot duration lenience based on the number of missed slots from current +/// to parent. If the number of skipped slots is greated than 0 this method will apply +/// a linear backoff of at most `20 * slot_duration`, if no slots were skipped +/// this method will return `None.` +pub fn slot_lenience_linear(parent_slot: u64, slot_info: &SlotInfo) -> Option { + // never give more than 20 times more lenience. + const BACKOFF_CAP: u64 = 20; + + // we allow a lenience of the number of slots since the head of the + // chain was produced, minus 1 (since there is always a difference of at least 1) + // + // linear back-off. + // in normal cases we only attempt to issue blocks up to the end of the slot. + // when the chain has been stalled for a few slots, we give more lenience. + let skipped_slots = slot_info.number.saturating_sub(parent_slot + 1); + + if skipped_slots == 0 { + None + } else { + let slot_lenience = std::cmp::min(skipped_slots, BACKOFF_CAP); + Some(Duration::from_millis(slot_lenience * slot_info.duration)) + } +} + +#[cfg(test)] +mod test { + use std::time::{Duration, Instant}; + + const SLOT_DURATION: Duration = Duration::from_millis(6000); + + fn slot(n: u64) -> super::slots::SlotInfo { + super::slots::SlotInfo { + number: n, + last_number: n - 1, + duration: SLOT_DURATION.as_millis() as u64, + timestamp: Default::default(), + inherent_data: Default::default(), + ends_at: Instant::now(), + } + } + + #[test] + fn linear_slot_lenience() { + // if no slots are skipped there should be no lenience + assert_eq!(super::slot_lenience_linear(1, &slot(2)), None); + + // otherwise the lenience is incremented linearly with + // the number of skipped slots. + for n in 3..=22 { + assert_eq!( + super::slot_lenience_linear(1, &slot(n)), + Some(SLOT_DURATION * (n - 2) as u32), + ); + } + + // but we cap it to a maximum of 20 slots + assert_eq!( + super::slot_lenience_linear(1, &slot(23)), + Some(SLOT_DURATION * 20), + ); + } + + #[test] + fn exponential_slot_lenience() { + // if no slots are skipped there should be no lenience + assert_eq!(super::slot_lenience_exponential(1, &slot(2)), None); + + // otherwise the lenience is incremented exponentially every two slots + for n in 3..=17 { + assert_eq!( + super::slot_lenience_exponential(1, &slot(n)), + Some(SLOT_DURATION * 2u32.pow((n / 2 - 1) as u32)), + ); + } + + // but we cap it to a maximum of 14 slots + assert_eq!( + super::slot_lenience_exponential(1, &slot(18)), + Some(SLOT_DURATION * 2u32.pow(7)), + ); + + assert_eq!( + super::slot_lenience_exponential(1, &slot(19)), + Some(SLOT_DURATION * 2u32.pow(7)), + ); + } +} -- GitLab From 435a7108c2a0f2ebb0d753f58725b194dbfb5ae9 Mon Sep 17 00:00:00 2001 From: Toralf Wittner Date: Thu, 23 Apr 2020 09:52:20 +0200 Subject: [PATCH 028/167] network: Only insert global addresses into the DHT. (#5735) * network: Only insert global addresses into the DHT. Currently every address reported via libp2p-identify is inserted into the DHT which thus contains a multitude of unreachable addresses such as from 127.0.0.0/8 or 10.0.0.0/8. Issue #5099 suggested a dedicated service over UDP to gauge the reachability of an address, which would however incur extra I/O costs and be of limited use. As an alternative and simpler tactic, this PR only allows global IP addresses to be inserted into the DHT unless an explicit command-line flag `--allow-non-global-addresses-in-dht` is given or a node is started with `--dev`. This opt-in behaviour is meant to allow site-local networks to still make use of a DHT. * Enable non-global in more test setups. * Replace command-line option with different name. * Another test fix. --- Cargo.lock | 7 +++++ client/cli/src/params/network_params.rs | 7 +++++ client/network/Cargo.toml | 13 +++++---- client/network/src/config.rs | 5 ++++ client/network/src/discovery.rs | 38 +++++++++++++++++++++++-- client/network/src/service.rs | 1 + client/network/test/src/lib.rs | 2 ++ client/service/test/src/lib.rs | 2 ++ 8 files changed, 67 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7b36a7d08a4..cc103784016 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2283,6 +2283,12 @@ dependencies = [ "libc", ] +[[package]] +name = "ip_network" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ee15951c035f79eddbef745611ec962f63f4558f1dadf98ab723cc603487c6f" + [[package]] name = "ipnet" version = "2.3.0" @@ -6417,6 +6423,7 @@ dependencies = [ "futures-timer 3.0.2", "futures_codec", "hex", + "ip_network", "libp2p", "linked-hash-map", "linked_hash_set", diff --git a/client/cli/src/params/network_params.rs b/client/cli/src/params/network_params.rs index c08a9e1c93e..e36bcfca49e 100644 --- a/client/cli/src/params/network_params.rs +++ b/client/cli/src/params/network_params.rs @@ -89,6 +89,12 @@ pub struct NetworkParams { /// enough confidence that this feature is properly working. #[structopt(long)] pub no_yamux_flow_control: bool, + + /// Enable peer discovery on local networks. + /// + /// By default this option is true for `--dev` and false otherwise. + #[structopt(long)] + pub discover_local: bool, } impl NetworkParams { @@ -141,6 +147,7 @@ impl NetworkParams { use_yamux_flow_control: !self.no_yamux_flow_control, }, max_parallel_downloads: self.max_parallel_downloads, + allow_non_globals_in_dht: self.discover_local || is_dev } } } diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index f8e35a924f3..9e5aa51a991 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -27,39 +27,40 @@ erased-serde = "0.3.9" fnv = "1.0.6" fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } futures = "0.3.4" -futures_codec = "0.3.3" futures-timer = "3.0.1" -wasm-timer = "0.2" +futures_codec = "0.3.3" +hex = "0.4.0" +ip_network = "0.3.4" linked-hash-map = "0.5.2" linked_hash_set = "0.1.3" log = "0.4.8" lru = "0.4.0" nohash-hasher = "0.2.0" parking_lot = "0.10.0" +pin-project = "0.4.6" +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } prost = "0.6.1" rand = "0.7.2" -hex = "0.4.0" sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } sc-client = { version = "0.8.0-dev", path = "../" } sc-client-api = { version = "2.0.0-dev", path = "../api" } sc-peerset = { version = "2.0.0-dev", path = "../peerset" } -pin-project = "0.4.6" serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" slog = { version = "2.5.2", features = ["nested-values"] } slog_derive = "0.2.0" smallvec = "0.6.10" sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } thiserror = "1" unsigned-varint = { version = "0.3.1", features = ["futures", "futures-codec"] } void = "1.0.2" +wasm-timer = "0.2" zeroize = "1.0.0" [dependencies.libp2p] diff --git a/client/network/src/config.rs b/client/network/src/config.rs index c53d2734d25..84e2da7018a 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -398,6 +398,8 @@ pub struct NetworkConfiguration { pub transport: TransportConfig, /// Maximum number of peers to ask the same blocks in parallel. pub max_parallel_downloads: u32, + /// Should we insert non-global addresses into the DHT? + pub allow_non_globals_in_dht: bool } impl NetworkConfiguration { @@ -428,6 +430,7 @@ impl NetworkConfiguration { use_yamux_flow_control: false, }, max_parallel_downloads: 5, + allow_non_globals_in_dht: false } } } @@ -448,6 +451,7 @@ impl NetworkConfiguration { .collect() ]; + config.allow_non_globals_in_dht = true; config } @@ -466,6 +470,7 @@ impl NetworkConfiguration { .collect() ]; + config.allow_non_globals_in_dht = true; config } } diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index f3b9c5cc718..56c08cc56cf 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -48,6 +48,7 @@ use crate::config::ProtocolId; use futures::prelude::*; use futures_timer::Delay; +use ip_network::IpNetwork; use libp2p::core::{connection::{ConnectionId, ListenerId}, ConnectedPoint, Multiaddr, PeerId, PublicKey}; use libp2p::swarm::{NetworkBehaviour, NetworkBehaviourAction, PollParameters, ProtocolsHandler}; use libp2p::swarm::protocols_handler::multi::MultiHandler; @@ -71,6 +72,7 @@ pub struct DiscoveryConfig { local_peer_id: PeerId, user_defined: Vec<(PeerId, Multiaddr)>, allow_private_ipv4: bool, + allow_non_globals_in_dht: bool, discovery_only_if_under_num: u64, enable_mdns: bool, kademlias: HashMap> @@ -83,6 +85,7 @@ impl DiscoveryConfig { local_peer_id: local_public_key.into_peer_id(), user_defined: Vec::new(), allow_private_ipv4: true, + allow_non_globals_in_dht: false, discovery_only_if_under_num: std::u64::MAX, enable_mdns: false, kademlias: HashMap::new() @@ -123,6 +126,12 @@ impl DiscoveryConfig { self } + /// Should non-global addresses be inserted to the DHT? + pub fn allow_non_globals_in_dht(&mut self, value: bool) -> &mut Self { + self.allow_non_globals_in_dht = value; + self + } + /// Should MDNS discovery be supported? pub fn with_mdns(&mut self, value: bool) -> &mut Self { if value && cfg!(target_os = "unknown") { @@ -190,6 +199,7 @@ impl DiscoveryConfig { } else { None.into() }, + allow_non_globals_in_dht: self.allow_non_globals_in_dht } } } @@ -219,6 +229,8 @@ pub struct DiscoveryBehaviour { allow_private_ipv4: bool, /// Number of active connections over which we interrupt the discovery process. discovery_only_if_under_num: u64, + /// Should non-global addresses be added to the DHT? + allow_non_globals_in_dht: bool } impl DiscoveryBehaviour { @@ -251,8 +263,12 @@ impl DiscoveryBehaviour { /// **Note**: It is important that you call this method, otherwise the discovery mechanism will /// not properly work. pub fn add_self_reported_address(&mut self, peer_id: &PeerId, addr: Multiaddr) { - for k in self.kademlias.values_mut() { - k.add_address(peer_id, addr.clone()) + if self.allow_non_globals_in_dht || self.can_add_to_dht(&addr) { + for k in self.kademlias.values_mut() { + k.add_address(peer_id, addr.clone()) + } + } else { + log::trace!(target: "sub-libp2p", "Ignoring self-reported address {} from {}", addr, peer_id); } } @@ -298,6 +314,23 @@ impl DiscoveryBehaviour { (id, size) }) } + + /// Can the given `Multiaddr` be put into the DHT? + /// + /// This test is successful only for global IP addresses and DNS names. + // + // NB: Currently all DNS names are allowed and no check for TLD suffixes is done + // because the set of valid domains is highly dynamic and would require frequent + // updates, for example by utilising publicsuffix.org or IANA. + pub fn can_add_to_dht(&self, addr: &Multiaddr) -> bool { + let ip = match addr.iter().next() { + Some(Protocol::Ip4(ip)) => IpNetwork::from(ip), + Some(Protocol::Ip6(ip)) => IpNetwork::from(ip), + Some(Protocol::Dns4(_)) | Some(Protocol::Dns6(_)) => return true, + _ => return false + }; + ip.is_global() + } } /// Event generated by the `DiscoveryBehaviour`. @@ -714,6 +747,7 @@ mod tests { let mut config = DiscoveryConfig::new(keypair.public()); config.with_user_defined(user_defined.clone()) .allow_private_ipv4(true) + .allow_non_globals_in_dht(true) .discovery_limit(50); config.finish() }; diff --git a/client/network/src/service.rs b/client/network/src/service.rs index e360a8defec..95d711be73d 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -246,6 +246,7 @@ impl NetworkWorker { config.with_user_defined(known_addresses); config.discovery_limit(u64::from(params.network_config.out_peers) + 15); config.add_protocol(params.protocol_id.clone()); + config.allow_non_globals_in_dht(params.network_config.allow_non_globals_in_dht); match params.network_config.transport { TransportConfig::MemoryOnly => { diff --git a/client/network/test/src/lib.rs b/client/network/test/src/lib.rs index 7b070f80412..40b373163b5 100644 --- a/client/network/test/src/lib.rs +++ b/client/network/test/src/lib.rs @@ -611,6 +611,7 @@ pub trait TestNetFactory: Sized { ); network_config.transport = TransportConfig::MemoryOnly; network_config.listen_addresses = vec![listen_addr.clone()]; + network_config.allow_non_globals_in_dht = true; let network = NetworkWorker::new(sc_network::config::Params { role: Role::Full, @@ -687,6 +688,7 @@ pub trait TestNetFactory: Sized { ); network_config.transport = TransportConfig::MemoryOnly; network_config.listen_addresses = vec![listen_addr.clone()]; + network_config.allow_non_globals_in_dht = true; let network = NetworkWorker::new(sc_network::config::Params { role: Role::Light, diff --git a/client/service/test/src/lib.rs b/client/service/test/src/lib.rs index 9b9140dd8d3..810662edb07 100644 --- a/client/service/test/src/lib.rs +++ b/client/service/test/src/lib.rs @@ -150,6 +150,8 @@ fn node_config Date: Thu, 23 Apr 2020 09:58:43 +0200 Subject: [PATCH 029/167] client/network-gossip/state_machine: Reduce indentation level (#5714) * client/network-gossip/src/state_machine: Add unit test for on_incoming Add two unit tests to ensure `on_incoming` is ingoring discarded messages and reports and ignores messages from unknown peers. * client/network-gossip/state_machine: Reduce indentation level * client/network-gossip/bridge: Remove unnecessary into_iter * client/network-gossip/state_machine: Report success after register check * client/network-gossip/state_machine: Error not report on unregistered `peers` contains all the peers we're connected to. If we receive a message from a peer not in this list, that means there's an internal problem within the local client. It's not the fault of the peer in question. With the above in mind instead of reducing the reputation of such peer, log an error. --- client/network-gossip/src/bridge.rs | 2 +- client/network-gossip/src/state_machine.rs | 184 +++++++++++++-------- 2 files changed, 119 insertions(+), 67 deletions(-) diff --git a/client/network-gossip/src/bridge.rs b/client/network-gossip/src/bridge.rs index a15195111e8..26e49fce8a8 100644 --- a/client/network-gossip/src/bridge.rs +++ b/client/network-gossip/src/bridge.rs @@ -182,7 +182,7 @@ impl Future for GossipEngine { messages, ); - for (topic, notification) in to_forward.into_iter() { + for (topic, notification) in to_forward { if let Entry::Occupied(mut entry) = this.message_sinks.entry(topic) { trace!( target: "gossip", diff --git a/client/network-gossip/src/state_machine.rs b/client/network-gossip/src/state_machine.rs index 53b5b98245a..433457afe74 100644 --- a/client/network-gossip/src/state_machine.rs +++ b/client/network-gossip/src/state_machine.rs @@ -20,7 +20,7 @@ use std::collections::{HashMap, HashSet}; use std::sync::Arc; use std::iter; use std::time; -use log::trace; +use log::{error, trace}; use lru::LruCache; use libp2p::PeerId; use sp_runtime::traits::{Block as BlockT, Hash, HashFor}; @@ -41,8 +41,6 @@ mod rep { pub const GOSSIP_SUCCESS: Rep = Rep::new(1 << 4, "Successfull gossip"); /// Reputation change when a peer sends us a gossip message that we already knew about. pub const DUPLICATE_GOSSIP: Rep = Rep::new(-(1 << 2), "Duplicate gossip"); - /// Reputation change when a peer sends a message from a topic it isn't registered on. - pub const UNREGISTERED_TOPIC: Rep = Rep::new(-(1 << 10), "Unregistered gossip message topic"); } struct PeerConsensus { @@ -308,36 +306,37 @@ impl ConsensusGossip { validator.validate(&mut context, &who, &message) }; - let validation_result = match validation { - ValidationResult::ProcessAndKeep(topic) => Some((topic, true)), - ValidationResult::ProcessAndDiscard(topic) => Some((topic, false)), - ValidationResult::Discard => None, + let (topic, keep) = match validation { + ValidationResult::ProcessAndKeep(topic) => (topic, true), + ValidationResult::ProcessAndDiscard(topic) => (topic, false), + ValidationResult::Discard => { + trace!(target:"gossip", "Discard message from peer {}", who); + continue; + }, }; - if let Some((topic, keep)) = validation_result { - network.report_peer(who.clone(), rep::GOSSIP_SUCCESS); - if let Some(ref mut peer) = self.peers.get_mut(&who) { - peer.known_messages.insert(message_hash); - - to_forward.push((topic, TopicNotification { - message: message.clone(), - sender: Some(who.clone()) - })); - - if keep { - self.register_message_hashed( - message_hash, - topic, - message, - Some(who.clone()), - ); - } - } else { - trace!(target:"gossip", "Ignored statement from unregistered peer {}", who); - network.report_peer(who.clone(), rep::UNREGISTERED_TOPIC); + let peer = match self.peers.get_mut(&who) { + Some(peer) => peer, + None => { + error!(target:"gossip", "Got message from unregistered peer {}", who); + continue; } - } else { - trace!(target:"gossip", "Discard message from peer {}", who); + }; + + network.report_peer(who.clone(), rep::GOSSIP_SUCCESS); + peer.known_messages.insert(message_hash); + to_forward.push((topic, TopicNotification { + message: message.clone(), + sender: Some(who.clone()) + })); + + if keep { + self.register_message_hashed( + message_hash, + topic, + message, + Some(who.clone()), + ); } } @@ -416,9 +415,10 @@ impl ConsensusGossip { #[cfg(test)] mod tests { - use std::sync::Arc; + use futures::prelude::*; + use sc_network::{Event, ReputationChange}; use sp_runtime::testing::{H256, Block as RawBlock, ExtrinsicWrapper}; - + use std::{borrow::Cow, pin::Pin, sync::{Arc, Mutex}}; use super::*; type Block = RawBlock>; @@ -448,6 +448,52 @@ mod tests { } } + struct DiscardAll; + impl Validator for DiscardAll{ + fn validate( + &self, + _context: &mut dyn ValidatorContext, + _sender: &PeerId, + _data: &[u8], + ) -> ValidationResult { + ValidationResult::Discard + } + } + + #[derive(Clone, Default)] + struct NoOpNetwork { + inner: Arc>, + } + + #[derive(Clone, Default)] + struct NoOpNetworkInner { + peer_reports: Vec<(PeerId, ReputationChange)>, + } + + impl Network for NoOpNetwork { + fn event_stream(&self) -> Pin + Send>> { + unimplemented!(); + } + + fn report_peer(&self, peer_id: PeerId, reputation_change: ReputationChange) { + self.inner.lock().unwrap().peer_reports.push((peer_id, reputation_change)); + } + + fn disconnect_peer(&self, _: PeerId) { + unimplemented!(); + } + + fn write_notification(&self, _: PeerId, _: ConsensusEngineId, _: Vec) { + unimplemented!(); + } + + fn register_notifications_protocol(&self, _: ConsensusEngineId, _: Cow<'static, [u8]>) {} + + fn announce(&self, _: B::Hash, _: Vec) { + unimplemented!(); + } + } + #[test] fn collects_garbage() { struct AllowOne; @@ -528,42 +574,9 @@ mod tests { #[test] fn peer_is_removed_on_disconnect() { - struct TestNetwork; - impl Network for TestNetwork { - fn event_stream( - &self, - ) -> std::pin::Pin + Send>> { - unimplemented!("Not required in tests") - } - - fn report_peer(&self, _: PeerId, _: crate::ReputationChange) { - unimplemented!("Not required in tests") - } - - fn disconnect_peer(&self, _: PeerId) { - unimplemented!("Not required in tests") - } - - fn write_notification(&self, _: PeerId, _: crate::ConsensusEngineId, _: Vec) { - unimplemented!("Not required in tests") - } - - fn register_notifications_protocol( - &self, - _: ConsensusEngineId, - _: std::borrow::Cow<'static, [u8]>, - ) { - unimplemented!("Not required in tests") - } - - fn announce(&self, _: H256, _: Vec) { - unimplemented!("Not required in tests") - } - } - let mut consensus = ConsensusGossip::::new(Arc::new(AllowAll), [0, 0, 0, 0]); - let mut network = TestNetwork; + let mut network = NoOpNetwork::default(); let peer_id = PeerId::random(); consensus.new_peer(&mut network, peer_id.clone(), ObservedRole::Full); @@ -572,4 +585,43 @@ mod tests { consensus.peer_disconnected(&mut network, peer_id.clone()); assert!(!consensus.peers.contains_key(&peer_id)); } + + #[test] + fn on_incoming_ignores_discarded_messages() { + let to_forward = ConsensusGossip::::new( + Arc::new(DiscardAll), + [0, 0, 0, 0], + ).on_incoming( + &mut NoOpNetwork::default(), + PeerId::random(), + vec![vec![1, 2, 3]], + ); + + assert!( + to_forward.is_empty(), + "Expected `on_incoming` to ignore discarded message but got {:?}", to_forward, + ); + } + + #[test] + fn on_incoming_ignores_unregistered_peer() { + let mut network = NoOpNetwork::default(); + let remote = PeerId::random(); + + let to_forward = ConsensusGossip::::new( + Arc::new(AllowAll), + [0, 0, 0, 0], + ).on_incoming( + &mut network, + // Unregistered peer. + remote.clone(), + vec![vec![1, 2, 3]], + ); + + assert!( + to_forward.is_empty(), + "Expected `on_incoming` to ignore message from unregistered peer but got {:?}", + to_forward, + ); + } } -- GitLab From 262429d27302671f46d2ae659a2de9b46257a72f Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 23 Apr 2020 12:51:52 +0300 Subject: [PATCH 030/167] Assign DB weights for node runtime (#5703) --- bin/node-template/runtime/src/lib.rs | 10 ++++++++-- bin/node/executor/tests/basic.rs | 6 +++--- bin/node/executor/tests/submit_transaction.rs | 2 +- bin/node/runtime/src/lib.rs | 8 ++++++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index 863f2630775..d3f2f1a94d4 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -34,7 +34,7 @@ pub use sp_runtime::{Permill, Perbill}; pub use frame_support::{ StorageValue, construct_runtime, parameter_types, traits::Randomness, - weights::Weight, + weights::{Weight, RuntimeDbWeight}, }; /// Importing a template pallet @@ -126,6 +126,12 @@ parameter_types! { pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; + /// This probably should not be changed unless you have specific + /// disk i/o conditions for the node. + pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 60_000_000, // ~0.06 ms = ~60 µs + write: 200_000_000, // ~0.2 ms = 200 µs + }; } impl system::Trait for Runtime { @@ -154,7 +160,7 @@ impl system::Trait for Runtime { /// Maximum weight of each block. type MaximumBlockWeight = MaximumBlockWeight; /// The weight of database operations that the runtime can invoke. - type DbWeight = (); + type DbWeight = DbWeight; /// Maximum size of all encoded transactions (in bytes) that are allowed in one block. type MaximumBlockLength = MaximumBlockLength; /// Portion of the block weight that is available to all normal transactions. diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 758ea1a32e8..151b7c54f67 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -359,7 +359,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(1), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, ..Default::default() } + DispatchInfo { weight: 460_000_000, ..Default::default() } )), topics: vec![], }, @@ -414,7 +414,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(1), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, ..Default::default() } + DispatchInfo { weight: 460_000_000, ..Default::default() } )), topics: vec![], }, @@ -437,7 +437,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(2), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 200_000_000, ..Default::default() } + DispatchInfo { weight: 460_000_000, ..Default::default() } )), topics: vec![], }, diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index 3a41c3483c2..4a66ac4c213 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -229,7 +229,7 @@ fn submitted_transaction_should_be_valid() { let res = Executive::validate_transaction(source, extrinsic); assert_eq!(res.unwrap(), ValidTransaction { - priority: 2_410_600_000_000, + priority: 2_411_380_000_000, requires: vec![], provides: vec![(address, 0).encode()], longevity: 128, diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index b1797fffb33..d225d3e4780 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -23,7 +23,7 @@ use sp_std::prelude::*; use frame_support::{ construct_runtime, parameter_types, debug, - weights::Weight, + weights::{Weight, RuntimeDbWeight}, traits::{Currency, Randomness, OnUnbalanced, Imbalance}, }; use sp_core::u32_trait::{_1, _2, _3, _4}; @@ -123,6 +123,10 @@ parameter_types! { pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); + pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 60_000_000, // ~0.06 ms = ~60 µs + write: 200_000_000, // ~0.2 ms = 200 µs + }; } impl frame_system::Trait for Runtime { @@ -138,7 +142,7 @@ impl frame_system::Trait for Runtime { type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); + type DbWeight = DbWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; -- GitLab From 1c4f001dca9a85d39d9172a1780f90481d5be4b1 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Thu, 23 Apr 2020 12:01:09 +0200 Subject: [PATCH 031/167] Fix leak in stream notifications (#5739) --- Cargo.lock | 1 + client/api/Cargo.toml | 1 + client/api/src/notifications.rs | 80 ++++++++++++++++++++++++++------- client/src/client.rs | 4 +- 4 files changed, 68 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cc103784016..6d8651dabdc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6001,6 +6001,7 @@ dependencies = [ "sp-trie", "sp-utils", "sp-version", + "substrate-prometheus-endpoint", ] [[package]] diff --git a/client/api/Cargo.toml b/client/api/Cargo.toml index 2145a09f2d5..c745dc3bee7 100644 --- a/client/api/Cargo.toml +++ b/client/api/Cargo.toml @@ -41,6 +41,7 @@ sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } [dev-dependencies] sp-test-primitives = { version = "2.0.0-dev", path = "../../primitives/test-primitives" } diff --git a/client/api/src/notifications.rs b/client/api/src/notifications.rs index f154eade44d..412fe8adc1e 100644 --- a/client/api/src/notifications.rs +++ b/client/api/src/notifications.rs @@ -25,6 +25,7 @@ use fnv::{FnvHashSet, FnvHashMap}; use sp_core::storage::{StorageKey, StorageData}; use sp_runtime::traits::Block as BlockT; use sp_utils::mpsc::{TracingUnboundedSender, TracingUnboundedReceiver, tracing_unbounded}; +use prometheus_endpoint::{Registry, CounterVec, Opts, U64, register}; /// Storage change set #[derive(Debug)] @@ -71,9 +72,12 @@ pub type StorageEventStream = TracingUnboundedReceiver<(H, StorageChangeSet)> type SubscriberId = u64; +type SubscribersGauge = CounterVec; + /// Manages storage listeners. #[derive(Debug)] pub struct StorageNotifications { + metrics: Option, next_id: SubscriberId, wildcard_listeners: FnvHashSet, listeners: HashMap>, @@ -90,7 +94,8 @@ pub struct StorageNotifications { impl Default for StorageNotifications { fn default() -> Self { - StorageNotifications { + Self { + metrics: Default::default(), next_id: Default::default(), wildcard_listeners: Default::default(), listeners: Default::default(), @@ -101,6 +106,29 @@ impl Default for StorageNotifications { } impl StorageNotifications { + /// Initialize a new StorageNotifications + /// optionally pass a prometheus registry to send subscriber metrics to + pub fn new(prometheus_registry: Option) -> Self { + let metrics = prometheus_registry.and_then(|r| + CounterVec::new( + Opts::new( + "storage_notification_subscribers", + "Number of subscribers in storage notification sytem" + ), + &["action"], //added | removed + ).and_then(|g| register(g, &r)) + .ok() + ); + + StorageNotifications { + metrics, + next_id: Default::default(), + wildcard_listeners: Default::default(), + listeners: Default::default(), + child_listeners: Default::default(), + sinks: Default::default(), + } + } /// Trigger notification to all listeners. /// /// Note the changes are going to be filtered by listener's filter key. @@ -113,6 +141,7 @@ impl StorageNotifications { Item=(Vec, impl Iterator, Option>)>) >, ) { + let has_wildcard = !self.wildcard_listeners.is_empty(); // early exit if no listeners @@ -169,21 +198,32 @@ impl StorageNotifications { let changes = Arc::new(changes); let child_changes = Arc::new(child_changes); // Trigger the events - for subscriber in subscribers { - let should_remove = { - let &(ref sink, ref filter, ref child_filters) = self.sinks.get(&subscriber) - .expect("subscribers returned from self.listeners are always in self.sinks; qed"); - sink.unbounded_send((hash.clone(), StorageChangeSet { - changes: changes.clone(), - child_changes: child_changes.clone(), - filter: filter.clone(), - child_filters: child_filters.clone(), - })).is_err() - }; - - if should_remove { - self.remove_subscriber(subscriber); - } + + let to_remove = self.sinks + .iter() + .filter_map(|(subscriber, &(ref sink, ref filter, ref child_filters))| { + let should_remove = { + if subscribers.contains(subscriber) { + sink.unbounded_send((hash.clone(), StorageChangeSet { + changes: changes.clone(), + child_changes: child_changes.clone(), + filter: filter.clone(), + child_filters: child_filters.clone(), + })).is_err() + } else { + sink.is_closed() + } + }; + + if should_remove { + Some(subscriber.clone()) + } else { + None + } + }).collect::>(); + + for sub_id in to_remove { + self.remove_subscriber(sub_id); } } @@ -241,6 +281,9 @@ impl StorageNotifications { } } } + if let Some(m) = self.metrics.as_ref() { + m.with_label_values(&[&"removed"]).inc(); + } } } @@ -301,6 +344,11 @@ impl StorageNotifications { // insert sink let (tx, rx) = tracing_unbounded("mpsc_storage_notification_items"); self.sinks.insert(current_id, (tx, keys, child_keys)); + + if let Some(m) = self.metrics.as_ref() { + m.with_label_values(&[&"added"]).inc(); + } + rx } } diff --git a/client/src/client.rs b/client/src/client.rs index 2a8040febf3..d5184fb979e 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -252,7 +252,7 @@ impl Client where fork_blocks: ForkBlocks, bad_blocks: BadBlocks, execution_extensions: ExecutionExtensions, - _prometheus_registry: Option, + prometheus_registry: Option, ) -> sp_blockchain::Result { if backend.blockchain().header(BlockId::Number(Zero::zero()))?.is_none() { let genesis_storage = build_genesis_storage.build_storage()?; @@ -276,7 +276,7 @@ impl Client where Ok(Client { backend, executor, - storage_notifications: Default::default(), + storage_notifications: Mutex::new(StorageNotifications::new(prometheus_registry)), import_notification_sinks: Default::default(), finality_notification_sinks: Default::default(), importing_block: Default::default(), -- GitLab From 0837be0c7279ab69194819e7cd957c0335fd6e4f Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 23 Apr 2020 13:55:57 +0300 Subject: [PATCH 032/167] Full block import benchmark (#5745) --- bin/node/bench/Cargo.toml | 2 +- bin/node/bench/src/core.rs | 2 +- bin/node/bench/src/import.rs | 41 +++++++++++++++++++++-------- bin/node/bench/src/main.rs | 10 +++++++ primitives/io/src/batch_verifier.rs | 7 +++++ 5 files changed, 49 insertions(+), 13 deletions(-) diff --git a/bin/node/bench/Cargo.toml b/bin/node/bench/Cargo.toml index d8f23f21049..e5738397556 100644 --- a/bin/node/bench/Cargo.toml +++ b/bin/node/bench/Cargo.toml @@ -15,7 +15,7 @@ node-testing = { version = "2.0.0-dev", path = "../testing" } sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.5", path = "../../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } serde = "1.0.101" serde_json = "1.0.41" structopt = "0.3" diff --git a/bin/node/bench/src/core.rs b/bin/node/bench/src/core.rs index 9105fcbd017..7a345f7a5bd 100644 --- a/bin/node/bench/src/core.rs +++ b/bin/node/bench/src/core.rs @@ -58,7 +58,7 @@ pub struct BenchmarkOutput { average: u64, } -struct NsFormatter(u64); +pub struct NsFormatter(pub u64); impl fmt::Display for NsFormatter { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { diff --git a/bin/node/bench/src/import.rs b/bin/node/bench/src/import.rs index 2dea292ab00..a6e4eb2514e 100644 --- a/bin/node/bench/src/import.rs +++ b/bin/node/bench/src/import.rs @@ -37,8 +37,17 @@ use sp_runtime::generic::BlockId; use crate::core::{self, Path, Mode}; -#[derive(Clone, Copy, Debug)] -pub enum SizeType { Small, Medium, Large } +#[derive(Clone, Copy, Debug, derive_more::Display)] +pub enum SizeType { + #[display(fmt = "small")] + Small, + #[display(fmt = "medium")] + Medium, + #[display(fmt = "large")] + Large, + #[display(fmt = "full")] + Full, +} impl SizeType { fn transactions(&self) -> usize { @@ -46,6 +55,7 @@ impl SizeType { SizeType::Small => 10, SizeType::Medium => 100, SizeType::Large => 500, + SizeType::Full => 4000, } } } @@ -77,18 +87,17 @@ impl core::BenchmarkDescription for ImportBenchmarkDescription { KeyTypes::Ed25519 => path.push("ed25519"), } - match self.size { - SizeType::Small => path.push("small"), - SizeType::Medium => path.push("medium"), - SizeType::Large => path.push("large"), - } + path.push(&format!("{}", self.size)); path } fn setup(self: Box) -> Box { let profile = self.profile; - let mut bench_db = BenchDb::with_key_types(self.size.transactions(), self.key_types); + let mut bench_db = BenchDb::with_key_types( + 50_000, + self.key_types + ); let block = bench_db.generate_block(BlockType::RandomTransfers(self.size.transactions())); Box::new(ImportBenchmark { database: bench_db, @@ -99,8 +108,14 @@ impl core::BenchmarkDescription for ImportBenchmarkDescription { fn name(&self) -> Cow<'static, str> { match self.profile { - Profile::Wasm => "Import benchmark (random transfers, wasm)".into(), - Profile::Native => "Import benchmark (random transfers, native)".into(), + Profile::Wasm => format!( + "Import benchmark (random transfers, wasm, {} block)", + self.size, + ).into(), + Profile::Native => format!( + "Import benchmark (random transfers, native, {} block)", + self.size, + ).into(), } } } @@ -113,12 +128,16 @@ impl core::Benchmark for ImportBenchmark { .expect("Failed to get runtime version") .spec_version; + if mode == Mode::Profile { + std::thread::park_timeout(std::time::Duration::from_secs(3)); + } + let start = std::time::Instant::now(); context.import_block(self.block.clone()); let elapsed = start.elapsed(); if mode == Mode::Profile { - std::thread::park_timeout(std::time::Duration::from_secs(2)); + std::thread::park_timeout(std::time::Duration::from_secs(1)); } log::info!( diff --git a/bin/node/bench/src/main.rs b/bin/node/bench/src/main.rs index c821746b33a..48f1213d621 100644 --- a/bin/node/bench/src/main.rs +++ b/bin/node/bench/src/main.rs @@ -76,6 +76,16 @@ fn main() { key_types: KeyTypes::Ed25519, size: SizeType::Medium, }, + ImportBenchmarkDescription { + profile: Profile::Wasm, + key_types: KeyTypes::Sr25519, + size: SizeType::Full, + }, + ImportBenchmarkDescription { + profile: Profile::Native, + key_types: KeyTypes::Sr25519, + size: SizeType::Full, + }, size in [SizeType::Small, SizeType::Large] => ImportBenchmarkDescription { profile: Profile::Native, diff --git a/primitives/io/src/batch_verifier.rs b/primitives/io/src/batch_verifier.rs index a23b8fcbc2d..82ce0b04ef0 100644 --- a/primitives/io/src/batch_verifier.rs +++ b/primitives/io/src/batch_verifier.rs @@ -117,6 +117,7 @@ impl BatchVerifier { use std::sync::{Mutex, Condvar}; let pending = std::mem::replace(&mut self.pending_tasks, vec![]); + let started = std::time::Instant::now(); log::trace!( target: "runtime", @@ -158,6 +159,12 @@ impl BatchVerifier { let _ = cond_var.wait(mtx).expect("Waiting can only fail when the mutex waited on is poisoned; qed"); } + log::trace!( + target: "runtime", + "Finalization of batch verification took {} ms", + started.elapsed().as_millis(), + ); + !self.invalid.swap(false, AtomicOrdering::Relaxed) } } -- GitLab From cdc858f25b1672036eccfa05614c1a97b0e6e289 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 23 Apr 2020 14:07:08 +0300 Subject: [PATCH 033/167] make GrandpaJustification::decode_and_verify_finalizes public (#5746) --- client/finality-grandpa/src/justification.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/finality-grandpa/src/justification.rs b/client/finality-grandpa/src/justification.rs index 084c0042ab1..ebce90f2c18 100644 --- a/client/finality-grandpa/src/justification.rs +++ b/client/finality-grandpa/src/justification.rs @@ -88,7 +88,7 @@ impl GrandpaJustification { /// Decode a GRANDPA justification and validate the commit and the votes' /// ancestry proofs finalize the given block. - pub(crate) fn decode_and_verify_finalizes( + pub fn decode_and_verify_finalizes( encoded: &[u8], finalized_target: (Block::Hash, NumberFor), set_id: u64, -- GitLab From 9826c30ac8992a3d199d4eba2d3daf87993555dd Mon Sep 17 00:00:00 2001 From: Ashley Date: Thu, 23 Apr 2020 14:53:35 +0200 Subject: [PATCH 034/167] Fix error in browser demo readme (#5754) --- bin/node/cli/browser-demo/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/node/cli/browser-demo/README.md b/bin/node/cli/browser-demo/README.md index d5a23485fa4..08f1646f114 100644 --- a/bin/node/cli/browser-demo/README.md +++ b/bin/node/cli/browser-demo/README.md @@ -1,6 +1,6 @@ # How to run this demo ```sh -cargo install wasm-bindgen # If necessary +cargo install wasm-bindgen-cli # If necessary ./build.sh ``` -- GitLab From a8e195e7a648049af9de7ce1d7dd1dc5523242ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 23 Apr 2020 14:54:52 +0200 Subject: [PATCH 035/167] Allow missing functions when checking the new runtime's version (#5741) --- Cargo.lock | 2 ++ client/executor/src/integration_tests/mod.rs | 4 +-- client/executor/src/lib.rs | 2 +- client/executor/src/native_executor.rs | 26 +++++++++++-------- frame/support/test/Cargo.toml | 1 + .../test/tests/construct_runtime_ui.rs | 17 ++++++++++++ frame/support/test/tests/reserved_keyword.rs | 1 + frame/system/src/lib.rs | 1 + primitives/core/src/traits.rs | 18 +++++++++++++ primitives/io/src/lib.rs | 13 +++++++++- primitives/runtime-interface/test/Cargo.toml | 1 + primitives/runtime-interface/test/src/lib.rs | 2 +- primitives/state-machine/src/lib.rs | 1 + 13 files changed, 73 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6d8651dabdc..82fabb30cf3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1529,6 +1529,7 @@ dependencies = [ "frame-support", "parity-scale-codec", "pretty_assertions", + "rustversion", "serde", "sp-core", "sp-inherents", @@ -7643,6 +7644,7 @@ name = "sp-runtime-interface-test" version = "2.0.0-dev" dependencies = [ "sc-executor", + "sp-core", "sp-io", "sp-runtime", "sp-runtime-interface", diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index e1ef18a0853..44e021729a3 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -45,7 +45,6 @@ fn call_in_wasm( execution_method, Some(1024), HostFunctions::host_functions(), - true, 8, ); executor.call_in_wasm( @@ -54,6 +53,7 @@ fn call_in_wasm( function, call_data, ext, + sp_core::traits::MissingHostFunctions::Allow, ) } @@ -511,7 +511,6 @@ fn should_trap_when_heap_exhausted(wasm_method: WasmExecutionMethod) { wasm_method, Some(17), // `17` is the initial number of pages compiled into the binary. HostFunctions::host_functions(), - true, 8, ); executor.call_in_wasm( @@ -520,6 +519,7 @@ fn should_trap_when_heap_exhausted(wasm_method: WasmExecutionMethod) { "test_exhaust_heap", &[0], &mut ext.ext(), + sp_core::traits::MissingHostFunctions::Allow, ).unwrap(); } diff --git a/client/executor/src/lib.rs b/client/executor/src/lib.rs index c3b41bd1990..3d7db630f04 100644 --- a/client/executor/src/lib.rs +++ b/client/executor/src/lib.rs @@ -77,7 +77,6 @@ mod tests { WasmExecutionMethod::Interpreted, Some(8), sp_io::SubstrateHostFunctions::host_functions(), - true, 8, ); let res = executor.call_in_wasm( @@ -86,6 +85,7 @@ mod tests { "test_empty_return", &[], &mut ext, + sp_core::traits::MissingHostFunctions::Allow, ).unwrap(); assert_eq!(res, vec![0u8; 0]); } diff --git a/client/executor/src/native_executor.rs b/client/executor/src/native_executor.rs index 778bc808004..b859b544a3a 100644 --- a/client/executor/src/native_executor.rs +++ b/client/executor/src/native_executor.rs @@ -20,7 +20,9 @@ use crate::{ }; use sp_version::{NativeVersion, RuntimeVersion}; use codec::{Decode, Encode}; -use sp_core::{NativeOrEncoded, traits::{CodeExecutor, Externalities, RuntimeCode}}; +use sp_core::{ + NativeOrEncoded, traits::{CodeExecutor, Externalities, RuntimeCode, MissingHostFunctions}, +}; use log::trace; use std::{result, panic::{UnwindSafe, AssertUnwindSafe}, sync::Arc}; use sp_wasm_interface::{HostFunctions, Function}; @@ -83,8 +85,6 @@ pub struct WasmExecutor { host_functions: Arc>, /// WASM runtime cache. cache: Arc, - /// Allow missing function imports. - allow_missing_func_imports: bool, /// The size of the instances cache. max_runtime_instances: usize, } @@ -102,7 +102,6 @@ impl WasmExecutor { method: WasmExecutionMethod, default_heap_pages: Option, host_functions: Vec<&'static dyn Function>, - allow_missing_func_imports: bool, max_runtime_instances: usize, ) -> Self { WasmExecutor { @@ -110,7 +109,6 @@ impl WasmExecutor { default_heap_pages: default_heap_pages.unwrap_or(DEFAULT_HEAP_PAGES), host_functions: Arc::new(host_functions), cache: Arc::new(RuntimeCache::new(max_runtime_instances)), - allow_missing_func_imports, max_runtime_instances, } } @@ -132,6 +130,7 @@ impl WasmExecutor { &self, runtime_code: &RuntimeCode, ext: &mut dyn Externalities, + allow_missing_host_functions: bool, f: F, ) -> Result where F: FnOnce( @@ -146,7 +145,7 @@ impl WasmExecutor { self.method, self.default_heap_pages, &*self.host_functions, - self.allow_missing_func_imports, + allow_missing_host_functions, |instance, version, ext| { let instance = AssertUnwindSafe(instance); let ext = AssertUnwindSafe(ext); @@ -167,7 +166,10 @@ impl sp_core::traits::CallInWasm for WasmExecutor { method: &str, call_data: &[u8], ext: &mut dyn Externalities, + missing_host_functions: MissingHostFunctions, ) -> std::result::Result, String> { + let allow_missing_host_functions = missing_host_functions.allowed(); + if let Some(hash) = code_hash { let code = RuntimeCode { code_fetcher: &sp_core::traits::WrappedRuntimeCode(wasm_code.into()), @@ -175,7 +177,7 @@ impl sp_core::traits::CallInWasm for WasmExecutor { heap_pages: None, }; - self.with_instance(&code, ext, |instance, _, mut ext| { + self.with_instance(&code, ext, allow_missing_host_functions, |instance, _, mut ext| { with_externalities_safe( &mut **ext, move || instance.call(method, call_data), @@ -187,7 +189,7 @@ impl sp_core::traits::CallInWasm for WasmExecutor { self.default_heap_pages, &wasm_code, self.host_functions.to_vec(), - self.allow_missing_func_imports, + allow_missing_host_functions, ) .map_err(|e| format!("Failed to create module: {:?}", e))?; @@ -240,7 +242,6 @@ impl NativeExecutor { fallback_method, default_heap_pages, host_functions, - false, max_runtime_instances, ); @@ -265,8 +266,9 @@ impl RuntimeInfo for NativeExecutor { self.wasm.with_instance( runtime_code, ext, + false, |_instance, version, _ext| - Ok(version.cloned().ok_or_else(|| Error::ApiError("Unknown version".into()))) + Ok(version.cloned().ok_or_else(|| Error::ApiError("Unknown version".into()))), ) } } @@ -290,6 +292,7 @@ impl CodeExecutor for NativeExecutor { let result = self.wasm.with_instance( runtime_code, ext, + false, |instance, onchain_version, mut ext| { let onchain_version = onchain_version.ok_or_else( || Error::ApiError("Unknown version".into()) @@ -372,8 +375,9 @@ impl sp_core::traits::CallInWasm for NativeExecutor< method: &str, call_data: &[u8], ext: &mut dyn Externalities, + missing_host_functions: MissingHostFunctions, ) -> std::result::Result, String> { - self.wasm.call_in_wasm(wasm_blob, code_hash, method, call_data, ext) + self.wasm.call_in_wasm(wasm_blob, code_hash, method, call_data, ext, missing_host_functions) } } diff --git a/frame/support/test/Cargo.toml b/frame/support/test/Cargo.toml index 3d2fa71a94b..77899788d2d 100644 --- a/frame/support/test/Cargo.toml +++ b/frame/support/test/Cargo.toml @@ -22,6 +22,7 @@ sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../.. sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } trybuild = "1.0.17" pretty_assertions = "0.6.1" +rustversion = "1.0.0" [features] default = ["std"] diff --git a/frame/support/test/tests/construct_runtime_ui.rs b/frame/support/test/tests/construct_runtime_ui.rs index acddf01f037..d094d73ba54 100644 --- a/frame/support/test/tests/construct_runtime_ui.rs +++ b/frame/support/test/tests/construct_runtime_ui.rs @@ -1,5 +1,22 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + use std::env; +#[rustversion::attr(not(stable), ignore)] #[test] fn ui() { // As trybuild is using `cargo check`, we don't need the real WASM binaries. diff --git a/frame/support/test/tests/reserved_keyword.rs b/frame/support/test/tests/reserved_keyword.rs index d6cc4bba3b0..6f2bbb47474 100644 --- a/frame/support/test/tests/reserved_keyword.rs +++ b/frame/support/test/tests/reserved_keyword.rs @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +#[rustversion::attr(not(stable), ignore)] #[test] fn reserved_keyword() { // As trybuild is using `cargo check`, we don't need the real WASM binaries. diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index d9b8b681087..83733bb6c9c 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -2108,6 +2108,7 @@ pub(crate) mod tests { _: &str, _: &[u8], _: &mut dyn sp_externalities::Externalities, + _: sp_core::traits::MissingHostFunctions, ) -> Result, String> { Ok(self.0.clone()) } diff --git a/primitives/core/src/traits.rs b/primitives/core/src/traits.rs index 14839fb5856..1724f5e9877 100644 --- a/primitives/core/src/traits.rs +++ b/primitives/core/src/traits.rs @@ -262,6 +262,23 @@ impl std::fmt::Display for CodeNotFound { } } +/// `Allow` or `Disallow` missing host functions when instantiating a WASM blob. +#[derive(Clone, Copy, Debug)] +pub enum MissingHostFunctions { + /// Any missing host function will be replaced by a stub that returns an error when + /// being called. + Allow, + /// Any missing host function will result in an error while instantiating the WASM blob, + Disallow, +} + +impl MissingHostFunctions { + /// Are missing host functions allowed? + pub fn allowed(self) -> bool { + matches!(self, Self::Allow) + } +} + /// Something that can call a method in a WASM blob. pub trait CallInWasm: Send + Sync { /// Call the given `method` in the given `wasm_blob` using `call_data` (SCALE encoded arguments) @@ -280,6 +297,7 @@ pub trait CallInWasm: Send + Sync { method: &str, call_data: &[u8], ext: &mut dyn Externalities, + missing_host_functions: MissingHostFunctions, ) -> Result, String>; } diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index b5827202333..344ce1a79a9 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -329,7 +329,18 @@ pub trait Misc { self.extension::() .expect("No `CallInWasmExt` associated for the current context!") - .call_in_wasm(wasm, None, "Core_version", &[], &mut ext) + .call_in_wasm( + wasm, + None, + "Core_version", + &[], + &mut ext, + // If a runtime upgrade introduces new host functions that are not provided by + // the node, we should not fail at instantiation. Otherwise nodes that are + // updated could run this successfully and it could lead to a storage root + // mismatch when importing this block. + sp_core::traits::MissingHostFunctions::Allow, + ) .ok() } } diff --git a/primitives/runtime-interface/test/Cargo.toml b/primitives/runtime-interface/test/Cargo.toml index 0809eeb8a1c..03f0122b220 100644 --- a/primitives/runtime-interface/test/Cargo.toml +++ b/primitives/runtime-interface/test/Cargo.toml @@ -18,5 +18,6 @@ sp-runtime-interface-test-wasm = { version = "2.0.0-dev", path = "../test-wasm" sp-runtime-interface-test-wasm-deprecated = { version = "2.0.0-dev", path = "../test-wasm-deprecated" } sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } +sp-core = { version = "2.0.0-dev", path = "../../core" } sp-io = { version = "2.0.0-dev", path = "../../io" } tracing = "0.1.13" diff --git a/primitives/runtime-interface/test/src/lib.rs b/primitives/runtime-interface/test/src/lib.rs index 8815a17a087..e7ef1934e25 100644 --- a/primitives/runtime-interface/test/src/lib.rs +++ b/primitives/runtime-interface/test/src/lib.rs @@ -41,7 +41,6 @@ fn call_wasm_method(binary: &[u8], method: &str) -> TestExte sc_executor::WasmExecutionMethod::Interpreted, Some(8), host_functions, - false, 8, ); executor.call_in_wasm( @@ -50,6 +49,7 @@ fn call_wasm_method(binary: &[u8], method: &str) -> TestExte method, &[], &mut ext_ext, + sp_core::traits::MissingHostFunctions::Disallow, ).expect(&format!("Executes `{}`", method)); ext diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index 1c0007c5f91..83bc812b15e 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -811,6 +811,7 @@ mod tests { _: &str, _: &[u8], _: &mut dyn Externalities, + _: sp_core::traits::MissingHostFunctions, ) -> std::result::Result, String> { unimplemented!("Not required in tests.") } -- GitLab From bbf4aa59610f1f578f31df7ea287b046cf98f85d Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 23 Apr 2020 16:42:23 +0300 Subject: [PATCH 036/167] Integrated trie benchmark: part 2 (#5702) --- bin/node/bench/src/generator.rs | 57 ++------- bin/node/bench/src/main.rs | 13 +- bin/node/bench/src/simple_trie.rs | 68 +++++++++++ bin/node/bench/src/trie.rs | 196 ++++++++++++++++++++++++------ 4 files changed, 246 insertions(+), 88 deletions(-) create mode 100644 bin/node/bench/src/simple_trie.rs diff --git a/bin/node/bench/src/generator.rs b/bin/node/bench/src/generator.rs index 8a161c57053..895f5234970 100644 --- a/bin/node/bench/src/generator.rs +++ b/bin/node/bench/src/generator.rs @@ -18,11 +18,12 @@ use std::{collections::HashMap, sync::Arc}; use kvdb::KeyValueDB; use node_primitives::Hash; -use sp_trie::{DBValue, trie_types::TrieDBMut, TrieMut}; -use hash_db::{HashDB, AsHashDB, Prefix, Hasher as _}; +use sp_trie::{trie_types::TrieDBMut, TrieMut}; -type Hasher = sp_core::Blake2Hasher; +use crate::simple_trie::SimpleTrie; +/// Generate trie from given `key_values`. +/// /// Will fill your database `db` with trie data from `key_values` and /// return root. pub fn generate_trie( @@ -37,9 +38,9 @@ pub fn generate_trie( hex::decode("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").expect("null key is valid"), Some(vec![0]), ); - let mut trie_generator = TrieGenerator { db, overlay: &mut overlay }; + let mut trie = SimpleTrie { db, overlay: &mut overlay }; { - let mut trie_db = TrieDBMut::new(&mut trie_generator, &mut root); + let mut trie_db = TrieDBMut::new(&mut trie, &mut root); for (key, value) in key_values { trie_db.insert(&key, &value).expect("trie insertion failed"); @@ -47,7 +48,7 @@ pub fn generate_trie( trie_db.commit(); } - ( trie_generator.db, overlay ) + ( trie.db, overlay ) }; let mut transaction = db.transaction(); @@ -61,47 +62,3 @@ pub fn generate_trie( root } - -/// Immutable generated trie database with root. -struct TrieGenerator<'a> { - db: Arc, - overlay: &'a mut HashMap, Option>>, -} - -impl<'a> AsHashDB for TrieGenerator<'a> { - fn as_hash_db(&self) -> &dyn hash_db::HashDB { &*self } - - fn as_hash_db_mut<'b>(&'b mut self) -> &'b mut (dyn HashDB + 'b) { - &mut *self - } -} - -impl<'a> HashDB for TrieGenerator<'a> { - fn get(&self, key: &Hash, prefix: Prefix) -> Option { - let key = sp_trie::prefixed_key::(key, prefix); - if let Some(value) = self.overlay.get(&key) { - return value.clone(); - } - self.db.get(0, &key).expect("Database backend error") - } - - fn contains(&self, hash: &Hash, prefix: Prefix) -> bool { - self.get(hash, prefix).is_some() - } - - fn insert(&mut self, prefix: Prefix, value: &[u8]) -> Hash { - let key = Hasher::hash(value); - self.emplace(key, prefix, value.to_vec()); - key - } - - fn emplace(&mut self, key: Hash, prefix: Prefix, value: DBValue) { - let key = sp_trie::prefixed_key::(&key, prefix); - self.overlay.insert(key, Some(value)); - } - - fn remove(&mut self, key: &Hash, prefix: Prefix) { - let key = sp_trie::prefixed_key::(key, prefix); - self.overlay.insert(key, None); - } -} \ No newline at end of file diff --git a/bin/node/bench/src/main.rs b/bin/node/bench/src/main.rs index 48f1213d621..7d92eabf4cb 100644 --- a/bin/node/bench/src/main.rs +++ b/bin/node/bench/src/main.rs @@ -17,13 +17,14 @@ #[macro_use] mod core; mod import; mod trie; +mod simple_trie; mod generator; mod tempdb; mod state_sizes; use crate::core::{run_benchmark, Mode as BenchmarkMode}; use import::{ImportBenchmarkDescription, SizeType}; -use trie::{TrieBenchmarkDescription, DatabaseSize}; +use trie::{TrieReadBenchmarkDescription, TrieWriteBenchmarkDescription, DatabaseSize}; use node_testing::bench::{Profile, KeyTypes}; use structopt::StructOpt; @@ -94,10 +95,14 @@ fn main() { }, size in [ DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, - DatabaseSize::Medium, DatabaseSize::Large, - ] => TrieBenchmarkDescription { database_size: *size }, + DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, + ] => TrieReadBenchmarkDescription { database_size: *size }, + size in [ + DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, + DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, + ] => TrieWriteBenchmarkDescription { database_size: *size }, ); - + if opt.list { for benchmark in benchmarks.iter() { log::info!("{}: {}", benchmark.name(), benchmark.path().full()) diff --git a/bin/node/bench/src/simple_trie.rs b/bin/node/bench/src/simple_trie.rs new file mode 100644 index 00000000000..50078a11df6 --- /dev/null +++ b/bin/node/bench/src/simple_trie.rs @@ -0,0 +1,68 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use std::{collections::HashMap, sync::Arc}; + +use kvdb::KeyValueDB; +use node_primitives::Hash; +use sp_trie::DBValue; +use hash_db::{HashDB, AsHashDB, Prefix, Hasher as _}; + +pub type Hasher = sp_core::Blake2Hasher; + +/// Immutable generated trie database with root. +pub struct SimpleTrie<'a> { + pub db: Arc, + pub overlay: &'a mut HashMap, Option>>, +} + +impl<'a> AsHashDB for SimpleTrie<'a> { + fn as_hash_db(&self) -> &dyn hash_db::HashDB { &*self } + + fn as_hash_db_mut<'b>(&'b mut self) -> &'b mut (dyn HashDB + 'b) { + &mut *self + } +} + +impl<'a> HashDB for SimpleTrie<'a> { + fn get(&self, key: &Hash, prefix: Prefix) -> Option { + let key = sp_trie::prefixed_key::(key, prefix); + if let Some(value) = self.overlay.get(&key) { + return value.clone(); + } + self.db.get(0, &key).expect("Database backend error") + } + + fn contains(&self, hash: &Hash, prefix: Prefix) -> bool { + self.get(hash, prefix).is_some() + } + + fn insert(&mut self, prefix: Prefix, value: &[u8]) -> Hash { + let key = Hasher::hash(value); + self.emplace(key, prefix, value.to_vec()); + key + } + + fn emplace(&mut self, key: Hash, prefix: Prefix, value: DBValue) { + let key = sp_trie::prefixed_key::(&key, prefix); + self.overlay.insert(key, Some(value)); + } + + fn remove(&mut self, key: &Hash, prefix: Prefix) { + let key = sp_trie::prefixed_key::(key, prefix); + self.overlay.insert(key, None); + } +} diff --git a/bin/node/bench/src/trie.rs b/bin/node/bench/src/trie.rs index 6f75741fa75..3280618fb6a 100644 --- a/bin/node/bench/src/trie.rs +++ b/bin/node/bench/src/trie.rs @@ -16,24 +16,28 @@ //! Trie benchmark (integrated). -use std::{borrow::Cow, sync::Arc}; +use std::{borrow::Cow, collections::HashMap, sync::Arc}; use kvdb::KeyValueDB; use lazy_static::lazy_static; use rand::Rng; use hash_db::Prefix; use sp_state_machine::Backend as _; +use sp_trie::{trie_types::TrieDBMut, TrieMut as _}; use node_primitives::Hash; use crate::{ core::{self, Mode, Path}, generator::generate_trie, + simple_trie::SimpleTrie, tempdb::TempDatabase, }; pub const SAMPLE_SIZE: usize = 100; +pub const TEST_WRITE_SIZE: usize = 128; -pub type KeyValues = Vec<(Vec, Vec)>; +pub type KeyValue = (Vec, Vec); +pub type KeyValues = Vec; #[derive(Clone, Copy, Debug, derive_more::Display)] pub enum DatabaseSize { @@ -47,8 +51,8 @@ pub enum DatabaseSize { Medium, #[display(fmt = "large")] Large, - #[display(fmt = "largest")] - Largest, + #[display(fmt = "huge")] + Huge, } lazy_static! { @@ -65,7 +69,7 @@ impl DatabaseSize { Self::Small => 10_000, Self::Medium => 100_000, Self::Large => 200_000, - Self::Largest => 1_000_000, + Self::Huge => 1_000_000, }; assert_eq!(val % SAMPLE_SIZE, 0); @@ -74,20 +78,31 @@ impl DatabaseSize { } } -pub struct TrieBenchmarkDescription { +fn pretty_print(v: usize) -> String { + let mut print = String::new(); + for (idx, val) in v.to_string().chars().rev().enumerate() { + if idx != 0 && idx % 3 == 0 { + print.insert(0, ','); + } + print.insert(0, val); + } + print +} + +pub struct TrieReadBenchmarkDescription { pub database_size: DatabaseSize, } -pub struct TrieBenchmark { +pub struct TrieReadBenchmark { database: TempDatabase, root: Hash, warmup_keys: KeyValues, query_keys: KeyValues, } -impl core::BenchmarkDescription for TrieBenchmarkDescription { +impl core::BenchmarkDescription for TrieReadBenchmarkDescription { fn path(&self) -> Path { - let mut path = Path::new(&["trie"]); + let mut path = Path::new(&["trie", "read"]); path.push(&format!("{}", self.database_size)); path } @@ -95,7 +110,6 @@ impl core::BenchmarkDescription for TrieBenchmarkDescription { fn setup(self: Box) -> Box { let mut database = TempDatabase::new(); - // TODO: make seedable let mut rng = rand::thread_rng(); let warmup_prefix = KUSAMA_STATE_DISTRIBUTION.key(&mut rng); @@ -129,7 +143,7 @@ impl core::BenchmarkDescription for TrieBenchmarkDescription { key_values, ); - Box::new(TrieBenchmark { + Box::new(TrieReadBenchmark { database, root, warmup_keys, @@ -138,20 +152,8 @@ impl core::BenchmarkDescription for TrieBenchmarkDescription { } fn name(&self) -> Cow<'static, str> { - - fn pretty_print(v: usize) -> String { - let mut print = String::new(); - for (idx, val) in v.to_string().chars().rev().enumerate() { - if idx != 0 && idx % 3 == 0 { - print.insert(0, ','); - } - print.insert(0, val); - } - print - } - format!( - "Trie benchmark({} database ({} keys))", + "Trie read benchmark({} database ({} keys))", self.database_size, pretty_print(self.database_size.keys()), ).into() @@ -167,11 +169,11 @@ impl sp_state_machine::Storage for Storage { } } -impl core::Benchmark for TrieBenchmark { +impl core::Benchmark for TrieReadBenchmark { fn run(&mut self, mode: Mode) -> std::time::Duration { let mut db = self.database.clone(); let storage: Arc> = - Arc::new(Storage(db.open())); + Arc::new(Storage(db.open())); let trie_backend = sp_state_machine::TrieBackend::new( storage, @@ -204,6 +206,137 @@ impl core::Benchmark for TrieBenchmark { } } +pub struct TrieWriteBenchmarkDescription { + pub database_size: DatabaseSize, +} + +impl core::BenchmarkDescription for TrieWriteBenchmarkDescription { + fn path(&self) -> Path { + let mut path = Path::new(&["trie", "write"]); + path.push(&format!("{}", self.database_size)); + path + } + + fn setup(self: Box) -> Box { + let mut database = TempDatabase::new(); + + let mut rng = rand::thread_rng(); + let warmup_prefix = KUSAMA_STATE_DISTRIBUTION.key(&mut rng); + + let mut key_values = KeyValues::new(); + let mut warmup_keys = KeyValues::new(); + let every_x_key = self.database_size.keys() / SAMPLE_SIZE; + for idx in 0..self.database_size.keys() { + let kv = ( + KUSAMA_STATE_DISTRIBUTION.key(&mut rng).to_vec(), + KUSAMA_STATE_DISTRIBUTION.value(&mut rng), + ); + if idx % every_x_key == 0 { + // warmup keys go to separate tree with high prob + let mut actual_warmup_key = warmup_prefix.clone(); + actual_warmup_key[16..].copy_from_slice(&kv.0[16..]); + warmup_keys.push((actual_warmup_key.clone(), kv.1.clone())); + key_values.push((actual_warmup_key.clone(), kv.1.clone())); + } + + key_values.push(kv) + } + + assert_eq!(warmup_keys.len(), SAMPLE_SIZE); + + let root = generate_trie( + database.open(), + key_values, + ); + + Box::new(TrieWriteBenchmark { + database, + root, + warmup_keys, + }) + } + + fn name(&self) -> Cow<'static, str> { + format!( + "Trie write benchmark({} database ({} keys))", + self.database_size, + pretty_print(self.database_size.keys()), + ).into() + } +} + +struct TrieWriteBenchmark { + database: TempDatabase, + root: Hash, + warmup_keys: KeyValues, +} + +impl core::Benchmark for TrieWriteBenchmark { + fn run(&mut self, mode: Mode) -> std::time::Duration { + let mut rng = rand::thread_rng(); + let mut db = self.database.clone(); + let kvdb = db.open(); + + let mut new_root = self.root.clone(); + + let mut overlay = HashMap::new(); + let mut trie = SimpleTrie { + db: kvdb.clone(), + overlay: &mut overlay, + }; + let mut trie_db_mut = TrieDBMut::from_existing(&mut trie, &mut new_root) + .expect("Failed to create TrieDBMut"); + + for (warmup_key, warmup_value) in self.warmup_keys.iter() { + let value = trie_db_mut.get(&warmup_key[..]) + .expect("Failed to get key: db error") + .expect("Warmup key should exist"); + + // sanity for warmup keys + assert_eq!(&value, warmup_value); + } + + let test_key = random_vec(&mut rng, 32); + let test_val = random_vec(&mut rng, TEST_WRITE_SIZE); + + if mode == Mode::Profile { + std::thread::park_timeout(std::time::Duration::from_secs(3)); + } + + let started = std::time::Instant::now(); + + trie_db_mut.insert(&test_key, &test_val).expect("Should be inserted ok"); + trie_db_mut.commit(); + drop(trie_db_mut); + + let mut transaction = kvdb.transaction(); + for (key, value) in overlay.into_iter() { + match value { + Some(value) => transaction.put(0, &key[..], &value[..]), + None => transaction.delete(0, &key[..]), + } + } + kvdb.write(transaction).expect("Failed to write transaction"); + + let elapsed = started.elapsed(); + + // sanity check + assert!(new_root != self.root); + + if mode == Mode::Profile { + std::thread::park_timeout(std::time::Duration::from_secs(1)); + } + + elapsed + } +} + +fn random_vec(rng: &mut R, len: usize) -> Vec { + let mut val = vec![0u8; len]; + rng.fill_bytes(&mut val[..]); + val +} + struct SizePool { distribution: std::collections::BTreeMap, total: u32, @@ -224,15 +357,10 @@ impl SizePool { let sr = (rng.next_u64() % self.total as u64) as u32; let mut range = self.distribution.range((std::ops::Bound::Included(sr), std::ops::Bound::Unbounded)); let size = *range.next().unwrap().1 as usize; - let mut v = Vec::new(); - v.resize(size, 0); - rng.fill_bytes(&mut v); - v + random_vec(rng, size) } fn key(&self, rng: &mut R) -> Vec { - let mut key = [0u8; 32]; - rng.fill_bytes(&mut key[..]); - key.to_vec() + random_vec(rng, 32) } -} \ No newline at end of file +} -- GitLab From 9b0af08a09a9f01509cc6e1a1170a7cc65f3c5fa Mon Sep 17 00:00:00 2001 From: Hoani Bryson Date: Fri, 24 Apr 2020 01:43:28 +1200 Subject: [PATCH 037/167] Regression testing and readability additions for reward curve log2 (#5610) Co-Authored-By: thiolliere --- frame/staking/reward-curve/src/lib.rs | 4 + frame/staking/reward-curve/src/log.rs | 105 ++++++++++++++++++++------ 2 files changed, 85 insertions(+), 24 deletions(-) diff --git a/frame/staking/reward-curve/src/lib.rs b/frame/staking/reward-curve/src/lib.rs index d000afc49b5..5a3d88bb537 100644 --- a/frame/staking/reward-curve/src/lib.rs +++ b/frame/staking/reward-curve/src/lib.rs @@ -268,10 +268,14 @@ impl INPoS { } } + // calculates x from: + // y = i_0 + (i_ideal * x_ideal - i_0) * 2^((x_ideal - x)/d) + // See web3 docs for the details fn compute_opposite_after_x_ideal(&self, y: u32) -> u32 { if y == self.i_0 { return u32::max_value(); } + // Note: the log term calculated here represents a per_million value let log = log2(self.i_ideal_times_x_ideal - self.i_0, y - self.i_0); let term: u32 = ((self.d as u64 * log as u64) / 1_000_000).try_into().unwrap(); diff --git a/frame/staking/reward-curve/src/log.rs b/frame/staking/reward-curve/src/log.rs index e0929a95970..28acd5deed2 100644 --- a/frame/staking/reward-curve/src/log.rs +++ b/frame/staking/reward-curve/src/log.rs @@ -1,48 +1,65 @@ use std::convert::TryInto; -/// Return Per-million value. +/// Simple u32 power of 2 function - simply uses a bit shift +macro_rules! pow2 { + ($n:expr) => { + 1_u32 << $n + } +} + +/// Returns the k_th per_million taylor term for a log2 function +fn taylor_term(k: u32, y_num: u128, y_den: u128) -> u32 { + let _2_div_ln_2: u128 = 2_885_390u128; + + if k == 0 { + (_2_div_ln_2 * (y_num).pow(1) / (y_den).pow(1)).try_into().unwrap() + } else { + let mut res = _2_div_ln_2 * (y_num).pow(3) / (y_den).pow(3); + for _ in 1..k { + res = res * (y_num).pow(2) / (y_den).pow(2); + } + res /= 2 * k as u128 + 1; + + res.try_into().unwrap() + } +} + +/// Performs a log2 operation using a rational fraction +/// +/// result = log2(p/q) where p/q is bound to [1, 1_000_000] +/// Where: +/// * q represents the numerator of the rational fraction input +/// * p represents the denominator of the rational fraction input +/// * result represents a per-million output of log2 pub fn log2(p: u32, q: u32) -> u32 { - assert!(p >= q); + assert!(p >= q); // keep p/q bound to [1, inf) assert!(p <= u32::max_value()/2); // This restriction should not be mandatory. But function is only tested and used for this. assert!(p <= 1_000_000); assert!(q <= 1_000_000); + // log2(1) = 0 if p == q { return 0 } + // find the power of 2 where q * 2^n <= p < q * 2^(n+1) let mut n = 0u32; - while !(p >= (1u32 << n)*q) || !(p < (1u32 << (n+1))*q) { + while !(p >= pow2!(n) * q) || !(p < pow2!(n + 1) * q) { n += 1; + assert!(n < 32); // cannot represent 2^32 in u32 } - assert!(p < (1u32 << (n+1)) * q); - - let y_num: u32 = (p - (1u32 << n) * q).try_into().unwrap(); - let y_den: u32 = (p + (1u32 << n) * q).try_into().unwrap(); - - let _2_div_ln_2 = 2_885_390u32; + assert!(p < pow2!(n + 1) * q); - let taylor_term = |k: u32| -> u32 { - if k == 0 { - (_2_div_ln_2 as u128 * (y_num as u128).pow(1) / (y_den as u128).pow(1)) - .try_into().unwrap() - } else { - let mut res = _2_div_ln_2 as u128 * (y_num as u128).pow(3) / (y_den as u128).pow(3); - for _ in 1..k { - res = res * (y_num as u128).pow(2) / (y_den as u128).pow(2); - } - res /= 2 * k as u128 + 1; - - res.try_into().unwrap() - } - }; + let y_num: u32 = (p - pow2!(n) * q).try_into().unwrap(); + let y_den: u32 = (p + pow2!(n) * q).try_into().unwrap(); + // Loop through each Taylor series coefficient until it reaches 10^-6 let mut res = n * 1_000_000u32; let mut k = 0; loop { - let term = taylor_term(k); + let term = taylor_term(k, y_num.into(), y_den.into()); if term == 0 { break } @@ -68,3 +85,43 @@ fn test_log() { } } } + +#[test] +#[should_panic] +fn test_log_p_must_be_greater_than_q() { + let p: u32 = 1_000; + let q: u32 = 1_001; + let _ = log2(p, q); +} + +#[test] +#[should_panic] +fn test_log_p_upper_bound() { + let p: u32 = 1_000_001; + let q: u32 = 1_000_000; + let _ = log2(p, q); +} + +#[test] +#[should_panic] +fn test_log_q_limit() { + let p: u32 = 1_000_000; + let q: u32 = 0; + let _ = log2(p, q); +} + +#[test] +fn test_log_of_one_boundary() { + let p: u32 = 1_000_000; + let q: u32 = 1_000_000; + assert_eq!(log2(p, q), 0); +} + +#[test] +fn test_log_of_largest_input() { + let p: u32 = 1_000_000; + let q: u32 = 1; + let expected = 19_931_568; + let tolerance = 100; + assert!((log2(p, q) as i32 - expected as i32).abs() < tolerance); +} \ No newline at end of file -- GitLab From 5a0754dd2bcfdeb77245f95795bddebf1a31f221 Mon Sep 17 00:00:00 2001 From: Dan Forbes Date: Thu, 23 Apr 2020 09:10:13 -0700 Subject: [PATCH 038/167] Document crypto key identifiers (#5750) --- primitives/core/src/crypto.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/primitives/core/src/crypto.rs b/primitives/core/src/crypto.rs index 6e294960376..a76110c7147 100644 --- a/primitives/core/src/crypto.rs +++ b/primitives/core/src/crypto.rs @@ -992,19 +992,19 @@ impl sp_std::fmt::Display for CryptoTypePublicPair { pub mod key_types { use super::KeyTypeId; - /// Key type for Babe module, build-in. + /// Key type for Babe module, built-in. Identified as `babe`. pub const BABE: KeyTypeId = KeyTypeId(*b"babe"); - /// Key type for Grandpa module, build-in. + /// Key type for Grandpa module, built-in. Identified as `gran`. pub const GRANDPA: KeyTypeId = KeyTypeId(*b"gran"); - /// Key type for controlling an account in a Substrate runtime, built-in. + /// Key type for controlling an account in a Substrate runtime, built-in. Identified as `acco`. pub const ACCOUNT: KeyTypeId = KeyTypeId(*b"acco"); - /// Key type for Aura module, built-in. + /// Key type for Aura module, built-in. Identified as `aura`. pub const AURA: KeyTypeId = KeyTypeId(*b"aura"); - /// Key type for ImOnline module, built-in. + /// Key type for ImOnline module, built-in. Identified as `imon`. pub const IM_ONLINE: KeyTypeId = KeyTypeId(*b"imon"); - /// Key type for AuthorityDiscovery module, built-in. + /// Key type for AuthorityDiscovery module, built-in. Identified as `audi`. pub const AUTHORITY_DISCOVERY: KeyTypeId = KeyTypeId(*b"audi"); - /// Key type for staking, built-in. + /// Key type for staking, built-in. Identified as `stak`. pub const STAKING: KeyTypeId = KeyTypeId(*b"stak"); /// A key type ID useful for tests. pub const DUMMY: KeyTypeId = KeyTypeId(*b"dumy"); -- GitLab From 8a47b4ff049409b0d5d89abaf63f42dd9f3ab9f0 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 23 Apr 2020 19:00:36 +0200 Subject: [PATCH 039/167] Refactored in-mem backed to use the actual trie (#5730) --- client/src/in_mem.rs | 13 +- frame/executive/src/lib.rs | 2 +- primitives/state-machine/src/backend.rs | 10 +- primitives/state-machine/src/basic.rs | 5 +- .../state-machine/src/in_memory_backend.rs | 411 ++++++------------ primitives/state-machine/src/lib.rs | 7 +- .../state-machine/src/proving_backend.rs | 3 +- primitives/state-machine/src/testing.rs | 10 +- primitives/state-machine/src/trie_backend.rs | 12 +- .../state-machine/src/trie_backend_essence.rs | 10 + 10 files changed, 179 insertions(+), 304 deletions(-) diff --git a/client/src/in_mem.rs b/client/src/in_mem.rs index 20b227e790f..a63ea91e26e 100644 --- a/client/src/in_mem.rs +++ b/client/src/in_mem.rs @@ -464,7 +464,7 @@ pub struct BlockImportOperation { pending_block: Option>, pending_cache: HashMap>, old_state: InMemoryBackend>, - new_state: Option>>, + new_state: Option<> as StateBackend>>::Transaction>, aux: Vec<(Vec, Option>)>, finalized_blocks: Vec<(BlockId, Option)>, set_head: Option>, @@ -502,7 +502,7 @@ impl backend::BlockImportOperation for BlockImportOperatio &mut self, update: > as StateBackend>>::Transaction, ) -> sp_blockchain::Result<()> { - self.new_state = Some(self.old_state.update(update)); + self.new_state = Some(update); Ok(()) } @@ -525,7 +525,7 @@ impl backend::BlockImportOperation for BlockImportOperatio child_delta ); - self.new_state = Some(InMemoryBackend::from(transaction)); + self.new_state = Some(transaction); Ok(root) } @@ -638,7 +638,12 @@ impl backend::Backend for Backend where Block::Hash let hash = header.hash(); - self.states.write().insert(hash, operation.new_state.unwrap_or_else(|| old_state.clone())); + let new_state = match operation.new_state { + Some(state) => old_state.update_backend(*header.state_root(), state), + None => old_state.clone(), + }; + + self.states.write().insert(hash, new_state); self.blockchain.insert(hash, header, justification, body, pending_block.state)?; } diff --git a/frame/executive/src/lib.rs b/frame/executive/src/lib.rs index 52ef068b3e7..4c16b591605 100644 --- a/frame/executive/src/lib.rs +++ b/frame/executive/src/lib.rs @@ -615,7 +615,7 @@ mod tests { header: Header { parent_hash: [69u8; 32].into(), number: 1, - state_root: hex!("489ae9b57a19bb4733a264dc64bbcae9b140a904657a681ed3bb5fbbe8cf412b").into(), + state_root: hex!("409fb5a14aeb8b8c59258b503396a56dee45a0ee28a78de3e622db957425e275").into(), extrinsics_root: hex!("03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c111314").into(), digest: Digest { logs: vec![], }, }, diff --git a/primitives/state-machine/src/backend.rs b/primitives/state-machine/src/backend.rs index df8f810ceb7..d45e822be83 100644 --- a/primitives/state-machine/src/backend.rs +++ b/primitives/state-machine/src/backend.rs @@ -16,12 +16,9 @@ //! State machine backends. These manage the code and storage of contracts. -use log::warn; use hash_db::Hasher; use codec::{Decode, Encode}; - use sp_core::{traits::RuntimeCode, storage::{ChildInfo, well_known_keys}}; -use sp_trie::{TrieMut, MemoryDB, trie_types::TrieDBMut}; use crate::{ trie_backend::TrieBackend, @@ -334,17 +331,20 @@ impl> Consolidate for sp_trie::GenericMem } /// Insert input pairs into memory db. -pub(crate) fn insert_into_memory_db(mdb: &mut MemoryDB, input: I) -> Option +#[cfg(test)] +pub(crate) fn insert_into_memory_db(mdb: &mut sp_trie::MemoryDB, input: I) -> Option where H: Hasher, I: IntoIterator, { + use sp_trie::{TrieMut, trie_types::TrieDBMut}; + let mut root = ::Out::default(); { let mut trie = TrieDBMut::::new(mdb, &mut root); for (key, value) in input { if let Err(e) = trie.insert(&key, &value) { - warn!(target: "trie", "Failed to write to trie: {}", e); + log::warn!(target: "trie", "Failed to write to trie: {}", e); return None; } } diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index 7f26085958e..9eeba041d7c 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -19,7 +19,7 @@ use std::{ collections::BTreeMap, any::{TypeId, Any}, iter::FromIterator, ops::Bound }; -use crate::{Backend, InMemoryBackend, StorageKey, StorageValue}; +use crate::{Backend, StorageKey, StorageValue}; use hash_db::Hasher; use sp_trie::{TrieConfiguration, empty_child_trie_root}; use sp_trie::trie_types::Layout; @@ -284,8 +284,7 @@ impl Externalities for BasicExternalities { ) -> Vec { if let Some(child) = self.inner.children_default.get(child_info.storage_key()) { let delta = child.data.clone().into_iter().map(|(k, v)| (k, Some(v))); - - InMemoryBackend::::default() + crate::in_memory_backend::new_in_mem::() .child_storage_root(&child.child_info, delta).0 } else { empty_child_trie_root::>() diff --git a/primitives/state-machine/src/in_memory_backend.rs b/primitives/state-machine/src/in_memory_backend.rs index 83126abbf78..8c0ae1ec8bf 100644 --- a/primitives/state-machine/src/in_memory_backend.rs +++ b/primitives/state-machine/src/in_memory_backend.rs @@ -19,134 +19,178 @@ use crate::{ StorageKey, StorageValue, StorageCollection, trie_backend::TrieBackend, - backend::{Backend, insert_into_memory_db}, - stats::UsageInfo, }; -use std::{error, fmt, collections::{BTreeMap, HashMap}, marker::PhantomData, ops}; +use std::{collections::{BTreeMap, HashMap}}; use hash_db::Hasher; use sp_trie::{ - MemoryDB, child_trie_root, empty_child_trie_root, TrieConfiguration, trie_types::Layout, + MemoryDB, TrieMut, + trie_types::TrieDBMut, }; use codec::Codec; -use sp_core::storage::{ChildInfo, ChildType, Storage}; +use sp_core::storage::{ChildInfo, Storage}; -/// Error impossible. -// FIXME: use `!` type when stabilized. https://github.com/rust-lang/rust/issues/35121 -#[derive(Debug)] -pub enum Void {} - -impl fmt::Display for Void { - fn fmt(&self, _: &mut fmt::Formatter) -> fmt::Result { - match *self {} +/// Insert input pairs into memory db. +fn insert_into_memory_db(mut root: H::Out, mdb: &mut MemoryDB, input: I) -> H::Out +where + H: Hasher, + I: IntoIterator)>, +{ + { + let mut trie = if root == Default::default() { + TrieDBMut::::new(mdb, &mut root) + } else { + TrieDBMut::::from_existing(mdb, &mut root).unwrap() + }; + for (key, value) in input { + if let Err(e) = match value { + Some(value) => { + trie.insert(&key, &value) + }, + None => { + trie.remove(&key) + }, + } { + panic!("Failed to write to trie: {}", e); + } + } + trie.commit(); } + root } -impl error::Error for Void { - fn description(&self) -> &str { "unreachable error" } -} - -/// In-memory backend. Fully recomputes tries each time `as_trie_backend` is called but useful for -/// tests and proof checking. -pub struct InMemory { - inner: HashMap, BTreeMap>, - // This field is only needed for returning reference in `as_trie_backend`. - trie: Option, H>>, - _hasher: PhantomData, +/// Create a new empty instance of in-memory backend. +pub fn new_in_mem() -> TrieBackend, H> +where + H::Out: Codec + Ord, +{ + let db = MemoryDB::default(); + let mut backend = TrieBackend::new(db, Default::default()); + backend.insert(std::iter::empty()); + backend } -impl std::fmt::Debug for InMemory { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "InMemory ({} values)", self.inner.len()) +impl TrieBackend, H> +where + H::Out: Codec + Ord, +{ + /// Copy the state, with applied updates + pub fn update< + T: IntoIterator, StorageCollection)> + >( + &self, + changes: T, + ) -> Self { + let mut clone = self.clone(); + clone.insert(changes); + clone } -} -impl Default for InMemory { - fn default() -> Self { - InMemory { - inner: Default::default(), - trie: None, - _hasher: PhantomData, + /// Insert values into backend trie. + pub fn insert< + T: IntoIterator, StorageCollection)> + >( + &mut self, + changes: T, + ) { + let mut new_child_roots = Vec::new(); + let mut root_map = None; + let root = self.root().clone(); + for (child_info, map) in changes { + if let Some(child_info) = child_info.as_ref() { + let prefix_storage_key = child_info.prefixed_storage_key(); + let ch = insert_into_memory_db::(root, self.backend_storage_mut(), map.clone().into_iter()); + new_child_roots.push((prefix_storage_key.into_inner(), Some(ch.as_ref().into()))); + } else { + root_map = Some(map); + } } + + let root = match root_map { + Some(map) => insert_into_memory_db::( + root, + self.backend_storage_mut(), + map.clone().into_iter().chain(new_child_roots.into_iter()), + ), + None => insert_into_memory_db::( + root, + self.backend_storage_mut(), + new_child_roots.into_iter(), + ), + }; + self.essence.set_root(root); } -} -impl Clone for InMemory { - fn clone(&self) -> Self { - InMemory { - inner: self.inner.clone(), - trie: None, - _hasher: PhantomData, - } + /// Merge trie nodes into this backend. + pub fn update_backend(&self, root: H::Out, changes: MemoryDB) -> Self { + let mut clone = self.backend_storage().clone(); + clone.consolidate(changes); + Self::new(clone, root) + } + + /// Compare with another in-memory backend. + pub fn eq(&self, other: &Self) -> bool { + self.root() == other.root() } } -impl PartialEq for InMemory { - fn eq(&self, other: &Self) -> bool { - self.inner.eq(&other.inner) +impl Clone for TrieBackend, H> +where + H::Out: Codec + Ord, +{ + fn clone(&self) -> Self { + TrieBackend::new(self.backend_storage().clone(), self.root().clone()) } } -impl InMemory { - /// Copy the state, with applied updates - pub fn update< - T: IntoIterator, StorageCollection)> - >( - &self, - changes: T, - ) -> Self { - let mut inner = self.inner.clone(); - for (child_info, key_values) in changes.into_iter() { - let entry = inner.entry(child_info).or_default(); - for (key, val) in key_values { - match val { - Some(v) => { entry.insert(key, v); }, - None => { entry.remove(&key); }, - } - } - } - inner.into() +impl Default for TrieBackend, H> +where + H::Out: Codec + Ord, +{ + fn default() -> Self { + new_in_mem() } } impl From, BTreeMap>> - for InMemory + for TrieBackend, H> +where + H::Out: Codec + Ord, { fn from(inner: HashMap, BTreeMap>) -> Self { - InMemory { - inner, - trie: None, - _hasher: PhantomData, - } + let mut backend = new_in_mem(); + backend.insert(inner.into_iter().map(|(k, m)| (k, m.into_iter().map(|(k, v)| (k, Some(v))).collect()))); + backend } } -impl From for InMemory { +impl From for TrieBackend, H> +where + H::Out: Codec + Ord, +{ fn from(inners: Storage) -> Self { let mut inner: HashMap, BTreeMap> = inners.children_default.into_iter().map(|(_k, c)| (Some(c.child_info), c.data)).collect(); inner.insert(None, inners.top); - InMemory { - inner, - trie: None, - _hasher: PhantomData, - } + inner.into() } } -impl From> for InMemory { +impl From> for TrieBackend, H> +where + H::Out: Codec + Ord, +{ fn from(inner: BTreeMap) -> Self { let mut expanded = HashMap::new(); expanded.insert(None, inner); - InMemory { - inner: expanded, - trie: None, - _hasher: PhantomData, - } + expanded.into() } } impl From, StorageCollection)>> - for InMemory { + for TrieBackend, H> +where + H::Out: Codec + Ord, +{ fn from( inner: Vec<(Option, StorageCollection)>, ) -> Self { @@ -164,213 +208,16 @@ impl From, StorageCollection)>> } } -impl InMemory { - /// Child storage infos iterator. - pub fn child_storage_infos(&self) -> impl Iterator { - self.inner.iter().filter_map(|item| item.0.as_ref()) - } -} - -impl Backend for InMemory where H::Out: Codec { - type Error = Void; - type Transaction = Vec<( - Option, - StorageCollection, - )>; - type TrieBackendStorage = MemoryDB; - - fn storage(&self, key: &[u8]) -> Result, Self::Error> { - Ok(self.inner.get(&None).and_then(|map| map.get(key).map(Clone::clone))) - } - - fn child_storage( - &self, - child_info: &ChildInfo, - key: &[u8], - ) -> Result, Self::Error> { - Ok(self.inner.get(&Some(child_info.to_owned())) - .and_then(|map| map.get(key).map(Clone::clone))) - } - - fn exists_storage(&self, key: &[u8]) -> Result { - Ok(self.inner.get(&None).map(|map| map.get(key).is_some()).unwrap_or(false)) - } - - fn for_keys_with_prefix(&self, prefix: &[u8], f: F) { - self.inner.get(&None) - .map(|map| map.keys().filter(|key| key.starts_with(prefix)).map(|k| &**k).for_each(f)); - } - - fn for_key_values_with_prefix(&self, prefix: &[u8], mut f: F) { - self.inner.get(&None).map(|map| map.iter().filter(|(key, _val)| key.starts_with(prefix)) - .for_each(|(k, v)| f(k, v))); - } - - fn for_keys_in_child_storage( - &self, - child_info: &ChildInfo, - mut f: F, - ) { - self.inner.get(&Some(child_info.to_owned())) - .map(|map| map.keys().for_each(|k| f(&k))); - } - - fn for_child_keys_with_prefix( - &self, - child_info: &ChildInfo, - prefix: &[u8], - f: F, - ) { - self.inner.get(&Some(child_info.to_owned())) - .map(|map| map.keys().filter(|key| key.starts_with(prefix)).map(|k| &**k).for_each(f)); - } - - fn storage_root(&self, delta: I) -> (H::Out, Self::Transaction) - where - I: IntoIterator, Option>)>, - ::Out: Ord, - { - let existing_pairs = self.inner.get(&None) - .into_iter() - .flat_map(|map| map.iter().map(|(k, v)| (k.clone(), Some(v.clone())))); - - let transaction: Vec<_> = delta.into_iter().collect(); - let root = Layout::::trie_root(existing_pairs.chain(transaction.iter().cloned()) - .collect::>() - .into_iter() - .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val))) - ); - - let full_transaction = transaction.into_iter().collect(); - - (root, vec![(None, full_transaction)]) - } - - fn child_storage_root( - &self, - child_info: &ChildInfo, - delta: I, - ) -> (H::Out, bool, Self::Transaction) - where - I: IntoIterator, Option>)>, - H::Out: Ord - { - let child_type = child_info.child_type(); - let child_info = Some(child_info.to_owned()); - - let existing_pairs = self.inner.get(&child_info) - .into_iter() - .flat_map(|map| map.iter().map(|(k, v)| (k.clone(), Some(v.clone())))); - - let transaction: Vec<_> = delta.into_iter().collect(); - let root = child_trie_root::, _, _, _>( - existing_pairs.chain(transaction.iter().cloned()) - .collect::>() - .into_iter() - .filter_map(|(k, maybe_val)| maybe_val.map(|val| (k, val))) - ); - - let full_transaction = transaction.into_iter().collect(); - - let is_default = match child_type { - ChildType::ParentKeyId => root == empty_child_trie_root::>(), - }; - - (root, is_default, vec![(child_info, full_transaction)]) - } - - fn next_storage_key(&self, key: &[u8]) -> Result, Self::Error> { - let range = (ops::Bound::Excluded(key), ops::Bound::Unbounded); - let next_key = self.inner.get(&None) - .and_then(|map| map.range::<[u8], _>(range).next().map(|(k, _)| k).cloned()); - - Ok(next_key) - } - - fn next_child_storage_key( - &self, - child_info: &ChildInfo, - key: &[u8], - ) -> Result, Self::Error> { - let range = (ops::Bound::Excluded(key), ops::Bound::Unbounded); - let next_key = self.inner.get(&Some(child_info.to_owned())) - .and_then(|map| map.range::<[u8], _>(range).next().map(|(k, _)| k).cloned()); - - Ok(next_key) - } - - fn pairs(&self) -> Vec<(StorageKey, StorageValue)> { - self.inner.get(&None) - .into_iter() - .flat_map(|map| map.iter().map(|(k, v)| (k.clone(), v.clone()))) - .collect() - } - - fn keys(&self, prefix: &[u8]) -> Vec { - self.inner.get(&None) - .into_iter() - .flat_map(|map| map.keys().filter(|k| k.starts_with(prefix)).cloned()) - .collect() - } - - fn child_keys( - &self, - child_info: &ChildInfo, - prefix: &[u8], - ) -> Vec { - self.inner.get(&Some(child_info.to_owned())) - .into_iter() - .flat_map(|map| map.keys().filter(|k| k.starts_with(prefix)).cloned()) - .collect() - } - - fn as_trie_backend(&mut self)-> Option<&TrieBackend> { - let mut mdb = MemoryDB::default(); - let mut new_child_roots = Vec::new(); - let mut root_map = None; - for (child_info, map) in &self.inner { - if let Some(child_info) = child_info.as_ref() { - let prefix_storage_key = child_info.prefixed_storage_key(); - let ch = insert_into_memory_db::(&mut mdb, map.clone().into_iter())?; - new_child_roots.push((prefix_storage_key.into_inner(), ch.as_ref().into())); - } else { - root_map = Some(map); - } - } - let root = match root_map { - Some(map) => insert_into_memory_db::( - &mut mdb, - map.clone().into_iter().chain(new_child_roots.into_iter()), - )?, - None => insert_into_memory_db::( - &mut mdb, - new_child_roots.into_iter(), - )?, - }; - self.trie = Some(TrieBackend::new(mdb, root)); - self.trie.as_ref() - } - - fn register_overlay_stats(&mut self, _stats: &crate::stats::StateMachineStats) { } - - fn usage_info(&self) -> UsageInfo { - UsageInfo::empty() - } - - fn wipe(&self) -> Result<(), Self::Error> { - Ok(()) - } -} - #[cfg(test)] mod tests { use super::*; use sp_runtime::traits::BlakeTwo256; + use crate::backend::Backend; /// Assert in memory backend with only child trie keys works as trie backend. #[test] fn in_memory_with_child_trie_only() { - let storage = InMemory::::default(); + let storage = new_in_mem::(); let child_info = ChildInfo::new_default(b"1"); let child_info = &child_info; let mut storage = storage.update( diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index 83bc812b15e..2ff10d4aff9 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -72,7 +72,7 @@ pub use proving_backend::{ pub use trie_backend_essence::{TrieBackendStorage, Storage}; pub use trie_backend::TrieBackend; pub use error::{Error, ExecutionError}; -pub use in_memory_backend::InMemory as InMemoryBackend; +pub use in_memory_backend::new_in_mem; pub use stats::{UsageInfo, UsageUnit, StateMachineStats}; pub use sp_core::traits::CloneableSpawn; @@ -87,6 +87,9 @@ pub type ChangesTrieTransaction = ( ChangesTrieCacheAction<::Out, N>, ); +/// Trie backend with in-memory storage. +pub type InMemoryBackend = TrieBackend, H>; + /// Strategy for executing a call into the runtime. #[derive(Copy, Clone, Eq, PartialEq, Debug)] pub enum ExecutionStrategy { @@ -1001,7 +1004,7 @@ mod tests { fn set_child_storage_works() { let child_info = ChildInfo::new_default(b"sub1"); let child_info = &child_info; - let mut state = InMemoryBackend::::default(); + let mut state = new_in_mem::(); let backend = state.as_trie_backend().unwrap(); let mut overlay = OverlayedChanges::default(); let mut cache = StorageTransactionCache::default(); diff --git a/primitives/state-machine/src/proving_backend.rs b/primitives/state-machine/src/proving_backend.rs index deafeb902d8..1cb281b070b 100644 --- a/primitives/state-machine/src/proving_backend.rs +++ b/primitives/state-machine/src/proving_backend.rs @@ -391,9 +391,10 @@ mod tests { ]; let in_memory = InMemoryBackend::::default(); let mut in_memory = in_memory.update(contents); + let child_storage_keys = vec![child_info_1.to_owned(), child_info_2.to_owned()]; let in_memory_root = in_memory.full_storage_root::<_, Vec<_>, _>( ::std::iter::empty(), - in_memory.child_storage_infos().map(|k|(k.to_owned(), Vec::new())) + child_storage_keys.into_iter().map(|k|(k.to_owned(), Vec::new())) ).0; (0..64).for_each(|i| assert_eq!( in_memory.storage(&[i]).unwrap().unwrap(), diff --git a/primitives/state-machine/src/testing.rs b/primitives/state-machine/src/testing.rs index 70a96c623ad..5993ef5db62 100644 --- a/primitives/state-machine/src/testing.rs +++ b/primitives/state-machine/src/testing.rs @@ -41,7 +41,7 @@ use sp_externalities::{Extensions, Extension}; /// Simple HashMap-based Externalities impl. pub struct TestExternalities where - H::Out: codec::Codec, + H::Out: codec::Codec + Ord, { overlay: OverlayedChanges, storage_transaction_cache: StorageTransactionCache< @@ -113,7 +113,7 @@ impl TestExternalities /// Insert key/value into backend pub fn insert(&mut self, k: StorageKey, v: StorageValue) { - self.backend = self.backend.update(vec![(None, vec![(k, Some(v))])]); + self.backend.insert(vec![(None, vec![(k, Some(v))])]); } /// Registers the given extension for this instance. @@ -157,7 +157,7 @@ impl TestExternalities } impl std::fmt::Debug for TestExternalities - where H::Out: codec::Codec, + where H::Out: Ord + codec::Codec, { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "overlay: {:?}\nbackend: {:?}", self.overlay, self.backend.pairs()) @@ -193,7 +193,7 @@ impl From for TestExternalities sp_externalities::ExtensionStore for TestExternalities where H: Hasher, - H::Out: codec::Codec, + H::Out: Ord + codec::Codec, N: ChangesTrieBlockNumber, { fn extension_by_type_id(&mut self, type_id: TypeId) -> Option<&mut dyn Any> { @@ -230,7 +230,7 @@ mod tests { ext.set_storage(b"doe".to_vec(), b"reindeer".to_vec()); ext.set_storage(b"dog".to_vec(), b"puppy".to_vec()); ext.set_storage(b"dogglesworth".to_vec(), b"cat".to_vec()); - const ROOT: [u8; 32] = hex!("2a340d3dfd52f5992c6b117e9e45f479e6da5afffafeb26ab619cf137a95aeb8"); + const ROOT: [u8; 32] = hex!("555d4777b52e9196e3f6373c556cc661e79cd463f881ab9e921e70fc30144bf4"); assert_eq!(&ext.storage_root()[..], &ROOT); } diff --git a/primitives/state-machine/src/trie_backend.rs b/primitives/state-machine/src/trie_backend.rs index 08eea293604..81fa0202457 100644 --- a/primitives/state-machine/src/trie_backend.rs +++ b/primitives/state-machine/src/trie_backend.rs @@ -29,7 +29,7 @@ use crate::{ /// Patricia trie-based backend. Transaction type is an overlay of changes to commit. pub struct TrieBackend, H: Hasher> { - essence: TrieBackendEssence, + pub (crate) essence: TrieBackendEssence, } impl, H: Hasher> TrieBackend where H::Out: Codec { @@ -50,6 +50,11 @@ impl, H: Hasher> TrieBackend where H::Out: Codec self.essence.backend_storage() } + /// Get backend storage reference. + pub fn backend_storage_mut(&mut self) -> &mut S { + self.essence.backend_storage_mut() + } + /// Get trie root. pub fn root(&self) -> &H::Out { self.essence.root() @@ -179,6 +184,7 @@ impl, H: Hasher> Backend for TrieBackend where &mut write_overlay, ); + let delta: Vec<_> = delta.into_iter().collect(); match delta_trie_root::, _, _, _, _>(&mut eph, root, delta) { Ok(ret) => root = ret, Err(e) => warn!(target: "trie", "Failed to write to trie: {}", e), @@ -243,6 +249,10 @@ impl, H: Hasher> Backend for TrieBackend where fn usage_info(&self) -> crate::UsageInfo { crate::UsageInfo::empty() } + + fn wipe(&self) -> Result<(), Self::Error> { + Ok(()) + } } #[cfg(test)] diff --git a/primitives/state-machine/src/trie_backend_essence.rs b/primitives/state-machine/src/trie_backend_essence.rs index 28d1c68ca2e..4622297ec07 100644 --- a/primitives/state-machine/src/trie_backend_essence.rs +++ b/primitives/state-machine/src/trie_backend_essence.rs @@ -55,11 +55,21 @@ impl, H: Hasher> TrieBackendEssence where H::Out: &self.storage } + /// Get backend storage reference. + pub fn backend_storage_mut(&mut self) -> &mut S { + &mut self.storage + } + /// Get trie root. pub fn root(&self) -> &H::Out { &self.root } + /// Set trie root. This is useful for testing. + pub fn set_root(&mut self, root: H::Out) { + self.root = root; + } + /// Consumes self and returns underlying storage. pub fn into_storage(self) -> S { self.storage -- GitLab From 7f876bfada6c4d0ba0586459dc8541eb2eaa5856 Mon Sep 17 00:00:00 2001 From: Alexander Popiak Date: Thu, 23 Apr 2020 22:13:40 +0200 Subject: [PATCH 040/167] update Substrate style guide link in PR template (#5759) --- docs/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md index 9755fa0e40f..fa2c15e6c02 100644 --- a/docs/PULL_REQUEST_TEMPLATE.md +++ b/docs/PULL_REQUEST_TEMPLATE.md @@ -9,7 +9,7 @@ Before you submitting, please check that: - [ ] You labeled the PR with appropriate labels if you have permissions to do so. - [ ] You mentioned a related issue if this PR related to it, e.g. `Fixes #228` or `Related #1337`. - [ ] You asked any particular reviewers to review. If you aren't sure, start with GH suggestions. -- [ ] Your PR adheres [the style guide](https://github.com/paritytech/polkadot/wiki/Style-Guide) +- [ ] Your PR adheres [the style guide](https://wiki.parity.io/Substrate-Style-Guide) - In particular, mind the maximal line length. - There is no commented code checked in unless necessary. - Any panickers have a proof or removed. -- GitLab From 45b12470d0084e641af9490a938706c28aeefaec Mon Sep 17 00:00:00 2001 From: Chevdor Date: Thu, 23 Apr 2020 22:20:24 +0200 Subject: [PATCH 041/167] Fix error message when providing an incorrect peer-id (#5724) * Fix error message when providing an incorrect peer-id * Fix error message to cover all cases Co-authored-by: Pierre Krieger --- client/network/src/service.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 95d711be73d..1391f8e06cc 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1158,9 +1158,9 @@ impl Future for NetworkWorker { if this.boot_node_ids.contains(&peer_id) { if let PendingConnectionError::InvalidPeerId = error { error!( - "💔 Invalid peer ID from bootnode, expected `{}` at address `{}`.", - peer_id, + "💔 The bootnode you want to connect to at `{}` provided a different peer ID than the one you expect: `{}`.", address, + peer_id, ); } } -- GitLab From 72c27754f995a42911ab887b72dbba1e02de1a6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Thei=C3=9Fen?= Date: Fri, 24 Apr 2020 10:48:13 +0200 Subject: [PATCH 042/167] Integrate pallet_contracts gas with the weight system (#5712) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Tomasz Drwięga Co-Authored-By: Sergei Pepyakin --- Cargo.lock | 1 + bin/node/cli/src/chain_spec.rs | 1 - bin/node/cli/src/factory_impl.rs | 3 +- bin/node/cli/src/service.rs | 3 +- bin/node/executor/tests/basic.rs | 11 +- bin/node/runtime/src/lib.rs | 17 +- bin/node/testing/src/genesis.rs | 1 - bin/node/testing/src/keyring.rs | 1 - bin/utils/subkey/src/main.rs | 2 - frame/contracts/Cargo.toml | 1 + frame/contracts/rpc/src/lib.rs | 7 +- frame/contracts/src/exec.rs | 79 ++++--- frame/contracts/src/gas.rs | 154 ++++-------- frame/contracts/src/lib.rs | 305 +++++++----------------- frame/contracts/src/tests.rs | 314 ++++++++++--------------- frame/contracts/src/wasm/code_cache.rs | 31 +-- frame/contracts/src/wasm/mod.rs | 76 +++--- frame/contracts/src/wasm/runtime.rs | 23 +- frame/support/src/lib.rs | 16 +- frame/transaction-payment/src/lib.rs | 20 +- 20 files changed, 386 insertions(+), 680 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82fabb30cf3..69f0f3906bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4077,6 +4077,7 @@ dependencies = [ "pallet-contracts-primitives", "pallet-randomness-collective-flip", "pallet-timestamp", + "pallet-transaction-payment", "parity-scale-codec", "parity-wasm 0.41.0", "pwasm-utils", diff --git a/bin/node/cli/src/chain_spec.rs b/bin/node/cli/src/chain_spec.rs index 6d67c613812..461474038b8 100644 --- a/bin/node/cli/src/chain_spec.rs +++ b/bin/node/cli/src/chain_spec.rs @@ -292,7 +292,6 @@ pub fn testnet_genesis( enable_println, // this should only be enabled on development chains ..Default::default() }, - gas_price: 1 * MILLICENTS, }), pallet_sudo: Some(SudoConfig { key: root_key, diff --git a/bin/node/cli/src/factory_impl.rs b/bin/node/cli/src/factory_impl.rs index 1d1eabe29cb..bc765353824 100644 --- a/bin/node/cli/src/factory_impl.rs +++ b/bin/node/cli/src/factory_impl.rs @@ -57,7 +57,6 @@ impl FactoryState { frame_system::CheckNonce::from(index), frame_system::CheckWeight::new(), pallet_transaction_payment::ChargeTransactionPayment::from(0), - Default::default(), ) } } @@ -122,7 +121,7 @@ impl RuntimeAdapter for FactoryState { (*amount).into() ) ) - }, key, (version, genesis_hash.clone(), prior_block_hash.clone(), (), (), (), ())) + }, key, (version, genesis_hash.clone(), prior_block_hash.clone(), (), (), ())) } fn inherent_extrinsics(&self) -> InherentData { diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index 0acd553ea01..1ccc6e5ec48 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -633,12 +633,11 @@ mod tests { check_nonce, check_weight, payment, - Default::default(), ); let raw_payload = SignedPayload::from_raw( function, extra, - (version, genesis_hash, genesis_hash, (), (), (), ()) + (version, genesis_hash, genesis_hash, (), (), ()) ); let signature = raw_payload.using_encoded(|payload| { signer.sign(payload) diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 151b7c54f67..387a7e9200d 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -606,13 +606,18 @@ fn deploying_wasm_contract_should_work() { CheckedExtrinsic { signed: Some((charlie(), signed_extra(0, 0))), function: Call::Contracts( - pallet_contracts::Call::put_code::(10_000, transfer_code) + pallet_contracts::Call::put_code::(transfer_code) ), }, CheckedExtrinsic { signed: Some((charlie(), signed_extra(1, 0))), function: Call::Contracts( - pallet_contracts::Call::instantiate::(1 * DOLLARS, 10_000, transfer_ch, Vec::new()) + pallet_contracts::Call::instantiate::( + 1 * DOLLARS, + 500_000_000, + transfer_ch, + Vec::new() + ) ), }, CheckedExtrinsic { @@ -621,7 +626,7 @@ fn deploying_wasm_contract_should_work() { pallet_contracts::Call::call::( pallet_indices::address::Address::Id(addr.clone()), 10, - 10_000, + 500_000_000, vec![0x00, 0x01, 0x02, 0x03] ) ), diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index d225d3e4780..7c39c72bd4a 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -73,7 +73,6 @@ use constants::{time::*, currency::*}; #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - /// Runtime version. pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("node"), @@ -460,9 +459,6 @@ impl pallet_treasury::Trait for Runtime { } parameter_types! { - pub const ContractTransactionBaseFee: Balance = 1 * CENTS; - pub const ContractTransactionByteFee: Balance = 10 * MILLICENTS; - pub const ContractFee: Balance = 1 * CENTS; pub const TombstoneDeposit: Balance = 1 * DOLLARS; pub const RentByteFee: Balance = 1 * DOLLARS; pub const RentDepositOffset: Balance = 1000 * DOLLARS; @@ -470,15 +466,12 @@ parameter_types! { } impl pallet_contracts::Trait for Runtime { - type Currency = Balances; type Time = Timestamp; type Randomness = RandomnessCollectiveFlip; type Call = Call; type Event = Event; type DetermineContractAddress = pallet_contracts::SimpleAddressDeterminer; - type ComputeDispatchFee = pallet_contracts::DefaultDispatchFeeComputor; type TrieIdGenerator = pallet_contracts::TrieIdFromParentCounter; - type GasPayment = (); type RentPayment = (); type SignedClaimHandicap = pallet_contracts::DefaultSignedClaimHandicap; type TombstoneDeposit = TombstoneDeposit; @@ -486,14 +479,8 @@ impl pallet_contracts::Trait for Runtime { type RentByteFee = RentByteFee; type RentDepositOffset = RentDepositOffset; type SurchargeReward = SurchargeReward; - type TransactionBaseFee = ContractTransactionBaseFee; - type TransactionByteFee = ContractTransactionByteFee; - type ContractFee = ContractFee; - type CallBaseFee = pallet_contracts::DefaultCallBaseFee; - type InstantiateBaseFee = pallet_contracts::DefaultInstantiateBaseFee; type MaxDepth = pallet_contracts::DefaultMaxDepth; type MaxValueSize = pallet_contracts::DefaultMaxValueSize; - type BlockGasLimit = pallet_contracts::DefaultBlockGasLimit; } impl pallet_sudo::Trait for Runtime { @@ -536,7 +523,6 @@ impl frame_system::offchain::CreateSignedTransaction for R frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(tip), - Default::default(), ); let raw_payload = SignedPayload::new(call, extra).map_err(|e| { debug::warn!("Unable to create signed payload: {:?}", e); @@ -692,7 +678,7 @@ construct_runtime!( FinalityTracker: pallet_finality_tracker::{Module, Call, Inherent}, Grandpa: pallet_grandpa::{Module, Call, Storage, Config, Event}, Treasury: pallet_treasury::{Module, Call, Storage, Config, Event}, - Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, + Contracts: pallet_contracts::{Module, Call, Config, Storage, Event}, Sudo: pallet_sudo::{Module, Call, Config, Storage, Event}, ImOnline: pallet_im_online::{Module, Call, Storage, Event, ValidateUnsigned, Config}, AuthorityDiscovery: pallet_authority_discovery::{Module, Call, Config}, @@ -724,7 +710,6 @@ pub type SignedExtra = ( frame_system::CheckNonce, frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, - pallet_contracts::CheckBlockGasLimit, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; diff --git a/bin/node/testing/src/genesis.rs b/bin/node/testing/src/genesis.rs index 8a57010770f..0f72d2c5471 100644 --- a/bin/node/testing/src/genesis.rs +++ b/bin/node/testing/src/genesis.rs @@ -97,7 +97,6 @@ pub fn config_endowed( }), pallet_contracts: Some(ContractsConfig { current_schedule: Default::default(), - gas_price: 1 * MILLICENTS, }), pallet_babe: Some(Default::default()), pallet_grandpa: Some(GrandpaConfig { diff --git a/bin/node/testing/src/keyring.rs b/bin/node/testing/src/keyring.rs index 6b0d06875d6..5eebc09f4b7 100644 --- a/bin/node/testing/src/keyring.rs +++ b/bin/node/testing/src/keyring.rs @@ -74,7 +74,6 @@ pub fn signed_extra(nonce: Index, extra_fee: Balance) -> SignedExtra { frame_system::CheckNonce::from(nonce), frame_system::CheckWeight::new(), pallet_transaction_payment::ChargeTransactionPayment::from(extra_fee), - Default::default(), ) } diff --git a/bin/utils/subkey/src/main.rs b/bin/utils/subkey/src/main.rs index 2d9302bf8c7..22706ebd822 100644 --- a/bin/utils/subkey/src/main.rs +++ b/bin/utils/subkey/src/main.rs @@ -708,7 +708,6 @@ fn create_extrinsic( frame_system::CheckNonce::::from(i), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(f), - Default::default(), ) }; let raw_payload = SignedPayload::from_raw( @@ -721,7 +720,6 @@ fn create_extrinsic( (), (), (), - (), ), ); let signature = raw_payload.using_encoded(|payload| signer.sign(payload)).into_runtime(); diff --git a/frame/contracts/Cargo.toml b/frame/contracts/Cargo.toml index 42dba7299de..e26efe5b690 100644 --- a/frame/contracts/Cargo.toml +++ b/frame/contracts/Cargo.toml @@ -25,6 +25,7 @@ sp-sandbox = { version = "0.8.0-dev", default-features = false, path = "../../pr frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "common" } +pallet-transaction-payment = { version = "2.0.0-dev", default-features = false, path = "../transaction-payment" } [dev-dependencies] wabt = "0.9.2" diff --git a/frame/contracts/rpc/src/lib.rs b/frame/contracts/rpc/src/lib.rs index 52dddb177bb..53e8d938703 100644 --- a/frame/contracts/rpc/src/lib.rs +++ b/frame/contracts/rpc/src/lib.rs @@ -46,9 +46,10 @@ const CONTRACT_IS_A_TOMBSTONE: i64 = 3; /// This value is used to set the upper bound for maximal contract calls to /// prevent blocking the RPC for too long. /// -/// Based on W3F research spreadsheet: -/// https://docs.google.com/spreadsheets/d/1h0RqncdqiWI4KgxO0z9JIpZEJESXjX_ZCK6LFX6veDo/view -const GAS_PER_SECOND: u64 = 1_000_000_000; +/// As 1 gas is equal to 1 weight we base this on the conducted benchmarks which +/// determined runtime weights: +/// https://github.com/paritytech/substrate/pull/5446 +const GAS_PER_SECOND: u64 = 1_000_000_000_000; /// A private newtype for converting `ContractAccessError` into an RPC error. struct ContractAccessError(pallet_contracts_primitives::ContractAccessError); diff --git a/frame/contracts/src/exec.rs b/frame/contracts/src/exec.rs index 402622331d0..9cc1c50260d 100644 --- a/frame/contracts/src/exec.rs +++ b/frame/contracts/src/exec.rs @@ -17,7 +17,7 @@ use super::{CodeHash, Config, ContractAddressFor, Event, RawEvent, Trait, TrieId, BalanceOf, ContractInfo}; use crate::account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}; -use crate::gas::{Gas, GasMeter, Token, approx_gas_for_balance}; +use crate::gas::{Gas, GasMeter, Token}; use crate::rent; use sp_std::prelude::*; @@ -203,6 +203,9 @@ pub trait Ext { /// /// Returns `None` if the value doesn't exist. fn get_runtime_storage(&self, key: &[u8]) -> Option>; + + /// Returns the price of one weight unit. + fn get_weight_price(&self) -> BalanceOf; } /// Loader is a companion of the `Vm` trait. It loads an appropriate abstract @@ -605,21 +608,19 @@ pub enum TransferFeeKind { #[cfg_attr(test, derive(Debug, PartialEq, Eq))] #[derive(Copy, Clone)] -pub struct TransferFeeToken { +pub struct TransferFeeToken { kind: TransferFeeKind, - gas_price: Balance, } -impl Token for TransferFeeToken> { +impl Token for TransferFeeToken { type Metadata = Config; #[inline] fn calculate_amount(&self, metadata: &Config) -> Gas { - let balance_fee = match self.kind { - TransferFeeKind::ContractInstantiate => metadata.contract_account_instantiate_fee, - TransferFeeKind::Transfer => return metadata.schedule.transfer_cost, - }; - approx_gas_for_balance(self.gas_price, balance_fee) + match self.kind { + TransferFeeKind::ContractInstantiate => metadata.schedule.instantiate_cost, + TransferFeeKind::Transfer => metadata.schedule.transfer_cost, + } } } @@ -668,7 +669,6 @@ fn transfer<'a, T: Trait, V: Vm, L: Loader>( }; TransferFeeToken { kind, - gas_price: gas_meter.gas_price(), } }; @@ -868,6 +868,13 @@ where fn get_runtime_storage(&self, key: &[u8]) -> Option> { unhashed::get_raw(&key) } + + fn get_weight_price(&self) -> BalanceOf { + use pallet_transaction_payment::Module as Payment; + use sp_runtime::SaturatedConversion; + let price = Payment::::weight_to_fee_with_adjustment::(1); + price.saturated_into() + } } /// These tests exercise the executive layer. @@ -889,6 +896,7 @@ mod tests { use crate::{ account_db::AccountDb, gas::GasMeter, tests::{ExtBuilder, Test}, exec::{ExecReturnValue, ExecError, STATUS_SUCCESS}, CodeHash, Config, + gas::Gas, }; use std::{cell::RefCell, rc::Rc, collections::HashMap, marker::PhantomData}; use assert_matches::assert_matches; @@ -898,6 +906,8 @@ mod tests { const BOB: u64 = 2; const CHARLIE: u64 = 3; + const GAS_LIMIT: Gas = 10_000_000_000; + impl<'a, T, V, L> ExecutionContext<'a, T, V, L> where T: crate::Trait { @@ -1003,7 +1013,7 @@ mod tests { #[test] fn it_works() { let value = Default::default(); - let mut gas_meter = GasMeter::::with_limit(10000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let data = vec![]; let vm = MockVm::new(); @@ -1044,7 +1054,7 @@ mod tests { ctx.overlay.set_balance(&origin, 100); ctx.overlay.set_balance(&dest, 0); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let result = ctx.call(dest, 0, &mut gas_meter, vec![]); assert_matches!(result, Ok(_)); @@ -1064,7 +1074,7 @@ mod tests { ctx.overlay.set_balance(&origin, 100); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let result = ctx.instantiate(1, &mut gas_meter, &code, vec![]); assert_matches!(result, Ok(_)); @@ -1093,7 +1103,7 @@ mod tests { let output = ctx.call( dest, 55, - &mut GasMeter::::with_limit(1000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ).unwrap(); @@ -1126,7 +1136,7 @@ mod tests { let output = ctx.call( dest, 55, - &mut GasMeter::::with_limit(1000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ).unwrap(); @@ -1152,7 +1162,7 @@ mod tests { ctx.overlay.set_balance(&origin, 100); ctx.overlay.set_balance(&dest, 0); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let result = ctx.call(dest, 50, &mut gas_meter, vec![]); assert_matches!(result, Ok(_)); @@ -1163,7 +1173,6 @@ mod tests { ExecFeeToken::Call, TransferFeeToken { kind: TransferFeeKind::Transfer, - gas_price: 1u64 }, ); }); @@ -1178,7 +1187,7 @@ mod tests { ctx.overlay.set_balance(&origin, 100); ctx.overlay.set_balance(&dest, 15); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let result = ctx.call(dest, 50, &mut gas_meter, vec![]); assert_matches!(result, Ok(_)); @@ -1189,7 +1198,6 @@ mod tests { ExecFeeToken::Call, TransferFeeToken { kind: TransferFeeKind::Transfer, - gas_price: 1u64 }, ); }); @@ -1207,7 +1215,7 @@ mod tests { ctx.overlay.set_balance(&origin, 100); ctx.overlay.set_balance(&dest, 15); - let mut gas_meter = GasMeter::::with_limit(1000, 1); + let mut gas_meter = GasMeter::::new(GAS_LIMIT); let result = ctx.instantiate(50, &mut gas_meter, &code, vec![]); assert_matches!(result, Ok(_)); @@ -1218,7 +1226,6 @@ mod tests { ExecFeeToken::Instantiate, TransferFeeToken { kind: TransferFeeKind::ContractInstantiate, - gas_price: 1u64 }, ); }); @@ -1242,7 +1249,7 @@ mod tests { let result = ctx.call( dest, 100, - &mut GasMeter::::with_limit(1000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1279,7 +1286,7 @@ mod tests { let result = ctx.call( dest, 0, - &mut GasMeter::::with_limit(1000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1310,7 +1317,7 @@ mod tests { let result = ctx.call( dest, 0, - &mut GasMeter::::with_limit(1000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1338,7 +1345,7 @@ mod tests { let result = ctx.call( BOB, 0, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![1, 2, 3, 4], ); assert_matches!(result, Ok(_)); @@ -1363,7 +1370,7 @@ mod tests { let result = ctx.instantiate( 1, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &input_data_ch, vec![1, 2, 3, 4], ); @@ -1413,7 +1420,7 @@ mod tests { let result = ctx.call( BOB, value, - &mut GasMeter::::with_limit(100000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1459,7 +1466,7 @@ mod tests { let result = ctx.call( dest, 0, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1500,7 +1507,7 @@ mod tests { let result = ctx.call( BOB, 0, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), vec![], ); @@ -1522,7 +1529,7 @@ mod tests { assert_matches!( ctx.instantiate( 0, // <- zero endowment - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &dummy_ch, vec![], ), @@ -1548,7 +1555,7 @@ mod tests { let instantiated_contract_address = assert_matches!( ctx.instantiate( 100, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &dummy_ch, vec![], ), @@ -1588,7 +1595,7 @@ mod tests { let instantiated_contract_address = assert_matches!( ctx.instantiate( 100, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &dummy_ch, vec![], ), @@ -1633,7 +1640,7 @@ mod tests { ctx.overlay.instantiate_contract(&BOB, instantiator_ch).unwrap(); assert_matches!( - ctx.call(BOB, 20, &mut GasMeter::::with_limit(1000, 1), vec![]), + ctx.call(BOB, 20, &mut GasMeter::::new(GAS_LIMIT), vec![]), Ok(_) ); @@ -1693,7 +1700,7 @@ mod tests { ctx.overlay.instantiate_contract(&BOB, instantiator_ch).unwrap(); assert_matches!( - ctx.call(BOB, 20, &mut GasMeter::::with_limit(1000, 1), vec![]), + ctx.call(BOB, 20, &mut GasMeter::::new(GAS_LIMIT), vec![]), Ok(_) ); @@ -1730,7 +1737,7 @@ mod tests { assert_matches!( ctx.instantiate( 100, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &terminate_ch, vec![], ), @@ -1766,7 +1773,7 @@ mod tests { let result = ctx.instantiate( 1, - &mut GasMeter::::with_limit(10000, 1), + &mut GasMeter::::new(GAS_LIMIT), &rent_allowance_ch, vec![], ); diff --git a/frame/contracts/src/gas.rs b/frame/contracts/src/gas.rs index 362f15f3aae..38f231c008f 100644 --- a/frame/contracts/src/gas.rs +++ b/frame/contracts/src/gas.rs @@ -14,22 +14,18 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use crate::{GasSpent, Module, Trait, BalanceOf, NegativeImbalanceOf}; -use sp_std::convert::TryFrom; -use sp_runtime::traits::{ - CheckedMul, Zero, SaturatedConversion, AtLeast32Bit, UniqueSaturatedInto, -}; -use frame_support::{ - traits::{Currency, ExistenceRequirement, Imbalance, OnUnbalanced, WithdrawReason}, StorageValue, - dispatch::DispatchError, +use crate::Trait; +use sp_std::marker::PhantomData; +use sp_runtime::traits::Zero; +use frame_support::dispatch::{ + DispatchError, DispatchResultWithPostInfo, PostDispatchInfo, DispatchErrorWithPostInfo, }; #[cfg(test)] use std::{any::Any, fmt::Debug}; -// Gas units are chosen to be represented by u64 so that gas metering instructions can operate on -// them efficiently. -pub type Gas = u64; +// Gas is essentially the same as weight. It is a 1 to 1 correspondence. +pub type Gas = frame_support::weights::Weight; #[must_use] #[derive(Debug, PartialEq, Eq)] @@ -88,20 +84,19 @@ pub struct ErasedToken { } pub struct GasMeter { - limit: Gas, + gas_limit: Gas, /// Amount of gas left from initial gas limit. Can reach zero. gas_left: Gas, - gas_price: BalanceOf, - + _phantom: PhantomData, #[cfg(test)] tokens: Vec, } impl GasMeter { - pub fn with_limit(gas_limit: Gas, gas_price: BalanceOf) -> GasMeter { + pub fn new(gas_limit: Gas) -> Self { GasMeter { - limit: gas_limit, + gas_limit, gas_left: gas_limit, - gas_price, + _phantom: PhantomData, #[cfg(test)] tokens: Vec::new(), } @@ -147,6 +142,14 @@ impl GasMeter { } } + // Account for not fully used gas. + // + // This can be used after dispatching a runtime call to refund gas that was not + // used by the dispatchable. + pub fn refund(&mut self, gas: Gas) { + self.gas_left = self.gas_left.saturating_add(gas).max(self.gas_limit); + } + /// Allocate some amount of gas and perform some work with /// a newly created nested gas meter. /// @@ -165,7 +168,7 @@ impl GasMeter { f(None) } else { self.gas_left = self.gas_left - amount; - let mut nested = GasMeter::with_limit(amount, self.gas_price); + let mut nested = GasMeter::new(amount); let r = f(Some(&mut nested)); @@ -175,8 +178,9 @@ impl GasMeter { } } - pub fn gas_price(&self) -> BalanceOf { - self.gas_price + /// Returns how much gas left from the initial budget. + fn gas_spent(&self) -> Gas { + self.gas_limit - self.gas_left } /// Returns how much gas left from the initial budget. @@ -184,9 +188,17 @@ impl GasMeter { self.gas_left } - /// Returns how much gas was spent. - fn spent(&self) -> Gas { - self.limit - self.gas_left + /// Turn this GasMeter into a DispatchResult that contains the actually used gas. + pub fn into_dispatch_result(self, result: Result) -> DispatchResultWithPostInfo where + E: Into, + { + let post_info = PostDispatchInfo { + actual_weight: Some(self.gas_spent()), + }; + + result + .map(|_| post_info) + .map_err(|e| DispatchErrorWithPostInfo { post_info, error: e.into() }) } #[cfg(test)] @@ -195,68 +207,6 @@ impl GasMeter { } } -/// Buy the given amount of gas. -/// -/// Cost is calculated by multiplying the gas cost (taken from the storage) by the `gas_limit`. -/// The funds are deducted from `transactor`. -pub fn buy_gas( - transactor: &T::AccountId, - gas_limit: Gas, -) -> Result<(GasMeter, NegativeImbalanceOf), DispatchError> { - // Buy the specified amount of gas. - let gas_price = >::gas_price(); - let cost = if gas_price.is_zero() { - >::zero() - } else { - as TryFrom>::try_from(gas_limit).ok() - .and_then(|gas_limit| gas_price.checked_mul(&gas_limit)) - .ok_or("overflow multiplying gas limit by price")? - }; - - let imbalance = T::Currency::withdraw( - transactor, - cost, - WithdrawReason::Fee.into(), - ExistenceRequirement::KeepAlive - )?; - - Ok((GasMeter::with_limit(gas_limit, gas_price), imbalance)) -} - -/// Refund the unused gas. -pub fn refund_unused_gas( - transactor: &T::AccountId, - gas_meter: GasMeter, - imbalance: NegativeImbalanceOf, -) { - let gas_spent = gas_meter.spent(); - let gas_left = gas_meter.gas_left(); - - // Increase total spent gas. - // This cannot overflow, since `gas_spent` is never greater than `block_gas_limit`, which - // also has Gas type. - GasSpent::mutate(|block_gas_spent| *block_gas_spent += gas_spent); - - // Refund gas left by the price it was bought at. - let refund = gas_meter.gas_price * gas_left.unique_saturated_into(); - let refund_imbalance = T::Currency::deposit_creating(transactor, refund); - if let Ok(imbalance) = imbalance.offset(refund_imbalance) { - T::GasPayment::on_unbalanced(imbalance); - } -} - -/// A little handy utility for converting a value in balance units into approximate value in gas units -/// at the given gas price. -pub fn approx_gas_for_balance(gas_price: Balance, balance: Balance) -> Gas - where Balance: AtLeast32Bit -{ - if gas_price.is_zero() { - Zero::zero() - } else { - (balance / gas_price).saturated_into::() - } -} - /// A simple utility macro that helps to match against a /// list of tokens. #[macro_export] @@ -298,7 +248,7 @@ macro_rules! match_tokens { #[cfg(test)] mod tests { use super::{GasMeter, Token}; - use crate::{tests::Test, gas::approx_gas_for_balance}; + use crate::tests::Test; /// A trivial token that charges the specified number of gas units. #[derive(Copy, Clone, PartialEq, Eq, Debug)] @@ -326,26 +276,24 @@ mod tests { #[test] fn it_works() { - let gas_meter = GasMeter::::with_limit(50000, 10); + let gas_meter = GasMeter::::new(50000); assert_eq!(gas_meter.gas_left(), 50000); } #[test] fn simple() { - let mut gas_meter = GasMeter::::with_limit(50000, 10); + let mut gas_meter = GasMeter::::new(50000); let result = gas_meter .charge(&MultiplierTokenMetadata { multiplier: 3 }, MultiplierToken(10)); assert!(!result.is_out_of_gas()); assert_eq!(gas_meter.gas_left(), 49_970); - assert_eq!(gas_meter.spent(), 30); - assert_eq!(gas_meter.gas_price(), 10); } #[test] fn tracing() { - let mut gas_meter = GasMeter::::with_limit(50000, 10); + let mut gas_meter = GasMeter::::new(50000); assert!(!gas_meter.charge(&(), SimpleToken(1)).is_out_of_gas()); assert!(!gas_meter .charge(&MultiplierTokenMetadata { multiplier: 3 }, MultiplierToken(10)) @@ -358,7 +306,7 @@ mod tests { // This test makes sure that nothing can be executed if there is no gas. #[test] fn refuse_to_execute_anything_if_zero() { - let mut gas_meter = GasMeter::::with_limit(0, 10); + let mut gas_meter = GasMeter::::new(0); assert!(gas_meter.charge(&(), SimpleToken(1)).is_out_of_gas()); } @@ -369,7 +317,7 @@ mod tests { // if the gas meter runs out of gas. However, this is just a nice property to have. #[test] fn overcharge_is_unrecoverable() { - let mut gas_meter = GasMeter::::with_limit(200, 10); + let mut gas_meter = GasMeter::::new(200); // The first charge is should lead to OOG. assert!(gas_meter.charge(&(), SimpleToken(300)).is_out_of_gas()); @@ -383,25 +331,7 @@ mod tests { // possible. #[test] fn charge_exact_amount() { - let mut gas_meter = GasMeter::::with_limit(25, 10); + let mut gas_meter = GasMeter::::new(25); assert!(!gas_meter.charge(&(), SimpleToken(25)).is_out_of_gas()); } - - // A unit test for `fn approx_gas_for_balance()`, and makes - // sure setting gas_price 0 does not cause `div by zero` error. - #[test] - fn approx_gas_for_balance_works() { - let tests = vec![ - (approx_gas_for_balance(0_u64, 123), 0), - (approx_gas_for_balance(0_u64, 456), 0), - (approx_gas_for_balance(1_u64, 123), 123), - (approx_gas_for_balance(1_u64, 456), 456), - (approx_gas_for_balance(100_u64, 900), 9), - (approx_gas_for_balance(123_u64, 900), 7), - ]; - - for (lhs, rhs) in tests { - assert_eq!(lhs, rhs); - } - } } diff --git a/frame/contracts/src/lib.rs b/frame/contracts/src/lib.rs index 2513f2fb618..8a17ada6fc3 100644 --- a/frame/contracts/src/lib.rs +++ b/frame/contracts/src/lib.rs @@ -64,15 +64,6 @@ //! initialize the contract. //! * `call` - Makes a call to an account, optionally transferring some balance. //! -//! ### Signed Extensions -//! -//! The contracts module defines the following extension: -//! -//! - [`CheckBlockGasLimit`]: Ensures that the transaction does not exceeds the block gas limit. -//! -//! The signed extension needs to be added as signed extra to the transaction type to be used in the -//! runtime. -//! //! ## Usage //! //! The Contract module is a work in progress. The following examples show how this Contract module @@ -114,21 +105,20 @@ use codec::{Codec, Encode, Decode}; use sp_io::hashing::blake2_256; use sp_runtime::{ traits::{ - Hash, StaticLookup, Zero, MaybeSerializeDeserialize, Member, SignedExtension, - DispatchInfoOf, - }, - transaction_validity::{ - ValidTransaction, InvalidTransaction, TransactionValidity, TransactionValidityError, + Hash, StaticLookup, Zero, MaybeSerializeDeserialize, Member, }, RuntimeDebug, }; -use frame_support::dispatch::{DispatchResult, Dispatchable}; +use frame_support::dispatch::{ + PostDispatchInfo, DispatchResult, Dispatchable, DispatchResultWithPostInfo +}; use frame_support::weights::MINIMUM_WEIGHT; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, parameter_types, IsSubType, storage::child::{self, ChildInfo}, }; use frame_support::traits::{OnUnbalanced, Currency, Get, Time, Randomness}; +use frame_support::weights::{FunctionOf, DispatchClass, Weight, GetDispatchInfo, Pays}; use frame_system::{self as system, ensure_signed, RawOrigin, ensure_root}; use pallet_contracts_primitives::{RentProjection, ContractAccessError}; @@ -295,9 +285,9 @@ where } } -pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; +pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; pub type NegativeImbalanceOf = - <::Currency as Currency<::AccountId>>::NegativeImbalance; + <::Currency as Currency<::AccountId>>::NegativeImbalance; parameter_types! { /// A reasonable default value for [`Trait::SignedClaimedHandicap`]. @@ -312,35 +302,21 @@ parameter_types! { pub const DefaultRentDepositOffset: u32 = 1000; /// A reasonable default value for [`Trait::SurchargeReward`]. pub const DefaultSurchargeReward: u32 = 150; - /// A reasonable default value for [`Trait::TransferFee`]. - pub const DefaultTransferFee: u32 = 0; - /// A reasonable default value for [`Trait::InstantiationFee`]. - pub const DefaultInstantiationFee: u32 = 0; - /// A reasonable default value for [`Trait::TransactionBaseFee`]. - pub const DefaultTransactionBaseFee: u32 = 0; - /// A reasonable default value for [`Trait::TransactionByteFee`]. - pub const DefaultTransactionByteFee: u32 = 0; - /// A reasonable default value for [`Trait::ContractFee`]. - pub const DefaultContractFee: u32 = 21; - /// A reasonable default value for [`Trait::CallBaseFee`]. - pub const DefaultCallBaseFee: u32 = 1000; - /// A reasonable default value for [`Trait::InstantiateBaseFee`]. - pub const DefaultInstantiateBaseFee: u32 = 1000; /// A reasonable default value for [`Trait::MaxDepth`]. pub const DefaultMaxDepth: u32 = 32; /// A reasonable default value for [`Trait::MaxValueSize`]. pub const DefaultMaxValueSize: u32 = 16_384; - /// A reasonable default value for [`Trait::BlockGasLimit`]. - pub const DefaultBlockGasLimit: u32 = 10_000_000; } -pub trait Trait: frame_system::Trait { - type Currency: Currency; +pub trait Trait: frame_system::Trait + pallet_transaction_payment::Trait { type Time: Time; type Randomness: Randomness; /// The outer call dispatch type. - type Call: Parameter + Dispatchable::Origin> + IsSubType, Self>; + type Call: + Parameter + + Dispatchable::Origin> + + IsSubType, Self> + GetDispatchInfo; /// The overarching event type. type Event: From> + Into<::Event>; @@ -348,18 +324,9 @@ pub trait Trait: frame_system::Trait { /// A function type to get the contract address given the instantiator. type DetermineContractAddress: ContractAddressFor, Self::AccountId>; - /// A function type that computes the fee for dispatching the given `Call`. - /// - /// It is recommended (though not required) for this function to return a fee that would be - /// taken by the Executive module for regular dispatch. - type ComputeDispatchFee: ComputeDispatchFee<::Call, BalanceOf>; - /// trie id generator type TrieIdGenerator: TrieIdGenerator; - /// Handler for the unbalanced reduction when making a gas payment. - type GasPayment: OnUnbalanced>; - /// Handler for rent payments. type RentPayment: OnUnbalanced>; @@ -392,29 +359,11 @@ pub trait Trait: frame_system::Trait { /// to removal of a contract. type SurchargeReward: Get>; - /// The fee to be paid for making a transaction; the base. - type TransactionBaseFee: Get>; - - /// The fee to be paid for making a transaction; the per-byte portion. - type TransactionByteFee: Get>; - - /// The fee required to instantiate a contract instance. - type ContractFee: Get>; - - /// The base fee charged for calling into a contract. - type CallBaseFee: Get; - - /// The base fee charged for instantiating a contract. - type InstantiateBaseFee: Get; - /// The maximum nesting level of a call/instantiate stack. type MaxDepth: Get; /// The maximum size of a storage value in bytes. type MaxValueSize: Get; - - /// The maximum amount of gas that could be expended per block. - type BlockGasLimit: Get; } /// Simple contract address determiner. @@ -440,19 +389,6 @@ where } } -/// The default dispatch fee computor computes the fee in the same way that -/// the implementation of `ChargeTransactionPayment` for the Balances module does. Note that this only takes a fixed -/// fee based on size. Unlike the balances module, weight-fee is applied. -pub struct DefaultDispatchFeeComputor(PhantomData); -impl ComputeDispatchFee<::Call, BalanceOf> for DefaultDispatchFeeComputor { - fn compute_dispatch_fee(call: &::Call) -> BalanceOf { - let encoded_len = call.using_encoded(|encoded| encoded.len() as u32); - let base_fee = T::TransactionBaseFee::get(); - let byte_fee = T::TransactionByteFee::get(); - base_fee + byte_fee * encoded_len.into() - } -} - decl_error! { /// Error for the contracts module. pub enum Error for Module { @@ -505,24 +441,6 @@ decl_module! { /// to removal of a contract. const SurchargeReward: BalanceOf = T::SurchargeReward::get(); - /// The fee to be paid for making a transaction; the base. - const TransactionBaseFee: BalanceOf = T::TransactionBaseFee::get(); - - /// The fee to be paid for making a transaction; the per-byte portion. - const TransactionByteFee: BalanceOf = T::TransactionByteFee::get(); - - /// The fee required to instantiate a contract instance. A reasonable default value - /// is 21. - const ContractFee: BalanceOf = T::ContractFee::get(); - - /// The base fee charged for calling into a contract. A reasonable default - /// value is 135. - const CallBaseFee: Gas = T::CallBaseFee::get(); - - /// The base fee charged for instantiating a contract. A reasonable default value - /// is 175. - const InstantiateBaseFee: Gas = T::InstantiateBaseFee::get(); - /// The maximum nesting level of a call/instantiate stack. A reasonable default /// value is 100. const MaxDepth: u32 = T::MaxDepth::get(); @@ -530,10 +448,6 @@ decl_module! { /// The maximum size of a storage value in bytes. A reasonable default is 16 KiB. const MaxValueSize: u32 = T::MaxValueSize::get(); - /// The maximum amount of gas that could be expended per block. A reasonable - /// default value is 10_000_000. - const BlockGasLimit: Gas = T::BlockGasLimit::get(); - fn deposit_event() = default; /// Updates the schedule for metering contracts. @@ -554,24 +468,21 @@ decl_module! { /// Stores the given binary Wasm code into the chain's storage and returns its `codehash`. /// You can instantiate contracts only with stored code. - #[weight = MINIMUM_WEIGHT] + #[weight = FunctionOf( + |args: (&Vec,)| Module::::calc_code_put_costs(args.0) + MINIMUM_WEIGHT, + DispatchClass::Normal, + Pays::Yes + )] pub fn put_code( origin, - #[compact] gas_limit: Gas, code: Vec ) -> DispatchResult { - let origin = ensure_signed(origin)?; - - let (mut gas_meter, imbalance) = gas::buy_gas::(&origin, gas_limit)?; - + ensure_signed(origin)?; let schedule = >::current_schedule(); - let result = wasm::save_code::(code, &mut gas_meter, &schedule); + let result = wasm::save_code::(code, &schedule); if let Ok(code_hash) = result { Self::deposit_event(RawEvent::CodeStored(code_hash)); } - - gas::refund_unused_gas::(&origin, gas_meter, imbalance); - result.map(|_| ()).map_err(Into::into) } @@ -582,20 +493,27 @@ decl_module! { /// * If the account is a regular account, any value will be transferred. /// * If no account exists and the call value is not less than `existential_deposit`, /// a regular account will be created and any value will be transferred. - #[weight = MINIMUM_WEIGHT] + #[weight = FunctionOf( + |args: (&::Source, &BalanceOf, &Weight, &Vec)| + args.2 + MINIMUM_WEIGHT, + DispatchClass::Normal, + Pays::Yes + )] pub fn call( origin, dest: ::Source, #[compact] value: BalanceOf, #[compact] gas_limit: Gas, data: Vec - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let origin = ensure_signed(origin)?; let dest = T::Lookup::lookup(dest)?; + let mut gas_meter = GasMeter::new(gas_limit); - Self::bare_call(origin, dest, value, gas_limit, data) - .map(|_| ()) - .map_err(|e| e.reason.into()) + let result = Self::execute_wasm(origin, &mut gas_meter, |ctx, gas_meter| { + ctx.call(dest, value, gas_meter, data) + }); + gas_meter.into_dispatch_result(result.map_err(|e| e.reason)) } /// Instantiates a new contract from the `codehash` generated by `put_code`, optionally transferring some balance. @@ -608,22 +526,26 @@ decl_module! { /// after the execution is saved as the `code` of the account. That code will be invoked /// upon any call received by this account. /// - The contract is initialized. - #[weight = MINIMUM_WEIGHT] + #[weight = FunctionOf( + |args: (&BalanceOf, &Weight, &CodeHash, &Vec)| args.1 + MINIMUM_WEIGHT, + DispatchClass::Normal, + Pays::Yes + )] pub fn instantiate( origin, #[compact] endowment: BalanceOf, #[compact] gas_limit: Gas, code_hash: CodeHash, data: Vec - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let origin = ensure_signed(origin)?; + let mut gas_meter = GasMeter::new(gas_limit); - Self::execute_wasm(origin, gas_limit, |ctx, gas_meter| { + let result = Self::execute_wasm(origin, &mut gas_meter, |ctx, gas_meter| { ctx.instantiate(endowment, gas_meter, &code_hash, data) .map(|(_address, output)| output) - }) - .map(|_| ()) - .map_err(|e| e.reason.into()) + }); + gas_meter.into_dispatch_result(result.map_err(|e| e.reason)) } /// Allows block producers to claim a small reward for evicting a contract. If a block producer @@ -658,10 +580,6 @@ decl_module! { T::Currency::deposit_into_existing(&rewarded, T::SurchargeReward::get())?; } } - - fn on_finalize() { - GasSpent::kill(); - } } } @@ -678,7 +596,8 @@ impl Module { gas_limit: Gas, input_data: Vec, ) -> ExecResult { - Self::execute_wasm(origin, gas_limit, |ctx, gas_meter| { + let mut gas_meter = GasMeter::new(gas_limit); + Self::execute_wasm(origin, &mut gas_meter, |ctx, gas_meter| { ctx.call(dest, value, gas_meter, input_data) }) } @@ -710,40 +629,27 @@ impl Module { } impl Module { + fn calc_code_put_costs(code: &Vec) -> Gas { + >::current_schedule().put_code_per_byte_cost.saturating_mul(code.len() as Gas) + } + fn execute_wasm( origin: T::AccountId, - gas_limit: Gas, + gas_meter: &mut GasMeter, func: impl FnOnce(&mut ExecutionContext, &mut GasMeter) -> ExecResult ) -> ExecResult { - // Pay for the gas upfront. - // - // NOTE: it is very important to avoid any state changes before - // paying for the gas. - let (mut gas_meter, imbalance) = - try_or_exec_error!( - gas::buy_gas::(&origin, gas_limit), - // We don't have a spare buffer here in the first place, so create a new empty one. - Vec::new() - ); - let cfg = Config::preload(); let vm = WasmVm::new(&cfg.schedule); let loader = WasmLoader::new(&cfg.schedule); let mut ctx = ExecutionContext::top_level(origin.clone(), &cfg, &vm, &loader); - let result = func(&mut ctx, &mut gas_meter); + let result = func(&mut ctx, gas_meter); if result.as_ref().map(|output| output.is_success()).unwrap_or(false) { // Commit all changes that made it thus far into the persistent storage. DirectAccountDb.commit(ctx.overlay.into_change_set()); } - // Refund cost of the unused gas. - // - // NOTE: This should go after the commit to the storage, since the storage changes - // can alter the balance of the caller. - gas::refund_unused_gas::(&origin, gas_meter, imbalance); - // Execute deferred actions. ctx.deferred.into_iter().for_each(|deferred| { use self::exec::DeferredAction::*; @@ -759,7 +665,13 @@ impl Module { origin: who, call, } => { + let info = call.get_dispatch_info(); let result = call.dispatch(RawOrigin::Signed(who.clone()).into()); + let post_info = match result { + Ok(post_info) => post_info, + Err(err) => err.post_info, + }; + gas_meter.refund(post_info.calc_unspent(&info)); Self::deposit_event(RawEvent::Dispatched(who, result.is_ok())); } RestoreTo { @@ -917,8 +829,6 @@ decl_event! { decl_storage! { trait Store for Module as Contracts { - /// Gas spent so far in this block. - GasSpent get(fn gas_spent): Gas; /// Current cost schedule for contracts. CurrentSchedule get(fn current_schedule) config(): Schedule = Schedule::default(); /// A mapping from an original code hash to the original code, untouched by instrumentation. @@ -929,8 +839,6 @@ decl_storage! { pub AccountCounter: u64 = 0; /// The code associated with a given account. pub ContractInfoOf: map hasher(twox_64_concat) T::AccountId => Option>; - /// The price of one unit of gas. - GasPrice get(fn gas_price) config(): BalanceOf = 1.into(); } } @@ -944,7 +852,6 @@ pub struct Config { pub tombstone_deposit: BalanceOf, pub max_depth: u32, pub max_value_size: u32, - pub contract_account_instantiate_fee: BalanceOf, } impl Config { @@ -955,7 +862,6 @@ impl Config { tombstone_deposit: T::TombstoneDeposit::get(), max_depth: T::MaxDepth::get(), max_value_size: T::MaxValueSize::get(), - contract_account_instantiate_fee: T::ContractFee::get(), } } } @@ -994,6 +900,9 @@ pub struct Schedule { /// Base gas cost to instantiate a contract. pub instantiate_base_cost: Gas, + /// Base gas cost to dispatch a runtime call. + pub dispatch_base_cost: Gas, + /// Gas cost per one byte read from the sandbox memory. pub sandbox_data_read_cost: Gas, @@ -1003,6 +912,9 @@ pub struct Schedule { /// Cost for a simple balance transfer. pub transfer_cost: Gas, + /// Cost for instantiating a new contract. + pub instantiate_cost: Gas, + /// The maximum number of topics supported by an event. pub max_event_topics: u32, @@ -1026,22 +938,29 @@ pub struct Schedule { pub max_subject_len: u32, } +// 500 (2 instructions per nano second on 2GHZ) * 1000x slowdown through wasmi +// This is a wild guess and should be viewed as a rough estimation. +// Proper benchmarks are needed before this value and its derivatives can be used in production. +const WASM_INSTRUCTION_COST: Gas = 500_000; + impl Default for Schedule { fn default() -> Schedule { Schedule { version: 0, - put_code_per_byte_cost: 1, - grow_mem_cost: 1, - regular_op_cost: 1, - return_data_per_byte_cost: 1, - event_data_per_byte_cost: 1, - event_per_topic_cost: 1, - event_base_cost: 1, - call_base_cost: 135, - instantiate_base_cost: 175, - sandbox_data_read_cost: 1, - sandbox_data_write_cost: 1, - transfer_cost: 100, + put_code_per_byte_cost: WASM_INSTRUCTION_COST, + grow_mem_cost: WASM_INSTRUCTION_COST, + regular_op_cost: WASM_INSTRUCTION_COST, + return_data_per_byte_cost: WASM_INSTRUCTION_COST, + event_data_per_byte_cost: WASM_INSTRUCTION_COST, + event_per_topic_cost: WASM_INSTRUCTION_COST, + event_base_cost: WASM_INSTRUCTION_COST, + call_base_cost: 135 * WASM_INSTRUCTION_COST, + dispatch_base_cost: 135 * WASM_INSTRUCTION_COST, + instantiate_base_cost: 175 * WASM_INSTRUCTION_COST, + sandbox_data_read_cost: WASM_INSTRUCTION_COST, + sandbox_data_write_cost: WASM_INSTRUCTION_COST, + transfer_cost: 100 * WASM_INSTRUCTION_COST, + instantiate_cost: 200 * WASM_INSTRUCTION_COST, max_event_topics: 4, max_stack_height: 64 * 1024, max_memory_pages: 16, @@ -1052,67 +971,3 @@ impl Default for Schedule { } } -/// `SignedExtension` that checks if a transaction would exhausts the block gas limit. -#[derive(Encode, Decode, Clone, Eq, PartialEq)] -pub struct CheckBlockGasLimit(PhantomData); - -impl Default for CheckBlockGasLimit { - fn default() -> Self { - Self(PhantomData) - } -} - -impl sp_std::fmt::Debug for CheckBlockGasLimit { - #[cfg(feature = "std")] - fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - write!(f, "CheckBlockGasLimit") - } - - #[cfg(not(feature = "std"))] - fn fmt(&self, _: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { - Ok(()) - } -} - -impl SignedExtension for CheckBlockGasLimit { - const IDENTIFIER: &'static str = "CheckBlockGasLimit"; - type AccountId = T::AccountId; - type Call = ::Call; - type AdditionalSigned = (); - type Pre = (); - - fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> { Ok(()) } - - fn validate( - &self, - _: &Self::AccountId, - call: &Self::Call, - _: &DispatchInfoOf, - _: usize, - ) -> TransactionValidity { - let call = match call.is_sub_type() { - Some(call) => call, - None => return Ok(ValidTransaction::default()), - }; - - match call { - Call::claim_surcharge(_, _) | Call::update_schedule(_) => - Ok(ValidTransaction::default()), - Call::put_code(gas_limit, _) - | Call::call(_, _, gas_limit, _) - | Call::instantiate(_, gas_limit, _, _) - => { - // Check if the specified amount of gas is available in the current block. - // This cannot underflow since `gas_spent` is never greater than `T::BlockGasLimit`. - let gas_available = T::BlockGasLimit::get() - >::gas_spent(); - if *gas_limit > gas_available { - // gas limit reached, revert the transaction and retry again in the future - InvalidTransaction::ExhaustsResources.into() - } else { - Ok(ValidTransaction::default()) - } - }, - Call::__PhantomItem(_, _) => unreachable!("Variant is never constructed"), - } - } -} diff --git a/frame/contracts/src/tests.rs b/frame/contracts/src/tests.rs index 452a4517dbe..dd228b0644d 100644 --- a/frame/contracts/src/tests.rs +++ b/frame/contracts/src/tests.rs @@ -22,20 +22,22 @@ use crate::{ BalanceOf, ComputeDispatchFee, ContractAddressFor, ContractInfo, ContractInfoOf, GenesisConfig, Module, RawAliveContractInfo, RawEvent, Trait, TrieId, TrieIdFromParentCounter, Schedule, - TrieIdGenerator, CheckBlockGasLimit, account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}, + TrieIdGenerator, account_db::{AccountDb, DirectAccountDb, OverlayAccountDb}, + gas::Gas, }; use assert_matches::assert_matches; use hex_literal::*; use codec::{Decode, Encode, KeyedVec}; use sp_runtime::{ Perbill, BuildStorage, transaction_validity::{InvalidTransaction, ValidTransaction}, - traits::{BlakeTwo256, Hash, IdentityLookup, SignedExtension}, + traits::{BlakeTwo256, Hash, IdentityLookup, SignedExtension, Convert}, testing::{Digest, DigestItem, Header, UintAuthorityId, H256}, }; use frame_support::{ - assert_ok, assert_err, impl_outer_dispatch, impl_outer_event, impl_outer_origin, parameter_types, + assert_ok, assert_err, assert_err_ignore_postinfo, impl_outer_dispatch, impl_outer_event, + impl_outer_origin, parameter_types, storage::child, StorageMap, StorageValue, traits::{Currency, Get}, - weights::{DispatchInfo, DispatchClass, Weight, Pays}, + weights::{DispatchInfo, DispatchClass, Weight, PostDispatchInfo, Pays}, }; use std::{cell::RefCell, sync::atomic::{AtomicUsize, Ordering}}; use sp_core::storage::well_known_keys; @@ -70,9 +72,6 @@ impl_outer_dispatch! { thread_local! { static EXISTENTIAL_DEPOSIT: RefCell = RefCell::new(0); - static TRANSFER_FEE: RefCell = RefCell::new(0); - static INSTANTIATION_FEE: RefCell = RefCell::new(0); - static BLOCK_GAS_LIMIT: RefCell = RefCell::new(0); } pub struct ExistentialDeposit; @@ -80,16 +79,6 @@ impl Get for ExistentialDeposit { fn get() -> u64 { EXISTENTIAL_DEPOSIT.with(|v| *v.borrow()) } } -pub struct TransferFee; -impl Get for TransferFee { - fn get() -> u64 { TRANSFER_FEE.with(|v| *v.borrow()) } -} - -pub struct BlockGasLimit; -impl Get for BlockGasLimit { - fn get() -> u64 { BLOCK_GAS_LIMIT.with(|v| *v.borrow()) } -} - #[derive(Clone, Eq, PartialEq, Debug)] pub struct Test; parameter_types! { @@ -142,24 +131,37 @@ parameter_types! { pub const RentByteFee: u64 = 4; pub const RentDepositOffset: u64 = 10_000; pub const SurchargeReward: u64 = 150; - pub const TransactionBaseFee: u64 = 2; - pub const TransactionByteFee: u64 = 6; - pub const ContractFee: u64 = 21; - pub const CallBaseFee: u64 = 135; - pub const InstantiateBaseFee: u64 = 175; pub const MaxDepth: u32 = 100; pub const MaxValueSize: u32 = 16_384; } -impl Trait for Test { + +parameter_types! { + pub const TransactionBaseFee: u64 = 0; + pub const TransactionByteFee: u64 = 0; +} + +impl Convert> for Test { + fn convert(w: Weight) -> BalanceOf { + w + } +} + +impl pallet_transaction_payment::Trait for Test { type Currency = Balances; + type OnTransactionPayment = (); + type TransactionBaseFee = TransactionBaseFee; + type TransactionByteFee = TransactionByteFee; + type WeightToFee = Test; + type FeeMultiplierUpdate = (); +} + +impl Trait for Test { type Time = Timestamp; type Randomness = Randomness; type Call = Call; type DetermineContractAddress = DummyContractAddressFor; type Event = MetaEvent; - type ComputeDispatchFee = DummyComputeDispatchFee; type TrieIdGenerator = DummyTrieIdGenerator; - type GasPayment = (); type RentPayment = (); type SignedClaimHandicap = SignedClaimHandicap; type TombstoneDeposit = TombstoneDeposit; @@ -167,14 +169,8 @@ impl Trait for Test { type RentByteFee = RentByteFee; type RentDepositOffset = RentDepositOffset; type SurchargeReward = SurchargeReward; - type TransactionBaseFee = TransactionBaseFee; - type TransactionByteFee = TransactionByteFee; - type ContractFee = ContractFee; - type CallBaseFee = CallBaseFee; - type InstantiateBaseFee = InstantiateBaseFee; type MaxDepth = MaxDepth; type MaxValueSize = MaxValueSize; - type BlockGasLimit = BlockGasLimit; } type Balances = pallet_balances::Module; @@ -219,21 +215,15 @@ const BOB: u64 = 2; const CHARLIE: u64 = 3; const DJANGO: u64 = 4; +const GAS_LIMIT: Gas = 10_000_000_000; + pub struct ExtBuilder { existential_deposit: u64, - gas_price: u64, - block_gas_limit: u64, - transfer_fee: u64, - instantiation_fee: u64, } impl Default for ExtBuilder { fn default() -> Self { Self { existential_deposit: 1, - gas_price: 2, - block_gas_limit: 100_000_000, - transfer_fee: 0, - instantiation_fee: 0, } } } @@ -242,27 +232,8 @@ impl ExtBuilder { self.existential_deposit = existential_deposit; self } - pub fn gas_price(mut self, gas_price: u64) -> Self { - self.gas_price = gas_price; - self - } - pub fn block_gas_limit(mut self, block_gas_limit: u64) -> Self { - self.block_gas_limit = block_gas_limit; - self - } - pub fn transfer_fee(mut self, transfer_fee: u64) -> Self { - self.transfer_fee = transfer_fee; - self - } - pub fn instantiation_fee(mut self, instantiation_fee: u64) -> Self { - self.instantiation_fee = instantiation_fee; - self - } pub fn set_associated_consts(&self) { EXISTENTIAL_DEPOSIT.with(|v| *v.borrow_mut() = self.existential_deposit); - TRANSFER_FEE.with(|v| *v.borrow_mut() = self.transfer_fee); - INSTANTIATION_FEE.with(|v| *v.borrow_mut() = self.instantiation_fee); - BLOCK_GAS_LIMIT.with(|v| *v.borrow_mut() = self.block_gas_limit); } pub fn build(self) -> sp_io::TestExternalities { self.set_associated_consts(); @@ -270,12 +241,11 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: vec![], }.assimilate_storage(&mut t).unwrap(); - GenesisConfig:: { + GenesisConfig { current_schedule: Schedule { enable_println: true, ..Default::default() }, - gas_price: self.gas_price, }.assimilate_storage(&mut t).unwrap(); let mut ext = sp_io::TestExternalities::new(t); ext.execute_with(|| System::set_block_number(1)); @@ -293,17 +263,21 @@ fn compile_module(wabt_module: &str) Ok((wasm, code_hash)) } -// Perform a simple transfer to a non-existent account supplying way more gas than needed. -// Then we check that the all unused gas is refunded. +// Perform a simple transfer to a non-existent account. +// Then we check that only the base costs are returned as actual costs. #[test] -fn refunds_unused_gas() { - ExtBuilder::default().gas_price(2).build().execute_with(|| { +fn returns_base_call_cost() { + ExtBuilder::default().build().execute_with(|| { Balances::deposit_creating(&ALICE, 100_000_000); - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, Vec::new())); - - // 2 * 135 - gas price multiplied by the call base fee. - assert_eq!(Balances::free_balance(ALICE), 100_000_000 - (2 * 135)); + assert_eq!( + Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, Vec::new()), + Ok( + PostDispatchInfo { + actual_weight: Some(67500000), + } + ) + ); }); } @@ -388,13 +362,13 @@ fn instantiate_and_call_and_deposit_event() { ExtBuilder::default().existential_deposit(100).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Check at the end to get hash on error easily let creation = Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], ); @@ -462,7 +436,7 @@ fn dispatch_call() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Let's keep this assert even though it's redundant. If you ever need to update the // wasm source this test will fail and will show you the actual hash. @@ -487,7 +461,7 @@ fn dispatch_call() { assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -496,7 +470,7 @@ fn dispatch_call() { Origin::signed(ALICE), BOB, // newly created account 0, - 100_000, + GAS_LIMIT, vec![], )); @@ -583,7 +557,7 @@ fn dispatch_call_not_dispatched_after_top_level_transaction_failure() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Let's keep this assert even though it's redundant. If you ever need to update the // wasm source this test will fail and will show you the actual hash. @@ -608,19 +582,19 @@ fn dispatch_call_not_dispatched_after_top_level_transaction_failure() { assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); // Call the newly instantiated contract. The contract is expected to dispatch a call // and then trap. - assert_err!( + assert_err_ignore_postinfo!( Contracts::call( Origin::signed(ALICE), BOB, // newly created account 0, - 100_000, + GAS_LIMIT, vec![], ), "contract trapped during execution" @@ -679,24 +653,24 @@ fn run_out_of_gas() { .execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); // Call the contract with a fixed gas limit. It must run out of gas because it just // loops forever. - assert_err!( + assert_err_ignore_postinfo!( Contracts::call( Origin::signed(ALICE), BOB, // newly created account 0, - 1000, + 67_500_000, vec![], ), "ran out of gas during contract execution" @@ -725,7 +699,7 @@ fn test_set_rent_code_and_hash() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // If you ever need to update the wasm source this test will fail // and will show you the actual hash. @@ -757,21 +731,21 @@ fn storage_size() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 30_000, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); let bob_contract = ContractInfoOf::::get(BOB).unwrap().get_alive().unwrap(); assert_eq!(bob_contract.storage_size, ::StorageSizeOffset::get() + 4); - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::set_storage_4_byte())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::set_storage_4_byte())); let bob_contract = ContractInfoOf::::get(BOB).unwrap().get_alive().unwrap(); assert_eq!(bob_contract.storage_size, ::StorageSizeOffset::get() + 4 + 4); - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::remove_storage_4_byte())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::remove_storage_4_byte())); let bob_contract = ContractInfoOf::::get(BOB).unwrap().get_alive().unwrap(); assert_eq!(bob_contract.storage_size, ::StorageSizeOffset::get() + 4); }); @@ -794,11 +768,11 @@ fn deduct_blocks() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 30_000, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); @@ -810,7 +784,7 @@ fn deduct_blocks() { initialize_block(5); // Trigger rent through call - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null())); // Check result let rent = (8 + 4 - 3) // storage size = size_offset + deploy_set_storage - deposit_offset @@ -825,7 +799,7 @@ fn deduct_blocks() { initialize_block(12); // Trigger rent through call - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null())); // Check result let rent_2 = (8 + 4 - 2) // storage size = size_offset + deploy_set_storage - deposit_offset @@ -837,7 +811,7 @@ fn deduct_blocks() { assert_eq!(Balances::free_balance(BOB), 30_000 - rent - rent_2); // Second call on same block should have no effect on rent - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null())); let bob_contract = ContractInfoOf::::get(BOB).unwrap().get_alive().unwrap(); assert_eq!(bob_contract.rent_allowance, 1_000 - rent - rent_2); @@ -850,7 +824,7 @@ fn deduct_blocks() { fn call_contract_removals() { removals(|| { // Call on already-removed account might fail, and this is fine. - Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null()); + Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null()); true }); } @@ -888,11 +862,11 @@ fn claim_surcharge(blocks: u64, trigger_call: impl Fn() -> bool, removes: bool) ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); @@ -921,11 +895,11 @@ fn removals(trigger_call: impl Fn() -> bool) { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm.clone())); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm.clone())); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); @@ -957,11 +931,11 @@ fn removals(trigger_call: impl Fn() -> bool) { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm.clone())); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm.clone())); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 1_000, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(100u32).encode() // rent allowance )); @@ -992,11 +966,11 @@ fn removals(trigger_call: impl Fn() -> bool) { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm.clone())); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm.clone())); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 50+Balances::minimum_balance(), - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); @@ -1006,7 +980,7 @@ fn removals(trigger_call: impl Fn() -> bool) { assert_eq!(Balances::free_balance(BOB), 50 + Balances::minimum_balance()); // Transfer funds - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::transfer())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::transfer())); assert_eq!(ContractInfoOf::::get(BOB).unwrap().get_alive().unwrap().rent_allowance, 1_000); assert_eq!(Balances::free_balance(BOB), Balances::minimum_balance()); @@ -1036,23 +1010,23 @@ fn call_removed_contract() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm.clone())); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm.clone())); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, code_hash.into(), + GAS_LIMIT, code_hash.into(), ::Balance::from(1_000u32).encode() // rent allowance )); // Calling contract should succeed. - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null())); // Advance blocks initialize_block(10); // Calling contract should remove contract and fail. - assert_err!( - Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null()), + assert_err_ignore_postinfo!( + Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null()), "contract has been evicted" ); // Calling a contract that is about to evict shall emit an event. @@ -1065,8 +1039,8 @@ fn call_removed_contract() { ]); // Subsequent contract calls should also fail. - assert_err!( - Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null()), + assert_err_ignore_postinfo!( + Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null()), "contract has been evicted" ); }) @@ -1080,11 +1054,11 @@ fn default_rent_allowance_on_instantiate() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 30_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1097,7 +1071,7 @@ fn default_rent_allowance_on_instantiate() { initialize_block(5); // Trigger rent through call - assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null())); + assert_ok!(Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null())); // Check contract is still alive let bob_contract = ContractInfoOf::::get(BOB).unwrap().get_alive(); @@ -1133,8 +1107,8 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, restoration_wasm)); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, set_rent_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), restoration_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), set_rent_wasm)); // If you ever need to update the wasm source this test will fail // and will show you the actual hash. @@ -1166,7 +1140,7 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 30_000, - 100_000, + GAS_LIMIT, set_rent_code_hash.into(), ::Balance::from(0u32).encode() )); @@ -1179,7 +1153,7 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: if test_different_storage { assert_ok!(Contracts::call( Origin::signed(ALICE), - BOB, 0, 100_000, + BOB, 0, GAS_LIMIT, call::set_storage_4_byte()) ); } @@ -1192,8 +1166,8 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: .get_alive().unwrap().code_hash; // Call `BOB`, which makes it pay rent. Since the rent allowance is set to 0 // we expect that it will get removed leaving tombstone. - assert_err!( - Contracts::call(Origin::signed(ALICE), BOB, 0, 100_000, call::null()), + assert_err_ignore_postinfo!( + Contracts::call(Origin::signed(ALICE), BOB, 0, GAS_LIMIT, call::null()), "contract has been evicted" ); assert!(ContractInfoOf::::get(BOB).unwrap().get_tombstone().is_some()); @@ -1215,7 +1189,7 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: assert_ok!(Contracts::instantiate( Origin::signed(CHARLIE), 30_000, - 100_000, + GAS_LIMIT, restoration_code_hash.into(), ::Balance::from(0u32).encode() )); @@ -1235,7 +1209,7 @@ fn restoration(test_different_storage: bool, test_restore_to_with_dirty_storage: Origin::signed(ALICE), DJANGO, 0, - 100_000, + GAS_LIMIT, vec![], )); @@ -1349,11 +1323,11 @@ fn storage_max_value_limit() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 30_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1367,17 +1341,17 @@ fn storage_max_value_limit() { Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, Encode::encode(&self::MaxValueSize::get()), )); // Call contract with too large a storage value. - assert_err!( + assert_err_ignore_postinfo!( Contracts::call( Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, Encode::encode(&(self::MaxValueSize::get() + 1)), ), "contract trapped during execution" @@ -1395,13 +1369,13 @@ fn deploy_and_call_other_contract() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, callee_wasm)); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, caller_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), callee_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), caller_wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, caller_code_hash.into(), vec![], )); @@ -1412,41 +1386,24 @@ fn deploy_and_call_other_contract() { Origin::signed(ALICE), BOB, 0, - 200_000, + GAS_LIMIT, callee_code_hash.as_ref().to_vec(), )); }); } -#[test] -fn deploy_works_without_gas_price() { - let (wasm, code_hash) = compile_module::(&load_wasm("get_runtime_storage.wat")) - .unwrap(); - ExtBuilder::default().existential_deposit(50).gas_price(0).build().execute_with(|| { - Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); - assert_ok!(Contracts::instantiate( - Origin::signed(ALICE), - 100, - 100_000, - code_hash.into(), - vec![], - )); - }); -} - #[test] fn cannot_self_destruct_through_draning() { let (wasm, code_hash) = compile_module::(&load_wasm("drain.wat")).unwrap(); ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Instantiate the BOB contract. assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1459,12 +1416,12 @@ fn cannot_self_destruct_through_draning() { // Call BOB with no input data, forcing it to run until out-of-balance // and eventually trapping because below existential deposit. - assert_err!( + assert_err_ignore_postinfo!( Contracts::call( Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, vec![], ), "contract trapped during execution" @@ -1478,13 +1435,13 @@ fn cannot_self_destruct_while_live() { .unwrap(); ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Instantiate the BOB contract. assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1497,12 +1454,12 @@ fn cannot_self_destruct_while_live() { // Call BOB with input data, forcing it make a recursive call to itself to // self-destruct, resulting in a trap. - assert_err!( + assert_err_ignore_postinfo!( Contracts::call( Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, vec![0], ), "contract trapped during execution" @@ -1522,13 +1479,13 @@ fn self_destruct_works() { .unwrap(); ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Instantiate the BOB contract. assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1545,10 +1502,10 @@ fn self_destruct_works() { Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, vec![], ), - Ok(()) + Ok(_) ); // Check that account is gone @@ -1571,15 +1528,15 @@ fn destroy_contract_and_transfer_funds() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { // Create Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, callee_wasm)); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, caller_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), callee_wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), caller_wasm)); // This deploys the BOB contract, which in turn deploys the CHARLIE contract during // construction. assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 200_000, - 100_000, + GAS_LIMIT, caller_code_hash.into(), callee_code_hash.as_ref().to_vec(), )); @@ -1595,7 +1552,7 @@ fn destroy_contract_and_transfer_funds() { Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, CHARLIE.encode(), )); @@ -1610,15 +1567,15 @@ fn cannot_self_destruct_in_constructor() { compile_module::(&load_wasm("self_destructing_constructor.wat")).unwrap(); ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Fail to instantiate the BOB because the call that is issued in the deploy // function exhausts all balances which puts it below the existential deposit. - assert_err!( + assert_err_ignore_postinfo!( Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], ), @@ -1627,23 +1584,6 @@ fn cannot_self_destruct_in_constructor() { }); } -#[test] -fn check_block_gas_limit_works() { - ExtBuilder::default().block_gas_limit(50).build().execute_with(|| { - let info = DispatchInfo { weight: 100, class: DispatchClass::Normal, pays_fee: Pays::Yes }; - let check = CheckBlockGasLimit::(Default::default()); - let call: Call = crate::Call::put_code(1000, vec![]).into(); - - assert_eq!( - check.validate(&0, &call, &info, 0), InvalidTransaction::ExhaustsResources.into(), - ); - - let call: Call = crate::Call::update_schedule(Default::default()).into(); - assert_eq!(check.validate(&0, &call, &info, 0), Ok(Default::default())); - }); -} - -#[test] fn get_runtime_storage() { let (wasm, code_hash) = compile_module::(&load_wasm("get_runtime_storage.wat")) .unwrap(); @@ -1655,11 +1595,11 @@ fn get_runtime_storage() { 0x14144020u32.to_le_bytes().to_vec().as_ref() ); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1667,7 +1607,7 @@ fn get_runtime_storage() { Origin::signed(ALICE), BOB, 0, - 100_000, + GAS_LIMIT, vec![], )); }); @@ -1679,13 +1619,13 @@ fn crypto_hashes() { ExtBuilder::default().existential_deposit(50).build().execute_with(|| { Balances::deposit_creating(&ALICE, 1_000_000); - assert_ok!(Contracts::put_code(Origin::signed(ALICE), 100_000, wasm)); + assert_ok!(Contracts::put_code(Origin::signed(ALICE), wasm)); // Instantiate the CRYPTO_HASHES contract. assert_ok!(Contracts::instantiate( Origin::signed(ALICE), 100_000, - 100_000, + GAS_LIMIT, code_hash.into(), vec![], )); @@ -1714,7 +1654,7 @@ fn crypto_hashes() { ALICE, BOB, 0, - 100_000, + GAS_LIMIT, params, ).unwrap(); assert_eq!(result.status, 0); diff --git a/frame/contracts/src/wasm/code_cache.rs b/frame/contracts/src/wasm/code_cache.rs index cb942a25892..ba7a02356d2 100644 --- a/frame/contracts/src/wasm/code_cache.rs +++ b/frame/contracts/src/wasm/code_cache.rs @@ -26,49 +26,20 @@ //! this guarantees that every instrumented contract code in cache cannot have the version equal to the current one. //! Thus, before executing a contract it should be reinstrument with new schedule. -use crate::gas::{Gas, GasMeter, Token}; use crate::wasm::{prepare, runtime::Env, PrefabWasmModule}; use crate::{CodeHash, CodeStorage, PristineCode, Schedule, Trait}; use sp_std::prelude::*; -use sp_runtime::traits::{Hash, Bounded}; +use sp_runtime::traits::Hash; use frame_support::StorageMap; -/// Gas metering token that used for charging storing code into the code storage. -/// -/// Specifies the code length in bytes. -#[cfg_attr(test, derive(Debug, PartialEq, Eq))] -#[derive(Copy, Clone)] -pub struct PutCodeToken(u32); - -impl Token for PutCodeToken { - type Metadata = Schedule; - - fn calculate_amount(&self, metadata: &Schedule) -> Gas { - metadata - .put_code_per_byte_cost - .checked_mul(self.0.into()) - .unwrap_or_else(|| Bounded::max_value()) - } -} - /// Put code in the storage. The hash of code is used as a key and is returned /// as a result of this function. /// /// This function instruments the given code and caches it in the storage. pub fn save( original_code: Vec, - gas_meter: &mut GasMeter, schedule: &Schedule, ) -> Result, &'static str> { - // The first time instrumentation is on the user. However, consequent reinstrumentation - // due to the schedule changes is on governance system. - if gas_meter - .charge(schedule, PutCodeToken(original_code.len() as u32)) - .is_out_of_gas() - { - return Err("there is not enough gas for storing the code"); - } - let prefab_module = prepare::prepare_contract::(&original_code, schedule)?; let code_hash = T::Hashing::hash(&original_code); diff --git a/frame/contracts/src/wasm/mod.rs b/frame/contracts/src/wasm/mod.rs index 8911fb72b61..cb69cd689b2 100644 --- a/frame/contracts/src/wasm/mod.rs +++ b/frame/contracts/src/wasm/mod.rs @@ -157,12 +157,14 @@ mod tests { use crate::gas::{Gas, GasMeter}; use crate::tests::{Test, Call}; use crate::wasm::prepare::prepare_contract; - use crate::CodeHash; + use crate::{CodeHash, BalanceOf}; use wabt; use hex_literal::hex; use assert_matches::assert_matches; use sp_runtime::DispatchError; + const GAS_LIMIT: Gas = 10_000_000_000; + #[derive(Debug, PartialEq, Eq)] struct DispatchEntry(Call); @@ -373,6 +375,9 @@ mod tests { ) ) } + fn get_weight_price(&self) -> BalanceOf { + 1312_u32.into() + } } impl Ext for &mut MockExt { @@ -478,6 +483,9 @@ mod tests { fn get_runtime_storage(&self, key: &[u8]) -> Option> { (**self).get_runtime_storage(key) } + fn get_weight_price(&self) -> BalanceOf { + (**self).get_weight_price() + } } fn execute( @@ -544,7 +552,7 @@ mod tests { CODE_TRANSFER, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( @@ -553,7 +561,7 @@ mod tests { to: 7, value: 153, data: Vec::new(), - gas_left: 49978, + gas_left: 9989000000, }] ); } @@ -604,7 +612,7 @@ mod tests { CODE_CALL, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( @@ -613,7 +621,7 @@ mod tests { to: 9, value: 6, data: vec![1, 2, 3, 4], - gas_left: 49971, + gas_left: 9985500000, }] ); } @@ -666,7 +674,7 @@ mod tests { CODE_INSTANTIATE, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( @@ -675,7 +683,7 @@ mod tests { code_hash: [0x11; 32].into(), endowment: 3, data: vec![1, 2, 3, 4], - gas_left: 49947, + gas_left: 9973500000, }] ); } @@ -709,14 +717,14 @@ mod tests { CODE_TERMINATE, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( &mock_ext.terminations, &[TerminationEntry { beneficiary: 0x09, - gas_left: 49989, + gas_left: 9994500000, }] ); } @@ -767,7 +775,7 @@ mod tests { &CODE_TRANSFER_LIMITED_GAS, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( @@ -860,7 +868,7 @@ mod tests { CODE_GET_STORAGE, vec![], mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!(output, ExecReturnValue { status: STATUS_SUCCESS, data: [0x22; 32].to_vec() }); @@ -924,7 +932,7 @@ mod tests { CODE_CALLER, vec![], MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); } @@ -986,7 +994,7 @@ mod tests { CODE_ADDRESS, vec![], MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); } @@ -1041,7 +1049,7 @@ mod tests { #[test] fn balance() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_BALANCE, vec![], @@ -1101,7 +1109,7 @@ mod tests { #[test] fn gas_price() { - let mut gas_meter = GasMeter::with_limit(50_000, 1312); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_GAS_PRICE, vec![], @@ -1159,7 +1167,7 @@ mod tests { #[test] fn gas_left() { - let mut gas_meter = GasMeter::with_limit(50_000, 1312); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let output = execute( CODE_GAS_LEFT, @@ -1169,7 +1177,7 @@ mod tests { ).unwrap(); let gas_left = Gas::decode(&mut output.data.as_slice()).unwrap(); - assert!(gas_left < 50_000, "gas_left must be less than initial"); + assert!(gas_left < GAS_LIMIT, "gas_left must be less than initial"); assert!(gas_left > gas_meter.gas_left(), "gas_left must be greater than final"); } @@ -1224,7 +1232,7 @@ mod tests { #[test] fn value_transferred() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_VALUE_TRANSFERRED, vec![], @@ -1260,7 +1268,7 @@ mod tests { CODE_DISPATCH_CALL, vec![], &mut mock_ext, - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!( @@ -1300,7 +1308,7 @@ mod tests { CODE_RETURN_FROM_START_FN, vec![], MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!(output, ExecReturnValue { status: STATUS_SUCCESS, data: vec![1, 2, 3, 4] }); @@ -1357,7 +1365,7 @@ mod tests { #[test] fn now() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_TIMESTAMP_NOW, vec![], @@ -1416,7 +1424,7 @@ mod tests { #[test] fn minimum_balance() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_MINIMUM_BALANCE, vec![], @@ -1475,7 +1483,7 @@ mod tests { #[test] fn tombstone_deposit() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_TOMBSTONE_DEPOSIT, vec![], @@ -1543,7 +1551,7 @@ mod tests { #[test] fn random() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let output = execute( CODE_RANDOM, @@ -1588,7 +1596,7 @@ mod tests { #[test] fn deposit_event() { let mut mock_ext = MockExt::default(); - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let _ = execute( CODE_DEPOSIT_EVENT, vec![], @@ -1601,7 +1609,7 @@ mod tests { vec![0x00, 0x01, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x14, 0x00]) ]); - assert_eq!(gas_meter.gas_left(), 49934); + assert_eq!(gas_meter.gas_left(), 9967000000); } const CODE_DEPOSIT_EVENT_MAX_TOPICS: &str = r#" @@ -1634,7 +1642,7 @@ mod tests { #[test] fn deposit_event_max_topics() { // Checks that the runtime traps if there are more than `max_topic_events` topics. - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); assert_matches!( execute( @@ -1678,7 +1686,7 @@ mod tests { #[test] fn deposit_event_duplicates() { // Checks that the runtime traps if there are duplicates. - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); assert_matches!( execute( @@ -1749,7 +1757,7 @@ mod tests { CODE_BLOCK_NUMBER, vec![], MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); } @@ -1789,7 +1797,7 @@ mod tests { CODE_SIMPLE_ASSERT, input_data, MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!(output.data.len(), 0); @@ -1805,7 +1813,7 @@ mod tests { CODE_SIMPLE_ASSERT, input_data, MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).err().unwrap(); assert_eq!(error.buffer.capacity(), 1_234); @@ -1859,7 +1867,7 @@ mod tests { CODE_RETURN_WITH_DATA, hex!("00112233445566778899").to_vec(), MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!(output, ExecReturnValue { status: 0, data: hex!("445566778899").to_vec() }); @@ -1872,7 +1880,7 @@ mod tests { CODE_RETURN_WITH_DATA, hex!("112233445566778899").to_vec(), MockExt::default(), - &mut GasMeter::with_limit(50_000, 1), + &mut GasMeter::new(GAS_LIMIT), ).unwrap(); assert_eq!(output, ExecReturnValue { status: 17, data: hex!("5566778899").to_vec() }); @@ -1958,7 +1966,7 @@ mod tests { #[test] fn get_runtime_storage() { - let mut gas_meter = GasMeter::with_limit(50_000, 1); + let mut gas_meter = GasMeter::new(GAS_LIMIT); let mock_ext = MockExt::default(); // "\01\02\03\04" - Some(0x14144020) diff --git a/frame/contracts/src/wasm/runtime.rs b/frame/contracts/src/wasm/runtime.rs index 7cede5542fc..f87f5d1ef53 100644 --- a/frame/contracts/src/wasm/runtime.rs +++ b/frame/contracts/src/wasm/runtime.rs @@ -16,11 +16,11 @@ //! Environment definition of the wasm smart-contract runtime. -use crate::{Schedule, Trait, CodeHash, ComputeDispatchFee, BalanceOf}; +use crate::{Schedule, Trait, CodeHash, BalanceOf}; use crate::exec::{ Ext, ExecResult, ExecError, ExecReturnValue, StorageKey, TopicOf, STATUS_SUCCESS, }; -use crate::gas::{Gas, GasMeter, Token, GasMeterResult, approx_gas_for_balance}; +use crate::gas::{Gas, GasMeter, Token, GasMeterResult}; use sp_sandbox; use frame_system; use sp_std::{prelude::*, mem, convert::TryInto}; @@ -32,6 +32,7 @@ use sp_io::hashing::{ blake2_128, sha2_256, }; +use frame_support::weights::GetDispatchInfo; /// The value returned from ext_call and ext_instantiate contract external functions if the call or /// instantiation traps. This value is chosen as if the execution does not trap, the return value @@ -153,8 +154,8 @@ pub enum RuntimeToken { /// The given number of bytes is read from the sandbox memory and /// is returned as the return data buffer of the call. ReturnData(u32), - /// Dispatch fee calculated by `T::ComputeDispatchFee`. - ComputedDispatchFee(Gas), + /// Dispatched a call with the given weight. + DispatchWithWeight(Gas), /// (topic_count, data_bytes): A buffer of the given size is posted as an event indexed with the /// given number of topics. DepositEvent(u32, u32), @@ -195,7 +196,7 @@ impl Token for RuntimeToken { data_and_topics_cost.checked_add(metadata.event_base_cost) ) }, - ComputedDispatchFee(gas) => Some(gas), + DispatchWithWeight(gas) => gas.checked_add(metadata.dispatch_base_cost), }; value.unwrap_or_else(|| Bounded::max_value()) @@ -692,7 +693,7 @@ define_env!(Env, , // The data is encoded as T::Balance. The current contents of the scratch buffer are overwritten. ext_gas_price(ctx) => { ctx.scratch_buf.clear(); - ctx.gas_meter.gas_price().encode_to(&mut ctx.scratch_buf); + ctx.ext.get_weight_price().encode_to(&mut ctx.scratch_buf); Ok(()) }, @@ -783,16 +784,14 @@ define_env!(Env, , let call: <::T as Trait>::Call = read_sandbox_memory_as(ctx, call_ptr, call_len)?; - // Charge gas for dispatching this call. - let fee = { - let balance_fee = <::T as Trait>::ComputeDispatchFee::compute_dispatch_fee(&call); - approx_gas_for_balance(ctx.gas_meter.gas_price(), balance_fee) - }; + // We already deducted the len costs when reading from the sandbox. + // Bill on the actual weight of the dispatched call. + let info = call.get_dispatch_info(); charge_gas( &mut ctx.gas_meter, ctx.schedule, &mut ctx.special_trap, - RuntimeToken::ComputedDispatchFee(fee) + RuntimeToken::DispatchWithWeight(info.weight) )?; ctx.ext.note_dispatch_call(call); diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index df987e0b0ba..b0e7395e9ff 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -193,10 +193,6 @@ macro_rules! assert_noop { } } -/// Panic if an expression doesn't evaluate to an `Err`. -/// -/// Used as `assert_err!(expression_to_assert, expected_err_expression)`. - /// Assert an expression returns an error specified. /// /// Used as `assert_err!(expression_to_assert, expected_error_expression)` @@ -208,6 +204,18 @@ macro_rules! assert_err { } } +/// Assert an expression returns an error specified. +/// +/// This can be used on`DispatchResultWithPostInfo` when the post info should +/// be ignored. +#[macro_export] +#[cfg(feature = "std")] +macro_rules! assert_err_ignore_postinfo { + ( $x:expr , $y:expr $(,)? ) => { + assert_err!($x.map(|_| ()).map_err(|e| e.error), $y); + } +} + /// Panic if an expression doesn't evaluate to `Ok`. /// /// Used as `assert_ok!(expression_to_assert, expected_ok_expression)`, diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 95845990b8e..6caca4c23ba 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -47,7 +47,7 @@ use sp_runtime::{ }, traits::{ Zero, Saturating, SignedExtension, SaturatedConversion, Convert, Dispatchable, - DispatchInfoOf, PostDispatchInfoOf, + DispatchInfoOf, PostDispatchInfoOf, UniqueSaturatedFrom, UniqueSaturatedInto, }, }; use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; @@ -116,9 +116,7 @@ decl_module! { } } -impl Module where - T::Call: Dispatchable, -{ +impl Module { /// Query the data that we know about the fee of a given `call`. /// /// As this module is not and cannot be aware of the internals of a signed extension, it only @@ -133,6 +131,7 @@ impl Module where where T: Send + Sync, BalanceOf: Send + Sync, + T::Call: Dispatchable, { // NOTE: we can actually make it understand `ChargeTransactionPayment`, but would be some // hassle for sure. We have to make it aware of the index of `ChargeTransactionPayment` in @@ -165,7 +164,9 @@ impl Module where len: u32, info: &DispatchInfoOf, tip: BalanceOf, - ) -> BalanceOf { + ) -> BalanceOf where + T::Call: Dispatchable, + { if info.pays_fee == Pays::Yes { let len = >::from(len); let per_byte = T::TransactionByteFee::get(); @@ -188,11 +189,12 @@ impl Module where /// /// This fee is already adjusted by the per block fee adjustment factor and is therefore /// the share that the weight contributes to the overall fee of a transaction. - pub fn weight_to_fee_with_adjustment(weight: Weight) -> BalanceOf where - BalanceOf: From + pub fn weight_to_fee_with_adjustment(weight: Weight) -> Balance where + Balance: UniqueSaturatedFrom { - NextFeeMultiplier::get().saturated_multiply_accumulate( - Self::weight_to_fee(weight) + let fee = UniqueSaturatedInto::::unique_saturated_into(Self::weight_to_fee(weight)); + UniqueSaturatedFrom::unique_saturated_from( + NextFeeMultiplier::get().saturated_multiply_accumulate(fee) ) } -- GitLab From a9c1b75d6ee6a8c3400c20b3ce8c8696bd322be4 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Fri, 24 Apr 2020 11:40:28 +0200 Subject: [PATCH 043/167] Repair and extend some benchmarks (#5648) --- bin/node/runtime/src/lib.rs | 2 +- frame/benchmarking/src/lib.rs | 10 +- frame/collective/src/benchmarking.rs | 424 ++++++++--- frame/collective/src/lib.rs | 2 +- frame/democracy/src/benchmarking.rs | 800 ++++++++++++++++---- frame/democracy/src/tests.rs | 24 +- frame/support/src/traits.rs | 2 +- frame/timestamp/src/benchmarking.rs | 24 +- frame/vesting/src/benchmarking.rs | 203 +++-- utils/frame/benchmarking-cli/src/command.rs | 3 + 10 files changed, 1174 insertions(+), 320 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 7c39c72bd4a..29defaaecf7 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -903,13 +903,13 @@ impl_runtime_apis! { add_benchmark!(params, batches, b"democracy", Democracy); add_benchmark!(params, batches, b"identity", Identity); add_benchmark!(params, batches, b"im-online", ImOnline); + add_benchmark!(params, batches, b"offences", OffencesBench::); add_benchmark!(params, batches, b"session", SessionBench::); add_benchmark!(params, batches, b"staking", Staking); add_benchmark!(params, batches, b"timestamp", Timestamp); add_benchmark!(params, batches, b"treasury", Treasury); add_benchmark!(params, batches, b"utility", Utility); add_benchmark!(params, batches, b"vesting", Vesting); - add_benchmark!(params, batches, b"offences", OffencesBench::); if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) diff --git a/frame/benchmarking/src/lib.rs b/frame/benchmarking/src/lib.rs index 6bb10f3d972..8045408d530 100644 --- a/frame/benchmarking/src/lib.rs +++ b/frame/benchmarking/src/lib.rs @@ -723,6 +723,9 @@ macro_rules! impl_benchmark { let steps = steps.get(idx).cloned().unwrap_or(prev_steps); prev_steps = steps; + // Skip this loop if steps is zero + if steps == 0 { continue } + let lowest = lowest_range_values.get(idx).cloned().unwrap_or(*low); let highest = highest_range_values.get(idx).cloned().unwrap_or(*high); @@ -828,6 +831,9 @@ macro_rules! impl_benchmark { let steps = steps.get(idx).cloned().unwrap_or(prev_steps); prev_steps = steps; + // Skip this loop if steps is zero + if steps == 0 { continue } + let lowest = lowest_range_values.get(idx).cloned().unwrap_or(*low); let highest = highest_range_values.get(idx).cloned().unwrap_or(*high); @@ -1036,7 +1042,7 @@ macro_rules! add_benchmark { &steps[..], repeat, )?, - pallet: pallet.to_vec(), + pallet: $name.to_vec(), benchmark: benchmark.to_vec(), }); } @@ -1049,7 +1055,7 @@ macro_rules! add_benchmark { &steps[..], repeat, )?, - pallet: pallet.to_vec(), + pallet: $name.to_vec(), benchmark: benchmark.clone(), }); } diff --git a/frame/collective/src/benchmarking.rs b/frame/collective/src/benchmarking.rs index edef5e2e24e..5c25051fd08 100644 --- a/frame/collective/src/benchmarking.rs +++ b/frame/collective/src/benchmarking.rs @@ -19,173 +19,398 @@ use super::*; use frame_system::RawOrigin as SystemOrigin; +use frame_system::EventRecord; use frame_benchmarking::{benchmarks_instance, account}; +use sp_runtime::traits::Bounded; use frame_system::Module as System; use crate::Module as Collective; const SEED: u32 = 0; +const MAX_MEMBERS: u32 = 1000; +const MAX_PROPOSALS: u32 = 100; +const MAX_BYTES: u32 = 1_024; + +fn assert_last_event, I: Instance>(generic_event: >::Event) { + let events = System::::events(); + let system_event: ::Event = generic_event.into(); + // compare to the last event record + let EventRecord { event, .. } = &events[events.len() - 1]; + assert_eq!(event, &system_event); +} + benchmarks_instance! { - _{ - // User account seed. - let u in 1 .. 1000 => (); - // Old members. - let n in 1 .. 1000 => (); - // New members. - let m in 1 .. 1000 => (); - // Existing proposals. - let p in 1 .. 100 => (); - } + _{ } set_members { - let m in ...; - let n in ...; - - // Construct `new_members`. - // It should influence timing since it will sort this vector. - let mut new_members = vec![]; - for i in 0 .. m { - let member = account("member", i, SEED); - new_members.push(member); - } + let m in 1 .. MAX_MEMBERS; + let n in 1 .. MAX_MEMBERS; // Set old members. // We compute the difference of old and new members, so it should influence timing. let mut old_members = vec![]; + let mut last_old_member = T::AccountId::default(); for i in 0 .. n { - let old_member = account("old member", i, SEED); - old_members.push(old_member); + last_old_member = account("old member", i, SEED); + old_members.push(last_old_member.clone()); } - let prime = Some(account("prime", 0, SEED)); + Collective::::set_members(SystemOrigin::Root.into(), old_members, Some(last_old_member))?; - Collective::::set_members(SystemOrigin::Root.into(), old_members, prime.clone())?; + // Construct `new_members`. + // It should influence timing since it will sort this vector. + let mut new_members = vec![]; + let mut last_member = T::AccountId::default(); + for i in 0 .. m { + last_member = account("member", i, SEED); + new_members.push(last_member.clone()); + } - }: _(SystemOrigin::Root, new_members.clone(), prime) + }: _(SystemOrigin::Root, new_members.clone(), Some(last_member)) verify { new_members.sort(); assert_eq!(Collective::::members(), new_members); } execute { - let u in ...; + let m in 1 .. MAX_MEMBERS; + let b in 1 .. MAX_BYTES; - let caller: T::AccountId = account("caller", u, SEED); - let proposal: T::Proposal = Call::::close(Default::default(), Default::default()).into(); + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } - Collective::::set_members(SystemOrigin::Root.into(), vec![caller.clone()], None)?; + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); - }: _(SystemOrigin::Signed(caller), Box::new(proposal)) + Collective::::set_members(SystemOrigin::Root.into(), members, None)?; - propose { - let u in ...; + let proposal: T::Proposal = frame_system::Call::::remark(vec![1; b as usize]).into(); - let caller: T::AccountId = account("caller", u, SEED); - let proposal: T::Proposal = Call::::close(Default::default(), Default::default()).into(); + }: _(SystemOrigin::Signed(caller), Box::new(proposal.clone())) + verify { + let proposal_hash = T::Hashing::hash_of(&proposal); + // Note that execution fails due to mis-matched origin + assert_last_event::(RawEvent::MemberExecuted(proposal_hash, false).into()); + } - Collective::::set_members(SystemOrigin::Root.into(), vec![caller.clone()], None)?; + // This tests when execution would happen immediately after proposal + propose_execute { + let m in 1 .. MAX_MEMBERS; + let b in 1 .. MAX_BYTES; - let member_count = 0; + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } - }: _(SystemOrigin::Signed(caller), member_count, Box::new(proposal.into())) + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); - propose_else_branch { - let u in ...; - let p in ...; + Collective::::set_members(SystemOrigin::Root.into(), members, None)?; - let caller: T::AccountId = account("caller", u, SEED); - let proposal: T::Proposal = Call::::close(Default::default(), Default::default()).into(); + let proposal: T::Proposal = frame_system::Call::::remark(vec![1; b as usize]).into(); + let threshold = 1; - Collective::::set_members(SystemOrigin::Root.into(), vec![caller.clone()], None)?; + }: propose(SystemOrigin::Signed(caller), threshold, Box::new(proposal.clone())) + verify { + let proposal_hash = T::Hashing::hash_of(&proposal); + // Note that execution fails due to mis-matched origin + assert_last_event::(RawEvent::Executed(proposal_hash, false).into()); + } + + // This tests when proposal is created and queued as "proposed" + propose_proposed { + let m in 1 .. MAX_MEMBERS; + let p in 0 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; + + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } + + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + Collective::::set_members(SystemOrigin::Root.into(), members, None)?; - let member_count = 3; + let threshold = m.max(2); // Add previous proposals. for i in 0 .. p { - let proposal: T::Proposal = Call::::close(Default::default(), (i + 1).into()).into(); - Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), member_count.clone(), Box::new(proposal.into()))?; + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal))?; } - }: propose(SystemOrigin::Signed(caller), member_count, Box::new(proposal.into())) + assert_eq!(Collective::::proposals().len(), p as usize); - vote { - let u in ...; + let proposal: T::Proposal = frame_system::Call::::remark(vec![p as u8; b as usize]).into(); - let caller1: T::AccountId = account("caller1", u, SEED); - let caller2: T::AccountId = account("caller2", u, SEED); - - let proposal: Box = Box::new(Call::::close(Default::default(), Default::default()).into()); + }: propose(SystemOrigin::Signed(caller.clone()), threshold, Box::new(proposal.clone())) + verify { + // New proposal is recorded + assert_eq!(Collective::::proposals().len(), (p + 1) as usize); let proposal_hash = T::Hashing::hash_of(&proposal); + assert_last_event::(RawEvent::Proposed(caller, p, proposal_hash, threshold).into()); + } + + vote_insert { + let m in 2 .. MAX_MEMBERS; + let p in 1 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; + + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } - Collective::::set_members(SystemOrigin::Root.into(), vec![caller1.clone(), caller2.clone()], None)?; + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + Collective::::set_members(SystemOrigin::Root.into(), members.clone(), None)?; - let member_count = 3; - Collective::::propose(SystemOrigin::Signed(caller1.clone()).into(), member_count, proposal)?; + // Threshold is 1 less than the number of members so that one person can vote nay + let threshold = m; - let index = 0; - let approve = true; + // Add previous proposals + let mut last_hash = T::Hash::default(); + for i in 0 .. p { + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal.clone()))?; + last_hash = T::Hashing::hash_of(&proposal); + } - }: _(SystemOrigin::Signed(caller2), proposal_hash, index, approve) + // Have everyone vote aye on last proposal, while keeping it from passing + for j in 2 .. m { + let voter = &members[j as usize]; + let approve = true; + Collective::::vote(SystemOrigin::Signed(voter.clone()).into(), last_hash.clone(), p - 1, approve)?; + } - vote_not_approve { - let u in ...; + assert_eq!(Collective::::proposals().len(), p as usize); - let caller1: T::AccountId = account("caller1", u, SEED); - let caller2: T::AccountId = account("caller2", u, SEED); + // Caller switches vote to nay, but does not kill the vote, just updates + inserts + let index = p - 1; + let approve = false; - let proposal: Box = Box::new(Call::::close(Default::default(), Default::default()).into()); - let proposal_hash = T::Hashing::hash_of(&proposal); + }: vote(SystemOrigin::Signed(caller), last_hash.clone(), index, approve) + verify { + // All proposals exist and the last proposal has just been updated. + assert_eq!(Collective::::proposals().len(), p as usize); + let voting = Collective::::voting(&last_hash).ok_or(Error::::ProposalMissing)?; + assert_eq!(voting.ayes.len(), (m - 2) as usize); + assert_eq!(voting.nays.len(), 1); + } - Collective::::set_members(SystemOrigin::Root.into(), vec![caller1.clone(), caller2.clone()], None)?; + vote_disapproved { + let m in 2 .. MAX_MEMBERS; + let p in 1 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; - let member_count = 3; - Collective::::propose(SystemOrigin::Signed(caller1.clone()).into(), member_count, proposal)?; + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } - let index = 0; + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + Collective::::set_members(SystemOrigin::Root.into(), members.clone(), None)?; + + // Threshold is total members so that one nay will disapprove the vote + let threshold = m + 1; + + // Add previous proposals + let mut last_hash = T::Hash::default(); + for i in 0 .. p { + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal.clone()))?; + last_hash = T::Hashing::hash_of(&proposal); + } + + // Have everyone vote aye on last proposal, while keeping it from passing + for j in 1 .. m { + let voter = &members[j as usize]; + let approve = true; + Collective::::vote(SystemOrigin::Signed(voter.clone()).into(), last_hash.clone(), p - 1, approve)?; + } + + assert_eq!(Collective::::proposals().len(), p as usize); + + // Caller switches vote to nay, which kills the vote + let index = p - 1; let approve = false; - }: vote(SystemOrigin::Signed(caller2), proposal_hash, index, approve) + }: vote(SystemOrigin::Signed(caller), last_hash.clone(), index, approve) + verify { + // The last proposal is removed. + assert_eq!(Collective::::proposals().len(), (p - 1) as usize); + assert_last_event::(RawEvent::Disapproved(last_hash).into()); + } vote_approved { - let u in ...; + let m in 2 .. MAX_MEMBERS; + let p in 1 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; + + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } - let caller1: T::AccountId = account("caller1", u, SEED); - let caller2: T::AccountId = account("caller2", u, SEED); + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + Collective::::set_members(SystemOrigin::Root.into(), members.clone(), None)?; - let proposal: Box = Box::new(Call::::close(Default::default(), Default::default()).into()); - let proposal_hash = T::Hashing::hash_of(&proposal); + // Threshold is 2 so any two ayes will approve the vote + let threshold = 2; - Collective::::set_members(SystemOrigin::Root.into(), vec![caller1.clone(), caller2.clone()], None)?; + // Add previous proposals + let mut last_hash = T::Hash::default(); + for i in 0 .. p { + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal.clone()))?; + last_hash = T::Hashing::hash_of(&proposal); + } + + // Caller switches vote to nay on their own proposal, allowing them to be the deciding approval vote + Collective::::vote(SystemOrigin::Signed(caller.clone()).into(), last_hash.clone(), p - 1, false)?; + + // Have everyone vote nay on last proposal, while keeping it from failing + for j in 2 .. m { + let voter = &members[j as usize]; + let approve = false; + Collective::::vote(SystemOrigin::Signed(voter.clone()).into(), last_hash.clone(), p - 1, approve)?; + } - let member_count = 2; - Collective::::propose(SystemOrigin::Signed(caller1.clone()).into(), member_count, proposal)?; + // Member zero is the first aye + Collective::::vote(SystemOrigin::Signed(members[0].clone()).into(), last_hash.clone(), p - 1, true)?; - let index = 0; + assert_eq!(Collective::::proposals().len(), p as usize); + + // Caller switches vote to aye, which passes the vote + let index = p - 1; let approve = true; - }: vote(SystemOrigin::Signed(caller2), proposal_hash, index, approve) + }: vote(SystemOrigin::Signed(caller), last_hash.clone(), index, approve) + verify { + // The last proposal is removed. + assert_eq!(Collective::::proposals().len(), (p - 1) as usize); + assert_last_event::(RawEvent::Executed(last_hash, false).into()); + } + + close_disapproved { + let m in 2 .. MAX_MEMBERS; + let p in 1 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; + + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + + Collective::::set_members(SystemOrigin::Root.into(), members.clone(), Some(caller.clone()))?; - close { - let u in ...; + // Threshold is one less than total members so that two nays will disapprove the vote + let threshold = m; - let caller1: T::AccountId = account("caller1", u, SEED); - let caller2: T::AccountId = account("caller2", u, SEED); + // Add proposals + let mut last_hash = T::Hash::default(); + for i in 0 .. p { + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal.clone()))?; + last_hash = T::Hashing::hash_of(&proposal); + } - let proposal: Box = Box::new(Call::::close(Default::default(), Default::default()).into()); - let proposal_hash = T::Hashing::hash_of(&proposal); + // Have everyone vote aye on last proposal, while keeping it from passing + // A few abstainers will be the nay votes needed to fail the vote + for j in 2 .. m { + let voter = &members[j as usize]; + let approve = true; + Collective::::vote(SystemOrigin::Signed(voter.clone()).into(), last_hash.clone(), p - 1, approve)?; + } - Collective::::set_members(SystemOrigin::Root.into(), vec![caller1.clone(), caller2.clone()], None)?; - let member_count = 2; - Collective::::propose(SystemOrigin::Signed(caller1.clone()).into(), member_count, proposal)?; + // caller is prime, prime votes nay + Collective::::vote(SystemOrigin::Signed(caller.clone()).into(), last_hash.clone(), p - 1, false)?; - let index = 0; - let approve = true; + System::::set_block_number(T::BlockNumber::max_value()); + assert_eq!(Collective::::proposals().len(), p as usize); + + // Prime nay will close it as disapproved + }: close(SystemOrigin::Signed(caller), last_hash, p - 1) + verify { + assert_eq!(Collective::::proposals().len(), (p - 1) as usize); + assert_last_event::(RawEvent::Disapproved(last_hash).into()); + } + + + close_approved { + let m in 2 .. MAX_MEMBERS; + let p in 1 .. MAX_PROPOSALS; + let b in 1 .. MAX_BYTES; - let vote_end = T::MotionDuration::get() + 1u32.into(); - System::::set_block_number(vote_end); + // Construct `members`. + let mut members = vec![]; + for i in 0 .. m { + let member = account("member", i, SEED); + members.push(member); + } + let caller: T::AccountId = account("caller", 0, SEED); + members.push(caller.clone()); + + Collective::::set_members(SystemOrigin::Root.into(), members.clone(), Some(caller.clone()))?; - }: _(SystemOrigin::Signed(caller2), proposal_hash, index) + // Threshold is two, so any two ayes will pass the vote + let threshold = 2; + + // Add proposals + let mut last_hash = T::Hash::default(); + for i in 0 .. p { + // Proposals should be different so that different proposal hashes are generated + let proposal: T::Proposal = frame_system::Call::::remark(vec![i as u8; b as usize]).into(); + Collective::::propose(SystemOrigin::Signed(caller.clone()).into(), threshold, Box::new(proposal.clone()))?; + last_hash = T::Hashing::hash_of(&proposal); + } + + // Have everyone vote nay on last proposal, while keeping it from failing + // A few abstainers will be the aye votes needed to pass the vote + for j in 2 .. m { + let voter = &members[j as usize]; + let approve = false; + Collective::::vote(SystemOrigin::Signed(voter.clone()).into(), last_hash.clone(), p - 1, approve)?; + } + + // caller is prime, prime already votes aye by creating the proposal + System::::set_block_number(T::BlockNumber::max_value()); + assert_eq!(Collective::::proposals().len(), p as usize); + + // Prime aye will close it as approved + }: close(SystemOrigin::Signed(caller), last_hash, p - 1) + verify { + assert_eq!(Collective::::proposals().len(), (p - 1) as usize); + assert_last_event::(RawEvent::Executed(last_hash, false).into()); + } } #[cfg(test)] @@ -199,12 +424,13 @@ mod tests { new_test_ext().execute_with(|| { assert_ok!(test_benchmark_set_members::()); assert_ok!(test_benchmark_execute::()); - assert_ok!(test_benchmark_propose::()); - assert_ok!(test_benchmark_propose_else_branch::()); - assert_ok!(test_benchmark_vote::()); - assert_ok!(test_benchmark_vote_not_approve::()); + assert_ok!(test_benchmark_propose_execute::()); + assert_ok!(test_benchmark_propose_proposed::()); + assert_ok!(test_benchmark_vote_insert::()); + assert_ok!(test_benchmark_vote_disapproved::()); assert_ok!(test_benchmark_vote_approved::()); - assert_ok!(test_benchmark_close::()); + assert_ok!(test_benchmark_close_disapproved::()); + assert_ok!(test_benchmark_close_approved::()); }); } } diff --git a/frame/collective/src/lib.rs b/frame/collective/src/lib.rs index 19a9a12b34b..cf6247cf003 100644 --- a/frame/collective/src/lib.rs +++ b/frame/collective/src/lib.rs @@ -65,7 +65,7 @@ pub trait Trait: frame_system::Trait { type Origin: From>; /// The outer call dispatch type. - type Proposal: Parameter + Dispatchable>::Origin> + From>; + type Proposal: Parameter + Dispatchable>::Origin> + From>; /// The outer event type. type Event: From> + Into<::Event>; diff --git a/frame/democracy/src/benchmarking.rs b/frame/democracy/src/benchmarking.rs index 6165a4f8977..4459a1aaa54 100644 --- a/frame/democracy/src/benchmarking.rs +++ b/frame/democracy/src/benchmarking.rs @@ -19,8 +19,8 @@ use super::*; use frame_benchmarking::{benchmarks, account}; -use frame_support::traits::{Currency, Get, EnsureOrigin}; -use frame_system::{RawOrigin, Module as System, self}; +use frame_support::traits::{Currency, Get, EnsureOrigin, OnInitialize}; +use frame_system::{RawOrigin, Module as System, self, EventRecord}; use sp_runtime::traits::{Bounded, One}; use crate::Module as Democracy; @@ -33,6 +33,14 @@ const MAX_SECONDERS: u32 = 100; const MAX_VETOERS: u32 = 100; const MAX_BYTES: u32 = 16_384; +fn assert_last_event(generic_event: ::Event) { + let events = System::::events(); + let system_event: ::Event = generic_event.into(); + // compare to the last event record + let EventRecord { event, .. } = &events[events.len() - 1]; + assert_eq!(event, &system_event); +} + fn funded_account(name: &'static str, index: u32) -> T::AccountId { let caller: T::AccountId = account(name, index, SEED); T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); @@ -54,7 +62,7 @@ fn add_referendum(n: u32) -> Result { let vote_threshold = VoteThreshold::SimpleMajority; Democracy::::inject_referendum( - 0.into(), + T::LaunchPeriod::get(), proposal_hash, vote_threshold, 0.into(), @@ -70,7 +78,7 @@ fn add_referendum(n: u32) -> Result { Ok(referendum_index) } -fn account_vote() -> AccountVote> { +fn account_vote(b: BalanceOf) -> AccountVote> { let v = Vote { aye: true, conviction: Conviction::Locked1x, @@ -78,18 +86,18 @@ fn account_vote() -> AccountVote> { AccountVote::Standard { vote: v, - balance: BalanceOf::::one(), + balance: b, } } -fn open_activate_proxy(u: u32) -> Result { +fn open_activate_proxy(u: u32) -> Result<(T::AccountId, T::AccountId), &'static str> { let caller = funded_account::("caller", u); - let proxy = funded_account::("proxy", u); + let voter = funded_account::("voter", u); - Democracy::::open_proxy(RawOrigin::Signed(proxy.clone()).into(), caller.clone())?; - Democracy::::activate_proxy(RawOrigin::Signed(caller).into(), proxy.clone())?; + Democracy::::open_proxy(RawOrigin::Signed(caller.clone()).into(), voter.clone())?; + Democracy::::activate_proxy(RawOrigin::Signed(voter.clone()).into(), caller.clone())?; - Ok(proxy) + Ok((caller, voter)) } benchmarks! { @@ -103,10 +111,15 @@ benchmarks! { add_proposal::(i)?; } + assert_eq!(Democracy::::public_props().len(), p as usize, "Proposals not created."); + let caller = funded_account::("caller", 0); let proposal_hash: T::Hash = T::Hashing::hash_of(&p); let value = T::MinimumDeposit::get(); }: _(RawOrigin::Signed(caller), proposal_hash, value.into()) + verify { + assert_eq!(Democracy::::public_props().len(), (p + 1) as usize, "Proposals not created."); + } second { let s in 0 .. MAX_SECONDERS; @@ -120,95 +133,225 @@ benchmarks! { Democracy::::second(RawOrigin::Signed(seconder).into(), 0)?; } + let deposits = Democracy::::deposit_of(0).ok_or("Proposal not created")?; + assert_eq!(deposits.1.len(), (s + 1) as usize, "Seconds not recorded"); }: _(RawOrigin::Signed(caller), 0) + verify { + let deposits = Democracy::::deposit_of(0).ok_or("Proposal not created")?; + assert_eq!(deposits.1.len(), (s + 2) as usize, "`second` benchmark did not work"); + } - vote { + vote_new { let r in 1 .. MAX_REFERENDUMS; let caller = funded_account::("caller", 0); - let account_vote = account_vote::(); + let account_vote = account_vote::(100.into()); + // We need to create existing direct votes for i in 0 .. r { let ref_idx = add_referendum::(i)?; Democracy::::vote(RawOrigin::Signed(caller.clone()).into(), ref_idx, account_vote.clone())?; } + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes were not recorded."); + + let referendum_index = add_referendum::(r)?; + + }: vote(RawOrigin::Signed(caller.clone()), referendum_index, account_vote) + verify { + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Vote was not recorded."); + } - let referendum_index = r - 1; + vote_existing { + let r in 1 .. MAX_REFERENDUMS; - }: _(RawOrigin::Signed(caller), referendum_index, account_vote) + let caller = funded_account::("caller", 0); + let account_vote = account_vote::(100.into()); + + // We need to create existing direct votes + for i in 0 ..=r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(caller.clone()).into(), ref_idx, account_vote.clone())?; + } + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Votes were not recorded."); + + // Change vote from aye to nay + let nay = Vote { aye: false, conviction: Conviction::Locked1x }; + let new_vote = AccountVote::Standard { vote: nay, balance: 1000.into() }; + let referendum_index = Democracy::::referendum_count() - 1; + + // This tests when a user changes a vote + }: vote(RawOrigin::Signed(caller.clone()), referendum_index, new_vote) + verify { + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Vote was incorrectly added"); + let referendum_info = Democracy::::referendum_info(referendum_index) + .ok_or("referendum doesn't exist")?; + let tally = match referendum_info { + ReferendumInfo::Ongoing(r) => r.tally, + _ => return Err("referendum not ongoing"), + }; + assert_eq!(tally.nays, 1000.into(), "changed vote was not recorded"); + } - proxy_vote { + // Basically copy paste of `vote_new` + proxy_vote_new { let r in 1 .. MAX_REFERENDUMS; - let caller = funded_account::("caller", r); - let proxy = open_activate_proxy::(r)?; - let account_vote = account_vote::(); + let (caller, voter) = open_activate_proxy::(0)?; + let account_vote = account_vote::(100.into()); + // Populate existing direct votes for the voter, they can vote on their own behalf for i in 0 .. r { let ref_idx = add_referendum::(i)?; - Democracy::::vote(RawOrigin::Signed(caller.clone()).into(), ref_idx, account_vote.clone())?; + Democracy::::vote(RawOrigin::Signed(voter.clone()).into(), ref_idx, account_vote.clone())?; } - let referendum_index = r - 1; + let referendum_index = add_referendum::(r)?; + + }: proxy_vote(RawOrigin::Signed(caller), referendum_index, account_vote) + verify { + let votes = match VotingOf::::get(&voter) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Vote was not recorded."); + } - }: _(RawOrigin::Signed(proxy), referendum_index, account_vote) + // Basically copy paste of `vote_existing` + proxy_vote_existing { + let r in 1 .. MAX_REFERENDUMS; - emergency_cancel { - let u in 1 .. MAX_USERS; + let (caller, voter) = open_activate_proxy::(0)?; + let account_vote = account_vote::(100.into()); - let referendum_index = add_referendum::(u)?; + // We need to create existing direct votes + for i in 0 ..=r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(voter.clone()).into(), ref_idx, account_vote.clone())?; + } + let votes = match VotingOf::::get(&voter) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Votes were not recorded."); + + // Change vote from aye to nay + let nay = Vote { aye: false, conviction: Conviction::Locked1x }; + let new_vote = AccountVote::Standard { vote: nay, balance: 1000.into() }; + let referendum_index = Democracy::::referendum_count() - 1; + + // This tests when a user changes a vote + }: proxy_vote(RawOrigin::Signed(caller.clone()), referendum_index, new_vote) + verify { + let votes = match VotingOf::::get(&voter) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Vote was incorrectly added"); + let referendum_info = Democracy::::referendum_info(referendum_index) + .ok_or("referendum doesn't exist")?; + let tally = match referendum_info { + ReferendumInfo::Ongoing(r) => r.tally, + _ => return Err("referendum not ongoing"), + }; + assert_eq!(tally.nays, 1000.into(), "changed vote was not recorded"); + } + + emergency_cancel { + let r in 1 .. MAX_REFERENDUMS; let origin = T::CancellationOrigin::successful_origin(); + + // Create and cancel a bunch of referendums + for i in 0 .. r { + let ref_idx = add_referendum::(i)?; + let call = Call::::emergency_cancel(ref_idx); + call.dispatch(origin.clone())?; + } + + // Lets now measure one more + let referendum_index = add_referendum::(r)?; let call = Call::::emergency_cancel(referendum_index); - }: { - let _ = call.dispatch(origin)?; + assert!(Democracy::::referendum_status(referendum_index).is_ok()); + }: { call.dispatch(origin)? } + verify { + // Referendum has been canceled + assert!(Democracy::::referendum_status(referendum_index).is_err()); } + // Worst case scenario, we external propose a previously blacklisted proposal external_propose { - let u in 1 .. MAX_USERS; + let p in 1 .. MAX_PROPOSALS; let origin = T::ExternalOrigin::successful_origin(); - let proposal_hash = T::Hashing::hash_of(&u); + let proposal_hash = T::Hashing::hash_of(&p); + // Add proposal to blacklist with block number 0 + Blacklist::::insert( + proposal_hash, + (T::BlockNumber::zero(), vec![T::AccountId::default()]) + ); + let call = Call::::external_propose(proposal_hash); - }: { - let _ = call.dispatch(origin)?; + }: { call.dispatch(origin)? } + verify { + // External proposal created + ensure!(>::exists(), "External proposal didn't work"); } external_propose_majority { - let u in 1 .. MAX_USERS; + let p in 1 .. MAX_PROPOSALS; let origin = T::ExternalMajorityOrigin::successful_origin(); - let proposal_hash = T::Hashing::hash_of(&u); + let proposal_hash = T::Hashing::hash_of(&p); let call = Call::::external_propose_majority(proposal_hash); - - }: { - let _ = call.dispatch(origin)?; + }: { call.dispatch(origin)? } + verify { + // External proposal created + ensure!(>::exists(), "External proposal didn't work"); } external_propose_default { - let u in 1 .. MAX_USERS; + let p in 1 .. MAX_PROPOSALS; let origin = T::ExternalDefaultOrigin::successful_origin(); - let proposal_hash = T::Hashing::hash_of(&u); + let proposal_hash = T::Hashing::hash_of(&p); let call = Call::::external_propose_default(proposal_hash); - - }: { - let _ = call.dispatch(origin)?; + }: { call.dispatch(origin)? } + verify { + // External proposal created + ensure!(>::exists(), "External proposal didn't work"); } fast_track { - let u in 1 .. MAX_USERS; + let p in 1 .. MAX_PROPOSALS; let origin_propose = T::ExternalDefaultOrigin::successful_origin(); - let proposal_hash: T::Hash = T::Hashing::hash_of(&u); + let proposal_hash: T::Hash = T::Hashing::hash_of(&p); Democracy::::external_propose_default(origin_propose, proposal_hash.clone())?; + // NOTE: Instant origin may invoke a little bit more logic, but may not always succeed. let origin_fast_track = T::FastTrackOrigin::successful_origin(); let voting_period = T::FastTrackVotingPeriod::get(); let delay = 0; let call = Call::::fast_track(proposal_hash, voting_period.into(), delay.into()); - }: { - let _ = call.dispatch(origin_fast_track)?; + }: { call.dispatch(origin_fast_track)? } + verify { + assert_eq!(Democracy::::referendum_count(), 1, "referendum not created") } veto_external { @@ -224,33 +367,105 @@ benchmarks! { for i in 0 .. v { vetoers.push(account("vetoer", i, SEED)); } + vetoers.sort(); Blacklist::::insert(proposal_hash, (T::BlockNumber::zero(), vetoers)); let call = Call::::veto_external(proposal_hash); let origin = T::VetoOrigin::successful_origin(); - }: { - let _ = call.dispatch(origin)?; + ensure!(NextExternal::::get().is_some(), "no external proposal"); + }: { call.dispatch(origin)? } + verify { + assert!(NextExternal::::get().is_none()); + let (_, new_vetoers) = >::get(&proposal_hash).ok_or("no blacklist")?; + assert_eq!(new_vetoers.len(), (v + 1) as usize, "vetoers not added"); } cancel_referendum { - let u in 1 .. MAX_USERS; - - let referendum_index = add_referendum::(u)?; + let r in 0 .. MAX_REFERENDUMS; + // Should have no effect on the execution time. + for i in 0..r { + add_referendum::(i)?; + } + let referendum_index = add_referendum::(r)?; }: _(RawOrigin::Root, referendum_index) cancel_queued { - let u in 1 .. MAX_USERS; - - let referendum_index = add_referendum::(u)?; + let r in 1 .. MAX_REFERENDUMS; + // Should have no effect on the execution time. + for i in 0..r { + add_referendum::(i)?; + } + let referendum_index = add_referendum::(r)?; }: _(RawOrigin::Root, referendum_index) - open_proxy { - let u in 1 .. MAX_USERS; + // Note that we have a separate benchmark for `launch_next` + on_initialize_external { + let r in 0 .. MAX_REFERENDUMS; - let caller: T::AccountId = funded_account::("caller", u); - let proxy: T::AccountId = funded_account::("proxy", u); + for i in 0..r { + add_referendum::(i)?; + } - }: _(RawOrigin::Signed(proxy), caller) + assert_eq!(Democracy::::referendum_count(), r, "referenda not created"); + + // Launch external + LastTabledWasExternal::put(false); + + let origin = T::ExternalMajorityOrigin::successful_origin(); + let proposal_hash = T::Hashing::hash_of(&r); + let call = Call::::external_propose_majority(proposal_hash); + call.dispatch(origin)?; + // External proposal created + ensure!(>::exists(), "External proposal didn't work"); + + let block_number = T::LaunchPeriod::get(); + + }: { Democracy::::on_initialize(block_number) } + verify { + // One extra because of next external + assert_eq!(Democracy::::referendum_count(), r + 1, "referenda not created"); + ensure!(!>::exists(), "External wasn't taken"); + + // All but the new next external should be finished + for i in 0 .. r { + if let Some(value) = ReferendumInfoOf::::get(i) { + match value { + ReferendumInfo::Finished { .. } => (), + ReferendumInfo::Ongoing(_) => return Err("Referendum was not finished"), + } + } + } + } + + on_initialize_public { + let r in 1 .. MAX_REFERENDUMS; + + for i in 0..r { + add_referendum::(i)?; + } + + assert_eq!(Democracy::::referendum_count(), r, "referenda not created"); + + // Launch public + LastTabledWasExternal::put(true); + + let block_number = T::LaunchPeriod::get(); + + }: { Democracy::::on_initialize(block_number) } + verify { + // One extra because of next public + assert_eq!(Democracy::::referendum_count(), r + 1, "referenda not created"); + + // All should be finished + for i in 0 .. r { + if let Some(value) = ReferendumInfoOf::::get(i) { + match value { + ReferendumInfo::Finished { .. } => (), + ReferendumInfo::Ongoing(_) => return Err("Referendum was not finished"), + } + } + } + } activate_proxy { let u in 1 .. MAX_USERS; @@ -258,51 +473,120 @@ benchmarks! { let caller: T::AccountId = funded_account::("caller", u); let proxy: T::AccountId = funded_account::("proxy", u); Democracy::::open_proxy(RawOrigin::Signed(proxy.clone()).into(), caller.clone())?; - - }: _(RawOrigin::Signed(caller), proxy) + }: _(RawOrigin::Signed(caller.clone()), proxy.clone()) + verify { + assert_eq!(Democracy::::proxy(proxy), Some(ProxyState::Active(caller))); + } close_proxy { let u in 1 .. MAX_USERS; - - let proxy = open_activate_proxy::(u)?; - - }: _(RawOrigin::Signed(proxy)) + let (caller, _) = open_activate_proxy::(u)?; + }: _(RawOrigin::Signed(caller.clone())) + verify { + assert_eq!(Democracy::::proxy(caller), None); + } deactivate_proxy { let u in 1 .. MAX_USERS; - - let caller = funded_account::("caller", u); - let proxy = open_activate_proxy::(u)?; - - }: _(RawOrigin::Signed(caller), proxy) + let (caller, voter) = open_activate_proxy::(u)?; + }: _(RawOrigin::Signed(voter.clone()), caller.clone()) + verify { + assert_eq!(Democracy::::proxy(caller), Some(ProxyState::Open(voter))); + } delegate { - let u in 1 .. MAX_USERS; + let r in 1 .. MAX_REFERENDUMS; - let caller = funded_account::("caller", u); - let d: T::AccountId = funded_account::("delegate", u); - let balance = 1u32; + let initial_balance: BalanceOf = 100.into(); + let delegated_balance: BalanceOf = 1000.into(); - }: _(RawOrigin::Signed(caller), d.into(), Conviction::Locked1x, balance.into()) + let caller = funded_account::("caller", 0); + // Caller will initially delegate to `old_delegate` + let old_delegate: T::AccountId = funded_account::("old_delegate", r); + Democracy::::delegate( + RawOrigin::Signed(caller.clone()).into(), + old_delegate.clone(), + Conviction::Locked1x, + delegated_balance, + )?; + let (target, balance) = match VotingOf::::get(&caller) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, old_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + // Caller will now switch to `new_delegate` + let new_delegate: T::AccountId = funded_account::("new_delegate", r); + let account_vote = account_vote::(initial_balance); + // We need to create existing direct votes for the `new_delegate` + for i in 0..r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(new_delegate.clone()).into(), ref_idx, account_vote.clone())?; + } + let votes = match VotingOf::::get(&new_delegate) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes were not recorded."); + }: _(RawOrigin::Signed(caller.clone()), new_delegate.clone(), Conviction::Locked1x, delegated_balance) + verify { + let (target, balance) = match VotingOf::::get(&caller) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, new_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + let delegations = match VotingOf::::get(&new_delegate) { + Voting::Direct { delegations, .. } => delegations, + _ => return Err("Votes are not direct"), + }; + assert_eq!(delegations.capital, delegated_balance, "delegation was not recorded."); + } undelegate { let r in 1 .. MAX_REFERENDUMS; - let other = funded_account::("other", 0); - let account_vote = account_vote::(); + let initial_balance: BalanceOf = 100.into(); + let delegated_balance: BalanceOf = 1000.into(); - for i in 0 .. r { + let caller = funded_account::("caller", 0); + // Caller will delegate + let the_delegate: T::AccountId = funded_account::("delegate", r); + Democracy::::delegate( + RawOrigin::Signed(caller.clone()).into(), + the_delegate.clone(), + Conviction::Locked1x, + delegated_balance, + )?; + let (target, balance) = match VotingOf::::get(&caller) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, the_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + // We need to create votes direct votes for the `delegate` + let account_vote = account_vote::(initial_balance); + for i in 0..r { let ref_idx = add_referendum::(i)?; - Democracy::::vote(RawOrigin::Signed(other.clone()).into(), ref_idx, account_vote.clone())?; + Democracy::::vote( + RawOrigin::Signed(the_delegate.clone()).into(), + ref_idx, + account_vote.clone() + )?; } - - let delegator = funded_account::("delegator", r); - let conviction = Conviction::Locked1x; - let balance = 1u32; - - Democracy::::delegate(RawOrigin::Signed(delegator.clone()).into(), other.clone().into(), conviction, balance.into())?; - - }: _(RawOrigin::Signed(delegator)) + let votes = match VotingOf::::get(&the_delegate) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes were not recorded."); + }: _(RawOrigin::Signed(caller.clone())) + verify { + // Voting should now be direct + match VotingOf::::get(&caller) { + Voting::Direct { .. } => (), + _ => return Err("undelegation failed"), + } + } clear_public_proposals { let p in 0 .. MAX_PROPOSALS; @@ -317,133 +601,364 @@ benchmarks! { // Num of bytes in encoded proposal let b in 0 .. MAX_BYTES; - let caller = funded_account::("caller", b); - let encoded_proposal = vec![0; b as usize]; - }: _(RawOrigin::Signed(caller), encoded_proposal) + let caller = funded_account::("caller", 0); + let encoded_proposal = vec![1; b as usize]; + }: _(RawOrigin::Signed(caller), encoded_proposal.clone()) + verify { + let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); + match Preimages::::get(proposal_hash) { + Some(PreimageStatus::Available { .. }) => (), + _ => return Err("preimage not available") + } + } note_imminent_preimage { // Num of bytes in encoded proposal let b in 0 .. MAX_BYTES; // d + 1 to include the one we are testing - let encoded_proposal = vec![0; b as usize]; + let encoded_proposal = vec![1; b as usize]; let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); let block_number = T::BlockNumber::one(); Preimages::::insert(&proposal_hash, PreimageStatus::Missing(block_number)); - let caller = funded_account::("caller", b); - let encoded_proposal = vec![0; b as usize]; - }: _(RawOrigin::Signed(caller), encoded_proposal) + let caller = funded_account::("caller", 0); + let encoded_proposal = vec![1; b as usize]; + }: _(RawOrigin::Signed(caller), encoded_proposal.clone()) + verify { + let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); + match Preimages::::get(proposal_hash) { + Some(PreimageStatus::Available { .. }) => (), + _ => return Err("preimage not available") + } + } reap_preimage { // Num of bytes in encoded proposal let b in 0 .. MAX_BYTES; - let encoded_proposal = vec![0; b as usize]; + let encoded_proposal = vec![1; b as usize]; let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); - let caller = funded_account::("caller", b); - Democracy::::note_preimage(RawOrigin::Signed(caller.clone()).into(), encoded_proposal.clone())?; + let submitter = funded_account::("submitter", b); + Democracy::::note_preimage(RawOrigin::Signed(submitter.clone()).into(), encoded_proposal.clone())?; // We need to set this otherwise we get `Early` error. let block_number = T::VotingPeriod::get() + T::EnactmentPeriod::get() + T::BlockNumber::one(); System::::set_block_number(block_number.into()); - }: _(RawOrigin::Signed(caller), proposal_hash) + assert!(Preimages::::contains_key(proposal_hash)); - unlock { - let u in 1 .. MAX_USERS; + let caller = funded_account::("caller", 0); + }: _(RawOrigin::Signed(caller), proposal_hash.clone()) + verify { + let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); + assert!(!Preimages::::contains_key(proposal_hash)); + } - let caller = funded_account::("caller", u); - let locked_until = T::BlockNumber::zero(); - Locks::::insert(&caller, locked_until); + // Test when unlock will remove locks + unlock_remove { + let r in 1 .. MAX_REFERENDUMS; - T::Currency::extend_lock( - DEMOCRACY_ID, - &caller, - Bounded::max_value(), - WithdrawReason::Transfer.into() - ); + let locker = funded_account::("locker", 0); + // Populate votes so things are locked + let base_balance: BalanceOf = 100.into(); + let small_vote = account_vote::(base_balance); + // Vote and immediately unvote + for i in 0 .. r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(locker.clone()).into(), ref_idx, small_vote.clone())?; + Democracy::::remove_vote(RawOrigin::Signed(locker.clone()).into(), ref_idx)?; + } - let other = caller.clone(); + let caller = funded_account::("caller", 0); + }: unlock(RawOrigin::Signed(caller), locker.clone()) + verify { + // Note that we may want to add a `get_lock` api to actually verify + let voting = VotingOf::::get(&locker); + assert_eq!(voting.locked_balance(), BalanceOf::::zero()); + } - }: _(RawOrigin::Signed(caller), other) + // Test when unlock will set a new value + unlock_set { + let r in 1 .. MAX_REFERENDUMS; + + let locker = funded_account::("locker", 0); + // Populate votes so things are locked + let base_balance: BalanceOf = 100.into(); + let small_vote = account_vote::(base_balance); + for i in 0 .. r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(locker.clone()).into(), ref_idx, small_vote.clone())?; + } + + // Create a big vote so lock increases + let big_vote = account_vote::(base_balance * 10.into()); + let referendum_index = add_referendum::(r)?; + Democracy::::vote(RawOrigin::Signed(locker.clone()).into(), referendum_index, big_vote)?; + + let votes = match VotingOf::::get(&locker) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r + 1) as usize, "Votes were not recorded."); + + let voting = VotingOf::::get(&locker); + assert_eq!(voting.locked_balance(), base_balance * 10.into()); + + Democracy::::remove_vote(RawOrigin::Signed(locker.clone()).into(), referendum_index)?; + + let caller = funded_account::("caller", 0); + }: unlock(RawOrigin::Signed(caller), locker.clone()) + verify { + let votes = match VotingOf::::get(&locker) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Vote was not removed"); + + let voting = VotingOf::::get(&locker); + // Note that we may want to add a `get_lock` api to actually verify + assert_eq!(voting.locked_balance(), base_balance); + } + + open_proxy { + let u in 1 .. MAX_USERS; + + let caller: T::AccountId = funded_account::("caller", u); + let proxy: T::AccountId = funded_account::("proxy", u); + + }: _(RawOrigin::Signed(proxy), caller) remove_vote { let r in 1 .. MAX_REFERENDUMS; let caller = funded_account::("caller", 0); - let account_vote = account_vote::(); + let account_vote = account_vote::(100.into()); for i in 0 .. r { let ref_idx = add_referendum::(i)?; Democracy::::vote(RawOrigin::Signed(caller.clone()).into(), ref_idx, account_vote.clone())?; } + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes not created"); + let referendum_index = r - 1; - }: _(RawOrigin::Signed(caller), referendum_index) + }: _(RawOrigin::Signed(caller.clone()), referendum_index) + verify { + let votes = match VotingOf::::get(&caller) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r - 1) as usize, "Vote was not removed"); + } remove_other_vote { let r in 1 .. MAX_REFERENDUMS; let other = funded_account::("other", r); - let account_vote = account_vote::(); + let account_vote = account_vote::(100.into()); for i in 0 .. r { let ref_idx = add_referendum::(i)?; Democracy::::vote(RawOrigin::Signed(other.clone()).into(), ref_idx, account_vote.clone())?; } + let votes = match VotingOf::::get(&other) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes not created"); + let referendum_index = r - 1; ReferendumInfoOf::::insert( referendum_index, ReferendumInfo::Finished { end: T::BlockNumber::zero(), approved: true } ); - let caller = funded_account::("caller", r); + let caller = funded_account::("caller", 0); System::::set_block_number(T::EnactmentPeriod::get() * 10u32.into()); - }: _(RawOrigin::Signed(caller), other, referendum_index) + }: _(RawOrigin::Signed(caller), other.clone(), referendum_index) + verify { + let votes = match VotingOf::::get(&other) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r - 1) as usize, "Vote was not removed"); + } + // This is a copy of delegate benchmark, but with `open_activate_proxy` proxy_delegate { - let u in 1 .. MAX_USERS; - - let other: T::AccountId = account("other", u, SEED); - let proxy = open_activate_proxy::(u)?; - let conviction = Conviction::Locked1x; - let balance = 1u32; + let r in 1 .. MAX_REFERENDUMS; - }: _(RawOrigin::Signed(proxy), other, conviction, balance.into()) + let initial_balance: BalanceOf = 100.into(); + let delegated_balance: BalanceOf = 1000.into(); + + let (caller, voter) = open_activate_proxy::(0)?; + + // Voter will initially delegate to `old_delegate` + let old_delegate: T::AccountId = funded_account::("old_delegate", r); + Democracy::::delegate( + RawOrigin::Signed(voter.clone()).into(), + old_delegate.clone(), + Conviction::Locked1x, + delegated_balance, + )?; + let (target, balance) = match VotingOf::::get(&voter) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, old_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + // Voter will now switch to `new_delegate` + let new_delegate: T::AccountId = funded_account::("new_delegate", r); + let account_vote = account_vote::(initial_balance); + // We need to create existing direct votes for the `new_delegate` + for i in 0..r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote(RawOrigin::Signed(new_delegate.clone()).into(), ref_idx, account_vote.clone())?; + } + let votes = match VotingOf::::get(&new_delegate) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes were not recorded."); + }: _(RawOrigin::Signed(caller.clone()), new_delegate.clone(), Conviction::Locked1x, delegated_balance) + verify { + let (target, balance) = match VotingOf::::get(&voter) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, new_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + let delegations = match VotingOf::::get(&new_delegate) { + Voting::Direct { delegations, .. } => delegations, + _ => return Err("Votes are not direct"), + }; + assert_eq!(delegations.capital, delegated_balance, "delegation was not recorded."); + } + // This is a copy of undelegate benchmark, but with `open_activate_proxy` proxy_undelegate { let r in 1 .. MAX_REFERENDUMS; - let other = funded_account::("other", 0); - let account_vote = account_vote::(); + let initial_balance: BalanceOf = 100.into(); + let delegated_balance: BalanceOf = 1000.into(); + + let (caller, voter) = open_activate_proxy::(0)?; + // Caller will delegate + let the_delegate: T::AccountId = funded_account::("delegate", r); + Democracy::::delegate( + RawOrigin::Signed(voter.clone()).into(), + the_delegate.clone(), + Conviction::Locked1x, + delegated_balance, + )?; + let (target, balance) = match VotingOf::::get(&voter) { + Voting::Delegating { target, balance, .. } => (target, balance), + _ => return Err("Votes are not direct"), + }; + assert_eq!(target, the_delegate, "delegation target didn't work"); + assert_eq!(balance, delegated_balance, "delegation balance didn't work"); + // We need to create votes direct votes for the `delegate` + let account_vote = account_vote::(initial_balance); + for i in 0..r { + let ref_idx = add_referendum::(i)?; + Democracy::::vote( + RawOrigin::Signed(the_delegate.clone()).into(), + ref_idx, + account_vote.clone() + )?; + } + let votes = match VotingOf::::get(&the_delegate) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes were not recorded."); + }: _(RawOrigin::Signed(caller.clone())) + verify { + // Voting should now be direct + match VotingOf::::get(&voter) { + Voting::Direct { .. } => (), + _ => return Err("undelegation failed"), + } + } + + proxy_remove_vote { + let r in 1 .. MAX_REFERENDUMS; + + let (caller, voter) = open_activate_proxy::(0)?; + let account_vote = account_vote::(100.into()); for i in 0 .. r { let ref_idx = add_referendum::(i)?; - Democracy::::vote(RawOrigin::Signed(other.clone()).into(), ref_idx, account_vote.clone())?; + Democracy::::vote(RawOrigin::Signed(voter.clone()).into(), ref_idx, account_vote.clone())?; } - let proxy = open_activate_proxy::(r)?; - let conviction = Conviction::Locked1x; - let balance = 1u32; - Democracy::::proxy_delegate(RawOrigin::Signed(proxy.clone()).into(), other, conviction, balance.into())?; + let votes = match VotingOf::::get(&voter) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), r as usize, "Votes not created"); - }: _(RawOrigin::Signed(proxy)) + let referendum_index = r - 1; - proxy_remove_vote { - let u in 1 .. MAX_USERS; + }: _(RawOrigin::Signed(caller.clone()), referendum_index) + verify { + let votes = match VotingOf::::get(&voter) { + Voting::Direct { votes, .. } => votes, + _ => return Err("Votes are not direct"), + }; + assert_eq!(votes.len(), (r - 1) as usize, "Vote was not removed"); + } - let referendum_index = add_referendum::(u)?; - let account_vote = account_vote::(); - let proxy = open_activate_proxy::(u)?; + enact_proposal_execute { + // Num of bytes in encoded proposal + let b in 0 .. MAX_BYTES; - Democracy::::proxy_vote(RawOrigin::Signed(proxy.clone()).into(), referendum_index, account_vote)?; + let proposer = funded_account::("proposer", 0); + let raw_call = Call::note_preimage(vec![1; b as usize]); + let generic_call: T::Proposal = raw_call.into(); + let encoded_proposal = generic_call.encode(); + let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); + Democracy::::note_preimage(RawOrigin::Signed(proposer).into(), encoded_proposal)?; - }: _(RawOrigin::Signed(proxy), referendum_index) + match Preimages::::get(proposal_hash) { + Some(PreimageStatus::Available { .. }) => (), + _ => return Err("preimage not available") + } + }: enact_proposal(RawOrigin::Root, proposal_hash, 0) + verify { + // Fails due to mismatched origin + assert_last_event::(RawEvent::Executed(0, false).into()); + } + + enact_proposal_slash { + // Num of bytes in encoded proposal + let b in 0 .. MAX_BYTES; + + let proposer = funded_account::("proposer", 0); + // Random invalid bytes + let encoded_proposal = vec![200; b as usize]; + let proposal_hash = T::Hashing::hash(&encoded_proposal[..]); + Democracy::::note_preimage(RawOrigin::Signed(proposer).into(), encoded_proposal)?; + + match Preimages::::get(proposal_hash) { + Some(PreimageStatus::Available { .. }) => (), + _ => return Err("preimage not available") + } + }: { + assert_eq!( + Democracy::::enact_proposal(RawOrigin::Root.into(), proposal_hash, 0), + Err(Error::::PreimageInvalid.into()) + ); + } } #[cfg(test)] @@ -457,8 +972,10 @@ mod tests { new_test_ext().execute_with(|| { assert_ok!(test_benchmark_propose::()); assert_ok!(test_benchmark_second::()); - assert_ok!(test_benchmark_vote::()); - assert_ok!(test_benchmark_proxy_vote::()); + assert_ok!(test_benchmark_vote_new::()); + assert_ok!(test_benchmark_vote_existing::()); + assert_ok!(test_benchmark_proxy_vote_new::()); + assert_ok!(test_benchmark_proxy_vote_existing::()); assert_ok!(test_benchmark_emergency_cancel::()); assert_ok!(test_benchmark_external_propose::()); assert_ok!(test_benchmark_external_propose_majority::()); @@ -467,6 +984,8 @@ mod tests { assert_ok!(test_benchmark_veto_external::()); assert_ok!(test_benchmark_cancel_referendum::()); assert_ok!(test_benchmark_cancel_queued::()); + assert_ok!(test_benchmark_on_initialize_external::()); + assert_ok!(test_benchmark_on_initialize_public::()); assert_ok!(test_benchmark_open_proxy::()); assert_ok!(test_benchmark_activate_proxy::()); assert_ok!(test_benchmark_close_proxy::()); @@ -477,12 +996,15 @@ mod tests { assert_ok!(test_benchmark_note_preimage::()); assert_ok!(test_benchmark_note_imminent_preimage::()); assert_ok!(test_benchmark_reap_preimage::()); - assert_ok!(test_benchmark_unlock::()); + assert_ok!(test_benchmark_unlock_remove::()); + assert_ok!(test_benchmark_unlock_set::()); assert_ok!(test_benchmark_remove_vote::()); assert_ok!(test_benchmark_remove_other_vote::()); assert_ok!(test_benchmark_proxy_delegate::()); assert_ok!(test_benchmark_proxy_undelegate::()); assert_ok!(test_benchmark_proxy_remove_vote::()); + assert_ok!(test_benchmark_enact_proposal_execute::()); + assert_ok!(test_benchmark_enact_proposal_slash::()); }); } } diff --git a/frame/democracy/src/tests.rs b/frame/democracy/src/tests.rs index 4d540f63d50..31213919e4a 100644 --- a/frame/democracy/src/tests.rs +++ b/frame/democracy/src/tests.rs @@ -21,7 +21,7 @@ use std::cell::RefCell; use codec::Encode; use frame_support::{ impl_outer_origin, impl_outer_dispatch, assert_noop, assert_ok, parameter_types, - ord_parameter_types, traits::{Contains, OnInitialize}, weights::Weight, + impl_outer_event, ord_parameter_types, traits::{Contains, OnInitialize}, weights::Weight, }; use sp_core::H256; use sp_runtime::{ @@ -53,11 +53,25 @@ impl_outer_origin! { impl_outer_dispatch! { pub enum Call for Test where origin: Origin { + frame_system::System, pallet_balances::Balances, democracy::Democracy, } } +mod democracy { + pub use crate::Event; +} + +impl_outer_event! { + pub enum Event for Test { + system, + pallet_balances, + pallet_scheduler, + democracy, + } +} + // Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. #[derive(Clone, Eq, PartialEq, Debug)] pub struct Test; @@ -77,7 +91,7 @@ impl frame_system::Trait for Test { type AccountId = u64; type Lookup = IdentityLookup; type Header = Header; - type Event = (); + type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); @@ -94,14 +108,14 @@ parameter_types! { pub const MaximumWeight: u32 = 1000000; } impl pallet_scheduler::Trait for Test { - type Event = (); + type Event = Event; type Origin = Origin; type Call = Call; type MaximumWeight = MaximumWeight; } impl pallet_balances::Trait for Test { type Balance = u64; - type Event = (); + type Event = Event; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; type AccountStore = System; @@ -144,7 +158,7 @@ impl Get for InstantAllowed { } impl super::Trait for Test { type Proposal = Call; - type Event = (); + type Event = Event; type Currency = pallet_balances::Module; type EnactmentPeriod = EnactmentPeriod; type LaunchPeriod = LaunchPeriod; diff --git a/frame/support/src/traits.rs b/frame/support/src/traits.rs index 35e1231698a..dfc2ddf4de1 100644 --- a/frame/support/src/traits.rs +++ b/frame/support/src/traits.rs @@ -208,7 +208,7 @@ pub trait Contains { /// /// **Should be used for benchmarking only!!!** #[cfg(feature = "runtime-benchmarks")] - fn add(t: &T) { unimplemented!() } + fn add(_t: &T) { unimplemented!() } } /// Determiner to say whether a given account is unused. diff --git a/frame/timestamp/src/benchmarking.rs b/frame/timestamp/src/benchmarking.rs index 01a3d502a81..c468bf82fba 100644 --- a/frame/timestamp/src/benchmarking.rs +++ b/frame/timestamp/src/benchmarking.rs @@ -21,18 +21,31 @@ use super::*; use sp_std::prelude::*; use frame_system::RawOrigin; +use frame_support::{ensure, traits::OnFinalize}; use frame_benchmarking::benchmarks; +use crate::Module as Timestamp; + const MAX_TIME: u32 = 100; benchmarks! { - _ { - let n in 1 .. MAX_TIME => (); - } + _ { } set { - let n in ...; - }: _(RawOrigin::None, n.into()) + let t in 1 .. MAX_TIME; + }: _(RawOrigin::None, t.into()) + verify { + ensure!(Timestamp::::now() == t.into(), "Time was not set."); + } + + on_finalize { + let t in 1 .. MAX_TIME; + Timestamp::::set(RawOrigin::None.into(), t.into())?; + ensure!(DidUpdate::exists(), "Time was not set."); + }: { Timestamp::::on_finalize(t.into()); } + verify { + ensure!(!DidUpdate::exists(), "Time was not removed."); + } } #[cfg(test)] @@ -45,6 +58,7 @@ mod tests { fn test_benchmarks() { new_test_ext().execute_with(|| { assert_ok!(test_benchmark_set::()); + assert_ok!(test_benchmark_on_finalize::()); }); } } diff --git a/frame/vesting/src/benchmarking.rs b/frame/vesting/src/benchmarking.rs index be2cb4cb2b0..10f19af65ee 100644 --- a/frame/vesting/src/benchmarking.rs +++ b/frame/vesting/src/benchmarking.rs @@ -21,108 +21,177 @@ use super::*; use frame_system::{RawOrigin, Module as System}; -use sp_io::hashing::blake2_256; use frame_benchmarking::{benchmarks, account}; +use sp_runtime::traits::Bounded; use crate::Module as Vesting; const SEED: u32 = 0; const MAX_LOCKS: u32 = 20; -fn add_locks(l: u32) { - for id in 0..l { - let lock_id = <[u8; 8]>::decode(&mut &id.using_encoded(blake2_256)[..]) - .unwrap_or_default(); - let locker = account("locker", 0, SEED); - let locked = 1; +type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; + +fn add_locks(who: &T::AccountId, n: u8) { + for id in 0..n { + let lock_id = [id; 8]; + let locked = 100; let reasons = WithdrawReason::Transfer | WithdrawReason::Reserve; - T::Currency::set_lock(lock_id, &locker, locked.into(), reasons); + T::Currency::set_lock(lock_id, who, locked.into(), reasons); } } -fn setup(b: u32) -> T::AccountId { - let locked = 1; - let per_block = 1; - let starting_block = 0; - - let caller = account("caller", 0, SEED); - System::::set_block_number(0.into()); - - // Add schedule to avoid `NotVesting` error. - let _ = Vesting::::add_vesting_schedule( - &caller, - locked.into(), - per_block.into(), - starting_block.into(), - ); - - // Set lock and block number to take different code paths. - let reasons = WithdrawReason::Transfer | WithdrawReason::Reserve; - T::Currency::set_lock(VESTING_ID, &caller, locked.into(), reasons); - System::::set_block_number(b.into()); - - caller +fn add_vesting_schedule(who: &T::AccountId) -> Result<(), &'static str> { + let locked = 100; + let per_block = 10; + let starting_block = 1; + + System::::set_block_number(0.into()); + + // Add schedule to avoid `NotVesting` error. + Vesting::::add_vesting_schedule( + &who, + locked.into(), + per_block.into(), + starting_block.into(), + )?; + Ok(()) } benchmarks! { - _ { - // Number of previous locks. - // It doesn't seems to influence the timings for lower values. - let l in 0 .. MAX_LOCKS => add_locks::(l); - } + _ { } vest_locked { - let l in ...; - - let caller = setup::(0u32); + let l in 0 .. MAX_LOCKS; - }: vest(RawOrigin::Signed(caller)) - - vest_not_locked { - let l in ...; + let caller = account("caller", 0, SEED); + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + add_locks::(&caller, l as u8); + add_vesting_schedule::(&caller)?; + // At block zero, everything is vested. + System::::set_block_number(T::BlockNumber::zero()); + assert_eq!( + Vesting::::vesting_balance(&caller), + Some(100.into()), + "Vesting schedule not added", + ); + }: vest(RawOrigin::Signed(caller.clone())) + verify { + // Nothing happened since everything is still vested. + assert_eq!( + Vesting::::vesting_balance(&caller), + Some(100.into()), + "Vesting schedule was removed", + ); + } - let caller = setup::(1u32); + vest_unlocked { + let l in 0 .. MAX_LOCKS; - }: vest(RawOrigin::Signed(caller)) + let caller = account("caller", 0, SEED); + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + add_locks::(&caller, l as u8); + add_vesting_schedule::(&caller)?; + // At block 20, everything is unvested. + System::::set_block_number(20.into()); + assert_eq!( + Vesting::::vesting_balance(&caller), + Some(BalanceOf::::zero()), + "Vesting schedule still active", + ); + }: vest(RawOrigin::Signed(caller.clone())) + verify { + // Vesting schedule is removed! + assert_eq!( + Vesting::::vesting_balance(&caller), + None, + "Vesting schedule was not removed", + ); + } vest_other_locked { - let l in ...; + let l in 0 .. MAX_LOCKS; - let other: T::AccountId = setup::(0u32); + let other: T::AccountId = account("other", 0, SEED); let other_lookup: ::Source = T::Lookup::unlookup(other.clone()); + T::Currency::make_free_balance_be(&other, BalanceOf::::max_value()); + add_locks::(&other, l as u8); + add_vesting_schedule::(&other)?; + // At block zero, everything is vested. + System::::set_block_number(T::BlockNumber::zero()); + assert_eq!( + Vesting::::vesting_balance(&other), + Some(100.into()), + "Vesting schedule not added", + ); - let caller = account("caller", 0, SEED); - - }: vest_other(RawOrigin::Signed(caller), other_lookup) + let caller: T::AccountId = account("caller", 0, SEED); + }: vest_other(RawOrigin::Signed(caller.clone()), other_lookup) + verify { + // Nothing happened since everything is still vested. + assert_eq!( + Vesting::::vesting_balance(&other), + Some(100.into()), + "Vesting schedule was removed", + ); + } - vest_other_not_locked { - let l in ...; + vest_other_unlocked { + let l in 0 .. MAX_LOCKS; - let other: T::AccountId = setup::(1u32); + let other: T::AccountId = account("other", 0, SEED); let other_lookup: ::Source = T::Lookup::unlookup(other.clone()); + T::Currency::make_free_balance_be(&other, BalanceOf::::max_value()); + add_locks::(&other, l as u8); + add_vesting_schedule::(&other)?; + // At block 20, everything is unvested. + System::::set_block_number(20.into()); + assert_eq!( + Vesting::::vesting_balance(&other), + Some(BalanceOf::::zero()), + "Vesting schedule still active", + ); - let caller = account("caller", 0, SEED); - - }: vest_other(RawOrigin::Signed(caller), other_lookup) + let caller: T::AccountId = account("caller", 0, SEED); + }: vest_other(RawOrigin::Signed(caller.clone()), other_lookup) + verify { + // Vesting schedule is removed! + assert_eq!( + Vesting::::vesting_balance(&other), + None, + "Vesting schedule was not removed", + ); + } vested_transfer { - let u in 0 .. 1000; + let l in 0 .. MAX_LOCKS; - let from = account("from", u, SEED); - let to = account("to", u, SEED); - let to_lookup: ::Source = T::Lookup::unlookup(to); + let caller: T::AccountId = account("caller", 0, SEED); + T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); + let target: T::AccountId = account("target", 0, SEED); + let target_lookup: ::Source = T::Lookup::unlookup(target.clone()); + // Give target existing locks + add_locks::(&target, l as u8); let transfer_amount = T::MinVestedTransfer::get(); let vesting_schedule = VestingInfo { locked: transfer_amount, - per_block: 1.into(), - starting_block: 0.into(), + per_block: 10.into(), + starting_block: 1.into(), }; - - let _ = T::Currency::make_free_balance_be(&from, transfer_amount * 10.into()); - - }: _(RawOrigin::Signed(from), to_lookup, vesting_schedule) + }: _(RawOrigin::Signed(caller), target_lookup, vesting_schedule) + verify { + assert_eq!( + T::MinVestedTransfer::get(), + T::Currency::free_balance(&target), + "Transfer didn't happen", + ); + assert_eq!( + Vesting::::vesting_balance(&target), + Some(T::MinVestedTransfer::get()), + "Lock not created", + ); + } } #[cfg(test)] @@ -135,9 +204,9 @@ mod tests { fn test_benchmarks() { ExtBuilder::default().existential_deposit(256).build().execute_with(|| { assert_ok!(test_benchmark_vest_locked::()); - assert_ok!(test_benchmark_vest_not_locked::()); + assert_ok!(test_benchmark_vest_unlocked::()); assert_ok!(test_benchmark_vest_other_locked::()); - assert_ok!(test_benchmark_vest_other_not_locked::()); + assert_ok!(test_benchmark_vest_other_unlocked::()); assert_ok!(test_benchmark_vested_transfer::()); }); } diff --git a/utils/frame/benchmarking-cli/src/command.rs b/utils/frame/benchmarking-cli/src/command.rs index 5e35d57cdae..e71a4d95070 100644 --- a/utils/frame/benchmarking-cli/src/command.rs +++ b/utils/frame/benchmarking-cli/src/command.rs @@ -92,6 +92,9 @@ impl BenchmarkCmd { self.repeat, ); + // Skip raw data + analysis if there are no results + if batch.results.len() == 0 { continue } + if self.raw_data { // Print the table header batch.results[0].0.iter().for_each(|param| print!("{:?},", param.0)); -- GitLab From 5038c3a1525c22ec4e21e9246106132074f1a1a5 Mon Sep 17 00:00:00 2001 From: emostov <32168567+emostov@users.noreply.github.com> Date: Fri, 24 Apr 2020 02:47:32 -0700 Subject: [PATCH 044/167] Make Pallet ModuleId and LockIdentifier Configurable (#5695) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * transition treasury to configurable moduleids * make election module id configurable * convert runtime and pallet to accept module id config elections-phragmen * add ModuleId to evm pallet * change society pallet to configurable module id * delete commented out module_id * delete commented out code and merge in upstream master * try and convert 4 whitespace to tab * fix remaining space to tab conversions * trivial cleaning * delete comment from elections-phragrems tests * trivial * Update frame/elections-phragmen/src/lib.rs * add docs for elections and elections phragmen * make has_lock test get moduleid dynamically * Apply suggestions from code review Co-Authored-By: Amar Singh * make sure get is imported to evm Co-authored-by: Shawn Tabrizi Co-authored-by: Bastian Köcher Co-authored-by: Amar Singh Co-authored-by: Benjamin Kampmann --- bin/node/runtime/src/lib.rs | 12 +++++++++--- frame/elections-phragmen/src/lib.rs | 19 +++++++++++++------ frame/elections/src/lib.rs | 15 +++++++++------ frame/elections/src/mock.rs | 7 ++++++- frame/evm/src/lib.rs | 10 ++++++---- frame/society/src/lib.rs | 12 ++++++++---- frame/society/src/mock.rs | 2 ++ frame/treasury/src/lib.rs | 11 +++++++---- frame/treasury/src/tests.rs | 4 +++- 9 files changed, 63 insertions(+), 29 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 29defaaecf7..16f355e6d60 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -12,7 +12,7 @@ // GNU General Public License for more details. // You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . +// along with Substrate. If not, see . //! The Substrate runtime. This can be compiled with ``#[no_std]`, ready for Wasm. @@ -24,7 +24,7 @@ use sp_std::prelude::*; use frame_support::{ construct_runtime, parameter_types, debug, weights::{Weight, RuntimeDbWeight}, - traits::{Currency, Randomness, OnUnbalanced, Imbalance}, + traits::{Currency, Randomness, OnUnbalanced, Imbalance, LockIdentifier}, }; use sp_core::u32_trait::{_1, _2, _3, _4}; pub use node_primitives::{AccountId, Signature}; @@ -32,7 +32,7 @@ use node_primitives::{AccountIndex, Balance, BlockNumber, Hash, Index, Moment}; use sp_api::impl_runtime_apis; use sp_runtime::{ Permill, Perbill, Perquintill, Percent, ApplyExtrinsicResult, - impl_opaque_keys, generic, create_runtime_str, + impl_opaque_keys, generic, create_runtime_str, ModuleId, }; use sp_runtime::curve::PiecewiseLinear; use sp_runtime::transaction_validity::{TransactionValidity, TransactionSource, TransactionPriority}; @@ -387,9 +387,11 @@ parameter_types! { pub const TermDuration: BlockNumber = 7 * DAYS; pub const DesiredMembers: u32 = 13; pub const DesiredRunnersUp: u32 = 7; + pub const ElectionsPhragmenModuleId: LockIdentifier = *b"phrelect"; } impl pallet_elections_phragmen::Trait for Runtime { + type ModuleId = ElectionsPhragmenModuleId; type Event = Event; type Currency = Balances; type ChangeMembers = Council; @@ -439,6 +441,7 @@ parameter_types! { pub const TipFindersFee: Percent = Percent::from_percent(20); pub const TipReportDepositBase: Balance = 1 * DOLLARS; pub const TipReportDepositPerByte: Balance = 1 * CENTS; + pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry"); } impl pallet_treasury::Trait for Runtime { @@ -456,6 +459,7 @@ impl pallet_treasury::Trait for Runtime { type ProposalBondMinimum = ProposalBondMinimum; type SpendPeriod = SpendPeriod; type Burn = Burn; + type ModuleId = TreasuryModuleId; } parameter_types! { @@ -625,6 +629,7 @@ parameter_types! { pub const PeriodSpend: Balance = 500 * DOLLARS; pub const MaxLockDuration: BlockNumber = 36 * 30 * DAYS; pub const ChallengePeriod: BlockNumber = 7 * DAYS; + pub const SocietyModuleId: ModuleId = ModuleId(*b"py/socie"); } impl pallet_society::Trait for Runtime { @@ -641,6 +646,7 @@ impl pallet_society::Trait for Runtime { type FounderSetOrigin = pallet_collective::EnsureProportionMoreThan<_1, _2, AccountId, CouncilCollective>; type SuspensionJudgementOrigin = pallet_society::EnsureFounder; type ChallengePeriod = ChallengePeriod; + type ModuleId = SocietyModuleId; } parameter_types! { diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 9247d6f3215..8139b363d08 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -98,8 +98,6 @@ use frame_support::{ use sp_phragmen::{build_support_map, ExtendedBalance, VoteWeight, PhragmenResult}; use frame_system::{self as system, ensure_signed, ensure_root}; -const MODULE_ID: LockIdentifier = *b"phrelect"; - /// The maximum votes allowed per voter. pub const MAXIMUM_VOTE: usize = 16; @@ -111,6 +109,9 @@ pub trait Trait: frame_system::Trait { /// The overarching event type.c type Event: From> + Into<::Event>; + /// Identifier for the elections-phragmen pallet's lock + type ModuleId: Get; + /// The currency that people are electing with. type Currency: LockableCurrency + @@ -276,6 +277,7 @@ decl_module! { const DesiredMembers: u32 = T::DesiredMembers::get(); const DesiredRunnersUp: u32 = T::DesiredRunnersUp::get(); const TermDuration: T::BlockNumber = T::TermDuration::get(); + const ModuleId: LockIdentifier = T::ModuleId::get(); /// Vote for a set of candidates for the upcoming round of election. /// @@ -321,7 +323,7 @@ decl_module! { // lock T::Currency::set_lock( - MODULE_ID, + T::ModuleId::get(), &who, locked_balance, WithdrawReasons::except(WithdrawReason::TransactionPayment), @@ -650,7 +652,7 @@ impl Module { fn do_remove_voter(who: &T::AccountId, unreserve: bool) { // remove storage and lock. Voting::::remove(who); - T::Currency::remove_lock(MODULE_ID, who); + T::Currency::remove_lock(T::ModuleId::get(), who); if unreserve { T::Currency::unreserve(who, T::VotingBond::get()); @@ -924,7 +926,7 @@ mod tests { parameter_types! { pub const ExistentialDeposit: u64 = 1; -} + } impl pallet_balances::Trait for Test { type Balance = u64; @@ -1021,7 +1023,12 @@ mod tests { } } + parameter_types!{ + pub const ElectionsPhragmenModuleId: LockIdentifier = *b"phrelect"; + } + impl Trait for Test { + type ModuleId = ElectionsPhragmenModuleId; type Event = Event; type Currency = Balances; type CurrencyToVote = CurrencyToVoteHandler; @@ -1125,7 +1132,7 @@ mod tests { fn has_lock(who: &u64) -> u64 { let lock = Balances::locks(who)[0].clone(); - assert_eq!(lock.id, MODULE_ID); + assert_eq!(lock.id, ElectionsPhragmenModuleId::get()); lock.amount } diff --git a/frame/elections/src/lib.rs b/frame/elections/src/lib.rs index a9166af9278..677c9a3ae34 100644 --- a/frame/elections/src/lib.rs +++ b/frame/elections/src/lib.rs @@ -33,7 +33,7 @@ use frame_support::{ weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, traits::{ Currency, ExistenceRequirement, Get, LockableCurrency, LockIdentifier, BalanceStatus, - OnUnbalanced, ReservableCurrency, WithdrawReason, WithdrawReasons, ChangeMembers + OnUnbalanced, ReservableCurrency, WithdrawReason, WithdrawReasons, ChangeMembers, } }; use codec::{Encode, Decode}; @@ -126,8 +126,6 @@ pub enum CellStatus { Hole, } -const MODULE_ID: LockIdentifier = *b"py/elect"; - /// Number of voters grouped in one chunk. pub const VOTER_SET_SIZE: usize = 64; /// NUmber of approvals grouped in one chunk. @@ -149,6 +147,9 @@ const APPROVAL_FLAG_LEN: usize = 32; pub trait Trait: frame_system::Trait { type Event: From> + Into<::Event>; + /// Identifier for the elections pallet's lock + type ModuleId: Get; + /// The currency that people are electing with. type Currency: LockableCurrency @@ -379,6 +380,8 @@ decl_module! { /// The chunk size of the approval vector. const APPROVAL_SET_SIZE: u32 = APPROVAL_SET_SIZE as u32; + const ModuleId: LockIdentifier = T::ModuleId::get(); + fn deposit_event() = default; /// Set candidate approvals. Approval slots stay valid as long as candidates in those slots @@ -494,7 +497,7 @@ decl_module! { ); T::Currency::remove_lock( - MODULE_ID, + T::ModuleId::get(), if valid { &who } else { &reporter } ); @@ -532,7 +535,7 @@ decl_module! { Self::remove_voter(&who, index); T::Currency::unreserve(&who, T::VotingBond::get()); - T::Currency::remove_lock(MODULE_ID, &who); + T::Currency::remove_lock(T::ModuleId::get(), &who); } /// Submit oneself for candidacy. @@ -892,7 +895,7 @@ impl Module { } T::Currency::set_lock( - MODULE_ID, + T::ModuleId::get(), &who, locked_balance, WithdrawReasons::all(), diff --git a/frame/elections/src/mock.rs b/frame/elections/src/mock.rs index a304478abbf..3a7af61bdc8 100644 --- a/frame/elections/src/mock.rs +++ b/frame/elections/src/mock.rs @@ -21,7 +21,7 @@ use std::cell::RefCell; use frame_support::{ StorageValue, StorageMap, parameter_types, assert_ok, - traits::{Get, ChangeMembers, Currency}, + traits::{Get, ChangeMembers, Currency, LockIdentifier}, weights::Weight, }; use sp_core::H256; @@ -122,6 +122,10 @@ impl ChangeMembers for TestChangeMembers { } } +parameter_types!{ + pub const ElectionModuleId: LockIdentifier = *b"py/elect"; +} + impl elections::Trait for Test { type Event = Event; type Currency = Balances; @@ -139,6 +143,7 @@ impl elections::Trait for Test { type InactiveGracePeriod = InactiveGracePeriod; type VotingPeriod = VotingPeriod; type DecayRatio = DecayRatio; + type ModuleId = ElectionModuleId; } pub type Block = sp_runtime::generic::Block; diff --git a/frame/evm/src/lib.rs b/frame/evm/src/lib.rs index eec8bc69d74..b201fefceee 100644 --- a/frame/evm/src/lib.rs +++ b/frame/evm/src/lib.rs @@ -26,7 +26,7 @@ pub use crate::backend::{Account, Log, Vicinity, Backend}; use sp_std::{vec::Vec, marker::PhantomData}; use frame_support::{ensure, decl_module, decl_storage, decl_event, decl_error}; use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass, FunctionOf, Pays}; -use frame_support::traits::{Currency, WithdrawReason, ExistenceRequirement}; +use frame_support::traits::{Currency, WithdrawReason, ExistenceRequirement, Get}; use frame_system::{self as system, ensure_signed}; use sp_runtime::ModuleId; use sp_core::{U256, H256, H160, Hasher}; @@ -38,8 +38,6 @@ use evm::{ExitReason, ExitSucceed, ExitError, Config}; use evm::executor::StackExecutor; use evm::backend::ApplyBackend; -const MODULE_ID: ModuleId = ModuleId(*b"py/ethvm"); - /// Type alias for currency balance. pub type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; @@ -119,6 +117,8 @@ static ISTANBUL_CONFIG: Config = Config::istanbul(); /// EVM module trait pub trait Trait: frame_system::Trait + pallet_timestamp::Trait { + /// The EVM's module id + type ModuleId: Get; /// Calculator for current gas price. type FeeCalculator: FeeCalculator; /// Convert account ID to H160; @@ -188,6 +188,8 @@ decl_module! { type Error = Error; fn deposit_event() = default; + + const ModuleId: ModuleId = T::ModuleId::get(); /// Deposit balance from currency/balances module into EVM. #[weight = MINIMUM_WEIGHT] @@ -361,7 +363,7 @@ impl Module { /// This actually does computation. If you need to keep using it, then make sure you cache the /// value and only call this once. pub fn account_id() -> T::AccountId { - MODULE_ID.into_account() + T::ModuleId::get().into_account() } /// Check whether an account is empty. diff --git a/frame/society/src/lib.rs b/frame/society/src/lib.rs index 2feaab24b11..7cd0c826833 100644 --- a/frame/society/src/lib.rs +++ b/frame/society/src/lib.rs @@ -269,13 +269,14 @@ use frame_system::{self as system, ensure_signed, ensure_root}; type BalanceOf = <>::Currency as Currency<::AccountId>>::Balance; -const MODULE_ID: ModuleId = ModuleId(*b"py/socie"); - /// The module's configuration trait. pub trait Trait: system::Trait { /// The overarching event type. type Event: From> + Into<::Event>; + /// The societies's module id + type ModuleId: Get; + /// The currency type used for bidding. type Currency: ReservableCurrency; @@ -491,6 +492,9 @@ decl_module! { /// The number of blocks between membership challenges. const ChallengePeriod: T::BlockNumber = T::ChallengePeriod::get(); + /// The societies's module id + const ModuleId: ModuleId = T::ModuleId::get(); + // Used for handling module events. fn deposit_event() = default; @@ -1570,7 +1574,7 @@ impl, I: Instance> Module { /// This actually does computation. If you need to keep using it, then make sure you cache the /// value and only call this once. pub fn account_id() -> T::AccountId { - MODULE_ID.into_account() + T::ModuleId::get().into_account() } /// The account ID of the payouts pot. This is where payouts are made from. @@ -1578,7 +1582,7 @@ impl, I: Instance> Module { /// This actually does computation. If you need to keep using it, then make sure you cache the /// value and only call this once. pub fn payouts() -> T::AccountId { - MODULE_ID.into_sub_account(b"payouts") + T::ModuleId::get().into_sub_account(b"payouts") } /// Return the duration of the lock, in blocks, with the given number of members. diff --git a/frame/society/src/mock.rs b/frame/society/src/mock.rs index a410fdbd042..81da2b1b6a7 100644 --- a/frame/society/src/mock.rs +++ b/frame/society/src/mock.rs @@ -55,6 +55,7 @@ parameter_types! { pub const AvailableBlockRatio: Perbill = Perbill::one(); pub const ExistentialDeposit: u64 = 1; + pub const SocietyModuleId: ModuleId = ModuleId(*b"py/socie"); } ord_parameter_types! { @@ -107,6 +108,7 @@ impl Trait for Test { type FounderSetOrigin = EnsureSignedBy; type SuspensionJudgementOrigin = EnsureSignedBy; type ChallengePeriod = ChallengePeriod; + type ModuleId = SocietyModuleId; } pub type Society = Module; diff --git a/frame/treasury/src/lib.rs b/frame/treasury/src/lib.rs index 2eb0f25fd0a..509cdaf2623 100644 --- a/frame/treasury/src/lib.rs +++ b/frame/treasury/src/lib.rs @@ -110,10 +110,10 @@ type BalanceOf = <::Currency as Currency< = <::Currency as Currency<::AccountId>>::PositiveImbalance; type NegativeImbalanceOf = <::Currency as Currency<::AccountId>>::NegativeImbalance; -/// The treasury's module id, used for deriving its sovereign account ID. -const MODULE_ID: ModuleId = ModuleId(*b"py/trsry"); - pub trait Trait: frame_system::Trait { + /// The treasury's module id, used for deriving its sovereign account ID. + type ModuleId: Get; + /// The staking balance. type Currency: Currency + ReservableCurrency; @@ -313,6 +313,9 @@ decl_module! { /// The amount held on deposit per byte within the tip report reason. const TipReportDepositPerByte: BalanceOf = T::TipReportDepositPerByte::get(); + + /// The treasury's module id, used for deriving its sovereign account ID. + const ModuleId: ModuleId = T::ModuleId::get(); type Error = Error; @@ -571,7 +574,7 @@ impl Module { /// This actually does computation. If you need to keep using it, then make sure you cache the /// value and only call this once. pub fn account_id() -> T::AccountId { - MODULE_ID.into_account() + T::ModuleId::get().into_account() } /// The needed bond for a proposal whose spend is `value`. diff --git a/frame/treasury/src/tests.rs b/frame/treasury/src/tests.rs index 8752ba746b8..d1b7d13ff26 100644 --- a/frame/treasury/src/tests.rs +++ b/frame/treasury/src/tests.rs @@ -26,7 +26,7 @@ use frame_support::{ }; use sp_core::H256; use sp_runtime::{ - Perbill, + Perbill, ModuleId, testing::Header, traits::{BlakeTwo256, IdentityLookup, BadOrigin}, }; @@ -118,8 +118,10 @@ parameter_types! { pub const TipFindersFee: Percent = Percent::from_percent(20); pub const TipReportDepositBase: u64 = 1; pub const TipReportDepositPerByte: u64 = 1; + pub const TreasuryModuleId: ModuleId = ModuleId(*b"py/trsry"); } impl Trait for Test { + type ModuleId = TreasuryModuleId; type Currency = pallet_balances::Module; type ApproveOrigin = frame_system::EnsureRoot; type RejectOrigin = frame_system::EnsureRoot; -- GitLab From ebf9df376bd129e7410bab05bb2c30ea993e83e4 Mon Sep 17 00:00:00 2001 From: Alexander Popiak Date: Fri, 24 Apr 2020 12:00:07 +0200 Subject: [PATCH 045/167] Document weight for asset, system and timestamp pallets (#5593) Co-Authored-By: thiolliere --- frame/assets/src/lib.rs | 21 +++++++++++++++ frame/system/src/lib.rs | 55 ++++++++++++++++++++++++++++++++++++++ frame/timestamp/src/lib.rs | 10 +++++++ 3 files changed, 86 insertions(+) diff --git a/frame/assets/src/lib.rs b/frame/assets/src/lib.rs index 60a9ab87a75..9d31cceb7e2 100644 --- a/frame/assets/src/lib.rs +++ b/frame/assets/src/lib.rs @@ -158,6 +158,13 @@ decl_module! { /// Issue a new class of fungible assets. There are, and will only ever be, `total` /// such assets and they'll all belong to the `origin` initially. It will have an /// identifier `AssetId` instance: this will be specified in the `Issued` event. + /// + /// # + /// - `O(1)` + /// - 1 storage mutation (codec `O(1)`). + /// - 2 storage writes (condec `O(1)`). + /// - 1 event. + /// # #[weight = MINIMUM_WEIGHT] fn issue(origin, #[compact] total: T::Balance) { let origin = ensure_signed(origin)?; @@ -172,6 +179,13 @@ decl_module! { } /// Move some assets from one holder to another. + /// + /// # + /// - `O(1)` + /// - 1 static lookup + /// - 2 storage mutations (codec `O(1)`). + /// - 1 event. + /// # #[weight = MINIMUM_WEIGHT] fn transfer(origin, #[compact] id: T::AssetId, @@ -191,6 +205,13 @@ decl_module! { } /// Destroy any assets of `id` owned by `origin`. + /// + /// # + /// - `O(1)` + /// - 1 storage mutation (codec `O(1)`). + /// - 1 storage deletion (codec `O(1)`). + /// - 1 event. + /// # #[weight = MINIMUM_WEIGHT] fn destroy(origin, #[compact] id: T::AssetId) { let origin = ensure_signed(origin)?; diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 83733bb6c9c..b3ac7e8f959 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -494,12 +494,21 @@ decl_module! { } /// Make some on-chain remark. + /// + /// # + /// - `O(1)` + /// # #[weight = MINIMUM_WEIGHT] fn remark(origin, _remark: Vec) { ensure_signed(origin)?; } /// Set the number of pages in the WebAssembly environment's heap. + /// + /// # + /// - `O(1)` + /// - 1 storage write. + /// # #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_heap_pages(origin, pages: u64) { ensure_root(origin)?; @@ -507,6 +516,13 @@ decl_module! { } /// Set the new runtime code. + /// + /// # + /// - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` + /// - 1 storage write (codec `O(C)`). + /// - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is expensive). + /// - 1 event. + /// # #[weight = (200_000_000, DispatchClass::Operational)] pub fn set_code(origin, code: Vec) { Self::can_set_code(origin, &code)?; @@ -516,6 +532,12 @@ decl_module! { } /// Set the new runtime code without doing any checks of the given `code`. + /// + /// # + /// - `O(C)` where `C` length of `code` + /// - 1 storage write (codec `O(C)`). + /// - 1 event. + /// # #[weight = (200_000_000, DispatchClass::Operational)] pub fn set_code_without_checks(origin, code: Vec) { ensure_root(origin)?; @@ -524,6 +546,12 @@ decl_module! { } /// Set the new changes trie configuration. + /// + /// # + /// - `O(D)` where `D` length of `Digest` + /// - 1 storage write or delete (codec `O(1)`). + /// - 1 call to `deposit_log`: `O(D)` (which depends on the length of `Digest`) + /// # #[weight = (20_000_000, DispatchClass::Operational)] pub fn set_changes_trie_config(origin, changes_trie_config: Option) { ensure_root(origin)?; @@ -542,6 +570,11 @@ decl_module! { } /// Set some items of storage. + /// + /// # + /// - `O(I)` where `I` length of `items` + /// - `I` storage writes (`O(1)`). + /// # #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn set_storage(origin, items: Vec) { ensure_root(origin)?; @@ -551,6 +584,11 @@ decl_module! { } /// Kill some items from storage. + /// + /// # + /// - `O(VK)` where `V` length of `keys` and `K` length of one key + /// - `V` storage deletions. + /// # #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn kill_storage(origin, keys: Vec) { ensure_root(origin)?; @@ -560,6 +598,11 @@ decl_module! { } /// Kill all storage items with a key that starts with the given prefix. + /// + /// # + /// - `O(P)` where `P` amount of keys with prefix `prefix` + /// - `P` storage deletions. + /// # #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] fn kill_prefix(origin, prefix: Key) { ensure_root(origin)?; @@ -568,6 +611,13 @@ decl_module! { /// Kill the sending account, assuming there are no references outstanding and the composite /// data is equal to its default value. + /// + /// # + /// - `O(K)` with `K` being complexity of `on_killed_account` + /// - 1 storage read and deletion. + /// - 1 call to `on_killed_account` callback with unknown complexity `K` + /// - 1 event. + /// # #[weight = (25_000_000, DispatchClass::Operational)] fn suicide(origin) { let who = ensure_signed(origin)?; @@ -924,6 +974,11 @@ impl Module { } /// Deposits a log and ensures it matches the block's log data. + /// + /// # + /// - `O(D)` where `D` length of `Digest` + /// - 1 storage mutation (codec `O(D)`). + /// # pub fn deposit_log(item: DigestItemOf) { let mut l = >::get(); l.push(item); diff --git a/frame/timestamp/src/lib.rs b/frame/timestamp/src/lib.rs index cffe172c130..704343fd165 100644 --- a/frame/timestamp/src/lib.rs +++ b/frame/timestamp/src/lib.rs @@ -148,6 +148,12 @@ decl_module! { /// `MinimumPeriod`. /// /// The dispatch origin for this call must be `Inherent`. + /// + /// # + /// - `O(T)` where `T` complexity of `on_timestamp_set` + /// - 2 storage mutations (codec `O(1)`). + /// - 1 event handler `on_timestamp_set` `O(T)`. + /// # #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] fn set(origin, #[compact] now: T::Moment) { ensure_none(origin)?; @@ -162,6 +168,10 @@ decl_module! { >::on_timestamp_set(now); } + /// # + /// - `O(1)` + /// - 1 storage deletion (codec `O(1)`). + /// # fn on_finalize() { assert!(::DidUpdate::take(), "Timestamp must be updated once in the block"); } -- GitLab From 404d078f103a4b954c98f4abcf14c97d79c7273e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 24 Apr 2020 12:35:25 +0200 Subject: [PATCH 046/167] Make sure staking migration code runs only for `version = 2_0_0` (#5768) --- frame/staking/src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 34b6a4f7958..d175c26e7ae 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -1246,8 +1246,12 @@ decl_module! { fn on_runtime_upgrade() -> Weight { // For Kusama the type hasn't actually changed as Moment was u64 and was the number of // millisecond since unix epoch. - StorageVersion::put(Releases::V3_0_0); - Self::migrate_last_reward_to_claimed_rewards(); + StorageVersion::mutate(|v| { + if matches!(v, Releases::V2_0_0) { + Self::migrate_last_reward_to_claimed_rewards(); + } + *v = Releases::V3_0_0; + }); 0 } -- GitLab From ee098e9e5c9ab813ff98a0fdb6dba25e1fad3ddf Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Fri, 24 Apr 2020 13:48:22 +0200 Subject: [PATCH 047/167] Use new block requests protocol (#5760) * Use new block requests protocol * Tweak comment --- client/cli/src/params/network_params.rs | 8 +- client/network/src/behaviour.rs | 50 +++- client/network/src/config.rs | 8 +- client/network/src/protocol.rs | 162 ++++++++--- client/network/src/protocol/block_requests.rs | 274 +++++++++++++++--- .../network/src/protocol/finality_requests.rs | 226 ++++++++++++--- .../network/src/protocol/schema/api.v1.proto | 5 + client/network/src/service.rs | 7 +- 8 files changed, 591 insertions(+), 149 deletions(-) diff --git a/client/cli/src/params/network_params.rs b/client/cli/src/params/network_params.rs index e36bcfca49e..d0ec3fb9f3f 100644 --- a/client/cli/src/params/network_params.rs +++ b/client/cli/src/params/network_params.rs @@ -95,6 +95,11 @@ pub struct NetworkParams { /// By default this option is true for `--dev` and false otherwise. #[structopt(long)] pub discover_local: bool, + + /// Use the legacy "pre-mainnet-launch" networking protocol. Enable if things seem broken. + /// This option will be removed in the future. + #[structopt(long)] + pub legacy_network_protocol: bool, } impl NetworkParams { @@ -147,7 +152,8 @@ impl NetworkParams { use_yamux_flow_control: !self.no_yamux_flow_control, }, max_parallel_downloads: self.max_parallel_downloads, - allow_non_globals_in_dht: self.discover_local || is_dev + allow_non_globals_in_dht: self.discover_local || is_dev, + use_new_block_requests_protocol: !self.legacy_network_protocol, } } } diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 14b2245be0a..3186801e5fd 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -19,13 +19,16 @@ use crate::{ debug_info, discovery::{DiscoveryBehaviour, DiscoveryConfig, DiscoveryOut}, Event, ObservedRole, DhtEvent, ExHashT, }; -use crate::protocol::{self, light_client_handler, message::Roles, CustomMessageOutcome, Protocol}; +use crate::protocol::{ + self, block_requests, light_client_handler, finality_requests, + message::{self, Roles}, CustomMessageOutcome, Protocol +}; use codec::Encode as _; use libp2p::NetworkBehaviour; use libp2p::core::{Multiaddr, PeerId, PublicKey}; use libp2p::kad::record; -use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollParameters, toggle::Toggle}; +use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollParameters}; use log::debug; use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}}; use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification}; @@ -46,7 +49,7 @@ pub struct Behaviour { /// Block request handling. block_requests: protocol::BlockRequests, /// Finality proof request handling. - finality_proof_requests: Toggle>, + finality_proof_requests: protocol::FinalityProofRequests, /// Light client request handling. light_client_handler: protocol::LightClientHandler, @@ -77,7 +80,7 @@ impl Behaviour { user_agent: String, local_public_key: PublicKey, block_requests: protocol::BlockRequests, - finality_proof_requests: Option>, + finality_proof_requests: protocol::FinalityProofRequests, light_client_handler: protocol::LightClientHandler, disco_config: DiscoveryConfig, ) -> Self { @@ -86,7 +89,7 @@ impl Behaviour { debug_info: debug_info::DebugInfoBehaviour::new(user_agent, local_public_key.clone()), discovery: disco_config.finish(), block_requests, - finality_proof_requests: From::from(finality_proof_requests), + finality_proof_requests, light_client_handler, events: Vec::new(), role, @@ -216,6 +219,12 @@ Behaviour { self.events.push(BehaviourOut::JustificationImport(origin, hash, nb, justification)), CustomMessageOutcome::FinalityProofImport(origin, hash, nb, proof) => self.events.push(BehaviourOut::FinalityProofImport(origin, hash, nb, proof)), + CustomMessageOutcome::BlockRequest { target, request } => { + self.block_requests.send_request(&target, request); + }, + CustomMessageOutcome::FinalityProofRequest { target, block_hash, request } => { + self.finality_proof_requests.send_request(&target, block_hash, request); + }, CustomMessageOutcome::NotificationStreamOpened { remote, protocols, roles } => { let role = reported_roles_to_observed_role(&self.role, &remote, roles); for engine_id in protocols { @@ -245,6 +254,37 @@ Behaviour { } } +impl NetworkBehaviourEventProcess> for Behaviour { + fn inject_event(&mut self, event: block_requests::Event) { + match event { + block_requests::Event::Response { peer, original_request, response } => { + let ev = self.substrate.on_block_response(peer, original_request, response); + self.inject_event(ev); + } + } + } +} + +impl NetworkBehaviourEventProcess> for Behaviour { + fn inject_event(&mut self, event: finality_requests::Event) { + match event { + finality_requests::Event::Response { peer, block_hash, proof } => { + let response = message::FinalityProofResponse { + id: 0, + block: block_hash, + proof: if !proof.is_empty() { + Some(proof) + } else { + None + }, + }; + let ev = self.substrate.on_finality_proof_response(peer, response); + self.inject_event(ev); + } + } + } +} + impl NetworkBehaviourEventProcess for Behaviour { fn inject_event(&mut self, event: debug_info::DebugInfoEvent) { diff --git a/client/network/src/config.rs b/client/network/src/config.rs index 84e2da7018a..66800aeeaf8 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -399,7 +399,10 @@ pub struct NetworkConfiguration { /// Maximum number of peers to ask the same blocks in parallel. pub max_parallel_downloads: u32, /// Should we insert non-global addresses into the DHT? - pub allow_non_globals_in_dht: bool + pub allow_non_globals_in_dht: bool, + /// If true, uses the `//block-requests/` experimental protocol rather than + /// the legacy substream. This option is meant to be hard-wired to `true` in the future. + pub use_new_block_requests_protocol: bool, } impl NetworkConfiguration { @@ -430,7 +433,8 @@ impl NetworkConfiguration { use_yamux_flow_control: false, }, max_parallel_downloads: 5, - allow_non_globals_in_dht: false + allow_non_globals_in_dht: false, + use_new_block_requests_protocol: true, } } } diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index dca74c8d607..8222767e1a1 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -237,6 +237,9 @@ pub struct Protocol { metrics: Option, /// The `PeerId`'s of all boot nodes. boot_node_ids: Arc>, + /// If true, we send back requests as `CustomMessageOutcome` events. If false, we directly + /// dispatch requests using the legacy substream. + use_new_block_requests_protocol: bool, } #[derive(Default)] @@ -357,6 +360,7 @@ impl Protocol { block_announce_validator: Box + Send>, metrics_registry: Option<&Registry>, boot_node_ids: Arc>, + use_new_block_requests_protocol: bool, queue_size_report: Option, ) -> error::Result<(Protocol, sc_peerset::PeersetHandle)> { let info = chain.info(); @@ -433,6 +437,7 @@ impl Protocol { None }, boot_node_ids, + use_new_block_requests_protocol, }; Ok((protocol, peerset_handle)) @@ -517,6 +522,8 @@ impl Protocol { self.sync.num_sync_requests() } + /// Accepts a response from the legacy substream and determines what the corresponding + /// request was. fn handle_response( &mut self, who: PeerId, @@ -806,7 +813,9 @@ impl Protocol { self.peerset_handle.report_peer(who, reputation) } - fn on_block_response( + /// Must be called in response to a [`CustomMessageOutcome::BlockRequest`] being emitted. + /// Must contain the same `PeerId` and request that have been emitted. + pub fn on_block_response( &mut self, peer: PeerId, request: message::BlockRequest, @@ -857,8 +866,15 @@ impl Protocol { Ok(sync::OnBlockData::Import(origin, blocks)) => CustomMessageOutcome::BlockImport(origin, blocks), Ok(sync::OnBlockData::Request(peer, req)) => { - self.send_request(&peer, GenericMessage::BlockRequest(req)); - CustomMessageOutcome::None + if self.use_new_block_requests_protocol { + CustomMessageOutcome::BlockRequest { + target: peer, + request: req, + } + } else { + self.send_request(&peer, GenericMessage::BlockRequest(req)); + CustomMessageOutcome::None + } } Err(sync::BadPeer(id, repu)) => { self.behaviour.disconnect_peer(&id); @@ -1025,7 +1041,16 @@ impl Protocol { if info.roles.is_full() { match self.sync.new_peer(who.clone(), info.best_hash, info.best_number) { Ok(None) => (), - Ok(Some(req)) => self.send_request(&who, GenericMessage::BlockRequest(req)), + Ok(Some(req)) => { + if self.use_new_block_requests_protocol { + self.pending_messages.push_back(CustomMessageOutcome::BlockRequest { + target: who.clone(), + request: req, + }); + } else { + self.send_request(&who, GenericMessage::BlockRequest(req)) + } + }, Err(sync::BadPeer(id, repu)) => { self.behaviour.disconnect_peer(&id); self.peerset_handle.report_peer(id, repu) @@ -1327,29 +1352,30 @@ impl Protocol { ], }, ); + + if is_their_best { + self.pending_messages.push_back(CustomMessageOutcome::PeerNewBest(who, number)); + } + match blocks_to_import { Ok(sync::OnBlockData::Import(origin, blocks)) => { - if is_their_best { - self.pending_messages.push_back(CustomMessageOutcome::PeerNewBest(who, number)); - } CustomMessageOutcome::BlockImport(origin, blocks) }, Ok(sync::OnBlockData::Request(peer, req)) => { - self.send_request(&peer, GenericMessage::BlockRequest(req)); - if is_their_best { - CustomMessageOutcome::PeerNewBest(who, number) + if self.use_new_block_requests_protocol { + CustomMessageOutcome::BlockRequest { + target: peer, + request: req, + } } else { + self.send_request(&peer, GenericMessage::BlockRequest(req)); CustomMessageOutcome::None } } Err(sync::BadPeer(id, repu)) => { self.behaviour.disconnect_peer(&id); self.peerset_handle.report_peer(id, repu); - if is_their_best { - CustomMessageOutcome::PeerNewBest(who, number) - } else { - CustomMessageOutcome::None - } + CustomMessageOutcome::None } } } @@ -1443,14 +1469,21 @@ impl Protocol { for result in results { match result { Ok((id, req)) => { - let msg = GenericMessage::BlockRequest(req); - send_request( - &mut self.behaviour, - &mut self.context_data.stats, - &mut self.context_data.peers, - &id, - msg - ) + if self.use_new_block_requests_protocol { + self.pending_messages.push_back(CustomMessageOutcome::BlockRequest { + target: id, + request: req, + }); + } else { + let msg = GenericMessage::BlockRequest(req); + send_request( + &mut self.behaviour, + &mut self.context_data.stats, + &mut self.context_data.peers, + &id, + msg + ) + } } Err(sync::BadPeer(id, repu)) => { self.behaviour.disconnect_peer(&id); @@ -1719,7 +1752,9 @@ impl Protocol { ); } - fn on_finality_proof_response( + /// Must be called after a [`CustomMessageOutcome::FinalityProofRequest`] has been emitted, + /// to notify of the response having arrived. + pub fn on_finality_proof_response( &mut self, who: PeerId, response: message::FinalityProofResponse, @@ -1798,6 +1833,7 @@ impl Protocol { /// Outcome of an incoming custom message. #[derive(Debug)] +#[must_use] pub enum CustomMessageOutcome { BlockImport(BlockOrigin, Vec>), JustificationImport(Origin, B::Hash, NumberFor, Justification), @@ -1808,6 +1844,18 @@ pub enum CustomMessageOutcome { NotificationStreamClosed { remote: PeerId, protocols: Vec }, /// Messages have been received on one or more notifications protocols. NotificationsReceived { remote: PeerId, messages: Vec<(ConsensusEngineId, Bytes)> }, + /// A new block request must be emitted. + /// Once you have the response, you must call `Protocol::on_block_response`. + /// It is the responsibility of the handler to ensure that a timeout exists. + /// If the request times out, or the peer responds in an invalid way, the peer has to be + /// disconnect. This will inform the state machine that the request it has emitted is stale. + BlockRequest { target: PeerId, request: message::BlockRequest }, + /// A new finality proof request must be emitted. + /// Once you have the response, you must call `Protocol::on_finality_proof_response`. + /// It is the responsibility of the handler to ensure that a timeout exists. + /// If the request times out, or the peer responds in an invalid way, the peer has to be + /// disconnect. This will inform the state machine that the request it has emitted is stale. + FinalityProofRequest { target: PeerId, block_hash: B::Hash, request: Vec }, /// Peer has a reported a new head of chain. PeerNewBest(PeerId, NumberFor), None, @@ -1912,30 +1960,55 @@ impl NetworkBehaviour for Protocol { } for (id, r) in self.sync.block_requests() { - send_request( - &mut self.behaviour, - &mut self.context_data.stats, - &mut self.context_data.peers, - &id, - GenericMessage::BlockRequest(r) - ) + if self.use_new_block_requests_protocol { + let event = CustomMessageOutcome::BlockRequest { + target: id, + request: r, + }; + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + } else { + send_request( + &mut self.behaviour, + &mut self.context_data.stats, + &mut self.context_data.peers, + &id, + GenericMessage::BlockRequest(r) + ) + } } for (id, r) in self.sync.justification_requests() { - send_request( - &mut self.behaviour, - &mut self.context_data.stats, - &mut self.context_data.peers, - &id, - GenericMessage::BlockRequest(r) - ) + if self.use_new_block_requests_protocol { + let event = CustomMessageOutcome::BlockRequest { + target: id, + request: r, + }; + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + } else { + send_request( + &mut self.behaviour, + &mut self.context_data.stats, + &mut self.context_data.peers, + &id, + GenericMessage::BlockRequest(r) + ) + } } for (id, r) in self.sync.finality_proof_requests() { - send_request( - &mut self.behaviour, - &mut self.context_data.stats, - &mut self.context_data.peers, - &id, - GenericMessage::FinalityProofRequest(r)) + if self.use_new_block_requests_protocol { + let event = CustomMessageOutcome::FinalityProofRequest { + target: id, + block_hash: r.block, + request: r.request, + }; + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + } else { + send_request( + &mut self.behaviour, + &mut self.context_data.stats, + &mut self.context_data.peers, + &id, + GenericMessage::FinalityProofRequest(r)) + } } let event = match self.behaviour.poll(cx, params) { @@ -2082,6 +2155,7 @@ mod tests { Box::new(DefaultBlockAnnounceValidator::new(client.clone())), None, Default::default(), + true, None, ).unwrap(); diff --git a/client/network/src/protocol/block_requests.rs b/client/network/src/protocol/block_requests.rs index 6af5023d39f..f1981171af3 100644 --- a/client/network/src/protocol/block_requests.rs +++ b/client/network/src/protocol/block_requests.rs @@ -27,7 +27,7 @@ use codec::{Encode, Decode}; use crate::{ chain::Client, config::ProtocolId, - protocol::{api, message::BlockAttributes} + protocol::{api, message::{self, BlockAttributes}} }; use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; use libp2p::{ @@ -36,13 +36,14 @@ use libp2p::{ Multiaddr, PeerId, connection::ConnectionId, - upgrade::{InboundUpgrade, ReadOneError, UpgradeInfo, Negotiated}, + upgrade::{InboundUpgrade, OutboundUpgrade, ReadOneError, UpgradeInfo, Negotiated}, upgrade::{DeniedUpgrade, read_one, write_one} }, swarm::{ NegotiatedSubstream, NetworkBehaviour, NetworkBehaviourAction, + NotifyHandler, OneShotHandler, OneShotHandlerConfig, PollParameters, @@ -53,8 +54,10 @@ use prost::Message; use sp_runtime::{generic::BlockId, traits::{Block, Header, One, Zero}}; use std::{ cmp::min, + collections::VecDeque, io, iter, + marker::PhantomData, sync::Arc, time::Duration, task::{Context, Poll} @@ -64,11 +67,24 @@ use void::{Void, unreachable}; // Type alias for convenience. pub type Error = Box; +/// Event generated by the block requests behaviour. +#[derive(Debug)] +pub enum Event { + /// A response to a block request has arrived. + Response { + peer: PeerId, + /// The original request passed to `send_request`. + original_request: message::BlockRequest, + response: message::BlockResponse, + }, +} + /// Configuration options for `BlockRequests`. #[derive(Debug, Clone)] pub struct Config { max_block_data_response: u32, max_request_len: usize, + max_response_len: usize, inactivity_timeout: Duration, protocol: Bytes, } @@ -78,11 +94,13 @@ impl Config { /// /// - max. block data in response = 128 /// - max. request size = 1 MiB + /// - max. response size = 16 MiB /// - inactivity timeout = 15s pub fn new(id: &ProtocolId) -> Self { let mut c = Config { max_block_data_response: 128, max_request_len: 1024 * 1024, + max_response_len: 16 * 1024 * 1024, inactivity_timeout: Duration::from_secs(15), protocol: Bytes::new(), }; @@ -102,6 +120,12 @@ impl Config { self } + /// Limit the max. size of responses to our block requests. + pub fn set_max_response_len(&mut self, v: usize) -> &mut Self { + self.max_response_len = v; + self + } + /// Limit the max. duration the substream may remain inactive before closing it. pub fn set_inactivity_timeout(&mut self, v: Duration) -> &mut Self { self.inactivity_timeout = v; @@ -127,6 +151,8 @@ pub struct BlockRequests { chain: Arc>, /// Futures sending back the block request response. outgoing: FuturesUnordered>, + /// Events to return as soon as possible from `poll`. + pending_events: VecDeque, Event>>, } impl BlockRequests @@ -138,9 +164,50 @@ where config: cfg, chain, outgoing: FuturesUnordered::new(), + pending_events: VecDeque::new(), } } + /// Issue a new block request. + /// + /// If the response doesn't arrive in time, or if the remote answers improperly, the target + /// will be disconnected. + pub fn send_request(&mut self, target: &PeerId, req: message::BlockRequest) { + let protobuf_rq = api::v1::BlockRequest { + fields: u32::from_be_bytes([req.fields.bits(), 0, 0, 0]), + from_block: match req.from { + message::FromBlock::Hash(h) => + Some(api::v1::block_request::FromBlock::Hash(h.encode())), + message::FromBlock::Number(n) => + Some(api::v1::block_request::FromBlock::Number(n.encode())), + }, + to_block: req.to.map(|h| h.encode()).unwrap_or_default(), + direction: match req.direction { + message::Direction::Ascending => api::v1::Direction::Ascending as i32, + message::Direction::Descending => api::v1::Direction::Descending as i32, + }, + max_blocks: req.max.unwrap_or(0), + }; + + let mut buf = Vec::with_capacity(protobuf_rq.encoded_len()); + if let Err(err) = protobuf_rq.encode(&mut buf) { + log::warn!("failed to encode block request {:?}: {:?}", protobuf_rq, err); + return; + } + + log::trace!("enqueueing block request to {:?}: {:?}", target, protobuf_rq); + self.pending_events.push_back(NetworkBehaviourAction::NotifyHandler { + peer_id: target.clone(), + handler: NotifyHandler::Any, + event: OutboundProtocol { + request: buf, + original_request: req, + max_response_size: self.config.max_response_len, + protocol: self.config.protocol.clone(), + }, + }); + } + /// Callback, invoked when a new block request has been received from remote. fn on_block_request ( &mut self @@ -202,6 +269,12 @@ where let number = header.number().clone(); let hash = header.hash(); let parent_hash = header.parent_hash().clone(); + let justification = if get_justification { + self.chain.justification(&BlockId::Hash(hash))? + } else { + None + }; + let is_empty_justification = justification.as_ref().map(|j| j.is_empty()).unwrap_or(false); let block_data = api::v1::BlockData { hash: hash.encode(), @@ -221,11 +294,8 @@ where }, receipt: Vec::new(), message_queue: Vec::new(), - justification: if get_justification { - self.chain.justification(&BlockId::Hash(hash))?.unwrap_or(Vec::new()) - } else { - Vec::new() - } + justification: justification.unwrap_or(Vec::new()), + is_empty_justification, }; blocks.push(block_data); @@ -251,13 +321,14 @@ impl NetworkBehaviour for BlockRequests where B: Block { - type ProtocolsHandler = OneShotHandler>; - type OutEvent = Void; + type ProtocolsHandler = OneShotHandler, OutboundProtocol, NodeEvent>; + type OutEvent = Event; fn new_handler(&mut self) -> Self::ProtocolsHandler { - let p = Protocol { + let p = InboundProtocol { max_request_len: self.config.max_request_len, protocol: self.config.protocol.clone(), + marker: PhantomData, }; let mut cfg = OneShotHandlerConfig::default(); cfg.inactive_timeout = self.config.inactivity_timeout; @@ -278,44 +349,102 @@ where &mut self, peer: PeerId, connection: ConnectionId, - Request(request, mut stream): Request + node_event: NodeEvent ) { - match self.on_block_request(&peer, &request) { - Ok(res) => { - log::trace!("enqueueing block response for peer {} with {} blocks", peer, res.blocks.len()); - let mut data = Vec::with_capacity(res.encoded_len()); - if let Err(e) = res.encode(&mut data) { - log::debug!("error encoding block response for peer {}: {}", peer, e) - } else { - let future = async move { - if let Err(e) = write_one(&mut stream, data).await { - log::debug!("error writing block response: {}", e) + match node_event { + NodeEvent::Request(request, mut stream) => { + match self.on_block_request(&peer, &request) { + Ok(res) => { + log::trace!("enqueueing block response for peer {} with {} blocks", peer, res.blocks.len()); + let mut data = Vec::with_capacity(res.encoded_len()); + if let Err(e) = res.encode(&mut data) { + log::debug!("error encoding block response for peer {}: {}", peer, e) + } else { + let future = async move { + if let Err(e) = write_one(&mut stream, data).await { + log::debug!("error writing block response: {}", e) + } + }; + self.outgoing.push(future.boxed()) } - }; - self.outgoing.push(future.boxed()) + } + Err(e) => log::debug!("error handling block request from peer {}: {}", peer, e) + } + } + NodeEvent::Response(original_request, response) => { + log::trace!("received block response from peer {} with {} blocks", peer, response.blocks.len()); + let blocks = response.blocks.into_iter().map(|block_data| { + Ok(message::BlockData:: { + hash: Decode::decode(&mut block_data.hash.as_ref())?, + header: if !block_data.header.is_empty() { + Some(Decode::decode(&mut block_data.header.as_ref())?) + } else { + None + }, + body: if original_request.fields.contains(message::BlockAttributes::BODY) { + Some(block_data.body.iter().map(|body| { + Decode::decode(&mut body.as_ref()) + }).collect::, _>>()?) + } else { + None + }, + receipt: if !block_data.message_queue.is_empty() { + Some(block_data.receipt) + } else { + None + }, + message_queue: if !block_data.message_queue.is_empty() { + Some(block_data.message_queue) + } else { + None + }, + justification: if !block_data.justification.is_empty() { + Some(block_data.justification) + } else if block_data.is_empty_justification { + Some(Vec::new()) + } else { + None + }, + }) + }).collect::, codec::Error>>(); + + match blocks { + Ok(blocks) => { + let id = original_request.id; + let ev = Event::Response { + peer, + original_request, + response: message::BlockResponse:: { id, blocks }, + }; + self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); + } + Err(err) => { + log::debug!("failed to decode block response from peer {}: {}", peer, err); + } } } - Err(e) => log::debug!("error handling block request from peer {}: {}", peer, e) } } - fn poll(&mut self, cx: &mut Context, _: &mut impl PollParameters) -> Poll> { + fn poll(&mut self, cx: &mut Context, _: &mut impl PollParameters) + -> Poll, Event>> + { + if let Some(ev) = self.pending_events.pop_front() { + return Poll::Ready(ev); + } + while let Poll::Ready(Some(_)) = self.outgoing.poll_next_unpin(cx) {} Poll::Pending } } -/// The incoming block request. -/// -/// Holds the protobuf value and the connection substream which made the -/// request and over which to send the response. +/// Output type of inbound and outbound substream upgrades. #[derive(Debug)] -pub struct Request(api::v1::BlockRequest, T); - -impl From for Request { - fn from(v: Void) -> Self { - unreachable(v) - } +pub enum NodeEvent { + /// Incoming request from remote and substream to use for the response. + Request(api::v1::BlockRequest, T), + /// Incoming response from remote. + Response(message::BlockRequest, api::v1::BlockResponse), } /// Substream upgrade protocol. @@ -325,36 +454,39 @@ impl From for Request { /// will become visible via `inject_node_event` which then dispatches to the /// relevant callback to process the message and prepare a response. #[derive(Debug, Clone)] -pub struct Protocol { +pub struct InboundProtocol { /// The max. request length in bytes. max_request_len: usize, /// The protocol to use during upgrade negotiation. protocol: Bytes, + /// Type of the block. + marker: PhantomData, } -impl UpgradeInfo for Protocol { - type Info = Bytes; - type InfoIter = iter::Once; +impl UpgradeInfo for InboundProtocol { + type Info = Bytes; + type InfoIter = iter::Once; - fn protocol_info(&self) -> Self::InfoIter { - iter::once(self.protocol.clone()) - } + fn protocol_info(&self) -> Self::InfoIter { + iter::once(self.protocol.clone()) + } } -impl InboundUpgrade for Protocol +impl InboundUpgrade for InboundProtocol where + B: Block, T: AsyncRead + AsyncWrite + Unpin + Send + 'static { - type Output = Request; - type Error = ReadOneError; - type Future = BoxFuture<'static, Result>; + type Output = NodeEvent; + type Error = ReadOneError; + type Future = BoxFuture<'static, Result>; - fn upgrade_inbound(self, mut s: T, _: Self::Info) -> Self::Future { + fn upgrade_inbound(self, mut s: T, _: Self::Info) -> Self::Future { let future = async move { let len = self.max_request_len; let vec = read_one(&mut s, len).await?; match api::v1::BlockRequest::decode(&vec[..]) { - Ok(r) => Ok(Request(r, s)), + Ok(r) => Ok(NodeEvent::Request(r, s)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } }; @@ -362,3 +494,49 @@ where } } +/// Substream upgrade protocol. +/// +/// Sends a request to remote and awaits the response. +#[derive(Debug, Clone)] +pub struct OutboundProtocol { + /// The serialized protobuf request. + request: Vec, + /// The original request. Passed back through the API when the response comes back. + original_request: message::BlockRequest, + /// The max. response length in bytes. + max_response_size: usize, + /// The protocol to use for upgrade negotiation. + protocol: Bytes, +} + +impl UpgradeInfo for OutboundProtocol { + type Info = Bytes; + type InfoIter = iter::Once; + + fn protocol_info(&self) -> Self::InfoIter { + iter::once(self.protocol.clone()) + } +} + +impl OutboundUpgrade for OutboundProtocol +where + B: Block, + T: AsyncRead + AsyncWrite + Unpin + Send + 'static +{ + type Output = NodeEvent; + type Error = ReadOneError; + type Future = BoxFuture<'static, Result>; + + fn upgrade_outbound(self, mut s: T, _: Self::Info) -> Self::Future { + async move { + write_one(&mut s, &self.request).await?; + let vec = read_one(&mut s, self.max_response_size).await?; + + api::v1::BlockResponse::decode(&vec[..]) + .map(|r| NodeEvent::Response(self.original_request, r)) + .map_err(|e| { + ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) + }) + }.boxed() + } +} diff --git a/client/network/src/protocol/finality_requests.rs b/client/network/src/protocol/finality_requests.rs index b12b79f41bc..06167596179 100644 --- a/client/network/src/protocol/finality_requests.rs +++ b/client/network/src/protocol/finality_requests.rs @@ -27,7 +27,7 @@ use codec::{Encode, Decode}; use crate::{ chain::FinalityProofProvider, config::ProtocolId, - protocol::{api, message::BlockAttributes} + protocol::{api, message} }; use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; use libp2p::{ @@ -36,13 +36,14 @@ use libp2p::{ Multiaddr, PeerId, connection::ConnectionId, - upgrade::{InboundUpgrade, ReadOneError, UpgradeInfo, Negotiated}, + upgrade::{InboundUpgrade, OutboundUpgrade, ReadOneError, UpgradeInfo, Negotiated}, upgrade::{DeniedUpgrade, read_one, write_one} }, swarm::{ NegotiatedSubstream, NetworkBehaviour, NetworkBehaviourAction, + NotifyHandler, OneShotHandler, OneShotHandlerConfig, PollParameters, @@ -53,8 +54,10 @@ use prost::Message; use sp_runtime::{generic::BlockId, traits::{Block, Header, One, Zero}}; use std::{ cmp::min, + collections::VecDeque, io, iter, + marker::PhantomData, sync::Arc, time::Duration, task::{Context, Poll} @@ -64,10 +67,24 @@ use void::{Void, unreachable}; // Type alias for convenience. pub type Error = Box; +/// Event generated by the finality proof requests behaviour. +#[derive(Debug)] +pub enum Event { + /// A response to a finality proof request has arrived. + Response { + peer: PeerId, + /// Block hash originally passed to `send_request`. + block_hash: B::Hash, + /// Finality proof returned by the remote. + proof: Vec, + }, +} + /// Configuration options for `FinalityProofRequests`. #[derive(Debug, Clone)] pub struct Config { max_request_len: usize, + max_response_len: usize, inactivity_timeout: Duration, protocol: Bytes, } @@ -76,10 +93,12 @@ impl Config { /// Create a fresh configuration with the following options: /// /// - max. request size = 1 MiB + /// - max. response size = 1 MiB /// - inactivity timeout = 15s pub fn new(id: &ProtocolId) -> Self { let mut c = Config { max_request_len: 1024 * 1024, + max_response_len: 1024 * 1024, inactivity_timeout: Duration::from_secs(15), protocol: Bytes::new(), }; @@ -93,6 +112,12 @@ impl Config { self } + /// Limit the max. length of incoming finality proof response bytes. + pub fn set_max_response_len(&mut self, v: usize) -> &mut Self { + self.max_response_len = v; + self + } + /// Limit the max. duration the substream may remain inactive before closing it. pub fn set_inactivity_timeout(&mut self, v: Duration) -> &mut Self { self.inactivity_timeout = v; @@ -115,9 +140,11 @@ pub struct FinalityProofRequests { /// This behaviour's configuration. config: Config, /// How to construct finality proofs. - finality_proof_provider: Arc>, + finality_proof_provider: Option>>, /// Futures sending back the finality proof request responses. outgoing: FuturesUnordered>, + /// Events to return as soon as possible from `poll`. + pending_events: VecDeque, Event>>, } impl FinalityProofRequests @@ -125,14 +152,47 @@ where B: Block, { /// Initializes the behaviour. - pub fn new(cfg: Config, finality_proof_provider: Arc>) -> Self { + /// + /// If the proof provider is `None`, then the behaviour will not support the finality proof + /// requests protocol. + pub fn new(cfg: Config, finality_proof_provider: Option>>) -> Self { FinalityProofRequests { config: cfg, finality_proof_provider, outgoing: FuturesUnordered::new(), + pending_events: VecDeque::new(), } } + /// Issue a new finality proof request. + /// + /// If the response doesn't arrive in time, or if the remote answers improperly, the target + /// will be disconnected. + pub fn send_request(&mut self, target: &PeerId, block_hash: B::Hash, request: Vec) { + let protobuf_rq = api::v1::finality::FinalityProofRequest { + block_hash: block_hash.encode(), + request, + }; + + let mut buf = Vec::with_capacity(protobuf_rq.encoded_len()); + if let Err(err) = protobuf_rq.encode(&mut buf) { + log::warn!("failed to encode finality proof request {:?}: {:?}", protobuf_rq, err); + return; + } + + log::trace!("enqueueing finality proof request to {:?}: {:?}", target, protobuf_rq); + self.pending_events.push_back(NetworkBehaviourAction::NotifyHandler { + peer_id: target.clone(), + handler: NotifyHandler::Any, + event: OutboundProtocol { + request: buf, + block_hash, + max_response_size: self.config.max_response_len, + protocol: self.config.protocol.clone(), + }, + }); + } + /// Callback, invoked when a new finality request has been received from remote. fn on_finality_request(&mut self, peer: &PeerId, request: &api::v1::finality::FinalityProofRequest) -> Result @@ -141,10 +201,15 @@ where log::trace!(target: "sync", "Finality proof request from {} for {}", peer, block_hash); - let finality_proof = self.finality_proof_provider - .prove_finality(block_hash, &request.request)? - .unwrap_or(Vec::new()); // Note that an empty Vec is sent if no proof is available. + let finality_proof = if let Some(provider) = &self.finality_proof_provider { + provider + .prove_finality(block_hash, &request.request)? + .unwrap_or(Vec::new()) + } else { + log::error!("Answering a finality proof request while finality provider is empty"); + return Err(From::from("Empty finality proof provider".to_string())) + }; Ok(api::v1::finality::FinalityProofResponse { proof: finality_proof }) } @@ -154,13 +219,18 @@ impl NetworkBehaviour for FinalityProofRequests where B: Block { - type ProtocolsHandler = OneShotHandler>; - type OutEvent = Void; + type ProtocolsHandler = OneShotHandler, OutboundProtocol, NodeEvent>; + type OutEvent = Event; fn new_handler(&mut self) -> Self::ProtocolsHandler { - let p = Protocol { + let p = InboundProtocol { max_request_len: self.config.max_request_len, - protocol: self.config.protocol.clone(), + protocol: if self.finality_proof_provider.is_some() { + Some(self.config.protocol.clone()) + } else { + None + }, + marker: PhantomData, }; let mut cfg = OneShotHandlerConfig::default(); cfg.inactive_timeout = self.config.inactivity_timeout; @@ -181,44 +251,58 @@ where &mut self, peer: PeerId, connection: ConnectionId, - Request(request, mut stream): Request + event: NodeEvent ) { - match self.on_finality_request(&peer, &request) { - Ok(res) => { - log::trace!("enqueueing finality response for peer {}", peer); - let mut data = Vec::with_capacity(res.encoded_len()); - if let Err(e) = res.encode(&mut data) { - log::debug!("error encoding finality response for peer {}: {}", peer, e) - } else { - let future = async move { - if let Err(e) = write_one(&mut stream, data).await { - log::debug!("error writing finality response: {}", e) + match event { + NodeEvent::Request(request, mut stream) => { + match self.on_finality_request(&peer, &request) { + Ok(res) => { + log::trace!("enqueueing finality response for peer {}", peer); + let mut data = Vec::with_capacity(res.encoded_len()); + if let Err(e) = res.encode(&mut data) { + log::debug!("error encoding finality response for peer {}: {}", peer, e) + } else { + let future = async move { + if let Err(e) = write_one(&mut stream, data).await { + log::debug!("error writing finality response: {}", e) + } + }; + self.outgoing.push(future.boxed()) } - }; - self.outgoing.push(future.boxed()) + } + Err(e) => log::debug!("error handling finality request from peer {}: {}", peer, e) } } - Err(e) => log::debug!("error handling finality request from peer {}: {}", peer, e) + NodeEvent::Response(response, block_hash) => { + let ev = Event::Response { + peer, + block_hash, + proof: response.proof, + }; + self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); + } } } - fn poll(&mut self, cx: &mut Context, _: &mut impl PollParameters) -> Poll> { + fn poll(&mut self, cx: &mut Context, _: &mut impl PollParameters) + -> Poll, Event>> + { + if let Some(ev) = self.pending_events.pop_front() { + return Poll::Ready(ev); + } + while let Poll::Ready(Some(_)) = self.outgoing.poll_next_unpin(cx) {} Poll::Pending } } -/// The incoming finality proof request. -/// -/// Holds the protobuf value and the connection substream which made the -/// request and over which to send the response. +/// Output type of inbound and outbound substream upgrades. #[derive(Debug)] -pub struct Request(api::v1::finality::FinalityProofRequest, T); - -impl From for Request { - fn from(v: Void) -> Self { - unreachable(v) - } +pub enum NodeEvent { + /// Incoming request from remote and substream to use for the response. + Request(api::v1::finality::FinalityProofRequest, T), + /// Incoming response from remote. + Response(api::v1::finality::FinalityProofResponse, B::Hash), } /// Substream upgrade protocol. @@ -228,27 +312,33 @@ impl From for Request { /// will become visible via `inject_node_event` which then dispatches to the /// relevant callback to process the message and prepare a response. #[derive(Debug, Clone)] -pub struct Protocol { +pub struct InboundProtocol { /// The max. request length in bytes. max_request_len: usize, - /// The protocol to use during upgrade negotiation. - protocol: Bytes, + /// The protocol to use during upgrade negotiation. If `None`, then the incoming protocol + /// is simply disabled. + protocol: Option, + /// Marker to pin the block type. + marker: PhantomData, } -impl UpgradeInfo for Protocol { +impl UpgradeInfo for InboundProtocol { type Info = Bytes; - type InfoIter = iter::Once; + // This iterator will return either 0 elements if `self.protocol` is `None`, or 1 element if + // it is `Some`. + type InfoIter = std::option::IntoIter; fn protocol_info(&self) -> Self::InfoIter { - iter::once(self.protocol.clone()) + self.protocol.clone().into_iter() } } -impl InboundUpgrade for Protocol +impl InboundUpgrade for InboundProtocol where + B: Block, T: AsyncRead + AsyncWrite + Unpin + Send + 'static { - type Output = Request; + type Output = NodeEvent; type Error = ReadOneError; type Future = BoxFuture<'static, Result>; @@ -257,10 +347,56 @@ where let len = self.max_request_len; let vec = read_one(&mut s, len).await?; match api::v1::finality::FinalityProofRequest::decode(&vec[..]) { - Ok(r) => Ok(Request(r, s)), + Ok(r) => Ok(NodeEvent::Request(r, s)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } }.boxed() } } +/// Substream upgrade protocol. +/// +/// Sends a request to remote and awaits the response. +#[derive(Debug, Clone)] +pub struct OutboundProtocol { + /// The serialized protobuf request. + request: Vec, + /// Block hash that has been requested. + block_hash: B::Hash, + /// The max. response length in bytes. + max_response_size: usize, + /// The protocol to use for upgrade negotiation. + protocol: Bytes, +} + +impl UpgradeInfo for OutboundProtocol { + type Info = Bytes; + type InfoIter = iter::Once; + + fn protocol_info(&self) -> Self::InfoIter { + iter::once(self.protocol.clone()) + } +} + +impl OutboundUpgrade for OutboundProtocol +where + B: Block, + T: AsyncRead + AsyncWrite + Unpin + Send + 'static +{ + type Output = NodeEvent; + type Error = ReadOneError; + type Future = BoxFuture<'static, Result>; + + fn upgrade_outbound(self, mut s: T, _: Self::Info) -> Self::Future { + async move { + write_one(&mut s, &self.request).await?; + let vec = read_one(&mut s, self.max_response_size).await?; + + api::v1::finality::FinalityProofResponse::decode(&vec[..]) + .map(|r| NodeEvent::Response(r, self.block_hash)) + .map_err(|e| { + ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) + }) + }.boxed() + } +} diff --git a/client/network/src/protocol/schema/api.v1.proto b/client/network/src/protocol/schema/api.v1.proto index ccbf49d6661..a933c5811c1 100644 --- a/client/network/src/protocol/schema/api.v1.proto +++ b/client/network/src/protocol/schema/api.v1.proto @@ -51,5 +51,10 @@ message BlockData { bytes message_queue = 5; // optional // Justification if requested. bytes justification = 6; // optional + // True if justification should be treated as present but empty. + // This hack is unfortunately necessary because shortcomings in the protobuf format otherwise + // doesn't make in possible to differentiate between a lack of justification and an empty + // justification. + bool is_empty_justification = 7; // optional, false if absent } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 1391f8e06cc..f811266a134 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -211,6 +211,7 @@ impl NetworkWorker { params.block_announce_validator, params.metrics_registry.as_ref(), boot_node_ids.clone(), + params.network_config.use_new_block_requests_protocol, metrics.as_ref().map(|m| m.notifications_queues_size.clone()), )?; @@ -225,11 +226,9 @@ impl NetworkWorker { let config = protocol::block_requests::Config::new(¶ms.protocol_id); protocol::BlockRequests::new(config, params.chain.clone()) }; - let finality_proof_requests = if let Some(pb) = ¶ms.finality_proof_provider { + let finality_proof_requests = { let config = protocol::finality_requests::Config::new(¶ms.protocol_id); - Some(protocol::FinalityProofRequests::new(config, pb.clone())) - } else { - None + protocol::FinalityProofRequests::new(config, params.finality_proof_provider.clone()) }; let light_client_handler = { let config = protocol::light_client_handler::Config::new(¶ms.protocol_id); -- GitLab From 8da46bccb63d5afb103b08d2cfd8f78016d59069 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Fri, 24 Apr 2020 15:34:22 +0200 Subject: [PATCH 048/167] Exclude sp-*-fuzzer from release process (#5749) --- .gitlab-ci.yml | 2 +- primitives/arithmetic/fuzzer/Cargo.toml | 1 + primitives/phragmen/fuzzer/Cargo.toml | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e5eba33e554..6cdc822f96d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -39,7 +39,7 @@ variables: ARCH: "x86_64" # FIXME set to release CARGO_UNLEASH_INSTALL_PARAMS: "--version 1.0.0-alpha.10" - CARGO_UNLEASH_PKG_DEF: "--skip node node-* pallet-template pallet-example pallet-example-* subkey chain-spec-builder sp-arithmetic-fuzzer" + CARGO_UNLEASH_PKG_DEF: "--skip node node-* pallet-template pallet-example pallet-example-* subkey chain-spec-builder" CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER: "wasm-bindgen-test-runner" WASM_BINDGEN_TEST_TIMEOUT: 120 CHROMEDRIVER_ARGS: "--log-level=INFO --whitelisted-ips=127.0.0.1" diff --git a/primitives/arithmetic/fuzzer/Cargo.toml b/primitives/arithmetic/fuzzer/Cargo.toml index b7a63c45664..f145c2cd904 100644 --- a/primitives/arithmetic/fuzzer/Cargo.toml +++ b/primitives/arithmetic/fuzzer/Cargo.toml @@ -8,6 +8,7 @@ homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" description = "Fuzzer for fixed point arithmetic primitives." documentation = "https://docs.rs/sp-arithmetic-fuzzer" +publish = false [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/primitives/phragmen/fuzzer/Cargo.toml b/primitives/phragmen/fuzzer/Cargo.toml index 4c1e16906a6..a26e6e9f897 100644 --- a/primitives/phragmen/fuzzer/Cargo.toml +++ b/primitives/phragmen/fuzzer/Cargo.toml @@ -8,6 +8,7 @@ homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" description = "Fuzzer for phragmén implementation." documentation = "https://docs.rs/sp-phragmen-fuzzer" +publish = false [dependencies] sp-phragmen = { version = "2.0.0-alpha.5", path = ".." } -- GitLab From 2f77fc9b2e6f52e4a6dc9954d97b0921a1a37d90 Mon Sep 17 00:00:00 2001 From: Joseph Mark Date: Fri, 24 Apr 2020 15:35:31 +0200 Subject: [PATCH 049/167] Use internal room ids in Process.toml (#5772) --- Process.toml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Process.toml b/Process.toml index a81a6495bdd..ecaf5c7120f 100644 --- a/Process.toml +++ b/Process.toml @@ -1,24 +1,24 @@ [Networking] owner = "tomaka" whitelist = [] -matrix_room_id = "#libp2p:matrix.parity.io" +matrix_room_id = "!vUADSGcyXmxhKLeDsW:matrix.parity.io" [Client] owner = "gnunicorn" whitelist = [] -matrix_room_id = "#substrate:matrix.parity.io" +matrix_room_id = "!aenJixaHcSKbJOWxYk:matrix.parity.io" [Runtime] owner = "gavofyork" whitelist = [] -matrix_room_id = "#substrate-frame:matrix.parity.io" +matrix_room_id = "!yBKstWVBkwzUkPslsp:matrix.parity.io" [Consensus] owner = "andresilva" whitelist = [] -matrix_room_id = "#consensus-team:matrix.parity.io" +matrix_room_id = "!XdNWDTfVNFVixljKZU:matrix.parity.io" [Smart Contracts] owner = "pepyakin" whitelist = [] -matrix_room_id = "#substrate-frame:matrix.parity.io" +matrix_room_id = "!yBKstWVBkwzUkPslsp:matrix.parity.io" -- GitLab From 741c9f5563cda501b0305083c2510050f7211dec Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Fri, 24 Apr 2020 16:47:00 +0300 Subject: [PATCH 050/167] rename `state-trace` to `storage` (#5766) --- primitives/state-machine/src/ext.rs | 36 ++++++++++++++--------------- primitives/state-machine/src/lib.rs | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 399bfc69d86..60c7ef38002 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -156,7 +156,7 @@ where let _guard = sp_panic_handler::AbortGuard::force_abort(); let result = self.overlay.storage(key).map(|x| x.map(|x| x.to_vec())).unwrap_or_else(|| self.backend.storage(key).expect(EXT_NOT_ALLOWED_TO_FAIL)); - trace!(target: "state-trace", "{:04x}: Get {}={:?}", + trace!(target: "state", "{:04x}: Get {}={:?}", self.id, HexDisplay::from(&key), result.as_ref().map(HexDisplay::from) @@ -171,7 +171,7 @@ where .map(|x| x.map(|x| H::hash(x))) .unwrap_or_else(|| self.backend.storage_hash(key).expect(EXT_NOT_ALLOWED_TO_FAIL)); - trace!(target: "state-trace", "{:04x}: Hash {}={:?}", + trace!(target: "state", "{:04x}: Hash {}={:?}", self.id, HexDisplay::from(&key), result, @@ -193,7 +193,7 @@ where .expect(EXT_NOT_ALLOWED_TO_FAIL) ); - trace!(target: "state-trace", "{:04x}: GetChild({}) {}={:?}", + trace!(target: "state", "{:04x}: GetChild({}) {}={:?}", self.id, HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), @@ -217,7 +217,7 @@ where .expect(EXT_NOT_ALLOWED_TO_FAIL) ); - trace!(target: "state-trace", "{:04x}: ChildHash({}) {}={:?}", + trace!(target: "state", "{:04x}: ChildHash({}) {}={:?}", self.id, HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), @@ -234,7 +234,7 @@ where _ => self.backend.exists_storage(key).expect(EXT_NOT_ALLOWED_TO_FAIL), }; - trace!(target: "state-trace", "{:04x}: Exists {}={:?}", + trace!(target: "state", "{:04x}: Exists {}={:?}", self.id, HexDisplay::from(&key), result, @@ -257,7 +257,7 @@ where .expect(EXT_NOT_ALLOWED_TO_FAIL), }; - trace!(target: "state-trace", "{:04x}: ChildExists({}) {}={:?}", + trace!(target: "state", "{:04x}: ChildExists({}) {}={:?}", self.id, HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), @@ -309,7 +309,7 @@ where } fn place_storage(&mut self, key: StorageKey, value: Option) { - trace!(target: "state-trace", "{:04x}: Put {}={:?}", + trace!(target: "state", "{:04x}: Put {}={:?}", self.id, HexDisplay::from(&key), value.as_ref().map(HexDisplay::from) @@ -330,7 +330,7 @@ where key: StorageKey, value: Option, ) { - trace!(target: "state-trace", "{:04x}: PutChild({}) {}={:?}", + trace!(target: "state", "{:04x}: PutChild({}) {}={:?}", self.id, HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&key), @@ -346,7 +346,7 @@ where &mut self, child_info: &ChildInfo, ) { - trace!(target: "state-trace", "{:04x}: KillChild({})", + trace!(target: "state", "{:04x}: KillChild({})", self.id, HexDisplay::from(&child_info.storage_key()), ); @@ -360,7 +360,7 @@ where } fn clear_prefix(&mut self, prefix: &[u8]) { - trace!(target: "state-trace", "{:04x}: ClearPrefix {}", + trace!(target: "state", "{:04x}: ClearPrefix {}", self.id, HexDisplay::from(&prefix), ); @@ -382,7 +382,7 @@ where child_info: &ChildInfo, prefix: &[u8], ) { - trace!(target: "state-trace", "{:04x}: ClearChildPrefix({}) {}", + trace!(target: "state", "{:04x}: ClearChildPrefix({}) {}", self.id, HexDisplay::from(&child_info.storage_key()), HexDisplay::from(&prefix), @@ -403,7 +403,7 @@ where fn storage_root(&mut self) -> Vec { let _guard = sp_panic_handler::AbortGuard::force_abort(); if let Some(ref root) = self.storage_transaction_cache.transaction_storage_root { - trace!(target: "state-trace", "{:04x}: Root (cached) {}", + trace!(target: "state", "{:04x}: Root (cached) {}", self.id, HexDisplay::from(&root.as_ref()), ); @@ -411,7 +411,7 @@ where } let root = self.overlay.storage_root(self.backend, self.storage_transaction_cache); - trace!(target: "state-trace", "{:04x}: Root {}", self.id, HexDisplay::from(&root.as_ref())); + trace!(target: "state", "{:04x}: Root {}", self.id, HexDisplay::from(&root.as_ref())); root.encode() } @@ -429,7 +429,7 @@ where .unwrap_or( empty_child_trie_root::>() ); - trace!(target: "state-trace", "{:04x}: ChildRoot({}) (cached) {}", + trace!(target: "state", "{:04x}: ChildRoot({}) (cached) {}", self.id, HexDisplay::from(&storage_key), HexDisplay::from(&root.as_ref()), @@ -463,7 +463,7 @@ where self.overlay.set_storage(prefixed_storage_key.into_inner(), Some(root.clone())); } - trace!(target: "state-trace", "{:04x}: ChildRoot({}) {}", + trace!(target: "state", "{:04x}: ChildRoot({}) {}", self.id, HexDisplay::from(&storage_key.as_ref()), HexDisplay::from(&root.as_ref()), @@ -477,7 +477,7 @@ where .unwrap_or( empty_child_trie_root::>() ); - trace!(target: "state-trace", "{:04x}: ChildRoot({}) (no change) {}", + trace!(target: "state", "{:04x}: ChildRoot({}) (no change) {}", self.id, HexDisplay::from(&storage_key.as_ref()), HexDisplay::from(&root.as_ref()), @@ -494,7 +494,7 @@ where self.changes_trie_state.as_ref(), Decode::decode(&mut &parent_hash[..]).map_err(|e| trace!( - target: "state-trace", + target: "state", "Failed to decode changes root parent hash: {}", e, ) @@ -503,7 +503,7 @@ where self.storage_transaction_cache, ); - trace!(target: "state-trace", "{:04x}: ChangesRoot({}) {:?}", + trace!(target: "state", "{:04x}: ChangesRoot({}) {:?}", self.id, HexDisplay::from(&parent_hash), root, diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index 2ff10d4aff9..efe289b5dcc 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -301,7 +301,7 @@ impl<'a, B, H, N, Exec> StateMachine<'a, B, H, N, Exec> where let id = ext.id; trace!( - target: "state-trace", "{:04x}: Call {} at {:?}. Input={:?}", + target: "state", "{:04x}: Call {} at {:?}. Input={:?}", id, self.method, self.backend, @@ -318,7 +318,7 @@ impl<'a, B, H, N, Exec> StateMachine<'a, B, H, N, Exec> where ); trace!( - target: "state-trace", "{:04x}: Return. Native={:?}, Result={:?}", + target: "state", "{:04x}: Return. Native={:?}, Result={:?}", id, was_native, result, -- GitLab From 8c755a266e0125afbfe22ed983979f90881c9290 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Fri, 24 Apr 2020 15:59:14 +0200 Subject: [PATCH 051/167] babe: support online configuration upgrades (#5514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * babe: support online configuration upgrades * Switch to use NextConfigDescriptor instead of changing runtime interface * Fix tests * epoch-changes: map function that allows converting with different epoch types * Add migration script for the epoch config change * Fix migration tests * Fix migration: Epoch should be EpochV0 * Update client/consensus/babe/src/lib.rs Co-Authored-By: André Silva <123550+andresilva@users.noreply.github.com> * Fix new epochChanges version * Fix unused imports Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> --- bin/node/runtime/src/lib.rs | 4 +- client/consensus/babe/rpc/src/lib.rs | 4 +- client/consensus/babe/src/authorship.rs | 7 +- client/consensus/babe/src/aux_schema.rs | 35 ++++-- client/consensus/babe/src/lib.rs | 138 +++++++++++++++------- client/consensus/babe/src/migration.rs | 64 ++++++++++ client/consensus/babe/src/tests.rs | 16 ++- client/consensus/babe/src/verification.rs | 7 +- client/consensus/epochs/src/lib.rs | 49 ++++++++ primitives/consensus/babe/src/digests.rs | 21 +++- primitives/consensus/babe/src/lib.rs | 33 ++++-- test-utils/runtime/src/lib.rs | 8 +- 12 files changed, 300 insertions(+), 86 deletions(-) create mode 100644 client/consensus/babe/src/migration.rs diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 16f355e6d60..806ed5460df 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -791,13 +791,13 @@ impl_runtime_apis! { } impl sp_consensus_babe::BabeApi for Runtime { - fn configuration() -> sp_consensus_babe::BabeConfiguration { + fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration { // The choice of `c` parameter (where `1 - c` represents the // probability of a slot being empty), is done in accordance to the // slot duration and expected target block time, for safely // resisting network delays of maximum two seconds. // - sp_consensus_babe::BabeConfiguration { + sp_consensus_babe::BabeGenesisConfiguration { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), c: PRIMARY_PROBABILITY, diff --git a/client/consensus/babe/rpc/src/lib.rs b/client/consensus/babe/rpc/src/lib.rs index cb78504b1f7..296b5cf2378 100644 --- a/client/consensus/babe/rpc/src/lib.rs +++ b/client/consensus/babe/rpc/src/lib.rs @@ -118,7 +118,7 @@ impl BabeApi for BabeRPCHandler for slot_number in epoch_start..epoch_end { let epoch = epoch_data(&shared_epoch, &client, &babe_config, slot_number, &select_chain)?; - if let Some((claim, key)) = authorship::claim_slot(slot_number, &epoch, &babe_config, &keystore) { + if let Some((claim, key)) = authorship::claim_slot(slot_number, &epoch, &keystore) { match claim { PreDigest::Primary { .. } => { claims.entry(key.public()).or_default().primary.push(slot_number); @@ -184,7 +184,7 @@ fn epoch_data( &parent.hash(), parent.number().clone(), slot_number, - |slot| babe_config.genesis_epoch(slot), + |slot| Epoch::genesis(&babe_config, slot), ) .map_err(|e| Error::Consensus(ConsensusError::ChainLookup(format!("{:?}", e))))? .ok_or(Error::Consensus(ConsensusError::InvalidAuthoritiesSet)) diff --git a/client/consensus/babe/src/authorship.rs b/client/consensus/babe/src/authorship.rs index 074e582bff2..165ff0ca4fe 100644 --- a/client/consensus/babe/src/authorship.rs +++ b/client/consensus/babe/src/authorship.rs @@ -19,7 +19,7 @@ use merlin::Transcript; use sp_consensus_babe::{ AuthorityId, BabeAuthorityWeight, BABE_ENGINE_ID, BABE_VRF_PREFIX, - SlotNumber, AuthorityPair, BabeConfiguration + SlotNumber, AuthorityPair, }; use sp_consensus_babe::digests::{PreDigest, PrimaryPreDigest, SecondaryPreDigest}; use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; @@ -147,12 +147,11 @@ fn claim_secondary_slot( pub fn claim_slot( slot_number: SlotNumber, epoch: &Epoch, - config: &BabeConfiguration, keystore: &KeyStorePtr, ) -> Option<(PreDigest, AuthorityPair)> { - claim_primary_slot(slot_number, epoch, config.c, keystore) + claim_primary_slot(slot_number, epoch, epoch.config.c, keystore) .or_else(|| { - if config.secondary_slots { + if epoch.config.secondary_slots { claim_secondary_slot( slot_number, &epoch.authorities, diff --git a/client/consensus/babe/src/aux_schema.rs b/client/consensus/babe/src/aux_schema.rs index e014c8975ac..9907fcbd724 100644 --- a/client/consensus/babe/src/aux_schema.rs +++ b/client/consensus/babe/src/aux_schema.rs @@ -24,13 +24,13 @@ use codec::{Decode, Encode}; use sc_client_api::backend::AuxStore; use sp_blockchain::{Result as ClientResult, Error as ClientError}; use sp_runtime::traits::Block as BlockT; -use sp_consensus_babe::BabeBlockWeight; +use sp_consensus_babe::{BabeBlockWeight, BabeGenesisConfiguration}; use sc_consensus_epochs::{EpochChangesFor, SharedEpochChanges, migration::EpochChangesForV0}; -use crate::Epoch; +use crate::{Epoch, migration::EpochV0}; const BABE_EPOCH_CHANGES_VERSION: &[u8] = b"babe_epoch_changes_version"; const BABE_EPOCH_CHANGES_KEY: &[u8] = b"babe_epoch_changes"; -const BABE_EPOCH_CHANGES_CURRENT_VERSION: u32 = 1; +const BABE_EPOCH_CHANGES_CURRENT_VERSION: u32 = 2; fn block_weight_key(block_hash: H) -> Vec { (b"block_weight", block_hash).encode() @@ -53,14 +53,19 @@ fn load_decode(backend: &B, key: &[u8]) -> ClientResult> /// Load or initialize persistent epoch change data from backend. pub(crate) fn load_epoch_changes( backend: &B, + config: &BabeGenesisConfiguration, ) -> ClientResult> { let version = load_decode::<_, u32>(backend, BABE_EPOCH_CHANGES_VERSION)?; let maybe_epoch_changes = match version { - None => load_decode::<_, EpochChangesForV0>( + None => load_decode::<_, EpochChangesForV0>( backend, BABE_EPOCH_CHANGES_KEY, - )?.map(|v0| v0.migrate()), + )?.map(|v0| v0.migrate().map(|_, _, epoch| epoch.migrate(config))), + Some(1) => load_decode::<_, EpochChangesFor>( + backend, + BABE_EPOCH_CHANGES_KEY, + )?.map(|v1| v1.map(|_, _, epoch| epoch.migrate(config))), Some(BABE_EPOCH_CHANGES_CURRENT_VERSION) => load_decode::<_, EpochChangesFor>( backend, BABE_EPOCH_CHANGES_KEY, @@ -131,18 +136,19 @@ pub(crate) fn load_block_weight( #[cfg(test)] mod test { use super::*; - use crate::Epoch; + use crate::migration::EpochV0; use fork_tree::ForkTree; use substrate_test_runtime_client; use sp_core::H256; use sp_runtime::traits::NumberFor; + use sp_consensus_babe::BabeGenesisConfiguration; use sc_consensus_epochs::{PersistedEpoch, PersistedEpochHeader, EpochHeader}; use sp_consensus::Error as ConsensusError; use sc_network_test::Block as TestBlock; #[test] fn load_decode_from_v0_epoch_changes() { - let epoch = Epoch { + let epoch = EpochV0 { start_slot: 0, authorities: vec![], randomness: [0; 32], @@ -160,7 +166,7 @@ mod test { client.insert_aux( &[(BABE_EPOCH_CHANGES_KEY, - &EpochChangesForV0::::from_raw(v0_tree).encode()[..])], + &EpochChangesForV0::::from_raw(v0_tree).encode()[..])], &[], ).unwrap(); @@ -169,7 +175,16 @@ mod test { None, ); - let epoch_changes = load_epoch_changes::(&client).unwrap(); + let epoch_changes = load_epoch_changes::( + &client, &BabeGenesisConfiguration { + slot_duration: 10, + epoch_length: 4, + c: (3, 10), + genesis_authorities: Vec::new(), + randomness: Default::default(), + secondary_slots: true, + }, + ).unwrap(); assert!( epoch_changes.lock() @@ -192,7 +207,7 @@ mod test { assert_eq!( load_decode::<_, u32>(&client, BABE_EPOCH_CHANGES_VERSION).unwrap(), - Some(1), + Some(2), ); } } diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index 59b49541821..bac4e02897d 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -59,11 +59,13 @@ #![forbid(unsafe_code)] #![warn(missing_docs)] pub use sp_consensus_babe::{ - BabeApi, ConsensusLog, BABE_ENGINE_ID, SlotNumber, BabeConfiguration, + BabeApi, ConsensusLog, BABE_ENGINE_ID, SlotNumber, + BabeEpochConfiguration, BabeGenesisConfiguration, AuthorityId, AuthorityPair, AuthoritySignature, BabeAuthorityWeight, VRF_OUTPUT_LENGTH, digests::{ - CompatibleDigestItem, NextEpochDescriptor, PreDigest, PrimaryPreDigest, SecondaryPreDigest, + CompatibleDigestItem, NextEpochDescriptor, NextConfigDescriptor, + PreDigest, PrimaryPreDigest, SecondaryPreDigest, }, }; pub use sp_consensus::SyncOracle; @@ -118,36 +120,43 @@ use sp_api::ApiExt; mod aux_schema; mod verification; +mod migration; pub mod authorship; #[cfg(test)] mod tests; /// BABE epoch information -#[derive(Decode, Encode, Default, PartialEq, Eq, Clone, Debug)] +#[derive(Decode, Encode, PartialEq, Eq, Clone, Debug)] pub struct Epoch { - /// The epoch index + /// The epoch index. pub epoch_index: u64, - /// The starting slot of the epoch, + /// The starting slot of the epoch. pub start_slot: SlotNumber, - /// The duration of this epoch + /// The duration of this epoch. pub duration: SlotNumber, - /// The authorities and their weights + /// The authorities and their weights. pub authorities: Vec<(AuthorityId, BabeAuthorityWeight)>, - /// Randomness for this epoch + /// Randomness for this epoch. pub randomness: [u8; VRF_OUTPUT_LENGTH], + /// Configuration of the epoch. + pub config: BabeEpochConfiguration, } impl EpochT for Epoch { - type NextEpochDescriptor = NextEpochDescriptor; + type NextEpochDescriptor = (NextEpochDescriptor, BabeEpochConfiguration); type SlotNumber = SlotNumber; - fn increment(&self, descriptor: NextEpochDescriptor) -> Epoch { + fn increment( + &self, + (descriptor, config): (NextEpochDescriptor, BabeEpochConfiguration) + ) -> Epoch { Epoch { epoch_index: self.epoch_index + 1, start_slot: self.start_slot + self.duration, duration: self.duration, authorities: descriptor.authorities, randomness: descriptor.randomness, + config, } } @@ -160,6 +169,27 @@ impl EpochT for Epoch { } } +impl Epoch { + /// Create the genesis epoch (epoch #0). This is defined to start at the slot of + /// the first block, so that has to be provided. + pub fn genesis( + genesis_config: &BabeGenesisConfiguration, + slot_number: SlotNumber + ) -> Epoch { + Epoch { + epoch_index: 0, + start_slot: slot_number, + duration: genesis_config.epoch_length, + authorities: genesis_config.genesis_authorities.clone(), + randomness: genesis_config.randomness.clone(), + config: BabeEpochConfiguration { + c: genesis_config.c, + secondary_slots: genesis_config.secondary_slots, + }, + } + } +} + #[derive(derive_more::Display, Debug)] enum Error { #[display(fmt = "Multiple BABE pre-runtime digests, rejecting!")] @@ -168,6 +198,8 @@ enum Error { NoPreRuntimeDigest, #[display(fmt = "Multiple BABE epoch change digests, rejecting!")] MultipleEpochChangeDigests, + #[display(fmt = "Multiple BABE config change digests, rejecting!")] + MultipleConfigChangeDigests, #[display(fmt = "Could not extract timestamp and slot: {:?}", _0)] Extraction(sp_consensus::Error), #[display(fmt = "Could not fetch epoch at {:?}", _0)] @@ -200,6 +232,8 @@ enum Error { FetchParentHeader(sp_blockchain::Error), #[display(fmt = "Expected epoch change to happen at {:?}, s{}", _0, _1)] ExpectedEpochChange(B::Hash, u64), + #[display(fmt = "Unexpected config change")] + UnexpectedConfigChange, #[display(fmt = "Unexpected epoch change")] UnexpectedEpochChange, #[display(fmt = "Parent block of {} has no associated weight", _0)] @@ -236,7 +270,7 @@ pub static INTERMEDIATE_KEY: &[u8] = b"babe1"; // and `super::babe::Config` can be eliminated. // https://github.com/paritytech/substrate/issues/2434 #[derive(Clone)] -pub struct Config(sc_consensus_slots::SlotDuration); +pub struct Config(sc_consensus_slots::SlotDuration); impl Config { /// Either fetch the slot duration from disk or compute it from the genesis @@ -253,24 +287,12 @@ impl Config { } } } - - /// Create the genesis epoch (epoch #0). This is defined to start at the slot of - /// the first block, so that has to be provided. - pub fn genesis_epoch(&self, slot_number: SlotNumber) -> Epoch { - Epoch { - epoch_index: 0, - start_slot: slot_number, - duration: self.epoch_length, - authorities: self.genesis_authorities.clone(), - randomness: self.randomness.clone(), - } - } } impl std::ops::Deref for Config { - type Target = BabeConfiguration; + type Target = BabeGenesisConfiguration; - fn deref(&self) -> &BabeConfiguration { + fn deref(&self) -> &BabeGenesisConfiguration { &*self.0 } } @@ -428,7 +450,7 @@ impl sc_consensus_slots::SimpleSlotWorker for BabeWork fn authorities_len(&self, epoch_descriptor: &Self::EpochData) -> Option { self.epoch_changes.lock() - .viable_epoch(&epoch_descriptor, |slot| self.config.genesis_epoch(slot)) + .viable_epoch(&epoch_descriptor, |slot| Epoch::genesis(&self.config, slot)) .map(|epoch| epoch.as_ref().authorities.len()) } @@ -443,9 +465,8 @@ impl sc_consensus_slots::SimpleSlotWorker for BabeWork slot_number, self.epoch_changes.lock().viable_epoch( &epoch_descriptor, - |slot| self.config.genesis_epoch(slot) + |slot| Epoch::genesis(&self.config, slot) )?.as_ref(), - &*self.config, &self.keystore, ); @@ -599,6 +620,24 @@ fn find_next_epoch_digest(header: &B::Header) Ok(epoch_digest) } +/// Extract the BABE config change digest from the given header, if it exists. +fn find_next_config_digest(header: &B::Header) + -> Result, Error> + where DigestItemFor: CompatibleDigestItem, +{ + let mut config_digest: Option<_> = None; + for log in header.digest().logs() { + trace!(target: "babe", "Checking log {:?}, looking for epoch change digest.", log); + let log = log.try_to::(OpaqueDigestItemId::Consensus(&BABE_ENGINE_ID)); + match (log, config_digest.is_some()) { + (Some(ConsensusLog::NextConfigData(_)), true) => return Err(babe_err(Error::MultipleConfigChangeDigests)), + (Some(ConsensusLog::NextConfigData(config)), false) => config_digest = Some(config), + _ => trace!(target: "babe", "Ignoring digest not meant for us"), + } + } + + Ok(config_digest) +} #[derive(Default, Clone)] struct TimeSource(Arc, Vec<(Instant, u64)>)>>); @@ -726,7 +765,7 @@ impl Verifier for BabeVerifier where .ok_or_else(|| Error::::FetchEpoch(parent_hash))?; let viable_epoch = epoch_changes.viable_epoch( &epoch_descriptor, - |slot| self.config.genesis_epoch(slot) + |slot| Epoch::genesis(&self.config, slot) ).ok_or_else(|| Error::::FetchEpoch(parent_hash))?; // We add one to the current slot to allow for some small drift. @@ -736,7 +775,6 @@ impl Verifier for BabeVerifier where pre_digest: Some(pre_digest.clone()), slot_now: slot_now + 1, epoch: viable_epoch.as_ref(), - config: &self.config, }; match verification::check_header::(v_params)? { @@ -958,19 +996,32 @@ impl BlockImport for BabeBlockImport(&block.header) .map_err(|e| ConsensusError::ClientImport(e.to_string()))?; + let next_config_digest = find_next_config_digest::(&block.header) + .map_err(|e| ConsensusError::ClientImport(e.to_string()))?; - match (first_in_epoch, next_epoch_digest.is_some()) { - (true, true) => {}, - (false, false) => {}, - (true, false) => { + match (first_in_epoch, next_epoch_digest.is_some(), next_config_digest.is_some()) { + (true, true, _) => {}, + (false, false, false) => {}, + (false, false, true) => { + return Err( + ConsensusError::ClientImport( + babe_err(Error::::UnexpectedConfigChange).into(), + ) + ) + }, + (true, false, _) => { return Err( ConsensusError::ClientImport( babe_err(Error::::ExpectedEpochChange(hash, slot_number)).into(), ) - ); + ) }, - (false, true) => { - return Err(ConsensusError::ClientImport(Error::::UnexpectedEpochChange.into())); + (false, true, _) => { + return Err( + ConsensusError::ClientImport( + babe_err(Error::::UnexpectedEpochChange).into(), + ) + ) }, } @@ -985,11 +1036,15 @@ impl BlockImport for BabeBlockImport::FetchEpoch(parent_hash).into()) })?; + let epoch_config = next_config_digest.unwrap_or_else( + || viable_epoch.as_ref().config.clone() + ); + // restrict info logging during initial sync to avoid spam let log_level = if block.origin == BlockOrigin::NetworkInitialSync { log::Level::Debug @@ -1006,7 +1061,7 @@ impl BlockImport for BabeBlockImport( ) -> ClientResult<(BabeBlockImport, BabeLink)> where Client: AuxStore + HeaderBackend + HeaderMetadata, { - let epoch_changes = aux_schema::load_epoch_changes::(&*client)?; + let epoch_changes = aux_schema::load_epoch_changes::(&*client, &config)?; let link = BabeLink { epoch_changes: epoch_changes.clone(), time_source: Default::default(), @@ -1245,13 +1300,12 @@ pub mod test_helpers { &parent.hash(), parent.number().clone(), slot_number, - |slot| link.config.genesis_epoch(slot), + |slot| Epoch::genesis(&link.config, slot), ).unwrap().unwrap(); authorship::claim_slot( slot_number, &epoch, - &link.config, keystore, ).map(|(digest, _)| digest) } diff --git a/client/consensus/babe/src/migration.rs b/client/consensus/babe/src/migration.rs new file mode 100644 index 00000000000..837704abb1b --- /dev/null +++ b/client/consensus/babe/src/migration.rs @@ -0,0 +1,64 @@ +use codec::{Encode, Decode}; +use sc_consensus_epochs::Epoch as EpochT; +use crate::{ + Epoch, SlotNumber, AuthorityId, BabeAuthorityWeight, BabeGenesisConfiguration, + BabeEpochConfiguration, VRF_OUTPUT_LENGTH, NextEpochDescriptor, +}; + +/// BABE epoch information, version 0. +#[derive(Decode, Encode, PartialEq, Eq, Clone, Debug)] +pub struct EpochV0 { + /// The epoch index. + pub epoch_index: u64, + /// The starting slot of the epoch. + pub start_slot: SlotNumber, + /// The duration of this epoch. + pub duration: SlotNumber, + /// The authorities and their weights. + pub authorities: Vec<(AuthorityId, BabeAuthorityWeight)>, + /// Randomness for this epoch. + pub randomness: [u8; VRF_OUTPUT_LENGTH], +} + +impl EpochT for EpochV0 { + type NextEpochDescriptor = NextEpochDescriptor; + type SlotNumber = SlotNumber; + + fn increment( + &self, + descriptor: NextEpochDescriptor + ) -> EpochV0 { + EpochV0 { + epoch_index: self.epoch_index + 1, + start_slot: self.start_slot + self.duration, + duration: self.duration, + authorities: descriptor.authorities, + randomness: descriptor.randomness, + } + } + + fn start_slot(&self) -> SlotNumber { + self.start_slot + } + + fn end_slot(&self) -> SlotNumber { + self.start_slot + self.duration + } +} + +impl EpochV0 { + /// Migrate the sturct to current epoch version. + pub fn migrate(self, config: &BabeGenesisConfiguration) -> Epoch { + Epoch { + epoch_index: self.epoch_index, + start_slot: self.start_slot, + duration: self.duration, + authorities: self.authorities, + randomness: self.randomness, + config: BabeEpochConfiguration { + c: config.c, + secondary_slots: config.secondary_slots, + }, + } + } +} diff --git a/client/consensus/babe/src/tests.rs b/client/consensus/babe/src/tests.rs index 20b924669d6..3c433b40305 100644 --- a/client/consensus/babe/src/tests.rs +++ b/client/consensus/babe/src/tests.rs @@ -127,7 +127,7 @@ impl DummyProposer { &self.parent_hash, self.parent_number, this_slot, - |slot| self.factory.config.genesis_epoch(slot), + |slot| Epoch::genesis(&self.factory.config, slot), ) .expect("client has data to find epoch") .expect("can compute epoch for baked block"); @@ -505,9 +505,13 @@ fn can_author_block() { randomness: [0; 32], epoch_index: 1, duration: 100, + config: BabeEpochConfiguration { + c: (3, 10), + secondary_slots: true, + }, }; - let mut config = crate::BabeConfiguration { + let mut config = crate::BabeGenesisConfiguration { slot_duration: 1000, epoch_length: 100, c: (3, 10), @@ -517,7 +521,7 @@ fn can_author_block() { }; // with secondary slots enabled it should never be empty - match claim_slot(i, &epoch, &config, &keystore) { + match claim_slot(i, &epoch, &keystore) { None => i += 1, Some(s) => debug!(target: "babe", "Authored block {:?}", s.0), } @@ -526,7 +530,7 @@ fn can_author_block() { // of times. config.secondary_slots = false; loop { - match claim_slot(i, &epoch, &config, &keystore) { + match claim_slot(i, &epoch, &keystore) { None => i += 1, Some(s) => { debug!(target: "babe", "Authored block {:?}", s.0); @@ -632,7 +636,7 @@ fn importing_block_one_sets_genesis_epoch() { &mut block_import, ); - let genesis_epoch = data.link.config.genesis_epoch(999); + let genesis_epoch = Epoch::genesis(&data.link.config, 999); let epoch_changes = data.link.epoch_changes.lock(); let epoch_for_second_block = epoch_changes.epoch_data_for_child_of( @@ -640,7 +644,7 @@ fn importing_block_one_sets_genesis_epoch() { &block_hash, 1, 1000, - |slot| data.link.config.genesis_epoch(slot), + |slot| Epoch::genesis(&data.link.config, slot), ).unwrap().unwrap(); assert_eq!(epoch_for_second_block, genesis_epoch); diff --git a/client/consensus/babe/src/verification.rs b/client/consensus/babe/src/verification.rs index 2fd37280b3b..1a3eba45843 100644 --- a/client/consensus/babe/src/verification.rs +++ b/client/consensus/babe/src/verification.rs @@ -38,8 +38,6 @@ pub(super) struct VerificationParams<'a, B: 'a + BlockT> { pub(super) slot_now: SlotNumber, /// epoch descriptor of the epoch this block _should_ be under, if it's valid. pub(super) epoch: &'a Epoch, - /// genesis config of this BABE chain. - pub(super) config: &'a super::Config, } /// Check a header has been signed by the right key. If the slot is too far in @@ -63,7 +61,6 @@ pub(super) fn check_header( pre_digest, slot_now, epoch, - config, } = params; let authorities = &epoch.authorities; @@ -102,10 +99,10 @@ pub(super) fn check_header( primary, sig, &epoch, - config.c, + epoch.config.c, )?; }, - PreDigest::Secondary(secondary) if config.secondary_slots => { + PreDigest::Secondary(secondary) if epoch.config.secondary_slots => { debug!(target: "babe", "Verifying Secondary block"); check_secondary_header::( diff --git a/client/consensus/epochs/src/lib.rs b/client/consensus/epochs/src/lib.rs index 001c172b349..acb07dd668a 100644 --- a/client/consensus/epochs/src/lib.rs +++ b/client/consensus/epochs/src/lib.rs @@ -335,6 +335,55 @@ impl EpochChanges where self.inner.rebalance() } + /// Map the epoch changes from one storing data to a different one. + pub fn map(self, mut f: F) -> EpochChanges where + B: Epoch, + F: FnMut(&Hash, &Number, E) -> B, + { + EpochChanges { + inner: self.inner.map(&mut |_, _, header| { + match header { + PersistedEpochHeader::Genesis(epoch_0, epoch_1) => { + PersistedEpochHeader::Genesis( + EpochHeader { + start_slot: epoch_0.start_slot, + end_slot: epoch_0.end_slot, + }, + EpochHeader { + start_slot: epoch_1.start_slot, + end_slot: epoch_1.end_slot, + }, + ) + }, + PersistedEpochHeader::Regular(epoch_n) => { + PersistedEpochHeader::Regular( + EpochHeader { + start_slot: epoch_n.start_slot, + end_slot: epoch_n.end_slot, + }, + ) + }, + } + }), + epochs: self.epochs.into_iter().map(|((hash, number), epoch)| { + let bepoch = match epoch { + PersistedEpoch::Genesis(epoch_0, epoch_1) => { + PersistedEpoch::Genesis( + f(&hash, &number, epoch_0), + f(&hash, &number, epoch_1), + ) + }, + PersistedEpoch::Regular(epoch_n) => { + PersistedEpoch::Regular( + f(&hash, &number, epoch_n) + ) + }, + }; + ((hash, number), bepoch) + }).collect(), + } + } + /// Prune out finalized epochs, except for the ancestor of the finalized /// block. The given slot should be the slot number at which the finalized /// block was authored. diff --git a/primitives/consensus/babe/src/digests.rs b/primitives/consensus/babe/src/digests.rs index 6079aa88c87..291b32cf499 100644 --- a/primitives/consensus/babe/src/digests.rs +++ b/primitives/consensus/babe/src/digests.rs @@ -18,7 +18,7 @@ #[cfg(feature = "std")] use super::{BABE_ENGINE_ID, AuthoritySignature}; -use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight}; +use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEpochConfiguration}; #[cfg(feature = "std")] use sp_runtime::{DigestItem, generic::OpaqueDigestItemId}; #[cfg(feature = "std")] @@ -135,7 +135,7 @@ impl TryFrom for PreDigest { /// Information about the next epoch. This is broadcast in the first block /// of the epoch. -#[derive(Decode, Encode, Default, PartialEq, Eq, Clone, RuntimeDebug)] +#[derive(Decode, Encode, PartialEq, Eq, Clone, RuntimeDebug)] pub struct NextEpochDescriptor { /// The authorities. pub authorities: Vec<(AuthorityId, BabeAuthorityWeight)>, @@ -144,6 +144,10 @@ pub struct NextEpochDescriptor { pub randomness: Randomness, } +/// Information about the next epoch config, if changed. This is broadcast in the first +/// block of the epoch, and applies using the same rules as `NextEpochDescriptor`. +pub type NextConfigDescriptor = BabeEpochConfiguration; + /// A digest item which is usable with BABE consensus. #[cfg(feature = "std")] pub trait CompatibleDigestItem: Sized { @@ -159,8 +163,11 @@ pub trait CompatibleDigestItem: Sized { /// If this item is a BABE signature, return the signature. fn as_babe_seal(&self) -> Option; - /// If this item is a BABE epoch, return it. + /// If this item is a BABE epoch descriptor, return it. fn as_next_epoch_descriptor(&self) -> Option; + + /// If this item is a BABE config descriptor, return it. + fn as_next_config_descriptor(&self) -> Option; } #[cfg(feature = "std")] @@ -190,4 +197,12 @@ impl CompatibleDigestItem for DigestItem where _ => None, }) } + + fn as_next_config_descriptor(&self) -> Option { + self.try_to(OpaqueDigestItemId::Consensus(&BABE_ENGINE_ID)) + .and_then(|x: super::ConsensusLog| match x { + super::ConsensusLog::NextConfigData(n) => Some(n), + _ => None, + }) + } } diff --git a/primitives/consensus/babe/src/lib.rs b/primitives/consensus/babe/src/lib.rs index 33701860d1f..37109b69be7 100644 --- a/primitives/consensus/babe/src/lib.rs +++ b/primitives/consensus/babe/src/lib.rs @@ -29,7 +29,7 @@ pub use sp_consensus_vrf::schnorrkel::{ use codec::{Encode, Decode}; use sp_std::vec::Vec; use sp_runtime::{ConsensusEngineId, RuntimeDebug}; -use crate::digests::NextEpochDescriptor; +use crate::digests::{NextEpochDescriptor, NextConfigDescriptor}; mod app { use sp_application_crypto::{app_crypto, key_types::BABE, sr25519}; @@ -87,11 +87,15 @@ pub enum ConsensusLog { /// Disable the authority with given index. #[codec(index = "2")] OnDisabled(AuthorityIndex), + /// The epoch has changed, and the epoch after the current one will + /// enact different epoch configurations. + #[codec(index = "3")] + NextConfigData(NextConfigDescriptor), } /// Configuration data used by the BABE consensus engine. #[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)] -pub struct BabeConfiguration { +pub struct BabeGenesisConfiguration { /// The slot duration in milliseconds for BABE. Currently, only /// the value provided by this type at genesis will be used. /// @@ -121,7 +125,7 @@ pub struct BabeConfiguration { } #[cfg(feature = "std")] -impl sp_consensus::SlotData for BabeConfiguration { +impl sp_consensus::SlotData for BabeGenesisConfiguration { fn slot_duration(&self) -> u64 { self.slot_duration } @@ -129,14 +133,27 @@ impl sp_consensus::SlotData for BabeConfiguration { const SLOT_KEY: &'static [u8] = b"babe_configuration"; } +/// Configuration data used by the BABE consensus engine. +#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)] +pub struct BabeEpochConfiguration { + /// A constant value that is used in the threshold calculation formula. + /// Expressed as a rational where the first member of the tuple is the + /// numerator and the second is the denominator. The rational should + /// represent a value between 0 and 1. + /// In the threshold formula calculation, `1 - c` represents the probability + /// of a slot being empty. + pub c: (u64, u64), + + /// Whether this chain should run with secondary slots, which are assigned + /// in round-robin manner. + pub secondary_slots: bool, +} + sp_api::decl_runtime_apis! { /// API necessary for block authorship with BABE. pub trait BabeApi { - /// Return the configuration for BABE. Currently, - /// only the value provided by this type at genesis will be used. - /// - /// Dynamic configuration may be supported in the future. - fn configuration() -> BabeConfiguration; + /// Return the genesis configuration for BABE. The configuration is only read on genesis. + fn configuration() -> BabeGenesisConfiguration; /// Returns the slot number that started the current epoch. fn current_epoch_start() -> SlotNumber; diff --git a/test-utils/runtime/src/lib.rs b/test-utils/runtime/src/lib.rs index cfafb76521a..c5c438e4de5 100644 --- a/test-utils/runtime/src/lib.rs +++ b/test-utils/runtime/src/lib.rs @@ -633,8 +633,8 @@ cfg_if! { } impl sp_consensus_babe::BabeApi for Runtime { - fn configuration() -> sp_consensus_babe::BabeConfiguration { - sp_consensus_babe::BabeConfiguration { + fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration { + sp_consensus_babe::BabeGenesisConfiguration { slot_duration: 1000, epoch_length: EpochDuration::get(), c: (3, 10), @@ -827,8 +827,8 @@ cfg_if! { } impl sp_consensus_babe::BabeApi for Runtime { - fn configuration() -> sp_consensus_babe::BabeConfiguration { - sp_consensus_babe::BabeConfiguration { + fn configuration() -> sp_consensus_babe::BabeGenesisConfiguration { + sp_consensus_babe::BabeGenesisConfiguration { slot_duration: 1000, epoch_length: EpochDuration::get(), c: (3, 10), -- GitLab From 47b304d22bef3a6fec25747e873fea00cf1301f5 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Fri, 24 Apr 2020 16:16:54 +0200 Subject: [PATCH 052/167] Fix the cfg guards in service/metrics.rs (#5770) --- client/service/Cargo.toml | 2 +- client/service/src/metrics.rs | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 1cc7e85b7ae..93908f0680b 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -65,7 +65,7 @@ tracing = "0.1.10" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } -[target.'cfg(any(unix, windows))'.dependencies] +[target.'cfg(all(any(unix, windows), not(target_os = "android")))'.dependencies] netstat2 = "0.8.1" [target.'cfg(target_os = "linux")'.dependencies] diff --git a/client/service/src/metrics.rs b/client/service/src/metrics.rs index 6b7c32c2d02..3e4abced89c 100644 --- a/client/service/src/metrics.rs +++ b/client/service/src/metrics.rs @@ -26,14 +26,14 @@ use sp_utils::metrics::register_globals; use sysinfo::{self, ProcessExt, SystemExt}; -#[cfg(not(target_os = "unknown"))] +#[cfg(all(any(unix, windows), not(target_os = "android")))] use netstat2::{ TcpState, ProtocolSocketInfo, iterate_sockets_info, AddressFamilyFlags, ProtocolFlags, }; struct PrometheusMetrics { // system - #[cfg(any(unix, windows))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] load_avg: GaugeVec, // process @@ -42,7 +42,7 @@ struct PrometheusMetrics { threads: Gauge, open_files: GaugeVec, - #[cfg(any(unix, windows))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] netstat: GaugeVec, // -- inner counters @@ -79,7 +79,7 @@ impl PrometheusMetrics { Ok(Self { // system - #[cfg(any(unix, windows))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] load_avg: register(GaugeVec::new( Opts::new("load_avg", "System load average"), &["over"] @@ -94,7 +94,7 @@ impl PrometheusMetrics { "cpu_usage_percentage", "Node CPU usage", )?, registry)?, - #[cfg(any(unix, windows))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] netstat: register(GaugeVec::new( Opts::new("netstat_tcp", "Current TCP connections "), &["status"] @@ -144,7 +144,7 @@ impl PrometheusMetrics { } } -#[cfg(any(unix, windows))] +#[cfg(all(any(unix, windows), not(target_os = "android")))] #[derive(Default)] struct ConnectionsCount { listen: u64, @@ -176,7 +176,7 @@ struct ProcessInfo { pub struct MetricsService { metrics: Option, - #[cfg(not(target_os = "unknown"))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] system: sysinfo::System, pid: Option, } @@ -219,7 +219,7 @@ impl MetricsService { } } -#[cfg(all(any(unix, windows), not(target_os = "linux")))] +#[cfg(all(any(unix, windows), not(target_os = "android"), not(target_os = "linux")))] impl MetricsService { fn inner_new(metrics: Option) -> Self { Self { @@ -235,7 +235,7 @@ impl MetricsService { } -#[cfg(target_os = "unknown")] +#[cfg(not(all(any(unix, windows), not(target_os = "android"))))] impl MetricsService { fn inner_new(metrics: Option) -> Self { Self { @@ -263,7 +263,7 @@ impl MetricsService { Self::inner_new(None) } - #[cfg(not(target_os = "unknown"))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] fn process_info_for(&mut self, pid: &sysinfo::Pid) -> ProcessInfo { let mut info = ProcessInfo::default(); if self.system.refresh_process(*pid) { @@ -275,7 +275,7 @@ impl MetricsService { info } - #[cfg(not(target_os = "unknown"))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] fn connections_info(&self) -> Option { self.pid.as_ref().and_then(|pid| { let af_flags = AddressFamilyFlags::IPV4 | AddressFamilyFlags::IPV6; @@ -406,7 +406,7 @@ impl MetricsService { ); } - #[cfg(not(target_os = "unknown"))] + #[cfg(all(any(unix, windows), not(target_os = "android")))] { let load = self.system.get_load_average(); metrics.load_avg.with_label_values(&["1min"]).set(load.one); -- GitLab From f267590dd024f26daf41176dce0b319f10f894d4 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Fri, 24 Apr 2020 16:46:19 +0200 Subject: [PATCH 053/167] feat/ocw/bookkeeping (#5200) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-Authored-By: Tomasz Drwięga --- Cargo.lock | 2 + bin/node/testing/src/bench.rs | 1 + client/api/src/backend.rs | 10 +- client/api/src/call_executor.rs | 3 +- client/api/src/execution_extensions.rs | 2 +- client/cli/src/arg_enums.rs | 12 + client/cli/src/commands/mod.rs | 8 +- client/cli/src/commands/runcmd.rs | 41 +--- client/cli/src/config.rs | 21 +- client/cli/src/params/mod.rs | 2 + .../cli/src/params/offchain_worker_params.rs | 77 ++++++ client/db/src/lib.rs | 26 +- client/executor/runtime-test/src/lib.rs | 6 + client/executor/src/integration_tests/mod.rs | 22 ++ client/service/src/builder.rs | 14 +- client/service/src/config.rs | 10 +- client/service/test/src/lib.rs | 2 +- client/src/call_executor.rs | 23 +- client/src/client.rs | 49 +++- client/src/genesis.rs | 14 ++ client/src/lib.rs | 6 +- client/src/light/call_executor.rs | 5 +- client/src/light/mod.rs | 5 +- .../api/proc-macro/src/decl_runtime_apis.rs | 3 + .../api/proc-macro/src/impl_runtime_apis.rs | 6 + primitives/api/src/lib.rs | 6 + primitives/core/src/offchain/mod.rs | 6 +- primitives/core/src/offchain/storage.rs | 228 ++++++++++++++++++ primitives/externalities/src/lib.rs | 3 + primitives/io/src/lib.rs | 17 ++ primitives/offchain/Cargo.toml | 5 + primitives/offchain/src/lib.rs | 4 +- primitives/state-machine/src/basic.rs | 2 + primitives/state-machine/src/ext.rs | 67 ++++- primitives/state-machine/src/lib.rs | 22 ++ .../state-machine/src/overlayed_changes.rs | 11 + primitives/state-machine/src/testing.rs | 7 + test-utils/client/src/lib.rs | 3 +- test-utils/runtime/client/src/lib.rs | 2 +- utils/frame/benchmarking-cli/src/command.rs | 2 + 40 files changed, 675 insertions(+), 80 deletions(-) create mode 100644 client/cli/src/params/offchain_worker_params.rs diff --git a/Cargo.lock b/Cargo.lock index 69f0f3906bf..e9f315b1bd4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7532,7 +7532,9 @@ name = "sp-offchain" version = "2.0.0-dev" dependencies = [ "sp-api", + "sp-core", "sp-runtime", + "sp-state-machine", ] [[package]] diff --git a/bin/node/testing/src/bench.rs b/bin/node/testing/src/bench.rs index ea48f026506..91d0cfb55a0 100644 --- a/bin/node/testing/src/bench.rs +++ b/bin/node/testing/src/bench.rs @@ -230,6 +230,7 @@ impl BenchDb { ExecutionExtensions::new(profile.into_execution_strategies(), None), Box::new(TaskExecutor::new()), None, + Default::default(), ).expect("Should not fail"); (client, backend) diff --git a/client/api/src/backend.rs b/client/api/src/backend.rs index 33a370c7cb2..ad697a35932 100644 --- a/client/api/src/backend.rs +++ b/client/api/src/backend.rs @@ -19,7 +19,7 @@ use std::sync::Arc; use std::collections::HashMap; use sp_core::ChangesTrieConfigurationRange; -use sp_core::offchain::OffchainStorage; +use sp_core::offchain::{OffchainStorage,storage::OffchainOverlayedChanges}; use sp_runtime::{generic::BlockId, Justification, Storage}; use sp_runtime::traits::{Block as BlockT, NumberFor, HashFor}; use sp_state_machine::{ @@ -148,6 +148,14 @@ pub trait BlockImportOperation { child_update: ChildStorageCollection, ) -> sp_blockchain::Result<()>; + /// Write offchain storage changes to the database. + fn update_offchain_storage( + &mut self, + _offchain_update: OffchainOverlayedChanges, + ) -> sp_blockchain::Result<()> { + Ok(()) + } + /// Inject changes trie data into the database. fn update_changes_trie( &mut self, diff --git a/client/api/src/call_executor.rs b/client/api/src/call_executor.rs index 3afd29be8d4..00711e83b75 100644 --- a/client/api/src/call_executor.rs +++ b/client/api/src/call_executor.rs @@ -26,7 +26,7 @@ use sp_state_machine::{ }; use sc_executor::{RuntimeVersion, NativeVersion}; use sp_externalities::Extensions; -use sp_core::NativeOrEncoded; +use sp_core::{NativeOrEncoded,offchain::storage::OffchainOverlayedChanges}; use sp_api::{ProofRecorder, InitializeBlock, StorageTransactionCache}; use crate::execution_extensions::ExecutionExtensions; @@ -84,6 +84,7 @@ pub trait CallExecutor { method: &str, call_data: &[u8], changes: &RefCell, + offchain_changes: &RefCell, storage_transaction_cache: Option<&RefCell< StorageTransactionCache>::State>, >>, diff --git a/client/api/src/execution_extensions.rs b/client/api/src/execution_extensions.rs index 10d33c20e67..55ffc3794c4 100644 --- a/client/api/src/execution_extensions.rs +++ b/client/api/src/execution_extensions.rs @@ -177,7 +177,7 @@ impl ExecutionExtensions { if let ExecutionContext::OffchainCall(Some(ext)) = context { extensions.register( OffchainExt::new(offchain::LimitedExternalities::new(capabilities, ext.0)) - ) + ); } (manager, extensions) diff --git a/client/cli/src/arg_enums.rs b/client/cli/src/arg_enums.rs index 2adccdd879e..f0eeca4c8be 100644 --- a/client/cli/src/arg_enums.rs +++ b/client/cli/src/arg_enums.rs @@ -136,6 +136,18 @@ arg_enum! { } } + +arg_enum! { + /// Whether off-chain workers are enabled. + #[allow(missing_docs)] + #[derive(Debug, Clone)] + pub enum OffchainWorkerEnabled { + Always, + Never, + WhenValidating, + } +} + /// Default value for the `--execution-syncing` parameter. pub const DEFAULT_EXECUTION_SYNCING: ExecutionStrategy = ExecutionStrategy::NativeElseWasm; /// Default value for the `--execution-import-block` parameter. diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index ec36fb3b64b..143ff491aef 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -144,6 +144,12 @@ macro_rules! substrate_cli_subcommands { } } + fn offchain_worker_params(&self) -> Option<&$crate::OffchainWorkerParams> { + match self { + $($enum::$variant(cmd) => cmd.offchain_worker_params()),* + } + } + fn base_path(&self) -> $crate::Result<::std::option::Option<::std::path::PathBuf>> { match self { $($enum::$variant(cmd) => cmd.base_path()),* @@ -327,7 +333,7 @@ macro_rules! substrate_cli_subcommands { } } - fn offchain_worker(&self, role: &::sc_service::Role) -> $crate::Result { + fn offchain_worker(&self, role: &::sc_service::Role) -> $crate::Result<::sc_service::config::OffchainWorkerConfig> { match self { $($enum::$variant(cmd) => cmd.offchain_worker(role)),* } diff --git a/client/cli/src/commands/runcmd.rs b/client/cli/src/commands/runcmd.rs index 3a3a17ea3fa..a24cadcd4f7 100644 --- a/client/cli/src/commands/runcmd.rs +++ b/client/cli/src/commands/runcmd.rs @@ -20,6 +20,7 @@ use crate::params::KeystoreParams; use crate::params::NetworkParams; use crate::params::SharedParams; use crate::params::TransactionPoolParams; +use crate::params::OffchainWorkerParams; use crate::CliConfiguration; use regex::Regex; use sc_service::{ @@ -28,18 +29,7 @@ use sc_service::{ }; use sc_telemetry::TelemetryEndpoints; use std::net::{IpAddr, Ipv4Addr, SocketAddr}; -use structopt::{clap::arg_enum, StructOpt}; - -arg_enum! { - /// Whether off-chain workers are enabled. - #[allow(missing_docs)] - #[derive(Debug, Clone)] - pub enum OffchainWorkerEnabled { - Always, - Never, - WhenValidating, - } -} +use structopt::StructOpt; /// The `run` command used to run a node. #[derive(Debug, StructOpt, Clone)] @@ -173,17 +163,9 @@ pub struct RunCmd { #[structopt(long = "telemetry-url", value_name = "URL VERBOSITY", parse(try_from_str = parse_telemetry_endpoints))] pub telemetry_endpoints: Vec<(String, u8)>, - /// Should execute offchain workers on every block. - /// - /// By default it's only enabled for nodes that are authoring new blocks. - #[structopt( - long = "offchain-worker", - value_name = "ENABLED", - possible_values = &OffchainWorkerEnabled::variants(), - case_insensitive = true, - default_value = "WhenValidating" - )] - pub offchain_worker: OffchainWorkerEnabled, + #[allow(missing_docs)] + #[structopt(flatten)] + pub offchain_worker_params: OffchainWorkerParams, #[allow(missing_docs)] #[structopt(flatten)] @@ -300,6 +282,10 @@ impl CliConfiguration for RunCmd { Some(&self.keystore_params) } + fn offchain_worker_params(&self) -> Option<&OffchainWorkerParams> { + Some(&self.offchain_worker_params) + } + fn node_name(&self) -> Result { let name: String = match (self.name.as_ref(), self.get_keyring()) { (Some(name), _) => name.to_string(), @@ -439,15 +425,6 @@ impl CliConfiguration for RunCmd { Ok(self.unsafe_rpc_expose) } - fn offchain_worker(&self, role: &Role) -> Result { - Ok(match (&self.offchain_worker, role) { - (OffchainWorkerEnabled::WhenValidating, Role::Authority { .. }) => true, - (OffchainWorkerEnabled::Always, _) => true, - (OffchainWorkerEnabled::Never, _) => false, - (OffchainWorkerEnabled::WhenValidating, _) => false, - }) - } - fn transaction_pool(&self) -> Result { Ok(self.pool_config.transaction_pool()) } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 9de2022a592..1d07355f0ac 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -19,15 +19,15 @@ use crate::error::Result; use crate::{ init_logger, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams, - PruningParams, SharedParams, SubstrateCli, + OffchainWorkerParams, PruningParams, SharedParams, SubstrateCli, }; use crate::arg_enums::Database; use app_dirs::{AppDataType, AppInfo}; use names::{Generator, Name}; use sc_service::config::{ Configuration, DatabaseConfig, ExecutionStrategies, ExtTransport, KeystoreConfig, - NetworkConfiguration, NodeKeyConfig, PrometheusConfig, PruningMode, Role, TelemetryEndpoints, - TransactionPoolOptions, WasmExecutionMethod, + NetworkConfiguration, NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, + Role, TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod, }; use sc_service::{ChainSpec, TracingReceiver}; use std::future::Future; @@ -67,6 +67,11 @@ pub trait CliConfiguration: Sized { None } + /// Get a reference to `OffchainWorkerParams` for this object. + fn offchain_worker_params(&self) -> Option<&OffchainWorkerParams> { + None + } + /// Get the NodeKeyParams for this object fn node_key_params(&self) -> Option<&NodeKeyParams> { self.network_params() @@ -301,11 +306,13 @@ pub trait CliConfiguration: Sized { Ok(Default::default()) } - /// Returns `Ok(true)` if offchain worker should be used + /// Returns an offchain worker config wrapped in `Ok(_)` /// - /// By default this is `false`. - fn offchain_worker(&self, _role: &Role) -> Result { - Ok(Default::default()) + /// By default offchain workers are disabled. + fn offchain_worker(&self, role: &Role) -> Result { + self.offchain_worker_params() + .map(|x| x.offchain_worker(role)) + .unwrap_or_else(|| { Ok(OffchainWorkerConfig::default()) }) } /// Returns `Ok(true)` if authoring should be forced diff --git a/client/cli/src/params/mod.rs b/client/cli/src/params/mod.rs index 9097bf85899..af94a0c6f6b 100644 --- a/client/cli/src/params/mod.rs +++ b/client/cli/src/params/mod.rs @@ -21,6 +21,7 @@ mod node_key_params; mod pruning_params; mod shared_params; mod transaction_pool_params; +mod offchain_worker_params; use std::fmt::Debug; use std::str::FromStr; @@ -29,6 +30,7 @@ pub use crate::params::import_params::*; pub use crate::params::keystore_params::*; pub use crate::params::network_params::*; pub use crate::params::node_key_params::*; +pub use crate::params::offchain_worker_params::*; pub use crate::params::pruning_params::*; pub use crate::params::shared_params::*; pub use crate::params::transaction_pool_params::*; diff --git a/client/cli/src/params/offchain_worker_params.rs b/client/cli/src/params/offchain_worker_params.rs new file mode 100644 index 00000000000..eb3cc74ad90 --- /dev/null +++ b/client/cli/src/params/offchain_worker_params.rs @@ -0,0 +1,77 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + + +//! Offchain worker related configuration parameters. +//! +//! A subset of configuration parameters which are relevant to +//! the inner working of offchain workers. The usage is solely +//! targeted at handling input parameter parsing providing +//! a reasonable abstraction. + +use structopt::StructOpt; +use sc_service::config::OffchainWorkerConfig; +use sc_network::config::Role; + +use crate::error; +use crate::OffchainWorkerEnabled; + + +/// Offchain worker related parameters. +#[derive(Debug, StructOpt, Clone)] +pub struct OffchainWorkerParams { + /// Should execute offchain workers on every block. + /// + /// By default it's only enabled for nodes that are authoring new blocks. + #[structopt( + long = "offchain-worker", + value_name = "ENABLED", + possible_values = &OffchainWorkerEnabled::variants(), + case_insensitive = true, + default_value = "WhenValidating" + )] + pub enabled: OffchainWorkerEnabled, + + /// Enable Offchain Indexing API, which allows block import to write to Offchain DB. + /// + /// Enables a runtime to write directly to a offchain workers + /// DB during block import. + #[structopt( + long = "enable-offchain-indexing", + value_name = "ENABLE_OFFCHAIN_INDEXING" + )] + pub indexing_enabled: bool, +} + +impl OffchainWorkerParams { + /// Load spec to `Configuration` from `OffchainWorkerParams` and spec factory. + pub fn offchain_worker( + &self, + role: &Role, + ) -> error::Result + { + let enabled = match (&self.enabled, role) { + (OffchainWorkerEnabled::WhenValidating, Role::Authority { .. }) => true, + (OffchainWorkerEnabled::Always, _) => true, + (OffchainWorkerEnabled::Never, _) => false, + (OffchainWorkerEnabled::WhenValidating, _) => false, + }; + + let indexing_enabled = enabled && self.indexing_enabled; + + Ok(OffchainWorkerConfig { enabled, indexing_enabled }) + } +} diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index 579ea2db4ad..c72d289e834 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -50,6 +50,7 @@ use std::path::{Path, PathBuf}; use std::io; use std::collections::HashMap; + use sc_client_api::{ ForkBlocks, UsageInfo, MemoryInfo, BadBlocks, IoInfo, MemorySize, CloneableSpawn, execution_extensions::ExecutionExtensions, @@ -65,6 +66,7 @@ use sp_trie::{MemoryDB, PrefixedMemoryDB, prefixed_key}; use sp_database::Transaction; use parking_lot::RwLock; use sp_core::{ChangesTrieConfiguration, traits::CodeExecutor}; +use sp_core::offchain::storage::{OffchainOverlayedChange,OffchainOverlayedChanges}; use sp_core::storage::{well_known_keys, ChildInfo}; use sp_runtime::{ generic::BlockId, Justification, Storage, @@ -324,6 +326,7 @@ pub fn new_client( execution_extensions: ExecutionExtensions, spawn_handle: Box, prometheus_registry: Option, + config: sc_client::ClientConfig, ) -> Result<( sc_client::Client< Backend, @@ -340,7 +343,7 @@ pub fn new_client( E: CodeExecutor + RuntimeInfo, { let backend = Arc::new(Backend::new(settings, CANONICALIZATION_DELAY)?); - let executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, spawn_handle); + let executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, spawn_handle, config.clone()); Ok(( sc_client::Client::new( backend.clone(), @@ -350,6 +353,7 @@ pub fn new_client( bad_blocks, execution_extensions, prometheus_registry, + config, )?, backend, )) @@ -558,6 +562,7 @@ pub struct BlockImportOperation { db_updates: PrefixedMemoryDB>, storage_updates: StorageCollection, child_storage_updates: ChildStorageCollection, + offchain_storage_updates: OffchainOverlayedChanges, changes_trie_updates: MemoryDB>, changes_trie_build_cache_update: Option>>, changes_trie_config_update: Option>, @@ -569,6 +574,15 @@ pub struct BlockImportOperation { } impl BlockImportOperation { + fn apply_offchain(&mut self, transaction: &mut Transaction) { + for (key, value_operation) in self.offchain_storage_updates.drain() { + match value_operation { + OffchainOverlayedChange::SetValue(val) => transaction.set_from_vec(columns::OFFCHAIN, &key, val), + OffchainOverlayedChange::Remove => transaction.remove(columns::OFFCHAIN, &key), + } + } + } + fn apply_aux(&mut self, transaction: &mut Transaction) { for (key, maybe_val) in self.aux_ops.drain(..) { match maybe_val { @@ -675,6 +689,14 @@ impl sc_client_api::backend::BlockImportOperation for Bloc Ok(()) } + fn update_offchain_storage( + &mut self, + offchain_update: OffchainOverlayedChanges, + ) -> ClientResult<()> { + self.offchain_storage_updates = offchain_update; + Ok(()) + } + fn mark_finalized( &mut self, block: BlockId, @@ -1017,6 +1039,7 @@ impl Backend { let mut finalization_displaced_leaves = None; operation.apply_aux(&mut transaction); + operation.apply_offchain(&mut transaction); let mut meta_updates = Vec::with_capacity(operation.finalized_blocks.len()); let mut last_finalized_hash = self.blockchain.meta.read().finalized_hash; @@ -1360,6 +1383,7 @@ impl sc_client_api::backend::Backend for Backend { db_updates: PrefixedMemoryDB::default(), storage_updates: Default::default(), child_storage_updates: Default::default(), + offchain_storage_updates: Default::default(), changes_trie_config_update: None, changes_trie_updates: MemoryDB::default(), changes_trie_build_cache_update: None, diff --git a/client/executor/runtime-test/src/lib.rs b/client/executor/runtime-test/src/lib.rs index 38a16ae39ea..15a4177048a 100644 --- a/client/executor/runtime-test/src/lib.rs +++ b/client/executor/runtime-test/src/lib.rs @@ -183,6 +183,12 @@ sp_core::wasm_export_functions! { } } + + fn test_offchain_index_set() { + sp_io::offchain_index::set(b"k", b"v"); + } + + fn test_offchain_local_storage() -> bool { let kind = sp_core::offchain::StorageKind::PERSISTENT; assert_eq!(sp_io::offchain::local_storage_get(kind, b"test"), None); diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 44e021729a3..2e62e060157 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -450,6 +450,28 @@ fn ordered_trie_root_should_work(wasm_method: WasmExecutionMethod) { ); } +#[test_case(WasmExecutionMethod::Interpreted)] +#[cfg_attr(feature = "wasmtime", test_case(WasmExecutionMethod::Compiled))] +fn offchain_index(wasm_method: WasmExecutionMethod) { + let mut ext = TestExternalities::default(); + let (offchain, _state) = testing::TestOffchainExt::new(); + ext.register_extension(OffchainExt::new(offchain)); + call_in_wasm( + "test_offchain_index_set", + &[0], + wasm_method, + &mut ext.ext(), + ).unwrap(); + + use sp_core::offchain::storage::OffchainOverlayedChange; + assert_eq!( + ext.ext() + .get_offchain_storage_changes() + .get(sp_core::offchain::STORAGE_PREFIX, b"k"), + Some(OffchainOverlayedChange::SetValue(b"v".to_vec())) + ); +} + #[test_case(WasmExecutionMethod::Interpreted)] #[cfg_attr(feature = "wasmtime", test_case(WasmExecutionMethod::Compiled))] fn offchain_local_storage_should_work(wasm_method: WasmExecutionMethod) { diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index b819c47bee9..47768b98799 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -17,7 +17,7 @@ use crate::{Service, NetworkStatus, NetworkState, error::Error, DEFAULT_PROTOCOL_ID, MallocSizeOfWasm}; use crate::{start_rpc_servers, build_network_future, TransactionPoolAdapter, TaskManager}; use crate::status_sinks; -use crate::config::{Configuration, KeystoreConfig, PrometheusConfig}; +use crate::config::{Configuration, KeystoreConfig, PrometheusConfig, OffchainWorkerConfig}; use crate::metrics::MetricsService; use sc_client_api::{ self, @@ -27,7 +27,7 @@ use sc_client_api::{ ExecutorProvider, CallExecutor }; use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender}; -use sc_client::Client; +use sc_client::{Client, ClientConfig}; use sc_chain_spec::get_extension; use sp_consensus::import_queue::ImportQueue; use futures::{ @@ -215,6 +215,10 @@ fn new_full_parts( extensions, Box::new(task_manager.spawn_handle()), config.prometheus_config.as_ref().map(|config| config.registry.clone()), + ClientConfig { + offchain_worker_enabled : config.offchain_worker.enabled , + offchain_indexing_api: config.offchain_worker.indexing_enabled, + }, )? }; @@ -834,11 +838,11 @@ ServiceBuilder< let network_status_sinks = Arc::new(Mutex::new(status_sinks::StatusSinks::new())); let offchain_storage = backend.offchain_storage(); - let offchain_workers = match (config.offchain_worker, offchain_storage.clone()) { - (true, Some(db)) => { + let offchain_workers = match (config.offchain_worker.clone(), offchain_storage.clone()) { + (OffchainWorkerConfig {enabled: true, .. }, Some(db)) => { Some(Arc::new(sc_offchain::OffchainWorkers::new(client.clone(), db))) }, - (true, None) => { + (OffchainWorkerConfig {enabled: true, .. }, None) => { warn!("Offchain workers disabled, due to lack of offchain storage support in backend."); None }, diff --git a/client/service/src/config.rs b/client/service/src/config.rs index affb4aabfc6..4ebe7553949 100644 --- a/client/service/src/config.rs +++ b/client/service/src/config.rs @@ -79,7 +79,7 @@ pub struct Configuration { /// The default number of 64KB pages to allocate for Wasm execution pub default_heap_pages: Option, /// Should offchain workers be executed. - pub offchain_worker: bool, + pub offchain_worker: OffchainWorkerConfig, /// Enable authoring even when offline. pub force_authoring: bool, /// Disable GRANDPA when running in validator mode @@ -125,6 +125,14 @@ impl KeystoreConfig { } } } +/// Configuration of the database of the client. +#[derive(Clone, Default)] +pub struct OffchainWorkerConfig { + /// If this is allowed. + pub enabled: bool, + /// allow writes from the runtime to the offchain worker database. + pub indexing_enabled: bool, +} /// Configuration of the Prometheus endpoint. #[derive(Clone)] diff --git a/client/service/test/src/lib.rs b/client/service/test/src/lib.rs index 810662edb07..b7d01c32c0f 100644 --- a/client/service/test/src/lib.rs +++ b/client/service/test/src/lib.rs @@ -195,7 +195,7 @@ fn node_config { backend: Arc, executor: E, spawn_handle: Box, + client_config: ClientConfig, } impl LocalCallExecutor { @@ -43,11 +45,13 @@ impl LocalCallExecutor { backend: Arc, executor: E, spawn_handle: Box, + client_config: ClientConfig, ) -> Self { LocalCallExecutor { backend, executor, spawn_handle, + client_config, } } } @@ -58,6 +62,7 @@ impl Clone for LocalCallExecutor where E: Clone { backend: self.backend.clone(), executor: self.executor.clone(), spawn_handle: self.spawn_handle.clone(), + client_config: self.client_config.clone(), } } } @@ -81,6 +86,11 @@ where extensions: Option, ) -> sp_blockchain::Result> { let mut changes = OverlayedChanges::default(); + let mut offchain_changes = if self.client_config.offchain_indexing_api { + OffchainOverlayedChanges::enabled() + } else { + OffchainOverlayedChanges::disabled() + }; let changes_trie = backend::changes_tries_state_at_block( id, self.backend.changes_trie_storage() )?; @@ -90,6 +100,7 @@ where &state, changes_trie, &mut changes, + &mut offchain_changes, &self.executor, method, call_data, @@ -120,6 +131,7 @@ where method: &str, call_data: &[u8], changes: &RefCell, + offchain_changes: &RefCell, storage_transaction_cache: Option<&RefCell< StorageTransactionCache >>, @@ -143,6 +155,9 @@ where let mut state = self.backend.state_at(*at)?; + let changes = &mut *changes.borrow_mut(); + let offchain_changes = &mut *offchain_changes.borrow_mut(); + match recorder { Some(recorder) => { let trie_state = state.as_trie_backend() @@ -160,11 +175,11 @@ where recorder.clone(), ); - let changes = &mut *changes.borrow_mut(); let mut state_machine = StateMachine::new( &backend, changes_trie_state, changes, + offchain_changes, &self.executor, method, call_data, @@ -179,11 +194,11 @@ where None => { let state_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&state); let runtime_code = state_runtime_code.runtime_code()?; - let changes = &mut *changes.borrow_mut(); let mut state_machine = StateMachine::new( &state, changes_trie_state, changes, + offchain_changes, &self.executor, method, call_data, @@ -198,6 +213,7 @@ where fn runtime_version(&self, id: &BlockId) -> sp_blockchain::Result { let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); let changes_trie_state = backend::changes_tries_state_at_block( id, self.backend.changes_trie_storage(), @@ -206,6 +222,7 @@ where let mut cache = StorageTransactionCache::::default(); let mut ext = Ext::new( &mut overlay, + &mut offchain_overlay, &mut cache, &state, changes_trie_state, diff --git a/client/src/client.rs b/client/src/client.rs index d5184fb979e..f01c9176b8a 100644 --- a/client/src/client.rs +++ b/client/src/client.rs @@ -99,6 +99,7 @@ pub struct Client where Block: BlockT { importing_block: RwLock>, block_rules: BlockRules, execution_extensions: ExecutionExtensions, + config: ClientConfig, _phantom: PhantomData, } @@ -136,6 +137,7 @@ pub fn new_in_mem( keystore: Option, prometheus_registry: Option, spawn_handle: Box, + config: ClientConfig, ) -> sp_blockchain::Result, LocalCallExecutor, E>, @@ -146,7 +148,24 @@ pub fn new_in_mem( S: BuildStorage, Block: BlockT, { - new_with_backend(Arc::new(in_mem::Backend::new()), executor, genesis_storage, keystore, spawn_handle, prometheus_registry) + new_with_backend( + Arc::new(in_mem::Backend::new()), + executor, + genesis_storage, + keystore, + spawn_handle, + prometheus_registry, + config, + ) +} + +/// Relevant client configuration items relevant for the client. +#[derive(Debug,Clone,Default)] +pub struct ClientConfig { + /// Enable the offchain worker db. + pub offchain_worker_enabled: bool, + /// If true, allows access from the runtime to write into offchain worker db. + pub offchain_indexing_api: bool, } /// Create a client with the explicitly provided backend. @@ -158,6 +177,7 @@ pub fn new_with_backend( keystore: Option, spawn_handle: Box, prometheus_registry: Option, + config: ClientConfig, ) -> sp_blockchain::Result, Block, RA>> where E: CodeExecutor + RuntimeInfo, @@ -165,7 +185,7 @@ pub fn new_with_backend( Block: BlockT, B: backend::LocalBackend + 'static, { - let call_executor = LocalCallExecutor::new(backend.clone(), executor, spawn_handle); + let call_executor = LocalCallExecutor::new(backend.clone(), executor, spawn_handle, config.clone()); let extensions = ExecutionExtensions::new(Default::default(), keystore); Client::new( backend, @@ -175,6 +195,7 @@ pub fn new_with_backend( Default::default(), extensions, prometheus_registry, + config, ) } @@ -243,6 +264,7 @@ impl Client where B: backend::Backend, E: CallExecutor, Block: BlockT, + Block::Header: Clone, { /// Creates new Substrate Client with given blockchain and code executor. pub fn new( @@ -253,6 +275,7 @@ impl Client where bad_blocks: BadBlocks, execution_extensions: ExecutionExtensions, prometheus_registry: Option, + config: ClientConfig, ) -> sp_blockchain::Result { if backend.blockchain().header(BlockId::Number(Zero::zero()))?.is_none() { let genesis_storage = build_genesis_storage.build_storage()?; @@ -282,6 +305,7 @@ impl Client where importing_block: Default::default(), block_rules: BlockRules::new(fork_blocks, bad_blocks), execution_extensions, + config, _phantom: Default::default(), }) } @@ -614,7 +638,7 @@ impl Client where if let Ok(ImportResult::Imported(ref aux)) = result { if aux.is_new_best { use rand::Rng; - + // don't send telemetry block import events during initial sync for every // block to avoid spamming the telemetry server, these events will be randomly // sent at a rate of 1/10. @@ -696,7 +720,22 @@ impl Client where operation.op.update_cache(new_cache); - let (main_sc, child_sc, tx, _, changes_trie_tx) = storage_changes.into_inner(); + let ( + main_sc, + child_sc, + offchain_sc, + tx, _, + changes_trie_tx, + ) = storage_changes.into_inner(); + + if self.config.offchain_indexing_api { + // if let Some(mut offchain_storage) = self.backend.offchain_storage() { + // offchain_sc.iter().for_each(|(k,v)| { + // offchain_storage.set(b"block-import-info", k,v) + // }); + // } + operation.op.update_offchain_storage(offchain_sc)?; + } operation.op.update_db_storage(tx)?; operation.op.update_storage(main_sc.clone(), child_sc.clone())?; @@ -1554,6 +1593,7 @@ impl CallApiAt for Client where params.function, ¶ms.arguments, params.overlayed_changes, + params.offchain_changes, Some(params.storage_transaction_cache), params.initialize_block, manager, @@ -3493,6 +3533,7 @@ pub(crate) mod tests { None, None, sp_core::tasks::executor(), + Default::default(), ) .unwrap(); diff --git a/client/src/genesis.rs b/client/src/genesis.rs index 2c84ff1e433..c5dd44404c9 100644 --- a/client/src/genesis.rs +++ b/client/src/genesis.rs @@ -55,6 +55,7 @@ mod tests { }; use sp_runtime::traits::BlakeTwo256; use sp_core::tasks::executor as tasks_executor; + use sp_core::offchain::storage::OffchainOverlayedChanges; use hex_literal::*; native_executor_instance!( @@ -90,6 +91,7 @@ mod tests { }; let hash = header.hash(); let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); @@ -97,6 +99,7 @@ mod tests { backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "Core_initialize_block", &header.encode(), @@ -112,6 +115,7 @@ mod tests { backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "BlockBuilder_apply_extrinsic", &tx.encode(), @@ -127,6 +131,7 @@ mod tests { backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "BlockBuilder_finalize_block", &[], @@ -174,10 +179,13 @@ mod tests { let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let _ = StateMachine::new( &backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "Core_execute_block", &b1data, @@ -206,10 +214,13 @@ mod tests { let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let _ = StateMachine::new( &backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "Core_execute_block", &b1data, @@ -238,10 +249,13 @@ mod tests { let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let r = StateMachine::new( &backend, sp_state_machine::disabled_changes_trie_state::<_, u64>(), &mut overlay, + &mut offchain_overlay, &executor(), "Core_execute_block", &b1data, diff --git a/client/src/lib.rs b/client/src/lib.rs index 20a3ed058aa..97cd7df78c7 100644 --- a/client/src/lib.rs +++ b/client/src/lib.rs @@ -63,6 +63,7 @@ //! backend.clone(), //! NativeExecutor::::new(WasmExecutionMethod::Interpreted, None, 8), //! sp_core::tasks::executor(), +//! Default::default(), //! ), //! // This parameter provides the storage for the chain genesis. //! &::default(), @@ -70,6 +71,7 @@ //! Default::default(), //! Default::default(), //! None, +//! Default::default(), //! ); //! ``` //! @@ -99,8 +101,8 @@ pub use crate::{ client::{ new_with_backend, new_in_mem, - BlockBackend, ImportNotifications, FinalityNotifications, BlockchainEvents, LockImportRun, - BlockImportNotification, Client, ClientInfo, ExecutionStrategies, FinalityNotification, + ImportNotifications, FinalityNotifications, BlockchainEvents, LockImportRun, + BlockImportNotification, Client, ClientConfig, ClientInfo, ExecutionStrategies, FinalityNotification, LongestChain, BlockOf, ProvideUncles, BadBlocks, ForkBlocks, apply_aux, }, leaves::LeafSet, diff --git a/client/src/light/call_executor.rs b/client/src/light/call_executor.rs index b439a268d2f..3a91f2dc23d 100644 --- a/client/src/light/call_executor.rs +++ b/client/src/light/call_executor.rs @@ -21,7 +21,7 @@ use std::{ }; use codec::{Encode, Decode}; -use sp_core::{convert_hash, NativeOrEncoded, traits::CodeExecutor}; +use sp_core::{convert_hash, NativeOrEncoded, traits::CodeExecutor, offchain::storage::OffchainOverlayedChanges}; use sp_runtime::{ generic::BlockId, traits::{One, Block as BlockT, Header as HeaderT, HashFor}, }; @@ -108,6 +108,7 @@ impl CallExecutor for method: &str, call_data: &[u8], changes: &RefCell, + offchain_changes: &RefCell, _: Option<&RefCell>>, initialize_block: InitializeBlock<'a, Block>, _manager: ExecutionManager, @@ -134,6 +135,7 @@ impl CallExecutor for method, call_data, changes, + offchain_changes, None, initialize_block, ExecutionManager::NativeWhenPossible, @@ -338,6 +340,7 @@ mod tests { _method: &str, _call_data: &[u8], _changes: &RefCell, + _offchain_changes: &RefCell, _storage_transaction_cache: Option<&RefCell< StorageTransactionCache< Block, diff --git a/client/src/light/mod.rs b/client/src/light/mod.rs index 2bb6c853768..60bb87394f9 100644 --- a/client/src/light/mod.rs +++ b/client/src/light/mod.rs @@ -31,7 +31,7 @@ use sp_blockchain::Result as ClientResult; use prometheus_endpoint::Registry; use crate::call_executor::LocalCallExecutor; -use crate::client::Client; +use crate::client::{Client,ClientConfig}; use sc_client_api::{ light::Storage as BlockchainStorage, CloneableSpawn, }; @@ -77,7 +77,7 @@ pub fn new_light( S: BlockchainStorage + 'static, E: CodeExecutor + RuntimeInfo + Clone + 'static, { - let local_executor = LocalCallExecutor::new(backend.clone(), code_executor, spawn_handle.clone()); + let local_executor = LocalCallExecutor::new(backend.clone(), code_executor, spawn_handle.clone(), ClientConfig::default()); let executor = GenesisCallExecutor::new(backend.clone(), local_executor); Client::new( backend, @@ -87,6 +87,7 @@ pub fn new_light( Default::default(), Default::default(), prometheus_registry, + ClientConfig::default(), ) } diff --git a/primitives/api/proc-macro/src/decl_runtime_apis.rs b/primitives/api/proc-macro/src/decl_runtime_apis.rs index ef50bd840a7..440176bc468 100644 --- a/primitives/api/proc-macro/src/decl_runtime_apis.rs +++ b/primitives/api/proc-macro/src/decl_runtime_apis.rs @@ -407,6 +407,7 @@ fn generate_call_api_at_calls(decl: &ItemTrait) -> Result { at: &#crate_::BlockId, args: Vec, changes: &std::cell::RefCell<#crate_::OverlayedChanges>, + offchain_changes: &std::cell::RefCell<#crate_::OffchainOverlayedChanges>, storage_transaction_cache: &std::cell::RefCell< #crate_::StorageTransactionCache >, @@ -436,6 +437,7 @@ fn generate_call_api_at_calls(decl: &ItemTrait) -> Result { native_call: None, arguments: args, overlayed_changes: changes, + offchain_changes, storage_transaction_cache, initialize_block, context, @@ -456,6 +458,7 @@ fn generate_call_api_at_calls(decl: &ItemTrait) -> Result { native_call, arguments: args, overlayed_changes: changes, + offchain_changes, storage_transaction_cache, initialize_block, context, diff --git a/primitives/api/proc-macro/src/impl_runtime_apis.rs b/primitives/api/proc-macro/src/impl_runtime_apis.rs index 7def6aa0fb7..7423dbec559 100644 --- a/primitives/api/proc-macro/src/impl_runtime_apis.rs +++ b/primitives/api/proc-macro/src/impl_runtime_apis.rs @@ -207,6 +207,7 @@ fn generate_runtime_api_base_structures() -> Result { commit_on_success: std::cell::RefCell, initialized_block: std::cell::RefCell>>, changes: std::cell::RefCell<#crate_::OverlayedChanges>, + offchain_changes: std::cell::RefCell<#crate_::OffchainOverlayedChanges>, storage_transaction_cache: std::cell::RefCell< #crate_::StorageTransactionCache >, @@ -335,6 +336,7 @@ fn generate_runtime_api_base_structures() -> Result { commit_on_success: true.into(), initialized_block: None.into(), changes: Default::default(), + offchain_changes: Default::default(), recorder: Default::default(), storage_transaction_cache: Default::default(), }.into() @@ -353,6 +355,7 @@ fn generate_runtime_api_base_structures() -> Result { &C, &Self, &std::cell::RefCell<#crate_::OverlayedChanges>, + &std::cell::RefCell<#crate_::OffchainOverlayedChanges>, &std::cell::RefCell<#crate_::StorageTransactionCache>, &std::cell::RefCell>>, &Option<#crate_::ProofRecorder>, @@ -366,6 +369,7 @@ fn generate_runtime_api_base_structures() -> Result { &self.call, self, &self.changes, + &self.offchain_changes, &self.storage_transaction_cache, &self.initialized_block, &self.recorder, @@ -517,6 +521,7 @@ impl<'a> Fold for ApiRuntimeImplToApiRuntimeApiImpl<'a> { call_runtime_at, core_api, changes, + offchain_changes, storage_transaction_cache, initialized_block, recorder @@ -527,6 +532,7 @@ impl<'a> Fold for ApiRuntimeImplToApiRuntimeApiImpl<'a> { at, params_encoded, changes, + offchain_changes, storage_transaction_cache, initialized_block, params.map(|p| { diff --git a/primitives/api/src/lib.rs b/primitives/api/src/lib.rs index a3fc15ba7e2..f8a22c45665 100644 --- a/primitives/api/src/lib.rs +++ b/primitives/api/src/lib.rs @@ -27,6 +27,8 @@ //! //! Besides the macros and the [`Core`] runtime api, this crates provides the [`Metadata`] runtime //! api, the [`ApiExt`] trait, the [`CallApiAt`] trait and the [`ConstructRuntimeApi`] trait. +//! +//! On a meta level this implies, the client calls the generated API from the client perspective. #![cfg_attr(not(feature = "std"), no_std)] @@ -44,6 +46,8 @@ pub use sp_core::NativeOrEncoded; #[doc(hidden)] #[cfg(feature = "std")] pub use hash_db::Hasher; +#[cfg(feature = "std")] +pub use sp_core::offchain::storage::OffchainOverlayedChanges; #[doc(hidden)] #[cfg(not(feature = "std"))] pub use sp_core::to_substrate_wasm_fn_return_value; @@ -431,6 +435,8 @@ pub struct CallApiAtParams<'a, Block: BlockT, C, NC, Backend: StateBackend, /// The overlayed changes that are on top of the state. pub overlayed_changes: &'a RefCell, + /// The overlayed changes to be applied to the offchain worker database. + pub offchain_changes: &'a RefCell, /// The cache for storage transactions. pub storage_transaction_cache: &'a RefCell>, /// Determines if the function requires that `initialize_block` should be called before calling diff --git a/primitives/core/src/offchain/mod.rs b/primitives/core/src/offchain/mod.rs index c393b0f9f88..e792d71afca 100644 --- a/primitives/core/src/offchain/mod.rs +++ b/primitives/core/src/offchain/mod.rs @@ -28,6 +28,9 @@ pub mod storage; #[cfg(feature = "std")] pub mod testing; +/// Local storage prefix used by the Offchain Worker API to +pub const STORAGE_PREFIX : &'static [u8] = b"storage"; + /// Offchain workers local storage. pub trait OffchainStorage: Clone + Send + Sync { /// Persist a value in storage under given key and prefix. @@ -482,8 +485,8 @@ pub trait Externalities: Send { buffer: &mut [u8], deadline: Option ) -> Result; - } + impl Externalities for Box { fn is_validator(&self) -> bool { (& **self).is_validator() @@ -557,6 +560,7 @@ impl Externalities for Box { (&mut **self).http_response_read_body(request_id, buffer, deadline) } } + /// An `OffchainExternalities` implementation with limited capabilities. pub struct LimitedExternalities { capabilities: Capabilities, diff --git a/primitives/core/src/offchain/storage.rs b/primitives/core/src/offchain/storage.rs index 31b6423e5d8..830c25392b7 100644 --- a/primitives/core/src/offchain/storage.rs +++ b/primitives/core/src/offchain/storage.rs @@ -18,6 +18,7 @@ use std::collections::hash_map::{HashMap, Entry}; use crate::offchain::OffchainStorage; +use std::iter::Iterator; /// In-memory storage for offchain workers. #[derive(Debug, Clone, Default)] @@ -25,6 +26,24 @@ pub struct InMemOffchainStorage { storage: HashMap, Vec>, } +impl InMemOffchainStorage { + /// Consume the offchain storage and iterate over all key value pairs. + pub fn into_iter(self) -> impl Iterator,Vec)> { + self.storage.into_iter() + } + + /// Iterate over all key value pairs by reference. + pub fn iter<'a>(&'a self) -> impl Iterator,&'a Vec)> { + self.storage.iter() + } + + /// Remove a key and its associated value from the offchain database. + pub fn remove(&mut self, prefix: &[u8], key: &[u8]) { + let key: Vec = prefix.iter().chain(key).cloned().collect(); + let _ = self.storage.remove(&key); + } +} + impl OffchainStorage for InMemOffchainStorage { fn set(&mut self, prefix: &[u8], key: &[u8], value: &[u8]) { let key = prefix.iter().chain(key).cloned().collect(); @@ -58,3 +77,212 @@ impl OffchainStorage for InMemOffchainStorage { } } } + + + + +/// Change to be applied to the offchain worker db in regards to a key. +#[derive(Debug,Clone,Hash,Eq,PartialEq)] +pub enum OffchainOverlayedChange { + /// Remove the data associated with the key + Remove, + /// Overwrite the value of an associated key + SetValue(Vec), +} + +/// In-memory storage for offchain workers recoding changes for the actual offchain storage implementation. +#[derive(Debug, Clone)] +pub enum OffchainOverlayedChanges { + /// Writing overlay changes to the offchain worker database is disabled by configuration. + Disabled, + /// Overlay changes can be recorded using the inner collection of this variant. + Enabled(HashMap, OffchainOverlayedChange>), +} + +impl Default for OffchainOverlayedChanges { + fn default() -> Self { + Self::Disabled + } +} + +impl OffchainOverlayedChanges { + /// Create the disabled variant. + pub fn disabled() -> Self { + Self::Disabled + } + + /// Create the enabled variant. + pub fn enabled() -> Self { + Self::Enabled(HashMap::new()) + } + + /// Consume the offchain storage and iterate over all key value pairs. + pub fn into_iter(self) -> OffchainOverlayedChangesIntoIter { + OffchainOverlayedChangesIntoIter::new(self) + } + + /// Iterate over all key value pairs by reference. + pub fn iter<'a>(&'a self) -> OffchainOverlayedChangesIter { + OffchainOverlayedChangesIter::new(&self) + } + + /// Drain all elements of changeset. + pub fn drain<'a, 'd>(&'a mut self) -> OffchainOverlayedChangesDrain<'d> where 'a: 'd { + OffchainOverlayedChangesDrain::new(self) + } + + /// Remove a key and its associated value from the offchain database. + pub fn remove(&mut self, prefix: &[u8], key: &[u8]) { + if let Self::Enabled(ref mut storage) = self { + let key: Vec = prefix.iter().chain(key).cloned().collect(); + let _ = storage.insert(key, OffchainOverlayedChange::Remove); + } + } + + /// Set the value associated with a key under a prefix to the value provided. + pub fn set(&mut self, prefix: &[u8], key: &[u8], value: &[u8]) { + if let Self::Enabled(ref mut storage) = self { + let key = prefix.iter().chain(key).cloned().collect(); + let _ = storage.insert(key, OffchainOverlayedChange::SetValue(value.to_vec())); + } + } + + /// Obtain a associated value to the given key in storage with prefix. + pub fn get(&self, prefix: &[u8], key: &[u8]) -> Option { + if let Self::Enabled(ref storage) = self { + let key: Vec = prefix.iter().chain(key).cloned().collect(); + storage.get(&key).cloned() + } else { + None + } + } +} + +use std::collections::hash_map; + +/// Iterate by reference over the prepared offchain worker storage changes. +pub struct OffchainOverlayedChangesIter<'i> { + inner: Option, OffchainOverlayedChange>>, +} + +impl<'i> Iterator for OffchainOverlayedChangesIter<'i> { + type Item = (&'i Vec, &'i OffchainOverlayedChange); + fn next(&mut self) -> Option { + if let Some(ref mut iter) = self.inner { + iter.next() + } else { + None + } + } +} + +impl<'i> OffchainOverlayedChangesIter<'i> { + /// Create a new iterator based on a refernce to the parent container. + pub fn new(container: &'i OffchainOverlayedChanges) -> Self { + match container { + OffchainOverlayedChanges::Enabled(inner) => Self { + inner: Some(inner.iter()) + }, + OffchainOverlayedChanges::Disabled => Self { inner: None, }, + } + } +} + + +/// Iterate by value over the prepared offchain worker storage changes. +pub struct OffchainOverlayedChangesIntoIter { + inner: Option,OffchainOverlayedChange>>, +} + +impl Iterator for OffchainOverlayedChangesIntoIter { + type Item = (Vec, OffchainOverlayedChange); + fn next(&mut self) -> Option { + if let Some(ref mut iter) = self.inner { + iter.next() + } else { + None + } + } +} + +impl OffchainOverlayedChangesIntoIter { + /// Create a new iterator by consuming the collection. + pub fn new(container: OffchainOverlayedChanges) -> Self { + match container { + OffchainOverlayedChanges::Enabled(inner) => Self { + inner: Some(inner.into_iter()) + }, + OffchainOverlayedChanges::Disabled => Self { inner: None, }, + } + } +} + +/// Iterate over all items while draining them from the collection. +pub struct OffchainOverlayedChangesDrain<'d> { + inner: Option,OffchainOverlayedChange>>, +} + +impl<'d> Iterator for OffchainOverlayedChangesDrain<'d> { + type Item = (Vec, OffchainOverlayedChange); + fn next(&mut self) -> Option { + if let Some(ref mut iter) = self.inner { + iter.next() + } else { + None + } + } +} + +impl<'d> OffchainOverlayedChangesDrain<'d> { + /// Create a new iterator by taking a mut reference to the collection, + /// for the lifetime of the created drain iterator. + pub fn new(container: &'d mut OffchainOverlayedChanges) -> Self { + match container { + OffchainOverlayedChanges::Enabled(ref mut inner) => Self { + inner: Some(inner.drain()) + }, + OffchainOverlayedChanges::Disabled => Self { inner: None, }, + } + } +} + + +#[cfg(test)] +mod test { + use super::*; + use super::super::STORAGE_PREFIX; + + #[test] + fn test_drain() { + let mut ooc = OffchainOverlayedChanges::enabled(); + ooc.set(STORAGE_PREFIX,b"kkk", b"vvv"); + let drained = ooc.drain().count(); + assert_eq!(drained, 1); + let leftover = ooc.iter().count(); + assert_eq!(leftover, 0); + + ooc.set(STORAGE_PREFIX, b"a", b"v"); + ooc.set(STORAGE_PREFIX, b"b", b"v"); + ooc.set(STORAGE_PREFIX, b"c", b"v"); + ooc.set(STORAGE_PREFIX, b"d", b"v"); + ooc.set(STORAGE_PREFIX, b"e", b"v"); + assert_eq!(ooc.iter().count(), 5); + } + + #[test] + fn test_accumulated_set_remove_set() { + let mut ooc = OffchainOverlayedChanges::enabled(); + ooc.set(STORAGE_PREFIX, b"ppp", b"qqq"); + ooc.remove(STORAGE_PREFIX, b"ppp"); + // keys are equiv, so it will overwrite the value and the overlay will contain + // one item + assert_eq!(ooc.iter().count(), 1); + + ooc.set(STORAGE_PREFIX, b"ppp", b"rrr"); + let mut iter = ooc.into_iter(); + let mut k = STORAGE_PREFIX.to_vec(); + k.extend_from_slice(&b"ppp"[..]); + assert_eq!(iter.next(), Some((k, OffchainOverlayedChange::SetValue(b"rrr".to_vec())))); + assert_eq!(iter.next(), None); + } +} diff --git a/primitives/externalities/src/lib.rs b/primitives/externalities/src/lib.rs index 96f17579a29..f00742b2e8e 100644 --- a/primitives/externalities/src/lib.rs +++ b/primitives/externalities/src/lib.rs @@ -47,6 +47,9 @@ pub enum Error { /// /// Provides access to the storage and to other registered extensions. pub trait Externalities: ExtensionStore { + /// Write a key value pair to the offchain storage database. + fn set_offchain_storage(&mut self, key: &[u8], value: Option<&[u8]>); + /// Read runtime storage. fn storage(&self, key: &[u8]) -> Option>; diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index 344ce1a79a9..c7da89ab720 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -613,6 +613,20 @@ pub trait Hashing { } } +/// Interface that provides functions to access the Offchain DB. +#[runtime_interface] +pub trait OffchainIndex { + /// Write a key value pair to the Offchain DB database in a buffered fashion. + fn set(&mut self, key: &[u8], value: &[u8]) { + self.set_offchain_storage(key, Some(value)); + } + + /// Remove a key and its associated value from the Offchain DB. + fn clear(&mut self, key: &[u8]) { + self.set_offchain_storage(key, None); + } +} + #[cfg(feature = "std")] sp_externalities::decl_extension! { /// The keystore extension to register/retrieve from the externalities. @@ -620,6 +634,8 @@ sp_externalities::decl_extension! { } /// Interface that provides functions to access the offchain functionality. +/// +/// These functions are being made available to the runtime and are called by the runtime. #[runtime_interface] pub trait Offchain { /// Returns if the local node is a potential validator. @@ -995,6 +1011,7 @@ pub type SubstrateHostFunctions = ( logging::HostFunctions, sandbox::HostFunctions, crate::trie::HostFunctions, + offchain_index::HostFunctions, ); #[cfg(test)] diff --git a/primitives/offchain/Cargo.toml b/primitives/offchain/Cargo.toml index 2f87cb1b168..ddac54372ea 100644 --- a/primitives/offchain/Cargo.toml +++ b/primitives/offchain/Cargo.toml @@ -12,12 +12,17 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +[dev-dependencies] +sp-state-machine = { version = "0.8.0-alpha.5", default-features = false, path = "../state-machine" } + [features] default = ["std"] std = [ + "sp-core/std", "sp-api/std", "sp-runtime/std" ] diff --git a/primitives/offchain/src/lib.rs b/primitives/offchain/src/lib.rs index ae02fed4967..8f043d712a8 100644 --- a/primitives/offchain/src/lib.rs +++ b/primitives/offchain/src/lib.rs @@ -19,8 +19,8 @@ #![cfg_attr(not(feature = "std"), no_std)] #![warn(missing_docs)] -/// Local Storage Prefix used by the Offchain Worker API to -pub const STORAGE_PREFIX: &[u8] = b"storage"; +/// Re-export of parent module scope storage prefix. +pub use sp_core::offchain::STORAGE_PREFIX as STORAGE_PREFIX; sp_api::decl_runtime_apis! { /// The offchain worker api. diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index 9eeba041d7c..54554a08903 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -140,6 +140,8 @@ impl From> for BasicExternalities { } impl Externalities for BasicExternalities { + fn set_offchain_storage(&mut self, _key: &[u8], _value: Option<&[u8]>) {} + fn storage(&self, key: &[u8]) -> Option { self.inner.top.get(key).cloned() } diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 60c7ef38002..c92b9e894a3 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -24,6 +24,7 @@ use crate::{ use hash_db::Hasher; use sp_core::{ + offchain::storage::OffchainOverlayedChanges, storage::{well_known_keys::is_child_storage_key, ChildInfo}, traits::Externalities, hexdisplay::HexDisplay, }; @@ -74,6 +75,8 @@ pub struct Ext<'a, H, N, B> { /// The overlayed changes to write to. overlay: &'a mut OverlayedChanges, + /// The overlayed changes destined for the Offchain DB. + offchain_overlay: &'a mut OffchainOverlayedChanges, /// The storage backend to read from. backend: &'a B, /// The cache for the storage transactions. @@ -99,13 +102,15 @@ where /// Create a new `Ext` from overlayed changes and read-only backend pub fn new( overlay: &'a mut OverlayedChanges, + offchain_overlay: &'a mut OffchainOverlayedChanges, storage_transaction_cache: &'a mut StorageTransactionCache, backend: &'a B, changes_trie_state: Option>, extensions: Option<&'a mut Extensions>, ) -> Self { - Ext { + Self { overlay, + offchain_overlay, backend, changes_trie_state, storage_transaction_cache, @@ -121,6 +126,11 @@ where fn mark_dirty(&mut self) { self.storage_transaction_cache.reset(); } + + /// Read only accessor for the scheduled overlay changes. + pub fn get_offchain_storage_changes(&self) -> &OffchainOverlayedChanges { + &*self.offchain_overlay + } } #[cfg(test)] @@ -152,6 +162,15 @@ where B: 'a + Backend, N: crate::changes_trie::BlockNumber, { + + fn set_offchain_storage(&mut self, key: &[u8], value: Option<&[u8]>) { + use ::sp_core::offchain::STORAGE_PREFIX; + match value { + Some(value) => self.offchain_overlay.set(STORAGE_PREFIX, key, value), + None => self.offchain_overlay.remove(STORAGE_PREFIX, key), + } + } + fn storage(&self, key: &[u8]) -> Option { let _guard = sp_panic_handler::AbortGuard::force_abort(); let result = self.overlay.storage(key).map(|x| x.map(|x| x.to_vec())).unwrap_or_else(|| @@ -572,14 +591,23 @@ mod tests { use hex_literal::hex; use num_traits::Zero; use codec::Encode; - use sp_core::{H256, Blake2Hasher, storage::well_known_keys::EXTRINSIC_INDEX, map}; + use sp_core::{ + H256, + Blake2Hasher, + map, + offchain, + storage::{ + Storage, + StorageChild, + well_known_keys::EXTRINSIC_INDEX, + }, + }; use crate::{ changes_trie::{ Configuration as ChangesTrieConfiguration, InMemoryStorage as TestChangesTrieStorage, }, InMemoryBackend, overlayed_changes::OverlayedValue, }; - use sp_core::storage::{Storage, StorageChild}; type TestBackend = InMemoryBackend; type TestExt<'a> = Ext<'a, Blake2Hasher, u64, TestBackend>; @@ -602,6 +630,13 @@ mod tests { } } + fn prepare_offchain_overlay_with_changes() -> OffchainOverlayedChanges { + let mut ooc = OffchainOverlayedChanges::enabled(); + ooc.set(offchain::STORAGE_PREFIX, b"k1", b"v1"); + ooc.set(offchain::STORAGE_PREFIX, b"k2", b"v2"); + ooc + } + fn changes_trie_config() -> ChangesTrieConfiguration { ChangesTrieConfiguration { digest_interval: 0, @@ -612,29 +647,32 @@ mod tests { #[test] fn storage_changes_root_is_none_when_storage_is_not_provided() { let mut overlay = prepare_overlay_with_changes(); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let mut cache = StorageTransactionCache::default(); let backend = TestBackend::default(); - let mut ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let mut ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); assert_eq!(ext.storage_changes_root(&H256::default().encode()).unwrap(), None); } #[test] fn storage_changes_root_is_none_when_state_is_not_provided() { let mut overlay = prepare_overlay_with_changes(); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let mut cache = StorageTransactionCache::default(); let backend = TestBackend::default(); - let mut ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let mut ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); assert_eq!(ext.storage_changes_root(&H256::default().encode()).unwrap(), None); } #[test] fn storage_changes_root_is_some_when_extrinsic_changes_are_non_empty() { let mut overlay = prepare_overlay_with_changes(); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let mut cache = StorageTransactionCache::default(); let storage = TestChangesTrieStorage::with_blocks(vec![(99, Default::default())]); let state = Some(ChangesTrieState::new(changes_trie_config(), Zero::zero(), &storage)); let backend = TestBackend::default(); - let mut ext = TestExt::new(&mut overlay, &mut cache, &backend, state, None); + let mut ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, state, None); assert_eq!( ext.storage_changes_root(&H256::default().encode()).unwrap(), Some(hex!("bb0c2ef6e1d36d5490f9766cfcc7dfe2a6ca804504c3bb206053890d6dd02376").to_vec()), @@ -644,12 +682,13 @@ mod tests { #[test] fn storage_changes_root_is_some_when_extrinsic_changes_are_empty() { let mut overlay = prepare_overlay_with_changes(); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let mut cache = StorageTransactionCache::default(); overlay.prospective.top.get_mut(&vec![1]).unwrap().value = None; let storage = TestChangesTrieStorage::with_blocks(vec![(99, Default::default())]); let state = Some(ChangesTrieState::new(changes_trie_config(), Zero::zero(), &storage)); let backend = TestBackend::default(); - let mut ext = TestExt::new(&mut overlay, &mut cache, &backend, state, None); + let mut ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, state, None); assert_eq!( ext.storage_changes_root(&H256::default().encode()).unwrap(), Some(hex!("96f5aae4690e7302737b6f9b7f8567d5bbb9eac1c315f80101235a92d9ec27f4").to_vec()), @@ -662,6 +701,7 @@ mod tests { let mut overlay = OverlayedChanges::default(); overlay.set_storage(vec![20], None); overlay.set_storage(vec![30], Some(vec![31])); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let backend = Storage { top: map![ vec![10] => vec![10], @@ -671,7 +711,7 @@ mod tests { children_default: map![] }.into(); - let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); // next_backend < next_overlay assert_eq!(ext.next_storage_key(&[5]), Some(vec![10])); @@ -687,7 +727,7 @@ mod tests { drop(ext); overlay.set_storage(vec![50], Some(vec![50])); - let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); // next_overlay exist but next_backend doesn't exist assert_eq!(ext.next_storage_key(&[40]), Some(vec![50])); @@ -717,7 +757,9 @@ mod tests { }.into(); - let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); + + let ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); // next_backend < next_overlay assert_eq!(ext.next_child_storage_key(child_info, &[5]), Some(vec![10])); @@ -733,7 +775,7 @@ mod tests { drop(ext); overlay.set_child_storage(child_info, vec![50], Some(vec![50])); - let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); // next_overlay exist but next_backend doesn't exist assert_eq!(ext.next_child_storage_key(child_info, &[40]), Some(vec![50])); @@ -747,6 +789,7 @@ mod tests { let mut overlay = OverlayedChanges::default(); overlay.set_child_storage(child_info, vec![20], None); overlay.set_child_storage(child_info, vec![30], Some(vec![31])); + let mut offchain_overlay = prepare_offchain_overlay_with_changes(); let backend = Storage { top: map![], children_default: map![ @@ -761,7 +804,7 @@ mod tests { ], }.into(); - let ext = TestExt::new(&mut overlay, &mut cache, &backend, None, None); + let ext = TestExt::new(&mut overlay, &mut offchain_overlay, &mut cache, &backend, None, None); assert_eq!(ext.child_storage(child_info, &[10]), Some(vec![10])); assert_eq!( diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index efe289b5dcc..aa3a3ad5739 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -23,6 +23,7 @@ use log::{warn, trace}; use hash_db::Hasher; use codec::{Decode, Encode, Codec}; use sp_core::{ + offchain::storage::OffchainOverlayedChanges, storage::ChildInfo, NativeOrEncoded, NeverNativeValue, hexdisplay::HexDisplay, traits::{CodeExecutor, CallInWasmExt, RuntimeCode}, }; @@ -190,6 +191,7 @@ pub struct StateMachine<'a, B, H, N, Exec> method: &'a str, call_data: &'a [u8], overlay: &'a mut OverlayedChanges, + offchain_overlay: &'a mut OffchainOverlayedChanges, extensions: Extensions, changes_trie_state: Option>, storage_transaction_cache: Option<&'a mut StorageTransactionCache>, @@ -219,6 +221,7 @@ impl<'a, B, H, N, Exec> StateMachine<'a, B, H, N, Exec> where backend: &'a B, changes_trie_state: Option>, overlay: &'a mut OverlayedChanges, + offchain_overlay: &'a mut OffchainOverlayedChanges, exec: &'a Exec, method: &'a str, call_data: &'a [u8], @@ -236,6 +239,7 @@ impl<'a, B, H, N, Exec> StateMachine<'a, B, H, N, Exec> where call_data, extensions, overlay, + offchain_overlay, changes_trie_state, storage_transaction_cache: None, runtime_code, @@ -293,6 +297,7 @@ impl<'a, B, H, N, Exec> StateMachine<'a, B, H, N, Exec> where let mut ext = Ext::new( self.overlay, + self.offchain_overlay, cache, self.backend, self.changes_trie_state.clone(), @@ -503,11 +508,13 @@ where Exec: CodeExecutor + 'static + Clone, N: crate::changes_trie::BlockNumber, { + let mut offchain_overlay = OffchainOverlayedChanges::default(); let proving_backend = proving_backend::ProvingBackend::new(trie_backend); let mut sm = StateMachine::<_, H, N, Exec>::new( &proving_backend, None, overlay, + &mut offchain_overlay, exec, method, call_data, @@ -569,10 +576,12 @@ where Exec: CodeExecutor + Clone + 'static, N: crate::changes_trie::BlockNumber, { + let mut offchain_overlay = OffchainOverlayedChanges::default(); let mut sm = StateMachine::<_, H, N, Exec>::new( trie_backend, None, overlay, + &mut offchain_overlay, exec, method, call_data, @@ -824,12 +833,14 @@ mod tests { fn execute_works() { let backend = trie_backend::tests::test_trie(); let mut overlayed_changes = Default::default(); + let mut offchain_overlayed_changes = Default::default(); let wasm_code = RuntimeCode::empty(); let mut state_machine = StateMachine::new( &backend, changes_trie::disabled_state::<_, u64>(), &mut overlayed_changes, + &mut offchain_overlayed_changes, &DummyCodeExecutor { change_changes_trie_config: false, native_available: true, @@ -854,12 +865,14 @@ mod tests { fn execute_works_with_native_else_wasm() { let backend = trie_backend::tests::test_trie(); let mut overlayed_changes = Default::default(); + let mut offchain_overlayed_changes = Default::default(); let wasm_code = RuntimeCode::empty(); let mut state_machine = StateMachine::new( &backend, changes_trie::disabled_state::<_, u64>(), &mut overlayed_changes, + &mut offchain_overlayed_changes, &DummyCodeExecutor { change_changes_trie_config: false, native_available: true, @@ -881,12 +894,14 @@ mod tests { let mut consensus_failed = false; let backend = trie_backend::tests::test_trie(); let mut overlayed_changes = Default::default(); + let mut offchain_overlayed_changes = Default::default(); let wasm_code = RuntimeCode::empty(); let mut state_machine = StateMachine::new( &backend, changes_trie::disabled_state::<_, u64>(), &mut overlayed_changes, + &mut offchain_overlayed_changes, &DummyCodeExecutor { change_changes_trie_config: false, native_available: true, @@ -972,11 +987,14 @@ mod tests { ], ..Default::default() }; + let mut offchain_overlay = Default::default(); + { let mut cache = StorageTransactionCache::default(); let mut ext = Ext::new( &mut overlay, + &mut offchain_overlay, &mut cache, backend, changes_trie::disabled_state::<_, u64>(), @@ -1007,9 +1025,11 @@ mod tests { let mut state = new_in_mem::(); let backend = state.as_trie_backend().unwrap(); let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); let mut cache = StorageTransactionCache::default(); let mut ext = Ext::new( &mut overlay, + &mut offchain_overlay, &mut cache, backend, changes_trie::disabled_state::<_, u64>(), @@ -1103,12 +1123,14 @@ mod tests { use crate::trie_backend::tests::test_trie; let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); let mut transaction = { let backend = test_trie(); let mut cache = StorageTransactionCache::default(); let mut ext = Ext::new( &mut overlay, + &mut offchain_overlay, &mut cache, &backend, changes_trie::disabled_state::<_, u64>(), diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index f57d13ee3ff..cf7b582843e 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -30,6 +30,7 @@ use std::iter::FromIterator; use std::collections::{HashMap, BTreeMap, BTreeSet}; use codec::{Decode, Encode}; use sp_core::storage::{well_known_keys::EXTRINSIC_INDEX, ChildInfo}; +use sp_core::offchain::storage::OffchainOverlayedChanges; use std::{mem, ops}; use hash_db::Hasher; @@ -94,9 +95,12 @@ pub struct StorageChanges { pub main_storage_changes: StorageCollection, /// All changes to the child storages. pub child_storage_changes: ChildStorageCollection, + /// Offchain state changes to write to the offchain database. + pub offchain_storage_changes: OffchainOverlayedChanges, /// A transaction for the backend that contains all changes from /// [`main_storage_changes`](Self::main_storage_changes) and from /// [`child_storage_changes`](Self::child_storage_changes). + /// [`offchain_storage_changes`](Self::offchain_storage_changes). pub transaction: Transaction, /// The storage root after applying the transaction. pub transaction_storage_root: H::Out, @@ -111,6 +115,7 @@ impl StorageChanges { pub fn into_inner(self) -> ( StorageCollection, ChildStorageCollection, + OffchainOverlayedChanges, Transaction, H::Out, Option>, @@ -118,6 +123,7 @@ impl StorageChanges { ( self.main_storage_changes, self.child_storage_changes, + self.offchain_storage_changes, self.transaction, self.transaction_storage_root, self.changes_trie_transaction, @@ -162,6 +168,7 @@ impl Default for StorageChanges Self { main_storage_changes: Default::default(), child_storage_changes: Default::default(), + offchain_storage_changes: Default::default(), transaction: Default::default(), transaction_storage_root: Default::default(), changes_trie_transaction: None, @@ -503,11 +510,13 @@ impl OverlayedChanges { .take() .expect("Changes trie transaction was generated by `changes_trie_root`; qed"); + let offchain_storage_changes = Default::default(); let (main_storage_changes, child_storage_changes) = self.drain_committed(); Ok(StorageChanges { main_storage_changes: main_storage_changes.collect(), child_storage_changes: child_storage_changes.map(|(sk, it)| (sk, it.0.collect())).collect(), + offchain_storage_changes, transaction, transaction_storage_root, changes_trie_transaction, @@ -745,9 +754,11 @@ mod tests { ..Default::default() }; + let mut offchain_overlay = Default::default(); let mut cache = StorageTransactionCache::default(); let mut ext = Ext::new( &mut overlay, + &mut offchain_overlay, &mut cache, &backend, crate::changes_trie::disabled_state::<_, u64>(), diff --git a/primitives/state-machine/src/testing.rs b/primitives/state-machine/src/testing.rs index 5993ef5db62..70ee1f77d2e 100644 --- a/primitives/state-machine/src/testing.rs +++ b/primitives/state-machine/src/testing.rs @@ -30,6 +30,7 @@ use crate::{ }, }; use sp_core::{ + offchain::storage::OffchainOverlayedChanges, storage::{ well_known_keys::{CHANGES_TRIE_CONFIG, CODE, HEAP_PAGES, is_child_storage_key}, Storage, @@ -44,6 +45,7 @@ where H::Out: codec::Codec + Ord, { overlay: OverlayedChanges, + offchain_overlay: OffchainOverlayedChanges, storage_transaction_cache: StorageTransactionCache< as Backend>::Transaction, H, N >, @@ -61,6 +63,7 @@ impl TestExternalities pub fn ext(&mut self) -> Ext> { Ext::new( &mut self.overlay, + &mut self.offchain_overlay, &mut self.storage_transaction_cache, &self.backend, match self.changes_trie_config.clone() { @@ -98,11 +101,15 @@ impl TestExternalities storage.top.insert(HEAP_PAGES.to_vec(), 8u64.encode()); storage.top.insert(CODE.to_vec(), code.to_vec()); + let offchain_overlay = OffchainOverlayedChanges::enabled(); + let mut extensions = Extensions::default(); extensions.register(sp_core::traits::TaskExecutorExt(sp_core::tasks::executor())); + TestExternalities { overlay, + offchain_overlay, changes_trie_config, extensions, changes_trie_storage: ChangesTrieInMemoryStorage::new(), diff --git a/test-utils/client/src/lib.rs b/test-utils/client/src/lib.rs index 4880b296c70..bf3f8c68782 100644 --- a/test-utils/client/src/lib.rs +++ b/test-utils/client/src/lib.rs @@ -214,6 +214,7 @@ impl TestClientBuilder TestClientBuilder< let executor = executor.into().unwrap_or_else(|| NativeExecutor::new(WasmExecutionMethod::Interpreted, None, 8) ); - let executor = LocalCallExecutor::new(self.backend.clone(), executor, tasks_executor()); + let executor = LocalCallExecutor::new(self.backend.clone(), executor, tasks_executor(), Default::default()); self.build_with_executor(executor) } diff --git a/test-utils/runtime/client/src/lib.rs b/test-utils/runtime/client/src/lib.rs index 10360c80763..a2b38a342bc 100644 --- a/test-utils/runtime/client/src/lib.rs +++ b/test-utils/runtime/client/src/lib.rs @@ -352,7 +352,7 @@ pub fn new_light() -> ( let blockchain = Arc::new(sc_client::light::blockchain::Blockchain::new(storage)); let backend = Arc::new(LightBackend::new(blockchain.clone())); let executor = new_native_executor(); - let local_call_executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, sp_core::tasks::executor()); + let local_call_executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, sp_core::tasks::executor(), Default::default()); let call_executor = LightExecutor::new( backend.clone(), local_call_executor, diff --git a/utils/frame/benchmarking-cli/src/command.rs b/utils/frame/benchmarking-cli/src/command.rs index e71a4d95070..17205bc76e5 100644 --- a/utils/frame/benchmarking-cli/src/command.rs +++ b/utils/frame/benchmarking-cli/src/command.rs @@ -44,6 +44,7 @@ impl BenchmarkCmd { let genesis_storage = spec.build_storage()?; let mut changes = Default::default(); + let mut offchain_changes = Default::default(); let cache_size = Some(self.database_cache_size as usize); let state = BenchmarkingState::::new(genesis_storage, cache_size)?; let executor = NativeExecutor::::new( @@ -59,6 +60,7 @@ impl BenchmarkCmd { &state, None, &mut changes, + &mut offchain_changes, &executor, "Benchmark_dispatch_benchmark", &( -- GitLab From 66960eb024fef89336f60b76ddc68191a44158b2 Mon Sep 17 00:00:00 2001 From: Alexander Popiak Date: Fri, 24 Apr 2020 16:46:58 +0200 Subject: [PATCH 054/167] Calculate and refund weight for identity pallet (#5680) * add old_registrar_count as param to estimate weight * cast count to Weight Co-Authored-By: Shawn Tabrizi * add weight calculation for set_identity * remove superfluous weight comment * add detailed weight estimation for set_subs * adjust benchmarking code to the new API * add second parameter to set_subs benchmark * rename o to p * calculate weight based on benchmarks * use try_mutate for registrars * fix weight number typo * update weights for set_subs + add weights for clear_identity and request_judgement * improve naming and docs * add weight calculation for cancel_request * fix benchmark * fix tests * fix arithmetic overflow in balances triggered by tests * add weight calcluations for more dispatchables * add weight calculation for provide_judgement * mark param as unused * add MaxRegistrars associated type used for weight estimation * check that MaxRegistrars is not exceeded * add remaining weight calculations * use weight refunds to use more constants in weight estimation * adjust usage of clear_identity * refund request_judgement weights and remove param * refund weights for cancel_request and remove param * add remaining refunds and remove params * refund weight for set_subs and remove param * make comment more specific * add range note to benchmarking docs * fix inconsistencies before review * fix actual weight calculation for add_registrar * remove duplicate balance ops weights + refund on all dispatchables Co-authored-by: Shawn Tabrizi --- bin/node/runtime/src/lib.rs | 2 + frame/balances/src/lib.rs | 2 +- frame/benchmarking/src/lib.rs | 4 + frame/identity/src/benchmarking.rs | 49 ++-- frame/identity/src/lib.rs | 362 ++++++++++++++++++++++++----- 5 files changed, 341 insertions(+), 78 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 806ed5460df..bb8a007ed80 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -589,6 +589,7 @@ parameter_types! { pub const SubAccountDeposit: Balance = 2 * DOLLARS; // 53 bytes on-chain pub const MaxSubAccounts: u32 = 100; pub const MaxAdditionalFields: u32 = 100; + pub const MaxRegistrars: u32 = 20; } impl pallet_identity::Trait for Runtime { @@ -599,6 +600,7 @@ impl pallet_identity::Trait for Runtime { type SubAccountDeposit = SubAccountDeposit; type MaxSubAccounts = MaxSubAccounts; type MaxAdditionalFields = MaxAdditionalFields; + type MaxRegistrars = MaxRegistrars; type Slashed = Treasury; type ForceOrigin = pallet_collective::EnsureProportionMoreThan<_1, _2, AccountId, CouncilCollective>; type RegistrarOrigin = pallet_collective::EnsureProportionMoreThan<_1, _2, AccountId, CouncilCollective>; diff --git a/frame/balances/src/lib.rs b/frame/balances/src/lib.rs index 98d6a937381..5f86bbcec03 100644 --- a/frame/balances/src/lib.rs +++ b/frame/balances/src/lib.rs @@ -1099,7 +1099,7 @@ impl, I: Instance> Currency for Module where // equal and opposite cause (returned as an Imbalance), then in the // instance that there's no other accounts on the system at all, we might // underflow the issuance and our arithmetic will be off. - ensure!(value + account.reserved >= ed || !account.total().is_zero(), ()); + ensure!(value.saturating_add(account.reserved) >= ed || !account.total().is_zero(), ()); let imbalance = if account.free <= value { SignedImbalance::Positive(PositiveImbalance::new(value - account.free)) diff --git a/frame/benchmarking/src/lib.rs b/frame/benchmarking/src/lib.rs index 8045408d530..8a9df7e4cf3 100644 --- a/frame/benchmarking/src/lib.rs +++ b/frame/benchmarking/src/lib.rs @@ -69,6 +69,9 @@ pub use paste; /// (or not) by each arm. Syntax is available to allow for only the range to be drawn upon if /// desired, allowing an alternative instancing expression to be given. /// +/// Note that the ranges are *inclusive* on both sides. This is in contrast to ranges in Rust which +/// are left-inclusive right-exclusive. +/// /// Each arm may also have a block of code which is run prior to any instancing and a block of code /// which is run afterwards. All code blocks may draw upon the specific value of each parameter /// at any time. Local variables are shared between the two pre- and post- code blocks, but do not @@ -81,6 +84,7 @@ pub use paste; /// ```ignore /// benchmarks! { /// // common parameter; just one for this example. +/// // will be `1`, `MAX_LENGTH` or any value inbetween /// _ { /// let l in 1 .. MAX_LENGTH => initialize_l(l); /// } diff --git a/frame/identity/src/benchmarking.rs b/frame/identity/src/benchmarking.rs index fe99cd99072..81a9f3e1340 100644 --- a/frame/identity/src/benchmarking.rs +++ b/frame/identity/src/benchmarking.rs @@ -27,9 +27,6 @@ use sp_runtime::traits::Bounded; use crate::Module as Identity; -// The maximum number of identity registrars we will test. -const MAX_REGISTRARS: u32 = 50; - // Support Functions fn account(name: &'static str, index: u32) -> T::AccountId { let entropy = (name, index).using_encoded(blake2_256); @@ -53,9 +50,9 @@ fn add_registrars(r: u32) -> Result<(), &'static str> { Ok(()) } -// Adds `s` sub-accounts to the identity of `who`. Each wil have 32 bytes of raw data added to it. -// This additionally returns the vector of sub-accounts to it can be modified if needed. -fn add_sub_accounts(who: &T::AccountId, s: u32) -> Result, &'static str> { +// Create `s` sub-accounts for the identity of `who` and return them. +// Each will have 32 bytes of raw data added to it. +fn create_sub_accounts(who: &T::AccountId, s: u32) -> Result, &'static str> { let mut subs = Vec::new(); let who_origin = RawOrigin::Signed(who.clone()); let data = Data::Raw(vec![0; 32]); @@ -70,9 +67,18 @@ fn add_sub_accounts(who: &T::AccountId, s: u32) -> Result(1); Identity::::set_identity(who_origin.clone().into(), info)?; + Ok(subs) +} + +// Adds `s` sub-accounts to the identity of `who`. Each will have 32 bytes of raw data added to it. +// This additionally returns the vector of sub-accounts so it can be modified if needed. +fn add_sub_accounts(who: &T::AccountId, s: u32) -> Result, &'static str> { + let who_origin = RawOrigin::Signed(who.clone()); + let subs = create_sub_accounts::(who, s)?; + Identity::::set_subs(who_origin.into(), subs.clone())?; - return Ok(subs) + Ok(subs) } // This creates an `IdentityInfo` object with `num_fields` extra fields. @@ -98,7 +104,9 @@ fn create_identity_info(num_fields: u32) -> IdentityInfo { benchmarks! { // These are the common parameters along with their instancing. _ { - let r in 1 .. MAX_REGISTRARS => add_registrars::(r)?; + let r in 1 .. T::MaxRegistrars::get() => add_registrars::(r)?; + // extra parameter for the set_subs bench for previous sub accounts + let p in 1 .. T::MaxSubAccounts::get() => (); let s in 1 .. T::MaxSubAccounts::get() => { // Give them s many sub accounts let caller = account::("caller", 0); @@ -114,7 +122,7 @@ benchmarks! { } add_registrar { - let r in ...; + let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; }: _(RawOrigin::Root, account::("registrar", r + 1)) set_identity { @@ -153,16 +161,13 @@ benchmarks! { set_subs { let caller = account::("caller", 0); - // Give them s many sub accounts. - let s in 1 .. T::MaxSubAccounts::get() - 1 => { - let _ = add_sub_accounts::(&caller, s)?; + // Give them p many previous sub accounts. + let p in 1 .. T::MaxSubAccounts::get() => { + let _ = add_sub_accounts::(&caller, p)?; }; - - let mut subs = Module::::subs(&caller); - - // Create an s + 1 sub account. - let data = Data::Raw(vec![0; 32]); - subs.push((account::("sub", s + 1), data)); + // Create a new subs vec with s sub accounts + let s in 1 .. T::MaxSubAccounts::get() => (); + let subs = create_sub_accounts::(&caller, s)?; }: _(RawOrigin::Signed(caller), subs) @@ -210,7 +215,7 @@ benchmarks! { set_fee { let caller = account::("caller", 0); - let r in ...; + let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; Identity::::add_registrar(RawOrigin::Root.into(), caller.clone())?; }: _(RawOrigin::Signed(caller), r, 10.into()) @@ -219,7 +224,7 @@ benchmarks! { let caller = account::("caller", 0); let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let r in ...; + let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; Identity::::add_registrar(RawOrigin::Root.into(), caller.clone())?; }: _(RawOrigin::Signed(caller), r, account::("new", 0)) @@ -228,7 +233,7 @@ benchmarks! { let caller = account::("caller", 0); let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let r in ...; + let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; Identity::::add_registrar(RawOrigin::Root.into(), caller.clone())?; let fields = IdentityFields( @@ -247,7 +252,7 @@ benchmarks! { let caller = account::("caller", 0); let _ = T::Currency::make_free_balance_be(&caller, BalanceOf::::max_value()); - let r in ...; + let r in 1 .. T::MaxRegistrars::get() - 1 => add_registrars::(r)?; // For this x, it's the user identity that gts the fields, not the caller. let x in _ .. _ => { let info = create_identity_info::(x); diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index 31eb93f04b2..273cf5f71a5 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -69,12 +69,13 @@ use sp_std::prelude::*; use sp_std::{fmt::Debug, ops::Add, iter::once}; use enumflags2::BitFlags; use codec::{Encode, Decode}; -use sp_runtime::{DispatchResult, RuntimeDebug}; +use sp_runtime::{DispatchError, RuntimeDebug}; use sp_runtime::traits::{StaticLookup, Zero, AppendZerosInput}; use frame_support::{ decl_module, decl_event, decl_storage, ensure, decl_error, + dispatch::DispatchResultWithPostInfo, traits::{Currency, ReservableCurrency, OnUnbalanced, Get, BalanceStatus, EnsureOrigin}, - weights::MINIMUM_WEIGHT, + weights::Weight, }; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -108,6 +109,10 @@ pub trait Trait: frame_system::Trait { /// required to access an identity, but can be pretty high. type MaxAdditionalFields: Get; + /// Maxmimum number of registrars allowed in the system. Needed to bound the complexity + /// of, e.g., updating judgements. + type MaxRegistrars: Get; + /// What to do with slashed funds. type Slashed: OnUnbalanced>; @@ -451,9 +456,107 @@ decl_error! { InvalidTarget, /// Too many additional fields. TooManyFields, + /// Maximum amount of registrars reached. Cannot add any more. + TooManyRegistrars, } } +/// Functions for calcuating the weight of dispatchables. +mod weight_for { + use frame_support::weights::{RuntimeDbWeight, Weight}; + + /// Weight calculation for `set_identity`. + pub(crate) fn set_identity( + db: RuntimeDbWeight, + judgements: impl Into, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(1, 1) + + 150_000_000 // constant + + 700_000 * judgements.into() // R + + 3_000_000 * extra_fields.into() // X + } + + /// Weight calculation for `set_subs`. + pub(crate) fn set_subs( + db: RuntimeDbWeight, + old_subs: impl Into + Copy, + subs: impl Into + Copy + ) -> Weight { + db.reads(1) // storage-exists (`IdentityOf::contains_key`) + + db.reads_writes(1, old_subs.into()) // `SubsOf::get` read + P old DB deletions + + db.writes(subs.into() + 1) // S + 1 new DB writes + + 130_000_000 // constant + + 5_200_000 * old_subs.into() // P + + 7_300_000 * subs.into() // S + } + + /// Weight calculation for `clear_identity`. + pub(crate) fn clear_identity( + db: RuntimeDbWeight, + judgements: impl Into, + subs: impl Into + Copy, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(2, subs.into() + 2) // S + 2 deletions + + 160_000_000 // constant + + 500_000 * judgements.into() // R + + 5_400_000 * subs.into() // S + + 2_000_000 * extra_fields.into() // X + } + + /// Weight calculation for `request_judgement`. + pub(crate) fn request_judgement( + db: RuntimeDbWeight, + judgements: impl Into, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(2, 1) + + 180_000_000 // constant + + 950_000 * judgements.into() // R + + 3_400_000 * extra_fields.into() // X + } + + /// Weight calculation for `cancel_request`. + pub(crate) fn cancel_request( + db: RuntimeDbWeight, + judgements: impl Into, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(1, 1) + + 150_000_000 // constant + + 600_000 * judgements.into() // R + + 3_600_000 * extra_fields.into() // X + } + + /// Weight calculation for `provide_judgement`. + pub(crate) fn provide_judgement( + db: RuntimeDbWeight, + judgements: impl Into, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(2, 1) + + 120_000_000 // constant + + 1_100_000 * judgements.into() // R + + 3_500_000 * extra_fields.into()// X + } + + /// Weight calculation for `kill_identity`. + pub(crate) fn kill_identity( + db: RuntimeDbWeight, + judgements: impl Into, + subs: impl Into + Copy, + extra_fields: impl Into + ) -> Weight { + db.reads_writes(3, subs.into() + 3) // 2 `take`s + S deletions + + db.reads_writes(1, 1) // balance ops + + 170_000_000 // constant + + 1_200_000 * judgements.into() // R + + 5_400_000 * subs.into() // S + + 2_300_000 * extra_fields.into() // X + } +} + decl_module! { // Simple declaration of the `Module` type. Lets the macro know what it's working on. pub struct Module for enum Call where origin: T::Origin { @@ -470,22 +573,32 @@ decl_module! { /// Emits `RegistrarAdded` if successful. /// /// # - /// - `O(R)` where `R` registrar-count (governance-bounded). + /// - `O(R)` where `R` registrar-count (governance-bounded and code-bounded). /// - One storage mutation (codec `O(R)`). /// - One event. + /// - Benchmarks: + /// - 78.71 + R * 0.965 µs (min squares analysis) + /// - 94.28 + R * 0.991 µs (min squares analysis) /// # - #[weight = MINIMUM_WEIGHT] - fn add_registrar(origin, account: T::AccountId) { + #[weight = T::DbWeight::get().reads_writes(1, 1) + + 95_000_000 // constant + + 1_000_000 * T::MaxRegistrars::get() as Weight // R + ] + fn add_registrar(origin, account: T::AccountId) -> DispatchResultWithPostInfo { T::RegistrarOrigin::try_origin(origin) .map(|_| ()) .or_else(ensure_root)?; - let i = >::mutate(|r| { - r.push(Some(RegistrarInfo { account, fee: Zero::zero(), fields: Default::default() })); - (r.len() - 1) as RegistrarIndex - }); + let (i, registrar_count) = >::try_mutate(|registrars| -> Result<(RegistrarIndex, usize), DispatchError> { + ensure!((registrars.len() as u32) < T::MaxRegistrars::get(), Error::::TooManyRegistrars); + registrars.push(Some(RegistrarInfo { account, fee: Zero::zero(), fields: Default::default() })); + Ok(((registrars.len() - 1) as RegistrarIndex, registrars.len())) + })?; Self::deposit_event(RawEvent::RegistrarAdded(i)); + + Ok(Some(T::DbWeight::get().reads_writes(1, 1) + + 95_000_000 + 1_000_000 * registrar_count as Weight).into()) } /// Set an account's identity information and reserve the appropriate deposit. @@ -493,21 +606,29 @@ decl_module! { /// If the account already has identity information, the deposit is taken as part payment /// for the new deposit. /// - /// The dispatch origin for this call must be _Signed_ and the sender must have a registered - /// identity. + /// The dispatch origin for this call must be _Signed_. /// /// - `info`: The identity information. /// /// Emits `IdentitySet` if successful. /// /// # - /// - `O(X + X' + R)` where `X` additional-field-count (deposit-bounded and code-bounded). - /// - At most two balance operations. + /// - `O(X + X' + R)` + /// - where `X` additional-field-count (deposit-bounded and code-bounded) + /// - where `R` judgements-count (registrar-count-bounded) + /// - One balance reserve operation. /// - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`). /// - One event. + /// - Benchmarks: + /// - 136.6 + R * 0.62 + X * 2.62 µs (min squares analysis) + /// - 146.2 + R * 0.372 + X * 2.98 µs (min squares analysis) /// # - #[weight = 50_000_000] - fn set_identity(origin, info: IdentityInfo) { + #[weight = weight_for::set_identity( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxAdditionalFields::get() // X + )] + fn set_identity(origin, info: IdentityInfo) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; let extra_fields = info.additional.len() as u32; ensure!(extra_fields <= T::MaxAdditionalFields::get(), Error::::TooManyFields); @@ -532,8 +653,15 @@ decl_module! { let _ = T::Currency::unreserve(&sender, old_deposit - id.deposit); } + let judgements = id.judgements.len() as Weight; >::insert(&sender, id); Self::deposit_event(RawEvent::IdentitySet(sender)); + + Ok(Some(weight_for::set_identity( + T::DbWeight::get(), + judgements, // R + extra_fields as Weight // X + )).into()) } /// Set the sub-accounts of the sender. @@ -544,16 +672,28 @@ decl_module! { /// The dispatch origin for this call must be _Signed_ and the sender must have a registered /// identity. /// - /// - `subs`: The identity's sub-accounts. + /// - `subs`: The identity's (new) sub-accounts. /// /// # - /// - `O(S)` where `S` subs-count (hard- and deposit-bounded). - /// - At most two balance operations. - /// - At most O(2 * S + 1) storage mutations; codec complexity `O(1 * S + S * 1)`); - /// one storage-exists. + /// - `O(P + S)` + /// - where `P` old-subs-count (hard- and deposit-bounded). + /// - where `S` subs-count (hard- and deposit-bounded). + /// - At most one balance operations. + /// - DB: + /// - `P + S` storage mutations (codec complexity `O(1)`) + /// - One storage read (codec complexity `O(P)`). + /// - One storage write (codec complexity `O(S)`). + /// - One storage-exists (`IdentityOf::contains_key`). + /// - Benchmarks: + /// - 115.2 + P * 5.11 + S * 6.67 µs (min squares analysis) + /// - 121 + P * 4.852 + S * 7.111 µs (min squares analysis) /// # - #[weight = 50_000_000] - fn set_subs(origin, subs: Vec<(T::AccountId, Data)>) { + #[weight = weight_for::set_subs( + T::DbWeight::get(), + T::MaxSubAccounts::get(), // P + subs.len() as Weight // S + )] + fn set_subs(origin, subs: Vec<(T::AccountId, Data)>) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; ensure!(>::contains_key(&sender), Error::::NotFound); ensure!(subs.len() <= T::MaxSubAccounts::get() as usize, Error::::TooManySubAccounts); @@ -576,15 +716,22 @@ decl_module! { >::insert(&id, (sender.clone(), name)); id }).collect::>(); + let new_subs = ids.len() as Weight; if ids.is_empty() { >::remove(&sender); } else { >::insert(&sender, (new_deposit, ids)); } + + Ok(Some(weight_for::set_subs( + T::DbWeight::get(), + old_ids.len() as Weight, // P + new_subs // S + )).into()) } - /// Clear an account's identity info and all sub-account and return all deposits. + /// Clear an account's identity info and all sub-accounts and return all deposits. /// /// Payment: All reserved balances on the account are returned. /// @@ -594,17 +741,29 @@ decl_module! { /// Emits `IdentityCleared` if successful. /// /// # - /// - `O(R + S + X)`. - /// - One balance-reserve operation. - /// - `S + 2` storage deletions. + /// - `O(R + S + X)` + /// - where `R` registrar-count (governance-bounded). + /// - where `S` subs-count (hard- and deposit-bounded). + /// - where `X` additional-field-count (deposit-bounded and code-bounded). + /// - One balance-unreserve operation. + /// - `2` storage reads and `S + 2` storage deletions. /// - One event. + /// - Benchmarks: + /// - 152.3 + R * 0.306 + S * 4.967 + X * 1.697 µs (min squares analysis) + /// - 139.5 + R * 0.466 + S * 5.304 + X * 1.895 µs (min squares analysis) /// # - #[weight = 50_000_000] - fn clear_identity(origin) { + #[weight = weight_for::clear_identity( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxSubAccounts::get(), // S + T::MaxAdditionalFields::get() // X + )] + fn clear_identity(origin) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; let (subs_deposit, sub_ids) = >::take(&sender); - let deposit = >::take(&sender).ok_or(Error::::NotNamed)?.total_deposit() + let id = >::take(&sender).ok_or(Error::::NotNamed)?; + let deposit = id.total_deposit() + subs_deposit; for sub in sub_ids.iter() { >::remove(sub); @@ -613,6 +772,13 @@ decl_module! { let _ = T::Currency::unreserve(&sender, deposit.clone()); Self::deposit_event(RawEvent::IdentityCleared(sender, deposit)); + + Ok(Some(weight_for::clear_identity( + T::DbWeight::get(), + id.judgements.len() as Weight, // R + sub_ids.len() as Weight, // S + id.info.additional.len() as Weight // X + )).into()) } /// Request a judgement from a registrar. @@ -627,7 +793,7 @@ decl_module! { /// - `max_fee`: The maximum fee that may be paid. This should just be auto-populated as: /// /// ```nocompile - /// Self::registrars(reg_index).unwrap().fee + /// Self::registrars().get(reg_index).unwrap().fee /// ``` /// /// Emits `JudgementRequested` if successful. @@ -637,12 +803,19 @@ decl_module! { /// - One balance-reserve operation. /// - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`. /// - One event. + /// - Benchmarks: + /// - 154 + R * 0.932 + X * 3.302 µs (min squares analysis) + /// - 172.9 + R * 0.69 + X * 3.304 µs (min squares analysis) /// # - #[weight = 50_000_000] + #[weight = weight_for::request_judgement( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxAdditionalFields::get() // X + )] fn request_judgement(origin, #[compact] reg_index: RegistrarIndex, #[compact] max_fee: BalanceOf, - ) { + ) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; let registrars = >::get(); let registrar = registrars.get(reg_index as usize).and_then(Option::as_ref) @@ -662,9 +835,13 @@ decl_module! { T::Currency::reserve(&sender, registrar.fee)?; + let judgements = id.judgements.len() as Weight; + let extra_fields = id.info.additional.len() as Weight; >::insert(&sender, id); Self::deposit_event(RawEvent::JudgementRequested(sender, reg_index)); + + Ok(Some(weight_for::request_judgement(T::DbWeight::get(), judgements, extra_fields)).into()) } /// Cancel a previous request. @@ -683,9 +860,16 @@ decl_module! { /// - One balance-reserve operation. /// - One storage mutation `O(R + X)`. /// - One event. + /// - Benchmarks: + /// - 135.3 + R * 0.574 + X * 3.394 µs (min squares analysis) + /// - 144.3 + R * 0.316 + X * 3.53 µs (min squares analysis) /// # - #[weight = 50_000_000] - fn cancel_request(origin, reg_index: RegistrarIndex) { + #[weight = weight_for::cancel_request( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxAdditionalFields::get() // X + )] + fn cancel_request(origin, reg_index: RegistrarIndex) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; let mut id = >::get(&sender).ok_or(Error::::NoIdentity)?; @@ -698,9 +882,13 @@ decl_module! { }; let _ = T::Currency::unreserve(&sender, fee); + let judgements = id.judgements.len() as Weight; + let extra_fields = id.info.additional.len() as Weight; >::insert(&sender, id); Self::deposit_event(RawEvent::JudgementUnrequested(sender, reg_index)); + + Ok(Some(weight_for::request_judgement(T::DbWeight::get(), judgements, extra_fields)).into()) } /// Set the fee required for a judgement to be requested from a registrar. @@ -714,20 +902,29 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. + /// - Benchmarks: + /// - 23.81 + R * 0.774 µs (min squares analysis) /// # - #[weight = 50_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + + 24_000_000 // constant + + 780_000 * T::MaxRegistrars::get() as Weight // R + ] fn set_fee(origin, #[compact] index: RegistrarIndex, #[compact] fee: BalanceOf, - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; - >::mutate(|rs| + let registrars = >::mutate(|rs| -> Result { rs.get_mut(index as usize) .and_then(|x| x.as_mut()) .and_then(|r| if r.account == who { r.fee = fee; Some(()) } else { None }) - .ok_or_else(|| Error::::InvalidIndex.into()) - ) + .ok_or_else(|| DispatchError::from(Error::::InvalidIndex))?; + Ok(rs.len()) + })?; + Ok(Some(T::DbWeight::get().reads_writes(1, 1) + + 24_000_000 + 780_000 * registrars as Weight // R + ).into()) } /// Change the account associated with a registrar. @@ -741,20 +938,28 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. + /// - Benchmark: 24.59 + R * 0.832 µs (min squares analysis) /// # - #[weight = 50_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + + 25_000_000 // constant + + 850_000 * T::MaxRegistrars::get() as Weight // R + ] fn set_account_id(origin, #[compact] index: RegistrarIndex, new: T::AccountId, - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; - >::mutate(|rs| + let registrars = >::mutate(|rs| -> Result { rs.get_mut(index as usize) .and_then(|x| x.as_mut()) .and_then(|r| if r.account == who { r.account = new; Some(()) } else { None }) - .ok_or_else(|| Error::::InvalidIndex.into()) - ) + .ok_or_else(|| DispatchError::from(Error::::InvalidIndex))?; + Ok(rs.len()) + })?; + Ok(Some(T::DbWeight::get().reads_writes(1, 1) + + 25_000_000 + 850_000 * registrars as Weight // R + ).into()) } /// Set the field information for a registrar. @@ -768,20 +973,28 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. + /// - Benchmark: 22.85 + R * 0.853 µs (min squares analysis) /// # - #[weight = 50_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + + 23_000_000 // constant + + 860_000 * T::MaxRegistrars::get() as Weight // R + ] fn set_fields(origin, #[compact] index: RegistrarIndex, fields: IdentityFields, - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; - >::mutate(|rs| + let registrars = >::mutate(|rs| -> Result { rs.get_mut(index as usize) .and_then(|x| x.as_mut()) .and_then(|r| if r.account == who { r.fields = fields; Some(()) } else { None }) - .ok_or_else(|| Error::::InvalidIndex.into()) - ) + .ok_or_else(|| DispatchError::from(Error::::InvalidIndex))?; + Ok(rs.len()) + })?; + Ok(Some(T::DbWeight::get().reads_writes(1, 1) + + 23_000_000 + 860_000 * registrars as Weight // R + ).into()) } /// Provide a judgement for an account's identity. @@ -802,13 +1015,18 @@ decl_module! { /// - Up to one account-lookup operation. /// - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`. /// - One event. + /// - Benchmark: 110.7 + R * 1.066 + X * 3.402 µs (min squares analysis) /// # - #[weight = 50_000_000] + #[weight = weight_for::provide_judgement( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxAdditionalFields::get() // X + )] fn provide_judgement(origin, #[compact] reg_index: RegistrarIndex, target: ::Source, judgement: Judgement>, - ) { + ) -> DispatchResultWithPostInfo { let sender = ensure_signed(origin)?; let target = T::Lookup::lookup(target)?; ensure!(!judgement.has_deposit(), Error::::InvalidJudgement); @@ -829,8 +1047,13 @@ decl_module! { } Err(position) => id.judgements.insert(position, item), } + + let judgements = id.judgements.len() as Weight; + let extra_fields = id.info.additional.len() as Weight; >::insert(&target, id); Self::deposit_event(RawEvent::JudgementGiven(target, reg_index)); + + Ok(Some(weight_for::provide_judgement(T::DbWeight::get(), judgements, extra_fields)).into()) } /// Remove an account's identity and sub-account information and slash the deposits. @@ -851,9 +1074,15 @@ decl_module! { /// - One balance-reserve operation. /// - `S + 2` storage mutations. /// - One event. + /// - Benchmark: 167.4 + R * 1.107 + S * 5.343 + X * 2.294 µs (min squares analysis) /// # - #[weight = 100_000_000] - fn kill_identity(origin, target: ::Source) { + #[weight = weight_for::kill_identity( + T::DbWeight::get(), + T::MaxRegistrars::get(), // R + T::MaxSubAccounts::get(), // S + T::MaxAdditionalFields::get() // X + )] + fn kill_identity(origin, target: ::Source) -> DispatchResultWithPostInfo { T::ForceOrigin::try_origin(origin) .map(|_| ()) .or_else(ensure_root)?; @@ -862,8 +1091,8 @@ decl_module! { let target = T::Lookup::lookup(target)?; // Grab their deposit (and check that they have one). let (subs_deposit, sub_ids) = >::take(&target); - let deposit = >::take(&target).ok_or(Error::::NotNamed)?.total_deposit() - + subs_deposit; + let id = >::take(&target).ok_or(Error::::NotNamed)?; + let deposit = id.total_deposit() + subs_deposit; for sub in sub_ids.iter() { >::remove(sub); } @@ -871,6 +1100,13 @@ decl_module! { T::Slashed::on_unbalanced(T::Currency::slash_reserved(&target, deposit).0); Self::deposit_event(RawEvent::IdentityKilled(target, deposit)); + + Ok(Some(weight_for::kill_identity( + T::DbWeight::get(), + id.judgements.len() as Weight, // R + sub_ids.len() as Weight, // S + id.info.additional.len() as Weight // X + )).into()) } } } @@ -955,6 +1191,7 @@ mod tests { pub const SubAccountDeposit: u64 = 10; pub const MaxSubAccounts: u32 = 2; pub const MaxAdditionalFields: u32 = 2; + pub const MaxRegistrars: u32 = 20; } ord_parameter_types! { pub const One: u64 = 1; @@ -969,6 +1206,7 @@ mod tests { type SubAccountDeposit = SubAccountDeposit; type MaxSubAccounts = MaxSubAccounts; type MaxAdditionalFields = MaxAdditionalFields; + type MaxRegistrars = MaxRegistrars; type RegistrarOrigin = EnsureSignedBy; type ForceOrigin = EnsureSignedBy; } @@ -1025,6 +1263,20 @@ mod tests { }); } + #[test] + fn amount_of_registrars_is_limited() { + new_test_ext().execute_with(|| { + for i in 1..MaxRegistrars::get() + 1 { + assert_ok!(Identity::add_registrar(Origin::signed(1), i as u64)); + } + let last_registrar = MaxRegistrars::get() as u64 + 1; + assert_noop!( + Identity::add_registrar(Origin::signed(1), last_registrar), + Error::::TooManyRegistrars + ); + }); + } + #[test] fn registration_should_work() { new_test_ext().execute_with(|| { -- GitLab From cddb42c63faf5b27009e07051623079bcf4e6791 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Fri, 24 Apr 2020 17:03:03 +0200 Subject: [PATCH 055/167] babe: secondary blocks with VRF (#5501) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * babe: secondary blocks with VRF * Fix node runtime compile * Fix test-utils runtime interface * Fix babe tests * typo: v == 2 * babe: support online configuration upgrades * Fix rpc tests * Fix runtime version tests * Switch to use NextConfigDescriptor instead of changing runtime interface * Fix tests * epoch-changes: map function that allows converting with different epoch types * Add migration script for the epoch config change * Fix docs for PrimaryAndSecondaryVRFSlots * Add docs of `SecondaryVRF` in babe crate * babe-primitives: Secondary -> SecondaryPlain * babe-client: Secondary -> SecondaryPlain * Fix migration tests * test-utils-runtime: Secondary -> SecondaryPlain * Fix missing name change in test-utils-runtime * Fix migration: Epoch should be EpochV0 * Update client/consensus/babe/src/lib.rs Co-Authored-By: André Silva <123550+andresilva@users.noreply.github.com> * Fix new epochChanges version * Fix babe-primitives naming changes * Fix merge issues in babe-client Co-authored-by: André Silva <123550+andresilva@users.noreply.github.com> Co-authored-by: André Silva --- bin/node/runtime/src/lib.rs | 2 +- client/consensus/babe/rpc/src/lib.rs | 9 ++- client/consensus/babe/src/authorship.rs | 45 +++++++++---- client/consensus/babe/src/aux_schema.rs | 4 +- client/consensus/babe/src/lib.rs | 38 +++++++++-- client/consensus/babe/src/migration.rs | 2 +- client/consensus/babe/src/tests.rs | 10 +-- client/consensus/babe/src/verification.rs | 71 ++++++++++++++++---- client/rpc/src/state/tests.rs | 2 +- primitives/consensus/babe/src/digests.rs | 49 ++++++++++++-- primitives/consensus/babe/src/lib.rs | 79 ++++++++++++++++++++++- test-utils/runtime/src/lib.rs | 6 +- 12 files changed, 265 insertions(+), 52 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index bb8a007ed80..06de573666b 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -805,7 +805,7 @@ impl_runtime_apis! { c: PRIMARY_PROBABILITY, genesis_authorities: Babe::authorities(), randomness: Babe::randomness(), - secondary_slots: true, + allowed_slots: sp_consensus_babe::AllowedSlots::PrimaryAndSecondaryPlainSlots, } } diff --git a/client/consensus/babe/rpc/src/lib.rs b/client/consensus/babe/rpc/src/lib.rs index 296b5cf2378..fa5421761ce 100644 --- a/client/consensus/babe/rpc/src/lib.rs +++ b/client/consensus/babe/rpc/src/lib.rs @@ -123,9 +123,12 @@ impl BabeApi for BabeRPCHandler PreDigest::Primary { .. } => { claims.entry(key.public()).or_default().primary.push(slot_number); } - PreDigest::Secondary { .. } => { + PreDigest::SecondaryPlain { .. } => { claims.entry(key.public()).or_default().secondary.push(slot_number); } + PreDigest::SecondaryVRF { .. } => { + claims.entry(key.public()).or_default().secondary_vrf.push(slot_number); + }, }; } } @@ -144,6 +147,8 @@ pub struct EpochAuthorship { primary: Vec, /// the array of secondary slots that can be claimed secondary: Vec, + /// The array of secondary VRF slots that can be claimed. + secondary_vrf: Vec, } /// Errors encountered by the RPC @@ -236,7 +241,7 @@ mod tests { io.extend_with(BabeApi::to_delegate(handler)); let request = r#"{"jsonrpc":"2.0","method":"babe_epochAuthorship","params": [],"id":1}"#; - let response = r#"{"jsonrpc":"2.0","result":{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY":{"primary":[0],"secondary":[1,2,4]}},"id":1}"#; + let response = r#"{"jsonrpc":"2.0","result":{"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY":{"primary":[0],"secondary":[1,2,4],"secondary_vrf":[]}},"id":1}"#; assert_eq!(Some(response.into()), io.handle_request_sync(request)); } diff --git a/client/consensus/babe/src/authorship.rs b/client/consensus/babe/src/authorship.rs index 165ff0ca4fe..1b4bf5683ec 100644 --- a/client/consensus/babe/src/authorship.rs +++ b/client/consensus/babe/src/authorship.rs @@ -21,7 +21,9 @@ use sp_consensus_babe::{ AuthorityId, BabeAuthorityWeight, BABE_ENGINE_ID, BABE_VRF_PREFIX, SlotNumber, AuthorityPair, }; -use sp_consensus_babe::digests::{PreDigest, PrimaryPreDigest, SecondaryPreDigest}; +use sp_consensus_babe::digests::{ + PreDigest, PrimaryPreDigest, SecondaryPlainPreDigest, SecondaryVRFPreDigest, +}; use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; use sp_core::{U256, blake2_256}; use codec::Encode; @@ -105,10 +107,12 @@ pub(super) fn make_transcript( /// to propose. fn claim_secondary_slot( slot_number: SlotNumber, - authorities: &[(AuthorityId, BabeAuthorityWeight)], + epoch: &Epoch, keystore: &KeyStorePtr, - randomness: [u8; 32], + author_secondary_vrf: bool, ) -> Option<(PreDigest, AuthorityPair)> { + let Epoch { authorities, randomness, epoch_index, .. } = epoch; + if authorities.is_empty() { return None; } @@ -116,7 +120,7 @@ fn claim_secondary_slot( let expected_author = super::authorship::secondary_slot_author( slot_number, authorities, - randomness, + *randomness, )?; let keystore = keystore.read(); @@ -128,10 +132,27 @@ fn claim_secondary_slot( }) { if pair.public() == *expected_author { - let pre_digest = PreDigest::Secondary(SecondaryPreDigest { - slot_number, - authority_index: authority_index as u32, - }); + let pre_digest = if author_secondary_vrf { + let transcript = super::authorship::make_transcript( + randomness, + slot_number, + *epoch_index, + ); + + let s = get_keypair(&pair).vrf_sign(transcript); + + PreDigest::SecondaryVRF(SecondaryVRFPreDigest { + slot_number, + vrf_output: VRFOutput(s.0.to_output()), + vrf_proof: VRFProof(s.1), + authority_index: authority_index as u32, + }) + } else { + PreDigest::SecondaryPlain(SecondaryPlainPreDigest { + slot_number, + authority_index: authority_index as u32, + }) + }; return Some((pre_digest, pair)); } @@ -151,12 +172,14 @@ pub fn claim_slot( ) -> Option<(PreDigest, AuthorityPair)> { claim_primary_slot(slot_number, epoch, epoch.config.c, keystore) .or_else(|| { - if epoch.config.secondary_slots { + if epoch.config.allowed_slots.is_secondary_plain_slots_allowed() || + epoch.config.allowed_slots.is_secondary_vrf_slots_allowed() + { claim_secondary_slot( slot_number, - &epoch.authorities, + &epoch, keystore, - epoch.randomness, + epoch.config.allowed_slots.is_secondary_vrf_slots_allowed(), ) } else { None diff --git a/client/consensus/babe/src/aux_schema.rs b/client/consensus/babe/src/aux_schema.rs index 9907fcbd724..2a3f23981dc 100644 --- a/client/consensus/babe/src/aux_schema.rs +++ b/client/consensus/babe/src/aux_schema.rs @@ -141,7 +141,7 @@ mod test { use substrate_test_runtime_client; use sp_core::H256; use sp_runtime::traits::NumberFor; - use sp_consensus_babe::BabeGenesisConfiguration; + use sp_consensus_babe::{AllowedSlots, BabeGenesisConfiguration}; use sc_consensus_epochs::{PersistedEpoch, PersistedEpochHeader, EpochHeader}; use sp_consensus::Error as ConsensusError; use sc_network_test::Block as TestBlock; @@ -182,7 +182,7 @@ mod test { c: (3, 10), genesis_authorities: Vec::new(), randomness: Default::default(), - secondary_slots: true, + allowed_slots: AllowedSlots::PrimaryAndSecondaryPlainSlots, }, ).unwrap(); diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index bac4e02897d..e314e7a43c7 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -49,6 +49,11 @@ //! //! `blake2_256(epoch_randomness ++ slot_number) % authorities_len`. //! +//! The secondary slots supports either a `SecondaryPlain` or `SecondaryVRF` +//! variant. Comparing with `SecondaryPlain` variant, the `SecondaryVRF` variant +//! generates an additional VRF output. The output is not included in beacon +//! randomness, but can be consumed by parachains. +//! //! The fork choice rule is weight-based, where weight equals the number of //! primary blocks in the chain. We will pick the heaviest chain (more primary //! blocks) and will go with the longest one in case of a tie. @@ -64,8 +69,8 @@ pub use sp_consensus_babe::{ AuthorityId, AuthorityPair, AuthoritySignature, BabeAuthorityWeight, VRF_OUTPUT_LENGTH, digests::{ - CompatibleDigestItem, NextEpochDescriptor, NextConfigDescriptor, - PreDigest, PrimaryPreDigest, SecondaryPreDigest, + CompatibleDigestItem, NextEpochDescriptor, NextConfigDescriptor, PreDigest, + PrimaryPreDigest, SecondaryPlainPreDigest, }, }; pub use sp_consensus::SyncOracle; @@ -184,7 +189,7 @@ impl Epoch { randomness: genesis_config.randomness.clone(), config: BabeEpochConfiguration { c: genesis_config.c, - secondary_slots: genesis_config.secondary_slots, + allowed_slots: genesis_config.allowed_slots, }, } } @@ -279,7 +284,26 @@ impl Config { C: AuxStore + ProvideRuntimeApi, C::Api: BabeApi, { trace!(target: "babe", "Getting slot duration"); - match sc_consensus_slots::SlotDuration::get_or_compute(client, |a, b| a.configuration(b)).map(Self) { + match sc_consensus_slots::SlotDuration::get_or_compute(client, |a, b| { + let has_api_v1 = a.has_api_with::, _>( + &b, |v| v == 1, + )?; + let has_api_v2 = a.has_api_with::, _>( + &b, |v| v == 2, + )?; + + if has_api_v1 { + #[allow(deprecated)] { + Ok(a.configuration_before_version_2(b)?.into()) + } + } else if has_api_v2 { + a.configuration(b) + } else { + Err(sp_blockchain::Error::VersionInvalid( + "Unsupported or invalid BabeApi version".to_string() + )) + } + }).map(Self) { Ok(s) => Ok(s), Err(s) => { warn!(target: "babe", "Failed to get slot duration"); @@ -583,7 +607,7 @@ fn find_pre_digest(header: &B::Header) -> Result> // genesis block doesn't contain a pre digest so let's generate a // dummy one to not break any invariants in the rest of the code if header.number().is_zero() { - return Ok(PreDigest::Secondary(SecondaryPreDigest { + return Ok(PreDigest::SecondaryPlain(SecondaryPlainPreDigest { slot_number: 0, authority_index: 0, })); @@ -1044,7 +1068,7 @@ impl BlockImport for BabeBlockImport BlockImport for BabeBlockImport= start slot {}).", viable_epoch.as_ref().epoch_index, hash, diff --git a/client/consensus/babe/src/migration.rs b/client/consensus/babe/src/migration.rs index 837704abb1b..2a5a8749cc3 100644 --- a/client/consensus/babe/src/migration.rs +++ b/client/consensus/babe/src/migration.rs @@ -57,7 +57,7 @@ impl EpochV0 { randomness: self.randomness, config: BabeEpochConfiguration { c: config.c, - secondary_slots: config.secondary_slots, + allowed_slots: config.allowed_slots, }, } } diff --git a/client/consensus/babe/src/tests.rs b/client/consensus/babe/src/tests.rs index 3c433b40305..5e20c8b5e99 100644 --- a/client/consensus/babe/src/tests.rs +++ b/client/consensus/babe/src/tests.rs @@ -22,7 +22,7 @@ use super::*; use authorship::claim_slot; -use sp_consensus_babe::{AuthorityPair, SlotNumber}; +use sp_consensus_babe::{AuthorityPair, SlotNumber, AllowedSlots}; use sc_block_builder::{BlockBuilder, BlockBuilderProvider}; use sp_consensus::{ NoNetwork as DummyOracle, Proposal, RecordProof, @@ -507,7 +507,7 @@ fn can_author_block() { duration: 100, config: BabeEpochConfiguration { c: (3, 10), - secondary_slots: true, + allowed_slots: AllowedSlots::PrimaryAndSecondaryPlainSlots, }, }; @@ -517,7 +517,7 @@ fn can_author_block() { c: (3, 10), genesis_authorities: Vec::new(), randomness: [0; 32], - secondary_slots: true, + allowed_slots: AllowedSlots::PrimaryAndSecondaryPlainSlots, }; // with secondary slots enabled it should never be empty @@ -528,7 +528,7 @@ fn can_author_block() { // otherwise with only vrf-based primary slots we might need to try a couple // of times. - config.secondary_slots = false; + config.allowed_slots = AllowedSlots::PrimarySlots; loop { match claim_slot(i, &epoch, &keystore) { None => i += 1, @@ -557,7 +557,7 @@ fn propose_and_import_block( let pre_digest = sp_runtime::generic::Digest { logs: vec![ Item::babe_pre_digest( - PreDigest::Secondary(SecondaryPreDigest { + PreDigest::SecondaryPlain(SecondaryPlainPreDigest { authority_index: 0, slot_number, }), diff --git a/client/consensus/babe/src/verification.rs b/client/consensus/babe/src/verification.rs index 1a3eba45843..1b89bbc643f 100644 --- a/client/consensus/babe/src/verification.rs +++ b/client/consensus/babe/src/verification.rs @@ -19,7 +19,8 @@ use sp_runtime::{traits::Header, traits::DigestItemFor}; use sp_core::{Pair, Public}; use sp_consensus_babe::{AuthoritySignature, SlotNumber, AuthorityPair, AuthorityId}; use sp_consensus_babe::digests::{ - PreDigest, PrimaryPreDigest, SecondaryPreDigest, CompatibleDigestItem + PreDigest, PrimaryPreDigest, SecondaryPlainPreDigest, SecondaryVRFPreDigest, + CompatibleDigestItem }; use sc_consensus_slots::CheckedHeader; use log::{debug, trace}; @@ -28,15 +29,15 @@ use super::authorship::{make_transcript, calculate_primary_threshold, check_prim /// BABE verification parameters pub(super) struct VerificationParams<'a, B: 'a + BlockT> { - /// the header being verified. + /// The header being verified. pub(super) header: B::Header, - /// the pre-digest of the header being verified. this is optional - if prior + /// The pre-digest of the header being verified. this is optional - if prior /// verification code had to read it, it can be included here to avoid duplicate /// work. pub(super) pre_digest: Option, - /// the slot number of the current time. + /// The slot number of the current time. pub(super) slot_now: SlotNumber, - /// epoch descriptor of the epoch this block _should_ be under, if it's valid. + /// Epoch descriptor of the epoch this block _should_ be under, if it's valid. pub(super) epoch: &'a Epoch, } @@ -102,10 +103,18 @@ pub(super) fn check_header( epoch.config.c, )?; }, - PreDigest::Secondary(secondary) if epoch.config.secondary_slots => { - debug!(target: "babe", "Verifying Secondary block"); - - check_secondary_header::( + PreDigest::SecondaryPlain(secondary) if epoch.config.allowed_slots.is_secondary_plain_slots_allowed() => { + debug!(target: "babe", "Verifying Secondary plain block"); + check_secondary_plain_header::( + pre_hash, + secondary, + sig, + &epoch, + )?; + }, + PreDigest::SecondaryVRF(secondary) if epoch.config.allowed_slots.is_secondary_vrf_slots_allowed() => { + debug!(target: "babe", "Verifying Secondary VRF block"); + check_secondary_vrf_header::( pre_hash, secondary, sig, @@ -179,9 +188,9 @@ fn check_primary_header( /// properly signed by the expected authority, which we have a deterministic way /// of computing. Additionally, the weight of this block must stay the same /// compared to its parent since it is a secondary block. -fn check_secondary_header( +fn check_secondary_plain_header( pre_hash: B::Hash, - pre_digest: &SecondaryPreDigest, + pre_digest: &SecondaryPlainPreDigest, signature: AuthoritySignature, epoch: &Epoch, ) -> Result<(), Error> { @@ -205,3 +214,43 @@ fn check_secondary_header( Err(Error::BadSignature(pre_hash)) } } + +/// Check a secondary VRF slot proposal header. +fn check_secondary_vrf_header( + pre_hash: B::Hash, + pre_digest: &SecondaryVRFPreDigest, + signature: AuthoritySignature, + epoch: &Epoch, +) -> Result<(), Error> { + // check the signature is valid under the expected authority and + // chain state. + let expected_author = secondary_slot_author( + pre_digest.slot_number, + &epoch.authorities, + epoch.randomness, + ).ok_or_else(|| Error::NoSecondaryAuthorExpected)?; + + let author = &epoch.authorities[pre_digest.authority_index as usize].0; + + if expected_author != author { + return Err(Error::InvalidAuthor(expected_author.clone(), author.clone())); + } + + if AuthorityPair::verify(&signature, pre_hash.as_ref(), author) { + let transcript = make_transcript( + &epoch.randomness, + pre_digest.slot_number, + epoch.epoch_index, + ); + + schnorrkel::PublicKey::from_bytes(author.as_slice()).and_then(|p| { + p.vrf_verify(transcript, &pre_digest.vrf_output, &pre_digest.vrf_proof) + }).map_err(|s| { + babe_err(Error::VRFVerificationFailed(s)) + })?; + + Ok(()) + } else { + Err(Error::BadSignature(pre_hash)) + } +} diff --git a/client/rpc/src/state/tests.rs b/client/rpc/src/state/tests.rs index f9c6982929b..da904f3fdc6 100644 --- a/client/rpc/src/state/tests.rs +++ b/client/rpc/src/state/tests.rs @@ -432,7 +432,7 @@ fn should_return_runtime_version() { let result = "{\"specName\":\"test\",\"implName\":\"parity-test\",\"authoringVersion\":1,\ \"specVersion\":2,\"implVersion\":2,\"apis\":[[\"0xdf6acb689907609b\",3],\ [\"0x37e397fc7c91f5e4\",1],[\"0xd2bc9897eed08f15\",2],[\"0x40fe3ad401f8959a\",4],\ - [\"0xc6e9a76309f39b09\",1],[\"0xdd718d5cc53262d4\",1],[\"0xcbca25e39f142387\",1],\ + [\"0xc6e9a76309f39b09\",1],[\"0xdd718d5cc53262d4\",1],[\"0xcbca25e39f142387\",2],\ [\"0xf78b278be53f454c\",2],[\"0xab3c0572291feb8b\",1],[\"0xbc9d89904f5b923f\",1]],\ \"transactionVersion\":1}"; diff --git a/primitives/consensus/babe/src/digests.rs b/primitives/consensus/babe/src/digests.rs index 291b32cf499..f113912d835 100644 --- a/primitives/consensus/babe/src/digests.rs +++ b/primitives/consensus/babe/src/digests.rs @@ -65,7 +65,7 @@ impl TryFrom for PrimaryPreDigest { /// BABE secondary slot assignment pre-digest. #[derive(Clone, RuntimeDebug, Encode, Decode)] -pub struct SecondaryPreDigest { +pub struct SecondaryPlainPreDigest { /// Authority index /// /// This is not strictly-speaking necessary, since the secondary slots @@ -77,6 +77,37 @@ pub struct SecondaryPreDigest { pub slot_number: SlotNumber, } +/// BABE secondary deterministic slot assignment with VRF outputs. +#[derive(Clone, RuntimeDebug, Encode, Decode)] +pub struct RawSecondaryVRFPreDigest { + /// Authority index + pub authority_index: super::AuthorityIndex, + /// Slot number + pub slot_number: SlotNumber, + /// VRF output + pub vrf_output: VRFOutput, + /// VRF proof + pub vrf_proof: VRFProof, +} + +#[cfg(feature = "std")] +/// BABE secondary slot assignment with VRF outputs pre-digest, for std environment. +pub type SecondaryVRFPreDigest = RawSecondaryVRFPreDigest; + +#[cfg(feature = "std")] +impl TryFrom for SecondaryVRFPreDigest { + type Error = SignatureError; + + fn try_from(raw: RawSecondaryVRFPreDigest) -> Result { + Ok(SecondaryVRFPreDigest { + authority_index: raw.authority_index, + slot_number: raw.slot_number, + vrf_output: raw.vrf_output.try_into()?, + vrf_proof: raw.vrf_proof.try_into()?, + }) + } +} + /// A BABE pre-runtime digest. This contains all data required to validate a /// block and for the BABE runtime module. Slots can be assigned to a primary /// (VRF based) and to a secondary (slot number based). @@ -87,7 +118,10 @@ pub enum RawPreDigest), /// A secondary deterministic slot assignment. #[codec(index = "2")] - Secondary(SecondaryPreDigest), + SecondaryPlain(SecondaryPlainPreDigest), + /// A secondary deterministic slot assignment with VRF outputs. + #[codec(index = "3")] + SecondaryVRF(RawSecondaryVRFPreDigest), } #[cfg(feature = "std")] @@ -99,7 +133,8 @@ impl RawPreDigest { pub fn authority_index(&self) -> AuthorityIndex { match self { RawPreDigest::Primary(primary) => primary.authority_index, - RawPreDigest::Secondary(secondary) => secondary.authority_index, + RawPreDigest::SecondaryPlain(secondary) => secondary.authority_index, + RawPreDigest::SecondaryVRF(secondary) => secondary.authority_index, } } @@ -107,7 +142,8 @@ impl RawPreDigest { pub fn slot_number(&self) -> SlotNumber { match self { RawPreDigest::Primary(primary) => primary.slot_number, - RawPreDigest::Secondary(secondary) => secondary.slot_number, + RawPreDigest::SecondaryPlain(secondary) => secondary.slot_number, + RawPreDigest::SecondaryVRF(secondary) => secondary.slot_number, } } @@ -116,7 +152,7 @@ impl RawPreDigest { pub fn added_weight(&self) -> crate::BabeBlockWeight { match self { RawPreDigest::Primary(_) => 1, - RawPreDigest::Secondary(_) => 0, + RawPreDigest::SecondaryPlain(_) | RawPreDigest::SecondaryVRF(_) => 0, } } } @@ -128,7 +164,8 @@ impl TryFrom for PreDigest { fn try_from(raw: RawPreDigest) -> Result { Ok(match raw { RawPreDigest::Primary(primary) => PreDigest::Primary(primary.try_into()?), - RawPreDigest::Secondary(secondary) => PreDigest::Secondary(secondary), + RawPreDigest::SecondaryPlain(secondary) => PreDigest::SecondaryPlain(secondary), + RawPreDigest::SecondaryVRF(secondary) => PreDigest::SecondaryVRF(secondary.try_into()?), }) } } diff --git a/primitives/consensus/babe/src/lib.rs b/primitives/consensus/babe/src/lib.rs index 37109b69be7..7cf9483e6f6 100644 --- a/primitives/consensus/babe/src/lib.rs +++ b/primitives/consensus/babe/src/lib.rs @@ -95,7 +95,7 @@ pub enum ConsensusLog { /// Configuration data used by the BABE consensus engine. #[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)] -pub struct BabeGenesisConfiguration { +pub struct BabeGenesisConfigurationV1 { /// The slot duration in milliseconds for BABE. Currently, only /// the value provided by this type at genesis will be used. /// @@ -124,6 +124,76 @@ pub struct BabeGenesisConfiguration { pub secondary_slots: bool, } +impl From for BabeGenesisConfiguration { + fn from(v1: BabeGenesisConfigurationV1) -> Self { + Self { + slot_duration: v1.slot_duration, + epoch_length: v1.epoch_length, + c: v1.c, + genesis_authorities: v1.genesis_authorities, + randomness: v1.randomness, + allowed_slots: if v1.secondary_slots { + AllowedSlots::PrimaryAndSecondaryPlainSlots + } else { + AllowedSlots::PrimarySlots + }, + } + } +} + +/// Configuration data used by the BABE consensus engine. +#[derive(Clone, PartialEq, Eq, Encode, Decode, RuntimeDebug)] +pub struct BabeGenesisConfiguration { + /// The slot duration in milliseconds for BABE. Currently, only + /// the value provided by this type at genesis will be used. + /// + /// Dynamic slot duration may be supported in the future. + pub slot_duration: u64, + + /// The duration of epochs in slots. + pub epoch_length: SlotNumber, + + /// A constant value that is used in the threshold calculation formula. + /// Expressed as a rational where the first member of the tuple is the + /// numerator and the second is the denominator. The rational should + /// represent a value between 0 and 1. + /// In the threshold formula calculation, `1 - c` represents the probability + /// of a slot being empty. + pub c: (u64, u64), + + /// The authorities for the genesis epoch. + pub genesis_authorities: Vec<(AuthorityId, BabeAuthorityWeight)>, + + /// The randomness for the genesis epoch. + pub randomness: Randomness, + + /// Type of allowed slots. + pub allowed_slots: AllowedSlots, +} + +/// Types of allowed slots. +#[derive(Clone, Copy, PartialEq, Eq, Encode, Decode, RuntimeDebug)] +pub enum AllowedSlots { + /// Only allow primary slots. + PrimarySlots, + /// Allow primary and secondary plain slots. + PrimaryAndSecondaryPlainSlots, + /// Allow primary and secondary VRF slots. + PrimaryAndSecondaryVRFSlots, +} + +impl AllowedSlots { + /// Whether plain secondary slots are allowed. + pub fn is_secondary_plain_slots_allowed(&self) -> bool { + *self == Self::PrimaryAndSecondaryPlainSlots + } + + /// Whether VRF secondary slots are allowed. + pub fn is_secondary_vrf_slots_allowed(&self) -> bool { + *self == Self::PrimaryAndSecondaryVRFSlots + } +} + #[cfg(feature = "std")] impl sp_consensus::SlotData for BabeGenesisConfiguration { fn slot_duration(&self) -> u64 { @@ -146,15 +216,20 @@ pub struct BabeEpochConfiguration { /// Whether this chain should run with secondary slots, which are assigned /// in round-robin manner. - pub secondary_slots: bool, + pub allowed_slots: AllowedSlots, } sp_api::decl_runtime_apis! { /// API necessary for block authorship with BABE. + #[api_version(2)] pub trait BabeApi { /// Return the genesis configuration for BABE. The configuration is only read on genesis. fn configuration() -> BabeGenesisConfiguration; + /// Return the configuration for BABE. Version 1. + #[changed_in(2)] + fn configuration() -> BabeGenesisConfigurationV1; + /// Returns the slot number that started the current epoch. fn current_epoch_start() -> SlotNumber; } diff --git a/test-utils/runtime/src/lib.rs b/test-utils/runtime/src/lib.rs index c5c438e4de5..94d3e8db3e8 100644 --- a/test-utils/runtime/src/lib.rs +++ b/test-utils/runtime/src/lib.rs @@ -52,7 +52,7 @@ use sp_inherents::{CheckInherentsResult, InherentData}; use cfg_if::cfg_if; // Ensure Babe and Aura use the same crypto to simplify things a bit. -pub use sp_consensus_babe::{AuthorityId, SlotNumber}; +pub use sp_consensus_babe::{AuthorityId, SlotNumber, AllowedSlots}; pub type AuraId = sp_consensus_aura::sr25519::AuthorityId; // Include the WASM binary @@ -641,7 +641,7 @@ cfg_if! { genesis_authorities: system::authorities() .into_iter().map(|x|(x, 1)).collect(), randomness: >::randomness(), - secondary_slots: true, + allowed_slots: AllowedSlots::PrimaryAndSecondaryPlainSlots, } } @@ -835,7 +835,7 @@ cfg_if! { genesis_authorities: system::authorities() .into_iter().map(|x|(x, 1)).collect(), randomness: >::randomness(), - secondary_slots: true, + allowed_slots: AllowedSlots::PrimaryAndSecondaryPlainSlots, } } -- GitLab From 2078b2b235816137a51bb602611ca6efea87be86 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Fri, 24 Apr 2020 17:40:48 +0200 Subject: [PATCH 056/167] client/authority-discovery: Reduce log level replaced by metrics Instead of logging value-found-event-handling failures or value-put failures on error level, log them on debug level only additionally recording them via Prometheus. Motivation is that both events can happen in "normal" operations and thus clutter the logs. --- client/authority-discovery/src/lib.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index 91e8293dec8..e5b7c986a44 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -60,7 +60,7 @@ use futures_timer::Delay; use codec::{Decode, Encode}; use error::{Error, Result}; -use log::{debug, error, log_enabled, warn}; +use log::{debug, error, log_enabled}; use prometheus_endpoint::{Counter, CounterVec, Gauge, Opts, U64, register}; use prost::Message; use sc_client_api::blockchain::HeaderBackend; @@ -328,7 +328,11 @@ where } if let Err(e) = self.handle_dht_value_found_event(v) { - error!( + if let Some(metrics) = &self.metrics { + metrics.handle_value_found_event_failure.inc(); + } + + debug!( target: LOG_TARGET, "Failed to handle Dht value found event: {:?}", e, ); @@ -359,7 +363,7 @@ where metrics.dht_event_received.with_label_values(&["value_put_failed"]).inc(); } - warn!( + debug!( target: LOG_TARGET, "Failed to put hash '{:?}' on Dht.", hash ) @@ -603,6 +607,7 @@ pub(crate) struct Metrics { amount_last_published: Gauge, request: Counter, dht_event_received: CounterVec, + handle_value_found_event_failure: Counter, priority_group_size: Gauge, } @@ -642,6 +647,13 @@ impl Metrics { )?, registry, )?, + handle_value_found_event_failure: register( + Counter::new( + "authority_discovery_handle_value_found_event_failure", + "Number of times handling a dht value found event failed." + )?, + registry, + )?, priority_group_size: register( Gauge::new( "authority_discovery_priority_group_size", -- GitLab From 4963136d0b1d8c8b5b2d60fbbd933e9b8c05fe28 Mon Sep 17 00:00:00 2001 From: s3krit Date: Fri, 24 Apr 2020 17:42:49 +0200 Subject: [PATCH 057/167] Increase check-gitlab-pipeline timeout (#5774) --- .maintain/github/check_gitlab_pipeline.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.maintain/github/check_gitlab_pipeline.sh b/.maintain/github/check_gitlab_pipeline.sh index e7aaff15bf6..4e02dfdb2a4 100755 --- a/.maintain/github/check_gitlab_pipeline.sh +++ b/.maintain/github/check_gitlab_pipeline.sh @@ -11,7 +11,7 @@ fi echo "[+] Pipeline path: https://gitlab.parity.io/parity/substrate/pipelines/$PIPELINE_ID" # 130 minute job max -for (( c=0; c < 130; c++ )); do +for (( c=0; c < 180; c++ )); do out=$(curl -s "$SUBSTRATE_API_BASEURL/pipelines/$PIPELINE_ID" | jq -r .status) case $out in "success") -- GitLab From 15b52352ab50885728affcd2c0f7133dc86dc1fc Mon Sep 17 00:00:00 2001 From: thiolliere Date: Fri, 24 Apr 2020 18:49:36 +0200 Subject: [PATCH 058/167] Update weight formula for session (with new_session taking full block) (#5738) * weight formula for session except on_initialize * fix typo and set on_initialize to MaxWeight * Add note --- frame/session/src/lib.rs | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/frame/session/src/lib.rs b/frame/session/src/lib.rs index afab71734ea..8e252211319 100644 --- a/frame/session/src/lib.rs +++ b/frame/session/src/lib.rs @@ -110,7 +110,7 @@ use frame_support::{ Get, FindAuthor, ValidatorRegistration, EstimateNextSessionRotation, EstimateNextNewSession, }, dispatch::{self, DispatchResult, DispatchError}, - weights::{Weight, MINIMUM_WEIGHT}, + weights::Weight, }; use frame_system::{self as system, ensure_signed}; @@ -350,6 +350,8 @@ pub trait Trait: frame_system::Trait { type ValidatorId: Member + Parameter; /// A conversion from account ID to validator ID. + /// + /// Its cost must be at most one storage read. type ValidatorIdOf: Convert>; /// Indicator for when to end the session. @@ -493,12 +495,16 @@ decl_module! { /// The dispatch origin of this function must be signed. /// /// # - /// - O(log n) in number of accounts. - /// - One extra DB entry. - /// - Increases system account refs by one on success iff there were previously no keys set. - /// In this case, purge_keys will need to be called before the account can be removed. + /// - Complexity: `O(1)` + /// Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed. + /// - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys` + /// - DbWrites: `origin account`, `NextKeys` + /// - DbReads per key id: `KeyOwner` + /// - DbWrites per key id: `KeyOwner` /// # - #[weight = 150_000_000] + #[weight = 200_000_000 + + T::DbWeight::get().reads(2 + T::Keys::key_ids().len() as Weight) + + T::DbWeight::get().writes(1 + T::Keys::key_ids().len() as Weight)] pub fn set_keys(origin, keys: T::Keys, proof: Vec) -> dispatch::DispatchResult { let who = ensure_signed(origin)?; @@ -515,11 +521,14 @@ decl_module! { /// The dispatch origin of this function must be signed. /// /// # - /// - O(N) in number of key types. - /// - Removes N + 1 DB entries. - /// - Reduces system account refs by one on success. + /// - Complexity: `O(1)` in number of key types. + /// Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed. + /// - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account` + /// - DbWrites: `NextKeys`, `origin account` + /// - DbWrites per key id: `KeyOwnder` /// # - #[weight = 150_000_000] + #[weight = 120_000_000 + + T::DbWeight::get().reads_writes(2, 1 + T::Keys::key_ids().len() as Weight)] pub fn purge_keys(origin) { let who = ensure_signed(origin)?; Self::do_purge_keys(&who)?; @@ -530,9 +539,13 @@ decl_module! { fn on_initialize(n: T::BlockNumber) -> Weight { if T::ShouldEndSession::should_end_session(n) { Self::rotate_session(); + T::MaximumBlockWeight::get() + } else { + // NOTE: the non-database part of the weight for `should_end_session(n)` is + // included as weight for empty block, the database part is expected to be in + // cache. + 0 } - - MINIMUM_WEIGHT } } } -- GitLab From 688f7021a242c22da375f170540ad8b2e96dbcc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Fri, 24 Apr 2020 22:56:41 +0100 Subject: [PATCH 059/167] babe: remove error fallback from threshold calculation (#5764) * babe: remove error fallbacks from threshold calculation * babe: fix indent * babe: fix domain * babe: fix compilation * babe: improve expect * babe: add one more note about p's limit --- client/consensus/babe/src/authorship.rs | 46 ++++++++++++++++++++----- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/client/consensus/babe/src/authorship.rs b/client/consensus/babe/src/authorship.rs index 1b4bf5683ec..56841225ce4 100644 --- a/client/consensus/babe/src/authorship.rs +++ b/client/consensus/babe/src/authorship.rs @@ -49,14 +49,44 @@ pub(super) fn calculate_primary_threshold( authorities[authority_index].1 as f64 / authorities.iter().map(|(_, weight)| weight).sum::() as f64; - let calc = || { - let p = BigRational::from_float(1f64 - (1f64 - c).powf(theta))?; - let numer = p.numer().to_biguint()?; - let denom = p.denom().to_biguint()?; - ((BigUint::one() << 128) * numer / denom).to_u128() - }; - - calc().unwrap_or(u128::max_value()) + assert!(theta > 0.0, "authority with weight 0."); + + // NOTE: in the equation `p = 1 - (1 - c)^theta` the value of `p` is always + // capped by `c`. For all pratical purposes `c` should always be set to a + // value < 0.5, as such in the computations below we should never be near + // edge cases like `0.999999`. + + let p = BigRational::from_float(1f64 - (1f64 - c).powf(theta)).expect( + "returns None when the given value is not finite; \ + c is a configuration parameter defined in (0, 1]; \ + theta must be > 0 if the given authority's weight is > 0; \ + theta represents the validator's relative weight defined in (0, 1]; \ + powf will always return values in (0, 1] given both the \ + base and exponent are in that domain; \ + qed.", + ); + + let numer = p.numer().to_biguint().expect( + "returns None when the given value is negative; \ + p is defined as `1 - n` where n is defined in (0, 1]; \ + p must be a value in [0, 1); \ + qed." + ); + + let denom = p.denom().to_biguint().expect( + "returns None when the given value is negative; \ + p is defined as `1 - n` where n is defined in (0, 1]; \ + p must be a value in [0, 1); \ + qed." + ); + + ((BigUint::one() << 128) * numer / denom).to_u128().expect( + "returns None if the underlying value cannot be represented with 128 bits; \ + we start with 2^128 which is one more than can be represented with 128 bits; \ + we multiple by p which is defined in [0, 1); \ + the result must be lower than 2^128 by at least one and thus representable with 128 bits; \ + qed.", + ) } /// Returns true if the given VRF output is lower than the given threshold, -- GitLab From 32ae0fd2221456d275471a2304fb30eba9736b14 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Sat, 25 Apr 2020 07:59:54 +0200 Subject: [PATCH 060/167] Introduce `BlockExecutionWeight` and `ExtrinsicBaseWeight` (#5722) * Introduce `BlockExectionWeight` and `ExtrinsicBaseWeight` * Add new traits everywhere * Missed one update * fix tests * Update `check_weight` logic * introduce `max_extrinsic_weight` function * fix + add tests * format nits * remove println * make test a bit more clear * Remove minimum weight * newlines left over from find/replace * Fix test, improve clarity * Fix executor tests * Extrinsic base weight same as old `MINIMUM_WEIGHT` * fix example test * Expose constants * Add test for full block with operational and normal * Initiate test environment with `BlockExecutionWeight` weight * format nit * Update frame/system/src/lib.rs Co-Authored-By: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * Replace `TransactionBaseFee` with `ExtrinsicBaseWeight` (#5761) * Replace `TransactionBaseFee` with `ExtrinsicBaseFee` * Fix stuff * Fix and make tests better * Forgot to update this test * Fix priority number in test * Remove minimum weight from merge * Fix weight in contracts * remove `TransactionBaseFee` from contract tests * Let `register_extra_weight_unchecked` go past `MaximumBlockWeight` * address feedback Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> --- bin/node-template/pallets/template/src/lib.rs | 5 +- .../pallets/template/src/mock.rs | 2 + bin/node-template/runtime/src/lib.rs | 9 +- bin/node/executor/tests/basic.rs | 12 +- bin/node/executor/tests/fees.rs | 13 +- bin/node/executor/tests/submit_transaction.rs | 2 +- bin/node/runtime/src/lib.rs | 5 +- frame/assets/src/lib.rs | 15 +- frame/aura/src/mock.rs | 2 + frame/authority-discovery/src/lib.rs | 2 + frame/authorship/src/lib.rs | 8 +- frame/babe/src/lib.rs | 4 +- frame/babe/src/mock.rs | 2 + frame/balances/src/lib.rs | 2 + frame/balances/src/tests_composite.rs | 4 +- frame/balances/src/tests_local.rs | 4 +- frame/benchmark/src/lib.rs | 27 +- frame/benchmarking/src/tests.rs | 7 +- frame/collective/src/lib.rs | 2 + frame/contracts/src/lib.rs | 13 +- frame/contracts/src/tests.rs | 4 +- frame/democracy/src/lib.rs | 24 +- frame/democracy/src/tests.rs | 2 + frame/elections-phragmen/src/lib.rs | 10 +- frame/elections/src/lib.rs | 12 +- frame/elections/src/mock.rs | 2 + frame/evm/src/lib.rs | 8 +- frame/example-offchain-worker/src/lib.rs | 7 +- frame/example-offchain-worker/src/tests.rs | 2 + frame/example/src/lib.rs | 10 +- frame/executive/src/lib.rs | 75 ++++-- frame/finality-tracker/src/lib.rs | 6 +- frame/generic-asset/src/lib.rs | 15 +- frame/generic-asset/src/mock.rs | 2 + frame/grandpa/src/lib.rs | 3 +- frame/grandpa/src/mock.rs | 2 + frame/identity/src/lib.rs | 10 +- frame/im-online/src/lib.rs | 6 +- frame/im-online/src/mock.rs | 2 + frame/indices/src/lib.rs | 12 +- frame/indices/src/mock.rs | 2 + frame/membership/src/lib.rs | 2 + frame/nicks/src/lib.rs | 2 + frame/offences/src/lib.rs | 6 +- frame/offences/src/mock.rs | 2 + frame/randomness-collective-flip/src/lib.rs | 12 +- frame/recovery/src/lib.rs | 6 +- frame/recovery/src/mock.rs | 2 + frame/scheduler/src/lib.rs | 2 + frame/scored-pool/src/lib.rs | 17 +- frame/scored-pool/src/mock.rs | 2 + frame/session/benchmarking/src/mock.rs | 2 + frame/session/src/mock.rs | 2 + frame/society/src/lib.rs | 8 +- frame/society/src/mock.rs | 2 + frame/staking/src/lib.rs | 9 +- frame/staking/src/mock.rs | 2 + frame/sudo/src/lib.rs | 7 +- frame/support/src/dispatch.rs | 25 +- frame/support/src/error.rs | 4 +- frame/support/src/metadata.rs | 3 +- frame/support/src/weights.rs | 3 - frame/support/test/tests/decl_error.rs | 6 +- frame/support/test/tests/instance.rs | 3 +- .../tests/reserved_keyword/on_initialize.rs | 4 +- frame/system/benches/bench.rs | 2 + frame/system/src/lib.rs | 241 ++++++++++++++---- frame/timestamp/src/lib.rs | 11 +- frame/transaction-payment/src/lib.rs | 58 ++--- frame/treasury/src/lib.rs | 4 +- frame/treasury/src/tests.rs | 2 + frame/utility/src/tests.rs | 2 + frame/vesting/src/lib.rs | 8 +- test-utils/runtime/src/lib.rs | 2 + 74 files changed, 518 insertions(+), 301 deletions(-) diff --git a/bin/node-template/pallets/template/src/lib.rs b/bin/node-template/pallets/template/src/lib.rs index ad721985b26..1f82857c43e 100644 --- a/bin/node-template/pallets/template/src/lib.rs +++ b/bin/node-template/pallets/template/src/lib.rs @@ -10,7 +10,6 @@ /// https://github.com/paritytech/substrate/blob/master/frame/example/src/lib.rs use frame_support::{decl_module, decl_storage, decl_event, decl_error, dispatch}; -use frame_support::weights::MINIMUM_WEIGHT; use frame_system::{self as system, ensure_signed}; #[cfg(test)] @@ -76,7 +75,7 @@ decl_module! { /// Just a dummy entry point. /// function that can be called by the external world as an extrinsics call /// takes a parameter of the type `AccountId`, stores it, and emits an event - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn do_something(origin, something: u32) -> dispatch::DispatchResult { // Check it was signed and get the signer. See also: ensure_root and ensure_none let who = ensure_signed(origin)?; @@ -92,7 +91,7 @@ decl_module! { /// Another dummy entry point. /// takes no parameters, attempts to increment storage value, and possibly throws an error - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn cause_error(origin) -> dispatch::DispatchResult { // Check it was signed and get the signer. See also: ensure_root and ensure_none let _who = ensure_signed(origin)?; diff --git a/bin/node-template/pallets/template/src/mock.rs b/bin/node-template/pallets/template/src/mock.rs index fdabf7d03a4..33c66e2a4e8 100644 --- a/bin/node-template/pallets/template/src/mock.rs +++ b/bin/node-template/pallets/template/src/mock.rs @@ -37,6 +37,8 @@ impl system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index d3f2f1a94d4..fed1ee36db0 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -123,6 +123,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. pub const MaximumBlockWeight: Weight = 2_000_000_000_000; + pub const ExtrinsicBaseWeight: Weight = 10_000_000; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; @@ -161,6 +162,12 @@ impl system::Trait for Runtime { type MaximumBlockWeight = MaximumBlockWeight; /// The weight of database operations that the runtime can invoke. type DbWeight = DbWeight; + /// The weight of the overhead invoked on the block import process, independent of the + /// extrinsics included in that block. + type BlockExecutionWeight = (); + /// The base weight of any extrinsic processed by the runtime, independent of the + /// logic of that extrinsic. (Signature verification, nonce increment, fee, etc...) + type ExtrinsicBaseWeight = ExtrinsicBaseWeight; /// Maximum size of all encoded transactions (in bytes) that are allowed in one block. type MaximumBlockLength = MaximumBlockLength; /// Portion of the block weight that is available to all normal transactions. @@ -213,14 +220,12 @@ impl balances::Trait for Runtime { } parameter_types! { - pub const TransactionBaseFee: Balance = 0; pub const TransactionByteFee: Balance = 1; } impl transaction_payment::Trait for Runtime { type Currency = balances::Module; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = ConvertInto; type FeeMultiplierUpdate = (); diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 387a7e9200d..b357e2886ca 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -33,7 +33,7 @@ use frame_system::{self, EventRecord, Phase}; use node_runtime::{ Header, Block, UncheckedExtrinsic, CheckedExtrinsic, Call, Runtime, Balances, - System, TransactionPayment, Event, TransactionBaseFee, TransactionByteFee, + System, TransactionPayment, Event, TransactionByteFee, ExtrinsicBaseWeight, constants::currency::*, }; use node_primitives::{Balance, Hash}; @@ -54,11 +54,11 @@ pub const BLOATY_CODE: &[u8] = node_runtime::WASM_BINARY_BLOATY; fn transfer_fee(extrinsic: &E, fee_multiplier: Fixed128) -> Balance { let length_fee = TransactionByteFee::get() * (extrinsic.encode().len() as Balance); + let base_weight = ExtrinsicBaseWeight::get(); + let base_fee = ::WeightToFee::convert(base_weight); let weight = default_transfer_call().get_dispatch_info().weight; - let weight_fee = - ::WeightToFee::convert(weight); + let weight_fee = ::WeightToFee::convert(weight); - let base_fee = TransactionBaseFee::get(); base_fee + fee_multiplier.saturated_multiply_accumulate(length_fee + weight_fee) } @@ -338,7 +338,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(0), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, ..Default::default() } + DispatchInfo { weight: 0, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, @@ -391,7 +391,7 @@ fn full_native_block_import_works() { EventRecord { phase: Phase::ApplyExtrinsic(0), event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 10_000_000, class: DispatchClass::Mandatory, pays_fee: Pays::Yes } + DispatchInfo { weight: 0, class: DispatchClass::Mandatory, pays_fee: Pays::Yes } )), topics: vec![], }, diff --git a/bin/node/executor/tests/fees.rs b/bin/node/executor/tests/fees.rs index 91c58d68fca..9c1b89d045f 100644 --- a/bin/node/executor/tests/fees.rs +++ b/bin/node/executor/tests/fees.rs @@ -23,9 +23,9 @@ use frame_support::{ use sp_core::{NeverNativeValue, map, storage::Storage}; use sp_runtime::{Fixed128, Perbill, traits::{Convert, BlakeTwo256}}; use node_runtime::{ - CheckedExtrinsic, Call, Runtime, Balances, TransactionPayment, TransactionBaseFee, + CheckedExtrinsic, Call, Runtime, Balances, TransactionPayment, TransactionByteFee, WeightFeeCoefficient, - constants::currency::*, + constants::currency::*, ExtrinsicBaseWeight, }; use node_runtime::impls::LinearWeightToFee; use node_primitives::Balance; @@ -173,15 +173,17 @@ fn transaction_fee_is_correct_ultimate() { t.execute_with(|| { assert_eq!(Balances::total_balance(&bob()), (10 + 69) * DOLLARS); // Components deducted from alice's balances: + // - Base fee // - Weight fee // - Length fee // - Tip // - Creation-fee of bob's account. let mut balance_alice = (100 - 69) * DOLLARS; - let length_fee = TransactionBaseFee::get() + - TransactionByteFee::get() * - (xt.clone().encode().len() as Balance); + let base_weight = ExtrinsicBaseWeight::get(); + let base_fee = LinearWeightToFee::::convert(base_weight); + + let length_fee = TransactionByteFee::get() * (xt.clone().encode().len() as Balance); balance_alice -= length_fee; let weight = default_transfer_call().get_dispatch_info().weight; @@ -191,6 +193,7 @@ fn transaction_fee_is_correct_ultimate() { // current weight of transfer = 200_000_000 // Linear weight to fee is 1:1 right now (1 weight = 1 unit of balance) assert_eq!(weight_fee, weight as Balance); + balance_alice -= base_fee; balance_alice -= weight_fee; balance_alice -= tip; diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index 4a66ac4c213..f9685ba9b86 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -229,7 +229,7 @@ fn submitted_transaction_should_be_valid() { let res = Executive::validate_transaction(source, extrinsic); assert_eq!(res.unwrap(), ValidTransaction { - priority: 2_411_380_000_000, + priority: 1_411_390_000_000, requires: vec![], provides: vec![(address, 0).encode()], longevity: 128, diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 06de573666b..f0c33e03cf0 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -119,6 +119,7 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. pub const MaximumBlockWeight: Weight = 2_000_000_000_000; + pub const ExtrinsicBaseWeight: Weight = 10_000_000; pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); @@ -142,6 +143,8 @@ impl frame_system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = DbWeight; + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = Version; @@ -214,7 +217,6 @@ impl pallet_balances::Trait for Runtime { } parameter_types! { - pub const TransactionBaseFee: Balance = 1 * CENTS; pub const TransactionByteFee: Balance = 10 * MILLICENTS; // In the Substrate node, a weight of 10_000_000 (smallest non-zero weight) // is mapped to 10_000_000 units of fees, hence: @@ -226,7 +228,6 @@ parameter_types! { impl pallet_transaction_payment::Trait for Runtime { type Currency = Balances; type OnTransactionPayment = DealWithFees; - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = LinearWeightToFee; type FeeMultiplierUpdate = TargetedFeeAdjustment; diff --git a/frame/assets/src/lib.rs b/frame/assets/src/lib.rs index 9d31cceb7e2..1aaedd4c74d 100644 --- a/frame/assets/src/lib.rs +++ b/frame/assets/src/lib.rs @@ -133,7 +133,6 @@ #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{Parameter, decl_module, decl_event, decl_storage, decl_error, ensure}; -use frame_support::weights::MINIMUM_WEIGHT; use sp_runtime::traits::{Member, AtLeast32Bit, Zero, StaticLookup}; use frame_system::{self as system, ensure_signed}; use sp_runtime::traits::One; @@ -158,14 +157,14 @@ decl_module! { /// Issue a new class of fungible assets. There are, and will only ever be, `total` /// such assets and they'll all belong to the `origin` initially. It will have an /// identifier `AssetId` instance: this will be specified in the `Issued` event. - /// + /// /// # /// - `O(1)` /// - 1 storage mutation (codec `O(1)`). /// - 2 storage writes (condec `O(1)`). /// - 1 event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn issue(origin, #[compact] total: T::Balance) { let origin = ensure_signed(origin)?; @@ -179,14 +178,14 @@ decl_module! { } /// Move some assets from one holder to another. - /// + /// /// # /// - `O(1)` /// - 1 static lookup /// - 2 storage mutations (codec `O(1)`). /// - 1 event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn transfer(origin, #[compact] id: T::AssetId, target: ::Source, @@ -205,14 +204,14 @@ decl_module! { } /// Destroy any assets of `id` owned by `origin`. - /// + /// /// # /// - `O(1)` /// - 1 storage mutation (codec `O(1)`). /// - 1 storage deletion (codec `O(1)`). /// - 1 event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn destroy(origin, #[compact] id: T::AssetId) { let origin = ensure_signed(origin)?; let balance = >::take((id, &origin)); @@ -315,6 +314,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/aura/src/mock.rs b/frame/aura/src/mock.rs index 2716806b6ed..8154ef4c9f5 100644 --- a/frame/aura/src/mock.rs +++ b/frame/aura/src/mock.rs @@ -58,6 +58,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/authority-discovery/src/lib.rs b/frame/authority-discovery/src/lib.rs index b3edce48186..ca3e293ae74 100644 --- a/frame/authority-discovery/src/lib.rs +++ b/frame/authority-discovery/src/lib.rs @@ -155,6 +155,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/authorship/src/lib.rs b/frame/authorship/src/lib.rs index a00bfc139f2..e799ec2367e 100644 --- a/frame/authorship/src/lib.rs +++ b/frame/authorship/src/lib.rs @@ -27,7 +27,7 @@ use frame_support::traits::{FindAuthor, VerifySeal, Get}; use codec::{Encode, Decode}; use frame_system::ensure_none; use sp_runtime::traits::{Header as HeaderT, One, Zero}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass}; +use frame_support::weights::{Weight, DispatchClass}; use sp_inherents::{InherentIdentifier, ProvideInherent, InherentData}; use sp_authorship::{INHERENT_IDENTIFIER, UnclesInherentData, InherentError}; @@ -197,7 +197,7 @@ decl_module! { T::EventHandler::note_author(Self::author()); - MINIMUM_WEIGHT + 0 } fn on_finalize() { @@ -207,7 +207,7 @@ decl_module! { } /// Provide a set of uncles. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] + #[weight = (0, DispatchClass::Mandatory)] fn set_uncles(origin, new_uncles: Vec) -> dispatch::DispatchResult { ensure_none(origin)?; ensure!(new_uncles.len() <= MAX_UNCLES, Error::::TooManyUncles); @@ -430,6 +430,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/babe/src/lib.rs b/frame/babe/src/lib.rs index 5227dd94423..7357ef75ffa 100644 --- a/frame/babe/src/lib.rs +++ b/frame/babe/src/lib.rs @@ -25,7 +25,7 @@ use pallet_timestamp; use sp_std::{result, prelude::*}; use frame_support::{ decl_storage, decl_module, traits::{FindAuthor, Get, Randomness as RandomnessT}, - weights::{Weight, MINIMUM_WEIGHT}, + weights::Weight, }; use sp_timestamp::OnTimestampSet; use sp_runtime::{generic::DigestItem, ConsensusEngineId, Perbill}; @@ -184,7 +184,7 @@ decl_module! { fn on_initialize(now: T::BlockNumber) -> Weight { Self::do_initialize(now); - MINIMUM_WEIGHT + 0 } /// Block finalization diff --git a/frame/babe/src/mock.rs b/frame/babe/src/mock.rs index 1c7d02a56c9..9f029fd27f7 100644 --- a/frame/babe/src/mock.rs +++ b/frame/babe/src/mock.rs @@ -69,6 +69,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type ModuleToIndex = (); diff --git a/frame/balances/src/lib.rs b/frame/balances/src/lib.rs index 5f86bbcec03..94dbd3730f1 100644 --- a/frame/balances/src/lib.rs +++ b/frame/balances/src/lib.rs @@ -847,6 +847,8 @@ impl, I: Instance> frame_system::Trait for ElevatedTrait { type BlockHashCount = T::BlockHashCount; type MaximumBlockWeight = T::MaximumBlockWeight; type DbWeight = T::DbWeight; + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = T::MaximumBlockLength; type AvailableBlockRatio = T::AvailableBlockRatio; type Version = T::Version; diff --git a/frame/balances/src/tests_composite.rs b/frame/balances/src/tests_composite.rs index 72668ad0d85..5d25fdb50ce 100644 --- a/frame/balances/src/tests_composite.rs +++ b/frame/balances/src/tests_composite.rs @@ -68,6 +68,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); @@ -77,13 +79,11 @@ impl frame_system::Trait for Test { type OnKilledAccount = (); } parameter_types! { - pub const TransactionBaseFee: u64 = 0; pub const TransactionByteFee: u64 = 1; } impl pallet_transaction_payment::Trait for Test { type Currency = Module; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = ConvertInto; type FeeMultiplierUpdate = (); diff --git a/frame/balances/src/tests_local.rs b/frame/balances/src/tests_local.rs index aab275c781a..afc0edbae7f 100644 --- a/frame/balances/src/tests_local.rs +++ b/frame/balances/src/tests_local.rs @@ -68,6 +68,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); @@ -77,13 +79,11 @@ impl frame_system::Trait for Test { type OnKilledAccount = Module; } parameter_types! { - pub const TransactionBaseFee: u64 = 0; pub const TransactionByteFee: u64 = 1; } impl pallet_transaction_payment::Trait for Test { type Currency = Module; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = ConvertInto; type FeeMultiplierUpdate = (); diff --git a/frame/benchmark/src/lib.rs b/frame/benchmark/src/lib.rs index 61b6ac94155..6f7b074a9e6 100644 --- a/frame/benchmark/src/lib.rs +++ b/frame/benchmark/src/lib.rs @@ -21,7 +21,6 @@ #![cfg_attr(not(feature = "std"), no_std)] use frame_support::{decl_module, decl_storage, decl_event, decl_error}; -use frame_support::weights::MINIMUM_WEIGHT; use frame_support::traits::Currency; use frame_system::{self as system, ensure_signed}; use codec::{Encode, Decode}; @@ -71,7 +70,7 @@ decl_module! { fn deposit_event() = default; /// Do nothing. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn do_nothing(_origin, input: u32) { if input > 0 { return Ok(()); @@ -83,7 +82,7 @@ decl_module! { /// storage database, however, the `repeat` calls will all pull from the /// storage overlay cache. You must consider this when analyzing the /// results of the benchmark. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn read_value(_origin, repeat: u32) { for _ in 0..repeat { MyValue::get(); @@ -91,7 +90,7 @@ decl_module! { } /// Put a value into a storage value. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn put_value(_origin, repeat: u32) { for r in 0..repeat { MyValue::put(r); @@ -103,7 +102,7 @@ decl_module! { /// storage database, however, the `repeat` calls will all pull from the /// storage overlay cache. You must consider this when analyzing the /// results of the benchmark. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn exists_value(_origin, repeat: u32) { for _ in 0..repeat { MyValue::exists(); @@ -111,7 +110,7 @@ decl_module! { } /// Remove a value from storage `repeat` number of times. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn remove_value(_origin, repeat: u32) { for r in 0..repeat { MyMap::remove(r); @@ -119,7 +118,7 @@ decl_module! { } /// Read a value from storage map `repeat` number of times. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn read_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::get(r); @@ -127,7 +126,7 @@ decl_module! { } /// Insert a value into a map. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn insert_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::insert(r, r); @@ -135,7 +134,7 @@ decl_module! { } /// Check is a map contains a value `repeat` number of times. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn contains_key_map(_origin, repeat: u32) { for r in 0..repeat { MyMap::contains_key(r); @@ -143,7 +142,7 @@ decl_module! { } /// Read a value from storage `repeat` number of times. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn remove_prefix(_origin, repeat: u32) { for r in 0..repeat { MyDoubleMap::remove_prefix(r); @@ -151,21 +150,21 @@ decl_module! { } /// Add user to the list. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn add_member_list(origin) { let who = ensure_signed(origin)?; MyMemberList::::mutate(|x| x.push(who)); } /// Append user to the list. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn append_member_list(origin) { let who = ensure_signed(origin)?; MyMemberList::::append(&[who])?; } /// Encode a vector of accounts to bytes. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn encode_accounts(_origin, accounts: Vec) { let bytes = accounts.encode(); @@ -177,7 +176,7 @@ decl_module! { } /// Decode bytes into a vector of accounts. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn decode_accounts(_origin, bytes: Vec) { let accounts: Vec = Decode::decode(&mut bytes.as_slice()).map_err(|_| "Could not decode")?; diff --git a/frame/benchmarking/src/tests.rs b/frame/benchmarking/src/tests.rs index cb8bb8603f6..67ad9b4d220 100644 --- a/frame/benchmarking/src/tests.rs +++ b/frame/benchmarking/src/tests.rs @@ -24,7 +24,6 @@ use sp_std::prelude::*; use sp_runtime::{traits::{BlakeTwo256, IdentityLookup}, testing::{H256, Header}}; use frame_support::{ dispatch::DispatchResult, - weights::MINIMUM_WEIGHT, decl_module, decl_storage, impl_outer_origin, assert_ok, assert_err, ensure }; use frame_system::{RawOrigin, ensure_signed, ensure_none}; @@ -37,14 +36,14 @@ decl_storage! { decl_module! { pub struct Module for enum Call where origin: T::Origin { - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn set_value(origin, n: u32) -> DispatchResult { let _sender = ensure_signed(origin)?; Value::put(n); Ok(()) } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn dummy(origin, _n: u32) -> DispatchResult { let _sender = ensure_none(origin)?; Ok(()) @@ -80,6 +79,8 @@ impl frame_system::Trait for Test { type BlockHashCount = (); type MaximumBlockWeight = (); type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = (); type AvailableBlockRatio = (); type Version = (); diff --git a/frame/collective/src/lib.rs b/frame/collective/src/lib.rs index cf6247cf003..662465616ed 100644 --- a/frame/collective/src/lib.rs +++ b/frame/collective/src/lib.rs @@ -554,6 +554,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/contracts/src/lib.rs b/frame/contracts/src/lib.rs index 8a17ada6fc3..df53cf0a0ea 100644 --- a/frame/contracts/src/lib.rs +++ b/frame/contracts/src/lib.rs @@ -112,7 +112,6 @@ use sp_runtime::{ use frame_support::dispatch::{ PostDispatchInfo, DispatchResult, Dispatchable, DispatchResultWithPostInfo }; -use frame_support::weights::MINIMUM_WEIGHT; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, parameter_types, IsSubType, storage::child::{self, ChildInfo}, @@ -453,7 +452,7 @@ decl_module! { /// Updates the schedule for metering contracts. /// /// The schedule must have a greater version than the stored schedule. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn update_schedule(origin, schedule: Schedule) -> DispatchResult { ensure_root(origin)?; if >::current_schedule().version >= schedule.version { @@ -469,7 +468,7 @@ decl_module! { /// Stores the given binary Wasm code into the chain's storage and returns its `codehash`. /// You can instantiate contracts only with stored code. #[weight = FunctionOf( - |args: (&Vec,)| Module::::calc_code_put_costs(args.0) + MINIMUM_WEIGHT, + |args: (&Vec,)| Module::::calc_code_put_costs(args.0), DispatchClass::Normal, Pays::Yes )] @@ -494,8 +493,7 @@ decl_module! { /// * If no account exists and the call value is not less than `existential_deposit`, /// a regular account will be created and any value will be transferred. #[weight = FunctionOf( - |args: (&::Source, &BalanceOf, &Weight, &Vec)| - args.2 + MINIMUM_WEIGHT, + |args: (&::Source, &BalanceOf, &Weight, &Vec)| *args.2, DispatchClass::Normal, Pays::Yes )] @@ -527,7 +525,7 @@ decl_module! { /// upon any call received by this account. /// - The contract is initialized. #[weight = FunctionOf( - |args: (&BalanceOf, &Weight, &CodeHash, &Vec)| args.1 + MINIMUM_WEIGHT, + |args: (&BalanceOf, &Weight, &CodeHash, &Vec)| *args.1, DispatchClass::Normal, Pays::Yes )] @@ -553,7 +551,7 @@ decl_module! { /// /// If contract is not evicted as a result of this call, no actions are taken and /// the sender is not eligible for the reward. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn claim_surcharge(origin, dest: T::AccountId, aux_sender: Option) { let origin = origin.into(); let (signed, rewarded) = match (origin, aux_sender) { @@ -970,4 +968,3 @@ impl Default for Schedule { } } } - diff --git a/frame/contracts/src/tests.rs b/frame/contracts/src/tests.rs index dd228b0644d..218a5c99372 100644 --- a/frame/contracts/src/tests.rs +++ b/frame/contracts/src/tests.rs @@ -101,6 +101,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); @@ -136,7 +138,6 @@ parameter_types! { } parameter_types! { - pub const TransactionBaseFee: u64 = 0; pub const TransactionByteFee: u64 = 0; } @@ -149,7 +150,6 @@ impl Convert> for Test { impl pallet_transaction_payment::Trait for Test { type Currency = Balances; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = Test; type FeeMultiplierUpdate = (); diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index 91fa625c5c1..b60d658cde5 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -171,7 +171,7 @@ use sp_runtime::{ use codec::{Ref, Encode, Decode}; use frame_support::{ decl_module, decl_storage, decl_event, decl_error, ensure, Parameter, - weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, + weights::{Weight, DispatchClass}, traits::{ Currency, ReservableCurrency, LockableCurrency, WithdrawReason, LockIdentifier, Get, OnUnbalanced, BalanceStatus, schedule::Named as ScheduleNamed, EnsureOrigin @@ -528,7 +528,7 @@ decl_module! { fn on_runtime_upgrade() -> Weight { Self::migrate(); - MINIMUM_WEIGHT + 0 } /// Propose a sensitive action to be taken. @@ -820,7 +820,7 @@ decl_module! { /// # /// - `O(1)`. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn cancel_referendum(origin, #[compact] ref_index: ReferendumIndex) { ensure_root(origin)?; Self::internal_cancel_referendum(ref_index); @@ -836,7 +836,7 @@ decl_module! { /// - One DB change. /// - O(d) where d is the items in the dispatch queue. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn cancel_queued(origin, which: ReferendumIndex) { ensure_root(origin)?; T::Scheduler::cancel_named((DEMOCRACY_ID, which)) @@ -848,7 +848,7 @@ decl_module! { sp_runtime::print(e); } - MINIMUM_WEIGHT + 0 } /// Specify a proxy that is already open to us. Called by the stash. @@ -975,7 +975,7 @@ decl_module! { /// - `O(1)`. /// - One DB clear. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn clear_public_proposals(origin) { ensure_root(origin)?; @@ -1066,7 +1066,7 @@ decl_module! { /// # /// - One DB clear. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn reap_preimage(origin, proposal_hash: T::Hash) { let who = ensure_signed(origin)?; let (provider, deposit, since, expiry) = >::get(&proposal_hash) @@ -1096,7 +1096,7 @@ decl_module! { /// # /// - `O(1)`. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn unlock(origin, target: T::AccountId) { ensure_signed(origin)?; Self::update_lock(&target); @@ -1154,7 +1154,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn remove_vote(origin, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; Self::try_remove_vote(&who, index, UnvoteScope::Any) @@ -1176,7 +1176,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn remove_other_vote(origin, target: T::AccountId, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; let scope = if target == who { UnvoteScope::Any } else { UnvoteScope::OnlyExpired }; @@ -1251,7 +1251,7 @@ decl_module! { /// # /// - `O(R + log R)` where R is the number of referenda that `target` has voted on. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn proxy_remove_vote(origin, index: ReferendumIndex) -> DispatchResult { let who = ensure_signed(origin)?; let target = Self::proxy(who).and_then(|a| a.as_active()).ok_or(Error::::NotProxy)?; @@ -1259,7 +1259,7 @@ decl_module! { } /// Enact a proposal from a referendum. For now we just make the weight be the maximum. - #[weight = Weight::max_value()] + #[weight = frame_system::Module::::max_extrinsic_weight(DispatchClass::Normal)] fn enact_proposal(origin, proposal_hash: T::Hash, index: ReferendumIndex) -> DispatchResult { ensure_root(origin)?; Self::do_enact_proposal(proposal_hash, index) diff --git a/frame/democracy/src/tests.rs b/frame/democracy/src/tests.rs index 31213919e4a..076eb66d6bb 100644 --- a/frame/democracy/src/tests.rs +++ b/frame/democracy/src/tests.rs @@ -95,6 +95,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 8139b363d08..50c26dba0fc 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -88,7 +88,7 @@ use sp_runtime::{ }; use frame_support::{ decl_storage, decl_event, ensure, decl_module, decl_error, - weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, + weights::{Weight, DispatchClass}, storage::{StorageMap, IterableStorageMap}, traits::{ Currency, Get, LockableCurrency, LockIdentifier, ReservableCurrency, WithdrawReasons, @@ -269,7 +269,7 @@ decl_module! { fn on_runtime_upgrade() -> Weight { migration::migrate::(); - MINIMUM_WEIGHT + 0 } const CandidacyBond: BalanceOf = T::CandidacyBond::get(); @@ -339,7 +339,7 @@ decl_module! { /// Reads: O(1) /// Writes: O(1) /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn remove_voter(origin) { let who = ensure_signed(origin)?; @@ -513,7 +513,7 @@ decl_module! { print(e); } - MINIMUM_WEIGHT + 0 } } } @@ -915,6 +915,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/elections/src/lib.rs b/frame/elections/src/lib.rs index 677c9a3ae34..4e3fa9c75d9 100644 --- a/frame/elections/src/lib.rs +++ b/frame/elections/src/lib.rs @@ -30,7 +30,7 @@ use sp_runtime::{ }; use frame_support::{ decl_storage, decl_event, ensure, decl_module, decl_error, - weights::{Weight, MINIMUM_WEIGHT, DispatchClass}, + weights::{Weight, DispatchClass}, traits::{ Currency, ExistenceRequirement, Get, LockableCurrency, LockIdentifier, BalanceStatus, OnUnbalanced, ReservableCurrency, WithdrawReason, WithdrawReasons, ChangeMembers, @@ -662,7 +662,7 @@ decl_module! { /// Set the desired member count; if lower than the current count, then seats will not be up /// election when they expire. If more, then a new vote will be started if one is not /// already in progress. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn set_desired_seats(origin, #[compact] count: u32) { ensure_root(origin)?; DesiredSeats::put(count); @@ -672,7 +672,7 @@ decl_module! { /// /// Note: A tally should happen instantly (if not already in a presentation /// period) to fill the seat if removal means that the desired members are not met. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn remove_member(origin, who: ::Source) { ensure_root(origin)?; let who = T::Lookup::lookup(who)?; @@ -687,7 +687,7 @@ decl_module! { /// Set the presentation duration. If there is currently a vote being presented for, will /// invoke `finalize_vote`. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn set_presentation_duration(origin, #[compact] count: T::BlockNumber) { ensure_root(origin)?; >::put(count); @@ -695,7 +695,7 @@ decl_module! { /// Set the presentation duration. If there is current a vote being presented for, will /// invoke `finalize_vote`. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn set_term_duration(origin, #[compact] count: T::BlockNumber) { ensure_root(origin)?; >::put(count); @@ -706,7 +706,7 @@ decl_module! { print("Guru meditation"); print(e); } - MINIMUM_WEIGHT + 0 } } } diff --git a/frame/elections/src/mock.rs b/frame/elections/src/mock.rs index 3a7af61bdc8..c779f22a320 100644 --- a/frame/elections/src/mock.rs +++ b/frame/elections/src/mock.rs @@ -51,6 +51,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/evm/src/lib.rs b/frame/evm/src/lib.rs index b201fefceee..c7aa8b8d3a4 100644 --- a/frame/evm/src/lib.rs +++ b/frame/evm/src/lib.rs @@ -25,7 +25,7 @@ pub use crate::backend::{Account, Log, Vicinity, Backend}; use sp_std::{vec::Vec, marker::PhantomData}; use frame_support::{ensure, decl_module, decl_storage, decl_event, decl_error}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass, FunctionOf, Pays}; +use frame_support::weights::{Weight, DispatchClass, FunctionOf, Pays}; use frame_support::traits::{Currency, WithdrawReason, ExistenceRequirement, Get}; use frame_system::{self as system, ensure_signed}; use sp_runtime::ModuleId; @@ -188,11 +188,11 @@ decl_module! { type Error = Error; fn deposit_event() = default; - + const ModuleId: ModuleId = T::ModuleId::get(); /// Deposit balance from currency/balances module into EVM. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn deposit_balance(origin, value: BalanceOf) { let sender = ensure_signed(origin)?; @@ -213,7 +213,7 @@ decl_module! { } /// Withdraw balance from EVM into currency/balances module. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn withdraw_balance(origin, value: BalanceOf) { let sender = ensure_signed(origin)?; let address = T::ConvertAccountId::convert_account_id(&sender); diff --git a/frame/example-offchain-worker/src/lib.rs b/frame/example-offchain-worker/src/lib.rs index 9936da88185..e2c00990943 100644 --- a/frame/example-offchain-worker/src/lib.rs +++ b/frame/example-offchain-worker/src/lib.rs @@ -53,7 +53,6 @@ use frame_support::{ debug, dispatch::DispatchResult, decl_module, decl_storage, decl_event, traits::Get, - weights::MINIMUM_WEIGHT, }; use sp_core::crypto::KeyTypeId; use sp_runtime::{ @@ -189,7 +188,7 @@ decl_module! { /// working and receives (and provides) meaningful data. /// This example is not focused on correctness of the oracle itself, but rather its /// purpose is to showcase offchain worker capabilities. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn submit_price(origin, price: u32) -> DispatchResult { // Retrieve sender of the transaction. let who = ensure_signed(origin)?; @@ -214,7 +213,7 @@ decl_module! { /// /// This example is not focused on correctness of the oracle itself, but rather its /// purpose is to showcase offchain worker capabilities. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn submit_price_unsigned(origin, _block_number: T::BlockNumber, price: u32) -> DispatchResult { @@ -228,7 +227,7 @@ decl_module! { Ok(()) } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn submit_price_unsigned_with_signed_payload( origin, price_payload: PricePayload, diff --git a/frame/example-offchain-worker/src/tests.rs b/frame/example-offchain-worker/src/tests.rs index aebcbde451b..ad0ae01d10e 100644 --- a/frame/example-offchain-worker/src/tests.rs +++ b/frame/example-offchain-worker/src/tests.rs @@ -66,6 +66,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/example/src/lib.rs b/frame/example/src/lib.rs index cfc313ad49c..78ff803d37a 100644 --- a/frame/example/src/lib.rs +++ b/frame/example/src/lib.rs @@ -256,7 +256,7 @@ use sp_std::marker::PhantomData; use frame_support::{ dispatch::DispatchResult, decl_module, decl_storage, decl_event, - weights::{DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, MINIMUM_WEIGHT, Pays}, + weights::{DispatchClass, ClassifyDispatch, WeighData, Weight, PaysFee, Pays}, }; use sp_std::prelude::*; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -466,7 +466,7 @@ decl_module! { // weight (a numeric representation of pure execution time and difficulty) of the // transaction and the latter demonstrates the [`DispatchClass`] of the call. A higher // weight means a larger transaction (less of which can be placed in a single block). - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn accumulate_dummy(origin, increase_by: T::Balance) -> DispatchResult { // This is a public call, so we ensure that the origin is some signed account. let _sender = ensure_signed(origin)?; @@ -520,7 +520,7 @@ decl_module! { // Anything that needs to be done at the start of the block. // We don't do anything here. - MINIMUM_WEIGHT + 0 } // The signature could also look like: `fn on_finalize()` @@ -751,6 +751,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); @@ -845,7 +847,7 @@ mod tests { let default_call = >::accumulate_dummy(10); let info = default_call.get_dispatch_info(); // aka. `let info = as GetDispatchInfo>::get_dispatch_info(&default_call);` - assert_eq!(info.weight, 10_000_000); + assert_eq!(info.weight, 0); // must have a custom weight of `100 * arg = 2000` let custom_call = >::set_dummy(20); diff --git a/frame/executive/src/lib.rs b/frame/executive/src/lib.rs index 4c16b591605..e66fdff597e 100644 --- a/frame/executive/src/lib.rs +++ b/frame/executive/src/lib.rs @@ -192,8 +192,9 @@ where frame_system::InitKind::Full, ); as OnInitialize>::on_initialize(*block_number); - let weight = >::on_initialize(*block_number); - >::register_extra_weight_unchecked(weight); + let weight = >::on_initialize(*block_number) + .saturating_add(>::get()); + >::register_extra_weight_unchecked(weight); frame_system::Module::::note_finished_initialize(); } @@ -398,12 +399,12 @@ mod tests { use sp_core::H256; use sp_runtime::{ generic::Era, Perbill, DispatchError, testing::{Digest, Header, Block}, - traits::{Header as HeaderT, BlakeTwo256, IdentityLookup, ConvertInto}, + traits::{Header as HeaderT, BlakeTwo256, IdentityLookup, Convert, ConvertInto}, transaction_validity::{InvalidTransaction, UnknownTransaction, TransactionValidityError}, }; use frame_support::{ impl_outer_event, impl_outer_origin, parameter_types, impl_outer_dispatch, - weights::Weight, + weights::{Weight, RuntimeDbWeight}, traits::{Currency, LockIdentifier, LockableCurrency, WithdrawReasons, WithdrawReason}, }; use frame_system::{self as system, Call as SystemCall, ChainContext, LastRuntimeUpgradeInfo}; @@ -475,6 +476,12 @@ mod tests { pub const MaximumBlockWeight: Weight = 1024; pub const MaximumBlockLength: u32 = 2 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::one(); + pub const BlockExecutionWeight: Weight = 10; + pub const ExtrinsicBaseWeight: Weight = 5; + pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 10, + write: 100, + }; } impl frame_system::Trait for Runtime { type Origin = Origin; @@ -489,20 +496,24 @@ mod tests { type Event = MetaEvent; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); + type DbWeight = DbWeight; + type BlockExecutionWeight = BlockExecutionWeight; + type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = RuntimeVersion; type ModuleToIndex = (); - type AccountData = pallet_balances::AccountData; + type AccountData = pallet_balances::AccountData; type OnNewAccount = (); type OnKilledAccount = (); } + + type Balance = u64; parameter_types! { - pub const ExistentialDeposit: u64 = 1; + pub const ExistentialDeposit: Balance = 1; } impl pallet_balances::Trait for Runtime { - type Balance = u64; + type Balance = Balance; type Event = MetaEvent; type DustRemoval = (); type ExistentialDeposit = ExistentialDeposit; @@ -510,13 +521,11 @@ mod tests { } parameter_types! { - pub const TransactionBaseFee: u64 = 10; - pub const TransactionByteFee: u64 = 0; + pub const TransactionByteFee: Balance = 0; } impl pallet_transaction_payment::Trait for Runtime { type Currency = Balances; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = ConvertInto; type FeeMultiplierUpdate = (); @@ -563,7 +572,7 @@ mod tests { type TestXt = sp_runtime::testing::TestXt; type Executive = super::Executive, ChainContext, Runtime, AllModules>; - fn extra(nonce: u64, fee: u64) -> SignedExtra { + fn extra(nonce: u64, fee: Balance) -> SignedExtra { ( frame_system::CheckEra::from(Era::Immortal), frame_system::CheckNonce::from(nonce), @@ -572,7 +581,7 @@ mod tests { ) } - fn sign_extra(who: u64, nonce: u64, fee: u64) -> Option<(u64, SignedExtra)> { + fn sign_extra(who: u64, nonce: u64, fee: Balance) -> Option<(u64, SignedExtra)> { Some((who, extra(nonce, fee))) } @@ -583,7 +592,8 @@ mod tests { balances: vec![(1, 211)], }.assimilate_storage(&mut t).unwrap(); let xt = TestXt::new(Call::Balances(BalancesCall::transfer(2, 69)), sign_extra(1, 0, 0)); - let weight = xt.get_dispatch_info().weight as u64; + let weight = xt.get_dispatch_info().weight + ::ExtrinsicBaseWeight::get(); + let fee: Balance = ::WeightToFee::convert(weight); let mut t = sp_io::TestExternalities::new(t); t.execute_with(|| { Executive::initialize_block(&Header::new( @@ -595,12 +605,12 @@ mod tests { )); let r = Executive::apply_extrinsic(xt); assert!(r.is_ok()); - assert_eq!(>::total_balance(&1), 142 - 10 - weight); + assert_eq!(>::total_balance(&1), 142 - fee); assert_eq!(>::total_balance(&2), 69); }); } - fn new_test_ext(balance_factor: u64) -> sp_io::TestExternalities { + fn new_test_ext(balance_factor: Balance) -> sp_io::TestExternalities { let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); pallet_balances::GenesisConfig:: { balances: vec![(1, 111 * balance_factor)], @@ -683,8 +693,10 @@ mod tests { let xt = TestXt::new(Call::Balances(BalancesCall::transfer(33, 0)), sign_extra(1, 0, 0)); let encoded = xt.encode(); let encoded_len = encoded.len() as Weight; - let limit = AvailableBlockRatio::get() * MaximumBlockWeight::get() - 175; - let num_to_exhaust_block = limit / encoded_len; + // Block execution weight + on_initialize weight + let base_block_weight = 175 + ::BlockExecutionWeight::get(); + let limit = AvailableBlockRatio::get() * MaximumBlockWeight::get() - base_block_weight; + let num_to_exhaust_block = limit / (encoded_len + 5); t.execute_with(|| { Executive::initialize_block(&Header::new( 1, @@ -693,8 +705,8 @@ mod tests { [69u8; 32].into(), Digest::default(), )); - // Initial block weight form the custom module. - assert_eq!(>::all_extrinsics_weight(), 175); + // Base block execution weight + `on_initialize` weight from the custom module. + assert_eq!(>::all_extrinsics_weight(), base_block_weight); for nonce in 0..=num_to_exhaust_block { let xt = TestXt::new( @@ -705,7 +717,8 @@ mod tests { assert!(res.is_ok()); assert_eq!( >::all_extrinsics_weight(), - encoded_len * (nonce + 1) + 175, + //--------------------- on_initialize + block_execution + extrinsic_base weight + (encoded_len + 5) * (nonce + 1) + base_block_weight, ); assert_eq!(>::extrinsic_index(), Some(nonce as u32 + 1)); } else { @@ -731,7 +744,10 @@ mod tests { assert!(Executive::apply_extrinsic(x2.clone()).unwrap().is_ok()); // default weight for `TestXt` == encoded length. - assert_eq!(>::all_extrinsics_weight(), (3 * len) as Weight); + assert_eq!( + >::all_extrinsics_weight(), + 3 * (len as Weight + ::ExtrinsicBaseWeight::get()), + ); assert_eq!(>::all_extrinsics_len(), 3 * len); let _ = >::finalize(); @@ -761,7 +777,7 @@ mod tests { let execute_with_lock = |lock: WithdrawReasons| { let mut t = new_test_ext(1); t.execute_with(|| { - as LockableCurrency>::set_lock( + as LockableCurrency>::set_lock( id, &1, 110, @@ -771,7 +787,9 @@ mod tests { Call::System(SystemCall::remark(vec![1u8])), sign_extra(1, 0, 0), ); - let weight = xt.get_dispatch_info().weight as u64; + let weight = xt.get_dispatch_info().weight + + ::ExtrinsicBaseWeight::get(); + let fee: Balance = ::WeightToFee::convert(weight); Executive::initialize_block(&Header::new( 1, H256::default(), @@ -783,7 +801,7 @@ mod tests { if lock == WithdrawReasons::except(WithdrawReason::TransactionPayment) { assert!(Executive::apply_extrinsic(xt).unwrap().is_ok()); // tx fee has been deducted. - assert_eq!(>::total_balance(&1), 111 - 10 - weight); + assert_eq!(>::total_balance(&1), 111 - fee); } else { assert_eq!( Executive::apply_extrinsic(xt), @@ -803,9 +821,10 @@ mod tests { new_test_ext(1).execute_with(|| { Executive::initialize_block(&Header::new_from_number(1)); - // NOTE: might need updates over time if system and balance introduce new weights. For - // now only accounts for the custom module. - assert_eq!(>::all_extrinsics_weight(), 150 + 25); + // NOTE: might need updates over time if new weights are introduced. + // For now it only accounts for the base block execution weight and + // the `on_initialize` weight defined in the custom test module. + assert_eq!(>::all_extrinsics_weight(), 175 + 10); }) } diff --git a/frame/finality-tracker/src/lib.rs b/frame/finality-tracker/src/lib.rs index 72d4d1c9167..ac306e26899 100644 --- a/frame/finality-tracker/src/lib.rs +++ b/frame/finality-tracker/src/lib.rs @@ -23,7 +23,7 @@ use sp_runtime::traits::{One, Zero, SaturatedConversion}; use sp_std::{prelude::*, result, cmp, vec}; use frame_support::{decl_module, decl_storage, decl_error, ensure}; use frame_support::traits::Get; -use frame_support::weights::{MINIMUM_WEIGHT, DispatchClass}; +use frame_support::weights::{DispatchClass}; use frame_system::{ensure_none, Trait as SystemTrait}; use sp_finality_tracker::{INHERENT_IDENTIFIER, FinalizedInherentData}; @@ -77,7 +77,7 @@ decl_module! { /// Hint that the author of this block thinks the best finalized /// block is the given number. - #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] + #[weight = (0, DispatchClass::Mandatory)] fn final_hint(origin, #[compact] hint: T::BlockNumber) { ensure_none(origin)?; ensure!(!::Update::exists(), Error::::AlreadyUpdated); @@ -264,6 +264,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/generic-asset/src/lib.rs b/frame/generic-asset/src/lib.rs index b56c7243361..f2507669e53 100644 --- a/frame/generic-asset/src/lib.rs +++ b/frame/generic-asset/src/lib.rs @@ -164,7 +164,6 @@ use sp_std::prelude::*; use sp_std::{cmp, result, fmt::Debug}; use frame_support::{ decl_event, decl_module, decl_storage, ensure, decl_error, - weights::MINIMUM_WEIGHT, traits::{ Currency, ExistenceRequirement, Imbalance, LockIdentifier, LockableCurrency, ReservableCurrency, SignedImbalance, WithdrawReason, WithdrawReasons, TryDrop, BalanceStatus, @@ -361,14 +360,14 @@ decl_module! { fn deposit_event() = default; /// Create a new kind of asset. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn create(origin, options: AssetOptions) -> DispatchResult { let origin = ensure_signed(origin)?; Self::create_asset(None, Some(origin), options) } /// Transfer some liquid free balance to another account. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn transfer(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, #[compact] amount: T::Balance) { let origin = ensure_signed(origin)?; ensure!(!amount.is_zero(), Error::::ZeroAmount); @@ -378,7 +377,7 @@ decl_module! { /// Updates permission for a given `asset_id` and an account. /// /// The `origin` must have `update` permission. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn update_permission( origin, #[compact] asset_id: T::AssetId, @@ -401,7 +400,7 @@ decl_module! { /// Mints an asset, increases its total issuance. /// The origin must have `mint` permissions. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn mint(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, amount: T::Balance) -> DispatchResult { let who = ensure_signed(origin)?; Self::mint_free(&asset_id, &who, &to, &amount)?; @@ -411,7 +410,7 @@ decl_module! { /// Burns an asset, decreases its total issuance. /// The `origin` must have `burn` permissions. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn burn(origin, #[compact] asset_id: T::AssetId, to: T::AccountId, amount: T::Balance) -> DispatchResult { let who = ensure_signed(origin)?; Self::burn_free(&asset_id, &who, &to, &amount)?; @@ -421,7 +420,7 @@ decl_module! { /// Can be used to create reserved tokens. /// Requires Root call. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn create_reserved( origin, asset_id: T::AssetId, @@ -1126,6 +1125,8 @@ impl frame_system::Trait for ElevatedTrait { type BlockHashCount = T::BlockHashCount; type MaximumBlockWeight = T::MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = T::MaximumBlockLength; type AvailableBlockRatio = T::AvailableBlockRatio; type Version = T::Version; diff --git a/frame/generic-asset/src/mock.rs b/frame/generic-asset/src/mock.rs index 2cd779da030..3e3bd892d56 100644 --- a/frame/generic-asset/src/mock.rs +++ b/frame/generic-asset/src/mock.rs @@ -58,6 +58,8 @@ impl frame_system::Trait for Test { type Event = TestEvent; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type BlockHashCount = BlockHashCount; diff --git a/frame/grandpa/src/lib.rs b/frame/grandpa/src/lib.rs index 49326c71cb2..aa5db8849fe 100644 --- a/frame/grandpa/src/lib.rs +++ b/frame/grandpa/src/lib.rs @@ -33,7 +33,6 @@ pub use sp_finality_grandpa as fg_primitives; use sp_std::prelude::*; use codec::{self as codec, Encode, Decode}; use frame_support::{decl_event, decl_storage, decl_module, decl_error, storage}; -use frame_support::weights::MINIMUM_WEIGHT; use sp_runtime::{ DispatchResult, generic::{DigestItem, OpaqueDigestItemId}, traits::Zero, Perbill, }; @@ -185,7 +184,7 @@ decl_module! { fn deposit_event() = default; /// Report some misbehavior. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn report_misbehavior(origin, _report: Vec) { ensure_signed(origin)?; // FIXME: https://github.com/paritytech/substrate/issues/1112 diff --git a/frame/grandpa/src/mock.rs b/frame/grandpa/src/mock.rs index 90b7c97437a..3ef78e75711 100644 --- a/frame/grandpa/src/mock.rs +++ b/frame/grandpa/src/mock.rs @@ -62,6 +62,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index 273cf5f71a5..deff7bf1ebb 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -619,7 +619,7 @@ decl_module! { /// - One balance reserve operation. /// - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`). /// - One event. - /// - Benchmarks: + /// - Benchmarks: /// - 136.6 + R * 0.62 + X * 2.62 µs (min squares analysis) /// - 146.2 + R * 0.372 + X * 2.98 µs (min squares analysis) /// # @@ -684,7 +684,7 @@ decl_module! { /// - One storage read (codec complexity `O(P)`). /// - One storage write (codec complexity `O(S)`). /// - One storage-exists (`IdentityOf::contains_key`). - /// - Benchmarks: + /// - Benchmarks: /// - 115.2 + P * 5.11 + S * 6.67 µs (min squares analysis) /// - 121 + P * 4.852 + S * 7.111 µs (min squares analysis) /// # @@ -748,7 +748,7 @@ decl_module! { /// - One balance-unreserve operation. /// - `2` storage reads and `S + 2` storage deletions. /// - One event. - /// - Benchmarks: + /// - Benchmarks: /// - 152.3 + R * 0.306 + S * 4.967 + X * 1.697 µs (min squares analysis) /// - 139.5 + R * 0.466 + S * 5.304 + X * 1.895 µs (min squares analysis) /// # @@ -1167,6 +1167,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); @@ -1271,7 +1273,7 @@ mod tests { } let last_registrar = MaxRegistrars::get() as u64 + 1; assert_noop!( - Identity::add_registrar(Origin::signed(1), last_registrar), + Identity::add_registrar(Origin::signed(1), last_registrar), Error::::TooManyRegistrars ); }); diff --git a/frame/im-online/src/lib.rs b/frame/im-online/src/lib.rs index 188f7056768..8f04420307b 100644 --- a/frame/im-online/src/lib.rs +++ b/frame/im-online/src/lib.rs @@ -43,7 +43,6 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_im_online::{self as im_online}; //! @@ -51,7 +50,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn is_online(origin, authority_index: u32) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _is_online = >::is_online(authority_index); @@ -95,7 +94,6 @@ use sp_staking::{ use frame_support::{ decl_module, decl_event, decl_storage, Parameter, debug, decl_error, traits::Get, - weights::MINIMUM_WEIGHT, }; use frame_system::{self as system, ensure_none}; use frame_system::offchain::{ @@ -315,7 +313,7 @@ decl_module! { fn deposit_event() = default; - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn heartbeat( origin, heartbeat: Heartbeat, diff --git a/frame/im-online/src/mock.rs b/frame/im-online/src/mock.rs index e9b5ef95ef4..7ba9dd19f91 100644 --- a/frame/im-online/src/mock.rs +++ b/frame/im-online/src/mock.rs @@ -116,6 +116,8 @@ impl frame_system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/indices/src/lib.rs b/frame/indices/src/lib.rs index f4f5b69e8cd..4861197eda3 100644 --- a/frame/indices/src/lib.rs +++ b/frame/indices/src/lib.rs @@ -25,7 +25,7 @@ use sp_runtime::traits::{ StaticLookup, Member, LookupError, Zero, One, BlakeTwo256, Hash, Saturating, AtLeast32Bit }; use frame_support::{Parameter, decl_module, decl_error, decl_event, decl_storage, ensure}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT}; +use frame_support::weights::Weight; use frame_support::dispatch::DispatchResult; use frame_support::traits::{Currency, ReservableCurrency, Get, BalanceStatus::Reserved}; use frame_support::storage::migration::take_storage_value; @@ -102,7 +102,7 @@ decl_module! { fn on_initialize() -> Weight { Self::migrations(); - MINIMUM_WEIGHT + 0 } /// Assign an previously unassigned index. @@ -121,7 +121,7 @@ decl_module! { /// - One reserve operation. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn claim(origin, index: T::AccountIndex) { let who = ensure_signed(origin)?; @@ -149,7 +149,7 @@ decl_module! { /// - One transfer operation. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn transfer(origin, new: T::AccountId, index: T::AccountIndex) { let who = ensure_signed(origin)?; ensure!(who != new, Error::::NotTransfer); @@ -180,7 +180,7 @@ decl_module! { /// - One reserve operation. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn free(origin, index: T::AccountIndex) { let who = ensure_signed(origin)?; @@ -209,7 +209,7 @@ decl_module! { /// - Up to one reserve operation. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn force_transfer(origin, new: T::AccountId, index: T::AccountIndex) { ensure_root(origin)?; diff --git a/frame/indices/src/mock.rs b/frame/indices/src/mock.rs index b8786c2dc82..aa7057e61a1 100644 --- a/frame/indices/src/mock.rs +++ b/frame/indices/src/mock.rs @@ -62,6 +62,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/membership/src/lib.rs b/frame/membership/src/lib.rs index 188a0b268c1..faf2be8e11e 100644 --- a/frame/membership/src/lib.rs +++ b/frame/membership/src/lib.rs @@ -315,6 +315,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/nicks/src/lib.rs b/frame/nicks/src/lib.rs index 97a50740461..8ded9408d92 100644 --- a/frame/nicks/src/lib.rs +++ b/frame/nicks/src/lib.rs @@ -282,6 +282,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/offences/src/lib.rs b/frame/offences/src/lib.rs index 7fa4cd4132a..1ad188a7a83 100644 --- a/frame/offences/src/lib.rs +++ b/frame/offences/src/lib.rs @@ -27,7 +27,7 @@ mod tests; use sp_std::vec::Vec; use frame_support::{ decl_module, decl_event, decl_storage, Parameter, debug, - weights::{Weight, MINIMUM_WEIGHT}, + weights::Weight, }; use sp_runtime::{traits::Hash, Perbill}; use sp_staking::{ @@ -104,7 +104,7 @@ decl_module! { ConcurrentReportsIndex::::remove_all(); ReportsByKindIndex::remove_all(); - MINIMUM_WEIGHT + 0 } fn on_initialize(now: T::BlockNumber) -> Weight { @@ -125,7 +125,7 @@ decl_module! { }) } - MINIMUM_WEIGHT + 0 } } } diff --git a/frame/offences/src/mock.rs b/frame/offences/src/mock.rs index 7eda40cbbbd..595d091ea44 100644 --- a/frame/offences/src/mock.rs +++ b/frame/offences/src/mock.rs @@ -101,6 +101,8 @@ impl frame_system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/randomness-collective-flip/src/lib.rs b/frame/randomness-collective-flip/src/lib.rs index b779a2757b5..29068ea91ff 100644 --- a/frame/randomness-collective-flip/src/lib.rs +++ b/frame/randomness-collective-flip/src/lib.rs @@ -20,7 +20,7 @@ //! function that generates low-influence random values based on the block hashes from the previous //! `81` blocks. Low-influence randomness can be useful when defending against relatively weak //! adversaries. Using this pallet as a randomness source is advisable primarily in low-security -//! situations like testing. +//! situations like testing. //! //! ## Public Functions //! @@ -36,13 +36,13 @@ //! ### Example - Get random seed for the current block //! //! ``` -//! use frame_support::{decl_module, dispatch, traits::Randomness, weights::MINIMUM_WEIGHT}; +//! use frame_support::{decl_module, dispatch, traits::Randomness}; //! //! pub trait Trait: frame_system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn random_module_example(origin) -> dispatch::DispatchResult { //! let _random_value = >::random(&b"my context"[..]); //! Ok(()) @@ -58,7 +58,7 @@ use sp_std::{prelude::*, convert::TryInto}; use sp_runtime::traits::Hash; use frame_support::{ decl_module, decl_storage, traits::Randomness, - weights::{Weight, MINIMUM_WEIGHT} + weights::Weight }; use safe_mix::TripletMix; use codec::Encode; @@ -84,7 +84,7 @@ decl_module! { values[index] = parent_hash; }); - MINIMUM_WEIGHT + 0 } } } @@ -170,6 +170,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/recovery/src/lib.rs b/frame/recovery/src/lib.rs index 213696e5fb5..008461e5039 100644 --- a/frame/recovery/src/lib.rs +++ b/frame/recovery/src/lib.rs @@ -159,7 +159,7 @@ use codec::{Encode, Decode}; use frame_support::{ decl_module, decl_event, decl_storage, decl_error, ensure, - Parameter, RuntimeDebug, weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf, Pays}, + Parameter, RuntimeDebug, weights::{GetDispatchInfo, FunctionOf, Pays}, traits::{Currency, ReservableCurrency, Get, BalanceStatus}, dispatch::PostDispatchInfo, }; @@ -365,7 +365,7 @@ decl_module! { /// - One storage write O(1) /// - One event /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn set_recovered(origin, lost: T::AccountId, rescuer: T::AccountId) { ensure_root(origin)?; // Create the recovery storage item. @@ -647,7 +647,7 @@ decl_module! { /// # /// - One storage mutation to check account is recovered by `who`. O(1) /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn cancel_recovered(origin, account: T::AccountId) { let who = ensure_signed(origin)?; // Check `who` is allowed to make a call on behalf of `account` diff --git a/frame/recovery/src/mock.rs b/frame/recovery/src/mock.rs index ccc80730a19..648321a0ae7 100644 --- a/frame/recovery/src/mock.rs +++ b/frame/recovery/src/mock.rs @@ -76,6 +76,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index 1ff8a7ad795..a18a48da080 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -349,6 +349,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/scored-pool/src/lib.rs b/frame/scored-pool/src/lib.rs index 8cbf20af805..46eb73293b2 100644 --- a/frame/scored-pool/src/lib.rs +++ b/frame/scored-pool/src/lib.rs @@ -54,7 +54,6 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_scored_pool::{self as scored_pool}; //! @@ -62,7 +61,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn candidate(origin) -> dispatch::DispatchResult { //! let who = ensure_signed(origin)?; //! @@ -98,7 +97,7 @@ use sp_std::{ use frame_support::{ decl_module, decl_storage, decl_event, ensure, decl_error, traits::{EnsureOrigin, ChangeMembers, InitializeMembers, Currency, Get, ReservableCurrency}, - weights::{Weight, MINIMUM_WEIGHT}, + weights::Weight, }; use frame_system::{self as system, ensure_root, ensure_signed}; use sp_runtime::{ @@ -253,7 +252,7 @@ decl_module! { let pool = >::get(); >::refresh_members(pool, ChangeReceiver::MembershipChanged); } - MINIMUM_WEIGHT + 0 } /// Add `origin` to the pool of candidates. @@ -267,7 +266,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the transactor in the `Pool`. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn submit_candidacy(origin) { let who = ensure_signed(origin)?; ensure!(!>::contains_key(&who), Error::::AlreadyInPool); @@ -297,7 +296,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the transactor in the `Pool`. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn withdraw_candidacy( origin, index: u32 @@ -317,7 +316,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of `dest` in the `Pool`. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn kick( origin, dest: ::Source, @@ -342,7 +341,7 @@ decl_module! { /// /// The `index` parameter of this function must be set to /// the index of the `dest` in the `Pool`. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn score( origin, dest: ::Source, @@ -383,7 +382,7 @@ decl_module! { /// (this happens each `Period`). /// /// May only be called from root. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn change_member_count(origin, count: u32) { ensure_root(origin)?; >::put(&count); diff --git a/frame/scored-pool/src/mock.rs b/frame/scored-pool/src/mock.rs index 07bd8cffbfb..6d914c60aae 100644 --- a/frame/scored-pool/src/mock.rs +++ b/frame/scored-pool/src/mock.rs @@ -67,6 +67,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/session/benchmarking/src/mock.rs b/frame/session/benchmarking/src/mock.rs index c3863e16bbb..f0d0a095aea 100644 --- a/frame/session/benchmarking/src/mock.rs +++ b/frame/session/benchmarking/src/mock.rs @@ -70,6 +70,8 @@ impl frame_system::Trait for Test { type BlockHashCount = (); type MaximumBlockWeight = (); type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = (); type MaximumBlockLength = (); type Version = (); diff --git a/frame/session/src/mock.rs b/frame/session/src/mock.rs index 9e8c77edf3e..9e9b8776589 100644 --- a/frame/session/src/mock.rs +++ b/frame/session/src/mock.rs @@ -185,6 +185,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/society/src/lib.rs b/frame/society/src/lib.rs index 7cd0c826833..fcc0c66ebdb 100644 --- a/frame/society/src/lib.rs +++ b/frame/society/src/lib.rs @@ -260,7 +260,7 @@ use sp_runtime::{Percent, ModuleId, RuntimeDebug, } }; use frame_support::{decl_error, decl_module, decl_storage, decl_event, ensure, dispatch::DispatchResult}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT}; +use frame_support::weights::Weight; use frame_support::traits::{ Currency, ReservableCurrency, Randomness, Get, ChangeMembers, BalanceStatus, ExistenceRequirement::AllowDeath, EnsureOrigin @@ -824,7 +824,7 @@ decl_module! { /// /// Total Complexity: O(1) /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn found(origin, founder: T::AccountId, max_members: u32, rules: Vec) { T::FounderSetOrigin::ensure_origin(origin)?; ensure!(!>::exists(), Error::::AlreadyFounded); @@ -1024,7 +1024,7 @@ decl_module! { /// /// Total Complexity: O(1) /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn set_max_members(origin, max: u32) { ensure_root(origin)?; ensure!(max > 1, Error::::MaxMembers); @@ -1050,7 +1050,7 @@ decl_module! { Self::rotate_challenge(&mut members); } - MINIMUM_WEIGHT + 0 } } } diff --git a/frame/society/src/mock.rs b/frame/society/src/mock.rs index 81da2b1b6a7..121ec59555f 100644 --- a/frame/society/src/mock.rs +++ b/frame/society/src/mock.rs @@ -77,6 +77,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index d175c26e7ae..87c6f09e622 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -150,7 +150,6 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_signed}; //! use pallet_staking::{self as staking}; //! @@ -159,7 +158,7 @@ //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { //! /// Reward a validator. -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn reward_myself(origin) -> dispatch::DispatchResult { //! let reported = ensure_signed(origin)?; //! >::reward_by_ids(vec![(reported, 10)]); @@ -291,7 +290,7 @@ use sp_std::{ use codec::{HasCompact, Encode, Decode}; use frame_support::{ decl_module, decl_event, decl_storage, ensure, decl_error, debug, - weights::{MINIMUM_WEIGHT, Weight, DispatchClass}, + weights::{Weight, DispatchClass}, storage::IterableStorageMap, dispatch::{IsSubType, DispatchResult}, traits::{ @@ -1623,7 +1622,7 @@ decl_module! { } /// Force a current staker to become completely unstaked, immediately. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn force_unstake(origin, stash: T::AccountId) { ensure_root(origin)?; @@ -1803,7 +1802,7 @@ decl_module! { /// This can be called from any origin. /// /// - `stash`: The stash account to reap. Its balance must be zero. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn reap_stash(_origin, stash: T::AccountId) { ensure!(T::Currency::total_balance(&stash).is_zero(), Error::::FundedTarget); Self::kill_stash(&stash)?; diff --git a/frame/staking/src/mock.rs b/frame/staking/src/mock.rs index cd943abfa39..f245c12a54e 100644 --- a/frame/staking/src/mock.rs +++ b/frame/staking/src/mock.rs @@ -204,6 +204,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index edbdc5b8e05..0824c7b954c 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -52,14 +52,13 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::MINIMUM_WEIGHT; //! use frame_system::{self as system, ensure_root}; //! //! pub trait Trait: frame_system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn privileged_function(origin) -> dispatch::DispatchResult { //! ensure_root(origin)?; //! @@ -93,7 +92,7 @@ use sp_runtime::traits::{StaticLookup, Dispatchable}; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, ensure, }; -use frame_support::weights::{MINIMUM_WEIGHT, GetDispatchInfo, FunctionOf, Pays}; +use frame_support::weights::{GetDispatchInfo, FunctionOf, Pays}; use frame_system::{self as system, ensure_signed}; pub trait Trait: frame_system::Trait { @@ -151,7 +150,7 @@ decl_module! { /// - Limited storage reads. /// - One DB change. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn set_key(origin, new: ::Source) { // This is a public call, so we ensure that the origin is some signed account. let sender = ensure_signed(origin)?; diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 6d3027dbd72..4e98d9a316f 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -70,14 +70,13 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { /// /// // Private functions are dispatchable, but not available to other /// // FRAME pallets. -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// fn my_function(origin, var: u64) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) @@ -85,7 +84,7 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// /// // Public functions are both dispatchable and available to other /// // FRAME pallets. -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// pub fn my_public_function(origin) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) @@ -113,17 +112,16 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// fn my_long_function(origin) -> dispatch::DispatchResult { /// // Your implementation /// Ok(()) /// } /// -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// fn my_short_function(origin) { /// // Your implementation /// } @@ -177,11 +175,10 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// # #[macro_use] /// # extern crate frame_support; /// # use frame_support::dispatch; -/// # use frame_support::weights::MINIMUM_WEIGHT; /// # use frame_system::{self as system, Trait, ensure_signed, ensure_root}; /// decl_module! { /// pub struct Module for enum Call where origin: T::Origin { -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// fn my_privileged_function(origin) -> dispatch::DispatchResult { /// ensure_root(origin)?; /// // Your implementation @@ -2045,7 +2042,7 @@ macro_rules! __check_reserved_fn_name { #[allow(dead_code)] mod tests { use super::*; - use crate::weights::{MINIMUM_WEIGHT, DispatchInfo, DispatchClass, Pays}; + use crate::weights::{DispatchInfo, DispatchClass, Pays}; use crate::traits::{ CallMetadata, GetCallMetadata, GetCallName, OnInitialize, OnFinalize, OnRuntimeUpgrade }; @@ -2071,22 +2068,22 @@ mod tests { decl_module! { pub struct Module for enum Call where origin: T::Origin, T::AccountId: From { /// Hi, this is a comment. - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_0(_origin) -> DispatchResult { unreachable!() } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_1(_origin, #[compact] _data: u32,) -> DispatchResult { unreachable!() } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_2(_origin, _data: i32, _data2: String) -> DispatchResult { unreachable!() } #[weight = 3] fn aux_3(_origin) -> DispatchResult { unreachable!() } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_4(_origin, _data: i32) -> DispatchResult { unreachable!() } - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_5(_origin, _data: i32, #[compact] _data2: u32,) -> DispatchResult { unreachable!() } #[weight = (5, DispatchClass::Operational)] diff --git a/frame/support/src/error.rs b/frame/support/src/error.rs index 49f15387981..115920f39a9 100644 --- a/frame/support/src/error.rs +++ b/frame/support/src/error.rs @@ -35,7 +35,7 @@ pub use frame_metadata::{ModuleErrorMetadata, ErrorMetadata, DecodeDifferent}; /// /// ``` /// # use frame_support::{decl_error, decl_module}; -/// # use frame_support::weights::MINIMUM_WEIGHT; +/// # /// decl_error! { /// /// Errors that can occur in my module. /// pub enum MyError for Module { @@ -55,7 +55,7 @@ pub use frame_metadata::{ModuleErrorMetadata, ErrorMetadata, DecodeDifferent}; /// pub struct Module for enum Call where origin: T::Origin { /// type Error = MyError; /// -/// #[weight = MINIMUM_WEIGHT] +/// #[weight = 0] /// fn do_something(origin) -> frame_support::dispatch::DispatchResult { /// Err(MyError::::YouAreNotCoolEnough.into()) /// } diff --git a/frame/support/src/metadata.rs b/frame/support/src/metadata.rs index 88fb1f7420a..081f392b9ec 100644 --- a/frame/support/src/metadata.rs +++ b/frame/support/src/metadata.rs @@ -334,7 +334,6 @@ mod tests { mod event_module { use crate::dispatch::DispatchResult; - use crate::weights::MINIMUM_WEIGHT; pub trait Trait: super::system::Trait { type Balance; @@ -352,7 +351,7 @@ mod tests { pub struct Module for enum Call where origin: T::Origin { type Error = Error; - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn aux_0(_origin) -> DispatchResult { unreachable!() } } } diff --git a/frame/support/src/weights.rs b/frame/support/src/weights.rs index cffb4f83a4a..9a8faf0c914 100644 --- a/frame/support/src/weights.rs +++ b/frame/support/src/weights.rs @@ -141,9 +141,6 @@ pub use sp_runtime::transaction_validity::TransactionPriority; /// Numeric range of a transaction weight. pub type Weight = u64; -/// The smallest total weight an extrinsic should have. -pub const MINIMUM_WEIGHT: Weight = 10_000_000; - /// Means of weighing some particular kind of data (`T`). pub trait WeighData { /// Weigh the data `T` given by `target`. When implementing this for a dispatchable, `T` will be diff --git a/frame/support/test/tests/decl_error.rs b/frame/support/test/tests/decl_error.rs index 283e747a9ec..eb14ae7502f 100644 --- a/frame/support/test/tests/decl_error.rs +++ b/frame/support/test/tests/decl_error.rs @@ -18,7 +18,7 @@ use sp_runtime::{generic, traits::{BlakeTwo256, Block as _, Verify}, DispatchError}; use sp_core::{H256, sr25519}; -use frame_support::weights::MINIMUM_WEIGHT; + mod system; @@ -33,7 +33,7 @@ mod module1 { pub struct Module, I: Instance = DefaultInstance> for enum Call where origin: ::Origin { - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn fail(_origin) -> frame_support::dispatch::DispatchResult { Err(Error::::Something.into()) } @@ -60,7 +60,7 @@ mod module2 { pub struct Module for enum Call where origin: ::Origin { - #[weight = MINIMUM_WEIGHT] + #[weight = 0] pub fn fail(_origin) -> frame_support::dispatch::DispatchResult { Err(Error::::Something.into()) } diff --git a/frame/support/test/tests/instance.rs b/frame/support/test/tests/instance.rs index 37c13c19a35..5cb7fa1972a 100644 --- a/frame/support/test/tests/instance.rs +++ b/frame/support/test/tests/instance.rs @@ -23,7 +23,6 @@ use frame_support::{ DecodeDifferent, StorageMetadata, StorageEntryModifier, StorageEntryType, DefaultByteGetter, StorageEntryMetadata, StorageHasher, }, - weights::MINIMUM_WEIGHT, StorageValue, StorageMap, StorageDoubleMap, }; use sp_inherents::{ProvideInherent, InherentData, InherentIdentifier, MakeFatalError}; @@ -56,7 +55,7 @@ mod module1 { fn deposit_event() = default; - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn one(origin) { system::ensure_root(origin)?; Self::deposit_event(RawEvent::AnotherVariant(3)); diff --git a/frame/support/test/tests/reserved_keyword/on_initialize.rs b/frame/support/test/tests/reserved_keyword/on_initialize.rs index ef19fee0e69..0751c600ccc 100644 --- a/frame/support/test/tests/reserved_keyword/on_initialize.rs +++ b/frame/support/test/tests/reserved_keyword/on_initialize.rs @@ -2,7 +2,7 @@ macro_rules! reserved { ($($reserved:ident)*) => { $( mod $reserved { - pub use frame_support::{dispatch, weights::MINIMUM_WEIGHT}; + pub use frame_support::dispatch; pub trait Trait { type Origin; @@ -19,7 +19,7 @@ macro_rules! reserved { frame_support::decl_module! { pub struct Module for enum Call where origin: T::Origin { - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn $reserved(_origin) -> dispatch::DispatchResult { unreachable!() } } } diff --git a/frame/system/benches/bench.rs b/frame/system/benches/bench.rs index 36711d31777..6594862e5c6 100644 --- a/frame/system/benches/bench.rs +++ b/frame/system/benches/bench.rs @@ -73,6 +73,8 @@ impl system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index b3ac7e8f959..da5681bf109 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -68,14 +68,14 @@ //! ### Example - Get extrinsic count and parent hash for the current block //! //! ``` -//! use frame_support::{decl_module, dispatch, weights::MINIMUM_WEIGHT}; +//! use frame_support::{decl_module, dispatch}; //! use frame_system::{self as system, ensure_signed}; //! //! pub trait Trait: system::Trait {} //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn system_module_example(origin) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _extrinsic_count = >::extrinsic_count(); @@ -121,7 +121,7 @@ use frame_support::{ StoredMap, EnsureOrigin, }, weights::{ - Weight, MINIMUM_WEIGHT, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, + Weight, RuntimeDbWeight, DispatchInfo, PostDispatchInfo, DispatchClass, FunctionOf, Pays, } }; @@ -201,6 +201,12 @@ pub trait Trait: 'static + Eq + Clone { /// The weight of runtime database operations the runtime can invoke. type DbWeight: Get; + /// The base weight of executing a block, independent of the transactions in the block. + type BlockExecutionWeight: Get; + + /// The base weight of an Extrinsic in the block, independent of the of extrinsic being executed. + type ExtrinsicBaseWeight: Get; + /// The maximum length of a block (in bytes). type MaximumBlockLength: Get; @@ -478,6 +484,15 @@ decl_module! { /// The maximum weight of a block. const MaximumBlockWeight: Weight = T::MaximumBlockWeight::get(); + /// The weight of runtime database operations the runtime can invoke. + const DbWeight: RuntimeDbWeight = T::DbWeight::get(); + + /// The base weight of executing a block, independent of the transactions in the block. + const BlockExecutionWeight: Weight = T::BlockExecutionWeight::get(); + + /// The base weight of an Extrinsic in the block, independent of the of extrinsic being executed. + const ExtrinsicBaseWeight: Weight = T::ExtrinsicBaseWeight::get(); + /// The maximum length of a block (in bytes). const MaximumBlockLength: u32 = T::MaximumBlockLength::get(); @@ -494,29 +509,29 @@ decl_module! { } /// Make some on-chain remark. - /// + /// /// # /// - `O(1)` /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn remark(origin, _remark: Vec) { ensure_signed(origin)?; } /// Set the number of pages in the WebAssembly environment's heap. - /// + /// /// # /// - `O(1)` /// - 1 storage write. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn set_heap_pages(origin, pages: u64) { ensure_root(origin)?; storage::unhashed::put_raw(well_known_keys::HEAP_PAGES, &pages.encode()); } /// Set the new runtime code. - /// + /// /// # /// - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code` /// - 1 storage write (codec `O(C)`). @@ -532,7 +547,7 @@ decl_module! { } /// Set the new runtime code without doing any checks of the given `code`. - /// + /// /// # /// - `O(C)` where `C` length of `code` /// - 1 storage write (codec `O(C)`). @@ -546,7 +561,7 @@ decl_module! { } /// Set the new changes trie configuration. - /// + /// /// # /// - `O(D)` where `D` length of `Digest` /// - 1 storage write or delete (codec `O(1)`). @@ -570,12 +585,12 @@ decl_module! { } /// Set some items of storage. - /// + /// /// # /// - `O(I)` where `I` length of `items` /// - `I` storage writes (`O(1)`). /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn set_storage(origin, items: Vec) { ensure_root(origin)?; for i in &items { @@ -584,12 +599,12 @@ decl_module! { } /// Kill some items from storage. - /// + /// /// # /// - `O(VK)` where `V` length of `keys` and `K` length of one key /// - `V` storage deletions. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn kill_storage(origin, keys: Vec) { ensure_root(origin)?; for key in &keys { @@ -598,12 +613,12 @@ decl_module! { } /// Kill all storage items with a key that starts with the given prefix. - /// + /// /// # /// - `O(P)` where `P` amount of keys with prefix `prefix` /// - `P` storage deletions. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Operational)] + #[weight = (0, DispatchClass::Operational)] fn kill_prefix(origin, prefix: Key) { ensure_root(origin)?; storage::unhashed::kill_prefix(&prefix); @@ -611,7 +626,7 @@ decl_module! { /// Kill the sending account, assuming there are no references outstanding and the composite /// data is equal to its default value. - /// + /// /// # /// - `O(K)` with `K` being complexity of `on_killed_account` /// - 1 storage read and deletion. @@ -874,6 +889,23 @@ impl Module { AllExtrinsicsWeight::get().unwrap_or_default() } + /// Get the quota ratio of each dispatch class type. This indicates that all operational and mandatory + /// dispatches can use the full capacity of any resource, while user-triggered ones can consume + /// a portion. + pub fn get_dispatch_limit_ratio(class: DispatchClass) -> Perbill { + match class { + DispatchClass::Operational | DispatchClass::Mandatory + => ::one(), + DispatchClass::Normal => T::AvailableBlockRatio::get(), + } + } + + /// The maximum weight of an allowable extrinsic. Only one of these could exist in a block. + pub fn max_extrinsic_weight(class: DispatchClass) -> Weight { + let limit = Self::get_dispatch_limit_ratio(class) * T::MaximumBlockWeight::get(); + limit - (T::BlockExecutionWeight::get() + T::ExtrinsicBaseWeight::get()) + } + pub fn all_extrinsics_len() -> u32 { AllExtrinsicsLen::get().unwrap_or_default() } @@ -897,7 +929,7 @@ impl Module { /// If no previous weight exists, the function initializes the weight to zero. pub fn register_extra_weight_unchecked(weight: Weight) { let current_weight = AllExtrinsicsWeight::get().unwrap_or_default(); - let next_weight = current_weight.saturating_add(weight).min(T::MaximumBlockWeight::get()); + let next_weight = current_weight.saturating_add(weight); AllExtrinsicsWeight::put(next_weight); } @@ -974,7 +1006,7 @@ impl Module { } /// Deposits a log and ensures it matches the block's log data. - /// + /// /// # /// - `O(D)` where `D` length of `Digest` /// - 1 storage mutation (codec `O(D)`). @@ -1238,15 +1270,11 @@ pub struct CheckWeight(PhantomData); impl CheckWeight where T::Call: Dispatchable { - /// Get the quota ratio of each dispatch class type. This indicates that all operational + /// Get the quota ratio of each dispatch class type. This indicates that all operational and mandatory /// dispatches can use the full capacity of any resource, while user-triggered ones can consume /// a portion. fn get_dispatch_limit_ratio(class: DispatchClass) -> Perbill { - match class { - DispatchClass::Operational | DispatchClass::Mandatory - => ::one(), - DispatchClass::Normal => T::AvailableBlockRatio::get(), - } + Module::::get_dispatch_limit_ratio(class) } /// Checks if the current extrinsic can fit into the block with respect to block weight limits. @@ -1258,12 +1286,21 @@ impl CheckWeight where let current_weight = Module::::all_extrinsics_weight(); let maximum_weight = T::MaximumBlockWeight::get(); let limit = Self::get_dispatch_limit_ratio(info.class) * maximum_weight; - let added_weight = info.weight.min(limit); - let next_weight = current_weight.saturating_add(added_weight); - if next_weight > limit && info.class != DispatchClass::Mandatory { - Err(InvalidTransaction::ExhaustsResources.into()) - } else { + if info.class == DispatchClass::Mandatory { + // If we have a dispatch that must be included in the block, it ignores all the limits. + let extrinsic_weight = info.weight.saturating_add(T::ExtrinsicBaseWeight::get()); + let next_weight = current_weight.saturating_add(extrinsic_weight); Ok(next_weight) + } else { + let extrinsic_weight = info.weight.checked_add(T::ExtrinsicBaseWeight::get()) + .ok_or(InvalidTransaction::ExhaustsResources)?; + let next_weight = current_weight.checked_add(extrinsic_weight) + .ok_or(InvalidTransaction::ExhaustsResources)?; + if next_weight > limit { + Err(InvalidTransaction::ExhaustsResources.into()) + } else { + Ok(next_weight) + } } } @@ -1659,8 +1696,8 @@ pub(crate) mod tests { use super::*; use sp_std::cell::RefCell; use sp_core::H256; - use sp_runtime::{traits::{BlakeTwo256, IdentityLookup}, testing::Header, DispatchError}; - use frame_support::{impl_outer_origin, parameter_types}; + use sp_runtime::{traits::{BlakeTwo256, IdentityLookup, SignedExtension}, testing::Header, DispatchError}; + use frame_support::{impl_outer_origin, parameter_types, assert_ok, assert_err}; impl_outer_origin! { pub enum Origin for Test where system = super {} @@ -1683,6 +1720,12 @@ pub(crate) mod tests { apis: sp_version::create_apis_vec!([]), transaction_version: 1, }; + pub const BlockExecutionWeight: Weight = 10; + pub const ExtrinsicBaseWeight: Weight = 5; + pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 10, + write: 100, + }; } thread_local!{ @@ -1721,7 +1764,9 @@ pub(crate) mod tests { type Event = u16; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); + type DbWeight = DbWeight; + type BlockExecutionWeight = BlockExecutionWeight; + type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = Version; @@ -1747,7 +1792,10 @@ pub(crate) mod tests { const CALL: &::Call = &Call; fn new_test_ext() -> sp_io::TestExternalities { - GenesisConfig::default().build_storage::().unwrap().into() + let mut ext: sp_io::TestExternalities = GenesisConfig::default().build_storage::().unwrap().into(); + // Add to each test the initial weight of a block + ext.execute_with(|| System::register_extra_weight_unchecked(::BlockExecutionWeight::get())); + ext } fn normal_weight_limit() -> Weight { @@ -1962,11 +2010,11 @@ pub(crate) mod tests { let normal_limit = normal_weight_limit(); let small = DispatchInfo { weight: 100, ..Default::default() }; let medium = DispatchInfo { - weight: normal_limit - 1, + weight: normal_limit - ::ExtrinsicBaseWeight::get(), ..Default::default() }; let big = DispatchInfo { - weight: normal_limit + 1, + weight: normal_limit - ::ExtrinsicBaseWeight::get() + 1, ..Default::default() }; let len = 0_usize; @@ -1986,11 +2034,13 @@ pub(crate) mod tests { #[test] fn signed_ext_check_weight_refund_works() { new_test_ext().execute_with(|| { + // This is half of the max block weight let info = DispatchInfo { weight: 512, ..Default::default() }; let post_info = PostDispatchInfo { actual_weight: Some(128), }; let len = 0_usize; - AllExtrinsicsWeight::put(256); + // We allow 75% for normal transaction, so we put 25% - extrinsic base weight + AllExtrinsicsWeight::put(256 - ::ExtrinsicBaseWeight::get()); let pre = CheckWeight::(PhantomData).pre_dispatch(&1, CALL, &info, len).unwrap(); assert_eq!(AllExtrinsicsWeight::get().unwrap(), info.weight + 256); @@ -1999,7 +2049,10 @@ pub(crate) mod tests { CheckWeight::::post_dispatch(pre, &info, &post_info, len, &Ok(())) .is_ok() ); - assert_eq!(AllExtrinsicsWeight::get().unwrap(), post_info.actual_weight.unwrap() + 256); + assert_eq!( + AllExtrinsicsWeight::get().unwrap(), + post_info.actual_weight.unwrap() + 256, + ); }) } @@ -2013,41 +2066,127 @@ pub(crate) mod tests { AllExtrinsicsWeight::put(128); let pre = CheckWeight::(PhantomData).pre_dispatch(&1, CALL, &info, len).unwrap(); - assert_eq!(AllExtrinsicsWeight::get().unwrap(), info.weight + 128); + assert_eq!( + AllExtrinsicsWeight::get().unwrap(), + info.weight + 128 + ::ExtrinsicBaseWeight::get(), + ); assert!( CheckWeight::::post_dispatch(pre, &info, &post_info, len, &Ok(())) .is_ok() ); - assert_eq!(AllExtrinsicsWeight::get().unwrap(), info.weight + 128); + assert_eq!( + AllExtrinsicsWeight::get().unwrap(), + info.weight + 128 + ::ExtrinsicBaseWeight::get(), + ); }) } #[test] - fn signed_ext_check_weight_fee_works() { + fn zero_weight_extrinsic_still_has_base_weight() { new_test_ext().execute_with(|| { let free = DispatchInfo { weight: 0, ..Default::default() }; let len = 0_usize; - assert_eq!(System::all_extrinsics_weight(), 0); + // Initial weight from `BlockExecutionWeight` + assert_eq!(System::all_extrinsics_weight(), ::BlockExecutionWeight::get()); let r = CheckWeight::(PhantomData).pre_dispatch(&1, CALL, &free, len); assert!(r.is_ok()); - assert_eq!(System::all_extrinsics_weight(), 0); + assert_eq!( + System::all_extrinsics_weight(), + ::ExtrinsicBaseWeight::get() + ::BlockExecutionWeight::get() + ); }) } #[test] - fn signed_ext_check_weight_max_works() { + fn max_extrinsic_weight_is_allowed_but_nothing_more() { + // Dispatch Class Normal new_test_ext().execute_with(|| { - let max = DispatchInfo { weight: Weight::max_value(), ..Default::default() }; + let one = DispatchInfo { weight: 1, ..Default::default() }; + let max = DispatchInfo { weight: System::max_extrinsic_weight(DispatchClass::Normal), ..Default::default() }; let len = 0_usize; - let normal_limit = normal_weight_limit(); - assert_eq!(System::all_extrinsics_weight(), 0); - let r = CheckWeight::(PhantomData).pre_dispatch(&1, CALL, &max, len); - assert!(r.is_ok()); - assert_eq!(System::all_extrinsics_weight(), normal_limit); - }) + assert_ok!(CheckWeight::::do_pre_dispatch(&max, len)); + assert_err!( + CheckWeight::::do_pre_dispatch(&one, len), + InvalidTransaction::ExhaustsResources, + ); + // Weight should be 75% of 1024 (max block weight) + assert_eq!(System::all_extrinsics_weight(), 768); + }); + + // Dispatch Class Operational + new_test_ext().execute_with(|| { + let one = DispatchInfo { + weight: 1, + class: DispatchClass::Operational, + ..Default::default() + }; + let max = DispatchInfo { + weight: System::max_extrinsic_weight(DispatchClass::Operational), + class: DispatchClass::Operational, + ..Default::default() + }; + let len = 0_usize; + + assert_ok!(CheckWeight::::do_pre_dispatch(&max, len)); + assert_err!( + CheckWeight::::do_pre_dispatch(&one, len), + InvalidTransaction::ExhaustsResources, + ); + // Weight should be 100% of max block weight + assert_eq!(System::all_extrinsics_weight(), ::MaximumBlockWeight::get()); + }); + } + + #[test] + fn mandatory_extrinsic_doesnt_care_about_limits() { + new_test_ext().execute_with(|| { + let max = DispatchInfo { + weight: Weight::max_value(), + class: DispatchClass::Mandatory, + ..Default::default() + }; + let len = 0_usize; + + assert_ok!(CheckWeight::::do_pre_dispatch(&max, len)); + assert_eq!(System::all_extrinsics_weight(), Weight::max_value()); + assert!(System::all_extrinsics_weight() > ::MaximumBlockWeight::get()); + }); + } + + #[test] + fn register_extra_weight_unchecked_doesnt_care_about_limits() { + new_test_ext().execute_with(|| { + System::register_extra_weight_unchecked(Weight::max_value()); + assert_eq!(System::all_extrinsics_weight(), Weight::max_value()); + assert!(System::all_extrinsics_weight() > ::MaximumBlockWeight::get()); + }); + } + + #[test] + fn full_block_with_normal_and_operational() { + new_test_ext().execute_with(|| { + // Max block is 1024 + // Max normal is 768 (75%) + // 10 is taken for block execution weight + // So normal extrinsic can be 758 weight (-5 for base extrinsic weight) + // And Operational can be 256 to produce a full block (-5 for base) + + assert_eq!(System::max_extrinsic_weight(DispatchClass::Normal), 753); + + let max_normal = DispatchInfo { weight: 753, ..Default::default() }; + let rest_operational = DispatchInfo { weight: 251, class: DispatchClass::Operational, ..Default::default() }; + + let len = 0_usize; + + assert_ok!(CheckWeight::::do_pre_dispatch(&max_normal, len)); + assert_eq!(System::all_extrinsics_weight(), 768); + assert_ok!(CheckWeight::::do_pre_dispatch(&rest_operational, len)); + assert_eq!(::MaximumBlockWeight::get(), 1024); + assert_eq!(System::all_extrinsics_weight(), ::MaximumBlockWeight::get()); + }); } #[test] diff --git a/frame/timestamp/src/lib.rs b/frame/timestamp/src/lib.rs index 704343fd165..a2a6762464e 100644 --- a/frame/timestamp/src/lib.rs +++ b/frame/timestamp/src/lib.rs @@ -62,7 +62,6 @@ //! //! ``` //! use frame_support::{decl_module, dispatch}; -//! use frame_support::weights::MINIMUM_WEIGHT; //! # use pallet_timestamp as timestamp; //! use frame_system::{self as system, ensure_signed}; //! @@ -70,7 +69,7 @@ //! //! decl_module! { //! pub struct Module for enum Call where origin: T::Origin { -//! #[weight = MINIMUM_WEIGHT] +//! #[weight = 0] //! pub fn get_time(origin) -> dispatch::DispatchResult { //! let _sender = ensure_signed(origin)?; //! let _now = >::get(); @@ -101,7 +100,7 @@ use frame_support::debug; use frame_support::{ Parameter, decl_storage, decl_module, traits::{Time, UnixTime, Get}, - weights::{MINIMUM_WEIGHT, DispatchClass}, + weights::{DispatchClass}, }; use sp_runtime::{ RuntimeString, @@ -148,13 +147,13 @@ decl_module! { /// `MinimumPeriod`. /// /// The dispatch origin for this call must be `Inherent`. - /// + /// /// # /// - `O(T)` where `T` complexity of `on_timestamp_set` /// - 2 storage mutations (codec `O(1)`). /// - 1 event handler `on_timestamp_set` `O(T)`. /// # - #[weight = (MINIMUM_WEIGHT, DispatchClass::Mandatory)] + #[weight = (0, DispatchClass::Mandatory)] fn set(origin, #[compact] now: T::Moment) { ensure_none(origin)?; assert!(!::DidUpdate::exists(), "Timestamp must be updated only once in the block"); @@ -313,6 +312,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index 6caca4c23ba..c5992ab1298 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -67,9 +67,6 @@ pub trait Trait: frame_system::Trait { /// if any. type OnTransactionPayment: OnUnbalanced>; - /// The fee to be paid for making a transaction; the base. - type TransactionBaseFee: Get>; - /// The fee to be paid for making a transaction; the per-byte portion. type TransactionByteFee: Get>; @@ -88,9 +85,6 @@ decl_storage! { decl_module! { pub struct Module for enum Call where origin: T::Origin { - /// The fee to be paid for making a transaction; the base. - const TransactionBaseFee: BalanceOf = T::TransactionBaseFee::get(); - /// The fee to be paid for making a transaction; the per-byte portion. const TransactionByteFee: BalanceOf = T::TransactionByteFee::get(); @@ -178,7 +172,7 @@ impl Module { let targeted_fee_adjustment = NextFeeMultiplier::get(); let adjusted_fee = targeted_fee_adjustment.saturated_multiply_accumulate(adjustable_fee.saturated_into()); - let base_fee = T::TransactionBaseFee::get(); + let base_fee = Self::weight_to_fee(T::ExtrinsicBaseWeight::get()); base_fee.saturating_add(adjusted_fee.saturated_into()).saturating_add(tip) } else { tip @@ -367,6 +361,15 @@ mod tests { pub enum Origin for Runtime {} } + thread_local! { + static EXTRINSIC_BASE_WEIGHT: RefCell = RefCell::new(0); + } + + pub struct ExtrinsicBaseWeight; + impl Get for ExtrinsicBaseWeight { + fn get() -> u64 { EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow()) } + } + parameter_types! { pub const BlockHashCount: u64 = 250; pub const MaximumBlockWeight: Weight = 1024; @@ -388,6 +391,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); @@ -409,16 +414,10 @@ mod tests { type AccountStore = System; } thread_local! { - static TRANSACTION_BASE_FEE: RefCell = RefCell::new(0); static TRANSACTION_BYTE_FEE: RefCell = RefCell::new(1); static WEIGHT_TO_FEE: RefCell = RefCell::new(1); } - pub struct TransactionBaseFee; - impl Get for TransactionBaseFee { - fn get() -> u64 { TRANSACTION_BASE_FEE.with(|v| *v.borrow()) } - } - pub struct TransactionByteFee; impl Get for TransactionByteFee { fn get() -> u64 { TRANSACTION_BYTE_FEE.with(|v| *v.borrow()) } @@ -434,7 +433,6 @@ mod tests { impl Trait for Runtime { type Currency = pallet_balances::Module; type OnTransactionPayment = (); - type TransactionBaseFee = TransactionBaseFee; type TransactionByteFee = TransactionByteFee; type WeightToFee = WeightToFee; type FeeMultiplierUpdate = (); @@ -446,7 +444,7 @@ mod tests { pub struct ExtBuilder { balance_factor: u64, - base_fee: u64, + base_weight: u64, byte_fee: u64, weight_to_fee: u64 } @@ -455,7 +453,7 @@ mod tests { fn default() -> Self { Self { balance_factor: 1, - base_fee: 0, + base_weight: 0, byte_fee: 1, weight_to_fee: 1, } @@ -463,8 +461,8 @@ mod tests { } impl ExtBuilder { - pub fn base_fee(mut self, base_fee: u64) -> Self { - self.base_fee = base_fee; + pub fn base_weight(mut self, base_weight: u64) -> Self { + self.base_weight = base_weight; self } pub fn byte_fee(mut self, byte_fee: u64) -> Self { @@ -480,7 +478,7 @@ mod tests { self } fn set_constants(&self) { - TRANSACTION_BASE_FEE.with(|v| *v.borrow_mut() = self.base_fee); + EXTRINSIC_BASE_WEIGHT.with(|v| *v.borrow_mut() = self.base_weight); TRANSACTION_BYTE_FEE.with(|v| *v.borrow_mut() = self.byte_fee); WEIGHT_TO_FEE.with(|v| *v.borrow_mut() = self.weight_to_fee); } @@ -523,7 +521,7 @@ mod tests { fn signed_extension_transaction_payment_work() { ExtBuilder::default() .balance_factor(10) - .base_fee(5) + .base_weight(5) .build() .execute_with(|| { @@ -558,7 +556,7 @@ mod tests { fn signed_extension_transaction_payment_multiplied_refund_works() { ExtBuilder::default() .balance_factor(10) - .base_fee(5) + .base_weight(5) .build() .execute_with(|| { @@ -606,7 +604,7 @@ mod tests { #[test] fn signed_extension_allows_free_transactions() { ExtBuilder::default() - .base_fee(100) + .base_weight(100) .balance_factor(0) .build() .execute_with(|| @@ -645,7 +643,7 @@ mod tests { #[test] fn signed_ext_length_fee_is_also_updated_per_congestion() { ExtBuilder::default() - .base_fee(5) + .base_weight(5) .balance_factor(10) .build() .execute_with(|| @@ -673,7 +671,7 @@ mod tests { let ext = xt.encode(); let len = ext.len() as u32; ExtBuilder::default() - .base_fee(5) + .base_weight(5) .weight_fee(2) .build() .execute_with(|| @@ -687,7 +685,7 @@ mod tests { weight: info.weight, class: info.class, partial_fee: - 5 /* base */ + 5 * 2 /* base * weight_fee */ + ( len as u64 /* len * 1 */ + info.weight.min(MaximumBlockWeight::get()) as u64 * 2 /* weight * weight_to_fee */ @@ -701,7 +699,7 @@ mod tests { #[test] fn compute_fee_works_without_multiplier() { ExtBuilder::default() - .base_fee(100) + .base_weight(100) .byte_fee(10) .balance_factor(0) .build() @@ -741,7 +739,7 @@ mod tests { #[test] fn compute_fee_works_with_multiplier() { ExtBuilder::default() - .base_fee(100) + .base_weight(100) .byte_fee(10) .balance_factor(0) .build() @@ -774,7 +772,7 @@ mod tests { #[test] fn compute_fee_does_not_overflow() { ExtBuilder::default() - .base_fee(100) + .base_weight(100) .byte_fee(10) .balance_factor(0) .build() @@ -801,7 +799,7 @@ mod tests { fn refund_does_not_recreate_account() { ExtBuilder::default() .balance_factor(10) - .base_fee(5) + .base_weight(5) .build() .execute_with(|| { @@ -828,7 +826,7 @@ mod tests { fn actual_weight_higher_than_max_refunds_nothing() { ExtBuilder::default() .balance_factor(10) - .base_fee(5) + .base_weight(5) .build() .execute_with(|| { diff --git a/frame/treasury/src/lib.rs b/frame/treasury/src/lib.rs index 509cdaf2623..b1646e4a20d 100644 --- a/frame/treasury/src/lib.rs +++ b/frame/treasury/src/lib.rs @@ -98,7 +98,7 @@ use frame_support::traits::{ use sp_runtime::{Permill, ModuleId, Percent, RuntimeDebug, traits::{ Zero, StaticLookup, AccountIdConversion, Saturating, Hash, BadOrigin }}; -use frame_support::weights::{Weight, MINIMUM_WEIGHT, DispatchClass}; +use frame_support::weights::{Weight, DispatchClass}; use frame_support::traits::{Contains, EnsureOrigin}; use codec::{Encode, Decode}; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -561,7 +561,7 @@ decl_module! { Self::spend_funds(); } - MINIMUM_WEIGHT + 0 } } } diff --git a/frame/treasury/src/tests.rs b/frame/treasury/src/tests.rs index d1b7d13ff26..2ce07547988 100644 --- a/frame/treasury/src/tests.rs +++ b/frame/treasury/src/tests.rs @@ -72,6 +72,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type AvailableBlockRatio = AvailableBlockRatio; type MaximumBlockLength = MaximumBlockLength; type Version = (); diff --git a/frame/utility/src/tests.rs b/frame/utility/src/tests.rs index 1b26bb5d5b1..360ff78d308 100644 --- a/frame/utility/src/tests.rs +++ b/frame/utility/src/tests.rs @@ -72,6 +72,8 @@ impl frame_system::Trait for Test { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index 6da92ea15a4..a729777c24d 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -57,7 +57,7 @@ use frame_support::traits::{ Currency, LockableCurrency, VestingSchedule, WithdrawReason, LockIdentifier, ExistenceRequirement, Get }; -use frame_support::weights::MINIMUM_WEIGHT; + use frame_system::{self as system, ensure_signed}; mod benchmarking; @@ -194,7 +194,7 @@ decl_module! { /// - One storage read (codec `O(1)`) and up to one removal. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn vest(origin) -> DispatchResult { let who = ensure_signed(origin)?; Self::update_lock(who) @@ -216,7 +216,7 @@ decl_module! { /// - One storage read (codec `O(1)`) and up to one removal. /// - One event. /// # - #[weight = MINIMUM_WEIGHT] + #[weight = 0] fn vest_other(origin, target: ::Source) -> DispatchResult { ensure_signed(origin)?; Self::update_lock(T::Lookup::lookup(target)?) @@ -382,6 +382,8 @@ mod tests { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); diff --git a/test-utils/runtime/src/lib.rs b/test-utils/runtime/src/lib.rs index 94d3e8db3e8..745eb8f7458 100644 --- a/test-utils/runtime/src/lib.rs +++ b/test-utils/runtime/src/lib.rs @@ -402,6 +402,8 @@ impl frame_system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; type Version = (); -- GitLab From 4b64b617112b0316d67b8f579c40504858f46232 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Sat, 25 Apr 2020 06:57:06 -0400 Subject: [PATCH 061/167] Support Justification and FinalityProof import in pow import queue. (#5781) --- client/consensus/pow/src/lib.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client/consensus/pow/src/lib.rs b/client/consensus/pow/src/lib.rs index de41ea7bd23..e0149b475b7 100644 --- a/client/consensus/pow/src/lib.rs +++ b/client/consensus/pow/src/lib.rs @@ -49,7 +49,7 @@ use sp_consensus::{ SelectChain, Error as ConsensusError, CanAuthorWith, RecordProof, BlockImport, BlockCheckParams, ImportResult, }; -use sp_consensus::import_queue::{BoxBlockImport, BasicQueue, Verifier}; +use sp_consensus::import_queue::{BoxBlockImport, BasicQueue, Verifier, BoxJustificationImport, BoxFinalityProofImport}; use codec::{Encode, Decode}; use sc_client_api; use log::*; @@ -457,6 +457,8 @@ pub type PowImportQueue = BasicQueue; /// Import queue for PoW engine. pub fn import_queue( block_import: BoxBlockImport, + justification_import: Option>, + finality_proof_import: Option>, algorithm: Algorithm, inherent_data_providers: InherentDataProviders, ) -> Result< @@ -474,8 +476,8 @@ pub fn import_queue( Ok(BasicQueue::new( verifier, block_import, - None, - None + justification_import, + finality_proof_import )) } -- GitLab From 369a3ddf59908b82a42dc87c77b27fc14531fe94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Sat, 25 Apr 2020 14:01:21 +0200 Subject: [PATCH 062/167] Compute weight only once. (#5780) --- frame/support/src/dispatch.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 4e98d9a316f..081574726a6 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -1433,16 +1433,17 @@ macro_rules! decl_module { match *self { $( $call_type::$fn_name( $( ref $param_name ),* ) => { + let base_weight = $weight; let weight = >::weigh_data( - &$weight, + &base_weight, ($( $param_name, )*) ); let class = >::classify_dispatch( - &$weight, + &base_weight, ($( $param_name, )*) ); let pays_fee = >::pays_fee( - &$weight, + &base_weight, ($( $param_name, )*) ); $crate::dispatch::DispatchInfo { -- GitLab From 831aee913dc3b962dc5a22761cd028b6bd6203f5 Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Sun, 26 Apr 2020 01:17:53 +1200 Subject: [PATCH 063/167] expose constants for identity pallet (#5783) * expose constants * bump version --- bin/node/runtime/src/lib.rs | 2 +- frame/identity/src/lib.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index f0c33e03cf0..169768243b5 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. spec_version: 244, - impl_version: 0, + impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, }; diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index deff7bf1ebb..ad13d536c01 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -560,6 +560,28 @@ mod weight_for { decl_module! { // Simple declaration of the `Module` type. Lets the macro know what it's working on. pub struct Module for enum Call where origin: T::Origin { + /// The amount held on deposit for a registered identity. + const BasicDeposit: BalanceOf = T::BasicDeposit::get(); + + /// The amount held on deposit per additional field for a registered identity. + const FieldDeposit: BalanceOf = T::FieldDeposit::get(); + + /// The amount held on deposit for a registered subaccount. This should account for the fact + /// that one storage item's value will increase by the size of an account ID, and there will be + /// another trie item whose value is the size of an account ID plus 32 bytes. + const SubAccountDeposit: BalanceOf = T::SubAccountDeposit::get(); + + /// The maximum number of sub-accounts allowed per identified account. + const MaxSubAccounts: u32 = T::MaxSubAccounts::get(); + + /// Maximum number of additional fields that may be stored in an ID. Needed to bound the I/O + /// required to access an identity, but can be pretty high. + const MaxAdditionalFields: u32 = T::MaxAdditionalFields::get(); + + /// Maxmimum number of registrars allowed in the system. Needed to bound the complexity + /// of, e.g., updating judgements. + const MaxRegistrars: u32 = T::MaxRegistrars::get(); + type Error = Error; fn deposit_event() = default; -- GitLab From eb259b2f0156ac14c956b374f2e9033b21984448 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sat, 25 Apr 2020 17:59:58 +0200 Subject: [PATCH 064/167] Add support for custom runtime upgrade logic (#5782) This adds support for registering custom runtime upgrade logic that can be implemented in the runtime directly instead of putting it into a module. --- frame/executive/src/lib.rs | 125 +++++++++++++++++++++++++++++++++---- 1 file changed, 113 insertions(+), 12 deletions(-) diff --git a/frame/executive/src/lib.rs b/frame/executive/src/lib.rs index e66fdff597e..742397b6247 100644 --- a/frame/executive/src/lib.rs +++ b/frame/executive/src/lib.rs @@ -60,19 +60,57 @@ //! # pub type AllModules = u64; //! # pub enum Runtime {}; //! # use sp_runtime::transaction_validity::{ -//! TransactionValidity, UnknownTransaction, TransactionSource, +//! # TransactionValidity, UnknownTransaction, TransactionSource, //! # }; //! # use sp_runtime::traits::ValidateUnsigned; //! # impl ValidateUnsigned for Runtime { -//! # type Call = (); +//! # type Call = (); //! # -//! # fn validate_unsigned(_source: TransactionSource, _call: &Self::Call) -> TransactionValidity { -//! # UnknownTransaction::NoUnsignedValidator.into() -//! # } +//! # fn validate_unsigned(_source: TransactionSource, _call: &Self::Call) -> TransactionValidity { +//! # UnknownTransaction::NoUnsignedValidator.into() +//! # } //! # } //! /// Executive: handles dispatch to the various modules. //! pub type Executive = executive::Executive; //! ``` +//! +//! ### Custom `OnRuntimeUpgrade` logic +//! +//! You can add custom logic that should be called in your runtime on a runtime upgrade. This is +//! done by setting an optional generic parameter. The custom logic will be called before +//! the on runtime upgrade logic of all modules is called. +//! +//! ``` +//! # use sp_runtime::generic; +//! # use frame_executive as executive; +//! # pub struct UncheckedExtrinsic {}; +//! # pub struct Header {}; +//! # type Context = frame_system::ChainContext; +//! # pub type Block = generic::Block; +//! # pub type Balances = u64; +//! # pub type AllModules = u64; +//! # pub enum Runtime {}; +//! # use sp_runtime::transaction_validity::{ +//! # TransactionValidity, UnknownTransaction, TransactionSource, +//! # }; +//! # use sp_runtime::traits::ValidateUnsigned; +//! # impl ValidateUnsigned for Runtime { +//! # type Call = (); +//! # +//! # fn validate_unsigned(_source: TransactionSource, _call: &Self::Call) -> TransactionValidity { +//! # UnknownTransaction::NoUnsignedValidator.into() +//! # } +//! # } +//! struct CustomOnRuntimeUpgrade; +//! impl frame_support::traits::OnRuntimeUpgrade for CustomOnRuntimeUpgrade { +//! fn on_runtime_upgrade() -> frame_support::weights::Weight { +//! // Do whatever you want. +//! 0 +//! } +//! } +//! +//! pub type Executive = executive::Executive; +//! ``` #![cfg_attr(not(feature = "std"), no_std)] @@ -102,8 +140,19 @@ pub type CheckedOf = >::Checked; pub type CallOf = as Applyable>::Call; pub type OriginOf = as Dispatchable>::Origin; -pub struct Executive( - PhantomData<(System, Block, Context, UnsignedValidator, AllModules)> +/// Main entry point for certain runtime actions as e.g. `execute_block`. +/// +/// Generic parameters: +/// - `System`: Something that implements `frame_system::Trait` +/// - `Block`: The block type of the runtime +/// - `Context`: The context that is used when checking an extrinsic. +/// - `UnsignedValidator`: The unsigned transaction validator of the runtime. +/// - `AllModules`: Tuple that contains all modules. Will be used to call e.g. `on_initialize`. +/// - `OnRuntimeUpgrade`: Custom logic that should be called after a runtime upgrade. Modules are +/// already called by `AllModules`. It will be called before all modules will +/// be called. +pub struct Executive( + PhantomData<(System, Block, Context, UnsignedValidator, AllModules, OnRuntimeUpgrade)> ); impl< @@ -116,7 +165,9 @@ impl< OnInitialize + OnFinalize + OffchainWorker, -> ExecuteBlock for Executive + COnRuntimeUpgrade: OnRuntimeUpgrade, +> ExecuteBlock for + Executive where Block::Extrinsic: Checkable + Codec, CheckedOf: @@ -141,7 +192,8 @@ impl< OnInitialize + OnFinalize + OffchainWorker, -> Executive + COnRuntimeUpgrade: OnRuntimeUpgrade, +> Executive where Block::Extrinsic: Checkable + Codec, CheckedOf: @@ -180,8 +232,9 @@ where ) { if Self::runtime_upgraded() { // System is not part of `AllModules`, so we need to call this manually. - as OnRuntimeUpgrade>::on_runtime_upgrade(); - let weight = ::on_runtime_upgrade(); + let mut weight = as OnRuntimeUpgrade>::on_runtime_upgrade(); + weight = weight.saturating_add(COnRuntimeUpgrade::on_runtime_upgrade()); + weight = weight.saturating_add(::on_runtime_upgrade()); >::register_extra_weight_unchecked(weight); } >::initialize( @@ -410,6 +463,7 @@ mod tests { use frame_system::{self as system, Call as SystemCall, ChainContext, LastRuntimeUpgradeInfo}; use pallet_balances::Call as BalancesCall; use hex_literal::hex; + const TEST_KEY: &[u8] = &*b":test:key:"; mod custom { use frame_support::weights::{Weight, DispatchClass}; @@ -442,6 +496,11 @@ mod tests { fn on_finalize() { println!("on_finalize(?)"); } + + fn on_runtime_upgrade() -> Weight { + sp_io::storage::set(super::TEST_KEY, "module".as_bytes()); + 0 + } } } } @@ -570,7 +629,27 @@ mod tests { ); type AllModules = (System, Balances, Custom); type TestXt = sp_runtime::testing::TestXt; - type Executive = super::Executive, ChainContext, Runtime, AllModules>; + + // Will contain `true` when the custom runtime logic was called. + const CUSTOM_ON_RUNTIME_KEY: &[u8] = &*b":custom:on_runtime"; + + struct CustomOnRuntimeUpgrade; + impl OnRuntimeUpgrade for CustomOnRuntimeUpgrade { + fn on_runtime_upgrade() -> Weight { + sp_io::storage::set(TEST_KEY, "custom_upgrade".as_bytes()); + sp_io::storage::set(CUSTOM_ON_RUNTIME_KEY, &true.encode()); + 0 + } + } + + type Executive = super::Executive< + Runtime, + Block, + ChainContext, + Runtime, + AllModules, + CustomOnRuntimeUpgrade + >; fn extra(nonce: u64, fee: Balance) -> SignedExtra { ( @@ -899,4 +978,26 @@ mod tests { assert_eq!(result, last.was_upgraded(¤t)); } } + + #[test] + fn custom_runtime_upgrade_is_called_before_modules() { + new_test_ext(1).execute_with(|| { + // Make sure `on_runtime_upgrade` is called. + RUNTIME_VERSION.with(|v| *v.borrow_mut() = sp_version::RuntimeVersion { + spec_version: 1, + ..Default::default() + }); + + Executive::initialize_block(&Header::new( + 1, + H256::default(), + H256::default(), + [69u8; 32].into(), + Digest::default(), + )); + + assert_eq!(&sp_io::storage::get(TEST_KEY).unwrap()[..], *b"module"); + assert_eq!(sp_io::storage::get(CUSTOM_ON_RUNTIME_KEY).unwrap(), true.encode()); + }); + } } -- GitLab From 31d5d3bb42c32b2ae271c9bf349a6f6a95fefbba Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Mon, 27 Apr 2020 05:39:16 +1200 Subject: [PATCH 065/167] fix Fixed64 (#5784) * fix fixed64 * improve * bump version --- bin/node/runtime/src/lib.rs | 2 +- primitives/arithmetic/src/fixed64.rs | 50 ++++++++++++++++++++++++++-- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 169768243b5..4ec0fa275b4 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. spec_version: 244, - impl_version: 1, + impl_version: 2, apis: RUNTIME_API_VERSIONS, transaction_version: 1, }; diff --git a/primitives/arithmetic/src/fixed64.rs b/primitives/arithmetic/src/fixed64.rs index af4dbf34e29..63a69e66e7c 100644 --- a/primitives/arithmetic/src/fixed64.rs +++ b/primitives/arithmetic/src/fixed64.rs @@ -113,7 +113,10 @@ impl Saturating for Fixed64 { } fn saturating_mul(self, rhs: Self) -> Self { - Self(self.0.saturating_mul(rhs.0) / DIV) + let a = self.0 as i128; + let b = rhs.0 as i128; + let res = a * b / DIV as i128; + Self(res.saturated_into()) } fn saturating_sub(self, rhs: Self) -> Self { @@ -121,7 +124,22 @@ impl Saturating for Fixed64 { } fn saturating_pow(self, exp: usize) -> Self { - Self(self.0.saturating_pow(exp as u32)) + if exp == 0 { + return Self::from_natural(1); + } + + let exp = exp as u64; + let msb_pos = 64 - exp.leading_zeros(); + + let mut result = Self::from_natural(1); + let mut pow_val = self; + for i in 0..msb_pos { + if ((1 << i) & exp) > 0 { + result = result.saturating_mul(pow_val); + } + pow_val = pow_val.saturating_mul(pow_val); + } + result } } @@ -333,4 +351,32 @@ mod tests { let b = Fixed64::from_rational(1, 100); assert_eq!(a.checked_div(&b), Some(Fixed64::from_rational(120, 1))); } + + #[test] + fn saturating_mul_should_work() { + assert_eq!(Fixed64::from_natural(100).saturating_mul(Fixed64::from_natural(100)), Fixed64::from_natural(10000)); + } + + #[test] + fn saturating_pow_should_work() { + assert_eq!(Fixed64::from_natural(2).saturating_pow(0), Fixed64::from_natural(1)); + assert_eq!(Fixed64::from_natural(2).saturating_pow(1), Fixed64::from_natural(2)); + assert_eq!(Fixed64::from_natural(2).saturating_pow(2), Fixed64::from_natural(4)); + assert_eq!(Fixed64::from_natural(2).saturating_pow(3), Fixed64::from_natural(8)); + assert_eq!(Fixed64::from_natural(2).saturating_pow(20), Fixed64::from_natural(1048576)); + + assert_eq!(Fixed64::from_natural(1).saturating_pow(1000), Fixed64::from_natural(1)); + assert_eq!(Fixed64::from_natural(-1).saturating_pow(1000), Fixed64::from_natural(1)); + assert_eq!(Fixed64::from_natural(-1).saturating_pow(1001), Fixed64::from_natural(-1)); + assert_eq!(Fixed64::from_natural(1).saturating_pow(usize::max_value()), Fixed64::from_natural(1)); + assert_eq!(Fixed64::from_natural(-1).saturating_pow(usize::max_value()), Fixed64::from_natural(-1)); + assert_eq!(Fixed64::from_natural(-1).saturating_pow(usize::max_value() - 1), Fixed64::from_natural(1)); + + assert_eq!(Fixed64::from_natural(309).saturating_pow(4), Fixed64::from_natural(9_116_621_361)); + assert_eq!(Fixed64::from_natural(309).saturating_pow(5), Fixed64::from_parts(i64::max_value())); + + assert_eq!(Fixed64::from_natural(1).saturating_pow(usize::max_value()), Fixed64::from_natural(1)); + assert_eq!(Fixed64::from_natural(0).saturating_pow(usize::max_value()), Fixed64::from_natural(0)); + assert_eq!(Fixed64::from_natural(2).saturating_pow(usize::max_value()), Fixed64::from_parts(i64::max_value())); + } } -- GitLab From a81dddca0bf15d21f719a28e9d8c3728310a14fd Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 27 Apr 2020 12:17:26 +0200 Subject: [PATCH 066/167] Extra timeout handling in block_requests (#5794) --- client/network/src/behaviour.rs | 10 + client/network/src/protocol/block_requests.rs | 231 +++++++++++++++++- 2 files changed, 229 insertions(+), 12 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 3186801e5fd..ce92114c530 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -261,6 +261,16 @@ impl NetworkBehaviourEventProcess { + // There doesn't exist any mechanism to report cancellations yet. + // We would normally disconnect the node, but this event happens as the result of + // a disconnect, so there's nothing more to do. + } + block_requests::Event::RequestTimeout { peer, .. } => { + // There doesn't exist any mechanism to report timeouts yet, so we process them by + // disconnecting the node. + self.substrate.disconnect_peer(&peer); + } } } } diff --git a/client/network/src/protocol/block_requests.rs b/client/network/src/protocol/block_requests.rs index f1981171af3..3c511538d99 100644 --- a/client/network/src/protocol/block_requests.rs +++ b/client/network/src/protocol/block_requests.rs @@ -30,6 +30,7 @@ use crate::{ protocol::{api, message::{self, BlockAttributes}} }; use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; +use futures_timer::Delay; use libp2p::{ core::{ ConnectedPoint, @@ -54,10 +55,11 @@ use prost::Message; use sp_runtime::{generic::BlockId, traits::{Block, Header, One, Zero}}; use std::{ cmp::min, - collections::VecDeque, + collections::{HashMap, VecDeque}, io, iter, marker::PhantomData, + pin::Pin, sync::Arc, time::Duration, task::{Context, Poll} @@ -77,6 +79,19 @@ pub enum Event { original_request: message::BlockRequest, response: message::BlockResponse, }, + /// A request has been cancelled because the peer has disconnected. + /// Disconnects can also happen as a result of violating the network protocol. + RequestCancelled { + peer: PeerId, + /// The original request passed to `send_request`. + original_request: message::BlockRequest, + }, + /// A request has timed out. + RequestTimeout { + peer: PeerId, + /// The original request passed to `send_request`. + original_request: message::BlockRequest, + } } /// Configuration options for `BlockRequests`. @@ -86,6 +101,7 @@ pub struct Config { max_request_len: usize, max_response_len: usize, inactivity_timeout: Duration, + request_timeout: Duration, protocol: Bytes, } @@ -96,12 +112,14 @@ impl Config { /// - max. request size = 1 MiB /// - max. response size = 16 MiB /// - inactivity timeout = 15s + /// - request timeout = 40s pub fn new(id: &ProtocolId) -> Self { let mut c = Config { max_block_data_response: 128, max_request_len: 1024 * 1024, max_response_len: 16 * 1024 * 1024, inactivity_timeout: Duration::from_secs(15), + request_timeout: Duration::from_secs(40), protocol: Bytes::new(), }; c.set_protocol(id); @@ -149,12 +167,27 @@ pub struct BlockRequests { config: Config, /// Blockchain client. chain: Arc>, + /// List of all active connections and the requests we've sent. + peers: HashMap>>, /// Futures sending back the block request response. outgoing: FuturesUnordered>, /// Events to return as soon as possible from `poll`. pending_events: VecDeque, Event>>, } +/// Local tracking of a libp2p connection. +#[derive(Debug)] +struct Connection { + id: ConnectionId, + ongoing_request: Option>, +} + +#[derive(Debug)] +struct OngoingRequest { + request: message::BlockRequest, + timeout: Delay, +} + impl BlockRequests where B: Block, @@ -163,6 +196,7 @@ where BlockRequests { config: cfg, chain, + peers: HashMap::new(), outgoing: FuturesUnordered::new(), pending_events: VecDeque::new(), } @@ -170,9 +204,30 @@ where /// Issue a new block request. /// + /// Cancels any existing request targeting the same `PeerId`. + /// /// If the response doesn't arrive in time, or if the remote answers improperly, the target /// will be disconnected. pub fn send_request(&mut self, target: &PeerId, req: message::BlockRequest) { + // Determine which connection to send the request to. + let connection = if let Some(peer) = self.peers.get_mut(target) { + // We don't want to have multiple requests for any given node, so in priority try to + // find a connection with an existing request, to override it. + if let Some(entry) = peer.iter_mut().find(|c| c.ongoing_request.is_some()) { + entry + } else if let Some(entry) = peer.get_mut(0) { + entry + } else { + log::error!( + target: "sync", + "State inconsistency: empty list of peer connections" + ); + return; + } + } else { + return; + }; + let protobuf_rq = api::v1::BlockRequest { fields: u32::from_be_bytes([req.fields.bits(), 0, 0, 0]), from_block: match req.from { @@ -191,14 +246,31 @@ where let mut buf = Vec::with_capacity(protobuf_rq.encoded_len()); if let Err(err) = protobuf_rq.encode(&mut buf) { - log::warn!("failed to encode block request {:?}: {:?}", protobuf_rq, err); + log::warn!( + target: "sync", + "Failed to encode block request {:?}: {:?}", + protobuf_rq, + err + ); return; } - log::trace!("enqueueing block request to {:?}: {:?}", target, protobuf_rq); + if let Some(rq) = &connection.ongoing_request { + log::debug!( + target: "sync", + "Replacing existing block request on connection {:?}", + connection.id + ); + } + connection.ongoing_request = Some(OngoingRequest { + request: req.clone(), + timeout: Delay::new(self.config.request_timeout), + }); + + log::trace!(target: "sync", "Enqueueing block request to {:?}: {:?}", target, protobuf_rq); self.pending_events.push_back(NetworkBehaviourAction::NotifyHandler { peer_id: target.clone(), - handler: NotifyHandler::Any, + handler: NotifyHandler::One(connection.id), event: OutboundProtocol { request: buf, original_request: req, @@ -215,7 +287,9 @@ where , request: &api::v1::BlockRequest ) -> Result { - log::trace!("block request from peer {}: from block {:?} to block {:?}, max blocks {:?}", + log::trace!( + target: "sync", + "Block request from peer {}: from block {:?} to block {:?}, max blocks {:?}", peer, request.from_block, request.to_block, @@ -332,6 +406,7 @@ where }; let mut cfg = OneShotHandlerConfig::default(); cfg.inactive_timeout = self.config.inactivity_timeout; + cfg.substream_timeout = self.config.request_timeout; OneShotHandler::new(SubstreamProtocol::new(p), cfg) } @@ -345,34 +420,138 @@ where fn inject_disconnected(&mut self, _peer: &PeerId) { } + fn inject_connection_established(&mut self, peer_id: &PeerId, id: &ConnectionId, _: &ConnectedPoint) { + self.peers.entry(peer_id.clone()) + .or_default() + .push(Connection { + id: *id, + ongoing_request: None, + }); + } + + fn inject_connection_closed(&mut self, peer_id: &PeerId, id: &ConnectionId, _: &ConnectedPoint) { + let mut needs_remove = false; + if let Some(entry) = self.peers.get_mut(peer_id) { + if let Some(pos) = entry.iter().position(|i| i.id == *id) { + let ongoing_request = entry.remove(pos).ongoing_request; + if let Some(ongoing_request) = ongoing_request { + log::debug!( + target: "sync", + "Connection {:?} with {} closed with ongoing sync request: {:?}", + id, + peer_id, + ongoing_request + ); + let ev = Event::RequestCancelled { + peer: peer_id.clone(), + original_request: ongoing_request.request.clone(), + }; + self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); + } + if entry.is_empty() { + needs_remove = true; + } + } else { + log::error!( + target: "sync", + "State inconsistency: connection id not found in list" + ); + } + } else { + log::error!( + target: "sync", + "State inconsistency: peer_id not found in list of connections" + ); + } + if needs_remove { + self.peers.remove(peer_id); + } + } + fn inject_event( &mut self, peer: PeerId, - connection: ConnectionId, + connection_id: ConnectionId, node_event: NodeEvent ) { match node_event { NodeEvent::Request(request, mut stream) => { match self.on_block_request(&peer, &request) { Ok(res) => { - log::trace!("enqueueing block response for peer {} with {} blocks", peer, res.blocks.len()); + log::trace!( + target: "sync", + "Enqueueing block response for peer {} with {} blocks", + peer, res.blocks.len() + ); let mut data = Vec::with_capacity(res.encoded_len()); if let Err(e) = res.encode(&mut data) { - log::debug!("error encoding block response for peer {}: {}", peer, e) + log::debug!( + target: "sync", + "Error encoding block response for peer {}: {}", + peer, e + ) } else { let future = async move { if let Err(e) = write_one(&mut stream, data).await { - log::debug!("error writing block response: {}", e) + log::debug!( + target: "sync", + "Error writing block response: {}", + e + ); } }; self.outgoing.push(future.boxed()) } } - Err(e) => log::debug!("error handling block request from peer {}: {}", peer, e) + Err(e) => log::debug!( + target: "sync", + "Error handling block request from peer {}: {}", peer, e + ) } } NodeEvent::Response(original_request, response) => { - log::trace!("received block response from peer {} with {} blocks", peer, response.blocks.len()); + log::trace!( + target: "sync", + "Received block response from peer {} with {} blocks", + peer, response.blocks.len() + ); + if let Some(connections) = self.peers.get_mut(&peer) { + if let Some(connection) = connections.iter_mut().find(|c| c.id == connection_id) { + if let Some(ongoing_request) = &mut connection.ongoing_request { + if ongoing_request.request == original_request { + connection.ongoing_request = None; + } else { + // We're no longer interested in that request. + log::debug!( + target: "sync", + "Received response from {} to obsolete block request {:?}", + peer, + original_request + ); + return; + } + } else { + // We remove from `self.peers` requests we're no longer interested in, + // so this can legitimately happen. + return; + } + } else { + log::error!( + target: "sync", + "State inconsistency: response on non-existing connection {:?}", + connection_id + ); + return; + } + } else { + log::error!( + target: "sync", + "State inconsistency: response on non-connected peer {}", + peer + ); + return; + } + let blocks = response.blocks.into_iter().map(|block_data| { Ok(message::BlockData:: { hash: Decode::decode(&mut block_data.hash.as_ref())?, @@ -419,7 +598,10 @@ where self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); } Err(err) => { - log::debug!("failed to decode block response from peer {}: {}", peer, err); + log::debug!( + target: "sync", + "Failed to decode block response from peer {}: {}", peer, err + ); } } } @@ -433,6 +615,31 @@ where return Poll::Ready(ev); } + // Check the request timeouts. + for (peer, connections) in &mut self.peers { + for connection in connections { + let ongoing_request = match &mut connection.ongoing_request { + Some(rq) => rq, + None => continue, + }; + + if let Poll::Ready(_) = Pin::new(&mut ongoing_request.timeout).poll(cx) { + let original_request = ongoing_request.request.clone(); + connection.ongoing_request = None; + log::debug!( + target: "sync", + "Request timeout for {}: {:?}", + peer, original_request + ); + let ev = Event::RequestTimeout { + peer: peer.clone(), + original_request, + }; + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)); + } + } + } + while let Poll::Ready(Some(_)) = self.outgoing.poll_next_unpin(cx) {} Poll::Pending } -- GitLab From a516cf292ef3293949d741a331c568446ce71b57 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 27 Apr 2020 12:24:50 +0200 Subject: [PATCH 067/167] Support reference-counting state backend. (#5769) * Optimize pinning * Ref counting state backend * Style Co-Authored-By: Wei Tang * Update Cargo.lock * Handle empty node Co-authored-by: Wei Tang --- Cargo.lock | 5 +- client/db/Cargo.toml | 2 +- client/db/src/lib.rs | 54 +++++-- client/db/src/parity_db.rs | 11 +- client/db/src/utils.rs | 2 +- client/state-db/src/lib.rs | 28 ++-- client/state-db/src/noncanonical.rs | 117 +++++++++----- client/state-db/src/pruning.rs | 87 +++++++--- primitives/state-machine/src/trie_backend.rs | 10 +- .../state-machine/src/trie_backend_essence.rs | 148 ++++++++---------- primitives/trie/src/lib.rs | 6 - 11 files changed, 281 insertions(+), 189 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e9f315b1bd4..9cf78bfcfbc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4701,11 +4701,12 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4174d70be686b0d7cdee964b2d723e1461e28390c8804f01efc907d81043be9" +checksum = "00d595e372d119261593297debbe4193811a4dc811d2a1ccbb8caaa6666ad7ab" dependencies = [ "blake2-rfc", + "crc32fast", "libc", "log", "memmap", diff --git a/client/db/Cargo.toml b/client/db/Cargo.toml index 10ad5e30f15..f636b03f30f 100644 --- a/client/db/Cargo.toml +++ b/client/db/Cargo.toml @@ -34,7 +34,7 @@ sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } -parity-db = { version = "0.1", optional = true } +parity-db = { version = "0.1.2", optional = true } prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } [dev-dependencies] diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index c72d289e834..f3e2b0ea1f0 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -109,8 +109,9 @@ pub type DbState = sp_state_machine::TrieBackend< Arc>>, HashFor >; +const DB_HASH_LEN: usize = 32; /// Hash type that this backend uses for the database. -pub type DbHash = [u8; 32]; +pub type DbHash = [u8; DB_HASH_LEN]; /// A reference tracking state. /// @@ -314,6 +315,13 @@ impl DatabaseSettingsSrc { DatabaseSettingsSrc::Custom(_) => None, } } + /// Check if database supports internal ref counting for state data. + pub fn supports_ref_counting(&self) -> bool { + match self { + DatabaseSettingsSrc::ParityDb { .. } => true, + _ => false, + } + } } /// Create an instance of db-backed client. @@ -716,13 +724,18 @@ impl sc_client_api::backend::BlockImportOperation for Bloc struct StorageDb { pub db: Arc>, pub state_db: StateDb>, + prefix_keys: bool, } impl sp_state_machine::Storage> for StorageDb { fn get(&self, key: &Block::Hash, prefix: Prefix) -> Result, String> { - let key = prefixed_key::>(key, prefix); - self.state_db.get(&key, self) - .map_err(|e| format!("Database backend error: {:?}", e)) + if self.prefix_keys { + let key = prefixed_key::>(key, prefix); + self.state_db.get(&key, self) + } else { + self.state_db.get(key.as_ref(), self) + } + .map_err(|e| format!("Database backend error: {:?}", e)) } } @@ -843,11 +856,15 @@ impl Backend { let map_e = |e: sc_state_db::Error| sp_blockchain::Error::from( format!("State database error: {:?}", e) ); - let state_db: StateDb<_, _> = StateDb::new(config.pruning.clone(), &StateMetaDb(&*db)) - .map_err(map_e)?; + let state_db: StateDb<_, _> = StateDb::new( + config.pruning.clone(), + !config.source.supports_ref_counting(), + &StateMetaDb(&*db), + ).map_err(map_e)?; let storage_db = StorageDb { db: db.clone(), state_db, + prefix_keys: !config.source.supports_ref_counting(), }; let offchain_storage = offchain::LocalStorage::new(db.clone()); let changes_tries_storage = DbChangesTrieStorage::new( @@ -1112,17 +1129,32 @@ impl Backend { let mut bytes: u64 = 0; let mut removal: u64 = 0; let mut bytes_removal: u64 = 0; - for (key, (val, rc)) in operation.db_updates.drain() { + for (mut key, (val, rc)) in operation.db_updates.drain() { + if !self.storage.prefix_keys { + // Strip prefix + key.drain(0 .. key.len() - DB_HASH_LEN); + }; if rc > 0 { ops += 1; bytes += key.len() as u64 + val.len() as u64; - - changeset.inserted.push((key, val.to_vec())); + if rc == 1 { + changeset.inserted.push((key, val.to_vec())); + } else { + changeset.inserted.push((key.clone(), val.to_vec())); + for _ in 0 .. rc - 1 { + changeset.inserted.push((key.clone(), Default::default())); + } + } } else if rc < 0 { removal += 1; bytes_removal += key.len() as u64; - - changeset.deleted.push(key); + if rc == -1 { + changeset.deleted.push(key); + } else { + for _ in 0 .. -rc { + changeset.deleted.push(key.clone()); + } + } } } self.state_usage.tally_writes_nodes(ops, bytes); diff --git a/client/db/src/parity_db.rs b/client/db/src/parity_db.rs index a4e64d310b8..7333f70e25f 100644 --- a/client/db/src/parity_db.rs +++ b/client/db/src/parity_db.rs @@ -17,6 +17,8 @@ /// A `Database` adapter for parity-db. use sp_database::{Database, Change, Transaction, ColumnId}; +use crate::utils::NUM_COLUMNS; +use crate::columns; struct DbAdapter(parity_db::Db); @@ -30,8 +32,13 @@ fn handle_err(result: parity_db::Result) -> T { } /// Wrap RocksDb database into a trait object that implements `sp_database::Database` -pub fn open(path: &std::path::Path, num_columns: u32) -> parity_db::Result>> { - let db = parity_db::Db::with_columns(path, num_columns as u8)?; +pub fn open(path: &std::path::Path) -> parity_db::Result>> { + let mut config = parity_db::Options::with_columns(path, NUM_COLUMNS as u8); + let mut state_col = &mut config.columns[columns::STATE as usize]; + state_col.ref_counted = true; + state_col.preimage = true; + state_col.uniform = true; + let db = parity_db::Db::open(&config)?; Ok(std::sync::Arc::new(DbAdapter(db))) } diff --git a/client/db/src/utils.rs b/client/db/src/utils.rs index 9506dc4e7fa..d40abcab669 100644 --- a/client/db/src/utils.rs +++ b/client/db/src/utils.rs @@ -254,7 +254,7 @@ pub fn open_database( }, #[cfg(feature = "parity-db")] DatabaseSettingsSrc::ParityDb { path } => { - crate::parity_db::open(&path, NUM_COLUMNS) + crate::parity_db::open(&path) .map_err(|e| sp_blockchain::Error::Backend(format!("{:?}", e)))? }, DatabaseSettingsSrc::Custom(db) => db.clone(), diff --git a/client/state-db/src/lib.rs b/client/state-db/src/lib.rs index 49b1a59285e..94d51c89126 100644 --- a/client/state-db/src/lib.rs +++ b/client/state-db/src/lib.rs @@ -201,9 +201,10 @@ struct StateDbSync { impl StateDbSync { fn new( mode: PruningMode, + ref_counting: bool, db: &D, ) -> Result, Error> { - trace!(target: "state-db", "StateDb settings: {:?}", mode); + trace!(target: "state-db", "StateDb settings: {:?}. Ref-counting: {}", mode, ref_counting); // Check that settings match Self::check_meta(&mode, db)?; @@ -214,7 +215,7 @@ impl StateDbSync unimplemented!(), - PruningMode::Constrained(_) => Some(RefWindow::new(db)?), + PruningMode::Constrained(_) => Some(RefWindow::new(db, ref_counting)?), PruningMode::ArchiveAll | PruningMode::ArchiveCanonical => None, }; @@ -387,8 +388,11 @@ impl StateDbSync(&self, key: &Key, db: &D) -> Result, Error> - where Key: AsRef + pub fn get(&self, key: &Q, db: &D) -> Result, Error> + where + Q: AsRef, + Key: std::borrow::Borrow, + Q: std::hash::Hash + Eq, { if let Some(value) = self.non_canonical.get(key) { return Ok(Some(value)); @@ -438,10 +442,11 @@ impl StateDb( mode: PruningMode, + ref_counting: bool, db: &D, ) -> Result, Error> { Ok(StateDb { - db: RwLock::new(StateDbSync::new(mode, db)?) + db: RwLock::new(StateDbSync::new(mode, ref_counting, db)?) }) } @@ -475,8 +480,11 @@ impl StateDb(&self, key: &Key, db: &D) -> Result, Error> - where Key: AsRef + pub fn get(&self, key: &Q, db: &D) -> Result, Error> + where + Q: AsRef, + Key: std::borrow::Borrow, + Q: std::hash::Hash + Eq, { self.db.read().get(key, db) } @@ -523,7 +531,7 @@ mod tests { fn make_test_db(settings: PruningMode) -> (TestDb, StateDb) { let mut db = make_db(&[91, 921, 922, 93, 94]); - let state_db = StateDb::new(settings, &db).unwrap(); + let state_db = StateDb::new(settings, false, &db).unwrap(); db.commit( &state_db @@ -638,7 +646,7 @@ mod tests { #[test] fn detects_incompatible_mode() { let mut db = make_db(&[]); - let state_db = StateDb::new(PruningMode::ArchiveAll, &db).unwrap(); + let state_db = StateDb::new(PruningMode::ArchiveAll, false, &db).unwrap(); db.commit( &state_db .insert_block::( @@ -650,7 +658,7 @@ mod tests { .unwrap(), ); let new_mode = PruningMode::Constrained(Constraints { max_blocks: Some(2), max_mem: None }); - let state_db: Result, _> = StateDb::new(new_mode, &db); + let state_db: Result, _> = StateDb::new(new_mode, false, &db); assert!(state_db.is_err()); } } diff --git a/client/state-db/src/noncanonical.rs b/client/state-db/src/noncanonical.rs index 6a34523b66f..6a743e7d459 100644 --- a/client/state-db/src/noncanonical.rs +++ b/client/state-db/src/noncanonical.rs @@ -40,7 +40,7 @@ pub struct NonCanonicalOverlay { values: HashMap, //ref counted //would be deleted but kept around because block is pinned, ref counted. pinned: HashMap, - pinned_insertions: HashMap>, + pinned_insertions: HashMap, u32)>, } #[derive(Encode, Decode)] @@ -90,25 +90,44 @@ fn discard_values(values: &mut HashMap, inserted } fn discard_descendants( - levels: &mut VecDeque>>, + levels: &mut (&mut [Vec>], &mut [Vec>]), mut values: &mut HashMap, - index: usize, parents: &mut HashMap, pinned: &HashMap, - pinned_insertions: &mut HashMap>, + pinned_insertions: &mut HashMap, u32)>, hash: &BlockHash, -) { - let mut discarded = Vec::new(); - if let Some(level) = levels.get_mut(index) { +) -> u32 { + let (first, mut remainder) = if let Some((first, rest)) = levels.0.split_first_mut() { + (Some(first), (rest, &mut levels.1[..])) + } else { + if let Some((first, rest)) = levels.1.split_first_mut() { + (Some(first), (&mut levels.0[..], rest)) + } else { + (None, (&mut levels.0[..], &mut levels.1[..])) + } + }; + let mut pinned_children = 0; + if let Some(level) = first { *level = level.drain(..).filter_map(|overlay| { let parent = parents.get(&overlay.hash) .expect("there is a parent entry for each entry in levels; qed"); if parent == hash { - discarded.push(overlay.hash.clone()); + let mut num_pinned = discard_descendants( + &mut remainder, + values, + parents, + pinned, + pinned_insertions, + &overlay.hash + ); if pinned.contains_key(&overlay.hash) { + num_pinned += 1; + } + if num_pinned != 0 { // save to be discarded later. - pinned_insertions.insert(overlay.hash.clone(), overlay.inserted); + pinned_insertions.insert(overlay.hash.clone(), (overlay.inserted, num_pinned)); + pinned_children += num_pinned; } else { // discard immediately. parents.remove(&overlay.hash); @@ -120,9 +139,7 @@ fn discard_descendants( } }).collect(); } - for hash in discarded { - discard_descendants(levels, values, index + 1, parents, pinned, pinned_insertions, &hash); - } + pinned_children } impl NonCanonicalOverlay { @@ -346,19 +363,23 @@ impl NonCanonicalOverlay { // discard unfinalized overlays and values for (i, overlay) in level.into_iter().enumerate() { - if i != index { + let mut pinned_children = if i != index { discard_descendants( - &mut self.levels, + &mut self.levels.as_mut_slices(), &mut self.values, - 0, &mut self.parents, &self.pinned, &mut self.pinned_insertions, &overlay.hash, - ); - } + ) + } else { + 0 + }; if self.pinned.contains_key(&overlay.hash) { - self.pinned_insertions.insert(overlay.hash.clone(), overlay.inserted); + pinned_children += 1; + } + if pinned_children != 0 { + self.pinned_insertions.insert(overlay.hash.clone(), (overlay.inserted, pinned_children)); } else { self.parents.remove(&overlay.hash); discard_values(&mut self.values, overlay.inserted); @@ -372,7 +393,11 @@ impl NonCanonicalOverlay { } /// Get a value from the node overlay. This searches in every existing changeset. - pub fn get(&self, key: &Key) -> Option { + pub fn get(&self, key: &Q) -> Option + where + Key: std::borrow::Borrow, + Q: std::hash::Hash + Eq, + { if let Some((_, value)) = self.values.get(&key) { return Some(value.clone()); } @@ -435,37 +460,47 @@ impl NonCanonicalOverlay { debug_assert!(false, "Trying to pin pending state"); return; } - // Also pin all parents - let mut parent = Some(hash); - while let Some(hash) = parent { - let refs = self.pinned.entry(hash.clone()).or_default(); - if *refs == 0 { - trace!(target: "state-db-pin", "Pinned non-canon block: {:?}", hash); - } - *refs += 1; - parent = self.parents.get(hash); + let refs = self.pinned.entry(hash.clone()).or_default(); + if *refs == 0 { + trace!(target: "state-db-pin", "Pinned non-canon block: {:?}", hash); } + *refs += 1; } /// Discard pinned state pub fn unpin(&mut self, hash: &BlockHash) { - // Also unpin all parents - let mut parent = Some(hash.clone()); - while let Some(hash) = parent { - parent = self.parents.get(&hash).cloned(); - match self.pinned.entry(hash.clone()) { - Entry::Occupied(mut entry) => { - *entry.get_mut() -= 1; - if *entry.get() == 0 { - entry.remove(); - if let Some(inserted) = self.pinned_insertions.remove(&hash) { + let removed = match self.pinned.entry(hash.clone()) { + Entry::Occupied(mut entry) => { + *entry.get_mut() -= 1; + if *entry.get() == 0 { + entry.remove(); + true + } else { + false + } + }, + Entry::Vacant(_) => false, + }; + + if removed { + let mut parent = Some(hash.clone()); + while let Some(hash) = parent { + parent = self.parents.get(&hash).cloned(); + match self.pinned_insertions.entry(hash.clone()) { + Entry::Occupied(mut entry) => { + entry.get_mut().1 -= 1; + if entry.get().1 == 0 { + let (inserted, _) = entry.remove(); trace!(target: "state-db-pin", "Discarding unpinned non-canon block: {:?}", hash); discard_values(&mut self.values, inserted); self.parents.remove(&hash); + true + } else { + false } - } - }, - Entry::Vacant(_) => {}, + }, + Entry::Vacant(_) => break, + }; } } } diff --git a/client/state-db/src/pruning.rs b/client/state-db/src/pruning.rs index 6cf5f260060..1d15e617a18 100644 --- a/client/state-db/src/pruning.rs +++ b/client/state-db/src/pruning.rs @@ -45,6 +45,10 @@ pub struct RefWindow { /// Number of calls of `prune_one` after /// last call `apply_pending` or `revert_pending` pending_prunings: usize, + /// Keep track of re-inserted keys and do not delete them when pruning. + /// Setting this to false requires backend that supports reference + /// counting. + count_insertions: bool, } #[derive(Debug, PartialEq, Eq, parity_util_mem_derive::MallocSizeOf)] @@ -66,7 +70,7 @@ fn to_journal_key(block: u64) -> Vec { } impl RefWindow { - pub fn new(db: &D) -> Result, Error> { + pub fn new(db: &D, count_insertions: bool) -> Result, Error> { let last_pruned = db.get_meta(&to_meta_key(LAST_PRUNED, &())) .map_err(|e| Error::Db(e))?; let pending_number: u64 = match last_pruned { @@ -80,6 +84,7 @@ impl RefWindow { pending_number: pending_number, pending_canonicalizations: 0, pending_prunings: 0, + count_insertions, }; // read the journal trace!(target: "state-db", "Reading pruning journal. Pending #{}", pending_number); @@ -99,17 +104,19 @@ impl RefWindow { } fn import>(&mut self, hash: &BlockHash, journal_key: Vec, inserted: I, deleted: Vec) { - // remove all re-inserted keys from death rows - for k in inserted { - if let Some(block) = self.death_index.remove(&k) { - self.death_rows[(block - self.pending_number) as usize].deleted.remove(&k); + if self.count_insertions { + // remove all re-inserted keys from death rows + for k in inserted { + if let Some(block) = self.death_index.remove(&k) { + self.death_rows[(block - self.pending_number) as usize].deleted.remove(&k); + } } - } - // add new keys - let imported_block = self.pending_number + self.death_rows.len() as u64; - for k in deleted.iter() { - self.death_index.insert(k.clone(), imported_block); + // add new keys + let imported_block = self.pending_number + self.death_rows.len() as u64; + for k in deleted.iter() { + self.death_index.insert(k.clone(), imported_block); + } } self.death_rows.push_back( DeathRow { @@ -157,7 +164,11 @@ impl RefWindow { /// Add a change set to the window. Creates a journal record and pushes it to `commit` pub fn note_canonical(&mut self, hash: &BlockHash, commit: &mut CommitSet) { trace!(target: "state-db", "Adding to pruning window: {:?} ({} inserted, {} deleted)", hash, commit.data.inserted.len(), commit.data.deleted.len()); - let inserted = commit.data.inserted.iter().map(|(k, _)| k.clone()).collect(); + let inserted = if self.count_insertions { + commit.data.inserted.iter().map(|(k, _)| k.clone()).collect() + } else { + Default::default() + }; let deleted = ::std::mem::replace(&mut commit.data.deleted, Vec::new()); let journal_record = JournalRecord { hash: hash.clone(), @@ -177,8 +188,10 @@ impl RefWindow { for _ in 0 .. self.pending_prunings { let pruned = self.death_rows.pop_front().expect("pending_prunings is always < death_rows.len()"); trace!(target: "state-db", "Applying pruning {:?} ({} deleted)", pruned.hash, pruned.deleted.len()); - for k in pruned.deleted.iter() { - self.death_index.remove(&k); + if self.count_insertions { + for k in pruned.deleted.iter() { + self.death_index.remove(&k); + } } self.pending_number += 1; } @@ -192,8 +205,10 @@ impl RefWindow { // We don't bother to track and revert that for now. This means that a few nodes might end up no being // deleted in case transaction fails and `revert_pending` is called. self.death_rows.truncate(self.death_rows.len() - self.pending_canonicalizations); - let new_max_block = self.death_rows.len() as u64 + self.pending_number; - self.death_index.retain(|_, block| *block < new_max_block); + if self.count_insertions { + let new_max_block = self.death_rows.len() as u64 + self.pending_number; + self.death_index.retain(|_, block| *block < new_max_block); + } self.pending_canonicalizations = 0; self.pending_prunings = 0; } @@ -207,7 +222,7 @@ mod tests { use crate::test::{make_db, make_commit, TestDb}; fn check_journal(pruning: &RefWindow, db: &TestDb) { - let restored: RefWindow = RefWindow::new(db).unwrap(); + let restored: RefWindow = RefWindow::new(db, pruning.count_insertions).unwrap(); assert_eq!(pruning.pending_number, restored.pending_number); assert_eq!(pruning.death_rows, restored.death_rows); assert_eq!(pruning.death_index, restored.death_index); @@ -216,7 +231,7 @@ mod tests { #[test] fn created_from_empty_db() { let db = make_db(&[]); - let pruning: RefWindow = RefWindow::new(&db).unwrap(); + let pruning: RefWindow = RefWindow::new(&db, true).unwrap(); assert_eq!(pruning.pending_number, 0); assert!(pruning.death_rows.is_empty()); assert!(pruning.death_index.is_empty()); @@ -225,7 +240,7 @@ mod tests { #[test] fn prune_empty() { let db = make_db(&[]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = CommitSet::default(); pruning.prune_one(&mut commit); assert_eq!(pruning.pending_number, 0); @@ -238,7 +253,7 @@ mod tests { #[test] fn prune_one() { let mut db = make_db(&[1, 2, 3]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = make_commit(&[4, 5], &[1, 3]); let h = H256::random(); pruning.note_canonical(&h, &mut commit); @@ -267,7 +282,7 @@ mod tests { #[test] fn prune_two() { let mut db = make_db(&[1, 2, 3]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = make_commit(&[4], &[1]); pruning.note_canonical(&H256::random(), &mut commit); db.commit(&commit); @@ -295,7 +310,7 @@ mod tests { #[test] fn prune_two_pending() { let mut db = make_db(&[1, 2, 3]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = make_commit(&[4], &[1]); pruning.note_canonical(&H256::random(), &mut commit); db.commit(&commit); @@ -318,7 +333,7 @@ mod tests { #[test] fn reinserted_survives() { let mut db = make_db(&[1, 2, 3]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = make_commit(&[], &[2]); pruning.note_canonical(&H256::random(), &mut commit); db.commit(&commit); @@ -351,7 +366,7 @@ mod tests { #[test] fn reinserted_survive_pending() { let mut db = make_db(&[1, 2, 3]); - let mut pruning: RefWindow = RefWindow::new(&db).unwrap(); + let mut pruning: RefWindow = RefWindow::new(&db, true).unwrap(); let mut commit = make_commit(&[], &[2]); pruning.note_canonical(&H256::random(), &mut commit); db.commit(&commit); @@ -377,4 +392,30 @@ mod tests { pruning.apply_pending(); assert_eq!(pruning.pending_number, 3); } + + #[test] + fn reinserted_ignores() { + let mut db = make_db(&[1, 2, 3]); + let mut pruning: RefWindow = RefWindow::new(&db, false).unwrap(); + let mut commit = make_commit(&[], &[2]); + pruning.note_canonical(&H256::random(), &mut commit); + db.commit(&commit); + let mut commit = make_commit(&[2], &[]); + pruning.note_canonical(&H256::random(), &mut commit); + db.commit(&commit); + let mut commit = make_commit(&[], &[2]); + pruning.note_canonical(&H256::random(), &mut commit); + db.commit(&commit); + assert!(db.data_eq(&make_db(&[1, 2, 3]))); + pruning.apply_pending(); + + check_journal(&pruning, &db); + + let mut commit = CommitSet::default(); + pruning.prune_one(&mut commit); + db.commit(&commit); + assert!(db.data_eq(&make_db(&[1, 3]))); + assert!(pruning.death_index.is_empty()); + } + } diff --git a/primitives/state-machine/src/trie_backend.rs b/primitives/state-machine/src/trie_backend.rs index 81fa0202457..c757f05f5df 100644 --- a/primitives/state-machine/src/trie_backend.rs +++ b/primitives/state-machine/src/trie_backend.rs @@ -129,11 +129,8 @@ impl, H: Hasher> Backend for TrieBackend where } fn pairs(&self) -> Vec<(StorageKey, StorageValue)> { - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral::new(self.essence.backend_storage(), &mut read_overlay); - let collect_all = || -> Result<_, Box>> { - let trie = TrieDB::::new(&eph, self.essence.root())?; + let trie = TrieDB::::new(self.essence(), self.essence.root())?; let mut v = Vec::new(); for x in trie.iter()? { let (key, value) = x?; @@ -153,11 +150,8 @@ impl, H: Hasher> Backend for TrieBackend where } fn keys(&self, prefix: &[u8]) -> Vec { - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral::new(self.essence.backend_storage(), &mut read_overlay); - let collect_all = || -> Result<_, Box>> { - let trie = TrieDB::::new(&eph, self.essence.root())?; + let trie = TrieDB::::new(self.essence(), self.essence.root())?; let mut v = Vec::new(); for x in trie.iter()? { let (key, _) = x?; diff --git a/primitives/state-machine/src/trie_backend_essence.rs b/primitives/state-machine/src/trie_backend_essence.rs index 4622297ec07..8f1b8c7a580 100644 --- a/primitives/state-machine/src/trie_backend_essence.rs +++ b/primitives/state-machine/src/trie_backend_essence.rs @@ -20,7 +20,7 @@ use std::ops::Deref; use std::sync::Arc; use log::{debug, warn}; -use hash_db::{self, Hasher, EMPTY_PREFIX, Prefix}; +use hash_db::{self, Hasher, Prefix}; use sp_trie::{Trie, MemoryDB, PrefixedMemoryDB, DBValue, empty_child_trie_root, read_trie_value, read_child_trie_value, for_keys_in_child_trie, KeySpacedDB, TrieDBIterator}; @@ -39,6 +39,7 @@ pub trait Storage: Send + Sync { pub struct TrieBackendEssence, H: Hasher> { storage: S, root: H::Out, + empty: H::Out, } impl, H: Hasher> TrieBackendEssence where H::Out: Encode { @@ -47,6 +48,7 @@ impl, H: Hasher> TrieBackendEssence where H::Out: TrieBackendEssence { storage, root, + empty: H::hash(&[0u8]), } } @@ -116,18 +118,13 @@ impl, H: Hasher> TrieBackendEssence where H::Out: child_info: Option<&ChildInfo>, key: &[u8], ) -> Result, String> { - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral { - storage: &self.storage, - overlay: &mut read_overlay, - }; let dyn_eph: &dyn hash_db::HashDBRef<_, _>; let keyspace_eph; if let Some(child_info) = child_info.as_ref() { - keyspace_eph = KeySpacedDB::new(&eph, child_info.keyspace()); + keyspace_eph = KeySpacedDB::new(self, child_info.keyspace()); dyn_eph = &keyspace_eph; } else { - dyn_eph = &eph; + dyn_eph = self; } let trie = TrieDB::::new(dyn_eph, root) @@ -161,15 +158,9 @@ impl, H: Hasher> TrieBackendEssence where H::Out: /// Get the value of storage at given key. pub fn storage(&self, key: &[u8]) -> Result, String> { - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral { - storage: &self.storage, - overlay: &mut read_overlay, - }; - let map_e = |e| format!("Trie lookup error: {}", e); - read_trie_value::, _>(&eph, &self.root, key).map_err(map_e) + read_trie_value::, _>(self, &self.root, key).map_err(map_e) } /// Get the value of child storage at given key. @@ -181,15 +172,9 @@ impl, H: Hasher> TrieBackendEssence where H::Out: let root = self.child_root(child_info)? .unwrap_or(empty_child_trie_root::>().encode()); - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral { - storage: &self.storage, - overlay: &mut read_overlay, - }; - let map_e = |e| format!("Trie lookup error: {}", e); - read_child_trie_value::, _>(child_info.keyspace(), &eph, &root, key) + read_child_trie_value::, _>(child_info.keyspace(), self, &root, key) .map_err(map_e) } @@ -207,15 +192,9 @@ impl, H: Hasher> TrieBackendEssence where H::Out: } }; - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral { - storage: &self.storage, - overlay: &mut read_overlay, - }; - - if let Err(e) = for_keys_in_child_trie::, _, Ephemeral>( + if let Err(e) = for_keys_in_child_trie::, _, _>( child_info.keyspace(), - &eph, + self, &root, f, ) { @@ -254,12 +233,6 @@ impl, H: Hasher> TrieBackendEssence where H::Out: mut f: F, child_info: Option<&ChildInfo>, ) { - let mut read_overlay = S::Overlay::default(); - let eph = Ephemeral { - storage: &self.storage, - overlay: &mut read_overlay, - }; - let mut iter = move |db| -> Result<(), Box>> { let trie = TrieDB::::new(db, root)?; @@ -275,10 +248,10 @@ impl, H: Hasher> TrieBackendEssence where H::Out: }; let result = if let Some(child_info) = child_info { - let db = KeySpacedDB::new(&eph, child_info.keyspace()); + let db = KeySpacedDB::new(self, child_info.keyspace()); iter(&db) } else { - iter(&eph) + iter(self) }; if let Err(e) = result { debug!(target: "trie", "Error while iterating by prefix: {}", e); @@ -296,15 +269,6 @@ pub(crate) struct Ephemeral<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher> { overlay: &'a mut S::Overlay, } -impl<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher> hash_db::AsPlainDB - for Ephemeral<'a, S, H> -{ - fn as_plain_db<'b>(&'b self) -> &'b (dyn hash_db::PlainDB + 'b) { self } - fn as_plain_db_mut<'b>(&'b mut self) -> &'b mut (dyn hash_db::PlainDB + 'b) { - self - } -} - impl<'a, S: 'a + TrieBackendStorage, H: 'a + Hasher> hash_db::AsHashDB for Ephemeral<'a, S, H> { @@ -321,43 +285,6 @@ impl<'a, S: TrieBackendStorage, H: Hasher> Ephemeral<'a, S, H> { } } -impl<'a, S: 'a + TrieBackendStorage, H: Hasher> hash_db::PlainDB - for Ephemeral<'a, S, H> -{ - fn get(&self, key: &H::Out) -> Option { - if let Some(val) = hash_db::HashDB::get(self.overlay, key, EMPTY_PREFIX) { - Some(val) - } else { - match self.storage.get(&key, EMPTY_PREFIX) { - Ok(x) => x, - Err(e) => { - warn!(target: "trie", "Failed to read from DB: {}", e); - None - }, - } - } - } - - fn contains(&self, key: &H::Out) -> bool { - hash_db::HashDB::get(self, key, EMPTY_PREFIX).is_some() - } - - fn emplace(&mut self, key: H::Out, value: DBValue) { - hash_db::HashDB::emplace(self.overlay, key, EMPTY_PREFIX, value) - } - - fn remove(&mut self, key: &H::Out) { - hash_db::HashDB::remove(self.overlay, key, EMPTY_PREFIX) - } -} - -impl<'a, S: 'a + TrieBackendStorage, H: Hasher> hash_db::PlainDBRef - for Ephemeral<'a, S, H> -{ - fn get(&self, key: &H::Out) -> Option { hash_db::PlainDB::get(self, key) } - fn contains(&self, key: &H::Out) -> bool { hash_db::PlainDB::contains(self, key) } -} - impl<'a, S: 'a + TrieBackendStorage, H: Hasher> hash_db::HashDB for Ephemeral<'a, S, H> { @@ -438,6 +365,59 @@ impl TrieBackendStorage for MemoryDB { } } +impl, H: Hasher> hash_db::AsHashDB + for TrieBackendEssence +{ + fn as_hash_db<'b>(&'b self) -> &'b (dyn hash_db::HashDB + 'b) { self } + fn as_hash_db_mut<'b>(&'b mut self) -> &'b mut (dyn hash_db::HashDB + 'b) { self } +} + +impl, H: Hasher> hash_db::HashDB + for TrieBackendEssence +{ + fn get(&self, key: &H::Out, prefix: Prefix) -> Option { + if *key == self.empty { + return Some([0u8].to_vec()) + } + match self.storage.get(&key, prefix) { + Ok(x) => x, + Err(e) => { + warn!(target: "trie", "Failed to read from DB: {}", e); + None + }, + } + } + + fn contains(&self, key: &H::Out, prefix: Prefix) -> bool { + hash_db::HashDB::get(self, key, prefix).is_some() + } + + fn insert(&mut self, _prefix: Prefix, _value: &[u8]) -> H::Out { + unimplemented!(); + } + + fn emplace(&mut self, _key: H::Out, _prefix: Prefix, _value: DBValue) { + unimplemented!(); + } + + fn remove(&mut self, _key: &H::Out, _prefix: Prefix) { + unimplemented!(); + } +} + +impl, H: Hasher> hash_db::HashDBRef + for TrieBackendEssence +{ + fn get(&self, key: &H::Out, prefix: Prefix) -> Option { + hash_db::HashDB::get(self, key, prefix) + } + + fn contains(&self, key: &H::Out, prefix: Prefix) -> bool { + hash_db::HashDB::contains(self, key, prefix) + } +} + + #[cfg(test)] mod test { use sp_core::{Blake2Hasher, H256}; diff --git a/primitives/trie/src/lib.rs b/primitives/trie/src/lib.rs index 37fe9283363..f328b71750b 100644 --- a/primitives/trie/src/lib.rs +++ b/primitives/trie/src/lib.rs @@ -86,8 +86,6 @@ pub trait AsHashDB: hash_db::AsHashDB {} impl> AsHashDB for T {} /// Reexport from `hash_db`, with genericity set for `Hasher` trait. pub type HashDB<'a, H> = dyn hash_db::HashDB + 'a; -/// Reexport from `hash_db`, with genericity set for key only. -pub type PlainDB<'a, K> = dyn hash_db::PlainDB + 'a; /// Reexport from `hash_db`, with genericity set for `Hasher` trait. /// This uses a `KeyFunction` for prefixing keys internally (avoiding /// key conflict for non random keys). @@ -244,7 +242,6 @@ pub fn child_delta_trie_root( B: AsRef<[u8]>, RD: AsRef<[u8]>, DB: hash_db::HashDB - + hash_db::PlainDB, trie_db::DBValue>, { let mut root = TrieHash::::default(); // root is fetched from DB, not writable by runtime, so it's always valid. @@ -274,7 +271,6 @@ pub fn for_keys_in_child_trie( ) -> Result<(), Box>> where DB: hash_db::HashDBRef - + hash_db::PlainDBRef, trie_db::DBValue>, { let mut root = TrieHash::::default(); // root is fetched from DB, not writable by runtime, so it's always valid. @@ -324,7 +320,6 @@ pub fn read_child_trie_value( ) -> Result>, Box>> where DB: hash_db::HashDBRef - + hash_db::PlainDBRef, trie_db::DBValue>, { let mut root = TrieHash::::default(); // root is fetched from DB, not writable by runtime, so it's always valid. @@ -344,7 +339,6 @@ pub fn read_child_trie_value_with Result>, Box>> where DB: hash_db::HashDBRef - + hash_db::PlainDBRef, trie_db::DBValue>, { let mut root = TrieHash::::default(); // root is fetched from DB, not writable by runtime, so it's always valid. -- GitLab From 441beb2779ef0bc69c80753d58c4104c101ae628 Mon Sep 17 00:00:00 2001 From: Cecile Tonglet Date: Mon, 27 Apr 2020 17:05:11 +0200 Subject: [PATCH 068/167] Add method with_default_block_announcer to ServiceBuilder (#5797) * Initial commit Forked at: a516cf292ef3293949d741a331c568446ce71b57 Parent branch: origin/master * Add method with_default_block_announcer to ServiceBuilder --- client/service/src/builder.rs | 51 ++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 47768b98799..44567db5241 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -29,7 +29,10 @@ use sc_client_api::{ use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender}; use sc_client::{Client, ClientConfig}; use sc_chain_spec::get_extension; -use sp_consensus::import_queue::ImportQueue; +use sp_consensus::{ + block_validation::{BlockAnnounceValidator, DefaultBlockAnnounceValidator}, + import_queue::ImportQueue, +}; use futures::{ Future, FutureExt, StreamExt, future::ready, @@ -93,6 +96,7 @@ pub struct ServiceBuilder>>, marker: PhantomData<(TBl, TRtApi)>, background_tasks: Vec<(&'static str, BackgroundTask)>, + block_announce_validator_builder: Option) -> Box + Send>>>, } /// Full client type. @@ -261,6 +265,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { rpc_extensions: Default::default(), remote_backend: None, background_tasks: Default::default(), + block_announce_validator_builder: None, marker: PhantomData, }) } @@ -344,6 +349,7 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { rpc_extensions: Default::default(), remote_backend: Some(remote_blockchain), background_tasks: Default::default(), + block_announce_validator_builder: None, marker: PhantomData, }) } @@ -417,6 +423,7 @@ impl rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) } @@ -460,6 +467,7 @@ impl rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) } @@ -498,6 +506,7 @@ impl rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) } @@ -560,6 +569,7 @@ impl rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) } @@ -622,6 +632,7 @@ impl rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) } @@ -650,6 +661,36 @@ impl rpc_extensions, remote_backend: self.remote_backend, background_tasks: self.background_tasks, + block_announce_validator_builder: self.block_announce_validator_builder, + marker: self.marker, + }) + } + + /// Defines the `BlockAnnounceValidator` to use. `DefaultBlockAnnounceValidator` will be used by + /// default. + pub fn with_block_announce_validator( + self, + block_announce_validator_builder: + impl FnOnce(Arc) -> Box + Send> + 'static, + ) -> Result, Error> + where TSc: Clone, TFchr: Clone { + Ok(ServiceBuilder { + config: self.config, + client: self.client, + backend: self.backend, + task_manager: self.task_manager, + keystore: self.keystore, + fetcher: self.fetcher, + select_chain: self.select_chain, + import_queue: self.import_queue, + finality_proof_request_builder: self.finality_proof_request_builder, + finality_proof_provider: self.finality_proof_provider, + transaction_pool: self.transaction_pool, + rpc_extensions: self.rpc_extensions, + remote_backend: self.remote_backend, + background_tasks: self.background_tasks, + block_announce_validator_builder: Some(Box::new(block_announce_validator_builder)), marker: self.marker, }) } @@ -761,6 +802,7 @@ ServiceBuilder< rpc_extensions, remote_backend, background_tasks, + block_announce_validator_builder, } = self; sp_session::generate_initial_session_keys( @@ -809,8 +851,11 @@ ServiceBuilder< sc_network::config::ProtocolId::from(protocol_id_full) }; - let block_announce_validator = - Box::new(sp_consensus::block_validation::DefaultBlockAnnounceValidator::new(client.clone())); + let block_announce_validator = if let Some(f) = block_announce_validator_builder { + f(client.clone()) + } else { + Box::new(DefaultBlockAnnounceValidator::new(client.clone())) + }; let network_params = sc_network::config::Params { role: config.role.clone(), -- GitLab From 9a4edfc29d510068aaaa52ad0ba4372703e1363f Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Mon, 27 Apr 2020 19:06:59 +0300 Subject: [PATCH 069/167] Add append api and use it to deposit events (#5795) * use append api to deposit events * use optimized append * one more optimization * fix bug * fix issues * address review --- Cargo.lock | 1 + frame/system/src/lib.rs | 18 ++-- primitives/externalities/Cargo.toml | 1 + primitives/externalities/src/lib.rs | 11 +++ primitives/io/src/lib.rs | 5 ++ primitives/state-machine/src/basic.rs | 10 +++ primitives/state-machine/src/ext.rs | 83 ++++++++++++++++++- .../state-machine/src/overlayed_changes.rs | 7 ++ 8 files changed, 123 insertions(+), 13 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9cf78bfcfbc..e6c1b6e4b77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7463,6 +7463,7 @@ name = "sp-externalities" version = "0.8.0-dev" dependencies = [ "environmental", + "parity-scale-codec", "sp-std", "sp-storage", ] diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index da5681bf109..234e427d3a3 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -115,7 +115,8 @@ use sp_runtime::{ use sp_core::{ChangesTrieConfiguration, storage::well_known_keys}; use frame_support::{ - decl_module, decl_event, decl_storage, decl_error, storage, Parameter, ensure, debug, + decl_module, decl_event, decl_storage, decl_error, Parameter, ensure, debug, + storage::{self, generator::StorageValue}, traits::{ Contains, Get, ModuleToIndex, OnNewAccount, OnKilledAccount, IsDeadAccount, Happened, StoredMap, EnsureOrigin, @@ -854,17 +855,10 @@ impl Module { old_event_count }; - // Appending can only fail if `Events` can not be decoded or - // when we try to insert more than `u32::max_value()` events. - // - // We perform early return if we've reached the maximum capacity of the event list, - // so `Events` seems to be corrupted. Also, this has happened after the start of execution - // (since the event list is cleared at the block initialization). - if >::append([event].iter()).is_err() { - // The most sensible thing to do here is to just ignore this event and wait until the - // new block. - return; - } + // We use append api here to avoid bringing all events in the runtime when we push a + // new one in the list. + let encoded_event = event.encode(); + sp_io::storage::append(&Events::::storage_value_final_key()[..], encoded_event); for topic in topics { // The same applies here. diff --git a/primitives/externalities/Cargo.toml b/primitives/externalities/Cargo.toml index 81c9c5fb5cd..9d7cd1df6b7 100644 --- a/primitives/externalities/Cargo.toml +++ b/primitives/externalities/Cargo.toml @@ -16,3 +16,4 @@ targets = ["x86_64-unknown-linux-gnu"] sp-storage = { version = "2.0.0-dev", path = "../storage" } sp-std = { version = "2.0.0-dev", path = "../std" } environmental = { version = "1.1.1" } +codec = { package = "parity-scale-codec", version = "1.3.0" } diff --git a/primitives/externalities/src/lib.rs b/primitives/externalities/src/lib.rs index f00742b2e8e..2b584b512e4 100644 --- a/primitives/externalities/src/lib.rs +++ b/primitives/externalities/src/lib.rs @@ -41,6 +41,8 @@ pub enum Error { ExtensionsAreNotSupported, /// Extension `TypeId` is not registered. ExtensionIsNotRegistered(TypeId), + /// Failed to update storage, + StorageUpdateFailed(&'static str), } /// The Substrate externalities. @@ -176,6 +178,15 @@ pub trait Externalities: ExtensionStore { child_info: &ChildInfo, ) -> Vec; + /// Append storage item. + /// + /// This assumes specific format of the storage item. Also there is no way to undo this operation. + fn storage_append( + &mut self, + key: Vec, + value: Vec, + ); + /// Get the changes trie root of the current storage overlay at a block with given `parent`. /// /// `parent` expects a SCALE encoded hash. diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index c7da89ab720..e4787dade0e 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -117,6 +117,11 @@ pub trait Storage { Externalities::clear_prefix(*self, prefix) } + /// Append to storage item (assumes it is in "Vec" format). + fn append(&mut self, key: &[u8], value: Vec) { + self.storage_append(key.to_vec(), value); + } + /// "Commit" all existing operations and compute the resulting storage root. /// /// The hashing algorithm is defined by the `Block`. diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index 54554a08903..a5d573f5145 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -257,6 +257,16 @@ impl Externalities for BasicExternalities { } } + fn storage_append( + &mut self, + key: Vec, + value: Vec, + ) { + let previous = self.storage(&key).unwrap_or_default(); + let new = crate::ext::append_to_storage(previous, value).expect("Failed to append to storage"); + self.place_storage(key.clone(), Some(new)); + } + fn chain_id(&self) -> u64 { 42 } fn storage_root(&mut self) -> Vec { diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index c92b9e894a3..a92a10bf0e9 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -30,7 +30,7 @@ use sp_core::{ }; use sp_trie::{trie_types::Layout, empty_child_trie_root}; use sp_externalities::{Extensions, Extension}; -use codec::{Decode, Encode}; +use codec::{Compact, Decode, Encode}; use std::{error, fmt, any::{Any, TypeId}}; use log::{warn, trace}; @@ -415,6 +415,26 @@ where }); } + fn storage_append( + &mut self, + key: Vec, + value: Vec, + ) { + let _guard = sp_panic_handler::AbortGuard::force_abort(); + self.mark_dirty(); + + let current_value = self.overlay + .value_mut(&key) + .map(|v| v.take()) + .unwrap_or_else(|| self.backend.storage(&key).expect(EXT_NOT_ALLOWED_TO_FAIL)) + .unwrap_or_default(); + + self.overlay.set_storage( + key, + Some(append_to_storage(current_value, value).expect(EXT_NOT_ALLOWED_TO_FAIL)), + ); + } + fn chain_id(&self) -> u64 { 42 } @@ -551,6 +571,67 @@ where } } +fn extract_length_data(data: &[u8]) -> Result<(u32, usize, usize), &'static str> { + use codec::CompactLen; + + let len = u32::from( + Compact::::decode(&mut &data[..]) + .map_err(|_| "Incorrect updated item encoding")? + ); + let new_len = len + .checked_add(1) + .ok_or_else(|| "New vec length greater than `u32::max_value()`.")?; + + let encoded_len = Compact::::compact_len(&len); + let encoded_new_len = Compact::::compact_len(&new_len); + + Ok((new_len, encoded_len, encoded_new_len)) +} + +pub fn append_to_storage( + mut self_encoded: Vec, + value: Vec, +) -> Result, &'static str> { + // No data present, just encode the given input data. + if self_encoded.is_empty() { + Compact::from(1u32).encode_to(&mut self_encoded); + self_encoded.extend(value); + return Ok(self_encoded); + } + + let (new_len, encoded_len, encoded_new_len) = extract_length_data(&self_encoded)?; + + let replace_len = |dest: &mut Vec| { + Compact(new_len).using_encoded(|e| { + dest[..encoded_new_len].copy_from_slice(e); + }) + }; + + let append_new_elems = |dest: &mut Vec| dest.extend(&value[..]); + + // If old and new encoded len is equal, we don't need to copy the + // already encoded data. + if encoded_len == encoded_new_len { + replace_len(&mut self_encoded); + append_new_elems(&mut self_encoded); + + Ok(self_encoded) + } else { + let size = encoded_new_len + self_encoded.len() - encoded_len; + + let mut res = Vec::with_capacity(size + value.len()); + unsafe { res.set_len(size); } + + // Insert the new encoded len, copy the already encoded data and + // add the new element. + replace_len(&mut res); + res[encoded_new_len..size].copy_from_slice(&self_encoded[encoded_len..]); + append_new_elems(&mut res); + + Ok(res) + } +} + impl<'a, H, B, N> sp_externalities::ExtensionStore for Ext<'a, H, N, B> where H: Hasher, diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index cf7b582843e..f5b3c88ac81 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -223,6 +223,13 @@ impl OverlayedChanges { }) } + /// Returns mutable reference to either commited or propsective value. + pub fn value_mut(&mut self, key: &[u8]) -> Option<&mut Option> { + // not using map because of double borrow inside closure + if let Some(entry) = self.prospective.top.get_mut(key) { return Some(&mut entry.value) } + return self.committed.top.get_mut(key).map(|entry| &mut entry.value); + } + /// Returns a double-Option: None if the key is unknown (i.e. and the query should be referred /// to the backend); Some(None) if the key has been deleted. Some(Some(...)) for a key whose /// value has been set. -- GitLab From 05275e80676946d04e37f9622f10fefd58d9b1a3 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Mon, 27 Apr 2020 18:51:46 +0200 Subject: [PATCH 070/167] Enable Offchain Equalise (#5683) * Master.into() * Remove debug stuff * Better license * Migrate away from SimpleDispatchInfo * Fix test * Revert "Migrate away from SimpleDispatchInfo" This reverts commit dbdd27fa19948f16bd17defdc01d3dd32986df11. * Move to offchain randomness * Fix tests * Fix tests more --- Cargo.lock | 21 + Cargo.toml | 1 + bin/node/runtime/src/lib.rs | 4 +- frame/session/benchmarking/src/mock.rs | 1 + frame/staking/fuzz/.gitignore | 4 - frame/staking/fuzz/Cargo.toml | 38 -- .../fuzz/fuzz_targets/submit_solution.rs | 130 ------ frame/staking/fuzzer/.gitignore | 2 + frame/staking/{fuzz => fuzzer}/Cargo.lock | 435 +++++++++++------- frame/staking/fuzzer/Cargo.toml | 34 ++ .../{fuzz/fuzz_targets => fuzzer/src}/mock.rs | 32 +- frame/staking/fuzzer/src/submit_solution.rs | 152 ++++++ frame/staking/src/lib.rs | 6 +- frame/staking/src/mock.rs | 16 + frame/staking/src/offchain_election.rs | 42 +- frame/staking/src/testing_utils.rs | 23 +- frame/staking/src/tests.rs | 54 ++- primitives/core/Cargo.toml | 2 +- primitives/core/src/offchain/testing.rs | 7 +- primitives/phragmen/src/lib.rs | 2 +- 20 files changed, 634 insertions(+), 372 deletions(-) delete mode 100644 frame/staking/fuzz/.gitignore delete mode 100644 frame/staking/fuzz/Cargo.toml delete mode 100644 frame/staking/fuzz/fuzz_targets/submit_solution.rs create mode 100644 frame/staking/fuzzer/.gitignore rename frame/staking/{fuzz => fuzzer}/Cargo.lock (85%) create mode 100644 frame/staking/fuzzer/Cargo.toml rename frame/staking/{fuzz/fuzz_targets => fuzzer/src}/mock.rs (88%) create mode 100644 frame/staking/fuzzer/src/submit_solution.rs diff --git a/Cargo.lock b/Cargo.lock index e6c1b6e4b77..e068b00d7ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4547,6 +4547,27 @@ dependencies = [ "substrate-test-utils", ] +[[package]] +name = "pallet-staking-fuzz" +version = "0.0.0" +dependencies = [ + "frame-support", + "frame-system", + "honggfuzz", + "pallet-balances", + "pallet-indices", + "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", + "parity-scale-codec", + "sp-core", + "sp-io", + "sp-phragmen", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-staking-reward-curve" version = "2.0.0-dev" diff --git a/Cargo.toml b/Cargo.toml index abb0cca39c4..5c410befbbf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,6 +95,7 @@ members = [ "frame/society", "frame/staking", "frame/staking/reward-curve", + "frame/staking/fuzzer", "frame/sudo", "frame/support", "frame/support/procedural", diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 4ec0fa275b4..98507abf5d9 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -300,8 +300,9 @@ parameter_types! { pub const BondingDuration: pallet_staking::EraIndex = 24 * 28; pub const SlashDeferDuration: pallet_staking::EraIndex = 24 * 7; // 1/4 the bonding duration. pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; - pub const ElectionLookahead: BlockNumber = 25; // 10 minutes per session => 100 block. + pub const ElectionLookahead: BlockNumber = EPOCH_DURATION_IN_BLOCKS / 4; pub const MaxNominatorRewardedPerValidator: u32 = 64; + pub const MaxIterations: u32 = 5; } impl pallet_staking::Trait for Runtime { @@ -322,6 +323,7 @@ impl pallet_staking::Trait for Runtime { type NextNewSession = Session; type ElectionLookahead = ElectionLookahead; type Call = Call; + type MaxIterations = MaxIterations; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = StakingUnsignedPriority; } diff --git a/frame/session/benchmarking/src/mock.rs b/frame/session/benchmarking/src/mock.rs index f0d0a095aea..d488fe4eac2 100644 --- a/frame/session/benchmarking/src/mock.rs +++ b/frame/session/benchmarking/src/mock.rs @@ -180,6 +180,7 @@ impl pallet_staking::Trait for Test { type Call = Call; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = UnsignedPriority; + type MaxIterations = (); } impl crate::Trait for Test {} diff --git a/frame/staking/fuzz/.gitignore b/frame/staking/fuzz/.gitignore deleted file mode 100644 index 572e03bdf32..00000000000 --- a/frame/staking/fuzz/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ - -target -corpus -artifacts diff --git a/frame/staking/fuzz/Cargo.toml b/frame/staking/fuzz/Cargo.toml deleted file mode 100644 index a78fbf17dc8..00000000000 --- a/frame/staking/fuzz/Cargo.toml +++ /dev/null @@ -1,38 +0,0 @@ -[package] -name = "pallet-staking-fuzz" -version = "0.0.0" -authors = ["Automatically generated"] -publish = false -edition = "2018" - -[package.metadata] -cargo-fuzz = true - -[dependencies] -libfuzzer-sys = "0.3" -codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -pallet-staking = { version = "2.0.0-alpha.2", path = "..", features = ["testing-utils"] } -pallet-staking-reward-curve = { version = "2.0.0-alpha.2", path = "../reward-curve" } -pallet-session = { version = "2.0.0-alpha.2", path = "../../session" } -pallet-indices = { version = "2.0.0-alpha.2", path = "../../indices" } -pallet-balances = { version = "2.0.0-alpha.2", path = "../../balances" } -pallet-timestamp = { version = "2.0.0-alpha.2", path = "../../timestamp" } -frame-system = { version = "2.0.0-alpha.2", path = "../../system" } -frame-support = { version = "2.0.0-alpha.2", path = "../../support" } -sp-std = { version = "2.0.0-alpha.2", path = "../../../primitives/std" } -sp-io ={ version = "2.0.0-alpha.2", path = "../../../primitives/io" } -sp-core = { version = "2.0.0-alpha.2", path = "../../../primitives/core" } -sp-phragmen = { version = "2.0.0-alpha.2", path = "../../../primitives/phragmen" } -sp-runtime = { version = "2.0.0-alpha.2", path = "../../../primitives/runtime" } -rand = "0.7.3" - -# Prevent this from interfering with workspaces -[workspace] -members = ["."] - -[[bin]] -name = "submit_solution" -path = "fuzz_targets/submit_solution.rs" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/frame/staking/fuzz/fuzz_targets/submit_solution.rs b/frame/staking/fuzz/fuzz_targets/submit_solution.rs deleted file mode 100644 index 5d1fcf1d7ea..00000000000 --- a/frame/staking/fuzz/fuzz_targets/submit_solution.rs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Fuzzing for staking pallet. - -#![no_main] -use libfuzzer_sys::fuzz_target; -use mock::Test; -use pallet_staking::testing_utils::{ - self, USER, get_seq_phragmen_solution, get_weak_solution, setup_chain_stakers, - set_validator_count, signed_account, -}; -use frame_support::assert_ok; -use sp_runtime::{traits::Dispatchable, DispatchError}; - -mod mock; - -#[repr(u32)] -#[allow(dead_code)] -#[derive(Debug, Clone, Copy)] -enum Mode { - /// Initial submission. This will be rather cheap. - InitialSubmission, - /// A better submission that will replace the previous ones. This is the most expensive. - StrongerSubmission, - /// A weak submission that will be rejected. This will be rather cheap. - WeakerSubmission, -} - -pub fn new_test_ext() -> Result { - frame_system::GenesisConfig::default().build_storage::().map(Into::into) -} - -fuzz_target!(|do_reduce: bool| { - let ext = new_test_ext(); - let mode: Mode = unsafe { std::mem::transmute(testing_utils::random(0, 2)) }; - let num_validators = testing_utils::random(50, 500); - let num_nominators = testing_utils::random(200, 2000); - let edge_per_voter = testing_utils::random(1, 16); - let to_elect = testing_utils::random(10, num_validators); - - println!("+++ instance with params {} / {} / {} / {:?} / {}", - num_nominators, - num_validators, - edge_per_voter, - mode, - to_elect, - ); - - ext.unwrap_or_default().execute_with(|| { - // initial setup - set_validator_count::(to_elect); - setup_chain_stakers::( - num_validators, - num_nominators, - edge_per_voter, - ); - - println!("++ Chain setup done."); - - // stuff to submit - let (winners, compact, score) = match mode { - Mode::InitialSubmission => { - /* No need to setup anything */ - get_seq_phragmen_solution::(do_reduce) - }, - Mode::StrongerSubmission => { - let (winners, compact, score) = get_weak_solution::(false); - assert_ok!( - >::submit_election_solution( - signed_account::(USER), - winners, - compact, - score, - ) - ); - get_seq_phragmen_solution::(do_reduce) - }, - Mode::WeakerSubmission => { - let (winners, compact, score) = get_seq_phragmen_solution::(do_reduce); - assert_ok!( - >::submit_election_solution( - signed_account::(USER), - winners, - compact, - score, - ) - ); - get_weak_solution::(false) - } - }; - - println!("++ Submission ready."); - - // must have chosen correct number of winners. - assert_eq!(winners.len() as u32, >::validator_count()); - - // final call and origin - let call = pallet_staking::Call::::submit_election_solution( - winners, - compact, - score, - ); - let caller = signed_account::(USER); - - // actually submit - match mode { - Mode::WeakerSubmission => { - assert_eq!( - call.dispatch(caller.into()).unwrap_err(), - DispatchError::Module { index: 0, error: 11, message: Some("PhragmenWeakSubmission") }, - ); - }, - _ => assert_ok!(call.dispatch(caller.into())), - }; - }) -}); diff --git a/frame/staking/fuzzer/.gitignore b/frame/staking/fuzzer/.gitignore new file mode 100644 index 00000000000..3ebcb104d4a --- /dev/null +++ b/frame/staking/fuzzer/.gitignore @@ -0,0 +1,2 @@ +hfuzz_target +hfuzz_workspace diff --git a/frame/staking/fuzz/Cargo.lock b/frame/staking/fuzzer/Cargo.lock similarity index 85% rename from frame/staking/fuzz/Cargo.lock rename to frame/staking/fuzzer/Cargo.lock index f6e8cfa08d6..a45f33fdce2 100644 --- a/frame/staking/fuzz/Cargo.lock +++ b/frame/staking/fuzzer/Cargo.lock @@ -28,11 +28,31 @@ dependencies = [ "memchr", ] +[[package]] +name = "alga" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" +dependencies = [ + "approx", + "num-complex", + "num-traits", +] + +[[package]] +name = "approx" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16971f2f0ce65c5cf2a1546cc6a0af102ecb11e265ddaa9433fb3e5bfdf676a4" +checksum = "75153c95fdedd7db9732dfbfc3702324a1627eec91ba56e37cd0ac78314ab2ed" [[package]] name = "arrayref" @@ -69,9 +89,9 @@ checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" -version = "0.3.45" +version = "0.3.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad235dabf00f36301792cfe82499880ba54c6486be094d1047b02bacb67c14e8" +checksum = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" dependencies = [ "backtrace-sys", "cfg-if", @@ -81,9 +101,9 @@ dependencies = [ [[package]] name = "backtrace-sys" -version = "0.1.33" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17b52e737c40a7d75abca20b29a19a0eb7ba9fc72c5a72dd282a0a3c2c0dc35" +checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" dependencies = [ "cc", "libc", @@ -109,9 +129,13 @@ checksum = "5da9b3d9f6f585199287a473f4f8dfab6566cf827d15c00c219f53c645687ead" [[package]] name = "bitvec" -version = "0.15.2" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993f74b4c99c1908d156b8d2e0fb6277736b0ecbd833982fd1241d39b2766a6" +checksum = "41262f11d771fd4a61aa3ce019fca363b4b6c282fca9da2a31186d3965a47a5c" +dependencies = [ + "either", + "radium", +] [[package]] name = "blake2-rfc" @@ -146,9 +170,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.2.0" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742" +checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" [[package]] name = "byte-slice-cast" @@ -168,15 +192,6 @@ version = "1.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" -[[package]] -name = "c2-chacha" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb" -dependencies = [ - "ppv-lite86", -] - [[package]] name = "cc" version = "1.0.50" @@ -249,19 +264,6 @@ dependencies = [ "subtle 1.0.0", ] -[[package]] -name = "curve25519-dalek" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7dcd30ba50cdf88b55b033456138b7c0ac4afdc436d82e1b79f370f24cc66d" -dependencies = [ - "byteorder", - "clear_on_drop", - "digest", - "rand_core 0.3.1", - "subtle 2.2.2", -] - [[package]] name = "curve25519-dalek" version = "2.0.0" @@ -272,14 +274,14 @@ dependencies = [ "digest", "rand_core 0.5.1", "subtle 2.2.2", - "zeroize 1.1.0", + "zeroize", ] [[package]] name = "derive_more" -version = "0.99.3" +version = "0.99.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a806e96c59a76a5ba6e18735b6cf833344671e61e7863f2edb5c518ea2cac95c" +checksum = "e2323f3f47db9a0e77ce7a300605d8d2098597fc451ed1a97bb1f6411bb550a7" dependencies = [ "proc-macro2", "quote", @@ -302,11 +304,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978710b352437433c97b2bff193f2fb1dfd58a093f863dd95e225a19baa599a2" dependencies = [ "clear_on_drop", - "curve25519-dalek 2.0.0", + "curve25519-dalek", "rand 0.7.3", "sha2", ] +[[package]] +name = "either" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" + [[package]] name = "environmental" version = "1.1.1" @@ -343,12 +351,11 @@ checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" [[package]] name = "fixed-hash" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3367952ceb191f4ab95dd5685dc163ac539e36202f9fcfd0cb22f9f9c542fefc" +checksum = "32529fc42e86ec06e5047092082aab9ad459b070c5d2a76b14f4f5ce70bf2e84" dependencies = [ "byteorder", - "libc", "rand 0.7.3", "rustc-hex", "static_assertions", @@ -356,10 +363,11 @@ dependencies = [ [[package]] name = "frame-benchmarking" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "frame-system", + "linregress", "parity-scale-codec", "sp-api", "sp-io", @@ -370,7 +378,7 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "11.0.0-alpha.3" +version = "11.0.0-alpha.5" dependencies = [ "parity-scale-codec", "serde", @@ -380,7 +388,7 @@ dependencies = [ [[package]] name = "frame-support" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "bitmask", "frame-metadata", @@ -403,7 +411,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support-procedural-tools", "proc-macro2", @@ -413,7 +421,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -424,7 +432,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "proc-macro2", "quote", @@ -433,7 +441,7 @@ dependencies = [ [[package]] name = "frame-system" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "impl-trait-for-tuples", @@ -492,6 +500,7 @@ dependencies = [ "futures-core", "futures-task", "futures-util", + "num_cpus", ] [[package]] @@ -597,6 +606,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "hermit-abi" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" +dependencies = [ + "libc", +] + [[package]] name = "hex" version = "0.4.2" @@ -670,9 +688,9 @@ checksum = "f65877bf7d44897a473350b1046277941cee20b263397e90869c50b6e766088b" [[package]] name = "js-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5" +checksum = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055" dependencies = [ "wasm-bindgen", ] @@ -691,20 +709,26 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.67" +version = "0.2.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018" +checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" [[package]] name = "libfuzzer-sys" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb789afcc589a08928d1e466087445ab740a0f70a2ee23d9349a0e3723d65e1b" +checksum = "8d718794b8e23533b9069bd2c4597d69e41cc7ab1c02700a502971aca0cdcf24" dependencies = [ "arbitrary", "cc", ] +[[package]] +name = "libm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" + [[package]] name = "libsecp256k1" version = "0.3.5" @@ -721,6 +745,17 @@ dependencies = [ "typenum", ] +[[package]] +name = "linregress" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9290cf6f928576eeb9c096c6fad9d8d452a0a1a70a2bbffa6e36064eedc0aac9" +dependencies = [ + "failure", + "nalgebra", + "statrs", +] + [[package]] name = "lock_api" version = "0.3.3" @@ -739,6 +774,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "matrixmultiply" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4f7ec66360130972f34830bfad9ef05c6610a43938a467bcc9ab9369ab3478f" +dependencies = [ + "rawpointer", +] + [[package]] name = "maybe-uninit" version = "2.0.0" @@ -753,9 +797,9 @@ checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" [[package]] name = "memory-db" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "198831fe8722331a395bc199a5d08efbc197497ef354cb4c77b969c02ffc0fc4" +checksum = "f58381b20ebe2c578e75dececd9da411414903415349548ccc46aac3209cdfbc" dependencies = [ "ahash", "hash-db", @@ -771,14 +815,31 @@ checksum = "71d96e3f3c0b6325d8ccd83c33b28acb183edcb6c67938ba104ec546854b0882" [[package]] name = "merlin" -version = "1.3.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0942b357c1b4d0dc43ba724674ec89c3218e6ca2b3e8269e7cb53bcecd2f6e" +checksum = "c6feca46f4fa3443a01769d768727f10c10a20fdb65e52dc16a81f0c8269bb78" dependencies = [ "byteorder", "keccak", - "rand_core 0.4.2", - "zeroize 1.1.0", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "nalgebra" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaa9fddbc34c8c35dd2108515587b8ce0cab396f17977b8c738568e4edb521a2" +dependencies = [ + "alga", + "approx", + "generic-array", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "rand 0.6.5", + "typenum", ] [[package]] @@ -798,6 +859,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-complex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" +dependencies = [ + "autocfg 1.0.0", + "num-traits", +] + [[package]] name = "num-integer" version = "0.1.42" @@ -810,9 +881,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4dc79f9e6c81bef96148c8f6b8e72ad4541caa4a24373e900a36da07de03a3" +checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef" dependencies = [ "autocfg 1.0.0", "num-bigint", @@ -827,6 +898,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" dependencies = [ "autocfg 1.0.0", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" +dependencies = [ + "hermit-abi", + "libc", ] [[package]] @@ -846,7 +928,7 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "pallet-authorship" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "frame-system", @@ -862,7 +944,7 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-benchmarking", "frame-support", @@ -876,7 +958,7 @@ dependencies = [ [[package]] name = "pallet-indices" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "frame-system", @@ -891,7 +973,7 @@ dependencies = [ [[package]] name = "pallet-session" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "frame-system", @@ -908,7 +990,7 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-support", "frame-system", @@ -952,7 +1034,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -962,7 +1044,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "frame-benchmarking", "frame-support", @@ -980,7 +1062,7 @@ dependencies = [ name = "parity-scale-codec" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f509c5e67ca0605ee17dcd3f91ef41cadd685c75a298fb6261b781a5acb3f910" +checksum = "329c8f7f4244ddb5c37c103641027a76c530e65e8e4b8240b29f81ea40508b17" dependencies = [ "arrayvec 0.5.1", "bitvec", @@ -991,7 +1073,7 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "1.3.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a0ec292e92e8ec7c58e576adacc1e3f399c597c8f263c42f18420abe58e7245" dependencies = [ @@ -1003,9 +1085,9 @@ dependencies = [ [[package]] name = "parity-util-mem" -version = "0.5.1" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1476e40bf8f5c6776e9600983435821ca86eb9819d74a6207cca69d091406a" +checksum = "6e42755f26e5ea21a6a819d9e63cbd70713e9867a2b767ec2cc65ca7659532c5" dependencies = [ "cfg-if", "impl-trait-for-tuples", @@ -1078,15 +1160,15 @@ dependencies = [ "cloudabi", "libc", "redox_syscall", - "smallvec 1.3.0", + "smallvec 1.2.0", "winapi", ] [[package]] name = "paste" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e1afe738d71b1ebab5f1207c055054015427dbfc7bbe9ee1266894156ec046" +checksum = "092d791bf7847f70bbd49085489fba25fc2c193571752bff9e36e74e72403932" dependencies = [ "paste-impl", "proc-macro-hack", @@ -1094,9 +1176,9 @@ dependencies = [ [[package]] name = "paste-impl" -version = "0.1.7" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d4dc4a7f6f743211c5aab239640a65091535d97d43d92a52bca435a640892bb" +checksum = "406c23fb4c45cc6f68a9bbabb8ec7bd6f8cfcbd17e9e8f72c2460282f8325729" dependencies = [ "proc-macro-hack", "proc-macro2", @@ -1128,9 +1210,9 @@ checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" [[package]] name = "primitive-types" -version = "0.6.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4336f4f5d5524fa60bcbd6fe626f9223d8142a50e7053e979acdf0da41ab975" +checksum = "e5e4b9943a2da369aec5e96f7c10ebc74fcf434d39590d974b0a3460e6f67fbb" dependencies = [ "fixed-hash", "impl-codec", @@ -1149,26 +1231,21 @@ dependencies = [ [[package]] name = "proc-macro-hack" -version = "0.5.11" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "fcfdefadc3d57ca21cf17990a28ef4c0f7c61383a28cb7604cf4a18e6ede1420" [[package]] name = "proc-macro-nested" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e" +checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" [[package]] name = "proc-macro2" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c09721c6781493a2a492a96b5a5bf19b65917fe6728884e7c44dd0c60ca3435" +checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" dependencies = [ "unicode-xid", ] @@ -1182,6 +1259,25 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac" + +[[package]] +name = "rand" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c618c47cd3ebd209790115ab837de41425723956ad3ce2e6a7f09890947cacb9" +dependencies = [ + "cloudabi", + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "winapi", +] + [[package]] name = "rand" version = "0.6.5" @@ -1209,7 +1305,7 @@ checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ "getrandom", "libc", - "rand_chacha 0.2.1", + "rand_chacha 0.2.2", "rand_core 0.5.1", "rand_hc 0.2.0", ] @@ -1226,11 +1322,11 @@ dependencies = [ [[package]] name = "rand_chacha" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" dependencies = [ - "c2-chacha", + "ppv-lite86", "rand_core 0.5.1", ] @@ -1329,6 +1425,12 @@ dependencies = [ "rand_core 0.3.1", ] +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "rdrand" version = "0.4.0" @@ -1346,9 +1448,9 @@ checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" [[package]] name = "regex" -version = "1.3.4" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8" +checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" dependencies = [ "aho-corasick", "memchr", @@ -1358,9 +1460,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.16" +version = "0.6.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1132f845907680735a84409c3bebc64d1364a5683ffbce899550cd09d5eaefc1" +checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" [[package]] name = "rustc-demangle" @@ -1391,19 +1493,20 @@ dependencies = [ [[package]] name = "schnorrkel" -version = "0.8.5" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacd8381b3c37840c9c9f40472af529e49975bdcbc24f83c31059fd6539023d3" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" dependencies = [ - "curve25519-dalek 1.2.3", - "failure", + "arrayref", + "arrayvec 0.5.1", + "curve25519-dalek", + "getrandom", "merlin", - "rand 0.6.5", - "rand_core 0.4.2", - "rand_os", + "rand 0.7.3", + "rand_core 0.5.1", "sha2", "subtle 2.2.2", - "zeroize 0.9.3", + "zeroize", ] [[package]] @@ -1435,18 +1538,18 @@ checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" [[package]] name = "serde" -version = "1.0.104" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +checksum = "e707fbbf255b8fc8c3b99abb91e7257a622caeb20a9818cbadbeeede4e0932ff" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.104" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" +checksum = "ac5d00fc561ba2724df6758a17de23df5914f20e41cb00f94d5b7ae42fffaff8" dependencies = [ "proc-macro2", "quote", @@ -1482,13 +1585,13 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.3.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c2fb2ec9bcd216a5b0d0ccf31ab17b5ed1d627960edff65bbe95d3ce221cefc" [[package]] name = "sp-api" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "hash-db", "parity-scale-codec", @@ -1502,7 +1605,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -1513,7 +1616,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "parity-scale-codec", "serde", @@ -1524,7 +1627,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "integer-sqrt", "num-traits", @@ -1536,7 +1639,7 @@ dependencies = [ [[package]] name = "sp-authorship" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -1546,12 +1649,13 @@ dependencies = [ [[package]] name = "sp-core" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "base58", "blake2-rfc", "byteorder", "ed25519-dalek", + "futures", "hash-db", "hash256-std-hasher", "hex", @@ -1566,7 +1670,6 @@ dependencies = [ "primitive-types", "rand 0.7.3", "regex", - "rustc-hex", "schnorrkel", "serde", "sha2", @@ -1580,12 +1683,12 @@ dependencies = [ "tiny-keccak", "twox-hash", "wasmi", - "zeroize 1.1.0", + "zeroize", ] [[package]] name = "sp-debug-derive" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "proc-macro2", "quote", @@ -1594,7 +1697,7 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.8.0-alpha.3" +version = "0.8.0-alpha.5" dependencies = [ "environmental", "sp-std", @@ -1603,7 +1706,7 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "derive_more", "parity-scale-codec", @@ -1614,7 +1717,7 @@ dependencies = [ [[package]] name = "sp-io" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "hash-db", "libsecp256k1", @@ -1631,7 +1734,7 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "lazy_static", "sp-core", @@ -1641,7 +1744,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "backtrace", "log", @@ -1649,11 +1752,10 @@ dependencies = [ [[package]] name = "sp-phragmen" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "parity-scale-codec", "serde", - "sp-core", "sp-phragmen-compact", "sp-runtime", "sp-std", @@ -1671,7 +1773,7 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "hash256-std-hasher", "impl-trait-for-tuples", @@ -1691,7 +1793,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "parity-scale-codec", "primitive-types", @@ -1704,7 +1806,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "Inflector", "proc-macro-crate", @@ -1715,7 +1817,7 @@ dependencies = [ [[package]] name = "sp-staking" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -1724,7 +1826,7 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.8.0-alpha.3" +version = "0.8.0-alpha.5" dependencies = [ "hash-db", "log", @@ -1742,11 +1844,11 @@ dependencies = [ [[package]] name = "sp-std" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" [[package]] name = "sp-storage" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "impl-serde 0.2.3", "serde", @@ -1756,7 +1858,7 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -1769,7 +1871,7 @@ dependencies = [ [[package]] name = "sp-trie" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "hash-db", "memory-db", @@ -1782,7 +1884,7 @@ dependencies = [ [[package]] name = "sp-version" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "impl-serde 0.2.3", "parity-scale-codec", @@ -1793,7 +1895,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "2.0.0-alpha.3" +version = "2.0.0-alpha.5" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -1807,6 +1909,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "statrs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10102ac8d55e35db2b3fafc26f81ba8647da2e15879ab686a67e6d19af2685e8" +dependencies = [ + "rand 0.5.6", +] + [[package]] name = "strum" version = "0.16.0" @@ -1830,9 +1941,9 @@ dependencies = [ [[package]] name = "substrate-bip39" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be511be555a3633e71739a79e4ddff6a6aaa6579fa6114182a51d72c3eb93c5" +checksum = "c004e8166d6e0aa3a9d5fa673e5b7098ff25f930de1013a21341988151e681bb" dependencies = [ "hmac", "pbkdf2", @@ -1854,9 +1965,9 @@ checksum = "7c65d530b10ccaeac294f349038a597e435b18fb456aadd0840a623f83b9e941" [[package]] name = "syn" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "123bd9499cfb380418d509322d7a6d52e5315f064fe4b3ad18a53d6b92c07859" +checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" dependencies = [ "proc-macro2", "quote", @@ -1886,9 +1997,9 @@ dependencies = [ [[package]] name = "tiny-bip39" -version = "0.7.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6848cd8f566953ce1e8faeba12ee23cbdbb0437754792cd857d44628b5685e3" +checksum = "b0165e045cc2ae1660270ca65e1676dbaab60feb0f91b10f7d0665e9b47e31f2" dependencies = [ "failure", "hmac", @@ -1958,7 +2069,7 @@ dependencies = [ "hashbrown", "log", "rustc-hex", - "smallvec 1.3.0", + "smallvec 1.2.0", ] [[package]] @@ -2003,7 +2114,7 @@ version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" dependencies = [ - "smallvec 1.3.0", + "smallvec 1.2.0", ] [[package]] @@ -2026,9 +2137,9 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d" +checksum = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2036,9 +2147,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8" +checksum = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" dependencies = [ "bumpalo", "lazy_static", @@ -2051,9 +2162,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457414a91863c0ec00090dba537f88ab955d93ca6555862c29b6d860990b8a8a" +checksum = "7add542ea1ac7fdaa9dc25e031a6af33b7d63376292bd24140c637d00d1c312a" dependencies = [ "cfg-if", "js-sys", @@ -2063,9 +2174,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205" +checksum = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2073,9 +2184,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d" +checksum = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" dependencies = [ "proc-macro2", "quote", @@ -2086,9 +2197,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.59" +version = "0.2.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8" +checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" [[package]] name = "wasm-timer" @@ -2131,9 +2242,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" +checksum = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb" dependencies = [ "js-sys", "wasm-bindgen", @@ -2161,12 +2272,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "zeroize" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45af6a010d13e4cf5b54c94ba5a2b2eba5596b9e46bf5875612d332a1f2b3f86" - [[package]] name = "zeroize" version = "1.1.0" diff --git a/frame/staking/fuzzer/Cargo.toml b/frame/staking/fuzzer/Cargo.toml new file mode 100644 index 00000000000..34e956a3672 --- /dev/null +++ b/frame/staking/fuzzer/Cargo.toml @@ -0,0 +1,34 @@ +[package] +name = "pallet-staking-fuzz" +version = "0.0.0" +authors = ["Automatically generated"] +publish = false +edition = "2018" +license = "GPL-3.0" +homepage = "https://substrate.dev" +repository = "https://github.com/paritytech/substrate/" +description = "FRAME pallet staking fuzzing" + +[dependencies] +honggfuzz = "0.5" +codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } +pallet-staking = { version = "2.0.0-alpha.5", path = "..", features = ["testing-utils"] } +pallet-staking-reward-curve = { version = "2.0.0-alpha.5", path = "../reward-curve" } +pallet-session = { version = "2.0.0-alpha.5", path = "../../session" } +pallet-indices = { version = "2.0.0-alpha.5", path = "../../indices" } +pallet-balances = { version = "2.0.0-alpha.5", path = "../../balances" } +pallet-timestamp = { version = "2.0.0-alpha.5", path = "../../timestamp" } +frame-system = { version = "2.0.0-alpha.5", path = "../../system" } +frame-support = { version = "2.0.0-alpha.5", path = "../../support" } +sp-std = { version = "2.0.0-alpha.5", path = "../../../primitives/std" } +sp-io ={ version = "2.0.0-alpha.5", path = "../../../primitives/io" } +sp-core = { version = "2.0.0-alpha.5", path = "../../../primitives/core" } +sp-phragmen = { version = "2.0.0-alpha.5", path = "../../../primitives/phragmen" } +sp-runtime = { version = "2.0.0-alpha.5", path = "../../../primitives/runtime" } + +[[bin]] +name = "submit_solution" +path = "src/submit_solution.rs" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/frame/staking/fuzz/fuzz_targets/mock.rs b/frame/staking/fuzzer/src/mock.rs similarity index 88% rename from frame/staking/fuzz/fuzz_targets/mock.rs rename to frame/staking/fuzzer/src/mock.rs index 4bb3437f923..1819970e606 100644 --- a/frame/staking/fuzz/fuzz_targets/mock.rs +++ b/frame/staking/fuzzer/src/mock.rs @@ -24,11 +24,11 @@ type AccountIndex = u32; type BlockNumber = u64; type Balance = u64; -type System = frame_system::Module; -type Balances = pallet_balances::Module; -type Staking = pallet_staking::Module; -type Indices = pallet_indices::Module; -type Session = pallet_session::Module; +pub type System = frame_system::Module; +pub type Balances = pallet_balances::Module; +pub type Staking = pallet_staking::Module; +pub type Indices = pallet_indices::Module; +pub type Session = pallet_session::Module; impl_outer_origin! { pub enum Origin for Test where system = frame_system {} @@ -57,6 +57,9 @@ pub struct Test; impl frame_system::Trait for Test { type Origin = Origin; + type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); type Index = AccountIndex; type BlockNumber = BlockNumber; type Call = Call; @@ -150,18 +153,21 @@ pallet_staking_reward_curve::build! { parameter_types! { pub const RewardCurve: &'static sp_runtime::curve::PiecewiseLinear<'static> = &I_NPOS; pub const MaxNominatorRewardedPerValidator: u32 = 64; + pub const MaxIterations: u32 = 20; } pub type Extrinsic = sp_runtime::testing::TestXt; -type SubmitTransaction = frame_system::offchain::TransactionSubmitter< - sp_runtime::testing::UintAuthorityId, - Test, - Extrinsic, ->; + +impl frame_system::offchain::SendTransactionTypes for Test where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = Extrinsic; +} impl pallet_staking::Trait for Test { type Currency = Balances; - type Time = pallet_timestamp::Module; + type UnixTime = pallet_timestamp::Module; type CurrencyToVote = CurrencyToVoteHandler; type RewardRemainder = (); type Event = (); @@ -176,7 +182,7 @@ impl pallet_staking::Trait for Test { type NextNewSession = Session; type ElectionLookahead = (); type Call = Call; - type SubmitTransaction = SubmitTransaction; - type KeyType = sp_runtime::testing::UintAuthorityId; + type MaxIterations = MaxIterations; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; + type UnsignedPriority = (); } diff --git a/frame/staking/fuzzer/src/submit_solution.rs b/frame/staking/fuzzer/src/submit_solution.rs new file mode 100644 index 00000000000..90d8fc56efc --- /dev/null +++ b/frame/staking/fuzzer/src/submit_solution.rs @@ -0,0 +1,152 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Fuzzing for staking pallet. + +use honggfuzz::fuzz; + +use mock::Test; +use pallet_staking::testing_utils::{ + USER, get_seq_phragmen_solution, get_weak_solution, setup_chain_stakers, + set_validator_count, signed_account, +}; +use frame_support::assert_ok; +use sp_runtime::{traits::Dispatchable, DispatchError}; + +mod mock; + +#[repr(u32)] +#[allow(dead_code)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Mode { + /// Initial submission. This will be rather cheap. + InitialSubmission, + /// A better submission that will replace the previous ones. This is the most expensive. + StrongerSubmission, + /// A weak submission that will be rejected. This will be rather cheap. + WeakerSubmission, +} + +pub fn new_test_ext() -> Result { + frame_system::GenesisConfig::default().build_storage::().map(Into::into) +} + +fn main() { + let to_range = |x: u32, a: u32, b: u32| { + let collapsed = x % b; + if collapsed >= a { + collapsed + } else { + collapsed + a + } + }; + loop { + fuzz!(|data: (u32, u32, u32, u32, u32)| { + let (mut num_validators, mut num_nominators, mut edge_per_voter, mut to_elect, mode_u32) = data; + let ext = new_test_ext(); + let mode: Mode = unsafe { std::mem::transmute(mode_u32) }; + num_validators = to_range(num_validators, 50, 1000); + num_nominators = to_range(num_nominators, 50, 2000); + edge_per_voter = to_range(edge_per_voter, 1, 16); + to_elect = to_range(to_elect, 20, num_validators); + let do_reduce = true; + + println!("+++ instance with params {} / {} / {} / {:?}({}) / {}", + num_nominators, + num_validators, + edge_per_voter, + mode, + mode_u32, + to_elect, + ); + + ext.unwrap_or_default().execute_with(|| { + // initial setup + set_validator_count::(to_elect); + pallet_staking::testing_utils::init_active_era(); + setup_chain_stakers::( + num_validators, + num_nominators, + edge_per_voter, + ); + + println!("++ Chain setup done."); + + // stuff to submit + let (winners, compact, score) = match mode { + Mode::InitialSubmission => { + /* No need to setup anything */ + get_seq_phragmen_solution::(do_reduce) + }, + Mode::StrongerSubmission => { + let (winners, compact, score) = get_weak_solution::(false); + println!("Weak on chain score = {:?}", score); + assert_ok!( + >::submit_election_solution( + signed_account::(USER), + winners, + compact, + score, + pallet_staking::testing_utils::active_era::(), + ) + ); + get_seq_phragmen_solution::(do_reduce) + }, + Mode::WeakerSubmission => { + let (winners, compact, score) = get_seq_phragmen_solution::(do_reduce); + println!("Strong on chain score = {:?}", score); + assert_ok!( + >::submit_election_solution( + signed_account::(USER), + winners, + compact, + score, + pallet_staking::testing_utils::active_era::(), + ) + ); + get_weak_solution::(false) + } + }; + + println!("++ Submission ready. Score = {:?}", score); + + // must have chosen correct number of winners. + assert_eq!(winners.len() as u32, >::validator_count()); + + // final call and origin + let call = pallet_staking::Call::::submit_election_solution( + winners, + compact, + score, + pallet_staking::testing_utils::active_era::(), + ); + let caller = signed_account::(USER); + + // actually submit + match mode { + Mode::WeakerSubmission => { + assert_eq!( + call.dispatch(caller.into()).unwrap_err().error, + DispatchError::Module { index: 0, error: 15, message: Some("PhragmenWeakSubmission") }, + ); + }, + // NOTE: so exhaustive pattern doesn't work here.. maybe some rust issue? or due to `#[repr(u32)]`? + Mode::InitialSubmission | Mode::StrongerSubmission => assert!(call.dispatch(caller.into()).is_ok()), + }; + }) + }); + } +} diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 87c6f09e622..67240d8d34b 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -370,7 +370,7 @@ generate_compact_solution_type!(pub GenericCompactAssignments, 16); #[derive(Encode, Decode, RuntimeDebug)] pub struct ActiveEraInfo { /// Index of era. - index: EraIndex, + pub index: EraIndex, /// Moment of start expresed as millisecond from `$UNIX_EPOCH`. /// /// Start can be none if start hasn't been set for the era yet, @@ -803,6 +803,10 @@ pub trait Trait: frame_system::Trait + SendTransactionTypes> { /// The overarching call type. type Call: Dispatchable + From> + IsSubType, Self> + Clone; + /// Maximum number of equalise iterations to run in the offchain submission. If set to 0, + /// equalize will not be executed at all. + type MaxIterations: Get; + /// The maximum number of nominator rewarded for each validator. /// /// For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can claim diff --git a/frame/staking/src/mock.rs b/frame/staking/src/mock.rs index f245c12a54e..a34f3425564 100644 --- a/frame/staking/src/mock.rs +++ b/frame/staking/src/mock.rs @@ -64,6 +64,7 @@ thread_local! { static SLASH_DEFER_DURATION: RefCell = RefCell::new(0); static ELECTION_LOOKAHEAD: RefCell = RefCell::new(0); static PERIOD: RefCell = RefCell::new(1); + static MAX_ITERATIONS: RefCell = RefCell::new(0); } /// Another session handler struct to test on_disabled. @@ -143,6 +144,13 @@ impl Get for SlashDeferDuration { } } +pub struct MaxIterations; +impl Get for MaxIterations { + fn get() -> u32 { + MAX_ITERATIONS.with(|v| *v.borrow()) + } +} + impl_outer_origin! { pub enum Origin for Test where system = frame_system {} } @@ -310,6 +318,7 @@ impl Trait for Test { type NextNewSession = Session; type ElectionLookahead = ElectionLookahead; type Call = Call; + type MaxIterations = MaxIterations; type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; type UnsignedPriority = UnsignedPriority; } @@ -337,6 +346,7 @@ pub struct ExtBuilder { num_validators: Option, invulnerables: Vec, has_stakers: bool, + max_offchain_iterations: u32, } impl Default for ExtBuilder { @@ -355,6 +365,7 @@ impl Default for ExtBuilder { num_validators: None, invulnerables: vec![], has_stakers: true, + max_offchain_iterations: 0, } } } @@ -412,6 +423,10 @@ impl ExtBuilder { self.has_stakers = has; self } + pub fn max_offchain_iterations(mut self, iterations: u32) -> Self { + self.max_offchain_iterations = iterations; + self + } pub fn offchain_phragmen_ext(self) -> Self { self.session_per_era(4) .session_length(5) @@ -423,6 +438,7 @@ impl ExtBuilder { SESSION_PER_ERA.with(|v| *v.borrow_mut() = self.session_per_era); ELECTION_LOOKAHEAD.with(|v| *v.borrow_mut() = self.election_lookahead); PERIOD.with(|v| *v.borrow_mut() = self.session_length); + MAX_ITERATIONS.with(|v| *v.borrow_mut() = self.max_offchain_iterations); } pub fn build(self) -> sp_io::TestExternalities { let _ = env_logger::try_init(); diff --git a/frame/staking/src/offchain_election.rs b/frame/staking/src/offchain_election.rs index c2383d1eebb..572703f895e 100644 --- a/frame/staking/src/offchain_election.rs +++ b/frame/staking/src/offchain_election.rs @@ -16,17 +16,18 @@ //! Helpers for offchain worker election. +use codec::Decode; use crate::{ Call, CompactAssignments, Module, NominatorIndex, OffchainAccuracy, Trait, ValidatorIndex, }; use frame_system::offchain::SubmitTransaction; use sp_phragmen::{ build_support_map, evaluate_support, reduce, Assignment, ExtendedBalance, PhragmenResult, - PhragmenScore, + PhragmenScore, equalize, }; use sp_runtime::offchain::storage::StorageValueRef; -use sp_runtime::PerThing; -use sp_runtime::RuntimeDebug; +use sp_runtime::{PerThing, RuntimeDebug, traits::{TrailingZeroInput, Zero}}; +use frame_support::{debug, traits::Get}; use sp_std::{convert::TryInto, prelude::*}; /// Error types related to the offchain election machinery. @@ -159,10 +160,7 @@ pub fn prepare_submission( }; // Clean winners. - let winners = winners - .into_iter() - .map(|(w, _)| w) - .collect::>(); + let winners = sp_phragmen::to_without_backing(winners); // convert into absolute value and to obtain the reduced version. let mut staked = sp_phragmen::assignment_ratio_to_staked( @@ -170,10 +168,33 @@ pub fn prepare_submission( >::slashable_balance_of_vote_weight, ); + // reduce if do_reduce { reduce(&mut staked); } + let (mut support_map, _) = build_support_map::(&winners, &staked); + + // equalize a random number of times. + let iterations_executed = match T::MaxIterations::get() { + 0 => { + // Don't run equalize at all + 0 + } + iterations @ _ => { + let seed = sp_io::offchain::random_seed(); + let iterations = ::decode(&mut TrailingZeroInput::new(seed.as_ref())) + .expect("input is padded with zeroes; qed") % iterations.saturating_add(1); + equalize( + &mut staked, + &mut support_map, + Zero::zero(), + iterations as usize, + ) + } + }; + + // Convert back to ratio assignment. This takes less space. let low_accuracy_assignment = sp_phragmen::assignment_staked_to_ratio(staked); @@ -215,5 +236,12 @@ pub fn prepare_submission( } } + debug::native::debug!( + target: "staking", + "prepared solution after {} equalization iterations with score {:?}", + iterations_executed, + score, + ); + Ok((winners_indexed, compact, score)) } diff --git a/frame/staking/src/testing_utils.rs b/frame/staking/src/testing_utils.rs index 4c1ee66a756..229b1e2c969 100644 --- a/frame/staking/src/testing_utils.rs +++ b/frame/staking/src/testing_utils.rs @@ -153,13 +153,13 @@ pub fn get_weak_solution( let mut backing_stake_of: BTreeMap> = BTreeMap::new(); // self stake - >::enumerate().for_each(|(who, _p)| { + >::iter().for_each(|(who, _p)| { *backing_stake_of.entry(who.clone()).or_insert(Zero::zero()) += >::slashable_balance_of(&who) }); // add nominator stuff - >::enumerate().for_each(|(who, nomination)| { + >::iter().for_each(|(who, nomination)| { nomination.targets.into_iter().for_each(|v| { *backing_stake_of.entry(v).or_insert(Zero::zero()) += >::slashable_balance_of(&who) @@ -176,7 +176,7 @@ pub fn get_weak_solution( .collect(); let mut staked_assignments: Vec> = Vec::new(); - >::enumerate().for_each(|(who, nomination)| { + >::iter().for_each(|(who, nomination)| { let mut dist: Vec<(T::AccountId, ExtendedBalance)> = Vec::new(); nomination.targets.into_iter().for_each(|v| { if winners.iter().find(|&w| *w == v).is_some() { @@ -325,16 +325,29 @@ pub fn clean(era: EraIndex) ::AccountId: codec::EncodeLike, u32: codec::EncodeLike, { - >::enumerate().for_each(|(k, _)| { + >::iter().for_each(|(k, _)| { let ctrl = >::bonded(&k).unwrap(); >::remove(&k); >::remove(&k); >::remove(&ctrl); >::remove(k, era); }); - >::enumerate().for_each(|(k, _)| >::remove(k)); + >::iter().for_each(|(k, _)| >::remove(k)); >::remove_all(); >::remove_all(); >::kill(); QueuedScore::kill(); } + +/// get the active era. +pub fn active_era() -> EraIndex { + >::active_era().unwrap().index +} + +/// initialize the first era. +pub fn init_active_era() { + ActiveEra::put(ActiveEraInfo { + index: 1, + start: None, + }) +} diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index 3920b7bc0d7..487a3fc3461 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -2901,8 +2901,8 @@ mod offchain_phragmen { #[test] fn signed_result_can_be_submitted() { - // should check that we have a new validator set normally, - // event says that it comes from offchain. + // should check that we have a new validator set normally, event says that it comes from + // offchain. ExtBuilder::default() .offchain_phragmen_ext() .build() @@ -2989,8 +2989,8 @@ mod offchain_phragmen { #[test] fn early_solution_submission_is_rejected() { - // should check that we have a new validator set normally, - // event says that it comes from offchain. + // should check that we have a new validator set normally, event says that it comes from + // offchain. ExtBuilder::default() .offchain_phragmen_ext() .build() @@ -3119,7 +3119,7 @@ mod offchain_phragmen { &inner, ), TransactionValidity::Ok(ValidTransaction { - priority: (1 << 20) + 1125, // the proposed slot stake. + priority: UnsignedPriority::get() + 1125, // the proposed slot stake. requires: vec![], provides: vec![("StakingOffchain", current_era()).encode()], longevity: 3, @@ -3129,6 +3129,50 @@ mod offchain_phragmen { }) } + #[test] + fn offchain_worker_runs_with_equalise() { + // Offchain worker equalises based on the number provided by randomness. See the difference + // in the priority, which comes from the computed score. + let mut ext = ExtBuilder::default() + .offchain_phragmen_ext() + .validator_count(2) + .max_offchain_iterations(2) + .build(); + let state = offchainify(&mut ext); + ext.execute_with(|| { + run_to_block(12); + + // local key 11 is in the elected set. + assert_eq_uvec!(Session::validators(), vec![11, 21]); + assert_eq!(state.read().transactions.len(), 0); + Staking::offchain_worker(12); + assert_eq!(state.read().transactions.len(), 1); + + let encoded = state.read().transactions[0].clone(); + let extrinsic: Extrinsic = Decode::decode(&mut &*encoded).unwrap(); + + let call = extrinsic.call; + let inner = match call { + mock::Call::Staking(inner) => inner, + }; + + assert_eq!( + ::validate_unsigned( + TransactionSource::Local, + &inner, + ), + TransactionValidity::Ok(ValidTransaction { + // the proposed slot stake, with equalize. + priority: UnsignedPriority::get() + 1250, + requires: vec![], + provides: vec![("StakingOffchain", active_era()).encode()], + longevity: 3, + propagate: false, + }) + ) + }) + } + #[test] fn mediocre_submission_from_authority_is_early_rejected() { let mut ext = ExtBuilder::default() diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index 5eecd83853b..2ab23d23c4a 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -24,7 +24,7 @@ wasmi = { version = "0.6.2", optional = true } hash-db = { version = "0.15.2", default-features = false } hash256-std-hasher = { version = "0.15.2", default-features = false } base58 = { version = "0.1.0", optional = true } -rand = { version = "0.7.2", optional = true } +rand = { version = "0.7.3", optional = true, features = ["small_rng"] } substrate-bip39 = { version = "0.4.1", optional = true } tiny-bip39 = { version = "0.7", optional = true } regex = { version = "1.3.1", optional = true } diff --git a/primitives/core/src/offchain/testing.rs b/primitives/core/src/offchain/testing.rs index f4faee6b026..fecf442c578 100644 --- a/primitives/core/src/offchain/testing.rs +++ b/primitives/core/src/offchain/testing.rs @@ -165,7 +165,12 @@ impl offchain::Externalities for TestOffchainExt { } fn random_seed(&mut self) -> [u8; 32] { - unimplemented!("not needed in tests so far") + use rand::{SeedableRng, RngCore}; + use rand::rngs::SmallRng; + let mut seed = [0u8; 32]; + let mut small_rng = SmallRng::from_entropy(); + small_rng.fill_bytes(&mut seed); + seed } fn local_storage_set(&mut self, kind: StorageKind, key: &[u8], value: &[u8]) { diff --git a/primitives/phragmen/src/lib.rs b/primitives/phragmen/src/lib.rs index 01d034a95ec..f45732d5b8e 100644 --- a/primitives/phragmen/src/lib.rs +++ b/primitives/phragmen/src/lib.rs @@ -158,7 +158,7 @@ pub struct PhragmenResult { #[derive(RuntimeDebug, Clone, Default)] #[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))] pub struct Assignment { - /// Voter's identifier + /// Voter's identifier. pub who: AccountId, /// The distribution of the voter's stake. pub distribution: Vec<(AccountId, T)>, -- GitLab From 9b23e35e677608bcab5972052e7ebb14b0cae097 Mon Sep 17 00:00:00 2001 From: thiolliere Date: Mon, 27 Apr 2020 21:46:37 +0200 Subject: [PATCH 071/167] Update weight for im-online (#5771) * implementation using Keys::decode_len * add heartbeat new param * address issues * improve doc * fix test * fix overflow --- bin/node/executor/tests/submit_transaction.rs | 1 + frame/im-online/src/benchmarking.rs | 14 +++++- frame/im-online/src/lib.rs | 43 +++++++++++++++++-- frame/im-online/src/tests.rs | 35 +++++++++------ 4 files changed, 76 insertions(+), 17 deletions(-) diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index f9685ba9b86..a4e89ca7389 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -51,6 +51,7 @@ fn should_submit_unsigned_transaction() { network_state: Default::default(), session_index: 1, authority_index: 0, + validators_len: 0, }; let call = pallet_im_online::Call::heartbeat(heartbeat_data, signature); diff --git a/frame/im-online/src/benchmarking.rs b/frame/im-online/src/benchmarking.rs index e0e74bccfa3..dae2f719b61 100644 --- a/frame/im-online/src/benchmarking.rs +++ b/frame/im-online/src/benchmarking.rs @@ -23,7 +23,7 @@ use super::*; use frame_system::RawOrigin; use frame_benchmarking::benchmarks; use sp_core::offchain::{OpaquePeerId, OpaqueMultiaddr}; -use sp_runtime::traits::{ValidateUnsigned, Zero}; +use sp_runtime::traits::{ValidateUnsigned, Zero, Dispatchable}; use sp_runtime::transaction_validity::TransactionSource; use crate::Module as ImOnline; @@ -49,6 +49,7 @@ pub fn create_heartbeat(k: u32, e: u32) -> network_state, session_index: 0, authority_index: k-1, + validators_len: keys.len() as u32, }; let encoded_heartbeat = input_heartbeat.encode(); @@ -75,6 +76,16 @@ benchmarks! { }: { ImOnline::::validate_unsigned(TransactionSource::InBlock, &call)?; } + + validate_unsigned_and_then_heartbeat { + let k in 1 .. MAX_KEYS; + let e in 1 .. MAX_EXTERNAL_ADDRESSES; + let (input_heartbeat, signature) = create_heartbeat::(k, e)?; + let call = Call::heartbeat(input_heartbeat, signature); + }: { + ImOnline::::validate_unsigned(TransactionSource::InBlock, &call)?; + call.dispatch(RawOrigin::None.into())?; + } } #[cfg(test)] @@ -88,6 +99,7 @@ mod tests { new_test_ext().execute_with(|| { assert_ok!(test_benchmark_heartbeat::()); assert_ok!(test_benchmark_validate_unsigned::()); + assert_ok!(test_benchmark_validate_unsigned_and_then_heartbeat::()); }); } } diff --git a/frame/im-online/src/lib.rs b/frame/im-online/src/lib.rs index 8f04420307b..e280a890545 100644 --- a/frame/im-online/src/lib.rs +++ b/frame/im-online/src/lib.rs @@ -94,6 +94,7 @@ use sp_staking::{ use frame_support::{ decl_module, decl_event, decl_storage, Parameter, debug, decl_error, traits::Get, + weights::Weight, }; use frame_system::{self as system, ensure_none}; use frame_system::offchain::{ @@ -220,6 +221,8 @@ pub struct Heartbeat pub session_index: SessionIndex, /// An index of the authority on the list of validators. pub authority_index: AuthIndex, + /// The length of session validator set + pub validators_len: u32, } pub trait Trait: SendTransactionTypes> + pallet_session::historical::Trait { @@ -313,13 +316,30 @@ decl_module! { fn deposit_event() = default; - #[weight = 0] + /// # + /// - Complexity: `O(K + E)` where K is length of `Keys` and E is length of + /// `Heartbeat.network_state.external_address` + /// + /// - `O(K)`: decoding of length `K` + /// - `O(E)`: decoding/encoding of length `E` + /// - DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`, + /// `ReceivedHeartbeats` + /// - DbWrites: `ReceivedHeartbeats` + /// # + // NOTE: the weight include cost of validate_unsigned as it is part of the cost to import + // block with such an extrinsic. + #[weight = (310_000_000 + T::DbWeight::get().reads_writes(4, 1)) + .saturating_add(750_000.saturating_mul(heartbeat.validators_len as Weight)) + .saturating_add( + 1_200_000.saturating_mul(heartbeat.network_state.external_addresses.len() as Weight) + ) + ] fn heartbeat( origin, heartbeat: Heartbeat, // since signature verification is done in `validate_unsigned` // we can skip doing it here again. - _signature: ::Signature + _signature: ::Signature, ) { ensure_none(origin)?; @@ -439,10 +459,17 @@ impl Module { } let session_index = >::current_index(); + let validators_len = >::validators().len() as u32; Ok(Self::local_authority_keys() .map(move |(authority_index, key)| - Self::send_single_heartbeat(authority_index, key, session_index, block_number) + Self::send_single_heartbeat( + authority_index, + key, + session_index, + block_number, + validators_len, + ) )) } @@ -451,7 +478,8 @@ impl Module { authority_index: u32, key: T::AuthorityId, session_index: SessionIndex, - block_number: T::BlockNumber + block_number: T::BlockNumber, + validators_len: u32, ) -> OffchainResult { // A helper function to prepare heartbeat call. let prepare_heartbeat = || -> OffchainResult> { @@ -462,6 +490,7 @@ impl Module { network_state, session_index, authority_index, + validators_len, }; let signature = key.sign(&heartbeat_data.encode()).ok_or(OffchainErr::FailedSigning)?; @@ -643,6 +672,9 @@ impl pallet_session::OneSessionHandler for Module { } } +/// Invalid transaction custom error. Returned when validators_len field in heartbeat is incorrect. +const INVALID_VALIDATORS_LEN: u8 = 10; + impl frame_support::unsigned::ValidateUnsigned for Module { type Call = Call; @@ -664,6 +696,9 @@ impl frame_support::unsigned::ValidateUnsigned for Module { // verify that the incoming (unverified) pubkey is actually an authority id let keys = Keys::::get(); + if keys.len() as u32 != heartbeat.validators_len { + return InvalidTransaction::Custom(INVALID_VALIDATORS_LEN).into(); + } let authority_id = match keys.get(heartbeat.authority_index as usize) { Some(id) => id, None => return InvalidTransaction::BadProof.into(), diff --git a/frame/im-online/src/tests.rs b/frame/im-online/src/tests.rs index e49f28f4896..2578b5114e2 100644 --- a/frame/im-online/src/tests.rs +++ b/frame/im-online/src/tests.rs @@ -27,7 +27,7 @@ use sp_core::offchain::{ testing::{TestOffchainExt, TestTransactionPoolExt}, }; use frame_support::{dispatch, assert_noop}; -use sp_runtime::testing::UintAuthorityId; +use sp_runtime::{testing::UintAuthorityId, transaction_validity::TransactionValidityError}; #[test] fn test_unresponsiveness_slash_fraction() { @@ -87,7 +87,7 @@ fn should_report_offline_validators() { // should not report when heartbeat is sent for (idx, v) in validators.into_iter().take(4).enumerate() { - let _ = heartbeat(block, 3, idx as u32, v.into()).unwrap(); + let _ = heartbeat(block, 3, idx as u32, v.into(), Session::validators()).unwrap(); } advance_session(); @@ -111,6 +111,7 @@ fn heartbeat( session_index: u32, authority_index: u32, id: UintAuthorityId, + validators: Vec, ) -> dispatch::DispatchResult { use frame_support::unsigned::ValidateUnsigned; @@ -122,15 +123,20 @@ fn heartbeat( }, session_index, authority_index, + validators_len: validators.len() as u32, }; let signature = id.sign(&heartbeat.encode()).unwrap(); ImOnline::pre_dispatch(&crate::Call::heartbeat(heartbeat.clone(), signature.clone())) - .map_err(|e| <&'static str>::from(e))?; + .map_err(|e| match e { + TransactionValidityError::Invalid(InvalidTransaction::Custom(INVALID_VALIDATORS_LEN)) => + "invalid validators len", + e @ _ => <&'static str>::from(e), + })?; ImOnline::heartbeat( Origin::system(frame_system::RawOrigin::None), heartbeat, - signature + signature, ) } @@ -152,7 +158,7 @@ fn should_mark_online_validator_when_heartbeat_is_received() { assert!(!ImOnline::is_online(2)); // when - let _ = heartbeat(1, 2, 0, 1.into()).unwrap(); + let _ = heartbeat(1, 2, 0, 1.into(), Session::validators()).unwrap(); // then assert!(ImOnline::is_online(0)); @@ -160,7 +166,7 @@ fn should_mark_online_validator_when_heartbeat_is_received() { assert!(!ImOnline::is_online(2)); // and when - let _ = heartbeat(1, 2, 2, 3.into()).unwrap(); + let _ = heartbeat(1, 2, 2, 3.into(), Session::validators()).unwrap(); // then assert!(ImOnline::is_online(0)); @@ -170,7 +176,7 @@ fn should_mark_online_validator_when_heartbeat_is_received() { } #[test] -fn late_heartbeat_should_fail() { +fn late_heartbeat_and_invalid_keys_len_should_fail() { new_test_ext().execute_with(|| { advance_session(); // given @@ -183,8 +189,11 @@ fn late_heartbeat_should_fail() { assert_eq!(Session::validators(), vec![1, 2, 3]); // when - assert_noop!(heartbeat(1, 3, 0, 1.into()), "Transaction is outdated"); - assert_noop!(heartbeat(1, 1, 0, 1.into()), "Transaction is outdated"); + assert_noop!(heartbeat(1, 3, 0, 1.into(), Session::validators()), "Transaction is outdated"); + assert_noop!(heartbeat(1, 1, 0, 1.into(), Session::validators()), "Transaction is outdated"); + + // invalid validators_len + assert_noop!(heartbeat(1, 2, 0, 1.into(), vec![]), "invalid validators len"); }); } @@ -220,7 +229,7 @@ fn should_generate_heartbeats() { // check stuff about the transaction. let ex: Extrinsic = Decode::decode(&mut &*transaction).unwrap(); let heartbeat = match ex.call { - crate::mock::Call::ImOnline(crate::Call::heartbeat(h, _)) => h, + crate::mock::Call::ImOnline(crate::Call::heartbeat(h, ..)) => h, e => panic!("Unexpected call: {:?}", e), }; @@ -229,6 +238,7 @@ fn should_generate_heartbeats() { network_state: sp_io::offchain::network_state().unwrap(), session_index: 2, authority_index: 2, + validators_len: 3, }); }); } @@ -248,7 +258,7 @@ fn should_cleanup_received_heartbeats_on_session_end() { assert_eq!(Session::validators(), vec![1, 2, 3]); // send an heartbeat from authority id 0 at session 2 - let _ = heartbeat(1, 2, 0, 1.into()).unwrap(); + let _ = heartbeat(1, 2, 0, 1.into(), Session::validators()).unwrap(); // the heartbeat is stored assert!(!ImOnline::received_heartbeats(&2, &0).is_none()); @@ -330,7 +340,7 @@ fn should_not_send_a_report_if_already_online() { // check stuff about the transaction. let ex: Extrinsic = Decode::decode(&mut &*transaction).unwrap(); let heartbeat = match ex.call { - crate::mock::Call::ImOnline(crate::Call::heartbeat(h, _)) => h, + crate::mock::Call::ImOnline(crate::Call::heartbeat(h, ..)) => h, e => panic!("Unexpected call: {:?}", e), }; @@ -339,6 +349,7 @@ fn should_not_send_a_report_if_already_online() { network_state: sp_io::offchain::network_state().unwrap(), session_index: 2, authority_index: 0, + validators_len: 3, }); }); } -- GitLab From 74eca2d91a63f5f5c4dd4bd48e7a2d8d63e59e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Mon, 27 Apr 2020 21:01:35 +0100 Subject: [PATCH 072/167] cli: fix unused unsafe-pruning flag (#5803) --- client/cli/src/commands/mod.rs | 4 ++-- client/cli/src/config.rs | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index 143ff491aef..3a4861543d2 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -235,10 +235,10 @@ macro_rules! substrate_cli_subcommands { } } - fn pruning(&self, is_dev: bool, role: &::sc_service::Role) + fn pruning(&self, unsafe_pruning: bool, role: &::sc_service::Role) -> $crate::Result<::sc_service::config::PruningMode> { match self { - $($enum::$variant(cmd) => cmd.pruning(is_dev, role)),* + $($enum::$variant(cmd) => cmd.pruning(unsafe_pruning, role)),* } } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 1d07355f0ac..05177241748 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -200,9 +200,9 @@ pub trait CliConfiguration: Sized { /// /// By default this is retrieved from `PruningMode` if it is available. Otherwise its /// `PruningMode::default()`. - fn pruning(&self, is_dev: bool, role: &Role) -> Result { + fn pruning(&self, unsafe_pruning: bool, role: &Role) -> Result { self.pruning_params() - .map(|x| x.pruning(is_dev, role)) + .map(|x| x.pruning(unsafe_pruning, role)) .unwrap_or(Ok(Default::default())) } @@ -411,6 +411,11 @@ pub trait CliConfiguration: Sized { let role = self.role(is_dev)?; let max_runtime_instances = self.max_runtime_instances()?.unwrap_or(8); + let unsafe_pruning = self + .import_params() + .map(|p| p.unsafe_pruning) + .unwrap_or(false); + Ok(Configuration { impl_name: C::impl_name(), impl_version: C::impl_version(), @@ -428,7 +433,7 @@ pub trait CliConfiguration: Sized { database: self.database_config(&config_dir, database_cache_size, database)?, state_cache_size: self.state_cache_size()?, state_cache_child_ratio: self.state_cache_child_ratio()?, - pruning: self.pruning(is_dev, &role)?, + pruning: self.pruning(unsafe_pruning || is_dev, &role)?, wasm_method: self.wasm_method()?, execution_strategies: self.execution_strategies(is_dev)?, rpc_http: self.rpc_http()?, -- GitLab From c13ad41634d0bd7cf07897c2aa062b917d520520 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Tue, 28 Apr 2020 00:10:21 +0200 Subject: [PATCH 073/167] Fixed race in batch signature verification (#5805) --- primitives/io/src/batch_verifier.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/primitives/io/src/batch_verifier.rs b/primitives/io/src/batch_verifier.rs index 82ce0b04ef0..8dd5162e49e 100644 --- a/primitives/io/src/batch_verifier.rs +++ b/primitives/io/src/batch_verifier.rs @@ -139,11 +139,13 @@ impl BatchVerifier { self.sr25519_items.clear(); if pending.len() > 0 { - let pair = Arc::new((Mutex::new(()), Condvar::new())); + let pair = Arc::new((Mutex::new(false), Condvar::new())); let pair_clone = pair.clone(); if self.scheduler.spawn_obj(FutureObj::new(async move { futures::future::join_all(pending).await; + let mut finished = pair_clone.0.lock().expect("Locking can only fail when the mutex is poisoned; qed"); + *finished = true; pair_clone.1.notify_all(); }.boxed())).is_err() { log::debug!( @@ -154,9 +156,11 @@ impl BatchVerifier { return false; } - let (mtx, cond_var) = &*pair; - let mtx = mtx.lock().expect("Locking can only fail when the mutex is poisoned; qed"); - let _ = cond_var.wait(mtx).expect("Waiting can only fail when the mutex waited on is poisoned; qed"); + let (finished, cond_var) = &*pair; + let mut finished = finished.lock().expect("Locking can only fail when the mutex is poisoned; qed"); + while !*finished { + finished = cond_var.wait(finished).expect("Waiting can only fail when the mutex waited on is poisoned; qed"); + } } log::trace!( -- GitLab From 223047438548ac72e1fa2cce3984709d0483ee35 Mon Sep 17 00:00:00 2001 From: zjb0807 Date: Tue, 28 Apr 2020 16:55:59 +0800 Subject: [PATCH 074/167] delete duplicates runtime-benchmarks (#5806) --- bin/node/runtime/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index 9c93c071c70..bf360821c84 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -153,7 +153,6 @@ runtime-benchmarks = [ "pallet-treasury/runtime-benchmarks", "pallet-utility/runtime-benchmarks", "pallet-vesting/runtime-benchmarks", - "pallet-collective/runtime-benchmarks", "pallet-offences-benchmarking", "pallet-session-benchmarking", ] -- GitLab From 952d575509ef98376659fbbd3c3a17b50b56054c Mon Sep 17 00:00:00 2001 From: Cecile Tonglet Date: Tue, 28 Apr 2020 11:44:44 +0200 Subject: [PATCH 075/167] Fix remaining issues with unsafe_pruning (#5810) * Initial commit Forked at: c13ad41634d0bd7cf07897c2aa062b917d520520 Parent branch: origin/master * Fix remaining issues with unsafe_pruning * Revert "Fix remaining issues with unsafe_pruning" This reverts commit 9c42c2f9b361b13ee19f39b264e52dfaa46cfcbb. * Just remove is_dev --- client/cli/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 05177241748..72a02063a0f 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -433,7 +433,7 @@ pub trait CliConfiguration: Sized { database: self.database_config(&config_dir, database_cache_size, database)?, state_cache_size: self.state_cache_size()?, state_cache_child_ratio: self.state_cache_child_ratio()?, - pruning: self.pruning(unsafe_pruning || is_dev, &role)?, + pruning: self.pruning(unsafe_pruning, &role)?, wasm_method: self.wasm_method()?, execution_strategies: self.execution_strategies(is_dev)?, rpc_http: self.rpc_http()?, -- GitLab From 64ea9abb767a6bc82a22a27d651b324de5ff6839 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Tue, 28 Apr 2020 12:04:23 +0200 Subject: [PATCH 076/167] Fix flaky staking test (#5812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix flaky staking test * Better doc * Update frame/staking/src/tests.rs Co-Authored-By: Benjamin Kampmann Co-authored-by: Bastian Köcher Co-authored-by: Benjamin Kampmann --- frame/staking/src/tests.rs | 24 +++++++++++++++--------- primitives/core/src/offchain/testing.rs | 9 +++------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index 487a3fc3461..84c937d324c 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -2674,6 +2674,7 @@ fn remove_multi_deferred() { mod offchain_phragmen { use crate::*; + use codec::Encode; use frame_support::{assert_noop, assert_ok}; use sp_runtime::transaction_validity::TransactionSource; use mock::*; @@ -2714,14 +2715,19 @@ mod offchain_phragmen { bond_nominator(voter, 1000 + voter, 100, vec![21, 31, 41]); } - fn offchainify(ext: &mut TestExternalities) -> Arc> { - let (offchain, _state) = TestOffchainExt::new(); - let (pool, state) = TestTransactionPoolExt::new(); + /// convert an externalities to one that can handle offchain worker tests. + fn offchainify(ext: &mut TestExternalities, iterations: u32) -> Arc> { + let (offchain, offchain_state) = TestOffchainExt::new(); + let (pool, pool_state) = TestTransactionPoolExt::new(); + + let mut seed = [0_u8; 32]; + seed[0..4].copy_from_slice(&iterations.to_le_bytes()); + offchain_state.write().seed = seed; ext.register_extension(OffchainExt::new(offchain)); ext.register_extension(TransactionPoolExt::new(pool)); - state + pool_state } #[test] @@ -3095,7 +3101,7 @@ mod offchain_phragmen { .offchain_phragmen_ext() .validator_count(2) .build(); - let state = offchainify(&mut ext); + let state = offchainify(&mut ext, 0); ext.execute_with(|| { run_to_block(12); @@ -3138,7 +3144,7 @@ mod offchain_phragmen { .validator_count(2) .max_offchain_iterations(2) .build(); - let state = offchainify(&mut ext); + let state = offchainify(&mut ext, 2); ext.execute_with(|| { run_to_block(12); @@ -3179,7 +3185,7 @@ mod offchain_phragmen { .offchain_phragmen_ext() .validator_count(4) .build(); - let state = offchainify(&mut ext); + let state = offchainify(&mut ext, 0); ext.execute_with(|| { run_to_block(12); // put a good solution on-chain @@ -3704,7 +3710,7 @@ mod offchain_phragmen { .offchain_phragmen_ext() .validator_count(4) .build(); - let state = offchainify(&mut ext); + let state = offchainify(&mut ext, 0); ext.execute_with(|| { use offchain_election::OFFCHAIN_HEAD_DB; @@ -3728,7 +3734,7 @@ mod offchain_phragmen { .offchain_phragmen_ext() .validator_count(4) .build(); - let _ = offchainify(&mut ext); + let _ = offchainify(&mut ext, 0); ext.execute_with(|| { use offchain_election::OFFCHAIN_HEAD_DB; diff --git a/primitives/core/src/offchain/testing.rs b/primitives/core/src/offchain/testing.rs index fecf442c578..d93528093fc 100644 --- a/primitives/core/src/offchain/testing.rs +++ b/primitives/core/src/offchain/testing.rs @@ -74,6 +74,8 @@ pub struct OffchainState { pub local_storage: InMemOffchainStorage, /// Current timestamp (unix millis) pub timestamp: u64, + /// A supposedly random seed. + pub seed: [u8; 32], } impl OffchainState { @@ -165,12 +167,7 @@ impl offchain::Externalities for TestOffchainExt { } fn random_seed(&mut self) -> [u8; 32] { - use rand::{SeedableRng, RngCore}; - use rand::rngs::SmallRng; - let mut seed = [0u8; 32]; - let mut small_rng = SmallRng::from_entropy(); - small_rng.fill_bytes(&mut seed); - seed + self.0.read().seed } fn local_storage_set(&mut self, kind: StorageKind, key: &[u8], value: &[u8]) { -- GitLab From 8b9a56c0a7a80cad62d42af4e65e19787fc19a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 28 Apr 2020 12:25:36 +0200 Subject: [PATCH 077/167] pallet-sudo: Store `DispatchResult` in `Sudid` event (#5804) --- frame/sudo/src/lib.rs | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 0824c7b954c..d19c92358c2 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -87,7 +87,7 @@ #![cfg_attr(not(feature = "std"), no_std)] use sp_std::prelude::*; -use sp_runtime::traits::{StaticLookup, Dispatchable}; +use sp_runtime::{DispatchResult, traits::{StaticLookup, Dispatchable}}; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, ensure, @@ -130,15 +130,8 @@ decl_module! { let sender = ensure_signed(origin)?; ensure!(sender == Self::key(), Error::::RequireSudo); - let res = match call.dispatch(frame_system::RawOrigin::Root.into()) { - Ok(_) => true, - Err(e) => { - sp_runtime::print(e); - false - } - }; - - Self::deposit_event(RawEvent::Sudid(res)); + let res = call.dispatch(frame_system::RawOrigin::Root.into()); + Self::deposit_event(RawEvent::Sudid(res.map(|_| ()).map_err(|e| e.error))); } /// Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key. @@ -204,7 +197,7 @@ decl_module! { decl_event!( pub enum Event where AccountId = ::AccountId { /// A sudo just took place. - Sudid(bool), + Sudid(DispatchResult), /// The sudoer just switched identity; the old key is supplied. KeyChanged(AccountId), /// A sudo just took place. -- GitLab From 15e49f70caa33673874e5025f85d0643e6c580e0 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 28 Apr 2020 12:49:09 +0200 Subject: [PATCH 078/167] add `std` feature to newly added dependency in contracts pallet (#5801) * remove unnecessary re-export * enable unleash * Revert "enable unleash" This reverts commit 30f11d7befea904d5e9c8c117a1b79eb3e184150. * Revert "remove unnecessary re-export" This reverts commit 74229f99587d1e17985b5e7f656f70d32b0e9ebe. * fix missing std def * Revert "Revert "enable unleash"" This reverts commit 323fb913c38c8f1ac7424dd22e5f918ff6a0b596. * Revert "Revert "Revert "enable unleash""" This reverts commit 3f199674ae024edc32a2ab7ce3a15013d2b285a1. --- frame/contracts/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/frame/contracts/Cargo.toml b/frame/contracts/Cargo.toml index e26efe5b690..4e1128000e3 100644 --- a/frame/contracts/Cargo.toml +++ b/frame/contracts/Cargo.toml @@ -51,4 +51,5 @@ std = [ "pwasm-utils/std", "wasmi-validation/std", "pallet-contracts-primitives/std", + "pallet-transaction-payment/std", ] -- GitLab From 72a3d3be2abf22b8dedbf6a3c009b2435ae482c1 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Tue, 28 Apr 2020 12:50:40 +0200 Subject: [PATCH 079/167] Versioned NextConfigDescriptor for BABE (#5789) --- client/consensus/babe/src/lib.rs | 2 +- primitives/consensus/babe/src/digests.rs | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index e314e7a43c7..028fe8e5e34 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -1065,7 +1065,7 @@ impl BlockImport for BabeBlockImport::FetchEpoch(parent_hash).into()) })?; - let epoch_config = next_config_digest.unwrap_or_else( + let epoch_config = next_config_digest.map(Into::into).unwrap_or_else( || viable_epoch.as_ref().config.clone() ); diff --git a/primitives/consensus/babe/src/digests.rs b/primitives/consensus/babe/src/digests.rs index f113912d835..141d6cf4bd7 100644 --- a/primitives/consensus/babe/src/digests.rs +++ b/primitives/consensus/babe/src/digests.rs @@ -18,7 +18,7 @@ #[cfg(feature = "std")] use super::{BABE_ENGINE_ID, AuthoritySignature}; -use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEpochConfiguration}; +use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEpochConfiguration, AllowedSlots}; #[cfg(feature = "std")] use sp_runtime::{DigestItem, generic::OpaqueDigestItemId}; #[cfg(feature = "std")] @@ -183,7 +183,26 @@ pub struct NextEpochDescriptor { /// Information about the next epoch config, if changed. This is broadcast in the first /// block of the epoch, and applies using the same rules as `NextEpochDescriptor`. -pub type NextConfigDescriptor = BabeEpochConfiguration; +#[derive(Decode, Encode, PartialEq, Eq, Clone, RuntimeDebug)] +pub enum NextConfigDescriptor { + /// Version 1. + #[codec(index = "1")] + V1 { + /// Value of `c` in `BabeEpochConfiguration`. + c: (u64, u64), + /// Value of `allowed_slots` in `BabeEpochConfiguration`. + allowed_slots: AllowedSlots, + } +} + +impl From for BabeEpochConfiguration { + fn from(desc: NextConfigDescriptor) -> Self { + match desc { + NextConfigDescriptor::V1 { c, allowed_slots } => + Self { c, allowed_slots }, + } + } +} /// A digest item which is usable with BABE consensus. #[cfg(feature = "std")] -- GitLab From fc6d55c9c9cfe50ec7d8d8671cd39b669cebc1ab Mon Sep 17 00:00:00 2001 From: Seun Lanlege Date: Tue, 28 Apr 2020 12:59:31 +0100 Subject: [PATCH 080/167] Move sc-client into sc-service (#5502) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Drop client from sc-network and sc-client-db, move LongestChain to sc-client-api * move leaves, cht, in_mem to sc-client-api, drop client from sc-finality-grandpa * drop sc-service from sc-rpc * drop sc-service from sc-consensus-aura * drop sc-client from manual-seal and babe * drop sc-client from utils/frame/rpc/system and utils/frame/benchmarking-cli * drop sc-client from bin/node and bin/node-template * drop sc-client * fix tests * remove check -p sc-client from gitlab.yml * fix warnings * fixes ui test * fix light client tests * adds associated Client type to AbstractService * adds UsageProvider to Client * fixed ui test, again * tried and failed to get node-cli to compile for wasm * thanks to tomaka for helping me get node-cli to compile for wasmm * ui test pls pas 🙏🏾 * all tests passing 🪄 * no_run documentation code * rm -f documentation code * ClientProvider * fix mega trait * move LongestChain to sc-consensus, use adds minimal bounds to AbstractService::Client * adds license to sc-consensus Co-authored-by: Benjamin Kampmann --- .gitlab-ci.yml | 1 - Cargo.lock | 204 +- Cargo.toml | 2 +- bin/node-template/node/Cargo.toml | 4 +- bin/node-template/node/src/service.rs | 12 +- bin/node/cli/Cargo.toml | 3 +- bin/node/cli/src/chain_spec.rs | 4 +- bin/node/cli/src/service.rs | 45 +- bin/node/rpc/Cargo.toml | 2 +- bin/node/rpc/src/lib.rs | 6 +- bin/node/testing/Cargo.toml | 3 +- bin/node/testing/src/bench.rs | 2 +- bin/node/testing/src/client.rs | 8 +- bin/node/transaction-factory/Cargo.toml | 1 - client/Cargo.toml | 51 - client/api/Cargo.toml | 10 +- client/api/src/backend.rs | 19 + client/{ => api}/src/cht.rs | 5 +- client/{ => api}/src/in_mem.rs | 54 +- client/{ => api}/src/leaves.rs | 0 client/api/src/lib.rs | 10 + client/api/src/light.rs | 20 +- client/cli/src/commands/mod.rs | 2 +- client/cli/src/config.rs | 7 +- client/consensus/aura/Cargo.toml | 3 +- client/consensus/aura/src/lib.rs | 7 +- client/consensus/babe/Cargo.toml | 3 +- client/consensus/babe/src/tests.rs | 2 +- client/consensus/common/Cargo.toml | 17 + client/consensus/common/src/lib.rs | 19 + client/consensus/common/src/longest_chain.rs | 101 + client/consensus/manual-seal/Cargo.toml | 1 - client/db/Cargo.toml | 1 - client/db/src/lib.rs | 90 +- client/db/src/light.rs | 15 +- client/finality-grandpa/Cargo.toml | 2 +- client/finality-grandpa/src/environment.rs | 3 +- client/finality-grandpa/src/finality_proof.rs | 2 +- client/finality-grandpa/src/light_import.rs | 2 +- client/finality-grandpa/src/tests.rs | 2 +- client/informant/src/lib.rs | 2 +- client/network/Cargo.toml | 1 - .../src/protocol/light_client_handler.rs | 85 +- client/network/test/Cargo.toml | 3 +- client/network/test/src/lib.rs | 30 +- client/rpc/Cargo.toml | 1 - client/rpc/src/chain/chain_light.rs | 6 +- client/rpc/src/chain/mod.rs | 5 +- client/rpc/src/state/mod.rs | 2 +- client/rpc/src/state/state_full.rs | 2 +- client/rpc/src/state/state_light.rs | 6 +- client/service/Cargo.toml | 14 +- client/service/src/builder.rs | 93 +- client/service/src/chain_ops.rs | 2 +- .../src/client}/block_rules.rs | 0 .../src/client}/call_executor.rs | 2 +- client/{src => service/src/client}/client.rs | 1744 +--------------- client/service/src/client/genesis.rs | 41 + .../src/client}/light/backend.rs | 56 +- .../src/client}/light/blockchain.rs | 158 +- .../src/client}/light/call_executor.rs | 238 +-- client/service/src/client/light/fetcher.rs | 341 ++++ .../{src => service/src/client}/light/mod.rs | 12 +- .../{src/lib.rs => service/src/client/mod.rs} | 60 +- client/service/src/config.rs | 2 +- client/service/src/lib.rs | 132 +- client/service/src/metrics.rs | 2 +- client/service/test/Cargo.toml | 25 +- client/service/test/src/client/db.rs | 55 + client/service/test/src/client/light.rs | 896 ++++++++ client/service/test/src/client/mod.rs | 1802 +++++++++++++++++ client/service/test/src/lib.rs | 18 +- client/src/light/fetcher.rs | 833 -------- primitives/api/test/tests/decl_and_impl.rs | 2 +- .../tests/ui/mock_only_one_error_type.stderr | 4 +- test-utils/client/Cargo.toml | 3 +- test-utils/client/src/client_ext.rs | 4 +- test-utils/client/src/lib.rs | 26 +- test-utils/runtime/Cargo.toml | 12 +- test-utils/runtime/client/Cargo.toml | 4 +- test-utils/runtime/client/src/lib.rs | 30 +- test-utils/runtime/client/src/trait_tests.rs | 2 +- test-utils/runtime/src/genesismap.rs | 3 +- utils/frame/benchmarking-cli/Cargo.toml | 1 - utils/frame/benchmarking-cli/src/command.rs | 2 +- utils/frame/rpc/system/Cargo.toml | 2 +- utils/frame/rpc/system/src/lib.rs | 5 +- 87 files changed, 3938 insertions(+), 3576 deletions(-) delete mode 100644 client/Cargo.toml rename client/{ => api}/src/cht.rs (99%) rename client/{ => api}/src/in_mem.rs (92%) rename client/{ => api}/src/leaves.rs (100%) create mode 100644 client/consensus/common/Cargo.toml create mode 100644 client/consensus/common/src/lib.rs create mode 100644 client/consensus/common/src/longest_chain.rs rename client/{src => service/src/client}/block_rules.rs (100%) rename client/{src => service/src/client}/call_executor.rs (99%) rename client/{src => service/src/client}/client.rs (51%) create mode 100644 client/service/src/client/genesis.rs rename client/{src => service/src/client}/light/backend.rs (88%) rename client/{src => service/src/client}/light/blockchain.rs (54%) rename client/{src => service/src/client}/light/call_executor.rs (53%) create mode 100644 client/service/src/client/light/fetcher.rs rename client/{src => service/src/client}/light/mod.rs (91%) rename client/{src/lib.rs => service/src/client/mod.rs} (52%) create mode 100644 client/service/test/src/client/db.rs create mode 100644 client/service/test/src/client/light.rs create mode 100644 client/service/test/src/client/mod.rs delete mode 100644 client/src/light/fetcher.rs diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6cdc822f96d..4451ce63e0d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -326,7 +326,6 @@ check-web-wasm: - time cargo build --target=wasm32-unknown-unknown -p sp-io - time cargo build --target=wasm32-unknown-unknown -p sp-runtime - time cargo build --target=wasm32-unknown-unknown -p sp-std - - time cargo build --target=wasm32-unknown-unknown -p sc-client - time cargo build --target=wasm32-unknown-unknown -p sc-consensus-aura - time cargo build --target=wasm32-unknown-unknown -p sc-consensus-babe - time cargo build --target=wasm32-unknown-unknown -p sp-consensus diff --git a/Cargo.lock b/Cargo.lock index e068b00d7ca..3c944740b73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,15 +126,15 @@ dependencies = [ [[package]] name = "arbitrary" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75153c95fdedd7db9732dfbfc3702324a1627eec91ba56e37cd0ac78314ab2ed" +checksum = "1148c9b25d393a07c4cc3ef5dd30f82a40a1c261018c4a670611ed8e76cad3ea" [[package]] name = "arc-swap" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825" +checksum = "b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62" [[package]] name = "arrayref" @@ -280,9 +280,9 @@ dependencies = [ [[package]] name = "backtrace-sys" -version = "0.1.35" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" +checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" dependencies = [ "cc", "libc", @@ -446,9 +446,9 @@ dependencies = [ [[package]] name = "bs58" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b170cd256a3f9fa6b9edae3e44a7dfdfc77e8124dbc3e2612d75f9c3e2396dae" +checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" [[package]] name = "bstr" @@ -547,9 +547,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.50" +version = "1.0.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" +checksum = "9c9384ca4b90c0ea47e19a5c996d6643a3e73dedf9b89c65efb67587e34da1bb" dependencies = [ "jobserver", ] @@ -1140,18 +1140,18 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a80e524ebf194285b57e5e7944018721c7fffc673253f5183f7accd88a2a3b0c" +checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ed9afacaea0301eefb738c9deea725e6d53938004597cdc518a8cf9a7aa2f03" +checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -1426,7 +1426,6 @@ dependencies = [ "frame-benchmarking", "parity-scale-codec", "sc-cli", - "sc-client", "sc-client-db", "sc-executor", "sc-service", @@ -1980,9 +1979,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" +checksum = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" dependencies = [ "libc", ] @@ -2135,9 +2134,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.4" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6081100e960d9d74734659ffc9cc91daf1c0fc7aceb8eaa94ee1a3f5046f2e" +checksum = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" dependencies = [ "bytes 0.5.4", "futures-channel", @@ -2166,7 +2165,7 @@ dependencies = [ "bytes 0.5.4", "ct-logs", "futures-util", - "hyper 0.13.4", + "hyper 0.13.5", "log", "rustls", "rustls-native-certs", @@ -3431,9 +3430,9 @@ dependencies = [ "sc-basic-authorship", "sc-chain-spec", "sc-cli", - "sc-client", "sc-client-api", "sc-client-db", + "sc-consensus", "sc-consensus-babe", "sc-consensus-epochs", "sc-finality-grandpa", @@ -3538,7 +3537,7 @@ dependencies = [ "node-runtime", "pallet-contracts-rpc", "pallet-transaction-payment-rpc", - "sc-client", + "sc-client-api", "sc-consensus-babe", "sc-consensus-babe-rpc", "sc-consensus-epochs", @@ -3638,8 +3637,8 @@ dependencies = [ "node-template-runtime", "sc-basic-authorship", "sc-cli", - "sc-client", "sc-client-api", + "sc-consensus", "sc-consensus-aura", "sc-executor", "sc-finality-grandpa", @@ -3715,7 +3714,6 @@ dependencies = [ "parity-scale-codec", "sc-block-builder", "sc-cli", - "sc-client", "sc-client-api", "sc-client-db", "sc-executor", @@ -3744,7 +3742,6 @@ dependencies = [ "parity-scale-codec", "sc-block-builder", "sc-cli", - "sc-client", "sc-client-api", "sc-service", "sp-api", @@ -3850,9 +3847,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.12.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" dependencies = [ "hermit-abi", "libc", @@ -4875,7 +4872,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ "lock_api", - "parking_lot_core 0.7.1", + "parking_lot_core 0.7.2", ] [[package]] @@ -4895,9 +4892,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e136c1904604defe99ce5fd71a28d473fa60a12255d511aa78a9ddf11237aeb" +checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" dependencies = [ "cfg-if", "cloudabi", @@ -5568,18 +5565,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "077f197a31bfe7e4169145f9eca08d32705c6c6126c139c26793acdf163ac3ef" +checksum = "0a214c7875e1b63fc1618db7c80efc0954f6156c9ff07699fd9039e255accdd1" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36eb52b69b87c9e3a07387f476c88fd0dba9a1713b38e56617ed66b45392c1f" +checksum = "602eb59cda66fcb9aec25841fb76bc01d2b34282dcdd705028da297db6f3eec8" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -5588,9 +5585,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.3.6" +version = "1.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" +checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" dependencies = [ "aho-corasick", "memchr", @@ -5952,47 +5949,6 @@ dependencies = [ "tokio 0.2.18", ] -[[package]] -name = "sc-client" -version = "0.8.0-dev" -dependencies = [ - "derive_more", - "env_logger 0.7.1", - "fnv", - "futures 0.3.4", - "hash-db", - "hex-literal", - "kvdb", - "kvdb-memorydb", - "log", - "parity-scale-codec", - "parking_lot 0.10.2", - "rand 0.7.3", - "sc-block-builder", - "sc-client-api", - "sc-executor", - "sc-telemetry", - "sp-api", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-database", - "sp-externalities", - "sp-inherents", - "sp-keyring", - "sp-panic-handler", - "sp-runtime", - "sp-state-machine", - "sp-std", - "sp-trie", - "sp-utils", - "sp-version", - "substrate-prometheus-endpoint", - "substrate-test-runtime-client", - "tempfile", - "tracing", -] - [[package]] name = "sc-client-api" version = "2.0.0-dev" @@ -6003,6 +5959,7 @@ dependencies = [ "hash-db", "hex-literal", "kvdb", + "kvdb-memorydb", "lazy_static", "log", "parity-scale-codec", @@ -6013,6 +5970,7 @@ dependencies = [ "sp-blockchain", "sp-consensus", "sp-core", + "sp-database", "sp-externalities", "sp-inherents", "sp-keyring", @@ -6026,6 +5984,7 @@ dependencies = [ "sp-utils", "sp-version", "substrate-prometheus-endpoint", + "substrate-test-runtime", ] [[package]] @@ -6045,7 +6004,6 @@ dependencies = [ "parity-util-mem", "parking_lot 0.10.2", "quickcheck", - "sc-client", "sc-client-api", "sc-executor", "sc-state-db", @@ -6062,6 +6020,16 @@ dependencies = [ "tempfile", ] +[[package]] +name = "sc-consensus" +version = "0.8.0-dev" +dependencies = [ + "sc-client-api", + "sp-blockchain", + "sp-consensus", + "sp-runtime", +] + [[package]] name = "sc-consensus-aura" version = "0.8.0-dev" @@ -6074,7 +6042,6 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "sc-block-builder", - "sc-client", "sc-client-api", "sc-consensus-slots", "sc-executor", @@ -6119,7 +6086,6 @@ dependencies = [ "pdqselect", "rand 0.7.3", "sc-block-builder", - "sc-client", "sc-client-api", "sc-consensus-epochs", "sc-consensus-slots", @@ -6201,7 +6167,6 @@ dependencies = [ "log", "parking_lot 0.10.2", "sc-basic-authorship", - "sc-client", "sc-client-api", "sc-transaction-pool", "serde", @@ -6372,8 +6337,8 @@ dependencies = [ "pin-project", "rand 0.7.3", "sc-block-builder", - "sc-client", "sc-client-api", + "sc-consensus", "sc-keystore", "sc-network", "sc-network-gossip", @@ -6463,7 +6428,6 @@ dependencies = [ "quickcheck", "rand 0.7.3", "sc-block-builder", - "sc-client", "sc-client-api", "sc-peerset", "serde", @@ -6520,9 +6484,10 @@ dependencies = [ "parking_lot 0.10.2", "rand 0.7.3", "sc-block-builder", - "sc-client", "sc-client-api", + "sc-consensus", "sc-network", + "sc-service", "sp-blockchain", "sp-consensus", "sp-consensus-babe", @@ -6543,7 +6508,7 @@ dependencies = [ "fnv", "futures 0.3.4", "futures-timer 3.0.2", - "hyper 0.13.4", + "hyper 0.13.5", "hyper-rustls", "log", "num_cpus", @@ -6593,7 +6558,6 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.10.2", "sc-block-builder", - "sc-client", "sc-client-api", "sc-executor", "sc-keystore", @@ -6677,6 +6641,7 @@ dependencies = [ "futures 0.1.29", "futures 0.3.4", "futures-timer 3.0.2", + "hash-db", "lazy_static", "log", "netstat2", @@ -6686,8 +6651,9 @@ dependencies = [ "parking_lot 0.10.2", "pin-project", "procfs", + "rand 0.7.3", + "sc-block-builder", "sc-chain-spec", - "sc-client", "sc-client-api", "sc-client-db", "sc-executor", @@ -6705,16 +6671,21 @@ dependencies = [ "slog", "sp-api", "sp-application-crypto", + "sp-block-builder", "sp-blockchain", "sp-consensus", "sp-consensus-babe", "sp-core", + "sp-externalities", "sp-finality-grandpa", "sp-io", "sp-runtime", "sp-session", + "sp-state-machine", "sp-transaction-pool", + "sp-trie", "sp-utils", + "sp-version", "substrate-prometheus-endpoint", "substrate-test-runtime-client", "sysinfo", @@ -6730,14 +6701,29 @@ dependencies = [ "fdlimit", "futures 0.1.29", "futures 0.3.4", + "hex-literal", "log", - "sc-client", + "parity-scale-codec", + "parking_lot 0.10.2", + "sc-block-builder", + "sc-client-api", + "sc-client-db", + "sc-executor", "sc-network", "sc-service", + "sp-api", + "sp-blockchain", "sp-consensus", "sp-core", + "sp-externalities", + "sp-panic-handler", "sp-runtime", + "sp-state-machine", + "sp-storage", "sp-transaction-pool", + "sp-trie", + "substrate-test-runtime", + "substrate-test-runtime-client", "tempfile", "tokio 0.1.22", ] @@ -7935,9 +7921,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff6da2e8d107dfd7b74df5ef4d205c6aebee0706c647f6bc6a2d5789905c00fb" +checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" dependencies = [ "clap", "lazy_static", @@ -7946,9 +7932,9 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a489c87c08fbaf12e386665109dd13470dcc9c4583ea3e10dd2b4523e5ebd9ac" +checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" dependencies = [ "heck", "proc-macro-error", @@ -8080,7 +8066,7 @@ dependencies = [ "jsonrpc-derive", "log", "parity-scale-codec", - "sc-client", + "sc-client-api", "sc-transaction-pool", "serde", "sp-api", @@ -8098,7 +8084,7 @@ dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.4", + "hyper 0.13.5", "log", "prometheus", "tokio 0.2.18", @@ -8111,10 +8097,11 @@ dependencies = [ "futures 0.3.4", "hash-db", "parity-scale-codec", - "sc-client", "sc-client-api", "sc-client-db", + "sc-consensus", "sc-executor", + "sc-service", "sp-blockchain", "sp-consensus", "sp-core", @@ -8139,8 +8126,8 @@ dependencies = [ "parity-scale-codec", "parity-util-mem", "sc-block-builder", - "sc-client", "sc-executor", + "sc-service", "serde", "sp-api", "sp-application-crypto", @@ -8172,10 +8159,12 @@ dependencies = [ "futures 0.3.4", "parity-scale-codec", "sc-block-builder", - "sc-client", "sc-client-api", + "sc-consensus", + "sc-service", "sp-api", "sp-blockchain", + "sp-consensus", "sp-core", "sp-runtime", "substrate-test-client", @@ -8357,9 +8346,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a0338198966bde7feb14b011a33d404a62a6e03b843352c71512a2a002634b7" +checksum = "1cac193374347e7c263c5f547524f36ff8ec6702d56c8799c8331d26dffe8c1e" dependencies = [ "cfg-if", "doc-comment", @@ -8467,12 +8456,11 @@ dependencies = [ [[package]] name = "time" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" +checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "redox_syscall", "winapi 0.3.8", ] @@ -9355,18 +9343,18 @@ dependencies = [ [[package]] name = "wast" -version = "13.0.0" +version = "14.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b20abd8b4a26f7e0d4dd5e357e90a3d555ec190e94472c9b2b27c5b9777f9ae" +checksum = "47b11c94c63d5365a76ea287f8e6e5b6050233fae4b2423aea2a1e126a385e17" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51a615830ee3e7200b505c441fec09aac2f114deae69df52f215cb828ba112c4" +checksum = "03db18bc33cff3859c296efbefdcc00763a644539feeadca3415a1cee8a2835d" dependencies = [ "wast", ] @@ -9448,9 +9436,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ "winapi 0.3.8", ] diff --git a/Cargo.toml b/Cargo.toml index 5c410befbbf..35d396741f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,6 @@ members = [ "bin/node/transaction-factory", "bin/utils/subkey", "bin/utils/chain-spec-builder", - "client", "client/api", "client/authority-discovery", "client/basic-authorship", @@ -26,6 +25,7 @@ members = [ "client/consensus/aura", "client/consensus/babe", "client/consensus/babe/rpc", + "client/consensus/common", "client/consensus/manual-seal", "client/consensus/pow", "client/consensus/uncles", diff --git a/bin/node-template/node/Cargo.toml b/bin/node-template/node/Cargo.toml index c53710eab4d..53b6da219f9 100644 --- a/bin/node-template/node/Cargo.toml +++ b/bin/node-template/node/Cargo.toml @@ -23,7 +23,7 @@ structopt = "0.3.8" sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } -sc-service = { version = "0.8.0-dev", path = "../../../client/service" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } @@ -31,9 +31,9 @@ sc-network = { version = "0.8.0-dev", path = "../../../client/network" } sc-consensus-aura = { version = "0.8.0-dev", path = "../../../client/consensus/aura" } sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } sp-finality-grandpa = { version = "2.0.0-dev", path = "../../../primitives/finality-grandpa" } -sc-client = { version = "0.8.0-dev", path = "../../../client/" } sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } sc-basic-authorship = { path = "../../../client/basic-authorship", version = "0.8.0-dev"} diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index 62177608a2e..16e5271cce9 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -2,8 +2,8 @@ use std::sync::Arc; use std::time::Duration; -use sc_client::LongestChain; use sc_client_api::ExecutorProvider; +use sc_consensus::LongestChain; use node_template_runtime::{self, opaque::Block, RuntimeApi}; use sc_service::{error::{Error as ServiceError}, AbstractService, Configuration, ServiceBuilder}; use sp_inherents::InherentDataProviders; @@ -35,7 +35,7 @@ macro_rules! new_full_start { node_template_runtime::opaque::Block, node_template_runtime::RuntimeApi, crate::service::Executor >($config)? .with_select_chain(|_config, backend| { - Ok(sc_client::LongestChain::new(backend.clone())) + Ok(sc_consensus::LongestChain::new(backend.clone())) })? .with_transaction_pool(|config, client, _fetcher, prometheus_registry| { let pool_api = sc_transaction_pool::FullChainApi::new(client.clone()); @@ -71,9 +71,7 @@ macro_rules! new_full_start { } /// Builds a new service for a full client. -pub fn new_full(config: Configuration) - -> Result -{ +pub fn new_full(config: Configuration) -> Result { let role = config.role.clone(); let force_authoring = config.force_authoring; let name = config.network.node_name.clone(); @@ -176,9 +174,7 @@ pub fn new_full(config: Configuration) } /// Builds a new service for a light client. -pub fn new_light(config: Configuration) - -> Result -{ +pub fn new_light(config: Configuration) -> Result { let inherent_data_providers = InherentDataProviders::new(); ServiceBuilder::new_light::(config)? diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml index 1f22e85ab6e..af71de7570a 100644 --- a/bin/node/cli/Cargo.toml +++ b/bin/node/cli/Cargo.toml @@ -60,8 +60,8 @@ sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/trans # client dependencies sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-client = { version = "0.8.0-dev", path = "../../../client/" } sc-chain-spec = { version = "2.0.0-dev", path = "../../../client/chain-spec" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } sc-network = { version = "0.8.0-dev", path = "../../../client/network" } sc-consensus-babe = { version = "0.8.0-dev", path = "../../../client/consensus/babe" } @@ -111,6 +111,7 @@ sc-service = { version = "0.8.0-dev", default-features = false, path = "../../.. [dev-dependencies] sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } sc-consensus-babe = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../../client/consensus/babe" } sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } sc-service-test = { version = "2.0.0-dev", path = "../../../client/service/test" } diff --git a/bin/node/cli/src/chain_spec.rs b/bin/node/cli/src/chain_spec.rs index 461474038b8..ea3999fa377 100644 --- a/bin/node/cli/src/chain_spec.rs +++ b/bin/node/cli/src/chain_spec.rs @@ -51,9 +51,9 @@ const STAGING_TELEMETRY_URL: &str = "wss://telemetry.polkadot.io/submit/"; #[serde(rename_all = "camelCase")] pub struct Extensions { /// Block numbers with known hashes. - pub fork_blocks: sc_client::ForkBlocks, + pub fork_blocks: sc_client_api::ForkBlocks, /// Known bad block hashes. - pub bad_blocks: sc_client::BadBlocks, + pub bad_blocks: sc_client_api::BadBlocks, } /// Specialized `ChainSpec`. diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index 1ccc6e5ec48..c8b0e50c4ff 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -21,7 +21,6 @@ use std::sync::Arc; use sc_consensus_babe; -use sc_client::{self, LongestChain}; use grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider, StorageAndProofProvider}; use node_executor; use node_primitives::Block; @@ -30,14 +29,7 @@ use sc_service::{ AbstractService, ServiceBuilder, config::Configuration, error::{Error as ServiceError}, }; use sp_inherents::InherentDataProviders; - -use sc_service::{Service, NetworkStatus}; -use sc_client::{Client, LocalCallExecutor}; -use sc_client_db::Backend; -use sp_runtime::traits::Block as BlockT; -use node_executor::NativeExecutor; -use sc_network::NetworkService; -use sc_offchain::OffchainWorkers; +use sc_consensus::LongestChain; /// Starts a `ServiceBuilder` for a full service. /// @@ -54,7 +46,7 @@ macro_rules! new_full_start { node_primitives::Block, node_runtime::RuntimeApi, node_executor::Executor >($config)? .with_select_chain(|_config, backend| { - Ok(sc_client::LongestChain::new(backend.clone())) + Ok(sc_consensus::LongestChain::new(backend.clone())) })? .with_transaction_pool(|config, client, _fetcher, prometheus_registry| { let pool_api = sc_transaction_pool::FullChainApi::new(client.clone()); @@ -266,38 +258,9 @@ macro_rules! new_full { }} } -type ConcreteBlock = node_primitives::Block; -type ConcreteClient = - Client< - Backend, - LocalCallExecutor, NativeExecutor>, - ConcreteBlock, - node_runtime::RuntimeApi - >; -type ConcreteBackend = Backend; -type ConcreteTransactionPool = sc_transaction_pool::BasicPool< - sc_transaction_pool::FullChainApi, - ConcreteBlock ->; - /// Builds a new service for a full client. pub fn new_full(config: Configuration) --> Result< - Service< - ConcreteBlock, - ConcreteClient, - LongestChain, - NetworkStatus, - NetworkService::Hash>, - ConcreteTransactionPool, - OffchainWorkers< - ConcreteClient, - >::OffchainStorage, - ConcreteBlock, - > - >, - ServiceError, -> +-> Result { new_full!(config).map(|(service, _)| service) } @@ -416,7 +379,7 @@ mod tests { use sp_core::ed25519::Pair; use {service_test, Factory}; - use sc_client::{BlockImportParams, BlockOrigin}; + use sp_consensus::{BlockImportParams, BlockOrigin}; let alice: Arc = Arc::new(Keyring::Alice.into()); let bob: Arc = Arc::new(Keyring::Bob.into()); diff --git a/bin/node/rpc/Cargo.toml b/bin/node/rpc/Cargo.toml index d6db49ebf01..76d9998831c 100644 --- a/bin/node/rpc/Cargo.toml +++ b/bin/node/rpc/Cargo.toml @@ -11,7 +11,7 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client = { version = "0.8.0-dev", path = "../../../client/" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } jsonrpc-core = "14.0.3" node-primitives = { version = "2.0.0-dev", path = "../primitives" } node-runtime = { version = "2.0.0-dev", path = "../runtime" } diff --git a/bin/node/rpc/src/lib.rs b/bin/node/rpc/src/lib.rs index 4e1cfa56733..297dc129aea 100644 --- a/bin/node/rpc/src/lib.rs +++ b/bin/node/rpc/src/lib.rs @@ -50,7 +50,7 @@ pub struct LightDeps { /// Transaction pool instance. pub pool: Arc

, /// Remote access to the blockchain (async). - pub remote_blockchain: Arc>, + pub remote_blockchain: Arc>, /// Fetcher instance. pub fetcher: Arc, } @@ -135,9 +135,9 @@ pub fn create_full( pub fn create_light( deps: LightDeps, ) -> jsonrpc_core::IoHandler where - C: sc_client::blockchain::HeaderBackend, + C: sp_blockchain::HeaderBackend, C: Send + Sync + 'static, - F: sc_client::light::fetcher::Fetcher + 'static, + F: sc_client_api::light::Fetcher + 'static, P: TransactionPool + 'static, M: jsonrpc_core::Metadata + Default, { diff --git a/bin/node/testing/Cargo.toml b/bin/node/testing/Cargo.toml index 3d8ab42621a..af375c774de 100644 --- a/bin/node/testing/Cargo.toml +++ b/bin/node/testing/Cargo.toml @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } -sc-client = { version = "0.8.0-dev", path = "../../../client/" } +sc-service = { version = "0.8.0-dev", features = ["test-helpers", "db"], path = "../../../client/service" } sc-client-db = { version = "0.8.0-dev", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] } sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } codec = { package = "parity-scale-codec", version = "1.3.0" } @@ -55,4 +55,3 @@ futures = "0.3.1" [dev-dependencies] criterion = "0.3.0" sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-service = { version = "0.8.0-dev", path = "../../../client/service", features = ["db"] } diff --git a/bin/node/testing/src/bench.rs b/bin/node/testing/src/bench.rs index 91d0cfb55a0..d05bb9a0950 100644 --- a/bin/node/testing/src/bench.rs +++ b/bin/node/testing/src/bench.rs @@ -221,7 +221,7 @@ impl BenchDb { }, }; - let (client, backend) = sc_client_db::new_client( + let (client, backend) = sc_service::new_client( db_config, NativeExecutor::new(WasmExecutionMethod::Compiled, None, 8), &keyring.generate_genesis(), diff --git a/bin/node/testing/src/client.rs b/bin/node/testing/src/client.rs index 963bac7041b..69583e37dc9 100644 --- a/bin/node/testing/src/client.rs +++ b/bin/node/testing/src/client.rs @@ -17,7 +17,7 @@ //! Utilities to build a `TestClient` for `node-runtime`. use sp_runtime::BuildStorage; - +use sc_service::client; /// Re-export test-client utilities. pub use substrate_test_client::*; @@ -28,9 +28,9 @@ pub type Executor = sc_executor::NativeExecutor; pub type Backend = sc_client_db::Backend; /// Test client type. -pub type Client = sc_client::Client< +pub type Client = client::Client< Backend, - sc_client::LocalCallExecutor, + client::LocalCallExecutor, node_primitives::Block, node_runtime::RuntimeApi, >; @@ -61,7 +61,7 @@ pub trait TestClientBuilderExt: Sized { impl TestClientBuilderExt for substrate_test_client::TestClientBuilder< node_primitives::Block, - sc_client::LocalCallExecutor, + client::LocalCallExecutor, Backend, GenesisParameters, > { diff --git a/bin/node/transaction-factory/Cargo.toml b/bin/node/transaction-factory/Cargo.toml index 273d1163ac9..5aa803a7e18 100644 --- a/bin/node/transaction-factory/Cargo.toml +++ b/bin/node/transaction-factory/Cargo.toml @@ -15,7 +15,6 @@ sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-bu sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } -sc-client = { version = "0.8.0-dev", path = "../../../client" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } log = "0.4.8" diff --git a/client/Cargo.toml b/client/Cargo.toml deleted file mode 100644 index a28418b9a28..00000000000 --- a/client/Cargo.toml +++ /dev/null @@ -1,51 +0,0 @@ -[package] -name = "sc-client" -version = "0.8.0-dev" -authors = ["Parity Technologies "] -edition = "2018" -license = "GPL-3.0" -homepage = "https://substrate.dev" -repository = "https://github.com/paritytech/substrate/" -description = "Substrate Client and associated logic." - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -sc-block-builder = { version = "0.8.0-dev", path = "block-builder" } -sc-client-api = { version = "2.0.0-dev", path = "api" } -codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-consensus = { version = "0.8.0-dev", path = "../primitives/consensus/common" } -derive_more = { version = "0.99.2" } -sc-executor = { version = "0.8.0-dev", path = "executor" } -sp-externalities = { version = "0.8.0-dev", path = "../primitives/externalities" } -fnv = { version = "1.0.6" } -futures = { version = "0.3.1", features = ["compat"] } -hash-db = { version = "0.15.2" } -hex-literal = { version = "0.2.1" } -sp-inherents = { version = "2.0.0-dev", path = "../primitives/inherents" } -sp-keyring = { version = "2.0.0-dev", path = "../primitives/keyring" } -kvdb = "0.5.0" -log = { version = "0.4.8" } -parking_lot = "0.10.0" -rand = "0.7.3" -sp-core = { version = "2.0.0-dev", path = "../primitives/core" } -sp-std = { version = "2.0.0-dev", path = "../primitives/std" } -sp-version = { version = "2.0.0-dev", path = "../primitives/version" } -sp-api = { version = "2.0.0-dev", path = "../primitives/api" } -sp-runtime = { version = "2.0.0-dev", path = "../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../primitives/utils" } -sp-blockchain = { version = "2.0.0-dev", path = "../primitives/blockchain" } -sp-state-machine = { version = "0.8.0-dev", path = "../primitives/state-machine" } -sc-telemetry = { version = "2.0.0-dev", path = "telemetry" } -sp-trie = { version = "2.0.0-dev", path = "../primitives/trie" } -sp-database = { version = "2.0.0-dev", path = "../primitives/database" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../utils/prometheus" } -tracing = "0.1.10" - -[dev-dependencies] -env_logger = "0.7.0" -tempfile = "3.1.0" -substrate-test-runtime-client = { version = "2.0.0-dev", path = "../test-utils/runtime/client" } -kvdb-memorydb = "0.5.0" -sp-panic-handler = { version = "2.0.0-dev", path = "../primitives/panic-handler" } diff --git a/client/api/Cargo.toml b/client/api/Cargo.toml index c745dc3bee7..3e9cbc1a9db 100644 --- a/client/api/Cargo.toml +++ b/client/api/Cargo.toml @@ -9,10 +9,6 @@ repository = "https://github.com/paritytech/substrate/" description = "Substrate client interfaces." documentation = "https://docs.rs/sc-client-api" -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - - [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } @@ -30,6 +26,7 @@ kvdb = "0.5.0" log = { version = "0.4.8" } parking_lot = "0.10.0" lazy_static = "1.4.0" +sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } @@ -44,4 +41,9 @@ sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transact prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } [dev-dependencies] +kvdb-memorydb = "0.5.0" sp-test-primitives = { version = "2.0.0-dev", path = "../../primitives/test-primitives" } +substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/api/src/backend.rs b/client/api/src/backend.rs index ad697a35932..8aaeb944833 100644 --- a/client/api/src/backend.rs +++ b/client/api/src/backend.rs @@ -79,6 +79,25 @@ pub struct ClientImportOperation> { pub notify_finalized: Vec, } +/// Helper function to apply auxiliary data insertion into an operation. +pub fn apply_aux<'a, 'b: 'a, 'c: 'a, B, Block, D, I>( + operation: &mut ClientImportOperation, + insert: I, + delete: D, +) -> sp_blockchain::Result<()> + where + Block: BlockT, + B: Backend, + I: IntoIterator, + D: IntoIterator, +{ + operation.op.insert_aux( + insert.into_iter() + .map(|(k, v)| (k.to_vec(), Some(v.to_vec()))) + .chain(delete.into_iter().map(|k| (k.to_vec(), None))) + ) +} + /// State of a new block. #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum NewBlockState { diff --git a/client/src/cht.rs b/client/api/src/cht.rs similarity index 99% rename from client/src/cht.rs rename to client/api/src/cht.rs index de672806323..3eba63e7026 100644 --- a/client/src/cht.rs +++ b/client/api/src/cht.rs @@ -331,9 +331,10 @@ pub fn decode_cht_value(value: &[u8]) -> Option { #[cfg(test)] mod tests { - use substrate_test_runtime_client::runtime::Header; - use sp_runtime::traits::BlakeTwo256; use super::*; + use sp_runtime::{generic, traits::BlakeTwo256}; + + type Header = generic::Header; #[test] fn is_build_required_works() { diff --git a/client/src/in_mem.rs b/client/api/src/in_mem.rs similarity index 92% rename from client/src/in_mem.rs rename to client/api/src/in_mem.rs index a63ea91e26e..d5b4800f4e4 100644 --- a/client/src/in_mem.rs +++ b/client/api/src/in_mem.rs @@ -32,14 +32,15 @@ use sp_state_machine::{ }; use sp_blockchain::{CachedHeaderMetadata, HeaderMetadata}; -use sc_client_api::{ +use crate::{ backend::{self, NewBlockState}, blockchain::{ self, BlockStatus, HeaderBackend, well_known_cache_keys::Id as CacheKeyId }, UsageInfo, + light, + leaves::LeafSet, }; -use crate::leaves::LeafSet; struct PendingBlock { block: StoredBlock, @@ -400,7 +401,7 @@ impl backend::AuxStore for Blockchain { } } -impl sc_client_api::light::Storage for Blockchain +impl light::Storage for Blockchain where Block::Hash: From<[u8; 32]>, { @@ -454,7 +455,7 @@ impl sc_client_api::light::Storage for Blockchain None } - fn usage_info(&self) -> Option { + fn usage_info(&self) -> Option { None } } @@ -719,7 +720,7 @@ impl backend::RemoteBackend for Backend where Block .unwrap_or(false) } - fn remote_blockchain(&self) -> Arc> { + fn remote_blockchain(&self) -> Arc> { unimplemented!() } } @@ -737,46 +738,3 @@ pub fn check_genesis_storage(storage: &Storage) -> sp_blockchain::Result<()> { Ok(()) } - -#[cfg(test)] -mod tests { - use sp_core::offchain::{OffchainStorage, storage::InMemOffchainStorage}; - use std::sync::Arc; - - type TestBackend = substrate_test_runtime_client::sc_client::in_mem::Backend; - - #[test] - fn test_leaves_with_complex_block_tree() { - let backend = Arc::new(TestBackend::new()); - - substrate_test_runtime_client::trait_tests::test_leaves_for_backend(backend); - } - - #[test] - fn test_blockchain_query_by_number_gets_canonical() { - let backend = Arc::new(TestBackend::new()); - - substrate_test_runtime_client::trait_tests::test_blockchain_query_by_number_gets_canonical(backend); - } - - #[test] - fn in_memory_offchain_storage() { - - let mut storage = InMemOffchainStorage::default(); - assert_eq!(storage.get(b"A", b"B"), None); - assert_eq!(storage.get(b"B", b"A"), None); - - storage.set(b"A", b"B", b"C"); - assert_eq!(storage.get(b"A", b"B"), Some(b"C".to_vec())); - assert_eq!(storage.get(b"B", b"A"), None); - - storage.compare_and_set(b"A", b"B", Some(b"X"), b"D"); - assert_eq!(storage.get(b"A", b"B"), Some(b"C".to_vec())); - storage.compare_and_set(b"A", b"B", Some(b"C"), b"D"); - assert_eq!(storage.get(b"A", b"B"), Some(b"D".to_vec())); - - assert!(!storage.compare_and_set(b"B", b"A", Some(b""), b"Y")); - assert!(storage.compare_and_set(b"B", b"A", None, b"X")); - assert_eq!(storage.get(b"B", b"A"), Some(b"X".to_vec())); - } -} diff --git a/client/src/leaves.rs b/client/api/src/leaves.rs similarity index 100% rename from client/src/leaves.rs rename to client/api/src/leaves.rs diff --git a/client/api/src/lib.rs b/client/api/src/lib.rs index e4080323c18..bad61f7687a 100644 --- a/client/api/src/lib.rs +++ b/client/api/src/lib.rs @@ -20,8 +20,11 @@ pub mod backend; pub mod call_executor; pub mod client; +pub mod cht; pub mod execution_extensions; +pub mod in_mem; pub mod light; +pub mod leaves; pub mod notifications; pub mod proof_provider; @@ -36,6 +39,13 @@ pub use proof_provider::*; pub use sp_state_machine::{StorageProof, ExecutionStrategy, CloneableSpawn}; +/// Usage Information Provider interface +/// +pub trait UsageProvider { + /// Get usage info about current client. + fn usage_info(&self) -> ClientInfo; +} + /// Utility methods for the client. pub mod utils { use sp_blockchain::{HeaderBackend, HeaderMetadata, Error}; diff --git a/client/api/src/light.rs b/client/api/src/light.rs index 30e6d14d557..b359c1149ee 100644 --- a/client/api/src/light.rs +++ b/client/api/src/light.rs @@ -296,7 +296,25 @@ pub trait RemoteBlockchain: Send + Sync { >>; } - +/// Returns future that resolves header either locally, or remotely. +pub fn future_header>( + blockchain: &dyn RemoteBlockchain, + fetcher: &F, + id: BlockId, +) -> impl Future, ClientError>> { + use futures::future::{ready, Either, FutureExt}; + + match blockchain.header(id) { + Ok(LocalOrRemote::Remote(request)) => Either::Left( + fetcher + .remote_header(request) + .then(|header| ready(header.map(Some))) + ), + Ok(LocalOrRemote::Unknown) => Either::Right(ready(Ok(None))), + Ok(LocalOrRemote::Local(local_header)) => Either::Right(ready(Ok(Some(local_header)))), + Err(err) => Either::Right(ready(Err(err))), + } +} #[cfg(test)] pub mod tests { diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index 3a4861543d2..3e8c2166b20 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -267,7 +267,7 @@ macro_rules! substrate_cli_subcommands { } fn execution_strategies(&self, is_dev: bool) - -> $crate::Result<::sc_service::config::ExecutionStrategies> { + -> $crate::Result<::sc_client_api::execution_extensions::ExecutionStrategies> { match self { $($enum::$variant(cmd) => cmd.execution_strategies(is_dev)),* } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 72a02063a0f..c73992c59cb 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -25,10 +25,11 @@ use crate::arg_enums::Database; use app_dirs::{AppDataType, AppInfo}; use names::{Generator, Name}; use sc_service::config::{ - Configuration, DatabaseConfig, ExecutionStrategies, ExtTransport, KeystoreConfig, - NetworkConfiguration, NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, - Role, TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod, + WasmExecutionMethod, Role, OffchainWorkerConfig, + Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration, + NodeKeyConfig, PrometheusConfig, PruningMode, TelemetryEndpoints, TransactionPoolOptions, }; +use sc_client_api::execution_extensions::ExecutionStrategies; use sc_service::{ChainSpec, TracingReceiver}; use std::future::Future; use std::net::SocketAddr; diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index 40f505f8591..82196feac03 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -16,7 +16,6 @@ sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/app sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } -sc-client = { version = "0.8.0-dev", path = "../../" } sc-client-api = { version = "2.0.0-dev", path = "../../api" } codec = { package = "parity-scale-codec", version = "1.3.0" } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } @@ -42,7 +41,7 @@ sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } sc-executor = { version = "0.8.0-dev", path = "../../executor" } sc-network = { version = "0.8.0-dev", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-dev", path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } env_logger = "0.7.0" tempfile = "3.1.0" diff --git a/client/consensus/aura/src/lib.rs b/client/consensus/aura/src/lib.rs index 038e9e458cf..daa181abba5 100644 --- a/client/consensus/aura/src/lib.rs +++ b/client/consensus/aura/src/lib.rs @@ -46,8 +46,7 @@ use sp_consensus::{ use sp_consensus::import_queue::{ Verifier, BasicQueue, BoxJustificationImport, BoxFinalityProofImport, }; -use sc_client_api::backend::AuxStore; -use sc_client::BlockOf; +use sc_client_api::{backend::AuxStore, BlockOf}; use sp_blockchain::{ self, Result as CResult, well_known_cache_keys::{self, Id as CacheKeyId}, ProvideCache, HeaderBackend, @@ -831,14 +830,14 @@ mod tests { use sc_network::config::ProtocolConfig; use parking_lot::Mutex; use sp_keyring::sr25519::Keyring; - use sc_client::BlockchainEvents; + use sc_client_api::BlockchainEvents; use sp_consensus_aura::sr25519::AuthorityPair; use std::task::Poll; use sc_block_builder::BlockBuilderProvider; type Error = sp_blockchain::Error; - type TestClient = sc_client::Client< + type TestClient = substrate_test_runtime_client::client::Client< substrate_test_runtime_client::Backend, substrate_test_runtime_client::Executor, TestBlock, diff --git a/client/consensus/babe/Cargo.toml b/client/consensus/babe/Cargo.toml index 7ac3330b6ac..ddae8f84b7e 100644 --- a/client/consensus/babe/Cargo.toml +++ b/client/consensus/babe/Cargo.toml @@ -28,7 +28,6 @@ sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } sc-keystore = { version = "2.0.0-dev", path = "../../keystore" } sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sc-client = { version = "0.8.0-dev", path = "../../" } sc-consensus-epochs = { version = "0.8.0-dev", path = "../epochs" } sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } @@ -54,7 +53,7 @@ sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } sc-executor = { version = "0.8.0-dev", path = "../../executor" } sc-network = { version = "0.8.0-dev", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-dev", path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } env_logger = "0.7.0" diff --git a/client/consensus/babe/src/tests.rs b/client/consensus/babe/src/tests.rs index 5e20c8b5e99..89514906be4 100644 --- a/client/consensus/babe/src/tests.rs +++ b/client/consensus/babe/src/tests.rs @@ -40,7 +40,7 @@ type Item = DigestItem; type Error = sp_blockchain::Error; -type TestClient = sc_client::Client< +type TestClient = substrate_test_runtime_client::client::Client< substrate_test_runtime_client::Backend, substrate_test_runtime_client::Executor, TestBlock, diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml new file mode 100644 index 00000000000..e8854faa078 --- /dev/null +++ b/client/consensus/common/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "sc-consensus" +version = "0.8.0-dev" +authors = ["Parity Technologies "] +edition = "2018" +license = "GPL-3.0" +homepage = "https://substrate.dev" +repository = "https://github.com/paritytech/substrate/" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } diff --git a/client/consensus/common/src/lib.rs b/client/consensus/common/src/lib.rs new file mode 100644 index 00000000000..9bfe7e56d4f --- /dev/null +++ b/client/consensus/common/src/lib.rs @@ -0,0 +1,19 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . +//! Collection of consensus specific imlementations +mod longest_chain; + +pub use longest_chain::LongestChain; \ No newline at end of file diff --git a/client/consensus/common/src/longest_chain.rs b/client/consensus/common/src/longest_chain.rs new file mode 100644 index 00000000000..981dbad0f60 --- /dev/null +++ b/client/consensus/common/src/longest_chain.rs @@ -0,0 +1,101 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . +//! Longest chain implementation + +use std::sync::Arc; +use std::marker::PhantomData; +use sc_client_api::backend; +use sp_consensus::{SelectChain, Error as ConsensusError}; +use sp_blockchain::{Backend, HeaderBackend}; +use sp_runtime::{ + traits::{NumberFor, Block as BlockT}, + generic::BlockId, +}; + +/// Implement Longest Chain Select implementation +/// where 'longest' is defined as the highest number of blocks +pub struct LongestChain { + backend: Arc, + _phantom: PhantomData +} + +impl Clone for LongestChain { + fn clone(&self) -> Self { + let backend = self.backend.clone(); + LongestChain { + backend, + _phantom: Default::default() + } + } +} + +impl LongestChain + where + B: backend::Backend, + Block: BlockT, +{ + /// Instantiate a new LongestChain for Backend B + pub fn new(backend: Arc) -> Self { + LongestChain { + backend, + _phantom: Default::default() + } + } + + fn best_block_header(&self) -> sp_blockchain::Result<::Header> { + let info = self.backend.blockchain().info(); + let import_lock = self.backend.get_import_lock(); + let best_hash = self.backend + .blockchain() + .best_containing(info.best_hash, None, import_lock)? + .unwrap_or(info.best_hash); + + Ok(self.backend.blockchain().header(BlockId::Hash(best_hash))? + .expect("given block hash was fetched from block in db; qed")) + } + + fn leaves(&self) -> Result::Hash>, sp_blockchain::Error> { + self.backend.blockchain().leaves() + } +} + +impl SelectChain for LongestChain + where + B: backend::Backend, + Block: BlockT, +{ + + fn leaves(&self) -> Result::Hash>, ConsensusError> { + LongestChain::leaves(self) + .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) + } + + fn best_chain(&self) -> Result<::Header, ConsensusError> + { + LongestChain::best_block_header(&self) + .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) + } + + fn finality_target( + &self, + target_hash: Block::Hash, + maybe_max_number: Option> + ) -> Result, ConsensusError> { + let import_lock = self.backend.get_import_lock(); + self.backend.blockchain().best_containing(target_hash, maybe_max_number, import_lock) + .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) + } +} \ No newline at end of file diff --git a/client/consensus/manual-seal/Cargo.toml b/client/consensus/manual-seal/Cargo.toml index 8d67ef30ad4..807c370edf3 100644 --- a/client/consensus/manual-seal/Cargo.toml +++ b/client/consensus/manual-seal/Cargo.toml @@ -22,7 +22,6 @@ parking_lot = "0.10.0" serde = { version = "1.0", features=["derive"] } assert_matches = "1.3.0" -sc-client = { path = "../../../client" , version = "0.8.0-dev"} sc-client-api = { path = "../../../client/api" , version = "2.0.0-dev"} sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-dev"} sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-dev"} diff --git a/client/db/Cargo.toml b/client/db/Cargo.toml index f636b03f30f..2df1836850c 100644 --- a/client/db/Cargo.toml +++ b/client/db/Cargo.toml @@ -26,7 +26,6 @@ blake2-rfc = "0.2.18" sc-client-api = { version = "2.0.0-dev", path = "../api" } sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sc-client = { version = "0.8.0-dev", path = "../" } sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } sc-executor = { version = "0.8.0-dev", path = "../executor" } sc-state-db = { version = "0.8.0-dev", path = "../state-db" } diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index f3e2b0ea1f0..b9ca63b1171 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -52,9 +52,9 @@ use std::collections::HashMap; use sc_client_api::{ - ForkBlocks, UsageInfo, MemoryInfo, BadBlocks, IoInfo, MemorySize, CloneableSpawn, - execution_extensions::ExecutionExtensions, + UsageInfo, MemoryInfo, IoInfo, MemorySize, backend::{NewBlockState, PrunableStateChangesTrieStorage}, + leaves::{LeafSet, FinalizationDisplaced}, }; use sp_blockchain::{ Result as ClientResult, Error as ClientError, @@ -65,17 +65,13 @@ use hash_db::Prefix; use sp_trie::{MemoryDB, PrefixedMemoryDB, prefixed_key}; use sp_database::Transaction; use parking_lot::RwLock; -use sp_core::{ChangesTrieConfiguration, traits::CodeExecutor}; -use sp_core::offchain::storage::{OffchainOverlayedChange,OffchainOverlayedChanges}; +use sp_core::ChangesTrieConfiguration; +use sp_core::offchain::storage::{OffchainOverlayedChange, OffchainOverlayedChanges}; use sp_core::storage::{well_known_keys, ChildInfo}; -use sp_runtime::{ - generic::BlockId, Justification, Storage, - BuildStorage, -}; +use sp_runtime::{generic::BlockId, Justification, Storage}; use sp_runtime::traits::{ Block as BlockT, Header as HeaderT, NumberFor, Zero, One, SaturatedConversion, HashFor, }; -use sc_executor::RuntimeInfo; use sp_state_machine::{ DBValue, ChangesTrieTransaction, ChangesTrieCacheAction, UsageInfo as StateUsageInfo, StorageCollection, ChildStorageCollection, @@ -83,13 +79,11 @@ use sp_state_machine::{ }; use crate::utils::{DatabaseType, Meta, meta_keys, read_db, read_meta}; use crate::changes_tries_storage::{DbChangesTrieStorage, DbChangesTrieStorageTransaction}; -use sc_client::leaves::{LeafSet, FinalizationDisplaced}; use sc_state_db::StateDb; use sp_blockchain::{CachedHeaderMetadata, HeaderMetadata, HeaderMetadataCache}; use crate::storage_cache::{CachingState, SyncingCachingState, SharedCache, new_shared_cache}; use crate::stats::StateUsageStats; use log::{trace, debug, warn}; -use prometheus_endpoint::Registry; // Re-export the Database trait so that one can pass an implementation of it. pub use sp_database::Database; @@ -98,7 +92,6 @@ pub use sc_state_db::PruningMode; #[cfg(any(feature = "kvdb-rocksdb", test))] pub use bench::BenchmarkingState; -const CANONICALIZATION_DELAY: u64 = 4096; const MIN_BLOCKS_TO_KEEP_CHANGES_TRIES_FOR: u32 = 32768; /// Default value for storage cache child ratio. @@ -324,49 +317,6 @@ impl DatabaseSettingsSrc { } } -/// Create an instance of db-backed client. -pub fn new_client( - settings: DatabaseSettings, - executor: E, - genesis_storage: &dyn BuildStorage, - fork_blocks: ForkBlocks, - bad_blocks: BadBlocks, - execution_extensions: ExecutionExtensions, - spawn_handle: Box, - prometheus_registry: Option, - config: sc_client::ClientConfig, -) -> Result<( - sc_client::Client< - Backend, - sc_client::LocalCallExecutor, E>, - Block, - RA, - >, - Arc>, - ), - sp_blockchain::Error, -> - where - Block: BlockT, - E: CodeExecutor + RuntimeInfo, -{ - let backend = Arc::new(Backend::new(settings, CANONICALIZATION_DELAY)?); - let executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, spawn_handle, config.clone()); - Ok(( - sc_client::Client::new( - backend.clone(), - executor, - genesis_storage, - fork_blocks, - bad_blocks, - execution_extensions, - prometheus_registry, - config, - )?, - backend, - )) -} - pub(crate) mod columns { pub const META: u32 = crate::utils::COLUMN_META; pub const STATE: u32 = 1; @@ -446,14 +396,14 @@ impl BlockchainDb { } } -impl sc_client::blockchain::HeaderBackend for BlockchainDb { +impl sc_client_api::blockchain::HeaderBackend for BlockchainDb { fn header(&self, id: BlockId) -> ClientResult> { utils::read_header(&*self.db, columns::KEY_LOOKUP, columns::HEADER, id) } - fn info(&self) -> sc_client::blockchain::Info { + fn info(&self) -> sc_client_api::blockchain::Info { let meta = self.meta.read(); - sc_client::blockchain::Info { + sc_client_api::blockchain::Info { best_hash: meta.best_hash, best_number: meta.best_number, genesis_hash: meta.genesis_hash, @@ -463,7 +413,7 @@ impl sc_client::blockchain::HeaderBackend for BlockchainDb } } - fn status(&self, id: BlockId) -> ClientResult { + fn status(&self, id: BlockId) -> ClientResult { let exists = match id { BlockId::Hash(_) => read_db( &*self.db, @@ -474,8 +424,8 @@ impl sc_client::blockchain::HeaderBackend for BlockchainDb BlockId::Number(n) => n <= self.meta.read().best_number, }; match exists { - true => Ok(sc_client::blockchain::BlockStatus::InChain), - false => Ok(sc_client::blockchain::BlockStatus::Unknown), + true => Ok(sc_client_api::blockchain::BlockStatus::InChain), + false => Ok(sc_client_api::blockchain::BlockStatus::Unknown), } } @@ -491,7 +441,7 @@ impl sc_client::blockchain::HeaderBackend for BlockchainDb } } -impl sc_client::blockchain::Backend for BlockchainDb { +impl sc_client_api::blockchain::Backend for BlockchainDb { fn body(&self, id: BlockId) -> ClientResult>> { match read_db(&*self.db, columns::KEY_LOOKUP, columns::BODY, id)? { Some(body) => match Decode::decode(&mut &body[..]) { @@ -520,7 +470,7 @@ impl sc_client::blockchain::Backend for BlockchainDb Option>> { + fn cache(&self) -> Option>> { None } @@ -533,8 +483,8 @@ impl sc_client::blockchain::Backend for BlockchainDb sc_client::blockchain::ProvideCache for BlockchainDb { - fn cache(&self) -> Option>> { +impl sc_client_api::blockchain::ProvideCache for BlockchainDb { + fn cache(&self) -> Option>> { None } } @@ -1035,7 +985,7 @@ impl Backend { let hash = if new_canonical == number_u64 { hash } else { - ::sc_client::blockchain::HeaderBackend::hash(&self.blockchain, new_canonical.saturated_into())? + ::sc_client_api::blockchain::HeaderBackend::hash(&self.blockchain, new_canonical.saturated_into())? .expect("existence of block with number `new_canonical` \ implies existence of blocks with all numbers before it; qed") }; @@ -1259,7 +1209,7 @@ impl Backend { }; let cache_update = if let Some(set_head) = operation.set_head { - if let Some(header) = sc_client::blockchain::HeaderBackend::header(&self.blockchain, set_head)? { + if let Some(header) = sc_client_api::blockchain::HeaderBackend::header(&self.blockchain, set_head)? { let number = header.number(); let hash = header.hash(); @@ -1604,7 +1554,7 @@ impl sc_client_api::backend::Backend for Backend { } fn state_at(&self, block: BlockId) -> ClientResult { - use sc_client::blockchain::HeaderBackend as BcHeaderBackend; + use sc_client_api::blockchain::HeaderBackend as BcHeaderBackend; // special case for genesis initialization match block { @@ -1705,7 +1655,7 @@ pub(crate) mod tests { use crate::columns; use sp_core::H256; use sc_client_api::backend::{Backend as BTrait, BlockImportOperation as Op}; - use sc_client::blockchain::Backend as BLBTrait; + use sc_client_api::blockchain::Backend as BLBTrait; use sp_runtime::testing::{Header, Block as RawBlock, ExtrinsicWrapper}; use sp_runtime::traits::{Hash, BlakeTwo256}; use sp_runtime::generic::DigestItem; @@ -2284,7 +2234,7 @@ pub(crate) mod tests { #[test] fn test_finalize_block_with_justification() { - use sc_client::blockchain::{Backend as BlockChainBackend}; + use sc_client_api::blockchain::{Backend as BlockChainBackend}; let backend = Backend::::new_test(10, 10); diff --git a/client/db/src/light.rs b/client/db/src/light.rs index c87388a9546..edc7f8fc552 100644 --- a/client/db/src/light.rs +++ b/client/db/src/light.rs @@ -20,11 +20,13 @@ use std::{sync::Arc, collections::HashMap}; use std::convert::TryInto; use parking_lot::RwLock; -use sc_client_api::{backend::{AuxStore, NewBlockState}, UsageInfo}; -use sc_client::blockchain::{ - BlockStatus, Cache as BlockchainCache,Info as BlockchainInfo, +use sc_client_api::{ + cht, backend::{AuxStore, NewBlockState}, UsageInfo, + blockchain::{ + BlockStatus, Cache as BlockchainCache, Info as BlockchainInfo, + }, + Storage }; -use sc_client::cht; use sp_blockchain::{ CachedHeaderMetadata, HeaderMetadata, HeaderMetadataCache, Error as ClientError, Result as ClientResult, @@ -32,7 +34,6 @@ use sp_blockchain::{ well_known_cache_keys, }; use sp_database::{Database, Transaction}; -use sc_client::light::blockchain::Storage as LightBlockchainStorage; use codec::{Decode, Encode}; use sp_runtime::generic::{DigestItem, BlockId}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Zero, One, NumberFor, HashFor}; @@ -406,7 +407,7 @@ impl AuxStore for LightStorage } } -impl LightBlockchainStorage for LightStorage +impl Storage for LightStorage where Block: BlockT, { fn import_header( @@ -614,7 +615,7 @@ fn cht_key>(cht_type: u8, block: N) -> ClientResult<[u8; 5]> { #[cfg(test)] pub(crate) mod tests { - use sc_client::cht; + use sc_client_api::cht; use sp_core::ChangesTrieConfiguration; use sp_runtime::generic::{DigestItem, ChangesTrieSignal}; use sp_runtime::testing::{H256 as Hash, Header, Block as RawBlock, ExtrinsicWrapper}; diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index 7c0b95a6f07..a634595ed3e 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -26,13 +26,13 @@ sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } sc-keystore = { version = "2.0.0-dev", path = "../keystore" } serde_json = "1.0.41" sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-client = { version = "0.8.0-dev", path = "../" } sp-inherents = { version = "2.0.0-dev", path = "../../primitives/inherents" } sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } sc-network = { version = "0.8.0-dev", path = "../network" } diff --git a/client/finality-grandpa/src/environment.rs b/client/finality-grandpa/src/environment.rs index d3bbc1adb3c..cab212333c7 100644 --- a/client/finality-grandpa/src/environment.rs +++ b/client/finality-grandpa/src/environment.rs @@ -28,8 +28,7 @@ use parking_lot::RwLock; use sp_blockchain::{HeaderBackend, Error as ClientError, HeaderMetadata}; use std::marker::PhantomData; -use sc_client_api::{backend::Backend, utils::is_descendent_of}; -use sc_client::apply_aux; +use sc_client_api::{backend::{Backend, apply_aux}, utils::is_descendent_of}; use finality_grandpa::{ BlockNumberOps, Equivocation, Error as GrandpaError, round::State as RoundState, voter, voter_set::VoterSet, diff --git a/client/finality-grandpa/src/finality_proof.rs b/client/finality-grandpa/src/finality_proof.rs index 2c85839b5e3..4035854a380 100644 --- a/client/finality-grandpa/src/finality_proof.rs +++ b/client/finality-grandpa/src/finality_proof.rs @@ -596,7 +596,7 @@ impl ProvableJustification for GrandpaJustificatio pub(crate) mod tests { use substrate_test_runtime_client::runtime::{Block, Header, H256}; use sc_client_api::NewBlockState; - use substrate_test_runtime_client::sc_client::in_mem::Blockchain as InMemoryBlockchain; + use sc_client_api::in_mem::Blockchain as InMemoryBlockchain; use super::*; use sp_core::crypto::Public; diff --git a/client/finality-grandpa/src/light_import.rs b/client/finality-grandpa/src/light_import.rs index 276f5d0f28d..dd80dd82743 100644 --- a/client/finality-grandpa/src/light_import.rs +++ b/client/finality-grandpa/src/light_import.rs @@ -567,7 +567,7 @@ pub mod tests { use sp_consensus::{ForkChoiceStrategy, BlockImport}; use sp_finality_grandpa::AuthorityId; use sp_core::{H256, crypto::Public}; - use substrate_test_runtime_client::sc_client::in_mem::Blockchain as InMemoryAuxStore; + use sc_client_api::in_mem::Blockchain as InMemoryAuxStore; use substrate_test_runtime_client::runtime::{Block, Header}; use crate::tests::TestApi; use crate::finality_proof::tests::TestJustification; diff --git a/client/finality-grandpa/src/tests.rs b/client/finality-grandpa/src/tests.rs index d7d1d1e48d3..2821737c4d4 100644 --- a/client/finality-grandpa/src/tests.rs +++ b/client/finality-grandpa/src/tests.rs @@ -27,7 +27,6 @@ use parking_lot::Mutex; use futures_timer::Delay; use tokio::runtime::{Runtime, Handle}; use sp_keyring::Ed25519Keyring; -use sc_client::LongestChain; use sc_client_api::backend::TransactionFor; use sp_blockchain::Result; use sp_api::{ApiRef, StorageProof, ProvideRuntimeApi}; @@ -50,6 +49,7 @@ use finality_proof::{ }; use consensus_changes::ConsensusChanges; use sc_block_builder::BlockBuilderProvider; +use sc_consensus::LongestChain; type PeerData = Mutex< diff --git a/client/informant/src/lib.rs b/client/informant/src/lib.rs index 66d5ed41fb5..090282a9820 100644 --- a/client/informant/src/lib.rs +++ b/client/informant/src/lib.rs @@ -17,7 +17,7 @@ //! Console informant. Prints sync progress and block events. Runs on the calling thread. use ansi_term::Colour; -use sc_client_api::BlockchainEvents; +use sc_client_api::{BlockchainEvents, UsageProvider}; use futures::prelude::*; use log::{info, warn, trace}; use sp_runtime::traits::Header; diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 9e5aa51a991..56a4bda2b23 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -42,7 +42,6 @@ prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0. prost = "0.6.1" rand = "0.7.2" sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -sc-client = { version = "0.8.0-dev", path = "../" } sc-client-api = { version = "2.0.0-dev", path = "../api" } sc-peerset = { version = "2.0.0-dev", path = "../peerset" } serde = { version = "1.0.101", features = ["derive"] } diff --git a/client/network/src/protocol/light_client_handler.rs b/client/network/src/protocol/light_client_handler.rs index f4e877d675e..2de6f56e2bb 100644 --- a/client/network/src/protocol/light_client_handler.rs +++ b/client/network/src/protocol/light_client_handler.rs @@ -54,8 +54,13 @@ use libp2p::{ }; use nohash_hasher::IntMap; use prost::Message; -use sc_client::light::fetcher; -use sc_client_api::StorageProof; +use sc_client_api::{ + StorageProof, + light::{ + self, RemoteReadRequest, RemoteBodyRequest, ChangesProof, + RemoteCallRequest, RemoteChangesRequest, RemoteHeaderRequest, + } +}; use sc_peerset::ReputationChange; use sp_core::{ storage::{ChildInfo, ChildType,StorageKey, PrefixedStorageKey}, @@ -193,27 +198,27 @@ pub enum Error { #[derive(Debug)] pub enum Request { Body { - request: fetcher::RemoteBodyRequest, + request: RemoteBodyRequest, sender: oneshot::Sender, ClientError>> }, Header { - request: fetcher::RemoteHeaderRequest, + request: light::RemoteHeaderRequest, sender: oneshot::Sender> }, Read { - request: fetcher::RemoteReadRequest, + request: light::RemoteReadRequest, sender: oneshot::Sender, Option>>, ClientError>> }, ReadChild { - request: fetcher::RemoteReadChildRequest, + request: light::RemoteReadChildRequest, sender: oneshot::Sender, Option>>, ClientError>> }, Call { - request: fetcher::RemoteCallRequest, + request: light::RemoteCallRequest, sender: oneshot::Sender, ClientError>> }, Changes { - request: fetcher::RemoteChangesRequest, + request: light::RemoteChangesRequest, sender: oneshot::Sender, u32)>, ClientError>> } } @@ -283,7 +288,7 @@ pub struct LightClientHandler { /// Blockchain client. chain: Arc>, /// Verifies that received responses are correct. - checker: Arc>, + checker: Arc>, /// Peer information (addresses, their best block, etc.) peers: HashMap>, /// Futures sending back response to remote clients. @@ -306,7 +311,7 @@ where pub fn new( cfg: Config, chain: Arc>, - checker: Arc>, + checker: Arc>, peerset: sc_peerset::PeersetHandle, ) -> Self { LightClientHandler { @@ -471,7 +476,7 @@ where } r }; - let reply = self.checker.check_changes_proof(&request, fetcher::ChangesProof { + let reply = self.checker.check_changes_proof(&request, light::ChangesProof { max_block, proof: response.proof, roots, @@ -712,7 +717,7 @@ where request.last, error); - fetcher::ChangesProof:: { + light::ChangesProof:: { max_block: Zero::zero(), proof: Vec::new(), roots: BTreeMap::new(), @@ -1289,6 +1294,7 @@ fn fmt_keys(first: Option<&Vec>, last: Option<&Vec>) -> String { #[cfg(test)] mod tests { + use super::*; use async_std::task; use assert_matches::assert_matches; use codec::Encode; @@ -1313,8 +1319,7 @@ mod tests { swarm::{NetworkBehaviour, NetworkBehaviourAction, PollParameters}, yamux }; - use sc_client_api::StorageProof; - use sc_client::light::fetcher; + use sc_client_api::{StorageProof, RemoteReadChildRequest, FetchChecker}; use sp_blockchain::{Error as ClientError}; use sp_core::storage::ChildInfo; use std::{ @@ -1358,12 +1363,12 @@ mod tests { _mark: std::marker::PhantomData } - impl fetcher::FetchChecker for DummyFetchChecker { + impl light::FetchChecker for DummyFetchChecker { fn check_header_proof( &self, - _request: &fetcher::RemoteHeaderRequest, + _request: &RemoteHeaderRequest, header: Option, - _remote_proof: fetcher::StorageProof, + _remote_proof: StorageProof, ) -> Result { match self.ok { true if header.is_some() => Ok(header.unwrap()), @@ -1373,8 +1378,8 @@ mod tests { fn check_read_proof( &self, - request: &fetcher::RemoteReadRequest, - _: fetcher::StorageProof, + request: &RemoteReadRequest, + _: StorageProof, ) -> Result, Option>>, ClientError> { match self.ok { true => Ok(request.keys @@ -1389,8 +1394,8 @@ mod tests { fn check_read_child_proof( &self, - request: &fetcher::RemoteReadChildRequest, - _: fetcher::StorageProof, + request: &RemoteReadChildRequest, + _: StorageProof, ) -> Result, Option>>, ClientError> { match self.ok { true => Ok(request.keys @@ -1405,8 +1410,8 @@ mod tests { fn check_execution_proof( &self, - _: &fetcher::RemoteCallRequest, - _: fetcher::StorageProof, + _: &RemoteCallRequest, + _: StorageProof, ) -> Result, ClientError> { match self.ok { true => Ok(vec![42]), @@ -1416,8 +1421,8 @@ mod tests { fn check_changes_proof( &self, - _: &fetcher::RemoteChangesRequest, - _: fetcher::ChangesProof + _: &RemoteChangesRequest, + _: ChangesProof ) -> Result, u32)>, ClientError> { match self.ok { true => Ok(vec![(100.into(), 2)]), @@ -1427,7 +1432,7 @@ mod tests { fn check_body_proof( &self, - _: &fetcher::RemoteBodyRequest, + _: &RemoteBodyRequest, body: Vec ) -> Result, ClientError> { match self.ok { @@ -1545,7 +1550,7 @@ mod tests { // Issue our first request! let chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1602,7 +1607,7 @@ mod tests { assert_eq!(1, behaviour.peers.len()); let chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1677,7 +1682,7 @@ mod tests { assert_eq!(1, behaviour.peers.len()); let chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1736,7 +1741,7 @@ mod tests { assert_eq!(4, behaviour.peers.len()); let mut chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1852,7 +1857,7 @@ mod tests { #[test] fn receives_remote_call_response() { let mut chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1866,7 +1871,7 @@ mod tests { #[test] fn receives_remote_read_response() { let mut chan = oneshot::channel(); - let request = fetcher::RemoteReadRequest { + let request = light::RemoteReadRequest { header: dummy_header(), block: Default::default(), keys: vec![b":key".to_vec()], @@ -1880,7 +1885,7 @@ mod tests { fn receives_remote_read_child_response() { let mut chan = oneshot::channel(); let child_info = ChildInfo::new_default(&b":child_storage:default:sub"[..]); - let request = fetcher::RemoteReadChildRequest { + let request = light::RemoteReadChildRequest { header: dummy_header(), block: Default::default(), storage_key: child_info.prefixed_storage_key(), @@ -1894,7 +1899,7 @@ mod tests { #[test] fn receives_remote_header_response() { let mut chan = oneshot::channel(); - let request = fetcher::RemoteHeaderRequest { + let request = light::RemoteHeaderRequest { cht_root: Default::default(), block: 1, retry_count: None, @@ -1906,7 +1911,7 @@ mod tests { #[test] fn receives_remote_changes_response() { let mut chan = oneshot::channel(); - let request = fetcher::RemoteChangesRequest { + let request = light::RemoteChangesRequest { changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { zero: (0, Default::default()), end: None, @@ -1951,7 +1956,7 @@ mod tests { #[test] fn send_receive_call() { let chan = oneshot::channel(); - let request = fetcher::RemoteCallRequest { + let request = light::RemoteCallRequest { block: Default::default(), header: dummy_header(), method: "test".into(), @@ -1966,7 +1971,7 @@ mod tests { #[test] fn send_receive_read() { let chan = oneshot::channel(); - let request = fetcher::RemoteReadRequest { + let request = light::RemoteReadRequest { header: dummy_header(), block: Default::default(), keys: vec![b":key".to_vec()], @@ -1981,7 +1986,7 @@ mod tests { fn send_receive_read_child() { let chan = oneshot::channel(); let child_info = ChildInfo::new_default(&b":child_storage:default:sub"[..]); - let request = fetcher::RemoteReadChildRequest { + let request = light::RemoteReadChildRequest { header: dummy_header(), block: Default::default(), storage_key: child_info.prefixed_storage_key(), @@ -1997,7 +2002,7 @@ mod tests { fn send_receive_header() { let _ = env_logger::try_init(); let chan = oneshot::channel(); - let request = fetcher::RemoteHeaderRequest { + let request = light::RemoteHeaderRequest { cht_root: Default::default(), block: 1, retry_count: None, @@ -2010,7 +2015,7 @@ mod tests { #[test] fn send_receive_changes() { let chan = oneshot::channel(); - let request = fetcher::RemoteChangesRequest { + let request = light::RemoteChangesRequest { changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { zero: (0, Default::default()), end: None, diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 08d0e90871d..154694c692a 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -21,7 +21,7 @@ futures-timer = "3.0.1" rand = "0.7.2" libp2p = { version = "0.18.1", default-features = false, features = ["libp2p-websocket"] } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-client = { version = "0.8.0-dev", path = "../../" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } sc-client-api = { version = "2.0.0-dev", path = "../../api" } sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } @@ -32,3 +32,4 @@ env_logger = "0.7.0" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } tempfile = "3.1.0" +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } diff --git a/client/network/test/src/lib.rs b/client/network/test/src/lib.rs index 40b373163b5..5be5de9078e 100644 --- a/client/network/test/src/lib.rs +++ b/client/network/test/src/lib.rs @@ -27,12 +27,16 @@ use libp2p::build_multiaddr; use log::trace; use sc_network::config::FinalityProofProvider; use sp_blockchain::{ - Result as ClientResult, well_known_cache_keys::{self, Id as CacheKeyId}, Info as BlockchainInfo, + HeaderBackend, Result as ClientResult, + well_known_cache_keys::{self, Id as CacheKeyId}, + Info as BlockchainInfo, }; -use sc_client_api::{BlockchainEvents, BlockImportNotification, FinalityNotifications, ImportNotifications, FinalityNotification, backend::{TransactionFor, AuxStore, Backend, Finalizer}, BlockBackend}; +use sc_client_api::{ + BlockchainEvents, BlockImportNotification, FinalityNotifications, ImportNotifications, FinalityNotification, + backend::{TransactionFor, AuxStore, Backend, Finalizer}, BlockBackend, +}; +use sc_consensus::LongestChain; use sc_block_builder::{BlockBuilder, BlockBuilderProvider}; -use sc_client::LongestChain; -use sc_client::blockchain::HeaderBackend; use sc_network::config::Role; use sp_consensus::block_validation::DefaultBlockAnnounceValidator; use sp_consensus::import_queue::{ @@ -52,7 +56,7 @@ use sp_runtime::generic::{BlockId, OpaqueDigestItemId}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT, NumberFor}; use sp_runtime::Justification; use substrate_test_runtime_client::{self, AccountKeyring}; - +use sc_service::client::Client; pub use sc_network::config::EmptyTransactionPool; pub use substrate_test_runtime_client::runtime::{Block, Extrinsic, Hash, Transfer}; pub use substrate_test_runtime_client::{TestClient, TestClientBuilder, TestClientBuilderExt}; @@ -88,10 +92,18 @@ impl Verifier for PassThroughVerifier { } } -pub type PeersFullClient = - sc_client::Client; -pub type PeersLightClient = - sc_client::Client; +pub type PeersFullClient = Client< + substrate_test_runtime_client::Backend, + substrate_test_runtime_client::Executor, + Block, + substrate_test_runtime_client::runtime::RuntimeApi +>; +pub type PeersLightClient = Client< + substrate_test_runtime_client::LightBackend, + substrate_test_runtime_client::LightExecutor, + Block, + substrate_test_runtime_client::runtime::RuntimeApi +>; #[derive(Clone)] pub enum PeersClient { diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml index e6aff8a5f8f..66f7cb50e6d 100644 --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -14,7 +14,6 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sc-rpc-api = { version = "0.8.0-dev", path = "../rpc-api" } sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-client = { version = "0.8.0-dev", path = "../" } sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = { version = "0.3.1", features = ["compat"] } diff --git a/client/rpc/src/chain/chain_light.rs b/client/rpc/src/chain/chain_light.rs index b258c8dd3bc..059233089d0 100644 --- a/client/rpc/src/chain/chain_light.rs +++ b/client/rpc/src/chain/chain_light.rs @@ -21,9 +21,7 @@ use futures::{future::ready, FutureExt, TryFutureExt}; use rpc::futures::future::{result, Future, Either}; use sc_rpc_api::Subscriptions; -use sc_client::{ - light::{fetcher::{Fetcher, RemoteBodyRequest}, blockchain::RemoteBlockchain}, -}; +use sc_client_api::light::{Fetcher, RemoteBodyRequest, RemoteBlockchain}; use sp_runtime::{ generic::{BlockId, SignedBlock}, traits::{Block as BlockT}, @@ -80,7 +78,7 @@ impl ChainBackend for LightChain + Send>>; @@ -111,7 +112,7 @@ pub type TFullClient = Client< pub type TFullBackend = sc_client_db::Backend; /// Full client call executor type. -pub type TFullCallExecutor = sc_client::LocalCallExecutor< +pub type TFullCallExecutor = crate::client::LocalCallExecutor< sc_client_db::Backend, NativeExecutor, >; @@ -125,19 +126,19 @@ pub type TLightClient = Client< >; /// Light client backend type. -pub type TLightBackend = sc_client::light::backend::Backend< +pub type TLightBackend = crate::client::light::backend::Backend< sc_client_db::light::LightStorage, HashFor, >; /// Light call executor type. -pub type TLightCallExecutor = sc_client::light::call_executor::GenesisCallExecutor< - sc_client::light::backend::Backend< +pub type TLightCallExecutor = crate::client::light::call_executor::GenesisCallExecutor< + crate::client::light::backend::Backend< sc_client_db::light::LightStorage, HashFor >, - sc_client::LocalCallExecutor< - sc_client::light::backend::Backend< + crate::client::LocalCallExecutor< + crate::client::light::backend::Backend< sc_client_db::light::LightStorage, HashFor >, @@ -188,11 +189,11 @@ fn new_full_parts( ); let chain_spec = &config.chain_spec; - let fork_blocks = get_extension::>(chain_spec.extensions()) + let fork_blocks = get_extension::>(chain_spec.extensions()) .cloned() .unwrap_or_default(); - let bad_blocks = get_extension::>(chain_spec.extensions()) + let bad_blocks = get_extension::>(chain_spec.extensions()) .cloned() .unwrap_or_default(); @@ -210,7 +211,7 @@ fn new_full_parts( Some(keystore.clone()), ); - sc_client_db::new_client( + new_client( db_config, executor, chain_spec.as_storage_builder(), @@ -229,6 +230,52 @@ fn new_full_parts( Ok((client, backend, keystore, task_manager)) } + +/// Create an instance of db-backed client. +pub fn new_client( + settings: DatabaseSettings, + executor: E, + genesis_storage: &dyn BuildStorage, + fork_blocks: ForkBlocks, + bad_blocks: BadBlocks, + execution_extensions: ExecutionExtensions, + spawn_handle: Box, + prometheus_registry: Option, + config: ClientConfig, +) -> Result<( + crate::client::Client< + Backend, + crate::client::LocalCallExecutor, E>, + Block, + RA, + >, + Arc>, +), + sp_blockchain::Error, +> + where + Block: BlockT, + E: CodeExecutor + RuntimeInfo, +{ + const CANONICALIZATION_DELAY: u64 = 4096; + + let backend = Arc::new(Backend::new(settings, CANONICALIZATION_DELAY)?); + let executor = crate::client::LocalCallExecutor::new(backend.clone(), executor, spawn_handle, config.clone()); + Ok(( + crate::client::Client::new( + backend.clone(), + executor, + genesis_storage, + fork_blocks, + bad_blocks, + execution_extensions, + prometheus_registry, + config, + )?, + backend, + )) +} + impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { /// Start the service builder with a configuration. pub fn new_full( @@ -315,18 +362,18 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { }; sc_client_db::light::LightStorage::new(db_settings)? }; - let light_blockchain = sc_client::light::new_light_blockchain(db_storage); + let light_blockchain = crate::client::light::new_light_blockchain(db_storage); let fetch_checker = Arc::new( - sc_client::light::new_fetch_checker::<_, TBl, _>( + crate::client::light::new_fetch_checker::<_, TBl, _>( light_blockchain.clone(), executor.clone(), Box::new(task_manager.spawn_handle()), ), ); let fetcher = Arc::new(sc_network::config::OnDemand::new(fetch_checker)); - let backend = sc_client::light::new_light_backend(light_blockchain); + let backend = crate::client::light::new_light_backend(light_blockchain); let remote_blockchain = backend.remote_blockchain(); - let client = Arc::new(sc_client::light::new_light( + let client = Arc::new(crate::client::light::new_light( backend.clone(), config.chain_spec.as_storage_builder(), executor, @@ -601,7 +648,7 @@ impl sc_transaction_pool::txpool::Options, Arc, Option, - Option<&PrometheusRegistry>, + Option<&Registry>, ) -> Result<(UExPool, Option), Error> ) -> Result, Error> @@ -757,7 +804,7 @@ ServiceBuilder< TBl: BlockT, TRtApi: 'static + Send + Sync, TBackend: 'static + sc_client_api::backend::Backend + Send, - TExec: 'static + sc_client::CallExecutor + Send + Sync + Clone, + TExec: 'static + CallExecutor + Send + Sync + Clone, TSc: Clone, TImpQu: 'static + ImportQueue, TExPool: MaintainedTransactionPool::Hash> + MallocSizeOfWasm + 'static, diff --git a/client/service/src/chain_ops.rs b/client/service/src/chain_ops.rs index 12fae322410..59dbc8302c2 100644 --- a/client/service/src/chain_ops.rs +++ b/client/service/src/chain_ops.rs @@ -27,7 +27,7 @@ use sp_runtime::traits::{ }; use sp_runtime::generic::{BlockId, SignedBlock}; use codec::{Decode, Encode, IoReader}; -use sc_client::{Client, LocalCallExecutor}; +use crate::client::{Client, LocalCallExecutor}; use sp_consensus::{ BlockOrigin, import_queue::{IncomingBlock, Link, BlockImportError, BlockImportResult, ImportQueue}, diff --git a/client/src/block_rules.rs b/client/service/src/client/block_rules.rs similarity index 100% rename from client/src/block_rules.rs rename to client/service/src/client/block_rules.rs diff --git a/client/src/call_executor.rs b/client/service/src/client/call_executor.rs similarity index 99% rename from client/src/call_executor.rs rename to client/service/src/client/call_executor.rs index 88c5e204aa5..229e7478e93 100644 --- a/client/src/call_executor.rs +++ b/client/service/src/client/call_executor.rs @@ -28,7 +28,7 @@ use sp_externalities::Extensions; use sp_core::{NativeOrEncoded, NeverNativeValue, traits::CodeExecutor, offchain::storage::OffchainOverlayedChanges}; use sp_api::{ProofRecorder, InitializeBlock, StorageTransactionCache}; use sc_client_api::{backend, call_executor::CallExecutor, CloneableSpawn}; -use crate::client::ClientConfig; +use super::client::ClientConfig; /// Call executor that executes methods locally, querying all required /// data from local backend. diff --git a/client/src/client.rs b/client/service/src/client/client.rs similarity index 51% rename from client/src/client.rs rename to client/service/src/client/client.rs index f01c9176b8a..9758bbe01e7 100644 --- a/client/src/client.rs +++ b/client/service/src/client/client.rs @@ -17,8 +17,9 @@ //! Substrate Client use std::{ - marker::PhantomData, collections::{HashSet, BTreeMap, HashMap}, sync::Arc, panic::UnwindSafe, - result, + marker::PhantomData, + collections::{HashSet, BTreeMap, HashMap}, + sync::Arc, panic::UnwindSafe, result, }; use log::{info, trace, warn}; use parking_lot::{Mutex, RwLock}; @@ -33,8 +34,8 @@ use sp_runtime::{ Justification, BuildStorage, generic::{BlockId, SignedBlock, DigestItem}, traits::{ - Block as BlockT, Header as HeaderT, Zero, NumberFor, HashFor, SaturatedConversion, One, - DigestFor, + Block as BlockT, Header as HeaderT, Zero, NumberFor, + HashFor, SaturatedConversion, One, DigestFor, }, }; use sp_state_machine::{ @@ -44,57 +45,51 @@ use sp_state_machine::{ }; use sc_executor::{RuntimeVersion, RuntimeInfo}; use sp_consensus::{ - Error as ConsensusError, BlockStatus, BlockImportParams, BlockCheckParams, ImportResult, - BlockOrigin, ForkChoiceStrategy, SelectChain, RecordProof, + Error as ConsensusError, BlockStatus, BlockImportParams, BlockCheckParams, + ImportResult, BlockOrigin, ForkChoiceStrategy, RecordProof, }; -use sp_blockchain::{self as blockchain, +use sp_blockchain::{ + self as blockchain, Backend as ChainBackend, HeaderBackend as ChainHeaderBackend, ProvideCache, Cache, well_known_cache_keys::Id as CacheKeyId, HeaderMetadata, CachedHeaderMetadata, }; use sp_trie::StorageProof; - use sp_api::{ CallApiAt, ConstructRuntimeApi, Core as CoreApi, ApiExt, ApiRef, ProvideRuntimeApi, CallApiAtParams, }; use sc_block_builder::{BlockBuilderApi, BlockBuilderProvider}; - -pub use sc_client_api::{ - backend::{ - self, BlockImportOperation, PrunableStateChangesTrieStorage, - ClientImportOperation, Finalizer, ImportSummary, NewBlockState, - changes_tries_state_at_block, StorageProvider, - LockImportRun, - }, - client::{ - ImportNotifications, FinalityNotification, FinalityNotifications, BlockImportNotification, - ClientInfo, BlockchainEvents, BlockBackend, ProvideUncles, BadBlocks, ForkBlocks, - BlockOf, - }, - execution_extensions::{ExecutionExtensions, ExecutionStrategies}, - notifications::{StorageNotifications, StorageEventStream}, - CallExecutor, ExecutorProvider, ProofProvider, CloneableSpawn, -}; -use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender}; +use sc_client_api::{backend::{ + self, BlockImportOperation, PrunableStateChangesTrieStorage, + ClientImportOperation, Finalizer, ImportSummary, NewBlockState, + changes_tries_state_at_block, StorageProvider, + LockImportRun, apply_aux, +}, client::{ + ImportNotifications, FinalityNotification, FinalityNotifications, BlockImportNotification, + ClientInfo, BlockchainEvents, BlockBackend, ProvideUncles, BadBlocks, ForkBlocks, + BlockOf, +}, execution_extensions::ExecutionExtensions, notifications::{StorageNotifications, StorageEventStream}, KeyIterator, CallExecutor, ExecutorProvider, ProofProvider, CloneableSpawn, cht, in_mem, UsageProvider}; +use sp_utils::mpsc::tracing_unbounded; use sp_blockchain::Error; use prometheus_endpoint::Registry; - -use crate::{ - call_executor::LocalCallExecutor, +use super::{ + genesis, call_executor::LocalCallExecutor, light::{call_executor::prove_execution, fetcher::ChangesProof}, - in_mem, genesis, cht, block_rules::{BlockRules, LookupResult as BlockLookupResult}, + block_rules::{BlockRules, LookupResult as BlockLookupResult}, }; -use crate::client::backend::KeyIterator; +use futures::channel::mpsc; + +type NotificationSinks = Mutex>>; /// Substrate Client pub struct Client where Block: BlockT { backend: Arc, executor: E, storage_notifications: Mutex>, - import_notification_sinks: Mutex>>>, - finality_notification_sinks: Mutex>>>, + import_notification_sinks: NotificationSinks>, + finality_notification_sinks: NotificationSinks>, // holds the block hash currently being imported. TODO: replace this with block queue importing_block: RwLock>, block_rules: BlockRules, @@ -310,6 +305,18 @@ impl Client where }) } + /// returns a reference to the block import notification sinks + /// useful for test environments. + pub fn import_notification_sinks(&self) -> &NotificationSinks> { + &self.import_notification_sinks + } + + /// returns a reference to the finality notification sinks + /// useful for test environments. + pub fn finality_notification_sinks(&self) -> &NotificationSinks> { + &self.finality_notification_sinks + } + /// Get a reference to the state at a given block. pub fn state_at(&self, block: &BlockId) -> sp_blockchain::Result { self.backend.state_at(*block) @@ -1039,14 +1046,6 @@ impl Client where Ok(self.backend.revert(n, true)?) } - /// Get usage info about current client. - pub fn usage_info(&self) -> ClientInfo { - ClientInfo { - chain: self.chain_info(), - usage: self.backend.usage_info(), - } - } - /// Get blockchain info. pub fn chain_info(&self) -> blockchain::Info { self.backend.blockchain().info() @@ -1130,6 +1129,20 @@ impl Client where } } +impl UsageProvider for Client where + B: backend::Backend, + E: CallExecutor, + Block: BlockT, +{ + /// Get usage info about current client. + fn usage_info(&self) -> ClientInfo { + ClientInfo { + chain: self.chain_info(), + usage: self.backend.usage_info(), + } + } +} + impl ProofProvider for Client where B: backend::Backend, E: CallExecutor, @@ -1827,82 +1840,6 @@ where } } -/// Implement Longest Chain Select implementation -/// where 'longest' is defined as the highest number of blocks -pub struct LongestChain { - backend: Arc, - _phantom: PhantomData -} - -impl Clone for LongestChain { - fn clone(&self) -> Self { - let backend = self.backend.clone(); - LongestChain { - backend, - _phantom: Default::default() - } - } -} - -impl LongestChain -where - B: backend::Backend, - Block: BlockT, -{ - /// Instantiate a new LongestChain for Backend B - pub fn new(backend: Arc) -> Self { - LongestChain { - backend, - _phantom: Default::default() - } - } - - fn best_block_header(&self) -> sp_blockchain::Result<::Header> { - let info = self.backend.blockchain().info(); - let import_lock = self.backend.get_import_lock(); - let best_hash = self.backend - .blockchain() - .best_containing(info.best_hash, None, import_lock)? - .unwrap_or(info.best_hash); - - Ok(self.backend.blockchain().header(BlockId::Hash(best_hash))? - .expect("given block hash was fetched from block in db; qed")) - } - - fn leaves(&self) -> Result::Hash>, sp_blockchain::Error> { - self.backend.blockchain().leaves() - } -} - -impl SelectChain for LongestChain -where - B: backend::Backend, - Block: BlockT, -{ - - fn leaves(&self) -> Result::Hash>, ConsensusError> { - LongestChain::leaves(self) - .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) - } - - fn best_chain(&self) - -> Result<::Header, ConsensusError> - { - LongestChain::best_block_header(&self) - .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) - } - - fn finality_target( - &self, - target_hash: Block::Hash, - maybe_max_number: Option> - ) -> Result, ConsensusError> { - let import_lock = self.backend.get_import_lock(); - self.backend.blockchain().best_containing(target_hash, maybe_max_number, import_lock) - .map_err(|e| ConsensusError::ChainLookup(e.to_string()).into()) - } -} - impl BlockBackend for Client where B: backend::Backend, @@ -2006,26 +1943,6 @@ impl backend::AuxStore for &Client } } - -/// Helper function to apply auxiliary data insertion into an operation. -pub fn apply_aux<'a, 'b: 'a, 'c: 'a, B, Block, D, I>( - operation: &mut ClientImportOperation, - insert: I, - delete: D, -) -> sp_blockchain::Result<()> -where - Block: BlockT, - B: backend::Backend, - I: IntoIterator, - D: IntoIterator, -{ - operation.op.insert_aux( - insert.into_iter() - .map(|(k, v)| (k.to_vec(), Some(v.to_vec()))) - .chain(delete.into_iter().map(|k| (k.to_vec(), None))) - ) -} - impl sp_consensus::block_validation::Chain for Client where BE: backend::Backend, E: CallExecutor, @@ -2038,1556 +1955,3 @@ impl sp_consensus::block_validation::Chain for Client) } } - -#[cfg(test)] -pub(crate) mod tests { - use std::collections::HashMap; - use super::*; - use sp_core::{blake2_256, H256}; - use sp_runtime::DigestItem; - use sp_consensus::{BlockOrigin, SelectChain, BlockImport}; - use substrate_test_runtime_client::{ - prelude::*, - client_ext::ClientExt, - sc_client_db::{Backend, DatabaseSettings, DatabaseSettingsSrc, PruningMode}, - runtime::{self, Block, Transfer, RuntimeApi, TestAPI}, - }; - use hex_literal::hex; - - /// Returns tuple, consisting of: - /// 1) test client pre-filled with blocks changing balances; - /// 2) roots of changes tries for these blocks - /// 3) test cases in form (begin, end, key, vec![(block, extrinsic)]) that are required to pass - pub fn prepare_client_with_key_changes() -> ( - substrate_test_runtime_client::sc_client::Client, - Vec, - Vec<(u64, u64, Vec, Vec<(u64, u32)>)>, - ) { - // prepare block structure - let blocks_transfers = vec![ - vec![(AccountKeyring::Alice, AccountKeyring::Dave), (AccountKeyring::Bob, AccountKeyring::Dave)], - vec![(AccountKeyring::Charlie, AccountKeyring::Eve)], - vec![], - vec![(AccountKeyring::Alice, AccountKeyring::Dave)], - ]; - - // prepare client ang import blocks - let mut local_roots = Vec::new(); - let config = Some(ChangesTrieConfiguration::new(4, 2)); - let mut remote_client = TestClientBuilder::new().changes_trie_config(config).build(); - let mut nonces: HashMap<_, u64> = Default::default(); - for (i, block_transfers) in blocks_transfers.into_iter().enumerate() { - let mut builder = remote_client.new_block(Default::default()).unwrap(); - for (from, to) in block_transfers { - builder.push_transfer(Transfer { - from: from.into(), - to: to.into(), - amount: 1, - nonce: *nonces.entry(from).and_modify(|n| { *n = *n + 1 }).or_default(), - }).unwrap(); - } - let block = builder.build().unwrap().block; - remote_client.import(BlockOrigin::Own, block).unwrap(); - - let header = remote_client.header(&BlockId::Number(i as u64 + 1)).unwrap().unwrap(); - let trie_root = header.digest().log(DigestItem::as_changes_trie_root) - .map(|root| H256::from_slice(root.as_ref())) - .unwrap(); - local_roots.push(trie_root); - } - - // prepare test cases - let alice = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Alice.into())).to_vec(); - let bob = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Bob.into())).to_vec(); - let charlie = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Charlie.into())).to_vec(); - let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); - let eve = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Eve.into())).to_vec(); - let ferdie = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Ferdie.into())).to_vec(); - let test_cases = vec![ - (1, 4, alice.clone(), vec![(4, 0), (1, 0)]), - (1, 3, alice.clone(), vec![(1, 0)]), - (2, 4, alice.clone(), vec![(4, 0)]), - (2, 3, alice.clone(), vec![]), - - (1, 4, bob.clone(), vec![(1, 1)]), - (1, 1, bob.clone(), vec![(1, 1)]), - (2, 4, bob.clone(), vec![]), - - (1, 4, charlie.clone(), vec![(2, 0)]), - - (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), - (1, 1, dave.clone(), vec![(1, 1), (1, 0)]), - (3, 4, dave.clone(), vec![(4, 0)]), - - (1, 4, eve.clone(), vec![(2, 0)]), - (1, 1, eve.clone(), vec![]), - (3, 4, eve.clone(), vec![]), - - (1, 4, ferdie.clone(), vec![]), - ]; - - (remote_client, local_roots, test_cases) - } - - #[test] - fn client_initializes_from_genesis_ok() { - let client = substrate_test_runtime_client::new(); - - assert_eq!( - client.runtime_api().balance_of( - &BlockId::Number(client.chain_info().best_number), - AccountKeyring::Alice.into() - ).unwrap(), - 1000 - ); - assert_eq!( - client.runtime_api().balance_of( - &BlockId::Number(client.chain_info().best_number), - AccountKeyring::Ferdie.into() - ).unwrap(), - 0 - ); - } - - #[test] - fn block_builder_works_with_no_transactions() { - let mut client = substrate_test_runtime_client::new(); - - let block = client.new_block(Default::default()).unwrap().build().unwrap().block; - - client.import(BlockOrigin::Own, block).unwrap(); - - assert_eq!(client.chain_info().best_number, 1); - } - - #[test] - fn block_builder_works_with_transactions() { - let mut client = substrate_test_runtime_client::new(); - - let mut builder = client.new_block(Default::default()).unwrap(); - - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 42, - nonce: 0, - }).unwrap(); - - let block = builder.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - - assert_eq!(client.chain_info().best_number, 1); - assert_ne!( - client.state_at(&BlockId::Number(1)).unwrap().pairs(), - client.state_at(&BlockId::Number(0)).unwrap().pairs() - ); - assert_eq!( - client.runtime_api().balance_of( - &BlockId::Number(client.chain_info().best_number), - AccountKeyring::Alice.into() - ).unwrap(), - 958 - ); - assert_eq!( - client.runtime_api().balance_of( - &BlockId::Number(client.chain_info().best_number), - AccountKeyring::Ferdie.into() - ).unwrap(), - 42 - ); - } - - #[test] - fn block_builder_does_not_include_invalid() { - let mut client = substrate_test_runtime_client::new(); - - let mut builder = client.new_block(Default::default()).unwrap(); - - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 42, - nonce: 0, - }).unwrap(); - - assert!( - builder.push_transfer(Transfer { - from: AccountKeyring::Eve.into(), - to: AccountKeyring::Alice.into(), - amount: 42, - nonce: 0, - }).is_err() - ); - - let block = builder.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - - assert_eq!(client.chain_info().best_number, 1); - assert_ne!( - client.state_at(&BlockId::Number(1)).unwrap().pairs(), - client.state_at(&BlockId::Number(0)).unwrap().pairs() - ); - assert_eq!(client.body(&BlockId::Number(1)).unwrap().unwrap().len(), 1) - } - - #[test] - fn best_containing_with_genesis_block() { - // block tree: - // G - - let (client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); - - let genesis_hash = client.chain_info().genesis_hash; - - assert_eq!( - genesis_hash.clone(), - longest_chain_select.finality_target(genesis_hash.clone(), None).unwrap().unwrap() - ); - } - - #[test] - fn best_containing_with_hash_not_found() { - // block tree: - // G - - let (client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); - - let uninserted_block = client.new_block(Default::default()).unwrap().build().unwrap().block; - - assert_eq!( - None, - longest_chain_select.finality_target(uninserted_block.hash().clone(), None).unwrap() - ); - } - - #[test] - fn uncles_with_only_ancestors() { - // block tree: - // G -> A1 -> A2 - let mut client = substrate_test_runtime_client::new(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - let v: Vec = Vec::new(); - assert_eq!(v, client.uncles(a2.hash(), 3).unwrap()); - } - - #[test] - fn uncles_with_multiple_forks() { - // block tree: - // G -> A1 -> A2 -> A3 -> A4 -> A5 - // A1 -> B2 -> B3 -> B4 - // B2 -> C3 - // A1 -> D2 - let mut client = substrate_test_runtime_client::new(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - // A2 -> A3 - let a3 = client.new_block_at( - &BlockId::Hash(a2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a3.clone()).unwrap(); - - // A3 -> A4 - let a4 = client.new_block_at( - &BlockId::Hash(a3.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a4.clone()).unwrap(); - - // A4 -> A5 - let a5 = client.new_block_at( - &BlockId::Hash(a4.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a5.clone()).unwrap(); - - // A1 -> B2 - let mut builder = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise B2 has the same hash as A2 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 41, - nonce: 0, - }).unwrap(); - let b2 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, b2.clone()).unwrap(); - - // B2 -> B3 - let b3 = client.new_block_at( - &BlockId::Hash(b2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b3.clone()).unwrap(); - - // B3 -> B4 - let b4 = client.new_block_at( - &BlockId::Hash(b3.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b4.clone()).unwrap(); - - // // B2 -> C3 - let mut builder = client.new_block_at( - &BlockId::Hash(b2.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise C3 has the same hash as B3 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 1, - }).unwrap(); - let c3 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, c3.clone()).unwrap(); - - // A1 -> D2 - let mut builder = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise D2 has the same hash as B2 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - let d2 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, d2.clone()).unwrap(); - - let genesis_hash = client.chain_info().genesis_hash; - - let uncles1 = client.uncles(a4.hash(), 10).unwrap(); - assert_eq!(vec![b2.hash(), d2.hash()], uncles1); - - let uncles2 = client.uncles(a4.hash(), 0).unwrap(); - assert_eq!(0, uncles2.len()); - - let uncles3 = client.uncles(a1.hash(), 10).unwrap(); - assert_eq!(0, uncles3.len()); - - let uncles4 = client.uncles(genesis_hash, 10).unwrap(); - assert_eq!(0, uncles4.len()); - - let uncles5 = client.uncles(d2.hash(), 10).unwrap(); - assert_eq!(vec![a2.hash(), b2.hash()], uncles5); - - let uncles6 = client.uncles(b3.hash(), 1).unwrap(); - assert_eq!(vec![c3.hash()], uncles6); - } - - #[test] - fn best_containing_on_longest_chain_with_single_chain_3_blocks() { - // block tree: - // G -> A1 -> A2 - - let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - let genesis_hash = client.chain_info().genesis_hash; - - assert_eq!(a2.hash(), longest_chain_select.finality_target(genesis_hash, None).unwrap().unwrap()); - assert_eq!(a2.hash(), longest_chain_select.finality_target(a1.hash(), None).unwrap().unwrap()); - assert_eq!(a2.hash(), longest_chain_select.finality_target(a2.hash(), None).unwrap().unwrap()); - } - - #[test] - fn best_containing_on_longest_chain_with_multiple_forks() { - // block tree: - // G -> A1 -> A2 -> A3 -> A4 -> A5 - // A1 -> B2 -> B3 -> B4 - // B2 -> C3 - // A1 -> D2 - let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - // A2 -> A3 - let a3 = client.new_block_at( - &BlockId::Hash(a2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a3.clone()).unwrap(); - - // A3 -> A4 - let a4 = client.new_block_at( - &BlockId::Hash(a3.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a4.clone()).unwrap(); - - // A4 -> A5 - let a5 = client.new_block_at( - &BlockId::Hash(a4.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a5.clone()).unwrap(); - - // A1 -> B2 - let mut builder = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise B2 has the same hash as A2 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 41, - nonce: 0, - }).unwrap(); - let b2 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, b2.clone()).unwrap(); - - // B2 -> B3 - let b3 = client.new_block_at( - &BlockId::Hash(b2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b3.clone()).unwrap(); - - // B3 -> B4 - let b4 = client.new_block_at( - &BlockId::Hash(b3.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b4.clone()).unwrap(); - - // // B2 -> C3 - let mut builder = client.new_block_at( - &BlockId::Hash(b2.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise C3 has the same hash as B3 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 1, - }).unwrap(); - let c3 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, c3.clone()).unwrap(); - - // A1 -> D2 - let mut builder = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap(); - // this push is required as otherwise D2 has the same hash as B2 and won't get imported - builder.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - let d2 = builder.build().unwrap().block; - client.import(BlockOrigin::Own, d2.clone()).unwrap(); - - assert_eq!(client.chain_info().best_hash, a5.hash()); - - let genesis_hash = client.chain_info().genesis_hash; - let leaves = longest_chain_select.leaves().unwrap(); - - assert!(leaves.contains(&a5.hash())); - assert!(leaves.contains(&b4.hash())); - assert!(leaves.contains(&c3.hash())); - assert!(leaves.contains(&d2.hash())); - assert_eq!(leaves.len(), 4); - - // search without restriction - - assert_eq!(a5.hash(), longest_chain_select.finality_target( - genesis_hash, None).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a1.hash(), None).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a2.hash(), None).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a3.hash(), None).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a4.hash(), None).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a5.hash(), None).unwrap().unwrap()); - - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b2.hash(), None).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b3.hash(), None).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b4.hash(), None).unwrap().unwrap()); - - assert_eq!(c3.hash(), longest_chain_select.finality_target( - c3.hash(), None).unwrap().unwrap()); - - assert_eq!(d2.hash(), longest_chain_select.finality_target( - d2.hash(), None).unwrap().unwrap()); - - - // search only blocks with number <= 5. equivalent to without restriction for this scenario - - assert_eq!(a5.hash(), longest_chain_select.finality_target( - genesis_hash, Some(5)).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a1.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a2.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a3.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a4.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(a5.hash(), longest_chain_select.finality_target( - a5.hash(), Some(5)).unwrap().unwrap()); - - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b2.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b3.hash(), Some(5)).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b4.hash(), Some(5)).unwrap().unwrap()); - - assert_eq!(c3.hash(), longest_chain_select.finality_target( - c3.hash(), Some(5)).unwrap().unwrap()); - - assert_eq!(d2.hash(), longest_chain_select.finality_target( - d2.hash(), Some(5)).unwrap().unwrap()); - - - // search only blocks with number <= 4 - - assert_eq!(a4.hash(), longest_chain_select.finality_target( - genesis_hash, Some(4)).unwrap().unwrap()); - assert_eq!(a4.hash(), longest_chain_select.finality_target( - a1.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(a4.hash(), longest_chain_select.finality_target( - a2.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(a4.hash(), longest_chain_select.finality_target( - a3.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(a4.hash(), longest_chain_select.finality_target( - a4.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a5.hash(), Some(4)).unwrap()); - - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b2.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b3.hash(), Some(4)).unwrap().unwrap()); - assert_eq!(b4.hash(), longest_chain_select.finality_target( - b4.hash(), Some(4)).unwrap().unwrap()); - - assert_eq!(c3.hash(), longest_chain_select.finality_target( - c3.hash(), Some(4)).unwrap().unwrap()); - - assert_eq!(d2.hash(), longest_chain_select.finality_target( - d2.hash(), Some(4)).unwrap().unwrap()); - - - // search only blocks with number <= 3 - - assert_eq!(a3.hash(), longest_chain_select.finality_target( - genesis_hash, Some(3)).unwrap().unwrap()); - assert_eq!(a3.hash(), longest_chain_select.finality_target( - a1.hash(), Some(3)).unwrap().unwrap()); - assert_eq!(a3.hash(), longest_chain_select.finality_target( - a2.hash(), Some(3)).unwrap().unwrap()); - assert_eq!(a3.hash(), longest_chain_select.finality_target( - a3.hash(), Some(3)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a4.hash(), Some(3)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a5.hash(), Some(3)).unwrap()); - - assert_eq!(b3.hash(), longest_chain_select.finality_target( - b2.hash(), Some(3)).unwrap().unwrap()); - assert_eq!(b3.hash(), longest_chain_select.finality_target( - b3.hash(), Some(3)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b4.hash(), Some(3)).unwrap()); - - assert_eq!(c3.hash(), longest_chain_select.finality_target( - c3.hash(), Some(3)).unwrap().unwrap()); - - assert_eq!(d2.hash(), longest_chain_select.finality_target( - d2.hash(), Some(3)).unwrap().unwrap()); - - - // search only blocks with number <= 2 - - assert_eq!(a2.hash(), longest_chain_select.finality_target( - genesis_hash, Some(2)).unwrap().unwrap()); - assert_eq!(a2.hash(), longest_chain_select.finality_target( - a1.hash(), Some(2)).unwrap().unwrap()); - assert_eq!(a2.hash(), longest_chain_select.finality_target( - a2.hash(), Some(2)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a3.hash(), Some(2)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a4.hash(), Some(2)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a5.hash(), Some(2)).unwrap()); - - assert_eq!(b2.hash(), longest_chain_select.finality_target( - b2.hash(), Some(2)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b3.hash(), Some(2)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b4.hash(), Some(2)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - c3.hash(), Some(2)).unwrap()); - - assert_eq!(d2.hash(), longest_chain_select.finality_target( - d2.hash(), Some(2)).unwrap().unwrap()); - - - // search only blocks with number <= 1 - - assert_eq!(a1.hash(), longest_chain_select.finality_target( - genesis_hash, Some(1)).unwrap().unwrap()); - assert_eq!(a1.hash(), longest_chain_select.finality_target( - a1.hash(), Some(1)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a2.hash(), Some(1)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a3.hash(), Some(1)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a4.hash(), Some(1)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a5.hash(), Some(1)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - b2.hash(), Some(1)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b3.hash(), Some(1)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b4.hash(), Some(1)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - c3.hash(), Some(1)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - d2.hash(), Some(1)).unwrap()); - - // search only blocks with number <= 0 - - assert_eq!(genesis_hash, longest_chain_select.finality_target( - genesis_hash, Some(0)).unwrap().unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a1.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a2.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a3.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a4.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - a5.hash(), Some(0)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - b2.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b3.hash(), Some(0)).unwrap()); - assert_eq!(None, longest_chain_select.finality_target( - b4.hash(), Some(0)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - c3.hash().clone(), Some(0)).unwrap()); - - assert_eq!(None, longest_chain_select.finality_target( - d2.hash().clone(), Some(0)).unwrap()); - } - - #[test] - fn best_containing_on_longest_chain_with_max_depth_higher_than_best() { - // block tree: - // G -> A1 -> A2 - - let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - let genesis_hash = client.chain_info().genesis_hash; - - assert_eq!(a2.hash(), longest_chain_select.finality_target(genesis_hash, Some(10)).unwrap().unwrap()); - } - - #[test] - fn key_changes_works() { - let (client, _, test_cases) = prepare_client_with_key_changes(); - - for (index, (begin, end, key, expected_result)) in test_cases.into_iter().enumerate() { - let end = client.block_hash(end).unwrap().unwrap(); - let actual_result = client.key_changes( - begin, - BlockId::Hash(end), - None, - &StorageKey(key), - ).unwrap(); - match actual_result == expected_result { - true => (), - false => panic!(format!("Failed test {}: actual = {:?}, expected = {:?}", - index, actual_result, expected_result)), - } - } - } - - #[test] - fn import_with_justification() { - let mut client = substrate_test_runtime_client::new(); - - // G -> A1 - let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - // A1 -> A2 - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - // A2 -> A3 - let justification = vec![1, 2, 3]; - let a3 = client.new_block_at( - &BlockId::Hash(a2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import_justified(BlockOrigin::Own, a3.clone(), justification.clone()).unwrap(); - - assert_eq!( - client.chain_info().finalized_hash, - a3.hash(), - ); - - assert_eq!( - client.justification(&BlockId::Hash(a3.hash())).unwrap(), - Some(justification), - ); - - assert_eq!( - client.justification(&BlockId::Hash(a1.hash())).unwrap(), - None, - ); - - assert_eq!( - client.justification(&BlockId::Hash(a2.hash())).unwrap(), - None, - ); - } - - #[test] - fn importing_diverged_finalized_block_should_trigger_reorg() { - let mut client = substrate_test_runtime_client::new(); - - // G -> A1 -> A2 - // \ - // -> B1 - let a1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - let mut b1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap(); - // needed to make sure B1 gets a different hash from A1 - b1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - // create but don't import B1 just yet - let b1 = b1.build().unwrap().block; - - // A2 is the current best since it's the longest chain - assert_eq!( - client.chain_info().best_hash, - a2.hash(), - ); - - // importing B1 as finalized should trigger a re-org and set it as new best - let justification = vec![1, 2, 3]; - client.import_justified(BlockOrigin::Own, b1.clone(), justification).unwrap(); - - assert_eq!( - client.chain_info().best_hash, - b1.hash(), - ); - - assert_eq!( - client.chain_info().finalized_hash, - b1.hash(), - ); - } - - #[test] - fn finalizing_diverged_block_should_trigger_reorg() { - - let (mut client, select_chain) = TestClientBuilder::new().build_with_longest_chain(); - - // G -> A1 -> A2 - // \ - // -> B1 -> B2 - let a1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - let mut b1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap(); - // needed to make sure B1 gets a different hash from A1 - b1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - let b1 = b1.build().unwrap().block; - client.import(BlockOrigin::Own, b1.clone()).unwrap(); - - let b2 = client.new_block_at( - &BlockId::Hash(b1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b2.clone()).unwrap(); - - // A2 is the current best since it's the longest chain - assert_eq!( - client.chain_info().best_hash, - a2.hash(), - ); - - // we finalize block B1 which is on a different branch from current best - // which should trigger a re-org. - ClientExt::finalize_block(&client, BlockId::Hash(b1.hash()), None).unwrap(); - - // B1 should now be the latest finalized - assert_eq!( - client.chain_info().finalized_hash, - b1.hash(), - ); - - // and B1 should be the new best block (`finalize_block` as no way of - // knowing about B2) - assert_eq!( - client.chain_info().best_hash, - b1.hash(), - ); - - // `SelectChain` should report B2 as best block though - assert_eq!( - select_chain.best_chain().unwrap().hash(), - b2.hash(), - ); - - // after we build B3 on top of B2 and import it - // it should be the new best block, - let b3 = client.new_block_at( - &BlockId::Hash(b2.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b3.clone()).unwrap(); - - assert_eq!( - client.chain_info().best_hash, - b3.hash(), - ); - } - - #[test] - fn get_header_by_block_number_doesnt_panic() { - let client = substrate_test_runtime_client::new(); - - // backend uses u32 for block numbers, make sure we don't panic when - // trying to convert - let id = BlockId::::Number(72340207214430721); - client.header(&id).expect_err("invalid block number overflows u32"); - } - - #[test] - fn state_reverted_on_reorg() { - let _ = env_logger::try_init(); - let mut client = substrate_test_runtime_client::new(); - - let current_balance = |client: &substrate_test_runtime_client::TestClient| - client.runtime_api().balance_of( - &BlockId::number(client.chain_info().best_number), AccountKeyring::Alice.into() - ).unwrap(); - - // G -> A1 -> A2 - // \ - // -> B1 - let mut a1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap(); - a1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Bob.into(), - amount: 10, - nonce: 0, - }).unwrap(); - let a1 = a1.build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - let mut b1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap(); - b1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 50, - nonce: 0, - }).unwrap(); - let b1 = b1.build().unwrap().block; - // Reorg to B1 - client.import_as_best(BlockOrigin::Own, b1.clone()).unwrap(); - - assert_eq!(950, current_balance(&client)); - let mut a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap(); - a2.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Charlie.into(), - amount: 10, - nonce: 1, - }).unwrap(); - let a2 = a2.build().unwrap().block; - // Re-org to A2 - client.import_as_best(BlockOrigin::Own, a2).unwrap(); - assert_eq!(980, current_balance(&client)); - } - - #[test] - fn doesnt_import_blocks_that_revert_finality() { - let _ = env_logger::try_init(); - let tmp = tempfile::tempdir().unwrap(); - - // we need to run with archive pruning to avoid pruning non-canonical - // states - let backend = Arc::new(Backend::new( - DatabaseSettings { - state_cache_size: 1 << 20, - state_cache_child_ratio: None, - pruning: PruningMode::ArchiveAll, - source: DatabaseSettingsSrc::RocksDb { - path: tmp.path().into(), - cache_size: 128, - } - }, - u64::max_value(), - ).unwrap()); - - let mut client = TestClientBuilder::with_backend(backend).build(); - - // -> C1 - // / - // G -> A1 -> A2 - // \ - // -> B1 -> B2 -> B3 - - let a1 = client.new_block_at( - &BlockId::Number(0), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a1.clone()).unwrap(); - - let a2 = client.new_block_at( - &BlockId::Hash(a1.hash()), - Default::default(), - false, - ).unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, a2.clone()).unwrap(); - - let mut b1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); - - // needed to make sure B1 gets a different hash from A1 - b1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - let b1 = b1.build().unwrap().block; - client.import(BlockOrigin::Own, b1.clone()).unwrap(); - - let b2 = client.new_block_at(&BlockId::Hash(b1.hash()), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, b2.clone()).unwrap(); - - // prepare B3 before we finalize A2, because otherwise we won't be able to - // read changes trie configuration after A2 is finalized - let b3 = client.new_block_at(&BlockId::Hash(b2.hash()), Default::default(), false) - .unwrap().build().unwrap().block; - - // we will finalize A2 which should make it impossible to import a new - // B3 at the same height but that doesn't include it - ClientExt::finalize_block(&client, BlockId::Hash(a2.hash()), None).unwrap(); - - let import_err = client.import(BlockOrigin::Own, b3).err().unwrap(); - let expected_err = ConsensusError::ClientImport( - sp_blockchain::Error::NotInFinalizedChain.to_string() - ); - - assert_eq!( - import_err.to_string(), - expected_err.to_string(), - ); - - // adding a C1 block which is lower than the last finalized should also - // fail (with a cheaper check that doesn't require checking ancestry). - let mut c1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); - - // needed to make sure C1 gets a different hash from A1 and B1 - c1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 2, - nonce: 0, - }).unwrap(); - let c1 = c1.build().unwrap().block; - - let import_err = client.import(BlockOrigin::Own, c1).err().unwrap(); - let expected_err = ConsensusError::ClientImport( - sp_blockchain::Error::NotInFinalizedChain.to_string() - ); - - assert_eq!( - import_err.to_string(), - expected_err.to_string(), - ); - } - - - #[test] - fn respects_block_rules() { - - fn run_test( - record_only: bool, - known_bad: &mut HashSet, - fork_rules: &mut Vec<(u64, H256)>, - ) { - let mut client = if record_only { - TestClientBuilder::new().build() - } else { - TestClientBuilder::new() - .set_block_rules( - Some(fork_rules.clone()), - Some(known_bad.clone()), - ) - .build() - }; - - let block_ok = client.new_block_at(&BlockId::Number(0), Default::default(), false) - .unwrap().build().unwrap().block; - - let params = BlockCheckParams { - hash: block_ok.hash().clone(), - number: 0, - parent_hash: block_ok.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - assert_eq!(client.check_block(params).unwrap(), ImportResult::imported(false)); - - // this is 0x0d6d6612a10485370d9e085aeea7ec427fb3f34d961c6a816cdbe5cde2278864 - let mut block_not_ok = client.new_block_at(&BlockId::Number(0), Default::default(), false) - .unwrap(); - block_not_ok.push_storage_change(vec![0], Some(vec![1])).unwrap(); - let block_not_ok = block_not_ok.build().unwrap().block; - - let params = BlockCheckParams { - hash: block_not_ok.hash().clone(), - number: 0, - parent_hash: block_not_ok.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - if record_only { - known_bad.insert(block_not_ok.hash()); - } else { - assert_eq!(client.check_block(params).unwrap(), ImportResult::KnownBad); - } - - // Now going to the fork - client.import_as_final(BlockOrigin::Own, block_ok).unwrap(); - - // And check good fork - let mut block_ok = client.new_block_at(&BlockId::Number(1), Default::default(), false) - .unwrap(); - block_ok.push_storage_change(vec![0], Some(vec![2])).unwrap(); - let block_ok = block_ok.build().unwrap().block; - - let params = BlockCheckParams { - hash: block_ok.hash().clone(), - number: 1, - parent_hash: block_ok.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - if record_only { - fork_rules.push((1, block_ok.hash().clone())); - } - assert_eq!(client.check_block(params).unwrap(), ImportResult::imported(false)); - - // And now try bad fork - let mut block_not_ok = client.new_block_at(&BlockId::Number(1), Default::default(), false) - .unwrap(); - block_not_ok.push_storage_change(vec![0], Some(vec![3])).unwrap(); - let block_not_ok = block_not_ok.build().unwrap().block; - - let params = BlockCheckParams { - hash: block_not_ok.hash().clone(), - number: 1, - parent_hash: block_not_ok.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - - if !record_only { - assert_eq!(client.check_block(params).unwrap(), ImportResult::KnownBad); - } - } - - let mut known_bad = HashSet::new(); - let mut fork_rules = Vec::new(); - - // records what bad_blocks and fork_blocks hashes should be - run_test(true, &mut known_bad, &mut fork_rules); - - // enforces rules and actually makes assertions - run_test(false, &mut known_bad, &mut fork_rules); - } - - #[test] - fn returns_status_for_pruned_blocks() { - let _ = env_logger::try_init(); - let tmp = tempfile::tempdir().unwrap(); - - // set to prune after 1 block - // states - let backend = Arc::new(Backend::new( - DatabaseSettings { - state_cache_size: 1 << 20, - state_cache_child_ratio: None, - pruning: PruningMode::keep_blocks(1), - source: DatabaseSettingsSrc::RocksDb { - path: tmp.path().into(), - cache_size: 128, - } - }, - u64::max_value(), - ).unwrap()); - - let mut client = TestClientBuilder::with_backend(backend).build(); - - let a1 = client.new_block_at(&BlockId::Number(0), Default::default(), false) - .unwrap().build().unwrap().block; - - let mut b1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); - - // b1 is created, but not imported - b1.push_transfer(Transfer { - from: AccountKeyring::Alice.into(), - to: AccountKeyring::Ferdie.into(), - amount: 1, - nonce: 0, - }).unwrap(); - let b1 = b1.build().unwrap().block; - - let check_block_a1 = BlockCheckParams { - hash: a1.hash().clone(), - number: 0, - parent_hash: a1.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - - assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::imported(false)); - assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::Unknown); - - client.import_as_final(BlockOrigin::Own, a1.clone()).unwrap(); - - assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainWithState); - - let a2 = client.new_block_at(&BlockId::Hash(a1.hash()), Default::default(), false) - .unwrap().build().unwrap().block; - client.import_as_final(BlockOrigin::Own, a2.clone()).unwrap(); - - let check_block_a2 = BlockCheckParams { - hash: a2.hash().clone(), - number: 1, - parent_hash: a1.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - - assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainPruned); - assert_eq!(client.check_block(check_block_a2.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a2.hash)).unwrap(), BlockStatus::InChainWithState); - - let a3 = client.new_block_at(&BlockId::Hash(a2.hash()), Default::default(), false) - .unwrap().build().unwrap().block; - - client.import_as_final(BlockOrigin::Own, a3.clone()).unwrap(); - let check_block_a3 = BlockCheckParams { - hash: a3.hash().clone(), - number: 2, - parent_hash: a2.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - - // a1 and a2 are both pruned at this point - assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainPruned); - assert_eq!(client.check_block(check_block_a2.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a2.hash)).unwrap(), BlockStatus::InChainPruned); - assert_eq!(client.check_block(check_block_a3.clone()).unwrap(), ImportResult::AlreadyInChain); - assert_eq!(client.block_status(&BlockId::hash(check_block_a3.hash)).unwrap(), BlockStatus::InChainWithState); - - let mut check_block_b1 = BlockCheckParams { - hash: b1.hash().clone(), - number: 0, - parent_hash: b1.header().parent_hash().clone(), - allow_missing_state: false, - import_existing: false, - }; - assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::MissingState); - check_block_b1.allow_missing_state = true; - assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::imported(false)); - check_block_b1.parent_hash = H256::random(); - assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::UnknownParent); - } - - #[test] - fn imports_blocks_with_changes_tries_config_change() { - // create client with initial 4^2 configuration - let mut client = TestClientBuilder::with_default_backend() - .changes_trie_config(Some(ChangesTrieConfiguration { - digest_interval: 4, - digest_levels: 2, - })).build(); - - // =================================================================== - // blocks 1,2,3,4,5,6,7,8,9,10 are empty - // block 11 changes the key - // block 12 is the L1 digest that covers this change - // blocks 13,14,15,16,17,18,19,20,21,22 are empty - // block 23 changes the configuration to 5^1 AND is skewed digest - // =================================================================== - // blocks 24,25 are changing the key - // block 26 is empty - // block 27 changes the key - // block 28 is the L1 digest (NOT SKEWED!!!) that covers changes AND changes configuration to 3^1 - // =================================================================== - // block 29 is empty - // block 30 changes the key - // block 31 is L1 digest that covers this change - // =================================================================== - (1..11).for_each(|number| { - let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (11..12).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (12..23).for_each(|number| { - let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (23..24).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_changes_trie_configuration_update(Some(ChangesTrieConfiguration { - digest_interval: 5, - digest_levels: 1, - })).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (24..26).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (26..27).for_each(|number| { - let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (27..28).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (28..29).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_changes_trie_configuration_update(Some(ChangesTrieConfiguration { - digest_interval: 3, - digest_levels: 1, - })).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (29..30).for_each(|number| { - let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (30..31).for_each(|number| { - let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); - block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); - let block = block.build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - (31..32).for_each(|number| { - let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) - .unwrap().build().unwrap().block; - client.import(BlockOrigin::Own, block).unwrap(); - }); - - // now check that configuration cache works - assert_eq!( - client.key_changes(1, BlockId::Number(31), None, &StorageKey(vec![42])).unwrap(), - vec![(30, 0), (27, 0), (25, 0), (24, 0), (11, 0)] - ); - } - - #[test] - fn storage_keys_iter_prefix_and_start_key_works() { - let client = substrate_test_runtime_client::new(); - - let prefix = StorageKey(hex!("3a").to_vec()); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), None) - .unwrap() - .map(|x| x.0) - .collect(); - assert_eq!(res, [hex!("3a636f6465").to_vec(), hex!("3a686561707061676573").to_vec()]); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a636f6465").to_vec()))) - .unwrap() - .map(|x| x.0) - .collect(); - assert_eq!(res, [hex!("3a686561707061676573").to_vec()]); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a686561707061676573").to_vec()))) - .unwrap() - .map(|x| x.0) - .collect(); - assert_eq!(res, Vec::>::new()); - } - - #[test] - fn storage_keys_iter_works() { - let client = substrate_test_runtime_client::new(); - - let prefix = StorageKey(hex!("").to_vec()); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), None) - .unwrap() - .take(2) - .map(|x| x.0) - .collect(); - assert_eq!(res, [hex!("0befda6e1ca4ef40219d588a727f1271").to_vec(), hex!("3a636f6465").to_vec()]); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a636f6465").to_vec()))) - .unwrap() - .take(3) - .map(|x| x.0) - .collect(); - assert_eq!(res, [ - hex!("3a686561707061676573").to_vec(), - hex!("6644b9b8bc315888ac8e41a7968dc2b4141a5403c58acdf70b7e8f7e07bf5081").to_vec(), - hex!("79c07e2b1d2e2abfd4855b936617eeff5e0621c4869aa60c02be9adcc98a0d1d").to_vec(), - ]); - - let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("79c07e2b1d2e2abfd4855b936617eeff5e0621c4869aa60c02be9adcc98a0d1d").to_vec()))) - .unwrap() - .take(1) - .map(|x| x.0) - .collect(); - assert_eq!(res, [hex!("cf722c0832b5231d35e29f319ff27389f5032bfc7bfc3ba5ed7839f2042fb99f").to_vec()]); - } - - #[test] - fn cleans_up_closed_notification_sinks_on_block_import() { - use substrate_test_runtime_client::GenesisInit; - - // NOTE: we need to build the client here instead of using the client - // provided by test_runtime_client otherwise we can't access the private - // `import_notification_sinks` and `finality_notification_sinks` fields. - let mut client = - new_in_mem::< - _, - substrate_test_runtime_client::runtime::Block, - _, - substrate_test_runtime_client::runtime::RuntimeApi - >( - substrate_test_runtime_client::new_native_executor(), - &substrate_test_runtime_client::GenesisParameters::default().genesis_storage(), - None, - None, - sp_core::tasks::executor(), - Default::default(), - ) - .unwrap(); - - type TestClient = Client< - in_mem::Backend, - LocalCallExecutor, sc_executor::NativeExecutor>, - substrate_test_runtime_client::runtime::Block, - substrate_test_runtime_client::runtime::RuntimeApi, - >; - - let import_notif1 = client.import_notification_stream(); - let import_notif2 = client.import_notification_stream(); - let finality_notif1 = client.finality_notification_stream(); - let finality_notif2 = client.finality_notification_stream(); - - // for some reason I can't seem to use `ClientBlockImportExt` - let bake_and_import_block = |client: &mut TestClient, origin| { - let block = client - .new_block(Default::default()) - .unwrap() - .build() - .unwrap() - .block; - - let (header, extrinsics) = block.deconstruct(); - let mut import = BlockImportParams::new(origin, header); - import.body = Some(extrinsics); - import.fork_choice = Some(ForkChoiceStrategy::LongestChain); - client.import_block(import, Default::default()).unwrap(); - }; - - // after importing a block we should still have 4 notification sinks - // (2 import + 2 finality) - bake_and_import_block(&mut client, BlockOrigin::Own); - assert_eq!(client.import_notification_sinks.lock().len(), 2); - assert_eq!(client.finality_notification_sinks.lock().len(), 2); - - // if we drop one import notification receiver and one finality - // notification receiver - drop(import_notif2); - drop(finality_notif2); - - // the sinks should be cleaned up after block import - bake_and_import_block(&mut client, BlockOrigin::Own); - assert_eq!(client.import_notification_sinks.lock().len(), 1); - assert_eq!(client.finality_notification_sinks.lock().len(), 1); - - // the same thing should happen if block import happens during initial - // sync - drop(import_notif1); - drop(finality_notif1); - - bake_and_import_block(&mut client, BlockOrigin::NetworkInitialSync); - assert_eq!(client.import_notification_sinks.lock().len(), 0); - assert_eq!(client.finality_notification_sinks.lock().len(), 0); - } -} diff --git a/client/service/src/client/genesis.rs b/client/service/src/client/genesis.rs new file mode 100644 index 00000000000..41dbccc5173 --- /dev/null +++ b/client/service/src/client/genesis.rs @@ -0,0 +1,41 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Tool for creating the genesis block. + +use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Hash as HashT, Zero}; + +/// Create a genesis block, given the initial storage. +pub fn construct_genesis_block< + Block: BlockT +> ( + state_root: Block::Hash +) -> Block { + let extrinsics_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( + Vec::new(), + ); + + Block::new( + <::Header as HeaderT>::new( + Zero::zero(), + extrinsics_root, + state_root, + Default::default(), + Default::default() + ), + Default::default() + ) +} diff --git a/client/src/light/backend.rs b/client/service/src/client/light/backend.rs similarity index 88% rename from client/src/light/backend.rs rename to client/service/src/client/light/backend.rs index 01e98548640..78f3938aaa8 100644 --- a/client/src/light/backend.rs +++ b/client/service/src/client/light/backend.rs @@ -32,7 +32,6 @@ use sp_state_machine::{ }; use sp_runtime::{generic::BlockId, Justification, Storage}; use sp_runtime::traits::{Block as BlockT, NumberFor, Zero, Header, HashFor}; -use crate::in_mem::check_genesis_storage; use sp_blockchain::{Error as ClientError, Result as ClientResult}; use sc_client_api::{ backend::{ @@ -43,9 +42,10 @@ use sc_client_api::{ HeaderBackend as BlockchainHeaderBackend, well_known_cache_keys, }, light::Storage as BlockchainStorage, + in_mem::check_genesis_storage, UsageInfo, }; -use crate::light::blockchain::Blockchain; +use super::blockchain::Blockchain; use hash_db::Hasher; const IN_MEMORY_EXPECT_PROOF: &str = "InMemory state backend has Void error type and always succeeds; qed"; @@ -251,7 +251,7 @@ where .unwrap_or(false) } - fn remote_blockchain(&self) -> Arc> { + fn remote_blockchain(&self) -> Arc> { self.blockchain.clone() } } @@ -513,53 +513,3 @@ impl StateBackend for GenesisOrUnavailableState } } } - -#[cfg(test)] -mod tests { - use substrate_test_runtime_client::{self, runtime::Block}; - use sc_client_api::backend::NewBlockState; - use crate::light::blockchain::tests::{DummyBlockchain, DummyStorage}; - use sp_runtime::traits::BlakeTwo256; - use super::*; - - #[test] - fn local_state_is_created_when_genesis_state_is_available() { - let def = Default::default(); - let header0 = substrate_test_runtime_client::runtime::Header::new(0, def, def, def, Default::default()); - - let backend: Backend<_, BlakeTwo256> = Backend::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - ); - let mut op = backend.begin_operation().unwrap(); - op.set_block_data(header0, None, None, NewBlockState::Final).unwrap(); - op.reset_storage(Default::default()).unwrap(); - backend.commit_operation(op).unwrap(); - - match backend.state_at(BlockId::Number(0)).unwrap() { - GenesisOrUnavailableState::Genesis(_) => (), - _ => panic!("unexpected state"), - } - } - - #[test] - fn unavailable_state_is_created_when_genesis_state_is_unavailable() { - let backend: Backend<_, BlakeTwo256> = Backend::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - ); - - match backend.state_at(BlockId::Number(0)).unwrap() { - GenesisOrUnavailableState::Unavailable => (), - _ => panic!("unexpected state"), - } - } - - #[test] - fn light_aux_store_is_updated_via_non_importing_op() { - let backend = Backend::new(Arc::new(DummyBlockchain::new(DummyStorage::new()))); - let mut op = ClientBackend::::begin_operation(&backend).unwrap(); - BlockImportOperation::::insert_aux(&mut op, vec![(vec![1], Some(vec![2]))]).unwrap(); - ClientBackend::::commit_operation(&backend, op).unwrap(); - - assert_eq!(AuxStore::get_aux(&backend, &[1]).unwrap(), Some(vec![2])); - } -} diff --git a/client/src/light/blockchain.rs b/client/service/src/client/light/blockchain.rs similarity index 54% rename from client/src/light/blockchain.rs rename to client/service/src/client/light/blockchain.rs index 756147c941b..b6ccb4744b5 100644 --- a/client/src/light/blockchain.rs +++ b/client/service/src/client/light/blockchain.rs @@ -17,7 +17,6 @@ //! Light client blockchain backend. Only stores headers and justifications of recent //! blocks. CHT roots are stored for headers of ancient blocks. -use std::future::Future; use std::sync::Arc; use sp_runtime::{Justification, generic::BlockId}; @@ -38,10 +37,10 @@ pub use sc_client_api::{ }, light::{ RemoteBlockchain, LocalOrRemote, Storage - } + }, + cht, }; -use crate::cht; -use crate::light::fetcher::{Fetcher, RemoteHeaderRequest}; +use super::fetcher::RemoteHeaderRequest; /// Light client blockchain. pub struct Blockchain { @@ -173,154 +172,3 @@ impl RemoteBlockchain for Blockchain })) } } - -/// Returns future that resolves header either locally, or remotely. -pub fn future_header>( - blockchain: &dyn RemoteBlockchain, - fetcher: &F, - id: BlockId, -) -> impl Future, ClientError>> { - use futures::future::{ready, Either, FutureExt}; - - match blockchain.header(id) { - Ok(LocalOrRemote::Remote(request)) => Either::Left( - fetcher - .remote_header(request) - .then(|header| ready(header.map(Some))) - ), - Ok(LocalOrRemote::Unknown) => Either::Right(ready(Ok(None))), - Ok(LocalOrRemote::Local(local_header)) => Either::Right(ready(Ok(Some(local_header)))), - Err(err) => Either::Right(ready(Err(err))), - } -} - -#[cfg(test)] -pub mod tests { - use std::collections::HashMap; - use parking_lot::Mutex; - use substrate_test_runtime_client::runtime::{Hash, Block, Header}; - use sc_client_api::blockchain::Info; - use super::*; - - pub type DummyBlockchain = Blockchain; - - pub struct DummyStorage { - pub changes_tries_cht_roots: HashMap, - pub aux_store: Mutex, Vec>>, - } - - impl DummyStorage { - pub fn new() -> Self { - DummyStorage { - changes_tries_cht_roots: HashMap::new(), - aux_store: Mutex::new(HashMap::new()), - } - } - } - - impl BlockchainHeaderBackend for DummyStorage { - fn header(&self, _id: BlockId) -> ClientResult> { - Err(ClientError::Backend("Test error".into())) - } - - fn info(&self) -> Info { - panic!("Test error") - } - - fn status(&self, _id: BlockId) -> ClientResult { - Err(ClientError::Backend("Test error".into())) - } - - fn number(&self, hash: Hash) -> ClientResult>> { - if hash == Default::default() { - Ok(Some(Default::default())) - } else { - Err(ClientError::Backend("Test error".into())) - } - } - - fn hash(&self, number: u64) -> ClientResult> { - if number == 0 { - Ok(Some(Default::default())) - } else { - Err(ClientError::Backend("Test error".into())) - } - } - } - - impl HeaderMetadata for DummyStorage { - type Error = ClientError; - - fn header_metadata(&self, hash: Hash) -> Result, Self::Error> { - self.header(BlockId::hash(hash))?.map(|header| CachedHeaderMetadata::from(&header)) - .ok_or(ClientError::UnknownBlock("header not found".to_owned())) - } - fn insert_header_metadata(&self, _hash: Hash, _metadata: CachedHeaderMetadata) {} - fn remove_header_metadata(&self, _hash: Hash) {} - } - - impl AuxStore for DummyStorage { - fn insert_aux< - 'a, - 'b: 'a, - 'c: 'a, - I: IntoIterator, - D: IntoIterator, - >(&self, insert: I, _delete: D) -> ClientResult<()> { - for (k, v) in insert.into_iter() { - self.aux_store.lock().insert(k.to_vec(), v.to_vec()); - } - Ok(()) - } - - fn get_aux(&self, key: &[u8]) -> ClientResult>> { - Ok(self.aux_store.lock().get(key).cloned()) - } - } - - impl Storage for DummyStorage { - fn import_header( - &self, - _header: Header, - _cache: HashMap>, - _state: NewBlockState, - _aux_ops: Vec<(Vec, Option>)>, - ) -> ClientResult<()> { - Ok(()) - } - - fn set_head(&self, _block: BlockId) -> ClientResult<()> { - Err(ClientError::Backend("Test error".into())) - } - - fn finalize_header(&self, _block: BlockId) -> ClientResult<()> { - Err(ClientError::Backend("Test error".into())) - } - - fn last_finalized(&self) -> ClientResult { - Err(ClientError::Backend("Test error".into())) - } - - fn header_cht_root(&self, _cht_size: u64, _block: u64) -> ClientResult> { - Err(ClientError::Backend("Test error".into())) - } - - fn changes_trie_cht_root(&self, cht_size: u64, block: u64) -> ClientResult> { - cht::block_to_cht_number(cht_size, block) - .and_then(|cht_num| self.changes_tries_cht_roots.get(&cht_num)) - .cloned() - .ok_or_else(|| ClientError::Backend( - format!("Test error: CHT for block #{} not found", block) - ).into()) - .map(Some) - } - - fn cache(&self) -> Option>> { - None - } - - fn usage_info(&self) -> Option { - None - } - } -} diff --git a/client/src/light/call_executor.rs b/client/service/src/client/light/call_executor.rs similarity index 53% rename from client/src/light/call_executor.rs rename to client/service/src/client/light/call_executor.rs index 3a91f2dc23d..54fcf8e8f7f 100644 --- a/client/src/light/call_executor.rs +++ b/client/service/src/client/light/call_executor.rs @@ -243,7 +243,11 @@ pub fn check_execution_proof( ) } -fn check_execution_proof_with_make_header Header>( +/// Check remote contextual execution proof using given backend and header factory. +/// +/// Method is executed using passed header as environment' current block. +/// Proof should include both environment preparation proof and method execution proof. +pub fn check_execution_proof_with_make_header( executor: &E, spawn_handle: Box, request: &RemoteCallRequest

, @@ -251,10 +255,11 @@ fn check_execution_proof_with_make_header ClientResult> where - Header: HeaderT, E: CodeExecutor + Clone + 'static, H: Hasher, + Header: HeaderT, H::Out: Ord + codec::Codec + 'static, + MakeNextHeader: Fn(&Header) -> Header, { let local_state_root = request.header.state_root(); let root: H::Out = convert_hash(&local_state_root); @@ -290,232 +295,3 @@ fn check_execution_proof_with_make_header for DummyCallExecutor { - type Error = ClientError; - - type Backend = substrate_test_runtime_client::Backend; - - fn call( - &self, - _id: &BlockId, - _method: &str, - _call_data: &[u8], - _strategy: ExecutionStrategy, - _extensions: Option, - ) -> Result, ClientError> { - Ok(vec![42]) - } - - fn contextual_call< - 'a, - IB: Fn() -> ClientResult<()>, - EM: Fn( - Result, Self::Error>, - Result, Self::Error> - ) -> Result, Self::Error>, - R: Encode + Decode + PartialEq, - NC: FnOnce() -> result::Result + UnwindSafe, - >( - &self, - _initialize_block_fn: IB, - _at: &BlockId, - _method: &str, - _call_data: &[u8], - _changes: &RefCell, - _offchain_changes: &RefCell, - _storage_transaction_cache: Option<&RefCell< - StorageTransactionCache< - Block, - >::State, - > - >>, - _initialize_block: InitializeBlock<'a, Block>, - _execution_manager: ExecutionManager, - _native_call: Option, - _proof_recorder: &Option>, - _extensions: Option, - ) -> ClientResult> where ExecutionManager: Clone { - unreachable!() - } - - fn runtime_version(&self, _id: &BlockId) -> Result { - unreachable!() - } - - fn prove_at_trie_state>>( - &self, - _trie_state: &sp_state_machine::TrieBackend>, - _overlay: &mut OverlayedChanges, - _method: &str, - _call_data: &[u8] - ) -> Result<(Vec, StorageProof), ClientError> { - unreachable!() - } - - fn native_runtime_version(&self) -> Option<&NativeVersion> { - unreachable!() - } - } - - fn local_executor() -> NativeExecutor { - NativeExecutor::new(WasmExecutionMethod::Interpreted, None, 8) - } - - #[test] - fn execution_proof_is_generated_and_checked() { - fn execute(remote_client: &TestClient, at: u64, method: &'static str) -> (Vec, Vec) { - let remote_block_id = BlockId::Number(at); - let remote_header = remote_client.header(&remote_block_id).unwrap().unwrap(); - - // 'fetch' execution proof from remote node - let (remote_result, remote_execution_proof) = remote_client.execution_proof( - &remote_block_id, - method, - &[] - ).unwrap(); - - // check remote execution proof locally - let local_result = check_execution_proof::<_, _, BlakeTwo256>( - &local_executor(), - tasks_executor(), - &RemoteCallRequest { - block: substrate_test_runtime_client::runtime::Hash::default(), - header: remote_header, - method: method.into(), - call_data: vec![], - retry_count: None, - }, - remote_execution_proof, - ).unwrap(); - - (remote_result, local_result) - } - - fn execute_with_proof_failure(remote_client: &TestClient, at: u64, method: &'static str) { - let remote_block_id = BlockId::Number(at); - let remote_header = remote_client.header(&remote_block_id).unwrap().unwrap(); - - // 'fetch' execution proof from remote node - let (_, remote_execution_proof) = remote_client.execution_proof( - &remote_block_id, - method, - &[] - ).unwrap(); - - // check remote execution proof locally - let execution_result = check_execution_proof_with_make_header::<_, _, BlakeTwo256, _>( - &local_executor(), - tasks_executor(), - &RemoteCallRequest { - block: substrate_test_runtime_client::runtime::Hash::default(), - header: remote_header, - method: method.into(), - call_data: vec![], - retry_count: None, - }, - remote_execution_proof, - |header|
::new( - at + 1, - Default::default(), - Default::default(), - header.hash(), - header.digest().clone(), // this makes next header wrong - ), - ); - match execution_result { - Err(sp_blockchain::Error::Execution(_)) => (), - _ => panic!("Unexpected execution result: {:?}", execution_result), - } - } - - // prepare remote client - let mut remote_client = substrate_test_runtime_client::new(); - for i in 1u32..3u32 { - let mut digest = Digest::default(); - digest.push(sp_runtime::generic::DigestItem::Other::(i.to_le_bytes().to_vec())); - remote_client.import_justified( - BlockOrigin::Own, - remote_client.new_block(digest).unwrap().build().unwrap().block, - Default::default(), - ).unwrap(); - } - - // check method that doesn't requires environment - let (remote, local) = execute(&remote_client, 0, "Core_version"); - assert_eq!(remote, local); - - let (remote, local) = execute(&remote_client, 2, "Core_version"); - assert_eq!(remote, local); - - // check method that requires environment - let (_, block) = execute(&remote_client, 0, "BlockBuilder_finalize_block"); - let local_block: Header = Decode::decode(&mut &block[..]).unwrap(); - assert_eq!(local_block.number, 1); - - let (_, block) = execute(&remote_client, 2, "BlockBuilder_finalize_block"); - let local_block: Header = Decode::decode(&mut &block[..]).unwrap(); - assert_eq!(local_block.number, 3); - - // check that proof check doesn't panic even if proof is incorrect AND no panic handler is set - execute_with_proof_failure(&remote_client, 2, "Core_version"); - - // check that proof check doesn't panic even if proof is incorrect AND panic handler is set - sp_panic_handler::set("TEST", "1.2.3"); - execute_with_proof_failure(&remote_client, 2, "Core_version"); - } - - #[test] - fn code_is_executed_at_genesis_only() { - let backend = Arc::new(InMemBackend::::new()); - let def = H256::default(); - let header0 = substrate_test_runtime_client::runtime::Header::new(0, def, def, def, Default::default()); - let hash0 = header0.hash(); - let header1 = substrate_test_runtime_client::runtime::Header::new(1, def, def, hash0, Default::default()); - let hash1 = header1.hash(); - backend.blockchain().insert(hash0, header0, None, None, NewBlockState::Final).unwrap(); - backend.blockchain().insert(hash1, header1, None, None, NewBlockState::Final).unwrap(); - - let genesis_executor = GenesisCallExecutor::new(backend, DummyCallExecutor); - assert_eq!( - genesis_executor.call( - &BlockId::Number(0), - "test_method", - &[], - ExecutionStrategy::NativeElseWasm, - None, - ).unwrap(), - vec![42], - ); - - let call_on_unavailable = genesis_executor.call( - &BlockId::Number(1), - "test_method", - &[], - ExecutionStrategy::NativeElseWasm, - None, - ); - - match call_on_unavailable { - Err(ClientError::NotAvailableOnLightClient) => (), - _ => unreachable!("unexpected result: {:?}", call_on_unavailable), - } - } -} diff --git a/client/service/src/client/light/fetcher.rs b/client/service/src/client/light/fetcher.rs new file mode 100644 index 00000000000..ae64565a504 --- /dev/null +++ b/client/service/src/client/light/fetcher.rs @@ -0,0 +1,341 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Light client data fetcher. Fetches requested data from remote full nodes. + +use std::sync::Arc; +use std::collections::{BTreeMap, HashMap}; +use std::marker::PhantomData; + +use hash_db::{HashDB, Hasher, EMPTY_PREFIX}; +use codec::{Decode, Encode}; +use sp_core::{convert_hash, traits::CodeExecutor}; +use sp_core::storage::{ChildInfo, ChildType}; +use sp_runtime::traits::{ + Block as BlockT, Header as HeaderT, Hash, HashFor, NumberFor, + AtLeast32Bit, CheckedConversion, +}; +use sp_state_machine::{ + ChangesTrieRootsStorage, ChangesTrieAnchorBlockId, ChangesTrieConfigurationRange, + InMemoryChangesTrieStorage, TrieBackend, read_proof_check, key_changes_proof_check_with_db, + read_child_proof_check, CloneableSpawn, +}; +pub use sp_state_machine::StorageProof; +use sp_blockchain::{Error as ClientError, Result as ClientResult}; + +pub use sc_client_api::{ + light::{ + RemoteCallRequest, RemoteHeaderRequest, RemoteReadRequest, RemoteReadChildRequest, + RemoteChangesRequest, ChangesProof, RemoteBodyRequest, Fetcher, FetchChecker, + Storage as BlockchainStorage, + }, + cht, +}; +use super::blockchain::{Blockchain}; +use super::call_executor::check_execution_proof; + +/// Remote data checker. +pub struct LightDataChecker> { + blockchain: Arc>, + executor: E, + spawn_handle: Box, + _hasher: PhantomData<(B, H)>, +} + +impl> LightDataChecker { + /// Create new light data checker. + pub fn new(blockchain: Arc>, executor: E, spawn_handle: Box) -> Self { + Self { + blockchain, executor, spawn_handle, _hasher: PhantomData + } + } + + /// Check remote changes query proof assuming that CHT-s are of given size. + pub fn check_changes_proof_with_cht_size( + &self, + request: &RemoteChangesRequest, + remote_proof: ChangesProof, + cht_size: NumberFor, + ) -> ClientResult, u32)>> + where + H: Hasher, + H::Out: Ord + codec::Codec, + { + // since we need roots of all changes tries for the range begin..max + // => remote node can't use max block greater that one that we have passed + if remote_proof.max_block > request.max_block.0 || remote_proof.max_block < request.last_block.0 { + return Err(ClientError::ChangesTrieAccessFailed(format!( + "Invalid max_block used by the remote node: {}. Local: {}..{}..{}", + remote_proof.max_block, request.first_block.0, request.last_block.0, request.max_block.0, + )).into()); + } + + // check if remote node has responded with extra changes trie roots proofs + // all changes tries roots must be in range [request.first_block.0; request.tries_roots.0) + let is_extra_first_root = remote_proof.roots.keys().next() + .map(|first_root| *first_root < request.first_block.0 + || *first_root >= request.tries_roots.0) + .unwrap_or(false); + let is_extra_last_root = remote_proof.roots.keys().next_back() + .map(|last_root| *last_root >= request.tries_roots.0) + .unwrap_or(false); + if is_extra_first_root || is_extra_last_root { + return Err(ClientError::ChangesTrieAccessFailed(format!( + "Extra changes tries roots proofs provided by the remote node: [{:?}..{:?}]. Expected in range: [{}; {})", + remote_proof.roots.keys().next(), remote_proof.roots.keys().next_back(), + request.first_block.0, request.tries_roots.0, + )).into()); + } + + // if request has been composed when some required headers were already pruned + // => remote node has sent us CHT-based proof of required changes tries roots + // => check that this proof is correct before proceeding with changes proof + let remote_max_block = remote_proof.max_block; + let remote_roots = remote_proof.roots; + let remote_roots_proof = remote_proof.roots_proof; + let remote_proof = remote_proof.proof; + if !remote_roots.is_empty() { + self.check_changes_tries_proof( + cht_size, + &remote_roots, + remote_roots_proof, + )?; + } + + // and now check the key changes proof + get the changes + let mut result = Vec::new(); + let proof_storage = InMemoryChangesTrieStorage::with_proof(remote_proof); + for config_range in &request.changes_trie_configs { + let result_range = key_changes_proof_check_with_db::( + ChangesTrieConfigurationRange { + config: config_range.config.as_ref().ok_or(ClientError::ChangesTriesNotSupported)?, + zero: config_range.zero.0, + end: config_range.end.map(|(n, _)| n), + }, + &RootsStorage { + roots: (request.tries_roots.0, &request.tries_roots.2), + prev_roots: &remote_roots, + }, + &proof_storage, + request.first_block.0, + &ChangesTrieAnchorBlockId { + hash: convert_hash(&request.last_block.1), + number: request.last_block.0, + }, + remote_max_block, + request.storage_key.as_ref(), + &request.key) + .map_err(|err| ClientError::ChangesTrieAccessFailed(err))?; + result.extend(result_range); + } + + Ok(result) + } + + /// Check CHT-based proof for changes tries roots. + pub fn check_changes_tries_proof( + &self, + cht_size: NumberFor, + remote_roots: &BTreeMap, B::Hash>, + remote_roots_proof: StorageProof, + ) -> ClientResult<()> + where + H: Hasher, + H::Out: Ord + codec::Codec, + { + // all the checks are sharing the same storage + let storage = remote_roots_proof.into_memory_db(); + + // remote_roots.keys() are sorted => we can use this to group changes tries roots + // that are belongs to the same CHT + let blocks = remote_roots.keys().cloned(); + cht::for_each_cht_group::(cht_size, blocks, |mut storage, _, cht_blocks| { + // get local changes trie CHT root for given CHT + // it should be there, because it is never pruned AND request has been composed + // when required header has been pruned (=> replaced with CHT) + let first_block = cht_blocks.first().cloned() + .expect("for_each_cht_group never calls callback with empty groups"); + let local_cht_root = self.blockchain.storage().changes_trie_cht_root(cht_size, first_block)? + .ok_or(ClientError::InvalidCHTProof)?; + + // check changes trie root for every block within CHT range + for block in cht_blocks { + // check if the proofs storage contains the root + // normally this happens in when the proving backend is created, but since + // we share the storage for multiple checks, do it here + let mut cht_root = H::Out::default(); + cht_root.as_mut().copy_from_slice(local_cht_root.as_ref()); + if !storage.contains(&cht_root, EMPTY_PREFIX) { + return Err(ClientError::InvalidCHTProof.into()); + } + + // check proof for single changes trie root + let proving_backend = TrieBackend::new(storage, cht_root); + let remote_changes_trie_root = remote_roots[&block]; + cht::check_proof_on_proving_backend::( + local_cht_root, + block, + remote_changes_trie_root, + &proving_backend, + )?; + + // and return the storage to use in following checks + storage = proving_backend.into_storage(); + } + + Ok(storage) + }, storage) + } +} + +impl FetchChecker for LightDataChecker + where + Block: BlockT, + E: CodeExecutor + Clone + 'static, + H: Hasher, + H::Out: Ord + codec::Codec + 'static, + S: BlockchainStorage, +{ + fn check_header_proof( + &self, + request: &RemoteHeaderRequest, + remote_header: Option, + remote_proof: StorageProof, + ) -> ClientResult { + let remote_header = remote_header.ok_or_else(|| + ClientError::from(ClientError::InvalidCHTProof))?; + let remote_header_hash = remote_header.hash(); + cht::check_proof::( + request.cht_root, + request.block, + remote_header_hash, + remote_proof, + ).map(|_| remote_header) + } + + fn check_read_proof( + &self, + request: &RemoteReadRequest, + remote_proof: StorageProof, + ) -> ClientResult, Option>>> { + read_proof_check::( + convert_hash(request.header.state_root()), + remote_proof, + request.keys.iter(), + ).map_err(Into::into) + } + + fn check_read_child_proof( + &self, + request: &RemoteReadChildRequest, + remote_proof: StorageProof, + ) -> ClientResult, Option>>> { + let child_info = match ChildType::from_prefixed_key(&request.storage_key) { + Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), + None => return Err("Invalid child type".into()), + }; + read_child_proof_check::( + convert_hash(request.header.state_root()), + remote_proof, + &child_info, + request.keys.iter(), + ).map_err(Into::into) + } + + fn check_execution_proof( + &self, + request: &RemoteCallRequest, + remote_proof: StorageProof, + ) -> ClientResult> { + check_execution_proof::<_, _, H>( + &self.executor, + self.spawn_handle.clone(), + request, + remote_proof, + ) + } + + fn check_changes_proof( + &self, + request: &RemoteChangesRequest, + remote_proof: ChangesProof + ) -> ClientResult, u32)>> { + self.check_changes_proof_with_cht_size(request, remote_proof, cht::size()) + } + + fn check_body_proof( + &self, + request: &RemoteBodyRequest, + body: Vec + ) -> ClientResult> { + // TODO: #2621 + let extrinsics_root = HashFor::::ordered_trie_root( + body.iter().map(Encode::encode).collect(), + ); + if *request.header.extrinsics_root() == extrinsics_root { + Ok(body) + } else { + Err(format!("RemoteBodyRequest: invalid extrinsics root expected: {} but got {}", + *request.header.extrinsics_root(), + extrinsics_root, + ).into()) + } + + } +} + +/// A view of BTreeMap as a changes trie roots storage. +struct RootsStorage<'a, Number: AtLeast32Bit, Hash: 'a> { + roots: (Number, &'a [Hash]), + prev_roots: &'a BTreeMap, +} + +impl<'a, H, Number, Hash> ChangesTrieRootsStorage for RootsStorage<'a, Number, Hash> + where + H: Hasher, + Number: std::fmt::Display + std::hash::Hash + Clone + AtLeast32Bit + Encode + Decode + Send + Sync + 'static, + Hash: 'a + Send + Sync + Clone + AsRef<[u8]>, +{ + fn build_anchor( + &self, + _hash: H::Out, + ) -> Result, String> { + Err("build_anchor is only called when building block".into()) + } + + fn root( + &self, + _anchor: &ChangesTrieAnchorBlockId, + block: Number, + ) -> Result, String> { + // we can't ask for roots from parallel forks here => ignore anchor + let root = if block < self.roots.0 { + self.prev_roots.get(&Number::unique_saturated_from(block)).cloned() + } else { + let index: Option = block.checked_sub(&self.roots.0).and_then(|index| index.checked_into()); + match index { + Some(index) => self.roots.1.get(index as usize).cloned(), + None => None, + } + }; + + Ok(root.map(|root| { + let mut hasher_root: H::Out = Default::default(); + hasher_root.as_mut().copy_from_slice(root.as_ref()); + hasher_root + })) + } +} diff --git a/client/src/light/mod.rs b/client/service/src/client/light/mod.rs similarity index 91% rename from client/src/light/mod.rs rename to client/service/src/client/light/mod.rs index 60bb87394f9..9b3c3f5b290 100644 --- a/client/src/light/mod.rs +++ b/client/service/src/client/light/mod.rs @@ -30,15 +30,15 @@ use sp_runtime::traits::{Block as BlockT, HashFor}; use sp_blockchain::Result as ClientResult; use prometheus_endpoint::Registry; -use crate::call_executor::LocalCallExecutor; -use crate::client::{Client,ClientConfig}; +use super::call_executor::LocalCallExecutor; +use super::client::{Client,ClientConfig}; use sc_client_api::{ light::Storage as BlockchainStorage, CloneableSpawn, }; -use crate::light::backend::Backend; -use crate::light::blockchain::Blockchain; -use crate::light::call_executor::GenesisCallExecutor; -use crate::light::fetcher::LightDataChecker; +use self::backend::Backend; +use self::blockchain::Blockchain; +use self::call_executor::GenesisCallExecutor; +use self::fetcher::LightDataChecker; /// Create an instance of light client blockchain backend. pub fn new_light_blockchain>(storage: S) -> Arc> { diff --git a/client/src/lib.rs b/client/service/src/client/mod.rs similarity index 52% rename from client/src/lib.rs rename to client/service/src/client/mod.rs index 97cd7df78c7..079b9d243f9 100644 --- a/client/src/lib.rs +++ b/client/service/src/client/mod.rs @@ -41,70 +41,14 @@ //! Additionally, the fourth generic parameter of the `Client` is a marker type representing //! the ways in which the runtime can interface with the outside. Any code that builds a `Client` //! is responsible for putting the right marker. -//! -//! ## Example -//! -//! ``` -//! use std::sync::Arc; -//! use sc_client::{Client, in_mem::Backend, LocalCallExecutor}; -//! use sp_runtime::Storage; -//! use sc_executor::{NativeExecutor, WasmExecutionMethod}; -//! -//! // In this example, we're using the `Block` and `RuntimeApi` types from the -//! // `substrate-test-runtime-client` crate. These types are automatically generated when -//! // compiling a runtime. In a typical use-case, these types would have been to be generated -//! // from your runtime. -//! use substrate_test_runtime_client::{LocalExecutor, runtime::Block, runtime::RuntimeApi}; -//! -//! let backend = Arc::new(Backend::::new()); -//! let client = Client::<_, _, _, RuntimeApi>::new( -//! backend.clone(), -//! LocalCallExecutor::new( -//! backend.clone(), -//! NativeExecutor::::new(WasmExecutionMethod::Interpreted, None, 8), -//! sp_core::tasks::executor(), -//! Default::default(), -//! ), -//! // This parameter provides the storage for the chain genesis. -//! &::default(), -//! Default::default(), -//! Default::default(), -//! Default::default(), -//! None, -//! Default::default(), -//! ); -//! ``` -//! - -#![warn(missing_docs)] -#![recursion_limit="128"] -pub mod cht; -pub mod in_mem; pub mod genesis; pub mod light; -pub mod leaves; mod call_executor; mod client; mod block_rules; -pub use sc_client_api::{ - blockchain, - blockchain::well_known_cache_keys, - blockchain::Info as ChainInfo, - notifications::{StorageEventStream, StorageChangeSet}, - call_executor::CallExecutor, - utils, -}; -pub use crate::{ +pub use self::{ call_executor::LocalCallExecutor, - client::{ - new_with_backend, - new_in_mem, - ImportNotifications, FinalityNotifications, BlockchainEvents, LockImportRun, - BlockImportNotification, Client, ClientConfig, ClientInfo, ExecutionStrategies, FinalityNotification, - LongestChain, BlockOf, ProvideUncles, BadBlocks, ForkBlocks, apply_aux, - }, - leaves::LeafSet, + client::{new_with_backend, new_in_mem, Client, ClientConfig}, }; -pub use sp_state_machine::{ExecutionStrategy, StorageProof, StateMachine}; diff --git a/client/service/src/config.rs b/client/service/src/config.rs index 4ebe7553949..4654158cb36 100644 --- a/client/service/src/config.rs +++ b/client/service/src/config.rs @@ -16,11 +16,11 @@ //! Service configuration. -pub use sc_client::ExecutionStrategies; pub use sc_client_db::{Database, PruningMode, DatabaseSettingsSrc as DatabaseConfig}; pub use sc_network::Multiaddr; pub use sc_network::config::{ExtTransport, MultiaddrWithPeerId, NetworkConfiguration, Role, NodeKeyConfig}; pub use sc_executor::WasmExecutionMethod; +use sc_client_api::execution_extensions::ExecutionStrategies; use std::{future::Future, path::{PathBuf, Path}, pin::Pin, net::SocketAddr, sync::Arc}; pub use sc_transaction_pool::txpool::Options as TransactionPoolOptions; diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 56fee6b6d74..8e8c9e1e37b 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -18,6 +18,7 @@ //! Manages communication between them. #![warn(missing_docs)] +#![recursion_limit="128"] pub mod config; #[macro_use] @@ -26,6 +27,10 @@ pub mod error; mod metrics; mod builder; +#[cfg(feature = "test-helpers")] +pub mod client; +#[cfg(not(feature = "test-helpers"))] +mod client; mod status_sinks; mod task_manager; @@ -38,7 +43,7 @@ use wasm_timer::Instant; use std::task::{Poll, Context}; use parking_lot::Mutex; -use sc_client::Client; +use client::Client; use futures::{ Future, FutureExt, Stream, StreamExt, compat::*, @@ -49,13 +54,13 @@ use sc_network::{NetworkService, network_state::NetworkState, PeerId, ReportHand use log::{log, warn, debug, error, Level}; use codec::{Encode, Decode}; use sp_runtime::generic::BlockId; -use sp_runtime::traits::{NumberFor, Block as BlockT}; +use sp_runtime::traits::{NumberFor, Block as BlockT, BlockIdTo}; use parity_util_mem::MallocSizeOf; use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender}; pub use self::error::Error; pub use self::builder::{ - new_full_client, + new_full_client, new_client, ServiceBuilder, ServiceBuilderCommand, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, }; @@ -66,7 +71,6 @@ pub use sc_chain_spec::{ }; pub use sp_transaction_pool::{TransactionPool, InPoolTransaction, error::IntoPoolError}; pub use sc_transaction_pool::txpool::Options as TransactionPoolOptions; -pub use sc_client::FinalityNotifications; pub use sc_rpc::Metadata as RpcMetadata; pub use sc_executor::NativeExecutionDispatch; #[doc(hidden)] @@ -76,6 +80,17 @@ pub use sc_network::config::{FinalityProofProvider, OnDemand, BoxFinalityProofRe pub use sc_tracing::TracingReceiver; pub use task_manager::SpawnTaskHandle; use task_manager::TaskManager; +use sp_blockchain::{HeaderBackend, HeaderMetadata, ProvideCache}; +use sp_api::{ProvideRuntimeApi, CallApiAt, ApiExt, ConstructRuntimeApi, ApiErrorExt}; +use sc_client_api::{ + LockImportRun, Backend as BackendT, ProofProvider, ProvideUncles, + StorageProvider, ExecutorProvider, Finalizer, AuxStore, Backend, + BlockBackend, BlockchainEvents, CallExecutor, TransactionFor, + UsageProvider, +}; +use sc_block_builder::BlockBuilderProvider; +use sp_consensus::{block_validation::Chain, BlockImport}; +use sp_block_builder::BlockBuilder; const DEFAULT_PROTOCOL_ID: &str = "sup"; @@ -116,21 +131,104 @@ pub struct Service { impl Unpin for Service {} +/// Client super trait, use this instead of the concrete Client type. +pub trait ClientProvider< + Block: BlockT, + Backend: BackendT, + Executor: CallExecutor, + Runtime: ConstructRuntimeApi, +>: + HeaderBackend + + ProvideRuntimeApi< + Block, + Api = >::RuntimeApi + > + + LockImportRun + + ProofProvider + + BlockBuilderProvider + + ProvideUncles + + StorageProvider + + Chain + + HeaderMetadata + + ExecutorProvider + + ProvideCache + + BlockIdTo + + CallApiAt< + Block, + Error = sp_blockchain::Error, + StateBackend = >::State + > + + BlockImport< + Block, + Error = sp_consensus::Error, + Transaction = TransactionFor + > + + Finalizer + + BlockchainEvents + + BlockBackend + + UsageProvider + + AuxStore +{} + +impl ClientProvider + for + Client + where + Block: BlockT, + Backend: BackendT, + Executor: CallExecutor, + Runtime: ConstructRuntimeApi, + Self: HeaderBackend + + ProvideRuntimeApi< + Block, + Api = >::RuntimeApi + > + + LockImportRun + + ProofProvider + + BlockBuilderProvider + + ProvideUncles + + StorageProvider + + Chain + + HeaderMetadata + + ExecutorProvider + + ProvideCache + + BlockIdTo + + CallApiAt< + Block, + Error = sp_blockchain::Error, + StateBackend = >::State + > + + BlockImport< + Block, + Error = sp_consensus::Error, + Transaction = TransactionFor + > + + Finalizer + + BlockchainEvents + + BlockBackend + + UsageProvider + + AuxStore +{} + /// Abstraction over a Substrate service. -pub trait AbstractService: 'static + Future> + - Spawn + Send + Unpin { +pub trait AbstractService: Future> + Send + Unpin + Spawn + 'static { /// Type of block of this chain. type Block: BlockT; /// Backend storage for the client. - type Backend: 'static + sc_client_api::backend::Backend; + type Backend: 'static + BackendT; /// How to execute calls towards the runtime. - type CallExecutor: 'static + sc_client::CallExecutor + Send + Sync + Clone; + type CallExecutor: 'static + CallExecutor + Send + Sync + Clone; /// API that the runtime provides. type RuntimeApi: Send + Sync; /// Chain selection algorithm. type SelectChain: sp_consensus::SelectChain; /// Transaction pool. type TransactionPool: TransactionPool + MallocSizeOfWasm; + /// The generic Client type, the bounds here are the ones specifically required by + /// internal crates like sc_informant. + type Client: + HeaderMetadata + UsageProvider + + BlockchainEvents + HeaderBackend + Send + Sync; /// Get event stream for telemetry connection established events. fn telemetry_on_connect_stream(&self) -> TracingUnboundedReceiver<()>; @@ -170,7 +268,7 @@ pub trait AbstractService: 'static + Future> + fn rpc_query(&self, mem: &RpcSession, request: &str) -> Pin> + Send>>; /// Get shared client instance. - fn client(&self) -> Arc>; + fn client(&self) -> Arc; /// Get clone of select chain. fn select_chain(&self) -> Option; @@ -198,9 +296,14 @@ impl AbstractService for NetworkService, TExPool, TOc> where TBl: BlockT, - TBackend: 'static + sc_client_api::backend::Backend, - TExec: 'static + sc_client::CallExecutor + Send + Sync + Clone, - TRtApi: 'static + Send + Sync, + TBackend: 'static + Backend, + TExec: 'static + CallExecutor + Send + Sync + Clone, + TRtApi: 'static + Send + Sync + ConstructRuntimeApi>, + >>::RuntimeApi: + sp_api::Core + + ApiExt + + ApiErrorExt + + BlockBuilder, TSc: sp_consensus::SelectChain + 'static + Clone + Send + Unpin, TExPool: 'static + TransactionPool + MallocSizeOfWasm, TOc: 'static + Send + Sync, @@ -211,6 +314,7 @@ where type RuntimeApi = TRtApi; type SelectChain = TSc; type TransactionPool = TExPool; + type Client = Client; fn telemetry_on_connect_stream(&self) -> TracingUnboundedReceiver<()> { let (sink, stream) = tracing_unbounded("mpsc_telemetry_on_connect"); @@ -254,7 +358,7 @@ where ) } - fn client(&self) -> Arc> { + fn client(&self) -> Arc { self.client.clone() } @@ -326,7 +430,7 @@ impl Spawn for /// The `status_sink` contain a list of senders to send a periodic network status to. fn build_network_future< B: BlockT, - C: sc_client::BlockchainEvents, + C: BlockchainEvents, H: sc_network::ExHashT > ( role: Role, diff --git a/client/service/src/metrics.rs b/client/service/src/metrics.rs index 3e4abced89c..6456f9b1ee0 100644 --- a/client/service/src/metrics.rs +++ b/client/service/src/metrics.rs @@ -18,11 +18,11 @@ use std::convert::TryFrom; use crate::NetworkStatus; use prometheus_endpoint::{register, Gauge, U64, F64, Registry, PrometheusError, Opts, GaugeVec}; -use sc_client::ClientInfo; use sc_telemetry::{telemetry, SUBSTRATE_INFO}; use sp_runtime::traits::{NumberFor, Block, SaturatedConversion, UniqueSaturatedInto}; use sp_transaction_pool::PoolStatus; use sp_utils::metrics::register_globals; +use sc_client_api::ClientInfo; use sysinfo::{self, ProcessExt, SystemExt}; diff --git a/client/service/test/Cargo.toml b/client/service/test/Cargo.toml index 957c3327b77..0a270a8eac5 100644 --- a/client/service/test/Cargo.toml +++ b/client/service/test/Cargo.toml @@ -8,21 +8,36 @@ publish = false homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - [dependencies] +hex-literal = "0.2.1" tempfile = "3.1.0" tokio = "0.1.22" futures01 = { package = "futures", version = "0.1.29" } log = "0.4.8" env_logger = "0.7.0" fdlimit = "0.1.4" +parking_lot = "0.10.0" +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } +sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } +sp-storage = { version = "2.0.0-dev", path = "../../../primitives/storage" } +sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../../db" } futures = { version = "0.3.1", features = ["compat"] } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } sc-network = { version = "0.8.0-dev", path = "../../network" } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-client = { version = "0.8.0-dev", path = "../../" } sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } +substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } +sc-executor = { version = "0.8.0-dev", path = "../../executor" } +sp-panic-handler = { version = "2.0.0-dev", path = "../../../primitives/panic-handler" } +parity-scale-codec = "1.3.0" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/service/test/src/client/db.rs b/client/service/test/src/client/db.rs new file mode 100644 index 00000000000..bc175652c9f --- /dev/null +++ b/client/service/test/src/client/db.rs @@ -0,0 +1,55 @@ +// Copyright 2018-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use sp_core::offchain::{OffchainStorage, storage::InMemOffchainStorage}; +use std::sync::Arc; + +type TestBackend = sc_client_api::in_mem::Backend; + +#[test] +fn test_leaves_with_complex_block_tree() { + let backend = Arc::new(TestBackend::new()); + + substrate_test_runtime_client::trait_tests::test_leaves_for_backend(backend); +} + +#[test] +fn test_blockchain_query_by_number_gets_canonical() { + let backend = Arc::new(TestBackend::new()); + + substrate_test_runtime_client::trait_tests::test_blockchain_query_by_number_gets_canonical(backend); +} + +#[test] +fn in_memory_offchain_storage() { + + let mut storage = InMemOffchainStorage::default(); + assert_eq!(storage.get(b"A", b"B"), None); + assert_eq!(storage.get(b"B", b"A"), None); + + storage.set(b"A", b"B", b"C"); + assert_eq!(storage.get(b"A", b"B"), Some(b"C".to_vec())); + assert_eq!(storage.get(b"B", b"A"), None); + + storage.compare_and_set(b"A", b"B", Some(b"X"), b"D"); + assert_eq!(storage.get(b"A", b"B"), Some(b"C".to_vec())); + storage.compare_and_set(b"A", b"B", Some(b"C"), b"D"); + assert_eq!(storage.get(b"A", b"B"), Some(b"D".to_vec())); + + assert!(!storage.compare_and_set(b"B", b"A", Some(b""), b"Y")); + assert!(storage.compare_and_set(b"B", b"A", None, b"X")); + assert_eq!(storage.get(b"B", b"A"), Some(b"X".to_vec())); +} \ No newline at end of file diff --git a/client/service/test/src/client/light.rs b/client/service/test/src/client/light.rs new file mode 100644 index 00000000000..76e48828ee4 --- /dev/null +++ b/client/service/test/src/client/light.rs @@ -0,0 +1,896 @@ +// Copyright 2018-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . +use sc_service::client::light::{ + call_executor::{ + GenesisCallExecutor, + check_execution_proof, + check_execution_proof_with_make_header, + }, + fetcher::LightDataChecker, + blockchain::{BlockchainCache, Blockchain}, + backend::{Backend, GenesisOrUnavailableState}, +}; +use std::sync::Arc; +use sp_runtime::{ + traits::{BlakeTwo256, HashFor, NumberFor}, + generic::BlockId, traits::{Block as _, Header as HeaderT}, Digest, +}; +use std::collections::HashMap; +use parking_lot::Mutex; +use substrate_test_runtime_client::{ + runtime::{Hash, Block, Header}, TestClient, ClientBlockImportExt, +}; +use sp_api::{InitializeBlock, StorageTransactionCache, ProofRecorder, OffchainOverlayedChanges}; +use sp_consensus::{BlockOrigin}; +use sc_executor::{NativeExecutor, WasmExecutionMethod, RuntimeVersion, NativeVersion}; +use sp_core::{H256, tasks::executor as tasks_executor, NativeOrEncoded}; +use sc_client_api::{blockchain::Info, backend::NewBlockState, Backend as ClientBackend, ProofProvider, in_mem::{Backend as InMemBackend, Blockchain as InMemoryBlockchain}, AuxStore, Storage, CallExecutor, cht, ExecutionStrategy, StorageProof, BlockImportOperation, RemoteCallRequest, StorageProvider, ChangesProof, RemoteBodyRequest, RemoteReadRequest, RemoteChangesRequest, FetchChecker, RemoteReadChildRequest, RemoteHeaderRequest}; +use sp_externalities::Extensions; +use sc_block_builder::BlockBuilderProvider; +use sp_blockchain::{ + BlockStatus, Result as ClientResult, Error as ClientError, CachedHeaderMetadata, + HeaderBackend, well_known_cache_keys +}; +use std::panic::UnwindSafe; +use std::cell::RefCell; +use sp_state_machine::{OverlayedChanges, ExecutionManager}; +use parity_scale_codec::{Decode, Encode}; +use super::prepare_client_with_key_changes; +use substrate_test_runtime_client::{ + AccountKeyring, runtime::{self, Extrinsic}, +}; + +use sp_core::{blake2_256, ChangesTrieConfiguration, storage::{well_known_keys, StorageKey, ChildInfo}}; +use sp_state_machine::Backend as _; + +pub type DummyBlockchain = Blockchain; + +pub struct DummyStorage { + pub changes_tries_cht_roots: HashMap, + pub aux_store: Mutex, Vec>>, +} + +impl DummyStorage { + pub fn new() -> Self { + DummyStorage { + changes_tries_cht_roots: HashMap::new(), + aux_store: Mutex::new(HashMap::new()), + } + } +} + +impl sp_blockchain::HeaderBackend for DummyStorage { + fn header(&self, _id: BlockId) -> ClientResult> { + Err(ClientError::Backend("Test error".into())) + } + + fn info(&self) -> Info { + panic!("Test error") + } + + fn status(&self, _id: BlockId) -> ClientResult { + Err(ClientError::Backend("Test error".into())) + } + + fn number(&self, hash: Hash) -> ClientResult>> { + if hash == Default::default() { + Ok(Some(Default::default())) + } else { + Err(ClientError::Backend("Test error".into())) + } + } + + fn hash(&self, number: u64) -> ClientResult> { + if number == 0 { + Ok(Some(Default::default())) + } else { + Err(ClientError::Backend("Test error".into())) + } + } +} + +impl sp_blockchain::HeaderMetadata for DummyStorage { + type Error = ClientError; + + fn header_metadata(&self, hash: Hash) -> Result, Self::Error> { + self.header(BlockId::hash(hash))?.map(|header| CachedHeaderMetadata::from(&header)) + .ok_or(ClientError::UnknownBlock("header not found".to_owned())) + } + fn insert_header_metadata(&self, _hash: Hash, _metadata: CachedHeaderMetadata) {} + fn remove_header_metadata(&self, _hash: Hash) {} +} + +impl AuxStore for DummyStorage { + fn insert_aux< + 'a, + 'b: 'a, + 'c: 'a, + I: IntoIterator, + D: IntoIterator, + >(&self, insert: I, _delete: D) -> ClientResult<()> { + for (k, v) in insert.into_iter() { + self.aux_store.lock().insert(k.to_vec(), v.to_vec()); + } + Ok(()) + } + + fn get_aux(&self, key: &[u8]) -> ClientResult>> { + Ok(self.aux_store.lock().get(key).cloned()) + } +} + +impl Storage for DummyStorage { + fn import_header( + &self, + _header: Header, + _cache: HashMap>, + _state: NewBlockState, + _aux_ops: Vec<(Vec, Option>)>, + ) -> ClientResult<()> { + Ok(()) + } + + fn set_head(&self, _block: BlockId) -> ClientResult<()> { + Err(ClientError::Backend("Test error".into())) + } + + fn finalize_header(&self, _block: BlockId) -> ClientResult<()> { + Err(ClientError::Backend("Test error".into())) + } + + fn last_finalized(&self) -> ClientResult { + Err(ClientError::Backend("Test error".into())) + } + + fn header_cht_root(&self, _cht_size: u64, _block: u64) -> ClientResult> { + Err(ClientError::Backend("Test error".into())) + } + + fn changes_trie_cht_root(&self, cht_size: u64, block: u64) -> ClientResult> { + cht::block_to_cht_number(cht_size, block) + .and_then(|cht_num| self.changes_tries_cht_roots.get(&cht_num)) + .cloned() + .ok_or_else(|| ClientError::Backend( + format!("Test error: CHT for block #{} not found", block) + ).into()) + .map(Some) + } + + fn cache(&self) -> Option>> { + None + } + + fn usage_info(&self) -> Option { + None + } +} + +struct DummyCallExecutor; + +impl CallExecutor for DummyCallExecutor { + type Error = ClientError; + + type Backend = substrate_test_runtime_client::Backend; + + fn call( + &self, + _id: &BlockId, + _method: &str, + _call_data: &[u8], + _strategy: ExecutionStrategy, + _extensions: Option, + ) -> Result, ClientError> { + Ok(vec![42]) + } + + fn contextual_call< + 'a, + IB: Fn() -> ClientResult<()>, + EM: Fn( + Result, Self::Error>, + Result, Self::Error> + ) -> Result, Self::Error>, + R: Encode + Decode + PartialEq, + NC: FnOnce() -> Result + UnwindSafe, + >( + &self, + _initialize_block_fn: IB, + _at: &BlockId, + _method: &str, + _call_data: &[u8], + _changes: &RefCell, + _offchain_changes: &RefCell, + _storage_transaction_cache: Option<&RefCell< + StorageTransactionCache< + Block, + >::State, + > + >>, + _initialize_block: InitializeBlock<'a, Block>, + _execution_manager: ExecutionManager, + _native_call: Option, + _proof_recorder: &Option>, + _extensions: Option, + ) -> ClientResult> where ExecutionManager: Clone { + unreachable!() + } + + fn runtime_version(&self, _id: &BlockId) -> Result { + unreachable!() + } + + fn prove_at_trie_state>>( + &self, + _trie_state: &sp_state_machine::TrieBackend>, + _overlay: &mut OverlayedChanges, + _method: &str, + _call_data: &[u8] + ) -> Result<(Vec, StorageProof), ClientError> { + unreachable!() + } + + fn native_runtime_version(&self) -> Option<&NativeVersion> { + unreachable!() + } +} + +fn local_executor() -> NativeExecutor { + NativeExecutor::new(WasmExecutionMethod::Interpreted, None, 8) +} + +#[test] +fn local_state_is_created_when_genesis_state_is_available() { + let def = Default::default(); + let header0 = substrate_test_runtime_client::runtime::Header::new(0, def, def, def, Default::default()); + + let backend: Backend<_, BlakeTwo256> = Backend::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + ); + let mut op = backend.begin_operation().unwrap(); + op.set_block_data(header0, None, None, NewBlockState::Final).unwrap(); + op.reset_storage(Default::default()).unwrap(); + backend.commit_operation(op).unwrap(); + + match backend.state_at(BlockId::Number(0)).unwrap() { + GenesisOrUnavailableState::Genesis(_) => (), + _ => panic!("unexpected state"), + } +} + +#[test] +fn unavailable_state_is_created_when_genesis_state_is_unavailable() { + let backend: Backend<_, BlakeTwo256> = Backend::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + ); + + match backend.state_at(BlockId::Number(0)).unwrap() { + GenesisOrUnavailableState::Unavailable => (), + _ => panic!("unexpected state"), + } +} + +#[test] +fn light_aux_store_is_updated_via_non_importing_op() { + let backend = Backend::new(Arc::new(DummyBlockchain::new(DummyStorage::new()))); + let mut op = ClientBackend::::begin_operation(&backend).unwrap(); + BlockImportOperation::::insert_aux(&mut op, vec![(vec![1], Some(vec![2]))]).unwrap(); + ClientBackend::::commit_operation(&backend, op).unwrap(); + + assert_eq!(AuxStore::get_aux(&backend, &[1]).unwrap(), Some(vec![2])); +} + +#[test] +fn execution_proof_is_generated_and_checked() { + fn execute(remote_client: &TestClient, at: u64, method: &'static str) -> (Vec, Vec) { + let remote_block_id = BlockId::Number(at); + let remote_header = remote_client.header(&remote_block_id).unwrap().unwrap(); + + // 'fetch' execution proof from remote node + let (remote_result, remote_execution_proof) = remote_client.execution_proof( + &remote_block_id, + method, + &[] + ).unwrap(); + + // check remote execution proof locally + let local_result = check_execution_proof::<_, _, BlakeTwo256>( + &local_executor(), + tasks_executor(), + &RemoteCallRequest { + block: substrate_test_runtime_client::runtime::Hash::default(), + header: remote_header, + method: method.into(), + call_data: vec![], + retry_count: None, + }, + remote_execution_proof, + ).unwrap(); + + (remote_result, local_result) + } + + fn execute_with_proof_failure(remote_client: &TestClient, at: u64, method: &'static str) { + let remote_block_id = BlockId::Number(at); + let remote_header = remote_client.header(&remote_block_id).unwrap().unwrap(); + + // 'fetch' execution proof from remote node + let (_, remote_execution_proof) = remote_client.execution_proof( + &remote_block_id, + method, + &[] + ).unwrap(); + + // check remote execution proof locally + let execution_result = check_execution_proof_with_make_header::<_, _, BlakeTwo256, _>( + &local_executor(), + tasks_executor(), + &RemoteCallRequest { + block: substrate_test_runtime_client::runtime::Hash::default(), + header: remote_header, + method: method.into(), + call_data: vec![], + retry_count: None, + }, + remote_execution_proof, + |header|
::new( + at + 1, + Default::default(), + Default::default(), + header.hash(), + header.digest().clone(), // this makes next header wrong + ), + ); + match execution_result { + Err(sp_blockchain::Error::Execution(_)) => (), + _ => panic!("Unexpected execution result: {:?}", execution_result), + } + } + + // prepare remote client + let mut remote_client = substrate_test_runtime_client::new(); + for i in 1u32..3u32 { + let mut digest = Digest::default(); + digest.push(sp_runtime::generic::DigestItem::Other::(i.to_le_bytes().to_vec())); + remote_client.import_justified( + BlockOrigin::Own, + remote_client.new_block(digest).unwrap().build().unwrap().block, + Default::default(), + ).unwrap(); + } + + // check method that doesn't requires environment + let (remote, local) = execute(&remote_client, 0, "Core_version"); + assert_eq!(remote, local); + + let (remote, local) = execute(&remote_client, 2, "Core_version"); + assert_eq!(remote, local); + + // check method that requires environment + let (_, block) = execute(&remote_client, 0, "BlockBuilder_finalize_block"); + let local_block: Header = Decode::decode(&mut &block[..]).unwrap(); + assert_eq!(local_block.number, 1); + + let (_, block) = execute(&remote_client, 2, "BlockBuilder_finalize_block"); + let local_block: Header = Decode::decode(&mut &block[..]).unwrap(); + assert_eq!(local_block.number, 3); + + // check that proof check doesn't panic even if proof is incorrect AND no panic handler is set + execute_with_proof_failure(&remote_client, 2, "Core_version"); + + // check that proof check doesn't panic even if proof is incorrect AND panic handler is set + sp_panic_handler::set("TEST", "1.2.3"); + execute_with_proof_failure(&remote_client, 2, "Core_version"); +} + +#[test] +fn code_is_executed_at_genesis_only() { + let backend = Arc::new(InMemBackend::::new()); + let def = H256::default(); + let header0 = substrate_test_runtime_client::runtime::Header::new(0, def, def, def, Default::default()); + let hash0 = header0.hash(); + let header1 = substrate_test_runtime_client::runtime::Header::new(1, def, def, hash0, Default::default()); + let hash1 = header1.hash(); + backend.blockchain().insert(hash0, header0, None, None, NewBlockState::Final).unwrap(); + backend.blockchain().insert(hash1, header1, None, None, NewBlockState::Final).unwrap(); + + let genesis_executor = GenesisCallExecutor::new(backend, DummyCallExecutor); + assert_eq!( + genesis_executor.call( + &BlockId::Number(0), + "test_method", + &[], + ExecutionStrategy::NativeElseWasm, + None, + ).unwrap(), + vec![42], + ); + + let call_on_unavailable = genesis_executor.call( + &BlockId::Number(1), + "test_method", + &[], + ExecutionStrategy::NativeElseWasm, + None, + ); + + match call_on_unavailable { + Err(ClientError::NotAvailableOnLightClient) => (), + _ => unreachable!("unexpected result: {:?}", call_on_unavailable), + } +} + + +type TestChecker = LightDataChecker< + NativeExecutor, + BlakeTwo256, + Block, + DummyStorage, +>; + +fn prepare_for_read_proof_check() -> (TestChecker, Header, StorageProof, u32) { + // prepare remote client + let remote_client = substrate_test_runtime_client::new(); + let remote_block_id = BlockId::Number(0); + let remote_block_hash = remote_client.block_hash(0).unwrap().unwrap(); + let mut remote_block_header = remote_client.header(&remote_block_id).unwrap().unwrap(); + remote_block_header.state_root = remote_client.state_at(&remote_block_id).unwrap() + .storage_root(::std::iter::empty()).0.into(); + + // 'fetch' read proof from remote node + let heap_pages = remote_client.storage(&remote_block_id, &StorageKey(well_known_keys::HEAP_PAGES.to_vec())) + .unwrap() + .and_then(|v| Decode::decode(&mut &v.0[..]).ok()).unwrap(); + let remote_read_proof = remote_client.read_proof( + &remote_block_id, + &mut std::iter::once(well_known_keys::HEAP_PAGES), + ).unwrap(); + + // check remote read proof locally + let local_storage = InMemoryBlockchain::::new(); + local_storage.insert( + remote_block_hash, + remote_block_header.clone(), + None, + None, + NewBlockState::Final, + ).unwrap(); + let local_checker = LightDataChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + (local_checker, remote_block_header, remote_read_proof, heap_pages) +} + +fn prepare_for_read_child_proof_check() -> (TestChecker, Header, StorageProof, Vec) { + use substrate_test_runtime_client::DefaultTestClientBuilderExt; + use substrate_test_runtime_client::TestClientBuilderExt; + let child_info = ChildInfo::new_default(b"child1"); + let child_info = &child_info; + // prepare remote client + let remote_client = substrate_test_runtime_client::TestClientBuilder::new() + .add_extra_child_storage( + child_info, + b"key1".to_vec(), + b"value1".to_vec(), + ).build(); + let remote_block_id = BlockId::Number(0); + let remote_block_hash = remote_client.block_hash(0).unwrap().unwrap(); + let mut remote_block_header = remote_client.header(&remote_block_id).unwrap().unwrap(); + remote_block_header.state_root = remote_client.state_at(&remote_block_id).unwrap() + .storage_root(::std::iter::empty()).0.into(); + + // 'fetch' child read proof from remote node + let child_value = remote_client.child_storage( + &remote_block_id, + child_info, + &StorageKey(b"key1".to_vec()), + ).unwrap().unwrap().0; + assert_eq!(b"value1"[..], child_value[..]); + let remote_read_proof = remote_client.read_child_proof( + &remote_block_id, + child_info, + &mut std::iter::once("key1".as_bytes()), + ).unwrap(); + + // check locally + let local_storage = InMemoryBlockchain::::new(); + local_storage.insert( + remote_block_hash, + remote_block_header.clone(), + None, + None, + NewBlockState::Final, + ).unwrap(); + let local_checker = LightDataChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + (local_checker, remote_block_header, remote_read_proof, child_value) +} + +fn prepare_for_header_proof_check(insert_cht: bool) -> (TestChecker, Hash, Header, StorageProof) { + // prepare remote client + let mut remote_client = substrate_test_runtime_client::new(); + let mut local_headers_hashes = Vec::new(); + for i in 0..4 { + let block = remote_client.new_block(Default::default()).unwrap().build().unwrap().block; + remote_client.import(BlockOrigin::Own, block).unwrap(); + local_headers_hashes.push( + remote_client.block_hash(i + 1) + .map_err(|_| ClientError::Backend("TestError".into())) + ); + } + + // 'fetch' header proof from remote node + let remote_block_id = BlockId::Number(1); + let (remote_block_header, remote_header_proof) = remote_client.header_proof_with_cht_size(&remote_block_id, 4).unwrap(); + + // check remote read proof locally + let local_storage = InMemoryBlockchain::::new(); + let local_cht_root = cht::compute_root::(4, 0, local_headers_hashes).unwrap(); + if insert_cht { + local_storage.insert_cht_root(1, local_cht_root); + } + let local_checker = LightDataChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + (local_checker, local_cht_root, remote_block_header, remote_header_proof) +} + +fn header_with_computed_extrinsics_root(extrinsics: Vec) -> Header { + use sp_trie::{TrieConfiguration, trie_types::Layout}; + let iter = extrinsics.iter().map(Encode::encode); + let extrinsics_root = Layout::::ordered_trie_root(iter); + + // only care about `extrinsics_root` + Header::new(0, extrinsics_root, H256::zero(), H256::zero(), Default::default()) +} + +#[test] +fn storage_read_proof_is_generated_and_checked() { + let (local_checker, remote_block_header, remote_read_proof, heap_pages) = prepare_for_read_proof_check(); + assert_eq!((&local_checker as &dyn FetchChecker).check_read_proof(&RemoteReadRequest::
{ + block: remote_block_header.hash(), + header: remote_block_header, + keys: vec![well_known_keys::HEAP_PAGES.to_vec()], + retry_count: None, + }, remote_read_proof).unwrap().remove(well_known_keys::HEAP_PAGES).unwrap().unwrap()[0], heap_pages as u8); +} + +#[test] +fn storage_child_read_proof_is_generated_and_checked() { + let child_info = ChildInfo::new_default(&b"child1"[..]); + let ( + local_checker, + remote_block_header, + remote_read_proof, + result, + ) = prepare_for_read_child_proof_check(); + assert_eq!((&local_checker as &dyn FetchChecker).check_read_child_proof( + &RemoteReadChildRequest::
{ + block: remote_block_header.hash(), + header: remote_block_header, + storage_key: child_info.prefixed_storage_key(), + keys: vec![b"key1".to_vec()], + retry_count: None, + }, + remote_read_proof + ).unwrap().remove(b"key1".as_ref()).unwrap().unwrap(), result); +} + +#[test] +fn header_proof_is_generated_and_checked() { + let (local_checker, local_cht_root, remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); + assert_eq!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ + cht_root: local_cht_root, + block: 1, + retry_count: None, + }, Some(remote_block_header.clone()), remote_header_proof).unwrap(), remote_block_header); +} + +#[test] +fn check_header_proof_fails_if_cht_root_is_invalid() { + let (local_checker, _, mut remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); + remote_block_header.number = 100; + assert!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ + cht_root: Default::default(), + block: 1, + retry_count: None, + }, Some(remote_block_header.clone()), remote_header_proof).is_err()); +} + +#[test] +fn check_header_proof_fails_if_invalid_header_provided() { + let (local_checker, local_cht_root, mut remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); + remote_block_header.number = 100; + assert!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ + cht_root: local_cht_root, + block: 1, + retry_count: None, + }, Some(remote_block_header.clone()), remote_header_proof).is_err()); +} + +#[test] +fn changes_proof_is_generated_and_checked_when_headers_are_not_pruned() { + let (remote_client, local_roots, test_cases) = prepare_client_with_key_changes(); + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + let local_checker = &local_checker as &dyn FetchChecker; + let max = remote_client.chain_info().best_number; + let max_hash = remote_client.chain_info().best_hash; + + for (index, (begin, end, key, expected_result)) in test_cases.into_iter().enumerate() { + let begin_hash = remote_client.block_hash(begin).unwrap().unwrap(); + let end_hash = remote_client.block_hash(end).unwrap().unwrap(); + + // 'fetch' changes proof from remote node + let key = StorageKey(key); + let remote_proof = remote_client.key_changes_proof( + begin_hash, end_hash, begin_hash, max_hash, None, &key + ).unwrap(); + + // check proof on local client + let local_roots_range = local_roots.clone()[(begin - 1) as usize..].to_vec(); + let config = ChangesTrieConfiguration::new(4, 2); + let request = RemoteChangesRequest::
{ + changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { + zero: (0, Default::default()), + end: None, + config: Some(config), + }], + first_block: (begin, begin_hash), + last_block: (end, end_hash), + max_block: (max, max_hash), + tries_roots: (begin, begin_hash, local_roots_range), + key: key.0, + storage_key: None, + retry_count: None, + }; + let local_result = local_checker.check_changes_proof(&request, ChangesProof { + max_block: remote_proof.max_block, + proof: remote_proof.proof, + roots: remote_proof.roots, + roots_proof: remote_proof.roots_proof, + }).unwrap(); + + // ..and ensure that result is the same as on remote node + match local_result == expected_result { + true => (), + false => panic!(format!("Failed test {}: local = {:?}, expected = {:?}", + index, local_result, expected_result)), + } + } +} + +#[test] +fn changes_proof_is_generated_and_checked_when_headers_are_pruned() { + // we're testing this test case here: + // (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), + let (remote_client, remote_roots, _) = prepare_client_with_key_changes(); + let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); + let dave = StorageKey(dave); + + // 'fetch' changes proof from remote node: + // we're fetching changes for range b1..b4 + // we do not know changes trie roots before b3 (i.e. we only know b3+b4) + // but we have changes trie CHT root for b1...b4 + let b1 = remote_client.block_hash_from_id(&BlockId::Number(1)).unwrap().unwrap(); + let b3 = remote_client.block_hash_from_id(&BlockId::Number(3)).unwrap().unwrap(); + let b4 = remote_client.block_hash_from_id(&BlockId::Number(4)).unwrap().unwrap(); + let remote_proof = remote_client.key_changes_proof_with_cht_size( + b1, b4, b3, b4, None, &dave, 4 + ).unwrap(); + + // prepare local checker, having a root of changes trie CHT#0 + let local_cht_root = cht::compute_root::(4, 0, remote_roots.iter().cloned().map(|ct| Ok(Some(ct)))).unwrap(); + let mut local_storage = DummyStorage::new(); + local_storage.changes_tries_cht_roots.insert(0, local_cht_root); + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(local_storage)), + local_executor(), + tasks_executor(), + ); + + // check proof on local client + let config = ChangesTrieConfiguration::new(4, 2); + let request = RemoteChangesRequest::
{ + changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { + zero: (0, Default::default()), + end: None, + config: Some(config), + }], + first_block: (1, b1), + last_block: (4, b4), + max_block: (4, b4), + tries_roots: (3, b3, vec![remote_roots[2].clone(), remote_roots[3].clone()]), + storage_key: None, + key: dave.0, + retry_count: None, + }; + let local_result = local_checker.check_changes_proof_with_cht_size(&request, ChangesProof { + max_block: remote_proof.max_block, + proof: remote_proof.proof, + roots: remote_proof.roots, + roots_proof: remote_proof.roots_proof, + }, 4).unwrap(); + + assert_eq!(local_result, vec![(4, 0), (1, 1), (1, 0)]); +} + +#[test] +fn check_changes_proof_fails_if_proof_is_wrong() { + let (remote_client, local_roots, test_cases) = prepare_client_with_key_changes(); + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + let local_checker = &local_checker as &dyn FetchChecker; + let max = remote_client.chain_info().best_number; + let max_hash = remote_client.chain_info().best_hash; + + let (begin, end, key, _) = test_cases[0].clone(); + let begin_hash = remote_client.block_hash(begin).unwrap().unwrap(); + let end_hash = remote_client.block_hash(end).unwrap().unwrap(); + + // 'fetch' changes proof from remote node + let key = StorageKey(key); + let remote_proof = remote_client.key_changes_proof( + begin_hash, end_hash, begin_hash, max_hash, None, &key).unwrap(); + + let local_roots_range = local_roots.clone()[(begin - 1) as usize..].to_vec(); + let config = ChangesTrieConfiguration::new(4, 2); + let request = RemoteChangesRequest::
{ + changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { + zero: (0, Default::default()), + end: None, + config: Some(config), + }], + first_block: (begin, begin_hash), + last_block: (end, end_hash), + max_block: (max, max_hash), + tries_roots: (begin, begin_hash, local_roots_range.clone()), + storage_key: None, + key: key.0, + retry_count: None, + }; + + // check proof on local client using max from the future + assert!(local_checker.check_changes_proof(&request, ChangesProof { + max_block: remote_proof.max_block + 1, + proof: remote_proof.proof.clone(), + roots: remote_proof.roots.clone(), + roots_proof: remote_proof.roots_proof.clone(), + }).is_err()); + + // check proof on local client using broken proof + assert!(local_checker.check_changes_proof(&request, ChangesProof { + max_block: remote_proof.max_block, + proof: local_roots_range.clone().into_iter().map(|v| v.as_ref().to_vec()).collect(), + roots: remote_proof.roots, + roots_proof: remote_proof.roots_proof, + }).is_err()); + + // extra roots proofs are provided + assert!(local_checker.check_changes_proof(&request, ChangesProof { + max_block: remote_proof.max_block, + proof: remote_proof.proof.clone(), + roots: vec![(begin - 1, Default::default())].into_iter().collect(), + roots_proof: StorageProof::empty(), + }).is_err()); + assert!(local_checker.check_changes_proof(&request, ChangesProof { + max_block: remote_proof.max_block, + proof: remote_proof.proof.clone(), + roots: vec![(end + 1, Default::default())].into_iter().collect(), + roots_proof: StorageProof::empty(), + }).is_err()); +} + +#[test] +fn check_changes_tries_proof_fails_if_proof_is_wrong() { + // we're testing this test case here: + // (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), + let (remote_client, remote_roots, _) = prepare_client_with_key_changes(); + let local_cht_root = cht::compute_root::( + 4, 0, remote_roots.iter().cloned().map(|ct| Ok(Some(ct)))).unwrap(); + let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); + let dave = StorageKey(dave); + + // 'fetch' changes proof from remote node: + // we're fetching changes for range b1..b4 + // we do not know changes trie roots before b3 (i.e. we only know b3+b4) + // but we have changes trie CHT root for b1...b4 + let b1 = remote_client.block_hash_from_id(&BlockId::Number(1)).unwrap().unwrap(); + let b3 = remote_client.block_hash_from_id(&BlockId::Number(3)).unwrap().unwrap(); + let b4 = remote_client.block_hash_from_id(&BlockId::Number(4)).unwrap().unwrap(); + let remote_proof = remote_client.key_changes_proof_with_cht_size( + b1, b4, b3, b4, None, &dave, 4 + ).unwrap(); + + // fails when changes trie CHT is missing from the local db + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + assert!(local_checker.check_changes_tries_proof(4, &remote_proof.roots, + remote_proof.roots_proof.clone()).is_err()); + + // fails when proof is broken + let mut local_storage = DummyStorage::new(); + local_storage.changes_tries_cht_roots.insert(0, local_cht_root); + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(local_storage)), + local_executor(), + tasks_executor(), + ); + let result = local_checker.check_changes_tries_proof( + 4, &remote_proof.roots, StorageProof::empty() + ); + assert!(result.is_err()); +} + +#[test] +fn check_body_proof_faulty() { + let header = header_with_computed_extrinsics_root( + vec![Extrinsic::IncludeData(vec![1, 2, 3, 4])] + ); + let block = Block::new(header.clone(), Vec::new()); + + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + + let body_request = RemoteBodyRequest { + header: header.clone(), + retry_count: None, + }; + + assert!( + local_checker.check_body_proof(&body_request, block.extrinsics).is_err(), + "vec![1, 2, 3, 4] != vec![]" + ); +} + +#[test] +fn check_body_proof_of_same_data_should_succeed() { + let extrinsics = vec![Extrinsic::IncludeData(vec![1, 2, 3, 4, 5, 6, 7, 8, 255])]; + + let header = header_with_computed_extrinsics_root(extrinsics.clone()); + let block = Block::new(header.clone(), extrinsics); + + let local_checker = TestChecker::new( + Arc::new(DummyBlockchain::new(DummyStorage::new())), + local_executor(), + tasks_executor(), + ); + + let body_request = RemoteBodyRequest { + header: header.clone(), + retry_count: None, + }; + + assert!(local_checker.check_body_proof(&body_request, block.extrinsics).is_ok()); +} diff --git a/client/service/test/src/client/mod.rs b/client/service/test/src/client/mod.rs new file mode 100644 index 00000000000..e81d1ebb536 --- /dev/null +++ b/client/service/test/src/client/mod.rs @@ -0,0 +1,1802 @@ +// Copyright 2018-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use parity_scale_codec::{Encode, Decode, Joiner}; +use sc_executor::native_executor_instance; +use sp_state_machine::{StateMachine, OverlayedChanges, ExecutionStrategy, InMemoryBackend}; +use substrate_test_runtime_client::{ + prelude::*, + runtime::{ + self, genesismap::{GenesisConfig, insert_genesis_block}, + Hash, Transfer, Block, BlockNumber, Header, Digest, RuntimeApi, + }, + AccountKeyring, Sr25519Keyring, TestClientBuilder, ClientBlockImportExt, + BlockBuilderExt, DefaultTestClientBuilderExt, TestClientBuilderExt, ClientExt, +}; +use sc_client_api::{ + StorageProvider, BlockBackend, in_mem, BlockchainEvents, +}; +use sc_client_db::{Backend, DatabaseSettings, DatabaseSettingsSrc, PruningMode}; +use sc_block_builder::BlockBuilderProvider; +use sc_service::client::{self, Client, LocalCallExecutor, new_in_mem}; +use sp_runtime::traits::{ + BlakeTwo256, Block as BlockT, Header as HeaderT, +}; +use substrate_test_runtime::TestAPI; +use sp_state_machine::backend::Backend as _; +use sp_api::{ProvideRuntimeApi, OffchainOverlayedChanges}; +use sp_core::tasks::executor as tasks_executor; +use sp_core::{H256, ChangesTrieConfiguration, blake2_256}; +use std::collections::{HashMap, HashSet}; +use std::sync::Arc; +use sp_consensus::{ + BlockOrigin, SelectChain, BlockImport, Error as ConsensusError, BlockCheckParams, ImportResult, + BlockStatus, BlockImportParams, ForkChoiceStrategy, +}; +use sp_storage::StorageKey; +use sp_trie::{TrieConfiguration, trie_types::Layout}; +use sp_runtime::{generic::BlockId, DigestItem}; +use hex_literal::hex; + +mod light; +mod db; + +native_executor_instance!( + Executor, + substrate_test_runtime_client::runtime::api::dispatch, + substrate_test_runtime_client::runtime::native_version, +); + +fn executor() -> sc_executor::NativeExecutor { + sc_executor::NativeExecutor::new( + sc_executor::WasmExecutionMethod::Interpreted, + None, + 8, + ) +} + +pub fn prepare_client_with_key_changes() -> ( + client::Client< + substrate_test_runtime_client::Backend, + substrate_test_runtime_client::Executor, + Block, + RuntimeApi + >, + Vec, + Vec<(u64, u64, Vec, Vec<(u64, u32)>)>, +) { + // prepare block structure + let blocks_transfers = vec![ + vec![(AccountKeyring::Alice, AccountKeyring::Dave), (AccountKeyring::Bob, AccountKeyring::Dave)], + vec![(AccountKeyring::Charlie, AccountKeyring::Eve)], + vec![], + vec![(AccountKeyring::Alice, AccountKeyring::Dave)], + ]; + + // prepare client ang import blocks + let mut local_roots = Vec::new(); + let config = Some(ChangesTrieConfiguration::new(4, 2)); + let mut remote_client = TestClientBuilder::new().changes_trie_config(config).build(); + let mut nonces: HashMap<_, u64> = Default::default(); + for (i, block_transfers) in blocks_transfers.into_iter().enumerate() { + let mut builder = remote_client.new_block(Default::default()).unwrap(); + for (from, to) in block_transfers { + builder.push_transfer(Transfer { + from: from.into(), + to: to.into(), + amount: 1, + nonce: *nonces.entry(from).and_modify(|n| { *n = *n + 1 }).or_default(), + }).unwrap(); + } + let block = builder.build().unwrap().block; + remote_client.import(BlockOrigin::Own, block).unwrap(); + + let header = remote_client.header(&BlockId::Number(i as u64 + 1)).unwrap().unwrap(); + let trie_root = header.digest().log(DigestItem::as_changes_trie_root) + .map(|root| H256::from_slice(root.as_ref())) + .unwrap(); + local_roots.push(trie_root); + } + + // prepare test cases + let alice = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Alice.into())).to_vec(); + let bob = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Bob.into())).to_vec(); + let charlie = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Charlie.into())).to_vec(); + let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); + let eve = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Eve.into())).to_vec(); + let ferdie = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Ferdie.into())).to_vec(); + let test_cases = vec![ + (1, 4, alice.clone(), vec![(4, 0), (1, 0)]), + (1, 3, alice.clone(), vec![(1, 0)]), + (2, 4, alice.clone(), vec![(4, 0)]), + (2, 3, alice.clone(), vec![]), + (1, 4, bob.clone(), vec![(1, 1)]), + (1, 1, bob.clone(), vec![(1, 1)]), + (2, 4, bob.clone(), vec![]), + (1, 4, charlie.clone(), vec![(2, 0)]), + (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), + (1, 1, dave.clone(), vec![(1, 1), (1, 0)]), + (3, 4, dave.clone(), vec![(4, 0)]), + (1, 4, eve.clone(), vec![(2, 0)]), + (1, 1, eve.clone(), vec![]), + (3, 4, eve.clone(), vec![]), + (1, 4, ferdie.clone(), vec![]), + ]; + + (remote_client, local_roots, test_cases) +} + +fn construct_block( + backend: &InMemoryBackend, + number: BlockNumber, + parent_hash: Hash, + state_root: Hash, + txs: Vec, +) -> (Vec, Hash) { + let transactions = txs.into_iter().map(|tx| tx.into_signed_tx()).collect::>(); + + let iter = transactions.iter().map(Encode::encode); + let extrinsics_root = Layout::::ordered_trie_root(iter).into(); + + let mut header = Header { + parent_hash, + number, + state_root, + extrinsics_root, + digest: Digest { logs: vec![] }, + }; + let hash = header.hash(); + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); + let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); + + StateMachine::new( + backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "Core_initialize_block", + &header.encode(), + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::NativeElseWasm, + ).unwrap(); + + for tx in transactions.iter() { + StateMachine::new( + backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "BlockBuilder_apply_extrinsic", + &tx.encode(), + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::NativeElseWasm, + ).unwrap(); + } + + let ret_data = StateMachine::new( + backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "BlockBuilder_finalize_block", + &[], + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::NativeElseWasm, + ).unwrap(); + header = Header::decode(&mut &ret_data[..]).unwrap(); + + (vec![].and(&Block { header, extrinsics: transactions }), hash) +} + +fn block1(genesis_hash: Hash, backend: &InMemoryBackend) -> (Vec, Hash) { + construct_block( + backend, + 1, + genesis_hash, + hex!("25e5b37074063ab75c889326246640729b40d0c86932edc527bc80db0e04fe5c").into(), + vec![Transfer { + from: AccountKeyring::One.into(), + to: AccountKeyring::Two.into(), + amount: 69, + nonce: 0, + }], + ) +} + +#[test] +fn construct_genesis_should_work_with_native() { + let mut storage = GenesisConfig::new( + None, + vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], + vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], + 1000, + None, + Default::default(), + ).genesis_map(); + let genesis_hash = insert_genesis_block(&mut storage); + + let backend = InMemoryBackend::from(storage); + let (b1data, _b1hash) = block1(genesis_hash, &backend); + let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); + let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); + + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + + let _ = StateMachine::new( + &backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "Core_execute_block", + &b1data, + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::NativeElseWasm, + ).unwrap(); +} + +#[test] +fn construct_genesis_should_work_with_wasm() { + let mut storage = GenesisConfig::new( + None, + vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], + vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], + 1000, + None, + Default::default(), + ).genesis_map(); + let genesis_hash = insert_genesis_block(&mut storage); + + let backend = InMemoryBackend::from(storage); + let (b1data, _b1hash) = block1(genesis_hash, &backend); + let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); + let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); + + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + + let _ = StateMachine::new( + &backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "Core_execute_block", + &b1data, + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::AlwaysWasm, + ).unwrap(); +} + +#[test] +fn construct_genesis_with_bad_transaction_should_panic() { + let mut storage = GenesisConfig::new( + None, + vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], + vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], + 68, + None, + Default::default(), + ).genesis_map(); + let genesis_hash = insert_genesis_block(&mut storage); + + let backend = InMemoryBackend::from(storage); + let (b1data, _b1hash) = block1(genesis_hash, &backend); + let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); + let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); + + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + + let r = StateMachine::new( + &backend, + sp_state_machine::disabled_changes_trie_state::<_, u64>(), + &mut overlay, + &mut offchain_overlay, + &executor(), + "Core_execute_block", + &b1data, + Default::default(), + &runtime_code, + tasks_executor(), + ).execute( + ExecutionStrategy::NativeElseWasm, + ); + assert!(r.is_err()); +} + + +#[test] +fn client_initializes_from_genesis_ok() { + let client = substrate_test_runtime_client::new(); + + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.chain_info().best_number), + AccountKeyring::Alice.into(), + ).unwrap(), + 1000 + ); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.chain_info().best_number), + AccountKeyring::Ferdie.into(), + ).unwrap(), + 0 + ); +} + +#[test] +fn block_builder_works_with_no_transactions() { + let mut client = substrate_test_runtime_client::new(); + + let block = client.new_block(Default::default()).unwrap().build().unwrap().block; + + client.import(BlockOrigin::Own, block).unwrap(); + + assert_eq!(client.chain_info().best_number, 1); +} + +#[test] +fn block_builder_works_with_transactions() { + let mut client = substrate_test_runtime_client::new(); + + let mut builder = client.new_block(Default::default()).unwrap(); + + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 42, + nonce: 0, + }).unwrap(); + + let block = builder.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + + assert_eq!(client.chain_info().best_number, 1); + assert_ne!( + client.state_at(&BlockId::Number(1)).unwrap().pairs(), + client.state_at(&BlockId::Number(0)).unwrap().pairs() + ); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.chain_info().best_number), + AccountKeyring::Alice.into(), + ).unwrap(), + 958 + ); + assert_eq!( + client.runtime_api().balance_of( + &BlockId::Number(client.chain_info().best_number), + AccountKeyring::Ferdie.into(), + ).unwrap(), + 42 + ); +} + +#[test] +fn block_builder_does_not_include_invalid() { + let mut client = substrate_test_runtime_client::new(); + + let mut builder = client.new_block(Default::default()).unwrap(); + + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 42, + nonce: 0, + }).unwrap(); + + assert!( + builder.push_transfer(Transfer { + from: AccountKeyring::Eve.into(), + to: AccountKeyring::Alice.into(), + amount: 42, + nonce: 0, + }).is_err() + ); + + let block = builder.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + + assert_eq!(client.chain_info().best_number, 1); + assert_ne!( + client.state_at(&BlockId::Number(1)).unwrap().pairs(), + client.state_at(&BlockId::Number(0)).unwrap().pairs() + ); + assert_eq!(client.body(&BlockId::Number(1)).unwrap().unwrap().len(), 1) +} + +#[test] +fn best_containing_with_genesis_block() { + // block tree: + // G + + let (client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); + + let genesis_hash = client.chain_info().genesis_hash; + + assert_eq!( + genesis_hash.clone(), + longest_chain_select.finality_target(genesis_hash.clone(), None).unwrap().unwrap() + ); +} + +#[test] +fn best_containing_with_hash_not_found() { + // block tree: + // G + + let (client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); + + let uninserted_block = client.new_block(Default::default()).unwrap().build().unwrap().block; + + assert_eq!( + None, + longest_chain_select.finality_target(uninserted_block.hash().clone(), None).unwrap() + ); +} + +#[test] +fn uncles_with_only_ancestors() { + // block tree: + // G -> A1 -> A2 + let mut client = substrate_test_runtime_client::new(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + let v: Vec = Vec::new(); + assert_eq!(v, client.uncles(a2.hash(), 3).unwrap()); +} + +#[test] +fn uncles_with_multiple_forks() { + // block tree: + // G -> A1 -> A2 -> A3 -> A4 -> A5 + // A1 -> B2 -> B3 -> B4 + // B2 -> C3 + // A1 -> D2 + let mut client = substrate_test_runtime_client::new(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + // A2 -> A3 + let a3 = client.new_block_at( + &BlockId::Hash(a2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a3.clone()).unwrap(); + + // A3 -> A4 + let a4 = client.new_block_at( + &BlockId::Hash(a3.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a4.clone()).unwrap(); + + // A4 -> A5 + let a5 = client.new_block_at( + &BlockId::Hash(a4.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a5.clone()).unwrap(); + + // A1 -> B2 + let mut builder = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise B2 has the same hash as A2 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 41, + nonce: 0, + }).unwrap(); + let b2 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, b2.clone()).unwrap(); + + // B2 -> B3 + let b3 = client.new_block_at( + &BlockId::Hash(b2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b3.clone()).unwrap(); + + // B3 -> B4 + let b4 = client.new_block_at( + &BlockId::Hash(b3.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b4.clone()).unwrap(); + + // // B2 -> C3 + let mut builder = client.new_block_at( + &BlockId::Hash(b2.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise C3 has the same hash as B3 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 1, + }).unwrap(); + let c3 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, c3.clone()).unwrap(); + + // A1 -> D2 + let mut builder = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise D2 has the same hash as B2 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + let d2 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, d2.clone()).unwrap(); + + let genesis_hash = client.chain_info().genesis_hash; + + let uncles1 = client.uncles(a4.hash(), 10).unwrap(); + assert_eq!(vec![b2.hash(), d2.hash()], uncles1); + + let uncles2 = client.uncles(a4.hash(), 0).unwrap(); + assert_eq!(0, uncles2.len()); + + let uncles3 = client.uncles(a1.hash(), 10).unwrap(); + assert_eq!(0, uncles3.len()); + + let uncles4 = client.uncles(genesis_hash, 10).unwrap(); + assert_eq!(0, uncles4.len()); + + let uncles5 = client.uncles(d2.hash(), 10).unwrap(); + assert_eq!(vec![a2.hash(), b2.hash()], uncles5); + + let uncles6 = client.uncles(b3.hash(), 1).unwrap(); + assert_eq!(vec![c3.hash()], uncles6); +} + +#[test] +fn best_containing_on_longest_chain_with_single_chain_3_blocks() { + // block tree: + // G -> A1 -> A2 + + let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + let genesis_hash = client.chain_info().genesis_hash; + + assert_eq!(a2.hash(), longest_chain_select.finality_target(genesis_hash, None).unwrap().unwrap()); + assert_eq!(a2.hash(), longest_chain_select.finality_target(a1.hash(), None).unwrap().unwrap()); + assert_eq!(a2.hash(), longest_chain_select.finality_target(a2.hash(), None).unwrap().unwrap()); +} + +#[test] +fn best_containing_on_longest_chain_with_multiple_forks() { + // block tree: + // G -> A1 -> A2 -> A3 -> A4 -> A5 + // A1 -> B2 -> B3 -> B4 + // B2 -> C3 + // A1 -> D2 + let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + // A2 -> A3 + let a3 = client.new_block_at( + &BlockId::Hash(a2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a3.clone()).unwrap(); + + // A3 -> A4 + let a4 = client.new_block_at( + &BlockId::Hash(a3.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a4.clone()).unwrap(); + + // A4 -> A5 + let a5 = client.new_block_at( + &BlockId::Hash(a4.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a5.clone()).unwrap(); + + // A1 -> B2 + let mut builder = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise B2 has the same hash as A2 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 41, + nonce: 0, + }).unwrap(); + let b2 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, b2.clone()).unwrap(); + + // B2 -> B3 + let b3 = client.new_block_at( + &BlockId::Hash(b2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b3.clone()).unwrap(); + + // B3 -> B4 + let b4 = client.new_block_at( + &BlockId::Hash(b3.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b4.clone()).unwrap(); + + // // B2 -> C3 + let mut builder = client.new_block_at( + &BlockId::Hash(b2.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise C3 has the same hash as B3 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 1, + }).unwrap(); + let c3 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, c3.clone()).unwrap(); + + // A1 -> D2 + let mut builder = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap(); + // this push is required as otherwise D2 has the same hash as B2 and won't get imported + builder.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + let d2 = builder.build().unwrap().block; + client.import(BlockOrigin::Own, d2.clone()).unwrap(); + + assert_eq!(client.chain_info().best_hash, a5.hash()); + + let genesis_hash = client.chain_info().genesis_hash; + let leaves = longest_chain_select.leaves().unwrap(); + + assert!(leaves.contains(&a5.hash())); + assert!(leaves.contains(&b4.hash())); + assert!(leaves.contains(&c3.hash())); + assert!(leaves.contains(&d2.hash())); + assert_eq!(leaves.len(), 4); + + // search without restriction + + assert_eq!(a5.hash(), longest_chain_select.finality_target( + genesis_hash, None).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a1.hash(), None).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a2.hash(), None).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a3.hash(), None).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a4.hash(), None).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a5.hash(), None).unwrap().unwrap()); + + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b2.hash(), None).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b3.hash(), None).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b4.hash(), None).unwrap().unwrap()); + + assert_eq!(c3.hash(), longest_chain_select.finality_target( + c3.hash(), None).unwrap().unwrap()); + + assert_eq!(d2.hash(), longest_chain_select.finality_target( + d2.hash(), None).unwrap().unwrap()); + + + // search only blocks with number <= 5. equivalent to without restriction for this scenario + + assert_eq!(a5.hash(), longest_chain_select.finality_target( + genesis_hash, Some(5)).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a1.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a2.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a3.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a4.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(a5.hash(), longest_chain_select.finality_target( + a5.hash(), Some(5)).unwrap().unwrap()); + + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b2.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b3.hash(), Some(5)).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b4.hash(), Some(5)).unwrap().unwrap()); + + assert_eq!(c3.hash(), longest_chain_select.finality_target( + c3.hash(), Some(5)).unwrap().unwrap()); + + assert_eq!(d2.hash(), longest_chain_select.finality_target( + d2.hash(), Some(5)).unwrap().unwrap()); + + + // search only blocks with number <= 4 + + assert_eq!(a4.hash(), longest_chain_select.finality_target( + genesis_hash, Some(4)).unwrap().unwrap()); + assert_eq!(a4.hash(), longest_chain_select.finality_target( + a1.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(a4.hash(), longest_chain_select.finality_target( + a2.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(a4.hash(), longest_chain_select.finality_target( + a3.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(a4.hash(), longest_chain_select.finality_target( + a4.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a5.hash(), Some(4)).unwrap()); + + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b2.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b3.hash(), Some(4)).unwrap().unwrap()); + assert_eq!(b4.hash(), longest_chain_select.finality_target( + b4.hash(), Some(4)).unwrap().unwrap()); + + assert_eq!(c3.hash(), longest_chain_select.finality_target( + c3.hash(), Some(4)).unwrap().unwrap()); + + assert_eq!(d2.hash(), longest_chain_select.finality_target( + d2.hash(), Some(4)).unwrap().unwrap()); + + + // search only blocks with number <= 3 + + assert_eq!(a3.hash(), longest_chain_select.finality_target( + genesis_hash, Some(3)).unwrap().unwrap()); + assert_eq!(a3.hash(), longest_chain_select.finality_target( + a1.hash(), Some(3)).unwrap().unwrap()); + assert_eq!(a3.hash(), longest_chain_select.finality_target( + a2.hash(), Some(3)).unwrap().unwrap()); + assert_eq!(a3.hash(), longest_chain_select.finality_target( + a3.hash(), Some(3)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a4.hash(), Some(3)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a5.hash(), Some(3)).unwrap()); + + assert_eq!(b3.hash(), longest_chain_select.finality_target( + b2.hash(), Some(3)).unwrap().unwrap()); + assert_eq!(b3.hash(), longest_chain_select.finality_target( + b3.hash(), Some(3)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b4.hash(), Some(3)).unwrap()); + + assert_eq!(c3.hash(), longest_chain_select.finality_target( + c3.hash(), Some(3)).unwrap().unwrap()); + + assert_eq!(d2.hash(), longest_chain_select.finality_target( + d2.hash(), Some(3)).unwrap().unwrap()); + + + // search only blocks with number <= 2 + + assert_eq!(a2.hash(), longest_chain_select.finality_target( + genesis_hash, Some(2)).unwrap().unwrap()); + assert_eq!(a2.hash(), longest_chain_select.finality_target( + a1.hash(), Some(2)).unwrap().unwrap()); + assert_eq!(a2.hash(), longest_chain_select.finality_target( + a2.hash(), Some(2)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a3.hash(), Some(2)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a4.hash(), Some(2)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a5.hash(), Some(2)).unwrap()); + + assert_eq!(b2.hash(), longest_chain_select.finality_target( + b2.hash(), Some(2)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b3.hash(), Some(2)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b4.hash(), Some(2)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + c3.hash(), Some(2)).unwrap()); + + assert_eq!(d2.hash(), longest_chain_select.finality_target( + d2.hash(), Some(2)).unwrap().unwrap()); + + + // search only blocks with number <= 1 + + assert_eq!(a1.hash(), longest_chain_select.finality_target( + genesis_hash, Some(1)).unwrap().unwrap()); + assert_eq!(a1.hash(), longest_chain_select.finality_target( + a1.hash(), Some(1)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a2.hash(), Some(1)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a3.hash(), Some(1)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a4.hash(), Some(1)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a5.hash(), Some(1)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + b2.hash(), Some(1)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b3.hash(), Some(1)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b4.hash(), Some(1)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + c3.hash(), Some(1)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + d2.hash(), Some(1)).unwrap()); + + // search only blocks with number <= 0 + + assert_eq!(genesis_hash, longest_chain_select.finality_target( + genesis_hash, Some(0)).unwrap().unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a1.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a2.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a3.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a4.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + a5.hash(), Some(0)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + b2.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b3.hash(), Some(0)).unwrap()); + assert_eq!(None, longest_chain_select.finality_target( + b4.hash(), Some(0)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + c3.hash().clone(), Some(0)).unwrap()); + + assert_eq!(None, longest_chain_select.finality_target( + d2.hash().clone(), Some(0)).unwrap()); +} + +#[test] +fn best_containing_on_longest_chain_with_max_depth_higher_than_best() { + // block tree: + // G -> A1 -> A2 + + let (mut client, longest_chain_select) = TestClientBuilder::new().build_with_longest_chain(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + let genesis_hash = client.chain_info().genesis_hash; + + assert_eq!(a2.hash(), longest_chain_select.finality_target(genesis_hash, Some(10)).unwrap().unwrap()); +} + +#[test] +fn key_changes_works() { + let (client, _, test_cases) = prepare_client_with_key_changes(); + + for (index, (begin, end, key, expected_result)) in test_cases.into_iter().enumerate() { + let end = client.block_hash(end).unwrap().unwrap(); + let actual_result = client.key_changes( + begin, + BlockId::Hash(end), + None, + &StorageKey(key), + ).unwrap(); + match actual_result == expected_result { + true => (), + false => panic!(format!("Failed test {}: actual = {:?}, expected = {:?}", + index, actual_result, expected_result)), + } + } +} + +#[test] +fn import_with_justification() { + let mut client = substrate_test_runtime_client::new(); + + // G -> A1 + let a1 = client.new_block(Default::default()).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + // A1 -> A2 + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + // A2 -> A3 + let justification = vec![1, 2, 3]; + let a3 = client.new_block_at( + &BlockId::Hash(a2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import_justified(BlockOrigin::Own, a3.clone(), justification.clone()).unwrap(); + + assert_eq!( + client.chain_info().finalized_hash, + a3.hash(), + ); + + assert_eq!( + client.justification(&BlockId::Hash(a3.hash())).unwrap(), + Some(justification), + ); + + assert_eq!( + client.justification(&BlockId::Hash(a1.hash())).unwrap(), + None, + ); + + assert_eq!( + client.justification(&BlockId::Hash(a2.hash())).unwrap(), + None, + ); +} + +#[test] +fn importing_diverged_finalized_block_should_trigger_reorg() { + let mut client = substrate_test_runtime_client::new(); + + // G -> A1 -> A2 + // \ + // -> B1 + let a1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + let mut b1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap(); + // needed to make sure B1 gets a different hash from A1 + b1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + // create but don't import B1 just yet + let b1 = b1.build().unwrap().block; + + // A2 is the current best since it's the longest chain + assert_eq!( + client.chain_info().best_hash, + a2.hash(), + ); + + // importing B1 as finalized should trigger a re-org and set it as new best + let justification = vec![1, 2, 3]; + client.import_justified(BlockOrigin::Own, b1.clone(), justification).unwrap(); + + assert_eq!( + client.chain_info().best_hash, + b1.hash(), + ); + + assert_eq!( + client.chain_info().finalized_hash, + b1.hash(), + ); +} + +#[test] +fn finalizing_diverged_block_should_trigger_reorg() { + let (mut client, select_chain) = TestClientBuilder::new().build_with_longest_chain(); + + // G -> A1 -> A2 + // \ + // -> B1 -> B2 + let a1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + let mut b1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap(); + // needed to make sure B1 gets a different hash from A1 + b1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + let b1 = b1.build().unwrap().block; + client.import(BlockOrigin::Own, b1.clone()).unwrap(); + + let b2 = client.new_block_at( + &BlockId::Hash(b1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b2.clone()).unwrap(); + + // A2 is the current best since it's the longest chain + assert_eq!( + client.chain_info().best_hash, + a2.hash(), + ); + + // we finalize block B1 which is on a different branch from current best + // which should trigger a re-org. + ClientExt::finalize_block(&client, BlockId::Hash(b1.hash()), None).unwrap(); + + // B1 should now be the latest finalized + assert_eq!( + client.chain_info().finalized_hash, + b1.hash(), + ); + + // and B1 should be the new best block (`finalize_block` as no way of + // knowing about B2) + assert_eq!( + client.chain_info().best_hash, + b1.hash(), + ); + + // `SelectChain` should report B2 as best block though + assert_eq!( + select_chain.best_chain().unwrap().hash(), + b2.hash(), + ); + + // after we build B3 on top of B2 and import it + // it should be the new best block, + let b3 = client.new_block_at( + &BlockId::Hash(b2.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b3.clone()).unwrap(); + + assert_eq!( + client.chain_info().best_hash, + b3.hash(), + ); +} + +#[test] +fn get_header_by_block_number_doesnt_panic() { + let client = substrate_test_runtime_client::new(); + + // backend uses u32 for block numbers, make sure we don't panic when + // trying to convert + let id = BlockId::::Number(72340207214430721); + client.header(&id).expect_err("invalid block number overflows u32"); +} + +#[test] +fn state_reverted_on_reorg() { + let _ = env_logger::try_init(); + let mut client = substrate_test_runtime_client::new(); + + let current_balance = |client: &substrate_test_runtime_client::TestClient| + client.runtime_api().balance_of( + &BlockId::number(client.chain_info().best_number), AccountKeyring::Alice.into(), + ).unwrap(); + + // G -> A1 -> A2 + // \ + // -> B1 + let mut a1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap(); + a1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Bob.into(), + amount: 10, + nonce: 0, + }).unwrap(); + let a1 = a1.build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + let mut b1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap(); + b1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 50, + nonce: 0, + }).unwrap(); + let b1 = b1.build().unwrap().block; + // Reorg to B1 + client.import_as_best(BlockOrigin::Own, b1.clone()).unwrap(); + + assert_eq!(950, current_balance(&client)); + let mut a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap(); + a2.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Charlie.into(), + amount: 10, + nonce: 1, + }).unwrap(); + let a2 = a2.build().unwrap().block; + // Re-org to A2 + client.import_as_best(BlockOrigin::Own, a2).unwrap(); + assert_eq!(980, current_balance(&client)); +} + +#[test] +fn doesnt_import_blocks_that_revert_finality() { + let _ = env_logger::try_init(); + let tmp = tempfile::tempdir().unwrap(); + + // we need to run with archive pruning to avoid pruning non-canonical + // states + let backend = Arc::new(Backend::new( + DatabaseSettings { + state_cache_size: 1 << 20, + state_cache_child_ratio: None, + pruning: PruningMode::ArchiveAll, + source: DatabaseSettingsSrc::RocksDb { + path: tmp.path().into(), + cache_size: 1024, + }, + }, + u64::max_value(), + ).unwrap()); + + let mut client = TestClientBuilder::with_backend(backend).build(); + + // -> C1 + // / + // G -> A1 -> A2 + // \ + // -> B1 -> B2 -> B3 + + let a1 = client.new_block_at( + &BlockId::Number(0), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a1.clone()).unwrap(); + + let a2 = client.new_block_at( + &BlockId::Hash(a1.hash()), + Default::default(), + false, + ).unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, a2.clone()).unwrap(); + + let mut b1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); + + // needed to make sure B1 gets a different hash from A1 + b1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + let b1 = b1.build().unwrap().block; + client.import(BlockOrigin::Own, b1.clone()).unwrap(); + + let b2 = client.new_block_at(&BlockId::Hash(b1.hash()), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, b2.clone()).unwrap(); + + // prepare B3 before we finalize A2, because otherwise we won't be able to + // read changes trie configuration after A2 is finalized + let b3 = client.new_block_at(&BlockId::Hash(b2.hash()), Default::default(), false) + .unwrap().build().unwrap().block; + + // we will finalize A2 which should make it impossible to import a new + // B3 at the same height but that doesn't include it + ClientExt::finalize_block(&client, BlockId::Hash(a2.hash()), None).unwrap(); + + let import_err = client.import(BlockOrigin::Own, b3).err().unwrap(); + let expected_err = ConsensusError::ClientImport( + sp_blockchain::Error::NotInFinalizedChain.to_string() + ); + + assert_eq!( + import_err.to_string(), + expected_err.to_string(), + ); + + // adding a C1 block which is lower than the last finalized should also + // fail (with a cheaper check that doesn't require checking ancestry). + let mut c1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); + + // needed to make sure C1 gets a different hash from A1 and B1 + c1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 2, + nonce: 0, + }).unwrap(); + let c1 = c1.build().unwrap().block; + + let import_err = client.import(BlockOrigin::Own, c1).err().unwrap(); + let expected_err = ConsensusError::ClientImport( + sp_blockchain::Error::NotInFinalizedChain.to_string() + ); + + assert_eq!( + import_err.to_string(), + expected_err.to_string(), + ); +} + + +#[test] +fn respects_block_rules() { + fn run_test( + record_only: bool, + known_bad: &mut HashSet, + fork_rules: &mut Vec<(u64, H256)>, + ) { + let mut client = if record_only { + TestClientBuilder::new().build() + } else { + TestClientBuilder::new() + .set_block_rules( + Some(fork_rules.clone()), + Some(known_bad.clone()), + ) + .build() + }; + + let block_ok = client.new_block_at(&BlockId::Number(0), Default::default(), false) + .unwrap().build().unwrap().block; + + let params = BlockCheckParams { + hash: block_ok.hash().clone(), + number: 0, + parent_hash: block_ok.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + assert_eq!(client.check_block(params).unwrap(), ImportResult::imported(false)); + + // this is 0x0d6d6612a10485370d9e085aeea7ec427fb3f34d961c6a816cdbe5cde2278864 + let mut block_not_ok = client.new_block_at(&BlockId::Number(0), Default::default(), false) + .unwrap(); + block_not_ok.push_storage_change(vec![0], Some(vec![1])).unwrap(); + let block_not_ok = block_not_ok.build().unwrap().block; + + let params = BlockCheckParams { + hash: block_not_ok.hash().clone(), + number: 0, + parent_hash: block_not_ok.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + if record_only { + known_bad.insert(block_not_ok.hash()); + } else { + assert_eq!(client.check_block(params).unwrap(), ImportResult::KnownBad); + } + + // Now going to the fork + client.import_as_final(BlockOrigin::Own, block_ok).unwrap(); + + // And check good fork + let mut block_ok = client.new_block_at(&BlockId::Number(1), Default::default(), false) + .unwrap(); + block_ok.push_storage_change(vec![0], Some(vec![2])).unwrap(); + let block_ok = block_ok.build().unwrap().block; + + let params = BlockCheckParams { + hash: block_ok.hash().clone(), + number: 1, + parent_hash: block_ok.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + if record_only { + fork_rules.push((1, block_ok.hash().clone())); + } + assert_eq!(client.check_block(params).unwrap(), ImportResult::imported(false)); + + // And now try bad fork + let mut block_not_ok = client.new_block_at(&BlockId::Number(1), Default::default(), false) + .unwrap(); + block_not_ok.push_storage_change(vec![0], Some(vec![3])).unwrap(); + let block_not_ok = block_not_ok.build().unwrap().block; + + let params = BlockCheckParams { + hash: block_not_ok.hash().clone(), + number: 1, + parent_hash: block_not_ok.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + + if !record_only { + assert_eq!(client.check_block(params).unwrap(), ImportResult::KnownBad); + } + } + + let mut known_bad = HashSet::new(); + let mut fork_rules = Vec::new(); + + // records what bad_blocks and fork_blocks hashes should be + run_test(true, &mut known_bad, &mut fork_rules); + + // enforces rules and actually makes assertions + run_test(false, &mut known_bad, &mut fork_rules); +} + +#[test] +fn returns_status_for_pruned_blocks() { + let _ = env_logger::try_init(); + let tmp = tempfile::tempdir().unwrap(); + + // set to prune after 1 block + // states + let backend = Arc::new(Backend::new( + DatabaseSettings { + state_cache_size: 1 << 20, + state_cache_child_ratio: None, + pruning: PruningMode::keep_blocks(1), + source: DatabaseSettingsSrc::RocksDb { + path: tmp.path().into(), + cache_size: 1024, + }, + }, + u64::max_value(), + ).unwrap()); + + let mut client = TestClientBuilder::with_backend(backend).build(); + + let a1 = client.new_block_at(&BlockId::Number(0), Default::default(), false) + .unwrap().build().unwrap().block; + + let mut b1 = client.new_block_at(&BlockId::Number(0), Default::default(), false).unwrap(); + + // b1 is created, but not imported + b1.push_transfer(Transfer { + from: AccountKeyring::Alice.into(), + to: AccountKeyring::Ferdie.into(), + amount: 1, + nonce: 0, + }).unwrap(); + let b1 = b1.build().unwrap().block; + + let check_block_a1 = BlockCheckParams { + hash: a1.hash().clone(), + number: 0, + parent_hash: a1.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + + assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::imported(false)); + assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::Unknown); + + client.import_as_final(BlockOrigin::Own, a1.clone()).unwrap(); + + assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainWithState); + + let a2 = client.new_block_at(&BlockId::Hash(a1.hash()), Default::default(), false) + .unwrap().build().unwrap().block; + client.import_as_final(BlockOrigin::Own, a2.clone()).unwrap(); + + let check_block_a2 = BlockCheckParams { + hash: a2.hash().clone(), + number: 1, + parent_hash: a1.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + + assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainPruned); + assert_eq!(client.check_block(check_block_a2.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a2.hash)).unwrap(), BlockStatus::InChainWithState); + + let a3 = client.new_block_at(&BlockId::Hash(a2.hash()), Default::default(), false) + .unwrap().build().unwrap().block; + + client.import_as_final(BlockOrigin::Own, a3.clone()).unwrap(); + let check_block_a3 = BlockCheckParams { + hash: a3.hash().clone(), + number: 2, + parent_hash: a2.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + + // a1 and a2 are both pruned at this point + assert_eq!(client.check_block(check_block_a1.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a1.hash)).unwrap(), BlockStatus::InChainPruned); + assert_eq!(client.check_block(check_block_a2.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a2.hash)).unwrap(), BlockStatus::InChainPruned); + assert_eq!(client.check_block(check_block_a3.clone()).unwrap(), ImportResult::AlreadyInChain); + assert_eq!(client.block_status(&BlockId::hash(check_block_a3.hash)).unwrap(), BlockStatus::InChainWithState); + + let mut check_block_b1 = BlockCheckParams { + hash: b1.hash().clone(), + number: 0, + parent_hash: b1.header().parent_hash().clone(), + allow_missing_state: false, + import_existing: false, + }; + assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::MissingState); + check_block_b1.allow_missing_state = true; + assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::imported(false)); + check_block_b1.parent_hash = H256::random(); + assert_eq!(client.check_block(check_block_b1.clone()).unwrap(), ImportResult::UnknownParent); +} + +#[test] +fn imports_blocks_with_changes_tries_config_change() { + // create client with initial 4^2 configuration + let mut client = TestClientBuilder::with_default_backend() + .changes_trie_config(Some(ChangesTrieConfiguration { + digest_interval: 4, + digest_levels: 2, + })).build(); + + // =================================================================== + // blocks 1,2,3,4,5,6,7,8,9,10 are empty + // block 11 changes the key + // block 12 is the L1 digest that covers this change + // blocks 13,14,15,16,17,18,19,20,21,22 are empty + // block 23 changes the configuration to 5^1 AND is skewed digest + // =================================================================== + // blocks 24,25 are changing the key + // block 26 is empty + // block 27 changes the key + // block 28 is the L1 digest (NOT SKEWED!!!) that covers changes AND changes configuration to 3^1 + // =================================================================== + // block 29 is empty + // block 30 changes the key + // block 31 is L1 digest that covers this change + // =================================================================== + (1..11).for_each(|number| { + let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (11..12).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (12..23).for_each(|number| { + let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (23..24).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_changes_trie_configuration_update(Some(ChangesTrieConfiguration { + digest_interval: 5, + digest_levels: 1, + })).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (24..26).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (26..27).for_each(|number| { + let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (27..28).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (28..29).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_changes_trie_configuration_update(Some(ChangesTrieConfiguration { + digest_interval: 3, + digest_levels: 1, + })).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (29..30).for_each(|number| { + let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (30..31).for_each(|number| { + let mut block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false).unwrap(); + block.push_storage_change(vec![42], Some(number.to_le_bytes().to_vec())).unwrap(); + let block = block.build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + (31..32).for_each(|number| { + let block = client.new_block_at(&BlockId::Number(number - 1), Default::default(), false) + .unwrap().build().unwrap().block; + client.import(BlockOrigin::Own, block).unwrap(); + }); + + // now check that configuration cache works + assert_eq!( + client.key_changes(1, BlockId::Number(31), None, &StorageKey(vec![42])).unwrap(), + vec![(30, 0), (27, 0), (25, 0), (24, 0), (11, 0)] + ); +} + +#[test] +fn storage_keys_iter_prefix_and_start_key_works() { + let client = substrate_test_runtime_client::new(); + + let prefix = StorageKey(hex!("3a").to_vec()); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), None) + .unwrap() + .map(|x| x.0) + .collect(); + assert_eq!(res, [hex!("3a636f6465").to_vec(), hex!("3a686561707061676573").to_vec()]); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a636f6465").to_vec()))) + .unwrap() + .map(|x| x.0) + .collect(); + assert_eq!(res, [hex!("3a686561707061676573").to_vec()]); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a686561707061676573").to_vec()))) + .unwrap() + .map(|x| x.0) + .collect(); + assert_eq!(res, Vec::>::new()); +} + +#[test] +fn storage_keys_iter_works() { + let client = substrate_test_runtime_client::new(); + + let prefix = StorageKey(hex!("").to_vec()); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), None) + .unwrap() + .take(2) + .map(|x| x.0) + .collect(); + assert_eq!(res, [hex!("0befda6e1ca4ef40219d588a727f1271").to_vec(), hex!("3a636f6465").to_vec()]); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("3a636f6465").to_vec()))) + .unwrap() + .take(3) + .map(|x| x.0) + .collect(); + assert_eq!(res, [ + hex!("3a686561707061676573").to_vec(), + hex!("6644b9b8bc315888ac8e41a7968dc2b4141a5403c58acdf70b7e8f7e07bf5081").to_vec(), + hex!("79c07e2b1d2e2abfd4855b936617eeff5e0621c4869aa60c02be9adcc98a0d1d").to_vec(), + ]); + + let res: Vec<_> = client.storage_keys_iter(&BlockId::Number(0), Some(&prefix), Some(&StorageKey(hex!("79c07e2b1d2e2abfd4855b936617eeff5e0621c4869aa60c02be9adcc98a0d1d").to_vec()))) + .unwrap() + .take(1) + .map(|x| x.0) + .collect(); + assert_eq!(res, [hex!("cf722c0832b5231d35e29f319ff27389f5032bfc7bfc3ba5ed7839f2042fb99f").to_vec()]); +} + +#[test] +fn cleans_up_closed_notification_sinks_on_block_import() { + use substrate_test_runtime_client::GenesisInit; + + // NOTE: we need to build the client here instead of using the client + // provided by test_runtime_client otherwise we can't access the private + // `import_notification_sinks` and `finality_notification_sinks` fields. + let mut client = + new_in_mem::< + _, + substrate_test_runtime_client::runtime::Block, + _, + substrate_test_runtime_client::runtime::RuntimeApi + >( + substrate_test_runtime_client::new_native_executor(), + &substrate_test_runtime_client::GenesisParameters::default().genesis_storage(), + None, + None, + sp_core::tasks::executor(), + Default::default(), + ) + .unwrap(); + + type TestClient = Client< + in_mem::Backend, + LocalCallExecutor, sc_executor::NativeExecutor>, + substrate_test_runtime_client::runtime::Block, + substrate_test_runtime_client::runtime::RuntimeApi, + >; + + let import_notif1 = client.import_notification_stream(); + let import_notif2 = client.import_notification_stream(); + let finality_notif1 = client.finality_notification_stream(); + let finality_notif2 = client.finality_notification_stream(); + + // for some reason I can't seem to use `ClientBlockImportExt` + let bake_and_import_block = |client: &mut TestClient, origin| { + let block = client + .new_block(Default::default()) + .unwrap() + .build() + .unwrap() + .block; + + let (header, extrinsics) = block.deconstruct(); + let mut import = BlockImportParams::new(origin, header); + import.body = Some(extrinsics); + import.fork_choice = Some(ForkChoiceStrategy::LongestChain); + client.import_block(import, Default::default()).unwrap(); + }; + + // after importing a block we should still have 4 notification sinks + // (2 import + 2 finality) + bake_and_import_block(&mut client, BlockOrigin::Own); + assert_eq!(client.import_notification_sinks().lock().len(), 2); + assert_eq!(client.finality_notification_sinks().lock().len(), 2); + + // if we drop one import notification receiver and one finality + // notification receiver + drop(import_notif2); + drop(finality_notif2); + + // the sinks should be cleaned up after block import + bake_and_import_block(&mut client, BlockOrigin::Own); + assert_eq!(client.import_notification_sinks().lock().len(), 1); + assert_eq!(client.finality_notification_sinks().lock().len(), 1); + + // the same thing should happen if block import happens during initial + // sync + drop(import_notif1); + drop(finality_notif1); + + bake_and_import_block(&mut client, BlockOrigin::NetworkInitialSync); + assert_eq!(client.import_notification_sinks().lock().len(), 0); + assert_eq!(client.finality_notification_sinks().lock().len(), 0); +} + diff --git a/client/service/test/src/lib.rs b/client/service/test/src/lib.rs index b7d01c32c0f..fd451ffc8d5 100644 --- a/client/service/test/src/lib.rs +++ b/client/service/test/src/lib.rs @@ -37,11 +37,15 @@ use sc_service::{ Role, Error, }; +use sp_blockchain::HeaderBackend; use sc_network::{multiaddr, Multiaddr}; use sc_network::config::{NetworkConfiguration, TransportConfig}; use sp_runtime::{generic::BlockId, traits::Block as BlockT}; use sp_transaction_pool::TransactionPool; +#[cfg(test)] +mod client; + /// Maximum duration of single wait call. const MAX_WAIT_TIME: Duration = Duration::from_secs(60 * 3); @@ -462,15 +466,15 @@ pub fn sync( } network.run_until_all_full( |_index, service| - service.get().client().chain_info().best_number == (NUM_BLOCKS as u32).into(), + service.get().client().info().best_number == (NUM_BLOCKS as u32).into(), |_index, service| - service.get().client().chain_info().best_number == (NUM_BLOCKS as u32).into(), + service.get().client().info().best_number == (NUM_BLOCKS as u32).into(), ); info!("Checking extrinsic propagation"); let first_service = network.full_nodes[0].1.clone(); let first_user_data = &network.full_nodes[0].2; - let best_block = BlockId::number(first_service.get().client().chain_info().best_number); + let best_block = BlockId::number(first_service.get().client().info().best_number); let extrinsic = extrinsic_factory(&first_service.get(), first_user_data); let source = sp_transaction_pool::TransactionSource::External; @@ -523,9 +527,9 @@ pub fn consensus( } network.run_until_all_full( |_index, service| - service.get().client().chain_info().finalized_number >= (NUM_BLOCKS as u32 / 2).into(), + service.get().client().info().finalized_number >= (NUM_BLOCKS as u32 / 2).into(), |_index, service| - service.get().client().chain_info().best_number >= (NUM_BLOCKS as u32 / 2).into(), + service.get().client().info().best_number >= (NUM_BLOCKS as u32 / 2).into(), ); info!("Adding more peers"); @@ -545,8 +549,8 @@ pub fn consensus( } network.run_until_all_full( |_index, service| - service.get().client().chain_info().finalized_number >= (NUM_BLOCKS as u32).into(), + service.get().client().info().finalized_number >= (NUM_BLOCKS as u32).into(), |_index, service| - service.get().client().chain_info().best_number >= (NUM_BLOCKS as u32).into(), + service.get().client().info().best_number >= (NUM_BLOCKS as u32).into(), ); } diff --git a/client/src/light/fetcher.rs b/client/src/light/fetcher.rs deleted file mode 100644 index ef6a062cf3c..00000000000 --- a/client/src/light/fetcher.rs +++ /dev/null @@ -1,833 +0,0 @@ -// Copyright 2017-2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Light client data fetcher. Fetches requested data from remote full nodes. - -use std::sync::Arc; -use std::collections::{BTreeMap, HashMap}; -use std::marker::PhantomData; - -use hash_db::{HashDB, Hasher, EMPTY_PREFIX}; -use codec::{Decode, Encode}; -use sp_core::{convert_hash, traits::CodeExecutor}; -use sp_core::storage::{ChildInfo, ChildType}; -use sp_runtime::traits::{ - Block as BlockT, Header as HeaderT, Hash, HashFor, NumberFor, - AtLeast32Bit, CheckedConversion, -}; -use sp_state_machine::{ - ChangesTrieRootsStorage, ChangesTrieAnchorBlockId, ChangesTrieConfigurationRange, - InMemoryChangesTrieStorage, TrieBackend, read_proof_check, key_changes_proof_check_with_db, - read_child_proof_check, CloneableSpawn, -}; -pub use sp_state_machine::StorageProof; -use sp_blockchain::{Error as ClientError, Result as ClientResult}; - -use crate::cht; -pub use sc_client_api::{ - light::{ - RemoteCallRequest, RemoteHeaderRequest, RemoteReadRequest, RemoteReadChildRequest, - RemoteChangesRequest, ChangesProof, RemoteBodyRequest, Fetcher, FetchChecker, - Storage as BlockchainStorage, - }, -}; -use crate::light::blockchain::{Blockchain}; -use crate::light::call_executor::check_execution_proof; - -/// Remote data checker. -pub struct LightDataChecker> { - blockchain: Arc>, - executor: E, - spawn_handle: Box, - _hasher: PhantomData<(B, H)>, -} - -impl> LightDataChecker { - /// Create new light data checker. - pub fn new(blockchain: Arc>, executor: E, spawn_handle: Box) -> Self { - Self { - blockchain, executor, spawn_handle, _hasher: PhantomData - } - } - - /// Check remote changes query proof assuming that CHT-s are of given size. - fn check_changes_proof_with_cht_size( - &self, - request: &RemoteChangesRequest, - remote_proof: ChangesProof, - cht_size: NumberFor, - ) -> ClientResult, u32)>> - where - H: Hasher, - H::Out: Ord + codec::Codec, - { - // since we need roots of all changes tries for the range begin..max - // => remote node can't use max block greater that one that we have passed - if remote_proof.max_block > request.max_block.0 || remote_proof.max_block < request.last_block.0 { - return Err(ClientError::ChangesTrieAccessFailed(format!( - "Invalid max_block used by the remote node: {}. Local: {}..{}..{}", - remote_proof.max_block, request.first_block.0, request.last_block.0, request.max_block.0, - )).into()); - } - - // check if remote node has responded with extra changes trie roots proofs - // all changes tries roots must be in range [request.first_block.0; request.tries_roots.0) - let is_extra_first_root = remote_proof.roots.keys().next() - .map(|first_root| *first_root < request.first_block.0 - || *first_root >= request.tries_roots.0) - .unwrap_or(false); - let is_extra_last_root = remote_proof.roots.keys().next_back() - .map(|last_root| *last_root >= request.tries_roots.0) - .unwrap_or(false); - if is_extra_first_root || is_extra_last_root { - return Err(ClientError::ChangesTrieAccessFailed(format!( - "Extra changes tries roots proofs provided by the remote node: [{:?}..{:?}]. Expected in range: [{}; {})", - remote_proof.roots.keys().next(), remote_proof.roots.keys().next_back(), - request.first_block.0, request.tries_roots.0, - )).into()); - } - - // if request has been composed when some required headers were already pruned - // => remote node has sent us CHT-based proof of required changes tries roots - // => check that this proof is correct before proceeding with changes proof - let remote_max_block = remote_proof.max_block; - let remote_roots = remote_proof.roots; - let remote_roots_proof = remote_proof.roots_proof; - let remote_proof = remote_proof.proof; - if !remote_roots.is_empty() { - self.check_changes_tries_proof( - cht_size, - &remote_roots, - remote_roots_proof, - )?; - } - - // and now check the key changes proof + get the changes - let mut result = Vec::new(); - let proof_storage = InMemoryChangesTrieStorage::with_proof(remote_proof); - for config_range in &request.changes_trie_configs { - let result_range = key_changes_proof_check_with_db::( - ChangesTrieConfigurationRange { - config: config_range.config.as_ref().ok_or(ClientError::ChangesTriesNotSupported)?, - zero: config_range.zero.0, - end: config_range.end.map(|(n, _)| n), - }, - &RootsStorage { - roots: (request.tries_roots.0, &request.tries_roots.2), - prev_roots: &remote_roots, - }, - &proof_storage, - request.first_block.0, - &ChangesTrieAnchorBlockId { - hash: convert_hash(&request.last_block.1), - number: request.last_block.0, - }, - remote_max_block, - request.storage_key.as_ref(), - &request.key) - .map_err(|err| ClientError::ChangesTrieAccessFailed(err))?; - result.extend(result_range); - } - - Ok(result) - } - - /// Check CHT-based proof for changes tries roots. - fn check_changes_tries_proof( - &self, - cht_size: NumberFor, - remote_roots: &BTreeMap, B::Hash>, - remote_roots_proof: StorageProof, - ) -> ClientResult<()> - where - H: Hasher, - H::Out: Ord + codec::Codec, - { - // all the checks are sharing the same storage - let storage = remote_roots_proof.into_memory_db(); - - // remote_roots.keys() are sorted => we can use this to group changes tries roots - // that are belongs to the same CHT - let blocks = remote_roots.keys().cloned(); - cht::for_each_cht_group::(cht_size, blocks, |mut storage, _, cht_blocks| { - // get local changes trie CHT root for given CHT - // it should be there, because it is never pruned AND request has been composed - // when required header has been pruned (=> replaced with CHT) - let first_block = cht_blocks.first().cloned() - .expect("for_each_cht_group never calls callback with empty groups"); - let local_cht_root = self.blockchain.storage().changes_trie_cht_root(cht_size, first_block)? - .ok_or(ClientError::InvalidCHTProof)?; - - // check changes trie root for every block within CHT range - for block in cht_blocks { - // check if the proofs storage contains the root - // normally this happens in when the proving backend is created, but since - // we share the storage for multiple checks, do it here - let mut cht_root = H::Out::default(); - cht_root.as_mut().copy_from_slice(local_cht_root.as_ref()); - if !storage.contains(&cht_root, EMPTY_PREFIX) { - return Err(ClientError::InvalidCHTProof.into()); - } - - // check proof for single changes trie root - let proving_backend = TrieBackend::new(storage, cht_root); - let remote_changes_trie_root = remote_roots[&block]; - cht::check_proof_on_proving_backend::( - local_cht_root, - block, - remote_changes_trie_root, - &proving_backend, - )?; - - // and return the storage to use in following checks - storage = proving_backend.into_storage(); - } - - Ok(storage) - }, storage) - } -} - -impl FetchChecker for LightDataChecker - where - Block: BlockT, - E: CodeExecutor + Clone + 'static, - H: Hasher, - H::Out: Ord + codec::Codec + 'static, - S: BlockchainStorage, -{ - fn check_header_proof( - &self, - request: &RemoteHeaderRequest, - remote_header: Option, - remote_proof: StorageProof, - ) -> ClientResult { - let remote_header = remote_header.ok_or_else(|| - ClientError::from(ClientError::InvalidCHTProof))?; - let remote_header_hash = remote_header.hash(); - cht::check_proof::( - request.cht_root, - request.block, - remote_header_hash, - remote_proof, - ).map(|_| remote_header) - } - - fn check_read_proof( - &self, - request: &RemoteReadRequest, - remote_proof: StorageProof, - ) -> ClientResult, Option>>> { - read_proof_check::( - convert_hash(request.header.state_root()), - remote_proof, - request.keys.iter(), - ).map_err(Into::into) - } - - fn check_read_child_proof( - &self, - request: &RemoteReadChildRequest, - remote_proof: StorageProof, - ) -> ClientResult, Option>>> { - let child_info = match ChildType::from_prefixed_key(&request.storage_key) { - Some((ChildType::ParentKeyId, storage_key)) => ChildInfo::new_default(storage_key), - None => return Err("Invalid child type".into()), - }; - read_child_proof_check::( - convert_hash(request.header.state_root()), - remote_proof, - &child_info, - request.keys.iter(), - ).map_err(Into::into) - } - - fn check_execution_proof( - &self, - request: &RemoteCallRequest, - remote_proof: StorageProof, - ) -> ClientResult> { - check_execution_proof::<_, _, H>( - &self.executor, - self.spawn_handle.clone(), - request, - remote_proof, - ) - } - - fn check_changes_proof( - &self, - request: &RemoteChangesRequest, - remote_proof: ChangesProof - ) -> ClientResult, u32)>> { - self.check_changes_proof_with_cht_size(request, remote_proof, cht::size()) - } - - fn check_body_proof( - &self, - request: &RemoteBodyRequest, - body: Vec - ) -> ClientResult> { - // TODO: #2621 - let extrinsics_root = HashFor::::ordered_trie_root( - body.iter().map(Encode::encode).collect(), - ); - if *request.header.extrinsics_root() == extrinsics_root { - Ok(body) - } else { - Err(format!("RemoteBodyRequest: invalid extrinsics root expected: {} but got {}", - *request.header.extrinsics_root(), - extrinsics_root, - ).into()) - } - - } -} - -/// A view of BTreeMap as a changes trie roots storage. -struct RootsStorage<'a, Number: AtLeast32Bit, Hash: 'a> { - roots: (Number, &'a [Hash]), - prev_roots: &'a BTreeMap, -} - -impl<'a, H, Number, Hash> ChangesTrieRootsStorage for RootsStorage<'a, Number, Hash> - where - H: Hasher, - Number: std::fmt::Display + std::hash::Hash + Clone + AtLeast32Bit + Encode + Decode + Send + Sync + 'static, - Hash: 'a + Send + Sync + Clone + AsRef<[u8]>, -{ - fn build_anchor( - &self, - _hash: H::Out, - ) -> Result, String> { - Err("build_anchor is only called when building block".into()) - } - - fn root( - &self, - _anchor: &ChangesTrieAnchorBlockId, - block: Number, - ) -> Result, String> { - // we can't ask for roots from parallel forks here => ignore anchor - let root = if block < self.roots.0 { - self.prev_roots.get(&Number::unique_saturated_from(block)).cloned() - } else { - let index: Option = block.checked_sub(&self.roots.0).and_then(|index| index.checked_into()); - match index { - Some(index) => self.roots.1.get(index as usize).cloned(), - None => None, - } - }; - - Ok(root.map(|root| { - let mut hasher_root: H::Out = Default::default(); - hasher_root.as_mut().copy_from_slice(root.as_ref()); - hasher_root - })) - } -} - -#[cfg(test)] -pub mod tests { - use codec::Decode; - use crate::client::tests::prepare_client_with_key_changes; - use sc_executor::{NativeExecutor, WasmExecutionMethod}; - use sp_blockchain::Error as ClientError; - use sc_client_api::backend::NewBlockState; - use substrate_test_runtime_client::{ - blockchain::HeaderBackend, AccountKeyring, ClientBlockImportExt, - runtime::{self, Hash, Block, Header, Extrinsic}, - tasks_executor, - }; - use sp_consensus::BlockOrigin; - - use crate::in_mem::Blockchain as InMemoryBlockchain; - use crate::light::fetcher::{FetchChecker, LightDataChecker, RemoteHeaderRequest}; - use crate::light::blockchain::tests::{DummyStorage, DummyBlockchain}; - use sp_core::{blake2_256, ChangesTrieConfiguration, H256}; - use sp_core::storage::{well_known_keys, StorageKey, ChildInfo}; - use sp_runtime::{generic::BlockId, traits::BlakeTwo256}; - use sp_state_machine::Backend; - use super::*; - use sc_client_api::{StorageProvider, ProofProvider}; - use sc_block_builder::BlockBuilderProvider; - - type TestChecker = LightDataChecker< - NativeExecutor, - BlakeTwo256, - Block, - DummyStorage, - >; - - fn local_executor() -> NativeExecutor { - NativeExecutor::new(WasmExecutionMethod::Interpreted, None, 8) - } - - fn prepare_for_read_proof_check() -> (TestChecker, Header, StorageProof, u32) { - // prepare remote client - let remote_client = substrate_test_runtime_client::new(); - let remote_block_id = BlockId::Number(0); - let remote_block_hash = remote_client.block_hash(0).unwrap().unwrap(); - let mut remote_block_header = remote_client.header(&remote_block_id).unwrap().unwrap(); - remote_block_header.state_root = remote_client.state_at(&remote_block_id).unwrap() - .storage_root(::std::iter::empty()).0.into(); - - // 'fetch' read proof from remote node - let heap_pages = remote_client.storage(&remote_block_id, &StorageKey(well_known_keys::HEAP_PAGES.to_vec())) - .unwrap() - .and_then(|v| Decode::decode(&mut &v.0[..]).ok()).unwrap(); - let remote_read_proof = remote_client.read_proof( - &remote_block_id, - &mut std::iter::once(well_known_keys::HEAP_PAGES), - ).unwrap(); - - // check remote read proof locally - let local_storage = InMemoryBlockchain::::new(); - local_storage.insert( - remote_block_hash, - remote_block_header.clone(), - None, - None, - NewBlockState::Final, - ).unwrap(); - let local_checker = LightDataChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - (local_checker, remote_block_header, remote_read_proof, heap_pages) - } - - fn prepare_for_read_child_proof_check() -> (TestChecker, Header, StorageProof, Vec) { - use substrate_test_runtime_client::DefaultTestClientBuilderExt; - use substrate_test_runtime_client::TestClientBuilderExt; - let child_info = ChildInfo::new_default(b"child1"); - let child_info = &child_info; - // prepare remote client - let remote_client = substrate_test_runtime_client::TestClientBuilder::new() - .add_extra_child_storage( - child_info, - b"key1".to_vec(), - b"value1".to_vec(), - ).build(); - let remote_block_id = BlockId::Number(0); - let remote_block_hash = remote_client.block_hash(0).unwrap().unwrap(); - let mut remote_block_header = remote_client.header(&remote_block_id).unwrap().unwrap(); - remote_block_header.state_root = remote_client.state_at(&remote_block_id).unwrap() - .storage_root(::std::iter::empty()).0.into(); - - // 'fetch' child read proof from remote node - let child_value = remote_client.child_storage( - &remote_block_id, - child_info, - &StorageKey(b"key1".to_vec()), - ).unwrap().unwrap().0; - assert_eq!(b"value1"[..], child_value[..]); - let remote_read_proof = remote_client.read_child_proof( - &remote_block_id, - child_info, - &mut std::iter::once("key1".as_bytes()), - ).unwrap(); - - // check locally - let local_storage = InMemoryBlockchain::::new(); - local_storage.insert( - remote_block_hash, - remote_block_header.clone(), - None, - None, - NewBlockState::Final, - ).unwrap(); - let local_checker = LightDataChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - (local_checker, remote_block_header, remote_read_proof, child_value) - } - - fn prepare_for_header_proof_check(insert_cht: bool) -> (TestChecker, Hash, Header, StorageProof) { - // prepare remote client - let mut remote_client = substrate_test_runtime_client::new(); - let mut local_headers_hashes = Vec::new(); - for i in 0..4 { - let block = remote_client.new_block(Default::default()).unwrap().build().unwrap().block; - remote_client.import(BlockOrigin::Own, block).unwrap(); - local_headers_hashes.push( - remote_client.block_hash(i + 1) - .map_err(|_| ClientError::Backend("TestError".into())) - ); - } - - // 'fetch' header proof from remote node - let remote_block_id = BlockId::Number(1); - let (remote_block_header, remote_header_proof) = remote_client.header_proof_with_cht_size(&remote_block_id, 4).unwrap(); - - // check remote read proof locally - let local_storage = InMemoryBlockchain::::new(); - let local_cht_root = cht::compute_root::(4, 0, local_headers_hashes).unwrap(); - if insert_cht { - local_storage.insert_cht_root(1, local_cht_root); - } - let local_checker = LightDataChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - (local_checker, local_cht_root, remote_block_header, remote_header_proof) - } - - fn header_with_computed_extrinsics_root(extrinsics: Vec) -> Header { - use sp_trie::{TrieConfiguration, trie_types::Layout}; - let iter = extrinsics.iter().map(Encode::encode); - let extrinsics_root = Layout::::ordered_trie_root(iter); - - // only care about `extrinsics_root` - Header::new(0, extrinsics_root, H256::zero(), H256::zero(), Default::default()) - } - - #[test] - fn storage_read_proof_is_generated_and_checked() { - let (local_checker, remote_block_header, remote_read_proof, heap_pages) = prepare_for_read_proof_check(); - assert_eq!((&local_checker as &dyn FetchChecker).check_read_proof(&RemoteReadRequest::
{ - block: remote_block_header.hash(), - header: remote_block_header, - keys: vec![well_known_keys::HEAP_PAGES.to_vec()], - retry_count: None, - }, remote_read_proof).unwrap().remove(well_known_keys::HEAP_PAGES).unwrap().unwrap()[0], heap_pages as u8); - } - - #[test] - fn storage_child_read_proof_is_generated_and_checked() { - let child_info = ChildInfo::new_default(&b"child1"[..]); - let ( - local_checker, - remote_block_header, - remote_read_proof, - result, - ) = prepare_for_read_child_proof_check(); - assert_eq!((&local_checker as &dyn FetchChecker).check_read_child_proof( - &RemoteReadChildRequest::
{ - block: remote_block_header.hash(), - header: remote_block_header, - storage_key: child_info.prefixed_storage_key(), - keys: vec![b"key1".to_vec()], - retry_count: None, - }, - remote_read_proof - ).unwrap().remove(b"key1".as_ref()).unwrap().unwrap(), result); - } - - #[test] - fn header_proof_is_generated_and_checked() { - let (local_checker, local_cht_root, remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); - assert_eq!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ - cht_root: local_cht_root, - block: 1, - retry_count: None, - }, Some(remote_block_header.clone()), remote_header_proof).unwrap(), remote_block_header); - } - - #[test] - fn check_header_proof_fails_if_cht_root_is_invalid() { - let (local_checker, _, mut remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); - remote_block_header.number = 100; - assert!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ - cht_root: Default::default(), - block: 1, - retry_count: None, - }, Some(remote_block_header.clone()), remote_header_proof).is_err()); - } - - #[test] - fn check_header_proof_fails_if_invalid_header_provided() { - let (local_checker, local_cht_root, mut remote_block_header, remote_header_proof) = prepare_for_header_proof_check(true); - remote_block_header.number = 100; - assert!((&local_checker as &dyn FetchChecker).check_header_proof(&RemoteHeaderRequest::
{ - cht_root: local_cht_root, - block: 1, - retry_count: None, - }, Some(remote_block_header.clone()), remote_header_proof).is_err()); - } - - #[test] - fn changes_proof_is_generated_and_checked_when_headers_are_not_pruned() { - let (remote_client, local_roots, test_cases) = prepare_client_with_key_changes(); - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - let local_checker = &local_checker as &dyn FetchChecker; - let max = remote_client.chain_info().best_number; - let max_hash = remote_client.chain_info().best_hash; - - for (index, (begin, end, key, expected_result)) in test_cases.into_iter().enumerate() { - let begin_hash = remote_client.block_hash(begin).unwrap().unwrap(); - let end_hash = remote_client.block_hash(end).unwrap().unwrap(); - - // 'fetch' changes proof from remote node - let key = StorageKey(key); - let remote_proof = remote_client.key_changes_proof( - begin_hash, end_hash, begin_hash, max_hash, None, &key - ).unwrap(); - - // check proof on local client - let local_roots_range = local_roots.clone()[(begin - 1) as usize..].to_vec(); - let config = ChangesTrieConfiguration::new(4, 2); - let request = RemoteChangesRequest::
{ - changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { - zero: (0, Default::default()), - end: None, - config: Some(config), - }], - first_block: (begin, begin_hash), - last_block: (end, end_hash), - max_block: (max, max_hash), - tries_roots: (begin, begin_hash, local_roots_range), - key: key.0, - storage_key: None, - retry_count: None, - }; - let local_result = local_checker.check_changes_proof(&request, ChangesProof { - max_block: remote_proof.max_block, - proof: remote_proof.proof, - roots: remote_proof.roots, - roots_proof: remote_proof.roots_proof, - }).unwrap(); - - // ..and ensure that result is the same as on remote node - match local_result == expected_result { - true => (), - false => panic!(format!("Failed test {}: local = {:?}, expected = {:?}", - index, local_result, expected_result)), - } - } - } - - #[test] - fn changes_proof_is_generated_and_checked_when_headers_are_pruned() { - // we're testing this test case here: - // (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), - let (remote_client, remote_roots, _) = prepare_client_with_key_changes(); - let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); - let dave = StorageKey(dave); - - // 'fetch' changes proof from remote node: - // we're fetching changes for range b1..b4 - // we do not know changes trie roots before b3 (i.e. we only know b3+b4) - // but we have changes trie CHT root for b1...b4 - let b1 = remote_client.block_hash_from_id(&BlockId::Number(1)).unwrap().unwrap(); - let b3 = remote_client.block_hash_from_id(&BlockId::Number(3)).unwrap().unwrap(); - let b4 = remote_client.block_hash_from_id(&BlockId::Number(4)).unwrap().unwrap(); - let remote_proof = remote_client.key_changes_proof_with_cht_size( - b1, b4, b3, b4, None, &dave, 4 - ).unwrap(); - - // prepare local checker, having a root of changes trie CHT#0 - let local_cht_root = cht::compute_root::(4, 0, remote_roots.iter().cloned().map(|ct| Ok(Some(ct)))).unwrap(); - let mut local_storage = DummyStorage::new(); - local_storage.changes_tries_cht_roots.insert(0, local_cht_root); - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(local_storage)), - local_executor(), - tasks_executor(), - ); - - // check proof on local client - let config = ChangesTrieConfiguration::new(4, 2); - let request = RemoteChangesRequest::
{ - changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { - zero: (0, Default::default()), - end: None, - config: Some(config), - }], - first_block: (1, b1), - last_block: (4, b4), - max_block: (4, b4), - tries_roots: (3, b3, vec![remote_roots[2].clone(), remote_roots[3].clone()]), - storage_key: None, - key: dave.0, - retry_count: None, - }; - let local_result = local_checker.check_changes_proof_with_cht_size(&request, ChangesProof { - max_block: remote_proof.max_block, - proof: remote_proof.proof, - roots: remote_proof.roots, - roots_proof: remote_proof.roots_proof, - }, 4).unwrap(); - - assert_eq!(local_result, vec![(4, 0), (1, 1), (1, 0)]); - } - - #[test] - fn check_changes_proof_fails_if_proof_is_wrong() { - let (remote_client, local_roots, test_cases) = prepare_client_with_key_changes(); - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - let local_checker = &local_checker as &dyn FetchChecker; - let max = remote_client.chain_info().best_number; - let max_hash = remote_client.chain_info().best_hash; - - let (begin, end, key, _) = test_cases[0].clone(); - let begin_hash = remote_client.block_hash(begin).unwrap().unwrap(); - let end_hash = remote_client.block_hash(end).unwrap().unwrap(); - - // 'fetch' changes proof from remote node - let key = StorageKey(key); - let remote_proof = remote_client.key_changes_proof( - begin_hash, end_hash, begin_hash, max_hash, None, &key).unwrap(); - - let local_roots_range = local_roots.clone()[(begin - 1) as usize..].to_vec(); - let config = ChangesTrieConfiguration::new(4, 2); - let request = RemoteChangesRequest::
{ - changes_trie_configs: vec![sp_core::ChangesTrieConfigurationRange { - zero: (0, Default::default()), - end: None, - config: Some(config), - }], - first_block: (begin, begin_hash), - last_block: (end, end_hash), - max_block: (max, max_hash), - tries_roots: (begin, begin_hash, local_roots_range.clone()), - storage_key: None, - key: key.0, - retry_count: None, - }; - - // check proof on local client using max from the future - assert!(local_checker.check_changes_proof(&request, ChangesProof { - max_block: remote_proof.max_block + 1, - proof: remote_proof.proof.clone(), - roots: remote_proof.roots.clone(), - roots_proof: remote_proof.roots_proof.clone(), - }).is_err()); - - // check proof on local client using broken proof - assert!(local_checker.check_changes_proof(&request, ChangesProof { - max_block: remote_proof.max_block, - proof: local_roots_range.clone().into_iter().map(|v| v.as_ref().to_vec()).collect(), - roots: remote_proof.roots, - roots_proof: remote_proof.roots_proof, - }).is_err()); - - // extra roots proofs are provided - assert!(local_checker.check_changes_proof(&request, ChangesProof { - max_block: remote_proof.max_block, - proof: remote_proof.proof.clone(), - roots: vec![(begin - 1, Default::default())].into_iter().collect(), - roots_proof: StorageProof::empty(), - }).is_err()); - assert!(local_checker.check_changes_proof(&request, ChangesProof { - max_block: remote_proof.max_block, - proof: remote_proof.proof.clone(), - roots: vec![(end + 1, Default::default())].into_iter().collect(), - roots_proof: StorageProof::empty(), - }).is_err()); - } - - #[test] - fn check_changes_tries_proof_fails_if_proof_is_wrong() { - // we're testing this test case here: - // (1, 4, dave.clone(), vec![(4, 0), (1, 1), (1, 0)]), - let (remote_client, remote_roots, _) = prepare_client_with_key_changes(); - let local_cht_root = cht::compute_root::( - 4, 0, remote_roots.iter().cloned().map(|ct| Ok(Some(ct)))).unwrap(); - let dave = blake2_256(&runtime::system::balance_of_key(AccountKeyring::Dave.into())).to_vec(); - let dave = StorageKey(dave); - - // 'fetch' changes proof from remote node: - // we're fetching changes for range b1..b4 - // we do not know changes trie roots before b3 (i.e. we only know b3+b4) - // but we have changes trie CHT root for b1...b4 - let b1 = remote_client.block_hash_from_id(&BlockId::Number(1)).unwrap().unwrap(); - let b3 = remote_client.block_hash_from_id(&BlockId::Number(3)).unwrap().unwrap(); - let b4 = remote_client.block_hash_from_id(&BlockId::Number(4)).unwrap().unwrap(); - let remote_proof = remote_client.key_changes_proof_with_cht_size( - b1, b4, b3, b4, None, &dave, 4 - ).unwrap(); - - // fails when changes trie CHT is missing from the local db - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - assert!(local_checker.check_changes_tries_proof(4, &remote_proof.roots, - remote_proof.roots_proof.clone()).is_err()); - - // fails when proof is broken - let mut local_storage = DummyStorage::new(); - local_storage.changes_tries_cht_roots.insert(0, local_cht_root); - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(local_storage)), - local_executor(), - tasks_executor(), - ); - let result = local_checker.check_changes_tries_proof( - 4, &remote_proof.roots, StorageProof::empty() - ); - assert!(result.is_err()); - } - - #[test] - fn check_body_proof_faulty() { - let header = header_with_computed_extrinsics_root( - vec![Extrinsic::IncludeData(vec![1, 2, 3, 4])] - ); - let block = Block::new(header.clone(), Vec::new()); - - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - - let body_request = RemoteBodyRequest { - header: header.clone(), - retry_count: None, - }; - - assert!( - local_checker.check_body_proof(&body_request, block.extrinsics).is_err(), - "vec![1, 2, 3, 4] != vec![]" - ); - } - - #[test] - fn check_body_proof_of_same_data_should_succeed() { - let extrinsics = vec![Extrinsic::IncludeData(vec![1, 2, 3, 4, 5, 6, 7, 8, 255])]; - - let header = header_with_computed_extrinsics_root(extrinsics.clone()); - let block = Block::new(header.clone(), extrinsics); - - let local_checker = TestChecker::new( - Arc::new(DummyBlockchain::new(DummyStorage::new())), - local_executor(), - tasks_executor(), - ); - - let body_request = RemoteBodyRequest { - header: header.clone(), - retry_count: None, - }; - - assert!(local_checker.check_body_proof(&body_request, block.extrinsics).is_ok()); - } -} diff --git a/primitives/api/test/tests/decl_and_impl.rs b/primitives/api/test/tests/decl_and_impl.rs index a09bd0412c8..4a8c8cd6628 100644 --- a/primitives/api/test/tests/decl_and_impl.rs +++ b/primitives/api/test/tests/decl_and_impl.rs @@ -112,7 +112,7 @@ mock_impl_runtime_apis! { } } -type TestClient = substrate_test_runtime_client::sc_client::Client< +type TestClient = substrate_test_runtime_client::client::Client< substrate_test_runtime_client::Backend, substrate_test_runtime_client::Executor, Block, diff --git a/primitives/api/test/tests/ui/mock_only_one_error_type.stderr b/primitives/api/test/tests/ui/mock_only_one_error_type.stderr index 8f026838c96..7cec5246ca8 100644 --- a/primitives/api/test/tests/ui/mock_only_one_error_type.stderr +++ b/primitives/api/test/tests/ui/mock_only_one_error_type.stderr @@ -23,5 +23,5 @@ error[E0277]: the trait bound `u32: std::convert::From` is > > > - > - and 16 others + > + and 18 others diff --git a/test-utils/client/Cargo.toml b/test-utils/client/Cargo.toml index 6e9381bdafd..37c99292ec9 100644 --- a/test-utils/client/Cargo.toml +++ b/test-utils/client/Cargo.toml @@ -13,10 +13,11 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sc-client-api = { version = "2.0.0-dev", path = "../../client/api" } -sc-client = { version = "0.8.0-dev", path = "../../client/" } sc-client-db = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../client/db" } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } sc-executor = { version = "0.8.0-dev", path = "../../client/executor" } +sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../client/service" } futures = "0.3.4" hash-db = "0.15.2" sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } diff --git a/test-utils/client/src/client_ext.rs b/test-utils/client/src/client_ext.rs index 6d6b539483e..d663dda7a93 100644 --- a/test-utils/client/src/client_ext.rs +++ b/test-utils/client/src/client_ext.rs @@ -16,7 +16,7 @@ //! Client extension for tests. -use sc_client::{self, Client}; +use sc_service::client::Client; use sc_client_api::backend::Finalizer; use sp_consensus::{ BlockImportParams, BlockImport, BlockOrigin, Error as ConsensusError, @@ -64,7 +64,7 @@ pub trait ClientBlockImportExt: Sized { impl ClientExt for Client where B: sc_client_api::backend::Backend, - E: sc_client::CallExecutor + 'static, + E: sc_client_api::CallExecutor + 'static, Self: BlockImport, Block: BlockT, { diff --git a/test-utils/client/src/lib.rs b/test-utils/client/src/lib.rs index bf3f8c68782..22173ca04ed 100644 --- a/test-utils/client/src/lib.rs +++ b/test-utils/client/src/lib.rs @@ -20,7 +20,6 @@ pub mod client_ext; -pub use sc_client::{blockchain, self}; pub use sc_client_api::{ execution_extensions::{ExecutionStrategies, ExecutionExtensions}, ForkBlocks, BadBlocks, CloneableSpawn, @@ -36,16 +35,17 @@ pub use sp_keyring::{ pub use sp_core::{traits::BareCryptoStorePtr, tasks::executor as tasks_executor}; pub use sp_runtime::{Storage, StorageChild}; pub use sp_state_machine::ExecutionStrategy; +pub use sc_service::client; pub use self::client_ext::{ClientExt, ClientBlockImportExt}; use std::sync::Arc; use std::collections::HashMap; use sp_core::storage::ChildInfo; use sp_runtime::traits::{Block as BlockT, BlakeTwo256}; -use sc_client::LocalCallExecutor; +use sc_service::client::{LocalCallExecutor, ClientConfig}; /// Test client light database backend. -pub type LightBackend = sc_client::light::backend::Backend< +pub type LightBackend = client::light::backend::Backend< sc_client_db::light::LightStorage, BlakeTwo256, >; @@ -175,15 +175,15 @@ impl TestClientBuilder ( - sc_client::Client< + client::Client< Backend, Executor, Block, RuntimeApi, >, - sc_client::LongestChain, + sc_consensus::LongestChain, ) where - Executor: sc_client::CallExecutor + 'static, + Executor: sc_client_api::CallExecutor + 'static, Backend: sc_client_api::backend::Backend, { let storage = { @@ -203,7 +203,7 @@ impl TestClientBuilder TestClientBuilder TestClientBuilder TestClientBuilder< Block, - sc_client::LocalCallExecutor>, + client::LocalCallExecutor>, Backend, G, > { @@ -234,13 +234,13 @@ impl TestClientBuilder< self, executor: I, ) -> ( - sc_client::Client< + client::Client< Backend, - sc_client::LocalCallExecutor>, + client::LocalCallExecutor>, Block, RuntimeApi >, - sc_client::LongestChain, + sc_consensus::LongestChain, ) where I: Into>>, E: sc_executor::NativeExecutionDispatch + 'static, diff --git a/test-utils/runtime/Cargo.toml b/test-utils/runtime/Cargo.toml index 96daca8bedc..f4582d0b709 100644 --- a/test-utils/runtime/Cargo.toml +++ b/test-utils/runtime/Cargo.toml @@ -17,12 +17,10 @@ sp-application-crypto = { version = "2.0.0-dev", default-features = false, path sp-consensus-aura = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/aura" } sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/babe" } sp-block-builder = { version = "2.0.0-dev", default-features = false, path = "../../primitives/block-builder" } -cfg-if = "0.1.10" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../frame/executive" } sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../primitives/keyring" } -log = { version = "0.4.8", optional = true } memory-db = { version = "0.20.0", default-features = false } sp-offchain = { path = "../../primitives/offchain", default-features = false, version = "2.0.0-dev"} sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } @@ -31,7 +29,6 @@ sp-runtime-interface = { path = "../../primitives/runtime-interface", default-fe sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../../frame/support" } sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } -serde = { version = "1.0.101", optional = true, features = ["derive"] } sp-session = { version = "2.0.0-dev", default-features = false, path = "../../primitives/session" } sp-api = { version = "2.0.0-dev", default-features = false, path = "../../primitives/api" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } @@ -39,11 +36,16 @@ pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../f frame-system = { version = "2.0.0-dev", default-features = false, path = "../../frame/system" } frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../frame/system/rpc/runtime-api" } pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../frame/timestamp" } -sc-client = { version = "0.8.0-dev", optional = true, path = "../../client" } sp-trie = { version = "2.0.0-dev", default-features = false, path = "../../primitives/trie" } sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../primitives/transaction-pool" } trie-db = { version = "0.20.1", default-features = false } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } +sc-service = { version = "0.8.0-dev", default-features = false, optional = true, features = ["test-helpers"], path = "../../client/service" } + +# 3rd party +cfg-if = "0.1.10" +log = { version = "0.4.8", optional = true } +serde = { version = "1.0.101", optional = true, features = ["derive"] } [dev-dependencies] sc-block-builder = { version = "0.8.0-dev", path = "../../client/block-builder" } @@ -85,7 +87,7 @@ std = [ "frame-system-rpc-runtime-api/std", "frame-system/std", "pallet-timestamp/std", - "sc-client", + "sc-service", "sp-trie/std", "sp-transaction-pool/std", "trie-db/std", diff --git a/test-utils/runtime/client/Cargo.toml b/test-utils/runtime/client/Cargo.toml index 06d4f3fcf5c..f622878404f 100644 --- a/test-utils/runtime/client/Cargo.toml +++ b/test-utils/runtime/client/Cargo.toml @@ -12,6 +12,7 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } substrate-test-client = { version = "2.0.0-dev", path = "../../client" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } @@ -21,5 +22,6 @@ sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } codec = { package = "parity-scale-codec", version = "1.3.0" } sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-client = { version = "0.8.0-dev", path = "../../../client/" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } futures = "0.3.4" diff --git a/test-utils/runtime/client/src/lib.rs b/test-utils/runtime/client/src/lib.rs index a2b38a342bc..7b51d88e069 100644 --- a/test-utils/runtime/client/src/lib.rs +++ b/test-utils/runtime/client/src/lib.rs @@ -26,7 +26,7 @@ use std::sync::Arc; use std::collections::HashMap; pub use substrate_test_client::*; pub use substrate_test_runtime as runtime; -pub use sc_client::LongestChain; +pub use sc_consensus::LongestChain; pub use self::block_builder_ext::BlockBuilderExt; @@ -34,7 +34,7 @@ use sp_core::{sr25519, ChangesTrieConfiguration}; use sp_core::storage::{ChildInfo, Storage, StorageChild}; use substrate_test_runtime::genesismap::{GenesisConfig, additional_storage_with_genesis}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Hash as HashT, NumberFor, HashFor}; -use sc_client::{ +use sc_service::client::{ light::fetcher::{ Fetcher, RemoteHeaderRequest, RemoteReadRequest, RemoteReadChildRequest, @@ -68,7 +68,7 @@ sc_executor::native_executor_instance! { pub type Backend = substrate_test_client::Backend; /// Test client executor. -pub type Executor = sc_client::LocalCallExecutor< +pub type Executor = client::LocalCallExecutor< Backend, NativeExecutor, >; @@ -77,10 +77,10 @@ pub type Executor = sc_client::LocalCallExecutor< pub type LightBackend = substrate_test_client::LightBackend; /// Test client light executor. -pub type LightExecutor = sc_client::light::call_executor::GenesisCallExecutor< +pub type LightExecutor = client::light::call_executor::GenesisCallExecutor< LightBackend, - sc_client::LocalCallExecutor< - sc_client::light::backend::Backend< + client::LocalCallExecutor< + client::light::backend::Backend< sc_client_db::light::LightStorage, HashFor >, @@ -133,7 +133,7 @@ impl substrate_test_client::GenesisInit for GenesisParameters { let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( storage.top.clone().into_iter().chain(child_roots).collect() ); - let block: runtime::Block = sc_client::genesis::construct_genesis_block(state_root); + let block: runtime::Block = client::genesis::construct_genesis_block(state_root); storage.top.extend(additional_storage_with_genesis(&block)); storage @@ -149,9 +149,9 @@ pub type TestClientBuilder = substrate_test_client::TestClientBuilder< >; /// Test client type with `LocalExecutor` and generic Backend. -pub type Client = sc_client::Client< +pub type Client = client::Client< B, - sc_client::LocalCallExecutor>, + client::LocalCallExecutor>, substrate_test_runtime::Block, substrate_test_runtime::RuntimeApi, >; @@ -230,14 +230,14 @@ pub trait TestClientBuilderExt: Sized { } /// Build the test client and longest chain selector. - fn build_with_longest_chain(self) -> (Client, sc_client::LongestChain); + fn build_with_longest_chain(self) -> (Client, sc_consensus::LongestChain); /// Build the test client and the backend. fn build_with_backend(self) -> (Client, Arc); } impl TestClientBuilderExt for TestClientBuilder< - sc_client::LocalCallExecutor>, + client::LocalCallExecutor>, B > where B: sc_client_api::backend::Backend + 'static, @@ -249,7 +249,7 @@ impl TestClientBuilderExt for TestClientBuilder< Self::genesis_init_mut(self) } - fn build_with_longest_chain(self) -> (Client, sc_client::LongestChain) { + fn build_with_longest_chain(self) -> (Client, sc_consensus::LongestChain) { self.build_with_native_executor(None) } @@ -344,15 +344,15 @@ pub fn new() -> Client { /// Creates new light client instance used for tests. pub fn new_light() -> ( - sc_client::Client, + client::Client, Arc, ) { let storage = sc_client_db::light::LightStorage::new_test(); - let blockchain = Arc::new(sc_client::light::blockchain::Blockchain::new(storage)); + let blockchain = Arc::new(client::light::blockchain::Blockchain::new(storage)); let backend = Arc::new(LightBackend::new(blockchain.clone())); let executor = new_native_executor(); - let local_call_executor = sc_client::LocalCallExecutor::new(backend.clone(), executor, sp_core::tasks::executor(), Default::default()); + let local_call_executor = client::LocalCallExecutor::new(backend.clone(), executor, sp_core::tasks::executor(), Default::default()); let call_executor = LightExecutor::new( backend.clone(), local_call_executor, diff --git a/test-utils/runtime/client/src/trait_tests.rs b/test-utils/runtime/client/src/trait_tests.rs index 4af8aa37b64..2a377fabba1 100644 --- a/test-utils/runtime/client/src/trait_tests.rs +++ b/test-utils/runtime/client/src/trait_tests.rs @@ -26,7 +26,7 @@ use crate::{ }; use sc_client_api::backend; use sc_client_api::blockchain::{Backend as BlockChainBackendT, HeaderBackend}; -use substrate_test_client::sp_consensus::BlockOrigin; +use sp_consensus::BlockOrigin; use substrate_test_runtime::{self, Transfer}; use sp_runtime::generic::BlockId; use sp_runtime::traits::{Block as BlockT, HashFor}; diff --git a/test-utils/runtime/src/genesismap.rs b/test-utils/runtime/src/genesismap.rs index b9de3ab3f4c..9426cd6433c 100644 --- a/test-utils/runtime/src/genesismap.rs +++ b/test-utils/runtime/src/genesismap.rs @@ -23,6 +23,7 @@ use codec::{Encode, KeyedVec, Joiner}; use sp_core::{ChangesTrieConfiguration, map}; use sp_core::storage::{well_known_keys, Storage}; use sp_runtime::traits::{Block as BlockT, Hash as HashT, Header as HeaderT}; +use sc_service::client::genesis; /// Configuration of a general Substrate test genesis block. pub struct GenesisConfig { @@ -96,7 +97,7 @@ pub fn insert_genesis_block( let state_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( storage.top.clone().into_iter().collect() ); - let block: crate::Block = sc_client::genesis::construct_genesis_block(state_root); + let block: crate::Block = genesis::construct_genesis_block(state_root); let genesis_hash = block.header.hash(); storage.top.extend(additional_storage_with_genesis(&block)); genesis_hash diff --git a/utils/frame/benchmarking-cli/Cargo.toml b/utils/frame/benchmarking-cli/Cargo.toml index 86eb20faf80..b02f42d7593 100644 --- a/utils/frame/benchmarking-cli/Cargo.toml +++ b/utils/frame/benchmarking-cli/Cargo.toml @@ -16,7 +16,6 @@ frame-benchmarking = { version = "2.0.0-dev", path = "../../../frame/benchmarkin sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-client = { version = "0.8.0-dev", path = "../../../client" } sc-client-db = { version = "0.8.0-dev", path = "../../../client/db" } sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } diff --git a/utils/frame/benchmarking-cli/src/command.rs b/utils/frame/benchmarking-cli/src/command.rs index 17205bc76e5..ebca380baff 100644 --- a/utils/frame/benchmarking-cli/src/command.rs +++ b/utils/frame/benchmarking-cli/src/command.rs @@ -18,9 +18,9 @@ use crate::BenchmarkCmd; use codec::{Decode, Encode}; use frame_benchmarking::{Analysis, BenchmarkBatch}; use sc_cli::{SharedParams, CliConfiguration, ExecutionStrategy, Result}; -use sc_client::StateMachine; use sc_client_db::BenchmarkingState; use sc_executor::NativeExecutor; +use sp_state_machine::StateMachine; use sp_externalities::Extensions; use sc_service::{Configuration, NativeExecutionDispatch}; use sp_runtime::{ diff --git a/utils/frame/rpc/system/Cargo.toml b/utils/frame/rpc/system/Cargo.toml index 20524a460a4..a33a9dfd731 100644 --- a/utils/frame/rpc/system/Cargo.toml +++ b/utils/frame/rpc/system/Cargo.toml @@ -12,7 +12,7 @@ description = "FRAME's system exposed over Substrate RPC" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client = { version = "0.8.0-dev", path = "../../../../client/" } +sc-client-api = { version = "2.0.0-dev", path = "../../../../client/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = "0.3.4" jsonrpc-core = "14.0.3" diff --git a/utils/frame/rpc/system/src/lib.rs b/utils/frame/rpc/system/src/lib.rs index 4838e8e8f43..8dff3a641d1 100644 --- a/utils/frame/rpc/system/src/lib.rs +++ b/utils/frame/rpc/system/src/lib.rs @@ -19,10 +19,7 @@ use std::sync::Arc; use codec::{self, Codec, Decode, Encode}; -use sc_client::{ - light::blockchain::{future_header, RemoteBlockchain}, - light::fetcher::{Fetcher, RemoteCallRequest}, -}; +use sc_client_api::light::{future_header, RemoteBlockchain, Fetcher, RemoteCallRequest}; use jsonrpc_core::{ Error, ErrorCode, futures::future::{result, Future}, -- GitLab From 8c546269a60f14f847935962a71bdfb081f9b2ab Mon Sep 17 00:00:00 2001 From: Stanislav Tkach Date: Tue, 28 Apr 2020 18:21:10 +0300 Subject: [PATCH 081/167] Remove sp-runtime dependency from sp-phragmen (#5786) * Remove sp-runtime dependency from sp-phragmen * Use regular derive(Debug) instead of RuntimeDebug --- Cargo.lock | 1 + primitives/core/src/testing.rs | 4 +-- primitives/phragmen/Cargo.toml | 5 ++-- primitives/phragmen/compact/src/assignment.rs | 8 +++--- primitives/phragmen/compact/src/lib.rs | 2 +- primitives/phragmen/src/helpers.rs | 4 +-- primitives/phragmen/src/lib.rs | 27 ++++++++++--------- primitives/phragmen/src/mock.rs | 8 +++--- primitives/phragmen/src/node.rs | 3 +-- primitives/phragmen/src/reduce.rs | 2 +- primitives/phragmen/src/tests.rs | 4 +-- 11 files changed, 35 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c944740b73..6269e033602 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7561,6 +7561,7 @@ dependencies = [ "parity-scale-codec", "rand 0.7.3", "serde", + "sp-arithmetic", "sp-phragmen", "sp-phragmen-compact", "sp-runtime", diff --git a/primitives/core/src/testing.rs b/primitives/core/src/testing.rs index b5e6f4c7aff..9e83090bcff 100644 --- a/primitives/core/src/testing.rs +++ b/primitives/core/src/testing.rs @@ -16,10 +16,10 @@ //! Types that should only be used for testing! -use crate::crypto::{KeyTypeId, CryptoTypePublicPair}; +use crate::crypto::KeyTypeId; #[cfg(feature = "std")] use crate::{ - crypto::{Pair, Public}, + crypto::{Pair, Public, CryptoTypePublicPair}, ed25519, sr25519, traits::BareCryptoStoreError }; diff --git a/primitives/phragmen/Cargo.toml b/primitives/phragmen/Cargo.toml index ff3b3314061..29fc0ed41e4 100644 --- a/primitives/phragmen/Cargo.toml +++ b/primitives/phragmen/Cargo.toml @@ -15,13 +15,14 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } sp-phragmen-compact = { version = "2.0.0-dev", path = "./compact" } +sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../arithmetic" } [dev-dependencies] substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } rand = "0.7.3" sp-phragmen = { version = "2.0.0-dev", path = "." } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } [features] default = ["std"] @@ -30,5 +31,5 @@ std = [ "codec/std", "serde", "sp-std/std", - "sp-runtime/std", + "sp-arithmetic/std", ] diff --git a/primitives/phragmen/compact/src/assignment.rs b/primitives/phragmen/compact/src/assignment.rs index 587e482ccb2..4630a494fc7 100644 --- a/primitives/phragmen/compact/src/assignment.rs +++ b/primitives/phragmen/compact/src/assignment.rs @@ -91,7 +91,7 @@ fn into_impl(count: usize) -> TokenStream2 { } // defensive only. Since Percent doesn't have `Sub`. - let p2 = _phragmen::sp_runtime::traits::Saturating::saturating_sub( + let p2 = _phragmen::sp_arithmetic::traits::Saturating::saturating_sub( Accuracy::one(), p1, ); @@ -115,7 +115,7 @@ fn into_impl(count: usize) -> TokenStream2 { let mut inners_parsed = inners .iter() .map(|(ref t_idx, p)| { - sum = _phragmen::sp_runtime::traits::Saturating::saturating_add(sum, *p); + sum = _phragmen::sp_arithmetic::traits::Saturating::saturating_add(sum, *p); let target = target_at(*t_idx).ok_or(_phragmen::Error::CompactInvalidIndex)?; Ok((target, *p)) }) @@ -126,7 +126,7 @@ fn into_impl(count: usize) -> TokenStream2 { } // defensive only. Since Percent doesn't have `Sub`. - let p_last = _phragmen::sp_runtime::traits::Saturating::saturating_sub( + let p_last = _phragmen::sp_arithmetic::traits::Saturating::saturating_sub( Accuracy::one(), sum, ); @@ -163,7 +163,7 @@ pub(crate) fn assignment( #voter_type: _phragmen::codec::Codec + Default + Copy, #target_type: _phragmen::codec::Codec + Default + Copy, Accuracy: - _phragmen::codec::Codec + Default + Clone + _phragmen::sp_runtime::PerThing + + _phragmen::codec::Codec + Default + Clone + _phragmen::sp_arithmetic::PerThing + PartialOrd, > #ident<#voter_type, #target_type, Accuracy> diff --git a/primitives/phragmen/compact/src/lib.rs b/primitives/phragmen/compact/src/lib.rs index 114aeaeb32e..9406f944c39 100644 --- a/primitives/phragmen/compact/src/lib.rs +++ b/primitives/phragmen/compact/src/lib.rs @@ -164,7 +164,7 @@ fn struct_def( PartialEq, Eq, Clone, - _phragmen::sp_runtime::RuntimeDebug, + Debug, _phragmen::codec::Encode, _phragmen::codec::Decode, )] diff --git a/primitives/phragmen/src/helpers.rs b/primitives/phragmen/src/helpers.rs index 216de9243ec..6b1497e3ad7 100644 --- a/primitives/phragmen/src/helpers.rs +++ b/primitives/phragmen/src/helpers.rs @@ -17,7 +17,7 @@ //! Helper methods for phragmen. use crate::{Assignment, ExtendedBalance, VoteWeight, IdentifierT, StakedAssignment, WithApprovalOf}; -use sp_runtime::PerThing; +use sp_arithmetic::PerThing; use sp_std::prelude::*; /// Converts a vector of ratio assignments into ones with absolute budget value. @@ -57,7 +57,7 @@ pub fn to_without_backing(winners: Vec>) -> Ve #[cfg(test)] mod tests { use super::*; - use sp_runtime::Perbill; + use sp_arithmetic::Perbill; #[test] fn into_staked_works() { diff --git a/primitives/phragmen/src/lib.rs b/primitives/phragmen/src/lib.rs index f45732d5b8e..cf972eb1ed7 100644 --- a/primitives/phragmen/src/lib.rs +++ b/primitives/phragmen/src/lib.rs @@ -34,8 +34,11 @@ #![cfg_attr(not(feature = "std"), no_std)] use sp_std::{prelude::*, collections::btree_map::BTreeMap, fmt::Debug, cmp::Ordering, convert::TryFrom}; -use sp_runtime::{helpers_128bit::multiply_by_rational, PerThing, Rational128, RuntimeDebug, SaturatedConversion}; -use sp_runtime::traits::{Zero, Member, Saturating, Bounded}; +use sp_arithmetic::{ + PerThing, Rational128, + helpers_128bit::multiply_by_rational, + traits::{Zero, Saturating, Bounded, SaturatedConversion}, +}; #[cfg(test)] mod mock; @@ -60,7 +63,7 @@ pub use helpers::*; #[doc(hidden)] pub use codec; #[doc(hidden)] -pub use sp_runtime; +pub use sp_arithmetic; // re-export the compact solution type. pub use sp_phragmen_compact::generate_compact_solution_type; @@ -107,7 +110,7 @@ pub type WithApprovalOf = (A, ExtendedBalance); const DEN: u128 = u128::max_value(); /// A candidate entity for phragmen election. -#[derive(Clone, Default, RuntimeDebug)] +#[derive(Clone, Default, Debug)] struct Candidate { /// Identifier. who: AccountId, @@ -120,7 +123,7 @@ struct Candidate { } /// A voter entity. -#[derive(Clone, Default, RuntimeDebug)] +#[derive(Clone, Default, Debug)] struct Voter { /// Identifier. who: AccountId, @@ -133,7 +136,7 @@ struct Voter { } /// A candidate being backed by a voter. -#[derive(Clone, Default, RuntimeDebug)] +#[derive(Clone, Default, Debug)] struct Edge { /// Identifier. who: AccountId, @@ -144,7 +147,7 @@ struct Edge { } /// Final result of the phragmen election. -#[derive(RuntimeDebug)] +#[derive(Debug)] pub struct PhragmenResult { /// Just winners zipped with their approval stake. Note that the approval stake is merely the /// sub of their received stake and could be used for very basic sorting and approval voting. @@ -155,7 +158,7 @@ pub struct PhragmenResult { } /// A voter's stake assignment among a set of targets, represented as ratios. -#[derive(RuntimeDebug, Clone, Default)] +#[derive(Debug, Clone, Default)] #[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))] pub struct Assignment { /// Voter's identifier. @@ -223,7 +226,7 @@ where /// A voter's stake assignment among a set of targets, represented as absolute values in the scale /// of [`ExtendedBalance`]. -#[derive(RuntimeDebug, Clone, Default)] +#[derive(Debug, Clone, Default)] #[cfg_attr(feature = "std", derive(PartialEq, Eq, Encode, Decode))] pub struct StakedAssignment { /// Voter's identifier @@ -301,7 +304,7 @@ impl StakedAssignment { /// /// This, at the current version, resembles the `Exposure` defined in the Staking pallet, yet /// they do not necessarily have to be the same. -#[derive(Default, RuntimeDebug)] +#[derive(Default, Debug)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, Eq, PartialEq))] pub struct Support { /// Total support. @@ -334,7 +337,7 @@ pub fn elect( initial_candidates: Vec, initial_voters: Vec<(AccountId, VoteWeight, Vec)>, ) -> Option> where - AccountId: Default + Ord + Member, + AccountId: Default + Ord + Clone, R: PerThing, { // return structures @@ -561,7 +564,7 @@ pub fn build_support_map( winners: &[AccountId], assignments: &[StakedAssignment], ) -> (SupportMap, u32) where - AccountId: Default + Ord + Member, + AccountId: Default + Ord + Clone, { let mut errors = 0; // Initialize the support of each candidate. diff --git a/primitives/phragmen/src/mock.rs b/primitives/phragmen/src/mock.rs index 5aab5ff2f72..cf9c90334bc 100644 --- a/primitives/phragmen/src/mock.rs +++ b/primitives/phragmen/src/mock.rs @@ -19,11 +19,9 @@ #![cfg(test)] use crate::{elect, PhragmenResult, Assignment, VoteWeight, ExtendedBalance}; -use sp_runtime::{ - assert_eq_error_rate, PerThing, - traits::{Member, SaturatedConversion, Zero, One} -}; +use sp_arithmetic::{PerThing, traits::{SaturatedConversion, Zero, One}}; use sp_std::collections::btree_map::BTreeMap; +use sp_runtime::assert_eq_error_rate; #[derive(Default, Debug)] pub(crate) struct _Candidate { @@ -77,7 +75,7 @@ pub(crate) fn elect_float( initial_voters: Vec<(A, Vec)>, stake_of: FS, ) -> Option<_PhragmenResult> where - A: Default + Ord + Member + Copy, + A: Default + Ord + Copy, for<'r> FS: Fn(&'r A) -> VoteWeight, { let mut elected_candidates: Vec<(A, ExtendedBalance)>; diff --git a/primitives/phragmen/src/node.rs b/primitives/phragmen/src/node.rs index 92ef325a348..432c537052e 100644 --- a/primitives/phragmen/src/node.rs +++ b/primitives/phragmen/src/node.rs @@ -16,11 +16,10 @@ //! (very) Basic implementation of a graph node used in the reduce algorithm. -use sp_runtime::RuntimeDebug; use sp_std::{cell::RefCell, fmt, prelude::*, rc::Rc}; /// The role that a node can accept. -#[derive(PartialEq, Eq, Ord, PartialOrd, Clone, RuntimeDebug)] +#[derive(PartialEq, Eq, Ord, PartialOrd, Clone, Debug)] pub(crate) enum NodeRole { /// A voter. This is synonym to a nominator in a staking context. Voter, diff --git a/primitives/phragmen/src/reduce.rs b/primitives/phragmen/src/reduce.rs index 1f6f6c3b991..ac4441ddc0e 100644 --- a/primitives/phragmen/src/reduce.rs +++ b/primitives/phragmen/src/reduce.rs @@ -48,7 +48,7 @@ use crate::node::{Node, NodeId, NodeRef, NodeRole}; use crate::{ExtendedBalance, IdentifierT, StakedAssignment}; -use sp_runtime::traits::{Bounded, Zero}; +use sp_arithmetic::traits::{Bounded, Zero}; use sp_std::{ collections::btree_map::{BTreeMap, Entry::*}, prelude::*, diff --git a/primitives/phragmen/src/tests.rs b/primitives/phragmen/src/tests.rs index 9d16d67495d..720a0a3f752 100644 --- a/primitives/phragmen/src/tests.rs +++ b/primitives/phragmen/src/tests.rs @@ -24,7 +24,7 @@ use crate::{ Support, StakedAssignment, Assignment, PhragmenResult, ExtendedBalance, }; use substrate_test_utils::assert_eq_uvec; -use sp_runtime::{Perbill, Permill, Percent, PerU16}; +use sp_arithmetic::{Perbill, Permill, Percent, PerU16}; #[test] fn float_phragmen_poc_works() { @@ -648,7 +648,7 @@ mod compact { // these need to come from the same dev-dependency `sp-phragmen`, not from the crate. use sp_phragmen::{Assignment, StakedAssignment, Error as PhragmenError, ExtendedBalance}; use sp_std::{convert::{TryInto, TryFrom}, fmt::Debug}; - use sp_runtime::Percent; + use sp_arithmetic::Percent; type Accuracy = Percent; -- GitLab From 0f46400651ecc0d10f74f70a04bb8e685beb7f63 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Tue, 28 Apr 2020 17:47:40 +0200 Subject: [PATCH 082/167] Add metrics about block requests (#5811) * Add metrics about block requests * Apply suggestions from code review Co-Authored-By: Max Inden Co-authored-by: Gavin Wood Co-authored-by: Max Inden --- client/network/src/behaviour.rs | 85 ++++++++++++++-- client/network/src/protocol/block_requests.rs | 96 ++++++++++++++++--- client/network/src/service.rs | 53 ++++++++++ 3 files changed, 215 insertions(+), 19 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index ce92114c530..eae20c9031e 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -32,7 +32,7 @@ use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollPa use log::debug; use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}}; use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification}; -use std::{borrow::Cow, iter, task::Context, task::Poll}; +use std::{borrow::Cow, iter, task::{Context, Poll}, time::Duration}; use void; /// General behaviour of the network. Combines all protocols together. @@ -67,8 +67,39 @@ pub enum BehaviourOut { BlockImport(BlockOrigin, Vec>), JustificationImport(Origin, B::Hash, NumberFor, Justification), FinalityProofImport(Origin, B::Hash, NumberFor, Vec), - /// Started a random Kademlia discovery query. + + /// Started a random iterative Kademlia discovery query. RandomKademliaStarted(ProtocolId), + + /// We have received a request from a peer and answered it. + AnsweredRequest { + /// Peer which sent us a request. + peer: PeerId, + /// Protocol name of the request. + protocol: Vec, + /// Time it took to build the response. + build_time: Duration, + }, + /// Started a new request with the given node. + RequestStarted { + peer: PeerId, + /// Protocol name of the request. + protocol: Vec, + }, + /// Finished, successfully or not, a previously-started request. + RequestFinished { + /// Who we were requesting. + peer: PeerId, + /// Protocol name of the request. + protocol: Vec, + /// How long before the response came or the request got cancelled. + request_duration: Duration, + }, + + /// Any event represented by the [`Event`] enum. + /// + /// > **Note**: The [`Event`] enum contains the events that are available through the public + /// > API of the library. Event(Event), } @@ -220,7 +251,27 @@ Behaviour { CustomMessageOutcome::FinalityProofImport(origin, hash, nb, proof) => self.events.push(BehaviourOut::FinalityProofImport(origin, hash, nb, proof)), CustomMessageOutcome::BlockRequest { target, request } => { - self.block_requests.send_request(&target, request); + match self.block_requests.send_request(&target, request) { + block_requests::SendRequestOutcome::Ok => { + self.events.push(BehaviourOut::RequestStarted { + peer: target, + protocol: self.block_requests.protocol_name().to_vec(), + }); + }, + block_requests::SendRequestOutcome::Replaced { request_duration, .. } => { + self.events.push(BehaviourOut::RequestFinished { + peer: target.clone(), + protocol: self.block_requests.protocol_name().to_vec(), + request_duration, + }); + self.events.push(BehaviourOut::RequestStarted { + peer: target, + protocol: self.block_requests.protocol_name().to_vec(), + }); + } + block_requests::SendRequestOutcome::NotConnected | + block_requests::SendRequestOutcome::EncodeError(_) => {}, + } }, CustomMessageOutcome::FinalityProofRequest { target, block_hash, request } => { self.finality_proof_requests.send_request(&target, block_hash, request); @@ -257,18 +308,40 @@ Behaviour { impl NetworkBehaviourEventProcess> for Behaviour { fn inject_event(&mut self, event: block_requests::Event) { match event { - block_requests::Event::Response { peer, original_request, response } => { + block_requests::Event::AnsweredRequest { peer, response_build_time } => { + self.events.push(BehaviourOut::AnsweredRequest { + peer, + protocol: self.block_requests.protocol_name().to_vec(), + build_time: response_build_time, + }); + }, + block_requests::Event::Response { peer, original_request, response, request_duration } => { + self.events.push(BehaviourOut::RequestFinished { + peer: peer.clone(), + protocol: self.block_requests.protocol_name().to_vec(), + request_duration, + }); let ev = self.substrate.on_block_response(peer, original_request, response); self.inject_event(ev); } - block_requests::Event::RequestCancelled { .. } => { + block_requests::Event::RequestCancelled { peer, request_duration, .. } => { // There doesn't exist any mechanism to report cancellations yet. // We would normally disconnect the node, but this event happens as the result of // a disconnect, so there's nothing more to do. + self.events.push(BehaviourOut::RequestFinished { + peer, + protocol: self.block_requests.protocol_name().to_vec(), + request_duration, + }); } - block_requests::Event::RequestTimeout { peer, .. } => { + block_requests::Event::RequestTimeout { peer, request_duration, .. } => { // There doesn't exist any mechanism to report timeouts yet, so we process them by // disconnecting the node. + self.events.push(BehaviourOut::RequestFinished { + peer: peer.clone(), + protocol: self.block_requests.protocol_name().to_vec(), + request_duration, + }); self.substrate.disconnect_peer(&peer); } } diff --git a/client/network/src/protocol/block_requests.rs b/client/network/src/protocol/block_requests.rs index 3c511538d99..920d3f0e23f 100644 --- a/client/network/src/protocol/block_requests.rs +++ b/client/network/src/protocol/block_requests.rs @@ -65,6 +65,7 @@ use std::{ task::{Context, Poll} }; use void::{Void, unreachable}; +use wasm_timer::Instant; // Type alias for convenience. pub type Error = Box; @@ -72,25 +73,44 @@ pub type Error = Box; /// Event generated by the block requests behaviour. #[derive(Debug)] pub enum Event { + /// A request came and we answered it. + AnsweredRequest { + /// Peer which has emitted the request. + peer: PeerId, + /// Time it took to compute the response. + response_build_time: Duration, + }, + /// A response to a block request has arrived. Response { peer: PeerId, /// The original request passed to `send_request`. original_request: message::BlockRequest, response: message::BlockResponse, + /// Time elapsed between the start of the request and the response. + request_duration: Duration, }, + /// A request has been cancelled because the peer has disconnected. /// Disconnects can also happen as a result of violating the network protocol. + /// + /// > **Note**: This event is NOT emitted if a request is overridden by calling `send_request`. + /// > For that, you must check the value returned by `send_request`. RequestCancelled { peer: PeerId, /// The original request passed to `send_request`. original_request: message::BlockRequest, + /// Time elapsed between the start of the request and the cancellation. + request_duration: Duration, }, + /// A request has timed out. RequestTimeout { peer: PeerId, /// The original request passed to `send_request`. original_request: message::BlockRequest, + /// Time elapsed between the start of the request and the timeout. + request_duration: Duration, } } @@ -184,10 +204,32 @@ struct Connection { #[derive(Debug)] struct OngoingRequest { + /// `Instant` when the request has been emitted. Used for diagnostic purposes. + emitted: Instant, request: message::BlockRequest, timeout: Delay, } +/// Outcome of calling `send_request`. +#[derive(Debug)] +#[must_use] +pub enum SendRequestOutcome { + /// Request has been emitted. + Ok, + /// The request has been emitted and has replaced an existing request. + Replaced { + /// The previously-emitted request. + previous: message::BlockRequest, + /// Time that had elapsed since `previous` has been emitted. + request_duration: Duration, + }, + /// Didn't start a request because we have no connection to this node. + /// If `send_request` returns that, it is as if the function had never been called. + NotConnected, + /// Error while serializing the request. + EncodeError(prost::EncodeError), +} + impl BlockRequests where B: Block, @@ -202,13 +244,18 @@ where } } + /// Returns the libp2p protocol name used on the wire (e.g. `/foo/sync/2`). + pub fn protocol_name(&self) -> &[u8] { + &self.config.protocol + } + /// Issue a new block request. /// /// Cancels any existing request targeting the same `PeerId`. /// /// If the response doesn't arrive in time, or if the remote answers improperly, the target /// will be disconnected. - pub fn send_request(&mut self, target: &PeerId, req: message::BlockRequest) { + pub fn send_request(&mut self, target: &PeerId, req: message::BlockRequest) -> SendRequestOutcome { // Determine which connection to send the request to. let connection = if let Some(peer) = self.peers.get_mut(target) { // We don't want to have multiple requests for any given node, so in priority try to @@ -222,10 +269,10 @@ where target: "sync", "State inconsistency: empty list of peer connections" ); - return; + return SendRequestOutcome::NotConnected; } } else { - return; + return SendRequestOutcome::NotConnected; }; let protobuf_rq = api::v1::BlockRequest { @@ -252,17 +299,12 @@ where protobuf_rq, err ); - return; + return SendRequestOutcome::EncodeError(err); } - if let Some(rq) = &connection.ongoing_request { - log::debug!( - target: "sync", - "Replacing existing block request on connection {:?}", - connection.id - ); - } + let previous_request = connection.ongoing_request.take(); connection.ongoing_request = Some(OngoingRequest { + emitted: Instant::now(), request: req.clone(), timeout: Delay::new(self.config.request_timeout), }); @@ -278,6 +320,20 @@ where protocol: self.config.protocol.clone(), }, }); + + if let Some(previous_request) = previous_request { + log::debug!( + target: "sync", + "Replacing existing block request on connection {:?}", + connection.id + ); + SendRequestOutcome::Replaced { + previous: previous_request.request, + request_duration: previous_request.emitted.elapsed(), + } + } else { + SendRequestOutcome::Ok + } } /// Callback, invoked when a new block request has been received from remote. @@ -445,6 +501,7 @@ where let ev = Event::RequestCancelled { peer: peer_id.clone(), original_request: ongoing_request.request.clone(), + request_duration: ongoing_request.emitted.elapsed(), }; self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); } @@ -476,6 +533,8 @@ where ) { match node_event { NodeEvent::Request(request, mut stream) => { + let before_answer_build = Instant::now(); + match self.on_block_request(&peer, &request) { Ok(res) => { log::trace!( @@ -508,6 +567,12 @@ where "Error handling block request from peer {}: {}", peer, e ) } + + let ev = Event::AnsweredRequest { + peer: peer.clone(), + response_build_time: before_answer_build.elapsed(), + }; + self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); } NodeEvent::Response(original_request, response) => { log::trace!( @@ -515,11 +580,13 @@ where "Received block response from peer {} with {} blocks", peer, response.blocks.len() ); - if let Some(connections) = self.peers.get_mut(&peer) { + let request_duration = if let Some(connections) = self.peers.get_mut(&peer) { if let Some(connection) = connections.iter_mut().find(|c| c.id == connection_id) { if let Some(ongoing_request) = &mut connection.ongoing_request { if ongoing_request.request == original_request { + let request_duration = ongoing_request.emitted.elapsed(); connection.ongoing_request = None; + request_duration } else { // We're no longer interested in that request. log::debug!( @@ -550,7 +617,7 @@ where peer ); return; - } + }; let blocks = response.blocks.into_iter().map(|block_data| { Ok(message::BlockData:: { @@ -594,6 +661,7 @@ where peer, original_request, response: message::BlockResponse:: { id, blocks }, + request_duration, }; self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); } @@ -625,6 +693,7 @@ where if let Poll::Ready(_) = Pin::new(&mut ongoing_request.timeout).poll(cx) { let original_request = ongoing_request.request.clone(); + let request_duration = ongoing_request.emitted.elapsed(); connection.ongoing_request = None; log::debug!( target: "sync", @@ -634,6 +703,7 @@ where let ev = Event::RequestTimeout { peer: peer.clone(), original_request, + request_duration, }; return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)); } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index f811266a134..3fbfd2dd142 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -817,6 +817,9 @@ struct Metrics { peerset_num_requested: Gauge, pending_connections: Gauge, pending_connections_errors_total: CounterVec, + requests_in_total: HistogramVec, + requests_out_finished: HistogramVec, + requests_out_started_total: CounterVec, } impl Metrics { @@ -965,6 +968,35 @@ impl Metrics { ), &["reason"] )?, registry)?, + requests_in_total: register(HistogramVec::new( + HistogramOpts { + common_opts: Opts::new( + "sub_libp2p_requests_in_total", + "Total number of requests received and answered" + ), + buckets: prometheus_endpoint::exponential_buckets(0.001, 2.0, 16) + .expect("parameters are always valid values; qed"), + }, + &["protocol"] + )?, registry)?, + requests_out_finished: register(HistogramVec::new( + HistogramOpts { + common_opts: Opts::new( + "sub_libp2p_requests_out_finished", + "Time between a request's start and finish (successful or not)" + ), + buckets: prometheus_endpoint::exponential_buckets(0.001, 2.0, 16) + .expect("parameters are always valid values; qed"), + }, + &["protocol"] + )?, registry)?, + requests_out_started_total: register(CounterVec::new( + Opts::new( + "sub_libp2p_requests_out_started_total", + "Total number of requests emitted" + ), + &["protocol"] + )?, registry)?, }) } @@ -1084,6 +1116,27 @@ impl Future for NetworkWorker { } this.import_queue.import_finality_proof(origin, hash, nb, proof); }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::AnsweredRequest { protocol, build_time, .. })) => { + if let Some(metrics) = this.metrics.as_ref() { + metrics.requests_in_total + .with_label_values(&[&maybe_utf8_bytes_to_string(&protocol)]) + .observe(build_time.as_secs_f64()); + } + }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RequestStarted { protocol, .. })) => { + if let Some(metrics) = this.metrics.as_ref() { + metrics.requests_out_started_total + .with_label_values(&[&maybe_utf8_bytes_to_string(&protocol)]) + .inc(); + } + }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RequestFinished { protocol, request_duration, .. })) => { + if let Some(metrics) = this.metrics.as_ref() { + metrics.requests_out_finished + .with_label_values(&[&maybe_utf8_bytes_to_string(&protocol)]) + .observe(request_duration.as_secs_f64()); + } + }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RandomKademliaStarted(protocol))) => { if let Some(metrics) = this.metrics.as_ref() { metrics.kademlia_random_queries_total -- GitLab From c83a60aa5f16bed0a2c67d354bbe820aca73eeb7 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Tue, 28 Apr 2020 18:54:52 +0300 Subject: [PATCH 083/167] Replace Condvars with blocking channel (#5815) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * remove condvars * return false on lost sender * fix * Update primitives/io/src/batch_verifier.rs Co-authored-by: Bastian Köcher --- primitives/io/src/batch_verifier.rs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/primitives/io/src/batch_verifier.rs b/primitives/io/src/batch_verifier.rs index 8dd5162e49e..2a2ad4dd5c5 100644 --- a/primitives/io/src/batch_verifier.rs +++ b/primitives/io/src/batch_verifier.rs @@ -114,8 +114,6 @@ impl BatchVerifier { /// aggregated result. #[must_use] pub fn verify_and_clear(&mut self) -> bool { - use std::sync::{Mutex, Condvar}; - let pending = std::mem::replace(&mut self.pending_tasks, vec![]); let started = std::time::Instant::now(); @@ -139,14 +137,12 @@ impl BatchVerifier { self.sr25519_items.clear(); if pending.len() > 0 { - let pair = Arc::new((Mutex::new(false), Condvar::new())); - let pair_clone = pair.clone(); - + let (sender, receiver) = std::sync::mpsc::channel(); if self.scheduler.spawn_obj(FutureObj::new(async move { futures::future::join_all(pending).await; - let mut finished = pair_clone.0.lock().expect("Locking can only fail when the mutex is poisoned; qed"); - *finished = true; - pair_clone.1.notify_all(); + sender.send(()) + .expect("Channel never panics if receiver is live. \ + Receiver is always live until received this data; qed. "); }.boxed())).is_err() { log::debug!( target: "runtime", @@ -155,11 +151,9 @@ impl BatchVerifier { return false; } - - let (finished, cond_var) = &*pair; - let mut finished = finished.lock().expect("Locking can only fail when the mutex is poisoned; qed"); - while !*finished { - finished = cond_var.wait(finished).expect("Waiting can only fail when the mutex waited on is poisoned; qed"); + if receiver.recv().is_err() { + log::warn!(target: "runtime", "Haven't received async result from verification task. Returning false."); + return false; } } -- GitLab From e2dcddd27b132f68006c634f39206f4606c346ae Mon Sep 17 00:00:00 2001 From: s3krit Date: Tue, 28 Apr 2020 17:55:09 +0200 Subject: [PATCH 084/167] [CI] Add check for draft PRs (#5800) * Add check for draft PRs * Add necessary gitlab-ci boilerplate * fix github API url (oops!) * Add github action to retrigger pipeline * fix workflow trigger * rename trigger job Co-authored-by: Benjamin Kampmann --- .github/workflows/trigger-review-pipeline.yml | 20 +++++++++++++++++++ .gitlab-ci.yml | 9 +++++++++ .maintain/gitlab/skip_if_draft.sh | 14 +++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 .github/workflows/trigger-review-pipeline.yml create mode 100755 .maintain/gitlab/skip_if_draft.sh diff --git a/.github/workflows/trigger-review-pipeline.yml b/.github/workflows/trigger-review-pipeline.yml new file mode 100644 index 00000000000..af54ec4358b --- /dev/null +++ b/.github/workflows/trigger-review-pipeline.yml @@ -0,0 +1,20 @@ +name: Trigger pipeline for review + +on: + pull_request: + types: [ready_for_review] + +jobs: + trigger: + runs-on: ubuntu-latest + + steps: + - name: Trigger pipeline + run: | + curl -X POST \ + -F token="$TOKEN" \ + -F ref="$REF" \ + https://gitlab.parity.io/api/v4/projects/145/trigger/pipeline + env: + REF: ${{ github.event.number }} + TOKEN: ${{ secrets.GITLAB_TRIGGER_TOKEN }} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4451ce63e0d..215066e9cdc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -89,7 +89,16 @@ variables: - /^pre-v[0-9]+\.[0-9]+-[0-9a-f]+$/ - web +#### stage: .pre +skip-if-draft: + image: parity/tools:latest + <<: *kubernetes-build + stage: .pre + only: + - /^[0-9]+$/ # Pull requests + script: + - ./.maintain/gitlab/skip_if_draft.sh #### stage: test diff --git a/.maintain/gitlab/skip_if_draft.sh b/.maintain/gitlab/skip_if_draft.sh new file mode 100755 index 00000000000..a234a6c18e2 --- /dev/null +++ b/.maintain/gitlab/skip_if_draft.sh @@ -0,0 +1,14 @@ +#!/bin/sh +url="https://api.github.com/repos/paritytech/substrate/pulls/${CI_COMMIT_REF_NAME}" +echo "[+] API URL: $url" + +draft_state=$(curl "$url" | jq -r .draft) +echo "[+] Draft state: $draft_state" + +if [ "$draft_state" = 'true' ]; then + echo "[!] PR is currently a draft, stopping pipeline" + exit 1 +else + echo "[+] PR is not a draft. Proceeding with CI pipeline" + exit 0 +fi -- GitLab From 9441e4404779afb27f00923d6aab686abcef0003 Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 28 Apr 2020 17:55:56 +0200 Subject: [PATCH 085/167] Update treasury weights. (#5723) * treasury weight formula * use max tippers count * doc * Fix upper bound * rounding a bit * remove unused + doc * as u64 -> as Weight * 2 significative digits rounded up * rename ContainsCountUpperBound -> ContainsLengthBound * add doc * sender account -> origin account * fix --- frame/elections-phragmen/src/lib.rs | 10 +++ frame/support/src/traits.rs | 12 ++- frame/treasury/src/lib.rs | 119 ++++++++++++++++++---------- frame/treasury/src/tests.rs | 6 ++ 4 files changed, 101 insertions(+), 46 deletions(-) diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 50c26dba0fc..d77bd750e80 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -93,6 +93,7 @@ use frame_support::{ traits::{ Currency, Get, LockableCurrency, LockIdentifier, ReservableCurrency, WithdrawReasons, ChangeMembers, OnUnbalanced, WithdrawReason, Contains, BalanceStatus, InitializeMembers, + ContainsLengthBound, } }; use sp_phragmen::{build_support_map, ExtendedBalance, VoteWeight, PhragmenResult}; @@ -880,6 +881,15 @@ impl Contains for Module { } } +impl ContainsLengthBound for Module { + fn min_len() -> usize { 0 } + + /// Implementation uses a parameter type so calling is cost-free. + fn max_len() -> usize { + Self::desired_members() as usize + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/frame/support/src/traits.rs b/frame/support/src/traits.rs index dfc2ddf4de1..3d5a3403a97 100644 --- a/frame/support/src/traits.rs +++ b/frame/support/src/traits.rs @@ -190,9 +190,7 @@ impl Get for () { fn get() -> T { T::default() } } -/// A trait for querying whether a type can be said to statically "contain" a value. Similar -/// in nature to `Get`, except it is designed to be lazy rather than active (you can't ask it to -/// enumerate all values that it contains) and work for multiple values rather than just one. +/// A trait for querying whether a type can be said to "contain" a value. pub trait Contains { /// Return `true` if this "contains" the given value `t`. fn contains(t: &T) -> bool { Self::sorted_members().binary_search(t).is_ok() } @@ -211,6 +209,14 @@ pub trait Contains { fn add(_t: &T) { unimplemented!() } } +/// A trait for querying bound for the length of an implementation of `Contains` +pub trait ContainsLengthBound { + /// Minimum number of elements contained + fn min_len() -> usize; + /// Maximum number of elements contained + fn max_len() -> usize; +} + /// Determiner to say whether a given account is unused. pub trait IsDeadAccount { /// Is the given account dead? diff --git a/frame/treasury/src/lib.rs b/frame/treasury/src/lib.rs index b1646e4a20d..270a710a2c2 100644 --- a/frame/treasury/src/lib.rs +++ b/frame/treasury/src/lib.rs @@ -99,7 +99,7 @@ use sp_runtime::{Permill, ModuleId, Percent, RuntimeDebug, traits::{ Zero, StaticLookup, AccountIdConversion, Saturating, Hash, BadOrigin }}; use frame_support::weights::{Weight, DispatchClass}; -use frame_support::traits::{Contains, EnsureOrigin}; +use frame_support::traits::{Contains, ContainsLengthBound, EnsureOrigin}; use codec::{Encode, Decode}; use frame_system::{self as system, ensure_signed, ensure_root}; @@ -124,7 +124,9 @@ pub trait Trait: frame_system::Trait { type RejectOrigin: EnsureOrigin; /// Origin from which tippers must come. - type Tippers: Contains; + /// + /// `ContainsLengthBound::max_len` must be cost free (i.e. no storage read or heavy operation). + type Tippers: Contains + ContainsLengthBound; /// The period for which a tip remains open after is has achieved threshold tippers. type TipCountdown: Get; @@ -326,11 +328,11 @@ decl_module! { /// proposal is awarded. /// /// # - /// - O(1). - /// - Limited storage reads. - /// - One DB change, one extra DB entry. + /// - Complexity: O(1) + /// - DbReads: `ProposalCount`, `origin account` + /// - DbWrites: `ProposalCount`, `Proposals`, `origin account` /// # - #[weight = 500_000_000] + #[weight = 120_000_000 + T::DbWeight::get().reads_writes(1, 2)] fn propose_spend( origin, #[compact] value: BalanceOf, @@ -353,11 +355,11 @@ decl_module! { /// Reject a proposed spend. The original deposit will be slashed. /// /// # - /// - O(1). - /// - Limited storage reads. - /// - One DB clear. + /// - Complexity: O(1) + /// - DbReads: `Proposals`, `rejected proposer account` + /// - DbWrites: `Proposals`, `rejected proposer account` /// # - #[weight = (100_000_000, DispatchClass::Operational)] + #[weight = (130_000_000 + T::DbWeight::get().reads_writes(2, 2), DispatchClass::Operational)] fn reject_proposal(origin, #[compact] proposal_id: ProposalIndex) { T::RejectOrigin::try_origin(origin) .map(|_| ()) @@ -375,11 +377,11 @@ decl_module! { /// and the original deposit will be returned. /// /// # - /// - O(1). - /// - Limited storage reads. - /// - One DB change. + /// - Complexity: O(1). + /// - DbReads: `Proposals`, `Approvals` + /// - DbWrite: `Approvals` /// # - #[weight = (100_000_000, DispatchClass::Operational)] + #[weight = (34_000_000 + T::DbWeight::get().reads_writes(2, 1), DispatchClass::Operational)] fn approve_proposal(origin, #[compact] proposal_id: ProposalIndex) { T::ApproveOrigin::try_origin(origin) .map(|_| ()) @@ -403,12 +405,12 @@ decl_module! { /// Emits `NewTip` if successful. /// /// # - /// - `O(R)` where `R` length of `reason`. - /// - One balance operation. - /// - One storage mutation (codec `O(R)`). - /// - One event. + /// - Complexity: `O(R)` where `R` length of `reason`. + /// - encoding and hashing of 'reason' + /// - DbReads: `Reasons`, `Tips`, `who account data` + /// - DbWrites: `Tips`, `who account data` /// # - #[weight = 100_000_000] + #[weight = 140_000_000 + 4_000 * reason.len() as Weight + T::DbWeight::get().reads_writes(3, 2)] fn report_awesome(origin, reason: Vec, who: T::AccountId) { let finder = ensure_signed(origin)?; @@ -445,12 +447,12 @@ decl_module! { /// Emits `TipRetracted` if successful. /// /// # - /// - `O(T)` - /// - One balance operation. - /// - Two storage removals (one read, codec `O(T)`). - /// - One event. + /// - Complexity: `O(1)` + /// - Depends on the length of `T::Hash` which is fixed. + /// - DbReads: `Tips`, `origin account` + /// - DbWrites: `Reasons`, `Tips`, `origin account` /// # - #[weight = 50_000_000] + #[weight = 120_000_000 + T::DbWeight::get().reads_writes(1, 2)] fn retract_tip(origin, hash: T::Hash) { let who = ensure_signed(origin)?; let tip = Tips::::get(&hash).ok_or(Error::::UnknownTip)?; @@ -477,12 +479,18 @@ decl_module! { /// Emits `NewTip` if successful. /// /// # - /// - `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. `T` is - /// naturally capped as a membership set, `R` is limited through transaction-size. - /// - Two storage insertions (codecs `O(R)`, `O(T)`), one read `O(1)`. - /// - One event. + /// - Complexity: `O(R + T)` where `R` length of `reason`, `T` is the number of tippers. + /// - `O(T)`: decoding `Tipper` vec of length `T` + /// `T` is charged as upper bound given by `ContainsLengthBound`. + /// The actual cost depends on the implementation of `T::Tippers`. + /// - `O(R)`: hashing and encoding of reason of length `R` + /// - DbReads: `Tippers`, `Reasons` + /// - DbWrites: `Reasons`, `Tips` /// # - #[weight = 150_000_000] + #[weight = 110_000_000 + + 4_000 * reason.len() as Weight + + 480_000 * T::Tippers::max_len() as Weight + + T::DbWeight::get().reads_writes(2, 2)] fn tip_new(origin, reason: Vec, who: T::AccountId, tip_value: BalanceOf) { let tipper = ensure_signed(origin)?; ensure!(T::Tippers::contains(&tipper), BadOrigin); @@ -512,11 +520,18 @@ decl_module! { /// has started. /// /// # - /// - `O(T)` - /// - One storage mutation (codec `O(T)`), one storage read `O(1)`. - /// - Up to one event. + /// - Complexity: `O(T)` where `T` is the number of tippers. + /// decoding `Tipper` vec of length `T`, insert tip and check closing, + /// `T` is charged as upper bound given by `ContainsLengthBound`. + /// The actual cost depends on the implementation of `T::Tippers`. + /// + /// Actually weight could be lower as it depends on how many tips are in `OpenTip` but it + /// is weighted as if almost full i.e of length `T-1`. + /// - DbReads: `Tippers`, `Tips` + /// - DbWrites: `Tips` /// # - #[weight = 50_000_000] + #[weight = 68_000_000 + 2_000_000 * T::Tippers::max_len() as Weight + + T::DbWeight::get().reads_writes(2, 1)] fn tip(origin, hash: T::Hash, tip_value: BalanceOf) { let tipper = ensure_signed(origin)?; ensure!(T::Tippers::contains(&tipper), BadOrigin); @@ -538,11 +553,15 @@ decl_module! { /// as the hash of the tuple of the original tip `reason` and the beneficiary account ID. /// /// # - /// - `O(T)` - /// - One storage retrieval (codec `O(T)`) and two removals. - /// - Up to three balance operations. + /// - Complexity: `O(T)` where `T` is the number of tippers. + /// decoding `Tipper` vec of length `T`. + /// `T` is charged as upper bound given by `ContainsLengthBound`. + /// The actual cost depends on the implementation of `T::Tippers`. + /// - DbReads: `Tips`, `Tippers`, `tip finder` + /// - DbWrites: `Reasons`, `Tips`, `Tippers`, `tip finder` /// # - #[weight = 50_000_000] + #[weight = 220_000_000 + 1_100_000 * T::Tippers::max_len() as Weight + + T::DbWeight::get().reads_writes(3, 3)] fn close_tip(origin, hash: T::Hash) { ensure_signed(origin)?; @@ -555,13 +574,23 @@ decl_module! { Self::payout_tip(hash, tip); } + /// # + /// - Complexity: `O(A)` where `A` is the number of approvals + /// - Db reads and writes: `Approvals`, `pot account data` + /// - Db reads and writes per approval: + /// `Proposals`, `proposer account data`, `beneficiary account data` + /// - The weight is overestimated if some approvals got missed. + /// # fn on_initialize(n: T::BlockNumber) -> Weight { // Check to see if we should spend some funds! if (n % T::SpendPeriod::get()).is_zero() { - Self::spend_funds(); - } + let approvals_len = Self::spend_funds(); - 0 + 270_000_000 * approvals_len + + T::DbWeight::get().reads_writes(2 + approvals_len * 3, 2 + approvals_len * 3) + } else { + 0 + } } } } @@ -653,14 +682,15 @@ impl Module { Self::deposit_event(RawEvent::TipClosed(hash, tip.who, payout)); } - // Spend some money! - fn spend_funds() { + /// Spend some money! returns number of approvals before spend. + fn spend_funds() -> u64 { let mut budget_remaining = Self::pot(); Self::deposit_event(RawEvent::Spending(budget_remaining)); let mut missed_any = false; let mut imbalance = >::zero(); - Approvals::mutate(|v| { + let prior_approvals_len = Approvals::mutate(|v| { + let prior_approvals_len = v.len() as u64; v.retain(|&index| { // Should always be true, but shouldn't panic if false or we're screwed. if let Some(p) = Self::proposals(index) { @@ -684,6 +714,7 @@ impl Module { false } }); + prior_approvals_len }); if !missed_any { @@ -710,6 +741,8 @@ impl Module { } Self::deposit_event(RawEvent::Rollover(budget_remaining)); + + prior_approvals_len } /// Return the amount of money in the pot. diff --git a/frame/treasury/src/tests.rs b/frame/treasury/src/tests.rs index 2ce07547988..18b1d1c50ee 100644 --- a/frame/treasury/src/tests.rs +++ b/frame/treasury/src/tests.rs @@ -111,6 +111,12 @@ impl Contains for TenToFourteen { }) } } +impl ContainsLengthBound for TenToFourteen { + fn max_len() -> usize { + TEN_TO_FOURTEEN.with(|v| v.borrow().len()) + } + fn min_len() -> usize { 0 } +} parameter_types! { pub const ProposalBond: Permill = Permill::from_percent(5); pub const ProposalBondMinimum: u64 = 1; -- GitLab From 207902d5f131d03e950251ecabc37c38745cd7db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Tue, 28 Apr 2020 23:17:16 +0100 Subject: [PATCH 086/167] babe: fix overflow in check_equivocation (#5818) --- client/consensus/slots/src/aux_schema.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/consensus/slots/src/aux_schema.rs b/client/consensus/slots/src/aux_schema.rs index df4772a8e92..d54190ca071 100644 --- a/client/consensus/slots/src/aux_schema.rs +++ b/client/consensus/slots/src/aux_schema.rs @@ -85,8 +85,8 @@ pub fn check_equivocation( P: Clone + Encode + Decode + PartialEq, { // We don't check equivocations for old headers out of our capacity. - if slot_now - slot > MAX_SLOT_CAPACITY { - return Ok(None) + if slot_now.saturating_sub(slot) > MAX_SLOT_CAPACITY { + return Ok(None); } // Key for this slot. @@ -102,6 +102,11 @@ pub fn check_equivocation( let first_saved_slot = load_decode::<_, u64>(backend, &slot_header_start[..])? .unwrap_or(slot); + if slot_now < first_saved_slot { + // The code below assumes that slots will be visited sequentially. + return Ok(None); + } + for (prev_header, prev_signer) in headers_with_sig.iter() { // A proof of equivocation consists of two headers: // 1) signed by the same voter, @@ -114,7 +119,7 @@ pub fn check_equivocation( snd_header: header.clone(), })); } else { - // We don't need to continue in case of duplicated header, + // We don't need to continue in case of duplicated header, // since it's already saved and a possible equivocation // would have been detected before. return Ok(None) -- GitLab From fe4a5bb7ebbfc0b590377b2d715f9bfbf870b4b5 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 29 Apr 2020 09:35:41 +0200 Subject: [PATCH 087/167] Update Weights for Utility Pallet (#5787) --- frame/utility/src/lib.rs | 100 +++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 15 deletions(-) diff --git a/frame/utility/src/lib.rs b/frame/utility/src/lib.rs index 0ad35c3e283..39109a6f6ae 100644 --- a/frame/utility/src/lib.rs +++ b/frame/utility/src/lib.rs @@ -68,7 +68,7 @@ use sp_io::hashing::blake2_256; use frame_support::{decl_module, decl_event, decl_error, decl_storage, Parameter, ensure, RuntimeDebug}; use frame_support::{traits::{Get, ReservableCurrency, Currency}, weights::{Weight, GetDispatchInfo, DispatchClass, FunctionOf, Pays}, - dispatch::PostDispatchInfo, + dispatch::{DispatchResultWithPostInfo, DispatchErrorWithPostInfo, PostDispatchInfo}, }; use frame_system::{self as system, ensure_signed}; use sp_runtime::{DispatchError, DispatchResult, traits::Dispatchable}; @@ -201,6 +201,25 @@ impl TypeId for IndexedUtilityModuleId { const TYPE_ID: [u8; 4] = *b"suba"; } +mod weight_of { + use super::*; + + /// - Base Weight: + /// - Create: 137.5 + 0.274 * S µs + /// - Approve: 103.8 + .266 * S µs + /// - Complete: 116.2 + .754 * S µs + /// - DB Weight: + /// - Reads: Multisig Storage, [Caller Account] + /// - Writes: Multisig Storage, [Caller Account] + /// - Plus Call Weight + pub fn as_multi(other_sig_len: usize, call_weight: Weight) -> Weight { + call_weight + .saturating_add(150_000_000) + .saturating_add((other_sig_len as Weight).saturating_mul(750_000)) + .saturating_add(T::DbWeight::get().reads_writes(1, 1)) + } +} + decl_module! { pub struct Module for enum Call where origin: T::Origin { type Error = Error; @@ -217,8 +236,9 @@ decl_module! { /// - `calls`: The calls to be dispatched from the same origin. /// /// # - /// - The sum of the weights of the `calls`. - /// - One event. + /// - Base weight: 63.78 µs + /// - Plus the sum of the weights of the `calls`. + /// - Plus one additional event. (repeat read/write) /// # /// /// This will return `Ok` in all circumstances. To determine the success of the batch, an @@ -230,7 +250,7 @@ decl_module! { |args: (&Vec<::Call>,)| { args.0.iter() .map(|call| call.get_dispatch_info().weight) - .fold(10_000, |a, n| a + n) + .fold(65_000_000, |a: Weight, n| a.saturating_add(n)) }, |args: (&Vec<::Call>,)| { let all_operational = args.0.iter() @@ -260,10 +280,13 @@ decl_module! { /// The dispatch origin for this call must be _Signed_. /// /// # - /// - The weight of the `call` + 10,000. + /// - Base weight: 5.1 µs + /// - Plus the weight of the `call` /// # #[weight = FunctionOf( - |args: (&u16, &Box<::Call>)| args.1.get_dispatch_info().weight + 10_000, + |args: (&u16, &Box<::Call>)| { + args.1.get_dispatch_info().weight.saturating_add(5_000_000) + }, |args: (&u16, &Box<::Call>)| args.1.get_dispatch_info().class, Pays::Yes, )] @@ -314,10 +337,19 @@ decl_module! { /// - Storage: inserts one item, value size bounded by `MaxSignatories`, with a /// deposit taken for its lifetime of /// `MultisigDepositBase + threshold * MultisigDepositFactor`. + /// ------------------------------- + /// - Base Weight: + /// - Create: 137.5 + 0.274 * S µs + /// - Approve: 103.8 + .266 * S µs + /// - Complete: 116.2 + .754 * S µs + /// - DB Weight: + /// - Reads: Multisig Storage, [Caller Account] + /// - Writes: Multisig Storage, [Caller Account] + /// - Plus Call Weight /// # #[weight = FunctionOf( |args: (&u16, &Vec, &Option>, &Box<::Call>)| { - args.3.get_dispatch_info().weight + 10_000 * (args.1.len() as Weight + 1) + weight_of::as_multi::(args.1.len(),args.3.get_dispatch_info().weight) }, |args: (&u16, &Vec, &Option>, &Box<::Call>)| { args.3.get_dispatch_info().class @@ -329,12 +361,13 @@ decl_module! { other_signatories: Vec, maybe_timepoint: Option>, call: Box<::Call>, - ) -> DispatchResult { + ) -> DispatchResultWithPostInfo { let who = ensure_signed(origin)?; ensure!(threshold >= 1, Error::::ZeroThreshold); let max_sigs = T::MaxSignatories::get() as usize; ensure!(!other_signatories.is_empty(), Error::::TooFewSignatories); - ensure!(other_signatories.len() < max_sigs, Error::::TooManySignatories); + let other_signatories_len = other_signatories.len(); + ensure!(other_signatories_len < max_sigs, Error::::TooManySignatories); let signatories = Self::ensure_sorted_and_insert(other_signatories, who.clone())?; let id = Self::multi_account_id(&signatories, threshold); @@ -349,7 +382,8 @@ decl_module! { m.approvals.insert(pos, who.clone()); >::insert(&id, call_hash, m); Self::deposit_event(RawEvent::MultisigApproval(who, timepoint, id, call_hash)); - return Ok(()) + // Call is not made, so the actual weight does not include call + return Ok(Some(weight_of::as_multi::(other_signatories_len, 0)).into()) } } else { if (m.approvals.len() as u16) < threshold { @@ -363,6 +397,7 @@ decl_module! { Self::deposit_event(RawEvent::MultisigExecuted( who, timepoint, id, call_hash, result.map(|_| ()).map_err(|e| e.error) )); + return Ok(None.into()) } else { ensure!(maybe_timepoint.is_none(), Error::::UnexpectedTimepoint); if threshold > 1 { @@ -376,12 +411,31 @@ decl_module! { approvals: vec![who.clone()], }); Self::deposit_event(RawEvent::NewMultisig(who, id, call_hash)); + // Call is not made, so we can return that weight + return Ok(Some(weight_of::as_multi::(other_signatories_len, 0)).into()) } else { - return call.dispatch(frame_system::RawOrigin::Signed(id).into()) - .map(|_| ()).map_err(|e| e.error) + let result = call.dispatch(frame_system::RawOrigin::Signed(id).into()); + match result { + Ok(post_dispatch_info) => { + match post_dispatch_info.actual_weight { + Some(actual_weight) => return Ok(Some(weight_of::as_multi::(other_signatories_len, actual_weight)).into()), + None => return Ok(None.into()), + } + }, + Err(err) => { + match err.post_info.actual_weight { + Some(actual_weight) => { + let weight_used = weight_of::as_multi::(other_signatories_len, actual_weight); + return Err(DispatchErrorWithPostInfo { post_info: Some(weight_used).into(), error: err.error.into() }) + }, + None => { + return Err(err) + } + } + } + } } } - Ok(()) } /// Register approval for a dispatch to be made from a deterministic composite account if @@ -415,10 +469,19 @@ decl_module! { /// - Storage: inserts one item, value size bounded by `MaxSignatories`, with a /// deposit taken for its lifetime of /// `MultisigDepositBase + threshold * MultisigDepositFactor`. + /// ---------------------------------- + /// - Base Weight: + /// - Create: 139.1 + 0.202 * S + /// - Approve: 96.6 + 0.328 * S + /// - DB Weight: + /// - Read: Multisig Storage, [Caller Account] + /// - Write: Multisig Storage, [Caller Account] /// # #[weight = FunctionOf( |args: (&u16, &Vec, &Option>, &[u8; 32])| { - 10_000 * (args.1.len() as Weight + 1) + T::DbWeight::get().reads_writes(1, 1) + .saturating_add(140_000_000) + .saturating_add((args.1.len() as Weight).saturating_mul(350_000)) }, DispatchClass::Normal, Pays::Yes, @@ -490,10 +553,17 @@ decl_module! { /// - One event. /// - I/O: 1 read `O(S)`, one remove. /// - Storage: removes one item. + /// ---------------------------------- + /// - Base Weight: 126.6 + 0.126 * S + /// - DB Weight: + /// - Read: Multisig Storage, [Caller Account] + /// - Write: Multisig Storage, [Caller Account] /// # #[weight = FunctionOf( |args: (&u16, &Vec, &Timepoint, &[u8; 32])| { - 10_000 * (args.1.len() as Weight + 1) + T::DbWeight::get().reads_writes(1, 1) + .saturating_add(130_000_000) + .saturating_add((args.1.len() as Weight).saturating_mul(130_000)) }, DispatchClass::Normal, Pays::Yes, -- GitLab From 5b8f183db6d708144a4b62161d2b37fe770589f8 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Wed, 29 Apr 2020 09:53:54 +0200 Subject: [PATCH 088/167] Update Weights for Vesting Pallet (#5708) * Update vesting weights * Update weight numbers --- frame/vesting/src/lib.rs | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index a729777c24d..d8e937d550f 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -190,11 +190,13 @@ decl_module! { /// /// # /// - `O(1)`. - /// - One balance-lock operation. - /// - One storage read (codec `O(1)`) and up to one removal. - /// - One event. + /// - DbWeight: 2 Reads, 2 Writes + /// - Reads: Vesting Storage, Balances Locks, [Sender Account] + /// - Writes: Vesting Storage, Balances Locks, [Sender Account] + /// - Benchmark: 147.5 µs (min square analysis) + /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 0] + #[weight = 150_000_000 + T::DbWeight::get().reads_writes(2, 2)] fn vest(origin) -> DispatchResult { let who = ensure_signed(origin)?; Self::update_lock(who) @@ -211,12 +213,13 @@ decl_module! { /// /// # /// - `O(1)`. - /// - Up to one account lookup. - /// - One balance-lock operation. - /// - One storage read (codec `O(1)`) and up to one removal. - /// - One event. + /// - DbWeight: 3 Reads, 3 Writes + /// - Reads: Vesting Storage, Balances Locks, Target Account + /// - Writes: Vesting Storage, Balances Locks, Target Account + /// - Benchmark: 150.4 µs (min square analysis) + /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 0] + #[weight = 150_000_000 + T::DbWeight::get().reads_writes(3, 3)] fn vest_other(origin, target: ::Source) -> DispatchResult { ensure_signed(origin)?; Self::update_lock(T::Lookup::lookup(target)?) @@ -233,10 +236,14 @@ decl_module! { /// Emits `VestingCreated`. /// /// # - /// - Creates a new storage entry, but is protected by a minimum transfer - /// amount needed to succeed. + /// - `O(1)`. + /// - DbWeight: 3 Reads, 3 Writes + /// - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account] + /// - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account] + /// - Benchmark: 263 µs (min square analysis) + /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 1_000_000_000] + #[weight = 300_000_000 + T::DbWeight::get().reads_writes(3, 3)] pub fn vested_transfer( origin, target: ::Source, -- GitLab From 92be4400c78bfca534d59bb77ae7a2f438995ba0 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Wed, 29 Apr 2020 10:12:23 +0200 Subject: [PATCH 089/167] Reputation penalty for sending empty block response (#5814) --- client/network/src/protocol/sync.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index b480f3abb93..98fbd4ae4f7 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -90,6 +90,9 @@ mod rep { /// Reputation change for peers which send us a known bad block. pub const BAD_BLOCK: Rep = Rep::new(-(1 << 29), "Bad block"); + /// Peer did not provide us with advertised block data. + pub const NO_BLOCK: Rep = Rep::new(-(1 << 29), "No requested block data"); + /// Reputation change for peers which send us a known block. pub const KNOWN_BLOCK: Rep = Rep::new(-(1 << 29), "Duplicate block"); @@ -696,6 +699,10 @@ impl ChainSync { } PeerSyncState::DownloadingStale(_) => { peer.state = PeerSyncState::Available; + if blocks.is_empty() { + debug!(target: "sync", "Empty block response from {}", who); + return Err(BadPeer(who, rep::NO_BLOCK)); + } blocks.into_iter().map(|b| { IncomingBlock { hash: b.hash, -- GitLab From 3845e1ac692b9bbabacabdbc74528f2390b02675 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Wed, 29 Apr 2020 12:05:35 +0200 Subject: [PATCH 090/167] Add support for modules to require inherent to be present (#5792) * Add support for modules to require inherent to be present * Bump node impl version * Allow is_inherent_required itself to return error This handles the case if runtime fails to check the inherent data (if the inherent data is invalid, etc). * typo: &module -> $module * fix: iter --- bin/node/runtime/src/lib.rs | 2 +- frame/support/src/inherent.rs | 39 +++++++++++++++++++++++++++++++-- primitives/inherents/src/lib.rs | 5 +++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 98507abf5d9..641cbf44ebe 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. spec_version: 244, - impl_version: 2, + impl_version: 3, apis: RUNTIME_API_VERSIONS, transaction_version: 1, }; diff --git a/frame/support/src/inherent.rs b/frame/support/src/inherent.rs index a21bd361b61..4e09bf9dd81 100644 --- a/frame/support/src/inherent.rs +++ b/frame/support/src/inherent.rs @@ -77,7 +77,7 @@ macro_rules! impl_outer_inherent { let mut result = $crate::inherent::CheckInherentsResult::new(); for xt in block.extrinsics() { if $crate::inherent::Extrinsic::is_signed(xt).unwrap_or(false) { - break; + break } $( @@ -88,7 +88,7 @@ macro_rules! impl_outer_inherent { $module::INHERENT_IDENTIFIER, &e ).expect("There is only one fatal error; qed"); if e.is_fatal_error() { - return result; + return result } } } @@ -97,6 +97,41 @@ macro_rules! impl_outer_inherent { )* } + $( + match $module::is_inherent_required(self) { + Ok(Some(e)) => { + let found = block.extrinsics().iter().any(|xt| { + if $crate::inherent::Extrinsic::is_signed(xt).unwrap_or(false) { + return false + } + + match xt.function { + Call::$call(_) => true, + _ => false, + } + }); + + if !found { + result.put_error( + $module::INHERENT_IDENTIFIER, &e + ).expect("There is only one fatal error; qed"); + if e.is_fatal_error() { + return result + } + } + }, + Ok(None) => (), + Err(e) => { + result.put_error( + $module::INHERENT_IDENTIFIER, &e + ).expect("There is only one fatal error; qed"); + if e.is_fatal_error() { + return result + } + }, + } + )* + result } } diff --git a/primitives/inherents/src/lib.rs b/primitives/inherents/src/lib.rs index e8df2c49e51..e63382cdf2e 100644 --- a/primitives/inherents/src/lib.rs +++ b/primitives/inherents/src/lib.rs @@ -408,6 +408,11 @@ pub trait ProvideInherent { /// Create an inherent out of the given `InherentData`. fn create_inherent(data: &InherentData) -> Option; + /// If `Some`, indicates that an inherent is required. Check will return the inner error if no + /// inherent is found. If `Err`, indicates that the check failed and further operations should + /// be aborted. + fn is_inherent_required(_: &InherentData) -> Result, Self::Error> { Ok(None) } + /// Check the given inherent if it is valid. /// Checking the inherent is optional and can be omitted. fn check_inherent(_: &Self::Call, _: &InherentData) -> Result<(), Self::Error> { -- GitLab From 2056678cb483fc5ab8ea7b1aa44ba75821720858 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Wed, 29 Apr 2020 14:23:38 +0200 Subject: [PATCH 091/167] activate compat feature on futures --- client/consensus/babe/rpc/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/consensus/babe/rpc/Cargo.toml b/client/consensus/babe/rpc/Cargo.toml index e3b27e28dd6..1856ff8bafe 100644 --- a/client/consensus/babe/rpc/Cargo.toml +++ b/client/consensus/babe/rpc/Cargo.toml @@ -21,7 +21,7 @@ serde = { version = "1.0.104", features=["derive"] } sp-blockchain = { version = "2.0.0-dev", path = "../../../../primitives/blockchain" } sp-runtime = { version = "2.0.0-dev", path = "../../../../primitives/runtime" } sc-consensus-epochs = { version = "0.8.0-dev", path = "../../epochs" } -futures = "0.3.4" +futures = { version = "0.3.4", features = ["compat"] } derive_more = "0.99.2" sp-api = { version = "2.0.0-dev", path = "../../../../primitives/api" } sp-consensus = { version = "0.8.0-dev", path = "../../../../primitives/consensus/common" } -- GitLab From 6d2ce02cf94200ce952c3732938fb500e3593624 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Wed, 29 Apr 2020 15:45:02 +0300 Subject: [PATCH 092/167] Add build substrate and subkey binaries for MacOS (#5538) --- .gitlab-ci.yml | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 215066e9cdc..5b6143bd932 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -138,9 +138,6 @@ check-line-width: interruptible: true allow_failure: true - - - check-polkadot-companion-build: stage: build <<: *docker-env @@ -149,7 +146,6 @@ check-polkadot-companion-build: interruptible: true allow_failure: true - cargo-audit: stage: test <<: *docker-env @@ -181,7 +177,6 @@ cargo-check-benches: - BUILD_DUMMY_WASM_BINARY=1 time cargo +nightly check --benches --all - sccache -s - cargo-check-subkey: stage: test <<: *docker-env @@ -192,7 +187,6 @@ cargo-check-subkey: - BUILD_DUMMY_WASM_BINARY=1 time cargo check --release - sccache -s - test-linux-stable: &test-linux stage: test <<: *docker-env @@ -361,6 +355,14 @@ test-full-crypto-feature: - time cargo +nightly build --verbose --no-default-features --features full_crypto - sccache -s +cargo-check-macos: + stage: test + <<: *docker-env + script: + - BUILD_DUMMY_WASM_BINARY=1 time cargo check --release + - sccache -s + tags: + - osx #### stage: build @@ -391,32 +393,39 @@ build-linux-substrate: &build-binary echo "${CI_COMMIT_TAG}" | tee ./artifacts/substrate/VERSION; else ./artifacts/substrate/substrate --version | - sed -n -r 's/^substrate ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p' | + sed -n -E 's/^substrate ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p' | tee ./artifacts/substrate/VERSION; fi - sha256sum ./artifacts/substrate/substrate | tee ./artifacts/substrate/substrate.sha256 - printf '\n# building node-template\n\n' - ./.maintain/node-template-release.sh ./artifacts/substrate/substrate-node-template.tar.gz - - cp -r .maintain/docker/substrate.Dockerfile ./artifacts/substrate/ - sccache -s + -build-linux-subkey: +build-linux-subkey: &build-subkey <<: *build-binary before_script: - mkdir -p ./artifacts/subkey script: - - cd ./bin/utils/subkey + - cd ./bin/utils/subkey - BUILD_DUMMY_WASM_BINARY=1 time cargo build --release --verbose - cd - - mv ./target/release/subkey ./artifacts/subkey/. - echo -n "Subkey version = " - ./artifacts/subkey/subkey --version | - sed -n -r 's/^subkey ([0-9.]+.*)/\1/p' | + sed -n -E 's/^subkey ([0-9.]+.*)/\1/p' | tee ./artifacts/subkey/VERSION; - sha256sum ./artifacts/subkey/subkey | tee ./artifacts/subkey/subkey.sha256 - - cp -r .maintain/docker/subkey.Dockerfile ./artifacts/subkey/ - sccache -s +build-macos-subkey: + <<: *build-subkey + only: + - master + - /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1 + tags: + - osx + build-rust-doc-release: stage: build <<: *docker-env @@ -445,7 +454,6 @@ check-polkadot-companion-status: - ./.maintain/gitlab/check_polkadot_companion_status.sh - trigger-contracts-ci: stage: publish needs: -- GitLab From d4182545179b076f3185643b2cf9dfbd84873cb9 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Wed, 29 Apr 2020 18:44:12 +0200 Subject: [PATCH 093/167] Fixup package releasing (#5821) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Bastian Köcher --- client/consensus/common/Cargo.toml | 1 + client/consensus/common/src/lib.rs | 5 +++-- client/service/Cargo.toml | 2 +- utils/browser/Cargo.toml | 2 +- utils/frame/rpc/system/Cargo.toml | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index e8854faa078..dae6f341d13 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -6,6 +6,7 @@ edition = "2018" license = "GPL-3.0" homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" +description = "Collection of common consensus specific imlementations for Substrate (client)" [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/consensus/common/src/lib.rs b/client/consensus/common/src/lib.rs index 9bfe7e56d4f..1d9b072cfe9 100644 --- a/client/consensus/common/src/lib.rs +++ b/client/consensus/common/src/lib.rs @@ -13,7 +13,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Collection of consensus specific imlementations + +//! Collection of common consensus specific implementations mod longest_chain; -pub use longest_chain::LongestChain; \ No newline at end of file +pub use longest_chain::LongestChain; diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index 82fdc1ca10c..e5f6e229c70 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -25,7 +25,7 @@ test-helpers = [] [dependencies] derive_more = "0.99.2" futures01 = { package = "futures", version = "0.1.29" } -futures = "0.3.4" +futures = { version = "0.3.4", features = ["compat"] } rand = "0.7.3" parking_lot = "0.10.0" lazy_static = "1.4.0" diff --git a/utils/browser/Cargo.toml b/utils/browser/Cargo.toml index 29211298b73..868f32e34ab 100644 --- a/utils/browser/Cargo.toml +++ b/utils/browser/Cargo.toml @@ -12,7 +12,7 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -futures = "0.3" +futures = { version = "0.3", features = ["compat"] } futures01 = { package = "futures", version = "0.1.29" } log = "0.4.8" libp2p-wasm-ext = { version = "0.18.0", features = ["websocket"] } diff --git a/utils/frame/rpc/system/Cargo.toml b/utils/frame/rpc/system/Cargo.toml index a33a9dfd731..7d57e6b9882 100644 --- a/utils/frame/rpc/system/Cargo.toml +++ b/utils/frame/rpc/system/Cargo.toml @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sc-client-api = { version = "2.0.0-dev", path = "../../../../client/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } -futures = "0.3.4" +futures = { version = "0.3.4", features = ["compat"] } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -- GitLab From d43fb8e9615e898e4a8de5056387200c83fc488d Mon Sep 17 00:00:00 2001 From: pscott <30843220+pscott@users.noreply.github.com> Date: Wed, 29 Apr 2020 18:46:39 +0200 Subject: [PATCH 094/167] Move spawning tasks from thread pools to Service's TaskManager for block importing (#5647) Co-Authored-By: Pierre Krieger --- Cargo.lock | 1 - bin/node-template/node/src/service.rs | 14 +++-- bin/node/cli/src/service.rs | 10 ++- client/cli/src/config.rs | 4 +- client/cli/src/lib.rs | 4 +- client/cli/src/runner.rs | 25 +++++--- client/consensus/aura/src/lib.rs | 7 ++- client/consensus/babe/src/lib.rs | 4 +- client/consensus/manual-seal/src/lib.rs | 6 +- client/consensus/pow/src/lib.rs | 5 +- client/network/src/service/tests.rs | 4 ++ client/network/test/src/block_import.rs | 5 +- client/network/test/src/lib.rs | 8 +++ client/service/src/builder.rs | 20 +++--- client/service/src/chain_ops.rs | 14 +++-- client/service/src/config.rs | 11 +++- client/service/src/lib.rs | 2 +- client/service/src/task_manager.rs | 15 ++++- client/service/test/src/lib.rs | 9 +-- primitives/consensus/common/Cargo.toml | 1 - .../common/src/import_queue/basic_queue.rs | 62 ++----------------- utils/browser/src/lib.rs | 2 +- 22 files changed, 125 insertions(+), 108 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6269e033602..33129d420fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7336,7 +7336,6 @@ version = "0.8.0-dev" dependencies = [ "derive_more", "futures 0.3.4", - "futures-diagnose", "futures-timer 3.0.2", "libp2p", "log", diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index 16e5271cce9..51ebdbe1c1f 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -41,7 +41,7 @@ macro_rules! new_full_start { let pool_api = sc_transaction_pool::FullChainApi::new(client.clone()); Ok(sc_transaction_pool::BasicPool::new(config, std::sync::Arc::new(pool_api), prometheus_registry)) })? - .with_import_queue(|_config, client, mut select_chain, _transaction_pool| { + .with_import_queue(|_config, client, mut select_chain, _transaction_pool, spawn_task_handle| { let select_chain = select_chain.take() .ok_or_else(|| sc_service::Error::SelectChainRequired)?; @@ -52,13 +52,16 @@ macro_rules! new_full_start { grandpa_block_import.clone(), client.clone(), ); - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair>( + let spawner = |future| spawn_task_handle.spawn_blocking("import-queue-worker", future); + + let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _>( sc_consensus_aura::slot_duration(&*client)?, aura_block_import, Some(Box::new(grandpa_block_import.clone())), None, client, inherent_data_providers.clone(), + spawner, )?; import_setup = Some((grandpa_block_import, grandpa_link)); @@ -191,7 +194,7 @@ pub fn new_light(config: Configuration) -> Result Result( + let spawner = |future| spawn_task_handle.spawn_blocking("import-queue-worker", future); + + let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _>( sc_consensus_aura::slot_duration(&*client)?, grandpa_block_import, None, Some(Box::new(finality_proof_import)), client, inherent_data_providers.clone(), + spawner, )?; Ok((import_queue, finality_proof_request_builder)) diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index c8b0e50c4ff..377a45498f0 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -52,7 +52,7 @@ macro_rules! new_full_start { let pool_api = sc_transaction_pool::FullChainApi::new(client.clone()); Ok(sc_transaction_pool::BasicPool::new(config, std::sync::Arc::new(pool_api), prometheus_registry)) })? - .with_import_queue(|_config, client, mut select_chain, _transaction_pool| { + .with_import_queue(|_config, client, mut select_chain, _transaction_pool, spawn_task_handle| { let select_chain = select_chain.take() .ok_or_else(|| sc_service::Error::SelectChainRequired)?; let (grandpa_block_import, grandpa_link) = grandpa::block_import( @@ -68,6 +68,8 @@ macro_rules! new_full_start { client.clone(), )?; + let spawner = |future| spawn_task_handle.spawn_blocking("import-queue-worker", future); + let import_queue = sc_consensus_babe::import_queue( babe_link.clone(), block_import.clone(), @@ -75,6 +77,7 @@ macro_rules! new_full_start { None, client, inherent_data_providers.clone(), + spawner, )?; import_setup = Some((block_import, grandpa_link, babe_link)); @@ -284,7 +287,7 @@ pub fn new_light(config: Configuration) ); Ok(pool) })? - .with_import_queue_and_fprb(|_config, client, backend, fetcher, _select_chain, _tx_pool| { + .with_import_queue_and_fprb(|_config, client, backend, fetcher, _select_chain, _tx_pool, spawn_task_handle| { let fetch_checker = fetcher .map(|fetcher| fetcher.checker().clone()) .ok_or_else(|| "Trying to start light import queue without active fetch checker")?; @@ -305,6 +308,8 @@ pub fn new_light(config: Configuration) client.clone(), )?; + let spawner = |future| spawn_task_handle.spawn_blocking("import-queue-worker", future); + let import_queue = sc_consensus_babe::import_queue( babe_link, babe_block_import, @@ -312,6 +317,7 @@ pub fn new_light(config: Configuration) Some(Box::new(finality_proof_import)), client.clone(), inherent_data_providers.clone(), + spawner, )?; Ok((import_queue, finality_proof_request_builder)) diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index c73992c59cb..84c2338dcb8 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -27,7 +27,7 @@ use names::{Generator, Name}; use sc_service::config::{ WasmExecutionMethod, Role, OffchainWorkerConfig, Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration, - NodeKeyConfig, PrometheusConfig, PruningMode, TelemetryEndpoints, TransactionPoolOptions, + NodeKeyConfig, PrometheusConfig, PruningMode, TelemetryEndpoints, TransactionPoolOptions, TaskType }; use sc_client_api::execution_extensions::ExecutionStrategies; use sc_service::{ChainSpec, TracingReceiver}; @@ -385,7 +385,7 @@ pub trait CliConfiguration: Sized { fn create_configuration( &self, cli: &C, - task_executor: Arc + Send>>) + Send + Sync>, + task_executor: Arc + Send>>, TaskType) + Send + Sync>, ) -> Result { let is_dev = self.is_dev()?; let chain_id = self.chain_id(is_dev)?; diff --git a/client/cli/src/lib.rs b/client/cli/src/lib.rs index 25b71059b17..e723573bc2b 100644 --- a/client/cli/src/lib.rs +++ b/client/cli/src/lib.rs @@ -35,7 +35,7 @@ use log::info; pub use params::*; use regex::Regex; pub use runner::*; -use sc_service::{ChainSpec, Configuration}; +use sc_service::{ChainSpec, Configuration, TaskType}; use std::future::Future; use std::io::Write; use std::pin::Pin; @@ -177,7 +177,7 @@ pub trait SubstrateCli: Sized { fn create_configuration( &self, command: &T, - task_executor: Arc + Send>>) + Send + Sync>, + task_executor: Arc + Send>>, TaskType) + Send + Sync>, ) -> error::Result { command.create_configuration(self, task_executor) } diff --git a/client/cli/src/runner.rs b/client/cli/src/runner.rs index 6ebe84f9c55..ed0d3ef7d7a 100644 --- a/client/cli/src/runner.rs +++ b/client/cli/src/runner.rs @@ -23,7 +23,7 @@ use futures::pin_mut; use futures::select; use futures::{future, future::FutureExt, Future}; use log::info; -use sc_service::{AbstractService, Configuration, Role, ServiceBuilderCommand}; +use sc_service::{AbstractService, Configuration, Role, ServiceBuilderCommand, TaskType}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; use sp_utils::metrics::{TOKIO_THREADS_ALIVE, TOKIO_THREADS_TOTAL}; use std::fmt::Debug; @@ -116,13 +116,22 @@ impl Runner { /// Create a new runtime with the command provided in argument pub fn new(cli: &C, command: &T) -> Result> { let tokio_runtime = build_runtime()?; - - let task_executor = { - let runtime_handle = tokio_runtime.handle().clone(); - Arc::new(move |fut| { - runtime_handle.spawn(fut); - }) - }; + let runtime_handle = tokio_runtime.handle().clone(); + + let task_executor = Arc::new( + move |fut, task_type| { + match task_type { + TaskType::Async => { runtime_handle.spawn(fut); } + TaskType::Blocking => { + runtime_handle.spawn( async move { + // `spawn_blocking` is looking for the current runtime, and as such has to be called + // from within `spawn`. + tokio::task::spawn_blocking(move || futures::executor::block_on(fut)) + }); + } + } + } + ); Ok(Runner { config: command.create_configuration(cli, task_executor)?, diff --git a/client/consensus/aura/src/lib.rs b/client/consensus/aura/src/lib.rs index daa181abba5..bbbcf687447 100644 --- a/client/consensus/aura/src/lib.rs +++ b/client/consensus/aura/src/lib.rs @@ -33,7 +33,7 @@ use std::{ collections::HashMap }; -use futures::prelude::*; +use futures::{prelude::*, future::BoxFuture}; use parking_lot::Mutex; use log::{debug, info, trace}; @@ -788,13 +788,14 @@ impl BlockImport for AuraBlockImport( +pub fn import_queue( slot_duration: SlotDuration, block_import: I, justification_import: Option>, finality_proof_import: Option>, client: Arc, inherent_data_providers: InherentDataProviders, + spawner: F, ) -> Result>, sp_consensus::Error> where B: BlockT, C::Api: BlockBuilderApi + AuraApi> + ApiExt, @@ -804,6 +805,7 @@ pub fn import_queue( P: Pair + Send + Sync + 'static, P::Public: Clone + Eq + Send + Sync + Hash + Debug + Encode + Decode, P::Signature: Encode + Decode, + F: Fn(BoxFuture<'static, ()>) -> (), { register_aura_inherent_data_provider(&inherent_data_providers, slot_duration.get())?; initialize_authorities_cache(&*client)?; @@ -818,6 +820,7 @@ pub fn import_queue( Box::new(block_import), justification_import, finality_proof_import, + spawner, )) } diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index 028fe8e5e34..4f8975d101d 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -107,7 +107,7 @@ use sc_client_api::{ }; use sp_block_builder::BlockBuilder as BlockBuilderApi; -use futures::prelude::*; +use futures::{prelude::*, future::BoxFuture}; use log::{debug, info, log, trace, warn}; use sc_consensus_slots::{ SlotWorker, SlotInfo, SlotCompatible, StorageChanges, CheckedHeader, check_equivocation, @@ -1272,6 +1272,7 @@ pub fn import_queue( finality_proof_import: Option>, client: Arc, inherent_data_providers: InherentDataProviders, + spawner: impl Fn(BoxFuture<'static, ()>) -> (), ) -> ClientResult>> where Inner: BlockImport> + Send + Sync + 'static, @@ -1294,6 +1295,7 @@ pub fn import_queue( Box::new(block_import), justification_import, finality_proof_import, + spawner, )) } diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index 687d072aaa0..caddb47d3c8 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -17,7 +17,7 @@ //! A manual sealing engine: the engine listens for rpc calls to seal blocks and create forks. //! This is suitable for a testing environment. -use futures::prelude::*; +use futures::{prelude::*, future::BoxFuture}; use sp_consensus::{ Environment, Proposer, ForkChoiceStrategy, BlockImportParams, BlockOrigin, SelectChain, import_queue::{BasicQueue, CacheKeyId, Verifier, BoxBlockImport}, @@ -67,7 +67,8 @@ impl Verifier for ManualSealVerifier { /// Instantiate the import queue for the manual seal consensus engine. pub fn import_queue( - block_import: BoxBlockImport> + block_import: BoxBlockImport>, + spawner: impl Fn(BoxFuture<'static, ()>) -> () ) -> BasicQueue> where Block: BlockT, @@ -78,6 +79,7 @@ pub fn import_queue( Box::new(block_import), None, None, + spawner, ) } diff --git a/client/consensus/pow/src/lib.rs b/client/consensus/pow/src/lib.rs index e0149b475b7..5d504d8ffc0 100644 --- a/client/consensus/pow/src/lib.rs +++ b/client/consensus/pow/src/lib.rs @@ -54,6 +54,7 @@ use codec::{Encode, Decode}; use sc_client_api; use log::*; use sp_timestamp::{InherentError as TIError, TimestampInherentData}; +use futures::future::BoxFuture; #[derive(derive_more::Display, Debug)] pub enum Error { @@ -461,6 +462,7 @@ pub fn import_queue( finality_proof_import: Option>, algorithm: Algorithm, inherent_data_providers: InherentDataProviders, + spawner: impl Fn(BoxFuture<'static, ()>) -> (), ) -> Result< PowImportQueue, sp_consensus::Error @@ -477,7 +479,8 @@ pub fn import_queue( verifier, block_import, justification_import, - finality_proof_import + finality_proof_import, + spawner, )) } diff --git a/client/network/src/service/tests.rs b/client/network/src/service/tests.rs index 84c393fbd2f..6c38d1d8746 100644 --- a/client/network/src/service/tests.rs +++ b/client/network/src/service/tests.rs @@ -80,11 +80,15 @@ fn build_test_full_node(config: config::NetworkConfiguration) } } + let threads_pool = futures::executor::ThreadPool::new().unwrap(); + let spawner = |future| threads_pool.spawn_ok(future); + let import_queue = Box::new(sp_consensus::import_queue::BasicQueue::new( PassThroughVerifier(false), Box::new(client.clone()), None, None, + spawner, )); let worker = NetworkWorker::new(config::Params { diff --git a/client/network/test/src/block_import.rs b/client/network/test/src/block_import.rs index aa6d275141f..5f152fa1322 100644 --- a/client/network/test/src/block_import.rs +++ b/client/network/test/src/block_import.rs @@ -84,7 +84,10 @@ fn async_import_queue_drops() { // Perform this test multiple times since it exhibits non-deterministic behavior. for _ in 0..100 { let verifier = PassThroughVerifier(true); - let queue = BasicQueue::new(verifier, Box::new(substrate_test_runtime_client::new()), None, None); + + let threads_pool = futures::executor::ThreadPool::new().unwrap(); + let spawner = |future| threads_pool.spawn_ok(future); + let queue = BasicQueue::new(verifier, Box::new(substrate_test_runtime_client::new()), None, None, spawner); drop(queue); } } diff --git a/client/network/test/src/lib.rs b/client/network/test/src/lib.rs index 5be5de9078e..9c2c4e3bfdf 100644 --- a/client/network/test/src/lib.rs +++ b/client/network/test/src/lib.rs @@ -606,11 +606,15 @@ pub trait TestNetFactory: Sized { ); let verifier = VerifierAdapter::new(Arc::new(Mutex::new(Box::new(verifier) as Box<_>))); + let threads_pool = futures::executor::ThreadPool::new().unwrap(); + let spawner = |future| threads_pool.spawn_ok(future); + let import_queue = Box::new(BasicQueue::new( verifier.clone(), Box::new(block_import.clone()), justification_import, finality_proof_import, + spawner, )); let listen_addr = build_multiaddr![Memory(rand::random::())]; @@ -683,11 +687,15 @@ pub trait TestNetFactory: Sized { ); let verifier = VerifierAdapter::new(Arc::new(Mutex::new(Box::new(verifier) as Box<_>))); + let threads_pool = futures::executor::ThreadPool::new().unwrap(); + let spawner = |future| threads_pool.spawn_ok(future); + let import_queue = Box::new(BasicQueue::new( verifier.clone(), Box::new(block_import.clone()), justification_import, finality_proof_import, + spawner, )); let listen_addr = build_multiaddr![Memory(rand::random::())]; diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index a1085611344..74055bf976f 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use crate::{Service, NetworkStatus, NetworkState, error::Error, DEFAULT_PROTOCOL_ID, MallocSizeOfWasm}; -use crate::{start_rpc_servers, build_network_future, TransactionPoolAdapter, TaskManager}; +use crate::{start_rpc_servers, build_network_future, TransactionPoolAdapter, TaskManager, SpawnTaskHandle}; use crate::status_sinks; use crate::config::{Configuration, KeystoreConfig, PrometheusConfig, OffchainWorkerConfig}; use crate::metrics::MetricsService; @@ -97,7 +97,7 @@ pub struct ServiceBuilder>>, marker: PhantomData<(TBl, TRtApi)>, background_tasks: Vec<(&'static str, BackgroundTask)>, - block_announce_validator_builder: Option) -> Box + Send>>>, + block_announce_validator_builder: Option) -> Box + Send> + Send>>, } /// Full client type. @@ -487,7 +487,7 @@ impl /// Defines which import queue to use. pub fn with_import_queue( self, - builder: impl FnOnce(&Configuration, Arc, Option, Arc) + builder: impl FnOnce(&Configuration, Arc, Option, Arc, &SpawnTaskHandle) -> Result ) -> Result, Error> @@ -496,7 +496,8 @@ impl &self.config, self.client.clone(), self.select_chain.clone(), - self.transaction_pool.clone() + self.transaction_pool.clone(), + &self.task_manager.spawn_handle(), )?; Ok(ServiceBuilder { @@ -588,6 +589,7 @@ impl Option, Option, Arc, + &SpawnTaskHandle, ) -> Result<(UImpQu, Option), Error> ) -> Result, Error> @@ -598,7 +600,8 @@ impl self.backend.clone(), self.fetcher.clone(), self.select_chain.clone(), - self.transaction_pool.clone() + self.transaction_pool.clone(), + &self.task_manager.spawn_handle(), )?; Ok(ServiceBuilder { @@ -631,12 +634,13 @@ impl Option, Option, Arc, + &SpawnTaskHandle, ) -> Result<(UImpQu, UFprb), Error> ) -> Result, Error> where TSc: Clone, TFchr: Clone { - self.with_import_queue_and_opt_fprb(|cfg, cl, b, f, sc, tx| - builder(cfg, cl, b, f, sc, tx) + self.with_import_queue_and_opt_fprb(|cfg, cl, b, f, sc, tx, tb| + builder(cfg, cl, b, f, sc, tx, tb) .map(|(q, f)| (q, Some(f))) ) } @@ -718,7 +722,7 @@ impl pub fn with_block_announce_validator( self, block_announce_validator_builder: - impl FnOnce(Arc) -> Box + Send> + 'static, + impl FnOnce(Arc) -> Box + Send> + Send + 'static, ) -> Result, Error> where TSc: Clone, TFchr: Clone { diff --git a/client/service/src/chain_ops.rs b/client/service/src/chain_ops.rs index 59dbc8302c2..6303376dc16 100644 --- a/client/service/src/chain_ops.rs +++ b/client/service/src/chain_ops.rs @@ -56,12 +56,13 @@ impl< TExecDisp: 'static + NativeExecutionDispatch, TImpQu: 'static + ImportQueue, TRtApi: 'static + Send + Sync, + Self: Send + 'static, { type Block = TBl; type NativeDispatch = TExecDisp; fn import_blocks( - self, + mut self, input: impl Read + Seek + Send + 'static, force: bool, ) -> Pin> + Send>> { @@ -98,9 +99,6 @@ impl< } } - let client = self.client; - let mut queue = self.import_queue; - let mut io_reader_input = IoReader(input); let mut count = None::; let mut read_block_count = 0; @@ -114,6 +112,9 @@ impl< // This makes it possible either to interleave other operations in-between the block imports, // or to stop the operation completely. let import = future::poll_fn(move |cx| { + let client = &self.client; + let queue = &mut self.import_queue; + // Start by reading the number of blocks if not done so already. let count = match count { Some(c) => c, @@ -203,13 +204,12 @@ impl< to: Option>, binary: bool ) -> Pin>>> { - let client = self.client; let mut block = from; let last = match to { Some(v) if v.is_zero() => One::one(), Some(v) => v, - None => client.chain_info().best_number, + None => self.client.chain_info().best_number, }; let mut wrote_header = false; @@ -222,6 +222,8 @@ impl< // This makes it possible either to interleave other operations in-between the block exports, // or to stop the operation completely. let export = future::poll_fn(move |cx| { + let client = &self.client; + if last < block { return std::task::Poll::Ready(Err("Invalid block range specified".into())); } diff --git a/client/service/src/config.rs b/client/service/src/config.rs index 4654158cb36..e1adc02e9a4 100644 --- a/client/service/src/config.rs +++ b/client/service/src/config.rs @@ -38,7 +38,7 @@ pub struct Configuration { /// Node role. pub role: Role, /// How to spawn background tasks. Mandatory, otherwise creating a `Service` will error. - pub task_executor: Arc + Send>>) + Send + Sync>, + pub task_executor: Arc + Send>>, TaskType) + Send + Sync>, /// Extrinsic pool configuration. pub transaction_pool: TransactionPoolOptions, /// Network configuration. @@ -102,6 +102,15 @@ pub struct Configuration { pub announce_block: bool, } +/// Type for tasks spawned by the executor. +#[derive(PartialEq)] +pub enum TaskType { + /// Regular non-blocking futures. Polling the task is expected to be a lightweight operation. + Async, + /// The task might perform a lot of expensive CPU operations and/or call `thread::sleep`. + Blocking, +} + /// Configuration of the client keystore. #[derive(Clone)] pub enum KeystoreConfig { diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 8e8c9e1e37b..07899a6fd32 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -64,7 +64,7 @@ pub use self::builder::{ ServiceBuilder, ServiceBuilderCommand, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, }; -pub use config::{Configuration, Role, PruningMode, DatabaseConfig}; +pub use config::{Configuration, Role, PruningMode, DatabaseConfig, TaskType}; pub use sc_chain_spec::{ ChainSpec, GenericChainSpec, Properties, RuntimeGenesis, Extension as ChainSpecExtension, NoExtension, ChainType, diff --git a/client/service/src/task_manager.rs b/client/service/src/task_manager.rs index e6847d08811..8d19a0e2795 100644 --- a/client/service/src/task_manager.rs +++ b/client/service/src/task_manager.rs @@ -31,11 +31,12 @@ use prometheus_endpoint::{ CounterVec, HistogramOpts, HistogramVec, Opts, Registry, U64 }; use sc_client_api::CloneableSpawn; +use crate::config::TaskType; mod prometheus_future; /// Type alias for service task executor (usually runtime). -pub type ServiceTaskExecutor = Arc + Send>>) + Send + Sync>; +pub type ServiceTaskExecutor = Arc + Send>>, TaskType) + Send + Sync>; /// An handle for spawning tasks in the service. #[derive(Clone)] @@ -55,6 +56,16 @@ impl SpawnTaskHandle { /// In other words, it would be a bad idea for someone to do for example /// `spawn(format!("{:?}", some_public_key))`. pub fn spawn(&self, name: &'static str, task: impl Future + Send + 'static) { + self.spawn_inner(name, task, TaskType::Async) + } + + /// Spawns the blocking task with the given name. See also `spawn`. + pub fn spawn_blocking(&self, name: &'static str, task: impl Future + Send + 'static) { + self.spawn_inner(name, task, TaskType::Blocking) + } + + /// Helper function that implements the spawning logic. See `spawn` and `spawn_blocking`. + fn spawn_inner(&self, name: &'static str, task: impl Future + Send + 'static, task_type: TaskType) { let on_exit = self.on_exit.clone(); let metrics = self.metrics.clone(); @@ -80,7 +91,7 @@ impl SpawnTaskHandle { } }; - (self.executor)(Box::pin(future)); + (self.executor)(Box::pin(future), task_type); } } diff --git a/client/service/test/src/lib.rs b/client/service/test/src/lib.rs index fd451ffc8d5..11398f80032 100644 --- a/client/service/test/src/lib.rs +++ b/client/service/test/src/lib.rs @@ -36,6 +36,7 @@ use sc_service::{ RuntimeGenesis, Role, Error, + TaskType, }; use sp_blockchain::HeaderBackend; use sc_network::{multiaddr, Multiaddr}; @@ -139,7 +140,7 @@ fn node_config, role: Role, - task_executor: Arc + Send>>) + Send + Sync>, + task_executor: Arc + Send>>, TaskType) + Send + Sync>, key_seed: Option, base_port: u16, root: &TempDir, @@ -255,7 +256,7 @@ impl TestNet where for (key, authority) in authorities { let task_executor = { let executor = executor.clone(); - Arc::new(move |fut: Pin + Send>>| executor.spawn(fut.unit_error().compat())) + Arc::new(move |fut: Pin + Send>>, _| executor.spawn(fut.unit_error().compat())) }; let node_config = node_config( self.nodes, @@ -279,7 +280,7 @@ impl TestNet where for full in full { let task_executor = { let executor = executor.clone(); - Arc::new(move |fut: Pin + Send>>| executor.spawn(fut.unit_error().compat())) + Arc::new(move |fut: Pin + Send>>, _| executor.spawn(fut.unit_error().compat())) }; let node_config = node_config(self.nodes, &self.chain_spec, Role::Full, task_executor, None, self.base_port, &temp); let addr = node_config.network.listen_addresses.iter().next().unwrap().clone(); @@ -295,7 +296,7 @@ impl TestNet where for light in light { let task_executor = { let executor = executor.clone(); - Arc::new(move |fut: Pin + Send>>| executor.spawn(fut.unit_error().compat())) + Arc::new(move |fut: Pin + Send>>, _| executor.spawn(fut.unit_error().compat())) }; let node_config = node_config(self.nodes, &self.chain_spec, Role::Light, task_executor, None, self.base_port, &temp); let addr = node_config.network.listen_addresses.iter().next().unwrap().clone(); diff --git a/primitives/consensus/common/Cargo.toml b/primitives/consensus/common/Cargo.toml index d34333c8831..7101dde2fc3 100644 --- a/primitives/consensus/common/Cargo.toml +++ b/primitives/consensus/common/Cargo.toml @@ -22,7 +22,6 @@ sp-inherents = { version = "2.0.0-dev", path = "../../inherents" } sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } futures = { version = "0.3.1", features = ["thread-pool"] } futures-timer = "3.0.1" -futures-diagnose = "1.0" sp-std = { version = "2.0.0-dev", path = "../../std" } sp-version = { version = "2.0.0-dev", path = "../../version" } sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } diff --git a/primitives/consensus/common/src/import_queue/basic_queue.rs b/primitives/consensus/common/src/import_queue/basic_queue.rs index 024e4738493..f39097ef3b3 100644 --- a/primitives/consensus/common/src/import_queue/basic_queue.rs +++ b/primitives/consensus/common/src/import_queue/basic_queue.rs @@ -14,10 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use std::{mem, pin::Pin, time::Duration, marker::PhantomData, sync::Arc}; -use futures::{prelude::*, task::Context, task::Poll}; +use std::{mem, pin::Pin, time::Duration, marker::PhantomData}; +use futures::{prelude::*, task::Context, task::Poll, future::BoxFuture}; use futures_timer::Delay; -use parking_lot::{Mutex, Condvar}; use sp_runtime::{Justification, traits::{Block as BlockT, Header as HeaderT, NumberFor}}; use sp_utils::mpsc::{TracingUnboundedSender, tracing_unbounded}; @@ -36,31 +35,14 @@ pub struct BasicQueue { sender: TracingUnboundedSender>, /// Results coming from the worker task. result_port: BufferedLinkReceiver, - /// If it isn't possible to spawn the future in `future_to_spawn` (which is notably the case in - /// "no std" environment), we instead put it in `manual_poll`. It is then polled manually from - /// `poll_actions`. - manual_poll: Option + Send>>>, - /// A thread pool where the background worker is being run. - pool: Option, - pool_guard: Arc<(Mutex, Condvar)>, _phantom: PhantomData, } impl Drop for BasicQueue { fn drop(&mut self) { - self.pool = None; // Flush the queue and close the receiver to terminate the future. self.sender.close_channel(); self.result_port.close(); - - // Make sure all pool threads terminate. - // https://github.com/rust-lang/futures-rs/issues/1470 - // https://github.com/rust-lang/futures-rs/issues/1349 - let (ref mutex, ref condvar) = *self.pool_guard; - let mut lock = mutex.lock(); - while *lock != 0 { - condvar.wait(&mut lock); - } } } @@ -74,6 +56,7 @@ impl BasicQueue { block_import: BoxBlockImport, justification_import: Option>, finality_proof_import: Option>, + spawner: impl Fn(BoxFuture<'static, ()>) -> (), ) -> Self { let (result_sender, result_port) = buffered_link::buffered_link(); let (future, worker_sender) = BlockImportWorker::new( @@ -84,39 +67,11 @@ impl BasicQueue { finality_proof_import, ); - let guard = Arc::new((Mutex::new(0usize), Condvar::new())); - let guard_start = guard.clone(); - let guard_end = guard.clone(); - - let mut pool = futures::executor::ThreadPool::builder() - .name_prefix("import-queue-worker-") - .pool_size(1) - .after_start(move |_| *guard_start.0.lock() += 1) - .before_stop(move |_| { - let (ref mutex, ref condvar) = *guard_end; - let mut lock = mutex.lock(); - *lock -= 1; - if *lock == 0 { - condvar.notify_one(); - } - }) - .create() - .ok(); - - let manual_poll; - if let Some(pool) = &mut pool { - pool.spawn_ok(futures_diagnose::diagnose("import-queue", future)); - manual_poll = None; - } else { - manual_poll = Some(Box::pin(future) as Pin>); - } + spawner(future.boxed()); Self { sender: worker_sender, result_port, - manual_poll, - pool, - pool_guard: guard, _phantom: PhantomData, } } @@ -160,15 +115,6 @@ impl ImportQueue for BasicQueue } fn poll_actions(&mut self, cx: &mut Context, link: &mut dyn Link) { - // As a backup mechanism, if we failed to spawn the `future_to_spawn`, we instead poll - // manually here. - if let Some(manual_poll) = self.manual_poll.as_mut() { - match Future::poll(Pin::new(manual_poll), cx) { - Poll::Pending => {} - _ => self.manual_poll = None, - } - } - self.result_port.poll_actions(cx, link); } } diff --git a/utils/browser/src/lib.rs b/utils/browser/src/lib.rs index 9be248883cb..63ef450c267 100644 --- a/utils/browser/src/lib.rs +++ b/utils/browser/src/lib.rs @@ -63,7 +63,7 @@ where network, telemetry_endpoints: chain_spec.telemetry_endpoints().clone(), chain_spec: Box::new(chain_spec), - task_executor: Arc::new(move |fut| wasm_bindgen_futures::spawn_local(fut)), + task_executor: Arc::new(move |fut, _| wasm_bindgen_futures::spawn_local(fut)), telemetry_external_transport: Some(transport), role: Role::Light, database: { -- GitLab From 463e2bc96e48a46d32574f705b1c209e6c993c23 Mon Sep 17 00:00:00 2001 From: Seun Lanlege Date: Wed, 29 Apr 2020 17:48:24 +0100 Subject: [PATCH 095/167] Drop ClientProvider (#5823) --- client/service/src/lib.rs | 94 +------------ client/src/genesis.rs | 270 -------------------------------------- 2 files changed, 5 insertions(+), 359 deletions(-) delete mode 100644 client/src/genesis.rs diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 07899a6fd32..742e5b29aaa 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -54,7 +54,7 @@ use sc_network::{NetworkService, network_state::NetworkState, PeerId, ReportHand use log::{log, warn, debug, error, Level}; use codec::{Encode, Decode}; use sp_runtime::generic::BlockId; -use sp_runtime::traits::{NumberFor, Block as BlockT, BlockIdTo}; +use sp_runtime::traits::{NumberFor, Block as BlockT}; use parity_util_mem::MallocSizeOf; use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver, TracingUnboundedSender}; @@ -80,16 +80,11 @@ pub use sc_network::config::{FinalityProofProvider, OnDemand, BoxFinalityProofRe pub use sc_tracing::TracingReceiver; pub use task_manager::SpawnTaskHandle; use task_manager::TaskManager; -use sp_blockchain::{HeaderBackend, HeaderMetadata, ProvideCache}; -use sp_api::{ProvideRuntimeApi, CallApiAt, ApiExt, ConstructRuntimeApi, ApiErrorExt}; +use sp_blockchain::{HeaderBackend, HeaderMetadata}; +use sp_api::{ApiExt, ConstructRuntimeApi, ApiErrorExt}; use sc_client_api::{ - LockImportRun, Backend as BackendT, ProofProvider, ProvideUncles, - StorageProvider, ExecutorProvider, Finalizer, AuxStore, Backend, - BlockBackend, BlockchainEvents, CallExecutor, TransactionFor, - UsageProvider, + Backend as BackendT, BlockchainEvents, CallExecutor, UsageProvider, }; -use sc_block_builder::BlockBuilderProvider; -use sp_consensus::{block_validation::Chain, BlockImport}; use sp_block_builder::BlockBuilder; const DEFAULT_PROTOCOL_ID: &str = "sup"; @@ -131,85 +126,6 @@ pub struct Service { impl Unpin for Service {} -/// Client super trait, use this instead of the concrete Client type. -pub trait ClientProvider< - Block: BlockT, - Backend: BackendT, - Executor: CallExecutor, - Runtime: ConstructRuntimeApi, ->: - HeaderBackend - + ProvideRuntimeApi< - Block, - Api = >::RuntimeApi - > - + LockImportRun - + ProofProvider - + BlockBuilderProvider - + ProvideUncles - + StorageProvider - + Chain - + HeaderMetadata - + ExecutorProvider - + ProvideCache - + BlockIdTo - + CallApiAt< - Block, - Error = sp_blockchain::Error, - StateBackend = >::State - > - + BlockImport< - Block, - Error = sp_consensus::Error, - Transaction = TransactionFor - > - + Finalizer - + BlockchainEvents - + BlockBackend - + UsageProvider - + AuxStore -{} - -impl ClientProvider - for - Client - where - Block: BlockT, - Backend: BackendT, - Executor: CallExecutor, - Runtime: ConstructRuntimeApi, - Self: HeaderBackend - + ProvideRuntimeApi< - Block, - Api = >::RuntimeApi - > - + LockImportRun - + ProofProvider - + BlockBuilderProvider - + ProvideUncles - + StorageProvider - + Chain - + HeaderMetadata - + ExecutorProvider - + ProvideCache - + BlockIdTo - + CallApiAt< - Block, - Error = sp_blockchain::Error, - StateBackend = >::State - > - + BlockImport< - Block, - Error = sp_consensus::Error, - Transaction = TransactionFor - > - + Finalizer - + BlockchainEvents - + BlockBackend - + UsageProvider - + AuxStore -{} - /// Abstraction over a Substrate service. pub trait AbstractService: Future> + Send + Unpin + Spawn + 'static { /// Type of block of this chain. @@ -296,7 +212,7 @@ impl AbstractService for NetworkService, TExPool, TOc> where TBl: BlockT, - TBackend: 'static + Backend, + TBackend: 'static + BackendT, TExec: 'static + CallExecutor + Send + Sync + Clone, TRtApi: 'static + Send + Sync + ConstructRuntimeApi>, >>::RuntimeApi: diff --git a/client/src/genesis.rs b/client/src/genesis.rs deleted file mode 100644 index c5dd44404c9..00000000000 --- a/client/src/genesis.rs +++ /dev/null @@ -1,270 +0,0 @@ -// Copyright 2017-2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Tool for creating the genesis block. - -use sp_runtime::traits::{Block as BlockT, Header as HeaderT, Hash as HashT, Zero}; - -/// Create a genesis block, given the initial storage. -pub fn construct_genesis_block< - Block: BlockT -> ( - state_root: Block::Hash -) -> Block { - let extrinsics_root = <<::Header as HeaderT>::Hashing as HashT>::trie_root( - Vec::new(), - ); - - Block::new( - <::Header as HeaderT>::new( - Zero::zero(), - extrinsics_root, - state_root, - Default::default(), - Default::default() - ), - Default::default() - ) -} - -#[cfg(test)] -mod tests { - use codec::{Encode, Decode, Joiner}; - use sc_executor::native_executor_instance; - use sp_state_machine::{ - StateMachine, OverlayedChanges, ExecutionStrategy, - InMemoryBackend, - }; - use substrate_test_runtime_client::{ - runtime::genesismap::{GenesisConfig, insert_genesis_block}, - runtime::{Hash, Transfer, Block, BlockNumber, Header, Digest}, - AccountKeyring, Sr25519Keyring, - }; - use sp_runtime::traits::BlakeTwo256; - use sp_core::tasks::executor as tasks_executor; - use sp_core::offchain::storage::OffchainOverlayedChanges; - use hex_literal::*; - - native_executor_instance!( - Executor, - substrate_test_runtime_client::runtime::api::dispatch, - substrate_test_runtime_client::runtime::native_version, - ); - - fn executor() -> sc_executor::NativeExecutor { - sc_executor::NativeExecutor::new(sc_executor::WasmExecutionMethod::Interpreted, None, 8) - } - - fn construct_block( - backend: &InMemoryBackend, - number: BlockNumber, - parent_hash: Hash, - state_root: Hash, - txs: Vec - ) -> (Vec, Hash) { - use sp_trie::{TrieConfiguration, trie_types::Layout}; - - let transactions = txs.into_iter().map(|tx| tx.into_signed_tx()).collect::>(); - - let iter = transactions.iter().map(Encode::encode); - let extrinsics_root = Layout::::ordered_trie_root(iter).into(); - - let mut header = Header { - parent_hash, - number, - state_root, - extrinsics_root, - digest: Digest { logs: vec![], }, - }; - let hash = header.hash(); - let mut overlay = OverlayedChanges::default(); - let mut offchain_overlay = OffchainOverlayedChanges::default(); - let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); - let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); - - StateMachine::new( - backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "Core_initialize_block", - &header.encode(), - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::NativeElseWasm, - ).unwrap(); - - for tx in transactions.iter() { - StateMachine::new( - backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "BlockBuilder_apply_extrinsic", - &tx.encode(), - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::NativeElseWasm, - ).unwrap(); - } - - let ret_data = StateMachine::new( - backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "BlockBuilder_finalize_block", - &[], - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::NativeElseWasm, - ).unwrap(); - header = Header::decode(&mut &ret_data[..]).unwrap(); - - (vec![].and(&Block { header, extrinsics: transactions }), hash) - } - - fn block1(genesis_hash: Hash, backend: &InMemoryBackend) -> (Vec, Hash) { - construct_block( - backend, - 1, - genesis_hash, - hex!("25e5b37074063ab75c889326246640729b40d0c86932edc527bc80db0e04fe5c").into(), - vec![Transfer { - from: AccountKeyring::One.into(), - to: AccountKeyring::Two.into(), - amount: 69, - nonce: 0, - }] - ) - } - - #[test] - fn construct_genesis_should_work_with_native() { - let mut storage = GenesisConfig::new( - None, - vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], - vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], - 1000, - None, - Default::default(), - ).genesis_map(); - let genesis_hash = insert_genesis_block(&mut storage); - - let backend = InMemoryBackend::from(storage); - let (b1data, _b1hash) = block1(genesis_hash, &backend); - let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); - let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); - - let mut overlay = OverlayedChanges::default(); - let mut offchain_overlay = OffchainOverlayedChanges::default(); - - let _ = StateMachine::new( - &backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "Core_execute_block", - &b1data, - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::NativeElseWasm, - ).unwrap(); - } - - #[test] - fn construct_genesis_should_work_with_wasm() { - let mut storage = GenesisConfig::new(None, - vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], - vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], - 1000, - None, - Default::default(), - ).genesis_map(); - let genesis_hash = insert_genesis_block(&mut storage); - - let backend = InMemoryBackend::from(storage); - let (b1data, _b1hash) = block1(genesis_hash, &backend); - let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); - let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); - - let mut overlay = OverlayedChanges::default(); - let mut offchain_overlay = OffchainOverlayedChanges::default(); - - let _ = StateMachine::new( - &backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "Core_execute_block", - &b1data, - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::AlwaysWasm, - ).unwrap(); - } - - #[test] - fn construct_genesis_with_bad_transaction_should_panic() { - let mut storage = GenesisConfig::new(None, - vec![Sr25519Keyring::One.public().into(), Sr25519Keyring::Two.public().into()], - vec![AccountKeyring::One.into(), AccountKeyring::Two.into()], - 68, - None, - Default::default(), - ).genesis_map(); - let genesis_hash = insert_genesis_block(&mut storage); - - let backend = InMemoryBackend::from(storage); - let (b1data, _b1hash) = block1(genesis_hash, &backend); - let backend_runtime_code = sp_state_machine::backend::BackendRuntimeCode::new(&backend); - let runtime_code = backend_runtime_code.runtime_code().expect("Code is part of the backend"); - - let mut overlay = OverlayedChanges::default(); - let mut offchain_overlay = OffchainOverlayedChanges::default(); - - let r = StateMachine::new( - &backend, - sp_state_machine::disabled_changes_trie_state::<_, u64>(), - &mut overlay, - &mut offchain_overlay, - &executor(), - "Core_execute_block", - &b1data, - Default::default(), - &runtime_code, - tasks_executor(), - ).execute( - ExecutionStrategy::NativeElseWasm, - ); - assert!(r.is_err()); - } -} -- GitLab From 94906baab60b9dc7e71c36012b7660e3077b2d5a Mon Sep 17 00:00:00 2001 From: Saqib Rokadia Date: Wed, 29 Apr 2020 10:08:30 -0700 Subject: [PATCH 096/167] Adding optional public addresses for proxying (#5807) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adding optional public addresses for use in network configurations to allow for proxies in front of a node. * Apply suggestions from code review Co-Authored-By: Cecile Tonglet Co-authored-by: Bastian Köcher Co-authored-by: Cecile Tonglet Co-authored-by: Pierre Krieger --- client/cli/src/commands/runcmd.rs | 5 ++++- client/cli/src/params/network_params.rs | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/client/cli/src/commands/runcmd.rs b/client/cli/src/commands/runcmd.rs index a24cadcd4f7..3365c7a27a2 100644 --- a/client/cli/src/commands/runcmd.rs +++ b/client/cli/src/commands/runcmd.rs @@ -230,10 +230,13 @@ pub struct RunCmd { pub max_runtime_instances: Option, /// Specify a list of sentry node public addresses. + /// + /// Can't be used with --public-addr as the sentry node would take precedence over the public address + /// specified there. #[structopt( long = "sentry-nodes", value_name = "ADDR", - conflicts_with_all = &[ "sentry" ] + conflicts_with_all = &[ "sentry", "public-addr" ] )] pub sentry_nodes: Vec, } diff --git a/client/cli/src/params/network_params.rs b/client/cli/src/params/network_params.rs index d0ec3fb9f3f..79112b041cf 100644 --- a/client/cli/src/params/network_params.rs +++ b/client/cli/src/params/network_params.rs @@ -41,6 +41,11 @@ pub struct NetworkParams { #[structopt(long = "reserved-only")] pub reserved_only: bool, + /// The public address that other nodes will use to connect to it. + /// This can be used if there's a proxy in front of this node. + #[structopt(long, value_name = "PUBLIC_ADDR")] + pub public_addr: Vec, + /// Listen on this multiaddress. #[structopt(long = "listen-addr", value_name = "LISTEN_ADDR")] pub listen_addr: Vec, @@ -125,6 +130,8 @@ impl NetworkParams { self.listen_addr.clone() }; + let public_addresses = self.public_addr.clone(); + let mut boot_nodes = chain_spec.boot_nodes().to_vec(); boot_nodes.extend(self.bootnodes.clone()); @@ -138,7 +145,7 @@ impl NetworkParams { NonReservedPeerMode::Accept }, listen_addresses, - public_addresses: Vec::new(), + public_addresses, notifications_protocols: Vec::new(), node_key, node_name: node_name.to_string(), -- GitLab From c82a0f7b58c8c3f204cb10d4a03cd4855b236c29 Mon Sep 17 00:00:00 2001 From: pscott <30843220+pscott@users.noreply.github.com> Date: Wed, 29 Apr 2020 20:47:42 +0200 Subject: [PATCH 097/167] Remove background_tasks field in ServiceBuilder (#5830) * Spawn tasks instead of pushing them to background_tasks * Remove unnecessary mut keyword for self * Remove background_tasks field in ServiceBuilder --- client/service/src/builder.rs | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 74055bf976f..832fd5b8ea7 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -96,7 +96,6 @@ pub struct ServiceBuilder>>, marker: PhantomData<(TBl, TRtApi)>, - background_tasks: Vec<(&'static str, BackgroundTask)>, block_announce_validator_builder: Option) -> Box + Send> + Send>>, } @@ -311,7 +310,6 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { transaction_pool: Arc::new(()), rpc_extensions: Default::default(), remote_backend: None, - background_tasks: Default::default(), block_announce_validator_builder: None, marker: PhantomData, }) @@ -395,7 +393,6 @@ impl ServiceBuilder<(), (), (), (), (), (), (), (), (), (), ()> { transaction_pool: Arc::new(()), rpc_extensions: Default::default(), remote_backend: Some(remote_blockchain), - background_tasks: Default::default(), block_announce_validator_builder: None, marker: PhantomData, }) @@ -469,7 +466,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -514,7 +510,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -553,7 +548,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -618,7 +612,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -647,7 +640,7 @@ impl /// Defines which transaction pool to use. pub fn with_transaction_pool( - mut self, + self, transaction_pool_builder: impl FnOnce( sc_transaction_pool::txpool::Options, Arc, @@ -665,7 +658,7 @@ impl )?; if let Some(background_task) = background_task{ - self.background_tasks.push(("txpool-background", background_task)); + self.task_manager.spawn_handle().spawn("txpool-background", background_task); } Ok(ServiceBuilder { @@ -682,7 +675,6 @@ impl transaction_pool: Arc::new(transaction_pool), rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -711,7 +703,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: self.block_announce_validator_builder, marker: self.marker, }) @@ -740,7 +731,6 @@ impl transaction_pool: self.transaction_pool, rpc_extensions: self.rpc_extensions, remote_backend: self.remote_backend, - background_tasks: self.background_tasks, block_announce_validator_builder: Some(Box::new(block_announce_validator_builder)), marker: self.marker, }) @@ -852,7 +842,6 @@ ServiceBuilder< transaction_pool, rpc_extensions, remote_backend, - background_tasks, block_announce_validator_builder, } = self; @@ -947,12 +936,6 @@ ServiceBuilder< let spawn_handle = task_manager.spawn_handle(); - // Spawn background tasks which were stacked during the - // service building. - for (title, background_task) in background_tasks { - spawn_handle.spawn(title, background_task); - } - { // block notifications let txpool = Arc::downgrade(&transaction_pool); -- GitLab From 268450a946d3d7346ac0052d211009cb82316f1c Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 30 Apr 2020 10:33:31 +0300 Subject: [PATCH 098/167] Add parity-db variant for trie benchmarks (#5827) * parity-db bench * use arkady suggestion --- Cargo.lock | 2 + bin/node/bench/Cargo.toml | 2 + bin/node/bench/src/core.rs | 4 +- bin/node/bench/src/main.rs | 37 +++++++++++----- bin/node/bench/src/tempdb.rs | 82 +++++++++++++++++++++++++++++++++--- bin/node/bench/src/trie.rs | 23 +++++++--- 6 files changed, 124 insertions(+), 26 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 33129d420fa..48c1252236d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3365,6 +3365,8 @@ dependencies = [ "log", "node-primitives", "node-testing", + "parity-db", + "parity-util-mem", "rand 0.7.3", "sc-cli", "sc-client-api", diff --git a/bin/node/bench/Cargo.toml b/bin/node/bench/Cargo.toml index e5738397556..63cd44997ad 100644 --- a/bin/node/bench/Cargo.toml +++ b/bin/node/bench/Cargo.toml @@ -30,3 +30,5 @@ fs_extra = "1" hex = "0.4.0" rand = { version = "0.7.2", features = ["small_rng"] } lazy_static = "1.4.0" +parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } +parity-db = { version = "0.1.2" } diff --git a/bin/node/bench/src/core.rs b/bin/node/bench/src/core.rs index 7a345f7a5bd..db0b1180f4f 100644 --- a/bin/node/bench/src/core.rs +++ b/bin/node/bench/src/core.rs @@ -139,10 +139,10 @@ pub fn run_benchmark( } macro_rules! matrix( - ( $var:ident in $over:expr => $tt:expr, $( $rest:tt )* ) => { + ( $var:tt in $over:expr => $tt:expr, $( $rest:tt )* ) => { { let mut res = Vec::>::new(); - for $var in $over.iter() { + for $var in $over { res.push(Box::new($tt)); } res.extend(matrix!( $($rest)* )); diff --git a/bin/node/bench/src/main.rs b/bin/node/bench/src/main.rs index 7d92eabf4cb..d2eca8d7de5 100644 --- a/bin/node/bench/src/main.rs +++ b/bin/node/bench/src/main.rs @@ -23,6 +23,7 @@ mod tempdb; mod state_sizes; use crate::core::{run_benchmark, Mode as BenchmarkMode}; +use crate::tempdb::DatabaseType; use import::{ImportBenchmarkDescription, SizeType}; use trie::{TrieReadBenchmarkDescription, TrieWriteBenchmarkDescription, DatabaseSize}; use node_testing::bench::{Profile, KeyTypes}; @@ -66,7 +67,7 @@ fn main() { } let benchmarks = matrix!( - profile in [Profile::Wasm, Profile::Native] => + profile in [Profile::Wasm, Profile::Native].iter() => ImportBenchmarkDescription { profile: *profile, key_types: KeyTypes::Sr25519, @@ -87,22 +88,36 @@ fn main() { key_types: KeyTypes::Sr25519, size: SizeType::Full, }, - size in [SizeType::Small, SizeType::Large] => + size in [SizeType::Small, SizeType::Large].iter() => ImportBenchmarkDescription { profile: Profile::Native, key_types: KeyTypes::Sr25519, size: *size, }, - size in [ - DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, - DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, - ] => TrieReadBenchmarkDescription { database_size: *size }, - size in [ - DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, - DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, - ] => TrieWriteBenchmarkDescription { database_size: *size }, + (size, db_type) in + [ + DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, + DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, + ] + .iter().flat_map(|size| + [ + DatabaseType::RocksDb, DatabaseType::ParityDb + ] + .iter().map(move |db_type| (size, db_type))) + => TrieReadBenchmarkDescription { database_size: *size, database_type: *db_type }, + (size, db_type) in + [ + DatabaseSize::Empty, DatabaseSize::Smallest, DatabaseSize::Small, + DatabaseSize::Medium, DatabaseSize::Large, DatabaseSize::Huge, + ] + .iter().flat_map(|size| + [ + DatabaseType::RocksDb, DatabaseType::ParityDb + ] + .iter().map(move |db_type| (size, db_type))) + => TrieWriteBenchmarkDescription { database_size: *size, database_type: *db_type }, ); - + if opt.list { for benchmark in benchmarks.iter() { log::info!("{}: {}", benchmark.name(), benchmark.path().full()) diff --git a/bin/node/bench/src/tempdb.rs b/bin/node/bench/src/tempdb.rs index 067db6a5652..4a0a793a22c 100644 --- a/bin/node/bench/src/tempdb.rs +++ b/bin/node/bench/src/tempdb.rs @@ -14,12 +14,67 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use std::sync::Arc; -use kvdb::KeyValueDB; +use std::{io, sync::Arc}; +use kvdb::{KeyValueDB, DBTransaction}; use kvdb_rocksdb::{DatabaseConfig, Database}; +#[derive(Debug, Clone, Copy, derive_more::Display)] +pub enum DatabaseType { + RocksDb, + ParityDb, +} + pub struct TempDatabase(tempfile::TempDir); +struct ParityDbWrapper(parity_db::Db); +parity_util_mem::malloc_size_of_is_0!(ParityDbWrapper); + +impl KeyValueDB for ParityDbWrapper { + /// Get a value by key. + fn get(&self, col: u32, key: &[u8]) -> io::Result>> { + Ok(self.0.get(col as u8, &key[key.len() - 32..]).expect("db error")) + } + + /// Get a value by partial key. Only works for flushed data. + fn get_by_prefix(&self, _col: u32, _prefix: &[u8]) -> Option> { + unimplemented!() + } + + /// Write a transaction of changes to the buffer. + fn write_buffered(&self, transaction: DBTransaction) { + self.0.commit( + transaction.ops.iter().map(|op| match op { + kvdb::DBOp::Insert { col, key, value } => (*col as u8, &key[key.len() - 32..], Some(value.to_vec())), + kvdb::DBOp::Delete { col, key } => (*col as u8, &key[key.len() - 32..], None), + }) + ).expect("db error"); + } + + /// Flush all buffered data. + fn flush(&self) -> io::Result<()> { + Ok(()) + } + + /// Iterate over flushed data for a given column. + fn iter<'a>(&'a self, _col: u32) -> Box, Box<[u8]>)> + 'a> { + unimplemented!() + } + + /// Iterate over flushed data for a given column, starting from a given prefix. + fn iter_from_prefix<'a>( + &'a self, + _col: u32, + _prefix: &'a [u8], + ) -> Box, Box<[u8]>)> + 'a> { + unimplemented!() + } + + /// Attempt to replace this database with a new one located at the given path. + fn restore(&self, _new_db: &str) -> io::Result<()> { + unimplemented!() + } +} + impl TempDatabase { pub fn new() -> Self { let dir = tempfile::tempdir().expect("temp dir creation failed"); @@ -32,10 +87,25 @@ impl TempDatabase { TempDatabase(dir) } - pub fn open(&mut self) -> Arc { - let db_cfg = DatabaseConfig::with_columns(1); - let db = Database::open(&db_cfg, &self.0.path().to_string_lossy()).expect("Database backend error"); - Arc::new(db) + pub fn open(&mut self, db_type: DatabaseType) -> Arc { + match db_type { + DatabaseType::RocksDb => { + let db_cfg = DatabaseConfig::with_columns(1); + let db = Database::open(&db_cfg, &self.0.path().to_string_lossy()).expect("Database backend error"); + Arc::new(db) + }, + DatabaseType::ParityDb => { + Arc::new(ParityDbWrapper({ + let mut options = parity_db::Options::with_columns(self.0.path(), 1); + let mut column_options = &mut options.columns[0]; + column_options.ref_counted = true; + column_options.preimage = true; + column_options.uniform = true; + parity_db::Db::open(&options).expect("db open error") + })) + } + } + } } diff --git a/bin/node/bench/src/trie.rs b/bin/node/bench/src/trie.rs index 3280618fb6a..9a52e3c3016 100644 --- a/bin/node/bench/src/trie.rs +++ b/bin/node/bench/src/trie.rs @@ -30,7 +30,7 @@ use crate::{ core::{self, Mode, Path}, generator::generate_trie, simple_trie::SimpleTrie, - tempdb::TempDatabase, + tempdb::{TempDatabase, DatabaseType}, }; pub const SAMPLE_SIZE: usize = 100; @@ -91,6 +91,7 @@ fn pretty_print(v: usize) -> String { pub struct TrieReadBenchmarkDescription { pub database_size: DatabaseSize, + pub database_type: DatabaseType, } pub struct TrieReadBenchmark { @@ -98,6 +99,7 @@ pub struct TrieReadBenchmark { root: Hash, warmup_keys: KeyValues, query_keys: KeyValues, + database_type: DatabaseType, } impl core::BenchmarkDescription for TrieReadBenchmarkDescription { @@ -139,7 +141,7 @@ impl core::BenchmarkDescription for TrieReadBenchmarkDescription { assert_eq!(query_keys.len(), SAMPLE_SIZE); let root = generate_trie( - database.open(), + database.open(self.database_type), key_values, ); @@ -148,14 +150,16 @@ impl core::BenchmarkDescription for TrieReadBenchmarkDescription { root, warmup_keys, query_keys, + database_type: self.database_type, }) } fn name(&self) -> Cow<'static, str> { format!( - "Trie read benchmark({} database ({} keys))", + "Trie read benchmark({} database ({} keys), db_type: {})", self.database_size, pretty_print(self.database_size.keys()), + self.database_type, ).into() } } @@ -173,7 +177,7 @@ impl core::Benchmark for TrieReadBenchmark { fn run(&mut self, mode: Mode) -> std::time::Duration { let mut db = self.database.clone(); let storage: Arc> = - Arc::new(Storage(db.open())); + Arc::new(Storage(db.open(self.database_type))); let trie_backend = sp_state_machine::TrieBackend::new( storage, @@ -208,8 +212,10 @@ impl core::Benchmark for TrieReadBenchmark { pub struct TrieWriteBenchmarkDescription { pub database_size: DatabaseSize, + pub database_type: DatabaseType, } + impl core::BenchmarkDescription for TrieWriteBenchmarkDescription { fn path(&self) -> Path { let mut path = Path::new(&["trie", "write"]); @@ -245,7 +251,7 @@ impl core::BenchmarkDescription for TrieWriteBenchmarkDescription { assert_eq!(warmup_keys.len(), SAMPLE_SIZE); let root = generate_trie( - database.open(), + database.open(self.database_type), key_values, ); @@ -253,14 +259,16 @@ impl core::BenchmarkDescription for TrieWriteBenchmarkDescription { database, root, warmup_keys, + database_type: self.database_type, }) } fn name(&self) -> Cow<'static, str> { format!( - "Trie write benchmark({} database ({} keys))", + "Trie write benchmark({} database ({} keys), db_type = {})", self.database_size, pretty_print(self.database_size.keys()), + self.database_type, ).into() } } @@ -269,13 +277,14 @@ struct TrieWriteBenchmark { database: TempDatabase, root: Hash, warmup_keys: KeyValues, + database_type: DatabaseType, } impl core::Benchmark for TrieWriteBenchmark { fn run(&mut self, mode: Mode) -> std::time::Duration { let mut rng = rand::thread_rng(); let mut db = self.database.clone(); - let kvdb = db.open(); + let kvdb = db.open(self.database_type); let mut new_root = self.root.clone(); -- GitLab From b354529cb04b9fe07998c3d52f679bb0d59c5029 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 30 Apr 2020 09:50:08 +0200 Subject: [PATCH 099/167] Optimize collecting pending block requests (#5829) * Optimized collecting pending block requests * Make sure request iterator is consumed --- client/network/src/protocol.rs | 9 ++- client/network/src/protocol/sync.rs | 88 +++++++++++++++++++++-------- 2 files changed, 72 insertions(+), 25 deletions(-) diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 8222767e1a1..82f0d775ecc 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -1965,7 +1965,7 @@ impl NetworkBehaviour for Protocol { target: id, request: r, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + self.pending_messages.push_back(event); } else { send_request( &mut self.behaviour, @@ -1982,7 +1982,7 @@ impl NetworkBehaviour for Protocol { target: id, request: r, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + self.pending_messages.push_back(event); } else { send_request( &mut self.behaviour, @@ -2000,7 +2000,7 @@ impl NetworkBehaviour for Protocol { block_hash: r.block, request: r.request, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)); + self.pending_messages.push_back(event); } else { send_request( &mut self.behaviour, @@ -2010,6 +2010,9 @@ impl NetworkBehaviour for Protocol { GenericMessage::FinalityProofRequest(r)) } } + if let Some(message) = self.pending_messages.pop_front() { + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(message)); + } let event = match self.behaviour.poll(cx, params) { Poll::Pending => return Poll::Pending, diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index 98fbd4ae4f7..1aba1bb66f6 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -106,6 +106,50 @@ mod rep { pub const UNKNOWN_ANCESTOR:Rep = Rep::new(-(1 << 16), "DB Error"); } +enum PendingRequests { + Some(HashSet), + All, +} + +impl PendingRequests { + fn add(&mut self, id: &PeerId) { + match self { + PendingRequests::Some(set) => { + set.insert(id.clone()); + } + PendingRequests::All => {}, + } + } + + fn take(&mut self) -> PendingRequests { + std::mem::replace(self, Default::default()) + } + + fn set_all(&mut self) { + *self = PendingRequests::All; + } + + fn contains(&self, id: &PeerId) -> bool { + match self { + PendingRequests::Some(set) => set.contains(id), + PendingRequests::All => true, + } + } + + fn is_empty(&self) -> bool { + match self { + PendingRequests::Some(set) => set.is_empty(), + PendingRequests::All => false, + } + } +} + +impl Default for PendingRequests { + fn default() -> Self { + PendingRequests::Some(HashSet::default()) + } +} + /// The main data structure which contains all the state for a chains /// active syncing strategy. pub struct ChainSync { @@ -138,8 +182,8 @@ pub struct ChainSync { request_builder: Option>, /// Fork sync targets. fork_targets: HashMap>, - /// A flag that caches idle state with no pending requests. - is_idle: bool, + /// A set of peers for which there might be potential block requests + pending_requests: PendingRequests, /// A type to check incoming block announcements. block_announce_validator: Box + Send>, /// Maximum number of peers to ask the same blocks in parallel. @@ -327,7 +371,7 @@ impl ChainSync { queue_blocks: Default::default(), request_builder, fork_targets: Default::default(), - is_idle: false, + pending_requests: Default::default(), block_announce_validator, max_parallel_downloads, processed_blocks: 0, @@ -426,7 +470,7 @@ impl ChainSync { state: PeerSyncState::Available, recently_announced: Default::default(), }); - self.is_idle = false; + self.pending_requests.add(&who); return Ok(None) } @@ -438,6 +482,7 @@ impl ChainSync { best_number ); + self.pending_requests.add(&who); self.peers.insert(who, PeerSync { common_number: Zero::zero(), best_hash, @@ -449,7 +494,6 @@ impl ChainSync { }, recently_announced: Default::default() }); - self.is_idle = false; Ok(Some(ancestry_request::(common_best))) } @@ -462,7 +506,7 @@ impl ChainSync { state: PeerSyncState::Available, recently_announced: Default::default(), }); - self.is_idle = false; + self.pending_requests.add(&who); Ok(None) } } @@ -516,7 +560,6 @@ impl ChainSync { } trace!(target: "sync", "Downloading requested old fork {:?}", hash); - self.is_idle = false; for peer_id in &peers { if let Some(peer) = self.peers.get_mut(peer_id) { if let PeerSyncState::AncestorSearch {..} = peer.state { @@ -527,6 +570,7 @@ impl ChainSync { peer.best_number = number; peer.best_hash = hash.clone(); } + self.pending_requests.add(peer_id); } } @@ -590,7 +634,7 @@ impl ChainSync { /// Get an iterator over all block requests of all peers. pub fn block_requests(&mut self) -> impl Iterator)> + '_ { - if self.is_idle { + if self.pending_requests.is_empty() { return Either::Left(std::iter::empty()) } if self.queue_blocks.len() > MAX_IMPORTING_BLOCKS { @@ -606,10 +650,13 @@ impl ChainSync { let best_queued = self.best_queued_number; let client = &self.client; let queue = &self.queue_blocks; + let pending_requests = self.pending_requests.take(); let max_parallel = if major_sync { 1 } else { self.max_parallel_downloads }; let iter = self.peers.iter_mut().filter_map(move |(id, peer)| { if !peer.state.is_available() { - trace!(target: "sync", "Peer {} is busy", id); + return None + } + if !pending_requests.contains(id) { return None } if let Some((range, req)) = peer_block_request( @@ -652,9 +699,6 @@ impl ChainSync { None } }); - if !have_requests { - self.is_idle = true; - } Either::Right(iter) } @@ -675,7 +719,7 @@ impl ChainSync { trace!(target: "sync", "Reversing incoming block list"); blocks.reverse() } - self.is_idle = false; + self.pending_requests.add(&who); if request.is_some() { match &mut peer.state { PeerSyncState::DownloadingNew(start_block) => { @@ -859,7 +903,7 @@ impl ChainSync { return Ok(OnBlockJustification::Nothing) }; - self.is_idle = false; + self.pending_requests.add(&who); if let PeerSyncState::DownloadingJustification(hash) = peer.state { peer.state = PeerSyncState::Available; @@ -906,7 +950,7 @@ impl ChainSync { return Ok(OnBlockFinalityProof::Nothing) }; - self.is_idle = false; + self.pending_requests.add(&who); if let PeerSyncState::DownloadingFinalityProof(hash) = peer.state { peer.state = PeerSyncState::Available; @@ -1029,7 +1073,7 @@ impl ChainSync { }; } - self.is_idle = false; + self.pending_requests.set_all(); output.into_iter() } @@ -1038,12 +1082,12 @@ impl ChainSync { pub fn on_justification_import(&mut self, hash: B::Hash, number: NumberFor, success: bool) { let finalization_result = if success { Ok((hash, number)) } else { Err(()) }; self.extra_justifications.try_finalize_root((hash, number), finalization_result, true); - self.is_idle = false; + self.pending_requests.set_all(); } pub fn on_finality_proof_import(&mut self, req: (B::Hash, NumberFor), res: Result<(B::Hash, NumberFor), ()>) { self.extra_finality_proofs.try_finalize_root(req, res, true); - self.is_idle = false; + self.pending_requests.set_all(); } /// Notify about finalization of the given block. @@ -1101,7 +1145,7 @@ impl ChainSync { peer.common_number = new_common_number; } } - self.is_idle = false; + self.pending_requests.set_all(); } /// Call when a node announces a new block. @@ -1154,7 +1198,7 @@ impl ChainSync { peer.common_number = number - One::one(); } } - self.is_idle = false; + self.pending_requests.add(&who); // known block case if known || self.is_already_downloading(&hash) { @@ -1214,7 +1258,7 @@ impl ChainSync { self.peers.remove(&who); self.extra_justifications.peer_disconnected(&who); self.extra_finality_proofs.peer_disconnected(&who); - self.is_idle = false; + self.pending_requests.set_all(); } /// Restart the sync process. @@ -1224,7 +1268,7 @@ impl ChainSync { let info = self.client.info(); self.best_queued_hash = info.best_hash; self.best_queued_number = std::cmp::max(info.best_number, self.best_imported_number); - self.is_idle = false; + self.pending_requests.set_all(); debug!(target:"sync", "Restarted with {} ({})", self.best_queued_number, self.best_queued_hash); let old_peers = std::mem::replace(&mut self.peers, HashMap::new()); old_peers.into_iter().filter_map(move |(id, p)| { -- GitLab From a911c48409e50bd7f762d423ed3469bc9a9b1da7 Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Thu, 30 Apr 2020 21:55:18 +1200 Subject: [PATCH 100/167] add missing features for runtime-benchmarks (#5833) --- frame/system/Cargo.toml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frame/system/Cargo.toml b/frame/system/Cargo.toml index 210d3664ff6..0e90009a166 100644 --- a/frame/system/Cargo.toml +++ b/frame/system/Cargo.toml @@ -39,7 +39,10 @@ std = [ "sp-runtime/std", "sp-version/std", ] -runtime-benchmarks = ["sp-runtime/runtime-benchmarks"] +runtime-benchmarks = [ + "sp-runtime/runtime-benchmarks", + "frame-support/runtime-benchmarks", +] [[bench]] name = "bench" -- GitLab From ef61e5b679f6d494317eaf76841d4ed04e1aa2fa Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 30 Apr 2020 13:22:52 +0300 Subject: [PATCH 101/167] use background task to batch for optimum size (#5832) --- primitives/io/src/batch_verifier.rs | 31 ++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/primitives/io/src/batch_verifier.rs b/primitives/io/src/batch_verifier.rs index 2a2ad4dd5c5..55598217f6e 100644 --- a/primitives/io/src/batch_verifier.rs +++ b/primitives/io/src/batch_verifier.rs @@ -107,9 +107,30 @@ impl BatchVerifier { ) -> bool { if self.invalid.load(AtomicOrdering::Relaxed) { return false; } self.sr25519_items.push(Sr25519BatchItem { signature, pub_key, message }); + + if self.sr25519_items.len() >= 128 { + let items = std::mem::replace(&mut self.sr25519_items, vec![]); + if self.spawn_verification_task(move || Self::verify_sr25519_batch(items)).is_err() { + log::debug!( + target: "runtime", + "Batch-verification returns false because failed to spawn background task.", + ); + + return false; + } + } + true } + fn verify_sr25519_batch(items: Vec) -> bool { + let messages = items.iter().map(|item| &item.message[..]).collect(); + let signatures = items.iter().map(|item| &item.signature).collect(); + let pub_keys = items.iter().map(|item| &item.pub_key).collect(); + + sr25519::verify_batch(messages, signatures, pub_keys) + } + /// Verify all previously pushed signatures since last call and return /// aggregated result. #[must_use] @@ -124,18 +145,10 @@ impl BatchVerifier { self.sr25519_items.len(), ); - let messages = self.sr25519_items.iter().map(|item| &item.message[..]).collect(); - let signatures = self.sr25519_items.iter().map(|item| &item.signature).collect(); - let pub_keys = self.sr25519_items.iter().map(|item| &item.pub_key).collect(); - - if !sr25519::verify_batch(messages, signatures, pub_keys) { - self.sr25519_items.clear(); - + if !Self::verify_sr25519_batch(std::mem::replace(&mut self.sr25519_items, vec![])) { return false; } - self.sr25519_items.clear(); - if pending.len() > 0 { let (sender, receiver) = std::sync::mpsc::channel(); if self.scheduler.spawn_obj(FutureObj::new(async move { -- GitLab From 6dd3ddcf0bff33b3923bd51b7aeff92016b5b19d Mon Sep 17 00:00:00 2001 From: Alexander Popiak Date: Thu, 30 Apr 2020 13:43:58 +0200 Subject: [PATCH 102/167] Timestamp weights (#5775) * calculate weight for timestamp::set * reduce db count in kill_identity weight calculation * return weight of on_finalize in on_initialize * add comment * import Weight * address review comments to update db weight count * fix full block import test * update weights and benchmark info to latest benchmark data * update identity pallet weights and benchmark info Co-authored-by: Shawn Tabrizi --- bin/node/executor/tests/basic.rs | 8 ++- frame/identity/src/lib.rs | 107 ++++++++++++++----------------- frame/timestamp/src/lib.rs | 22 +++++-- 3 files changed, 71 insertions(+), 66 deletions(-) diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index b357e2886ca..21117f0a4f8 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -18,7 +18,7 @@ use codec::{Encode, Decode, Joiner}; use frame_support::{ StorageValue, StorageMap, traits::Currency, - weights::{GetDispatchInfo, DispatchInfo, DispatchClass, Pays}, + weights::{GetDispatchInfo, DispatchInfo, DispatchClass}, }; use sp_core::{ NeverNativeValue, map, traits::Externalities, storage::{well_known_keys, Storage}, @@ -337,8 +337,9 @@ fn full_native_block_import_works() { let events = vec![ EventRecord { phase: Phase::ApplyExtrinsic(0), + // timestamp set call with weight 9_000_000 + 2 read + 1 write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 0, class: DispatchClass::Mandatory, ..Default::default() } + DispatchInfo { weight: 9_000_000 + 2 * 60_000_000 + 1 * 200_000_000, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, @@ -390,8 +391,9 @@ fn full_native_block_import_works() { let events = vec![ EventRecord { phase: Phase::ApplyExtrinsic(0), + // timestamp set call with weight 9_000_000 + 2 read + 1 write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 0, class: DispatchClass::Mandatory, pays_fee: Pays::Yes } + DispatchInfo { weight: 9_000_000 + 2 * 60_000_000 + 1 * 200_000_000, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index ad13d536c01..fad6b0f00ba 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -472,9 +472,9 @@ mod weight_for { extra_fields: impl Into ) -> Weight { db.reads_writes(1, 1) - + 150_000_000 // constant - + 700_000 * judgements.into() // R - + 3_000_000 * extra_fields.into() // X + + 61_000_000 // constant + + 400_000 * judgements.into() // R + + 1_500_000 * extra_fields.into() // X } /// Weight calculation for `set_subs`. @@ -486,9 +486,9 @@ mod weight_for { db.reads(1) // storage-exists (`IdentityOf::contains_key`) + db.reads_writes(1, old_subs.into()) // `SubsOf::get` read + P old DB deletions + db.writes(subs.into() + 1) // S + 1 new DB writes - + 130_000_000 // constant - + 5_200_000 * old_subs.into() // P - + 7_300_000 * subs.into() // S + + 41_000_000 // constant + + 2_600_000 * old_subs.into() // P + + 3_700_000 * subs.into() // S } /// Weight calculation for `clear_identity`. @@ -499,10 +499,10 @@ mod weight_for { extra_fields: impl Into ) -> Weight { db.reads_writes(2, subs.into() + 2) // S + 2 deletions - + 160_000_000 // constant - + 500_000 * judgements.into() // R - + 5_400_000 * subs.into() // S - + 2_000_000 * extra_fields.into() // X + + 58_000_000 // constant + + 20_000 * judgements.into() // R + + 2_600_000 * subs.into() // S + + 900_000 * extra_fields.into() // X } /// Weight calculation for `request_judgement`. @@ -512,9 +512,9 @@ mod weight_for { extra_fields: impl Into ) -> Weight { db.reads_writes(2, 1) - + 180_000_000 // constant - + 950_000 * judgements.into() // R - + 3_400_000 * extra_fields.into() // X + + 60_000_000 // constant + + 510_000 * judgements.into() // R + + 1_700_000 * extra_fields.into() // X } /// Weight calculation for `cancel_request`. @@ -524,9 +524,9 @@ mod weight_for { extra_fields: impl Into ) -> Weight { db.reads_writes(1, 1) - + 150_000_000 // constant - + 600_000 * judgements.into() // R - + 3_600_000 * extra_fields.into() // X + + 52_000_000 // constant + + 400_000 * judgements.into() // R + + 1_700_000 * extra_fields.into() // X } /// Weight calculation for `provide_judgement`. @@ -536,9 +536,9 @@ mod weight_for { extra_fields: impl Into ) -> Weight { db.reads_writes(2, 1) - + 120_000_000 // constant - + 1_100_000 * judgements.into() // R - + 3_500_000 * extra_fields.into()// X + + 49_000_000 // constant + + 400_000 * judgements.into() // R + + 1_700_000 * extra_fields.into()// X } /// Weight calculation for `kill_identity`. @@ -548,12 +548,12 @@ mod weight_for { subs: impl Into + Copy, extra_fields: impl Into ) -> Weight { - db.reads_writes(3, subs.into() + 3) // 2 `take`s + S deletions + db.reads_writes(2, subs.into() + 2) // 2 `take`s + S deletions + db.reads_writes(1, 1) // balance ops - + 170_000_000 // constant - + 1_200_000 * judgements.into() // R - + 5_400_000 * subs.into() // S - + 2_300_000 * extra_fields.into() // X + + 110_000_000 // constant + + 100_000 * judgements.into() // R + + 2_600_000 * subs.into() // S + + 900_000 * extra_fields.into() // X } } @@ -598,13 +598,11 @@ decl_module! { /// - `O(R)` where `R` registrar-count (governance-bounded and code-bounded). /// - One storage mutation (codec `O(R)`). /// - One event. - /// - Benchmarks: - /// - 78.71 + R * 0.965 µs (min squares analysis) - /// - 94.28 + R * 0.991 µs (min squares analysis) + /// - Benchmark: 24.63 + R * 0.53 µs (min squares analysis) /// # #[weight = T::DbWeight::get().reads_writes(1, 1) - + 95_000_000 // constant - + 1_000_000 * T::MaxRegistrars::get() as Weight // R + + 25_000_000 // constant + + 550_000 * T::MaxRegistrars::get() as Weight // R ] fn add_registrar(origin, account: T::AccountId) -> DispatchResultWithPostInfo { T::RegistrarOrigin::try_origin(origin) @@ -620,7 +618,7 @@ decl_module! { Self::deposit_event(RawEvent::RegistrarAdded(i)); Ok(Some(T::DbWeight::get().reads_writes(1, 1) - + 95_000_000 + 1_000_000 * registrar_count as Weight).into()) + + 25_000_000 + 550_000 * registrar_count as Weight).into()) } /// Set an account's identity information and reserve the appropriate deposit. @@ -641,9 +639,7 @@ decl_module! { /// - One balance reserve operation. /// - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`). /// - One event. - /// - Benchmarks: - /// - 136.6 + R * 0.62 + X * 2.62 µs (min squares analysis) - /// - 146.2 + R * 0.372 + X * 2.98 µs (min squares analysis) + /// - Benchmark: 59.44 + R * 0.389 + X * 1.434 µs (min squares analysis) /// # #[weight = weight_for::set_identity( T::DbWeight::get(), @@ -706,9 +702,7 @@ decl_module! { /// - One storage read (codec complexity `O(P)`). /// - One storage write (codec complexity `O(S)`). /// - One storage-exists (`IdentityOf::contains_key`). - /// - Benchmarks: - /// - 115.2 + P * 5.11 + S * 6.67 µs (min squares analysis) - /// - 121 + P * 4.852 + S * 7.111 µs (min squares analysis) + /// - Benchmark: 39.43 + P * 2.522 + S * 3.698 µs (min squares analysis) /// # #[weight = weight_for::set_subs( T::DbWeight::get(), @@ -771,8 +765,8 @@ decl_module! { /// - `2` storage reads and `S + 2` storage deletions. /// - One event. /// - Benchmarks: - /// - 152.3 + R * 0.306 + S * 4.967 + X * 1.697 µs (min squares analysis) - /// - 139.5 + R * 0.466 + S * 5.304 + X * 1.895 µs (min squares analysis) + /// - 57.36 + R * 0.019 + S * 2.577 + X * 0.874 µs (median slopes analysis) + /// - 57.06 + R * 0.006 + S * 2.579 + X * 0.878 µs (min squares analysis) /// # #[weight = weight_for::clear_identity( T::DbWeight::get(), @@ -825,9 +819,7 @@ decl_module! { /// - One balance-reserve operation. /// - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`. /// - One event. - /// - Benchmarks: - /// - 154 + R * 0.932 + X * 3.302 µs (min squares analysis) - /// - 172.9 + R * 0.69 + X * 3.304 µs (min squares analysis) + /// - Benchmark: 59.02 + R * 0.488 + X * 1.7 µs (min squares analysis) /// # #[weight = weight_for::request_judgement( T::DbWeight::get(), @@ -882,9 +874,7 @@ decl_module! { /// - One balance-reserve operation. /// - One storage mutation `O(R + X)`. /// - One event. - /// - Benchmarks: - /// - 135.3 + R * 0.574 + X * 3.394 µs (min squares analysis) - /// - 144.3 + R * 0.316 + X * 3.53 µs (min squares analysis) + /// - Benchmark: 50.05 + R * 0.321 + X * 1.688 µs (min squares analysis) /// # #[weight = weight_for::cancel_request( T::DbWeight::get(), @@ -924,12 +914,11 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. - /// - Benchmarks: - /// - 23.81 + R * 0.774 µs (min squares analysis) + /// - Benchmark: 8.848 + R * 0.425 µs (min squares analysis) /// # #[weight = T::DbWeight::get().reads_writes(1, 1) - + 24_000_000 // constant - + 780_000 * T::MaxRegistrars::get() as Weight // R + + 9_000_000 // constant + + 430_000 * T::MaxRegistrars::get() as Weight // R ] fn set_fee(origin, #[compact] index: RegistrarIndex, @@ -945,7 +934,7 @@ decl_module! { Ok(rs.len()) })?; Ok(Some(T::DbWeight::get().reads_writes(1, 1) - + 24_000_000 + 780_000 * registrars as Weight // R + + 9_000_000 + 430_000 * registrars as Weight // R ).into()) } @@ -960,11 +949,11 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. - /// - Benchmark: 24.59 + R * 0.832 µs (min squares analysis) + /// - Benchmark: 10.05 + R * 0.438 µs (min squares analysis) /// # #[weight = T::DbWeight::get().reads_writes(1, 1) - + 25_000_000 // constant - + 850_000 * T::MaxRegistrars::get() as Weight // R + + 10_100_000 // constant + + 440_000 * T::MaxRegistrars::get() as Weight // R ] fn set_account_id(origin, #[compact] index: RegistrarIndex, @@ -980,7 +969,7 @@ decl_module! { Ok(rs.len()) })?; Ok(Some(T::DbWeight::get().reads_writes(1, 1) - + 25_000_000 + 850_000 * registrars as Weight // R + + 10_100_000 + 440_000 * registrars as Weight // R ).into()) } @@ -995,11 +984,11 @@ decl_module! { /// # /// - `O(R)`. /// - One storage mutation `O(R)`. - /// - Benchmark: 22.85 + R * 0.853 µs (min squares analysis) + /// - Benchmark: 8.985 + R * 0.413 µs (min squares analysis) /// # #[weight = T::DbWeight::get().reads_writes(1, 1) - + 23_000_000 // constant - + 860_000 * T::MaxRegistrars::get() as Weight // R + + 9_000_000 // constant + + 420_000 * T::MaxRegistrars::get() as Weight // R ] fn set_fields(origin, #[compact] index: RegistrarIndex, @@ -1015,7 +1004,7 @@ decl_module! { Ok(rs.len()) })?; Ok(Some(T::DbWeight::get().reads_writes(1, 1) - + 23_000_000 + 860_000 * registrars as Weight // R + + 9_000_000 + 420_000 * registrars as Weight // R ).into()) } @@ -1037,7 +1026,7 @@ decl_module! { /// - Up to one account-lookup operation. /// - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`. /// - One event. - /// - Benchmark: 110.7 + R * 1.066 + X * 3.402 µs (min squares analysis) + /// - Benchmark: 47.77 + R * 0.336 + X * 1.664 µs (min squares analysis) /// # #[weight = weight_for::provide_judgement( T::DbWeight::get(), @@ -1096,7 +1085,7 @@ decl_module! { /// - One balance-reserve operation. /// - `S + 2` storage mutations. /// - One event. - /// - Benchmark: 167.4 + R * 1.107 + S * 5.343 + X * 2.294 µs (min squares analysis) + /// - Benchmark: 101.9 + R * 0.091 + S * 2.589 + X * 0.871 µs (min squares analysis) /// # #[weight = weight_for::kill_identity( T::DbWeight::get(), diff --git a/frame/timestamp/src/lib.rs b/frame/timestamp/src/lib.rs index a2a6762464e..31021e08878 100644 --- a/frame/timestamp/src/lib.rs +++ b/frame/timestamp/src/lib.rs @@ -100,7 +100,7 @@ use frame_support::debug; use frame_support::{ Parameter, decl_storage, decl_module, traits::{Time, UnixTime, Get}, - weights::{DispatchClass}, + weights::{DispatchClass, Weight}, }; use sp_runtime::{ RuntimeString, @@ -150,15 +150,22 @@ decl_module! { /// /// # /// - `O(T)` where `T` complexity of `on_timestamp_set` - /// - 2 storage mutations (codec `O(1)`). + /// - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in `on_finalize`) /// - 1 event handler `on_timestamp_set` `O(T)`. + /// - Benchmark: 8.523 (min squares analysis) + /// - NOTE: This benchmark was done for a runtime with insignificant `on_timestamp_set` handlers. + /// New benchmarking is needed when adding new handlers. /// # - #[weight = (0, DispatchClass::Mandatory)] + #[weight = ( + T::DbWeight::get().reads_writes(2, 1) + 9_000_000, + DispatchClass::Mandatory + )] fn set(origin, #[compact] now: T::Moment) { ensure_none(origin)?; assert!(!::DidUpdate::exists(), "Timestamp must be updated only once in the block"); + let prev = Self::now(); assert!( - Self::now().is_zero() || now >= Self::now() + T::MinimumPeriod::get(), + prev.is_zero() || now >= prev + T::MinimumPeriod::get(), "Timestamp must increment by at least between sequential blocks" ); ::Now::put(now); @@ -167,9 +174,16 @@ decl_module! { >::on_timestamp_set(now); } + /// dummy `on_initialize` to return the weight used in `on_finalize`. + fn on_initialize() -> Weight { + // weight of `on_finalize` + 6_000_000 + } + /// # /// - `O(1)` /// - 1 storage deletion (codec `O(1)`). + /// - Benchmark: 5.105 µs (min squares analysis) /// # fn on_finalize() { assert!(::DidUpdate::take(), "Timestamp must be updated once in the block"); -- GitLab From 58fd9524340bb48531ff4d577d8a2c5b64d8bd02 Mon Sep 17 00:00:00 2001 From: cheme Date: Thu, 30 Apr 2020 13:59:21 +0200 Subject: [PATCH 103/167] Avoid changing overlay committed layer. (#5839) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Avoid changing overlay committed layer. * basic test * Add some tx in the test. * only update from backend value on missing entry in both layer. deleted entry is replace by empty vec. * test and review changes * additional test and review change * remove test on changing existing value, it does not always panic depending on existing content * Update primitives/state-machine/src/overlayed_changes.rs * Update primitives/state-machine/src/overlayed_changes.rs Co-authored-by: Bastian Köcher --- primitives/state-machine/src/basic.rs | 5 +- primitives/state-machine/src/ext.rs | 31 +++---- primitives/state-machine/src/lib.rs | 92 +++++++++++++++++++ .../state-machine/src/overlayed_changes.rs | 36 +++++++- 4 files changed, 139 insertions(+), 25 deletions(-) diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index a5d573f5145..c1745c03daa 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -262,9 +262,8 @@ impl Externalities for BasicExternalities { key: Vec, value: Vec, ) { - let previous = self.storage(&key).unwrap_or_default(); - let new = crate::ext::append_to_storage(previous, value).expect("Failed to append to storage"); - self.place_storage(key.clone(), Some(new)); + let previous = self.inner.top.entry(key).or_default(); + crate::ext::append_to_storage(previous, value).expect("Failed to append to storage"); } fn chain_id(&self) -> u64 { 42 } diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index a92a10bf0e9..902763e6e9c 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -423,16 +423,12 @@ where let _guard = sp_panic_handler::AbortGuard::force_abort(); self.mark_dirty(); - let current_value = self.overlay - .value_mut(&key) - .map(|v| v.take()) - .unwrap_or_else(|| self.backend.storage(&key).expect(EXT_NOT_ALLOWED_TO_FAIL)) - .unwrap_or_default(); - - self.overlay.set_storage( - key, - Some(append_to_storage(current_value, value).expect(EXT_NOT_ALLOWED_TO_FAIL)), + let backend = &mut self.backend; + let current_value = self.overlay.value_mut_or_insert_with( + &key, + || backend.storage(&key).expect(EXT_NOT_ALLOWED_TO_FAIL).unwrap_or_default() ); + append_to_storage(current_value, value).expect(EXT_NOT_ALLOWED_TO_FAIL); } fn chain_id(&self) -> u64 { @@ -589,14 +585,14 @@ fn extract_length_data(data: &[u8]) -> Result<(u32, usize, usize), &'static str> } pub fn append_to_storage( - mut self_encoded: Vec, + self_encoded: &mut Vec, value: Vec, -) -> Result, &'static str> { +) -> Result<(), &'static str> { // No data present, just encode the given input data. if self_encoded.is_empty() { - Compact::from(1u32).encode_to(&mut self_encoded); + Compact::from(1u32).encode_to(self_encoded); self_encoded.extend(value); - return Ok(self_encoded); + return Ok(()); } let (new_len, encoded_len, encoded_new_len) = extract_length_data(&self_encoded)?; @@ -612,10 +608,10 @@ pub fn append_to_storage( // If old and new encoded len is equal, we don't need to copy the // already encoded data. if encoded_len == encoded_new_len { - replace_len(&mut self_encoded); - append_new_elems(&mut self_encoded); + replace_len(self_encoded); + append_new_elems(self_encoded); - Ok(self_encoded) + Ok(()) } else { let size = encoded_new_len + self_encoded.len() - encoded_len; @@ -627,8 +623,9 @@ pub fn append_to_storage( replace_len(&mut res); res[encoded_new_len..size].copy_from_slice(&self_encoded[encoded_len..]); append_new_elems(&mut res); + *self_encoded = res; - Ok(res) + Ok(()) } } diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index aa3a3ad5739..0577afea004 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -1060,6 +1060,98 @@ mod tests { ); } + #[test] + fn append_storage_works() { + let reference_data = vec![ + b"data1".to_vec(), + b"2".to_vec(), + b"D3".to_vec(), + b"d4".to_vec(), + ]; + let key = b"key".to_vec(); + let mut state = new_in_mem::(); + let backend = state.as_trie_backend().unwrap(); + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let mut cache = StorageTransactionCache::default(); + { + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + + ext.storage_append(key.clone(), reference_data[0].encode()); + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![reference_data[0].clone()].encode()), + ); + } + overlay.commit_prospective(); + { + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + + for i in reference_data.iter().skip(1) { + ext.storage_append(key.clone(), i.encode()); + } + assert_eq!( + ext.storage(key.as_slice()), + Some(reference_data.encode()), + ); + } + overlay.discard_prospective(); + { + let ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![reference_data[0].clone()].encode()), + ); + } + } + + #[test] + fn remove_then_append() { + let key = b"key".to_vec(); + let mut state = new_in_mem::(); + let backend = state.as_trie_backend().unwrap(); + let mut overlay = OverlayedChanges::default(); + let mut offchain_overlay = OffchainOverlayedChanges::default(); + let mut cache = StorageTransactionCache::default(); + + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + + ext.clear_storage(key.as_slice()); + ext.storage_append(key.clone(), b"Item".to_vec().encode()); + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![b"Item".to_vec()].encode()), + ); + } + #[test] fn prove_read_and_proof_check_works() { let child_info = ChildInfo::new_default(b"sub1"); diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index f5b3c88ac81..c98da11c27d 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -223,11 +223,37 @@ impl OverlayedChanges { }) } - /// Returns mutable reference to either commited or propsective value. - pub fn value_mut(&mut self, key: &[u8]) -> Option<&mut Option> { - // not using map because of double borrow inside closure - if let Some(entry) = self.prospective.top.get_mut(key) { return Some(&mut entry.value) } - return self.committed.top.get_mut(key).map(|entry| &mut entry.value); + /// Returns mutable reference to current changed value (prospective). + /// If there is no value in the overlay, the default callback is used to initiate + /// the value. + /// Warning this function register a change, so the mutable reference MUST be modified. + #[must_use = "A change was registered, so this value MUST be modified."] + pub fn value_mut_or_insert_with( + &mut self, + key: &[u8], + init: impl Fn() -> StorageValue, + ) -> &mut StorageValue { + let extrinsic_index = self.extrinsic_index(); + let committed = &self.committed.top; + + let mut entry = self.prospective.top.entry(key.to_vec()) + .or_insert_with(|| { + if let Some(overlay_state) = committed.get(key).cloned() { + overlay_state + } else { + OverlayedValue { value: Some(init()), ..Default::default() } + } + }); + + //if was deleted initialise back with empty vec + if entry.value.is_none() { + entry.value = Some(Default::default()); + } + if let Some(extrinsic) = extrinsic_index { + entry.extrinsics.get_or_insert_with(Default::default) + .insert(extrinsic); + } + entry.value.as_mut().expect("Initialized above; qed") } /// Returns a double-Option: None if the key is unknown (i.e. and the query should be referred -- GitLab From 58e3b3717de726714c948bef36e1aea1bd0751db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 30 Apr 2020 14:01:48 +0200 Subject: [PATCH 104/167] We should panic on division by zero (#5844) --- primitives/arithmetic/src/fixed64.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/primitives/arithmetic/src/fixed64.rs b/primitives/arithmetic/src/fixed64.rs index 63a69e66e7c..819982aa502 100644 --- a/primitives/arithmetic/src/fixed64.rs +++ b/primitives/arithmetic/src/fixed64.rs @@ -167,8 +167,7 @@ impl ops::Div for Fixed64 { fn div(self, rhs: Self) -> Self::Output { if rhs.0 == 0 { - let zero = 0; - return Fixed64::from_parts( self.0 / zero); + panic!("attempt to divide by zero"); } let (n, d) = if rhs.0 < 0 { (-self.0, rhs.0.abs() as u64) -- GitLab From f7ae51b7b50a39715a548c383186c22698421862 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 30 Apr 2020 14:53:04 +0200 Subject: [PATCH 105/167] Fix purge-chain and print DB info on startup (#5840) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * purge-chain accepts --db option * print DB info on startup * Small refactoring * Added back &self * Add DatabaseParams for PurgeChain, ImportParams and ExportBlocks * Don't force default value * Remove unused fields * Update client/cli/src/commands/export_blocks_cmd.rs * Fix stuff Co-authored-by: Cecile Tonglet Co-authored-by: Bastian Köcher --- client/cli/src/commands/export_blocks_cmd.rs | 12 ++++- client/cli/src/commands/mod.rs | 6 +++ client/cli/src/commands/purge_chain_cmd.rs | 23 +++++---- client/cli/src/config.rs | 52 ++++++++++++-------- client/cli/src/params/database_params.rs | 47 ++++++++++++++++++ client/cli/src/params/import_params.rs | 46 +++++------------ client/cli/src/params/mod.rs | 4 +- client/cli/src/params/shared_params.rs | 23 --------- client/cli/src/runner.rs | 4 ++ client/db/src/lib.rs | 12 +++++ 10 files changed, 139 insertions(+), 90 deletions(-) create mode 100644 client/cli/src/params/database_params.rs diff --git a/client/cli/src/commands/export_blocks_cmd.rs b/client/cli/src/commands/export_blocks_cmd.rs index 297d83506be..4f7cf0f48c0 100644 --- a/client/cli/src/commands/export_blocks_cmd.rs +++ b/client/cli/src/commands/export_blocks_cmd.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use crate::error; -use crate::params::{BlockNumber, PruningParams, SharedParams}; +use crate::params::{BlockNumber, DatabaseParams, PruningParams, SharedParams}; use crate::CliConfiguration; use log::info; use sc_service::{ @@ -48,7 +48,7 @@ pub struct ExportBlocksCmd { pub to: Option, /// Use binary output rather than JSON. - #[structopt(long = "binary", value_name = "BOOL", parse(try_from_str), default_value("false"))] + #[structopt(long)] pub binary: bool, #[allow(missing_docs)] @@ -58,6 +58,10 @@ pub struct ExportBlocksCmd { #[allow(missing_docs)] #[structopt(flatten)] pub pruning_params: PruningParams, + + #[allow(missing_docs)] + #[structopt(flatten)] + pub database_params: DatabaseParams, } impl ExportBlocksCmd { @@ -103,4 +107,8 @@ impl CliConfiguration for ExportBlocksCmd { fn pruning_params(&self) -> Option<&PruningParams> { Some(&self.pruning_params) } + + fn database_params(&self) -> Option<&DatabaseParams> { + Some(&self.database_params) + } } diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index 3e8c2166b20..58ed2b74998 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -150,6 +150,12 @@ macro_rules! substrate_cli_subcommands { } } + fn database_params(&self) -> Option<&$crate::DatabaseParams> { + match self { + $($enum::$variant(cmd) => cmd.database_params()),* + } + } + fn base_path(&self) -> $crate::Result<::std::option::Option<::std::path::PathBuf>> { match self { $($enum::$variant(cmd) => cmd.base_path()),* diff --git a/client/cli/src/commands/purge_chain_cmd.rs b/client/cli/src/commands/purge_chain_cmd.rs index 3be2883bd50..b3fb0de2470 100644 --- a/client/cli/src/commands/purge_chain_cmd.rs +++ b/client/cli/src/commands/purge_chain_cmd.rs @@ -15,9 +15,9 @@ // along with Substrate. If not, see . use crate::error; -use crate::params::SharedParams; +use crate::params::{DatabaseParams, SharedParams}; use crate::CliConfiguration; -use sc_service::{config::DatabaseConfig, Configuration}; +use sc_service::Configuration; use std::fmt::Debug; use std::fs; use std::io::{self, Write}; @@ -33,18 +33,19 @@ pub struct PurgeChainCmd { #[allow(missing_docs)] #[structopt(flatten)] pub shared_params: SharedParams, + + #[allow(missing_docs)] + #[structopt(flatten)] + pub database_params: DatabaseParams, } impl PurgeChainCmd { /// Run the purge command pub fn run(&self, config: Configuration) -> error::Result<()> { - let db_path = match &config.database { - DatabaseConfig::RocksDb { path, .. } => path, - _ => { - eprintln!("Cannot purge custom database implementation"); - return Ok(()); - } - }; + let db_path = config.database.path() + .ok_or_else(|| + error::Error::Input("Cannot purge custom database implementation".into()) + )?; if !self.yes { print!("Are you sure to remove {:?}? [y/N]: ", &db_path); @@ -81,4 +82,8 @@ impl CliConfiguration for PurgeChainCmd { fn shared_params(&self) -> &SharedParams { &self.shared_params } + + fn database_params(&self) -> Option<&DatabaseParams> { + Some(&self.database_params) + } } diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 84c2338dcb8..5c4a84247b0 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -16,20 +16,20 @@ //! Configuration trait for a CLI based on substrate +use crate::arg_enums::Database; use crate::error::Result; use crate::{ - init_logger, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams, + init_logger, DatabaseParams, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams, OffchainWorkerParams, PruningParams, SharedParams, SubstrateCli, }; -use crate::arg_enums::Database; use app_dirs::{AppDataType, AppInfo}; use names::{Generator, Name}; +use sc_client_api::execution_extensions::ExecutionStrategies; use sc_service::config::{ - WasmExecutionMethod, Role, OffchainWorkerConfig, Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration, - NodeKeyConfig, PrometheusConfig, PruningMode, TelemetryEndpoints, TransactionPoolOptions, TaskType + NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, Role, TaskType, + TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod, }; -use sc_client_api::execution_extensions::ExecutionStrategies; use sc_service::{ChainSpec, TracingReceiver}; use std::future::Future; use std::net::SocketAddr; @@ -75,8 +75,12 @@ pub trait CliConfiguration: Sized { /// Get the NodeKeyParams for this object fn node_key_params(&self) -> Option<&NodeKeyParams> { - self.network_params() - .map(|x| &x.node_key_params) + self.network_params().map(|x| &x.node_key_params) + } + + /// Get the DatabaseParams for this object + fn database_params(&self) -> Option<&DatabaseParams> { + self.import_params().map(|x| &x.database_params) } /// Get the base path of the configuration (if any) @@ -152,33 +156,39 @@ pub trait CliConfiguration: Sized { /// Get the database cache size. /// - /// By default this is retrieved from `ImportParams` if it is available. Otherwise its `None`. + /// By default this is retrieved from `DatabaseParams` if it is available. Otherwise its `None`. fn database_cache_size(&self) -> Result> { - Ok(self.import_params() + Ok(self.database_params() .map(|x| x.database_cache_size()) .unwrap_or(Default::default())) } /// Get the database backend variant. /// - /// By default this is retrieved from `ImportParams` if it is available. Otherwise its `None`. + /// By default this is retrieved from `DatabaseParams` if it is available. Otherwise its `None`. fn database(&self) -> Result> { - Ok(self.import_params().map(|x| x.database())) + Ok(self.database_params().and_then(|x| x.database())) } - /// Get the database configuration. - /// - /// By default this is retrieved from `SharedParams` - fn database_config(&self, + /// Get the database configuration object for the parameters provided + fn database_config( + &self, base_path: &PathBuf, cache_size: usize, database: Database, ) -> Result { - Ok(self.shared_params().database_config( - base_path, - cache_size, - database, - )) + Ok(match database { + Database::RocksDb => DatabaseConfig::RocksDb { + path: base_path.join("db"), + cache_size, + }, + Database::SubDb => DatabaseConfig::SubDb { + path: base_path.join("subdb"), + }, + Database::ParityDb => DatabaseConfig::ParityDb { + path: base_path.join("paritydb"), + }, + }) } /// Get the state cache size. @@ -313,7 +323,7 @@ pub trait CliConfiguration: Sized { fn offchain_worker(&self, role: &Role) -> Result { self.offchain_worker_params() .map(|x| x.offchain_worker(role)) - .unwrap_or_else(|| { Ok(OffchainWorkerConfig::default()) }) + .unwrap_or_else(|| Ok(OffchainWorkerConfig::default())) } /// Returns `Ok(true)` if authoring should be forced diff --git a/client/cli/src/params/database_params.rs b/client/cli/src/params/database_params.rs new file mode 100644 index 00000000000..dd0d1686e09 --- /dev/null +++ b/client/cli/src/params/database_params.rs @@ -0,0 +1,47 @@ +// Copyright 2018-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use crate::arg_enums::Database; +use structopt::StructOpt; + +/// Parameters for block import. +#[derive(Debug, StructOpt, Clone)] +pub struct DatabaseParams { + /// Select database backend to use. + #[structopt( + long, + alias = "db", + value_name = "DB", + case_insensitive = true, + )] + pub database: Option, + + /// Limit the memory the database cache can use. + #[structopt(long = "db-cache", value_name = "MiB")] + pub database_cache_size: Option, +} + +impl DatabaseParams { + /// Limit the memory the database cache can use. + pub fn database(&self) -> Option { + self.database + } + + /// Limit the memory the database cache can use. + pub fn database_cache_size(&self) -> Option { + self.database_cache_size + } +} diff --git a/client/cli/src/params/import_params.rs b/client/cli/src/params/import_params.rs index 95b04b039a4..c5acc6bd814 100644 --- a/client/cli/src/params/import_params.rs +++ b/client/cli/src/params/import_params.rs @@ -15,14 +15,13 @@ // along with Substrate. If not, see . use crate::arg_enums::{ - ExecutionStrategy, TracingReceiver, WasmExecutionMethod, DEFAULT_EXECUTION_BLOCK_CONSTRUCTION, - DEFAULT_EXECUTION_IMPORT_BLOCK, DEFAULT_EXECUTION_OFFCHAIN_WORKER, DEFAULT_EXECUTION_OTHER, - DEFAULT_EXECUTION_SYNCING, Database, + ExecutionStrategy, TracingReceiver, WasmExecutionMethod, + DEFAULT_EXECUTION_BLOCK_CONSTRUCTION, DEFAULT_EXECUTION_IMPORT_BLOCK, + DEFAULT_EXECUTION_OFFCHAIN_WORKER, DEFAULT_EXECUTION_OTHER, DEFAULT_EXECUTION_SYNCING, }; +use crate::params::DatabaseParams; use crate::params::PruningParams; -use crate::Result; use sc_client_api::execution_extensions::ExecutionStrategies; -use sc_service::{PruningMode, Role}; use structopt::StructOpt; /// Parameters for block import. @@ -32,6 +31,10 @@ pub struct ImportParams { #[structopt(flatten)] pub pruning_params: PruningParams, + #[allow(missing_docs)] + #[structopt(flatten)] + pub database_params: DatabaseParams, + /// Force start with unsafe pruning settings. /// /// When running as a validator it is highly recommended to disable state @@ -54,22 +57,12 @@ pub struct ImportParams { #[structopt(flatten)] pub execution_strategies: ExecutionStrategiesParams, - /// Select database backend to use. + /// Specify the state cache size. #[structopt( - long = "database", - alias = "db", - value_name = "DB", - case_insensitive = true, - default_value = "RocksDb" + long = "state-cache-size", + value_name = "Bytes", + default_value = "67108864" )] - pub database: Database, - - /// Limit the memory the database cache can use. - #[structopt(long = "db-cache", value_name = "MiB")] - pub database_cache_size: Option, - - /// Specify the state cache size. - #[structopt(long = "state-cache-size", value_name = "Bytes", default_value = "67108864")] pub state_cache_size: usize, /// Comma separated list of targets for tracing. @@ -132,21 +125,6 @@ impl ImportParams { other: exec_all_or(exec.execution_other, DEFAULT_EXECUTION_OTHER), } } - - /// Get the pruning mode from the parameters - pub fn pruning(&self, unsafe_pruning: bool, role: &Role) -> Result { - self.pruning_params.pruning(unsafe_pruning, role) - } - - /// Limit the memory the database cache can use. - pub fn database_cache_size(&self) -> Option { - self.database_cache_size - } - - /// Limit the memory the database cache can use. - pub fn database(&self) -> Database { - self.database - } } /// Execution strategies parameters. diff --git a/client/cli/src/params/mod.rs b/client/cli/src/params/mod.rs index af94a0c6f6b..79b4e8270ab 100644 --- a/client/cli/src/params/mod.rs +++ b/client/cli/src/params/mod.rs @@ -14,18 +14,20 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +mod database_params; mod import_params; mod keystore_params; mod network_params; mod node_key_params; +mod offchain_worker_params; mod pruning_params; mod shared_params; mod transaction_pool_params; -mod offchain_worker_params; use std::fmt::Debug; use std::str::FromStr; +pub use crate::params::database_params::*; pub use crate::params::import_params::*; pub use crate::params::keystore_params::*; pub use crate::params::network_params::*; diff --git a/client/cli/src/params/shared_params.rs b/client/cli/src/params/shared_params.rs index d6dd1bd9c16..68c9a304535 100644 --- a/client/cli/src/params/shared_params.rs +++ b/client/cli/src/params/shared_params.rs @@ -14,10 +14,8 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use sc_service::config::DatabaseConfig; use std::path::PathBuf; use structopt::StructOpt; -use crate::arg_enums::Database; /// Shared parameters used by all `CoreParams`. #[derive(Debug, StructOpt, Clone)] @@ -72,27 +70,6 @@ impl SharedParams { } } - /// Get the database configuration object for the parameters provided - pub fn database_config( - &self, - base_path: &PathBuf, - cache_size: usize, - database: Database, - ) -> DatabaseConfig { - match database { - Database::RocksDb => DatabaseConfig::RocksDb { - path: base_path.join("db"), - cache_size, - }, - Database::SubDb => DatabaseConfig::SubDb { - path: base_path.join("subdb"), - }, - Database::ParityDb => DatabaseConfig::ParityDb { - path: base_path.join("paritydb"), - }, - } - } - /// Get the filters for the logging pub fn log_filters(&self) -> Option { self.log.clone() diff --git a/client/cli/src/runner.rs b/client/cli/src/runner.rs index ed0d3ef7d7a..bd3d2024e68 100644 --- a/client/cli/src/runner.rs +++ b/client/cli/src/runner.rs @@ -164,6 +164,10 @@ impl Runner { info!("📋 Chain specification: {}", self.config.chain_spec.name()); info!("🏷 Node name: {}", self.config.network.node_name); info!("👤 Role: {}", self.config.display_role()); + info!("💾 Database: {} at {}", + self.config.database, + self.config.database.path().map_or_else(|| "".to_owned(), |p| p.display().to_string()) + ); info!("⛓ Native runtime: {}", runtime_version); match self.config.role { diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index b9ca63b1171..a7246f398df 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -317,6 +317,18 @@ impl DatabaseSettingsSrc { } } +impl std::fmt::Display for DatabaseSettingsSrc { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let name = match self { + DatabaseSettingsSrc::RocksDb { .. } => "RocksDb", + DatabaseSettingsSrc::ParityDb { .. } => "ParityDb", + DatabaseSettingsSrc::SubDb { .. } => "SubDb", + DatabaseSettingsSrc::Custom(_) => "Custom", + }; + write!(f, "{}", name) + } +} + pub(crate) mod columns { pub const META: u32 = crate::utils::COLUMN_META; pub const STATE: u32 = 1; -- GitLab From fb7f9cbe8b1146b72cd77b6dd7c7f3a4c47cdfed Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 30 Apr 2020 15:53:36 +0300 Subject: [PATCH 106/167] Use mem::take instead of mem::replace where appropriate (#5846) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * replace replace with take * Update client/api/src/cht.rs Co-authored-by: Bastian Köcher * Update client/api/src/cht.rs Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- client/api/src/cht.rs | 4 ++-- client/consensus/babe/src/tests.rs | 6 +++--- client/consensus/manual-seal/src/lib.rs | 2 +- client/finality-grandpa/src/finality_proof.rs | 2 +- client/network/src/protocol/sync.rs | 4 ++-- client/state-db/src/pruning.rs | 2 +- primitives/core/src/offchain/testing.rs | 2 +- primitives/io/src/batch_verifier.rs | 8 ++++---- primitives/state-machine/src/basic.rs | 4 ++-- primitives/state-machine/src/overlayed_changes.rs | 4 ++-- utils/fork-tree/src/lib.rs | 4 ++-- 11 files changed, 21 insertions(+), 21 deletions(-) diff --git a/client/api/src/cht.rs b/client/api/src/cht.rs index 3eba63e7026..ecf52d0bab4 100644 --- a/client/api/src/cht.rs +++ b/client/api/src/cht.rs @@ -232,7 +232,7 @@ pub fn for_each_cht_group( functor_param = functor( functor_param, current_cht_num, - ::std::mem::replace(&mut current_cht_blocks, Vec::new()), + std::mem::take(&mut current_cht_blocks), )?; } @@ -244,7 +244,7 @@ pub fn for_each_cht_group( functor( functor_param, current_cht_num, - ::std::mem::replace(&mut current_cht_blocks, Vec::new()), + std::mem::take(&mut current_cht_blocks), )?; } diff --git a/client/consensus/babe/src/tests.rs b/client/consensus/babe/src/tests.rs index 89514906be4..f933251d18e 100644 --- a/client/consensus/babe/src/tests.rs +++ b/client/consensus/babe/src/tests.rs @@ -436,7 +436,7 @@ fn authoring_blocks() { #[should_panic] fn rejects_missing_inherent_digest() { run_one_test(|header: &mut TestHeader, stage| { - let v = std::mem::replace(&mut header.digest_mut().logs, vec![]); + let v = std::mem::take(&mut header.digest_mut().logs); header.digest_mut().logs = v.into_iter() .filter(|v| stage == Stage::PostSeal || v.as_babe_pre_digest().is_none()) .collect() @@ -447,7 +447,7 @@ fn rejects_missing_inherent_digest() { #[should_panic] fn rejects_missing_seals() { run_one_test(|header: &mut TestHeader, stage| { - let v = std::mem::replace(&mut header.digest_mut().logs, vec![]); + let v = std::mem::take(&mut header.digest_mut().logs); header.digest_mut().logs = v.into_iter() .filter(|v| stage == Stage::PreSeal || v.as_babe_seal().is_none()) .collect() @@ -458,7 +458,7 @@ fn rejects_missing_seals() { #[should_panic] fn rejects_missing_consensus_digests() { run_one_test(|header: &mut TestHeader, stage| { - let v = std::mem::replace(&mut header.digest_mut().logs, vec![]); + let v = std::mem::take(&mut header.digest_mut().logs); header.digest_mut().logs = v.into_iter() .filter(|v| stage == Stage::PostSeal || v.as_next_epoch_descriptor().is_none()) .collect() diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index caddb47d3c8..b2020acb1f7 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -231,7 +231,7 @@ mod tests { .map(move |_| { // we're only going to submit one tx so this fn will only be called once. let mut_sender = Arc::get_mut(&mut sender).unwrap(); - let sender = std::mem::replace(mut_sender, None); + let sender = std::mem::take(mut_sender); EngineCommand::SealNewBlock { create_empty: false, finalize: true, diff --git a/client/finality-grandpa/src/finality_proof.rs b/client/finality-grandpa/src/finality_proof.rs index 4035854a380..0eef20d813f 100644 --- a/client/finality-grandpa/src/finality_proof.rs +++ b/client/finality-grandpa/src/finality_proof.rs @@ -341,7 +341,7 @@ pub(crate) fn prove_finality, J>( let proof_fragment = FinalityProofFragment { block: current, justification, - unknown_headers: ::std::mem::replace(&mut unknown_headers, Vec::new()), + unknown_headers: ::std::mem::take(&mut unknown_headers), authorities_proof: new_authorities_proof, }; diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index 1aba1bb66f6..4e9347001d9 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -122,7 +122,7 @@ impl PendingRequests { } fn take(&mut self) -> PendingRequests { - std::mem::replace(self, Default::default()) + std::mem::take(self) } fn set_all(&mut self) { @@ -1270,7 +1270,7 @@ impl ChainSync { self.best_queued_number = std::cmp::max(info.best_number, self.best_imported_number); self.pending_requests.set_all(); debug!(target:"sync", "Restarted with {} ({})", self.best_queued_number, self.best_queued_hash); - let old_peers = std::mem::replace(&mut self.peers, HashMap::new()); + let old_peers = std::mem::take(&mut self.peers); old_peers.into_iter().filter_map(move |(id, p)| { match self.new_peer(id.clone(), p.best_hash, p.best_number) { Ok(None) => None, diff --git a/client/state-db/src/pruning.rs b/client/state-db/src/pruning.rs index 1d15e617a18..6921beea916 100644 --- a/client/state-db/src/pruning.rs +++ b/client/state-db/src/pruning.rs @@ -169,7 +169,7 @@ impl RefWindow { } else { Default::default() }; - let deleted = ::std::mem::replace(&mut commit.data.deleted, Vec::new()); + let deleted = ::std::mem::take(&mut commit.data.deleted); let journal_record = JournalRecord { hash: hash.clone(), inserted, diff --git a/primitives/core/src/offchain/testing.rs b/primitives/core/src/offchain/testing.rs index d93528093fc..b889374a47c 100644 --- a/primitives/core/src/offchain/testing.rs +++ b/primitives/core/src/offchain/testing.rs @@ -105,7 +105,7 @@ impl OffchainState { fn fulfill_expected(&mut self, id: u16) { if let Some(mut req) = self.expected_requests.remove(&RequestId(id)) { let response = req.response.take().expect("Response checked while added."); - let headers = std::mem::replace(&mut req.response_headers, vec![]); + let headers = std::mem::take(&mut req.response_headers); self.fulfill_pending_request(id, req, response, headers); } } diff --git a/primitives/io/src/batch_verifier.rs b/primitives/io/src/batch_verifier.rs index 55598217f6e..ab2ee629d32 100644 --- a/primitives/io/src/batch_verifier.rs +++ b/primitives/io/src/batch_verifier.rs @@ -109,13 +109,13 @@ impl BatchVerifier { self.sr25519_items.push(Sr25519BatchItem { signature, pub_key, message }); if self.sr25519_items.len() >= 128 { - let items = std::mem::replace(&mut self.sr25519_items, vec![]); + let items = std::mem::take(&mut self.sr25519_items); if self.spawn_verification_task(move || Self::verify_sr25519_batch(items)).is_err() { log::debug!( target: "runtime", "Batch-verification returns false because failed to spawn background task.", ); - + return false; } } @@ -135,7 +135,7 @@ impl BatchVerifier { /// aggregated result. #[must_use] pub fn verify_and_clear(&mut self) -> bool { - let pending = std::mem::replace(&mut self.pending_tasks, vec![]); + let pending = std::mem::take(&mut self.pending_tasks); let started = std::time::Instant::now(); log::trace!( @@ -145,7 +145,7 @@ impl BatchVerifier { self.sr25519_items.len(), ); - if !Self::verify_sr25519_batch(std::mem::replace(&mut self.sr25519_items, vec![])) { + if !Self::verify_sr25519_batch(std::mem::take(&mut self.sr25519_items)) { return false; } diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index c1745c03daa..4eb724ce689 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -82,8 +82,8 @@ impl BasicExternalities { ) -> R { let mut ext = Self { inner: Storage { - top: std::mem::replace(&mut storage.top, Default::default()), - children_default: std::mem::replace(&mut storage.children_default, Default::default()), + top: std::mem::take(&mut storage.top), + children_default: std::mem::take(&mut storage.children_default), }, extensions: Default::default(), }; diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index c98da11c27d..f7773a8211e 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -489,10 +489,10 @@ impl OverlayedChanges { ) { assert!(self.prospective.is_empty()); ( - std::mem::replace(&mut self.committed.top, Default::default()) + std::mem::take(&mut self.committed.top) .into_iter() .map(|(k, v)| (k, v.value)), - std::mem::replace(&mut self.committed.children_default, Default::default()) + std::mem::take(&mut self.committed.children_default) .into_iter() .map(|(sk, (v, ci))| (sk, (v.into_iter().map(|(k, v)| (k, v.value)), ci))), ) diff --git a/utils/fork-tree/src/lib.rs b/utils/fork-tree/src/lib.rs index 1e7b48fed07..ba7e519ddf1 100644 --- a/utils/fork-tree/src/lib.rs +++ b/utils/fork-tree/src/lib.rs @@ -114,7 +114,7 @@ impl ForkTree where )?; let removed = if let Some(mut root_index) = new_root_index { - let mut old_roots = std::mem::replace(&mut self.roots, Vec::new()); + let mut old_roots = std::mem::take(&mut self.roots); let mut root = None; let mut cur_children = Some(&mut old_roots); @@ -137,7 +137,7 @@ impl ForkTree where // we found the deepest ancestor of the finalized block, so we prune // out any children that don't include the finalized block. - let root_children = std::mem::replace(&mut root.children, Vec::new()); + let root_children = std::mem::take(&mut root.children); let mut is_first = true; for child in root_children { -- GitLab From cf2f6699ab387db96e6c0301d2178190b5559a3e Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Thu, 30 Apr 2020 15:08:38 +0200 Subject: [PATCH 107/167] Move around stuff in sc_network (#5847) --- client/network/build.rs | 8 +- client/network/src/behaviour.rs | 20 +- .../src/{protocol => }/block_requests.rs | 45 ++--- .../src/{protocol => }/finality_requests.rs | 19 +- client/network/src/lib.rs | 4 + .../{protocol => }/light_client_handler.rs | 173 +++++++++--------- client/network/src/on_demand_layer.rs | 2 +- client/network/src/protocol.rs | 19 -- client/network/src/schema.rs | 27 +++ .../src/{protocol => }/schema/api.v1.proto | 0 .../{protocol => }/schema/finality.v1.proto | 0 .../src/{protocol => }/schema/light.v1.proto | 0 client/network/src/service.rs | 15 +- 13 files changed, 172 insertions(+), 160 deletions(-) rename client/network/src/{protocol => }/block_requests.rs (94%) rename client/network/src/{protocol => }/finality_requests.rs (95%) rename client/network/src/{protocol => }/light_client_handler.rs (92%) create mode 100644 client/network/src/schema.rs rename client/network/src/{protocol => }/schema/api.v1.proto (100%) rename client/network/src/{protocol => }/schema/finality.v1.proto (100%) rename client/network/src/{protocol => }/schema/light.v1.proto (100%) diff --git a/client/network/build.rs b/client/network/build.rs index 991b1cba5d6..8ed460f163e 100644 --- a/client/network/build.rs +++ b/client/network/build.rs @@ -1,9 +1,9 @@ const PROTOS: &[&str] = &[ - "src/protocol/schema/api.v1.proto", - "src/protocol/schema/finality.v1.proto", - "src/protocol/schema/light.v1.proto" + "src/schema/api.v1.proto", + "src/schema/finality.v1.proto", + "src/schema/light.v1.proto" ]; fn main() { - prost_build::compile_protos(PROTOS, &["src/protocol"]).unwrap(); + prost_build::compile_protos(PROTOS, &["src/schema"]).unwrap(); } diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index eae20c9031e..3b6224e9cc5 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -15,14 +15,11 @@ // along with Substrate. If not, see . use crate::{ - config::{ProtocolId, Role}, + config::{ProtocolId, Role}, block_requests, light_client_handler, finality_requests, debug_info, discovery::{DiscoveryBehaviour, DiscoveryConfig, DiscoveryOut}, + protocol::{message::{self, Roles}, CustomMessageOutcome, Protocol}, Event, ObservedRole, DhtEvent, ExHashT, }; -use crate::protocol::{ - self, block_requests, light_client_handler, finality_requests, - message::{self, Roles}, CustomMessageOutcome, Protocol -}; use codec::Encode as _; use libp2p::NetworkBehaviour; @@ -33,7 +30,6 @@ use log::debug; use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}}; use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification}; use std::{borrow::Cow, iter, task::{Context, Poll}, time::Duration}; -use void; /// General behaviour of the network. Combines all protocols together. #[derive(NetworkBehaviour)] @@ -47,11 +43,11 @@ pub struct Behaviour { /// Discovers nodes of the network. discovery: DiscoveryBehaviour, /// Block request handling. - block_requests: protocol::BlockRequests, + block_requests: block_requests::BlockRequests, /// Finality proof request handling. - finality_proof_requests: protocol::FinalityProofRequests, + finality_proof_requests: finality_requests::FinalityProofRequests, /// Light client request handling. - light_client_handler: protocol::LightClientHandler, + light_client_handler: light_client_handler::LightClientHandler, /// Queue of events to produce for the outside. #[behaviour(ignore)] @@ -110,9 +106,9 @@ impl Behaviour { role: Role, user_agent: String, local_public_key: PublicKey, - block_requests: protocol::BlockRequests, - finality_proof_requests: protocol::FinalityProofRequests, - light_client_handler: protocol::LightClientHandler, + block_requests: block_requests::BlockRequests, + finality_proof_requests: finality_requests::FinalityProofRequests, + light_client_handler: light_client_handler::LightClientHandler, disco_config: DiscoveryConfig, ) -> Self { Behaviour { diff --git a/client/network/src/protocol/block_requests.rs b/client/network/src/block_requests.rs similarity index 94% rename from client/network/src/protocol/block_requests.rs rename to client/network/src/block_requests.rs index 920d3f0e23f..e8c96cc6d8e 100644 --- a/client/network/src/protocol/block_requests.rs +++ b/client/network/src/block_requests.rs @@ -27,7 +27,8 @@ use codec::{Encode, Decode}; use crate::{ chain::Client, config::ProtocolId, - protocol::{api, message::{self, BlockAttributes}} + protocol::{message::{self, BlockAttributes}}, + schema, }; use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; use futures_timer::Delay; @@ -275,18 +276,18 @@ where return SendRequestOutcome::NotConnected; }; - let protobuf_rq = api::v1::BlockRequest { + let protobuf_rq = schema::v1::BlockRequest { fields: u32::from_be_bytes([req.fields.bits(), 0, 0, 0]), from_block: match req.from { message::FromBlock::Hash(h) => - Some(api::v1::block_request::FromBlock::Hash(h.encode())), + Some(schema::v1::block_request::FromBlock::Hash(h.encode())), message::FromBlock::Number(n) => - Some(api::v1::block_request::FromBlock::Number(n.encode())), + Some(schema::v1::block_request::FromBlock::Number(n.encode())), }, to_block: req.to.map(|h| h.encode()).unwrap_or_default(), direction: match req.direction { - message::Direction::Ascending => api::v1::Direction::Ascending as i32, - message::Direction::Descending => api::v1::Direction::Descending as i32, + message::Direction::Ascending => schema::v1::Direction::Ascending as i32, + message::Direction::Descending => schema::v1::Direction::Descending as i32, }, max_blocks: req.max.unwrap_or(0), }; @@ -340,8 +341,8 @@ where fn on_block_request ( &mut self , peer: &PeerId - , request: &api::v1::BlockRequest - ) -> Result + , request: &schema::v1::BlockRequest + ) -> Result { log::trace!( target: "sync", @@ -353,11 +354,11 @@ where let from_block_id = match request.from_block { - Some(api::v1::block_request::FromBlock::Hash(ref h)) => { + Some(schema::v1::block_request::FromBlock::Hash(ref h)) => { let h = Decode::decode(&mut h.as_ref())?; BlockId::::Hash(h) } - Some(api::v1::block_request::FromBlock::Number(ref n)) => { + Some(schema::v1::block_request::FromBlock::Number(ref n)) => { let n = Decode::decode(&mut n.as_ref())?; BlockId::::Number(n) } @@ -375,10 +376,10 @@ where }; let direction = - if request.direction == api::v1::Direction::Ascending as i32 { - api::v1::Direction::Ascending - } else if request.direction == api::v1::Direction::Descending as i32 { - api::v1::Direction::Descending + if request.direction == schema::v1::Direction::Ascending as i32 { + schema::v1::Direction::Ascending + } else if request.direction == schema::v1::Direction::Descending as i32 { + schema::v1::Direction::Descending } else { let msg = format!("invalid `BlockRequest::direction` value: {}", request.direction); return Err(io::Error::new(io::ErrorKind::Other, msg).into()) @@ -406,7 +407,7 @@ where }; let is_empty_justification = justification.as_ref().map(|j| j.is_empty()).unwrap_or(false); - let block_data = api::v1::BlockData { + let block_data = schema::v1::BlockData { hash: hash.encode(), header: if get_header { header.encode() @@ -431,10 +432,10 @@ where blocks.push(block_data); match direction { - api::v1::Direction::Ascending => { + schema::v1::Direction::Ascending => { block_id = BlockId::Number(number + One::one()) } - api::v1::Direction::Descending => { + schema::v1::Direction::Descending => { if number.is_zero() { break } @@ -443,7 +444,7 @@ where } } - Ok(api::v1::BlockResponse { blocks }) + Ok(schema::v1::BlockResponse { blocks }) } } @@ -719,9 +720,9 @@ where #[derive(Debug)] pub enum NodeEvent { /// Incoming request from remote and substream to use for the response. - Request(api::v1::BlockRequest, T), + Request(schema::v1::BlockRequest, T), /// Incoming response from remote. - Response(message::BlockRequest, api::v1::BlockResponse), + Response(message::BlockRequest, schema::v1::BlockResponse), } /// Substream upgrade protocol. @@ -762,7 +763,7 @@ where let future = async move { let len = self.max_request_len; let vec = read_one(&mut s, len).await?; - match api::v1::BlockRequest::decode(&vec[..]) { + match schema::v1::BlockRequest::decode(&vec[..]) { Ok(r) => Ok(NodeEvent::Request(r, s)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } @@ -809,7 +810,7 @@ where write_one(&mut s, &self.request).await?; let vec = read_one(&mut s, self.max_response_size).await?; - api::v1::BlockResponse::decode(&vec[..]) + schema::v1::BlockResponse::decode(&vec[..]) .map(|r| NodeEvent::Response(self.original_request, r)) .map_err(|e| { ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) diff --git a/client/network/src/protocol/finality_requests.rs b/client/network/src/finality_requests.rs similarity index 95% rename from client/network/src/protocol/finality_requests.rs rename to client/network/src/finality_requests.rs index 06167596179..457f9343506 100644 --- a/client/network/src/protocol/finality_requests.rs +++ b/client/network/src/finality_requests.rs @@ -27,7 +27,8 @@ use codec::{Encode, Decode}; use crate::{ chain::FinalityProofProvider, config::ProtocolId, - protocol::{api, message} + protocol::message, + schema, }; use futures::{future::BoxFuture, prelude::*, stream::FuturesUnordered}; use libp2p::{ @@ -169,7 +170,7 @@ where /// If the response doesn't arrive in time, or if the remote answers improperly, the target /// will be disconnected. pub fn send_request(&mut self, target: &PeerId, block_hash: B::Hash, request: Vec) { - let protobuf_rq = api::v1::finality::FinalityProofRequest { + let protobuf_rq = schema::v1::finality::FinalityProofRequest { block_hash: block_hash.encode(), request, }; @@ -194,8 +195,8 @@ where } /// Callback, invoked when a new finality request has been received from remote. - fn on_finality_request(&mut self, peer: &PeerId, request: &api::v1::finality::FinalityProofRequest) - -> Result + fn on_finality_request(&mut self, peer: &PeerId, request: &schema::v1::finality::FinalityProofRequest) + -> Result { let block_hash = Decode::decode(&mut request.block_hash.as_ref())?; @@ -211,7 +212,7 @@ where return Err(From::from("Empty finality proof provider".to_string())) }; - Ok(api::v1::finality::FinalityProofResponse { proof: finality_proof }) + Ok(schema::v1::finality::FinalityProofResponse { proof: finality_proof }) } } @@ -300,9 +301,9 @@ where #[derive(Debug)] pub enum NodeEvent { /// Incoming request from remote and substream to use for the response. - Request(api::v1::finality::FinalityProofRequest, T), + Request(schema::v1::finality::FinalityProofRequest, T), /// Incoming response from remote. - Response(api::v1::finality::FinalityProofResponse, B::Hash), + Response(schema::v1::finality::FinalityProofResponse, B::Hash), } /// Substream upgrade protocol. @@ -346,7 +347,7 @@ where async move { let len = self.max_request_len; let vec = read_one(&mut s, len).await?; - match api::v1::finality::FinalityProofRequest::decode(&vec[..]) { + match schema::v1::finality::FinalityProofRequest::decode(&vec[..]) { Ok(r) => Ok(NodeEvent::Request(r, s)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } @@ -392,7 +393,7 @@ where write_one(&mut s, &self.request).await?; let vec = read_one(&mut s, self.max_response_size).await?; - api::v1::finality::FinalityProofResponse::decode(&vec[..]) + schema::v1::finality::FinalityProofResponse::decode(&vec[..]) .map(|r| NodeEvent::Response(r, self.block_hash)) .map_err(|e| { ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index 44bb1516bd4..1ed0b905409 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -240,11 +240,15 @@ //! mod behaviour; +mod block_requests; mod chain; mod debug_info; mod discovery; +mod finality_requests; +mod light_client_handler; mod on_demand_layer; mod protocol; +mod schema; mod service; mod transport; mod utils; diff --git a/client/network/src/protocol/light_client_handler.rs b/client/network/src/light_client_handler.rs similarity index 92% rename from client/network/src/protocol/light_client_handler.rs rename to client/network/src/light_client_handler.rs index 2de6f56e2bb..5080d16ead6 100644 --- a/client/network/src/protocol/light_client_handler.rs +++ b/client/network/src/light_client_handler.rs @@ -29,7 +29,8 @@ use codec::{self, Encode, Decode}; use crate::{ chain::Client, config::ProtocolId, - protocol::{api, message::BlockAttributes} + protocol::message::BlockAttributes, + schema, }; use futures::{channel::oneshot, future::BoxFuture, prelude::*, stream::FuturesUnordered}; use libp2p::{ @@ -436,10 +437,10 @@ where ( &mut self , peer: &PeerId , request: &Request - , response: api::v1::light::Response + , response: schema::v1::light::Response ) -> Result, Error> { - use api::v1::light::response::Response; + use schema::v1::light::response::Response; match response.response { Some(Response::RemoteCallResponse(response)) => if let Request::Call { request , .. } = request { @@ -508,7 +509,7 @@ where ( &mut self , peer: &PeerId , request: &Request - , response: api::v1::BlockResponse + , response: schema::v1::BlockResponse ) -> Result, Error> { let request = if let Request::Body { request , .. } = &request { @@ -533,8 +534,8 @@ where fn on_remote_call_request ( &mut self , peer: &PeerId - , request: &api::v1::light::RemoteCallRequest - ) -> Result + , request: &schema::v1::light::RemoteCallRequest + ) -> Result { log::trace!("remote call request from {} ({} at {:?})", peer, @@ -558,18 +559,18 @@ where }; let response = { - let r = api::v1::light::RemoteCallResponse { proof: proof.encode() }; - api::v1::light::response::Response::RemoteCallResponse(r) + let r = schema::v1::light::RemoteCallResponse { proof: proof.encode() }; + schema::v1::light::response::Response::RemoteCallResponse(r) }; - Ok(api::v1::light::Response { response: Some(response) }) + Ok(schema::v1::light::Response { response: Some(response) }) } fn on_remote_read_request ( &mut self , peer: &PeerId - , request: &api::v1::light::RemoteReadRequest - ) -> Result + , request: &schema::v1::light::RemoteReadRequest + ) -> Result { if request.keys.is_empty() { log::debug!("invalid remote read request sent by {}", peer); @@ -596,18 +597,18 @@ where }; let response = { - let r = api::v1::light::RemoteReadResponse { proof: proof.encode() }; - api::v1::light::response::Response::RemoteReadResponse(r) + let r = schema::v1::light::RemoteReadResponse { proof: proof.encode() }; + schema::v1::light::response::Response::RemoteReadResponse(r) }; - Ok(api::v1::light::Response { response: Some(response) }) + Ok(schema::v1::light::Response { response: Some(response) }) } fn on_remote_read_child_request ( &mut self , peer: &PeerId - , request: &api::v1::light::RemoteReadChildRequest - ) -> Result + , request: &schema::v1::light::RemoteReadChildRequest + ) -> Result { if request.keys.is_empty() { log::debug!("invalid remote child read request sent by {}", peer); @@ -645,18 +646,18 @@ where }; let response = { - let r = api::v1::light::RemoteReadResponse { proof: proof.encode() }; - api::v1::light::response::Response::RemoteReadResponse(r) + let r = schema::v1::light::RemoteReadResponse { proof: proof.encode() }; + schema::v1::light::response::Response::RemoteReadResponse(r) }; - Ok(api::v1::light::Response { response: Some(response) }) + Ok(schema::v1::light::Response { response: Some(response) }) } fn on_remote_header_request ( &mut self , peer: &PeerId - , request: &api::v1::light::RemoteHeaderRequest - ) -> Result + , request: &schema::v1::light::RemoteHeaderRequest + ) -> Result { log::trace!("remote header proof request from {} ({:?})", peer, request.block); @@ -673,18 +674,18 @@ where }; let response = { - let r = api::v1::light::RemoteHeaderResponse { header, proof: proof.encode() }; - api::v1::light::response::Response::RemoteHeaderResponse(r) + let r = schema::v1::light::RemoteHeaderResponse { header, proof: proof.encode() }; + schema::v1::light::response::Response::RemoteHeaderResponse(r) }; - Ok(api::v1::light::Response { response: Some(response) }) + Ok(schema::v1::light::Response { response: Some(response) }) } fn on_remote_changes_request ( &mut self , peer: &PeerId - , request: &api::v1::light::RemoteChangesRequest - ) -> Result + , request: &schema::v1::light::RemoteChangesRequest + ) -> Result { log::trace!("remote changes proof request from {} for key {} ({:?}..{:?})", peer, @@ -727,18 +728,18 @@ where }; let response = { - let r = api::v1::light::RemoteChangesResponse { + let r = schema::v1::light::RemoteChangesResponse { max: proof.max_block.encode(), proof: proof.proof, roots: proof.roots.into_iter() - .map(|(k, v)| api::v1::light::Pair { fst: k.encode(), snd: v.encode() }) + .map(|(k, v)| schema::v1::light::Pair { fst: k.encode(), snd: v.encode() }) .collect(), roots_proof: proof.roots_proof.encode(), }; - api::v1::light::response::Response::RemoteChangesResponse(r) + schema::v1::light::response::Response::RemoteChangesResponse(r) }; - Ok(api::v1::light::Response { response: Some(response) }) + Ok(schema::v1::light::Response { response: Some(response) }) } } @@ -821,15 +822,15 @@ where Event::Request(request, mut stream) => { log::trace!("incoming request from {}", peer); let result = match &request.request { - Some(api::v1::light::request::Request::RemoteCallRequest(r)) => + Some(schema::v1::light::request::Request::RemoteCallRequest(r)) => self.on_remote_call_request(&peer, r), - Some(api::v1::light::request::Request::RemoteReadRequest(r)) => + Some(schema::v1::light::request::Request::RemoteReadRequest(r)) => self.on_remote_read_request(&peer, r), - Some(api::v1::light::request::Request::RemoteHeaderRequest(r)) => + Some(schema::v1::light::request::Request::RemoteHeaderRequest(r)) => self.on_remote_header_request(&peer, r), - Some(api::v1::light::request::Request::RemoteReadChildRequest(r)) => + Some(schema::v1::light::request::Request::RemoteReadChildRequest(r)) => self.on_remote_read_child_request(&peer, r), - Some(api::v1::light::request::Request::RemoteChangesRequest(r)) => + Some(schema::v1::light::request::Request::RemoteChangesRequest(r)) => self.on_remote_changes_request(&peer, r), None => { log::debug!("ignoring request without request data from peer {}", peer); @@ -1059,11 +1060,11 @@ fn retries(request: &Request) -> usize { fn serialize_request(request: &Request) -> Result, prost::EncodeError> { let request = match request { Request::Body { request, .. } => { - let rq = api::v1::BlockRequest { + let rq = schema::v1::BlockRequest { fields: u32::from(BlockAttributes::BODY.bits()), - from_block: Some(api::v1::block_request::FromBlock::Hash(request.header.hash().encode())), + from_block: Some(schema::v1::block_request::FromBlock::Hash(request.header.hash().encode())), to_block: Vec::new(), - direction: api::v1::Direction::Ascending as i32, + direction: schema::v1::Direction::Ascending as i32, max_blocks: 1, }; let mut buf = Vec::with_capacity(rq.encoded_len()); @@ -1071,34 +1072,34 @@ fn serialize_request(request: &Request) -> Result, prost::E return Ok(buf); } Request::Header { request, .. } => { - let r = api::v1::light::RemoteHeaderRequest { block: request.block.encode() }; - api::v1::light::request::Request::RemoteHeaderRequest(r) + let r = schema::v1::light::RemoteHeaderRequest { block: request.block.encode() }; + schema::v1::light::request::Request::RemoteHeaderRequest(r) } Request::Read { request, .. } => { - let r = api::v1::light::RemoteReadRequest { + let r = schema::v1::light::RemoteReadRequest { block: request.block.encode(), keys: request.keys.clone(), }; - api::v1::light::request::Request::RemoteReadRequest(r) + schema::v1::light::request::Request::RemoteReadRequest(r) } Request::ReadChild { request, .. } => { - let r = api::v1::light::RemoteReadChildRequest { + let r = schema::v1::light::RemoteReadChildRequest { block: request.block.encode(), storage_key: request.storage_key.clone().into_inner(), keys: request.keys.clone(), }; - api::v1::light::request::Request::RemoteReadChildRequest(r) + schema::v1::light::request::Request::RemoteReadChildRequest(r) } Request::Call { request, .. } => { - let r = api::v1::light::RemoteCallRequest { + let r = schema::v1::light::RemoteCallRequest { block: request.block.encode(), method: request.method.clone(), data: request.call_data.clone(), }; - api::v1::light::request::Request::RemoteCallRequest(r) + schema::v1::light::request::Request::RemoteCallRequest(r) } Request::Changes { request, .. } => { - let r = api::v1::light::RemoteChangesRequest { + let r = schema::v1::light::RemoteChangesRequest { first: request.first_block.1.encode(), last: request.last_block.1.encode(), min: request.tries_roots.1.encode(), @@ -1107,11 +1108,11 @@ fn serialize_request(request: &Request) -> Result, prost::E .unwrap_or_default(), key: request.key.clone(), }; - api::v1::light::request::Request::RemoteChangesRequest(r) + schema::v1::light::request::Request::RemoteChangesRequest(r) } }; - let rq = api::v1::light::Request { request: Some(request) }; + let rq = schema::v1::light::Request { request: Some(request) }; let mut buf = Vec::with_capacity(rq.encoded_len()); rq.encode(&mut buf)?; Ok(buf) @@ -1159,7 +1160,7 @@ fn send_reply(result: Result, ClientError>, request: Request< #[derive(Debug)] pub enum Event { /// Incoming request from remote and substream to use for the response. - Request(api::v1::light::Request, T), + Request(schema::v1::light::Request, T), /// Incoming response from remote. Response(RequestId, Response), } @@ -1168,9 +1169,9 @@ pub enum Event { #[derive(Debug, Clone)] pub enum Response { /// Incoming light response from remote. - Light(api::v1::light::Response), + Light(schema::v1::light::Response), /// Incoming block response from remote. - Block(api::v1::BlockResponse), + Block(schema::v1::BlockResponse), } /// Substream upgrade protocol. @@ -1204,7 +1205,7 @@ where fn upgrade_inbound(self, mut s: T, _: Self::Info) -> Self::Future { let future = async move { let vec = read_one(&mut s, self.max_request_size).await?; - match api::v1::light::Request::decode(&vec[..]) { + match schema::v1::light::Request::decode(&vec[..]) { Ok(r) => Ok(Event::Request(r, s)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } @@ -1261,14 +1262,14 @@ where match self.expected { ExpectedResponseTy::Light => { - api::v1::light::Response::decode(&vec[..]) + schema::v1::light::Response::decode(&vec[..]) .map(|r| Event::Response(self.request_id, Response::Light(r))) .map_err(|e| { ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) }) }, ExpectedResponseTy::Block => { - api::v1::BlockResponse::decode(&vec[..]) + schema::v1::BlockResponse::decode(&vec[..]) .map(|r| Event::Response(self.request_id, Response::Block(r))) .map_err(|e| { ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e)) @@ -1301,7 +1302,7 @@ mod tests { use crate::{ chain::Client, config::ProtocolId, - protocol::api, + schema, }; use futures::{channel::oneshot, prelude::*}; use libp2p::{ @@ -1625,9 +1626,9 @@ mod tests { let request_id = *behaviour.outstanding.keys().next().unwrap(); let response = { - let r = api::v1::light::RemoteCallResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteCallResponse(r)), + let r = schema::v1::light::RemoteCallResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteCallResponse(r)), } }; @@ -1656,9 +1657,9 @@ mod tests { // Some unsolicited response let response = { - let r = api::v1::light::RemoteCallResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteCallResponse(r)), + let r = schema::v1::light::RemoteCallResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteCallResponse(r)), } }; @@ -1700,9 +1701,9 @@ mod tests { let request_id = *behaviour.outstanding.keys().next().unwrap(); let response = { - let r = api::v1::light::RemoteReadResponse { proof: empty_proof() }; // Not a RemoteCallResponse! - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteReadResponse(r)), + let r = schema::v1::light::RemoteReadResponse { proof: empty_proof() }; // Not a RemoteCallResponse! + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteReadResponse(r)), } }; @@ -1761,9 +1762,9 @@ mod tests { let request_id = *behaviour.outstanding.keys().next().unwrap(); let responding_peer = behaviour.outstanding.values().next().unwrap().peer.clone(); let response = { - let r = api::v1::light::RemoteCallResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteCallResponse(r)) + let r = schema::v1::light::RemoteCallResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteCallResponse(r)) } }; let conn = ConnectionId::new(i); @@ -1775,9 +1776,9 @@ mod tests { let request_id = *behaviour.outstanding.keys().next().unwrap(); let responding_peer = behaviour.outstanding.values().next().unwrap().peer.clone(); let response = { - let r = api::v1::light::RemoteCallResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteCallResponse(r)), + let r = schema::v1::light::RemoteCallResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteCallResponse(r)), } }; behaviour.inject_event(responding_peer, conn4, Event::Response(request_id, Response::Light(response))); @@ -1798,41 +1799,41 @@ mod tests { let response = match request { Request::Body { .. } => unimplemented!(), Request::Header{..} => { - let r = api::v1::light::RemoteHeaderResponse { + let r = schema::v1::light::RemoteHeaderResponse { header: dummy_header().encode(), proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteHeaderResponse(r)), + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteHeaderResponse(r)), } } Request::Read{..} => { - let r = api::v1::light::RemoteReadResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteReadResponse(r)), + let r = schema::v1::light::RemoteReadResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteReadResponse(r)), } } Request::ReadChild{..} => { - let r = api::v1::light::RemoteReadResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteReadResponse(r)), + let r = schema::v1::light::RemoteReadResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteReadResponse(r)), } } Request::Call{..} => { - let r = api::v1::light::RemoteCallResponse { proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteCallResponse(r)), + let r = schema::v1::light::RemoteCallResponse { proof: empty_proof() }; + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteCallResponse(r)), } } Request::Changes{..} => { - let r = api::v1::light::RemoteChangesResponse { + let r = schema::v1::light::RemoteChangesResponse { max: iter::repeat(1).take(32).collect(), proof: Vec::new(), roots: Vec::new(), roots_proof: empty_proof() }; - api::v1::light::Response { - response: Some(api::v1::light::response::Response::RemoteChangesResponse(r)), + schema::v1::light::Response { + response: Some(schema::v1::light::response::Response::RemoteChangesResponse(r)), } } }; diff --git a/client/network/src/on_demand_layer.rs b/client/network/src/on_demand_layer.rs index d881bf6fe24..c8bd7f28677 100644 --- a/client/network/src/on_demand_layer.rs +++ b/client/network/src/on_demand_layer.rs @@ -16,7 +16,7 @@ //! On-demand requests service. -use crate::protocol::light_client_handler; +use crate::light_client_handler; use futures::{channel::oneshot, prelude::*}; use parking_lot::Mutex; diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 82f0d775ecc..23fd944678d 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -58,32 +58,13 @@ use sc_client_api::{ChangesProof, StorageProof}; use util::LruHashSet; use wasm_timer::Instant; -// Include sources generated from protobuf definitions. -pub mod api { - pub mod v1 { - include!(concat!(env!("OUT_DIR"), "/api.v1.rs")); - pub mod finality { - include!(concat!(env!("OUT_DIR"), "/api.v1.finality.rs")); - } - pub mod light { - include!(concat!(env!("OUT_DIR"), "/api.v1.light.rs")); - } - } -} - mod generic_proto; mod util; -pub mod block_requests; -pub mod finality_requests; pub mod message; pub mod event; -pub mod light_client_handler; pub mod sync; -pub use block_requests::BlockRequests; -pub use finality_requests::FinalityProofRequests; -pub use light_client_handler::LightClientHandler; pub use generic_proto::LegacyConnectionKillError; const REQUEST_TIMEOUT_SEC: u64 = 40; diff --git a/client/network/src/schema.rs b/client/network/src/schema.rs new file mode 100644 index 00000000000..0c8a650e693 --- /dev/null +++ b/client/network/src/schema.rs @@ -0,0 +1,27 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Include sources generated from protobuf definitions. + +pub mod v1 { + include!(concat!(env!("OUT_DIR"), "/api.v1.rs")); + pub mod finality { + include!(concat!(env!("OUT_DIR"), "/api.v1.finality.rs")); + } + pub mod light { + include!(concat!(env!("OUT_DIR"), "/api.v1.light.rs")); + } +} diff --git a/client/network/src/protocol/schema/api.v1.proto b/client/network/src/schema/api.v1.proto similarity index 100% rename from client/network/src/protocol/schema/api.v1.proto rename to client/network/src/schema/api.v1.proto diff --git a/client/network/src/protocol/schema/finality.v1.proto b/client/network/src/schema/finality.v1.proto similarity index 100% rename from client/network/src/protocol/schema/finality.v1.proto rename to client/network/src/schema/finality.v1.proto diff --git a/client/network/src/protocol/schema/light.v1.proto b/client/network/src/schema/light.v1.proto similarity index 100% rename from client/network/src/protocol/schema/light.v1.proto rename to client/network/src/schema/light.v1.proto diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 3fbfd2dd142..64b3d3b5b22 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -35,7 +35,8 @@ use crate::{ NetworkState, NotConnectedPeer as NetworkStateNotConnectedPeer, Peer as NetworkStatePeer, }, on_demand_layer::AlwaysBadChecker, - protocol::{self, event::Event, light_client_handler, LegacyConnectionKillError, sync::SyncState, PeerInfo, Protocol}, + light_client_handler, block_requests, finality_requests, + protocol::{self, event::Event, LegacyConnectionKillError, sync::SyncState, PeerInfo, Protocol}, transport, ReputationChange, }; use futures::prelude::*; @@ -223,16 +224,16 @@ impl NetworkWorker { params.network_config.node_name ); let block_requests = { - let config = protocol::block_requests::Config::new(¶ms.protocol_id); - protocol::BlockRequests::new(config, params.chain.clone()) + let config = block_requests::Config::new(¶ms.protocol_id); + block_requests::BlockRequests::new(config, params.chain.clone()) }; let finality_proof_requests = { - let config = protocol::finality_requests::Config::new(¶ms.protocol_id); - protocol::FinalityProofRequests::new(config, params.finality_proof_provider.clone()) + let config = finality_requests::Config::new(¶ms.protocol_id); + finality_requests::FinalityProofRequests::new(config, params.finality_proof_provider.clone()) }; let light_client_handler = { - let config = protocol::light_client_handler::Config::new(¶ms.protocol_id); - protocol::LightClientHandler::new( + let config = light_client_handler::Config::new(¶ms.protocol_id); + light_client_handler::LightClientHandler::new( config, params.chain, checker, -- GitLab From bb83628046373b185d215c7ea257f6f2947f93ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 30 Apr 2020 15:44:40 +0200 Subject: [PATCH 108/167] Adds `export-state` subcommand (#5842) * Export state cli * More work * Fix tests * Make it work * Fix compilation * Apply suggestions from code review --- client/chain-spec/src/chain_spec.rs | 65 +++++++++---- client/chain-spec/src/lib.rs | 7 ++ client/cli/src/commands/check_block_cmd.rs | 41 +++----- client/cli/src/commands/export_state_cmd.rs | 81 ++++++++++++++++ client/cli/src/commands/mod.rs | 31 +++--- .../src/commands/{runcmd.rs => run_cmd.rs} | 0 client/cli/src/params/mod.rs | 97 +++++++++++++++++-- client/cli/src/runner.rs | 10 +- client/service/src/builder.rs | 10 +- client/service/src/chain_ops.rs | 48 ++++++++- client/service/src/client/client.rs | 14 ++- primitives/storage/src/lib.rs | 13 +-- 12 files changed, 330 insertions(+), 87 deletions(-) create mode 100644 client/cli/src/commands/export_state_cmd.rs rename client/cli/src/commands/{runcmd.rs => run_cmd.rs} (100%) diff --git a/client/chain-spec/src/chain_spec.rs b/client/chain-spec/src/chain_spec.rs index fbe7b7e7a8e..8e941161ee5 100644 --- a/client/chain-spec/src/chain_spec.rs +++ b/client/chain-spec/src/chain_spec.rs @@ -16,11 +16,7 @@ //! Substrate chain configurations. -use std::borrow::Cow; -use std::collections::HashMap; -use std::fs::File; -use std::path::PathBuf; -use std::sync::Arc; +use std::{borrow::Cow, fs::File, path::PathBuf, sync::Arc, collections::HashMap}; use serde::{Serialize, Deserialize}; use sp_core::storage::{StorageKey, StorageData, ChildInfo, Storage, StorageChild}; use sp_runtime::BuildStorage; @@ -33,14 +29,16 @@ enum GenesisSource { File(PathBuf), Binary(Cow<'static, [u8]>), Factory(Arc G + Send + Sync>), + Storage(Storage), } impl Clone for GenesisSource { fn clone(&self) -> Self { match *self { - GenesisSource::File(ref path) => GenesisSource::File(path.clone()), - GenesisSource::Binary(ref d) => GenesisSource::Binary(d.clone()), - GenesisSource::Factory(ref f) => GenesisSource::Factory(f.clone()), + Self::File(ref path) => Self::File(path.clone()), + Self::Binary(ref d) => Self::Binary(d.clone()), + Self::Factory(ref f) => Self::Factory(f.clone()), + Self::Storage(ref s) => Self::Storage(s.clone()), } } } @@ -53,19 +51,40 @@ impl GenesisSource { } match self { - GenesisSource::File(path) => { + Self::File(path) => { let file = File::open(path) .map_err(|e| format!("Error opening spec file: {}", e))?; let genesis: GenesisContainer = json::from_reader(file) .map_err(|e| format!("Error parsing spec file: {}", e))?; Ok(genesis.genesis) }, - GenesisSource::Binary(buf) => { + Self::Binary(buf) => { let genesis: GenesisContainer = json::from_reader(buf.as_ref()) .map_err(|e| format!("Error parsing embedded file: {}", e))?; Ok(genesis.genesis) }, - GenesisSource::Factory(f) => Ok(Genesis::Runtime(f())), + Self::Factory(f) => Ok(Genesis::Runtime(f())), + Self::Storage(storage) => { + let top = storage.top + .iter() + .map(|(k, v)| (StorageKey(k.clone()), StorageData(v.clone()))) + .collect(); + + let children_default = storage.children_default + .iter() + .map(|(k, child)| + ( + StorageKey(k.clone()), + child.data + .iter() + .map(|(k, v)| (StorageKey(k.clone()), StorageData(v.clone()))) + .collect() + ) + ) + .collect(); + + Ok(Genesis::Raw(RawGenesis { top, children_default })) + }, } } } @@ -98,15 +117,15 @@ impl BuildStorage for ChainSpec { } } -type GenesisStorage = HashMap; +pub type GenesisStorage = HashMap; +/// Raw storage content for genesis block. #[derive(Serialize, Deserialize)] #[serde(rename_all = "camelCase")] #[serde(deny_unknown_fields)] -/// Storage content for genesis block. -struct RawGenesis { - top: GenesisStorage, - children_default: HashMap, +pub struct RawGenesis { + pub top: GenesisStorage, + pub children_default: HashMap, } #[derive(Serialize, Deserialize)] @@ -263,7 +282,7 @@ impl ChainSpec { } } -impl ChainSpec { +impl ChainSpec { /// Dump to json string. pub fn as_json(&self, raw: bool) -> Result { #[derive(Serialize, Deserialize)] @@ -303,8 +322,8 @@ impl ChainSpec { impl crate::ChainSpec for ChainSpec where - G: RuntimeGenesis, - E: GetExtension + serde::Serialize + Clone + Send, + G: RuntimeGenesis + 'static, + E: GetExtension + serde::Serialize + Clone + Send + 'static, { fn boot_nodes(&self) -> &[MultiaddrWithPeerId] { ChainSpec::boot_nodes(self) @@ -349,6 +368,14 @@ where fn as_storage_builder(&self) -> &dyn BuildStorage { self } + + fn cloned_box(&self) -> Box { + Box::new(self.clone()) + } + + fn set_storage(&mut self, storage: Storage) { + self.genesis = GenesisSource::Storage(storage); + } } #[cfg(test)] diff --git a/client/chain-spec/src/lib.rs b/client/chain-spec/src/lib.rs index de83e170e03..6fb26942612 100644 --- a/client/chain-spec/src/lib.rs +++ b/client/chain-spec/src/lib.rs @@ -119,6 +119,7 @@ use serde::{Serialize, de::DeserializeOwned}; use sp_runtime::BuildStorage; use sc_network::config::MultiaddrWithPeerId; use sc_telemetry::TelemetryEndpoints; +use sp_core::storage::Storage; /// A set of traits for the runtime genesis config. pub trait RuntimeGenesis: Serialize + DeserializeOwned + BuildStorage {} @@ -150,4 +151,10 @@ pub trait ChainSpec: BuildStorage + Send { fn as_json(&self, raw: bool) -> Result; /// Return StorageBuilder for this spec. fn as_storage_builder(&self) -> &dyn BuildStorage; + /// Returns a cloned `Box`. + fn cloned_box(&self) -> Box; + /// Set the storage that should be used by this chain spec. + /// + /// This will be used as storage at genesis. + fn set_storage(&mut self, storage: Storage); } diff --git a/client/cli/src/commands/check_block_cmd.rs b/client/cli/src/commands/check_block_cmd.rs index ac4fe63da95..d5242cda859 100644 --- a/client/cli/src/commands/check_block_cmd.rs +++ b/client/cli/src/commands/check_block_cmd.rs @@ -14,15 +14,12 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use crate::error; -use crate::params::ImportParams; -use crate::params::SharedParams; -use crate::CliConfiguration; +use crate::{ + CliConfiguration, error, params::{ImportParams, SharedParams, BlockNumberOrHash}, +}; use sc_service::{Configuration, ServiceBuilderCommand}; -use sp_runtime::generic::BlockId; -use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; -use std::fmt::Debug; -use std::str::FromStr; +use sp_runtime::traits::{Block as BlockT, NumberFor}; +use std::{fmt::Debug, str::FromStr}; use structopt::StructOpt; /// The `check-block` command used to validate blocks. @@ -30,7 +27,7 @@ use structopt::StructOpt; pub struct CheckBlockCmd { /// Block hash or number #[structopt(value_name = "HASH or NUMBER")] - pub input: String, + pub input: BlockNumberOrHash, /// The default number of 64KB pages to ever allocate for Wasm execution. /// @@ -57,29 +54,13 @@ impl CheckBlockCmd { where B: FnOnce(Configuration) -> Result, BC: ServiceBuilderCommand + Unpin, - BB: sp_runtime::traits::Block + Debug, - <<::Header as HeaderT>::Number as std::str::FromStr>::Err: std::fmt::Debug, - ::Hash: std::str::FromStr, + BB: BlockT + Debug, + as FromStr>::Err: std::fmt::Debug, + BB::Hash: FromStr, + ::Err: std::fmt::Debug, { - let input = if self.input.starts_with("0x") { - &self.input[2..] - } else { - &self.input[..] - }; - let block_id = match FromStr::from_str(input) { - Ok(hash) => BlockId::hash(hash), - Err(_) => match self.input.parse::() { - Ok(n) => BlockId::number((n as u32).into()), - Err(_) => { - return Err(error::Error::Input( - "Invalid hash or number specified".into(), - )) - } - }, - }; - let start = std::time::Instant::now(); - builder(config)?.check_block(block_id).await?; + builder(config)?.check_block(self.input.parse()?).await?; println!("Completed in {} ms.", start.elapsed().as_millis()); Ok(()) diff --git a/client/cli/src/commands/export_state_cmd.rs b/client/cli/src/commands/export_state_cmd.rs new file mode 100644 index 00000000000..db6f81c498f --- /dev/null +++ b/client/cli/src/commands/export_state_cmd.rs @@ -0,0 +1,81 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use crate::{ + CliConfiguration, error, params::{PruningParams, SharedParams, BlockNumberOrHash}, +}; +use log::info; +use sc_service::{Configuration, ServiceBuilderCommand}; +use sp_runtime::traits::{Block as BlockT, NumberFor}; +use std::{fmt::Debug, str::FromStr}; +use structopt::StructOpt; + +/// The `export-state` command used to export the state of a given block into +/// a chain spec. +#[derive(Debug, StructOpt, Clone)] +pub struct ExportStateCmd { + /// Block hash or number. + #[structopt(value_name = "HASH or NUMBER")] + pub input: Option, + + #[allow(missing_docs)] + #[structopt(flatten)] + pub shared_params: SharedParams, + + #[allow(missing_docs)] + #[structopt(flatten)] + pub pruning_params: PruningParams, +} + +impl ExportStateCmd { + /// Run the `export-state` command + pub fn run( + &self, + config: Configuration, + builder: B, + ) -> error::Result<()> + where + B: FnOnce(Configuration) -> Result, + BC: ServiceBuilderCommand + Unpin, + BB: BlockT + Debug, + as FromStr>::Err: std::fmt::Debug, + BB::Hash: FromStr, + ::Err: std::fmt::Debug, + { + info!("Exporting raw state..."); + let mut input_spec = config.chain_spec.cloned_box(); + let block_id = self.input.clone().map(|b| b.parse()).transpose()?; + let raw_state = builder(config)?.export_raw_state(block_id)?; + input_spec.set_storage(raw_state); + + info!("Generating new chain spec..."); + let json = sc_service::chain_ops::build_spec(&*input_spec, true)?; + + print!("{}", json); + + Ok(()) + } +} + +impl CliConfiguration for ExportStateCmd { + fn shared_params(&self) -> &SharedParams { + &self.shared_params + } + + fn pruning_params(&self) -> Option<&PruningParams> { + Some(&self.pruning_params) + } +} diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index 58ed2b74998..5312336c760 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -17,18 +17,20 @@ mod build_spec_cmd; mod check_block_cmd; mod export_blocks_cmd; +mod export_state_cmd; mod import_blocks_cmd; mod purge_chain_cmd; mod revert_cmd; -mod runcmd; - -pub use crate::commands::build_spec_cmd::BuildSpecCmd; -pub use crate::commands::check_block_cmd::CheckBlockCmd; -pub use crate::commands::export_blocks_cmd::ExportBlocksCmd; -pub use crate::commands::import_blocks_cmd::ImportBlocksCmd; -pub use crate::commands::purge_chain_cmd::PurgeChainCmd; -pub use crate::commands::revert_cmd::RevertCmd; -pub use crate::commands::runcmd::RunCmd; +mod run_cmd; + +pub use self::build_spec_cmd::BuildSpecCmd; +pub use self::check_block_cmd::CheckBlockCmd; +pub use self::export_blocks_cmd::ExportBlocksCmd; +pub use self::import_blocks_cmd::ImportBlocksCmd; +pub use self::purge_chain_cmd::PurgeChainCmd; +pub use self::revert_cmd::RevertCmd; +pub use self::run_cmd::RunCmd; +pub use self::export_state_cmd::ExportStateCmd; use std::fmt::Debug; use structopt::StructOpt; @@ -56,6 +58,9 @@ pub enum Subcommand { /// Remove the whole chain data. PurgeChain(PurgeChainCmd), + + /// Export state as raw chain spec. + ExportState(ExportStateCmd), } // TODO: move to config.rs? @@ -339,7 +344,10 @@ macro_rules! substrate_cli_subcommands { } } - fn offchain_worker(&self, role: &::sc_service::Role) -> $crate::Result<::sc_service::config::OffchainWorkerConfig> { + fn offchain_worker( + &self, + role: &::sc_service::Role, + ) -> $crate::Result<::sc_service::config::OffchainWorkerConfig> { match self { $($enum::$variant(cmd) => cmd.offchain_worker(role)),* } @@ -398,5 +406,6 @@ macro_rules! substrate_cli_subcommands { } substrate_cli_subcommands!( - Subcommand => BuildSpec, ExportBlocks, ImportBlocks, CheckBlock, Revert, PurgeChain + Subcommand => BuildSpec, ExportBlocks, ImportBlocks, CheckBlock, Revert, PurgeChain, ExportState ); + diff --git a/client/cli/src/commands/runcmd.rs b/client/cli/src/commands/run_cmd.rs similarity index 100% rename from client/cli/src/commands/runcmd.rs rename to client/cli/src/commands/run_cmd.rs diff --git a/client/cli/src/params/mod.rs b/client/cli/src/params/mod.rs index 79b4e8270ab..da236ee1656 100644 --- a/client/cli/src/params/mod.rs +++ b/client/cli/src/params/mod.rs @@ -24,8 +24,8 @@ mod pruning_params; mod shared_params; mod transaction_pool_params; -use std::fmt::Debug; -use std::str::FromStr; +use std::{fmt::Debug, str::FromStr}; +use sp_runtime::{generic::BlockId, traits::{Block as BlockT, NumberFor}}; pub use crate::params::database_params::*; pub use crate::params::import_params::*; @@ -45,10 +45,10 @@ impl FromStr for BlockNumber { type Err = String; fn from_str(block_number: &str) -> Result { - if block_number.chars().any(|d| !d.is_digit(10)) { + if let Some(pos) = block_number.chars().position(|d| !d.is_digit(10)) { Err(format!( - "Invalid block number: {}, expected decimal formatted unsigned integer", - block_number, + "Expected block number, found illegal digit at position: {}", + pos, )) } else { Ok(Self(block_number.to_owned())) @@ -66,8 +66,89 @@ impl BlockNumber { N: FromStr, N::Err: std::fmt::Debug, { - self.0 - .parse() - .map_err(|e| format!("BlockNumber: {} parsing failed because of {:?}", self.0, e)) + FromStr::from_str(&self.0).map_err(|e| format!("Failed to parse block number: {:?}", e)) + } +} + +/// Wrapper type that is either a `Hash` or the number of a `Block`. +#[derive(Debug, Clone)] +pub struct BlockNumberOrHash(String); + +impl FromStr for BlockNumberOrHash { + type Err = String; + + fn from_str(block_number: &str) -> Result { + if block_number.starts_with("0x") { + if let Some(pos) = &block_number[2..].chars().position(|c| !c.is_ascii_hexdigit()) { + Err(format!( + "Expected block hash, found illegal hex character at position: {}", + 2 + pos, + )) + } else { + Ok(Self(block_number.into())) + } + } else { + BlockNumber::from_str(block_number).map(|v| Self(v.0)) + } + } +} + +impl BlockNumberOrHash { + /// Parse the inner value as `BlockId`. + pub fn parse(&self) -> Result, String> + where + B::Hash: FromStr, + ::Err: std::fmt::Debug, + NumberFor: FromStr, + as FromStr>::Err: std::fmt::Debug, + { + if self.0.starts_with("0x") { + Ok(BlockId::Hash( + FromStr::from_str(&self.0[2..]) + .map_err(|e| format!("Failed to parse block hash: {:?}", e))? + )) + } else { + BlockNumber(self.0.clone()).parse().map(BlockId::Number) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + type Header = sp_runtime::generic::Header; + type Block = sp_runtime::generic::Block; + + #[test] + fn parse_block_number() { + let block_number_or_hash = BlockNumberOrHash::from_str("1234").unwrap(); + let parsed = block_number_or_hash.parse::().unwrap(); + assert_eq!(BlockId::Number(1234), parsed); + } + + #[test] + fn parse_block_hash() { + let hash = sp_core::H256::default(); + let hash_str = format!("{:?}", hash); + let block_number_or_hash = BlockNumberOrHash::from_str(&hash_str).unwrap(); + let parsed = block_number_or_hash.parse::().unwrap(); + assert_eq!(BlockId::Hash(hash), parsed); + } + + #[test] + fn parse_block_hash_fails() { + assert_eq!( + "Expected block hash, found illegal hex character at position: 2", + BlockNumberOrHash::from_str("0xHello").unwrap_err(), + ); + } + + #[test] + fn parse_block_number_fails() { + assert_eq!( + "Expected block number, found illegal digit at position: 3", + BlockNumberOrHash::from_str("345Hello").unwrap_err(), + ); } } diff --git a/client/cli/src/runner.rs b/client/cli/src/runner.rs index bd3d2024e68..3b75dc4bc12 100644 --- a/client/cli/src/runner.rs +++ b/client/cli/src/runner.rs @@ -26,9 +26,7 @@ use log::info; use sc_service::{AbstractService, Configuration, Role, ServiceBuilderCommand, TaskType}; use sp_runtime::traits::{Block as BlockT, Header as HeaderT}; use sp_utils::metrics::{TOKIO_THREADS_ALIVE, TOKIO_THREADS_TOTAL}; -use std::fmt::Debug; -use std::marker::PhantomData; -use std::sync::Arc; +use std::{str::FromStr, fmt::Debug, marker::PhantomData, sync::Arc}; #[cfg(target_family = "unix")] async fn main(func: F) -> std::result::Result<(), Box> @@ -183,8 +181,9 @@ impl Runner { B: FnOnce(Configuration) -> sc_service::error::Result, BC: ServiceBuilderCommand + Unpin, BB: sp_runtime::traits::Block + Debug, - <<::Header as HeaderT>::Number as std::str::FromStr>::Err: Debug, - ::Hash: std::str::FromStr, + <<::Header as HeaderT>::Number as FromStr>::Err: Debug, + ::Hash: FromStr, + <::Hash as FromStr>::Err: Debug, { match subcommand { Subcommand::BuildSpec(cmd) => cmd.run(self.config), @@ -199,6 +198,7 @@ impl Runner { } Subcommand::Revert(cmd) => cmd.run(self.config, builder), Subcommand::PurgeChain(cmd) => cmd.run(self.config), + Subcommand::ExportState(cmd) => cmd.run(self.config, builder), } } diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index 832fd5b8ea7..be9c10631eb 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -34,7 +34,7 @@ use futures::{ Future, FutureExt, StreamExt, future::ready, }; -use sc_keystore::{Store as Keystore}; +use sc_keystore::Store as Keystore; use log::{info, warn, error}; use sc_network::config::{Role, FinalityProofProvider, OnDemand, BoxFinalityProofRequestBuilder}; use sc_network::{NetworkService, NetworkStateInfo}; @@ -59,6 +59,7 @@ use sc_client_db::{Backend, DatabaseSettings}; use sp_core::traits::CodeExecutor; use sp_runtime::BuildStorage; use sc_client_api::execution_extensions::ExecutionExtensions; +use sp_core::storage::Storage; pub type BackgroundTask = Pin + Send>>; @@ -771,6 +772,13 @@ pub trait ServiceBuilderCommand { self, block: BlockId ) -> Pin> + Send>>; + + /// Export the raw state at the given `block`. If `block` is `None`, the + /// best block will be used. + fn export_raw_state( + &self, + block: Option>, + ) -> Result; } impl diff --git a/client/service/src/chain_ops.rs b/client/service/src/chain_ops.rs index 6303376dc16..612e9310d18 100644 --- a/client/service/src/chain_ops.rs +++ b/client/service/src/chain_ops.rs @@ -33,13 +33,14 @@ use sp_consensus::{ import_queue::{IncomingBlock, Link, BlockImportError, BlockImportResult, ImportQueue}, }; use sc_executor::{NativeExecutor, NativeExecutionDispatch}; +use sp_core::storage::{StorageKey, well_known_keys, ChildInfo, Storage, StorageChild, StorageMap}; +use sc_client_api::{StorageProvider, BlockBackend, UsageProvider}; -use std::{io::{Read, Write, Seek}, pin::Pin}; -use sc_client_api::BlockBackend; +use std::{io::{Read, Write, Seek}, pin::Pin, collections::HashMap}; /// Build a chain spec json pub fn build_spec(spec: &dyn ChainSpec, raw: bool) -> error::Result { - Ok(spec.as_json(raw)?) + spec.as_json(raw).map_err(Into::into) } impl< @@ -298,4 +299,45 @@ impl< Err(e) => Box::pin(future::err(format!("Error reading block: {:?}", e).into())), } } + + fn export_raw_state( + &self, + block: Option>, + ) -> Result { + let block = block.unwrap_or_else( + || BlockId::Hash(self.client.usage_info().chain.best_hash) + ); + + let empty_key = StorageKey(Vec::new()); + let mut top_storage = self.client.storage_pairs(&block, &empty_key)?; + let mut children_default = HashMap::new(); + + // Remove all default child storage roots from the top storage and collect the child storage + // pairs. + while let Some(pos) = top_storage + .iter() + .position(|(k, _)| k.0.starts_with(well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX)) { + let (key, _) = top_storage.swap_remove(pos); + + let key = StorageKey( + key.0[well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX.len()..].to_vec(), + ); + let child_info = ChildInfo::new_default(&key.0); + + let keys = self.client.child_storage_keys(&block, &child_info, &empty_key)?; + let mut pairs = StorageMap::new(); + keys.into_iter().try_for_each(|k| { + if let Some(value) = self.client.child_storage(&block, &child_info, &k)? { + pairs.insert(k.0, value.0); + } + + Ok::<_, Error>(()) + })?; + + children_default.insert(key.0, StorageChild { child_info, data: pairs }); + } + + let top = top_storage.into_iter().map(|(k, v)| (k.0, v.0)).collect(); + Ok(Storage { top, children_default }) + } } diff --git a/client/service/src/client/client.rs b/client/service/src/client/client.rs index 9758bbe01e7..a5a02c85cfd 100644 --- a/client/service/src/client/client.rs +++ b/client/service/src/client/client.rs @@ -1321,8 +1321,11 @@ impl StorageProvider for Client wher } - fn storage(&self, id: &BlockId, key: &StorageKey) -> sp_blockchain::Result> - { + fn storage( + &self, + id: &BlockId, + key: &StorageKey, + ) -> sp_blockchain::Result> { Ok(self.state_at(id)? .storage(&key.0).map_err(|e| sp_blockchain::Error::from_state(Box::new(e)))? .map(StorageData) @@ -1330,8 +1333,11 @@ impl StorageProvider for Client wher } - fn storage_hash(&self, id: &BlockId, key: &StorageKey) -> sp_blockchain::Result> - { + fn storage_hash( + &self, + id: &BlockId, + key: &StorageKey, + ) -> sp_blockchain::Result> { Ok(self.state_at(id)? .storage_hash(&key.0).map_err(|e| sp_blockchain::Error::from_state(Box::new(e)))? ) diff --git a/primitives/storage/src/lib.rs b/primitives/storage/src/lib.rs index d2c4a73e23d..ed90c4584b2 100644 --- a/primitives/storage/src/lib.rs +++ b/primitives/storage/src/lib.rs @@ -92,9 +92,9 @@ pub struct StorageData( #[cfg(feature = "std")] pub type StorageMap = std::collections::BTreeMap, Vec>; +/// Child trie storage data. #[cfg(feature = "std")] #[derive(Debug, PartialEq, Eq, Clone)] -/// Child trie storage data. pub struct StorageChild { /// Child data for storage. pub data: StorageMap, @@ -103,9 +103,9 @@ pub struct StorageChild { pub child_info: ChildInfo, } +/// Struct containing data needed for a storage. #[cfg(feature = "std")] #[derive(Default, Debug, Clone)] -/// Struct containing data needed for a storage. pub struct Storage { /// Top trie storage data. pub top: StorageMap, @@ -148,6 +148,9 @@ pub mod well_known_keys { /// Prefix of child storage keys. pub const CHILD_STORAGE_KEY_PREFIX: &'static [u8] = b":child_storage:"; + /// Prefix of the default child storage keys in the top trie. + pub const DEFAULT_CHILD_STORAGE_KEY_PREFIX: &'static [u8] = b":child_storage:default:"; + /// Whether a key is a child storage key. /// /// This is convenience function which basically checks if the given `key` starts @@ -300,7 +303,7 @@ impl ChildType { /// is one. pub fn parent_prefix(&self) -> &'static [u8] { match self { - &ChildType::ParentKeyId => DEFAULT_CHILD_TYPE_PARENT_PREFIX, + &ChildType::ParentKeyId => well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX, } } } @@ -331,12 +334,10 @@ impl ChildTrieParentKeyId { } } -const DEFAULT_CHILD_TYPE_PARENT_PREFIX: &'static [u8] = b":child_storage:default:"; - #[test] fn test_prefix_default_child_info() { let child_info = ChildInfo::new_default(b"any key"); let prefix = child_info.child_type().parent_prefix(); assert!(prefix.starts_with(well_known_keys::CHILD_STORAGE_KEY_PREFIX)); - assert!(prefix.starts_with(DEFAULT_CHILD_TYPE_PARENT_PREFIX)); + assert!(prefix.starts_with(well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX)); } -- GitLab From 6d8ddd4724607f6a5a5f398b658b32b145862f11 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 30 Apr 2020 15:46:44 +0200 Subject: [PATCH 109/167] Frame System Benchmarking (#5834) * Frame System Benchmarking * Add to substrate node, avoid divide by zero errors in analysis * reduce features * some fixes * copy pasta --- Cargo.lock | 16 +++ Cargo.toml | 2 +- bin/node/runtime/Cargo.toml | 2 + bin/node/runtime/src/lib.rs | 3 + frame/benchmarking/src/analysis.rs | 26 +++- frame/session/benchmarking/src/mock.rs | 2 +- frame/system/benchmarking/Cargo.toml | 37 +++++ frame/system/benchmarking/src/lib.rs | 179 +++++++++++++++++++++++++ frame/system/benchmarking/src/mock.rs | 82 +++++++++++ frame/system/src/lib.rs | 5 +- 10 files changed, 341 insertions(+), 13 deletions(-) create mode 100644 frame/system/benchmarking/Cargo.toml create mode 100644 frame/system/benchmarking/src/lib.rs create mode 100644 frame/system/benchmarking/src/mock.rs diff --git a/Cargo.lock b/Cargo.lock index 48c1252236d..fb112d433ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1556,6 +1556,21 @@ dependencies = [ "substrate-test-runtime-client", ] +[[package]] +name = "frame-system-benchmarking" +version = "2.0.0-dev" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "serde", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", +] + [[package]] name = "frame-system-rpc-runtime-api" version = "2.0.0-dev" @@ -3574,6 +3589,7 @@ dependencies = [ "frame-executive", "frame-support", "frame-system", + "frame-system-benchmarking", "frame-system-rpc-runtime-api", "integer-sqrt", "node-primitives", diff --git a/Cargo.toml b/Cargo.toml index 35d396741f1..3882e96611e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -103,6 +103,7 @@ members = [ "frame/support/procedural/tools/derive", "frame/support/test", "frame/system", + "frame/system/benchmarking", "frame/system/rpc/runtime-api", "frame/timestamp", "frame/transaction-payment", @@ -181,4 +182,3 @@ members = [ [profile.release] # Substrate runtime requires unwinding. panic = "unwind" - diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index bf360821c84..9e39d9d24e1 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -40,6 +40,7 @@ frame-executive = { version = "2.0.0-dev", default-features = false, path = "../ frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/benchmarking", optional = true } frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } frame-system = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system" } +frame-system-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/benchmarking", optional = true } frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/rpc/runtime-api/" } pallet-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authority-discovery" } pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authorship" } @@ -155,4 +156,5 @@ runtime-benchmarks = [ "pallet-vesting/runtime-benchmarks", "pallet-offences-benchmarking", "pallet-session-benchmarking", + "frame-system-benchmarking", ] diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 641cbf44ebe..1458c00d819 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -902,9 +902,11 @@ impl_runtime_apis! { // we need these two lines below. use pallet_session_benchmarking::Module as SessionBench; use pallet_offences_benchmarking::Module as OffencesBench; + use frame_system_benchmarking::Module as SystemBench; impl pallet_session_benchmarking::Trait for Runtime {} impl pallet_offences_benchmarking::Trait for Runtime {} + impl frame_system_benchmarking::Trait for Runtime {} let mut batches = Vec::::new(); let params = (&pallet, &benchmark, &lowest_range_values, &highest_range_values, &steps, repeat); @@ -917,6 +919,7 @@ impl_runtime_apis! { add_benchmark!(params, batches, b"offences", OffencesBench::); add_benchmark!(params, batches, b"session", SessionBench::); add_benchmark!(params, batches, b"staking", Staking); + add_benchmark!(params, batches, b"system", SystemBench::); add_benchmark!(params, batches, b"timestamp", Timestamp); add_benchmark!(params, batches, b"treasury", Treasury); add_benchmark!(params, batches, b"utility", Utility); diff --git a/frame/benchmarking/src/analysis.rs b/frame/benchmarking/src/analysis.rs index fdf1210832c..1d30b86fc9f 100644 --- a/frame/benchmarking/src/analysis.rs +++ b/frame/benchmarking/src/analysis.rs @@ -138,6 +138,8 @@ impl Analysis { .collect(); let value_dists = results.iter().map(|(p, vs)| { + // Avoid divide by zero + if vs.len() == 0 { return (p.clone(), 0, 0) } let total = vs.iter() .fold(0u128, |acc, v| acc + *v); let mean = total / vs.len() as u128; @@ -178,13 +180,23 @@ impl std::fmt::Display for Analysis { writeln!(f, "\nData points distribution:")?; writeln!(f, "{} mean µs sigma µs %", self.names.iter().map(|p| format!("{:>5}", p)).collect::>().join(" "))?; for (param_values, mean, sigma) in value_dists.iter() { - writeln!(f, "{} {:>8} {:>8} {:>3}.{}%", - param_values.iter().map(|v| format!("{:>5}", v)).collect::>().join(" "), - ms(*mean), - ms(*sigma), - (sigma * 100 / mean), - (sigma * 1000 / mean % 10) - )?; + if *mean == 0 { + writeln!(f, "{} {:>8} {:>8} {:>3}.{}%", + param_values.iter().map(|v| format!("{:>5}", v)).collect::>().join(" "), + ms(*mean), + ms(*sigma), + "?", + "?" + )?; + } else { + writeln!(f, "{} {:>8} {:>8} {:>3}.{}%", + param_values.iter().map(|v| format!("{:>5}", v)).collect::>().join(" "), + ms(*mean), + ms(*sigma), + (sigma * 100 / mean), + (sigma * 1000 / mean % 10) + )?; + } } } if let Some(ref model) = self.model { diff --git a/frame/session/benchmarking/src/mock.rs b/frame/session/benchmarking/src/mock.rs index d488fe4eac2..5a7082dabba 100644 --- a/frame/session/benchmarking/src/mock.rs +++ b/frame/session/benchmarking/src/mock.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -//! Mock file for staking fuzzing. +//! Mock file for session benchmarking. #![cfg(test)] diff --git a/frame/system/benchmarking/Cargo.toml b/frame/system/benchmarking/Cargo.toml new file mode 100644 index 00000000000..0518bd705dc --- /dev/null +++ b/frame/system/benchmarking/Cargo.toml @@ -0,0 +1,37 @@ +[package] +name = "frame-system-benchmarking" +version = "2.0.0-dev" +authors = ["Parity Technologies "] +edition = "2018" +license = "GPL-3.0" +homepage = "https://substrate.dev" +repository = "https://github.com/paritytech/substrate/" +description = "FRAME System benchmarking" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } + +[dev-dependencies] +serde = { version = "1.0.101" } +sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} + +[features] +default = ["std"] +std = [ + "codec/std", + "sp-runtime/std", + "sp-std/std", + "frame-benchmarking/std", + "frame-system/std", + "frame-support/std", + "sp-core/std", +] diff --git a/frame/system/benchmarking/src/lib.rs b/frame/system/benchmarking/src/lib.rs new file mode 100644 index 00000000000..b9b9619c09b --- /dev/null +++ b/frame/system/benchmarking/src/lib.rs @@ -0,0 +1,179 @@ +// Copyright 2019-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +// Benchmarks for Utility Pallet + +#![cfg_attr(not(feature = "std"), no_std)] + +use codec::Encode; +use sp_std::vec; +use sp_std::prelude::*; +use sp_core::{ChangesTrieConfiguration, storage::well_known_keys}; +use sp_runtime::traits::Hash; +use frame_benchmarking::{benchmarks, account}; +use frame_support::storage::{self, StorageMap}; +use frame_system::{Module as System, Call, RawOrigin, DigestItemOf, AccountInfo}; + +mod mock; + +const SEED: u32 = 0; + +pub struct Module(System); +pub trait Trait: frame_system::Trait {} + +benchmarks! { + _ { } + + remark { + // # of Bytes + let b in 0 .. 16_384; + let remark_message = vec![1; b as usize]; + let caller = account("caller", 0, SEED); + }: _(RawOrigin::Signed(caller), remark_message) + + set_heap_pages { + // Heap page size + let i in 0 .. u32::max_value(); + }: _(RawOrigin::Root, i.into()) + + // `set_code` was not benchmarked because it is pretty hard to come up with a real + // Wasm runtime to test the upgrade with. But this is okay because we will make + // `set_code` take a full block anyway. + + set_code_without_checks { + // Version number + let b in 0 .. 16_384; + let code = vec![1; b as usize]; + }: _(RawOrigin::Root, code) + verify { + let current_code = storage::unhashed::get_raw(well_known_keys::CODE).ok_or("Code not stored.")?; + assert_eq!(current_code.len(), b as usize); + } + + set_changes_trie_config { + let d in 0 .. 1000; + + let digest_item = DigestItemOf::::Other(vec![]); + + for i in 0 .. d { + System::::deposit_log(digest_item.clone()); + } + let changes_trie_config = ChangesTrieConfiguration { + digest_interval: d, + digest_levels: d, + }; + }: _(RawOrigin::Root, Some(changes_trie_config)) + verify { + assert_eq!(System::::digest().logs.len(), (d + 1) as usize) + } + + set_storage { + let i in 1 .. 1000; + + // Set up i items to add + let mut items = Vec::new(); + for j in 0 .. i { + let hash = (i, j).using_encoded(T::Hashing::hash).as_ref().to_vec(); + items.push((hash.clone(), hash.clone())); + } + }: _(RawOrigin::Root, items) + verify { + let last_hash = (i, i - 1).using_encoded(T::Hashing::hash); + let value = storage::unhashed::get_raw(last_hash.as_ref()).ok_or("No value stored")?; + assert_eq!(value, last_hash.as_ref().to_vec()); + } + + kill_storage { + let i in 1 .. 1000; + + // Add i items to storage + let mut items = Vec::new(); + for j in 0 .. i { + let hash = (i, j).using_encoded(T::Hashing::hash).as_ref().to_vec(); + storage::unhashed::put_raw(&hash, &hash); + items.push(hash); + } + + // We will verify this value is removed + let last_hash = (i, i - 1).using_encoded(T::Hashing::hash); + let value = storage::unhashed::get_raw(last_hash.as_ref()).ok_or("No value stored")?; + assert_eq!(value, last_hash.as_ref().to_vec()); + + }: _(RawOrigin::Root, items) + verify { + assert_eq!(storage::unhashed::get_raw(last_hash.as_ref()), None); + } + + kill_prefix { + let p in 1 .. 1000; + + let prefix = p.using_encoded(T::Hashing::hash).as_ref().to_vec(); + // add p items that share a prefix + for i in 0 .. p { + let hash = (p, i).using_encoded(T::Hashing::hash).as_ref().to_vec(); + let key = [&prefix[..], &hash[..]].concat(); + storage::unhashed::put_raw(&key, &key); + } + + // We will verify this value is removed + let last_hash = (p, p - 1).using_encoded(T::Hashing::hash).as_ref().to_vec(); + let last_key = [&prefix[..], &last_hash[..]].concat(); + let value = storage::unhashed::get_raw(&last_key).ok_or("No value stored")?; + assert_eq!(value, last_key); + + }: _(RawOrigin::Root, prefix) + verify { + assert_eq!(storage::unhashed::get_raw(&last_key), None); + } + + suicide { + let n in 1 .. 1000; + let caller: T::AccountId = account("caller", 0, SEED); + let account_info = AccountInfo:: { + nonce: n.into(), + refcount: 0, + data: T::AccountData::default() + }; + frame_system::Account::::insert(&caller, account_info); + let new_account_info = System::::account(caller.clone()); + assert_eq!(new_account_info.nonce, n.into()); + }: _(RawOrigin::Signed(caller.clone())) + verify { + let account_info = System::::account(&caller); + assert_eq!(account_info.nonce, 0.into()); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::{new_test_ext, Test}; + use frame_support::assert_ok; + + #[test] + fn test_benchmarks() { + new_test_ext().execute_with(|| { + assert_ok!(test_benchmark_remark::()); + assert_ok!(test_benchmark_set_heap_pages::()); + assert_ok!(test_benchmark_set_code_without_checks::()); + assert_ok!(test_benchmark_set_changes_trie_config::()); + assert_ok!(test_benchmark_set_storage::()); + assert_ok!(test_benchmark_kill_storage::()); + assert_ok!(test_benchmark_kill_prefix::()); + assert_ok!(test_benchmark_suicide::()); + }); + } +} diff --git a/frame/system/benchmarking/src/mock.rs b/frame/system/benchmarking/src/mock.rs new file mode 100644 index 00000000000..1e72665c155 --- /dev/null +++ b/frame/system/benchmarking/src/mock.rs @@ -0,0 +1,82 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Mock file for system benchmarking. + +#![cfg(test)] + +use sp_runtime::traits::IdentityLookup; +use frame_support::{ + impl_outer_origin, + dispatch::{Dispatchable, DispatchInfo, PostDispatchInfo}, +}; + +type AccountId = u64; +type AccountIndex = u32; +type BlockNumber = u64; + +impl_outer_origin! { + pub enum Origin for Test where system = frame_system {} +} + +#[derive(Debug, codec::Encode, codec::Decode)] +pub struct Call; + +impl Dispatchable for Call { + type Origin = (); + type Trait = (); + type Info = DispatchInfo; + type PostInfo = PostDispatchInfo; + fn dispatch(self, _origin: Self::Origin) + -> sp_runtime::DispatchResultWithInfo { + panic!("Do not use dummy implementation for dispatch."); + } +} + +#[derive(Clone, Eq, PartialEq, Debug)] +pub struct Test; + +impl frame_system::Trait for Test { + type Origin = Origin; + type Index = AccountIndex; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = sp_core::H256; + type Hashing = ::sp_runtime::traits::BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = sp_runtime::testing::Header; + type Event = (); + type BlockHashCount = (); + type MaximumBlockWeight = (); + type DbWeight = (); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); + type AvailableBlockRatio = (); + type MaximumBlockLength = (); + type Version = (); + type ModuleToIndex = (); + type AccountData = (); + type OnNewAccount = (); + type OnKilledAccount = (); +} + +impl crate::Trait for Test {} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::default().build_storage::().unwrap(); + sp_io::TestExternalities::new(t) +} diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 234e427d3a3..5a3097e62ef 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -470,7 +470,6 @@ decl_error! { /// /// Either calling `Core_version` or decoding `RuntimeVersion` failed. FailedToExtractRuntimeVersion, - /// Suicide called when the account has non-default composite data. NonDefaultComposite, /// There is a non-zero reference count preventing the account from being purged. @@ -629,10 +628,8 @@ decl_module! { /// data is equal to its default value. /// /// # - /// - `O(K)` with `K` being complexity of `on_killed_account` + /// - `O(1)` /// - 1 storage read and deletion. - /// - 1 call to `on_killed_account` callback with unknown complexity `K` - /// - 1 event. /// # #[weight = (25_000_000, DispatchClass::Operational)] fn suicide(origin) { -- GitLab From 417bd38902aedb4eed346e80ced4c0879c7c424a Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Thu, 30 Apr 2020 11:07:25 -0400 Subject: [PATCH 110/167] Update docs for BeforeBestBlockBy (#5849) --- client/finality-grandpa/src/voting_rule.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/finality-grandpa/src/voting_rule.rs b/client/finality-grandpa/src/voting_rule.rs index 523a1b05cd4..bcf17039a89 100644 --- a/client/finality-grandpa/src/voting_rule.rs +++ b/client/finality-grandpa/src/voting_rule.rs @@ -68,7 +68,8 @@ impl VotingRule for () where } /// A custom voting rule that guarantees that our vote is always behind the best -/// block, in the best case exactly one block behind it. +/// block by at least N blocks. In the best case our vote is exactly N blocks +/// behind the best block. #[derive(Clone)] pub struct BeforeBestBlockBy(N); impl VotingRule for BeforeBestBlockBy> where -- GitLab From 4ddac091cd2d404771530b1a3f301fe5b942857f Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Thu, 30 Apr 2020 18:14:21 +0200 Subject: [PATCH 111/167] minor fixes for elections-phragmen (#5850) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * minor fixes for elections-phragmen * Update frame/elections-phragmen/src/lib.rs Co-authored-by: Bastian Köcher * Update frame/elections-phragmen/src/lib.rs Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Co-authored-by: Bastian Köcher Co-authored-by: Gavin Wood --- frame/elections-phragmen/src/lib.rs | 96 ++++++++++++++++++----------- 1 file changed, 61 insertions(+), 35 deletions(-) diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index d77bd750e80..6cb10f54c7a 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -245,34 +245,12 @@ decl_error! { } } -mod migration { - use super::*; - use frame_support::{migration::{StorageKeyIterator, take_storage_item}, Twox64Concat}; - pub fn migrate() { - for (who, votes) in StorageKeyIterator - ::, Twox64Concat> - ::new(b"PhragmenElection", b"VotesOf") - .drain() - { - if let Some(stake) = take_storage_item::<_, BalanceOf, Twox64Concat>(b"PhragmenElection", b"StakeOf", &who) { - Voting::::insert(who, (stake, votes)); - } - } - } -} - decl_module! { pub struct Module for enum Call where origin: T::Origin { type Error = Error; fn deposit_event() = default; - fn on_runtime_upgrade() -> Weight { - migration::migrate::(); - - 0 - } - const CandidacyBond: BalanceOf = T::CandidacyBond::get(); const VotingBond: BalanceOf = T::VotingBond::get(); const DesiredMembers: u32 = T::DesiredMembers::get(); @@ -301,8 +279,9 @@ decl_module! { let candidates_count = >::decode_len().unwrap_or(0) as usize; let members_count = >::decode_len().unwrap_or(0) as usize; - // addition is valid: candidates and members never overlap. - let allowed_votes = candidates_count + members_count; + let runners_up_count = >::decode_len().unwrap_or(0) as usize; + // addition is valid: candidates, members and runners-up will never overlap. + let allowed_votes = candidates_count + members_count + runners_up_count; ensure!(!allowed_votes.is_zero(), Error::::UnableToVote); ensure!(votes.len() <= allowed_votes, Error::::TooManyVotes); @@ -524,10 +503,13 @@ decl_event!( Balance = BalanceOf, ::AccountId, { - /// A new term with new members. This indicates that enough candidates existed, not that - /// enough have has been elected. The inner value must be examined for this purpose. + /// A new term with new members. This indicates that enough candidates existed to run the + /// election, not that enough have has been elected. The inner value must be examined for + /// this purpose. A `NewTerm([])` indicates that some candidates got their bond slashed and + /// none were elected, whilst `EmptyTerm` means that no candidates existed to begin with. NewTerm(Vec<(AccountId, Balance)>), - /// No (or not enough) candidates existed for this round. + /// No (or not enough) candidates existed for this round. This is different from + /// `NewTerm([])`. See the description of `NewTerm`. EmptyTerm, /// A member has been removed. This should always be followed by either `NewTerm` ot /// `EmptyTerm`. @@ -737,7 +719,7 @@ impl Module { .collect::>(); // filter out those who had literally no votes at all. - // AUDIT/NOTE: the need to do this is because all candidates, even those who have no + // NOTE: the need to do this is because all candidates, even those who have no // vote are still considered by phragmen and when good candidates are scarce, then these // cheap ones might get elected. We might actually want to remove the filter and allow // zero-voted candidates to also make it to the membership set. @@ -747,6 +729,11 @@ impl Module { .filter_map(|(m, a)| if a.is_zero() { None } else { Some(m) } ) .collect::>(); + // OPTIMISATION NOTE: we could bail out here if `new_set.len() == 0`. There isn't much + // left to do. Yet, re-arranging the code would require duplicating the slashing of + // exposed candidates, cleaning any previous members, and so on. For now, in favour of + // readability and veracity, we keep it simple. + let staked_assignments = sp_phragmen::assignment_ratio_to_staked( assignments, stake_of, @@ -1108,6 +1095,10 @@ mod tests { self.genesis_members = members; self } + pub fn balance_factor(mut self, factor: u64) -> Self { + self.balance_factor = factor; + self + } pub fn build_and_execute(self, test: impl FnOnce() -> ()) { VOTING_BOND.with(|v| *v.borrow_mut() = self.voter_bond); TERM_DURATION.with(|v| *v.borrow_mut() = self.term_duration); @@ -1251,20 +1242,27 @@ mod tests { #[should_panic = "Genesis member does not have enough stake"] fn genesis_members_cannot_over_stake_0() { // 10 cannot lock 20 as their stake and extra genesis will panic. - ExtBuilder::default().genesis_members(vec![(1, 20), (2, 20)]).build_and_execute(|| {}); + ExtBuilder::default() + .genesis_members(vec![(1, 20), (2, 20)]) + .build_and_execute(|| {}); } #[test] #[should_panic] fn genesis_members_cannot_over_stake_1() { // 10 cannot reserve 20 as voting bond and extra genesis will panic. - ExtBuilder::default().voter_bond(20).genesis_members(vec![(1, 10), (2, 20)]).build_and_execute(|| {}); + ExtBuilder::default() + .voter_bond(20) + .genesis_members(vec![(1, 10), (2, 20)]) + .build_and_execute(|| {}); } #[test] #[should_panic = "Duplicate member in elections phragmen genesis: 2"] fn genesis_members_cannot_be_duplicate() { - ExtBuilder::default().genesis_members(vec![(1, 10), (2, 10), (2, 10)]).build_and_execute(|| {}); + ExtBuilder::default() + .genesis_members(vec![(1, 10), (2, 10), (2, 10)]) + .build_and_execute(|| {}); } #[test] @@ -1539,13 +1537,36 @@ mod tests { } #[test] - fn cannot_vote_for_more_than_candidates() { - ExtBuilder::default().build_and_execute(|| { + fn cannot_vote_for_more_than_candidates_and_members_and_runners() { + ExtBuilder::default() + .desired_runners_up(1) + .balance_factor(10) + .build_and_execute( + || { + // when we have only candidates assert_ok!(Elections::submit_candidacy(Origin::signed(5))); assert_ok!(Elections::submit_candidacy(Origin::signed(4))); + assert_ok!(Elections::submit_candidacy(Origin::signed(3))); assert_noop!( - Elections::vote(Origin::signed(2), vec![10, 20, 30], 20), + // content of the vote is irrelevant. + Elections::vote(Origin::signed(1), vec![9, 99, 999, 9999], 5), + Error::::TooManyVotes, + ); + + assert_ok!(Elections::vote(Origin::signed(3), vec![3], 30)); + assert_ok!(Elections::vote(Origin::signed(4), vec![4], 40)); + assert_ok!(Elections::vote(Origin::signed(5), vec![5], 50)); + + System::set_block_number(5); + assert_ok!(Elections::end_block(System::block_number())); + + // now we have 2 members, 1 runner-up, and 1 new candidate + assert_ok!(Elections::submit_candidacy(Origin::signed(2))); + + assert_ok!(Elections::vote(Origin::signed(1), vec![9, 99, 999, 9999], 5)); + assert_noop!( + Elections::vote(Origin::signed(1), vec![9, 99, 999, 9_999, 99_999], 5), Error::::TooManyVotes, ); }); @@ -1750,7 +1771,6 @@ mod tests { }); } - #[test] fn simple_voting_rounds_should_work() { ExtBuilder::default().build_and_execute(|| { @@ -1847,6 +1867,11 @@ mod tests { assert_eq!(Elections::candidates(), vec![]); assert_eq!(Elections::election_rounds(), 1); assert_eq!(Elections::members_ids(), vec![]); + + assert_eq!( + System::events().iter().last().unwrap().event, + Event::elections_phragmen(RawEvent::NewTerm(vec![])), + ) }); } @@ -2366,6 +2391,7 @@ mod tests { #[test] fn behavior_with_dupe_candidate() { ExtBuilder::default().desired_runners_up(2).build_and_execute(|| { + // TODD: this is a demonstration and should be fixed with #4593 >::put(vec![1, 1, 2, 3, 4]); assert_ok!(Elections::vote(Origin::signed(5), vec![1], 50)); -- GitLab From 1854cece602ff91fb64e11f9067d32e7463f88f7 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 30 Apr 2020 19:18:46 +0300 Subject: [PATCH 112/167] empty block benchmark (#5852) --- bin/node/bench/src/import.rs | 3 +++ bin/node/bench/src/main.rs | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/bin/node/bench/src/import.rs b/bin/node/bench/src/import.rs index a6e4eb2514e..ed40f1b459a 100644 --- a/bin/node/bench/src/import.rs +++ b/bin/node/bench/src/import.rs @@ -39,6 +39,8 @@ use crate::core::{self, Path, Mode}; #[derive(Clone, Copy, Debug, derive_more::Display)] pub enum SizeType { + #[display(fmt = "empty")] + Empty, #[display(fmt = "small")] Small, #[display(fmt = "medium")] @@ -52,6 +54,7 @@ pub enum SizeType { impl SizeType { fn transactions(&self) -> usize { match self { + SizeType::Empty => 0, SizeType::Small => 10, SizeType::Medium => 100, SizeType::Large => 500, diff --git a/bin/node/bench/src/main.rs b/bin/node/bench/src/main.rs index d2eca8d7de5..27c9358f9d6 100644 --- a/bin/node/bench/src/main.rs +++ b/bin/node/bench/src/main.rs @@ -73,6 +73,11 @@ fn main() { key_types: KeyTypes::Sr25519, size: SizeType::Medium, }, + ImportBenchmarkDescription { + profile: Profile::Wasm, + key_types: KeyTypes::Sr25519, + size: SizeType::Empty, + }, ImportBenchmarkDescription { profile: Profile::Native, key_types: KeyTypes::Ed25519, -- GitLab From 69a21077ee249ef72db7e7d8ce29307b779240e1 Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Thu, 30 Apr 2020 19:38:28 +0200 Subject: [PATCH 113/167] Include the network overhead in the request-in-time metric (#5854) --- client/network/src/behaviour.rs | 4 +-- client/network/src/block_requests.rs | 46 +++++++++++++++------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 3b6224e9cc5..d6949b491c8 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -304,11 +304,11 @@ Behaviour { impl NetworkBehaviourEventProcess> for Behaviour { fn inject_event(&mut self, event: block_requests::Event) { match event { - block_requests::Event::AnsweredRequest { peer, response_build_time } => { + block_requests::Event::AnsweredRequest { peer, total_handling_time } => { self.events.push(BehaviourOut::AnsweredRequest { peer, protocol: self.block_requests.protocol_name().to_vec(), - build_time: response_build_time, + build_time: total_handling_time, }); }, block_requests::Event::Response { peer, original_request, response, request_duration } => { diff --git a/client/network/src/block_requests.rs b/client/network/src/block_requests.rs index e8c96cc6d8e..b3e79398405 100644 --- a/client/network/src/block_requests.rs +++ b/client/network/src/block_requests.rs @@ -74,12 +74,12 @@ pub type Error = Box; /// Event generated by the block requests behaviour. #[derive(Debug)] pub enum Event { - /// A request came and we answered it. + /// A request came and we have successfully answered it. AnsweredRequest { /// Peer which has emitted the request. peer: PeerId, - /// Time it took to compute the response. - response_build_time: Duration, + /// Time elapsed between when we received the request and when we sent back the response. + total_handling_time: Duration, }, /// A response to a block request has arrived. @@ -190,8 +190,9 @@ pub struct BlockRequests { chain: Arc>, /// List of all active connections and the requests we've sent. peers: HashMap>>, - /// Futures sending back the block request response. - outgoing: FuturesUnordered>, + /// Futures sending back the block request response. Returns the `PeerId` we sent back to, and + /// the total time the handling of this request took. + outgoing: FuturesUnordered>, /// Events to return as soon as possible from `poll`. pending_events: VecDeque, Event>>, } @@ -533,9 +534,7 @@ where node_event: NodeEvent ) { match node_event { - NodeEvent::Request(request, mut stream) => { - let before_answer_build = Instant::now(); - + NodeEvent::Request(request, mut stream, handling_start) => { match self.on_block_request(&peer, &request) { Ok(res) => { log::trace!( @@ -551,7 +550,7 @@ where peer, e ) } else { - let future = async move { + self.outgoing.push(async move { if let Err(e) = write_one(&mut stream, data).await { log::debug!( target: "sync", @@ -559,8 +558,8 @@ where e ); } - }; - self.outgoing.push(future.boxed()) + (peer, handling_start.elapsed()) + }.boxed()); } } Err(e) => log::debug!( @@ -568,12 +567,6 @@ where "Error handling block request from peer {}: {}", peer, e ) } - - let ev = Event::AnsweredRequest { - peer: peer.clone(), - response_build_time: before_answer_build.elapsed(), - }; - self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); } NodeEvent::Response(original_request, response) => { log::trace!( @@ -711,7 +704,14 @@ where } } - while let Poll::Ready(Some(_)) = self.outgoing.poll_next_unpin(cx) {} + while let Poll::Ready(Some((peer, total_handling_time))) = self.outgoing.poll_next_unpin(cx) { + let ev = Event::AnsweredRequest { + peer, + total_handling_time, + }; + self.pending_events.push_back(NetworkBehaviourAction::GenerateEvent(ev)); + } + Poll::Pending } } @@ -719,8 +719,9 @@ where /// Output type of inbound and outbound substream upgrades. #[derive(Debug)] pub enum NodeEvent { - /// Incoming request from remote and substream to use for the response. - Request(schema::v1::BlockRequest, T), + /// Incoming request from remote, substream to use for the response, and when we started + /// handling this request. + Request(schema::v1::BlockRequest, T, Instant), /// Incoming response from remote. Response(message::BlockRequest, schema::v1::BlockResponse), } @@ -760,11 +761,14 @@ where type Future = BoxFuture<'static, Result>; fn upgrade_inbound(self, mut s: T, _: Self::Info) -> Self::Future { + // This `Instant` will be passed around until the processing of this request is done. + let handling_start = Instant::now(); + let future = async move { let len = self.max_request_len; let vec = read_one(&mut s, len).await?; match schema::v1::BlockRequest::decode(&vec[..]) { - Ok(r) => Ok(NodeEvent::Request(r, s)), + Ok(r) => Ok(NodeEvent::Request(r, s, handling_start)), Err(e) => Err(ReadOneError::Io(io::Error::new(io::ErrorKind::Other, e))) } }; -- GitLab From 925805bf272a829f06c8501393f48dd4982ecf98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Thu, 30 Apr 2020 19:33:52 +0100 Subject: [PATCH 114/167] docs: update codeowners (#5856) --- docs/CODEOWNERS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index ddb776ea22a..7559a9ee2b2 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -49,8 +49,8 @@ # GRANDPA, BABE, consensus stuff /frame/babe/ @andresilva @DemiMarie-parity -/frame/grandpa/ @andresilva @DemiMarie-parity -/client/finality-grandpa/ @andresilva @DemiMarie-parity +/frame/grandpa/ @andresilva +/client/finality-grandpa/ @andresilva /client/consensus/babe/ @andresilva @DemiMarie-parity /client/consensus/slots/ @andresilva @DemiMarie-parity /client/consensus/pow/ @sorpaas -- GitLab From 100f6116c3e377271f840ac9e9eaf261b8fd3bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Thu, 30 Apr 2020 21:03:30 +0100 Subject: [PATCH 115/167] grandpa: update to finality-grandpa v0.12.0 (#5853) * grandpa: update to v0.12.0 * grandpa: fix tests * grandpa: better validation of authority set invariants * grandpa: avoid duplicating invalid authority list check * grandpa: add missing doc * grandpa: better validation of expect proofs * grandpa: fix test compilation * grandpa: fix tests * grandpa: add test for AuthoritySet invariants * grandpa: bump finality-grandpa to v0.12.0 --- Cargo.lock | 6 +- client/finality-grandpa/Cargo.toml | 5 +- client/finality-grandpa/src/authorities.rs | 178 +++++++++++++++--- client/finality-grandpa/src/aux_schema.rs | 47 ++--- .../src/communication/gossip.rs | 5 +- .../finality-grandpa/src/communication/mod.rs | 28 +-- .../src/communication/tests.rs | 14 +- client/finality-grandpa/src/environment.rs | 8 +- client/finality-grandpa/src/finality_proof.rs | 7 +- client/finality-grandpa/src/lib.rs | 21 ++- client/finality-grandpa/src/observer.rs | 4 +- client/finality-grandpa/src/tests.rs | 3 +- client/finality-grandpa/src/until_imported.rs | 2 +- 13 files changed, 238 insertions(+), 90 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fb112d433ba..f2296d442ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1346,10 +1346,11 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.11.2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "024517816630be5204eba201e8d1d405042b1255a5e0e3f298b054fc24d59e1d" +checksum = "9d7907cc24468e29b5d3ea2097e78104492b6650c55f96af1f14e7915dc155ad" dependencies = [ + "either", "futures 0.3.4", "futures-timer 2.0.2", "log", @@ -6344,6 +6345,7 @@ name = "sc-finality-grandpa" version = "0.8.0-dev" dependencies = [ "assert_matches", + "derive_more", "env_logger 0.7.1", "finality-grandpa", "fork-tree", diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index a634595ed3e..04c793b58e3 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -14,6 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] +derive_more = "0.99.2" fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" @@ -41,11 +42,11 @@ sp-finality-tracker = { version = "2.0.0-dev", path = "../../primitives/finality sp-finality-grandpa = { version = "2.0.0-dev", path = "../../primitives/finality-grandpa" } prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -finality-grandpa = { version = "0.11.2", features = ["derive-codec"] } +finality-grandpa = { version = "0.12.0", features = ["derive-codec"] } pin-project = "0.4.6" [dev-dependencies] -finality-grandpa = { version = "0.11.2", features = ["derive-codec", "test-helpers"] } +finality-grandpa = { version = "0.12.0", features = ["derive-codec", "test-helpers"] } sc-network = { version = "0.8.0-dev", path = "../network" } sc-network-test = { version = "0.8.0-dev", path = "../network/test" } sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } diff --git a/client/finality-grandpa/src/authorities.rs b/client/finality-grandpa/src/authorities.rs index fe3f2dd19eb..000c303af71 100644 --- a/client/finality-grandpa/src/authorities.rs +++ b/client/finality-grandpa/src/authorities.rs @@ -29,6 +29,15 @@ use std::fmt::Debug; use std::ops::Add; use std::sync::Arc; +/// Error type returned on operations on the `AuthoritySet`. +#[derive(Debug, derive_more::Display, derive_more::From)] +pub enum Error { + #[display("Invalid authority set, either empty or with an authority weight set to 0.")] + InvalidAuthoritySet, + #[display(fmt = "Invalid operation in the pending changes tree: {}", _0)] + ForkTree(fork_tree::Error), +} + /// A shared authority set. pub(crate) struct SharedAuthoritySet { inner: Arc>>, @@ -64,7 +73,11 @@ where N: Add + Ord + Clone + Debug, /// Get the current authorities and their weights (for the current set ID). pub(crate) fn current_authorities(&self) -> VoterSet { - self.inner.read().current_authorities.iter().cloned().collect() + VoterSet::new(self.inner.read().current_authorities.iter().cloned()).expect( + "current_authorities is non-empty and weights are non-zero; \ + constructor and all mutating operations on `AuthoritySet` ensure this; \ + qed.", + ) } } @@ -88,7 +101,7 @@ pub(crate) struct Status { #[derive(Debug, Clone, Encode, Decode, PartialEq)] pub(crate) struct AuthoritySet { pub(crate) current_authorities: AuthorityList, - pub(crate) set_id: u64, + set_id: u64, // Tree of pending standard changes across forks. Standard changes are // enacted on finality and must be enacted (i.e. finalized) in-order across // a given branch @@ -96,21 +109,49 @@ pub(crate) struct AuthoritySet { // Pending forced changes across different forks (at most one per fork). // Forced changes are enacted on block depth (not finality), for this reason // only one forced change should exist per fork. - pub(crate) pending_forced_changes: Vec>, + pending_forced_changes: Vec>, } impl AuthoritySet where H: PartialEq, N: Ord, { + // authority sets must be non-empty and all weights must be greater than 0 + fn invalid_authority_list(authorities: &AuthorityList) -> bool { + authorities.is_empty() || authorities.iter().any(|(_, w)| *w == 0) + } + /// Get a genesis set with given authorities. - pub(crate) fn genesis(initial: AuthorityList) -> Self { - AuthoritySet { + pub(crate) fn genesis(initial: AuthorityList) -> Option { + if Self::invalid_authority_list(&initial) { + return None; + } + + Some(AuthoritySet { current_authorities: initial, set_id: 0, pending_standard_changes: ForkTree::new(), pending_forced_changes: Vec::new(), + }) + } + + /// Create a new authority set. + pub(crate) fn new( + authorities: AuthorityList, + set_id: u64, + pending_standard_changes: ForkTree>, + pending_forced_changes: Vec>, + ) -> Option { + if Self::invalid_authority_list(&authorities) { + return None; } + + Some(AuthoritySet { + current_authorities: authorities, + set_id, + pending_standard_changes, + pending_forced_changes, + }) } /// Get the current set id and a reference to the current authority set. @@ -128,9 +169,9 @@ where &mut self, pending: PendingChange, is_descendent_of: &F, - ) -> Result<(), fork_tree::Error> where + ) -> Result<(), Error> where F: Fn(&H, &H) -> Result, - E: std::error::Error, + E: std::error::Error, { let hash = pending.canon_hash.clone(); let number = pending.canon_height.clone(); @@ -159,15 +200,16 @@ where &mut self, pending: PendingChange, is_descendent_of: &F, - ) -> Result<(), fork_tree::Error> where + ) -> Result<(), Error> where F: Fn(&H, &H) -> Result, - E: std::error::Error, + E: std::error::Error, { for change in self.pending_forced_changes.iter() { if change.canon_hash == pending.canon_hash || - is_descendent_of(&change.canon_hash, &pending.canon_hash)? + is_descendent_of(&change.canon_hash, &pending.canon_hash) + .map_err(fork_tree::Error::Client)? { - return Err(fork_tree::Error::UnfinalizedAncestor); + return Err(fork_tree::Error::UnfinalizedAncestor.into()); } } @@ -201,10 +243,14 @@ where &mut self, pending: PendingChange, is_descendent_of: &F, - ) -> Result<(), fork_tree::Error> where + ) -> Result<(), Error> where F: Fn(&H, &H) -> Result, - E: std::error::Error, + E: std::error::Error, { + if Self::invalid_authority_list(&pending.next_authorities) { + return Err(Error::InvalidAuthoritySet); + } + match pending.delay_kind { DelayKind::Best { .. } => { self.add_forced_change(pending, is_descendent_of) @@ -309,9 +355,9 @@ where finalized_number: N, is_descendent_of: &F, initial_sync: bool, - ) -> Result, fork_tree::Error> - where F: Fn(&H, &H) -> Result, - E: std::error::Error, + ) -> Result, Error> where + F: Fn(&H, &H) -> Result, + E: std::error::Error, { let mut status = Status { changed: false, @@ -370,16 +416,16 @@ where finalized_hash: H, finalized_number: N, is_descendent_of: &F, - ) -> Result, fork_tree::Error> - where F: Fn(&H, &H) -> Result, - E: std::error::Error, + ) -> Result, Error> where + F: Fn(&H, &H) -> Result, + E: std::error::Error, { self.pending_standard_changes.finalizes_any_with_descendent_if( &finalized_hash, finalized_number.clone(), is_descendent_of, |change| change.effective_number() == finalized_number - ) + ).map_err(Error::ForkTree) } } @@ -457,8 +503,10 @@ mod tests { #[test] fn current_limit_filters_min() { + let current_authorities = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + let mut authorities = AuthoritySet { - current_authorities: Vec::new(), + current_authorities: current_authorities.clone(), set_id: 0, pending_standard_changes: ForkTree::new(), pending_forced_changes: Vec::new(), @@ -466,7 +514,7 @@ mod tests { let change = |height| { PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 0, canon_height: height, canon_hash: height.to_string(), @@ -502,15 +550,17 @@ mod tests { #[test] fn changes_iterated_in_pre_order() { + let current_authorities = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + let mut authorities = AuthoritySet { - current_authorities: Vec::new(), + current_authorities: current_authorities.clone(), set_id: 0, pending_standard_changes: ForkTree::new(), pending_forced_changes: Vec::new(), }; let change_a = PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 10, canon_height: 5, canon_hash: "hash_a", @@ -518,7 +568,7 @@ mod tests { }; let change_b = PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 0, canon_height: 5, canon_hash: "hash_b", @@ -526,7 +576,7 @@ mod tests { }; let change_c = PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 5, canon_height: 10, canon_hash: "hash_c", @@ -543,7 +593,7 @@ mod tests { // forced changes are iterated last let change_d = PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 2, canon_height: 1, canon_hash: "hash_d", @@ -551,7 +601,7 @@ mod tests { }; let change_e = PendingChange { - next_authorities: Vec::new(), + next_authorities: current_authorities.clone(), delay: 2, canon_height: 0, canon_hash: "hash_e", @@ -689,7 +739,7 @@ mod tests { // trying to finalize past `change_c` without finalizing `change_a` first assert!(matches!( authorities.apply_standard_changes("hash_d", 40, &is_descendent_of, false), - Err(fork_tree::Error::UnfinalizedAncestor) + Err(Error::ForkTree(fork_tree::Error::UnfinalizedAncestor)) )); let status = authorities.apply_standard_changes( @@ -871,4 +921,74 @@ mod tests { }), ); } + + #[test] + fn maintains_authority_list_invariants() { + // empty authority lists are invalid + assert_eq!(AuthoritySet::<(), ()>::genesis(vec![]), None); + assert_eq!( + AuthoritySet::<(), ()>::new(vec![], 0, ForkTree::new(), Vec::new()), + None, + ); + + let invalid_authorities_weight = vec![ + (AuthorityId::from_slice(&[1; 32]), 5), + (AuthorityId::from_slice(&[2; 32]), 0), + ]; + + // authority weight of zero is invalid + assert_eq!( + AuthoritySet::<(), ()>::genesis(invalid_authorities_weight.clone()), + None + ); + assert_eq!( + AuthoritySet::<(), ()>::new( + invalid_authorities_weight.clone(), + 0, + ForkTree::new(), + Vec::new() + ), + None, + ); + + let mut authority_set = + AuthoritySet::<(), u64>::genesis(vec![(AuthorityId::from_slice(&[1; 32]), 5)]).unwrap(); + + let invalid_change_empty_authorities = PendingChange { + next_authorities: vec![], + delay: 10, + canon_height: 5, + canon_hash: (), + delay_kind: DelayKind::Finalized, + }; + + // pending change contains an empty authority set + assert!(matches!( + authority_set.add_pending_change( + invalid_change_empty_authorities.clone(), + &static_is_descendent_of(false) + ), + Err(Error::InvalidAuthoritySet) + )); + + let invalid_change_authorities_weight = PendingChange { + next_authorities: invalid_authorities_weight, + delay: 10, + canon_height: 5, + canon_hash: (), + delay_kind: DelayKind::Best { + median_last_finalized: 0, + }, + }; + + // pending change contains an an authority set + // where one authority has weight of 0 + assert!(matches!( + authority_set.add_pending_change( + invalid_change_authorities_weight, + &static_is_descendent_of(false) + ), + Err(Error::InvalidAuthoritySet) + )); + } } diff --git a/client/finality-grandpa/src/aux_schema.rs b/client/finality-grandpa/src/aux_schema.rs index fe652f52fe2..c217bc328a9 100644 --- a/client/finality-grandpa/src/aux_schema.rs +++ b/client/finality-grandpa/src/aux_schema.rs @@ -97,12 +97,14 @@ where H: Clone + Debug + PartialEq, } } - AuthoritySet { - current_authorities: self.current_authorities, - set_id: self.set_id, - pending_forced_changes: Vec::new(), - pending_standard_changes - } + let authority_set = AuthoritySet::new( + self.current_authorities, + self.set_id, + pending_standard_changes, + Vec::new(), + ); + + authority_set.expect("current_authorities is non-empty and weights are non-zero; qed.") } } @@ -334,7 +336,8 @@ pub(crate) fn load_persistent( from genesis on what appears to be first startup."); let genesis_authorities = genesis_authorities()?; - let genesis_set = AuthoritySet::genesis(genesis_authorities.clone()); + let genesis_set = AuthoritySet::genesis(genesis_authorities.clone()) + .expect("genesis authorities is non-empty; all weights are non-zero; qed."); let state = make_genesis_round(); let base = state.prevote_ghost .expect("state is for completed round; completed rounds must have a prevote ghost; qed."); @@ -503,12 +506,12 @@ mod test { assert_eq!( *authority_set.inner().read(), - AuthoritySet { - current_authorities: authorities.clone(), - pending_standard_changes: ForkTree::new(), - pending_forced_changes: Vec::new(), + AuthoritySet::new( + authorities.clone(), set_id, - }, + ForkTree::new(), + Vec::new(), + ).unwrap(), ); let mut current_rounds = CurrentRounds::new(); @@ -547,12 +550,12 @@ mod test { }; { - let authority_set = AuthoritySet:: { - current_authorities: authorities.clone(), - pending_standard_changes: ForkTree::new(), - pending_forced_changes: Vec::new(), + let authority_set = AuthoritySet::::new( + authorities.clone(), set_id, - }; + ForkTree::new(), + Vec::new(), + ).unwrap(); let voter_set_state = V1VoterSetState::Live(round_number, round_state.clone()); @@ -593,12 +596,12 @@ mod test { assert_eq!( *authority_set.inner().read(), - AuthoritySet { - current_authorities: authorities.clone(), - pending_standard_changes: ForkTree::new(), - pending_forced_changes: Vec::new(), + AuthoritySet::new( + authorities.clone(), set_id, - }, + ForkTree::new(), + Vec::new(), + ).unwrap(), ); let mut current_rounds = CurrentRounds::new(); diff --git a/client/finality-grandpa/src/communication/gossip.rs b/client/finality-grandpa/src/communication/gossip.rs index 2d39ed7ec43..afa65817025 100644 --- a/client/finality-grandpa/src/communication/gossip.rs +++ b/client/finality-grandpa/src/communication/gossip.rs @@ -1618,7 +1618,10 @@ mod tests { use crate::environment::VoterSetState; let base = (H256::zero(), 0); - let voters = AuthoritySet::genesis(Vec::new()); + + let voters = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + let voters = AuthoritySet::genesis(voters).unwrap(); + let set_state = VoterSetState::live( 0, &voters, diff --git a/client/finality-grandpa/src/communication/mod.rs b/client/finality-grandpa/src/communication/mod.rs index 7daa1215134..c75fe251e78 100644 --- a/client/finality-grandpa/src/communication/mod.rs +++ b/client/finality-grandpa/src/communication/mod.rs @@ -258,7 +258,7 @@ impl> NetworkBridge { // is a no-op if currently in that set. self.validator.note_set( set_id, - voters.voters().iter().map(|(v, _)| v.clone()).collect(), + voters.iter().map(|(v, _)| v.clone()).collect(), |to, neighbor| self.neighbor_sender.send(to, neighbor), ); @@ -289,7 +289,7 @@ impl> NetworkBridge { let locals = local_key.and_then(|pair| { let id = pair.public(); - if voters.contains_key(&id) { + if voters.contains(&id) { Some((pair, id)) } else { None @@ -308,12 +308,12 @@ impl> NetworkBridge { } Ok(GossipMessage::Vote(msg)) => { // check signature. - if !voters.contains_key(&msg.message.id) { + if !voters.contains(&msg.message.id) { debug!(target: "afg", "Skipping message from unknown voter {}", msg.message.id); return future::ready(None); } - if voters.len() <= TELEMETRY_VOTERS_LIMIT { + if voters.len().get() <= TELEMETRY_VOTERS_LIMIT { match &msg.message.message { PrimaryPropose(propose) => { telemetry!(CONSENSUS_INFO; "afg.received_propose"; @@ -378,7 +378,7 @@ impl> NetworkBridge { ) { self.validator.note_set( set_id, - voters.voters().iter().map(|(v, _)| v.clone()).collect(), + voters.iter().map(|(v, _)| v.clone()).collect(), |to, neighbor| self.neighbor_sender.send(to, neighbor), ); @@ -476,7 +476,7 @@ fn incoming_global( gossip_validator: &Arc>, voters: &VoterSet, | { - if voters.len() <= TELEMETRY_VOTERS_LIMIT { + if voters.len().get() <= TELEMETRY_VOTERS_LIMIT { let precommits_signed_by: Vec = msg.message.auth_data.iter().map(move |(_, a)| { format!("{}", a) @@ -799,13 +799,13 @@ fn check_compact_commit( ) -> Result<(), ReputationChange> { // 4f + 1 = equivocations from f voters. let f = voters.total_weight() - voters.threshold(); - let full_threshold = voters.total_weight() + f; + let full_threshold = (f + voters.total_weight()).0; // check total weight is not out of range. let mut total_weight = 0; for (_, ref id) in &msg.auth_data { - if let Some(weight) = voters.info(id).map(|info| info.weight()) { - total_weight += weight; + if let Some(weight) = voters.get(id).map(|info| info.weight()) { + total_weight += weight.get(); if total_weight > full_threshold { return Err(cost::MALFORMED_COMMIT); } @@ -815,7 +815,7 @@ fn check_compact_commit( } } - if total_weight < voters.threshold() { + if total_weight < voters.threshold().get() { return Err(cost::MALFORMED_COMMIT); } @@ -860,7 +860,7 @@ fn check_catch_up( ) -> Result<(), ReputationChange> { // 4f + 1 = equivocations from f voters. let f = voters.total_weight() - voters.threshold(); - let full_threshold = voters.total_weight() + f; + let full_threshold = (f + voters.total_weight()).0; // check total weight is not out of range for a set of votes. fn check_weight<'a>( @@ -871,8 +871,8 @@ fn check_catch_up( let mut total_weight = 0; for id in votes { - if let Some(weight) = voters.info(&id).map(|info| info.weight()) { - total_weight += weight; + if let Some(weight) = voters.get(&id).map(|info| info.weight()) { + total_weight += weight.get(); if total_weight > full_threshold { return Err(cost::MALFORMED_CATCH_UP); } @@ -882,7 +882,7 @@ fn check_catch_up( } } - if total_weight < voters.threshold() { + if total_weight < voters.threshold().get() { return Err(cost::MALFORMED_CATCH_UP); } diff --git a/client/finality-grandpa/src/communication/tests.rs b/client/finality-grandpa/src/communication/tests.rs index ea995eff639..883fdb4f26f 100644 --- a/client/finality-grandpa/src/communication/tests.rs +++ b/client/finality-grandpa/src/communication/tests.rs @@ -29,7 +29,7 @@ use std::{borrow::Cow, pin::Pin, task::{Context, Poll}}; use crate::environment::SharedVoterSetState; use sp_finality_grandpa::{AuthorityList, GRANDPA_ENGINE_ID}; use super::gossip::{self, GossipValidator}; -use super::{AuthorityId, VoterSet, Round, SetId}; +use super::{VoterSet, Round, SetId}; #[derive(Debug)] pub(crate) enum Event { @@ -142,11 +142,15 @@ fn voter_set_state() -> SharedVoterSetState { use crate::authorities::AuthoritySet; use crate::environment::VoterSetState; use finality_grandpa::round::State as RoundState; - use sp_core::H256; + use sp_core::{crypto::Public, H256}; + use sp_finality_grandpa::AuthorityId; let state = RoundState::genesis((H256::zero(), 0)); let base = state.prevote_ghost.unwrap(); - let voters = AuthoritySet::genesis(Vec::new()); + + let voters = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + let voters = AuthoritySet::genesis(voters).unwrap(); + let set_state = VoterSetState::live( 0, &voters, @@ -212,7 +216,7 @@ impl sc_network_gossip::ValidatorContext for NoopContext { fn good_commit_leads_to_relay() { let private = [Ed25519Keyring::Alice, Ed25519Keyring::Bob, Ed25519Keyring::Charlie]; let public = make_ids(&private[..]); - let voter_set = Arc::new(public.iter().cloned().collect::>()); + let voter_set = Arc::new(VoterSet::new(public.iter().cloned()).unwrap()); let round = 1; let set_id = 1; @@ -360,7 +364,7 @@ fn bad_commit_leads_to_report() { let _ = env_logger::try_init(); let private = [Ed25519Keyring::Alice, Ed25519Keyring::Bob, Ed25519Keyring::Charlie]; let public = make_ids(&private[..]); - let voter_set = Arc::new(public.iter().cloned().collect::>()); + let voter_set = Arc::new(VoterSet::new(public.iter().cloned()).unwrap()); let round = 1; let set_id = 1; diff --git a/client/finality-grandpa/src/environment.rs b/client/finality-grandpa/src/environment.rs index cab212333c7..1c11c52468d 100644 --- a/client/finality-grandpa/src/environment.rs +++ b/client/finality-grandpa/src/environment.rs @@ -579,23 +579,23 @@ where Block: 'static, B: Backend, C: crate::ClientForGrandpa + 'static, - N: NetworkT + 'static + Send, + N: NetworkT + 'static + Send + Sync, SC: SelectChain + 'static, VR: VotingRule, NumberFor: BlockNumberOps, { - type Timer = Pin> + Send>>; + type Timer = Pin> + Send + Sync>>; type Id = AuthorityId; type Signature = AuthoritySignature; // regular round message streams type In = Pin, Self::Signature, Self::Id>, Self::Error> - > + Send>>; + > + Send + Sync>>; type Out = Pin>, Error = Self::Error, - > + Send>>; + > + Send + Sync>>; type Error = CommandOrError>; diff --git a/client/finality-grandpa/src/finality_proof.rs b/client/finality-grandpa/src/finality_proof.rs index 0eef20d813f..c52cc8fc90f 100644 --- a/client/finality-grandpa/src/finality_proof.rs +++ b/client/finality-grandpa/src/finality_proof.rs @@ -54,6 +54,7 @@ use sc_telemetry::{telemetry, CONSENSUS_INFO}; use sp_finality_grandpa::{AuthorityId, AuthorityList, VersionedAuthorityList, GRANDPA_AUTHORITIES_KEY}; use crate::justification::GrandpaJustification; +use crate::VoterSet; /// Maximum number of fragments that we want to return in a single prove_finality call. const MAX_FRAGMENTS_IN_PROOF: usize = 8; @@ -588,7 +589,11 @@ impl ProvableJustification for GrandpaJustificatio NumberFor: BlockNumberOps, { fn verify(&self, set_id: u64, authorities: &[(AuthorityId, u64)]) -> ClientResult<()> { - GrandpaJustification::verify(self, set_id, &authorities.iter().cloned().collect()) + let authorities = VoterSet::new(authorities.iter().cloned()).ok_or( + ClientError::Consensus(sp_consensus::Error::InvalidAuthoritiesSet), + )?; + + GrandpaJustification::verify(self, set_id, &authorities) } } diff --git a/client/finality-grandpa/src/lib.rs b/client/finality-grandpa/src/lib.rs index 6fab89ac68a..be00519f893 100644 --- a/client/finality-grandpa/src/lib.rs +++ b/client/finality-grandpa/src/lib.rs @@ -674,7 +674,7 @@ pub fn run_grandpa_voter( let events = telemetry_on_connect .for_each(move |_| { let curr = authorities.current_authorities(); - let mut auths = curr.voters().into_iter().map(|(p, _)| p); + let mut auths = curr.iter().map(|(p, _)| p); let maybe_authority_id = authority_id(&mut auths, &conf.keystore) .unwrap_or(Default::default()); @@ -682,8 +682,8 @@ pub fn run_grandpa_voter( "authority_id" => maybe_authority_id.to_string(), "authority_set_id" => ?authorities.set_id(), "authorities" => { - let authorities: Vec = curr.voters() - .iter().map(|(id, _)| id.to_string()).collect(); + let authorities: Vec = curr.iter() + .map(|(id, _)| id.to_string()).collect(); serde_json::to_string(&authorities) .expect("authorities is always at least an empty vector; elements are always of type string") } @@ -823,7 +823,7 @@ where "authority_id" => authority_id.to_string(), "authority_set_id" => ?self.env.set_id, "authorities" => { - let authorities: Vec = self.env.voters.voters() + let authorities: Vec = self.env.voters .iter().map(|(id, _)| id.to_string()).collect(); serde_json::to_string(&authorities) .expect("authorities is always at least an empty vector; elements are always of type string") @@ -894,8 +894,16 @@ where Ok(Some(set_state)) })?; + let voters = Arc::new(VoterSet::new(new.authorities.into_iter()) + .expect("new authorities come from pending change; \ + pending change comes from `AuthoritySet`; \ + `AuthoritySet` validates authorities is non-empty and weights are non-zero; \ + qed." + ) + ); + self.env = Arc::new(Environment { - voters: Arc::new(new.authorities.into_iter().collect()), + voters, set_id: new.set_id, voter_set_state: self.env.voter_set_state.clone(), // Fields below are simply transferred and not updated. @@ -1017,7 +1025,8 @@ fn is_voter( keystore: &Option, ) -> Option { match keystore { - Some(keystore) => voters.voters().iter() + Some(keystore) => voters + .iter() .find_map(|(p, _)| keystore.read().key_pair::(&p).ok()), None => None, } diff --git a/client/finality-grandpa/src/observer.rs b/client/finality-grandpa/src/observer.rs index 1e6c8ddf188..ac67675fef8 100644 --- a/client/finality-grandpa/src/observer.rs +++ b/client/finality-grandpa/src/observer.rs @@ -409,11 +409,13 @@ mod tests { (Arc::new(client), backend) }; + let voters = vec![(sp_keyring::Ed25519Keyring::Alice.public().into(), 1)]; + let persistent_data = aux_schema::load_persistent( &*backend, client.info().genesis_hash, 0, - || Ok(vec![]), + || Ok(voters), ).unwrap(); let (_tx, voter_command_rx) = tracing_unbounded(""); diff --git a/client/finality-grandpa/src/tests.rs b/client/finality-grandpa/src/tests.rs index 2821737c4d4..5d1c5b2c16c 100644 --- a/client/finality-grandpa/src/tests.rs +++ b/client/finality-grandpa/src/tests.rs @@ -990,7 +990,6 @@ fn test_bad_justification() { #[test] fn voter_persists_its_votes() { - use std::iter::FromIterator; use std::sync::atomic::{AtomicUsize, Ordering}; use futures::future; use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver}; @@ -1145,7 +1144,7 @@ fn voter_persists_its_votes() { let (round_rx, round_tx) = network.round_communication( communication::Round(1), communication::SetId(0), - Arc::new(VoterSet::from_iter(voters)), + Arc::new(VoterSet::new(voters).unwrap()), Some(peers[1].pair().into()), HasVoted::No, ); diff --git a/client/finality-grandpa/src/until_imported.rs b/client/finality-grandpa/src/until_imported.rs index 40da7707b67..737c8c6a774 100644 --- a/client/finality-grandpa/src/until_imported.rs +++ b/client/finality-grandpa/src/until_imported.rs @@ -147,7 +147,7 @@ pub(crate) struct UntilImported, ready: VecDeque, /// Interval at which to check status of each awaited block. - check_pending: Pin> + Send>>, + check_pending: Pin> + Send + Sync>>, /// Mapping block hashes to their block number, the point in time it was /// first encountered (Instant) and a list of GRANDPA messages referencing /// the block hash. -- GitLab From 58edbf49b40a4ed824834e2dc1fd3f36b3c49d4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 30 Apr 2020 22:15:48 +0200 Subject: [PATCH 116/167] Don't disable default-features of sc-service in node-template (#5859) We need to keep the features enabled to have rocksdb enabled as db backend. --- bin/node-template/node/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/node-template/node/Cargo.toml b/bin/node-template/node/Cargo.toml index 53b6da219f9..e8111c7c3be 100644 --- a/bin/node-template/node/Cargo.toml +++ b/bin/node-template/node/Cargo.toml @@ -23,7 +23,7 @@ structopt = "0.3.8" sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } +sc-service = { version = "0.8.0-dev", path = "../../../client/service" } sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } -- GitLab From c386dea209a06f73f0742a8dadd2732631c8a17d Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Fri, 1 May 2020 14:14:43 +0200 Subject: [PATCH 117/167] New weights using i7 machine (#5848) * i7 weights * fix full block test * fix merge * fix priority --- bin/node-template/runtime/src/lib.rs | 4 +- bin/node/executor/tests/basic.rs | 13 ++++--- bin/node/executor/tests/submit_transaction.rs | 2 +- bin/node/runtime/src/lib.rs | 4 +- frame/balances/src/lib.rs | 21 +++++++--- frame/utility/src/lib.rs | 38 +++++++++---------- frame/vesting/src/lib.rs | 22 ++++++----- 7 files changed, 61 insertions(+), 43 deletions(-) diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index fed1ee36db0..62e6515807e 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -130,8 +130,8 @@ parameter_types! { /// This probably should not be changed unless you have specific /// disk i/o conditions for the node. pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 60_000_000, // ~0.06 ms = ~60 µs - write: 200_000_000, // ~0.2 ms = 200 µs + read: 25_000_000, // ~25 µs + write: 100_000_000, // ~100 µs }; } diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 21117f0a4f8..0cb3dea4207 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -339,7 +339,7 @@ fn full_native_block_import_works() { phase: Phase::ApplyExtrinsic(0), // timestamp set call with weight 9_000_000 + 2 read + 1 write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 9_000_000 + 2 * 60_000_000 + 1 * 200_000_000, class: DispatchClass::Mandatory, ..Default::default() } + DispatchInfo { weight: 9_000_000 + 2 * 25_000_000 + 1 * 100_000_000, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, @@ -359,8 +359,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(1), + // Balance Transfer 80_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 460_000_000, ..Default::default() } + DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, @@ -393,7 +394,7 @@ fn full_native_block_import_works() { phase: Phase::ApplyExtrinsic(0), // timestamp set call with weight 9_000_000 + 2 read + 1 write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 9_000_000 + 2 * 60_000_000 + 1 * 200_000_000, class: DispatchClass::Mandatory, ..Default::default() } + DispatchInfo { weight: 9_000_000 + 2 * 25_000_000 + 1 * 100_000_000, class: DispatchClass::Mandatory, ..Default::default() } )), topics: vec![], }, @@ -415,8 +416,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(1), + // Balance Transfer 80_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 460_000_000, ..Default::default() } + DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, @@ -438,8 +440,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(2), + // Balance Transfer 80_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 460_000_000, ..Default::default() } + DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index a4e89ca7389..a48eea9ce87 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -230,7 +230,7 @@ fn submitted_transaction_should_be_valid() { let res = Executive::validate_transaction(source, extrinsic); assert_eq!(res.unwrap(), ValidTransaction { - priority: 1_411_390_000_000, + priority: 1_410_625_000_000, requires: vec![], provides: vec![(address, 0).encode()], longevity: 128, diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 1458c00d819..704778cc7a3 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -124,8 +124,8 @@ parameter_types! { pub const Version: RuntimeVersion = VERSION; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 60_000_000, // ~0.06 ms = ~60 µs - write: 200_000_000, // ~0.2 ms = 200 µs + read: 25_000_000, // ~25 µs + write: 100_000_000, // ~100 µs }; } diff --git a/frame/balances/src/lib.rs b/frame/balances/src/lib.rs index 94dbd3730f1..f3a6868722c 100644 --- a/frame/balances/src/lib.rs +++ b/frame/balances/src/lib.rs @@ -431,9 +431,12 @@ decl_module! { /// - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`. /// - `transfer_keep_alive` works the same way as `transfer`, but has an additional /// check that the transfer will not kill the origin account. - /// + /// --------------------------------- + /// - Base Weight: 80 µs, worst case scenario (account created, account removed) + /// - DB Weight: 1 Read and 1 Write to destination account + /// - Origin account is already in memory, so no DB operations for them. /// # - #[weight = T::DbWeight::get().reads_writes(1, 1) + 200_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + 80_000_000] pub fn transfer( origin, dest: ::Source, @@ -456,8 +459,11 @@ decl_module! { /// # /// - Independent of the arguments. /// - Contains a limited number of reads and writes. + /// --------------------- + /// - Base Weight: 32.6 µs + /// - DB Weight: 1 Read, 1 Write to `who` /// # - #[weight = T::DbWeight::get().reads_writes(1, 1) + 100_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + 35_000_000] fn set_balance( origin, who: ::Source, @@ -499,7 +505,7 @@ decl_module! { /// - Same as transfer, but additional read and write because the source account is /// not assumed to be in the overlay. /// # - #[weight = T::DbWeight::get().reads_writes(2, 2) + 200_000_000] + #[weight = T::DbWeight::get().reads_writes(2, 2) + 80_000_000] pub fn force_transfer( origin, source: ::Source, @@ -518,7 +524,12 @@ decl_module! { /// 99% of the time you want [`transfer`] instead. /// /// [`transfer`]: struct.Module.html#method.transfer - #[weight = T::DbWeight::get().reads_writes(1, 1) + 150_000_000] + /// # + /// - Cheaper than transfer because account cannot be killed. + /// - Base Weight: 57.36 µs + /// - DB Weight: 1 Read and 1 Write to dest (sender is in overlay already) + /// # + #[weight = T::DbWeight::get().reads_writes(1, 1) + 60_000_000] pub fn transfer_keep_alive( origin, dest: ::Source, diff --git a/frame/utility/src/lib.rs b/frame/utility/src/lib.rs index 39109a6f6ae..4fa001177b4 100644 --- a/frame/utility/src/lib.rs +++ b/frame/utility/src/lib.rs @@ -205,17 +205,17 @@ mod weight_of { use super::*; /// - Base Weight: - /// - Create: 137.5 + 0.274 * S µs - /// - Approve: 103.8 + .266 * S µs - /// - Complete: 116.2 + .754 * S µs + /// - Create: 59.2 + 0.096 * S µs + /// - Approve: 42.27 + .116 * S µs + /// - Complete: 50.91 + .232 * S µs /// - DB Weight: /// - Reads: Multisig Storage, [Caller Account] /// - Writes: Multisig Storage, [Caller Account] /// - Plus Call Weight pub fn as_multi(other_sig_len: usize, call_weight: Weight) -> Weight { call_weight - .saturating_add(150_000_000) - .saturating_add((other_sig_len as Weight).saturating_mul(750_000)) + .saturating_add(60_000_000) + .saturating_add((other_sig_len as Weight).saturating_mul(250_000)) .saturating_add(T::DbWeight::get().reads_writes(1, 1)) } } @@ -236,7 +236,7 @@ decl_module! { /// - `calls`: The calls to be dispatched from the same origin. /// /// # - /// - Base weight: 63.78 µs + /// - Base weight: 15.64 + .987 * c µs /// - Plus the sum of the weights of the `calls`. /// - Plus one additional event. (repeat read/write) /// # @@ -250,7 +250,7 @@ decl_module! { |args: (&Vec<::Call>,)| { args.0.iter() .map(|call| call.get_dispatch_info().weight) - .fold(65_000_000, |a: Weight, n| a.saturating_add(n)) + .fold(15_000_000, |a: Weight, n| a.saturating_add(n).saturating_add(1_000_000)) }, |args: (&Vec<::Call>,)| { let all_operational = args.0.iter() @@ -280,12 +280,12 @@ decl_module! { /// The dispatch origin for this call must be _Signed_. /// /// # - /// - Base weight: 5.1 µs + /// - Base weight: 2.863 µs /// - Plus the weight of the `call` /// # #[weight = FunctionOf( |args: (&u16, &Box<::Call>)| { - args.1.get_dispatch_info().weight.saturating_add(5_000_000) + args.1.get_dispatch_info().weight.saturating_add(3_000_000) }, |args: (&u16, &Box<::Call>)| args.1.get_dispatch_info().class, Pays::Yes, @@ -339,9 +339,9 @@ decl_module! { /// `MultisigDepositBase + threshold * MultisigDepositFactor`. /// ------------------------------- /// - Base Weight: - /// - Create: 137.5 + 0.274 * S µs - /// - Approve: 103.8 + .266 * S µs - /// - Complete: 116.2 + .754 * S µs + /// - Create: 59.2 + 0.096 * S µs + /// - Approve: 42.27 + .116 * S µs + /// - Complete: 50.91 + .232 * S µs /// - DB Weight: /// - Reads: Multisig Storage, [Caller Account] /// - Writes: Multisig Storage, [Caller Account] @@ -471,8 +471,8 @@ decl_module! { /// `MultisigDepositBase + threshold * MultisigDepositFactor`. /// ---------------------------------- /// - Base Weight: - /// - Create: 139.1 + 0.202 * S - /// - Approve: 96.6 + 0.328 * S + /// - Create: 56.3 + 0.107 * S + /// - Approve: 39.25 + 0.121 * S /// - DB Weight: /// - Read: Multisig Storage, [Caller Account] /// - Write: Multisig Storage, [Caller Account] @@ -480,8 +480,8 @@ decl_module! { #[weight = FunctionOf( |args: (&u16, &Vec, &Option>, &[u8; 32])| { T::DbWeight::get().reads_writes(1, 1) - .saturating_add(140_000_000) - .saturating_add((args.1.len() as Weight).saturating_mul(350_000)) + .saturating_add(60_000_000) + .saturating_add((args.1.len() as Weight).saturating_mul(120_000)) }, DispatchClass::Normal, Pays::Yes, @@ -554,7 +554,7 @@ decl_module! { /// - I/O: 1 read `O(S)`, one remove. /// - Storage: removes one item. /// ---------------------------------- - /// - Base Weight: 126.6 + 0.126 * S + /// - Base Weight: 46.71 + 0.09 * S /// - DB Weight: /// - Read: Multisig Storage, [Caller Account] /// - Write: Multisig Storage, [Caller Account] @@ -562,8 +562,8 @@ decl_module! { #[weight = FunctionOf( |args: (&u16, &Vec, &Timepoint, &[u8; 32])| { T::DbWeight::get().reads_writes(1, 1) - .saturating_add(130_000_000) - .saturating_add((args.1.len() as Weight).saturating_mul(130_000)) + .saturating_add(50_000_000) + .saturating_add((args.1.len() as Weight).saturating_mul(100_000)) }, DispatchClass::Normal, Pays::Yes, diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index d8e937d550f..05aee08c319 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -193,10 +193,12 @@ decl_module! { /// - DbWeight: 2 Reads, 2 Writes /// - Reads: Vesting Storage, Balances Locks, [Sender Account] /// - Writes: Vesting Storage, Balances Locks, [Sender Account] - /// - Benchmark: 147.5 µs (min square analysis) - /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Benchmark: + /// - Unlocked: 56.1 + .098 * l µs (min square analysis) + /// - Locked: 54.37 + .254 * l µs (min square analysis) + /// - Using 60 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 150_000_000 + T::DbWeight::get().reads_writes(2, 2)] + #[weight = 60_000_000 + T::DbWeight::get().reads_writes(2, 2)] fn vest(origin) -> DispatchResult { let who = ensure_signed(origin)?; Self::update_lock(who) @@ -216,10 +218,12 @@ decl_module! { /// - DbWeight: 3 Reads, 3 Writes /// - Reads: Vesting Storage, Balances Locks, Target Account /// - Writes: Vesting Storage, Balances Locks, Target Account - /// - Benchmark: 150.4 µs (min square analysis) - /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Benchmark: + /// - Unlocked: 58.09 + .104 * l µs (min square analysis) + /// - Locked: 55.35 + .255 * l µs (min square analysis) + /// - Using 60 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 150_000_000 + T::DbWeight::get().reads_writes(3, 3)] + #[weight = 60_000_000 + T::DbWeight::get().reads_writes(3, 3)] fn vest_other(origin, target: ::Source) -> DispatchResult { ensure_signed(origin)?; Self::update_lock(T::Lookup::lookup(target)?) @@ -240,10 +244,10 @@ decl_module! { /// - DbWeight: 3 Reads, 3 Writes /// - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account] /// - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account] - /// - Benchmark: 263 µs (min square analysis) - /// - Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Benchmark: 111.4 + .345 * l µs (min square analysis) + /// - Using 115 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 300_000_000 + T::DbWeight::get().reads_writes(3, 3)] + #[weight = 115_000_000 + T::DbWeight::get().reads_writes(3, 3)] pub fn vested_transfer( origin, target: ::Source, -- GitLab From 497e8a094129fefa052ffb43918de8de8fe66c29 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Sun, 3 May 2020 10:54:21 +0200 Subject: [PATCH 118/167] Remove Old Migration Code (#5870) * remove old migration code * Remove old staking * Remove indices migration * Remove upgrade test in transaction-payment * oops * Revert "Remove old staking" This reverts commit 95262b1ac43c9b5bcf49d2ae80800feabcbbbaa0. * remove migration test in staking * fix warnings --- frame/democracy/src/lib.rs | 25 ----- frame/indices/src/lib.rs | 34 +------ frame/offences/src/lib.rs | 8 -- frame/staking/src/lib.rs | 49 ---------- frame/staking/src/tests.rs | 135 --------------------------- frame/transaction-payment/src/lib.rs | 48 ---------- 6 files changed, 1 insertion(+), 298 deletions(-) diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index b60d658cde5..ddc3b36f4c8 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -525,12 +525,6 @@ decl_module! { fn deposit_event() = default; - fn on_runtime_upgrade() -> Weight { - Self::migrate(); - - 0 - } - /// Propose a sensitive action to be taken. /// /// The dispatch origin of this call must be _Signed_ and the sender must @@ -1268,25 +1262,6 @@ decl_module! { } impl Module { - fn migrate() { - use frame_support::{Twox64Concat, migration::{StorageKeyIterator, remove_storage_prefix}}; - remove_storage_prefix(b"Democracy", b"VotesOf", &[]); - remove_storage_prefix(b"Democracy", b"VotersFor", &[]); - remove_storage_prefix(b"Democracy", b"Delegations", &[]); - for (who, (end, proposal_hash, threshold, delay)) - in StorageKeyIterator::< - ReferendumIndex, - (T::BlockNumber, T::Hash, VoteThreshold, T::BlockNumber), - Twox64Concat, - >::new(b"Democracy", b"ReferendumInfoOf").drain() - { - let status = ReferendumStatus { - end, proposal_hash, threshold, delay, tally: Tally::default() - }; - ReferendumInfoOf::::insert(who, ReferendumInfo::Ongoing(status)) - } - } - // exposed immutables. /// Get the amount locked in support of `proposal`; `None` if proposal isn't a valid proposal diff --git a/frame/indices/src/lib.rs b/frame/indices/src/lib.rs index 4861197eda3..8c17fed5921 100644 --- a/frame/indices/src/lib.rs +++ b/frame/indices/src/lib.rs @@ -22,13 +22,11 @@ use sp_std::prelude::*; use codec::Codec; use sp_runtime::traits::{ - StaticLookup, Member, LookupError, Zero, One, BlakeTwo256, Hash, Saturating, AtLeast32Bit + StaticLookup, Member, LookupError, Zero, Saturating, AtLeast32Bit }; use frame_support::{Parameter, decl_module, decl_error, decl_event, decl_storage, ensure}; -use frame_support::weights::Weight; use frame_support::dispatch::DispatchResult; use frame_support::traits::{Currency, ReservableCurrency, Get, BalanceStatus::Reserved}; -use frame_support::storage::migration::take_storage_value; use frame_system::{ensure_signed, ensure_root}; use self::address::Address as RawAddress; @@ -99,12 +97,6 @@ decl_module! { pub struct Module for enum Call where origin: T::Origin, system = frame_system { fn deposit_event() = default; - fn on_initialize() -> Weight { - Self::migrations(); - - 0 - } - /// Assign an previously unassigned index. /// /// Payment: `Deposit` is reserved from the sender account. @@ -241,30 +233,6 @@ impl Module { address::Address::Index(i) => Self::lookup_index(i), } } - - /// Do any migrations. - fn migrations() { - if let Some(set_count) = take_storage_value::(b"Indices", b"NextEnumSet", b"") { - // migrations need doing. - let set_size: T::AccountIndex = 64.into(); - - let mut set_index: T::AccountIndex = Zero::zero(); - while set_index < set_count { - let maybe_accounts = take_storage_value::>(b"Indices", b"EnumSet", BlakeTwo256::hash_of(&set_index).as_ref()); - if let Some(accounts) = maybe_accounts { - for (item_index, target) in accounts.into_iter().enumerate() { - if target != T::AccountId::default() && !T::Currency::total_balance(&target).is_zero() { - let index = set_index * set_size + T::AccountIndex::from(item_index as u32); - Accounts::::insert(index, (target, BalanceOf::::zero())); - } - } - } else { - break; - } - set_index += One::one(); - } - } - } } impl StaticLookup for Module { diff --git a/frame/offences/src/lib.rs b/frame/offences/src/lib.rs index 1ad188a7a83..b877d1e2b20 100644 --- a/frame/offences/src/lib.rs +++ b/frame/offences/src/lib.rs @@ -99,14 +99,6 @@ decl_module! { pub struct Module for enum Call where origin: T::Origin { fn deposit_event() = default; - fn on_runtime_upgrade() -> Weight { - Reports::::remove_all(); - ConcurrentReportsIndex::::remove_all(); - ReportsByKindIndex::remove_all(); - - 0 - } - fn on_initialize(now: T::BlockNumber) -> Weight { // only decode storage if we can actually submit anything again. if T::OnOffenceHandler::can_report() { diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 67240d8d34b..ca3fb51ecb7 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -1246,18 +1246,6 @@ decl_module! { } } - fn on_runtime_upgrade() -> Weight { - // For Kusama the type hasn't actually changed as Moment was u64 and was the number of - // millisecond since unix epoch. - StorageVersion::mutate(|v| { - if matches!(v, Releases::V2_0_0) { - Self::migrate_last_reward_to_claimed_rewards(); - } - *v = Releases::V3_0_0; - }); - 0 - } - /// Take the origin account as a stash and lock up `value` of its balance. `controller` will /// be the account that controls it. /// @@ -1935,43 +1923,6 @@ decl_module! { } impl Module { - /// Migrate `last_reward` to `claimed_rewards` - pub fn migrate_last_reward_to_claimed_rewards() { - use frame_support::migration::{StorageIterator, put_storage_value}; - // Migrate from `last_reward` to `claimed_rewards`. - // We will construct a vector from `current_era - history_depth` to `last_reward` - // for each validator and nominator. - // - // Old Staking Ledger - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)] - struct OldStakingLedger { - pub stash: AccountId, - #[codec(compact)] - pub total: Balance, - #[codec(compact)] - pub active: Balance, - pub unlocking: Vec>, - pub last_reward: Option, - } - // Current era and history depth - let current_era = Self::current_era().unwrap_or(0); - let history_depth = Self::history_depth(); - let last_payout_era = current_era.saturating_sub(history_depth); - // Convert all ledgers to the new format. - for (hash, old_ledger) in StorageIterator::>>::new(b"Staking", b"Ledger").drain() { - let last_reward = old_ledger.last_reward.unwrap_or(0); - let new_ledger = StakingLedger { - stash: old_ledger.stash, - total: old_ledger.total, - active: old_ledger.active, - unlocking: old_ledger.unlocking, - claimed_rewards: (last_payout_era..=last_reward).collect(), - }; - put_storage_value(b"Staking", b"Ledger", &hash, new_ledger); - } - MigrateEra::put(current_era); - } - /// The total balance that can be slashed from a stash account as of right now. pub fn slashable_balance_of(stash: &T::AccountId) -> BalanceOf { Self::bonded(stash).and_then(Self::ledger).map(|l| l.active).unwrap_or_default() diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index 84c937d324c..f3dddc87ed7 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -4267,141 +4267,6 @@ fn bond_during_era_correctly_populates_claimed_rewards() { /* These migration tests below can be removed once migration code is removed */ -#[test] -fn assert_migration_is_noop() { - let kusama_active_era = "4a0200000190e2721171010000"; - let era = ActiveEraInfo::decode(&mut &hex::decode(kusama_active_era).unwrap()[..]).unwrap(); - assert_eq!(era.index, 586); - assert_eq!(era.start, Some(1585135674000)); -} - -#[test] -fn test_last_reward_migration() { - use sp_storage::Storage; - - let mut s = Storage::default(); - - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)] - struct OldStakingLedger { - pub stash: AccountId, - #[codec(compact)] - pub total: Balance, - #[codec(compact)] - pub active: Balance, - pub unlocking: Vec>, - pub last_reward: Option, - } - - let old_staking10 = OldStakingLedger:: { - stash: 0, - total: 10, - active: 10, - unlocking: vec![UnlockChunk{ value: 1234, era: 56}], - last_reward: Some(8), - }; - - let old_staking11 = OldStakingLedger:: { - stash: 1, - total: 0, - active: 0, - unlocking: vec![], - last_reward: None, - }; - - let old_staking12 = OldStakingLedger:: { - stash: 2, - total: 100, - active: 100, - unlocking: vec![UnlockChunk{ value: 9876, era: 54}, UnlockChunk{ value: 98, era: 76}], - last_reward: Some(23), - }; - - let old_staking13 = OldStakingLedger:: { - stash: 3, - total: 100, - active: 100, - unlocking: vec![], - last_reward: Some(23), - }; - - let data = vec![ - ( - Ledger::::hashed_key_for(10), - old_staking10.encode().to_vec() - ), - ( - Ledger::::hashed_key_for(11), - old_staking11.encode().to_vec() - ), - ( - Ledger::::hashed_key_for(12), - old_staking12.encode().to_vec() - ), - ( - Ledger::::hashed_key_for(13), - old_staking13.encode().to_vec() - ), - ]; - - s.top = data.into_iter().collect(); - sp_io::TestExternalities::new(s).execute_with(|| { - HistoryDepth::put(84); - CurrentEra::put(99); - let nominations = Nominations:: { - targets: vec![], - submitted_in: 0, - suppressed: false - }; - Nominators::::insert(3, nominations); - Bonded::::insert(3, 13); - Staking::migrate_last_reward_to_claimed_rewards(); - // Test staker out of range - assert_eq!( - Ledger::::get(10), - Some(StakingLedger { - stash: 0, - total: 10, - active: 10, - unlocking: vec![UnlockChunk{ value: 1234, era: 56}], - claimed_rewards: vec![], - }) - ); - // Test staker none - assert_eq!( - Ledger::::get(11), - Some(StakingLedger { - stash: 1, - total: 0, - active: 0, - unlocking: vec![], - claimed_rewards: vec![], - }) - ); - // Test staker migration - assert_eq!( - Ledger::::get(12), - Some(StakingLedger { - stash: 2, - total: 100, - active: 100, - unlocking: vec![UnlockChunk{ value: 9876, era: 54}, UnlockChunk{ value: 98, era: 76}], - claimed_rewards: vec![15,16,17,18,19,20,21,22,23], - }) - ); - // Test nominator migration - assert_eq!( - Ledger::::get(13), - Some(StakingLedger { - stash: 3, - total: 100, - active: 100, - unlocking: vec![], - claimed_rewards: vec![15,16,17,18,19,20,21,22,23], - }) - ); - }); -} - #[test] fn rewards_should_work_before_migration() { // should check that before migration: diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index c5992ab1298..fdcb9122a25 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -93,20 +93,6 @@ decl_module! { *fm = T::FeeMultiplierUpdate::convert(*fm) }); } - - fn on_runtime_upgrade() -> Weight { - // TODO: Remove this code after on-chain upgrade from u32 to u64 weights - use sp_runtime::Fixed64; - use frame_support::migration::take_storage_value; - if let Some(old_next_fee_multiplier) = take_storage_value::(b"TransactionPayment", b"NextFeeMultiplier", &[]) { - let raw_multiplier = old_next_fee_multiplier.into_inner() as i128; - // Fixed64 used 10^9 precision, where Fixed128 uses 10^18, so we need to add 9 zeros. - let new_raw_multiplier: i128 = raw_multiplier.saturating_mul(1_000_000_000); - let new_next_fee_multiplier: Fixed128 = Fixed128::from_parts(new_raw_multiplier); - NextFeeMultiplier::put(new_next_fee_multiplier); - } - 0 - } } } @@ -844,38 +830,4 @@ mod tests { assert_eq!(Balances::free_balance(2), 200 - 5 - 10 - 100 - 5); }); } - - // TODO Remove after u32 to u64 weights upgrade - #[test] - fn upgrade_to_fixed128_works() { - // TODO You can remove this from dev-dependencies after removing this test - use sp_storage::Storage; - use sp_runtime::Fixed64; - use frame_support::storage::generator::StorageValue; - use frame_support::traits::OnRuntimeUpgrade; - use core::num::NonZeroI128; - - let mut s = Storage::default(); - - let original_multiplier = Fixed64::from_rational(1, 2); - - let data = vec![ - ( - NextFeeMultiplier::storage_value_final_key().to_vec(), - original_multiplier.encode().to_vec() - ), - ]; - - s.top = data.into_iter().collect(); - - sp_io::TestExternalities::new(s).execute_with(|| { - let old_value = NextFeeMultiplier::get(); - assert!(old_value != Fixed128::from_rational(1, NonZeroI128::new(2).unwrap())); - - // Convert Fixed64(.5) to Fixed128(.5) - TransactionPayment::on_runtime_upgrade(); - let new_value = NextFeeMultiplier::get(); - assert_eq!(new_value, Fixed128::from_rational(1, NonZeroI128::new(2).unwrap())); - }); - } } -- GitLab From b546c2d69143f41f7ec4ad14a64bea08c7e70095 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Sun, 3 May 2020 16:30:42 +0300 Subject: [PATCH 119/167] Another state machine test (#5875) * another state machine test * add more asserts and remove 'remov_then_append' --- primitives/state-machine/src/lib.rs | 108 +++++++++++++++++++++++----- 1 file changed, 89 insertions(+), 19 deletions(-) diff --git a/primitives/state-machine/src/lib.rs b/primitives/state-machine/src/lib.rs index 0577afea004..a023f21d733 100644 --- a/primitives/state-machine/src/lib.rs +++ b/primitives/state-machine/src/lib.rs @@ -1127,29 +1127,99 @@ mod tests { } #[test] - fn remove_then_append() { - let key = b"key".to_vec(); + fn remove_with_append_then_rollback_appended_then_append_again() { + + #[derive(codec::Encode, codec::Decode)] + enum Item { InitializationItem, DiscardedItem, CommitedItem } + + let key = b"events".to_vec(); + let mut cache = StorageTransactionCache::default(); let mut state = new_in_mem::(); let backend = state.as_trie_backend().unwrap(); - let mut overlay = OverlayedChanges::default(); let mut offchain_overlay = OffchainOverlayedChanges::default(); - let mut cache = StorageTransactionCache::default(); - - let mut ext = Ext::new( - &mut overlay, - &mut offchain_overlay, - &mut cache, - backend, - changes_trie::disabled_state::<_, u64>(), - None, - ); + let mut overlay = OverlayedChanges::default(); - ext.clear_storage(key.as_slice()); - ext.storage_append(key.clone(), b"Item".to_vec().encode()); - assert_eq!( - ext.storage(key.as_slice()), - Some(vec![b"Item".to_vec()].encode()), - ); + // For example, block initialization with event. + { + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + ext.clear_storage(key.as_slice()); + ext.storage_append(key.clone(), Item::InitializationItem.encode()); + } + overlay.commit_prospective(); + + // For example, first transaction resulted in panic during block building + { + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![Item::InitializationItem].encode()), + ); + + ext.storage_append(key.clone(), Item::DiscardedItem.encode()); + + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![Item::InitializationItem, Item::DiscardedItem].encode()), + ); + } + overlay.discard_prospective(); + + // Then we apply next transaction which is valid this time. + { + let mut ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![Item::InitializationItem].encode()), + ); + + ext.storage_append(key.clone(), Item::CommitedItem.encode()); + + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![Item::InitializationItem, Item::CommitedItem].encode()), + ); + + } + overlay.commit_prospective(); + + // Then only initlaization item and second (commited) item should persist. + { + let ext = Ext::new( + &mut overlay, + &mut offchain_overlay, + &mut cache, + backend, + changes_trie::disabled_state::<_, u64>(), + None, + ); + assert_eq!( + ext.storage(key.as_slice()), + Some(vec![Item::InitializationItem, Item::CommitedItem].encode()), + ); + } } #[test] -- GitLab From de8f1fa636c7b40d20ab5ed2b5b87a1e27091aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sun, 3 May 2020 15:31:31 +0200 Subject: [PATCH 120/167] Fix clippy warnings in generated runtime api code (#5874) --- primitives/api/proc-macro/src/impl_runtime_apis.rs | 2 +- primitives/runtime/src/traits.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/primitives/api/proc-macro/src/impl_runtime_apis.rs b/primitives/api/proc-macro/src/impl_runtime_apis.rs index 7423dbec559..72c833a18c8 100644 --- a/primitives/api/proc-macro/src/impl_runtime_apis.rs +++ b/primitives/api/proc-macro/src/impl_runtime_apis.rs @@ -173,7 +173,7 @@ fn generate_wasm_interface(impls: &[ItemImpl]) -> Result { #( #attrs )* #[cfg(not(feature = "std"))] #[no_mangle] - pub fn #fn_name(input_data: *mut u8, input_len: usize) -> u64 { + pub unsafe fn #fn_name(input_data: *mut u8, input_len: usize) -> u64 { let mut #input = if input_len == 0 { &[0u8; 0] } else { diff --git a/primitives/runtime/src/traits.rs b/primitives/runtime/src/traits.rs index d843bdc478c..9664deb51be 100644 --- a/primitives/runtime/src/traits.rs +++ b/primitives/runtime/src/traits.rs @@ -715,7 +715,7 @@ pub trait SignedExtension: Codec + Debug + Sync + Send + Clone + Eq + PartialEq info: &DispatchInfoOf, len: usize, ) -> Result { - self.validate(who, call, info.clone(), len) + self.validate(who, call, info, len) .map(|_| Self::Pre::default()) .map_err(Into::into) } @@ -749,7 +749,7 @@ pub trait SignedExtension: Codec + Debug + Sync + Send + Clone + Eq + PartialEq info: &DispatchInfoOf, len: usize, ) -> Result { - Self::validate_unsigned(call, info.clone(), len) + Self::validate_unsigned(call, info, len) .map(|_| Self::Pre::default()) .map_err(Into::into) } -- GitLab From 2d68b72660f7621b270370bef8abdb99ebd56d3b Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Sun, 3 May 2020 15:33:11 +0200 Subject: [PATCH 121/167] `node-bench` no-op block import (#5869) * start to try and implement noop * txs as input * better comment * Add transfer reaping * rename to avoid filter matching * Update base weights based on results * fix priority * fix logic on reaping transfer * Update bin/node/bench/src/import.rs Co-authored-by: Nikolay Volf * Update bin/node/bench/src/main.rs Co-authored-by: Nikolay Volf * add back size type (in-progress) * bring back size type with custom * update comment * nit * block type then size * Use `transfer_keep_alive` Co-authored-by: Nikolay Volf --- bin/node-template/runtime/src/lib.rs | 11 ++-- bin/node/bench/src/import.rs | 32 ++++++---- bin/node/bench/src/main.rs | 64 ++++++++++--------- bin/node/executor/tests/submit_transaction.rs | 2 +- bin/node/runtime/src/lib.rs | 12 ++-- bin/node/testing/src/bench.rs | 41 ++++++++---- 6 files changed, 99 insertions(+), 63 deletions(-) diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index 62e6515807e..20780511aec 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -123,16 +123,19 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. pub const MaximumBlockWeight: Weight = 2_000_000_000_000; - pub const ExtrinsicBaseWeight: Weight = 10_000_000; + /// Executing 10,000 System remarks (no-op) txs takes ~1.26 seconds -> ~125 µs per tx + pub const ExtrinsicBaseWeight: Weight = 125_000_000; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; /// This probably should not be changed unless you have specific /// disk i/o conditions for the node. pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000_000, // ~25 µs - write: 100_000_000, // ~100 µs + read: 25_000_000, // ~25 µs @ 200,000 items + write: 100_000_000, // ~100 µs @ 200,000 items }; + /// Importing a block with 0 txs takes ~5 ms + pub const BlockExecutionWeight: Weight = 5_000_000_000; } impl system::Trait for Runtime { @@ -164,7 +167,7 @@ impl system::Trait for Runtime { type DbWeight = DbWeight; /// The weight of the overhead invoked on the block import process, independent of the /// extrinsics included in that block. - type BlockExecutionWeight = (); + type BlockExecutionWeight = BlockExecutionWeight; /// The base weight of any extrinsic processed by the runtime, independent of the /// logic of that extrinsic. (Signature verification, nonce increment, fee, etc...) type ExtrinsicBaseWeight = ExtrinsicBaseWeight; diff --git a/bin/node/bench/src/import.rs b/bin/node/bench/src/import.rs index ed40f1b459a..1fd2bbdeccc 100644 --- a/bin/node/bench/src/import.rs +++ b/bin/node/bench/src/import.rs @@ -49,16 +49,20 @@ pub enum SizeType { Large, #[display(fmt = "full")] Full, + #[display(fmt = "custom")] + Custom, } impl SizeType { - fn transactions(&self) -> usize { + pub fn transactions(&self) -> usize { match self { SizeType::Empty => 0, SizeType::Small => 10, SizeType::Medium => 100, SizeType::Large => 500, SizeType::Full => 4000, + // Custom SizeType will use the `--transactions` input parameter + SizeType::Custom => 0, } } } @@ -66,6 +70,7 @@ impl SizeType { pub struct ImportBenchmarkDescription { pub profile: Profile, pub key_types: KeyTypes, + pub block_type: BlockType, pub size: SizeType, } @@ -90,6 +95,12 @@ impl core::BenchmarkDescription for ImportBenchmarkDescription { KeyTypes::Ed25519 => path.push("ed25519"), } + match self.block_type { + BlockType::RandomTransfersKeepAlive(_) => path.push("transfer_keep_alive"), + BlockType::RandomTransfersReaping(_) => path.push("transfer_reaping"), + BlockType::Noop(_) => path.push("noop"), + } + path.push(&format!("{}", self.size)); path @@ -101,7 +112,7 @@ impl core::BenchmarkDescription for ImportBenchmarkDescription { 50_000, self.key_types ); - let block = bench_db.generate_block(BlockType::RandomTransfers(self.size.transactions())); + let block = bench_db.generate_block(self.block_type); Box::new(ImportBenchmark { database: bench_db, block, @@ -110,16 +121,11 @@ impl core::BenchmarkDescription for ImportBenchmarkDescription { } fn name(&self) -> Cow<'static, str> { - match self.profile { - Profile::Wasm => format!( - "Import benchmark (random transfers, wasm, {} block)", - self.size, - ).into(), - Profile::Native => format!( - "Import benchmark (random transfers, native, {} block)", - self.size, - ).into(), - } + format!( + "Import benchmark ({:?}, {:?})", + self.block_type, + self.profile, + ).into() } } @@ -159,4 +165,4 @@ impl core::Benchmark for ImportBenchmark { elapsed } -} \ No newline at end of file +} diff --git a/bin/node/bench/src/main.rs b/bin/node/bench/src/main.rs index 27c9358f9d6..e627f07c3d4 100644 --- a/bin/node/bench/src/main.rs +++ b/bin/node/bench/src/main.rs @@ -26,7 +26,7 @@ use crate::core::{run_benchmark, Mode as BenchmarkMode}; use crate::tempdb::DatabaseType; use import::{ImportBenchmarkDescription, SizeType}; use trie::{TrieReadBenchmarkDescription, TrieWriteBenchmarkDescription, DatabaseSize}; -use node_testing::bench::{Profile, KeyTypes}; +use node_testing::bench::{Profile, KeyTypes, BlockType}; use structopt::StructOpt; #[derive(Debug, StructOpt)] @@ -49,9 +49,13 @@ struct Opt { /// Run with `--list` for the hint of what to filter. filter: Option, + /// Number of transactions for block import with `custom` size. + #[structopt(long)] + transactions: Option, + /// Mode /// - /// "regular" for regular becnhmark + /// "regular" for regular benchmark /// /// "profile" mode adds pauses between measurable runs, /// so that actual interval can be selected in the profiler of choice. @@ -66,38 +70,38 @@ fn main() { sc_cli::init_logger(""); } + let mut import_benchmarks = Vec::new(); + + for profile in [Profile::Wasm, Profile::Native].iter() { + for size in [ + SizeType::Empty, + SizeType::Small, + SizeType::Medium, + SizeType::Large, + SizeType::Full, + SizeType::Custom, + ].iter() { + let txs = match size { + SizeType::Custom => opt.transactions.unwrap_or(0), + _ => size.transactions() + }; + for block_type in [ + BlockType::RandomTransfersKeepAlive(txs), + BlockType::RandomTransfersReaping(txs), + BlockType::Noop(txs), + ].iter() { + import_benchmarks.push((profile.clone(), size.clone(), block_type.clone())); + } + } + } + let benchmarks = matrix!( - profile in [Profile::Wasm, Profile::Native].iter() => + (profile, size, block_type) in import_benchmarks.iter() => ImportBenchmarkDescription { profile: *profile, key_types: KeyTypes::Sr25519, - size: SizeType::Medium, - }, - ImportBenchmarkDescription { - profile: Profile::Wasm, - key_types: KeyTypes::Sr25519, - size: SizeType::Empty, - }, - ImportBenchmarkDescription { - profile: Profile::Native, - key_types: KeyTypes::Ed25519, - size: SizeType::Medium, - }, - ImportBenchmarkDescription { - profile: Profile::Wasm, - key_types: KeyTypes::Sr25519, - size: SizeType::Full, - }, - ImportBenchmarkDescription { - profile: Profile::Native, - key_types: KeyTypes::Sr25519, - size: SizeType::Full, - }, - size in [SizeType::Small, SizeType::Large].iter() => - ImportBenchmarkDescription { - profile: Profile::Native, - key_types: KeyTypes::Sr25519, size: *size, + block_type: *block_type, }, (size, db_type) in [ @@ -145,4 +149,4 @@ fn main() { let json_result: String = serde_json::to_string(&results).expect("Failed to construct json"); println!("{}", json_result); } -} \ No newline at end of file +} diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index a48eea9ce87..ced85d2d4af 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -230,7 +230,7 @@ fn submitted_transaction_should_be_valid() { let res = Executive::validate_transaction(source, extrinsic); assert_eq!(res.unwrap(), ValidTransaction { - priority: 1_410_625_000_000, + priority: 1_410_740_000_000, requires: vec![], provides: vec![(address, 0).encode()], longevity: 128, diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 704778cc7a3..d256d116d38 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -56,6 +56,7 @@ use sp_inherents::{InherentData, CheckInherentsResult}; pub use sp_runtime::BuildStorage; pub use pallet_timestamp::Call as TimestampCall; pub use pallet_balances::Call as BalancesCall; +pub use frame_system::Call as SystemCall; pub use pallet_contracts::Gas; pub use frame_support::StorageValue; pub use pallet_staking::StakerStatus; @@ -119,14 +120,17 @@ parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. pub const MaximumBlockWeight: Weight = 2_000_000_000_000; - pub const ExtrinsicBaseWeight: Weight = 10_000_000; + /// Executing 10,000 System remarks (no-op) txs takes ~1.26 seconds -> ~125 µs per tx + pub const ExtrinsicBaseWeight: Weight = 125_000_000; pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000_000, // ~25 µs - write: 100_000_000, // ~100 µs + read: 25_000_000, // ~25 µs @ 200,000 items + write: 100_000_000, // ~100 µs @ 200,000 items }; + /// Importing a block with 0 txs takes ~5 ms + pub const BlockExecutionWeight: Weight = 5_000_000_000; } impl frame_system::Trait for Runtime { @@ -143,7 +147,7 @@ impl frame_system::Trait for Runtime { type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; type DbWeight = DbWeight; - type BlockExecutionWeight = (); + type BlockExecutionWeight = BlockExecutionWeight; type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; type AvailableBlockRatio = AvailableBlockRatio; diff --git a/bin/node/testing/src/bench.rs b/bin/node/testing/src/bench.rs index d05bb9a0950..cdc9cc86e57 100644 --- a/bin/node/testing/src/bench.rs +++ b/bin/node/testing/src/bench.rs @@ -43,6 +43,7 @@ use node_runtime::{ constants::currency::DOLLARS, UncheckedExtrinsic, MinimumPeriod, + SystemCall, BalancesCall, AccountId, Signature, @@ -129,16 +130,18 @@ impl Clone for BenchDb { #[derive(Debug, PartialEq, Clone, Copy)] pub enum BlockType { /// Bunch of random transfers. - RandomTransfers(usize), + RandomTransfersKeepAlive(usize), /// Bunch of random transfers that drain all of the source balance. RandomTransfersReaping(usize), + /// Bunch of "no-op" calls. + Noop(usize), } impl BlockType { /// Number of transactions for this block type. pub fn transactions(&self) -> usize { match self { - Self::RandomTransfers(v) | Self::RandomTransfersReaping(v) => *v, + Self::RandomTransfersKeepAlive(v) | Self::RandomTransfersReaping(v) | Self::Noop(v) => *v, } } } @@ -287,15 +290,31 @@ impl BenchDb { let signed = self.keyring.sign( CheckedExtrinsic { signed: Some((sender, signed_extra(0, node_runtime::ExistentialDeposit::get() + 1))), - function: Call::Balances( - BalancesCall::transfer( - pallet_indices::address::Address::Id(receiver), - match block_type { - BlockType::RandomTransfers(_) => node_runtime::ExistentialDeposit::get() + 1, - BlockType::RandomTransfersReaping(_) => 100*DOLLARS - node_runtime::ExistentialDeposit::get() - 1, - } - ) - ), + function: match block_type { + BlockType::RandomTransfersKeepAlive(_) => { + Call::Balances( + BalancesCall::transfer_keep_alive( + pallet_indices::address::Address::Id(receiver), + node_runtime::ExistentialDeposit::get() + 1, + ) + ) + }, + BlockType::RandomTransfersReaping(_) => { + Call::Balances( + BalancesCall::transfer( + pallet_indices::address::Address::Id(receiver), + // Transfer so that ending balance would be 1 less than existential deposit + // so that we kill the sender account. + 100*DOLLARS - (node_runtime::ExistentialDeposit::get() - 1), + ) + ) + }, + BlockType::Noop(_) => { + Call::System( + SystemCall::remark(Vec::new()) + ) + }, + }, }, version, genesis_hash, -- GitLab From 89e52af3f0780c425d751f35c70a2a70c71211a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 4 May 2020 13:43:08 +0200 Subject: [PATCH 122/167] Fix `sync` logging (#5879) --- client/network/src/protocol.rs | 4 ++-- client/network/src/protocol/sync.rs | 27 +++++++++++++++------------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 23fd944678d..895624f08de 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -751,7 +751,7 @@ impl Protocol { None }; let block_data = message::generic::BlockData { - hash: hash, + hash, header: if get_header { Some(header) } else { None }, body: if get_body { self.context_data @@ -783,7 +783,7 @@ impl Protocol { } let response = message::generic::BlockResponse { id: request.id, - blocks: blocks, + blocks, }; trace!(target: "sync", "Sending BlockResponse with {} blocks", response.blocks.len()); self.send_message(&peer, None, GenericMessage::BlockResponse(response)) diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index 4e9347001d9..37af47011d5 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -536,20 +536,25 @@ impl ChainSync { /// Request syncing for the given block from given set of peers. // The implementation is similar to on_block_announce with unknown parent hash. - pub fn set_sync_fork_request(&mut self, mut peers: Vec, hash: &B::Hash, number: NumberFor) { + pub fn set_sync_fork_request( + &mut self, + mut peers: Vec, + hash: &B::Hash, + number: NumberFor, + ) { if peers.is_empty() { - debug!( - target: "sync", - "Explicit sync request for block {:?} with no peers specified. \ - Syncing from all connected peers {:?} instead.", - hash, peers, - ); - peers = self.peers.iter() // Only request blocks from peers who are ahead or on a par. .filter(|(_, peer)| peer.best_number >= number) .map(|(id, _)| id.clone()) .collect(); + + debug!( + target: "sync", + "Explicit sync request for block {:?} with no peers specified. \ + Syncing from these peers {:?} instead.", + hash, peers, + ); } else { debug!(target: "sync", "Explicit sync request for block {:?} with {:?}", hash, peers); } @@ -653,12 +658,10 @@ impl ChainSync { let pending_requests = self.pending_requests.take(); let max_parallel = if major_sync { 1 } else { self.max_parallel_downloads }; let iter = self.peers.iter_mut().filter_map(move |(id, peer)| { - if !peer.state.is_available() { - return None - } - if !pending_requests.contains(id) { + if !peer.state.is_available() || !pending_requests.contains(id) { return None } + if let Some((range, req)) = peer_block_request( id, peer, -- GitLab From a67ca031aeae61d70f0e6352d78b1d8f7a090dbb Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Mon, 4 May 2020 13:43:54 +0200 Subject: [PATCH 123/167] Report tasks panics in metrics (#5878) * Report tasks panics in metrics * Renames * Renames --- client/service/src/task_manager.rs | 44 ++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/client/service/src/task_manager.rs b/client/service/src/task_manager.rs index 8d19a0e2795..e0db4c500ae 100644 --- a/client/service/src/task_manager.rs +++ b/client/service/src/task_manager.rs @@ -13,15 +13,12 @@ //! Substrate service tasks management module. -use std::{ - pin::Pin, - result::Result, sync::Arc -}; +use std::{panic, pin::Pin, result::Result, sync::Arc}; use exit_future::Signal; use log::{debug}; use futures::{ Future, FutureExt, - future::select, + future::{select, Either}, compat::*, task::{Spawn, FutureObj, SpawnError}, }; @@ -74,17 +71,36 @@ impl SpawnTaskHandle { if let Some(metrics) = &self.metrics { metrics.tasks_spawned.with_label_values(&[name]).inc(); // We do a dummy increase in order for the task to show up in metrics. - metrics.tasks_ended.with_label_values(&[name]).inc_by(0); + metrics.tasks_ended.with_label_values(&[name, "finished"]).inc_by(0); } let future = async move { if let Some(metrics) = metrics { - let poll_duration = metrics.poll_duration.with_label_values(&[name]); - let poll_start = metrics.poll_start.with_label_values(&[name]); - let task = prometheus_future::with_poll_durations(poll_duration, poll_start, task); + // Add some wrappers around `task`. + let task = { + let poll_duration = metrics.poll_duration.with_label_values(&[name]); + let poll_start = metrics.poll_start.with_label_values(&[name]); + let inner = prometheus_future::with_poll_durations(poll_duration, poll_start, task); + // The logic of `AssertUnwindSafe` here is ok considering that we throw + // away the `Future` after it has panicked. + panic::AssertUnwindSafe(inner).catch_unwind() + }; futures::pin_mut!(task); - let _ = select(on_exit, task).await; - metrics.tasks_ended.with_label_values(&[name]).inc(); + + match select(on_exit, task).await { + Either::Right((Err(payload), _)) => { + metrics.tasks_ended.with_label_values(&[name, "panic"]).inc(); + panic::resume_unwind(payload) + } + Either::Right((Ok(()), _)) => { + metrics.tasks_ended.with_label_values(&[name, "finished"]).inc(); + } + Either::Left(((), _)) => { + // The `on_exit` has triggered. + metrics.tasks_ended.with_label_values(&[name, "interrupted"]).inc(); + } + } + } else { futures::pin_mut!(task); let _ = select(on_exit, task).await; @@ -98,7 +114,7 @@ impl SpawnTaskHandle { impl Spawn for SpawnTaskHandle { fn spawn_obj(&self, future: FutureObj<'static, ()>) -> Result<(), SpawnError> { - self.spawn("unamed", future); + self.spawn("unnamed", future); Ok(()) } } @@ -220,9 +236,9 @@ impl Metrics { tasks_ended: register(CounterVec::new( Opts::new( "tasks_ended_total", - "Total number of tasks for which Future::poll has returned Ready(())" + "Total number of tasks for which Future::poll has returned Ready(()) or panicked" ), - &["task_name"] + &["task_name", "reason"] )?, registry)?, }) } -- GitLab From c4285c95ff862a6233abea2902d69aed84b818df Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Mon, 4 May 2020 16:24:05 +0300 Subject: [PATCH 124/167] Update wasmtime (#5822) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update wasmtime * update tests * Update client/executor/wasmtime/src/host.rs Co-Authored-By: Bastian Köcher * wip * use master-candidate * update with patches * update versions Co-authored-by: Bastian Köcher --- Cargo.lock | 142 +++++++++-------- client/executor/src/integration_tests/mod.rs | 10 +- client/executor/wasmtime/Cargo.toml | 10 +- client/executor/wasmtime/src/host.rs | 2 +- client/executor/wasmtime/src/imports.rs | 145 +++++++++--------- .../executor/wasmtime/src/instance_wrapper.rs | 48 ++++-- .../src/instance_wrapper/globals_snapshot.rs | 7 +- client/executor/wasmtime/src/runtime.rs | 2 +- 8 files changed, 198 insertions(+), 168 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2296d442ed..abfa181abf4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -300,6 +300,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" +[[package]] +name = "base64" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" + [[package]] name = "bincode" version = "1.2.1" @@ -721,18 +727,18 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a9c21f8042b9857bda93f6c1910b9f9f24100187a3d3d52f214a34e3dc5818" +checksum = "d4425bb6c3f3d2f581c650f1a1fdd3196a975490149cf59bea9d34c3bea79eda" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7853f77a6e4a33c67a69c40f5e1bb982bd2dc5c4a22e17e67b65bbccf9b33b2e" +checksum = "d166b289fd30062ee6de86284750fc3fe5d037c6b864b3326ce153239b0626e1" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -741,6 +747,7 @@ dependencies = [ "cranelift-entity", "gimli", "log", + "regalloc", "serde", "smallvec 1.3.0", "target-lexicon", @@ -749,9 +756,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084cd6d5fb0d1da28acd72c199471bfb09acc703ec8f3bf07b1699584272a3b9" +checksum = "02c9fb2306a36d41c5facd4bf3400bc6c157185c43a96eaaa503471c34c5144b" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -759,24 +766,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701b599783305a58c25027a4d73f2d6b599b2d8ef3f26677275f480b4d51e05d" +checksum = "44e0cfe9b1f97d9f836bca551618106c7d53b93b579029ecd38e73daa7eb689e" [[package]] name = "cranelift-entity" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88e792b28e1ebbc0187b72ba5ba880dad083abe9231a99d19604d10c9e73f38" +checksum = "926a73c432e5ba9c891171ff50b75e7d992cd76cd271f0a0a0ba199138077472" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518344698fa6c976d853319218415fdfb4f1bc6b42d0b2e2df652e55dff1f778" +checksum = "e45f82e3446dd1ebb8c2c2f6a6b0e6cd6cd52965c7e5f7b1b35e9a9ace31ccde" dependencies = [ "cranelift-codegen", "log", @@ -786,9 +793,9 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32daf082da21c0c05d93394ff4842c2ab7c4991b1f3186a1d952f8ac660edd0b" +checksum = "488b5d481bb0996a143e55a9d1739ef425efa20d4a5e5e98c859a8573c9ead9a" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,9 +804,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2aa816f554a3ef739a5d17ca3081a1f8983f04c944ea8ff60fb8d9dd8cd2d7b" +checksum = "00aa8dde71fd9fdb1958e7b0ef8f524c1560e2c6165e4ea54bc302b40551c161" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1277,11 +1284,10 @@ dependencies = [ [[package]] name = "faerie" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b9ed6159e4a6212c61d9c6a86bee01876b192a64accecf58d5b5ae3b667b52" +checksum = "dfef65b0e94693295c5d2fe2506f0ee6f43465342d4b5331659936aee8b16084" dependencies = [ - "anyhow", "goblin", "indexmap", "log", @@ -2724,7 +2730,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f7f3f79f060864db0317cc47641b7d35276dee52a0ffa91553fbd0c153863a3" dependencies = [ - "base64", + "base64 0.11.0", "byteorder 1.3.4", "bytes 0.5.4", "fnv", @@ -3876,16 +3882,13 @@ dependencies = [ [[package]] name = "object" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea44a4fd660ab0f38434934ca0212e90fbeaaee54126ef20a3451c30c95bafae" +checksum = "e5666bbb90bc4d1e5bdcb26c0afda1822d25928341e9384ab187a9b37ab69e36" dependencies = [ "flate2", - "goblin", - "parity-wasm 0.41.0", - "scroll", "target-lexicon", - "uuid", + "wasmparser", ] [[package]] @@ -5602,6 +5605,17 @@ dependencies = [ "syn 1.0.17", ] +[[package]] +name = "regalloc" +version = "0.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" +dependencies = [ + "log", + "rustc-hash", + "smallvec 1.3.0", +] + [[package]] name = "regex" version = "1.3.7" @@ -5706,7 +5720,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" dependencies = [ - "base64", + "base64 0.11.0", "blake2b_simd", "constant_time_eq", "crossbeam-utils", @@ -5745,7 +5759,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64", + "base64 0.11.0", "log", "ring", "sct", @@ -7176,7 +7190,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b" dependencies = [ - "base64", + "base64 0.11.0", "bytes 0.5.4", "flate2", "futures 0.3.4", @@ -8231,9 +8245,9 @@ version = "1.0.5" [[package]] name = "substrate-wasmtime" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e512629525ecfe43bffe1f3d9e6bb0f08bf01155288ef27fcaae4ea086e4a9d" +checksum = "3b8f9558e3fe7018b9aeac2aba318664dd7b15e307de11b09f58240695688a96" dependencies = [ "anyhow", "backtrace", @@ -8243,20 +8257,20 @@ dependencies = [ "region", "rustc-demangle", "substrate-wasmtime-jit", + "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", "wasmparser", "wasmtime-environ", - "wasmtime-profiling", "wat", "winapi 0.3.8", ] [[package]] name = "substrate-wasmtime-jit" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20de5564886d2bcffdd351c9cd114ceb50758aa58eac3cedb14faabf7f93b91" +checksum = "f6b681b90a8d48b9535e4287c02e5aef6c72228ff45cbb60b4d195a762cc0770" dependencies = [ "anyhow", "cfg-if", @@ -8265,23 +8279,44 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", + "gimli", + "log", "more-asserts", "region", + "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", "thiserror", "wasmparser", "wasmtime-debug", "wasmtime-environ", - "wasmtime-profiling", "winapi 0.3.8", ] +[[package]] +name = "substrate-wasmtime-profiling" +version = "0.16.0-threadsafe.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7cb99b24e771de6c20b380fdf2d26ffc2c20701892c540830beb83af98bb3b7" +dependencies = [ + "anyhow", + "cfg-if", + "gimli", + "lazy_static", + "libc", + "object", + "scroll", + "serde", + "substrate-wasmtime-runtime", + "target-lexicon", + "wasmtime-environ", +] + [[package]] name = "substrate-wasmtime-runtime" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d08846f04293a7fc27eeb30f06262ca2e1b4ee20f5192cec1f3ce201e08ceb8" +checksum = "aaccd27cc466bd2904aa14f984f642083037bf5b47e251ccaf1009aed0a2a185" dependencies = [ "backtrace", "cc", @@ -8294,7 +8329,6 @@ dependencies = [ "region", "thiserror", "wasmtime-environ", - "wasmtime-profiling", "winapi 0.3.8", ] @@ -9051,12 +9085,6 @@ dependencies = [ "percent-encoding 2.1.0", ] -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" - [[package]] name = "vcpkg" version = "0.2.8" @@ -9302,9 +9330,9 @@ checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" [[package]] name = "wasmtime-debug" -version = "0.12.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d3d007436043bf55ec252d2f4dc1d35834157b5e2f148da839ca502e611cfe1" +checksum = "d39ba645aee700b29ff0093028b4123556dd142a74973f04ed6225eedb40e77d" dependencies = [ "anyhow", "faerie", @@ -9318,12 +9346,12 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.12.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f3dea0e60c076dd0da27fa10c821323903c9554c617ed32eaab8e7a7e36c89" +checksum = "ed54fd9d64dfeeee7c285fd126174a6b5e6d4efc7e5a1566fdb635e60ff6a74e" dependencies = [ "anyhow", - "base64", + "base64 0.12.0", "bincode", "cranelift-codegen", "cranelift-entity", @@ -9345,22 +9373,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "wasmtime-profiling" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d29c8add3381e60d649f4e3e2a501da900fc2d2586e139502eec32fe0ebc8" -dependencies = [ - "gimli", - "goblin", - "lazy_static", - "libc", - "object", - "scroll", - "serde", - "target-lexicon", -] - [[package]] name = "wast" version = "14.0.0" diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 2e62e060157..932e2e3a1e9 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -92,9 +92,8 @@ fn call_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:missing_external") ), } } @@ -121,9 +120,8 @@ fn call_yet_another_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `yet_another_missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:yet_another_missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:yet_another_missing_external") ), } } diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 5b1c3841410..3644c57e47b 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,11 +21,11 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { package = "substrate-wasmtime", version = "0.13.0-threadsafe.1" } -wasmtime_runtime = { package = "substrate-wasmtime-runtime", version = "0.13.0-threadsafe.1" } -wasmtime-environ = "0.12.0" -cranelift-wasm = "0.59.0" -cranelift-codegen = "0.59.0" +wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.1" } +wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.1" } +wasmtime-environ = "0.16" +cranelift-wasm = "0.63" +cranelift-codegen = "0.63" [dev-dependencies] assert_matches = "1.3.0" diff --git a/client/executor/wasmtime/src/host.rs b/client/executor/wasmtime/src/host.rs index 29187ac6633..8c481e95c43 100644 --- a/client/executor/wasmtime/src/host.rs +++ b/client/executor/wasmtime/src/host.rs @@ -117,7 +117,7 @@ impl<'a> SandboxCapabilities for HostContext<'a> { return Err("Supervisor function returned unexpected result!".into()); } } - Err(err) => Err(err.message().to_string().into()), + Err(err) => Err(err.to_string().into()), } } } diff --git a/client/executor/wasmtime/src/imports.rs b/client/executor/wasmtime/src/imports.rs index 48299ffd62d..2d9794b7eda 100644 --- a/client/executor/wasmtime/src/imports.rs +++ b/client/executor/wasmtime/src/imports.rs @@ -18,9 +18,8 @@ use crate::state_holder; use sc_executor_common::error::WasmError; use sp_wasm_interface::{Function, Value, ValueType}; use std::any::Any; -use std::rc::Rc; use wasmtime::{ - Callable, Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, + Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, Trap, Val, }; @@ -53,11 +52,11 @@ pub fn resolve_imports( let resolved = match import_ty.name() { "memory" => { memory_import_index = Some(externs.len()); - resolve_memory_import(module, import_ty, heap_pages)? + resolve_memory_import(module, &import_ty, heap_pages)? } _ => resolve_func_import( module, - import_ty, + &import_ty, host_functions, allow_missing_func_imports, )?, @@ -131,7 +130,7 @@ fn resolve_func_import( { Some(host_func) => host_func, None if allow_missing_func_imports => { - return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, func_ty)); + return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, &func_ty)); } None => { return Err(WasmError::Other(format!( @@ -163,6 +162,58 @@ struct HostFuncHandler { host_func: &'static dyn Function, } +fn call_static( + static_func: &'static dyn Function, + wasmtime_params: &[Val], + wasmtime_results: &mut [Val], +) -> Result<(), wasmtime::Trap> { + let unwind_result = state_holder::with_context(|host_ctx| { + let mut host_ctx = host_ctx.expect( + "host functions can be called only from wasm instance; + wasm instance is always called initializing context; + therefore host_ctx cannot be None; + qed + ", + ); + // `into_value` panics if it encounters a value that doesn't fit into the values + // available in substrate. + // + // This, however, cannot happen since the signature of this function is created from + // a `dyn Function` signature of which cannot have a non substrate value by definition. + let mut params = wasmtime_params.iter().cloned().map(into_value); + + std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + static_func.execute(&mut host_ctx, &mut params) + })) + }); + + let execution_result = match unwind_result { + Ok(execution_result) => execution_result, + Err(err) => return Err(Trap::new(stringify_panic_payload(err))), + }; + + match execution_result { + Ok(Some(ret_val)) => { + debug_assert!( + wasmtime_results.len() == 1, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + wasmtime_results[0] = into_wasmtime_val(ret_val); + Ok(()) + } + Ok(None) => { + debug_assert!( + wasmtime_results.len() == 0, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + Ok(()) + } + Err(msg) => Err(Trap::new(msg)), + } +} + impl HostFuncHandler { fn new(host_func: &'static dyn Function) -> Self { Self { @@ -171,63 +222,14 @@ impl HostFuncHandler { } fn into_extern(self, module: &Module) -> Extern { + let host_func = self.host_func; let func_ty = wasmtime_func_sig(self.host_func); - let func = Func::new(module.store(), func_ty, Rc::new(self)); - Extern::Func(func) - } -} - -impl Callable for HostFuncHandler { - fn call( - &self, - wasmtime_params: &[Val], - wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - let unwind_result = state_holder::with_context(|host_ctx| { - let mut host_ctx = host_ctx.expect( - "host functions can be called only from wasm instance; - wasm instance is always called initializing context; - therefore host_ctx cannot be None; - qed - ", - ); - // `into_value` panics if it encounters a value that doesn't fit into the values - // available in substrate. - // - // This, however, cannot happen since the signature of this function is created from - // a `dyn Function` signature of which cannot have a non substrate value by definition. - let mut params = wasmtime_params.iter().cloned().map(into_value); - - std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { - self.host_func.execute(&mut host_ctx, &mut params) - })) - }); - - let execution_result = match unwind_result { - Ok(execution_result) => execution_result, - Err(err) => return Err(Trap::new(stringify_panic_payload(err))), - }; - - match execution_result { - Ok(Some(ret_val)) => { - debug_assert!( - wasmtime_results.len() == 1, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - wasmtime_results[0] = into_wasmtime_val(ret_val); - Ok(()) - } - Ok(None) => { - debug_assert!( - wasmtime_results.len() == 0, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - Ok(()) + let func = Func::new(module.store(), func_ty, + move |_, params, result| { + call_static(host_func, params, result) } - Err(msg) => Err(Trap::new(msg)), - } + ); + Extern::Func(func) } } @@ -245,25 +247,18 @@ impl MissingHostFuncHandler { } } - fn into_extern(self, module: &Module, func_ty: &FuncType) -> Extern { - let func = Func::new(module.store(), func_ty.clone(), Rc::new(self)); + fn into_extern(self, wasmtime_module: &Module, func_ty: &FuncType) -> Extern { + let Self { module, name } = self; + let func = Func::new(wasmtime_module.store(), func_ty.clone(), + move |_, _, _| Err(Trap::new(format!( + "call to a missing function {}:{}", + module, name + ))) + ); Extern::Func(func) } } -impl Callable for MissingHostFuncHandler { - fn call( - &self, - _wasmtime_params: &[Val], - _wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - Err(Trap::new(format!( - "call to a missing function {}:{}", - self.module, self.name - ))) - } -} - fn wasmtime_func_sig(func: &dyn Function) -> wasmtime::FuncType { let params = func .signature() diff --git a/client/executor/wasmtime/src/instance_wrapper.rs b/client/executor/wasmtime/src/instance_wrapper.rs index 469668802f1..bf01896809e 100644 --- a/client/executor/wasmtime/src/instance_wrapper.rs +++ b/client/executor/wasmtime/src/instance_wrapper.rs @@ -26,7 +26,7 @@ use sc_executor_common::{ util::{WasmModuleInfo, DataSegmentsSnapshot}, }; use sp_wasm_interface::{Pointer, WordSize, Value}; -use wasmtime::{Store, Instance, Module, Memory, Table, Val}; +use wasmtime::{Store, Instance, Module, Memory, Table, Val, Func, Extern, Global}; mod globals_snapshot; @@ -88,6 +88,35 @@ pub struct InstanceWrapper { _not_send_nor_sync: marker::PhantomData<*const ()>, } +fn extern_memory(extern_: &Extern) -> Option<&Memory> { + match extern_ { + Extern::Memory(mem) => Some(mem), + _ => None, + } +} + + +fn extern_global(extern_: &Extern) -> Option<&Global> { + match extern_ { + Extern::Global(glob) => Some(glob), + _ => None, + } +} + +fn extern_table(extern_: &Extern) -> Option<&Table> { + match extern_ { + Extern::Table(table) => Some(table), + _ => None, + } +} + +fn extern_func(extern_: &Extern) -> Option<&Func> { + match extern_ { + Extern::Func(func) => Some(func), + _ => None, + } +} + impl InstanceWrapper { /// Create a new instance wrapper from the given wasm module. pub fn new(module_wrapper: &ModuleWrapper, imports: &Imports, heap_pages: u32) -> Result { @@ -96,8 +125,7 @@ impl InstanceWrapper { let memory = match imports.memory_import_index { Some(memory_idx) => { - imports.externs[memory_idx] - .memory() + extern_memory(&imports.externs[memory_idx]) .expect("only memory can be at the `memory_idx`; qed") .clone() } @@ -130,8 +158,7 @@ impl InstanceWrapper { .instance .get_export(name) .ok_or_else(|| Error::from(format!("Exported method {} is not found", name)))?; - let entrypoint = export - .func() + let entrypoint = extern_func(&export) .ok_or_else(|| Error::from(format!("Export {} is not a function", name)))?; match (entrypoint.ty().params(), entrypoint.ty().results()) { (&[wasmtime::ValType::I32, wasmtime::ValType::I32], &[wasmtime::ValType::I64]) => {} @@ -164,8 +191,7 @@ impl InstanceWrapper { .get_export("__heap_base") .ok_or_else(|| Error::from("__heap_base is not found"))?; - let heap_base_global = heap_base_export - .global() + let heap_base_global = extern_global(&heap_base_export) .ok_or_else(|| Error::from("__heap_base is not a global"))?; let heap_base = heap_base_global @@ -183,7 +209,7 @@ impl InstanceWrapper { None => return Ok(None), }; - let global = global.global().ok_or_else(|| format!("`{}` is not a global", name))?; + let global = extern_global(&global).ok_or_else(|| format!("`{}` is not a global", name))?; match global.get() { Val::I32(val) => Ok(Some(Value::I32(val))), @@ -201,8 +227,7 @@ fn get_linear_memory(instance: &Instance) -> Result { .get_export("memory") .ok_or_else(|| Error::from("memory is not exported under `memory` name"))?; - let memory = memory_export - .memory() + let memory = extern_memory(&memory_export) .ok_or_else(|| Error::from("the `memory` export should have memory type"))? .clone(); @@ -213,7 +238,8 @@ fn get_linear_memory(instance: &Instance) -> Result { fn get_table(instance: &Instance) -> Option { instance .get_export("__indirect_function_table") - .and_then(|export| export.table()) + .as_ref() + .and_then(extern_table) .cloned() } diff --git a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs index a6ab3fed604..8707390b9fe 100644 --- a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs +++ b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs @@ -21,6 +21,7 @@ use sc_executor_common::{ use sp_wasm_interface::Value; use cranelift_codegen::ir; use cranelift_wasm::GlobalIndex; +use wasmtime_runtime::{ExportGlobal, Export}; /// A snapshot of a global variables values. This snapshot can be used later for restoring the /// values to the preserved state. @@ -43,11 +44,9 @@ impl GlobalsSnapshot { for global_idx in instance_wrapper.imported_globals_count..instance_wrapper.globals_count { let (def, global) = match handle.lookup_by_declaration( - &wasmtime_environ::Export::Global(GlobalIndex::from_u32(global_idx)), + &wasmtime_environ::EntityIndex::Global(GlobalIndex::from_u32(global_idx)), ) { - wasmtime_runtime::Export::Global { - definition, global, .. - } => (definition, global), + Export::Global(ExportGlobal { definition, global, .. }) => (definition, global), _ => unreachable!("only globals can be returned for a global request"), }; diff --git a/client/executor/wasmtime/src/runtime.rs b/client/executor/wasmtime/src/runtime.rs index 0289188ba11..a2ad3bada4b 100644 --- a/client/executor/wasmtime/src/runtime.rs +++ b/client/executor/wasmtime/src/runtime.rs @@ -158,7 +158,7 @@ fn perform_call( Err(trap) => { return Err(Error::from(format!( "Wasm execution trapped: {}", - trap.message() + trap ))); } } -- GitLab From e897928ffaf64199170b32dfdd97778b4f394ac6 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Mon, 4 May 2020 15:47:23 +0200 Subject: [PATCH 125/167] Use header cache when creating state. (#5868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use header cache for state_at * Fixed warnings * Update client/db/src/lib.rs Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- client/db/src/lib.rs | 29 ++++++------- client/service/src/client/client.rs | 43 ++++++++++++++------ client/service/src/client/mod.rs | 5 ++- primitives/blockchain/src/header_metadata.rs | 3 ++ 4 files changed, 52 insertions(+), 28 deletions(-) diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index a7246f398df..5edfcb046f6 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -1590,10 +1590,16 @@ impl sc_client_api::backend::Backend for Backend { _ => {} } - match self.blockchain.header(block) { - Ok(Some(ref hdr)) => { - let hash = hdr.hash(); - if !self.have_state_at(&hash, *hdr.number()) { + let hash = match block { + BlockId::Hash(h) => h, + BlockId::Number(n) => self.blockchain.hash(n)?.ok_or_else(|| + sp_blockchain::Error::UnknownBlock(format!("Unknown block number {}", n)) + )?, + }; + + match self.blockchain.header_metadata(hash) { + Ok(ref hdr) => { + if !self.have_state_at(&hash, hdr.number) { return Err( sp_blockchain::Error::UnknownBlock( format!("State already discarded for {:?}", block) @@ -1601,8 +1607,8 @@ impl sc_client_api::backend::Backend for Backend { ) } if let Ok(()) = self.storage.state_db.pin(&hash) { - let root = hdr.state_root(); - let db_state = DbState::::new(self.storage.clone(), *root); + let root = hdr.state_root; + let db_state = DbState::::new(self.storage.clone(), root); let state = RefTrackingState::new( db_state, self.storage.clone(), @@ -1627,22 +1633,17 @@ impl sc_client_api::backend::Backend for Backend { ) } }, - Ok(None) => Err( - sp_blockchain::Error::UnknownBlock( - format!("Unknown state for block {:?}", block) - ) - ), Err(e) => Err(e), } } fn have_state_at(&self, hash: &Block::Hash, number: NumberFor) -> bool { if self.is_archive { - match self.blockchain.header(BlockId::Hash(hash.clone())) { - Ok(Some(header)) => { + match self.blockchain.header_metadata(hash.clone()) { + Ok(header) => { sp_state_machine::Storage::get( self.storage.as_ref(), - &header.state_root(), + &header.state_root, (&[], None), ).unwrap_or(None).is_some() }, diff --git a/client/service/src/client/client.rs b/client/service/src/client/client.rs index a5a02c85cfd..bc992291bdb 100644 --- a/client/service/src/client/client.rs +++ b/client/service/src/client/client.rs @@ -26,7 +26,7 @@ use parking_lot::{Mutex, RwLock}; use codec::{Encode, Decode}; use hash_db::Prefix; use sp_core::{ - ChangesTrieConfiguration, convert_hash, traits::CodeExecutor, NativeOrEncoded, + ChangesTrieConfiguration, convert_hash, NativeOrEncoded, storage::{StorageKey, PrefixedStorageKey, StorageData, well_known_keys, ChildInfo}, }; use sc_telemetry::{telemetry, SUBSTRATE_INFO}; @@ -43,7 +43,7 @@ use sp_state_machine::{ prove_read, prove_child_read, ChangesTrieRootsStorage, ChangesTrieStorage, ChangesTrieConfigurationRange, key_changes, key_changes_proof, }; -use sc_executor::{RuntimeVersion, RuntimeInfo}; +use sc_executor::RuntimeVersion; use sp_consensus::{ Error as ConsensusError, BlockStatus, BlockImportParams, BlockCheckParams, ImportResult, BlockOrigin, ForkChoiceStrategy, RecordProof, @@ -61,26 +61,41 @@ use sp_api::{ CallApiAtParams, }; use sc_block_builder::{BlockBuilderApi, BlockBuilderProvider}; -use sc_client_api::{backend::{ - self, BlockImportOperation, PrunableStateChangesTrieStorage, - ClientImportOperation, Finalizer, ImportSummary, NewBlockState, - changes_tries_state_at_block, StorageProvider, - LockImportRun, apply_aux, -}, client::{ - ImportNotifications, FinalityNotification, FinalityNotifications, BlockImportNotification, - ClientInfo, BlockchainEvents, BlockBackend, ProvideUncles, BadBlocks, ForkBlocks, - BlockOf, -}, execution_extensions::ExecutionExtensions, notifications::{StorageNotifications, StorageEventStream}, KeyIterator, CallExecutor, ExecutorProvider, ProofProvider, CloneableSpawn, cht, in_mem, UsageProvider}; +use sc_client_api::{ + backend::{ + self, BlockImportOperation, PrunableStateChangesTrieStorage, + ClientImportOperation, Finalizer, ImportSummary, NewBlockState, + changes_tries_state_at_block, StorageProvider, + LockImportRun, apply_aux, + }, + client::{ + ImportNotifications, FinalityNotification, FinalityNotifications, BlockImportNotification, + ClientInfo, BlockchainEvents, BlockBackend, ProvideUncles, BadBlocks, ForkBlocks, + BlockOf, + }, + execution_extensions::ExecutionExtensions, + notifications::{StorageNotifications, StorageEventStream}, + KeyIterator, CallExecutor, ExecutorProvider, ProofProvider, + cht, UsageProvider +}; use sp_utils::mpsc::tracing_unbounded; use sp_blockchain::Error; use prometheus_endpoint::Registry; use super::{ - genesis, call_executor::LocalCallExecutor, + genesis, light::{call_executor::prove_execution, fetcher::ChangesProof}, block_rules::{BlockRules, LookupResult as BlockLookupResult}, }; use futures::channel::mpsc; +#[cfg(feature="test-helpers")] +use { + sp_core::traits::CodeExecutor, + sc_client_api::{CloneableSpawn, in_mem}, + sc_executor::RuntimeInfo, + super::call_executor::LocalCallExecutor, +}; + type NotificationSinks = Mutex>>; /// Substrate Client @@ -126,6 +141,7 @@ impl PrePostHeader { } /// Create an instance of in-memory client. +#[cfg(feature="test-helpers")] pub fn new_in_mem( executor: E, genesis_storage: &S, @@ -165,6 +181,7 @@ pub struct ClientConfig { /// Create a client with the explicitly provided backend. /// This is useful for testing backend implementations. +#[cfg(feature="test-helpers")] pub fn new_with_backend( backend: Arc, executor: E, diff --git a/client/service/src/client/mod.rs b/client/service/src/client/mod.rs index 079b9d243f9..fe3ad992b66 100644 --- a/client/service/src/client/mod.rs +++ b/client/service/src/client/mod.rs @@ -50,5 +50,8 @@ mod block_rules; pub use self::{ call_executor::LocalCallExecutor, - client::{new_with_backend, new_in_mem, Client, ClientConfig}, + client::{Client, ClientConfig}, }; + +#[cfg(feature="test-helpers")] +pub use self::client::{new_with_backend, new_in_mem}; diff --git a/primitives/blockchain/src/header_metadata.rs b/primitives/blockchain/src/header_metadata.rs index 85a94624c92..bdc2b09eea4 100644 --- a/primitives/blockchain/src/header_metadata.rs +++ b/primitives/blockchain/src/header_metadata.rs @@ -265,6 +265,8 @@ pub struct CachedHeaderMetadata { pub number: NumberFor, /// Hash of parent header. pub parent: Block::Hash, + /// Block state root. + pub state_root: Block::Hash, /// Hash of an ancestor header. Used to jump through the tree. ancestor: Block::Hash, } @@ -275,6 +277,7 @@ impl From<&Block::Header> for CachedHeaderMetadata { hash: header.hash().clone(), number: header.number().clone(), parent: header.parent_hash().clone(), + state_root: header.state_root().clone(), ancestor: header.parent_hash().clone(), } } -- GitLab From 8c2ff6954597ff2377c664ca8b45a2312619e74c Mon Sep 17 00:00:00 2001 From: ddorgan Date: Mon, 4 May 2020 16:03:11 +0100 Subject: [PATCH 126/167] Update chain spec for flaming fir 7 (#5882) * Update chain spec for flaming fir 7 * Update sudo key * Use fir7 for protocol * Bump spec version * Revert sudo change * Rebuilt spec after all the changes. Flaming fir has been reset with this. --- bin/node/cli/res/flaming-fir.json | 197 +++++++++++++++--------------- bin/node/runtime/src/lib.rs | 2 +- 2 files changed, 99 insertions(+), 100 deletions(-) diff --git a/bin/node/cli/res/flaming-fir.json b/bin/node/cli/res/flaming-fir.json index 3612d7284fa..7cc2c11c327 100644 --- a/bin/node/cli/res/flaming-fir.json +++ b/bin/node/cli/res/flaming-fir.json @@ -1,6 +1,7 @@ { "name": "Flaming Fir", - "id": "flamingfir6", + "id": "flamingfir7", + "chainType": "Live", "bootNodes": [ "/ip4/35.246.224.91/tcp/30333/p2p/QmaGKGpdm2iLiVCAnEcwrAhHxrcjMdGao4UubJxq7AF77n", "/ip4/35.246.224.91/tcp/30334/ws/p2p/QmaGKGpdm2iLiVCAnEcwrAhHxrcjMdGao4UubJxq7AF77n", @@ -13,126 +14,124 @@ ], "telemetryEndpoints": [ [ - "wss://telemetry.polkadot.io/submit/", + "/dns4/telemetry.polkadot.io/tcp/443/x-parity-wss/%2Fsubmit%2F", 0 ] ], - "protocolId": "fir6", + "protocolId": "fir7", "properties": { "tokenDecimals": 15, "tokenSymbol": "FIR" }, "forkBlocks": null, - "badBlocks": [ - "0xf3b02820f81988282e1da41fd479ef2aa00d63d622863639ea15d48ab6533fdc" - ], + "badBlocks": null, "consensusEngine": null, "genesis": { "raw": { "top": { - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da97f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc47132bdc08fa57aeff963126d33d186054c4211cc8e3b7a46ed61365bcde8c5f5": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde780f0000c16ff286230f0000c16ff286230000", - "0x3a6772616e6470615f617574686f726974696573": "0x01103919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef01000000000000005633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce44001000000000000007932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f01000000000000009becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe96993320100000000000000", - "0x426e15054d267946093858132eb537f1ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc413c312ec9dee1781c5bd27a5a5ba5b9718f39358b381bcd6783393fd2bee2090": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c26630f0000c16ff286230f0000c16ff286230000", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x426e15054d267946093858132eb537f105fe52c2045750c3c492ccdcf62e2b9c": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x08000000", + "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x106e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f910600299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e", + "0x426e15054d267946093858132eb537f195999521c6c89cd80b677e53ce20f98c": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc40a81aa5d99517e5635e7865ccd909c4066bc1e5d275da50b72b15de072a2468a5ad414919ca9054d2695767cf650012f": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c26630f0000c16ff286230f0000c16ff286230000", "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a00000000c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade987f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x00", - "0x26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac": "0x01000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b6579730a299be621974fd19374a88f1dddd8442b21db25d2c923907dda6af815b657fe": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0x426e15054d267946093858132eb537f1a47a9ff5cd5bf4d848a80a0b1a947dc3": "0x00000000000000000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb354352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x9becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe96993326e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106", + "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x109c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d129becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe96993326e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c26633919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef00299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d655633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce440482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde787932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e", + "0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000", + "0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000", + "0x426e15054d267946093858132eb537f105fe52c2045750c3c492ccdcf62e2b9c": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x0001f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c26630168655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0x0001547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65019c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x34b9dcaacddd89d5a94929dccb713153d2d505c0e6f76fd7ce0796ebe187401c": "0x0000000001000000000000000100000000000000010000000000000001000000000000000100000000000000010000000000000001000000000000008700000000000000af00000000000000010000000000000001000000000000006400000000000000040000000000010010000000004000000020000000", - "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x1000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e6e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106", - "0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7": "0x1c000000000000039ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e31809734747180900000000000000039c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12000000000000000368655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde780000000000000003547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d650000000000000003f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c266300000000000000036d6f646c70792f7472737279000000000000000000000000000000000000000000000000000003006d6f646c70792f7472737279000000000000000000000000000000000000000000407a10f35a0000000000000000000000", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x9e42241d7cd91d001773b0b616d523dd80e13c6c2cab860b1234ef1b9ffc1526", - "0x426e15054d267946093858132eb537f1d0b4a3f7631f0c0e761898fe198211de": "0xe7030000", - "0x5f3e4907f716ac89b6347d15ececedca6a93112633bb3354e67952fcdd740cd5": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39fe6329cc0b39e09343a73657373696f6e3a6b65797394f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x3919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef00299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da994f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b6579730cd914acf7b89329ae59e8f7e3b8f1ee7a4f5f68d4749cca82814f2f5b1d6bbb": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797346c8960f8387b17441ee2be48a0896e48d3580e922c6e1cd8f53a621370c1e49": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797365ab35e7816bae0042175c49c0d6da885e26780d56ff9c7f04727e757dddc666": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", - "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x10f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c26633919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef00299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d655633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce440482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde787932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d129becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe96993326e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe707f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x781ead1e2fa9ccb74b44c19d29cb2a7a4b5be3972927ae98cd3877523976a276", - "0x3a636f6465": "0x0061736d0100000001a6033a60037f7f7f017f60027f7f017f60027f7f0060037f7f7f0060047f7f7f7f0060017f0060057f7f7f7f7f0060017f017e60037f7e7e0060017e017f60017e017e60027e7e0060017e0060047f7e7e7f017f60067f7e7e7f7f7f017f60057e7e7f7e7e0060047e7e7f7e017e60047e7e7f7e0060037f7e7f017f60027f7e017e60047f7e7e7e017f6000017e60037e7e7f0060047f7f7f7f017f6000017f60027f7e017f60017f017f60037e7e7f017e60037f7f7e017e60027f7f017e60000060037e7f7f017f60067f7f7f7f7f7f017f60057f7f7f7f7f017f60027f7e0060067f7f7f7f7f7f0060077f7e7e7e7e7e7e0060057f7f7e7e7f0060067f7f7f7e7e7f0060047f7f7f7f017e60077f7f7f7e7e7e7f0060037f7f7e0060077f7f7f7e7e7f7f0060077f7f7f7f7e7e7f0060047f7f7e7e0060077f7f7e7e7f7f7f0060057f7e7e7f7f0060057f7f7f7e7e0060077f7f7f7f7f7f7f0060067f7e7e7f7f7f0060027e7f0060067f7f7f7f7e7e0060087e7e7e7e7e7e7e7e017f60087f7f7f7f7f7e7e7f0060037f7e7f0060047f7e7e7f0060057f7e7e7e7e0060067f7e7e7e7e7f0002b00e2e03656e76066d656d6f727902001303656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000803656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31000903656e76196578745f73746f726167655f6765745f76657273696f6e5f31000a03656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31000903656e76196578745f73746f726167655f7365745f76657273696f6e5f31000b03656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31000c03656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31000903656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31000903656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31000c03656e76206578745f73616e64626f785f6d656d6f72795f6e65775f76657273696f6e5f31000103656e76256578745f73616e64626f785f6d656d6f72795f74656172646f776e5f76657273696f6e5f31000503656e76216578745f73616e64626f785f696e7374616e74696174655f76657273696f6e5f31000d03656e761c6578745f73616e64626f785f696e766f6b655f76657273696f6e5f31000e03656e76276578745f73616e64626f785f696e7374616e63655f74656172646f776e5f76657273696f6e5f31000503656e76206578745f73746f726167655f6368696c645f726f6f745f76657273696f6e5f31000a03656e761f6578745f73746f726167655f6368696c645f7365745f76657273696f6e5f31000f03656e761f6578745f73746f726167655f6368696c645f6765745f76657273696f6e5f31001003656e76216578745f73746f726167655f6368696c645f636c6561725f76657273696f6e5f31001103656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31000a03656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31000c03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f31001203656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31001303656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001403656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000803656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31000a03656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31000c03656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31001203656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001503656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31000a03656e76286578745f73746f726167655f6368696c645f73746f726167655f6b696c6c5f76657273696f6e5f31001603656e76206578745f73616e64626f785f6d656d6f72795f6765745f76657273696f6e5f31001703656e76206578745f73616e64626f785f6d656d6f72795f7365745f76657273696f6e5f31001703656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31000c03656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31001803656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31001903656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31001903656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31000903656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31000a03656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001503656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31001a03656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000503656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001b03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000703656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31001c03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31001d03c606c4061a1a050500001a1a1d1e1e1e030203001e060001010102011f0507201702020004010101020101010301010100042101010001010000010005030102020203020001010102202201020504230505050505020202030303020302020203030303050503020203030303040505050b08032405050505050205020202020203030203020125020302022302050202030226040b231e04040404040404040404040404040404040404040404040404040427020505011e0202030402020202020205030102050502020202020502020202020202020202022829022a02242b050303022c0405020303040202010404030203032d06040505030202040202020302060302051a030202020802050205020205020202020202030403060202020503010202020501020505050505050505050505050505050505050505050502020202020202020226020203021a0502020505050203030202030203030304050403050203030203050505050502020202020202020205020201020506010102000101011e02020202062e0202032f05020203020204020302020202030303020302301e06050402020131020205050505020202020104020201040202010517030505020202011a0202050202020203051e15020205021a32020602030505030505050202020202050202030202030202030303050505021a030203030505050205030203012c03030201051e02030505020505050202020202050505020202020102020202020102010402030305050203001a0202031a0205020525020205050205010201330202020317060302020305050202020305050205020505050502050506030301030202243401060402020202020302020202350205030103050505050502020202051a0202050205050505050202020202030502040204051d021d021d1d1d1d1d021d031d1d031d021d1d1d1d1d1d1d1d1d1d1d050303050502020205050203030302051e050202030202020202020502020202022c050502050202050501030306033602020203020106020203030505050206020201030204010301010202010101010101010102030103020201030103030302010103010503031a01020208010106010104030403040301060603030501010101000000003737383838390407017001950295020619037f01418080c0000b7f0041b4e2ca000b7f0041b4e2ca000b07e8051a195f5f696e6469726563745f66756e6374696f6e5f7461626c65010009686173685f7465737400350c436f72655f76657273696f6e00c90512436f72655f657865637574655f626c6f636b00cb0515436f72655f696e697469616c697a655f626c6f636b00cd05114d657461646174615f6d6574616461746100ce051c426c6f636b4275696c6465725f6170706c795f65787472696e73696300cf051b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00d00520426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300d1051c426c6f636b4275696c6465725f636865636b5f696e686572656e747300d30518426c6f636b4275696c6465725f72616e646f6d5f7365656400d5052b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00d605214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200d8051e4772616e6470614170695f6772616e6470615f617574686f72697469657300da0515426162654170695f636f6e66696775726174696f6e00db051b426162654170695f63757272656e745f65706f63685f737461727400dc0521417574686f72697479446973636f766572794170695f617574686f72697469657300dd051d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e636500de0511436f6e7472616374734170695f63616c6c00df0518436f6e7472616374734170695f6765745f73746f7261676500e0051c436f6e7472616374734170695f72656e745f70726f6a656374696f6e00e105205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f00e2052153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797300e3051f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797300e4050a5f5f646174615f656e6403010b5f5f686561705f626173650302098b04010041010b94024442564ed3064f505763d102af01c101c201c301c401c501c601c701c801c901ca01cb01cc01cd01ce01cf01d001d101d201d301d401d501d601d701d801d901da01db01dc01cb04cc02ef04ed04f003a703a803ac03ab06ad06ae069a0658c906ab03dd06b306e506c106bb06e5053f40416747595c5d5e5f606d6e6f70717674758f069004fd047e9901d506d206bf02a301bb02d606e001f501f301f201820281028002ff01fe01fd01fc01fb01fa01f901f801f8058d04ba02c002be02bd028c048b04d402ec04a7047a79d502980188068a067c7b7daa05a905b2058e068d06d60282058105d70284058c0587058805f605f405d802800687069f049e04d902a004a804b902b702da02bc02d302bc05ba05db02c805bb05ac05ab05dc02ad05b605d904d804dd02d903da03ec03fc04fb04de028b05c504c404df02c604e904f101f001e002f701a102ba04b904e102e504d803d703e202eb038605e3028905a201a101e402df01bd04bc04e502be04ea04b905b805e602c3059f019e01e702a001de01ad03dc03db03b40691048f048e04a104bb04fa05b105c204c104c004bf04ae05ca04c904c804c704f904f804fa04fe0483058d058e058f059005910587025354a505f604a605f704a705a805a405b005af05ff05fe05fd05fc05fb05f7058206810689068c068b06b806b206b706b506b606e306bf06c706e206e606e4060a83f75ec40606002000102e0b0600200010270b0600200010300b0600200010280b0a0020002001200210320b2801017f0240200210272203450d002003200020022001200120024b1b10e8061a200010280b20030b0600200010340b1c01017f0240200010272201450d0020014100200010e7061a0b20010bff0202017f037e230041206b220224002001ad42adfed5e4d485fda8d8007e42b9e0007c210302400240024002400240200141084b0d00200141014b0d0120010d02420021040c030b0240200141104b0d00200241106a2000290000200385420042adfed5e4d485fda8d800420010ed06200241186a29030020022903107c200120006a41786a2900008521040c040b200120006a41786a2900002105200321040340200029000020048542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e2003852103200041086a2100200442cf829ebbefefde82147c2104200141786a220141084b0d000b200320058521040c030b0240200141034b0d00200120006a417e6a33000042108620003300008420038521040c030b200120006a417c6a35000042208620003500008420038521040c020b200031000021040b200420038521040b20022004420042adfed5e4d485fda8d800420010ed06200241086a290300210420022903002103200241206a2400200420037c42c300850b05001037000b24004100419ccaca00ad4280808080f0008441a3caca00ad4280808080a00484100000000b1100418080c0004111419480c0001039000b4701017f230041206b22032400200341146a4100360200200341c8e1ca00360210200342013702042003200136021c200320003602182003200341186a360200200320021043000b8b0301067f230041306b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b024002400240024002400240200141146a2802000d00200621070c010b024020040d0041bc80c00041004100103b000b024002402006410f4b0d00200341046a280200450d010b200620066a220720064f0d010b4101210541002107200241086a21060c010b2007417f4c0d01200241086a2106024020070d0041012105410021070c010b2007102d2205450d020b200241003602102002200736020c200220053602082002200241086a360214200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318200241146a41cc80c000200241186a103c0d0220002006290200370200200041086a200641086a280200360200200241306a24000f0b103d000b1036000b41e480c0004133200241186a419881c00041a881c000103e000b6c01017f230041306b2203240020032002360204200320013602002003411c6a41023602002003412c6a41013602002003420237020c2003419484c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a20001043000bba06010a7f230041306b22032400200341246a2001360200200341033a002820034280808080800437030820032000360220410021042003410036021820034100360210024002400240024020022802082205450d0020022802002106200228020422072002410c6a2802002208200820074b1b2209450d01200241146a280200210a2002280210210b41012108200020062802002006280204200128020c1100000d03200541106a2102200641086a2100410121040240024003402003200241746a28020036020c20032002410c6a2d00003a00282003200241786a280200360208200241086a28020021084100210541002101024002400240200241046a2802000e03010002010b2008200a4f0d032008410374210c41002101200b200c6a220c2802044102470d01200c28020028020021080b410121010b2003200836021420032001360210200228020021080240024002402002417c6a2802000e03010002010b2008200a4f0d0420084103742101200b20016a22012802044102470d01200128020028020021080b410121050b2003200836021c200320053602180240200241706a2802002208200a4f0d00200b20084103746a2208280200200341086a20082802041101000d06200420094f0d05200041046a210120002802002105200241206a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d010c070b0b41948ac0002008200a103b000b41848ac0002008200a103b000b41848ac0002008200a103b000b2002280200210620022802042207200241146a2802002208200820074b1b220a450d002002280210210241012108200020062802002006280204200128020c1100000d02200641086a21004101210403402002280200200341086a200241046a2802001101000d022004200a4f0d01200041046a210120002802002105200241086a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d000c030b0b0240200720044d0d00410121082003280220200620044103746a22022802002002280204200328022428020c1100000d020b410021080c010b410121080b200341306a240020080b05001038000b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541fca3c000360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a20041043000bbc0101037f02400240024002402000280200220041046a2802002203200041086a28020022046b2002490d00200028020021030c010b200420026a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200028020020032004103121030b2003450d0120002003360200200041046a2004360200200041086a28020021040b200041086a200420026a360200200320046a2001200210e8061a41000f0b1036000b1038000bc00401057f230041106b22022400200028020021000240024002400240024002402001418001490d002002410036020c2001418010490d012002410c6a210302402001418080044f0d0020022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c020b0240024020002802082204200041046a280200460d00200028020021050c010b200441016a22052004490d05200441017422032005200320054b1b22034100480d050240024020040d002003102d21050c010b200028020020042003103121050b2005450d0420002005360200200041046a2003360200200028020821040b200520046a20013a00002000200028020841016a3602080c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010b02400240200041046a2802002205200041086a28020022046b2001490d00200028020021050c010b200420016a22062004490d03200541017422042006200420064b1b22044100480d030240024020050d002004102d21050c010b200028020020052004103121050b2005450d0220002005360200200041046a2004360200200041086a28020021040b200041086a200420016a360200200520046a2003200110e8061a0b200241106a240041000f0b1036000b1038000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41cc80c000200241086a103c2101200241206a240020010b0300000b3401017f230041106b220224002002200136020c20022000360208200241a484c000360204200241c8e1ca0036020020021046000b0d0020003502004101200110450bd40203027f017e037f230041306b22032400412721040240024020004290ce005a0d00200021050c010b412721040340200341096a20046a2206417c6a200020004290ce0080220542f0b17f7e7ca7220741ffff037141e4006e220841017441e684c0006a2f00003b00002006417e6a2008419c7f6c20076a41ffff037141017441e684c0006a2f00003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b02402005a7220641e3004c0d00200341096a2004417e6a22046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff037141017441e684c0006a2f00003b00000b024002402006410a480d00200341096a2004417e6a22046a200641017441e684c0006a2f00003b00000c010b200341096a2004417f6a22046a200641306a3a00000b2002200141c8e1ca004100200341096a20046a412720046b10482104200341306a240020040b6f01017f230041c0006b220124002001200036020c200141346a4101360200200142013702242001419cdfca003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a103a4101419ccaca0041072001280210200128021810d40600000b0c004285f6f0e7a1e8c2a06a0b830601067f024002402001450d00412b418080c4002000280200220641017122011b2107200120056a21080c010b200541016a210820002802002106412d21070b0240024020064104710d00410021020c010b4100210902402003450d002003210a200221010340200920012d000041c00171418001466a2109200141016a2101200a417f6a220a0d000b0b200820036a20096b21080b410121010240024020002802084101460d00200020072002200310490d012000280218200420052000411c6a28020028020c11000021010c010b02402000410c6a280200220920084b0d00200020072002200310490d012000280218200420052000411c6a28020028020c1100000f0b0240024020064108710d0041002101200920086b22092108024002400240410120002d0020220a200a4103461b0e0402010001020b20094101762101200941016a41017621080c010b41002108200921010b200141016a210103402001417f6a2201450d0220002802182000280204200028021c280210110100450d000b41010f0b200028020421062000413036020420002d0020210b41012101200041013a0020200020072002200310490d0141002101200920086b220a2103024002400240410120002d0020220920094103461b0e0402010001020b200a4101762101200a41016a41017621030c010b41002103200a21010b200141016a2101024003402001417f6a2201450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210a41012101200028021820042005200028021c28020c1100000d01200341016a2109200028021c210320002802182102024003402009417f6a2209450d01410121012002200a20032802101101000d030c000b0b2000200b3a00202000200636020441000f0b2000280204210a41012101200020072002200310490d00200028021820042005200028021c28020c1100000d00200841016a2109200028021c210320002802182100034002402009417f6a22090d0041000f0b410121012000200a2003280210110100450d000b0b20010b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420237020c200241b086c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41c086c0001043000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420237020c2002419087c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41a087c0001043000b9307010c7f200041106a28020021030240024002400240200041086a28020022044101460d0020034101460d012000280218200120022000411c6a28020028020c11000021030c030b20034101470d010b0240024020020d00410021020c010b200120026a2105200041146a28020041016a21064100210720012103200121080340200341016a210902400240024020032c0000220a417f4a0d000240024020092005470d004100210b200521030c010b20032d0001413f71210b200341026a220921030b200a411f71210c0240200a41ff0171220a41df014b0d00200b200c41067472210a0c020b0240024020032005470d004100210d2005210e0c010b20032d0000413f71210d200341016a2209210e0b200d200b41067472210b0240200a41f0014f0d00200b200c410c7472210a0c020b02400240200e2005470d004100210a200921030c010b200e41016a2103200e2d0000413f71210a0b200b410674200c411274418080f0007172200a72220a418080c400470d020c040b200a41ff0171210a0b200921030b02402006417f6a2206450d00200720086b20036a21072003210820052003470d010c020b0b200a418080c400460d00024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b4100210902402002450d002002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b0240200220096b200028020c2206490d002000280218200120022000411c6a28020028020c1100000f0b410021074100210902402002450d00410021092002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b200920026b20066a2209210a024002400240410020002d0020220320034103461b0e0402010001020b20094101762107200941016a410176210a0c010b4100210a200921070b200741016a2103024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210941012103200028021820012002200028021c28020c1100000d00200a41016a2103200028021c210a20002802182100034002402003417f6a22030d0041000f0b20002009200a280210110100450d000b41010f0b20030bd40801067f230041f0006b220424002004200336020c20042002360208410121052001210602402001418102490d00410020016b2107418002210803400240200820014f0d00200020086a2c000041bf7f4c0d0041002105200821060c020b2008417f6a21064100210520084101460d01200720086a21092006210820094101470d000b0b200420063602142004200036021020044100410520051b36021c200441c8e1ca0041d387c00020051b3602180240024002400240200220014b22080d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b200420023602202002450d0220022001460d02200141016a210903400240200220014f0d00200020026a2c000041404e0d040b2002417f6a210820024101460d0420092002462106200821022006450d000c040b0b20042002200320081b360228200441306a41146a4103360200200441c8006a41146a4104360200200441d4006a410436020020044203370234200441d887c0003602302004410136024c2004200441c8006a3602402004200441186a3602582004200441106a3602502004200441286a360248200441306a41f087c0001043000b200441e4006a4104360200200441c8006a41146a4104360200200441d4006a4101360200200441306a41146a4104360200200442043702342004418088c0003602302004410136024c2004200441c8006a3602402004200441186a3602602004200441106a36025820042004410c6a3602502004200441086a360248200441306a41a088c0001043000b200221080b024020082001460d00410121060240024002400240200020086a22092c00002202417f4a0d0041002105200020016a220621010240200941016a2006460d00200941026a210120092d0001413f7121050b2002411f712109200241ff017141df014b0d01200520094106747221010c020b2004200241ff0171360224200441286a21020c020b4100210020062107024020012006460d00200141016a210720012d0000413f7121000b200020054106747221010240200241ff017141f0014f0d0020012009410c747221010c010b41002102024020072006460d0020072d0000413f7121020b20014106742009411274418080f00071722002722201418080c400460d020b2004200136022441012106200441286a21022001418001490d00410221062001418010490d0041034104200141808004491b21060b200420083602282004200620086a36022c200441306a41146a4105360200200441ec006a4104360200200441e4006a4104360200200441c8006a41146a4106360200200441d4006a410736020020044205370234200441ec88c000360230200420023602582004410136024c2004200441c8006a3602402004200441186a3602682004200441106a3602602004200441246a3602502004200441206a360248200441306a419489c0001043000b41b088c000412b41dc88c0001039000b1000200120002802002000280204104c0b800101037f230041206b22022400024002402000280200200110520d002001411c6a2802002103200128021821042002411c6a4100360200200241c8e1ca003602182002420137020c200241fc89c00036020820042003200241086a103c450d010b200241206a240041010f0b2000280204200110522101200241206a240020010bff0301067f230041106b22022400410121030240200128021841272001411c6a2802002802101101000d002002200028020010512002410c6a2d00002104200241086a28020021052002280200210002400240024020022802042206418080c400460d000c010b03402000210341dc002107410121000240024020030e0404040100040b200441ff017121034104210441032100024002400240024020030e06070302010004070b4103210041f5002107410321040c030b4102210441fb0021070c020b4102410120051b2104418080c4002005410274411c7176410f7141307221072005417f6a410020051b21050c010b4100210441fd0021070b4101210320012802182007200128021c280210110100450d000c030b0b03402000210341dc00210741012100024002400240024020030e0405010300050b200441ff01712103410421044103210002400240024020030e06070201000405070b4102210441fb0021070c040b20062005410274411c7176410f712203413072200341d7006a2003410a491b21074102410120051b21042005417f6a410020051b21050c030b4100210441fd0021070c020b41002100200621070c010b4103210041f5002107410321040b4101210320012802182007200128021c2802101101000d020c000b0b20012802184127200128021c28021011010021030b200241106a240020030bab0903047f017e037f4102210202400240024002400240200141776a2203411e4d0d00200141dc00470d010c020b41f40021040240024020030e1f05010202000202020202020202020202020202020202020202030202020203050b41f20021040c040b41ee0021040c030b2001410a7621040240024002400240024002400240024002400240024002400240024002400240024020014180d807490d00411e21022004418007460d0120014180fe037141087621050c050b200441be8ac0006a2d00002202411e4b0d010b20024104742001410676410f717241b98bc0006a2d00002204418b014f0d0141032102200441037441d08fc0006a29030042012001413f71ad8683500d02200141017267410276410773ad4280808080d0008421060c100b41ac8fc0002002411f103b000b41bc8fc0002004418b01103b000b20014180fe03712104200141808004490d01200441087621050b200141808008490d0120014190fc476a4190fc0b490d0a200141e28b746a41e28d2c490d0a2001419fa8746a419f18490d0a200141dee2746a410e490d0a200141feffff0071419ef00a460d0a200141a9b2756a4129490d0a200141cb91756a410a4d0d0a410121020c0c0b2004410876210541c298c000210241002103200141ff017121070340200241026a2108200320022d000122046a2109024020022d000022022005460d00200220054b0d0820092103200821022008419499c000470d010c080b20092003490d02200941a5024b0d032003419499c0006a2102024003402004450d012004417f6a210420022d00002103200241016a210220032007470d000c0c0b0b20092103200821022008419499c000470d000c070b0b41849ec000210241002103200141ff017121070340200241026a2108200320022d000122046a2109024020022d000022022005460d00200220054b0d062009210320082102200841ca9ec000470d010c060b20092003490d03200941a6014b0d04200341ca9ec0006a2102024003402004450d012004417f6a210420022d00002103200241016a210220032007470d000c0b0b0b2009210320082102200841ca9ec000470d000c050b0b20032009104b000b200941a502104a000b20032009104b000b200941a601104a000b200141ffff0371210741f09fc00021044101210302400340200441016a21090240024020042d0000220241187441187522084100480d00200921040c010b20094188a3c000460d02200841ff007141087420042d0001722102200441026a21040b200720026b22074100480d032003410173210320044188a3c000470d000c030b0b41b088c000412b41f49dc0001039000b200141ffff0371210741b99bc0002104410121030340200441016a21090240024020042d0000220241187441187522084100480d00200921040c010b200941f39dc000460d03200841ff007141087420042d0001722102200441026a21040b200720026b22074100480d0120034101732103200441f39dc000470d000b0b4101210220034101710d020c010b41b088c000412b41f49dc0001039000b200141017267410276410773ad4280808080d000842106410321020c010b0b200121040b2000200436020420002002360200200041086a20063702000ba10201037f23004180016b2202240002400240024002400240200128020022034110710d0020034120710d012000ad41012001104521000c020b410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141bc8ac0004102200220036a4180016a410020036b104821000c010b410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141bc8ac0004102200220036a4180016a410020036b104821000b20024180016a240020000f0b2000418001104b000b2000418001104b000b1c00200128021841e0a3c000410b2001411c6a28020028020c1100000b1c00200128021841eba3c000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a4101360200200342013702142003419cdfca003602102003410436022c2003200341286a3602202003200341086a360228200341106a20021043000b140020002802002001200028020428020c1101000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a103c2101200241206a240020010b15002001200028020022002802002000280204104c0ba20401077f230041306b220324000240024020020d00410021040c010b200341286a210502400240024002400340024020002802082d0000450d00200028020041cea4c0004104200028020428020c1100000d050b2003410a3602282003428a808080103703202003200236021c200341003602182003200236021420032001360210200341086a410a20012002105a024002400240024020032802084101470d00200328020c210403402003200420032802186a41016a2204360218024002402004200328022422064f0d00200328021421070c010b200328021422072004490d00200641054f0d072003280210200420066b22086a22092005460d0420092005200610ea06450d040b200328021c22092004490d0220072009490d0220032006200341106a6a41176a2d0000200328021020046a200920046b105a2003280204210420032802004101460d000b0b2003200328021c3602180b200028020841003a0000200221040c010b200028020841013a0000200841016a21040b2000280204210920002802002106024020044520022004467222070d00200220044d0d03200120046a2c000041bf7f4c0d030b200620012004200928020c1100000d04024020070d00200220044d0d04200120046a2c000041bf7f4c0d040b200120046a2101200220046b22020d000b410021040c040b20064104104a000b2001200241002004104d000b2001200220042002104d000b410121040b200341306a240020040bf30201067f410021040240024020024103712205450d00410420056b2205450d0020032005200520034b1b210441002105200141ff01712106034020042005460d01200220056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050c010b200141ff017121060240024020034108490d002004200341786a22084b0d00200641818284086c210502400340200220046a220741046a2802002005732209417f73200941fffdfb776a7120072802002005732207417f73200741fffdfb776a7172418081828478710d01200441086a220420084d0d000b0b200420034b0d010b200220046a2109200320046b210241002103410021050240034020022005460d01200920056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050b200520046a21050c010b20042003104b000b20002005360204200020033602000bbb0302047f027e230041c0006b2205240041012106024020002d00040d0020002d000521070240200028020022082d00004104710d0041012106200828021841d5a4c00041d2a4c000200741ff017122071b4102410320071b2008411c6a28020028020c1100000d014101210620002802002208280218200120022008411c6a28020028020c1100000d01410121062000280200220828021841b9c3c80041022008411c6a28020028020c1100000d0120032000280200200428020c11010021060c010b0240200741ff01710d0041012106200828021841d7a4c00041032008411c6a28020028020c1100000d01200028020021080b41012106200541013a0017200541346a41dca4c000360200200520082902183703082005200541176a360210200829020821092008290210210a200520082d00203a00382005200a37032820052009370320200520082902003703182005200541086a360230200541086a2001200210590d00200541086a41b9c3c800410210590d002003200541186a200428020c1101000d00200528023041f4a4c0004102200528023428020c11000021060b200041013a0005200020063a0004200541c0006a240020000b8b0201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110592101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41f8a4c000200241086a103c2101200241206a240020010b0d0020002802002001200210590b0b0020002802002001105c0b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41f8a4c000200241086a103c2101200241206a240020010bd30202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d00004104710d0041012104200628021841d5a4c0004193a5c00020051b4102410120051b2006411c6a28020028020c1100000d0120012000280200200228020c11010021040c010b024020050d004101210420062802184194a5c00041022006411c6a28020028020c1100000d01200028020021060b41012104200341013a0017200341346a41dca4c000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041f4a4c0004102200328023428020c11000021040b200020043a00082000200028020441016a360204200341c0006a240020000bd40202037f027e230041c0006b2203240041012104024020002d00040d0020002d000521040240200028020022052d00004104710d000240200441ff0171450d0041012104200528021841d5a4c00041022005411c6a28020028020c1100000d02200028020021050b20012005200228020c11010021040c010b0240200441ff01710d004101210420052802184197a5c00041012005411c6a28020028020c1100000d01200028020021050b41012104200341013a0017200341346a41dca4c000360200200320052902183703082003200341176a3602102005290208210620052902102107200320052d00203a00382003200737032820032006370320200320052902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041f4a4c0004102200328023428020c11000021040b200041013a0005200020043a0004200341c0006a240020000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a103c2100200241206a240020000b8709010d7f230041306b220324004101210402400240200228021841222002411c6a2802002802101101000d000240024020010d00410021050c010b200020016a210620002107410021054100210802400240034020072109200741016a210a02400240024020072c0000220b417f4a0d0002400240200a2006470d004100210c200621070c010b20072d0001413f71210c200741026a220a21070b200b411f71210d0240200b41ff0171220b41df014b0d00200c200d41067472210b0c020b0240024020072006470d004100210e2006210f0c010b20072d0000413f71210e200741016a220a210f0b200e200c41067472210c0240200b41f0014f0d00200c200d410c7472210b0c020b02400240200f2006470d004100210b200a21070c010b200f41016a2107200f2d0000413f71210b0b200c410674200d411274418080f0007172200b72220b418080c400470d020c050b200b41ff0171210b0b200a21070b2003200b105102400240024002402003280200220a0e0401020100010b200328020820032d000c6a4101460d010b2003200136021420032000360210200320053602182003200836021c20082005490d0302402005450d0020052001460d00200520014f0d04200020056a2c000041bf7f4c0d040b02402008450d0020082001460d00200820014f0d04200020086a2c000041bf7f4c0d040b2002280218200020056a200820056b200228021c28020c1100000d0120032d000c210d2003280208210f024002402003280204220e418080c400470d000340200a21054101210a41dc00210c0240024020050e0404040100040b200d41ff017121054103210a4104210d024002400240024020050e06070302010004070b4103210d41f500210c4103210a0c030b4102210d41fb00210c0c020b41024101200f1b210d418080c400200f410274411c7176410f71413072210c200f417f6a4100200f1b210f0c010b4100210d41fd00210c0b2002280218200c200228021c280210110100450d000c040b0b0340200a210c4101210a41dc0021050240024002400240200c0e0405010300050b200d41ff0171210c4103210a4104210d024002400240200c0e06070201000405070b4102210d41fb0021050c040b200e200f410274411c7176410f712205413072200541d7006a2005410a491b210541024101200f1b210d200f417f6a4100200f1b210f0c030b4100210d41fd0021050c020b4100210a200e21050c010b4103210d41f50021054103210a0b20022802182005200228021c2802101101000d030c000b0b410121050240200b418001490d0041022105200b418010490d0041034104200b41808004491b21050b200520086a21050b200820096b20076a210820062007470d010c030b0b410121040c030b20032003411c6a3602282003200341186a3602242003200341106a360220200341206a1065000b2005450d0020052001460d00200520014f0d02200020056a2c000041bf7f4c0d020b2002280218200020056a200120056b200228021c28020c1100000d0020022802184122200228021c28021011010021040b200341306a240020040f0b2000200120052001104d000b2601017f20002802002201280200200128020420002802042802002000280208280200104d000bee0704057f017e017f017e02400240024002402002450d00410020016b410020014103711b2103200241796a4100200241074b1b210441002105034002400240200120056a2d000022064118744118752207417f4a0d0042808080808020210802402006419182c0006a2d0000417e6a220941024d0d00428080808010210a0c070b0240024002400240024020090e03000102000b200541016a22062002490d024200210a0c090b4200210a200541016a220920024f0d08200120096a2d0000210902400240200641a07e6a2206410d4b0d000240024020060e0e0002020202020202020202020201000b200941e0017141a001460d02428080808010210a0c0c0b02402009411874411875417f4c0d00428080808010210a0c0c0b200941ff017141a001490d01428080808010210a0c0b0b02402007411f6a41ff0171410b4b0d0002402009411874411875417f4c0d00428080808010210a0c0c0b200941ff017141c001490d01428080808010210a0c0b0b0240200941ff017141bf014d0d00428080808010210a0c0b0b0240200741fe017141ee01460d00428080808010210a0c0b0b2009411874411875417f4c0d00428080808010210a0c0a0b42002108200541026a220620024f0d09200120066a2d000041c00171418001460d020c070b4200210a200541016a220920024f0d07200120096a2d0000210902400240200641907e6a220641044b0d000240024020060e050002020201000b200941f0006a41ff01714130490d02428080808010210a0c0b0b02402009411874411875417f4c0d00428080808010210a0c0b0b200941ff0171419001490d01428080808010210a0c0a0b0240200941ff017141bf014d0d00428080808010210a0c0a0b02402007410f6a41ff017141024d0d00428080808010210a0c0a0b2009411874411875417f4c0d00428080808010210a0c090b200541026a220620024f0d07200120066a2d000041c00171418001470d0642002108200541036a220620024f0d08200120066a2d000041c00171418001460d01428080808080e0002108428080808010210a0c080b428080808010210a200120066a2d000041c00171418001470d070b200641016a21050c010b0240200320056b4103710d000240200520044f0d000340200120056a220641046a280200200628020072418081828478710d01200541086a22052004490d000b0b200520024f0d010340200120056a2c00004100480d022002200541016a2205470d000c040b0b200541016a21050b20052002490d000b0b20002001360204200041086a2002360200200041003602000f0b428080808080c0002108428080808010210a0c010b420021080b2000200a2005ad84200884370204200041013602000b1c00200128021841a4dfca0041052001411c6a28020028020c1100000bf20301087f20002802042102024002400240024020002802004101470d002000410c6a28020022002001106920004103742200450d01200220006a2103200141086a2104034020022802002105200241046a28020022002001106902400240200141046a22062802002207200428020022086b2000490d00200128020021070c010b200820006a22092008490d05200741017422082009200820094b1b22084100480d050240024020070d002008102d21070c010b200128020020072008103121070b2007450d042001200736020020062008360200200428020021080b2004200820006a360200200720086a2005200010e8061a200241086a22022003470d000c020b0b200041086a28020022002001106920004103742200450d00200220006a2103200141086a2104034020022802002105200241046a28020022002001106902400240200141046a22062802002207200428020022086b2000490d00200128020021070c010b200820006a22092008490d04200741017422082009200820094b1b22084100480d040240024020070d002008102d21070c010b200128020020072008103121070b2007450d032001200736020020062008360200200428020021080b2004200820006a360200200720086a2005200010e8061a200241086a22022003470d000b0b0f0b1036000b1038000be20601037f02400240024002400240200041c000490d00200041808001490d012000418080808004490d0202400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128020020022004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41033a000002400240200141046a2802002203200428020022026b4104490d00200128020021030c010b200241046a22042002490d05200341017422022004200220044b1b22024100480d050240024020030d002002102d21030c010b200128020020032002103121030b2003450d0420012003360200200141046a2002360200200141086a28020021020b200141086a200241046a360200200320026a20003600000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128020020022004103121030b2003450d0320012003360200200141046a2004360200200141086a28020021020b200141086a200241016a360200200320026a20004102743a00000f0b02400240200141046a2802002203200141086a28020022026b4102490d00200128020021030c010b200241026a22042002490d03200341017422022004200220044b1b22024100480d030240024020030d002002102d21030c010b200128020020032002103121030b2003450d0220012003360200200141046a2002360200200141086a28020021020b200141086a200241026a360200200320026a20004102744101723b00000f0b02400240200141046a2802002203200141086a28020022026b4104490d00200128020021030c010b200241046a22042002490d02200341017422022004200220044b1b22024100480d020240024020030d002002102d21030c010b200128020020032002103121030b2003450d0120012003360200200141046a2002360200200141086a28020021020b200141086a200241046a360200200320026a20004102744102723600000f0b1036000b1038000bdc0601087f20002802042102024002400240024020002802004101470d002000410c6a2802002200200110692000450d01200041186c2103200241146a2100200141086a2102200141046a21040340200041706a2802002105200041746a2802002206200110690240024020042802002207200228020022086b2006490d00200128020021070c010b200820066a22092008490d05200741017422082009200820094b1b22084100480d050240024020070d002008102d21070c010b200128020020072008103121070b2007450d042001200736020020042008360200200228020021080b2002200820066a360200200720086a2005200610e8061a2000417c6a280200210520002802002206200110690240024020042802002207200228020022086b2006490d00200128020021070c010b200820066a22092008490d05200741017422082009200820094b1b22084100480d050240024020070d002008102d21070c010b200128020020072008103121070b2007450d042001200736020020042008360200200228020021080b2002200820066a360200200720086a2005200610e8061a200041186a2100200341686a22030d000c020b0b200041086a2802002200200110692000450d00200041186c2103200241146a2100200141086a2102200141046a21040340200041706a2802002105200041746a2802002206200110690240024020042802002207200228020022086b2006490d00200128020021070c010b200820066a22092008490d04200741017422082009200820094b1b22084100480d040240024020070d002008102d21070c010b200128020020072008103121070b2007450d032001200736020020042008360200200228020021080b2002200820066a360200200720086a2005200610e8061a2000417c6a280200210520002802002206200110690240024020042802002207200228020022086b2006490d00200128020021070c010b200820066a22092008490d04200741017422082009200820094b1b22084100480d040240024020070d002008102d21070c010b200128020020072008103121070b2007450d032001200736020020042008360200200228020021080b2002200820066a360200200720086a2005200610e8061a200041186a2100200341686a22030d000b0b0f0b1036000b1038000bbb18010a7f230041106b220324002001200210690240024002402001450d00200141d8006c2104410021050340200020056a220641046a2802002107200641086a28020022082002106902400240200241046a2209280200220a200241086a2201280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d04200a410174220b200c200b200c4b1b220b4100480d0402400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d032002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a200641d4006a2d0000210a02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d0420084101742207200b2007200b4b1b22074100480d040240024020080d002007102d210b0c010b2002280200200820071031210b0b200b450d032002200b36020020092007360200200128020021080b2001200841016a360200200b20086a200a3a000002402006410c6a2d0000220841024b0d0002400240024020080e03000102000b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d072008410174220a200b200a200b4b1b220a4100480d070240024020080d00200a102d210b0c010b20022802002008200a1031210b0b200b450d062002200b3602002009200a360200200128020021080b2001200841016a360200200b20086a41003a0000200641146a2802002107200641186a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d07200a410174220b200c200b200c4b1b220b4100480d0702400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d062002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a0c020b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d062008410174220a200b200a200b4b1b220a4100480d060240024020080d00200a102d210b0c010b20022802002008200a1031210b0b200b450d052002200b3602002009200a360200200128020021080b2001200841016a360200200b20086a41013a000002402006410d6a2d0000220841054b0d004100210a02400240024002400240024020080e06050001020304050b4101210a0c040b4102210a0c030b4103210a0c020b4104210a0c010b4105210a0b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d0720084101742207200b2007200b4b1b22074100480d070240024020080d002007102d210b0c010b2002280200200820071031210b0b200b450d062002200b36020020092007360200200128020021080b2001200841016a360200200b20086a200a3a00000b200641146a2802002107200641186a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d06200a410174220b200c200b200c4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d052002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a200641206a2802002107200641246a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d06200a410174220b200c200b200c4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d052002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a2006410e6a2d0000210a02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d0620084101742207200b2007200b4b1b22074100480d060240024020080d002007102d210b0c010b2002280200200820071031210b0b200b450d052002200b36020020092007360200200128020021080b2001200841016a360200200b20086a200a3a00000c010b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d052008410174220a200b200a200b4b1b220a4100480d050240024020080d00200a102d210b0c010b20022802002008200a1031210b0b200b450d042002200b3602002009200a360200200128020021080b2001200841016a360200200b20086a41023a000002402006410d6a2d0000220841054b0d004100210a02400240024002400240024020080e06050001020304050b4101210a0c040b4102210a0c030b4103210a0c020b4104210a0c010b4105210a0b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d0620084101742207200b2007200b4b1b22074100480d060240024020080d002007102d210b0c010b2002280200200820071031210b0b200b450d052002200b36020020092007360200200128020021080b2001200841016a360200200b20086a200a3a00000b200641146a2802002107200641186a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d05200a410174220b200c200b200c4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d042002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a200641206a2802002107200641246a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d05200a410174220b200c200b200c4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d042002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a2006412c6a2802002107200641306a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d05200a410174220b200c200b200c4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d042002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a2006410e6a2d0000220841054b0d004100210a02400240024002400240024020080e06050001020304050b4101210a0c040b4102210a0c030b4103210a0c020b4104210a0c010b4105210a0b02400240200928020020012802002208460d002002280200210b0c010b200841016a220b2008490d0520084101742207200b2007200b4b1b22074100480d050240024020080d002007102d210b0c010b2002280200200820071031210b0b200b450d042002200b36020020092007360200200128020021080b2001200841016a360200200b20086a200a3a00000b02400240200641346a2802004101470d00200641386a2802002107200641c0006a280200220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d06200a410174220b200c200b200c4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d052002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a0c010b2003200641386a2802002006413c6a28020028020c110200200328020021072003280208220820021069024002402009280200220a2001280200220b6b2008490d002002280200210a0c010b200b20086a220c200b490d05200a410174220b200c200b200c4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2002280200200a200b1031210a0b200a450d042002200a3602002009200b3602002001280200210b0b2001200b20086a360200200a200b6a2007200810e8061a2003280204450d002007102f0b200641c4006a200210682004200541d8006a2205470d000b0b200341106a24000f0b1036000b1038000bd205010b7f2001410c6a28020021022001280208210320012802042104200128020021050240024002400240024002400240024020012d001022060e03010002010b200420056b21070c020b200420056b2201200220036b6a220720014f0d010240024020052004460d00200541016a2108410021060c010b024020032002470d004101210941002104410021070c070b410221062003210120052108200341016a2103200121050b41002101410021074101210903402001410174210a200420086b210b034020052d00002105024020012007470d00200b2107024002400240200641ff01710e03010200010b200220036b21070c010b417f200b200220036b6a22072007200b491b21070b2001417f200741016a220c200c2007491b6a22072001490d06200a2007200a20074b1b22074100480d060240024020010d002007102d21090c010b200920012007103121090b2009450d050b200920016a20053a0000024002400240024002400240200641ff01710e03010300010b20022003460d010c040b024020082004460d00410021060c030b20022003470d030b200141016a21040c0a0b4101210620082004470d00200141016a21040c090b200141016a210120082105200841016a21080c020b200141016a210141022106200a41026a210a2003220541016a21030c000b0b0b200220036b21070b4101210902402007450d0020074100480d022007102d2209450d010b0240200641014d0d0041002104200921010c030b0240024020052004470d0041002104200921010c010b200921012005210a03402001200a2d00003a0000200141016a21012004200a41016a220a470d000b200420056b21040b200641024b0d0320060e03020302020b1036000b1038000b20032002460d002003210a03402001200a2d00003a0000200141016a21012002200a41016a220a470d000b2002200420036b6a21040b2000200436020820002007360204200020093602000bbc0101037f02400240024002402000280200220041046a2802002203200041086a28020022046b2002490d00200028020021030c010b200420026a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200028020020032004103121030b2003450d0120002003360200200041046a2004360200200041086a28020021040b200041086a200420026a360200200320046a2001200210e8061a41000f0b1036000b1038000ba70301047f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b0240024002400240200041046a2802002203200041086a28020022046b2001490d00200028020021030c010b200420016a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200028020020032004103121030b2003450d0120002003360200200041046a2004360200200041086a28020021040b200041086a200420016a360200200320046a2002410c6a200110e8061a200241106a240041000f0b1036000b1038000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a419ca5c000200241086a103c2101200241206a240020010b040041010bb60101017f230041c0006b2202240020024100360210200242013703082002410836021c20022001410c6a3602202002200241206a3602182002200241086a3602242002413c6a41013602002002420137022c2002419cdfca003602282002200241186a360238200241246a419ca5c000200241286a103c1a20012d0000417f6a41ff0171200141046a290200200235021042208620023502088410000240200228020c450d002002280208102f0b200241c0006a24000bba0202037f017e230041106b2206240002400240024002400240200541206a2207417f4c0d002007450d01200710332208450d022007410f4d0d032001ad4220862000ad84100122012900002109200641086a2200200141086a290000370300200620093703002001102f200841086a2000290300370000200820062903003700002007411f4d0d042003ad4220862002ad841001220129000021092000200141086a290000370300200620093703002001102f200841186a200029030037000020082006290300370010200841206a2004200510e8061a20062007ad4220862008ad841002107302400240200628020022000d00410021070c010b410121072006280204450d002000102f0b2008102f200641106a240020070f0b103d000b41104100104a000b1036000b41102007104a000b41202007104a000baa0201067f230041206b22022400024002402001422088a722030d00410121040c010b2001a721040b200220033602142002200436021002402003450d0020042d0000210520022003417f6a3602142002200441016a360210200541014b0d0041002103024002400240024020050e020100010b200241086a200241106a10e60120022802080d0320022802142206200228020c2205490d032005417f4c0d010240024020050d00410121030c010b200510332203450d03200320022802102207200510e8061a2002200620056b3602142002200720056a3602100b2003450d032005ad220142208620018421010b20002001370204200020033602002004102f200241206a24000f0b103d000b1036000b41f4c8ca00412e200241186a418ccaca0041a4c9ca00103e000b040041000b02000b02000ba209010f7f23004190036b22042400024002400240200141046a28020022052f01062206410b490d00024020054190bdc600460d002001280208210720012802002108200441306a410041e00210e7061a200441286a22064100360200200441206a22094200370300200441186a220a4200370300200441106a220b4200370300200441086a220c420037030020044200370300419403102d220d0d021036000b4195b4ca00412d41f8b4ca001039000b200541086a220a200128020c220d41016a220b4105746a200a200d4105746a220a2006200d6b41057410e9061a200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a290000370000200a2002290000370000200541e8026a2202200b4102746a2002200d4102746a220220052f0106200d6b41027410e9061a20022003360200200520052f010641016a3b0106200441306a410b6a200141086a280000360000200041003a00002000200236023c200041106a200d3600002004200129000037003320002004290030370001200041086a200441376a2900003700000c010b200d41003b0106200d4100360200200d41086a200441306a41e00210e806210e200d4190036a2006280200360200200d4188036a2009290300370200200d4180036a200a290300370200200d41f8026a200b290300370200200d41f0026a200c290300370200200d20042903003702e802200441306a41086a220f200541d0016a290000370300200441306a41106a2210200541d8016a290000370300200441306a41186a2211200541e0016a290000370300200420052900c8013703302005280280032112200e200541e8016a20052f010641796a220641057410e8062109200d41e8026a20054184036a200641027410e806210e200541063b0106200d20063b0106200a2011290300370300200b2010290300370300200c200f2903003703002004200429033037030002400240200128020c220141074f0d00200541086a220a200141016a220b4105746a200a20014105746a2206200541066a220a2f010020016b41057410e9061a200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a29000037000020062002290000370000200541e8026a220620014102746a21022006200b4102746a2106200121010c010b200d41066a210a20092001417a6a220c4105746a2009200141796a22014105746a220b200641ffff037120016b41057410e9061a200b41186a200241186a290000370000200b41106a200241106a290000370000200b41086a200241086a290000370000200b2002290000370000200e200c4102746a2106200e20014102746a21020b20062002200a2f010020016b41027410e9061a20022003360200200041013a00002000200236023c200041386a4100360200200041346a200d360200200041306a20123602002000412c6a2007360000200041286a2005360000200041246a200836000020002004290300370001200041096a200441086a290300370000200041116a200441106a290300370000200041196a200441186a290300370000200a200a2f010041016a3b01000b20044190036a24000be60b020f7f047e23004180046b220624000240024020012802002207417f6a2005470d000240024002400240200141046a28020022082f01062209410b490d002001280208210a200641c0006a410272410041be0310e7061a41c403102d220b450d05200b4100360200200b41046a200641c0006a41c00310e8061a200641c0006a41186a220c200841e0016a290000370300200641c0006a41106a220d200841d8016a290000370300200641c0006a41086a220e200841d0016a290000370300200620082900c801370340200828028003210f200b41086a200841e8016a20082f0106221041796a220541057410e8062111200b41e8026a20084184036a200541027410e8062112200b4194036a200841b0036a2010417a6a221341027410e8062114200841063b0106200b20053b010602402013450d00410021052014211003402010280200220920053b01042009200b360200201041046a21102013200541016a2205470d000b0b200641206a41186a200c2903002215370300200641206a41106a200d2903002216370300200641206a41086a200e2903002217370300200620062903402218370320200641186a2015370300200641106a2016370300200641086a201737030020062018370300200128020c22054107490d0120112005417a6a22014105746a2011200541796a22104105746a2209200b2f010620106b41057410e9061a200941186a200241186a290000370000200941106a200241106a290000370000200941086a200241086a290000370000200920022900003700002012200141027422096a201220104102746a2213200b2f010620106b41027410e9061a20132003360200200b200b2f010641016a22133b01062005410274220220146a416c6a201420096a2205201341ffff037120016b41027410e9061a200520043602002001200b2f010622134b0d022002200b6a41fc026a2105034020052802002209201041016a22103b01042009200b360200200541046a210520102013490d000c030b0b200841086a2205200128020c221341016a22104105746a200520134105746a2205200920136b41057410e9061a200541186a200241186a290000370000200541106a200241106a290000370000200541086a200241086a29000037000020052002290000370000200841e8026a22092010410274220b6a2009201341027422056a220920082f010620136b41027410e9061a20092003360200200820082f010641016a22093b0106200520084194036a22026a41086a2002200b6a220b200941ffff037120106b41027410e9061a200b20043602000240201020082f0106220b4b0d00200820056a4198036a210520132110034020052802002209201041016a22103b010420092008360200200541046a21052010200b490d000b0b200041003a0000200041046a2001290200370200200041106a20133602002000410c6a200141086a2802003602000c020b200841086a2210200541016a22094105746a201020054105746a221020082f010620056b41057410e9061a201041186a200241186a290000370000201041106a200241106a290000370000201041086a200241086a29000037000020102002290000370000200841e8026a2213200941027422016a2013200541027422106a221320082f010620056b41027410e9061a20132003360200200820082f010641016a22133b0106201020084194036a22026a41086a200220016a2201201341ffff037120096b41027410e9061a20012004360200200520082f010622134f0d00200820106a4198036a2110034020102802002209200541016a22053b010420092008360200201041046a211020132005470d000b0b20002006290300370001200041013a00002000412c6a200a360200200041286a2008360200200041246a2007360200200041386a2007360200200041346a200b360200200041306a200f360200200041096a200641086a290300370000200041116a200641106a290300370000200041196a200641186a2903003700000b20064180046a24000f0b41c2b4ca00413541f8b4ca001039000b1036000b130020004105360204200041b4b4c0003602000b3400200041b8c4c30036020420004100360200200041146a4101360200200041106a41dcd8c000360200200041086a42073702000b130020004101360204200041f4dac0003602000b3400200041d5a2ca0036020420004100360200200041146a4102360200200041106a41d0dec000360200200041086a42093702000b13002000410136020420004184e1c0003602000b2d01017f02404108102d22020d001036000b20004288808080800137020420002002360200200242dc0b3700000baa0501047f200028020021020240024002400240200141046a2802002203200141086a28020022046b4104490d00200128020021030c010b200441046a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2205200441046a360200200320046a20023600004120102d2204450d0020042000290004370000200441186a2000411c6a290000370000200441106a200041146a290000370000200441086a2000410c6a29000037000002400240200141046a2802002202200528020022036b4120490d00200128020021020c010b200341206a22052003490d02200241017422032005200320054b1b22034100480d020240024020020d002003102d21020c010b200128020020022003103121020b2002450d0120012002360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200220036a220341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200320042900003700002004102f02400240200141046a2802002203200528020022046b4120490d00200128020021030c010b200441206a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a200441206a360200200320046a220141186a2000413c6a290000370000200141106a200041346a290000370000200141086a2000412c6a290000370000200120002900243700000f0b1036000b1038000bc50202057f037e2001280200210202404120102d2203450d0020032002290000370000200341186a2204200241186a290000370000200341106a2205200241106a290000370000200341086a2206200241086a2900003700004120102d2202450d0020022003290000370000200241186a2004290000370000200241106a2005290000370000200241086a20062900003700002003102f200128020421012002412041c00010312203450d0020032001290000370020200341386a200141186a290000370000200341306a200141106a290000370000200341286a200141086a2900003700002003ad4280808080800884100322022900002107200241086a2900002108200241106a2900002109200041186a200241186a290000370000200041106a2009370000200041086a2008370000200020073700002002102f2003102f0f0b1036000b8a0201037f230041206b2203240002400240200241286c4104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020022003106902402002450d002001200241286c6a21050340200320012802003602102003200341106a41041082014120102d2202450d032003422037021420032002360210200341106a200141046a2201412010820120032802142102200320032802102204200328021810820102402002450d002004102f0b2003200141206a2802003602102003200341106a4104108201200141246a22012005470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000bb50101037f0240024002400240200041046a2802002203200041086a28020022046b2002490d00200028020021030c010b200420026a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200028020020032004103121030b2003450d0120002003360200200041046a2004360200200041086a28020021040b200041086a200420026a360200200320046a2001200210e8061a0f0b1036000b1038000bc703010a7f230041106b2203240002400240024020014105744104722204417f4c0d002004102d2205450d012003410036020820032004360204200320053602002001200310690240024020010d002003280208210620032802042107200328020021080c010b2001410574210920032802002108200328020421052003280208210403404120102d2201450d0320012000290000370000200141186a220a200041186a290000370000200141106a220b200041106a290000370000200141086a220c200041086a29000037000002400240200520046b4120490d00200441206a2106200521070c010b200441206a22062004490d05200541017422072006200720064b1b22074100480d050240024020050d002007102d21080c010b200820052007103121080b2008450d040b200041206a2100200820046a22042001290000370000200441186a200a290000370000200441106a200b290000370000200441086a200c2900003700002001102f2007210520062104200941606a22090d000b2003200736020420032006360208200320083602000b20022902002006ad4220862008ad84100402402007450d002008102f0b200341106a24000f0b103d000b1036000b1038000b9b0202067f017e230041106b2202240002404120102d2203450d0020032000290000370000200341186a2204200041186a290000370000200341106a2205200041106a290000370000200341086a2206200041086a2900003700004120102d2207450d0020072003290000370000200741186a2004290000370000200741106a2005290000370000200741086a20062900003700002003102f0240024020002d0020220341024d0d004280808080800421080c010b024002400240024020030e03000102000b410021030c020b410121030c010b410221030b200220033a000f2007412041c00010312207450d01200720033a00204280808080900421080b200129020020082007ad8410042007102f200241106a24000f0b1036000bef05010a7f230041106b22032400024002400240200241c4006c41046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b20034100360208200320043602042003200536020020022003106902402002450d002001200241c4006c6a2106200328020421042003280208210703402001280200210502400240200420076b4104490d00200328020021020c010b200741046a22022007490d05200441017422082002200820024b1b22084100480d050240024020040d002008102d21020c010b200328020020042008103121020b2002450d042003200836020420032002360200200821040b2003200741046a2208360208200220076a20053600004120102d2205450d03200541186a22092001411c6a290000370000200541106a220a200141146a290000370000200541086a220b2001410c6a2900003700002005200141046a29000037000002400240200420086b4120490d00200741246a21070c010b200841206a22072008490d052004410174220c2007200c20074b1b220c4100480d050240024020040d00200c102d21020c010b20022004200c103121020b2002450d042003200c36020420032002360200200c21040b20032007360208200220086a22082005290000370000200841086a200b290000370000200841106a200a290000370000200841186a20092900003700002005102f0240200420076b411f4b0d00200741206a22052007490d05200441017422082005200820054b1b22054100480d050240024020040d002005102d21020c010b200220042005103121020b2002450d042003200536020420032002360200200521040b200220076a220241086a2001412c6a290000370000200241106a200141346a290000370000200241186a2001413c6a2900003700002003200741206a22073602082002200141246a290000370000200141c4006a22012006470d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b103d000b1036000b1038000bf20503037f027e047f230041106b22022400200241003602082002420137030020002802102103024002404104102d2204450d0020024284808080c0003702042002200436020020042003360000200041146a280200210320044104410810312204450d002002428880808080013702042004200336000420022004360200200041086a290300210520002903002106024002404108200228020822076b4110490d00200741106a2103410821080c010b200741106a22032007490d024110200320034110491b22084100480d0220044108200810312204450d0120022008360204200220043602000b200420076a22072005370008200720063700002002200336020802400240200820036b4120490d00200341206a21070c010b200341206a22072003490d02200841017422092007200920074b1b22094100480d0220042008200910312204450d0120022009360204200220043602000b20022007360208200420036a22042000290024370000200441086a2000412c6a290000370000200441106a200041346a290000370000200441186a2000413c6a29000037000020002802182104200041206a2802002200200210690240024020000d002002280208210020022802042109200228020021080c010b2000410574210a4100200228020822006b210720022802042109034002400240200920076a4120490d00200228020021080c010b200041206a22032000490d04200941017422082003200820034b1b22034100480d040240024020090d002003102d21080c010b200228020020092003103121080b2008450d032002200336020420022008360200200321090b200820006a220341086a200441086a290000370000200341106a200441106a290000370000200341186a200441186a2900003700002002200041206a220036020820032004290000370000200741606a2107200441206a2104200a41606a220a0d000b0b20012902002000ad4220862008ad84100402402009450d002008102f0b200241106a24000f0b1036000b1038000b811505177f017e017f027e047f230041206b220224000240024020014115490d00024002402001410176220341ffffff3f712003470d0020034105742204417f4c0d0041012105024002402004450d002004102d2205450d01200441057621030b200041606a2106200041a07f6a210741002108410021094104210a4100210b2001210c034002400240200c220d417f6a220e0d004101210f4100210c0c010b0240024002400240024002402000200e4105746a200d410574221020006a41406a412010ea064100480d004102200d6b210e200720106a21044101210f03400240200e200f6a4101470d004100210c200d210f0c080b200f41016a210f200441206a2004412010ea062111200441606a21042011417f4a0d000b200d200f6b210e0c010b200720106a2104024003400240200e4101470d004100210e0c020b200e417f6a210e200441206a2004412010ea062111200441606a210420114100480d000b0b200d200e490d01200d20014b0d03200d200e6b220f4101762212450d00200620106a21042000200e4105746a21110340200241186a2210201141186a2213290000370300200241106a2214201141106a2215290000370300200241086a2216201141086a221729000037030020022011290000370300200441086a22182900002119200441106a221a290000211b200441186a220c290000211c201120042900003700002013201c3700002015201b37000020172019370000200c2010290300370000201a20142903003700002018201629030037000020042002290300370000200441606a2104201141206a21112012417f6a22120d000b0b0240200e0d00200e210c0c050b0240200f41094d0d00200e210c0c050b200d20014b0d01200d200e6b21122000200e4105746a21100340200d200e417f6a220c490d040240200d200c6b220f4102490d002000200e4105746a22042000200c4105746a220e412010ea06417f4a0d00200e2900002119200e2004290000370000200241186a2216200e41186a2211290000370300200241106a2217200e41106a2213290000370300200241086a2218200e41086a22142900003703002014200441086a2900003700002013200441106a2900003700002011200441186a29000037000020022019370300410121150240200f4103490d00200e41c0006a2002412010ea06417f4a0d00410221112010210402400340200441186a200441386a290000370000200441106a200441306a290000370000200441086a200441286a2900003700002004200441206a221329000037000020122011460d01200441c0006a21142011211520132104201141016a211120142002412010ea06417f4a0d020c000b0b201121150b200e20154105746a22042002290300370000200441186a2016290300370000200441106a2017290300370000200441086a20182903003700000b200c450d05201041606a2110201241016a2112200c210e200f410a4f0d050c000b0b200e200d104b000b200d200e417f6a220c490d010b200d2001104a000b200c200d104b000b0240200b2009470d0002400240200941016a22042009490d00200941017422112004201120044b1b220441ffffffff01712004470d002004410374220441004e0d010b1038000b0240024020090d002004102d210a0c010b200a200941037420041031210a0b200a450d02200441037621092008210b0b200a200b4103746a2204200f3602042004200c360200200841016a220b21080240200b4102490d00024003400240024002400240200a200b417f6a22084103746a2204280200450d00200b410374200a6a220f41746a280200220e200428020422114d0d000240200b41024b0d00200b21084102210b200c450d0b0c080b200a200b417d6a22164103746a28020422042011200e6a4d0d010240200b41034b0d00200b21084103210b200c450d0b0c080b200f41646a2802002004200e6a4d0d01200b21080c060b200b4103490d0120042802042111200a200b417d6a22164103746a28020421040b20042011490d010b200b417e6a21160b024002400240024002400240200b201641016a221d4b221e450d00200b20164b221f450d01200a20164103746a2217280204222020172802006a2204200a201d4103746a2218280200221a490d02200420014b0d032000201a4105746a22142018280204221541057422116a210f2004410574210e2004201a6b220d20156b220420154f0d042005200f2004410574221110e806221320116a21120240024020154101480d00200441014e0d010b200f2104201321110c060b2006200e6a210e200f21040340200e200441606a220f201241606a220d200d200f412010ea0641004822101b2211290000370000200e41186a201141186a290000370000200e41106a201141106a290000370000200e41086a201141086a2900003700002012200d20101b211202402014200f200420101b2204490d00201321110c070b200e41606a210e2013211120132012490d000c060b0b41c4c2ca00201d200b103b000b41c4c2ca002016200b103b000b201a2004104b000b20042001104a000b20052014201110e806221320116a21120240024020154101480d00200d20154a0d010b20142104201321110c010b2000200e6a2110201321112014210403402004200f2011200f2011412010ea06410048220d1b220e290000370000200441186a200e41186a290000370000200441106a200e41106a290000370000200441086a200e41086a2900003700002011201141206a200d1b2111200441206a2104200f41206a200f200d1b220f20104f0d01201220114b0d000b0b20042011201220116b41607110e8061a0240201f450d002017201a360200201741046a202020156a360200201e450d022018201841086a200b201d417f736a41037410e9061a2008210b200841014d0d030c010b0b419cc3ca002016200b103b000b41b8e3c300411d41f8b4ca001039000b200c450d030c000b0b1036000b103d000b02402009450d00200a102f0b2003450d012005102f0c010b20014102490d002001417f6a2111200141057420006a41206a2110410121120340024002400240024020112204417f6a221120014b0d00200120116b220e4102490d03200020044105746a2204200020114105746a220d412010ea06417f4a0d03200d2900002119200d2004290000370000200241186a2214200d41186a220f290000370300200241106a220b200d41106a2213290000370300200241086a2215200d41086a220a290000370300200a200441086a2900003700002013200441106a290000370000200f200441186a2900003700002002201937030041012104200e4103490d02200d41c0006a2002412010ea06417f4a0d0241002113201021040340200441406a220e200441606a220f290000370000200e41186a200f41186a290000370000200e41106a200f41106a290000370000200e41086a200f41086a29000037000020122013220e460d02200e417f6a211320042002412010ea06210f200441206a2104200f417f4a0d020c000b0b20112001104b000b4102200e6b21040b200d20044105746a22042002290300370000200441186a2014290300370000200441106a200b290300370000200441086a20152903003700000b201041606a21102012417f6a211220110d000b0b200241206a24000bf10101037f0240024002404101450d0041202102024002404120450d004120102d2203450d03200141106a21040c010b41204101742203411020031b2202102d2203450d02200141106a21040b20032001290000370000200341086a200141086a29000037000002400240200241f000714110460d00200221010c010b200241017422014120200141204b1b22014100480d03024002402002450d00200320022001103121030c010b2001102d21030b2003450d020b20032004290000370010200341186a200441086a2900003700002000412036020820002001360204200020033602000f0b103d000b1036000b1038000bd00201097f2001200210690240024002402001450d0020014105742103200241046a210403404120102d2201450d0220012000290000370000200141186a2205200041186a290000370000200141106a2206200041106a290000370000200141086a2207200041086a2900003700000240024020042802002208200241086a2209280200220a6b4120490d00200228020021080c010b200a41206a220b200a490d042008410174220a200b200a200b4b1b220a4100480d040240024020080d00200a102d21080c010b20022802002008200a103121080b2008450d03200220083602002004200a3602002009280200210a0b200041206a21002009200a41206a3602002008200a6a220a41186a2005290000370000200a41106a2006290000370000200a41086a2007290000370000200a20012900003700002001102f200341606a22030d000b0b0f0b1036000b1038000bce8b0106177f037e0b7f017e0a7f027e230041b0096b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341f4056a4101360200200342013702e405200341b4d8c9003602e0052003410436029403200341fcdbc90036029003200320034190036a3602f005200341e0056a41e8d8c9001043000b200341c0006a41026a2204200241076a2d00003a000020034190086a41086a2205200241186a29020037030020034190086a410d6a22062002411d6a2900003700002003200241056a2f00003b01402003200241106a29020037039008200141046a28020022072001410c6a280200220841b0026c22096a210a200141086a280200210b2007210c024002402008450d00200241046a2d0000210d200241026a2f0100210e200241086a280200210f2002410c6a280200211020022d0001211120022d0000211220034190036a410272211320034190036a41106a211420034190036a4105722115200941d07d6a2102200341ce056a2116200341c0056a4103722117200341e0056a4104722118410021192007210c0340200c280200210820034190036a200c41046a220941ac0210e8061a200341e0056a200941ac0210e8061a02402008411b470d00200c41b0026a210c0c1e0b200341e0006a200341e0056a41ac0210e8061a200320083602e0052018200341e0006a41ac0210e8061a024002400240024020120e03000102000b4102210802400240024020110e03000102000b410021080c010b201720032f01403b00002016200329039008370100201741026a20042d00003a0000201641086a2005290300370100201641106a20034190086a41106a2f01003b01002003200d3a00c2052003200e3b01c005200320103601ca052003200f3601c605410121080b201320032903c005370000201341086a200341c0056a41086a290300370000201341106a200341c0056a41106a290300370000201341186a200341c0056a41186a290300370000200320083a009103200341003a0090030c020b41022108024002400240200d0e03000102000b410021080c010b200341b8086a41026a20042d00003a0000200341f8086a41086a2005290300370300200341f8086a410d6a2006290000370000200320032f01403b01b80820032003290390083703f808410121080b201520032f01b8083b0000201420032903f808370200201541026a200341b8086a41026a2d00003a0000201441086a200341f8086a41086a290300370200201441106a200341f8086a41106a290300370200200320083a0094032003201036029c032003200f36029803200341013a0090030c010b41022108024002400240200d0e03000102000b410021080c010b200341b8086a41026a20042d00003a0000200341f8086a41086a2005290300370300200341f8086a410d6a2006290000370000200320032f01403b01b80820032003290390083703f808410121080b201520032f01b8083b0000201420032903f808370200201441086a200341f8086a41086a290300370200201441106a200341f8086a41106a290300370200200341023a009003201541026a200341b8086a41026a2d00003a0000200320083a0094032003201036029c032003200f360298030b200341d8086a200341e0056a20034190036a108b0120032d00d8084104470d02201941016a2119200241d07d6a2102200c41b0026a220c200a470d000b200a210c0b200341e0056a20034190036a41ac0210e8061a0c1b0b200341e0056a41086a2019360200200341ec056a20032903d808370200200341f4056a200341d8086a41086a280200360200200341003a00e405200341013a00e00541c8e1ca004100200341e0056a108c01200041043a000002402002450d00200c41b0026a210c0340200c108d01200c41b0026a210c200241d07d6a22020d000b0b200b450d1b2007102f0c1b0b200141046a280200210a0240024020022d00000d0020022d00014101470d002002411a6a290100211a200241196a2d00002108200241186a2d00002114200241166a2f01002109200241156a2d00002119200241146a2d00002113200241126a2f01002115200241116a2d00002112200241106a2d000021182002410e6a2f0100210d2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002107200241096a2d00002104200241086a2d00002105200241066a2f01002116200241056a2d00002111200241046a2d00002106200241026a2f01002102200141026a2f010021174112102d220c450d11200c41086a41002900ade440370000200c41002900a5e440370000200c411241301031220c450d11200c201a370028200c20083a0027200c20143a0026200c20093b0024200c20193a0023200c20133a0022200c20153b0020200c20123a001f200c20183a001e200c200d3b001c200c200f3a001b200c20103a001a200c20073b0018200c20043a0017200c20053a0016200c20163b0014200c20113a0013200c20063a0012200c20023b0010200c413041e00010312202450d11200220173b00302002ad4280808080a006841003220c290000211a200c41086a290000211b200c41106a290000211c200341c0056a41186a2208200c41186a290000370300200341c0056a41106a2214201c370300200341c0056a41086a2209201b3703002003201a3703c005200c102f2002102f200341093a0080062003410a3a0080062003410b3a008006200320032f01c0053b01e005200320032801c2053601e205200320032f01c6053b01e605200320092f01003b01e805200320032d00ca053a00ea052003410c3a008006200320032d00cb053a00eb052003410d3a008006200320032d00cc053a00ec052003410e3a008006200320032d00cd053a00ed052003410f3a008006200320032d00ce053a00ee05200341103a008006200320032d00cf053a00ef05200341113a008006200320142d00003a00f005200320032d00d1053a00f105200341123a008006200341133a008006200320032d00d2053a00f205200341143a008006200320032d00d3053a00f305200341153a008006200320032d00d4053a00f405200341163a008006200320032d00d5053a00f505200341173a008006200320032d00d6053a00f605200341183a008006200320032d00d7053a00f705200341193a008006200320082d00003a00f805200320032d00d9053a00f9052003411a3a0080062003411b3a008006200320032d00da053a00fa052003411c3a008006200320032d00db053a00fb052003411d3a008006200320032d00dc053a00fc052003411e3a008006200320032d00dd053a00fd052003411f3a008006200320032d00de053a00fe05200341203a008006200320032d00df053a00ff0520034190086a41186a220c20032903f80537030020034190086a41106a220220032903f00537030020034190086a41086a220820032903e805370300200320032903e00537039008200341e0006a41186a2214200c290300370300200341e0006a41106a220c2002290300370300200341e0006a41086a220220082903003703002003200329039008370360200341e0056a200a41b00210e8061a20034190036a410a6a200229030037010020034190036a41126a200c29030037010020034190036a411a6a201429030037010020034180023b01900320032003290360370192032000200341e0056a20034190036a108b010c010b200041023a0000200a108e010b200a102f410121084100210241012114410121090c180b200141086a280200210a200141046a28020021142001411c6a280200210c024020022d00000d0020022d00014101470d002001410c6a2802002108200141186a280200211d200141146a280200211e200141106a280200211f200141026a2f01002109200241196a2d00002119200241186a2d00002113200241166a2f01002115200241156a2d00002112200241146a2d00002118200241126a2f0100210d200241116a2d0000210f200241106a2d000021102002410e6a2f010021072002410d6a2d000021042002410c6a2d000021052002410a6a2f01002116200241096a2d00002111200241086a2d00002106200241066a2f01002117200241056a2d0000210b200241046a2d0000210e200241026a2f0100212020032002411a6a2901003703d008200320193a00cf08200320133a00ce08200320153b01cc08200320123a00cb08200320183a00ca082003200d3b01c8082003200f3a00c708200320103a00c608200320073b01c408200320043a00c308200320053a00c208200320163b01c008200320113a00bf08200320063a00be08200320173b01bc082003200b3a00bb082003200e3a00ba08200320203b01b8080240200941ffff03710d00410d210241aacdc7002108410021090c170b024020080d0041112102418da7c0002108410321090c170b0240200841e3004d0d004112210241fba6c0002108410421090c170b200320083602682003200a36026420032014360260200341e0056a41186a200341b8086a41186a290300370300200341e0056a41106a200341b8086a41106a290300370300200341e0056a41086a220a200341b8086a41086a290300370300200320032903b8083703e00520034190036a200341e0006a200341e0056a108f01410121022003280290034101460d0320034190036a41086a28020021212003280294032113200a20034190036a410c6a280200360200200320093b01ec05200320133602e405200341a5e4c0003602e005200341c0056a200341e0056a109001200341083a0080062003410b3a0080062003410c3a008006200320032f01c0053b01e005200320032801c2053601e205200320032d00c6053a00e605200320032800c7053600e705200320032d00cb053a00eb052003410d3a008006200320032d00cc053a00ec052003410e3a008006200320032d00cd053a00ed052003410f3a008006200320032d00ce053a00ee05200320032d00cf053a00ef05200341103a008006200341113a008006200320032d00d0053a00f005200341123a008006200320032d00d1053a00f105200341133a008006200320032d00d2053a00f205200341143a008006200320032d00d3053a00f305200341153a008006200320032d00d4053a00f405200341163a008006200320032d00d5053a00f505200341173a008006200320032d00d6053a00f605200320032d00d7053a00f705200341183a008006200341193a008006200320032d00d8053a00f8052003411a3a008006200320032d00d9053a00f9052003411b3a008006200320032d00da053a00fa052003411c3a008006200320032d00db053a00fb052003411d3a008006200320032d00dc053a00fc052003411e3a008006200320032d00dd053a00fd052003411f3a008006200320032d00de053a00fe05200341203a008006200320032d00df053a00ff0520034190086a41186a220220032903f80537030020034190086a41106a220a20032903f00537030020034190086a41086a220820032903e805370300200320032903e00537039008200341d8086a41186a2002290300370300200341d8086a41106a200a290300370300200341d8086a41086a200829030037030020032003290390083703d808200341003602e805200342013703e005200c200341e0056a10910120032802e405210a20033502e80542208620032802e0052208ad8410032202290018211a20022d0017211820022d0016210d20022f0014210f20022d0013211020022d0012210720022f0010210420022d000f210520022d000e211620022f000c211120022d000b210620022d000a211720022f0008210b20022d0007210e20022d0006212020022f0004212220022d0003212320022d0002212420022f000021252002102f0240200a450d002008102f0b2003201a3703d805200320183a00d7052003200d3a00d6052003200f3b01d405200320103a00d305200320073a00d205200320043b01d005200320053a00cf05200320163a00ce05200320113b01cc05200320063a00cb05200320173a00ca052003200b3b01c8052003200e3a00c705200320203a00c605200320223b01c405200320233a00c305200320243a00c205200320253b01c00520034190036a200341d8086a200341c0056a109201200341e0056a200328029003221420032802980310930120034190086a41086a22192003418c066a29020037030020034190086a41106a222620034194066a29020037030020034190086a41186a22272003419c066a29020037030020034190086a41206a200341a4066a280200360200200320034184066a29020037039008200341e0056a41086a290300211b200341e0056a41206a280200211520032903e005211c20032802fc05211220032802f405210a20032802f0052102024020032802f8052208450d00200341f8086a41206a20034190086a41206a280200360200200341f8086a41186a2027290300370300200341f8086a41106a2026290300370300200341f8086a41086a201929030037030020032003290390083703f8080b0240200328029403450d002014102f0b024002400240024020080d0041012102201f4101460d02200941ffff037141014b0d01200341e0056a200c41b00210e8061a2003419a036a200341e0086a290300370100200341a2036a200341e8086a290300370100200341aa036a200341f0086a29030037010020034180023b019003200320032903d808370192032000200341e0056a20034190036a108b01410021020c030b20034190036a41206a2015360200200341ac036a2012360200200341a4036a200a360200200341bc036a200341f8086a41086a290300370200200341c4036a20034188096a290300370200200341cc036a20034190096a290300370200200341d4036a200341f8086a41206a2802003602002003201c37039003200320083602a803200320023602a003200320032903f8083702b4032003201b370398030240201f4101460d00410b211441c8a6c00021194109211f0c160b410e211441baa6c0002119410a211f2002201e470d15200a201d470d150240024002400240201541014b0d004100210220150e020201020b2015210a4100210203402002200a410176221420026a2219200820194105746a200341b8086a412010ea0641004a1b2102200a20146b220a41014b0d000b0b200820024105746a200341b8086a412010ea06220a450d01200a411f7620026a21020b2009417f6a41ffff0371201541ffff03714b0d120c100b200941ffff0371201541ffff03714d0d0f410f211441afa7c00021194101211f0c150b200341106a2009ad42ffff038342004280a0e5b9c29101420010ed0620032003290310221c4280c0dfda8ee9067c221b3703602003200341106a41086a290300201b201c54ad7c221c3703682003200341b8086a3602402003200341b8086a36029008200320034190086a3602e8052003200341c0006a3602e4052003200341e0006a3602e00520034190036a200341b8086a200341e0056a109401024002402003280290034101470d0020032003290095033703e00520032003419c036a2800003600e70520032d00940321020c010b4104210220034190036a41086a2903004201520d0020034190036a41106a2903002128200328029008210a20034198066a20034190036a41186a29030037030020034190066a2028370300200341e0056a41086a41003a0000200341e9056a200a290000370000200341f1056a200a41086a290000370000200341f9056a200a41106a29000037000020034181066a200a41186a290000370000200341033a00e00541c8e1ca004100200341e0056a108c010b200320032903e0053703c005200320032800e7053600c7050240200241ff01714104470d0020034190036a41186a420037030020034190036a41106a2208420037030020034190036a41086a220242003703002003420037039003418de6c300ad4280808080e000841001220a29000021282002200a41086a2900003703002003202837039003200a102f419ce6c300ad4280808080e000841001220a2900002128200341e0056a41086a2214200a41086a290000370300200320283703e005200a102f200820032903e005222837030020034190086a41086a200229030037030020034190086a41106a202837030020034190086a41186a2014290300370300200320032903900337039008200341086a20034190086a4120109501200328020c210a2003280208210820034180e5c3004110109501200328020421142003280200210920032f01b808211920032d00ba08211520032d00bb08211220032f01bc08211f20032d00be08211e20032d00bf08211d20032f01c008212620032d00c208212720032d00c308212920032f01c408212a20032d00c608212b20032d00c708212c20032f01c808212d20032d00ca08212e20032d00cb08212f20032f01cc08213020032d00ce08213120032d00cf08213220032903d00821284120102d2202450d12200220032903b808370000200241186a200341b8086a41186a290300370000200241106a200341b8086a41106a290300370000200241086a200341b8086a41086a290300370000200341f4056a2014410020091b3602002003419c066a20283702002003419b066a20323a00002003419a066a20313a000020034198066a20303b010020034197066a202f3a000020034196066a202e3a000020034194066a202d3b010020034193066a202c3a000020034192066a202b3a000020034190066a202a3b01002003418f066a20293a00002003418e066a20273a00002003418c066a20263b01002003418b066a201d3a00002003418a066a201e3a000020034188066a201f3b010020034187066a20123a000020034186066a20153a00002003201c3703e8052003201b3703e0052003200a410020081b3602f005200320193b018406200341fc056a428180808010370200200320023602f8052003201a3703d805200320183a00d7052003200d3a00d6052003200f3b01d405200320103a00d305200320073a00d205200320043b01d005200320053a00cf05200320163a00ce05200320113b01cc05200320063a00cb05200320173a00ca052003200b3b01c8052003200e3a00c705200320203a00c605200320223b01c405200320233a00c305200320243a00c205200320253b01c00520034190036a200341d8086a200341c0056a1092012003280290032102200320032802980336026420032002360260200341e0056a200341e0006a1086010240200328029403450d002002102f0b024020032802fc05450d0020032802f805102f0b20034185066a20032903d808370000200341ed056a200341b8086a41086a290300370000200341f5056a200341b8086a41106a290300370000200341fd056a200341b8086a41186a2903003700002003418d066a200341d8086a41086a29030037000020034195066a200341d8086a41106a2903003700002003419d066a200341d8086a41186a290300370000200341023a00e40541012102200341013a00e005200320032903b8083700e50541c8e1ca004100200341e0056a108c010c100b200020023a0000200020032903c005370001200041086a20032800c705360000410121020c010b20004183023b0100200041086a4113360200200041046a41a7a6c000360200200041026a410b3a00000b02402021450d002013102f0b20020d140c150b200041023a00000c160b200141286a280200210c200141246a280200210a02400240024020022d00000d0020022d00014101470d00200141196a290000211a200141186a2d00002120200141176a2d0000211f200141156a2f0000211e200141146a2d0000211d200141136a2d00002122200141116a2f00002123200141106a2d000021242001410f6a2d000021252001410d6a2f000021212001410c6a2d000021262001410b6a2d00002127200141096a2f00002129200141086a2d0000212a200141076a2d0000212b200141056a2f0000212c200141046a2d0000212d200141036a2d0000212e2001412c6a2802002108200141386a2802002132200141346a2802002131200141306a2802002130200141226a2f0100211420012f0001212f200241196a2d00002109200241186a2d00002119200241166a2f01002113200241156a2d00002115200241146a2d00002112200241126a2f01002118200241116a2d0000210d200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021072002410c6a2d000021042002410a6a2f01002105200241096a2d00002116200241086a2d00002111200241066a2f01002106200241056a2d00002117200241046a2d0000210b200241026a2f0100210e20032002411a6a2901003703f008200320093a00ef08200320193a00ee08200320133b01ec08200320153a00eb08200320123a00ea08200320183b01e8082003200d3a00e7082003200f3a00e608200320103b01e408200320073a00e308200320043a00e208200320053b01e008200320163a00df08200320113a00de08200320063b01dc08200320173a00db082003200b3a00da082003200e3b01d8080240024002400240024002402014450d002008450d01200841e4004f0d02200320083602682003200c3602642003200a360260200341e0056a41186a200341d8086a41186a290300370300200341e0056a41106a200341d8086a41106a290300370300200341e0056a41086a220c200341d8086a41086a290300370300200320032903d8083703e00520034190036a200341e0006a200341e0056a108f012003280290034101460d0320034190036a41086a28020021192003280294032109200c20034190036a410c6a280200360200200320143b01ec05200320093602e405200341a5e4c0003602e005200341c0056a200341e0056a109001200341083a0080062003410b3a0080062003410c3a008006200320032f01c0053b01e005200320032801c2053601e205200320032d00c6053a00e605200320032800c7053600e705200320032d00cb053a00eb052003410d3a008006200320032d00cc053a00ec052003410e3a008006200320032d00cd053a00ed052003410f3a008006200320032d00ce053a00ee05200320032d00cf053a00ef05200341103a008006200341113a008006200320032d00d0053a00f005200341123a008006200320032d00d1053a00f105200341133a008006200320032d00d2053a00f205200341143a008006200320032d00d3053a00f305200341153a008006200320032d00d4053a00f405200341163a008006200320032d00d5053a00f505200341173a008006200320032d00d6053a00f605200320032d00d7053a00f705200341183a008006200341193a008006200320032d00d8053a00f8052003411a3a008006200320032d00d9053a00f9052003411b3a008006200320032d00da053a00fa052003411c3a008006200320032d00db053a00fb052003411d3a008006200320032d00dc053a00fc052003411e3a008006200320032d00dd053a00fd052003411f3a008006200320032d00de053a00fe05200320032d00df053a00ff05200341203a00800620034190086a41186a220220032903f80537030020034190086a41106a220a20032903f00537030020034190086a41086a220820032903e805370300200320032903e00537039008200341f8086a41186a2002290300370300200341f8086a41106a200a290300370300200341f8086a41086a200829030037030020032003290390083703f8082003201a3703d805200320203a00d7052003201f3a00d6052003201e3b01d4052003201d3a00d305200320223a00d205200320233b01d005200320243a00cf05200320253a00ce05200320213b01cc05200320263a00cb05200320273a00ca05200320293b01c8052003202a3a00c7052003202b3a00c6052003202c3b01c4052003202d3a00c3052003202e3a00c2052003202f3b01c00520034190036a200341f8086a200341c0056a109201200341e0056a200328029003221320032802980310930120082003418c066a290200370300200a20034194066a29020037030020022003419c066a29020037030020034190086a41206a2202200341a4066a280200360200200320034184066a29020037039008200c290300211b200341e0056a41206a280200211520032903e005211c20032802fc05210820032802f405211220032802f005210a024020032802f805220c450d00200341e0006a41206a2002280200360200200341e0006a41186a20034190086a41186a290300370300200341e0006a41106a20034190086a41106a290300370300200341e0006a41086a20034190086a41086a29030037030020032003290390083703600b0240200328029403450d002013102f0b200c0d04201441014b0d0520004183023b0100200041086a4111360200200041046a419ea7c000360200200041026a41023a00000c0f0b20004183023b0100200041086a410d360200200041046a41aacdc700360200200041026a41003a00000c060b20004183023b0100200041086a4111360200200041046a418da7c000360200200041026a41033a00000c050b20004183023b0100200041086a4112360200200041046a41fba6c000360200200041026a41043a00000c040b200020034190036a410472220c290200370200200041086a200c41086a2802003602000c0d0b20034190036a41206a200341e0006a41206a28020036020020034190036a41186a200341e0006a41186a29030037030020034190036a41106a200341e0006a41106a29030037030020034190036a41086a200341e0006a41086a290300370300200320032903603703900302400240024002400240024020304101470d00200a2031470d0120122032470d01201520144f0d0c201541014b0d034100210220150e020204020b20004183023b0100200041086a410b360200200041046a41c8a6c000360200200041026a41093a00000c0e0b20004183023b0100200041086a410e360200200041046a41baa6c000360200200041026a410a3a00000c0d0b200341e0056a41186a200341d8086a41186a290300370300200341e0056a41106a200341d8086a41106a290300370300200341e0056a41086a200341d8086a41086a290300370300200320032903d8083703e00541002114200341e0056a210a0c020b2015210a4100210203402002200a410176221420026a2213200c20134105746a200341d8086a412010ea0641004a1b2102200a20146b220a41014b0d000b0b0240200c20024105746a200341d8086a412010ea0622140d0020004183023b0100200041086a410f360200200041046a41afa7c000360200200041026a41013a00000c0b0b200341e0056a41186a200341d8086a41186a290300370300200341e0056a41106a200341d8086a41106a290300370300200341e0056a41086a200341d8086a41086a290300370300200320032903d8083703e005200341e0056a210a20152014411f7620026a2214490d080b024020152008470d00200841016a22022008490d14200841017422132002201320024b1b220241ffffff3f712002470d14200241057422024100480d140240024020080d002002102d210c0c010b200c200841057420021031210c0b200c450d12200241057621080b200c20144105746a220241206a2002201520146b41057410e9061a200241186a200a41186a290000370000200241106a200a41106a290000370000200241086a200a41086a2900003700002002200a290000370000200341e0056a41206a201541016a360200200341fc056a2008360200200341f4056a20323602002003418c066a20034190036a41086a29030037020020034194066a20034190036a41106a2903003702002003419c066a20034190036a41186a290300370200200341a4066a20034190036a41206a2802003602002003201b3703e8052003201c3703e0052003200c3602f805200320313602f0052003200329039003370284062003201a3703d805200320203a00d7052003201f3a00d6052003201e3b01d4052003201d3a00d305200320223a00d205200320233b01d005200320243a00cf05200320253a00ce05200320213b01cc05200320263a00cb05200320273a00ca05200320293b01c8052003202a3a00c7052003202b3a00c6052003202c3b01c4052003202d3a00c3052003202e3a00c2052003202f3b01c00520034190086a200341f8086a200341c0056a109201200328029008210220032003280298083602bc08200320023602b808200341e0056a200341b8086a1086010240200328029408450d002002102f0b02402008450d00200c102f0b20034185066a20032903f808370000200341ed056a200341d8086a41086a290300370000200341f5056a200341d8086a41106a290300370000200341fd056a200341d8086a41186a2903003700002003418d066a200341f8086a41086a29030037000020034195066a200341f8086a41106a2903003700002003419d066a200341f8086a41186a290300370000200341033a00e405200341013a00e005200320032903d8083700e505200341ac066a2032360200200341a8066a203136020041c8e1ca004100200341e0056a108c010c080b20304101460d02200341306a2014ad42004280a0e5b9c29101420010ed0620032003290330221c4280c0dfda8ee9067c221b370390082003200341306a41086a290300201b201c54ad7c221c370398082003200341d8086a3602402003200341d8086a3602b8082003200341b8086a3602e8052003200341c0006a3602e405200320034190086a3602e00520034190036a200341d8086a200341e0056a109401024002402003280290034101470d0020032003290095033703e00520032003419c036a2800003600e70520032d009403210c0c010b4104210c20034190036a41086a2903004201520d0020034190036a41106a290300212820032802b808210220034198066a20034190036a41186a29030037030020034190066a2028370300200341e0056a41086a41003a0000200341e9056a2002290000370000200341f1056a200241086a290000370000200341f9056a200241106a29000037000020034181066a200241186a290000370000200341033a00e00541c8e1ca004100200341e0056a108c010b200320032903e0053703c005200320032800e7053600c7050240200c41ff01714104470d0020034190036a41186a420037030020034190036a41106a220a420037030020034190036a41086a220c42003703002003420037039003418de6c300ad4280808080e00084100122022900002128200c200241086a29000037030020032028370390032002102f419ce6c300ad4280808080e00084100122022900002128200341e0056a41086a2208200241086a290000370300200320283703e0052002102f200a20032903e005222837030020034190086a41086a200c29030037030020034190086a41106a202837030020034190086a41186a2008290300370300200320032903900337039008200341286a20034190086a4120109501200328022c21022003280228210a200341206a4180e5c3004110109501200328022421082003280220211420032f01d808211320032d00da08211520032d00db08211220032f01dc08211820032d00de08210d20032d00df08210f20032f01e008211020032d00e208210720032d00e308210420032f01e408210520032d00e608211620032d00e708211120032f01e808210620032d00ea08211720032d00eb08210b20032f01ec08210e20032d00ee08213020032d00ef08213120032903f00821284120102d220c450d11200c20032903d808370000200c41186a200341d8086a41186a290300370000200c41106a200341d8086a41106a290300370000200c41086a200341d8086a41086a290300370000200341f4056a2008410020141b3602002003419c066a20283702002003419b066a20313a00002003419a066a20303a000020034198066a200e3b010020034197066a200b3a000020034196066a20173a000020034194066a20063b010020034193066a20113a000020034192066a20163a000020034190066a20053b01002003418f066a20043a00002003418e066a20073a00002003418c066a20103b01002003418b066a200f3a00002003418a066a200d3a000020034188066a20183b010020034187066a20123a000020034186066a20153a00002003201c3703e8052003201b3703e005200320024100200a1b3602f005200320133b018406200341fc056a4281808080103702002003200c3602f8052003201a3703d805200320203a00d7052003201f3a00d6052003201e3b01d4052003201d3a00d305200320223a00d205200320233b01d005200320243a00cf05200320253a00ce05200320213b01cc05200320263a00cb05200320273a00ca05200320293b01c8052003202a3a00c7052003202b3a00c6052003202c3b01c4052003202d3a00c3052003202e3a00c2052003202f3b01c00520034190036a200341f8086a200341c0056a109201200328029003210c2003200328029803360294082003200c36029008200341e0056a20034190086a1086010240200328029403450d00200c102f0b024020032802fc05450d0020032802f805102f0b20034185066a20032903f808370000200341ed056a200341d8086a41086a290300370000200341f5056a200341d8086a41106a290300370000200341fd056a200341d8086a41186a2903003700002003418d066a200341f8086a41086a29030037000020034195066a200341f8086a41106a2903003700002003419d066a200341f8086a41186a290300370000200341023a00e405200341013a00e005200320032903d8083700e50541c8e1ca004100200341e0056a108c010c080b2000200c3a0000200020032903c005370001200041086a20032800c7053600000c090b200041023a00000b4100211441012102200c450d0a200a102f0c0a0b20004183023b0100200041086a4113360200200041046a41a7a6c000360200200041026a410b3a00000c060b2001412c6a2802002108200141286a280200210c200141246a280200210a200141346a2802002119200141306a2802002109200141226a2f01002114200341c0006a41186a200141196a290000370300200341c0006a41106a200141116a290000370300200341c0006a41086a200141096a2900003703002003200129000137034002400240024020022d00000d0020022d00014101470d00200241196a2d00002113200241186a2d00002115200241166a2f01002112200241156a2d00002118200241146a2d0000210d200241126a2f0100210f200241116a2d00002110200241106a2d000021072002410e6a2f010021042002410d6a2d000021052002410c6a2d000021162002410a6a2f01002111200241096a2d00002106200241086a2d00002117200241066a2f0100210b200241056a2d0000210e200241046a2d00002120200241026a2f0100211f20032002411a6a2901003703d008200320133a00cf08200320153a00ce08200320123b01cc08200320183a00cb082003200d3a00ca082003200f3b01c808200320103a00c708200320073a00c608200320043b01c408200320053a00c308200320163a00c208200320113b01c008200320063a00bf08200320173a00be082003200b3b01bc082003200e3a00bb08200320203a00ba082003201f3b01b8080240024002400240201441ffff0371450d002008450d01200841e4004f0d02200320083602682003200c3602642003200a360260200341e0056a41186a200341b8086a41186a290300370300200341e0056a41106a200341b8086a41106a290300370300200341e0056a41086a220c200341b8086a41086a290300370300200320032903b8083703e00520034190036a200341e0006a200341e0056a108f012003280290034101470d03200020034190036a410472220c290200370200200041086a200c41086a2802003602000c060b20004183023b0100200041086a410d360200200041046a41aacdc700360200200041026a41003a00000c040b20004183023b0100200041086a4111360200200041046a418da7c000360200200041026a41033a00000c030b20004183023b0100200041086a4112360200200041046a41fba6c000360200200041026a41043a00000c020b20034190036a41086a28020021152003280294032113200c20034190036a410c6a280200360200200320143b01ec05200320133602e405200341a5e4c0003602e005200341c0056a200341e0056a109001200341083a0080062003410b3a0080062003410c3a008006200320032f01c0053b01e005200320032801c2053601e205200320032d00c6053a00e605200320032800c7053600e705200320032d00cb053a00eb052003410d3a008006200320032d00cc053a00ec052003410e3a008006200320032d00cd053a00ed052003410f3a008006200320032d00ce053a00ee05200320032d00cf053a00ef05200341103a008006200341113a008006200320032d00d0053a00f005200341123a008006200320032d00d1053a00f105200341133a008006200320032d00d2053a00f205200341143a008006200320032d00d3053a00f305200341153a008006200320032d00d4053a00f405200341163a008006200320032d00d5053a00f505200341173a008006200320032d00d6053a00f605200320032d00d7053a00f705200341183a008006200341193a008006200320032d00d8053a00f8052003411a3a008006200320032d00d9053a00f9052003411b3a008006200320032d00da053a00fa052003411c3a008006200320032d00db053a00fb052003411d3a008006200320032d00dc053a00fc052003411e3a008006200320032d00dd053a00fd052003411f3a008006200320032d00de053a00fe05200320032d00df053a00ff05200341203a00800620034190086a41186a220220032903f80537030020034190086a41106a220a20032903f00537030020034190086a41086a220820032903e805370300200320032903e00537039008200341d8086a41186a2002290300370300200341d8086a41106a200a290300370300200341d8086a41086a200829030037030020032003290390083703d8082003200341c0006a41186a2903003703d8052003200341c0006a41106a2903003703d0052003200341c0006a41086a2903003703c805200320032903403703c005200341a0096a200341d8086a200341c0056a109201200341e0056a20032802a009221420032802a80910930120082003418c066a290200370300200a20034194066a29020037030020022003419c066a29020037030020034190086a41206a2212200341a4066a280200360200200320034184066a2902003703900802400240024020032802f8052202450d00200c290300211a200341e0056a41206a280200211820032903e005211b20032802fc05210a20032802f405210820032802f005210c200341e0006a41206a2012280200360200200341e0006a41186a221220034190086a41186a290300370300200341e0006a41106a220d20034190086a41106a290300370300200341e0006a41086a220f20034190086a41086a2903003703002003200329039008370360024020032802a409450d002014102f0b200341f8086a41086a200f290300221c370300200341f8086a41106a200d2903002228370300200341f8086a41186a20122903002233370300200341f8086a41206a2214200341e0006a41206a28020036020020034190036a41206a2018360200200341ac036a200a360200200341a4036a20083602002003200329036022343703f8082003201b37039003200320023602a8032003201a370398032003200c3602a003200341cc036a2033370200200341c4036a2028370200200341bc036a201c370200200341d4036a2014280200360200200320343702b403410e211441baa6c0002112410a21180240200c2009470d0020082019470d00200341b4036a220c200341b8086a412010ea06450d03410821184188d9c9002112410821140b20004183023b0100200041086a2014360200200041046a2012360200200041026a20183a0000200a450d012002102f0c010b024020032802a409450d002014102f0b200041086a4108360200200041046a4184f5c000360200200041026a41073a000020004183023b01000b2015450d032013102f0c030b2003201b3703f8082003201a370380090240201b201a84500d002003200c36029008200341e0006a200c200341f8086a20034190086a10960120032903604201520d002003290368211a20034198066a200341e0006a41106a29030037030020034190066a201a370300200341e0056a41086a41003a0000200341e9056a200c290000370000200341f1056a200c41086a290000370000200341f9056a200c41106a29000037000020034181066a200c41186a290000370000200341033a00e00541c8e1ca004100200341e0056a108c010b200341c0056a41186a200341c0006a41186a290300370300200341c0056a41106a200341c0006a41106a290300370300200341c0056a41086a200341c0006a41086a290300370300200320032903403703c005200341e0056a200341d8086a200341c0056a10920120033502e80542208620032802e005220cad841005024020032802e405450d00200c102f0b20034185066a20032903d808370000200341ed056a200341b8086a41086a290300370000200341f5056a200341b8086a41106a290300370000200341fd056a200341b8086a41186a2903003700002003418d066a200341d8086a41086a29030037000020034195066a200341d8086a41106a2903003700002003419d066a200341d8086a41186a290300370000200341053a00e405200341013a00e005200320032903b8083700e505200341ac066a2019360200200341a8066a200936020041c8e1ca004100200341e0056a108c01200041043a0000024020032802ac03450d0020032802a803102f0b2015450d022013102f0c020b200041023a00000b200c450d00200a102f0b410021094101210241012108410121140c150b200020034190036a410472220a290200370200200041086a200a41086a280200360200200c108e01200c102f4100210841012114410121090c140b20004183023b0100200041086a4111360200200041046a419ea7c000360200200041026a41023a00000c020b419ae3c300411e41f8b4ca001039000b200041043a000020190d020c030b2008450d00200c102f0b2019450d010b2009102f0b41002114410121020b41012108410121090c0c0b200341e0056a200c41b00210e8061a200341ea006a200341d8086a41086a290300370100200341f2006a200341e8086a290300370100200341fa006a200341f0086a29030037010020034180023b0160200320032903d808370162200341c0006a200341e0056a200341e0006a108b01200329039003211b200320034190036a41086a290300221c370398082003201b370390080240201b201c84500d002003200341b4036a22023602c005200341e0006a200220034190086a200341c0056a10960120032903604201520d002003290368211b20034198066a200341e0006a41106a29030037030020034190066a201b370300200341e0056a41086a41003a0000200341e9056a2002290000370000200341f1056a200241086a290000370000200341f9056a200241106a29000037000020034181066a200241186a290000370000200341033a00e00541c8e1ca004100200341e0056a108c010b2003201a3703d805200320183a00d7052003200d3a00d6052003200f3b01d405200320103a00d305200320073a00d205200320043b01d005200320053a00cf05200320163a00ce05200320113b01cc05200320063a00cb05200320173a00ca052003200b3b01c8052003200e3a00c705200320203a00c605200320223b01c405200320233a00c305200320243a00c205200320253b01c005200341e0056a200341d8086a200341c0056a10920120033502e80542208620032802e0052202ad841005024020032802e405450d002002102f0b20034185066a20032903d808370000200341ed056a200341b8086a41086a290300370000200341f5056a200341b8086a41106a290300370000200341fd056a200341b8086a41186a2903003700002003418d066a200341d8086a41086a29030037000020034195066a200341d8086a41106a2903003700002003419d066a200341d8086a41186a290300370000200341043a00e405200341013a00e005200320032903b8083700e505200341ac066a201d360200200341a8066a201e360200200341b0066a2003290340370300200341b8066a200341c0006a41086a2802003602004100210241c8e1ca004100200341e0056a108c0120032802ac03450d0020032802a803102f0b200041043a000002402021450d002013102f0b2002450d07200c108e010c070b200341e0056a41186a200341b8086a41186a290300370300200341e0056a41106a200341b8086a41106a290300370300200341e0056a41086a200341b8086a41086a290300370300200320032903b8083703e00520152002490d01024020152012470d00201241016a220a2012490d0320124101742214200a2014200a4b1b220a41ffffff3f71200a470d03200a410574220a4100480d030240024020120d00200a102d21080c010b20082012410574200a103121080b2008450d01200320083602a8032003200a4105763602ac030b200820024105746a220a41206a200a201520026b41057410e9061a200a41186a200341e0056a41186a290300370000200a41106a200341e0056a41106a290300370000200a41086a200341e0056a41086a290300370000200a20032903e0053700002003201541016a3602b003200341e0056a20034190036a41c80010e8061a2003201a3703d805200320183a00d7052003200d3a00d6052003200f3b01d405200320103a00d305200320073a00d205200320043b01d005200320053a00cf05200320163a00ce05200320113b01cc05200320063a00cb05200320173a00ca052003200b3b01c8052003200e3a00c705200320203a00c605200320223b01c405200320233a00c305200320243a00c205200320253b01c005200341e0006a200341d8086a200341c0056a1092012003280260210220032003280268360294082003200236029008200341e0056a20034190086a10860102402003280264450d002002102f0b0240200341fc056a280200450d0020032802f805102f0b20034185066a20032903d808370000200341ed056a200341b8086a41086a290300370000200341f5056a200341b8086a41106a290300370000200341fd056a200341b8086a41186a2903003700002003418d066a200341d8086a41086a29030037000020034195066a200341d8086a41106a2903003700002003419d066a200341d8086a41186a290300370000200341033a00e405200341013a00e005200320032903b8083700e505200341ac066a201d360200200341a8066a201e36020041c8e1ca004100200341e0056a108c01200041043a00000c040b1036000b419ae3c300411e41f8b4ca001039000b1038000b20004183023b0100200041086a2014360200200041046a2019360200200041026a201f3a00002012450d002008102f0b2021450d002013102f0b200c108e010b200c102f410021084101210241012114410121090c020b20004183023b0100200041086a2002360200200041046a2008360200200041026a20093a00000b200c108e01200c102f41002108410121020240200a0d0041012114410121090c010b2014102f41012114410121090b4101210a0c020b0240200a200c460d000340200c108d01200a200c41b0026a220c470d000b0b0240200b450d002007102f0b200341013a00e405200341013a00e00541c8e1ca004100200341e0056a108c01200041043a00000b4100210a410121024101210841012114410121090b024020012d0000417f6a220c41044b0d0002400240024002400240200c0e050001020304000b200a450d0402402001410c6a2802002202450d00200141046a280200210c200241b0026c21020340200c108d01200c41b0026a210c200241d07d6a22020d000b0b200141086a280200450d042001280204102f0c040b2002450d03200141046a220c280200108e01200c280200102f0c030b2008450d020240200141086a280200450d00200141046a280200102f0b2001411c6a220c280200108e01200c280200102f0c020b2014450d01200141286a280200450d01200141246a280200102f0c010b2009450d00200141286a280200450d00200141246a280200102f0b200341b0096a24000bb3b10309057f017e137f047e017f047e057f077e087f230041b00b6b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1b020301040506070b0c0d0e0f1011121314151617010101181a1900020b200341f0056a41086a2204200141146a290200370300200341f0056a41106a22052001411c6a290200370300200341f0056a41186a2206200141246a290200370300200341f0056a41206a22072001412c6a28020036020020032001410c6a2902003703f0052002411a6a2901002108200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211a20022d0001211b20022d000021020240024002400240200141086a2802000e0400010203000b20034180096a41146a41013602002003420137028409200341b4d8c90036028009200341043602fc06200341fcdbc9003602f8062003200341f8066a3602900920034180096a41e8d8c9001043000b2003200837038804200320093a0087042003200a3a0086042003200b3b0184042003200c3a0083042003200d3a0082042003200e3b0180042003200f3a00ff03200320103a00fe03200320113b01fc03200320123a00fb03200320133a00fa03200320143b01f803200320153a00f703200320163a00f603200320173b01f403200320183a00f303200320193a00f2032003201a3b01f003410121040240201b41ff01714101470d00200241ff01710d0020034188026a41186a200341f0036a41186a290300220837030020034188026a41106a200341f0036a41106a290300221c37030020034188026a41086a200341f0036a41086a290300221d370300200320032903f003221e3703880220034180096a41186a200837030020034180096a41106a201c37030020034180096a41086a201d3703002003201e37038009200020034180096a10ae014101211b0c5a0b200041023a00004101211b410121050c700b200341f8076a41206a2007280200360200200341f8076a41186a2006290300370300200341f8076a41106a2005290300370300200341f8076a41086a2004290300370300200320032903f0053703f807200241ff01710d1b201b41ff01714101470d1b20034180096a41206a200341f8076a41206a28020036020020034180096a41186a200341f8076a41186a29030037030020034180096a41106a200341f8076a41106a29030037030020034180096a41086a200341f8076a41086a290300370300200320032903f80737038009200341f8066a20034180096a10bb01200341f0036a41086a220220034181076a290000370300200341f0036a41106a221b20034189076a290000370300200341f0036a41186a220420034191076a290000370300200320032900f9063703f00320032d00f8064101460d08200341f0046a41186a2004290300370300200341f0046a41106a201b290300370300200341f0046a41086a2002290300370300200320032903f0033703f0042000200341f0046a10ae014101211b0c580b200141c8006a290300211e200141c0006a290300211f200141386a290300211c200141306a290300211d200141d0006a2802002120200341f8076a41206a2007280200360200200341f8076a41186a2006290300370300200341f8076a41106a2005290300370300200341f8076a41086a2004290300370300200320032903f0053703f807200241ff01710d1b201b41ff01714101470d1b200320083703e802200320093a00e7022003200a3a00e6022003200b3b01e4022003200c3a00e3022003200d3a00e2022003200e3b01e0022003200f3a00df02200320103a00de02200320113b01dc02200320123a00db02200320133a00da02200320143b01d802200320153a00d702200320163a00d602200320173b01d402200320183a00d302200320193a00d2022003201a3b01d002201d42808084fea6dee111544100201c501b0d1c20034180096a41206a200341f8076a41206a28020036020020034180096a41186a200341f8076a41186a29030037030020034180096a41106a200341f8076a41106a29030037030020034180096a41086a200341f8076a41086a290300370300200320032903f80737038009200341f8066a20034180096a10bb0120034188026a41086a220220034181076a29000037030020034188026a41106a220420034189076a29000037030020034188026a41186a220520034191076a290000370300200320032900f906370388024101211b20032d00f8064101460d08200341f0046a41186a2005290300370300200341f0046a41106a2004290300370300200341f0046a41086a200229030037030020032003290388023703f00441adc5c300ad4280808080f00084220810012202290008212120022d0007210420022d0006210520022f0004210620022d0003210720022d0002210920022f0000210a2002102f2008100122022900002108200341a8026a41086a200241086a290000370300200320083703a8022002102f4120102d2202450d63200220032903f004370000200241186a200341f0046a41186a290300370000200241106a200341f0046a41106a290300370000200241086a200341f0046a41086a2903003700002002ad42808080808004841003221b2900002108201b41086a2900002122201b41106a2900002123200341f0036a41186a220b201b41186a290000370300200341f0036a41106a220c2023370300200341f0036a41086a220d2022370300200320083703f003201b102f2002102f41c000102d2202450d63200220043a0007200220053a0006200220063b0004200220073a0003200220093a00022002200a3b000020022021370008200220032903a802370010200241186a200341a8026a41086a290300370000200220032903f003370020200241286a200d290300370000200241306a200c290300370000200241386a200b290300370000200341d8016a200241c00041c8e1ca004100410010b50120032802d80121042002102f4101211b20044101460d1d20034180096a200341d0026a200341f0046a201d201c410110f20220032003290081093703f003200320034180096a41086a2800003600f703024020032d00800922024104470d0041adc5c300ad4280808080f000842208100122022900002121200341a8026a41086a200241086a290000370300200320213703a8022002102f2008100122022d000f210420022d000e210520022f000c210620022d000b210720022d000a210920022f0008210a20022d0007210b20022d0006210c20022f0004210d20022d0003210e20022d0002210f20022f000021102002102f4120102d2202450d64200220032903f004370000200241186a200341f0046a41186a290300370000200241106a200341f0046a41106a290300370000200241086a200341f0046a41086a2903003700002002ad42808080808004841003221b2900002108201b41086a2900002121201b41106a290000212220034188026a41186a2211201b41186a29000037030020034188026a41106a2212202237030020034188026a41086a221320213703002003200837038802201b102f2002102f41c000102d2202450d64200220032903a802370000200241086a200341a8026a41086a2903003700002002200b3a00172002200c3a00162002200d3b00142002200e3a00132002200f3a0012200220103b0010200220043a001f200220053a001e200220063b001c200220073a001b200220093a001a2002200a3b00182002200329038802370020200241286a2013290300370000200241306a2012290300370000200241386a2011290300370000200341d0016a200241c00041c8e1ca004100410010b50120032802d001211b2002102f0240201b4101460d0041adc5c300ad4280808080f00084220810012202290000212120034188026a41086a200241086a29000037030020032021370388022002102f2008100122022900002108200341b8026a41086a200241086a290000370300200320083703b8022002102f4120102d2202450d65200220032903f004370000200241186a200341f0046a41186a290300370000200241106a200341f0046a41106a290300370000200241086a200341f0046a41086a2903003700002002ad42808080808004841003221b2900002108201b41086a2900002121201b41106a2900002122200341f0036a41186a2204201b41186a290000370300200341f0036a41106a22052022370300200341f0036a41086a2021370300200320083703f003201b102f2002102f41c000102d2202450d652002200329038802370000200241086a20034188026a41086a290300370000200220032903b802370010200241186a200341b8026a41086a290300370000200220032903f003370020200241286a200341f0036a41086a290300370000200241306a2005290300370000200241386a20042903003700004110102d221b450d65201b201d370000201b201c370008201b411041201031221b450d65201b201f370010201b41186a201e370000201b412041c0001031221b450d65201b20203600202002ad4280808080800884201bad4280808080c004841004201b102f2002102f20034180096a41186a200341f0046a41186a29030037030020034180096a41106a200341f0046a41106a29030037030020034180096a41086a200341f0046a41086a290300370300200320032903f00437038009200341f8066a20034180096a10ae01200041043a00004101211b0c590b20034188096a4117360200200341e6b4c60036028409200341013a00820920034183363b01800941a8c3c100413720034180096a41e0c3c10041f0c3c100103e000b200020023a0000200020032903f003370001200041086a20032800f7033600004101211b0c570b000b200141106a29030021082001410c6a280200211520022d0001210420022d0000211b0240024002400240024002400240024002400240200141086a2802002205417f6a0e0a00010203040506070809000b02402004201b41ff01714100477241ff01710d00200041043a00004101211b0c750b200041023a00004101211b0c740b2008a721020240201b41ff01710d004101211b200441ff01714101470d00200041043a00002002450d740c730b200041023a00004101211b20020d720c730b02402004201b41ff01714100477241ff01710d004108102d2202450d692002200837000041bfa9c400ad4280808080a001842002ad428080808080018410042002102f200041043a00004101211b0c730b200041023a00004101211b0c720b2008a72102024002402004201b41ff01714100477241ff01710d0020034180096a2008428080808070832015ad84221c10121073200328028009221b450d6f2003280284092104200320034188096a2802003602f4052003201b3602f005200341106a200341f0056a10e60120032802100d6e20032802f405220920032802142206490d6e2006417f4c0d240240024020060d00410121070c010b200610332207450d6a200720032802f005220a200610e8061a2003200920066b3602f4052003200a20066a3602f0050b2007450d6e200341086a200341f0056a10e6012006ad221d422086201d84221da7210620032802080d6c20032802f405220a200328020c2209490d6c2009417f4c0d240240024020090d004101210b0c010b20091033220b450d6a200b20032802f005220c200910e8061a2003200a20096b220a3602f4052003200c20096a3602f0050b200b450d6c2009ad221e422086201e84a721090240024002400240200a4104490d00200320032802f005220c41046a3602f0052003200a417c6a220d3602f405200d4104490d012003200c41086a3602f005200c28000421162003200a41786a220d3602f405200d4104490d032003200a41746a3602f4052003200c410c6a3602f005200c28000821172003200341f0056a10e6012003280200450d020c6f0b02402009450d00200b102f0b20060d700c710b02402009450d00200b102f0b20060d6f0c700b2003280204221420032802f405410c6e220a200a20144b1b2213ad420c7e221e422088a70d25201ea7220a417f4c0d2502400240200a0d004104210f0c010b200a102d220f450d6b200a410c6e21130b024002402014450d004100210e4100210d4100210c0340200341f8076a200341f0056a10f30220032d00f8074101460d0220032802f40522104104490d02200c41016a210a20032900f907211e20032802f0052211280000211220032010417c6a3602f4052003201141046a3602f0050240200c2013470d00200e200a200e200a4b1bad420c7e221f422088a70d58201fa722104100480d5802400240200c0d002010102d210f0c010b200f200d20101031210f0b200f450d6e2010410c6e21130b200f200d6a220c201e370200200c41086a2012360200200e41026a210e200d410c6a210d200a210c2014200a470d000b0b200f450d6d201d422088a7210c02402004450d00201b102f0b410f211b41f1e4c30021044100210a200c4104470d6c2007418ca9c300460d03200728000041eede91ab06460d030c6c0b2013450d6c200f102f0c6c0b02402009450d00200b102f0b2006450d6e0c6d0b200041023a00000c6f0b411f211b0240201641e7014f0d0041d2e4c30021044101210a0c690b0240201641e701470d0020170d004194e4c30021044103210a0c690b41c9a9c400ad4280808080d00084201c1004200341f0036a41186a4200370300200341f0036a41106a220a4200370300200341f0036a41086a221b4200370300200342003703f003418de6c300ad4280808080e0008410012204290000211c200341b8026a41086a220c200441086a2900003703002003201c3703b8022004102f201b200c290300370300200320032903b8023703f00341f883c400ad4280808080f0018410012204290000211c200341a8026a41086a220c200441086a2900003703002003201c3703a8022004102f200a20032903a802221c37030020034188026a41086a201b29030037030020034188026a41106a201c37030020034188026a41186a200c290300370300200320032903f00337038802200341013a00800920034188026aad428080808080048420034180096aad428080808010841004200341003a008009200341023a00840941c8e1ca00410020034180096a108c0102402006450d002007102f0b02402009450d00200b102f0b02402013450d00200f102f0b200041043a00000c6e0b2008a7210202402004201b41ff01714100477241ff01710d0041c9a9c400ad4280808080d000842008428080808070832015ad841004200341f0036a41186a4200370300200341f0036a41106a22054200370300200341f0036a41086a221b4200370300200342003703f003418de6c300ad4280808080e00084100122042900002108200341b8026a41086a2206200441086a290000370300200320083703b8022004102f201b2006290300370300200320032903b8023703f00341f883c400ad4280808080f00184100122042900002108200341a8026a41086a2206200441086a290000370300200320083703a8022004102f200520032903a802220837030020034188026a41086a201b29030037030020034188026a41106a200837030020034188026a41186a2006290300370300200320032903f003370388024101211b200341013a00800920034188026aad428080808080048420034180096aad428080808010841004200341003a008009200341023a00840941c8e1ca00410020034180096a108c01200041043a000020020d700c710b200041023a00004101211b20020d6f0c700b2004201b41ff01714100477241ff01710d212008422088a721042008a721070240024020154101460d0041cea9c400ad4280808080d0018410050c010b4104102d2202450d662002200736000020024104410810312202450d662002200436000441cea9c400ad4280808080d001842002ad428080808080018410042002102f0b4200211c200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f003418de6c300ad4280808080e000841001221b290000211d2002201b41086a2900003703002003201d3703f003201b102f41bae6c300ad4280808080e000841001221b290000211d200341a8026a41086a2209201b41086a2900003703002003201d3703a802201b102f200620032903a802221d37030020034188026a41086a200229030037030020034188026a41106a201d37030020034188026a41186a2009290300370300200320032903f0033703880220034180096a20034188026a10f4020240024020032802800922060d0041002102410421064100211b0c010b200329028409221c422088a7211b201ca721020b200341f8076a41026a200341f0056a41026a2d00003a0000200341f0046a41086a20034180096a41086a290200370300200341f0046a41106a20034180096a41106a280200360200200320032f00f0053b01f80720032003290280093703f00402400240201b2002460d00201c422088211d0c010b02402002201ca7470d00200241016a221b2002490d5120024101742209201b2009201b4b1bad42247e221d422088a70d51201da7221b4100480d510240024020020d00201b102d21060c010b2006200241246c201b103121060b2006450d67201c42808080807083201b41246ead84211c0b201c422088221da7211b0b2006201b41246c6a220241043a00002002200436020c2002200736020820022015360204200220032f01f8073b0001200241036a200341fa076a2d00003a0000200220032903f004370210200241186a200341f0046a41086a290300370200200241206a200341f0046a41106a280200360200200341f0036a41186a4200370300200341f0036a41106a22044200370300200341f0036a41086a22024200370300200342003703f003418de6c300ad4280808080e000841001221b290000211e200341b8026a41086a2207201b41086a2900003703002003201e3703b802201b102f20022007290300370300200320032903b8023703f00341bae6c300ad4280808080e000841001221b290000211e200341a8026a41086a2207201b41086a2900003703002003201e3703a802201b102f200420032903a802221e37030020034188026a41086a200229030037030020034188026a41106a201e37030020034188026a41186a2007290300370300200320032903f00337038802200341203602fc07200320034188026a3602f8072006201da7220241016a221b200341f8076a10f5020240201b2002490d00200241246c41246a211b2006210203400240024020022d0000220441044b0d0002400240024020040e050400010204040b2002410c6a280200450d03200241086a280200102f0c030b2002410c6a280200450d02200241086a280200102f0c020b2002410c6a280200450d01200241086a280200102f0c010b200241086a280200450d00200241046a280200102f0b200241246a2102201b415c6a221b0d000b0b0240201ca7450d002006102f0b200041043a00004101211741002116410121180c6d0b2008422088a7210b2008a7210c024002402004201b41ff01714100477241ff01710d000240200b41186c2202450d00201520026a210620034180096aad42808080801084211d20034188026aad4280808080800484211e200341f0036a41106a2104201521020340200241086a221b350200422086200235020084200241146a3502004220862002410c6a3502008410040240201b2802004105470d0002402002280200221b41c9a9c400460d00201b41c9a9c400410510ea060d010b200341f0036a41186a2209420037030020044200370300200341f0036a41086a221b4200370300200342003703f003418de6c300ad4280808080e0008410012207290000211c200341b8026a41086a220a200741086a2900003703002003201c3703b8022007102f201b200a290300370300200320032903b8023703f00341f883c400ad4280808080f0018410012207290000211c200341a8026a41086a220a200741086a2900003703002003201c3703a8022007102f200420032903a802370000200441086a200a29030037000020034188026a41086a201b29030037030020034188026a41106a200429030037030020034188026a41186a2009290300370300200320032903f00337038802200341013a008009201e201d10040b200241186a22022006470d000b0b200041043a0000200b450d01200b41186c21002015210203400240200241046a280200450d002002280200102f0b0240200241106a280200450d002002410c6a280200102f0b200241186a2102200041686a22000d000c020b0b200041023a0000200b450d00200b41186c21002015210203400240200241046a280200450d002002280200102f0b0240200241106a280200450d002002410c6a280200102f0b200241186a2102200041686a22000d000b0b41012118410021160240200c450d002015102f0b410021170c6c0b2008422088a721062008a72107024002402004201b41ff01714100477241ff01710d0002402006410c6c2202450d00201520026a211b201521020340200241086a35020042208620023502008410052002410c6a2202201b470d000b0b200041043a00002006450d012006410c6c21002015210203400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000c020b0b200041023a00002006450d002006410c6c21002015210203400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000b0b410121174100211602402007450d002015102f0b410021180c6b0b2008a72102024002402004201b41ff01714100477241ff01710d002008428080808070832015ad841013200041043a00000c010b200041023a00000b4101211b20020d6b0c6c0b02400240201b41ff01710d00200441ff01714101470d002002411a6a2901002108200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f01002116418de6c300ad4280808080e0008410012202290000211c200341b8026a41086a200241086a2900003703002003201c3703b8022002102f41f0e8c600ad4280808080f0008410012202290000211c200341a8026a41086a200241086a2900003703002003201c3703a8022002102f4120102d2202450d6320022008370018200220043a0017200220053a0016200220063b0014200220073a0013200220093a00122002200a3b00102002200b3a000f2002200c3a000e2002200d3b000c2002200e3a000b2002200f3a000a200220103b0008200220113a0007200220123a0006200220133b0004200220143a0003200220153a0002200220163b00002002ad42808080808004841003221b290000211c201b41086a290000211d201b41106a290000211e200341f0036a41186a2217201b41186a290000370300200341f0036a41106a2218201e370300200341f0036a41086a201d3703002003201c3703f003201b102f2002102f41c000102d2202450d63200220032903b802370000200241086a200341b8026a41086a290300370000200220032903a802370010200241186a200341a8026a41086a290300370000200220032903f003370020200241286a200341f0036a41086a290300370000200241306a2018290300370000200241386a201729030037000020034180096a200210f6022003290380094201510d012002102f4200211c4200211d4200211e4200211f420021214200212242002123420021240c600b200041023a00004101211b0c6c0b20034190096a290300211d200341a0096a290300212420034198096a290300212320034180096a41306a290300212220034180096a41286a2903002121200341c0096a290300211f20034180096a41386a290300211e200329038809211c20032d00cc09211b2002102f201b450d5e410f210241d5e3c300211b410621040c5f0b200341b8096a2001413c6a280200360200200341b0096a200141346a290200370300200341a8096a2001412c6a29020037030020034180096a41206a200141246a29020037030020034180096a41186a2001411c6a29020037030020034180096a41106a200141146a29020037030020034180096a41086a2001410c6a2902003703002003200129020437038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a108a014100211b410121050c5c0b20022d00000d1c20022d000141ff01714102470d1c200141086a2903002108200341f0036a41186a22054200370300200341f0036a41106a22024200370300200341f0036a41086a221b4200370300200342003703f00341d5a2ca00ad4280808080900184221c10012204290000211d2004290008211e2004102f201b201e3703002003201d3703f00341dea2ca00ad428080808090018410012206290000211d200341a8026a41086a2204200641086a2900003703002003201d3703a8022006102f200220032903a802221d37030020034188026a41086a2207201b29030037030020034188026a41106a2209201d37030020034188026a41186a220a2004290300370300200320032903f00337038802200341386a20034188026a412041c8e1ca004100410010b50120032802384101460d1d2005420037030020024200370300201b4200370300200342003703f003201c10012206290000211c2006290008211d2006102f201b201d3703002003201c3703f00341ecb0c000ad42808080803084221c10012206290000211d2004200641086a2900003703002003201d3703a8022006102f200220032903a802370000200241086a20042903003700002007201b29030037030020092002290300370300200a2005290300370300200320032903f00337038802200341286a20034188026a10e301024002402003290330500d002003280228450d00200341f0036a41186a22054200370300200341f0036a41106a22064200370300200341f0036a41086a221b4200370300200342003703f00341d5a2ca00ad428080808090018410012204290000211d2004290008211e2004102f201b201e3703002003201d3703f00341ecb0c000ad4280808080308410012204290000211d200341a8026a41086a2207200441086a2900003703002003201d3703a8022004102f200220032903a802370000200241086a200729030037000020034188026a41086a201b29030037030020034188026a41106a200629030037030020034188026a41186a2005290300370300200320032903f00337038802200341186a20034188026a10e301200329032042dc0b7c42dc0b20032802181b2008560d010b200341f0036a41186a22044200370300200341f0036a41106a22054200370300200341f0036a41086a221b4200370300200342003703f00341d5a2ca00ad4280808080900184221d10012206290000211e2006290008211f2006102f201b201f3703002003201e3703f003201c10012207290000211c200341a8026a41086a2206200741086a2900003703002003201c3703a8022007102f200220032903a802370000200241086a2209200629030037000020034188026a41086a220a201b29030037030020034188026a41106a220b200529030037030020034188026a41186a220c2004290300370300200320032903f00337038802200320083703800920034188026aad4280808080800484220820034180096aad221c428080808080018410042004420037030020054200370300201b4200370300200342003703f003201d10012207290000211d2007290008211e2007102f201b201e3703002003201d3703f00341dea2ca00ad428080808090018410012207290000211d2006200741086a2900003703002003201d3703a8022007102f200220032903a80237000020092006290300370000200a201b290300370300200b2005290300370300200c2004290300370300200320032903f0033703880241012104200341013a0080092008201c428080808010841004200041043a00004101211b410121050c6b0b41e5e4c00041ce0041f8b4ca001039000b2001410c6a2802002107200141086a280200210c2001280204210a024002400240024020022d00000d0020022d000141ff01714102470d002007410a4b0d02200341f0036a41186a22044200370300200341f0036a41106a22124200370300200341f0036a41086a22024200370300200342003703f003419487ca00ad4280808080a00184221d1001221b2900002108201b290008211c201b102f2002201c370300200320083703f003419e87ca00ad4280808080c00184221e1001221b2900082108201b290000211c201b102f20034188026a41106a221b201c37030020034188026a41186a2205200837030020034188026a41086a22062002290300370300200320032903f0033703880220034188026a10f702220941ff01714102460d032009410171450d0320004183083b0100200041086a4110360200200041046a41a087c700360200200041026a41013a00000c010b200041023a00000b2007450d5b0c5a0b20004183083b0100200041086a410d360200200041046a419387c700360200200041026a41023a00000c590b200442003703002012420037030020024200370300200342003703f003201d1001220929000021082009290008211c2009102f2002201c370300200320083703f003201e1001220929000821082009290000211c2009102f201b201c3703002005200837030020062002290300370300200320032903f00337038802200341013a00800920034188026aad4280808080800484221e20034180096aad428080808010841004200442003703002012420037030020024200370300200342003703f003418de6c300ad4280808080e000841001220429000021082002200441086a290000370300200320083703f0032004102f419ce6c300ad4280808080e00084100122042900002108200341a8026a41086a2209200441086a290000370300200320083703a8022004102f201220032903a802220837030020062002290300370300201b200837030020052009290300370300200320032903f00337038802200341c8006a20034188026a412010950120032802482104200328024c2105200341b8026a10f802024020032802c002221b20032802bc022211470d00201b41016a2202201b490d49201b41017422062002200620024b1bad42c4007e2208422088a70d492008a722024100480d4902400240201b0d002002102d21060c010b20032802b802201b41c4006c2002103121060b2006450d5f200320063602b8022003200241c4006e22113602bc020b20032802b802220d201b41c4006c22096a220241003a0000200220032f00f8073b000120022005410020041b3602042002200329028009370208200241036a200341f8076a41026a2d00003a0000200241106a20034180096a41086a2225290200370200200241186a20034180096a41106a2226290200370200200241206a20034180096a41186a290200370200200241286a20034180096a41206a290200370200200241306a20034180096a41286a290200370200200241386a20034180096a41306a290200370200200241c0006a20034180096a41386a2802003602002003201b41016a220f3602c002200a200741f0006c22026a2127024020070d00200a21050c550b200a41f4006a2106200941c4006a2118200241907f6a2109418de6c300ad4280808080e00084211d200a210503402005280204210e2005280200210420034180096a200541086a41e80010e8061a200541f0006a2105200e450d55200341f8076a20034180096a41e80010e8061a2003200e3602840920032004360280092025200341f8076a41e80010e8061a200341f0036a41186a22134200370300200341f0036a41106a22144200370300200341f0036a41086a22104200370300200342003703f003201d1001220229000021082010200241086a290000370300200320083703f0032002102f419ce6c300ad4280808080e00084100122022900002108200341a8026a41086a221b200241086a290000370300200320083703a8022002102f201220032903a802370000201241086a201b29030037000020034188026a41086a2215201029030037030020034188026a41106a2216201429030037030020034188026a41186a22172013290300370300200320032903f00337038802200341c0006a20034188026a4120109501200328024021022003280244210b200341f8066a20034180096a10f902410c211b024020040d00418787c70021044103211a0c550b02402004200b410020021b22024d0d0041fb86c70021044104211a0c550b200341f0056a2004417f6a10fa020240200341f0056a2026412010ea06450d004112211b41b087c70021044100211a0c550b0240200441002002417b6a221b201b20024b1b4f0d004108211b41df86c70021044106211a0c550b02400240200d200d200f41c4006c22196a460d00200d41016a21022018211b034002402002417f6a2d00004101470d004101210b200341f8066a2002460d032002200341f8066a412010ea06450d030b200241c4006a2102201b41bc7f6a221b0d000b0b4100210b0b200341f0056a200410fa02200341f0056a200341f8066a412010ea0621024114211b41e786c70021044105211a200b0d542002450d54200341e0016a41086a221a200341f0046a41086a221b290200370300200341e0016a41106a2220200341f0046a41106a22042f01003b0100200320032902f0043703e001200341f8066a20034180096a10f902200341d0036a41186a220b4200370300200341d0036a41106a22284200370300200341d0036a41086a22294200370300200342003703d003201742003703002016420037030020154200370300200342003703880241c800102d2202450d5f200341f0036a10fb02200241186a2013290300370200200241106a2014290300370200200241086a2010290300370200200220032903f003370200200241023602202002410136024420022003290388023700242002412c6a2015290300370000200241346a20162903003700002002413c6a2017290300370000200320023602f00520034282808080203702f405200341f0056a10fc02200341f0056a41186a200b290300370300200341f0056a41106a220b2028290300370300200341f0056a41086a22102029290300370300200320032903d0033703f005200341f0056a10fd02201b200341f8066a41086a2903003703002004200341f8066a41106a290300370300200341f0046a41186a2213200341f8066a41186a2903003703002010201a290300370300200b20202f01003b0100200320032903f8063703f004200320032903e0013703f0050240200f2011470d0020112011470d00201141016a22022011490d4a201141017422142002201420024b1bad42c4007e2208422088a70d4a2008a722024100480d4a0240024020110d002002102d210d0c010b200d201141c4006c20021031210d0b200d450d602003200d3602b8022003200241c4006e22113602bc020b200d20196a220241013a0000200241096a201b290300370000200220032903f004370001201329030021082004290300211c200241003a0021200241116a201c370000200241196a2008370000200220032903f005370030200241c0006a200b2f01003b0000200241386a20102903003700002003200f41016a220f3602c0020240200328028c092202450d00200241246c211b200e210203400240024020022d0000220441044b0d0002400240024020040e050400010204040b2002410c6a280200450d03200241086a280200102f0c030b2002410c6a280200450d02200241086a280200102f0c020b2002410c6a280200450d01200241086a280200102f0c010b200241086a280200450d00200241046a280200102f0b200241246a2102201b415c6a221b0d000b0b0240200328028809450d00200e102f0b201841c4006a2118200941907f6a2109200641f0006a210620052027470d000c560b0b200141156a29000021082001410d6a290000211c2002411a6a290100211f200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f01002116200141286a28020021182001411d6a290000211d200141056a290000221e421888a7211720022d0001211b20022d000021020240024002400240024020012d00040e050001020304000b20034180096a41146a41013602002003420137028409200341b4d8c90036028009200341043602fc06200341fcdbc9003602f8062003200341f8066a3602900920034180096a41e8d8c9001043000b200241ff01710d1f201b41ff01714101470d1f2003201f37039007200320043a008f07200320053a008e07200320063b018c07200320073a008b07200320093a008a072003200a3b0188072003200b3a0087072003200c3a0086072003200d3b0184072003200e3a0083072003200f3a008207200320103b018007200320113a00ff06200320123a00fe06200320133b01fc06200320143a00fb06200320153a00fa06200320163b01f806200341f0036a201710fe0220034180096a20032802f003220420032802f803220b10ff02200341f8076a41086a220220034180096a41106a290300370300200341f8076a41106a221b20034180096a41186a290300370300200341f8076a41186a2205200341a0096a29030037030020032003290388093703f80702402003290380094201510d00200341f0056a41086a200341f8066a41086a290300370300200341f0056a41106a200341f8066a41106a290300370300200341f0056a41186a200341f8066a41186a290300370300200320032903f8063703f005200342003703f8042003428080e983b1de163703f0042003200341f8066a3602e0012003200341f8066a3602d0022003200341d0026a360288092003200341e0016a360284092003200341f0046a36028009200341f8076a200341f8066a20034180096a109401024020032802f8074101470d0020034184086a280200210520034180086a280200210620032d00ff07210720032d00fe07210920032d00fd07210a20032d00fc0721020c540b410421020240200341f8076a41086a2903004201510d000c540b200341f8076a41106a290300210820032802d002211b200341b8096a200341f8076a41186a290300370300200341b0096a200837030020034180096a41086a41003a000020034189096a201b29000037000020034191096a201b41086a29000037000020034199096a201b41106a290000370000200341a1096a201b41186a290000370000200341033a00800941c8e1ca00410020034180096a108c010c530b200341f0056a41186a2005290300370300200341f0056a41106a201b290300370300200341f0056a41086a2002290300370300200320032903f8073703f0054105210a4183d9c900210641022109410321024100211b410521050c530b200341f0056a41106a20083703002003201e3703f0052003201d370388062003201c3703f805200241ff01710d1f201b41ff01714101470d1f2003201f37039008200320043a008f08200320053a008e08200320063b018c08200320073a008b08200320093a008a082003200a3b0188082003200b3a0087082003200c3a0086082003200d3b0184082003200e3a0083082003200f3a008208200320103b018008200320113a00ff07200320123a00fe07200320133b01fc07200320143a00fb07200320153a00fa07200320163b01f807200341f8076a200341f0056a412010ea06450d21200341f0046a201810fe0220034180096a20032802f004221b20032802f804220a10ff02410321024105210402402003290380094201510d00410021054190d9c9002106410b21070c510b200341b0096a2903002108200341a8096a290300211c20034190096a2205290300211e20034180096a41206a290300211d200329038809211f200520034198096a2903003703002003201d370398092003201f370380092003201e3703880920034180096a200341f8076a412010ea060d20200341f8066a200341f8076a200341f0056a201c2008410110bc01200341f8066a41086a290300211e0240024020032802f8064101460d0042002008200341f8066a41106a2903007d201c201e54ad7d221d201c201e7d221e201c56201d200856201d2008511b22021b21084200201e20021b211c200341f0056a41106a290300211f20032903f805212120032903f0052122200329038806211d4201211e0c010b20032802fc06220241187621092002411076210520024108762104201e422088a72107201ea72106200241ff01714104470d514200211e0b200341b0096a2008370300200341a8096a201c370300200341a0096a201d3703002003201e3703800920034198096a201f3703002003202237038809200320213703900902400240201e4201510d00200aad422086201bad8410050c010b4110102d2202450d6020024110412010312202450d60200220034188096a220b290000370000200241186a200b41186a290000370000200241106a200b41106a290000370000200241086a200b41086a2900003700002002412041c00010312202450d602002201c370020200241286a2008370000200aad422086201bad842002ad428080808080068410042002102f0b410421020c500b200241ff01710d22201b41ff01714101470d222003201f37039007200320043a008f07200320053a008e07200320063b018c07200320073a008b07200320093a008a072003200a3b0188072003200b3a0087072003200c3a0086072003200d3b0184072003200e3a0083072003200f3a008207200320103b018007200320113a00ff06200320123a00fe06200320133b01fc06200320143a00fb06200320153a00fa06200320163b01f806200341f0036a201710fe0220034180096a20032802f003221b20032802f803220410ff024103210202402003290380094201510d00410021044190d9c9002105410b21060c4f0b200341b0096a290300211e200341a8096a290300211f20034180096a41106a290300210820034180096a41206a290300211c200329038809211d200341f0056a41106a20034198096a2903003703002003201c370388062003201d3703f005200320083703f805200341f0056a200341f8066a412010ea060d212003201f3703f0042003201e3703f8040240201f201e84500d002003200341f8066a3602d002200341f8076a200341f8066a200341f0046a200341d0026a10960120032903f8074201520d002003290380082108200341b8096a200341f8076a41106a290300370300200341b0096a200837030020034180096a41086a41003a000020034189096a20032903f80637000020034191096a200341f8066a41086a29030037000020034199096a200341f8066a41106a290300370000200341a1096a20034190076a290300370000200341033a00800941c8e1ca00410020034180096a108c010b2004ad422086201bad841005410421020c4e0b0240201b200241ff01714100477241ff01710d00200341f0046a201810fe0220034180096a20032802f004220420032802f804220710ff02200341b0096a2102200341a8096a211b20034198096a2105200341a0096a210602402003290380094201520d002002290300211f201b290300212120034180096a41106a2903002122200629030021232003290388092124200341f0056a41106a20052903003703002003202337038806200320243703f005200320223703f805200320213703f8062003201f370380072021201f84500d002003200341f0056a3602f003200341f8076a200341f0056a200341f8066a200341f0036a10960120032903f8074201520d00200329038008211f200341b8096a200341f8076a41106a290300370300200341b0096a201f37030020034180096a41086a41003a000020034189096a20032903f00537000020034191096a200341f0056a41086a29030037000020034199096a200341f0056a41106a290300370000200341a1096a20034188066a290300370000200341033a00800941c8e1ca00410020034180096a108c010b20024200370300201b42003703002006201d370300200520083703002003201e3703880920034201370380092003201c370390094110102d2202450d5e20024110412010312202450d5e200220034188096a221b290000370000200241186a201b41186a290000370000200241106a201b41106a290000370000200241086a201b41086a2900003700002002412041c00010312202450d5e20024200370020200241286a42003700002007ad4220862004ad842002ad428080808080068410042002102f024020032802f404450d002004102f0b2003418d096a201c37000020034180096a41286a20183602002003419d096a201d37000020034195096a20083700002003201e37008509200341003a008409200341023a00800941c8e1ca00410020034180096a108c01200041043a00004101211b0c520b200041023a00004101211b0c510b200341e0016a41086a221b200141146a290200370300200341e0016a41106a22042001411c6a290200370300200341e0016a41186a2205200141246a290200370300200341e0016a41206a22062001412c6a28020036020020032001410c6a2902003703e001200141c8006a290300211f200141c0006a290300211e200141386a2903002108200141306a290300211c2002411a6a290100211d200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211a20022d0001210720022d0000210202400240024002400240200141086a2802000e050001020304000b20034180096a41146a41013602002003420137028409200341b4d8c90036028009200341043602fc06200341fcdbc9003602f8062003200341f8066a3602900920034180096a41e8d8c9001043000b200341f8076a41206a2006280200360200200341f8076a41186a2005290300370300200341f8076a41106a2004290300370300200341f8076a41086a201b290300370300200320032903e0013703f807200241ff01710d24200741ff01714101470d242003201d37038805200320093a0087052003200a3a0086052003200b3b0184052003200c3a0083052003200d3a0082052003200e3b0180052003200f3a00ff04200320103a00fe04200320113b01fc04200320123a00fb04200320133a00fa04200320143b01f804200320153a00f704200320163a00f604200320173b01f404200320183a00f304200320193a00f2042003201a3b01f00420034180096a41206a200341f8076a41206a28020036020020034180096a41186a200341f8076a41186a29030037030020034180096a41106a200341f8076a41106a29030037030020034180096a41086a2202200341f8076a41086a290300370300200320032903f80737038009200341f0056a20034180096a10bb0120034188026a41086a221b200341f9056a29000037030020034188026a41106a220420034181066a29000037030020034188026a41186a220520034189066a290000370300200320032900f1053703880220032d00f0054101460d03200341f8066a41186a2005290300370300200341f8066a41106a2004290300370300200341f8066a41086a201b29030037030020032003290388023703f8064101211b20034180096a200341f0046a200341f8066a201c2008410110f20220032003290081093703f003200320022800003600f703024020032d00800922024104470d00200041043a00000c540b200020023a0000200020032903f003370001200041086a20032800f7033600000c530b200341d0026a41206a2006280200360200200341d0026a41186a2005290300370300200341d0026a41106a2004290300370300200341d0026a41086a201b290300370300200320032903e0013703d0022007200241ff01714100477241ff01710d2420034180096a41206a200341d0026a41206a28020036020020034180096a41186a200341d0026a41186a29030037030020034180096a41106a200341d0026a41106a29030037030020034180096a41086a200341d0026a41086a290300370300200320032903d00237038009200341f8076a20034180096a10bb0120034188026a41086a220220034181086a29000037030020034188026a41106a220420034189086a29000037030020034188026a41186a220520034191086a290000370300200320032900f907370388024101211b20032d00f8074101460d03200341d0036a41186a2005290300370300200341d0036a41106a2004290300370300200341d0036a41086a200229030037030020032003290388023703d00320034200201f201e201c7c221d428080e983b1de16544100201f20087c201d201e54ad7c501b22041b221f3703c00220034200201e20041b221e3703b8022003200341d0036a3602cc02418de6c300ad4280808080e0008410012202290000211d200341a8026a41086a200241086a2900003703002003201d3703a8022002102f41f0e8c600ad4280808080f00084100122022d000f210520022d000e210620022f000c210720022d000b210920022d000a210a20022f0008210b20022d0007210c20022d0006210d20022f0004210e20022d0003210f20022d0002211020022f000021112002102f4120102d2202450d5e200220032903d003370000200241186a200341d0036a41186a290300370000200241106a200341d0036a41106a290300370000200241086a200341d0036a41086a2903003700002002ad42808080808004841003221b290000211d201b41086a2900002121201b41106a2900002122200341f0036a41186a2212201b41186a290000370300200341f0036a41106a22132022370300200341f0036a41086a221420213703002003201d3703f003201b102f2002102f41c000102d2202450d5e4200200820041b21084200201c20041b211c200220032903a802370000200241086a200341a8026a41086a2903003700002002200c3a00172002200d3a00162002200e3b00142002200f3a0013200220103a0012200220113b0010200220053a001f200220063a001e200220073b001c200220093a001b2002200a3a001a2002200b3b0018200220032903f003370020200241286a2014290300370000200241306a2013290300370000200241386a2012290300370000200341f8066a200210f60220032903f806212442002122200342003703f806200341c0076a280200210520032d00c40721060240024020244201510d00200341f0046a41306a4200370300200341f0046a41286a4200370300200341f0046a41206a420037030020034188056a420037030020034180056a4200370300200341f8046a4200370300200342003703f00442002123420021214200211d4200212a0c010b200341f8066a41386a290300212b200341f8066a41306a290300212c200341f8066a41206a2903002123200341f8066a41186a2903002122200341f8066a41c0006a290300212a200329038807211d2003290380072121200341f0046a41206a200341f8066a41286a290300370300200341f0046a41286a202c370300200341f0046a41306a202b37030020034180056a20223703002003202337038805200320213703f0042003201d3703f8040b201d20237c212b202120227c222c2021542207ad212d201c2021562008201d562008201d51221b1b0d25201c2021542008201d54201b1b450d4d200341f0036a41186a220b4200370300200341f0036a41106a22044200370300200341f0036a41086a221b4200370300200342003703f00341e7a2ca00ad4280808080800184221e10012209290000211f2009290008212e2009102f201b202e3703002003201f3703f00341ecb5c600ad4280808080d00184221f1001220a290000212e200341a8026a41086a2209200a41086a2900003703002003202e3703a802200a102f200420032903a802222e37030020034188026a41086a220c201b29030037030020034188026a41106a220d202e37030020034188026a41186a220e2009290300370300200320032903f0033703880220034198016a20034188026a4120109c0120034198016a41106a290300212e20032903a001212f200328029801210a200b420037030020044200370300201b4200370300200342003703f003201e1001220b290000211e200b2900082130200b102f201b20303703002003201e3703f003201f1001220b290000211e2009200b41086a2900003703002003201e3703a802200b102f200420032903a802221e370300200c201b290300370300200d201e370300200e2009290300370300200320032903f0033703880220034200202e4200200a1b221e2021201c54ad2008201d7d7c7c202f4200200a1b221f2021201c7d222e54ad7d2221201f202e7d222e201f562021201e562021201e511b221b1b3703880920034200202e201b1b3703800920034180096a211b20034188026a21040c4c0b200141e0006a290300211d200141d8006a2903002121200141d0006a2802002109200341f8076a41206a2006280200360200200341f8076a41186a2005290300370300200341f8076a41106a2004290300370300200341f8076a41086a201b290300370300200320032903e0013703f8072007200241ff01714100477241ff01710d2520034180096a41206a2202200341f8076a41206a28020036020020034180096a41186a2204200341f8076a41186a29030037030020034180096a41106a2205200341f8076a41106a29030037030020034180096a41086a200341f8076a41086a290300370300200320032903f80737038009200341f0056a20034180096a10bb014101211b20032d00f0054101460d02200341f0056a41086a2d0000211b200341f9056a22062f00002107200341fb056a2d0000210a200341fc056a2d0000210b200341fd056a2f0000210c200341ff056a2d0000210d200341f0056a41106a2d0000210e20034181066a220f2f0000211020034183066a2d0000211120034184066a2d0000211220034185066a2f0000211320034187066a2d00002114200341f0056a41186a2d0000211520032f00f105211620032d00f305211720032d00f405211820032f00f505211920032d00f705211a200320034189066a222029000037038805200320153a008705200320143a008605200320133b018405200320123a008305200320113a008205200320103b0180052003200e3a00ff042003200d3a00fe042003200c3b01fc042003200b3a00fb042003200a3a00fa04200320073b01f8042003201b3a00f7042003201a3a00f604200320193b01f404200320183a00f304200320173a00f204200320163b01f0042004201f3703002005201e3703002002200936020020032008370388092003201c37038009200341f0056a20034180096a10bb0120034188026a41086a200629000037030020034188026a41106a200f29000037030020034188026a41186a2020290000370300200320032900f1053703880220032d00f0054101460d01200341f8066a41186a20034188026a41186a290300370300200341f8066a41106a20034188026a41106a290300370300200341f8066a41086a20034188026a41086a29030037030020032003290388023703f8064101211b20034180096a200341f0046a200341f8066a2021201d410110f20220032003290081093703f003200320034180096a41086a2800003600f703024020032d00800922024104470d00200041043a00000c520b200020023a0000200020032903f003370001200041086a20032800f7033600000c510b200341f8076a41206a2006280200360200200341f8076a41186a2005290300370300200341f8076a41106a2004290300370300200341f8076a41086a201b290300370300200320032903e0013703f807200241ff01710d25200741ff01714101470d252003201d37038805200320093a0087052003200a3a0086052003200b3b0184052003200c3a0083052003200d3a0082052003200e3b0180052003200f3a00ff04200320103a00fe04200320113b01fc04200320123a00fb04200320133a00fa04200320143b01f804200320153a00f704200320163a00f604200320173b01f404200320183a00f304200320193a00f2042003201a3b01f00420034180096a41206a200341f8076a41206a28020036020020034180096a41186a200341f8076a41186a29030037030020034180096a41106a200341f8076a41106a29030037030020034180096a41086a2202200341f8076a41086a290300370300200320032903f80737038009200341f0056a20034180096a10bb0120034188026a41086a221b200341f9056a29000037030020034188026a41106a220420034181066a29000037030020034188026a41186a220520034189066a290000370300200320032900f1053703880220032d00f0054101460d00200341f8066a41186a2005290300370300200341f8066a41106a2004290300370300200341f8066a41086a201b29030037030020032003290388023703f80620034180096a200341f0046a200341f8066a201c2008410010f20220032003290081093703f003200320022800003600f70320032d00800922024104470d02200041043a00004101211b0c500b4101211b0b2000201b3a00000c4e0b200020023a0000200020032903f003370001200041086a20032800f7033600004101211b0c4d0b20034180096a41306a200141386a29030037030020034180096a41286a200141306a29030037030020034180096a41206a200141286a29030037030020034180096a41186a200141206a29030037030020034180096a41106a200141186a29030037030020034180096a41086a200141106a2903003703002003200141086a29030037038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a108003410021064101211b41012104410121050c640b200141086a28020021292001280204212820034180096a2001410c6a41840110e8061a2002411a6a2901002108200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620022d0001211b20022d0000210202402028450d00200341d0026a20034180096a41046a41800110e8061a024002400240200241ff01710d00201b41ff01714101460d010b200041023a000020290d010c470b200320083703e803200320043a00e703200320053a00e603200320063b01e403200320073a00e303200320093a00e2032003200a3b01e0032003200b3a00df032003200c3a00de032003200d3b01dc032003200e3a00db032003200f3a00da03200320103b01d803200320113a00d703200320123a00d603200320133b01d403200320143a00d303200320153a00d203200320163b01d003200341f0036a200341d0026a41800110e8061a20034188066a20032903e803370300200341f0056a41106a20032903e003370300200341f0056a41086a20032903d803370300200320032903d0033703f005200341f8076a200341f0056a1081030240024020032802a4084102460d00200341f8066a41086a200341b5086a290000370300200341f8066a41106a200341bd086a290000370300200341f8066a41176a2202200341c4086a290000370000200320032900ad083703f806200341ac086a2d0000211b0240200328029c08450d00200328029808102f0b200341f0046a41176a22042002290000370000200341f0046a41106a2202200341f8066a41106a290300370300200341e9016a20034180076a290300370000200341f1016a2002290300370000200341f8016a20042900003700002003201b3a00e001200320032903f8063700e101200341f0046a200341f0036a41800110e8061a20034188026a200341e0016a108203200341f8076a200328028802221b20032802900210830320032d00f8072102200341f8066a200341f8076a41017241800110e8061a0240024020024101460d00200341003a00f0050c010b200341013a00f005200341f0056a410172200341f8066a41800110e8061a0b0240200328028c02450d00201b102f0b200341f0046a41206a2127200341b0056a2125200341d0056a212620034191066a2131200341b1066a2132200341d1066a2133200341f0056a41017221344170210503404100211b41c8e1ca0021040240024002400240200541c0aac3006a280000220241e6e485f3064a22090d00200241e2c289ab06460d01200241e1ea91cb06470d034120211b202621040c030b200241e9dabdf306460d01200241e7e485f306470d024120211b200341f0046a21040c020b4120211b202721040c010b4120211b202521040b2003201b36028008200320043602fc07200320023602f807200341f8066a200341f8076a108403200341f8076a20032802f806220720032802800710ad0220032802fc0621060240024020032d00f8074101470d00200329009108210820032d009008210a20032d008f08210b20032f008d08210c20032d008c08210d20032d008b08210e20032f008908210f20032d008808211020032d008708211120032f008508211220032d008408211320032d008308211420032f008108211520032d008008211620032d00ff07211720032f00fd07211820032d00fc07211920032d00fb07211a20032f00f907212002402006450d002007102f0b20032008370390082003200a3a008f082003200b3a008e082003200c3b018c082003200d3a008b082003200e3a008a082003200f3b018808200320103a008708200320113a008608200320123b018408200320133a008308200320143a008208200320153b018008200320163a00ff07200320173a00fe07200320183b01fc07200320193a00fb072003201a3a00fa07200320203b01f807200341f8076a200341e0016a412010ea06450d014102210241b7eac300211b410d21040c040b2006450d002007102f0b0240024020032d00f0054101470d004100210641c8e1ca002107024002400240024020090d00200241e2c289ab06460d01200241e1ea91cb06470d0341202106203321070c030b200241e9dabdf306460d01200241e7e485f306470d0241202106203421070c020b41202106203121070c010b41202106203221070b0240201b2006470d0020042007460d0220042007201b10ea06450d020b2003200636028008200320073602fc07200320023602f807200341f8066a200341f8076a10840320033502800742208620032802f8062206ad84100520032802fc06450d002006102f0b2003201b36028008200320043602fc07200320023602f807200341f8066a200341f8076a10840320032802f806211b20033502800721084120102d2202450d5d200220032903e001370000200241186a200341e0016a41186a290300370000200241106a200341e0016a41106a290300370000200241086a200341e0016a41086a2903003700002008422086201bad842002ad428080808080048410042002102f20032802fc06450d00201b102f0b200541046a22050d000b200341f8076a200341e0016a108203200335028008210820032802f807211b4120102d2202450d5b200220032903f004370000200241186a200341f0046a41186a290300370000200241106a200341f0046a41106a290300370000200241086a200341f0046a41086a2903003700002002412041c00010312202450d5b2002200329039005370020200241386a200341f0046a41386a290300370000200241306a200341f0046a41306a290300370000200241286a200341f0046a41286a290300370000200241c00041800110312202450d5b200220032903b005370040200241d8006a200341f0046a41d8006a290300370000200241d0006a200341f0046a41d0006a290300370000200241c8006a200341f0046a41c8006a290300370000200220032903d005370060200241e8006a200341f0046a41e8006a290300370000200241f0006a200341f0046a41f0006a290300370000200241f8006a200341f0046a41f8006a2903003700002008422086201bad842002ad428080808080108410042002102f024020032802fc07450d00201b102f0b024020032d00f0050d00200341d0036a10d0020b200041043a000020290d020c480b4101210241c4eac300211b411721040b200041086a2004360200200041046a201b360200200041026a20023a000020004183123b01002029450d460b2028102f0c450b200241ff01710d21201b41ff01714101470d21200320113a00d702200320123a00d602200320133b01d402200320143a00d302200320153a00d202200320163b01d0022003200b3a00df022003200c3a00de022003200d3b01dc022003200e3a00db022003200f3a00da02200320103b01d802200320043a00e702200320053a00e602200320063b01e402200320073a00e302200320093a00e2022003200a3b01e002200320083703e80220034188066a2008370300200341f0056a41106a20032903e002370300200341f0056a41086a20032903d802370300200320032903d0023703f005200341f8076a200341f0056a1081030240024020032802a4084102460d00200341f8066a41086a200341b5086a290000370300200341f8066a41106a200341bd086a290000370300200341f8066a41176a2202200341c4086a290000370000200320032900ad083703f806200341ac086a2d0000211b0240200328029c08450d00200328029808102f0b200341f0046a41176a22042002290000370000200341f0046a41106a2202200341f8066a41106a290300370300200341f9036a20034180076a29030037000020034181046a200229030037000020034188046a20042900003700002003201b3a00f003200320032903f8063700f103200341e0016a200341f0036a108203200341f8076a20032802e001220220032802e8012204108303024020032d00f807221b450d002004ad4220862002ad8410050b20032d00f9072104200341f8066a200341f8076a41027241ff0010e8061a200341f8076a200341f8066a41ff0010e8061a0240201b4101470d00200341f0046a200341f8076a41ff0010e8061a024020032802e401450d002002102f0b200320043a00f005200341f0056a410172200341f0046a41ff0010e8061a20034180086a4120360200200341e7e485f3063602f8072003200341f0056a3602fc07200341f8066a200341f8076a10840320033502800742208620032802f8062202ad841005024020032802fc06450d002002102f0b200341e2c289ab063602f80720034120360280082003200341f0056a41206a3602fc07200341f8066a200341f8076a10840320033502800742208620032802f8062202ad841005024020032802fc06450d002002102f0b20034120360280082003200341b0066a3602fc07200341e9dabdf3063602f807200341f8066a200341f8076a10840320033502800742208620032802f8062202ad841005024020032802fc06450d002002102f0b20034120360280082003200341d0066a3602fc07200341e1ea91cb063602f807200341f8066a200341f8076a10840320033502800742208620032802f8062202ad841005024020032802fc06450d002002102f0b200341d0026a10ca02200041043a00000c470b024020032802e401450d002002102f0b4106210241b1eac300211b410321040c010b4117210241c4eac300211b410121040b20004183123b0100200041086a2002360200200041046a201b360200200041026a20043a00000c440b20034180096a41306a200141386a29030037030020034180096a41286a200141306a29030037030020034180096a41206a200141286a29030037030020034180096a41186a200141206a29030037030020034180096a41106a200141186a29030037030020034180096a41086a200141106a2903003703002003200141086a29030037038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a10c302410021094101211b410121044101210541012106410121070c640b200341a8096a2001412c6a29020037030020034180096a41206a200141246a29020037030020034180096a41186a2001411c6a29020037030020034180096a41106a200141146a29020037030020034180096a41086a2001410c6a2902003703002003200129020437038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a1085034100210a4101211b41012104410121054101210641012107410121090c640b200341a8096a2001412c6a29020037030020034180096a41206a200141246a29020037030020034180096a41186a2001411c6a29020037030020034180096a41106a200141146a29020037030020034180096a41086a2001410c6a2902003703002003200129020437038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a1086034100210b4101211b41012104410121054101210641012107410121094101210a0c640b200341f8076a41206a200141286a290300370300200341f8076a41186a200141206a290300370300200341f8076a41106a200141186a290300370300200341f8076a41086a200141106a2903003703002003200141086a2903003703f80720034180096a41206a200241206a29020037030020034180096a41186a200241186a29020037030020034180096a41106a200241106a29020037030020034180096a41086a200241086a29020037030020032002290200370380092000200341f8076a20034180096a1087034100210c4101211b41012104410121054101210641012107410121094101210a4101210b0c640b200341cc026a41026a2207200141076a2d00003a0000200341f8076a41086a22092001411c6a290200370300200341f8076a41106a220a200141246a290200370300200341f8076a41186a2001412c6a29020037030020034198086a200141346a290200370300200341a0086a2001413c6a290200370300200341a8086a200141c4006a2d00003a0000200320012f00053b01cc022003200141146a2902003703f807200141086a28020021042001410c6a2802002105200141106a280200210620022f0001200241036a2d000041107472210c2002410c6a280200210d200241086a280200210e200241046a280200210f20022d0000211b02400240024002400240024002400240024020012d0004220b0e080001020304050607000b20034180096a41146a41013602002003420137028409200341b4d8c90036028009200341043602fc06200341fcdbc9003602f8062003200341f8066a3602900920034180096a41e8d8c9001043000b20034187066a20092903003700002003418f066a200a2d00003a0000200320032f01cc023b01f005200320063600fb05200320053600f705200320043600f305200320032903f8073700ff05200320072d00003a00f20502400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d070b200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f00341eba1c600ad4280808080b002841001221b29000021082002201b41086a290000370300200320083703f003201b102f41ebdec700ad4280808080f000841001221b2900002108200341a8026a41086a2207201b41086a290000370300200320083703a802201b102f200620032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010aa02024020032802800922090d0041012109200341013602f8064100210c4100210d0c410b200320093602f806200328028409210c2003290284092208a7210d024002402008422088a7220a41014b0d0041002102200a0e024201420b200a211b4100210203402002201b410176220620026a2207200920074105746a200341f0056a412010ea0641004a1b2102201b20066b221b41014b0d000b0b0240200920024105746a200341f0056a412010ea06221b450d0020034180096a41186a200341f0056a41186a29030037030020034180096a41106a200341f0056a41106a29030037030020034180096a41086a200341f0056a41086a290300370300200320032903f00537038009201b411f7620026a2206200a4b0d2520034180096a211b0c420b200041831c3b0100200041086a410d360200200041046a41f2b6c400360200200041026a41003a0000200c450d422009102f0c420b200341e7026a2009290300370000200341ef026a200a2d00003a0000200320032f01cc023b01d002200320063600db02200320053600d702200320043600d302200320032903f8073700df02200320072d00003a00d20202400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d250b200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f00341eba1c600ad4280808080b002841001221b29000021082002201b41086a290000370300200320083703f003201b102f41ebdec700ad4280808080f000841001221b2900002108200341a8026a41086a2207201b41086a290000370300200320083703a802201b102f200620032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010aa022003280280092202410120021b2109024002400240200329028409420020021b2208422088a7220a41014b0d0041002102200a0e020201020b200a211b4100210203402002201b410176220620026a2207200920074105746a200341d0026a412010ea0641004a1b2102201b20066b221b41014b0d000b0b200920024105746a200341d0026a412010ea060d002002200a4f0d26200920024105746a221b201b41206a2002417f73200a6a41057410e9061a20034180096a41186a2207420037030020034180096a41106a2206420037030020034180096a41086a221b4200370300200342003703800941eba1c600ad4280808080b00284221c10012202290000211d200341b8026a41086a220c200241086a2900003703002003201d3703b8022002102f201b200c290300370300200320032903b8023703800941ebdec700ad4280808080f0008410012202290000211d200341a8026a41086a220c200241086a2900003703002003201d3703a8022002102f200620032903a802221d370300200341f8066a41086a201b290300370300200341f8066a41106a201d370300200341f8066a41186a200c29030037030020032003290380093703f80620034120360284092003200341f8066a360280092009200a417f6a220220034180096a10aa012007200341d0026a41186a2903003703002006200341d0026a41106a290300370300201b200341d0026a41086a290300370300200320032903d0023703800920034180096a41012009200210880320034188026a41186a2207420037030020034188026a41106a220c420037030020034188026a41086a221b42003703002003420037038802201c10012206290000211c2006290008211d2006102f201b201d3703002003201c3703880241fbd4c700ad4280808080d0008410012206290008211c2006290000211d2006102f200341f0046a41106a201d370300200341f0046a41186a201c370300200341f0046a41086a201b29030037030020032003290388023703f00420034180096a200341f0046a412010ad0220032d0080092106200720034199096a290000370300200c20034191096a290000370300201b20034189096a290000370300200320032900810937038802024020064101470d00200341d0036a41186a2007290300221c370300200341d0036a41106a200c290300221d370300200341d0036a41086a201b290300221e3703002003200329038802221f3703d003200341f0056a41186a201c370300200341f0056a41106a201d370300200341f0056a41086a201e3703002003201f3703f0050240024002400240200a417f6a220641014b0d004100211b20060e020201020b4100211b0340201b20024101762206201b6a2207200920074105746a200341f0056a412010ea0641004a1b211b200220066b220241014b0d000b0b2009201b4105746a200341f0056a412010ea06450d010b200341f0046a41186a4200370300200341f0046a41106a22074200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012206290000211c20034188026a41086a2202200641086a2900003703002003201c370388022006102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d0008410012206290000211c2002200641086a2900003703002003201c370388022006102f2007200329038802221c370300200341f0036a41086a201b290300370300200341f0036a41106a201c370300200341f0036a41186a2002290300370300200320032903f0043703f003200341f0036aad428080808080048410050c010b20034199096a20034188066a29030037000020034191096a20034180066a29030037000020034189096a200341f8056a290300370000200320032903f00537008109200341013a00800920034180096a1089030b2003418a023b01800941c8e1ca00410020034180096a108c0102402008a7450d002009102f0b200041043a00000c420b200041831c3b0100200041086a4109360200200041046a41d1d5c700360200200041026a41013a00002008a7450d412009102f0c410b200341f7016a2009290300370000200341ff016a200a2d00003a0000200320032f01cc023b01e001200320063600eb01200320053600e701200320043600e301200320032903f8073700ef01200320072d00003a00e201200341d0026a41186a200341a1086a290000370300200341d0026a41106a20034199086a290000370300200341d0026a41086a20034191086a29000037030020032003290089083703d00202400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d260b200341e0016a200341d0026a412010ea06450d26200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f00341eba1c600ad4280808080b002841001221b29000021082002201b41086a290000370300200320083703f003201b102f41ebdec700ad4280808080f000841001221b2900002108200341a8026a41086a2207201b41086a290000370300200320083703a802201b102f200620032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010aa024101210c2003280280092202410120021b21094109210d41d1d5c700210e02400240200329028409420020021b2208422088a7220a41014b0d0041002102200a0e023e013e0b200a211b4100210203402002201b410176220620026a2207200920074105746a200341e0016a412010ea0641004a1b2102201b20066b221b41014b0d000b0b200920024105746a220f200341e0016a412010ea060d3c0240200a41014b0d004100211b200a0e023e3c3e0b200a21064100211b0340201b20064101762207201b6a220c2009200c4105746a200341d0026a412010ea0641004a1b211b200620076b220641014b0d000c3c0b0b024002400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d010b20042006108701200341f0036a41186a4200370300200341f0036a41106a22074200370300200341f0036a41086a221b4200370300200342003703f00341eba1c600ad4280808080b00284220810012202290000211c201b200241086a2900003703002003201c3703f0032002102f41ebdec700ad4280808080f0008410012202290000211c200341a8026a41086a2209200241086a2900003703002003201c3703a8022002102f200720032903a802221c37030020034188026a41086a2202201b29030037030020034188026a41106a221b201c37030020034188026a41186a22072009290300370300200320032903f0033703880220034180096a20034188026a412010aa02200420062003280280092209410120091b220a200329028409420020091b221c422088a7108a0320074200370300201b420037030020024200370300200342003703880220081001220929000021082009290008211d2009102f2002201d370300200320083703880241fbd4c700ad4280808080d000841001220929000821082009290000211d2009102f200341f0046a41106a201d370300200341f0046a41186a2008370300200341f0046a41086a200229030037030020032003290388023703f00420034180096a200341f0046a412010ad0220032d0080092109200720034199096a290000370300201b20034191096a290000370300200220034189096a290000370300200320032900810937038802024020094101470d00200341d0036a41186a20072903002208370300200341d0036a41106a201b290300221d370300200341d0036a41086a2002290300221e3703002003200329038802221f3703d003200341f0056a41186a2008370300200341f0056a41106a201d370300200341f0056a41086a201e3703002003201f3703f0050240024002400240200641014b0d004100210220060e020201020b2006211b4100210203402002201b410176220720026a2209200420094105746a200341f0056a412010ea0641004a1b2102201b20076b221b41014b0d000b0b200420024105746a200341f0056a412010ea06450d010b200341f0046a41186a4200370300200341f0046a41106a22094200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012207290000210820034188026a41086a2202200741086a29000037030020032008370388022007102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d000841001220729000021082002200741086a29000037030020032008370388022007102f20092003290388022208370300200341f0036a41086a201b290300370300200341f0036a41106a2008370300200341f0036a41186a2002290300370300200320032903f0043703f003200341f0036aad428080808080048410050c010b20034199096a20034188066a29030037000020034191096a20034180066a29030037000020034189096a200341f8056a290300370000200320032903f00537008109200341013a00800920034180096a1089030b0240201ca7450d00200a102f0b200341f0046a41186a4200370300200341f0046a41106a22094200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012207290000210820034188026a41086a2202200741086a29000037030020032008370388022007102f201b200229030037030020032003290388023703f00441ebdec700ad4280808080f000841001220729000021082002200741086a29000037030020032008370388022007102f20092003290388022208370300200341f0036a41086a201b290300370300200341f0036a41106a2008370300200341f0036a41186a2002290300370300200320032903f0043703f00320034120360284092003200341f0036a360280092004200620034180096a10aa0102402005450d002004102f0b2003418a063b01800941c8e1ca00410020034180096a108c01200041043a00000c430b200041023a00002005450d422004102f0c420b200241106a2902002108200241186a2f010021102002411a6a290100211c200341e7026a2009290300370000200341ef026a200a2d00003a0000200320072d00003a00d202200320032f01cc023b01d002200320063600db02200320053600d702200320043600d302200320032903f8073700df022003201c37038805200320103b018605200320083701fe042003200c4108763b01f0042003200d3a00fa042003200d4110763b01fc042003200d4108763a00fb042003200e3a00f6042003200e4110763b01f8042003200e4108763a00f7042003200f3a00f2042003200f4110763b01f4042003200f4108763a00f304200c41ff01714101470d25201b0d25200341f8066a41186a200341f0046a41186a290300370300200341f8066a41106a200341f0046a41106a290300370300200341f8066a41086a200341f0046a41086a290300370300200320032903f0043703f806200341f8066a200341d0026a412010ea06450d37200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f00341eba1c600ad4280808080b002841001221b29000021082002201b41086a290000370300200320083703f003201b102f41ebdec700ad4280808080f000841001221b2900002108200341a8026a41086a2207201b41086a290000370300200320083703a802201b102f200620032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010aa024101210a2003280280092202410120021b21094109210d41d1d5c700210e02400240200329028409420020021b2208422088a7220c41014b0d0041002102200c0e023701370b200c211b4100210203402002201b410176220620026a2207200920074105746a200341f8066a412010ea0641004a1b2102201b20066b221b41014b0d000b0b200920024105746a220f200341f8066a412010ea060d350240200c41014b0d004100211b200c0e023735370b200c21064100211b0340201b20064101762207201b6a220a2009200a4105746a200341d0026a412010ea0641004a1b211b200620076b220641014b0d000c350b0b20034187066a20092903003700002003418f066a200a2d00003a0000200320032f01cc023b01f005200320063600fb05200320053600f705200320043600f305200320032903f8073700ff05200320072d00003a00f20502400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d260b200341f0036a41186a4200370300200341f0036a41106a22064200370300200341f0036a41086a22024200370300200342003703f00341eba1c600ad4280808080b002841001221b29000021082002201b41086a290000370300200320083703f003201b102f41ebdec700ad4280808080f000841001221b2900002108200341a8026a41086a2207201b41086a290000370300200320083703a802201b102f200620032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010aa022003280280092202410120021b2109024002400240200329028409420020021b2208422088a7220241014b0d004100211b20020e020201020b4100211b0340201b20024101762206201b6a2207200920074105746a200341f0056a412010ea0641004a1b211b200220066b220241014b0d000b0b2009201b4105746a200341f0056a412010ea060d0002402008a7450d002009102f0b200341f0046a41186a4200370300200341f0046a41106a22074200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012206290000210820034188026a41086a2202200641086a29000037030020032008370388022006102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d000841001220629000021082002200641086a29000037030020032008370388022006102f20072003290388022208370300200341f0036a41086a201b290300370300200341f0036a41106a2008370300200341f0036a41186a2002290300370300200320032903f0043703f0034120102d2202450d55200220032903f005370000200241186a200341f0056a41186a221b290300370000200241106a200341f0056a41106a2206290300370000200241086a200341f0056a41086a2207290300370000200341f0036aad42808080808004842002ad428080808080048410042002102f20034199096a201b29030037000020034191096a200629030037000020034189096a2007290300370000200320032903f00537008109200341013a00800920034180096a108903200041043a00000c3e0b200041831c3b0100200041086a4109360200200041046a41d1d5c700360200200041026a41013a00002008a7450d3d2009102f0c3d0b024002400240201b417f6a220241024b0d00024020020e03000102000b200e410174200d4d0d00200f41ff0171450d010b200c201b4100477241ff01710d010b200341f0046a41186a4200370300200341f0046a41106a22054200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012204290000210820034188026a41086a2202200441086a29000037030020032008370388022004102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d000841001220429000021082002200441086a29000037030020032008370388022004102f20052003290388022208370300200341f0036a41086a201b290300370300200341f0036a41106a2008370300200341f0036a41186a2002290300370300200320032903f0043703f003200341f0036aad42808080808004841005200341003a00800920034180096a108903200041043a00000c400b200041023a00000c3f0b200041023a00000c3b0b20022d00000d2320022d000141ff01714102470d2320012802042105200341f0036a41186a22064200370300200341f0036a41106a22044200370300200341f0036a41086a22024200370300200342003703f00341d5a2ca00ad42808080809001841001221b2900002108201b290008211c201b102f2002201c370300200320083703f00341a2c9c300ad4280808080e000841001221b2900082108201b290000211c201b102f20034188026a41106a2207201c37030020034188026a41186a2209200837030020034188026a41086a220a2002290300370300200320032903f00337038802200341b8016a20034188026a412041c8e1ca004100410010b5014101211b20032802b8014101460d24200642003703002004420037030020024200370300200342003703f003418de6c300ad4280808080e000841001221b29000021082002201b41086a290000370300200320083703f003201b102f419ce6c300ad4280808080e000841001221b2900002108200341a8026a41086a2206201b41086a290000370300200320083703a802201b102f200420032903a8022208370300200a20022903003703002007200837030020092006290300370300200320032903f00337038802200341b0016a20034188026a4120109501024020032802b401410020032802b0011b2005490d00200341f0036a41186a4200370300200341f0036a41106a4200370300200341f0036a41086a22024200370300200342003703f00341d5a2ca00ad42808080809001841001221b2900002108201b290008211c201b102f2002201c370300200320083703f00341a2c9c300ad4280808080e000841001221b2900082108201b290000211c201b102f20034188026a41106a201c37030020034188026a41186a200837030020034188026a41086a2002290300370300200320032903f00337038802200320053602800920034188026aad428080808080048420034180096aad4280808080c000841004200041043a00004101211b0c460b200041831e3b0100200041086a4107360200200041046a41f5e1c3003602004101211b200041026a41013a00000c450b200141086a280200210420012802042105024020022d00000d004101211b20022d000141ff01714101470d00200041043a00004100210e2004450d2f0c2e0b200041023a00004100210e4101211b20040d2d0c2e0b20034180096a41386a200141c0006a29030037030020034180096a41306a200141386a29030037030020034180096a41286a200141306a29030037030020034180096a41206a200141286a29030037030020034180096a41186a200141206a29030037030020034180096a41106a200141186a29030037030020034180096a41086a200141106a2903003703002003200141086a29030037038009200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a108b034100210f4101211b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e0c630b20034180096a200141086a41880110e8061a200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a109c02410021104101211b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f0c630b200341d0026a41086a2205200141146a290200370300200341d0026a41106a22062001411c6a290200370300200341d0026a41186a2207200141246a29020037030020032001410c6a2902003703d0022002411a6a2901002108200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211a200141086a280200211b20022d0001210420022d00002102024002400240024020012802040e0400010203000b20034180096a41146a41013602002003420137028409200341b4d8c90036028009200341043602fc06200341fcdbc9003602f8062003200341f8066a3602900920034180096a41e8d8c9001043000b02400240200241ff01710d00200441ff01714101470d002003200837038806200320093a0087062003200a3a0086062003200b3b0184062003200c3a0083062003200d3a0082062003200e3b0180062003200f3a00ff05200320103a00fe05200320113b01fc05200320123a00fb05200320133a00fa05200320143b01f805200320153a00f705200320163a00f605200320173b01f405200320183a00f305200320193a00f2052003201a3b01f005200341f0036a41186a22064200370300200341f0036a41106a22044200370300200341f0036a41086a22024200370300200342003703f00341a4e3c400ad4280808080c000841001220529000021082002200541086a290000370300200320083703f0032005102f4180e4c400ad42808080803084100122052900002108200341a8026a41086a2207200541086a290000370300200320083703a8022005102f200420032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010ad0220032d0080092105200620034199096a290000370300200420034191096a290000370300200220034189096a29000037030020032003290081093703f0030240024020054101460d00200341f8076a41186a4200370300200341f8076a41106a4200370300200341f8076a41086a4200370300200342003703f8070c010b200341f8076a41186a2006290300370300200341f8076a41106a2004290300370300200341f8076a41086a2002290300370300200320032903f0033703f8070b200341f0056a200341f8076a412010ea060d0120034180096a201b41b00210e8061a200341003b01f807200341f8066a20034180096a200341f8076a108b0141012102024020032d00f8064104460d0020034180096a41086a200341f8066a41086a280200360200200320032903f8063703800920034180096a108c03410021020b200320023a0082092003410e3b01800941c8e1ca00410020034180096a108c01200041043a00000c2c0b200041023a00000c2a0b20004183263b0100200041086a410b360200200041046a4199b3c400360200200041026a41003a00000c290b200341f8066a41186a2007290300370300200341f8066a41106a2006290300370300200341f8066a41086a2005290300370300200320032903d0023703f806200241ff01710d22200441ff01714101470d222003200837038806200320093a0087062003200a3a0086062003200b3b0184062003200c3a0083062003200d3a0082062003200e3b0180062003200f3a00ff05200320103a00fe05200320113b01fc05200320123a00fb05200320133a00fa05200320143b01f805200320153a00f705200320163a00f605200320173b01f405200320183a00f305200320193a00f2052003201a3b01f005200341f0036a41186a22064200370300200341f0036a41106a22044200370300200341f0036a41086a22024200370300200342003703f00341a4e3c400ad4280808080c000841001220529000021082002200541086a290000370300200320083703f0032005102f4180e4c400ad42808080803084100122052900002108200341a8026a41086a2207200541086a290000370300200320083703a8022005102f200420032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010ad0220032d0080092105200620034199096a290000370300200420034191096a290000370300200220034189096a29000037030020032003290081093703f0030240024020054101460d00200341f8076a41186a4200370300200341f8076a41106a4200370300200341f8076a41086a4200370300200342003703f8070c010b200341f8076a41186a2006290300370300200341f8076a41106a2004290300370300200341f8076a41086a2002290300370300200320032903f0033703f8070b200341f0056a200341f8076a412010ea060d232003418c096a200341f8066a41086a29030037020020034194096a200341f8066a41106a2903003702002003419c096a200341f8066a41186a2903003702002003201b36028009200320032903f80637028409200341f8076a20034180096a10bb0120034188026a41086a2202200341f8076a41096a29000037030020034188026a41106a221b200341f8076a41116a29000037030020034188026a41186a2205200341f8076a41196a290000370300200320032900f90737038802024020032d00f8074101460d00200341f0046a41186a2005290300370300200341f0046a41106a201b290300370300200341f0046a41086a200229030037030020032003290388023703f00442002108200341f0036a41186a22074200370300200341f0036a41106a22094200370300200341f0036a41086a22064200370300200342003703f00341a4e3c400ad4280808080c00084221c1001220a290000211d2006200a41086a2900003703002003201d3703f003200a102f4180e4c400ad42808080803084221d1001220a290000211e200341a8026a41086a220b200a41086a2900003703002003201e3703a802200a102f200420032903a802370000200441086a200b29030037000020022006290300370300201b200929030037030020052007290300370300200320032903f0033703880220034180096a20034188026a412010ad0220032d008009211b200720034180096a41196a290000370300200920034180096a41116a290000370300200620034180096a41096a29000037030020032003290081093703f0034100210241002104410021054100210641002107410021094100210a4100210b4100210c4100210d4100210e4100210f4100211041002111410021124100211341002114410021150240201b4101470d00200329038804210820032d008704210220032d008604210420032f018404210520032d008304210620032d008204210720032f018004210920032d00ff03210a20032d00fe03210b20032f01fc03210c20032d00fb03210d20032d00fa03210e20032f01f803210f20032d00f703211020032d00f603211120032f01f403211220032d00f303211320032d00f203211420032f01f00321150b2003419a096a200837010020034199096a20023a000020034180096a41186a221b20043a000020034196096a20053b010020034195096a20063a000020034194096a20073a000020034192096a20093b010020034191096a200a3a000020034180096a41106a2204200b3a00002003418e096a200c3b01002003418d096a200d3a00002003418c096a200e3a00002003418a096a200f3b010020034189096a20103a000020034180096a41086a220520113a0000200320123b018609200320133a008509200320143a008409200320153b0182092003418e023b01800941c8e1ca00410020034180096a108c01201b200341f0046a41186a2903003703002004200341f0046a41106a2903003703002005200341f0046a41086a290300370300200320032903f00437038009201c1001220229000021082002290008211c2002102f201d10012202290000211d2002290008211e2002102f2003201e370388042003201d370380042003201c3703f803200320083703f0034120102d2202450d4f2002200329038009370000200241186a201b290300370000200241106a2004290300370000200241086a2005290300370000200341f0036aad42808080808004842002ad428080808080048410042002102f200041043a00000c2b0b200041013a00000c2a0b2001412c6a2802002120200341f8066a41186a2007290300370300200341f8066a41106a2006290300370300200341f8066a41086a2005290300370300200320032903d0023703f806024002400240200241ff01710d00200441ff01714101470d002003200837038806200320093a0087062003200a3a0086062003200b3b0184062003200c3a0083062003200d3a0082062003200e3b0180062003200f3a00ff05200320103a00fe05200320113b01fc05200320123a00fb05200320133a00fa05200320143b01f805200320153a00f705200320163a00f605200320173b01f405200320183a00f305200320193a00f2052003201a3b01f005200341f0036a41186a22064200370300200341f0036a41106a22044200370300200341f0036a41086a22024200370300200342003703f00341a4e3c400ad4280808080c000841001220529000021082002200541086a290000370300200320083703f0032005102f4180e4c400ad42808080803084100122052900002108200341a8026a41086a2207200541086a290000370300200320083703a8022005102f200420032903a802220837030020034188026a41086a200229030037030020034188026a41106a200837030020034188026a41186a2007290300370300200320032903f0033703880220034180096a20034188026a412010ad0220032d0080092105200620034199096a290000370300200420034191096a290000370300200220034189096a29000037030020032003290081093703f0030240024020054101460d00200341f8076a41186a4200370300200341f8076a41106a4200370300200341f8076a41086a4200370300200342003703f8070c010b200341f8076a41186a2006290300370300200341f8076a41106a2004290300370300200341f8076a41086a2002290300370300200320032903f0033703f8070b200341f0056a200341f8076a412010ea060d0120034180096a410c6a200341f8066a41086a29030037020020034180096a41146a200341f8066a41106a2903003702002003419c096a200341f8066a41186a2903003702002003201b36028009200320032903f80637028409200341f8076a20034180096a10bb014101210220032d00f8074101460d02200341f8076a41086a2d0000211b20034181086a2f0000210420034183086a2d00002105200341f8076a410c6a2d0000210620034185086a2f0000210720034187086a2d00002109200341f8076a41106a2d0000210a20034189086a2f0000210b2003418b086a2d0000210c200341f8076a41146a2d0000210d2003418d086a2f0000210e2003418f086a2d0000210f200341f8076a41186a2d0000211020032f00f907211120032d00fb07211220032d00fc07211320032f00fd07211420032d00ff072115200320034191086a29000037038804200320103a0087042003200f3a0086042003200e3b0184042003200d3a0083042003200c3a0082042003200b3b0180042003200a3a00ff03200320093a00fe03200320073b01fc03200320063a00fb03200320053a00fa03200320043b01f8032003201b3a00f703200320153a00f603200320143b01f403200320133a00f303200320123a00f203200320113b01f00320034180096a202041b00210e8061a20034182086a20032903f8033701002003418a086a20032903800437010020034192086a20032903880437010020034180023b01f807200320032903f0033701fa07200341f0046a20034180096a200341f8076a108b01024020032d00f0044104460d0020034180096a41086a200341f0046a41086a280200360200200320032903f0043703800920034180096a108c03410021020b200320023a0082092003418e043b01800941c8e1ca00410020034180096a108c01200041043a00002020102f0c2c0b200041023a00000c280b20004183263b0100200041086a410b360200200041046a4199b3c400360200200041026a41003a00000c270b200041013a00000c260b2001411c6a280200210b200141186a280200210d200141146a280200210c2001410c6a280200210e200141086a280200211002400240024020022d00000d0020022d000141ff01714102470d00200141246a280200210f200141106a2802002107200341f0036a41186a22054200370300200341f0036a41106a22064200370300200341f0036a41086a221b4200370300200342003703f003419c9eca00ad4280808080f00084100122022900002108201b200241086a290000370300200320083703f0032002102f41a39eca00ad4280808080c001841001220229000821082002290000211c2002102f20034188026a41106a201c37030020034188026a41186a200837030020034188026a41086a201b290300370300200320032903f00337038802200341c8016a20034188026a412010950120032802cc01210420032802c801210941d39bca00ad4280808080800184100122022900002108200341a8026a41086a220a200241086a290000370300200320083703a8022002102f41db9bca00ad4280808080a0028410012202290008210820022d0007211120022d0006211220022f0004211320022d0003211420022d0002211520022f000021162002102f20032004410020091b22173602800920034180096aad22214280808080c00084221c10032202290000211d200241086a290000211e200241106a290000211f2005200241186a2900003703002006201f370300201b201e3703002003201d3703f0032002102f41c000102d2202450d4f200220032903a802370000200241086a200a290300370000200220113a0017200220123a0016200220133b0014200220143a0013200220153a0012200220163b001020022008370018200220032903f003370020200241286a201b290300370000200241306a2006290300370000200241386a20052903003700002003200f36028009201c100322042900002108200441086a290000211c200441106a290000211d2005200441186a2900003703002006201d370300201b201c370300200320083703f0032004102f200241c00041800110312202450d4f200220032903f003370040200241d8006a200341f0036a41186a2204290300370000200241d0006a200341f0036a41106a2205290300370000200241c8006a200341f0036a41086a221b290300370000200341c0016a200241e00041c8e1ca004100410010b50120032802c00121062002102f2004420037030020054200370300201b4200370300200342003703f00341d39bca00ad4280808080800184100122022900002108201b200241086a290000370300200320083703f0032002102f419087ca00ad4280808080c000841001220229000821082002290000211c2002102f20034188026a41106a201c37030020034188026a41186a200837030020034188026a41086a201b290300370300200320032903f0033703880220034180096a20034188026a108d032003280280092202410120021b2111200329028409420020021b210802402006410146221b0d002011200f4105746a4100200f2008422088a7491b22020d030b20004183283b0100200041026a201b3a0000200041086a4113410a201b1b360200200041046a41d0e0c30041e3e0c300201b1b3602002008a7450d012011102f0c010b200041023a00000b0240200e450d002010102f0b200b450d25200b410c6c2100200c210203400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000c260b0b200241086a290000211c200241106a290000211d2002290000211e20034188026a41186a200241186a290000221f37030020034188026a41106a201d37030020034188026a41086a201c3703002003201e370388022003418d096a201c37000020034195096a201d3700002003419d096a201f370000200341003a0084092003410f3a0080092003201e3700850941c8e1ca00410020034180096a108c0120034100360288092003420137038009200720034180096a106902400240200328028409221b20032802880922026b2007490d00200328028009211b0c010b200220076a22042002490d37201b41017422052004200520044b1b22044100480d3702400240201b0d002004102d211b0c010b200328028009201b20041031211b0b201b450d4d20032004360284092003201b360280090b2003200220076a36028809201b20026a2010200710e8061a200b20034180096a1069200b450d22200c200b410c6c6a210a200c211b0340201b2802002107201b41086a280200220220034180096a106902400240200328028409220620032802880922046b2002490d0020032802800921050c010b200420026a22052004490d38200641017422092005200920054b1b22094100480d380240024020060d002009102d21050c010b20032802800920062009103121050b2005450d4e20032009360284092003200536028009200921060b2003200420026a220936028809200520046a2007200210e8061a201b410c6a221b200a470d000c240b0b20034180096a200141086a41a80210e8061a200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a10b201410021134101211b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f410121104101211141012112410121000c630b20034180096a200141046a41c40010e8061a200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a108e03410021144101211b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f41012110410121114101211241012113410121000c630b20034180096a200141086a41c80010e8061a200341f8076a41206a200241206a290200370300200341f8076a41186a200241186a290200370300200341f8076a41106a200241106a290200370300200341f8076a41086a200241086a290200370300200320022902003703f807200020034180096a200341f8076a108f03410021004101211b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f410121104101211141012112410121130c610b200041023a0000410121044101211b410121050c530b200041023a00004101211b0c3b0b20004183363b0100200041086a4109360200200041046a41e1f0c000360200200041026a41023a00004101211b0c3a0b20004183363b0100200041086a4117360200200041046a41e6b4c600360200200041026a41013a00000c390b103d000b200041023a00004101211b0c4d0b200041023a00004101211b0c360b41b5e4c000413041f8b4ca001039000b200041023a00004101211b0c340b200041023a00004101211b0c330b410121054188d9c9002106410821070c2f0b200041830a3b0100200041086a410b360200200041046a41f8d8c900360200200041026a41033a00004101211b0c310b410121044188d9c9002105410821060c2c0b200041023a00004101211b0c2f0b200041023a00004101211b0c2e0b200041023a00004101211b0c2d0b200341f0036a41186a220b4200370300200341f0036a41106a22044200370300200341f0036a41086a221b4200370300200342003703f00341e7a2ca00ad4280808080800184221e10012209290000211f2009290008212e2009102f201b202e3703002003201f3703f00341ecb5c600ad4280808080d00184221f1001220a290000212e200341a8026a41086a2209200a41086a2900003703002003202e3703a802200a102f200420032903a802222e37030020034188026a41086a220c201b29030037030020034188026a41106a220d202e37030020034188026a41186a220e2009290300370300200320032903f0033703880220034180016a20034188026a4120109c0120034180016a41106a290300212e200329038801212f200328028001210a200b420037030020044200370300201b4200370300200342003703f003201e1001220b290000211e200b2900082130200b102f201b20303703002003201e3703f003201f1001220b290000211e2009200b41086a2900003703002003201e3703a802200b102f200420032903a802221e370300200c201b290300370300200d201e370300200e2009290300370300200320032903f003370388022003427f202e4200200a1b221e2008201d7d201c202154ad7d7c202f4200200a1b221f201c20217d7c2221201f54221bad7c221f201b201f201e54201f201e511b221b1b370388092003427f2021201b1b3703800920034180096a211b20034188026a21040c260b200041023a00004101211b0c2b0b200041023a00004101211b0c2a0b200041023a00000c220b419ae3c300411e41f8b4ca001039000b200041023a00000c1c0b41b8e3c300411d41f8b4ca001039000b200041023a00000c1a0b200041043a00000c190b200041023a00000c180b200041023a00000c170b200041023a00004101211b0c210b200041831e3b0100200041086a410e360200200041046a41e7e1c300360200200041026a41003a00000c200b200041023a00000c070b20004183263b0100200041086a410b360200200041046a4199b3c400360200200041026a41003a00000c060b2003280288092109200328028409210620032802800921050b41d39bca00ad428080808080018410012202290000211c200341a8026a41086a221b200241086a2900003703002003201c3703a8022002102f41db9bca00ad4280808080a0028410012202290008211c20022d0007211220022d0006211320022f0004211420022d0003211520022d0002211620022f000021182002102f200320173602800920214280808080c00084221d10032202290000211e200241086a290000211f200241106a2900002121200341f0036a41186a2204200241186a290000370300200341f0036a41106a22072021370300200341f0036a41086a220a201f3703002003201e3703f0032002102f41c000102d2202450d28200220032903a802370000200241086a201b290300370000200220123a0017200220133a0016200220143b0014200220153a0013200220163a0012200220183b00102002201c370018200220032903f003370020200241286a200a290300370000200241306a2007290300370000200241386a20042903003700002003200f36028009201d1003221b290000211c201b41086a290000211d201b41106a290000211e2004201b41186a2900003703002007201e370300200a201d3703002003201c3703f003201b102f200241c00041800110312202450d28200220032903f003370040200241d8006a20034188046a290300370000200241d0006a20034180046a290300370000200241c8006a200341f8036a290300370000200341e0003602840920032002360280092005200920034180096a109d022002102f02402006450d002005102f0b02402008a7450d002011102f0b200041043a00000240200e450d002010102f0b200b450d00200b410c6c2100200c210203400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000b0b410021124101211b0240200d450d00200c102f0b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f41012110410121110c3e0b2020108e012020102f0c020b201b108e010b201b102f0b41002111410121044101211b410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f410121100c390b2005102f0b41012104410121054101210641012107410121094101210a4101210b4101210c4101210d0c340b2009201b4105746a200341d0026a412010ea060d01410d210d41f2b6c400210e4100210a0b200041831c3b0100200041086a200d360200200041046a200e360200200041026a200a3a00002008a7450d082009102f0c080b20034188026a41186a2206200341d0026a41186a29030037030020034188026a41106a2207200341d0026a41106a29030037030020034188026a41086a221b200341d0026a41086a290300370300200320032903d002370388022002200c4f0d01200f200329038802370000200f41186a2006290300370000200f41106a2007290300370000200f41086a201b2903003700002009200c108701200341f0046a41186a22074200370300200341f0046a41106a22064200370300200341f0046a41086a22024200370300200342003703f00441eba1c600ad4280808080b00284221c1001220a290000211d201b200a41086a2900003703002003201d37038802200a102f2002201b29030037030020032003290388023703f00441ebdec700ad4280808080f000841001220a290000211d201b200a41086a2900003703002003201d37038802200a102f2006200329038802221d370300200341f0036a41086a220e2002290300370300200341f0036a41106a220f201d370300200341f0036a41186a2210201b290300370300200320032903f0043703f00320034120360284092003200341f0036a360280092009200c20034180096a10aa0120034180096a41186a200341f8066a41186a29030037030020034180096a41106a200341f8066a41106a29030037030020034180096a41086a200341f8066a41086a290300370300200320032903f806370380094101210d20034180096a41012009200c108803200742003703002006420037030020024200370300200342003703f004201c1001220a290000211c201b200a41086a2900003703002003201c37038802200a102f2002201b29030037030020032003290388023703f00441fbd4c700ad4280808080d000841001220a290000211c201b200a41086a2900003703002003201c37038802200a102f2006200329038802221c370300200e2002290300370300200f201c3703002010201b290300370300200320032903f0043703f00320034180096a200341f0036a412010ad0220032d008009211b200720034180096a41196a290000370300200620034180096a41116a290000370300200220034180096a41096a29000037030020032003290081093703f00402400240201b4101460d004100210d200341003a00f0050c010b200341f0056a41096a200341f8046a290300370000200341f0056a41116a20034180056a290300370000200341f0056a41196a20034188056a290300370000200341013a00f005200320032903f0043700f1050b20034199096a20034190076a29030037000020034191096a20034188076a29030037000020034189096a20034180076a290300370000200320032903f80637008109200341013a0080090240200d450d00200341f0056a41017220034180096a410172412010ea060d00200341f0046a41186a220a4200370300200341f0046a41106a220c4200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012207290000211c20034188026a41086a2202200741086a2900003703002003201c370388022007102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d0008410012207290000211c2002200741086a2900003703002003201c370388022007102f2006200329038802370000200641086a2002290300370000200341f0036a41086a201b290300370300200341f0036a41106a200c290300370300200341f0036a41186a200a290300370300200320032903f0043703f0034120102d2202450d1f200220032903d002370000200241186a200341d0026a41186a221b290300370000200241106a200341d0026a41106a2206290300370000200241086a200341d0026a41086a2207290300370000200341f0036aad42808080808004842002ad428080808080048410042002102f20034199096a201b29030037000020034191096a200629030037000020034189096a2007290300370000200320032903d00237008109200341013a00800920034180096a1089030b2008a7450d002009102f0b2003418a083b01800941c8e1ca00410020034180096a108c01200041043a00000c060b419cc3ca002002200c103b000b2009201b4105746a200341d0026a412010ea060d01410d210d41f2b6c400210e4100210c0b200041831c3b0100200041086a200d360200200041046a200e360200200041026a200c3a00002008a7450d032009102f0c030b200341f0036a41186a2207200341d0026a41186a290300370300200341f0036a41106a220c200341d0026a41106a290300370300200341f0036a41086a220d200341d0026a41086a290300370300200320032903d0023703f00302402002200a4f0d00200f20032903f003370000200f41186a2007290300370000200f41106a200c290300370000200f41086a200d2903003700002009200a10870120034188026a41186a420037030020034188026a41106a420037030020034188026a41086a22024200370300200342003703880241eba1c600ad4280808080b00284221c1001221b290000211d201b290008211e201b102f2002201e3703002003201d3703880241ebdec700ad4280808080f000841001221b290008211d201b290000211e201b102f200341f0046a41106a2206201e370300200341f0046a41186a220e201d370300200341f0046a41086a221b200229030037030020032003290388023703f00420034120360284092003200341f0046a360280092009200a20034180096a10aa0120034180096a41186a200341e0016a41186a29030037030020034180096a41106a200341e0016a41106a29030037030020034180096a41086a200341e0016a41086a290300370300200320032903e0013703800920034180096a41012009200a108803200e420037030020064200370300201b4200370300200342003703f004201c1001220f290000211c2002200f41086a2900003703002003201c37038802200f102f201b200229030037030020032003290388023703f00441fbd4c700ad4280808080d000841001220f290000211c2002200f41086a2900003703002003201c37038802200f102f2006200329038802221c370300200d201b290300370300200c201c37030020072002290300370300200320032903f0043703f00320034180096a200341f0036a412010ad0220032d0080092102200e20034199096a290000370300200620034191096a290000370300201b20034189096a29000037030020032003290081093703f004024020024101470d00200341f8066a41186a200341f0046a41186a290300221c370300200341f8066a41106a200341f0046a41106a290300221d370300200341f8066a41086a200341f0046a41086a290300221e370300200320032903f004221f3703f806200341f0056a41186a201c370300200341f0056a41106a201d370300200341f0056a41086a201e3703002003201f3703f005410021020240200a4101460d004100210203402002200a410176221b20026a2206200920064105746a200341f0056a412010ea0641004a1b2102200a201b6b220a41014b0d000b0b0240200920024105746a200341f0056a412010ea06450d00200341d0036a41186a4200370300200341d0036a41106a22064200370300200341d0036a41086a22024200370300200342003703d00341eba1c600ad4280808080b002841001221b290000211c200341b8026a41086a2207201b41086a2900003703002003201c3703b802201b102f20022007290300370300200320032903b8023703d00341fbd4c700ad4280808080d000841001221b290000211c200341a8026a41086a2207201b41086a2900003703002003201c3703a802201b102f200620032903a802221c37030020034180096a41086a200229030037030020034180096a41106a201c37030020034180096a41186a2007290300370300200320032903d0033703800920034180096aad428080808080048410050c010b20034199096a20034188066a29030037000020034191096a20034180066a29030037000020034189096a200341f8056a290300370000200320032903f00537008109200341013a00800920034180096a1089030b2003418a043b01800941c8e1ca00410020034180096a108c0102402008a7450d002009102f0b200041043a00000c030b419cc3ca002002200a103b000b20034180096a41186a200341f0056a41186a29030037030020034180096a41106a200341f0056a41106a29030037030020034180096a41086a200341f0056a41086a290300370300200320032903f005370380094100210a20034180096a211b410021060b0240200a200d470d00200c200a470d00200c41016a2202200c490d02200c41017422072002200720024b1b220241ffffff3f712002470d02200241057422024100480d0202400240200c0d002002102d21090c010b2009200c4105742002103121090b2009450d18200320093602f8062002410576210c0b200920064105746a220241206a2002200a20066b41057410e9061a200241186a201b41186a290000370000200241106a201b41106a290000370000200241086a201b41086a2900003700002002201b290000370000200341f0046a41186a4200370300200341f0046a41106a22074200370300200341f0046a41086a221b4200370300200342003703f00441eba1c600ad4280808080b0028410012206290000210820034188026a41086a2202200641086a29000037030020032008370388022006102f201b200229030037030020032003290388023703f00441ebdec700ad4280808080f000841001220629000021082002200641086a29000037030020032008370388022006102f20072003290388022208370300200341f0036a41086a201b290300370300200341f0036a41106a2008370300200341f0036a41186a2002290300370300200320032903f0043703f00320034120360284092003200341f0036a3602800920032802f806200a41016a220220034180096a10aa0120034180096a41186a200341f0056a41186a29030037030020034180096a41106a200341f0056a41106a29030037030020034180096a41086a200341f0056a41086a290300370300200320032903f0053703800941c8e1ca00410020032802f806221b20021088032003410a3b01800941c8e1ca00410020034180096a108c010240200c450d00201b102f0b200041043a00000b200b4104470d0220050d010c020b1038000b2004102f0b4100210d410121044101211b410121054101210641012107410121094101210a4101210b4101210c0c250b41002107410121044101211b41012105410121060c1f0b2004ad4280808080800484201bad4280808080800284100420032903c002211f20032903b802211e0b202b202d7c2121200341f0046a41106a211b024002400240201e202256201f202356201f20235122041b0d00201e202254201f20235420041b450d02200341f0036a41186a220c4200370300200341f0036a41106a22094200370300200341f0036a41086a22044200370300200342003703f00341e7a2ca00ad4280808080800184222b1001220a290000212d200a290008212e200a102f2004202e3703002003202d3703f00341ecb5c600ad4280808080d00184222d1001220b290000212e200341a8026a41086a220a200b41086a2900003703002003202e3703a802200b102f200920032903a802222e37030020034188026a41086a220d200429030037030020034188026a41106a220e202e37030020034188026a41186a220f200a290300370300200320032903f00337038802200341e8006a20034188026a4120109c01200341e8006a41106a290300212e2003290370212f2003280268210b200c42003703002009420037030020044200370300200342003703f003202b1001220c290000212b200c2900082130200c102f200420303703002003202b3703f003202d1001220c290000212b200a200c41086a2900003703002003202b3703a802200c102f200920032903a802222b370300200d2004290300370300200e202b370300200f200a290300370300200320032903f0033703880220034200202e4200200b1b222b2022201e54ad201f20237d7c7c202f4200200b1b22232022201e7d222d54ad7d22222023202d7d222d2023562022202b562022202b511b22041b3703880920034200202d20041b3703800920034180096a210420034188026a21090c010b200341f0036a41186a220c4200370300200341f0036a41106a22094200370300200341f0036a41086a22044200370300200342003703f00341e7a2ca00ad4280808080800184222b1001220a290000212d200a290008212e200a102f2004202e3703002003202d3703f00341ecb5c600ad4280808080d00184222d1001220b290000212e200341a8026a41086a220a200b41086a2900003703002003202e3703a802200b102f200920032903a802222e37030020034188026a41086a220d200429030037030020034188026a41106a220e202e37030020034188026a41186a220f200a290300370300200320032903f00337038802200341d0006a20034188026a4120109c01200341d0006a41106a290300212e2003290358212f2003280250210b200c42003703002009420037030020044200370300200342003703f003202b1001220c290000212b200c2900082130200c102f200420303703002003202b3703f003202d1001220c290000212b200a200c41086a2900003703002003202b3703a802200c102f200920032903a802222b370300200d2004290300370300200e202b370300200f200a290300370300200320032903f003370388022003427f202e4200200b1b222b201f20237d201e202254ad7d7c202f4200200b1b2223201e20227d7c222d2023542204ad7c222220042022202b542022202b511b22041b370388092003427f202d20041b3703800920034180096a210420034188026a21090b2009ad42808080808004842004ad428080808080028410040b2021201d5121092021201d54210a2003201c3703f0042003201f370388052003201e37038005200320083703f80420032802cc022104200341f0036a41186a201b41086a290300221d370300200341f0036a41206a220b201b41106a29030037030020034198046a220c201b41186a290300370300200341a0046a220d201b41206a290300370300200320083703f8032003201c3703f0032003201b29030022223703800402400240427f201c20227c22222022201c54221b2008201d7c201bad7c221d200854201d2008511b221b1b2222428080e983b1de16544100427f201d201b1b2223501b0d00200341f0036a41106a2903002122200d2903002123200c290300212b200b290300212d20032903f803212e20032903f003212f4201211d20032903880421300c010b4200211d02402022202384500d0020222023109a01200341b8096a2023370300200341b0096a202237030020034180096a41086a41013a000020034189096a200429000037000020034191096a200441086a29000037000020034199096a200441106a290000370000200341a1096a200441186a290000370000200341033a00800941c8e1ca00410020034180096a108c010b0b2007200a20091b211b200341a0076a202d370300200341a8076a202b37030020034188076a202e370300200341b0076a202337030020034190076a202237030020032030370398072003202a3703b8072003202f37038007200320064100202442015122071b3a00c40720032005410020071b3602c0072003201d4201512205ad3703f8060240024020050d002002ad428080808080088410050c010b200341c00036028409200320023602800920034180076a20034180096a1090030b427f2021201b1b2121427f202c201b1b21222002102f201d420152210202400240024020244201510d0020020d004103211b200341f8076a21020c010b20244201522002410173720d014104211b200341f0056a21020b200241046a201b3a0000200241056a20032903d003370000200241003a00002002410d6a200341d8036a290300370000200241156a200341e0036a2903003700002002411d6a200341e8036a29030037000041c8e1ca0041002002108c010b0240202220218450450d00200341b8096a2008370300200341b0096a201c37030020034180096a41086a41003a000020034189096a200429000037000020034191096a200441086a29000037000020034199096a200441106a290000370000200341a1096a200441186a290000370000200341033a00800941c8e1ca00410020034180096a108c010b200341c8096a201f370300200341c0096a201e370300200341b8096a2008370300200341b0096a201c37030020034180096a41086a41033a000020034189096a20032903d00337000020034191096a200341d0036a41086a29030037000020034199096a200341e0036a290300370000200341a1096a200341e8036a290300370000200341033a00800941c8e1ca00410020034180096a108c01200041043a00004101211b0c040b024020032802f403450d00201b102f0b024020024104470d0020034188096a20173602004101211b200341013a008409200341023a00800941c8e1ca00410020034180096a108c01200041043a00000c040b200041053a0001200020023a0000200041086a2006360200200041046a2005360200200041026a20043a00004101211b0c030b024020032802f404450d00201b102f0b0240200241ff01714104470d00200341a8096a20183602002003418d096a200341f8056a29030037000020034195096a20034180066a2903003700002003419d096a20034188066a290300370000200341003a008409200341023a008009200320032903f0053700850941c8e1ca00410020034180096a108c01200041043a00004101211b0c030b200020043a0001200020023a0000200041086a2007360200200041046a2006360200200041036a20093a0000200041026a20053a00004101211b0c020b4100211b200241ff01714104470d00200341b0096a4200370300200341a8096a428080e983b1de1637030020034180096a41106a200341f0056a41086a29030037030020034180096a41186a200341f0056a41106a29030037030020034180096a41206a200341f0056a41186a2903003703002003420137038009200320032903f005370388094110102d2202450d0d20024110412010312202450d0d200220034180096a41086a221b290000370000200241186a201b41186a290000370000200241106a201b41106a290000370000200241086a201b41086a2900003700002002412041c00010312202450d0d2002428080e983b1de16370020200241286a4200370000200bad4220862004ad842002ad428080808080068410042002102f410421024101211b0b024020032802f403450d002004102f0b0240201b450d00200341a8096a20173602002003418d096a20034180076a29030037000020034195096a20034188076a2903003700002003419d096a20034190076a290300370000200341003a008409200341023a008009200320032903f8063700850941c8e1ca00410020034180096a108c01200041043a00004101211b0c010b2000200a3a0001200020023a0000200041086a2005360000200041046a2006360000200041036a20073a0000200041026a20093a00004101211b0b41012104410121050c160b200041086a201b360200200041046a2004360200200041026a201a3a000020004183083b01000240200328028c092202450d00200241246c2100200e210203400240024020022d0000221b41044b0d00024002400240201b0e050400010204040b2002410c6a280200450d03200241086a280200102f0c030b2002410c6a280200450d02200241086a280200102f0c020b2002410c6a280200450d01200241086a280200102f0c010b200241086a280200450d00200241046a280200102f0b200241246a21022000415c6a22000d000b0b0240200328028809450d00200e102f0b024020272005460d00034020061097010240200641046a280200450d002006280200102f0b200641f0006a2106200941907f6a22090d000b0b0240200c450d00200a102f0b20110d020c030b20272005460d00200a200741f0006c6a21040340200541046a221b109701200541f0006a21020240200541086a280200450d00201b280200102f0b2002210520042002470d000b0b0240200c450d00200a102f0b200341f0036a41186a4200370300200341f0036a41106a4200370300200341f0036a41086a22024200370300200342003703f003419487ca00ad4280808080a001841001221b2900002108201b290008211c201b102f2002201c370300200320083703f003418691c700ad4280808080e000841001221b2900082108201b290000211c201b102f20034188026a41106a201c37030020034188026a41186a200837030020034188026a41086a2002290300370300200320032903f0033703880220034180096a200d200f109103201e2003350288094220862003280280092202ad8410040240200328028409450d002002102f0b200041043a00002011450d010b200d102f0b410021054101211b0c020b200741f0006c2100200a41046a2102034020021097010240200241046a280200450d002002280200102f0b200241f0006a2102200041907f6a22000d000b0b410021054101211b200c450d00200a102f0b410121040c0e0b201e201c84202184202384201f201d8420228420248484500d014113210241e4e3c300211b410521040b200041033b0100200041086a2002360200200041046a201b360200200041026a20043a00004101211b0c0b0b418de6c300ad4280808080e00084100122022d000f211720022d000e211820022f000c211920022d000b211a20022d000a212020022f0008212820022d0007212920022d0006212720022f0004212520022d0003212620022d0002213120022f000021322002102f41f0e8c600ad4280808080f0008410012202290008211c20022d0007213320022d0006213420022f0004213520022d0003213620022d0002213720022f000021382002102f4120102d2202450d0020022008370018200220043a0017200220053a0016200220063b0014200220073a0013200220093a00122002200a3b00102002200b3a000f2002200c3a000e2002200d3b000c2002200e3a000b2002200f3a000a200220103b0008200220113a0007200220123a0006200220133b0004200220143a0003200220153a0002200220163b00002002ad42808080808004841003221b2900002108201b41086a290000211d201b41106a290000211e20034188026a41186a2204201b41186a29000037030020034188026a41106a2205201e37030020034188026a41086a2206201d3703002003200837038802201b102f2002102f41c000102d2202450d00200220173a000f200220183a000e200220193b000c2002201a3a000b200220203a000a200220283b0008200220293a0007200220273a0006200220253b0004200220263a0003200220313a0002200220323b0000200220333a0017200220343a0016200220353b0014200220363a0013200220373a0012200220383b00102002201c370018200241386a2004290300370000200241306a2005290300370000200241286a200629030037000020022003290388023700202002ad428080808080088410052002102f200041043a00004101211b0c0a0b1036000b200041033b0100200041086a201b360200200041046a2004360200200041026a200a3a000002402006450d002007102f0b02402009450d00200b102f0b2013450d05200f102f0c050b2009450d00200b102f0b2006450d010b2007102f0b2004450d00201b102f0b200041033b0100200041086a411d360200200041046a41f7e3c300360200200041026a41043a00000b4101211602402002450d002015102f0b41012117410121180b4101211b4100210402402005417e6a220241074b0d00410121054101210641012107410121094101210a4101210b4101210c4101210d4101210e4101210f410121104101211141012112410121134101210041012114024002400240024002400240024020020e080618040318020100060b41000d082008a70d070c080b2018450d0502402008422088a72202450d002002410c6c21002015210203400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000b0b2008a7450d050c030b2017450d0402402008422088a72202450d00200241186c21002015210203400240200241046a280200450d002002280200102f0b0240200241106a280200450d002002410c6a280200102f0b200241186a2102200041686a22000d000b0b2008a7450d040c020b41000d052008a70d040c050b20162008a745720d020b2015102f410121050c040b41000d022008a70d010c020b410121050c020b2015102f0b41002104410121050b410121060b410121070b410121090b4101210a0b4101210b0b4101210c0b4101210d0b4101210e0b4101210f0b410121100b410121110b410121120b41012113410121000b410121140b02402001280200220241194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020020e1a111012120f12120e0d0c0b0a0908120706050403121212020100110b2014450d1120012d0004417f6a220241024b0d110240024020020e03001301000b200141286a22012802001092032001280200102f0c120b2001410c6a280200450d11200141086a280200102f0c110b2000450d10200141086a2d00004108470d10200141346a280200450d10200141306a280200102f0c100b2013450d0f200141086a1093030c0f0b2012450d0e02402001410c6a280200450d00200141086a280200102f0b02402001411c6a2802002200450d00200141146a28020021022000410c6c210003400240200241046a280200450d002002280200102f0b2002410c6a2102200041746a22000d000b0b200141186a280200450d0e2001280214102f0c0e0b2011450d0d02402001280204220241024b0d00024020020e030f000f0f0b200141086a22012802001092032001280200102f0c0e0b2001412c6a22012802001092032001280200102f0c0d0b2010450d0c200141086a2d0000417e6a220241024b0d0c02400240024020020e03000102000b200141106a280200450d0e2001410c6a280200102f0c0e0b200141346a280200450d0d200141306a280200102f0c0d0b200141306a280200450d0c2001412c6a280200102f0c0c0b200f450d0b200141086a2d0000417c6a220241024b0d0b0240024020020e03000d01000b200141306a280200450d0c2001412c6a280200102f0c0c0b200141306a280200450d0b2001412c6a280200102f0c0b0b200e450d0a200141086a280200450d0a2001280204102f0c0a0b200d450d0920012d00044104470d092001410c6a280200450d09200141086a280200102f0c090b200c450d08200141086a2802004101470d08200141106a280200450d082001410c6a280200102f0c080b200b450d0720012d0004417f6a220241024b0d0702400240024020020e03000102000b2001412c6a280200450d09200141286a280200102f0c090b200141086a22012802001092032001280200102f0c080b2001410c6a22012802001092032001280200102f0c070b200a450d0620012d0004417f6a220241024b0d0602400240024020020e03000102000b2001412c6a280200450d08200141286a280200102f0c080b200141086a22012802001092032001280200102f0c070b2001410c6a22012802001092032001280200102f0c060b2009450d05200141086a2d0000416d6a220241014b0d050240024020020e020001000b200141106a280200450d062001410c6a280200102f0c060b200141106a280200450d052001410c6a280200102f0c050b2007450d0420012802042202450d04200141086a280200450d042002102f0c040b2006450d03200141086a1094030c030b2005450d0202402001410c6a2802002202450d00200241f0006c2100200128020441046a2102034020021097010240200241046a280200450d002002280200102f0b200241f0006a2102200041907f6a22000d000b0b200141086a280200450d022001280204102f0c020b201b450d01200141046a1095030c010b2004450d00200141086a1096030b200341b00b6a24000bd12e05087f037e047f017e037f23004180046b22032400200341186a4180e5c3004110109501200328021c2104200328021821054101210641002107410021080240024002400240024002402001450d00200141057422074100480d022007102d2206450d012001410574220941606a410576210a2006210720002108034020072008290000370000200741086a200841086a290000370000200741106a200841106a290000370000200741186a200841186a290000370000200741206a2107200841206a2108200941606a22090d000b200a41016a2108200121070b200341a4016a200436020020032005453602a001200341206a200241800110e8061a200341b0016a2008360200200341ac016a2007360200200320063602a801200341d0026a41186a22064200370300200341d0026a41106a22024200370300200341d0026a41086a22074200370300200342003703d002418de6c300ad4280808080e00084220b10012209290000210c200341c8036a41086a2208200941086a2900003703002003200c3703c8032009102f20072008290300370300200320032903c8033703d00241d882c400ad4280808080a00184220d10012204290000210c200341e0036a41086a2209200441086a2900003703002003200c3703e0032004102f200220032903e003220c370300200341f0026a41086a22042007290300370300200341f0026a41106a200c370300200341f0026a41186a22052009290300370300200320032903d0023703f002200341106a200341f0026a412010950102400240024002400240024002402003280214410020032802101b220e41016a220f200e490d0020064200370300200341d0026a41106a220a420037030020074200370300200342003703d002200b10012210290000210c2008201041086a2900003703002003200c3703c8032010102f20072008290300370300200320032903c8033703d002200d10012210290000210c2009201041086a2900003703002003200c3703e0032010102f200220032903e003370000200241086a2210200929030037000020042007290300370300200341f0026a41106a2211200a29030037030020052006290300370300200320032903d0023703f0022003200f3602b801200341f0026aad4280808080800484220c200341b8016aad4280808080c000841004200341b8016a200341206a41980110e8061a20064200370300200a420037030020074200370300200342003703d002200b1001220f290000210b2008200f41086a2900003703002003200b3703c803200f102f20072008290300370300200320032903c8033703d00241baebc300ad4280808080e0008410012208290000210b2009200841086a2900003703002003200b3703e0032008102f200220032903e00337000020102009290300370000200420072903003703002011200a29030037030020052006290300370300200320032903d0023703f002200341c8036a200c100210730240024020032802c803450d0020034190036a41086a200341c8036a41086a280200360200200320032903c803370390030c010b200341003602e803200342083703e0034104102d2207450d08200342043702d402200320073602d0024100200341d0026a106920034198036a20032802d802360200200320032903d00237039003200341e0036a10f4030b200341a0036a41086a20034190036a41086a280200220736020020032003290390033703a003024002402007450d00200341d0026a20032802a0032007410110c40220032802d0024101470d0120032802a403450d0c20032802a003102f0c0c0b4101200341a0036a10690240024020032802b8024101460d000240024020032802a40320032802a8032207460d0020032802a00321080c010b200741016a22082007490d0c200741017422092008200920084b1b22094100480d0c0240024020070d002009102d21080c010b20032802a00320072009103121080b2008450d0b200320093602a403200320083602a00320032802a80321070b2003200741016a3602a803200820076a41003a000020032802bc0221090240024020032802a403220820032802a80322076b4104490d0020032802a00321080c010b200741046a22062007490d0c200841017422072006200720064b1b22074100480d0c0240024020080d002007102d21080c010b20032802a00320082007103121080b2008450d0b200320073602a403200320083602a00320032802a80321070b2003200741046a3602a803200820076a20093600000c010b0240024020032802a40320032802a8032207460d0020032802a00321080c010b200741016a22082007490d0b200741017422092008200920084b1b22094100480d0b0240024020070d002009102d21080c010b20032802a00320072009103121080b2008450d0a200320093602a403200320083602a00320032802a80321070b2003200741016a3602a803200820076a41013a00000b200341b8016a200341a0036a10ef0220032802c00220032802c802200341a0036a1089010c060b20032802d40221060240200341dc026a2802002207200341d0026a41086a2802002208460d0020032802a803200720086b6a220941046a2204417f4c0d0a0240024020040d00410121050c010b2004102d2205450d090b200320043602b403200320053602b003200320093602b8032003200341b0036a3602d0022006200341d0026a200710c50220092007490d0220032802b80322062009490d0320032802a80322062008490d0420032802b003210420032802a00321052003200920076b22093602c0032003200620086b22063602c40320092006470d05200420076a200520086a200910e8061a0240024020032802b8024101460d000240024020032802b40320032802b8032207460d0020032802b00321080c010b200741016a22082007490d0c200741017422092008200920084b1b22094100480d0c0240024020070d002009102d21080c010b20032802b00320072009103121080b2008450d0b200320093602b403200320083602b00320032802b80321070b2003200741016a3602b803200820076a41003a000020032802bc0221090240024020032802b403220820032802b80322076b4104490d0020032802b00321080c010b200741046a22062007490d0c200841017422072006200720064b1b22074100480d0c0240024020080d002007102d21080c010b20032802b00320082007103121080b2008450d0b200320073602b403200320083602b00320032802b80321070b2003200741046a3602b803200820076a20093600000c010b0240024020032802b40320032802b8032207460d0020032802b00321080c010b200741016a22082007490d0b200741017422092008200920084b1b22094100480d0b0240024020070d002009102d21080c010b20032802b00320072009103121080b2008450d0a200320093602b403200320083602b00320032802b80321070b2003200741016a3602b803200820076a41013a00000b200341b8016a200341b0036a10ef0220032802c00220032802c802200341b0036a10890120032802b803210820032802b403210920032802b003210720032802a403450d0720032802a003102f0c070b2003200341a0036a3602d0022006200341d0026a200810c5020240024020032802b8024101460d000240024020032802a40320032802a8032207460d0020032802a00321080c010b200741016a22082007490d0b200741017422092008200920084b1b22094100480d0b0240024020070d002009102d21080c010b20032802a00320072009103121080b2008450d0a200320093602a403200320083602a00320032802a80321070b2003200741016a3602a803200820076a41003a000020032802bc0221090240024020032802a403220820032802a80322076b4104490d0020032802a00321080c010b200741046a22062007490d0b200841017422072006200720064b1b22074100480d0b0240024020080d002007102d21080c010b20032802a00320082007103121080b2008450d0a200320073602a403200320083602a00320032802a80321070b2003200741046a3602a803200820076a20093600000c010b0240024020032802a40320032802a8032207460d0020032802a00321080c010b200741016a22082007490d0a200741017422092008200920084b1b22094100480d0a0240024020070d002009102d21080c010b20032802a00320072009103121080b2008450d09200320093602a403200320083602a00320032802a80321070b2003200741016a3602a803200820076a41013a00000b200341b8016a200341a0036a10ef0220032802c00220032802c802200341a0036a1089010c050b200341206a1088040c0a0b20072009104b000b20092006104a000b20082006104b000b200341e0036a41146a4109360200200341ec036a410a360200200341c8036a41146a41033602002003200341c0036a3602f8032003200341c4036a3602fc03200341d0026a41146a4100360200200342033702cc03200341b4e0ca003602c8032003410a3602e403200341c8e1ca003602e002200342013702d40220034188e1ca003602d0022003200341e0036a3602d8032003200341d0026a3602f0032003200341fc036a3602e8032003200341f8036a3602e003200341c8036a41c8e1ca001043000b20032802a803210820032802a403210920032802a00321070b2007450d03200c2008ad4220862007ad84100402402009450d002007102f0b200341b8016a108804200341d0026a41186a22044200370300200341d0026a41106a22054200370300200341d0026a41086a22064200370300200342003703d002418de6c300ad4280808080e00084221210012207290000210b200341c8036a41086a2209200741086a2900003703002003200b3703c8032007102f20062009290300370300200320032903c8033703d002419ce6c300ad4280808080e0008410012207290000210b200341e0036a41086a220a200741086a2900003703002003200b3703e0032007102f200220032903e003370000200241086a200a290300370000200341f0026a41086a22132006290300370300200341f0026a41106a2005290300370300200341f0026a41186a2004290300370300200320032903d0023703f002200341086a200341f0026a41201095012001450d04200328020c410020032802081b2114200141057421020340201210012207290000210b2009200741086a2900003703002003200b3703c8032007102f41c0ebc300ad4280808080b0018410012207290000210b200a200741086a2900003703002003200b3703e0032007102f4120102d2207450d0120072000290000370000200741186a200041186a290000370000200741106a200041106a290000370000200741086a200041086a2900003700002007ad428080808080048410032208290000210b200841086a290000210c200841106a290000210d2004200841186a2900003703002005200d3703002006200c3703002003200b3703d0022008102f2007102f41c000102d2207450d01200720032903c803370000200720032903e003370010200720032903d002370020200741086a2009290300370000200741186a200a290300370000200741286a2006290300370000200741306a2005290300370000200741386a2004290300370000200341f0026a2007ad4280808080800884220b100210730240024020032802f002450d00200341b0036a41086a2013280200360200200320032903f0023703b0030c010b4104102d2208450d02200342043702bc01200320083602b8014100200341b8016a1069200341b0036a41086a20032802c001360200200320032903b8013703b0030b2009200341b0036a41086a2802002208360200200320032903b0033703c8030240024002400240024002400240024002400240024002402008450d00200341b8016a20032802c8032008410110c40220032802b8014101460d0420032802bc01211020032802c401220820032802c0012201460d0320032802d003200820016b6a220f41046a2211417f4c0d0f20110d01410121150c020b4101200341c8036a10690240024020032802cc03220120032802d00322086b4104490d0020032802c80321010c010b200841046a220f2008490d0e20014101742208200f2008200f4b1b22084100480d0e0240024020010d002008102d21010c010b20032802c80320012008103121010b2001450d0d200320083602cc03200320013602c80320032802d00321080b2003200841046a3602d003200120086a20143600000240024020032802cc03220120032802d00322086b4104490d0020032802c80321010c010b200841046a220f2008490d0e20014101742208200f2008200f4b1b22084100480d0e0240024020010d002008102d21010c010b20032802c80320012008103121010b2001450d0d200320083602cc03200320013602c80320032802d00321080b2003200841046a3602d003200120086a200e3600000c080b2011102d2215450d0b0b200320113602d402200320153602d0022003200f3602d8022003200341d0026a3602b8012010200341b8016a200810c502200f2008490d0220032802d8022210200f490d0320032802d00322102001490d0420032802d002211120032802c80321152003200f20086b220f3602f8032003201020016b22103602fc03200f2010470d05201120086a201520016a200f10e8061a0240024020032802d402220120032802d80222086b4104490d0020032802d00221010c010b200841046a220f2008490d0c20014101742208200f2008200f4b1b22084100480d0c0240024020010d002008102d21010c010b20032802d00220012008103121010b2001450d0b200320083602d402200320013602d00220032802d80221080b2003200841046a3602d802200120086a20143600000240024020032802d402220120032802d80222086b4104490d0020032802d00221010c010b200841046a220f2008490d0c20014101742208200f2008200f4b1b22084100480d0c0240024020010d002008102d21010c010b20032802d00220012008103121010b2001450d0b200320083602d402200320013602d00220032802d80221080b2003200841046a3602d802200120086a200e36000020032802d802210120032802d402210f20032802d002210820032802cc03450d0720032802c803102f0c070b2003200341c8036a3602b8012010200341b8016a200110c5020240024020032802cc03220120032802d00322086b4104490d0020032802c80321010c010b200841046a220f2008490d0b20014101742208200f2008200f4b1b22084100480d0b0240024020010d002008102d21010c010b20032802c80320012008103121010b2001450d0a200320083602cc03200320013602c80320032802d00321080b2003200841046a3602d003200120086a20143600000240024020032802cc03220120032802d00322086b4104490d0020032802c80321010c010b200841046a220f2008490d0b20014101742208200f2008200f4b1b22084100480d0b0240024020010d002008102d21010c010b20032802c80320012008103121010b2001450d0a200320083602cc03200320013602c80320032802d00321080b2003200841046a3602d003200120086a200e3600000c050b20032802cc03450d0620032802c803102f0c060b2008200f104b000b200f2010104a000b20012010104b000b200341e0036a41146a4109360200200341ec036a410a360200200341f0026a41146a41033602002003200341f8036a360290032003200341fc036a3602a003200341b8016a41146a4100360200200342033702f402200341b4e0ca003602f0022003410a3602e403200341c8e1ca003602c801200342013702bc0120034188e1ca003602b8012003200341e0036a360280032003200341b8016a3602f0032003200341a0036a3602e803200320034190036a3602e003200341f0026a41c8e1ca001043000b20032802d003210120032802cc03210f20032802c80321080b2008450d00200b2001ad4220862008ad8410040240200f450d002008102f0b200041206a21002007102f200241606a22020d010c060b0b2007102f0c040b1036000b1038000b103d000b200341b8016a1088040b20034180046a24000b8d1201027f02402000280200220141194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020010e1a0001121202121203040506070809120a0b0c0d0e1212120f1011000b200041086a280200417e6a220141074b0d1102400240024002400240024020010e080017010217030405000b200041106a280200450d162000410c6a280200102f0f0b200041106a280200450d152000410c6a280200102f0f0b200041106a280200450d142000410c6a280200102f0f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141186a2101200241686a22020d000b0b200041106a280200450d13200028020c102f0f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041106a280200450d12200028020c102f0f0b200041106a280200450d112000410c6a280200102f0f0b024020002d0004220141044b0d00024002400240024020010e051500010203150b0240200041106a2802002202450d00200041086a2802002101200241b0026c210203402001108d01200141b0026a2101200241d07d6a22020d000b0b2000410c6a280200450d142000280208102f0f0b200041086a2201280200108d012001280200102f0f0b02402000410c6a280200450d00200041086a280200102f0b200041206a2201280200108d012001280200102f0f0b2000412c6a280200450d11200041286a280200102f0f0b2000412c6a280200450d10200041286a280200102f0f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a2101034020011097010240200141046a280200450d002001280200102f0b200141f0006a2101200241907f6a22020d000b0b200041086a280200450d0f2000280204102f0f0b200041086a2d0000417a6a2201410b4b0d0e024002400240024020010e0c001212121212120112120203000b200041106a280200450d112000410c6a280200102f0f0b200041106a280200450d102000410c6a280200102f0f0b200041146a280200450d0f200041106a280200102f0f0b200041146a280200450d0e200041106a280200102f0f0b20002802042201450d0d200041086a280200450d0d2001102f0f0b200041086a2d0000416d6a220141014b0d0c0240024020010e020001000b200041106a280200450d0d2000410c6a280200102f0f0b200041106a280200450d0c2000410c6a280200102f0f0b20002d0004417f6a220141024b0d0b02400240024020010e03000102000b2000412c6a280200450d0d200041286a280200102f0f0b200041086a2201280200108d012001280200102f0f0b2000410c6a2201280200108d012001280200102f0f0b20002d0004417f6a220141024b0d0a02400240024020010e03000102000b2000412c6a280200450d0c200041286a280200102f0f0b200041086a2201280200108d012001280200102f0f0b2000410c6a2201280200108d012001280200102f0f0b200041086a2802004101470d09200041106a280200450d092000410c6a280200102f0f0b20002d00044104470d082000410c6a280200450d08200041086a280200102f0f0b200041086a280200450d072000280204102f0f0b200041086a2d0000417c6a220141024b0d060240024020010e03000801000b200041306a280200450d072000412c6a280200102f0f0b200041306a280200450d062000412c6a280200102f0f0b200041086a2d0000417e6a220141024b0d0502400240024020010e03000102000b200041106a280200450d072000410c6a280200102f0c070b200041346a280200450d06200041306a280200102f0f0b200041306a280200450d052000412c6a280200102f0f0b02402000280204220141024b0d00024020010e03060006060b200041086a2201280200108d012001280200102f0f0b2000412c6a2201280200108d012001280200102f0f0b02402000410c6a280200450d00200041086a280200102f0b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041186a280200450d032000280214102f0f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012002470d000b0b0240200041106a280200450d00200028020c102f0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102f0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102f0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102f0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102f0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102f0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102f0b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a280200102f0f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102f0b200141c4006a2101200241bc7f6a22020d000b0b200041106a280200450d02200028020c102f0f0b200041086a2d00004108470d01200041346a280200450d01200041306a280200102f0f0b20002d0004417f6a220141024b0d000240024020010e03000201000b200041286a2201280200108d012001280200102f0f0b2000410c6a280200450d00200041086a280200102f0f0b0b8d1201027f02402000280200220141194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020010e1a0001121202121203040506070809120a0b0c0d0e1212120f1011000b200041086a280200417e6a220141074b0d1102400240024002400240024020010e080017010217030405000b200041106a280200450d162000410c6a280200102f0f0b200041106a280200450d152000410c6a280200102f0f0b200041106a280200450d142000410c6a280200102f0f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141186a2101200241686a22020d000b0b200041106a280200450d13200028020c102f0f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041106a280200450d12200028020c102f0f0b200041106a280200450d112000410c6a280200102f0f0b024020002d0004220141044b0d00024002400240024020010e051500010203150b0240200041106a2802002202450d00200041086a2802002101200241b0026c210203402001108d01200141b0026a2101200241d07d6a22020d000b0b2000410c6a280200450d142000280208102f0f0b200041086a2201280200108e012001280200102f0f0b02402000410c6a280200450d00200041086a280200102f0b200041206a2201280200108e012001280200102f0f0b2000412c6a280200450d11200041286a280200102f0f0b2000412c6a280200450d10200041286a280200102f0f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a2101034020011097010240200141046a280200450d002001280200102f0b200141f0006a2101200241907f6a22020d000b0b200041086a280200450d0f2000280204102f0f0b200041086a2d0000417a6a2201410b4b0d0e024002400240024020010e0c001212121212120112120203000b200041106a280200450d112000410c6a280200102f0f0b200041106a280200450d102000410c6a280200102f0f0b200041146a280200450d0f200041106a280200102f0f0b200041146a280200450d0e200041106a280200102f0f0b20002802042201450d0d200041086a280200450d0d2001102f0f0b200041086a2d0000416d6a220141014b0d0c0240024020010e020001000b200041106a280200450d0d2000410c6a280200102f0f0b200041106a280200450d0c2000410c6a280200102f0f0b20002d0004417f6a220141024b0d0b02400240024020010e03000102000b2000412c6a280200450d0d200041286a280200102f0f0b200041086a2201280200108e012001280200102f0f0b2000410c6a2201280200108e012001280200102f0f0b20002d0004417f6a220141024b0d0a02400240024020010e03000102000b2000412c6a280200450d0c200041286a280200102f0f0b200041086a2201280200108e012001280200102f0f0b2000410c6a2201280200108e012001280200102f0f0b200041086a2802004101470d09200041106a280200450d092000410c6a280200102f0f0b20002d00044104470d082000410c6a280200450d08200041086a280200102f0f0b200041086a280200450d072000280204102f0f0b200041086a2d0000417c6a220141024b0d060240024020010e03000801000b200041306a280200450d072000412c6a280200102f0f0b200041306a280200450d062000412c6a280200102f0f0b200041086a2d0000417e6a220141024b0d0502400240024020010e03000102000b200041106a280200450d072000410c6a280200102f0c070b200041346a280200450d06200041306a280200102f0f0b200041306a280200450d052000412c6a280200102f0f0b02402000280204220141024b0d00024020010e03060006060b200041086a2201280200108e012001280200102f0f0b2000412c6a2201280200108e012001280200102f0f0b02402000410c6a280200450d00200041086a280200102f0b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041186a280200450d032000280214102f0f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012002470d000b0b0240200041106a280200450d00200028020c102f0b0240200041186a2d00004101470d00200041206a280200450d002000411c6a280200102f0b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a280200102f0b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a280200102f0b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a280200102f0b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a280200102f0b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a280200102f0b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a280200102f0f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102f0b200141c4006a2101200241bc7f6a22020d000b0b200041106a280200450d02200028020c102f0f0b200041086a2d00004108470d01200041346a280200450d01200041306a280200102f0f0b20002d0004417f6a220141024b0d000240024020010e03000201000b200041286a2201280200108e012001280200102f0f0b2000410c6a280200450d00200041086a280200102f0f0b0bd204010c7f230041206b220324002001280204210420012802002105024002400240024002400240200128020822060d00410021070c010b20064105742108200220056b2109410021014100210a410021072005210b02400340200520016a210c0240200a450d00200a200c412010ea064100480d004115210c41e6a6c000210d4105210e0c020b0240200c2002412010ea06220a41004a0d004113210c41d3a6c000210d4106210e20092001460d02200a450d02200741016a21070b200b210a200b41206a210b2008200141206a2201460d020c000b0b2000200e3a000620004183023b0104200041013602002000410c6a200c360200200041086a200d3602002004450d012005102f0c010b200341186a200241186a290000370300200341106a200241106a290000370300200341086a200241086a2900003703002003200229000037030020062007490d01024020062004470d00200441016a22012004490d042004410174220b2001200b20014b1b220141ffffff3f712001470d04200141057422014100480d040240024020040d002001102d21050c010b200520044105742001103121050b2005450d03200141057621040b200520074105746a220141206a2001200620076b41057410e9061a200141186a200341186a290300370000200141106a200341106a290300370000200141086a200341086a290300370000200120032903003700002000410c6a200641016a360200200041086a200436020020002005360204200041003602000b200341206a24000f0b419ae3c300411e41f8b4ca001039000b1036000b1038000bfd0402087f037e230041106b22022400024002400240200141086a28020022034105744116722204417f4c0d002004102d2205450d01200520012802002206290000370000200541086a200641086a290000370000200241103602082002200436020420022005360200200141046a28020021052003200210690240024020030d0020022802042107200228020821060c010b20034105742108200228020021092002280204210420022802082103034002400240200420036b4120490d00200341206a2106200421070c010b200341206a22062003490d05200441017422072006200720064b1b22074100480d050240024020040d002007102d21090c010b200920042007103121090b2009450d040b200920036a22032005290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002007210420062103200541206a2105200841606a22080d000b2002200736020420022006360208200220093602000b20012f010c210402400240200720066b4102490d00200641026a2105200228020021030c010b200641026a22052006490d03200741017422032005200320054b1b22094100480d030240024020070d002009102d21030c010b200228020020072009103121030b2003450d022002200936020420022003360200200921070b200320066a20043b00002005ad4220862003ad8410032205290000210a200541086a290000210b200541106a290000210c200041186a200541186a290000370000200041106a200c370000200041086a200b3700002000200a3700002005102f02402007450d002003102f0b200241106a24000f0b103d000b1036000b1038000bdf800304057f017e067f017e230041206b2202240002400240024002400240024002400240024020002802002203411a4b0d0002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e1b000102030405060708090a0b0c0d0e0f101112131415161718191a000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1d200341017422052004200520044b1b22054100480d1d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1c20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a00002000280208417f6a220341094b0d1a024002400240024002400240024002400240024020030e0a00010203040506070809000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d26200341017422052004200520044b1b22054100480d260240024020030d002005102d21040c010b200128020020032005103121040b2004450d2520012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a0000200028020c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d26200341017422002005200020054b1b22004100480d260240024020030d002000102d21030c010b200128020020032000103121030b2003450d2520012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c230b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d25200341017422052004200520044b1b22054100480d250240024020030d002005102d21040c010b200128020020032005103121040b2004450d2420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a0000200028020c2106200041146a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d25200441017422032005200320054b1b22034100480d250240024020040d002003102d21040c010b200128020020042003103121040b2004450d2420012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c220b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d24200341017422052004200520044b1b22054100480d240240024020030d002005102d21040c010b200128020020032005103121040b2004450d2320012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a00002000290310210702400240200141046a2802002203200528020022006b4108490d00200128020021030c010b200041086a22042000490d24200341017422002004200020044b1b22004100480d240240024020030d002000102d21030c010b200128020020032000103121030b2003450d2320012003360200200141046a2000360200200141086a28020021000b200141086a200041086a360200200320006a20073700000c210b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d23200341017422052004200520044b1b22054100480d230240024020030d002005102d21040c010b200128020020032005103121040b2004450d2220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a0000200028020c2106200041146a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d23200441017422032005200320054b1b22034100480d230240024020040d002003102d21040c010b200128020020042003103121040b2004450d2220012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c200b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d22200341017422052004200520044b1b22054100480d220240024020030d002005102d21040c010b200128020020032005103121040b2004450d2120012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a0000200028020c2106200041146a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d22200441017422032005200320054b1b22034100480d220240024020040d002003102d21040c010b200128020020042003103121040b2004450d2120012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c1f0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d21200341017422052004200520044b1b22054100480d210240024020030d002005102d21040c010b200128020020032005103121040b2004450d2020012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41053a0000200141046a28020021042005280200210302402000410c6a2802004101460d000240024020042003460d00200128020021000c010b200341016a22002003490d22200341017422042000200420004b1b22044100480d220240024020030d002004102d21000c010b200128020020032004103121000b2000450d2120012000360200200141046a2004360200200141086a28020021030b200141086a200341016a360200200020036a41003a00000c1f0b0240024020042003460d00200128020021040c010b200341016a22042003490d21200341017422052004200520044b1b22054100480d210240024020030d002005102d21040c010b200128020020032005103121040b2004450d2020012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a0000200041106a280200210602400240200141046a2802002204200528020022036b4104490d00200128020021040c010b200341046a22052003490d21200441017422032005200320054b1b22034100480d210240024020040d002003102d21040c010b200128020020042003103121040b2004450d2020012004360200200141046a2003360200200141086a28020021030b200141086a2205200341046a360200200420036a2006360000200041146a280200210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d21200341017422002005200020054b1b22004100480d210240024020030d002000102d21030c010b200128020020032000103121030b2003450d2020012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c1e0b02400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22042003490d20200341017422052004200520044b1b22044100480d200240024020030d002004102d21050c010b200128020020032004103121050b2005450d1f20012005360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200520036a41063a0000200028020c2103200041146a2802002200200110692000450d1d2003200041186c6a2108200141046a2106034020032802002109200341086a280200220020011069024002402006280200220a200428020022056b2000490d002001280200210a0c010b200520006a220b2005490d21200a4101742205200b2005200b4b1b22054100480d2102400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d202001200a36020020062005360200200428020021050b2004200520006a360200200a20056a2009200010e8061a2003410c6a2802002109200341146a280200220020011069024002402006280200220a200428020022056b2000490d002001280200210a0c010b200520006a220b2005490d21200a4101742205200b2005200b4b1b22054100480d2102400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d202001200a36020020062005360200200428020021050b2004200520006a360200200a20056a2009200010e8061a200341186a22032008470d000c1e0b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1f200341017422052004200520044b1b22054100480d1f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1e20012004360200200141046a2005360200200141086a28020021030b200141086a2206200341016a360200200420036a41073a0000200028020c2104200041146a2802002200200110692000450d1c20042000410c6c6a2108200141046a210903402004280200210a200441086a2802002200200110690240024020092802002205200628020022036b2000490d00200128020021050c010b200320006a220b2003490d2020054101742203200b2003200b4b1b22034100480d200240024020050d002003102d21050c010b200128020020052003103121050b2005450d1f2001200536020020092003360200200628020021030b2006200320006a360200200520036a200a200010e8061a2004410c6a22042008470d000c1d0b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1e200341017422052004200520044b1b22054100480d1e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41083a0000200028020c2106200041146a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d1e200441017422032005200320054b1b22034100480d1e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1d20012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c1b0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d1d200041017422042003200420034b1b22044100480d1d0240024020000d002004102d21030c010b200128020020002004103121030b2003450d1c20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41093a00000c1a0b02400240200141046a2206280200200141086a22032802002204460d00200128020021050c010b200441016a22052004490d1c2004410174220a2005200a20054b1b220a4100480d1c0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1b20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41013a0000200041046a22082d0000417f6a220441044b0d190240024002400240024020040e050001020304000b02400240200628020020032802002203460d00200128020021040c010b200341016a22042003490d20200341017422052004200520044b1b22054100480d200240024020030d002005102d21040c010b200128020020032005103121040b2004450d1f20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a000020002802082103200041106a2802002200200110692000450d1d200041b0026c2100034020032001109101200341b0026a2103200041d07d6a22000d000c1e0b0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d1f2004410174220a2005200a20054b1b220a4100480d1f0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1e20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41013a000020082f010221050240024020062802002204200328020022036b4102490d00200128020021040c010b200341026a22062003490d1f200441017422032006200320064b1b22034100480d1f0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1e20012004360200200141046a2003360200200141086a28020021030b200141086a200341026a360200200420036a20053b0000200028020820011091010c1c0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d1e2004410174220a2005200a20054b1b220a4100480d1e0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1d20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41023a000020082f0102210a0240024020062802002205200328020022046b4102490d00200128020021050c010b200441026a22092004490d1e200541017422042009200420094b1b22044100480d1e0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1d20012005360200200141046a2004360200200141086a28020021040b200141086a2208200441026a360200200520046a200a3b000020002802082104200041106a28020022052001106902402005450d0020054105742109200141046a210c0340024002402006280200220a200328020022056b4120490d002001280200210a0c010b200541206a220b2005490d20200a4101742205200b2005200b4b1b22054100480d2002400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d1f2001200a360200200c2005360200200828020021050b2003200541206a360200200a20056a220541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a29000037000020052004290000370000200441206a2104200941606a22090d000b0b20062802002105200328020021040240024020002802144101460d000240024020052004460d00200128020021050c010b200441016a22052004490d20200441017422062005200620054b1b22064100480d200240024020040d002006102d21050c010b200128020020042006103121050b2005450d1f20012005360200200141046a2006360200200141086a28020021040b2003200441016a360200200520046a41003a00000c010b0240024020052004460d00200128020021050c010b200441016a22052004490d1f2004410174220a2005200a20054b1b220a4100480d1f0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1e20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41013a0000200041186a280200210a0240024020062802002205200328020022046b4104490d00200128020021050c010b200441046a22092004490d1f200541017422042009200420094b1b22044100480d1f0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1e20012005360200200141046a2004360200200141086a28020021040b2003200441046a360200200520046a200a3600002000411c6a280200210a0240024020062802002205200328020022046b4104490d00200128020021050c010b200441046a22062004490d1f200541017422042006200420064b1b22044100480d1f0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1e20012005360200200141046a2004360200200141086a28020021040b2003200441046a360200200520046a200a3600000b200028022020011091010c1b0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d1d2004410174220a2005200a20054b1b220a4100480d1d0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1c20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41033a000020082f0122210a0240024020062802002205200328020022046b4102490d00200128020021050c010b200441026a22092004490d1d200541017422042009200420094b1b22044100480d1d0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1c20012005360200200141046a2004360200200141086a28020021040b200141086a220c200441026a360200200520046a200a3b000020002802282104200041306a28020022052001106902402005450d0020054105742109200141046a210d0340024002402006280200220a200328020022056b4120490d002001280200210a0c010b200541206a220b2005490d1f200a4101742205200b2005200b4b1b22054100480d1f02400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d1e2001200a360200200d2005360200200c28020021050b2003200541206a360200200a20056a220541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a29000037000020052004290000370000200441206a2104200941606a22090d000b0b20062802002105200328020021040240024020002802344101460d000240024020052004460d00200128020021000c010b200441016a22002004490d1f200441017422052000200520004b1b22054100480d1f0240024020040d002005102d21000c010b200128020020042005103121000b2000450d1e20012000360200200141046a2005360200200141086a28020021040b2003200441016a360200200020046a41003a00000c010b0240024020052004460d00200128020021050c010b200441016a22052004490d1e2004410174220a2005200a20054b1b220a4100480d1e0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1d20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41013a0000200041386a280200210a0240024020062802002205200328020022046b4104490d00200128020021050c010b200441046a22092004490d1e200541017422042009200420094b1b22044100480d1e0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1d20012005360200200141046a2004360200200141086a28020021040b2003200441046a360200200520046a200a3600002000413c6a28020021050240024020062802002204200328020022006b4104490d00200128020021040c010b200041046a220a2000490d1e20044101742200200a2000200a4b1b22004100480d1e0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1d20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20053600000b0240024020062802002204200328020022006b4120490d00200128020021040c010b200041206a22052000490d1d200441017422002005200020054b1b22004100480d1d0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1c20012004360200200141046a2000360200200141086a28020021000b2003200041206a360200200420006a220041186a200841196a290000370000200041106a200841116a290000370000200041086a200841096a290000370000200020082900013700000c1a0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d1c2004410174220a2005200a20054b1b220a4100480d1c0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1b20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41043a000020082f0122210a0240024020062802002205200328020022046b4102490d00200128020021050c010b200441026a22092004490d1c200541017422042009200420094b1b22044100480d1c0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1b20012005360200200141046a2004360200200141086a28020021040b200141086a220c200441026a360200200520046a200a3b000020002802282104200041306a28020022052001106902402005450d0020054105742109200141046a210d0340024002402006280200220a200328020022056b4120490d002001280200210a0c010b200541206a220b2005490d1e200a4101742205200b2005200b4b1b22054100480d1e02400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d1d2001200a360200200d2005360200200c28020021050b2003200541206a360200200a20056a220541186a200441186a290000370000200541106a200441106a290000370000200541086a200441086a29000037000020052004290000370000200441206a2104200941606a22090d000b0b2000280234210a0240024020062802002205200328020022046b4104490d00200128020021050c010b200441046a22092004490d1c200541017422042009200420094b1b22044100480d1c0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1b20012005360200200141046a2004360200200141086a28020021040b2003200441046a360200200520046a200a360000200041386a28020021050240024020062802002204200328020022006b4104490d00200128020021040c010b200041046a220a2000490d1c20044101742200200a2000200a4b1b22004100480d1c0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1b20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20053600000240024020062802002204200328020022006b4120490d00200128020021040c010b200041206a22052000490d1c200441017422002005200020054b1b22004100480d1c0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1b20012004360200200141046a2000360200200141086a28020021000b2003200041206a360200200420006a220041186a200841196a290000370000200041106a200841116a290000370000200041086a200841096a290000370000200020082900013700000c190b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d1b200041017422042003200420034b1b22044100480d1b0240024020000d002004102d21030c010b200128020020002004103121030b2003450d1a20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41023a0000200110e8020c180b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1a200341017422052004200520044b1b22054100480d1a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1920012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d1a200341017422052004200520044b1b22054100480d1a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a0000200041086a200110e9020c170b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d19200341017422052004200520044b1b22054100480d190240024020030d002005102d21040c010b200128020020032005103121040b2004450d1820012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d19200341017422052004200520044b1b22054100480d190240024020030d002005102d21040c010b200128020020032005103121040b2004450d1820012004360200200141046a2005360200200141086a28020021030b200141086a2206200341016a360200200420036a41003a00002000280204210c2000410c6a2802002200200110692000450d16200c200041f0006c6a210d200141046a210b03404120102d2200450d182000200c290010370000200041186a2205200c41286a290000370000200041106a220a200c41206a290000370000200041086a2209200c41186a29000037000002400240200b2802002204200628020022036b4120490d00200128020021040c010b200341206a22082003490d1a200441017422032008200320084b1b22034100480d1a0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1920012004360200200b2003360200200628020021030b2006200341206a360200200420036a220341186a2005290000370000200341106a200a290000370000200341086a2009290000370000200320002900003700002000102f200c20011095024120102d2200450d182000200c290030370000200041186a2205200c41c8006a290000370000200041106a220a200c41c0006a290000370000200041086a2209200c41386a29000037000002400240200b2802002204200628020022036b4120490d00200128020021040c010b200341206a22082003490d1a200441017422032008200320084b1b22034100480d1a0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1920012004360200200b2003360200200628020021030b2006200341206a360200200420036a220341186a2005290000370000200341106a200a290000370000200341086a2009290000370000200320002900003700002000102f4120102d2200450d182000200c290050370000200041186a2205200c41e8006a290000370000200041106a220a200c41e0006a290000370000200041086a2209200c41d8006a29000037000002400240200b2802002204200628020022036b4120490d00200128020021040c010b200341206a22082003490d1a200441017422032008200320084b1b22034100480d1a0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1920012004360200200b2003360200200628020021030b2006200341206a360200200420036a220341186a2005290000370000200341106a200a290000370000200341086a2009290000370000200320002900003700002000102f200c2802042104200c28020c22002001106902402000450d00200041246c210903402002200410ea022002280200210a02400240200b2802002205200628020022006b20022802082203490d00200128020021050c010b200020036a22082000490d1c200541017422002008200020084b1b22004100480d1c0240024020050d002000102d21050c010b200128020020052000103121050b2005450d1b20012005360200200b2000360200200628020021000b2006200020036a360200200520006a200a200310e8061a02402002280204450d00200a102f0b200441246a21042009415c6a22090d000b0b200c41f0006a220c200d470d000c170b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41053a0000200041046a22032d0000417f6a220441034b0d1502400240024002400240024020040e0400010203000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1d200341017422052004200520044b1b22054100480d1d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1c20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a0000200028020821030c040b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d1c200441017422062005200620054b1b22064100480d1c0240024020040d002006102d21050c010b200128020020042006103121050b2005450d1b20012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41013a000002400240200141046a2802002205200628020022046b4120490d00200128020021050c010b200441206a22062004490d1c200541017422042006200420064b1b22044100480d1c0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1b20012005360200200141046a2004360200200141086a28020021040b200141086a200441206a360200200520046a220441186a200341196a290000370000200441106a200341116a290000370000200441086a200341096a290000370000200420032900013700000c020b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1b200341017422052004200520044b1b22054100480d1b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1a20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41023a0000200028020821030c020b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d1a200441017422062005200620054b1b22064100480d1a0240024020040d002006102d21050c010b200128020020042006103121050b2005450d1920012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41033a000002400240200141046a2802002205200628020022046b4120490d00200128020021050c010b200441206a22062004490d1a200541017422042006200420064b1b22044100480d1a0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1920012005360200200141046a2004360200200141086a28020021040b200141086a200441206a360200200520046a220441186a200341196a290000370000200441106a200341116a290000370000200441086a200341096a290000370000200420032900013700000b200028022821030b200220033602002002210502400240200141046a2802002204200141086a28020022006b4104490d00200128020021040c010b200041046a22032000490d18200441017422002003200020034b1b22004100480d180240024020040d002000102d21040c010b200128020020042000103121040b2004450d1720012004360200200141046a2000360200200141086a2802002100200528020021030b200141086a200041046a360200200420006a20033600000c150b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41063a00002000280208417f6a220341034b0d140240024002400240024020030e0400010203000b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d1b200441017422052003200520034b1b22034100480d1b0240024020040d002003102d21050c010b200128020020042003103121050b2005450d1a20012005360200200141046a2003360200200141086a28020021040b200041306a2103200141086a200441016a360200200520046a41003a00002000410c6a200110eb02200241106a21000c030b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d1a200441017422052003200520034b1b22034100480d1a0240024020040d002003102d21050c010b200128020020042003103121050b2005450d1920012005360200200141046a2003360200200141086a28020021040b200041c0006a2103200141086a200441016a360200200520046a41013a00002000410c6a200110eb022002200041306a360214200241146a200110c202200241186a21000c020b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d19200441017422052003200520034b1b22034100480d190240024020040d002003102d21050c010b200128020020042003103121050b2005450d1820012005360200200141046a2003360200200141086a28020021040b200041d8006a2103200141086a200441016a360200200520046a41023a00002000410c6a200110eb02200041306a200110eb022002411c6a21000c010b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d18200441017422052003200520034b1b22034100480d180240024020040d002003102d21050c010b200128020020042003103121050b2005450d1720012005360200200141046a2003360200200141086a28020021040b200041306a2103200141086a200441016a360200200520046a41033a00002000410c6a200110eb02200221000b200020033602002000200110c2020c140b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d162004410174220a2006200a20064b1b220a4100480d160240024020040d00200a102d21060c010b20012802002004200a103121060b2006450d1520012006360200200141046a200a360200200141086a28020021040b2003200441016a360200200620046a41073a0000200041086a22062d0000417f6a220441144b0d1302400240024002400240024002400240024002400240024002400240024002400240024002400240024020040e15000102030405060708090a0b0c0d0e0f1011121314000b02400240200528020020032802002204460d002001280200210a0c010b200441016a220a2004490d2a20044101742209200a2009200a4b1b22094100480d2a0240024020040d002009102d210a0c010b2001280200200420091031210a0b200a450d292001200a360200200141046a2009360200200141086a28020021040b200141086a200441016a360200200a20046a41003a00002000410c6a200110eb022002200041306a3602002002200110c20220062d0001220041024b0d2702400240024020000e03000102000b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d2e200041017422052004200520044b1b22054100480d2e0240024020000d002005102d21040c010b200128020020002005103121040b2004450d2b20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41003a00000c290b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d2d200041017422052004200520044b1b22054100480d2d0240024020000d002005102d21040c010b200128020020002005103121040b2004450d2c20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41013a00000c280b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d2c200041017422052004200520044b1b22054100480d2c0240024020000d002005102d21040c010b200128020020002005103121040b2004450d2b20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41023a00000c270b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d2b200341017422052004200520044b1b22054100480d2b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d2a20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a00002002200041106a3602002002200110c2020c260b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d2a200341017422052004200520044b1b22054100480d2a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d2920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41023a00002002200041106a3602002002200110c2020c250b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d29200041017422052004200520044b1b22054100480d290240024020000d002005102d21040c010b200128020020002005103121040b2004450d2820012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41033a00000c240b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d28200341017422052004200520044b1b22054100480d280240024020030d002005102d21040c010b200128020020032005103121040b2004450d2720012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41043a00002000410c6a20011095020c230b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d27200341017422052004200520044b1b22054100480d270240024020030d002005102d21040c010b200128020020032005103121040b2004450d2620012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41053a0000200028020c2103200041146a2802002200200110692000450d22200041246c210003402003200110eb02200341246a21032000415c6a22000d000c230b0b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d26200041017422052004200520044b1b22054100480d260240024020000d002005102d21040c010b200128020020002005103121040b2004450d2520012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41063a00000c210b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d252000410174220a2004200a20044b1b220a4100480d250240024020000d00200a102d21040c010b20012802002000200a103121040b2004450d2420012004360200200141046a200a360200200141086a28020021000b2003200041016a360200200420006a41073a000020062d0001220041024b0d2002400240024020000e03000102000b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d27200041017422052004200520044b1b22054100480d270240024020000d002005102d21040c010b200128020020002005103121040b2004450d2620012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41003a00000c220b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d26200041017422052004200520044b1b22054100480d260240024020000d002005102d21040c010b200128020020002005103121040b2004450d2520012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41013a00000c210b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d25200041017422052004200520044b1b22054100480d250240024020000d002005102d21040c010b200128020020002005103121040b2004450d2420012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41023a00000c200b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d24200341017422052004200520044b1b22054100480d240240024020030d002005102d21040c010b200128020020032005103121040b2004450d2320012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41083a00002000410c6a200110eb020c1f0b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d23200341017422052004200520044b1b22054100480d230240024020030d002005102d21040c010b200128020020032005103121040b2004450d2220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41093a00002000410c6a20011095020c1e0b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d22200041017422052004200520044b1b22054100480d220240024020000d002005102d21040c010b200128020020002005103121040b2004450d2120012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a410a3a00000c1d0b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d21200041017422052004200520044b1b22054100480d210240024020000d002005102d21040c010b200128020020002005103121040b2004450d2020012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a410b3a00000c1c0b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d202004410174220a2006200a20064b1b220a4100480d200240024020040d00200a102d21060c010b20012802002004200a103121060b2006450d1f20012006360200200141046a200a360200200141086a28020021040b200141086a220b200441016a360200200620046a410c3a0000200028020c2104200041146a2802002200200110692000450d1b2000410574210a200141046a210803400240024020052802002206200328020022006b4120490d00200128020021060c010b200041206a22092000490d21200641017422002009200020094b1b22004100480d210240024020060d002000102d21060c010b200128020020062000103121060b2006450d202001200636020020082000360200200b28020021000b2003200041206a360200200620006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a29000037000020002004290000370000200441206a2104200a41606a220a0d000c1c0b0b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d1f2000410174220a2004200a20044b1b220a4100480d1f0240024020000d00200a102d21040c010b20012802002000200a103121040b2004450d1e20012004360200200141046a200a360200200141086a28020021000b2003200041016a360200200420006a410d3a00000240024020052802002204200328020022006b4120490d00200128020021040c010b200041206a22052000490d1f200441017422002005200020054b1b22004100480d1f0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1e20012004360200200141046a2000360200200141086a28020021000b2003200041206a360200200420006a220041186a200641196a290000370000200041106a200641116a290000370000200041086a200641096a290000370000200020062900013700000c1a0b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d1e200041017422052004200520044b1b22054100480d1e0240024020000d002005102d21040c010b200128020020002005103121040b2004450d1d20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a410e3a00000c190b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1d2004410174220a2006200a20064b1b220a4100480d1d0240024020040d00200a102d21060c010b20012802002004200a103121060b2006450d1c20012006360200200141046a200a360200200141086a28020021040b2003200441016a360200200620046a410f3a0000200028020c21060240024020052802002205200328020022046b4104490d00200128020021050c010b200441046a220a2004490d1d20054101742204200a2004200a4b1b22044100480d1d0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1c20012005360200200141046a2004360200200141086a28020021040b200141086a220a200441046a360200200520046a200636000020002802102106200041186a28020022042001106902400240200141046a2802002205200a28020022006b20044102742204490d00200128020021050c010b200020046a220a2000490d1d20054101742200200a2000200a4b1b22004100480d1d0240024020050d002000102d21050c010b200128020020052000103121050b2005450d1c20012005360200200141046a2000360200200141086a28020021000b2003200020046a360200200520006a2006200410e8061a0c180b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1c2004410174220a2006200a20064b1b220a4100480d1c0240024020040d00200a102d21060c010b20012802002004200a103121060b2006450d1b20012006360200200141046a200a360200200141086a28020021040b2003200441016a360200200620046a41103a0000200028020c210a0240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22092004490d1c200641017422042009200420094b1b22044100480d1c0240024020060d002004102d21060c010b200128020020062004103121060b2006450d1b20012006360200200141046a2004360200200141086a28020021040b200141086a220b200441046a360200200620046a200a36000020002802102104200041186a2802002200200110692000450d172004200041246c6a2108200141046a210c03400240024020052802002206200328020022006b4120490d00200128020021060c010b200041206a220a2000490d1d20064101742200200a2000200a4b1b22004100480d1d0240024020060d002000102d21060c010b200128020020062000103121060b2006450d1c20012006360200200c2000360200200b28020021000b2003200041206a360200200620006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a29000037000020002004290000370000200441206a280200210a0240024020052802002206200328020022006b4104490d00200128020021060c010b200041046a22092000490d1d200641017422002009200020094b1b22004100480d1d0240024020060d002000102d21060c010b200128020020062000103121060b2006450d1c20012006360200200c2000360200200b28020021000b2003200041046a360200200620006a200a3600002008200441246a2204470d000c180b0b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1b2004410174220a2006200a20064b1b220a4100480d1b0240024020040d00200a102d21060c010b20012802002004200a103121060b2006450d1a20012006360200200141046a200a360200200141086a28020021040b2003200441016a360200200620046a41113a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d1b200441017422002005200020054b1b22004100480d1b0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1a20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c160b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d1a200341017422052004200520044b1b22054100480d1a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41123a00002002200041106a3602002002200110c2020c150b02400240200528020020032802002203460d00200128020021040c010b200341016a22042003490d19200341017422052004200520044b1b22054100480d190240024020030d002005102d21040c010b200128020020032005103121040b2004450d1820012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41133a00002000410c6a20011095020c140b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d182000410174220a2004200a20044b1b220a4100480d180240024020000d00200a102d21040c010b20012802002000200a103121040b2004450d1720012004360200200141046a200a360200200141086a28020021000b2003200041016a360200200420006a41143a00000240024020052802002204200328020022006b4120490d00200128020021040c010b200041206a22052000490d18200441017422002005200020054b1b22004100480d180240024020040d002000102d21040c010b200128020020042000103121040b2004450d1720012004360200200141046a2000360200200141086a28020021000b2003200041206a360200200420006a220041186a200641196a290000370000200041106a200641116a290000370000200041086a200641096a290000370000200020062900013700000c130b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41083a000002402000280204450d0002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041106a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041306a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041d0006a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041f0006a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200028020421062000410c6a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c130b02400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d17200041017422042003200420034b1b22044100480d170240024020000d002004102d21030c010b200128020020002004103121030b2003450d1620012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41013a00000c120b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41093a0000200041086a200110c1020c110b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410a3a0000200041046a200110ec020c100b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d14200341017422052004200520044b1b22054100480d140240024020030d002005102d21040c010b200128020020032005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410b3a0000200041046a200110ec020c0f0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410c3a00002000280208417f6a220341054b0d0e02400240024002400240024020030e06000102030405000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a2206200341016a360200200420036a41003a0000200028020c2103200041146a28020022042001106902402004450d002004410574210a200141046a210903400240024020092802002205200628020022046b4120490d00200128020021050c010b200441206a220b2004490d1a20054101742204200b2004200b4b1b22044100480d1a0240024020050d002004102d21050c010b200128020020052004103121050b2005450d192001200536020020092004360200200628020021040b2006200441206a360200200520046a220441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a29000037000020042003290000370000200341206a2103200a41606a220a0d000b0b2002200041186a3602002002200110c2020c130b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d17200041017422042003200420034b1b22044100480d170240024020000d002004102d21030c010b200128020020002004103121030b2003450d1620012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41013a00000c120b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41023a00002000410c6a200110eb020c110b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d15200041017422042003200420034b1b22044100480d150240024020000d002004102d21030c010b200128020020002004103121030b2003450d1420012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41033a00000c100b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d14200041017422042003200420034b1b22044100480d140240024020000d002004102d21030c010b200128020020002004103121030b2003450d1320012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41043a00000c0f0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41053a00002000410c6a200110eb020c0e0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d12200341017422052004200520044b1b22054100480d120240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410d3a0000200041046a22032d0000417f6a220441064b0d0d024002400240024002400240024020040e0700010203040506000b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d18200041017422052004200520044b1b22054100480d180240024020000d002005102d21040c010b200128020020002005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41003a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d18200441017422002005200020054b1b22004100480d180240024020040d002000102d21040c010b200128020020042000103121040b2004450d1720012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a290000370000200020032900013700000c130b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d17200041017422052004200520044b1b22054100480d170240024020000d002005102d21040c010b200128020020002005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41013a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d17200441017422002005200020054b1b22004100480d170240024020040d002000102d21040c010b200128020020042000103121040b2004450d1620012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a290000370000200020032900013700000c120b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d16200041017422052004200520044b1b22054100480d160240024020000d002005102d21040c010b200128020020002005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41023a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d16200441017422002005200020054b1b22004100480d160240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200141046a2000360200200141086a28020021000b200141086a2205200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002000200329000137000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d16200441017422002005200020054b1b22004100480d160240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341216a220341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000c110b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000020002802082103200041106a2802002200200110692000450d1020004105742106200141046a210a034002400240200a2802002204200528020022006b4120490d00200128020021040c010b200041206a22092000490d16200441017422002009200020094b1b22004100480d160240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200a2000360200200528020021000b2005200041206a360200200420006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a29000037000020002003290000370000200341206a2103200641606a22060d000c110b0b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d14200041017422052004200520044b1b22054100480d140240024020000d002005102d21040c010b200128020020002005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41043a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1320012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a290000370000200020032900013700000c0f0b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d13200041017422052004200520044b1b22054100480d130240024020000d002005102d21040c010b200128020020002005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41053a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d13200441017422002005200020054b1b22004100480d130240024020040d002000102d21040c010b200128020020042000103121040b2004450d1220012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a290000370000200020032900013700000c0e0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d12200041017422042003200420034b1b22044100480d120240024020000d002004102d21030c010b200128020020002004103121030b2003450d1120012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41063a00000c0d0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410e3a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a0000200041046a20011095020c0c0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410f3a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a0000200028020421062000410c6a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d10200441017422032005200320054b1b22034100480d100240024020040d002003102d21040c010b200128020020042003103121040b2004450d0f20012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c0b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41103a0000200041086a22032d0000417f6a220441074b0d0a0240024002400240024002400240024020040e080001020304050607000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a00002002200041306a3602002002200110c2022000410c6a200110eb020c110b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a00002000410c6a20011095020c100b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41023a00002000410c6a20011095020c0f0b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d15200441017422062005200620054b1b22064100480d150240024020040d002006102d21050c010b200128020020042006103121050b2005450d1420012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41033a0000200028022c210a200041346a28020022002001106902400240200141046a2802002205200628020022046b2000490d00200128020021050c010b200420006a22062004490d15200541017422042006200420064b1b22044100480d150240024020050d002004102d21050c010b200128020020052004103121050b2005450d1420012005360200200141046a2004360200200141086a28020021040b200141086a2206200420006a360200200520046a200a200010e8061a02400240200141046a2802002204200628020022006b4120490d00200128020021040c010b200041206a22052000490d15200441017422002005200020054b1b22004100480d150240024020040d002000102d21040c010b200128020020042000103121040b2004450d1420012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a290000370000200020032900013700000c0e0b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d14200041017422052004200520044b1b22054100480d140240024020000d002005102d21040c010b200128020020002005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41043a00004120102d2200450d1220002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d14200441017422032005200320054b1b22034100480d140240024020040d002003102d21040c010b200128020020042003103121040b2004450d1320012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200320002900003700002000102f0c0d0b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d002006102d21050c010b200128020020042006103121050b2005450d1220012005360200200141046a2006360200200141086a28020021040b200141086a220a200441016a360200200520046a41053a0000200028022c2109200041346a28020022042001106902400240200141046a2802002206200a28020022056b2004490d00200128020021060c010b200520046a220a2005490d1320064101742205200a2005200a4b1b22054100480d130240024020060d002005102d21060c010b200128020020062005103121060b2006450d1220012006360200200141046a2005360200200141086a28020021050b200141086a220a200520046a360200200620056a2009200410e8061a02400240200141046a2802002205200a28020022046b4120490d00200128020021050c010b200441206a22062004490d13200541017422042006200420064b1b22044100480d130240024020050d002004102d21050c010b200128020020052004103121050b2005450d1220012005360200200141046a2004360200200141086a28020021040b200141086a2206200441206a360200200520046a220441186a200341196a290000370000200441106a200341116a290000370000200441086a200341096a29000037000020042003290001370000200041c0006a29030021072000290338210e02400240200141046a2802002203200628020022006b4110490d00200128020021030c010b200041106a22042000490d13200341017422002004200020044b1b22004100480d130240024020030d002000102d21030c010b200128020020032000103121030b2003450d1220012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020073700082000200e3700000c0c0b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d002006102d21050c010b200128020020042006103121050b2005450d1120012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41063a00004120102d2204450d1020042003290001370000200441186a200341196a290000370000200441106a200341116a290000370000200441086a200341096a29000037000002400240200141046a2802002205200628020022036b4120490d00200128020021050c010b200341206a22062003490d12200541017422032006200320064b1b22034100480d120240024020050d002003102d21050c010b200128020020052003103121050b2005450d1120012005360200200141046a2003360200200141086a28020021030b200141086a2206200341206a360200200520036a220341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200320042900003700002004102f200041386a29030021072000290330210e02400240200141046a2802002203200628020022006b4110490d00200128020021030c010b200041106a22042000490d12200341017422002004200020044b1b22004100480d120240024020030d002000102d21030c010b200128020020032000103121030b2003450d1120012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020073700082000200e3700000c0b0b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d11200041017422052004200520044b1b22054100480d110240024020000d002005102d21040c010b200128020020002005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41073a00004120102d2200450d0f20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d11200441017422032005200320054b1b22034100480d110240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200320002900003700002000102f0c0a0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41113a0000200041086a22032d0000417f6a220441044b0d090240024002400240024020040e050001020304000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d14200341017422052004200520044b1b22054100480d140240024020030d002005102d21040c010b200128020020032005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a0000200041106a200110f6010c0d0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a0000200041186a200110e902200028020c2106200041146a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d13200441017422032005200320054b1b22034100480d130240024020040d002003102d21040c010b200128020020042003103121040b2004450d1220012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c0c0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d12200341017422052004200520044b1b22054100480d120240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a00002000410c6a200110eb022002200041c0006a3602002002200110c202200041d0006a200110e90220002802302106200041386a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d12200441017422032005200320054b1b22034100480d120240024020040d002003102d21040c010b200128020020042003103121040b2004450d1120012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c0b0b02400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22052004490d11200441017422062005200620054b1b22064100480d110240024020040d002006102d21050c010b200128020020042006103121050b2005450d1020012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41033a00002002200041386a3602002002200110c202200041c8006a200110e9024120102d2204450d0f20042003290001370000200441186a200341196a290000370000200441106a200341116a290000370000200441086a200341096a29000037000002400240200141046a2802002205200628020022036b4120490d00200128020021050c010b200341206a22062003490d11200541017422032006200320064b1b22034100480d110240024020050d002003102d21050c010b200128020020052003103121050b2005450d1020012005360200200141046a2003360200200141086a28020021030b200141086a2206200341206a360200200520036a220341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200320042900003700002004102f200028022c2105200041346a28020022002001106902400240200141046a2802002204200628020022036b2000490d00200128020021040c010b200320006a22062003490d11200441017422032006200320064b1b22034100480d110240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2005200010e8061a0c0a0b02400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d10200041017422052004200520044b1b22054100480d100240024020000d002005102d21040c010b200128020020002005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41043a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d10200441017422002005200020054b1b22004100480d100240024020040d002000102d21040c010b200128020020042000103121040b2004450d0f20012004360200200141046a2000360200200141086a28020021000b200141086a2205200041206a360200200420006a220041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a29000037000020002003290001370000024020032d00214101460d0002400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d11200041017422042003200420034b1b22044100480d110240024020000d002004102d21030c010b200128020020002004103121030b2003450d1020012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41003a00000c0a0b02400240200141046a28020020052802002200460d00200128020021040c010b200041016a22042000490d10200041017422052004200520044b1b22054100480d100240024020000d002005102d21040c010b200128020020002005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41013a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d10200441017422002005200020054b1b22004100480d100240024020040d002000102d21040c010b200128020020042000103121040b2004450d0f20012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341226a220341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000c090b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41123a00002000280204417f6a220341024b0d0802400240024020030e03000102000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a0000200028020820011091010c0a0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a0000200041086a200110eb020c090b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41023a0000200041086a200110eb02200028022c20011091010c080b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41133a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a00002000280204210602400240200141046a2802002204200528020022036b4104490d00200128020021040c010b200341046a22052003490d0e200441017422032005200320054b1b22034100480d0e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a220a200341046a360200200420036a2006360000200041086a2802002106200041106a28020022032001106902400240200141046a2802002205200a28020022046b2003490d00200128020021050c010b200420036a220a2004490d0e20054101742204200a2004200a4b1b22044100480d0e0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0d20012005360200200141046a2004360200200141086a28020021040b200141086a220a200420036a360200200520046a2006200310e8061a200041146a28020021052000411c6a28020022032001106902402003450d0020052003410c6c6a210c200141046a210b034020052802002109200541086a28020022032001106902400240200b2802002206200a28020022046b2003490d00200128020021060c010b200420036a22082004490d10200641017422042008200420084b1b22044100480d100240024020060d002004102d21060c010b200128020020062004103121060b2006450d0f20012006360200200b2004360200200a28020021040b200a200420036a360200200620046a2009200310e8061a2005410c6a2205200c470d000b0b200041206a280200210502400240200141046a2802002204200a28020022036b4104490d00200128020021040c010b200341046a22062003490d0e200441017422032006200320064b1b22034100480d0e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a2206200341046a360200200420036a2005360000200041246a280200210502400240200141046a2802002204200628020022036b4104490d00200128020021040c010b200341046a22062003490d0e200441017422032006200320064b1b22034100480d0e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a2206200341046a360200200420036a200536000002400240200141046a2802002204200628020022036b41c000490d00200128020021040c010b200341c0006a22052003490d0e200441017422032005200320054b1b22034100480d0e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a200341c0006a360200200420036a220341386a200041286a220041386a290000370000200341306a200041306a290000370000200341286a200041286a290000370000200341206a200041206a290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a290000370000200320002900003700000c070b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0d200041017422042003200420034b1b22044100480d0d0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0c20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41143a0000200110e8020c060b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0c200041017422042003200420034b1b22044100480d0c0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0b20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41153a0000200110e8020c050b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0b200041017422042003200420034b1b22044100480d0b0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0a20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41163a0000200110e8020c040b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0a200341017422052004200520044b1b22054100480d0a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41173a0000200041086a22042d0000417f6a2203410a4b0d030240024002400240024002400240024002400240024020030e0b000102030405060708090a000b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d14200041017422052003200520034b1b22054100480d140240024020000d002005102d21030c010b200128020020002005103121030b2003450d1320012003360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200320006a41003a000002400240200141046a2802002203200528020022006b4120490d00200128020021030c010b200041206a22052000490d14200341017422002005200020054b1b22004100480d140240024020030d002000102d21030c010b200128020020032000103121030b2003450d1320012003360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200320006a220041186a200441196a290000370000200041106a200441116a290000370000200041086a200441096a290000370000200020042900013700000c0d0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a00002000410c6a200110a6010c0c0b02400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22042003490d12200341017422052004200520044b1b22044100480d120240024020030d002004102d21050c010b200128020020032004103121050b2005450d1120012005360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200520036a41023a0000200028020c2103200041146a2802002200200110692000450d0b2003200041c4006c6a2108200141046a210503400240024020052802002206200428020022006b4120490d00200128020021060c010b200041206a220a2000490d1320064101742200200a2000200a4b1b22004100480d130240024020060d002000102d21060c010b200128020020062000103121060b2006450d122001200636020020052000360200200428020021000b2004200041206a360200200620006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700002002200341206a220910a7012002280200210a0240024020052802002206200428020022006b20022802082203490d00200128020021060c010b200020036a220b2000490d1320064101742200200b2000200b4b1b22004100480d130240024020060d002000102d21060c010b200128020020062000103121060b2006450d122001200636020020052000360200200428020021000b2004200020036a360200200620006a200a200310e8061a02402002280204450d00200a102f0b2008200941246a2203470d000c0c0b0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d11200041017422042003200420034b1b22044100480d110240024020000d002004102d21030c010b200128020020002004103121030b2003450d1020012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41033a00000c0a0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41043a00002000410c6a20011095022002200041106a3602002002200110c2020c090b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41053a0000200028020c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0f200341017422002005200020054b1b22004100480d0f0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0e20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c080b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41063a00002000410c6a20011095022002200041106a3602002002200110c2020c070b02400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22052003490d0d200341017422062005200620054b1b22064100480d0d0240024020030d002006102d21050c010b200128020020032006103121050b2005450d0c20012005360200200141046a2006360200200141086a28020021030b200141086a2206200341016a360200200520036a41073a00002000412c6a200110950202400240200141046a2802002203200628020022006b4120490d00200128020021030c010b200041206a22052000490d0d200341017422002005200020054b1b22004100480d0d0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0c20012003360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200320006a220041186a200441196a290000370000200041106a200441116a290000370000200041086a200441096a290000370000200020042900013700000c060b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0b20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41083a00002000410c6a20011095022000290310210702400240200141046a2802002203200528020022006b4108490d00200128020021030c010b200041086a22042000490d0c200341017422002004200020044b1b22004100480d0c0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0b20012003360200200141046a2000360200200141086a28020021000b200141086a200041086a360200200320006a20073700000c050b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0a20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41093a00002000410c6a2001109502200041106a200110eb02200041386a200110a5010c040b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0a200341017422052004200520044b1b22054100480d0a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410a3a00002000410c6a200110eb020c030b02400240200141046a2206280200200141086a22032802002204460d00200128020021050c010b200441016a22052004490d092004410174220a2005200a20054b1b220a4100480d090240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d0820012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41183a0000200041086a22042d0000417f6a2205410b4b0d0202400240024002400240024002400240024002400240024020050e0c000102030405060708090a0b000b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d142004410174220a2005200a20054b1b220a4100480d140240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1320012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41003a0000200041186a29030021072000290310210e0240024020062802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1320012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020073700082000200e3700000c0d0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d132004410174220a2005200a20054b1b220a4100480d130240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1220012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41013a0000200028020c21050240024020062802002204200328020022006b4104490d00200128020021040c010b200041046a22062000490d13200441017422002006200020064b1b22004100480d130240024020040d002000102d21040c010b200128020020042000103121040b2004450d1220012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20053600000c0c0b02400240200628020020032802002205460d002001280200210a0c010b200541016a220a2005490d1220054101742209200a2009200a4b1b22094100480d120240024020050d002009102d210a0c010b2001280200200520091031210a0b200a450d112001200a360200200141046a2009360200200141086a28020021050b2003200541016a360200200a20056a41023a0000024002402006280200220a200328020022056b4120490d002001280200210a0c010b200541206a22092005490d12200a41017422052009200520094b1b22054100480d1202400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d112001200a360200200141046a2005360200200141086a28020021050b2003200541206a360200200a20056a220541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a29000037000020052004290001370000200041386a29030021072000290330210e0240024020062802002205200328020022046b4110490d00200128020021050c010b200441106a220a2004490d1220054101742204200a2004200a4b1b22044100480d120240024020050d002004102d21050c010b200128020020052004103121050b2005450d1120012005360200200141046a2004360200200141086a28020021040b2003200441106a360200200520046a220420073700082004200e370000200041c8006a29030021072000290340210e0240024020062802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d12200441017422002005200020054b1b22004100480d120240024020040d002000102d21040c010b200128020020042000103121040b2004450d1120012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020073700082000200e3700000c0b0b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d132004410174220a2005200a20054b1b220a4100480d130240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d1220012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a41033a0000200028020c21050240024020062802002204200328020022006b4104490d00200128020021040c010b200041046a22062000490d13200441017422002006200020064b1b22004100480d130240024020040d002000102d21040c010b200128020020042000103121040b2004450d1220012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20053600000c0a0b02400240200628020020032802002205460d00200128020021060c010b200541016a22062005490d122005410174220a2006200a20064b1b220a4100480d120240024020050d00200a102d21060c010b20012802002005200a103121060b2006450d1120012006360200200141046a200a360200200141086a28020021050b200141086a220a200541016a360200200620056a41043a00002000410c6a200110eb0220042d0001210502400240200141046a280200200a2802002200460d00200128020021040c010b200041016a22042000490d12200041017422062004200620044b1b22064100480d120240024020000d002006102d21040c010b200128020020002006103121040b2004450d1120012004360200200141046a2006360200200141086a28020021000b2003200041016a360200200420006a20053a00000c090b02400240200628020020032802002200460d00200128020021050c010b200041016a22052000490d112000410174220a2005200a20054b1b220a4100480d110240024020000d00200a102d21050c010b20012802002000200a103121050b2005450d1020012005360200200141046a200a360200200141086a28020021000b2003200041016a360200200520006a41053a000020042d0001210502400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d11200041017422062004200620044b1b22064100480d110240024020000d002006102d21040c010b200128020020002006103121040b2004450d1020012004360200200141046a2006360200200141086a28020021000b2003200041016a360200200420006a20053a00000c080b02400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d10200041017422052004200520044b1b22054100480d100240024020000d002005102d21040c010b200128020020002005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41063a00000c070b02400240200628020020032802002205460d002001280200210a0c010b200541016a220a2005490d0f20054101742209200a2009200a4b1b22094100480d0f0240024020050d002009102d210a0c010b2001280200200520091031210a0b200a450d0e2001200a360200200141046a2009360200200141086a28020021050b2003200541016a360200200a20056a41073a0000024002402006280200220a200328020022056b4120490d002001280200210a0c010b200541206a22092005490d0f200a41017422052009200520094b1b22054100480d0f02400240200a0d002005102d210a0c010b2001280200200a20051031210a0b200a450d0e2001200a360200200141046a2005360200200141086a28020021050b2003200541206a360200200a20056a220541186a200441196a290000370000200541106a200441116a290000370000200541086a200441096a29000037000020052004290001370000200028022c210a0240024020062802002205200328020022046b4104490d00200128020021050c010b200441046a22062004490d0f200541017422042006200420064b1b22044100480d0f0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b200141086a2206200441046a360200200520046a200a3600002000280230210a200041386a28020022002001106902400240200141046a2802002205200628020022046b2000490d00200128020021050c010b200420006a22062004490d0f200541017422042006200420064b1b22044100480d0f0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b2003200420006a360200200520046a200a200010e8061a0c060b02400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d0e200041017422052004200520044b1b22054100480d0e0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41083a00000c050b02400240200628020020032802002200460d00200128020021050c010b200041016a22052000490d0d2000410174220a2005200a20054b1b220a4100480d0d0240024020000d00200a102d21050c010b20012802002000200a103121050b2005450d0c20012005360200200141046a200a360200200141086a28020021000b2003200041016a360200200520006a41093a00000240024020062802002205200328020022006b4120490d00200128020021050c010b200041206a220a2000490d0d20054101742200200a2000200a4b1b22004100480d0d0240024020050d002000102d21050c010b200128020020052000103121050b2005450d0c20012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441196a290000370000200041106a200441116a290000370000200041086a200441096a2900003700002000200429000137000020042d0021210502400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d0d200041017422062004200620044b1b22064100480d0d0240024020000d002006102d21040c010b200128020020002006103121040b2004450d0c20012004360200200141046a2006360200200141086a28020021000b2003200041016a360200200420006a20053a00000c040b02400240200628020020032802002200460d00200128020021050c010b200041016a22052000490d0c2000410174220a2005200a20054b1b220a4100480d0c0240024020000d00200a102d21050c010b20012802002000200a103121050b2005450d0b20012005360200200141046a200a360200200141086a28020021000b2003200041016a360200200520006a410a3a00000240024020062802002205200328020022006b4120490d00200128020021050c010b200041206a220a2000490d0c20054101742200200a2000200a4b1b22004100480d0c0240024020050d002000102d21050c010b200128020020052000103121050b2005450d0b20012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441196a290000370000200041106a200441116a290000370000200041086a200441096a2900003700002000200429000137000020042d0021220041024b0d0302400240024020000e03000102000b02400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d0e200041017422052004200520044b1b22054100480d0e0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41003a00000c050b02400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d0d200041017422052004200520044b1b22054100480d0d0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0c20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41013a00000c040b02400240200628020020032802002200460d00200128020021040c010b200041016a22042000490d0c200041017422052004200520044b1b22054100480d0c0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0b20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41023a00000c030b02400240200628020020032802002204460d00200128020021050c010b200441016a22052004490d0b2004410174220a2005200a20054b1b220a4100480d0b0240024020040d00200a102d21050c010b20012802002004200a103121050b2005450d0a20012005360200200141046a200a360200200141086a28020021040b2003200441016a360200200520046a410b3a0000200028020c21050240024020062802002204200328020022006b4104490d00200128020021040c010b200041046a22062000490d0b200441017422002006200020064b1b22004100480d0b0240024020040d002000102d21040c010b200128020020042000103121040b2004450d0a20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20053600000c020b02400240200141046a220a280200200141086a22042802002203460d00200128020021050c010b200341016a22052003490d0a200341017422062005200620054b1b22064100480d0a0240024020030d002006102d21050c010b200128020020032006103121050b2005450d0920012005360200200141046a2006360200200141086a28020021030b2004200341016a360200200520036a41193a0000200041046a22092d0000417f6a220341084b0d0102400240024002400240024002400240024020030e09000102030405060708000b02400240200a28020020042802002203460d00200128020021050c010b200341016a22052003490d12200341017422062005200620054b1b22064100480d120240024020030d002006102d21050c010b200128020020032006103121050b2005450d1120012005360200200141046a2006360200200141086a28020021030b2004200341016a360200200520036a41003a000002400240200a2802002205200428020022036b4120490d00200128020021040c010b200341206a22042003490d12200541017422032004200320044b1b22034100480d120240024020050d002003102d21040c010b200128020020052003103121040b2004450d1120012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200941196a290000370000200341106a200941116a290000370000200341086a200941096a29000037000020032009290001370000200028022820011091010c090b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d11200041017422052003200520034b1b22054100480d110240024020000d002005102d21030c010b200128020020002005103121030b2003450d1020012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41013a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d11200341017422002005200020054b1b22004100480d110240024020030d002000102d21030c010b200128020020032000103121030b2003450d1020012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a2900003700002000200929000137000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d11200341017422002005200020054b1b22004100480d110240024020030d002000102d21030c010b200128020020032000103121030b2003450d1020012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941216a220341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000c080b02400240200a28020020042802002203460d00200128020021050c010b200341016a22052003490d10200341017422062005200620054b1b22064100480d100240024020030d002006102d21050c010b200128020020032006103121050b2005450d0f20012005360200200141046a2006360200200141086a28020021030b200141086a220c200341016a360200200520036a41023a000020002802082103200041106a28020022052001106902402005450d002005410574210b200141046a210d034002400240200a2802002206200428020022056b4120490d00200128020021060c010b200541206a22082005490d12200641017422052008200520084b1b22054100480d120240024020060d002005102d21060c010b200128020020062005103121060b2006450d1120012006360200200d2005360200200c28020021050b2004200541206a360200200620056a220541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a29000037000020052003290000370000200341206a2103200b41606a220b0d000b0b20092f0102210602400240200a2802002205200428020022036b4102490d00200128020021050c010b200341026a22092003490d10200541017422032009200320094b1b22034100480d100240024020050d002003102d21050c010b200128020020052003103121050b2005450d0f20012005360200200141046a2003360200200141086a28020021030b2004200341026a360200200520036a20063b00002000280214210502400240200a2802002203200428020022006b4104490d00200128020021030c010b200041046a22062000490d10200341017422002006200020064b1b22004100480d100240024020030d002000102d21030c010b200128020020032000103121030b2003450d0f20012003360200200141046a2000360200200141086a28020021000b2004200041046a360200200320006a20053600000c070b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0f200041017422052003200520034b1b22054100480d0f0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0e20012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41033a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0f200341017422002005200020054b1b22004100480d0f0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0e20012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a290000370000200020092900013700000c060b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0e200041017422052003200520034b1b22054100480d0e0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0d20012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41043a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0e200341017422002005200020054b1b22004100480d0e0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0d20012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a2900003700002000200929000137000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0e200341017422002005200020054b1b22004100480d0e0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0d20012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941216a220341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000c050b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0d200041017422052003200520034b1b22054100480d0d0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0c20012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41053a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0d200341017422002005200020054b1b22004100480d0d0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0c20012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a290000370000200020092900013700000c040b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0c200041017422052003200520034b1b22054100480d0c0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0b20012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41063a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0c200341017422002005200020054b1b22004100480d0c0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0b20012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a290000370000200020092900013700000c030b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0b200041017422052003200520034b1b22054100480d0b0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0a20012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41073a00000c020b02400240200a28020020042802002200460d00200128020021030c010b200041016a22032000490d0a200041017422052003200520034b1b22054100480d0a0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0920012003360200200141046a2005360200200141086a28020021000b2004200041016a360200200320006a41083a000002400240200a2802002203200428020022006b4120490d00200128020021030c010b200041206a22052000490d0a200341017422002005200020054b1b22004100480d0a0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0920012003360200200141046a2000360200200141086a28020021000b2004200041206a360200200320006a220041186a200941196a290000370000200041106a200941116a290000370000200041086a200941096a290000370000200020092900013700000c010b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d09200341017422052004200520044b1b22054100480d090240024020030d002005102d21040c010b200128020020032005103121040b2004450d0820012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a411a3a00002000280208417f6a220341024b0d0002400240024020030e03000102000b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0b200041017422042003200420034b1b22044100480d0b0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0a20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41003a00000c020b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0a200341017422052004200520044b1b22054100480d0a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0920012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a00002000410c6a200110eb020c010b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d09200341017422052004200520044b1b22054100480d090240024020030d002005102d21040c010b200128020020032005103121040b2004450d0820012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a00002000410c6a200110eb02200041386a29030021072000290330210e02400240200141046a2802002204200528020022036b4110490d00200128020021040c010b200341106a22052003490d09200441017422032005200320054b1b22034100480d090240024020040d002003102d21040c010b200128020020042003103121040b2004450d0820012004360200200141046a2003360200200141086a28020021030b200141086a2205200341106a360200200420036a220320073700082003200e370000200041c8006a2903002107200041c0006a290300210e02400240200141046a2802002204200528020022036b4110490d00200128020021040c010b200341106a22052003490d09200441017422032005200320054b1b22034100480d090240024020040d002003102d21040c010b200128020020042003103121040b2004450d0820012004360200200141046a2003360200200141086a28020021030b200141086a2205200341106a360200200420036a220320073700082003200e370000200041d0006a280200210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d09200341017422002005200020054b1b22004100480d090240024020030d002000102d21030c010b200128020020032000103121030b2003450d0820012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000b200241206a24000f0b1036000b1038000b1036000b1038000b1036000b1038000b1036000b1038000bb40703027f017e047f230041d0006b2203240041b8c4c300ad4280808080f00084100122042900002105200341086a200441086a290000370300200320053703002004102f41b4d9c000ad4280808080900184100122042900002105200341286a41086a200441086a290000370300200320053703282004102f024002404120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad4280808080800484100622012900003703202001102f200341c4006a200441206a360200200341003a0048200320043602402003200341206a41086a36023c2003200341206a360238200341106a200341386a106c2004102f02400240024002402003280218220641206a2207417f4c0d0020032802102108024002402007450d002007102d2204450d062007410f4d0d01200721090c050b411021094110102d21040c030b200741017422014110200141104b1b220941004e0d010c050b103d000b200420072009103121040b2004450d010b20042003290300370000200441086a200341086a2903003700000240024020094170714110460d00200921010c010b200941017422014120200141204b1b22014100480d0220042009200110312204450d010b20042003290328370010200441186a200341286a41086a29030037000002400240200141606a2006490d00200121090c010b2006415f4b0d02200141017422092007200920074b1b22094100480d0220042001200910312204450d010b200441206a2008200610e8061a02402003280214450d002008102f0b4120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a2900003700002001ad4280808080800484100722022900002105200341286a41086a200241086a290000370300200320053703282002102f200341c4006a200141206a360200200341003a0048200320013602402003200341286a41106a36023c2003200341286a3602382003200341386a106c2001102f2003280200210602400240200920076b20032802082201490d00200120076a2102200921080c010b200720016a22022007490d02200941017422082002200820024b1b22084100480d0220042009200810312204450d010b200420076a2006200110e8061a02402003280204450d002006102f0b200020023602082000200836020420002004360200200341d0006a24000f0b1036000b1038000b850604067f027e027f057e23004190016b220324002003200236020420032001360200200341086a2002ad4220862001ad84100210730240024020032802082202450d00200328020c21042003200341106a280200220136023c200320023602380240024020014104490d002003200241046a36023820032001417c6a220536023c20054104490d00200228000021062003200241086a3602382003200141786a220536023c20054110490d00200228000421072003200141686a220836023c2003200241186a360238200241106a29000021092002290008210a41002101200341003a0088010240034020082001460d01200341e8006a20016a200220016a220541186a2d00003a00002003200541196a3602382003200141016a22053a0088012005210120054120470d000b200341c8006a41086a2201200341e8006a41086a290300370300200341c8006a41106a220b200341e8006a41106a290300370300200341c8006a41186a220c200341e8006a41186a290300370300200320032903683703482003200820056b36023c200341e8006a200341386a10980320032802682205450d01200341186a41086a2001290300220d370300200341186a41106a200b290300220e370300200341186a41186a200c290300220f370300200320032903482210370318200329026c2111200020093703082000200a3703002000201137021c200020053602182000200736021420002006360210200041246a20103702002000412c6a200d370200200041346a200e3702002000413c6a200f3702000c020b2003410036023c200141ff0171450d00200341003a0088010b20034100360250200342013703482003410b36021c200320033602182003200341c8006a360244200341fc006a41013602002003420137026c200341b885c7003602682003200341186a360278200341c4006a41d8dbc100200341e8006a103c1a200335025042208620033502488410080240200328024c450d002003280248102f0b200041003602180b2004450d012002102f0c010b200041003602180b20034190016a24000b830f08047f017e017f027e027f097e017f017e230041f0026b22032400200228020821042002280204210520022802002106418de6c300ad4280808080e00084100122022900002107200341386a41086a200241086a290000370300200320073703382002102f41f0e8c600ad4280808080f00084100122022900002107200341f0006a41086a200241086a290000370300200320073703702002102f0240024002404120102d2202450d0020022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002002ad4280808080800484100322082900002107200841086a2900002109200841106a290000210a200341f0016a41186a220b200841186a290000370300200341f0016a41106a220c200a370300200341f0016a41086a2009370300200320073703f0012008102f2002102f41c000102d2202450d002002200329033837000020022003290370370010200220032903f001370020200241086a200341386a41086a290300370000200241186a200341f0006a41086a290300370000200241286a200341f0016a41086a290300370000200241306a200c290300370000200241386a200b290300370000200341f0006a200210f6022003290370210d4200210e20034200370370200341b8016a280200210820032d00bc01210b02400240200d4201510d00200341306a4200370300200341286a4200370300200341206a4200370300200341186a4200370300200341106a4200370300200341086a4200370300200342003703004200210f4200210942002107420021100c010b200341f0006a41386a290300210a200341f0006a41306a2903002111200341f0006a41206a290300210f200341f0006a41186a290300210e200341f0006a41c0006a2903002110200329038001210720032903782109200341206a200341f0006a41286a290300370300200341286a2011370300200341306a200a370300200341106a200e3703002003200f37031820032009370300200320073703080b02402009200629030022117d22122009562007200641086a29030022137d2009201154ad7d220a200756200a2007511b450d0041838c0c21084198b5c60021014280808080b00221070c020b200320123703002003200a3703080240200e20117c2214200e542206200f20137c2006ad7c2215200f542015200f511b450d0041838c0821084191ccc70021014280808080800121070c020b200341186a20153703002003201437031002402011201384500d00200341f0016a2005280200108d0220032903900220125620034198026a2903002211200a562011200a511b450d0041838c04210841abb5c60021014280808080d00221070c020b2004280200210c200341386a41186a200341106a220641086a2903002211370300200341386a41206a2204200641106a290300370300200341e0006a2205200641186a290300370300200341e8006a2216200641206a290300370300200320062903002213370348200320123703382003200a370340427f2009200e7c220e200e20095422062007200f7c2006ad7c220920075420092007511b22061b427f200920061b84210e02400240427f201220137c220720072012542206200a20117c2006ad7c2207200a542007200a511b22061b2209428080e983b1de16544100427f200720061b2207501b0d00200341386a41106a2903002107201629030021092005290300210f20042903002111200329034021132003290338211542012114200329035021170c010b4200211402402009200784500d0020092007109a01200341a8026a2007370300200341a0026a2009370300200341f0016a41086a41013a0000200341f9016a200c29000037000020034181026a200c41086a29000037000020034189026a200c41106a29000037000020034191026a200c41186a290000370000200341033a00f00141c8e1ca004100200341f0016a108c010b0b200e50210c20034198016a2011370300200341a0016a200f37030020034180016a2013370300200341a8016a200937030020034188016a20073703002003201737039001200320103703b00120032015370378410021062003200b4100200d42015122041b3a00bc0120032008410020041b3602b801200320144201512208ad3703700240024020080d002002ad42808080808008841005410121060c010b200341c0003602f401200320023602f001200341f8006a200341f0016a1090030b200cad21072002102f024002400240200d4201510d0020060d0041032108200341f0016a21020c010b200d4201522006410173720d0141042108200341f0006a21020b200241046a20083a0000200241003a0000200241056a20012900003700002002410d6a200141086a290000370000200241156a200141106a2900003700002002411d6a200141186a29000037000041c8e1ca0041002002108c010b200041186a200a370300200041106a2012370300200041086a2007370300410021020c020b1036000b2002102f20002008360204200041086a2007200141ff0171ad842001ad22074280fe0383842007428080fcff0f8384370200410121020b20002002360200200341f0026a24000b8e0201037f230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841002107302400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410b36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b885c7003602382003200341286a360248200341346a41d8dbc100200341386a103c1a200335022042208620033502188410080240200328021c450d002003280218102f0b0b2005450d002004102f0b2000200236020420002001360200200341d0006a24000bd00d08027f017e017f027e027f0b7e037f037e230041f0026b2204240020032802002105418de6c300ad4280808080e00084100122032900002106200441386a41086a200341086a290000370300200420063703382003102f41f0e8c600ad4280808080f00084100122032900002106200441f0006a41086a200341086a290000370300200420063703702003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441f0016a41186a220a200741186a290000370300200441f0016a41106a220b2009370300200441f0016a41086a2008370300200420063703f0012007102f2003102f41c000102d2203450d002003200429033837000020032004290370370010200320042903f001370020200341086a200441386a41086a290300370000200341186a200441f0006a41086a290300370000200341286a200441f0016a41086a290300370000200341306a200b290300370000200341386a200a290300370000200441f0006a200310f6022004290370210c4200210820044200370370200441b8016a280200210720042d00bc01210a02400240200c4201510d00200441306a4200370300200441286a4200370300200441206a4200370300200441186a4200370300200441106a4200370300200441086a420037030020044200370300420021094200210d420021064200210e0c010b200441f0006a41386a290300210f200441f0006a41306a2903002110200441f0006a41206a2903002109200441f0006a41186a2903002108200441f0006a41c0006a290300210e20042903800121062004290378210d200441206a200441f0006a41286a290300370300200441286a2010370300200441306a200f370300200441106a2008370300200420093703182004200d370300200420063703080b200441186a2009200241086a2903002211200920082002290300221256200920115620092011511b22021b22137d20082012200820021b221054ad7d22143703002004200820107d22153703102004427f200620137c200d20107c2216200d542202ad7c220f2002200f200654200f2006511b22021b220f3703082004427f201620021b2216370300200441386a41186a2014370300200441386a41206a2217200441206a290300370300200441386a41286a2218200441286a290300370300200441386a41306a2219200441306a2903003703002004200f370340200420163703382004201537034820122010542102427f200d20087c22082008200d54220b200620097c200bad7c220820065420082006511b220b1b427f2008200b1b84210d02400240427f201620157c22062006201654220b200f20147c200bad7c2206200f542006200f511b220b1b2208428080e983b1de16544100427f2006200b1b2209501b0d00200441c8006a29030021082019290300210920182903002114201729030021152004290340211a2004290338211b420121062004290350211c0c010b4200210602402008200984500d0020082009109a01200441a8026a2009370300200441a0026a2008370300200441f0016a41086a41013a0000200441f9016a200529000037000020044181026a200541086a29000037000020044189026a200541106a29000037000020044191026a200541186a290000370000200441033a00f00141c8e1ca004100200441f0016a108c010b0b201120137d21112002ad2113200d50210220044198016a2015370300200441a0016a201437030020044180016a201a370300200441a8016a200937030020044188016a20083703002004201c370390012004200e3703b0012004201b3703782004200a4100200c42015122051b3a00bc0120042007410020051b3602b801200420064201512207ad3703700240024020070d002003ad428080808080088410050c010b200441c0003602f401200420033602f001200441f8006a200441f0016a1090030b201120137d21082002ad2109201220107d210d2003102f20064201522103024002400240200c4201510d0020030d0041032107200441f0016a21030c010b200c4201522003410173720d0141042107200441f0006a21030b200341046a20073a0000200341003a0000200341056a20012900003700002003410d6a200141086a290000370000200341156a200141106a2900003700002003411d6a200141186a29000037000041c8e1ca0041002003108c010b2000200d3703182000201637030820002009370300200041206a2008370300200041106a200f370300200441f0026a24000f0b1036000bb10101027f024020002802082201450d0020002802002100200141246c210103400240024020002d0000220241044b0d0002400240024020020e050400010204040b2000410c6a280200450d03200041086a280200102f0c030b2000410c6a280200450d02200041086a280200102f0c020b2000410c6a280200450d01200041086a280200102f0c010b200041086a280200450d00200041046a280200102f0b200041246a21002001415c6a22010d000b0b0b13002000410c360204200041b4e5c0003602000b1f0002402000280200450d00200041086a280200450d002000280204102f0b0bdd0908017f017e047f017e017f017e037f017e230041a0016b22022400200241386a20002001109b01200241386a41106a29030021012002290340210002400240024020022903382203a7450d00200241f0006a41186a22044200370300200241f0006a41106a22054200370300200241f0006a41086a220642003703002002420037037041e7a2ca00ad4280808080800184220310012207290000210820024190016a41086a2209200741086a29000037030020022008370390012007102f20062009290300370300200220022903900137037041ecb5c600ad4280808080d00184220810012207290000210a2009200741086a2900003703002002200a370390012007102f2005200229039001220a370300200241d0006a41086a220b2006290300370300200241d0006a41106a220c200a370300200241d0006a41186a220d200929030037030020022002290370370350200241206a200241d0006a4120109c01200241206a41106a290300210a2002290328210e200228022021072004420037030020054200370300200642003703002002420037037020031001220429000021032009200441086a29000037030020022003370390012004102f20062009290300370300200220022903900137037020081001220429000021032009200441086a29000037030020022003370390012004102f20052002290390012203370300200b2006290300370300200c2003370300200d20092903003703002002200229037037035020024200200a420020071b220320017d200e420020071b2201200054ad7d2208200120007d2200200156200820035620082003511b22091b37037820024200200020091b370370200241f0006a2109200241d0006a21060c010b2003500d01200241f0006a41186a22044200370300200241f0006a41106a22054200370300200241f0006a41086a220642003703002002420037037041e7a2ca00ad4280808080800184220310012207290000210820024190016a41086a2209200741086a29000037030020022008370390012007102f20062009290300370300200220022903900137037041ecb5c600ad4280808080d00184220810012207290000210a2009200741086a2900003703002002200a370390012007102f2005200229039001220a370300200241d0006a41086a220b2006290300370300200241d0006a41106a220c200a370300200241d0006a41186a220d200929030037030020022002290370370350200241086a200241d0006a4120109c01200241086a41106a290300210a2002290310210e200228020821072004420037030020054200370300200642003703002002420037037020031001220429000021032009200441086a29000037030020022003370390012004102f20062009290300370300200220022903900137037020081001220429000021032009200441086a29000037030020022003370390012004102f20052002290390012203370300200b2006290300370300200c2003370300200d20092903003703002002200229037037035020024200200a420020071b220320017d200e420020071b2201200054ad7d2208200120007d2200200156200820035620082003511b22091b37037820024200200020091b370370200241f0006a2109200241d0006a21060b2006ad42808080808004842009ad428080808080028410040b200241a0016a24000bd70408027f017e037f017e017f027e037f017e230041f0006b2203240020012002844200522204ad2105024020040d00200341c0006a41186a22064200370300200341c0006a41106a22074200370300200341c0006a41086a220842003703002003420037034041e7a2ca00ad428080808080018422091001220a290000210b200341e0006a41086a2204200a41086a2900003703002003200b370360200a102f200820042903003703002003200329036037034041ecb5c600ad4280808080d00184220b1001220a290000210c2004200a41086a2900003703002003200c370360200a102f20072003290360220c370300200341206a41086a220d2008290300370300200341206a41106a220e200c370300200341206a41186a220f200429030037030020032003290340370320200341086a200341206a4120109c01200341086a41106a290300210c200329031021102003280208210a2006420037030020074200370300200842003703002003420037034020091001220629000021092004200641086a290000370300200320093703602006102f2008200429030037030020032003290360370340200b1001220629000021092004200641086a290000370300200320093703602006102f200720032903602209370300200d2008290300370300200e2009370300200f2004290300370300200320032903403703202003200c4200200a1b370348200320104200200a1b370340200341206aad4280808080800484200341c0006aad428080808080028410040b2000200137030820002005370300200041106a2002370300200341f0006a24000ba70202017f037e230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad841002107302400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410b36022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341b885c7003602382003200341286a360248200341346a41d8dbc100200341386a103c1a200335022042208620033502188410080240200328021c450d002003280218102f0b420021040b2002450d002001102f0b2000200637030820002004370300200041106a2005370300200341d0006a24000bde1006037f037e057f027e037f017e230041b0016b220724002004a721080240024002400240024020014201510d0041012109024020084101460d00427f200320067c200220057c220a2002542208ad7c220b2008200b200354200b2003511b22081b210b427f200a20081b210a4200210c4100210d0c030b02402002200556200320065620032006511b0d00200620037d2005200254ad7d210b200520027d210a4201210c0c020b200320067d2002200554ad7d210b200220057d210a4200210c0c010b4101210d024020084101470d00427f200320067c200220057c22012002542208ad7c22022008200220035420022003511b22081b210b427f200120081b210a410021094201210c0c030b200741306a200420052006420120022003109d01200741c0006a290300210b2007290338210a2007290330210c0c030b410021094101210d0b2001500d0020074180016a41186a220e420037030020074180016a41106a220f420037030020074180016a41086a22104200370300200742003703800141e7a2ca00ad42808080808001842201100122112900002112200741a0016a41086a2208201141086a290000370300200720123703a0012011102f20102008290300370300200720072903a0013703800141ecb5c600ad4280808080d0018422121001221129000021132008201141086a290000370300200720133703a0012011102f200f20072903a0012213370300200741e0006a41086a22142010290300370300200741e0006a41106a22152013370300200741e0006a41186a221620082903003703002007200729038001370360200741c8006a200741e0006a4120109c01200741c8006a41106a29030021132007290350211720072802482111200e4200370300200f420037030020104200370300200742003703800120011001220e29000021012008200e41086a290000370300200720013703a001200e102f20102008290300370300200720072903a0013703800120121001220e29000021012008200e41086a290000370300200720013703a001200e102f200f20072903a00122013703002014201029030037030020152001370300201620082903003703002007200729038001370360200742002013420020111b220120037d2017420020111b2203200254ad7d2212200320027d2202200356201220015620122001511b22081b3703880120074200200220081b37038001200741e0006aad428080808080048420074180016aad428080808080028410040b02402004500d002009450d0120074180016a41186a220f420037030020074180016a41106a2209420037030020074180016a41086a22104200370300200742003703800141e7a2ca00ad428080808080018422031001220d2900002102200741a0016a41086a2208200d41086a290000370300200720023703a001200d102f20102008290300370300200720072903a0013703800141ecb5c600ad4280808080d0018422021001220d29000021042008200d41086a290000370300200720043703a001200d102f200920072903a0012204370300200741e0006a41086a22112010290300370300200741e0006a41106a220e2004370300200741e0006a41186a221420082903003703002007200729038001370360200741186a200741e0006a4120109c01200741186a41106a2903002104200729032021012007280218210d200f42003703002009420037030020104200370300200742003703800120031001220f29000021032008200f41086a290000370300200720033703a001200f102f20102008290300370300200720072903a0013703800120021001220f29000021032008200f41086a290000370300200720033703a001200f102f200920072903a001220337030020112010290300370300200e20033703002014200829030037030020072007290380013703602007420020044200200d1b220320067d20014200200d1b2202200554ad7d2204200220057d2205200256200420035620042003511b22081b3703880120074200200520081b37038001200741e0006aad428080808080048420074180016aad428080808080028410040c010b200d450d0020074180016a41186a220f420037030020074180016a41106a2209420037030020074180016a41086a22104200370300200742003703800141e7a2ca00ad428080808080018422031001220d2900002102200741a0016a41086a2208200d41086a290000370300200720023703a001200d102f20102008290300370300200720072903a0013703800141ecb5c600ad4280808080d0018422021001220d29000021042008200d41086a290000370300200720043703a001200d102f200920072903a0012204370300200741e0006a41086a22112010290300370300200741e0006a41106a220e2004370300200741e0006a41186a2214200829030037030020072007290380013703602007200741e0006a4120109c01200741106a2903002104200729030821012007280200210d200f42003703002009420037030020104200370300200742003703800120031001220f29000021032008200f41086a290000370300200720033703a001200f102f20102008290300370300200720072903a0013703800120021001220f29000021032008200f41086a290000370300200720033703a001200f102f200920072903a001220337030020112010290300370300200e20033703002014200829030037030020072007290380013703602007427f20044200200d1b220320067c20014200200d1b220220057c22052002542208ad7c22022008200220035420022003511b22081b370388012007427f200520081b37038001200741e0006aad428080808080048420074180016aad428080808080028410040b2000200a3703082000200c370300200041106a200b370300200741b0016a24000b130020004103360204200041acfdc0003602000b3400200041adc5c30036020420004100360200200041146a4101360200200041106a418888c100360200200041086a42073702000b130020004101360204200041b089c1003602000b13002000410b360204200041dc8ac1003602000b3400200041a4e3c40036020420004100360200200041146a4104360200200041106a4188bac100360200200041086a42043702000b6001027f230041106b2202240002404114102d22030d001036000b200342003700082003420037000020024294808080800237020420022003360200410020021069200041086a200228020836020020002002290300370200200241106a24000b880301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a280200102f0b0240200241246a2d00004101470d002002412c6a280200450d00200241286a280200102f0b200241c8006a22022001470d000b0b0240200041046a280200450d002000280200102f0b024020002d000c4101470d00200041146a280200450d00200041106a280200102f0b024020002d00304101470d00200041386a280200450d00200041346a280200102f0b024020002d00544101470d00200041dc006a280200450d00200041d8006a280200102f0b024020002d00784101470d0020004180016a280200450d00200041fc006a280200102f0b024020002d009c014101470d00200041a4016a280200450d00200041a0016a280200102f0b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a280200102f0b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a280200102f0b0bc70a02037f027e0240024002402000280200220241064b0d00024002400240024002400240024020020e0700010203040506000b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d09200041017422032002200320024b1b22034100480d090240024020000d002003102d21020c010b200128020020002003103121020b2002450d0820012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41003a00000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d08200241017422042003200420034b1b22044100480d080240024020020d002004102d21030c010b200128020020022004103121030b2003450d0720012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41013a0000200041106a29030021052000290308210602400240200141046a2802002202200428020022006b4110490d00200128020021020c010b200041106a22032000490d08200241017422002003200020034b1b22004100480d080240024020020d002000102d21020c010b200128020020022000103121020b2002450d0720012002360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200220006a22012005370008200120063700000f0b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d07200041017422032002200320024b1b22034100480d070240024020000d002003102d21020c010b200128020020002003103121020b2002450d0620012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41023a00000f0b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d06200041017422032002200320024b1b22034100480d060240024020000d002003102d21020c010b200128020020002003103121020b2002450d0520012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41033a00000f0b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d05200041017422032002200320024b1b22034100480d050240024020000d002003102d21020c010b200128020020002003103121020b2002450d0420012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41043a00000f0b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d04200041017422032002200320024b1b22034100480d040240024020000d002003102d21020c010b200128020020002003103121020b2002450d0320012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41053a00000f0b02400240200141046a280200200141086a2802002200460d00200128020021020c010b200041016a22022000490d03200041017422032002200320024b1b22034100480d030240024020000d002003102d21020c010b200128020020002003103121020b2002450d0220012002360200200141046a2003360200200141086a28020021000b200141086a200041016a360200200220006a41063a00000b0f0b1036000b1038000be212010a7f230041106b220224002000280200210320002802082204200110690240024002402004450d002003200441c8006c6a2105200141086a2104200141046a210603402002200310a701200228020021070240024020062802002208200428020022096b2002280208220a490d00200128020021080c010b2009200a6a220b2009490d0420084101742209200b2009200b4b1b22094100480d040240024020080d002009102d21080c010b200128020020082009103121080b2008450d032001200836020020062009360200200428020021090b20042009200a6a360200200820096a2007200a10e8061a02402002280204450d002007102f0b2002200341246a220710a701200228020021080240024020062802002203200428020022096b2002280208220a490d00200128020021030c010b2009200a6a220b2009490d0420034101742209200b2009200b4b1b22094100480d040240024020030d002009102d21030c010b200128020020032009103121030b2003450d032001200336020020062009360200200428020021090b20042009200a6a360200200320096a2008200a10e8061a02402002280204450d002008102f0b200741246a22032005470d000b0b20022000410c6a10a7012002280200210302400240200141046a280200220a200141086a28020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b2002200041306a10a7012002280200210302400240200141046a280200220a200628020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b2002200041d4006a10a7012002280200210302400240200141046a280200220a200628020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b2002200041f8006a10a7012002280200210302400240200141046a280200220a200628020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b20022000419c016a10a7012002280200210302400240200141046a280200220a200628020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b200141046a2802002109200628020021040240024020002d0088024101460d000240024020092004460d00200128020021090c010b200441016a22092004490d042004410174220a2009200a20094b1b220a4100480d040240024020040d00200a102d21090c010b20012802002004200a103121090b2009450d0320012009360200200141046a200a360200200141086a28020021040b200141086a200441016a360200200920046a41003a00000c010b0240024020092004460d00200128020021090c010b200441016a22092004490d032004410174220a2009200a20094b1b220a4100480d030240024020040d00200a102d21090c010b20012802002004200a103121090b2009450d0220012009360200200141046a200a360200200141086a28020021040b200141086a220a200441016a360200200920046a41013a000002400240200141046a2802002209200a28020022046b4114490d00200128020021090c010b200441146a220a2004490d0320094101742204200a2004200a4b1b22044100480d030240024020090d002004102d21090c010b200128020020092004103121090b2009450d0220012009360200200141046a2004360200200141086a28020021040b200141086a200441146a360200200920046a220441106a20004199026a280000360000200441086a20004191026a290000370000200420004189026a2900003700000b2002200041c0016a10a7012002280200210302400240200141046a280200220a200141086a28020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a2206200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b2002200041e4016a10a7012002280200210302400240200141046a280200220a200628020022046b20022802082209490d002001280200210a0c010b200420096a22062004490d02200a41017422042006200420064b1b22044100480d0202400240200a0d002004102d210a0c010b2001280200200a20041031210a0b200a450d012001200a360200200141046a2004360200200141086a28020021040b200141086a200420096a360200200a20046a2003200910e8061a02402002280204450d002003102f0b200241106a24000f0b1036000b1038000bce0201047f230041106b2202240002400240024002400240024002400240024020012d00000e06010203040500010b200241003a000a20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110332201450d062000428180808010370204200020013602000c050b2001410c6a2802002203412020034120491b220441016a2203102d2205450d0520052003200310e706220541016a200141046a280200200410e8061a2000200336020820002003360204200020053602000c040b200241003a000a20024181c4003b01082002200141216a3602042002200141016a3602000c020b200241003a000a20024181c6003b01082002200141216a3602042002200141016a3602000c010b200241003a000a20024181c8003b01082002200141216a3602042002200141016a3602000b2000200210b0060b200241106a24000f0b1036000bec12010b7f23004180016b22022400200241003a004002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241c0006a20032802002206200510e8061a2003200420056b3602042003200620056a360200024020040d00410021062002410d6a2107200241106a2108200241246a21090c140b2002410d6a2107200241106a2108200241246a210920022d0040220a41254b0d0141002106200a0e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b0240200a417f6a220441ff01714121490d00200041063a00000c130b024020040d00410121034100210441002105410121060c120b0240200410332203450d002003200128020022012802002001280204220a2004200a2004491b220510e806210b200128020422062005490d052001200620056b3602042001200128020020056a360200410121060240200a20044f0d00200b20056a22014100200b20046a20016b10e7061a0b200421050c120b1036000b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610e8061a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c100b41012101200441ff01710d040c0e0b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610e8061a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0d0b41012101200441ff01710d040c0b0b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610e8061a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0a0b41012101200441ff01710d040c080b200241003a00784100210402400340200241003a004020012802002205280204220320034100472206490d01200241c0006a2005280200220a200610e8061a2005200320066b3602042005200a20066a360200024002402003450d0020022d004021030c010b41002103200241003a00400b200241d8006a20046a20033a00002002200441016a22043a007820044120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c070b41012101200441ff01710d040c050b20052006104b000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410521060c070b200041063a00000c070b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410421060c050b200041063a00000c050b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410321060c030b200041063a00000c030b0b410221062002413c6a41026a220a200241d4006a41026a2d00003a0000200241286a41086a220b200241c0006a41086a290300370300200241286a41106a220c200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a200a2d00003a0000200241106a41086a200b290300370300200241106a41106a200c2d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020063a0000200020092f00003b00012000410c6a2004360000200041086a2005360000200041046a2003360000200041106a2008290000370000200041216a20072f00003b0000200041036a200941026a2d00003a0000200041186a200841086a290000370000200041206a200841106a2d00003a0000200041236a200741026a2d00003a00000b20024180016a24000b8111010a7f23004180016b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a2207360200200541254b0d014100210820050e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b02402005417f6a41ff01714121490d00200041063a00000c130b02402005417f6a22090d0020012006360204200120073602004101210a410021094100210b410121080c120b0240024020091033220a450d0020012802042009490d01200a2001280200200910e8061a200128020422052009490d062001200520096b3602042001200128020020096a360200410121082009210b0c130b1036000b200041063a0000200a102f0c120b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c100b41012101200541ff01710d040c0e0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0d0b41012101200541ff01710d040c0b0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0a0b41012101200541ff01710d040c080b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c070b41012101200541ff01710d040c050b20092005104b000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410521080c070b200041063a00000c070b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410421080c050b200041063a00000c050b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410321080c030b200041063a00000c030b0b410221082002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020083a0000200020022f01243b00012000410c6a2009360000200041086a200b360000200041046a200a360000200041106a2002290310370000200041216a20022f000d3b0000200041036a200241246a41026a2d00003a0000200041186a200241106a41086a290300370000200041206a200241106a41106a2d00003a0000200041236a2002410d6a41026a2d00003a00000b20024180016a24000b830301067f230041106b2203240002400240024020014105744104722204417f4c0d002004102d2205450d012003410036020820032004360204200320053602002001200310690240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210420032802082101034002400240200420016b4120490d00200141206a2105200421060c010b200141206a22052001490d05200441017422062005200620054b1b22064100480d050240024020040d002006102d21070c010b200720042006103121070b2007450d040b200720016a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002006210420052101200041206a2100200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100402402006450d002007102f0b200341106a24000f0b103d000b1036000b1038000b830402067f027e230041106b22032400024002400240200141306c4104722204417f4c0d002004102d2205450d012003410036020820032004360204200320053602002001200310690240024020010d002003280208210120032802042106200328020021050c010b2000200141306c6a2107200328020021052003280204210620032802082101034002400240200620016b4120490d00200141206a2104200621080c010b200141206a22042001490d05200641017422082004200820044b1b22084100480d050240024020060d002008102d21050c010b200520062008103121050b2005450d040b200520016a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200041286a2903002109200041206a290300210a02400240200820046b4110490d00200441106a2101200821060c010b200441106a22012004490d05200841017422062001200620014b1b22064100480d050240024020080d002006102d21050c010b200520082006103121050b2005450d040b200520046a220420093700082004200a3700002007200041306a2200470d000b2003200636020420032001360208200320053602000b20022902002001ad4220862005ad84100402402006450d002005102f0b200341106a24000f0b103d000b1036000b1038000be10302087f027e230041106b22022400200241003602082002420137030020002802102103200041186a2802002204200210690240024002402004450d00200320044105746a21050340200328020021060240024020022802042207200228020822046b4104490d00200228020021070c010b200441046a22082004490d04200741017422092008200920084b1b22084100480d040240024020070d002008102d21070c010b200228020020072008103121070b2007450d0320022008360204200220073602000b2002200441046a360208200720046a2006360000200341086a200210a5012005200341206a2203470d000b0b200041086a290300210a2000290300210b0240024020022802042207200228020822036b4110490d00200341106a2104200228020021070c010b200341106a22042003490d02200741017422062004200620044b1b22064100480d020240024020070d002006102d21070c010b200228020020072006103121070b2007450d0120022006360204200220073602000b200720036a2203200a3700082003200b370000200220043602082000411c6a200210a601200228020421032001290200200235020842208620022802002204ad84100402402003450d002004102f0b200241106a24000f0b1036000b1038000b830301067f230041106b2203240002400240024020014105744104722204417f4c0d002004102d2205450d012003410036020820032004360204200320053602002001200310690240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210420032802082101034002400240200420016b4120490d00200141206a2105200421060c010b200141206a22052001490d05200441017422062005200620054b1b22064100480d050240024020040d002006102d21070c010b200720042006103121070b2007450d040b200720016a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002006210420052101200041206a2100200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100402402006450d002007102f0b200341106a24000f0b103d000b1036000b1038000bf90e09017f017e017f017e017f017e037f027e037f23004190026b2202240041adc5c300ad4280808080f000842203100122042900002105200241e8006a41086a200441086a290000370300200220053703682004102f2003100122042900002103200241c8006a41086a200441086a290000370300200220033703482004102f024002404120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100322062900002103200641086a2900002105200641106a2900002107200241f8006a41186a2208200641186a290000370300200241f8006a41106a22092007370300200241f8006a41086a2005370300200220033703782006102f2004102f41c000102d2204450d00200420022903683700002004200229034837001020042002290378370020200441086a200241e8006a41086a220a290300370000200441186a200241c8006a41086a290300370000200441286a200241f8006a41086a290300370000200441306a2009290300370000200441386a2008290300370000200241c0003602fc01200220043602f801200241e8006a2004ad42808080808008841002107302400240200228026822060d00420021030c010b200228026c2109024002400240200a28020022084110490d0020084170714110460d002008417c714120470d010b20024100360250200242013703482002410b360284022002200241f8016a360280022002200241c8006a36028c022002418c016a41013602002002420137027c200241b885c700360278200220024180026a360288012002418c026a41d8dbc100200241f8006a103c1a200235025042208620023502488410080240200228024c450d002002280248102f0b420021030c010b200641086a290000210b20062900002107200641186a290000210c2006290010210520062800202108420121030b2009450d002006102f0b2004102f0240024002402003500d00200241f8006a41186a4200370300200241f8006a41106a220a4200370300200241f8006a41086a2204420037030020024200370378418de6c300ad4280808080e000841001220629000021032004200641086a290000370300200220033703782006102f419ce6c300ad4280808080e00084100122062900002103200241e8006a41086a2209200641086a290000370300200220033703682006102f200a20022903682203370300200241c8006a41086a220a2004290300370300200241c8006a41106a2003370300200241c8006a41186a200929030037030020022002290378370348200241306a200241c8006a4120109501200241106a200c420041002002280234410020022802301b220420086b2206200620044b1bad2203420010ed06200241206a200342002005420010ed062002420042002005420010ed062002290308200229031884420052200241206a41086a2903002203200229030020022903107c7c2205200354720d0142002007200229032022037d220c200c200756200b20057d2007200354ad7d2203200b562003200b511b22041b22054200200320041b220384500d01200242f6cacda397cddbb320370340200241c0006a200120052003410610b001200241b0016a2003370300200241a8016a2005370300200241f8006a41086a41003a000020024181016a200129000037000020024189016a200141086a29000037000020024191016a200141106a29000037000020024199016a200141186a290000370000200241143a0078200241f8006a21040c020b2000411b3b0001200041086a410a360200200041046a41eaf0c000360200410321040c030b200242f6cacda397cddbb320370338200241386a200110b10141adc5c300ad4280808080f0008422031001220429000021052009200441086a290000370300200220053703682004102f2003100122042900002103200a200441086a290000370300200220033703482004102f4120102d2204450d0120042001290000370000200441186a200141186a2209290000370000200441106a200141106a220a290000370000200441086a200141086a220d2900003700002004ad4280808080800484100322062900002103200641086a2900002105200641106a2900002107200241f8006a41186a220e200641186a290000370300200241f8006a41106a220f2007370300200241f8006a41086a22082005370300200220033703782006102f2004102f41c000102d2204450d01200420022903683700002004200229034837001020042002290378370020200441086a200241e8006a41086a290300370000200441186a200241c8006a41086a290300370000200441286a2008290300370000200441306a200f290300370000200441386a200e2903003700002004ad428080808080088410052004102f200841013a000020024181016a200129000037000020024189016a200d29000037000020024191016a200a29000037000020024199016a2009290000370000200241143a0078200241f8006a21040b41c8e1ca0041002004108c01410421040c010b1036000b200020043a000020024190026a24000bbd0101047f230041106b2202240020002802042103200028020021004101210420012802184199a5c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a4190ebc30010621a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d00200228020022002802184198a5c00041012000411c6a28020028020c11000021040b200241106a240020040bfe0e03037f017e0e7f230022052106200541e0016b416071220524000240024002402002200384500d00200441ff01712207450d002000290000210841002109024020074101460d004102410120044101711b21090b20052002370300200520093a00182005200837031020052003370308200541c0016a200110ff0420052802c001210a20052802c401210b02400240024020052802c801220c450d00200a200c41057422046a210d200441606a210e200541a0016a411072210f200541a0016a4119722110200a21040340200541e8006a41106a2211200441106a290300370300200541e8006a41086a2212200441086a29030037030020052004290300370368200441186a2d000021072005200441196a28000036023820052004411c6a28000036003b20074103460d0120102005280238360000201041036a200528003b360000200520112903003703b001200520122903003703a801200520052903683703a001200520073a00b80102400240200f2000460d00200f2900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b2002a7220741ff01714103470d02200e41606a210e200441206a2204200d470d000b0b41082111410021100240200b450d00200a102f0b410021130c010b200541d0006a41106a2210200529039001370300200541d0006a41086a22122005290388013703002005200528009c0136004320052005280099013602402005200529038001370350200520052802403602482005200528004336004b4120102d2211450d0220112005290350370300201120073a0018201120052802483600192011411c6a200528004b360000201141106a2010290300370300201141086a201229030037030002400240200e0d0041012110410121130c010b200441206a2112200c410574200a6a41606a211420054180016a4119722115200541a0016a411072210c200541a0016a411972210e41012110410121130340201221040340200541e8006a41106a2212200441106a290300370300200541e8006a41086a220f200441086a29030037030020052004290300370368200441186a2d000021072005200441196a28000036023820052004411c6a28000036003b20074103460d02200e2005280238360000200e41036a200528003b360000200520122903003703b0012005200f2903003703a801200520052903683703a001200520073a00b80102400240200c2000460d00200c2900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b02402002a7220741ff01714103470d00200441206a2204200d470d010c030b0b200541d0006a41106a2212200529039001370300200541d0006a41086a220f200529038801370300200520152800003602402005201541036a2800003600432005200529038001370350200520052802403602482005200528004336004b200541c0016a41086a2216200f290300370300200541c0016a41106a220f2012290300370300200520052903503703c001200520052802483602a0012005200528004b3600a301024020132010470d00201041016a22122010490d06201041017422132012201320124b1b221241ffffff3f712012470d06201241057422124100480d060240024020100d002012102d21110c010b201120104105742012103121110b2011450d05201241057621130b200441206a211220162903002102200f290300210320052903c0012108201120104105746a220f20073a0018200f2008370300200f41106a2003370300200f41086a2002370300200f20052802a001360019200f411c6a20052800a301360000201041016a211020142004470d000b0b200b450d00200a102f0b0240200941ff01714103460d00200541c0016a41186a22072005290318370300200541c0016a41106a22002005290310370300200541c0016a41086a220e2005290308370300200520052903003703c001024020102013470d00201041016a22042010490d04201041017422122004201220044b1b220441ffffff3f712004470d04200441057422044100480d040240024020100d002004102d21110c010b201120104105742004103121110b2011450d03200441057621130b201120104105746a220420052903c001370300200441186a2007290300370300200441106a2000290300370300200441086a200e290300370300201041016a21100b2001201120101080052013450d002011102f0b200624000f0b1036000b1038000ba60304107f027e017f017e230041306b220224002002200110ff042002280200210302400240200228020822040d00410021040c010b200041706a210541002106200321074100210802400240034002400240024020052007460d00200741106a22092900002000290000510d0020060d01410021060c020b200641016a21060c010b200820066b220a20044f0d02200241106a41186a220b200720064105746b220a41186a220c290300370300200241106a41106a220d200a41106a220e290300370300200241106a41086a220f200a41086a22102903003703002002200a290300370310200741086a2211290300211220092903002113200741186a22142903002115200a2007290300370300200c2015370300200e2013370300201020123703002014200b2903003703002009200d2903003703002011200f290300370300200720022903103703000b200741206a21072004200841016a2208460d020c000b0b4188bbca00200a2004103b000b2006417f6a20044f0d002002200420066b22043602080b20012003200410800502402002280204450d002003102f0b200241306a24000be7d70106037f017e147f057e067f037e230041b0116b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0c000102030405060708090a0b000b200341840f6a4101360200200342013702f40e200341b4d8c9003602f00e200341043602ec09200341fcdbc9003602e8092003200341e8096a3602800f200341f00e6a41e8d8c9001043000b200241036a2d0000210420022f00012105200141196a2900002106200141186a2d00002107200141176a2d00002108200141156a2f00002109200141146a2d0000210a200141136a2d0000210b200141116a2f0000210c200141106a2d0000210d2001410f6a2d0000210e2001410d6a2f0000210f2001410c6a2d000021102001410b6a2d00002111200141096a2f00002112200141086a2d00002113200141076a2d00002114200141056a2f00002115200141046a2d00002116200141036a2d0000211720012f0001211802400240024020022d00002219417f6a221a41024b0d000240201a0e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200520044110747220194100477241ff01710d010b41a4e3c400ad4280808080c0008410012202290000211b2002290008211c2002102f4188bec100ad4280808080a0018410012202290000211d2002290008211e2002102f2003201e3703a8032003201d3703a0032003201c370398032003201b37039003200341f00e6a20034190036a10b301024020032802f00e221a0d004200211b4108211a410021020c1d0b20032902f40e221b422088221ca72202201ba7460d1c201ca721040c200b200041023a00004101211a0c200b200341286a200141046a41a00210e8061a024002400240024020022d00000d0020022d00014101470d00200241196a2d0000211a200241186a2d00002104200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703d0052003201a3a00cf05200320043a00ce05200320073b01cc05200320083a00cb05200320093a00ca052003200a3b01c8052003200b3a00c7052003200c3a00c6052003200d3b01c4052003200e3a00c3052003200f3a00c205200320103b01c005200320113a00bf05200320123a00be05200320133b01bc05200320143a00bb05200320153a00ba05200320163b01b80502402003280230220241e4004b0d0020032002ad42004280c0c6c9faeb38420010ed0641a4e3c400ad4280808080c0008410012202290000211b200341a80c6a41086a200241086a2900003703002003201b3703a80c2002102f41e8bcc100ad4280808080a0018410012202290000211b200341d00e6a41086a200241086a2900003703002003201b3703d00e2002102f200341086a290300211f4120102d2202450d262003290300211e200220032903b805370000200241186a200341b8056a41186a290300370000200241106a200341b8056a41106a290300370000200241086a200341b8056a41086a2903003700002002ad42808080808004841003221a290000211b201a41086a2900002106201a41106a290000211c20034190036a41186a2204201a41186a29000037030020034190036a41106a2207201c37030020034190036a41086a20063703002003201b37039003201a102f2002102f41c000102d221a450d26201a20032903a80c370000201a41086a200341a80c6a41086a290300370000201a20032903d00e370010201a41186a200341d00e6a41086a290300370000201a200329039003370020201a41286a20034190036a41086a290300370000201a41306a2007290300370000201a41386a2004290300370000200341f00e6a201a10b401200341f00e6a41086a290300211b20032903f00e210620032802800f210220032802840f210420032802880f210920034190036a200341f00e6a411c6a220741880210e8061a200341f0026a41086a22082003419d116a220a290000370300200341f0026a41106a200341a5116a220b290000370300200341f0026a41176a220c200341ac116a220d28000036000020032003290095113703f00220032d009411220e4102460d03200341c80c6a20034190036a41880210e8061a200341c8026a41176a220f200c280000360000200341c8026a41106a220c200341f0026a41106a290300370300200341c8026a41086a22102008290300370300200320032903f0023703c802201a102f200341f00e6a41186a2009360200200341840f6a20043602002003201b3703f80e200320063703f00e200320023602800f2007200341c80c6a41880210e806211220034194116a200e3a000020034195116a20032903c802370000200a2010290300370000200b200c290300370000200d200f28000036000002402009450d004100211a410021040340024002400240200241086a2208280200417f6a220741054b0d00024020070e06000101010100000b201a0d014100211a0c020b201a41016a211a0c010b2004201a6b220720094f0d12200341c0076a41186a220a2002201a4105746b220741186a220b290300370300200341c0076a41106a220c200741106a220d290300370300200341c0076a41086a220e200741086a220f290300370300200320072903003703c0072008290300211b200241106a22102903002106200241186a2211290300211c20072002290300370300200b201c370300200d2006370300200f201b3703002011200a2903003703002010200c2903003703002008200e290300370300200220032903c0073703000b200241206a21022009200441016a2204470d000b201a417f6a20094f0d0020032009201a6b3602880f0b201210a4012012200341286a41a00210e8061a200341e8096a200341f00e6a41c00210e8061a200341f0096a290300210620032903e809211d0c040b20004183303b0100200041086a410d360200200041046a418bf4c000360200200041026a410b3a00000c010b200041023a00000b200341286a10a4010c1b0b201a102f200341800a6a41003602004200211d200342003703f009200342003703e809200342083703f809200341e8096a411c6a200341286a41a00210e8061a420021060b2003201e4280809aa6eaafe3017c221b3703e8092003201f201b201e54ad7c221c3703f009201b201d56201c200656201c20065122021b0d170c180b2001410c6a2802002104200141086a2802002114200141046a28020021092002411a6a290100211b200241196a2d00002107200241186a2d00002108200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002105200241026a2f010021194101211a024020022d00000d0020022d0001410147211a0b2003201b3703a803200320073a00a703200320083a00a6032003200a3b01a4032003200b3a00a3032003200c3a00a2032003200d3b01a0032003200e3a009f032003200f3a009e03200320103b019c03200320113a009b03200320123a009a03200320133b019803200320153a009703200320163a009603200320173b019403200320183a009303200320053a009203200320193b019003024002400240201a0d00200341b8056a41186a220720034190036a41186a290300370300200341b8056a41106a220820034190036a41106a290300370300200341b8056a41086a220a20034190036a41086a221a29030037030020032003290390033703b80541a4e3c400ad4280808080c0008410012202290000211b201a200241086a2900003703002003201b370390032002102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210b20022d0006210c20022f0004210d20022d0003210e20022d0002210f20022f000021102002102f4120102d221a450d23201a20032903b805370000201a41186a2007290300370000201a41106a2008290300370000201a41086a200a290300370000201aad428080808080048410032202290018210620022d0017210720022d0016210820022f0014210a20022d0013211120022d0012211220022f0010211320022d000f211520022d000e211620022f000c211720022d000b211820022d000a210520022f0008211920022d0007212020022d0006212120022f0004212220022d0003212320022d0002212420022f000021252002102f201a102f41c000102d2202450d23200220032903900337000020022006370038200220073a0037200220083a00362002200a3b0034200220113a0033200220123a0032200220133b0030200220153a002f200220163a002e200220173b002c200220183a002b200220053a002a200220193b0028200220203a0027200220213a0026200220223b0024200220233a0023200220243a0022200220253b00202002201b3700182002200b3a00172002200c3a00162002200d3b00142002200e3a00132002200f3a0012200220103b0010200241086a20034190036a41086a290300370000200341206a200241c00041c8e1ca004100410010b5012003280220211a2002102f201a4101470d01200441e4004d0d0220004183303b0100200041086a4112360200200041046a418cf5c000360200200041026a41003a00000c180b200041023a00000c170b20004183303b0100200041086a4108360200200041046a4184f5c000360200200041026a41013a00000c160b41a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41d8bdc100ad4280808080e0008410012202290008211b20022d0007210720022d0006210820022f0004210a20022d0003210b20022d0002210c20022f0000210d2002102f4120102d221a450d20201a20032903b805370000201a41186a200341b8056a41186a290300370000201a41106a200341b8056a41106a290300370000201a41086a200341b8056a41086a290300370000201aad428080808080048410032202290018210620022d0017210e20022d0016210f20022f0014211020022d0013211120022d0012211220022f0010211320022d000f211520022d000e211620022f000c211720022d000b211820022d000a210520022f0008211920022d0007212020022d0006212120022f0004212220022d0003212320022d0002212420022f000021252002102f201a102f41c000102d2202450d20200341106a2004ad4200428080d287e2bc2d420010ed062002200329039003370000200220063700382002200e3a00372002200f3a0036200220103b0034200220113a0033200220123a0032200220133b0030200220153a002f200220163a002e200220173b002c200220183a002b200220053a002a200220193b0028200220203a0027200220213a0026200220223b0024200220233a0023200220243a0022200220253b00202002201b370018200220073a0017200220083a00162002200a3b00142002200b3a00132002200c3a00122002200d3b0010200241086a20034190036a41086a290300370000200341f00e6a200210b601200341f00e6a41086a290300211b20032902840f210620032903f00e211c20032802800f211a2002102f20064200201a1b2126201a4101201a1b21200240201c4200201a1b220620032903102227542207201b4200201a1b221b200341106a41086a290300222854201b20285122021b450d0020032028201b7d2027200654ad7d221c3703302003202720067d221d3703282003200341b8056a3602c0074104211a0240201d201c84500d002003200341b8056a3602c80c2003200341c80c6a3602f80e2003200341c0076a3602f40e2003200341286a3602f00e200341e8096a200341b8056a200341f00e6a109401024020032802e8094101470d00200320032900ed093703f00e2003200341f4096a2800003600f70e20032d00ec09211a0c010b4104211a200341e8096a41086a2903004201520d00200341e8096a41106a290300211c20032802c80c2108200341a80f6a200341e8096a41186a290300370300200341a00f6a201c370300200341f00e6a41086a41003a0000200341f90e6a2008290000370000200341810f6a200841086a290000370000200341890f6a200841106a290000370000200341910f6a200841186a290000370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200320032903f00e37039003200320032800f70e36009703201a41ff01714104460d002000201a3a00002000200329039003370001200041086a2003280097033600002026a7450d162020102f0c160b02402006202758201b20285820021b0d002003201b20287d2007ad7d221b3703302003200620277d22063703282006201b84500d002003200341b8056a3602c80c200341e8096a200341b8056a200341286a200341c80c6a10960120032903e8094201520d0020032903f009211b200341a80f6a200341e8096a41106a290300370300200341a00f6a201b370300200341f00e6a41086a41003a0000200341f90e6a20032903b805370000200341810f6a200341b8056a41086a290300370000200341890f6a200341b8056a41106a290300370000200341910f6a200341d0056a290300370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b02402026422088a72202450d002002410574211a202021020340200210b701200241206a2102201a41606a221a0d000b0b4100211302400240200441c4006c22020d0041012119410021210c010b200241c4006d221a41ffffff3f71201a470d1b201a410574221a4100480d1b201a102d2219450d21201a41057621210b0240200920026a22222009460d00200441c4006c2118200341f00e6a41206a2105200341f00e6a41216a2107200341e8096a411f6a211541a4e3c400ad4280808080c00084211e41a9f6c000ad4280808080f00084211f4100210b201921044100211302400340200341c0076a41186a221a2009200b6a220241186a290200370300200341c0076a41106a2208200241106a290200370300200341c0076a41086a220a200241086a290200370300200341e8096a41086a220f200241296a290000370300200341e8096a41106a2210200241316a290000370300200341e8096a41186a2211200241396a2900003703002015200241c0006a280000360000200320022902003703c0072003200241216a2900003703e809200241206a2d000022124106460d01200341c80c6a41186a220c201a290300370300200341c80c6a41106a220d2008290300370300200341c80c6a41086a220e200a290300370300200320032903c0073703c80c200341f00e6a41186a2208200341b8056a41186a290300370300200341f00e6a41106a220a200341b8056a41106a290300370300200341f00e6a41086a2216200341b8056a41086a290300370300200320032903b8053703f00e200320123a00900f200720032903e809370000200741086a200f290300370000200741106a2010290300370000200741186a20112903003700002007411f6a2015280000360000201e10012202290000211b200341c8026a41086a2212200241086a2900003703002003201b3703c8022002102f201f10012202290000211b20034190036a41086a2217200241086a2900003703002003201b370390032002102f4120102d2202450d23200220032903c80c370000200241186a200c290300370000200241106a200d290300370000200241086a200e2903003700002002ad42808080808004841003221a290000211b201a41086a2900002106201a41106a290000211c200341286a41186a220f201a41186a290000370300200341286a41106a2210201c370300200341286a41086a221120063703002003201b370328201a102f2002102f41c000102d2202450d23200220032903c802370000200220032903900337001020022003290328370020200241086a2012290300370000200241186a2017290300370000200241286a2011290300370000200241306a2010290300370000200241386a200f2903003700004120102d221a450d23201a20032903f00e370000201a41186a2008290300370000201a41106a200a290300370000201a41086a2016290300370000200341286a200510a7012003280228211202400240200328023022080d00200841206a210a0c010b200841206a220a2008490d1e200a41c000200a41c0004b1b22164100480d1e201a412020161031221a450d240b201a41206a2012200810e8061a0240200328022c450d002012102f0b2002ad4280808080800884200aad422086201aad841004201a102f2002102f024020032d00900f4101470d0020032802980f450d0020032802940f102f0b2011200e290300221b3703002010200d2903002206370300200f200c290300221c370300200320032903c80c221d370328200441186a201c370000200441106a2006370000200441086a201b3700002004201d370000201341016a2113200441206a21042018200b41c4006a220b470d000c020b0b200241c4006a2022460d00200241e4006a21022018200b6b41bc7f6a211a0340024020022d00004101470d00200241086a280200450d00200241046a280200102f0b200241c4006a2102201a41bc7f6a221a0d000b0b02402014450d002009102f0b0240024002402013450d00200341f00e6a41186a2013360200200341840f6a2021360200200320273703f00e200320193602800f200320283703f80e41a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41d8bdc100ad4280808080e0008410012202290008211b20022d0007210420022d0006210720022f0004210820022d0003210920022d0002210a20022f0000210b2002102f4120102d221a450d23201a20032903b805370000201a41186a200341b8056a41186a290300370000201a41106a200341b8056a41106a290300370000201a41086a200341b8056a41086a290300370000201aad428080808080048410032202290018210620022d0017210c20022d0016210d20022f0014210e20022d0013210f20022d0012211020022f0010211120022d000f211220022d000e211320022f000c211420022d000b211520022d000a211620022f0008211720022d0007211820022d0006210520022f0004212220022d0003212320022d0002212420022f000021252002102f201a102f41c000102d2202450d232002200329039003370000200220063700382002200c3a00372002200d3a00362002200e3b00342002200f3a0033200220103a0032200220113b0030200220123a002f200220133a002e200220143b002c200220153a002b200220163a002a200220173b0028200220183a0027200220053a0026200220223b0024200220233a0023200220243a0022200220253b00202002201b370018200220043a0017200220073a0016200220083b0014200220093a00132002200a3a00122002200b3b0010200241086a20034190036a41086a290300370000200341c0003602ec09200320023602e809200341f00e6a200341e8096a10b8012002102f20210d010c020b41a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41d8bdc100ad4280808080e0008410012202290008211b20022d0007210420022d0006210720022f0004210820022d0003210920022d0002210a20022f0000210b2002102f4120102d221a450d22201a20032903b805370000201a41186a200341b8056a41186a290300370000201a41106a200341b8056a41106a290300370000201a41086a200341b8056a41086a290300370000201aad428080808080048410032202290018210620022d0017210c20022d0016210d20022f0014210e20022d0013210f20022d0012211020022f0010211120022d000f211220022d000e211320022f000c211420022d000b211520022d000a211620022f0008211720022d0007211820022d0006210520022f0004212220022d0003212320022d0002212420022f000021252002102f201a102f41c000102d2202450d222002200329039003370000200220063700382002200c3a00372002200d3a00362002200e3b00342002200f3a0033200220103a0032200220113b0030200220123a002f200220133a002e200220143b002c200220153a002b200220163a002a200220173b0028200220183a0027200220053a0026200220223b0024200220233a0023200220243a0022200220253b00202002201b370018200220043a0017200220073a0016200220083b0014200220093a00132002200a3a00122002200b3b0010200241086a20034190036a41086a2903003700002002ad428080808080088410052002102f2021450d010b2019102f0b02402026a7450d002020102f0b200041043a0000410021004101211a0c1f0b2002411a6a290100211b200241196a2d00002104200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f010021174101211a024020022d00000d0020022d0001410147211a0b2003201b3703a803200320043a00a703200320073a00a603200320083b01a403200320093a00a3032003200a3a00a2032003200b3b01a0032003200c3a009f032003200d3a009e032003200e3b019c032003200f3a009b03200320103a009a03200320113b019803200320123a009703200320133a009603200320143b019403200320153a009303200320163a009203200320173b0190030240201a0d00200341c8026a41186a220420034190036a41186a290300370300200341c8026a41106a220720034190036a41106a290300370300200341c8026a41086a220820034190036a41086a221a29030037030020032003290390033703c802200341f00e6a200341c8026a10b901200341f00e6a41086a290300211e200341f00e6a41186a2802002125200341840f6a280200210920032903f00e211f20032802800f212441a4e3c400ad4280808080c0008410012202290000211b201a200241086a2900003703002003201b370390032002102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210a20022d0006210b20022f0004210c20022d0003210d20022d0002210e20022f0000210f2002102f4120102d221a450d20201a20032903c802370000201a41186a2004290300370000201a41106a2007290300370000201a41086a2008290300370000201aad428080808080048410032202290018210620022d0017210420022d0016210720022f0014210820022d0013211020022d0012211120022f0010211220022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007210520022d0006211920022f0004212020022d0003212120022d0002212220022f000021232002102f201a102f41c000102d2202450d20200220032903900337000020022006370038200220043a0037200220073a0036200220083b0034200220103a0033200220113a0032200220123b0030200220133a002f200220143a002e200220153b002c200220163a002b200220173a002a200220183b0028200220053a0027200220193a0026200220203b0024200220213a0023200220223a0022200220233b00202002201b3700182002200a3a00172002200b3a00162002200c3b00142002200d3a00132002200e3a00122002200f3b0010200241086a20034190036a41086a290300370000200341f00e6a200210b401024020032d009411220d410246221a0d002002ad428080808080088410050b200341f00e6a41086a290300211d20032903f00e211c20032802880f210420032802840f210820032802800f2107200341286a200341f00e6a411c6a41880210e8061a200341c8096a41176a220a200341f00e6a41bc026a280000360000200341c8096a41106a220b200341f00e6a41b5026a290000370300200341c8096a41086a220c200341f00e6a41ad026a29000037030020032003290095113703c80920034190036a200341286a41880210e8061a200341f0026a41176a220e200a280000360000200341f0026a41106a220a200b290300370300200341f0026a41086a200c290300370300200320032903c8093703f0020240201a0d00200341c0076a20034190036a41880210e8061a20034198056a41176a221a200e28000036000020034198056a41106a220b200a29030037030020034198056a41086a220a200341f0026a41086a290300370300200320032903f002370398052002102f200341b8056a200341c0076a41880210e8061a200341c80c6a200341b8056a41880210e8061a200341d00e6a41176a2202201a280000360000200341d00e6a41106a221a200b290300370300200341d00e6a41086a220b200a290300370300200341800a6a2004360200200341fc096a200836020020032003290398053703d00e2003201d3703f0092003201c3703e809200320073602f809200341e8096a411c6a200341c80c6a41880210e806210a2003418c0c6a200d3a00002003418d0c6a20032903d00e370000200341e8096a41ad026a200b290300370000200341e8096a41b5026a201a290300370000200341e8096a41bc026a2002280000360000024002402004410574221a0d004200211b420021060c010b200741106a21024200211b420021060340200241086a2903004200200241786a29030042015122041b20067c2002290300420020041b2206201b7c221b200654ad7c2106200241206a2102201a41606a221a0d000b0b201d201e7c201c201f7c221d201c54ad7c20067c2106201d201b7c221b201d54ad211c02402008450d002007102f0b2006201c7c2106200a10a40102402025450d002025410574211a202421020340200210b701200241206a2102201a41606a221a0d000b0b2003201b370328200320063703300240201b200684500d002003200341c8026a3602c80c200341e8096a200341c8026a200341286a200341c80c6a10960120032903e8094201520d0020032903f009211c200341a80f6a200341e8096a41106a290300370300200341a00f6a201c370300200341f00e6a41086a41003a0000200341f90e6a20032903c802370000200341810f6a200341c8026a41086a290300370000200341890f6a200341c8026a41106a290300370000200341910f6a200341e0026a290300370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200341a80f6a2006370300200341a00f6a201b3703004101211a200341f00e6a41086a41013a0000200341f90e6a20032903c802370000200341890f6a200341d8026a290300370000200341910f6a200341e0026a290300370000200341c8026a41086a290300211b200341113a00f00e200341f00e6a41116a201b37000041c8e1ca004100200341f00e6a108c0102402009450d002024102f0b200041043a00000c1f0b2002102f200041086a4108360200200041046a41fcf4c000360200200041026a41023a000020004183303b01002009450d142024102f0c140b200041023a00004101211a0c1d0b20022d00000d0820022d00014101470d08200141106a290300211e200141086a290300211f200141046a280200211a200241196a2d00002104200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703e00c200320043a00df0c200320073a00de0c200320083b01dc0c200320093a00db0c2003200a3a00da0c2003200b3b01d80c2003200c3a00d70c2003200d3a00d60c2003200e3b01d40c2003200f3a00d30c200320103a00d20c200320113b01d00c200320123a00cf0c200320133a00ce0c200320143b01cc0c200320153a00cb0c200320163a00ca0c200320173b01c80c41a4e3c400ad4280808080c0008410012202290000211b200229000821062002102f4188bec100ad4280808080a0018410012202290000211c2002290008211d2002102f2003201d3703800a2003201c3703f809200320063703f0092003201b3703e809200341f00e6a200341e8096a10b30120032802f00e2202410820021b210402400240201a20032902f40e420020021b221b422088a74f0d002004201a4106746a2202450d0020022903004201520d002004201a4106746a2208290308201f56200841106a2903002206201e562006201e511b450d0120004183303b0100200041086a410a360200200041046a41e8f4c000360200200041026a41043a00000c130b20004183303b0100200041086a410a360200200041046a41f2f4c000360200200041026a41033a00000c120b41a4e3c400ad4280808080c00084100122022900002106200341a80c6a41086a200241086a290000370300200320063703a80c2002102f41e8bcc100ad4280808080a00184100122022900002106200341d00e6a41086a200241086a290000370300200320063703d00e2002102f4120102d2202450d1e200220032903c80c370000200241186a200341c80c6a41186a290300370000200241106a200341c80c6a41106a290300370000200241086a200341c80c6a41086a2903003700002002ad4280808080800484100322072900002106200741086a290000211c200741106a290000211d20034190036a41186a2209200741186a29000037030020034190036a41106a220a201d37030020034190036a41086a220b201c37030020032006370390032007102f2002102f41c000102d2202450d1e200220032903a80c370000200241086a200341a80c6a41086a290300370000200220032903d00e370010200241186a200341d00e6a41086a2903003700002002200329039003370020200241286a200b290300370000200241306a200a290300370000200241386a2009290300370000200341f00e6a200210b401200341f00e6a41086a290300210620032903f00e211c20032802800f210a20032802840f210c20032802880f210b20034190036a200341f00e6a411c6a41880210e8061a200341f0026a41086a200341f00e6a41ad026a290000370300200341f0026a41106a200341f00e6a41b5026a290000370300200341f0026a41176a2207200341f00e6a41bc026a28000036000020032003290095113703f00202400240024002400240024020032d00941122094102460d00200341c0076a20034190036a41880210e8061a20034198056a41176a220d200728000036000020034198056a41106a2207200341f0026a41106a29030037030020034198056a41086a220e200341f0026a41086a290300370300200320032903f002370398052002102f200341b8056a200341c0076a41880210e8061a200341286a200341b8056a41880210e8061a200341c8026a41176a2202200d280000360000200341c8026a41106a220d2007290300370300200341c8026a41086a2207200e290300370300200341800a6a200b360200200341fc096a200c36020020032003290398053703c802200320063703f0092003201c3703e8092003200a3602f809200341e8096a411c6a200341286a41880210e806210e2003418c0c6a20093a00002003418d0c6a20032903c802370000200341e8096a41ad026a2007290300370000200341e8096a41b5026a200d290300370000200341e8096a41bc026a2002280000360000200841086a220d41086a2903002106200d290300211c41002102200b41014b0d01200b0e020302030b2002102f200041086a410a360200200041046a41def4c000360200200041026a41053a000020004183303b01000c160b200b2107034020022007410176220820026a2209200a20094105746a280200201a4b1b2102200720086b220741014b0d000b0b200a20024105746a22082802002207201a460d01200b20022007201a496a2202490d0c0b0240200b200c470d00200c41016a2207200c490d1b200c41017422082007200820074b1b220741ffffff3f712007470d1b200741057422074100480d1b02400240200c0d002007102d210a0c010b200a200c41057420071031210a0b200a450d212003200a3602f80920032007410576220c3602fc090b200a20024105746a220741206a2007200b20026b41057410e9061a200741186a2006370300200741106a201c370300200742013703082007201a3602002003200b41016a3602800a0c010b200b20024d0d0b0240200a20024105746a2202280208417f6a220741054b0d00024020070e06000101010100000b20004183303b0100200041086a410f360200200041046a41cff4c000360200200041026a41063a00000c120b200241086a42013703002008201a360200200241186a2006370300200241106a201c3703000b200d29030021062003200d41086a290300221c3703c807200320063703c0072003200341c80c6a3602c8024104210202402006201c84500d002003200341c80c6a3602b8052003200341b8056a3602f80e2003200341c8026a3602f40e2003200341c0076a3602f00e200341286a200341c80c6a200341f00e6a109401024020032802284101470d002003200329002d3703f00e2003200341346a2800003600f70e20032d002c21020c010b41042102200341286a41086a2903004201520d00200341286a41106a290300210620032802b8052107200341a80f6a200341286a41186a290300370300200341a00f6a2006370300200341f00e6a41086a41003a0000200341f90e6a2007290000370000200341810f6a200741086a290000370000200341890f6a200741106a290000370000200341910f6a200741186a290000370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200320032903f00e37039003200320032800f70e360097030240200241ff01714104470d00200341f00e6a200341e8096a41c00210e8061a41a4e3c400ad4280808080c0008410012202290000210620034190036a41086a200241086a29000037030020032006370390032002102f41e8bcc100ad4280808080a0018410012202290008210620022d0007210820022d0006210920022f0004210a20022d0003210b20022d0002210c20022f0000210d2002102f4120102d2207450d1f200720032903c80c370000200741186a200341c80c6a41186a290300370000200741106a200341c80c6a41106a290300370000200741086a200341c80c6a41086a2903003700002007ad428080808080048410032202290018211c20022d0017210e20022d0016210f20022f0014211020022d0013211120022d0012211220022f0010211320022d000f211420022d000e211520022f000c211620022d000b211720022d000a211820022f0008210520022d0007211920022d0006212020022f0004212120022d0003212220022d0002212320022f000021242002102f2007102f41c000102d2202450d1f20022003290390033700002002201c3700382002200e3a00372002200f3a0036200220103b0034200220113a0033200220123a0032200220133b0030200220143a002f200220153a002e200220163b002c200220173a002b200220183a002a200220053b0028200220193a0027200220203a0026200220213b0024200220223a0023200220233a0022200220243b002020022006370018200220083a0017200220093a00162002200a3b00142002200b3a00132002200c3a00122002200d3b0010200241086a20034190036a41086a290300370000200341c00036022c20032002360228200341f00e6a200341286a10ac012002102f0240200341840f6a280200450d0020032802800f102f0b2003418c0f6a10a401200341f00e6a41086a41033a0000200341f90e6a20032903c80c370000200341890f6a200341d80c6a290300370000200341910f6a200341e00c6a2903003700002003419c0f6a201a360200200341c80c6a41086a2903002106200341113a00f00e200341f00e6a41116a200637000041c8e1ca004100200341f00e6a108c010240201ba7450d002004102f0b200041043a00004101211a0c1d0b200020023a00002000200329039003370001200041086a2003280097033600000c100b0240024002400240024020022d00000d0020022d00014101470d00200141046a2802002109200241196a2d0000211a200241186a2d00002104200241166a2f01002107200241156a2d00002108200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703e00c2003201a3a00df0c200320043a00de0c200320073b01dc0c200320083a00db0c2003200a3a00da0c2003200b3b01d80c2003200c3a00d70c2003200d3a00d60c2003200e3b01d40c2003200f3a00d30c200320103a00d20c200320113b01d00c200320123a00cf0c200320133a00ce0c200320143b01cc0c200320153a00cb0c200320163a00ca0c200320173b01c80c41a4e3c400ad4280808080c0008410012202290000211b200341a80c6a41086a200241086a2900003703002003201b3703a80c2002102f41e8bcc100ad4280808080a0018410012202290000211b200341d00e6a41086a200241086a2900003703002003201b3703d00e2002102f4120102d2202450d22200220032903c80c370000200241186a200341c80c6a41186a290300370000200241106a200341c80c6a41106a290300370000200241086a200341c80c6a41086a2903003700002002ad42808080808004841003221a290000211b201a41086a2900002106201a41106a290000211c20034190036a41186a2204201a41186a29000037030020034190036a41106a2207201c37030020034190036a41086a20063703002003201b37039003201a102f2002102f41c000102d2202450d22200220032903a80c3700004108210c200241086a200341a80c6a41086a290300370000200220032903d00e370010200241186a200341d00e6a41086a2903003700002002200329039003370020200241286a20034190036a41086a290300370000200241306a2007290300370000200241386a2004290300370000200341f00e6a200210b401200341f00e6a41086a290300211b20032903f00e210620032802800f210820032802840f210b20032802880f210a20034190036a200341f00e6a411c6a41880210e8061a200341f0026a41086a221a200341f00e6a41ad026a290000370300200341f0026a41106a200341f00e6a41b5026a290000370300200341f0026a41176a2204200341f00e6a41bc026a28000036000020032003290095113703f002024020032d00941122074102460d00200341c0076a20034190036a41880210e8061a20034198056a41176a220d200428000036000020034198056a41106a2204200341f0026a41106a29030037030020034198056a41086a220e201a290300370300200320032903f002370398052002102f200341b8056a200341c0076a41880210e8061a200341286a200341b8056a41880210e8061a200341c8026a41176a2202200d280000360000200341c8026a41106a221a2004290300370300200341c8026a41086a2204200e290300370300200341800a6a200a360200200341fc096a200b36020020032003290398053703c8022003201b3703f009200320063703e809200320083602f809200341e8096a411c6a200341286a41880210e806210f2003418c0c6a20073a00002003418d0c6a20032903c802370000200341e8096a41ad026a2004290300370000200341e8096a41b5026a201a290300370000200341e8096a41bc026a20022800003600004101210d4184f5c000210e41002102200a41014b0d02200a0e020403040b2002102f200041086a410a360200200041046a41def4c000360200200041026a41053a000020004183303b01004101211a0c200b200041023a00004101211a0c1f0b200a211a03402002201a410176220420026a2207200820074105746a28020020094b1b2102201a20046b221a41014b0d000b0b200820024105746a2802002009470d00200a20024d0d0c200820024105746a221a41186a290300211b201a41106a2903002106201a290308211c201a201a41206a2002417f73200a6a41057410e9061a2003200a417f6a3602800a201c4201510d01410e210c41c1f4c000210e4107210d0b20004183303b0100200041086a200c360200200041046a200e360200200041026a200d3a00000240200b450d002008102f0b200f10a4014101211a0c1c0b200320063703c0072003201b3703c80702402006201b84500d002003200341c80c6a3602b805200341286a200341c80c6a200341c0076a200341b8056a10960120032903284201520d002003290330211b200341a80f6a200341286a41106a290300370300200341a00f6a201b370300200341f00e6a41086a41003a0000200341f90e6a20032903c80c370000200341810f6a200341c80c6a41086a290300370000200341890f6a200341c80c6a41106a290300370000200341910f6a200341e00c6a290300370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200341f00e6a200341e8096a41c00210e8061a41a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210420022d0006210720022f0004210820022d0003210a20022d0002210b20022f0000210c2002102f4120102d221a450d1d201a20032903c80c370000201a41186a200341c80c6a41186a290300370000201a41106a200341c80c6a41106a290300370000201a41086a200341c80c6a41086a290300370000201aad428080808080048410032202290018210620022d0017210d20022d0016210e20022f0014210f20022d0013211020022d0012211120022f0010211220022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007210520022d0006211920022f0004212020022d0003212120022d0002212220022f000021232002102f201a102f41c000102d2202450d1d2002200329039003370000200220063700382002200d3a00372002200e3a00362002200f3b0034200220103a0033200220113a0032200220123b0030200220133a002f200220143a002e200220153b002c200220163a002b200220173a002a200220183b0028200220053a0027200220193a0026200220203b0024200220213a0023200220223a0022200220233b00202002201b370018200220043a0017200220073a0016200220083b00142002200a3a00132002200b3a00122002200c3b0010200241086a20034190036a41086a290300370000200341c00036022c20032002360228200341f00e6a200341286a10ac012002102f0240200341840f6a280200450d0020032802800f102f0b2003418c0f6a10a401200341f00e6a41086a41043a0000200341f90e6a20032903c80c370000200341890f6a200341d80c6a290300370000200341910f6a200341e00c6a2903003700002003419c0f6a2009360200200341c80c6a41086a290300211b200341113a00f00e200341f00e6a41116a201b37000041c8e1ca004100200341f00e6a108c01200041043a00004101211a0c1b0b4101211a20022d00014101470d0420022d000041ff01710d04200141106a2903002128200141086a2903002127200141046a280200211a20032002411a6a2901003703880f2003200241026a2901003703f00e20032002410a6a2901003703f80e2003200241126a2901003703800f41a4e3c400ad4280808080c00084221b1001220229000021062002290008211c2002102f4188bec100ad4280808080a00184221d10012202290000211e2002290008211f2002102f2003201f3703a8032003201e3703a0032003201c370398032003200637039003200341e8096a20034190036a10b30120032802e8092204410820041b2102410321070240201a20032902ec09420020041b221e422088a722044f0d002002201a4106746a2208450d0020082903004201520d0002402002201a4106746a220841206a221a200341f00e6a460d00201a200341f00e6a412010ea060d010b200841086a221a2027370300201a2028370308410421070b201b1001221a290000211b201a2900082106201a102f201d1001221a290000211c201a290008211d201a102f2003201d3703a8032003201c3703a00320032006370398032003201b370390030240024020020d0020034190036aad428080808080048410050c010b200341e8096a2002200410ba0120034190036aad428080808080048420033502f00942208620032802e809221aad841004024020032802ec09450d00201a102f0b201ea7450d002002102f0b20004198123b0001200020073a0000200041086a410c360200200041046a41a5f4c0003602004101211a0c1a0b200141246a280200211a200341286a41186a200141196a290000370300200341286a41106a200141116a290000370300200341286a41086a200141096a29000037030020032001290001370328024020022d00000d0020022d00014101470d00200241196a2d00002104200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703880f200320043a00870f200320073a00860f200320083b01840f200320093a00830f2003200a3a00820f2003200b3b01800f2003200c3a00ff0e2003200d3a00fe0e2003200e3b01fc0e2003200f3a00fb0e200320103a00fa0e200320113b01f80e200320123a00f70e200320133a00f60e200320143b01f40e200320153a00f30e200320163a00f20e200320173b01f00e200341e8096a41186a2208200341286a41186a290300370300200341e8096a41106a2209200341286a41106a290300370300200341e8096a41086a220a200341286a41086a290300370300200320032903283703e80941a4e3c400ad4280808080c00084221b1001220229000021062002290008211c2002102f4188bec100ad4280808080a00184221d10012202290000211e2002290008211f2002102f2003201f3703a8032003201e3703a0032003201c370398032003200637039003200341c80c6a20034190036a10b30120032802c80c2204410820041b2102410321070240201a20032902cc0c420020041b221e422088a722044f0d002002201a4106746a220b450d00200b2903004201520d0020092f01002109200a2f0100210a20032d00ff09210b20032d00fe09210c20032f01fc09210d20032d00fb09210e20032d00fa09210f20032d00f709211020032d00f609211120032f01f409211220032d00f309211320032d00f209211420032d00ef09211520032d00ee09211620032f01ec09211720032d00eb09211820032d00ea09210520032f01e80921192003200829030022063703a8032003200b3a00a7032003200c3a00a6032003200d3b01a4032003200e3a00a3032003200f3a00a203200320093b01a003200320103a009f03200320113a009e03200320123b019c03200320133a009b03200320143a009a032003200a3b019803200320153a009703200320163a009603200320173b019403200320183a009303200320053a009203200320193b0190030240200341f00e6a2002201a4106746a220841206a221a460d00201a200341f00e6a412010ea060d010b201a20153a0007201a20163a0006201a20173b0104201a20183a0003201a20053a0002201a20193b01002008200a3b0128201a20103a000f201a20113a000e201a20123b010c201a20133a000b201a20143a000a200820093b0130201a200b3a0017201a200c3a0016201a200d3b0114201a200e3a0013201a200f3a001220082006370338410421070b201b1001221a290000211b201a2900082106201a102f201d1001221a290000211c201a290008211d201a102f2003201d3703a8032003201c3703a00320032006370398032003201b370390030240024020020d0020034190036aad428080808080048410050c010b200341c80c6a2002200410ba0120034190036aad428080808080048420033502d00c42208620032802c80c221aad841004024020032802cc0c450d00201a102f0b201ea7450d002002102f0b20004198123b0001200020073a0000200041086a410c360200200041046a41a5f4c0003602004101211a0c1a0b200041023a00004101211a0c190b4101211a024020022d00014101470d0020022d000041ff01710d00200141086a2903002128200141046a280200211a20032002411a6a2901003703880f2003200241026a2901003703f00e20032002410a6a2901003703f80e2003200241126a2901003703800f41a4e3c400ad4280808080c00084221b1001220229000021062002290008211c2002102f4188bec100ad4280808080a00184221d10012202290000211e2002290008211f2002102f2003201f3703a8032003201e3703a0032003201c370398032003200637039003200341e8096a20034190036a10b30120032802e8092204410820041b2102410321070240201a20032902ec09420020041b221e422088a722044f0d002002201a4106746a2208450d0020082903004201520d0002402002201a4106746a220841206a221a200341f00e6a460d00201a200341f00e6a412010ea060d010b20082028370318410421070b201b1001221a290000211b201a2900082106201a102f201d1001221a290000211c201a290008211d201a102f2003201d3703a8032003201c3703a00320032006370398032003201b370390030240024020020d0020034190036aad428080808080048410050c010b200341e8096a2002200410ba0120034190036aad428080808080048420033502f00942208620032802e809221aad841004024020032802ec09450d00201a102f0b201ea7450d002002102f0b20004198123b0001200020073a0000200041086a410c360200200041046a41a5f4c0003602004101211a0c190b200041023a00000c180b200141c0006a2903002106200141386a290300211c200141306a290300211b200141046a280200211a200341286a41206a200141286a280200360200200341286a41186a200141206a290200370300200341286a41106a200141186a290200370300200341286a41086a200141106a2902003703002003200141086a29020037032820022d00000d0720022d00014101470d07200241196a2d00002104200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703e002200320043a00df02200320073a00de02200320083b01dc02200320093a00db022003200a3a00da022003200b3b01d8022003200c3a00d7022003200d3a00d6022003200e3b01d4022003200f3a00d302200320103a00d202200320113b01d002200320123a00cf02200320133a00ce02200320143b01cc02200320153a00cb02200320163a00ca02200320173b01c802200341f00e6a41206a200341286a41206a280200360200200341f00e6a41186a200341286a41186a290300370300200341f00e6a41106a200341286a41106a290300370300200341f00e6a41086a200341286a41086a290300370300200320032903283703f00e200341e8096a200341f00e6a10bb0102400240024002400240024002400240024020032d00e8094101460d00200341e8096a41086a2d00002102200341f1096a2f00002104200341f3096a2d00002107200341f4096a2d00002108200341f5096a2f00002109200341f7096a2d0000210a200341e8096a41106a2d0000210b200341f9096a2f0000210c200341fb096a2d0000210d200341fc096a2d0000210e200341fd096a2f0000210f200341ff096a2d00002110200341e8096a41186a2d0000211120032f00e909211220032d00eb09211320032d00ec09211420032f00ed09211520032d00ef0921162003200341810a6a2900003703e00c200320113a00df0c200320103a00de0c2003200f3b01dc0c2003200e3a00db0c2003200d3a00da0c2003200c3b01d80c2003200b3a00d70c2003200a3a00d60c200320093b01d40c200320083a00d30c200320073a00d20c200320043b01d00c200320023a00cf0c200320163a00ce0c200320153b01cc0c200320143a00cb0c200320133a00ca0c200320123b01c80c201b4201510d0141a4e3c400ad4280808080c0008410012202290000211d2002290008211e2002102f4188bec100ad4280808080a0018410012202290000211f200229000821282002102f200320283702800a2003201f3702f8092003201e3702f0092003201d3702e809200341f00e6a200341e8096a10b30120032802f00e2202410820021b2104201a20032902f40e420020021b221d422088a74f0d032004201a4106746a2202450d0320022903004201520d0302402004201a4106746a41206a2202200341c8026a460d002002200341c8026a412010ea060d040b0240201da7450d002004102f0b41a4e3c400ad4280808080c0008410012202290000211d200341a80c6a41086a200241086a2900003703002003201d3703a80c2002102f41e8bcc100ad4280808080a0018410012202290000211d200341d00e6a41086a200241086a2900003703002003201d3703d00e2002102f4120102d2202450d22200220032903c80c370000200241186a200341c80c6a41186a290300370000200241106a200341c80c6a41106a290300370000200241086a200341c80c6a41086a2903003700002002ad428080808080048410032204290000211d200441086a290000211e200441106a290000211f20034190036a41186a2207200441186a29000037030020034190036a41106a2208201f37030020034190036a41086a201e3703002003201d370390032004102f2002102f41c000102d2202450d22200220032903a80c370000200241086a200341a80c6a41086a290300370000200220032903d00e370010200241186a200341d00e6a41086a2903003700002002200329039003370020200241286a20034190036a41086a290300370000200241306a2008290300370000200241386a2007290300370000200341f00e6a200210b401200341f00e6a41086a290300211d20032903f00e211e20032802800f210920032802840f210b20032802880f210a20034190036a2003418c0f6a41880210e8061a200341f0026a41086a22042003419d116a290000370300200341f0026a41106a200341a5116a290000370300200341f0026a41176a2207200341ac116a28000036000020032003290095113703f00220032d009411220c4102460d02200341c0076a20034190036a41880210e8061a20034198056a41176a2208200728000036000020034198056a41106a2207200341f0026a41106a29030037030020034198056a41086a220d2004290300370300200320032903f002370398052002102f200341b8056a200341c0076a41880210e8061a200341e8096a200341b8056a41880210e8061a200341c8096a41176a2008280000360000200341c8096a41106a2007290300370300200341c8096a41086a200d29030037030020032003290398053703c80941002102200a41014b0d04200a0e020605060b200041013a00004101211a0c1f0b20004183303b0100200041086a4110360200200041046a41b1f4c000360200200041026a41083a00004101211a0c1e0b2002102f200041086a410d360200200041046a4198f4c000360200200041026a410a3a000020004183303b01004101211a0c1d0b20004183303b0100200041086a410c360200200041046a41a5f4c000360200200041026a41093a0000201da7450d122004102f4101211a0c1c0b200a2104034020022004410176220720026a2208200920084105746a280200201a4b1b2102200420076b220441014b0d000b0b200920024105746a22042802002207201a460d01200a20022007201a496a2202490d0b0b0240200a200b470d00200b41016a2204200b490d16200b41017422072004200720044b1b220441ffffff3f712004470d16200441057422044100480d1602400240200b0d002004102d21090c010b2009200b4105742004103121090b2009450d1c2004410576210b0b200920024105746a220441206a2004200a20026b41057410e9061a200441186a2006370300200441106a201c3703002004201b3703082004201a360200200a41016a210a0c010b200a20024d0d0a200920024105746a220241086a2107024020022903084201520d00200341f00e6a200341c80c6a200341c8026a200241106a290300200241186a290300410010bc010b2007201b3703002004201a360200200241186a2006370300200241106a201c3703000b200341f00e6a41186a200a360200200341840f6a200b3602002003201e3703f00e200320093602800f2003201d3703f80e2003418c0f6a200341e8096a41880210e806210720034194116a200c3a000020034195116a20032903c8093700002003419d116a200341c8096a41086a290300370000200341a5116a200341c8096a41106a290300370000200341ac116a200341df096a28000036000041a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210820022d0006210920022f0004210a20022d0003210b20022d0002210c20022f0000210d2002102f4120102d2204450d19200420032903c80c370000200441186a200341c80c6a41186a290300370000200441106a200341c80c6a41106a290300370000200441086a200341c80c6a41086a2903003700002004ad428080808080048410032202290018210620022d0017210e20022d0016210f20022f0014211020022d0013211120022d0012211220022f0010211320022d000f211420022d000e211520022f000c211620022d000b211720022d000a211820022f0008210520022d0007211920022d0006212020022f0004212120022d0003212220022d0002212320022f000021242002102f2004102f41c000102d2202450d192002200329039003370000200220063700382002200e3a00372002200f3a0036200220103b0034200220113a0033200220123a0032200220133b0030200220143a002f200220153a002e200220163b002c200220173a002b200220183a002a200220053b0028200220193a0027200220203a0026200220213b0024200220223a0023200220233a0022200220243b00202002201b370018200220083a0017200220093a00162002200a3b00142002200b3a00132002200c3a00122002200d3b0010200241086a20034190036a41086a290300370000200341c0003602c407200320023602c007200341f00e6a200341c0076a10ac012002102f024020032802840f450d0020032802800f102f0b200710a401200341f00e6a41086a41053a0000200341f90e6a20032903c80c370000200341890f6a200341d80c6a290300370000200341910f6a200341e00c6a2903003700002003419c0f6a201a360200200341c80c6a41086a290300211b200341113a00f00e200341f00e6a41116a201b37000041c8e1ca004100200341f00e6a108c01200041043a00004101211a0c170b200341e8026a200141246a280200360200200341e0026a2001411c6a290200370300200341c8026a41106a200141146a290200370300200341d0026a2001410c6a2902003703002003200141046a2902003703c802200241036a2d0000210420022f000121070240024020022d00002208417f6a221a41024b0d000240201a0e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200720044110747220084100477241ff01710d0a0b200341f00e6a41206a200341c8026a41206a280200360200200341f00e6a41186a2204200341c8026a41186a290300370300200341f00e6a41106a200341c8026a41106a290300370300200341f00e6a41086a2207200341c8026a41086a290300370300200320032903c8023703f00e200341e8096a200341f00e6a10bb0120034190036a41086a2202200341f1096a29000037030020034190036a41106a2208200341f9096a29000037030020034190036a41186a2209200341810a6a290000370300200320032900e909370390034101211a02400240024020032d00e8094101460d00200341c8096a41186a2009290300370300200341c8096a41106a2008290300370300200341c8096a41086a200229030037030020032003290390033703c809200341f00e6a200341c8096a10b9012007290300211e20042802002125200341840f6a280200210820032903f00e211f20032802800f212441a4e3c400ad4280808080c000841001221a290000211b2002201a41086a2900003703002003201b37039003201a102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210420022d0006210720022f0004210920022d0003210a20022d0002210b20022f0000210c2002102f4120102d221a450d1b201a20032903c809370000201a41186a200341c8096a41186a290300370000201a41106a200341c8096a41106a290300370000201a41086a200341c8096a41086a290300370000201aad428080808080048410032202290018210620022d0017210d20022d0016210e20022f0014210f20022d0013211020022d0012211120022f0010211220022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007210520022d0006211920022f0004212020022d0003212120022d0002212220022f000021232002102f201a102f41c000102d2202450d1b2002200329039003370000200220063700382002200d3a00372002200e3a00362002200f3b0034200220103a0033200220113a0032200220123b0030200220133a002f200220143a002e200220153b002c200220163a002b200220173a002a200220183b0028200220053a0027200220193a0026200220203b0024200220213a0023200220223a0022200220233b00202002201b370018200220043a0017200220073a0016200220093b00142002200a3a00132002200b3a00122002200c3b0010200241086a20034190036a41086a290300370000200341f00e6a200210b401024020032d009411220d410246221a0d002002ad428080808080088410050b200341f00e6a41086a290300211d20032903f00e211c20032802880f210420032802840f210920032802800f2107200341286a200341f00e6a411c6a41880210e8061a200341d00e6a41176a220a200341f00e6a41bc026a280000360000200341d00e6a41106a220b200341f00e6a41b5026a290000370300200341d00e6a41086a220c200341f00e6a41ad026a29000037030020032003290095113703d00e20034190036a200341286a41880210e8061a200341f0026a41176a220e200a280000360000200341f0026a41106a220a200b290300370300200341f0026a41086a220b200c290300370300200320032903d00e3703f0020240201a0d00200341c0076a20034190036a41880210e8061a20034198056a41176a221a200e28000036000020034198056a41106a220c200a29030037030020034198056a41086a220a200b290300370300200320032903f002370398052002102f200341b8056a200341c0076a41880210e8061a200341c80c6a200341b8056a41880210e8061a200341a80c6a41176a2202201a280000360000200341a80c6a41106a221a200c290300370300200341a80c6a41086a220b200a290300370300200341800a6a2004360200200341fc096a200936020020032003290398053703a80c2003201d3703f0092003201c3703e809200320073602f809200341e8096a411c6a200341c80c6a41880210e806210a2003418c0c6a200d3a00002003418d0c6a20032903a80c370000200341e8096a41ad026a200b290300370000200341e8096a41b5026a201a290300370000200341e8096a41bc026a2002280000360000024002402004410574221a0d004200211b420021060c010b200741106a21024200211b420021060340200241086a2903004200200241786a29030042015122041b20067c2002290300420020041b2206201b7c221b200654ad7c2106200241206a2102201a41606a221a0d000b0b201d201e7c201c201f7c221d201c54ad7c20067c2106201d201b7c221b201d54ad211c02402009450d002007102f0b2006201c7c2106200a10a40102402025450d002025410574211a202421020340200210b701200241206a2102201a41606a221a0d000b0b2003201b37032820032006370330201b20068450450d024200211c4200211d0c030b2002102f200041086a4108360200200041046a41fcf4c000360200200041026a41023a000020004183303b01002008450d0f2024102f4101211a0c190b200041013a00000c180b2003200341c8096a3602c80c200341e8096a200341c8096a200341286a200341c80c6a10bd01200341880a6a290300211d20032903800a211c20032903e8094201520d0020032903f009211e200341a80f6a200341e8096a41106a290300370300200341a00f6a201e370300200341f00e6a41086a41003a0000200341f90e6a20032903c809370000200341810f6a200341c8096a41086a290300370000200341890f6a200341c8096a41106a290300370000200341910f6a200341e0096a290300370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b201c201d10be01200341a80f6a2006370300200341a00f6a201b370300200341f00e6a41086a41023a0000200341f90e6a20032903c809370000200341890f6a200341d8096a290300370000200341910f6a200341e0096a290300370000200341c8096a41086a290300211b200341113a00f00e200341f00e6a41116a201b37000041c8e1ca004100200341f00e6a108c0102402008450d002024102f0b200041043a00004101211a0c160b200041023a00000c150b4188bbca0020072009103b000b200041023a00004101211a0c130b419ae3c300411e41f8b4ca001039000b41c4c2ca002002200b103b000b41b8e3c300411d41f8b4ca001039000b200041023a00004101211a0c0f0b419ae3c300411e41f8b4ca001039000b41c4c2ca002002200a103b000b200041023a00004101211a0c0c0b0240200c450d00200a102f0b200e10a4010b201ba7450d002004102f4101211a0c0a0b4101211a0c090b02402004450d00200441c4006c2100200941286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102f0b200241c4006a2102200041bc7f6a22000d000b0b410021004101211a2014450d092009102f0c090b2003201c20067d201b201d54ad7d221e3703c8072003201b201d7d221f3703c0072003200341b8056a3602c8094104211a0240201f201e84500d002003200341b8056a3602c8022003200341c8026a3602f80e2003200341c8096a3602f40e2003200341c0076a3602f00e200341c80c6a200341b8056a200341f00e6a109401024020032802c80c4101470d00200320032900cd0c3703f00e2003200341d40c6a2800003600f70e20032d00cc0c211a0c010b4104211a200341c80c6a41086a2903004201520d00200341c80c6a41106a290300211e20032802c8022104200341a80f6a200341c80c6a41186a290300370300200341a00f6a201e370300200341f00e6a41086a41003a0000200341f90e6a2004290000370000200341810f6a200441086a290000370000200341890f6a200441106a290000370000200341910f6a200441186a290000370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200320032903f00e37039003200320032800f70e36009703201a41ff01714104460d002000201a3a00002000200329039003370001200041086a2003280097033600000240200341fc096a280200450d0020032802f809102f0b200341840a6a10a4010c010b0240201d201b582006201c5820021b0d0020032006201c7d201d201b54ad7d22063703c8072003201d201b7d221b3703c007201b200684500d002003200341b8056a36029003200341c80c6a200341b8056a200341c0076a20034190036a10960120032903c80c4201520d0020032903d00c211b200341a80f6a200341c80c6a41106a290300370300200341a00f6a201b370300200341f00e6a41086a41003a0000200341f90e6a20032903b805370000200341810f6a200341b8056a41086a290300370000200341890f6a200341b8056a41106a290300370000200341910f6a200341d0056a290300370000200341033a00f00e41c8e1ca004100200341f00e6a108c010b200341f00e6a200341e8096a41c00210e8061a41a4e3c400ad4280808080c0008410012202290000211b20034190036a41086a200241086a2900003703002003201b370390032002102f41e8bcc100ad4280808080a0018410012202290008211b20022d0007210420022d0006210720022f0004210820022d0003210920022d0002210a20022f0000210b2002102f4120102d221a450d08201a20032903b805370000201a41186a200341b8056a41186a290300370000201a41106a200341b8056a41106a290300370000201a41086a200341b8056a41086a290300370000201aad428080808080048410032202290018210620022d0017210c20022d0016210d20022f0014210e20022d0013210f20022d0012211020022f0010211120022d000f211220022d000e211320022f000c211420022d000b211520022d000a211620022f0008211720022d0007211820022d0006210520022f0004211920022d0003212020022d0002212120022f000021222002102f201a102f41c000102d2202450d082002200329039003370000200220063700382002200c3a00372002200d3a00362002200e3b00342002200f3a0033200220103a0032200220113b0030200220123a002f200220133a002e200220143b002c200220153a002b200220163a002a200220173b0028200220183a0027200220053a0026200220193b0024200220203a0023200220213a0022200220223b00202002201b370018200220043a0017200220073a0016200220083b0014200220093a00132002200a3a00122002200b3b0010200241086a20034190036a41086a290300370000200341c0003602cc0c200320023602c80c200341f00e6a200341c80c6a10ac012002102f0240200341840f6a280200450d0020032802800f102f0b2003418c0f6a10a401200341f00e6a41086a41003a0000200341f90e6a20032903b805370000200341890f6a200341c8056a290300370000200341910f6a200341d0056a290300370000200341b8056a41086a290300211b200341113a00f00e200341f00e6a41116a201b37000041c8e1ca004100200341f00e6a108c01200041043a00000b410121004100211a0c060b2002201ba7470d02200241016a22042002490d00200241017422052004200520044b1b220441ffffff1f712004470d002004410674220441004e0d010b1038000b0240024020020d002004102d211a0c010b201a200241067420041031211a0b201a450d04201b428080808070832004410676ad84211b0b201b422088a7220421020b201a20024106746a2202420037030820024201370300200241106a4200370300200241186a4200370300200241386a2006370300200241376a20073a0000200241366a20083a0000200241346a20093b0100200241336a200a3a0000200241326a200b3a0000200241306a200c3b01002002412f6a200d3a00002002412e6a200e3a00002002412c6a200f3b01002002412b6a20103a00002002412a6a20113a0000200241286a20123b0100200241276a20133a0000200241266a20143a0000200241246a20153b0100200241236a20163a0000200241226a20173a0000200241206a20183b010041a4e3c400ad4280808080c000841001220229000021062002290008211c2002102f4188bec100ad4280808080a0018410012202290000211d2002290008211e2002102f2003201e3703a8032003201d3703a0032003201c37039803200320063703900302400240201a0d0020034190036aad428080808080048410050c010b201ba72102200341f00e6a201a200441016a10ba0120034190036aad428080808080048420033502f80e42208620032802f00e2207ad841004024020032802f40e450d002007102f0b2002450d00201a102f0b200341fc0e6a2004360200200341f80e6a41063a0000200341113a00f00e41c8e1ca004100200341f00e6a108c01200041043a00004101211a0b410121000b20012d0000417e6a220241014b0d0320020e020201020b1036000b2000450d0102402001410c6a2802002202450d00200241c4006c2100200141046a28020041286a210203400240200241786a2d00004101470d002002280200450d002002417c6a280200102f0b200241c4006a2102200041bc7f6a22000d000b0b200141086a280200450d012001280204102f0c010b201a450d00200141046a10a4010b200341b0116a24000bee09040a7f017e047f037e230041f0016b220224002002412036020c20022001360208200241106a2001ad42808080808004841002107302400240024002400240024020022802102203450d00200228021421042002200241186a280200360224200220033602202002200241206a10e60120022802000d0320022802042205200228022422064106762201200120054b1b22074106742201417f4c0d010240024020070d00410821080c010b2001102d2208450d030b02402005450d004100210903400240024002402006450d0020022006417f6a220a36022420022002280220220b41016a360220200b2d0000220141014b0d004200210c024002400240024020010e020100010b41002101200241003a00e8012006417f6a210a0340200a2001460d02200241c8016a20016a200b20016a220d41016a2d00003a00002002200d41026a3602202002200141016a220d3a00e801200d2101200d4120470d000b200241a8016a41086a220e200241c8016a41086a290300370300200241a8016a41106a220f200241c8016a41106a290300370300200241a8016a41186a2210200241c8016a41186a290300370300200220022903c8013703a8012002200d417f7320066a220136022420014110490d022002200b200d6a220141116a220b36022020022006200d6b220a416f6a220d360224200d4108490d02200141096a2900002111200141016a29000021122002200a41676a220a3602242002200141196a360220200b29000022134280025a0d02200241e8006a41086a200e290300220c370300200241c8006a41186a2010290300370300200241c8006a41106a200f290300370300200241c8006a41086a200c370300200220022903a801220c3703682002200c3703484201210c0b200941016a210d200241286a41186a220b200241c8006a41186a290300370300200241286a41106a2206200241c8006a41106a290300370300200241286a41086a220e200241c8006a41086a2903003703002002200229034837032820072009470d04024020094101742201200d2001200d4b1b220141ffffff1f712001470d002001410674220141004e0d040b1038000b20024100360224200141ff0171450d00200241003a00e8010b200241e8006a41086a20024188016a41086a290300370300200241e8006a41106a20024188016a41106a2903003703000b2007450d072008102f0c070b0240024020090d002001102d21080c010b200820094106742001103121080b2008450d05200141067621070b200820094106746a220120123703082001200c370300200141106a2011370300200141186a2013370300200141206a2002290328370300200141286a200e290300370300200141306a2006290300370300200141386a200b290300370300200a2106200d2109200d2005470d000b0b2008450d032000200736020420002008360200200041086a20053602000c040b200041003602000c040b103d000b1036000b200241003602b001200242013703a8012002410b36028c012002200241086a360288012002200241a8016a360268200241dc016a4101360200200242013702cc01200241b885c7003602c801200220024188016a3602d801200241e8006a41d8dbc100200241c8016a103c1a20023502b00142208620023502a801841008024020022802ac01450d0020022802a801102f0b200041003602000b2004450d002003102f0b200241f0016a24000bfe46070b7f017e017f017e017f027e3a7f230041f0076b22022400200241c00036021420022001360210200241186a2001ad42808080808008841002107302400240024002400240024020022802182203450d0041082104200228021c21052002200241186a41086a280200360294022002200336029002200220024190026a36028804200241086a20024188046a10eb04024020022802080d000240200228020c22064180012006418001491b2207450d002007410574102d2204450d030b0240024002402006450d00200241d0076a2108411021094100210a0340200241003602c807200241c8076a200228029002220b2002280294022201410420014104491b220c10e8061a20022001200c6b360294022002200b200c6a360290020240200141034b0d00200241c8076a200c6a41004104200c6b10e7061a0b20023502c807210d200241003a00c807024020022802940222012001410047220c490d00200241c8076a200228029002220b200c10e8061a20022001200c6b220e360294022002200b200c6a220c3602900202400240024020010d004200210f0c010b20022d00c807220141064b0d024200210f02400240024002400240024020010e0707000102030405070b200241c8076a200e4110200e4110491b22016a41004100411020016b220b2001410f4b1b10e7062110200241c8076a200c200110e8061a2002200e20016b360294022002200c20016a360290020240200e410f4b0d0020104100200b10e7061a0b2008290300211120022903c80721124201210f0c060b4202210f0c040b4203210f0c030b4204210f0c020b4205210f0c010b4206210f0b0b0240200a2007470d0020074101742201200741016a220c2001200c4b1b220141ffffff3f712001470d09200141057422014100480d090240024020070d002001102d21040c010b200420074105742001103121040b2004450d08200141057621070b200420096a2201201137030820012012370300200141786a200f370300200141706a200d370300200941206a21092006200a41016a220a470d010c030b0b20070d020c030b2004450d020b200241d0076a22094200370300200242003703c807200241c8076a200228029002220a2002280294022201411020014110491b220c10e8061a20022001200c6b360294022002200a200c6a3602900202402001410f4b0d00200241c8076a200c6a41004110200c6b10e7061a0b2009290300211220022903c8072111200220024188046a10eb04024020022802000d000240024020022802042213413820134138491b22140d004104210e0c010b201441c8006c102d220e450d050b024002402013450d00200241a0076a410c6a210a200241a0076a41017221084100210b41002109410021010340200241a0076a20024188046a10a8010240024020022d00a00722104106460d0020024198066a41026a2215200841026a2d00003a000020024188076a41086a2216200a41086a29020037030020024188076a41106a2217200a41106a290200370300200220082f00003b0198062002200a2902003703880720022802a407211820022802a8072119200241c8076a20024188046a10a80120022d00c8074106470d0120104101470d002019450d002018102f0b02402001450d00200e20096a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200c200141c8006a2201470d000b0b20140d030c040b200141016a210c200241f8056a41026a221a20152d00003a0000200241f0066a41086a22152016290300370300200241f0066a41106a22162017290300370300200241c8066a41086a2217200241c8076a41086a290300370300200241c8066a41106a221b200241c8076a41106a290300370300200241c8066a41186a221c200241c8076a41186a290300370300200241c8066a41206a221d200241c8076a41206a280200360200200220022f0198063b01f80520022002290388073703f006200220022903c8073703c806024020012014470d00200b200c200b200c4b1bad42c8007e220f422088a70d09200fa722144100480d090240024020010d002014102d210e0c010b200e200920141031210e0b200e450d08201441c8006e21140b200e20096a220120103a0000200141086a2019360200200141046a2018360200200141036a201a2d00003a0000200141016a20022f01f8053b00002001410c6a20022903f006370200200141146a20152903003702002001411c6a2016290300370200200141346a201b2903003702002001412c6a20172903003702002001413c6a201c290300370200200141246a20022903c806370200200141c4006a201d280200360200200b41026a210b200941c8006a2109200c21012013200c470d000b0b200e450d01200241c8076a20024188046a10a8010240024002400240024020022d00c807220c4106460d0020024194066a41026a20022d00cb073a0000200241f8056a41086a200241dc076a2201290200370300200241f8056a41106a200241e4076a220b290200370300200220022f00c9073b0194062002200241d4076a22082902003703f805200241c8076a41086a2210280200210920022802cc07210a200241c8076a20024188046a10a80120022d00c80722194106460d01200241b4066a41026a20022d00cb073a000020024198066a41086a200129020037030020024198066a41106a200b290200370300200220022f00c9073b01b40620022008290200370398062010280200210b20022802cc072108200241c8076a20024188046a10a80120022d00c80722104106460d02200241b8066a41026a20022d00cb073a0000200241f0066a41086a200241dc076a2201290200370300200241f0066a41106a200241e4076a2216290200370300200220022f00c9073b01b8062002200241d4076a22172902003703f006200241c8076a41086a221a280200211820022802cc072115200241c8076a20024188046a10a80120022d00c807221b4106460d03200241bc066a41026a20022d00cb073a000020024188076a41086a200129020037030020024188076a41106a2016290200370300200220022f00c9073b01bc062002201729020037038807201a280200211620022802cc072117200241c8076a20024188046a10a80120022d00c807221a4106470d040240201b4101470d002016450d002017102f0b024020104101470d002018450d002015102f0b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d050c060b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d040c050b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d030c040b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d020c030b024020104101470d002018450d002015102f0b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d010c020b200241c2066a20022d00cb073a0000200241c8066a41086a200241dc076a290200370300200241d8066a200241e4076a290200370300200220022f00c9073b01c0062002200241d4076a2902003703c806200241c8076a41086a280200211d20022802cc07211e200241003a00c8070240024020022802940222012001410047221c490d00200241c8076a200228029002221f201c10e8061a20022001201c6b2220360294022002201f201c6a221c360290020240024020010d00410021010c010b20022d00c807222141014b0d0141002101024020210e020100010b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c807211f0c010b4100211f200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721220c010b41002122200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721230c010b41002123200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721240c010b41002124200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721250c010b41002125200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721260c010b41002126200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721270c010b41002127200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721280c010b41002128200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721290c010b41002129200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c807212a0c010b4100212a200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c807212b0c010b4100212b200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c807212c0c010b4100212c200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c807212d0c010b4100212d200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c807212e0c010b4100212e200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c807212f0c010b4100212f200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721300c010b41002130200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721310c010b41002131200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b2220360294022002201c20016a221c36029002024002402021450d0020022d00c80721320c010b41002132200241003a00c8070b200241003a00c807202020204100472201490d01200241c8076a201c200110e8061a2002202020016b2221360294022002201c20016a221c36029002024002402020450d0020022d00c80721330c010b41002133200241003a00c8070b200241003a00c807202120214100472201490d01200241c8076a201c200110e8061a2002202120016b360294022002201c20016a36029002024002402021450d0020022d00c80721340c010b41002134200241003a00c8070b410121010b200241c8076a20024188046a10a80120022d00c807221c4106460d01200241c4066a41026a223520022d00cb073a0000200241a0076a41086a2236200241dc076a290200370300200241a0076a41106a2237200241e4076a290200370300200220022f00c9073b01c4062002200241d4076a2902003703a007200241c8076a41086a2238280200212020022802cc072121200241c8076a20024188046a10a80120022d00c8074106470d090240201c4101470d002020450d002021102f0b0240201a4101470d00201d450d00201e102f0b0240201b4101470d002016450d002017102f0b024020104101470d002018450d002015102f0b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d020c030b0240201a4101470d00201d450d00201e102f0b0240201b4101470d002016450d002017102f0b024020104101470d002018450d002015102f0b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b20140d010c020b0240201a4101470d00201d450d00201e102f0b0240201b4101470d002016450d002017102f0b024020104101470d002018450d002015102f0b024020194101470d00200b450d002008102f0b0240200c4101470d002009450d00200a102f0b02402013450d00200e201341c8006c6a210c200e21010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a2201200c470d000b0b2014450d010b200e102f0b2007450d010b2004102f0b200241003602a807200242013703a0072002410b3602cc062002200241106a3602c8062002200241a0076a36029004200241dc076a4101360200200242013702cc07200241b885c7003602c8072002200241c8066a3602d80720024190046a41d8dbc100200241c8076a103c1a20023502a80742208620023502a007841008024020022802a407450d0020022802a007102f0b410221010c040b200041023a00a4020c040b1036000b1038000b20024190046a41206a2239200241c8076a41206a28020036020020024190046a41186a223a200241c8076a41186a29030037030020024190046a41106a223b200241c8076a41106a29030037030020024190046a41086a223c2038290300370300200241f2056a41026a223820024194066a41026a2d00003a0000200241d8056a41086a223d200241f8056a41086a290300370300200241d8056a41106a223e200241f8056a41106a290300370300200220022903c80737039004200220022f0194063b01f205200220022903f8053703d805200241d4056a41026a223f200241b4066a41026a2d00003a0000200220022f01b4063b01d405200241b8056a41106a224020024198066a41106a290300370300200241b8056a41086a224120024198066a41086a29030037030020022002290398063703b805200241b4056a41026a2242200241b8066a41026a2d00003a0000200220022f01b8063b01b40520024198056a41106a2243200241f0066a41106a29030037030020024198056a41086a2244200241f0066a41086a290300370300200220022903f0063703980520024194056a41026a2245200241bc066a41026a2d00003a0000200220022f01bc063b019405200241f8046a41106a224620024188076a41106a290300370300200241f8046a41086a224720024188076a41086a29030037030020022002290388073703f804200241f4046a41026a2248200241c0066a41026a2d00003a0000200220022f01c0063b01f404200241d8046a41106a2249200241c8066a41106a290300370300200241d8046a41086a224a200241c8066a41086a290300370300200220022903c8063703d804200241d4046a41026a224b20352d00003a0000200220022f01c4063b01d404200241b8046a41106a22352037290300370300200241b8046a41086a22372036290300370300200220022903a0073703b8042002418c046a41026a2236200241f5056a41026a2d00003a0000200220022f00f5053b018c0420024184046a41026a224c20382d00003a0000200220022f01f2053b018404200241e8036a41106a2238203e290300370300200241e8036a41086a223e203d290300370300200220022903d8053703e803200241e4036a41026a223d203f2d00003a0000200220022f01d4053b01e403200241c8036a41106a223f2040290300370300200241c8036a41086a22402041290300370300200220022903b8053703c803200241c4036a41026a224120422d00003a0000200220022f01b4053b01c403200241a8036a41106a22422043290300370300200241a8036a41086a2243204429030037030020022002290398053703a803200241a4036a41026a224420452d00003a0000200220022f0194053b01a40320024188036a41106a2245204629030037030020024188036a41086a22462047290300370300200220022903f8043703880320024184036a41026a224720482d00003a0000200220022f01f4043b018403200241e8026a41106a22482049290300370300200241e8026a41086a2249204a290300370300200220022903d8043703e802200241e4026a41026a224a204b2d00003a0000200220022f01d4043b01e402200241c8026a41106a224b2035290300370300200241c8026a41086a22352037290300370300200220022903b8043703c802200241a0026a41206a22372039280200360200200241a0026a41186a2239203a290300370300200241a0026a41106a223a203b290300370300200241a0026a41086a223b203c29030037030020022002290390043703a0022002419c026a41026a223c20362d00003a0000200220022f018c043b019c022002418c026a41026a2236204c2d00003a0000200220022f0184043b018c02200241f0016a41106a224c2038290300370300200241f0016a41086a2238203e290300370300200220022903e8033703f001200241ec016a41026a223e203d2d00003a0000200220022f01e4033b01ec01200241d0016a41106a223d203f290300370300200241d0016a41086a223f2040290300370300200220022903c8033703d001200241cc016a41026a224020412d00003a0000200220022f01c4033b01cc01200241b0016a41106a22412042290300370300200241b0016a41086a22422043290300370300200220022903a8033703b001200241ac016a41026a224320442d00003a0000200220022f01a4033b01ac0120024190016a41106a2244204529030037030020024190016a41086a224520462903003703002002200229038803370390012002418c016a41026a224620472d00003a0000200220022f0184033b018c01200241f0006a41106a22472048290300370300200241f0006a41086a22482049290300370300200220022903e802370370200241ec006a41026a2249204a2d00003a0000200220022f01e4023b016c200241d0006a41106a224a204b290300370300200241d0006a41086a224b2035290300370300200220022903c802370350200241286a41206a22352037280200360200200241286a41186a22372039290300370300200241286a41106a2239203a290300370300200241286a41086a223a203b290300370300200220022903a002370328200241c8076a41026a223b203c2d00003a0000200220022f019c023b01c80720002012370308200020113703002000200c3a002820002013360224200020143602202000200e36021c200020063602182000200736021420002004360210200020093602302000200a36022c200020022f018c023b00292000412b6a20362d00003a0000200020022903f0013702342000413c6a2038290300370200200041c4006a204c290300370200200020193a004c200041cf006a203e2d00003a0000200020022f01ec013b004d2000200b36025420002008360250200041e8006a203d290300370200200041e0006a203f290300370200200020022903d001370258200020103a0070200041f3006a20402d00003a0000200020022f01cc013b007120002018360278200020153602742000418c016a204129030037020020004184016a2042290300370200200020022903b00137027c2000201b3a00940120004197016a20432d00003a0000200020022f01ac013b0095012000201636029c012000201736029801200041b0016a2044290300370200200041a8016a204529030037020020002002290390013702a0012000201a3a00b801200041bb016a20462d00003a0000200020022f018c013b00b9012000201d3602c0012000201e3602bc01200041d4016a2047290300370200200041cc016a2048290300370200200020022903703702c4012000201c3a00dc01200041df016a20492d00003a0000200020022f016c3b00dd01200020203602e401200020213602e001200041f8016a204a290300370200200041f0016a204b290300370200200020022903503702e801200041a0026a203528020036020020004198026a203729030037020020004190026a203929030037020020004188026a203a2903003702002000200229032837028002200041b8026a20343a0000200041b7026a20333a0000200041b6026a20323a0000200041b5026a20313a0000200041b4026a20303a0000200041b3026a202f3a0000200041b2026a202e3a0000200041b1026a202d3a0000200041b0026a202c3a0000200041af026a202b3a0000200041ae026a202a3a0000200041ad026a20293a0000200041ac026a20283a0000200041ab026a20273a0000200041aa026a20263a0000200041a9026a20253a0000200041a8026a20243a0000200041a7026a20233a0000200041a6026a20223a00002000201f3a00a502200041bb026a203b2d00003a0000200041b9026a20022f01c8073b00000b200020013a00a4022005450d002003102f0b200241f0076a24000b9d0102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad84200510292207422088a72204450d002007a722052d0000220341014b0d00410021010240024020030e020100010b2004417f6a4104490d0120052800012102410121010b2005102f2000200236020420002001360200200641106a24000f0b41f4c8ca00412e200641086a418ccaca0041a4c9ca00103e000bf80202037f037e230041e0006b22022400200241c00036020c20022001360208200241106a2001ad4280808080800884100210730240024020022802102201450d00200228021421032002200241106a41086a2802002204360224200220013602200240024020044110490d002002200441706a3602242002200141106a360220200141086a290000210520012900002106200241c8006a200241206a10980320022802482204450d00200229024c2107200020053703082000200637030020002007370214200020043602100c010b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602100b2003450d012001102f0c010b200041003602100b200241e0006a24000bbc0303027f037e027f230041c0006b2201240041a4e3c400ad4280808080c00084100122022900002103200141086a200241086a290000370300200120033703002002102f41a9f6c000ad4280808080f00084100122022900002103200141106a41086a200241086a290000370300200120033703102002102f02404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141206a41186a2206200041186a290000370300200141206a41106a22072005370300200141206a41086a2004370300200120033703202000102f2002102f41c000102d2202450d00200220012903003700002002200129031037001020022001290320370020200241086a200141086a290300370000200241186a200141106a41086a290300370000200241286a200141206a41086a290300370000200241306a2007290300370000200241386a20062903003700002002ad428080808080088410052002102f200141c0006a24000f0b1036000ba90301077f230041106b22022400024002400240200041186a28020022034105744114722204417f4c0d002004102d2205450d01200520002903003700002005200041086a290300370008200241103602082002200436020420022005360200200028021021002003200210690240024020030d002002280208210420022802042106200228020021070c010b20034105742108200228020021072002280204210320022802082105034002400240200320056b4120490d00200541206a2104200321060c010b200541206a22042005490d05200341017422062004200620044b1b22064100480d050240024020030d002006102d21070c010b200720032006103121070b2007450d040b200720056a22052000290000370000200541186a200041186a290000370000200541106a200041106a290000370000200541086a200041086a2900003700002006210320042105200041206a2100200841606a22080d000b2002200636020420022004360208200220073602000b20012902002004ad4220862007ad84100402402006450d002007102f0b200241106a24000f0b103d000b1036000b1038000ba40503027f037e047f230041d0006b2202240041a4e3c400ad4280808080c00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f41d8bdc100ad4280808080e00084100122032900002104200241206a41086a200341086a290000370300200220043703202003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241306a41186a2207200141186a290000370300200241306a41106a22082006370300200241306a41086a2005370300200220043703302001102f2003102f41c000102d2203450d00200320022903103700002003200229032037001020032002290330370020200341086a200241106a41086a2209290300370000200341186a200241206a41086a220a290300370000200341286a200241306a41086a2201290300370000200341306a2008290300370000200341386a2007290300370000200241306a200310b601024020022802402207450d002003ad428080808080088410050b200a20012903002204370300200241086a200241306a411c6a280200220836020020022002290330220537032020022002290244220637030020012004370300200920083602002002200537033020022006370310024002402007450d002000200229033037030020002007360210200041146a2002290310370200200041086a200241306a41086a2903003703002000411c6a200241106a41086a2802003602000c010b200042003703082000420037030020004201370310200041186a41003602000b2003102f200241d0006a24000f0b1036000b9a0202037f017e230041206b220324000240024020024106744104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020022003106902402002450d002002410674210203400240024020012903004201510d00200341003a00102003200341106a41011082010c010b200341013a00102003200341106a41011082012003200141206a4120108201200141086a29030021062003200141106a290300370318200320063703102003200341106a41101082012003200141186a2903003703102003200341106a41081082010b200141c0006a2101200241406a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000b850501067f230041c0016b22022400200241ce006a2203200141036a2d00003a0000200241306a41086a2204200141106a290200370300200241306a41106a2205200141186a290200370300200241306a41186a2206200141206a280200360200200220012f00013b014c2002200141086a290200370330200141046a280200210702400240024020012d00004101470d0020024188016a200710fe02200241d0006a200228028801220120022802900110ff0220024198016a41086a200241e7006a29000037030020024198016a41106a200241ef006a29000037030020024198016a41186a200241f7006a2d00003a0000200220022f01583b01b8012002200241da006a2d00003a00ba012002200229005f37039801024020022903504201520d00200241db006a2800002107200241086a41086a20024198016a41086a290300370300200241086a41106a20024198016a41106a290300370300200241086a41186a20024198016a41186a2d00003a0000200220022d00ba013a002a200220022f01b8013b01282002200229039801370308200228028c01450d022001102f0c020b0240200228028c01450d002001102f0b410121010c020b200241086a41086a2004290300370300200241086a41106a2005290300370300200241086a41186a20062d00003a0000200220022f014c3b012820022002290330370308200220032d00003a002a0b200041036a20022d002a3a0000200020022f01283b0001200041046a2007360000200041086a2002290308370000200041106a200241086a41086a290300370000200041186a200241086a41106a290300370000200041206a200241086a41186a2d00003a0000410021010b200020013a0000200241c0016a24000b96220c027f017e027f017e027f047e027f057e017f017e027f047e230041f0086b220624002006200437031020062003370308200620053a001f024002400240024002400240024002402003200484500d0020012002460d0220012002412010ea06450d02418de6c300ad4280808080e00084100122052900002103200641f0056a41086a200541086a290000370300200620033703f0052005102f41f0e8c600ad4280808080f00084100122052900002103200641f0066a41086a200541086a290000370300200620033703f0062005102f4120102d22050d010c070b20004100360200200041106a4200370300200041086a42003703000c050b20052002290000370000200541186a200241186a290000370000200541106a200241106a290000370000200541086a200241086a2900003700002005ad4280808080800484100322072900002103200741086a2900002104200741106a2900002108200641f0076a41186a2209200741186a290000370300200641f0076a41106a220a2008370300200641f0076a41086a2004370300200620033703f0072007102f2005102f41c000102d2205450d05200520062903f005370000200520062903f006370010200520062903f007370020200541086a200641f0056a41086a290300370000200541186a200641f0066a41086a290300370000200541286a200641f0076a41086a290300370000200541306a200a290300370000200541386a2009290300370000200641a0016a200510f60220062903a001210b42002104200642003703a001200641e8016a280200210c20062d00ec01210d02400240200b4201510d00200641f0016a41386a4200370300200641f0016a41306a4200370300200641f0016a41286a4200370300200641f0016a41206a420037030020064188026a420037030020064180026a4200370300200641f0016a41086a4200370300200642003703f00142002103420021084200210e0c010b200641a0016a41386a290300210f200641a0016a41306a2903002110200641a0016a41206a290300210e200641a0016a41186a2903002108200641a0016a41c0006a290300211120062903b001210320062903a8012104200641f0016a41206a200641a0016a41286a290300370300200641f0016a41286a2010370300200641f0016a41306a200f37030020064180026a20083703002006200e37038802200620113703a802200620043703f001200620033703f8010b200641f0016a41106a21090240427f200420087c2208200820045422072003200e7c2007ad7c220420035420042003511b22071b427f200420071b844200520d00200641f0056a41206a200941206a290300370300200641f0056a41186a200941186a290300370300200641f0056a41106a200941106a290300370300200641f0056a41086a200941086a290300370300200620092903003703f00541dbb4c600ad4280808080b00184210341838c1c21010c040b418de6c300ad4280808080e00084100122072900002103200641b8056a41086a200741086a290000370300200620033703b8052007102f41f0e8c600ad4280808080f00084100122072900002103200641b0046a41086a200741086a290000370300200620033703b0042007102f4120102d2207450d0520072001290000370000200741186a200141186a290000370000200741106a200141106a290000370000200741086a200141086a2900003700002007ad42808080808004841003220a2900002103200a41086a2900002104200a41106a2900002108200641f0076a41186a2212200a41186a290000370300200641f0076a41106a22132008370300200641f0076a41086a2004370300200620033703f007200a102f2007102f41c000102d2207450d05200720062903b805370000200720062903b004370010200720062903f007370020200741086a200641b8056a41086a290300370000200741186a200641b0046a41086a290300370000200741286a200641f0076a41086a290300370000200741306a2013290300370000200741386a2012290300370000200641b0046a200710f60220062903b004211142002103200642003703b004200641f8046a280200211220062d00fc0421130240024020114201510d0020064180056a41306a420037030020064180056a41286a420037030020064180056a41206a420037030020064198056a420037030020064190056a420037030020064180056a41086a42003703002006420037038005420021044200210e42002108420021140c010b200641b0046a41386a290300210f200641b0046a41306a2903002110200641b0046a41206a2903002104200641b0046a41186a2903002103200641b0046a41c0006a290300211420062903c004210820062903b804210e20064180056a41206a200641b0046a41286a29030037030020064180056a41286a201037030020064180056a41306a200f37030020064190056a200337030020062004370398052006200e3703800520062008370388050b200641086a41086a2903002210200420032006290308221556200420105620042010511b220a1b211620152003200a1b210f0240024020062d001f4101470d002009210a2006290380022217200f7c2218201754221920064188026a290300221a20167c2019ad7c2217201a542017201a511b450d010c030b200641f0016a210a20062903f0012217200f7c22182017542219200641f0016a41086a290300221a20167c2019ad7c2217201a542017201a511b0d020b200a2018370300200a201737030820064180056a41186a200420167d2003200f54ad7d37030020062003200f7d37039005200641b8056a41186a20064190056a220a41086a2903002217370300200641b8056a41206a2219200a41106a290300370300200641e0056a221b200a41186a290300370300200641e8056a221c200a41206a2903003703002006200a29030022183703c8052006200e3703b805200620083703c005427f200e20037c22032003200e54220a200820047c200aad7c220320085420032008511b220a1b427f2003200a1b84211a02400240427f200e20187c22032003200e54220a200820177c200aad7c220320085420032008511b220a1b2204428080e983b1de16544100427f2003200a1b2203501b0d00200641b8056a41106a2903002103201c2903002104201b29030021172019290300211820062903c005211d20062903b805211e4201211f20062903d00521200c010b4200211f02402004200384500d0020042003109a01200641a8086a2003370300200641a0086a2004370300200641f0076a41086a41013a0000200641f9076a200129000037000020064181086a200141086a29000037000020064189086a200141106a29000037000020064191086a200141186a290000370000200641033a00f00741c8e1ca004100200641f0076a108c010b0b2015200f542119201a50211b200641d8046a2018370300200641e0046a2017370300200641c0046a201d370300200641e8046a2004370300200641c8046a2003370300200620203703d004200620143703f0042006201e3703b8044100210a2006201341002011420151221c1b3a00fc04200620124100201c1b3602f8042006201f4201512212ad3703b0040240024020120d002007ad428080808080088410054101210a0c010b200641c0003602f407200620073602f007200641b8046a200641f0076a1090030b201020167d21032019ad2104201bad21162007102f02400240024020114201510d00200a0d004103210a200641f0066a21070c010b2011420152200a410173720d014104210a200641f0056a21070b200741046a200a3a0000200741003a0000200741056a20012900003700002007410d6a200141086a290000370000200741156a200141106a2900003700002007411d6a200141186a29000037000041c8e1ca0041002007108c010b200320047d21102015200f7d2103410021072016500d02200641a8086a2008370300200641a0086a200e37030041002107200641f0076a41086a41003a0000200641f9076a200129000037000020064181086a200141086a29000037000020064189086a200141106a29000037000020064191086a200141186a290000370000200641033a00f00741c8e1ca004100200641f0076a108c010c020b02402005450d00200641f0076a2001108d0220064188086a290300210b200629038008210820004100360200200041106a42002004200b7d2003200854ad7d220b200320087d2208200356200b200456200b2004511b22011b370300200041086a4200200820011b3703000c040b200620033703f005200620043703f805200620013602b003200641f0066a2001200641f0056a200641b0036a10960120064190076a29030021032006290388072104024020062903f0064201520d0020062903f8062108200641a8086a200641f0066a41106a290300370300200641a0086a2008370300200641f0076a41086a41003a0000200641f9076a200129000037000020064181086a200141086a29000037000020064189086a200141106a29000037000020064191086a200141186a290000370000200641033a00f00741c8e1ca004100200641f0076a108c010b200041106a2003370300200041086a2004370300200041003602000c030b2007102f4191ccc700ad4280808080800184210342002110410121070b200641f0016a41086a290300210420062903f001210820062903a802210e200641f0056a41206a220a200941206a290300370300200641f0056a41186a2212200941186a290300370300200641f0056a41106a2213200941106a290300370300200641f0056a41086a2219200941086a290300370300200620092903003703f00541838c08210120070d00200641f0066a41186a2019290300220f370300200641f0066a41206a201329030037030020064198076a22072012290300370300200641a0076a2209200a290300370300200620062903f005221137038007200620083703f006200620043703f80602400240427f200820117c2211201120085422012004200f7c2001ad7c220820045420082004511b22011b2204428080e983b1de16544100427f200820011b2208501b0d0020064180076a2903002104200929030021082007290300210f20064190076a290300211120062903f806211520062903f00621164201211720062903880721140c010b4200211702402004200884500d0020042008109a01200641a8086a2008370300200641a0086a2004370300200641f0076a41086a41013a0000200641f9076a200229000037000020064181086a200241086a29000037000020064189086a200241106a29000037000020064191086a200241186a290000370000200641033a00f00741c8e1ca004100200641f0076a108c010b0b200641c8016a2011370300200641d0016a200f370300200641b0016a2015370300200641d8016a2008370300200641b8016a2004370300200620143703c0012006200e3703e001200620163703a801410021012006200d4100200b42015122071b3a00ec012006200c410020071b3602e801200620174201512207ad3703a0010240024020070d002005ad42808080808008841005410121010c010b200641c0003602f407200620053602f007200641a8016a200641f0076a1090030b2005102f024002400240200b4201510d0020010d0041032105200641b0036a21010c010b200b4201522001410173720d0141042105200641b0026a21010b200141046a20053a0000200141003a0000200141056a20022900003700002001410d6a200241086a290000370000200141156a200241106a2900003700002001411d6a200241186a29000037000041c8e1ca0041002001108c010b200041106a2010370300200041086a2003370300200041003602000c010b2005102f200041086a200337020020002001360204200041013602000b200641f0086a24000f0b1036000ba80d08027f017e017f027e027f097e037f067e230041f0026b2204240020032802002105418de6c300ad4280808080e00084100122032900002106200441386a41086a200341086a290000370300200420063703382003102f41f0e8c600ad4280808080f00084100122032900002106200441f0006a41086a200341086a290000370300200420063703702003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441f0016a41186a220a200741186a290000370300200441f0016a41106a220b2009370300200441f0016a41086a2008370300200420063703f0012007102f2003102f41c000102d2203450d002003200429033837000020032004290370370010200320042903f001370020200341086a200441386a41086a290300370000200341186a200441f0006a41086a290300370000200341286a200441f0016a41086a290300370000200341306a200b290300370000200341386a200a290300370000200441f0006a200310f6022004290370210c4200210920044200370370200441b8016a280200210720042d00bc01210a02400240200c4201510d00200441306a4200370300200441286a4200370300200441206a4200370300200441186a4200370300200441106a4200370300200441086a4200370300200442003703004200210d42002108420021064200210e0c010b200441f0006a41386a290300210f200441f0006a41306a2903002110200441f0006a41206a290300210d200441f0006a41186a2903002109200441f0006a41c0006a290300210e200429038001210620042903782108200441206a200441f0006a41286a290300370300200441286a2010370300200441306a200f370300200441106a20093703002004200d37031820042008370300200420063703080b200441186a200d200241086a2903002210200d20092002290300221156200d201056200d2010511b22021b22127d20092011200920021b220f54ad7d221337030020042009200f7d2214370310200441386a41186a2013370300200441386a41206a2215200441206a290300370300200441386a41286a2216200441286a290300370300200441386a41306a2217200441306a2903003703002004201437034820042008370338200420063703402011200f542102427f200820097c22092009200854220b2006200d7c200bad7c220920065420092006511b220b1b427f2009200b1b84211802400240427f200820147c22092009200854220b200620137c200bad7c220920065420092006511b220b1b220d428080e983b1de16544100427f2009200b1b2213501b0d00200441c8006a290300210d2017290300211320162903002114201529030021192004290340211a2004290338211b420121092004290350211c0c010b420021090240200d201384500d00200d2013109a01200441a8026a2013370300200441a0026a200d370300200441f0016a41086a41013a0000200441f9016a200529000037000020044181026a200541086a29000037000020044189026a200541106a29000037000020044191026a200541186a290000370000200441033a00f00141c8e1ca004100200441f0016a108c010b0b201020127d21102002ad211d201850210220044198016a2019370300200441a0016a201437030020044180016a201a370300200441a8016a201337030020044188016a200d3703002004201c370390012004200e3703b0012004201b3703782004200a4100200c42015122051b3a00bc0120042007410020051b3602b801200420094201512207ad3703700240024020070d002003ad428080808080088410050c010b200441c0003602f401200420033602f001200441f8006a200441f0016a1090030b2010201d7d210d2002ad21102011200f7d21112003102f20094201522103024002400240200c4201510d0020030d0041032107200441f0016a21030c010b200c4201522003410173720d0141042107200441f0006a21030b200341046a20073a0000200341003a0000200341056a20012900003700002003410d6a200141086a290000370000200341156a200141106a2900003700002003411d6a200141186a29000037000041c8e1ca0041002003108c010b2000200f3703182000200837030820002010370300200041306a200d370300200041286a2011370300200041206a2012370300200041106a2006370300200441f0026a24000f0b1036000be20508017f017e047f017e017f017e037f017e230041e0016b22022400200241186a20002001109b01200241186a41106a2903002101200229032021000240024020022903182203a7450d00200241e0006a41f4c7c40010b402200241e0006a2000200110b502200241f8006a2001370300200241e0006a41106a2000370300200241e8006a41063a00002002410c3a006041c8e1ca004100200241e0006a108c010c010b2003500d00200241e0006a41186a22044200370300200241e0006a41106a22054200370300200241e0006a41086a220642003703002002420037036041e7a2ca00ad42808080808001842203100122072900002108200241d0006a41086a2209200741086a290000370300200220083703502007102f200620092903003703002002200229035037036041ecb5c600ad4280808080d00184220810012207290000210a2009200741086a2900003703002002200a3703502007102f20052002290350220a370300200241306a41086a220b2006290300370300200241306a41106a220c200a370300200241306a41186a220d2009290300370300200220022903603703302002200241306a4120109c01200241106a290300210a2002290308210e200228020021072004420037030020054200370300200642003703002002420037036020031001220429000021032009200441086a290000370300200220033703502004102f200620092903003703002002200229035037036020081001220429000021032009200441086a290000370300200220033703502004102f200520022903502203370300200b2006290300370300200c2003370300200d20092903003703002002200229036037033020024200200a420020071b220320017d200e420020071b2201200054ad7d2208200120007d2200200156200820035620082003511b22091b37036820024200200020091b370360200241306aad4280808080800484200241e0006aad428080808080028410040b200241e0016a24000bb33103077f037e017f230041d0006b220624000240024002402002410c6a280200200241106a28020010092207417f460d00410c102d22080d010c020b10c001000b20082007360208200842818080801037020002400240024002404101450d002008410141016a3602004101417e460d00200841014102723602004104102d2209450d04200920083602002008280208210a4103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004106102d220c450d04200c41046a41002f009593463b0000200c410028009193463600004120102d2207450d042007200a36021c2007410136021820074286808080e0003702102007200c36020c20074283808080303702042007200b36020020082008280200417f6a220b3602000240200b0d002008280208100a20082008280204417f6a220b360204200b0d002008102f0b4103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004103102d220c450d04200c41026a41002d00d5bc4a3a0000200c41002f00d3bc4a3b00002007412041c00010312207450d042007410c36023c2007410036023820074283808080303702302007200c36022c20074283808080303702242007200b3602204103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410f102d220c450d04200c41076a41002900b0944a370000200c41002900a9944a370000200741c00041800110312207450d042007410d36025c200741003602582007428f808080f0013702502007200c36024c20074283808080303702442007200b3602404103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410f102d220c450d04200c41076a41002900bf944a370000200c41002900b8944a3700002007410e36027c200741003602782007428f808080f0013702702007200c36026c20074283808080303702642007200b3602604103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004108102d220c450d04200c42e5f0d1fbb5ac98b6ec00370000200741800141800210312207450d042007410f36029c012007410036029801200742888080808001370290012007200c36028c012007428380808030370284012007200b360280014103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410f102d220c450d04200c41076a41002900d6944a370000200c41002900cf944a370000200741103602bc01200741003602b8012007428f808080f0013702b0012007200c3602ac0120074283808080303702a4012007200b3602a0014103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410a102d220c450d04200c41086a41002f00e6944a3b0000200c41002900de944a370000200741113602dc01200741003602d8012007428a808080a0013702d0012007200c3602cc0120074283808080303702c4012007200b3602c0014103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410a102d220c450d04200c41086a41002f00f0944a3b0000200c41002900e8944a370000200741123602fc01200741003602f8012007428a808080a0013702f0012007200c3602ec0120074283808080303702e4012007200b3602e0014103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410b102d220c450d04200c41076a41002800f9944a360000200c41002900f2944a370000200741800241800410312207450d042007411336029c0220074100360298022007428b808080b001370290022007200c36028c022007428380808030370284022007200b360280024103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410d102d220c450d04200c41056a4100290082954a370000200c41002900fd944a370000200741143602bc02200741003602b8022007428d808080d0013702b0022007200c3602ac0220074283808080303702a4022007200b3602a0024103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410c102d220c450d04200c41086a4100280092954a360000200c410029008a954a370000200741153602dc02200741003602d8022007428c808080c0013702d0022007200c3602cc0220074283808080303702c4022007200b3602c0024103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410b102d220c450d04200c41076a410028009d954a360000200c4100290096954a370000200741163602fc02200741003602f8022007428b808080b0013702f0022007200c3602ec0220074283808080303702e4022007200b3602e0024103102d220c450d04200c41026a41002d00d2bc4a3a0000200c41002f00d0bc4a3b00004115102d220b450d04200b410d6a41002900ae954a370000200b41086a41002900a9954a370000200b41002900a1954a3700002007411736029c03200741003602980320074295808080d002370290032007200b36028c032007428380808030370284032007200c360280034103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b0000410a102d220c450d04200c41086a41002f00be954a3b0000200c41002900b6954a370000200741183602bc03200741003602b8032007428a808080a0013702b0032007200c3602ac0320074283808080303702a4032007200b3602a0034103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004107102d220c450d04200c41036a41002800c3954a360000200c41002800c0954a360000200741193602dc03200741003602d80320074287808080f0003702d0032007200c3602cc0320074283808080303702c4032007200b3602c0034103102d220c450d04200c41026a41002d00d2bc4a3a0000200c41002f00d0bc4a3b00004113102d220b450d04200b410f6a41002800d6954a360000200b41086a41002900cf954a370000200b41002900c7954a3700002007411a3602fc03200741003602f80320074293808080b0023702f0032007200b3602ec0320074283808080303702e4032007200c3602e0034103102d220c450d04200c41026a41002d00d2bc4a3a0000200c41002f00d0bc4a3b00004115102d220b450d04200b410d6a41002900e7954a370000200b41086a41002900e2954a370000200b41002900da954a37000020074180044180081031220a450d04200a411b36029c04200a410036029804200a4295808080d00237029004200a200b36028c04200a42838080803037028404200a200c360280044103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004111102d2207450d04200741106a41002d00ff954a3a0000200741086a41002900f7954a370000200741002900ef954a370000200a411c3602bc04200a41003602b804200a429180808090023702b004200a20073602ac04200a4283808080303702a404200a200b3602a0044103102d2207450d04200741026a41002d00d2bc4a3a0000200741002f00d0bc4a3b0000410e102d220b450d04200b41066a4100290086964a370000200b4100290080964a370000200a411d3602dc04200a41003602d804200a428e808080e0013702d004200a200b3602cc04200a4283808080303702c404200a20073602c0044103102d2207450d04200741026a41002d00d2bc4a3a0000200741002f00d0bc4a3b00004110102d220b450d04200b41086a4100290096964a370000200b410029008e964a370000200a411e3602fc04200a41003602f804200a429080808080023702f004200a200b3602ec04200a4283808080303702e404200a20073602e0044103102d2207450d04200741026a41002d00d2bc4a3a0000200741002f00d0bc4a3b00004110102d220b450d04200b41086a41002900a6964a370000200b410029009e964a370000200a411f36029c05200a410036029805200a4290808080800237029005200a200b36028c05200a42838080803037028405200a2007360280054103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004111102d2207450d04200741106a41002d00be964a3a0000200741086a41002900b6964a370000200741002900ae964a370000200a41203602bc05200a41003602b805200a429180808090023702b005200a20073602ac05200a4283808080303702a405200a200b3602a0054103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004111102d2207450d04200741106a41002d00cf964a3a0000200741086a41002900c7964a370000200741002900bf964a370000200a41213602dc05200a41003602d805200a429180808090023702d005200a20073602cc05200a4283808080303702c405200a200b3602c0054103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004116102d2207450d042007410e6a41002900de964a370000200741086a41002900d8964a370000200741002900d0964a370000200a41223602fc05200a41003602f805200a4296808080e0023702f005200a20073602ec05200a4283808080303702e405200a200b3602e0054103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004112102d2207450d04200741106a41002f00f6964a3b0000200741086a41002900ee964a370000200741002900e6964a370000200a412336029c06200a410036029806200a4292808080a00237029006200a200736028c06200a42838080803037028406200a200b360280064103102d2207450d04200741026a41002d00d2bc4a3a0000200741002f00d0bc4a3b0000410b102d220b450d04200b41076a41002800ff964a360000200b41002900f8964a370000200a41243602bc06200a41003602b806200a428b808080b0013702b006200a200b3602ac06200a4283808080303702a406200a20073602a0064103102d2207450d04200741026a41002d00d2bc4a3a0000200741002f00d0bc4a3b00004110102d220b450d04200b41086a410029008b974a370000200b4100290083974a370000200a41253602dc06200a41003602d806200a429080808080023702d006200a200b3602cc06200a4283808080303702c406200a20073602c0064103102d220b450d04200b41026a41002d00d2bc4a3a0000200b41002f00d0bc4a3b00004117102d2207450d042007410f6a41002900a2974a370000200741086a410029009b974a37000020074100290093974a370000200a41263602fc06200a41003602f806200a4297808080f0023702f006200a20073602ec06200a4283808080303702e406200a200b3602e006200641086a410c6a200441086a2802003602002006200336020820064100360224200620053602202006200836021c2006200429020037020c20062001280200360218200241146a350200210d2002411c6a350200210e418407102d2207450d04200642840737024420062007360240411c200641c0006a1069200a4180076a2105200a2108034020082802002104200841086a2802002207200641c0006a1069024002402006280244220c2006280248220b6b2007490d002006280240210c0c010b200b20076a2201200b490d03200c41017422032001200320014b1b22014100480d0302400240200c0d002001102d210c0c010b2006280240200c20011031210c0b200c450d06200620013602442006200c3602400b2006200b20076a360248200c200b6a2004200710e8061a2008410c6a2802002103200841146a280200220c200641c0006a1069024002402006280244220b200628024822016b200c490d00200628024021070c010b2001200c6a22072001490d03200b41017422042007200420074b1b22044100480d0302400240200b0d002004102d21070c010b2006280240200b2004103121070b2007450d0620062004360244200620073602402004210b0b20062001200c6a2204360248200720016a2003200c10e8061a02400240200841186a2802004101460d0002400240200b2004460d00200b210c0c010b200b41016a220c200b490d05200b4101742201200c2001200c4b1b220c4100480d0502400240200b0d00200c102d21070c010b2007200b200c103121070b2007450d082006200c360244200620073602400b2006200441016a220b360248200720046a41013a000020062008411c6a2802002204360238200641386a21010c010b02400240200b2004460d00200b210c0c010b200b41016a220c200b490d04200b4101742201200c2001200c4b1b220c4100480d0402400240200b0d00200c102d21070c010b2007200b200c103121070b2007450d072006200c360244200620073602400b2006200441016a220b360248200720046a41023a000020062008411c6a2802002204360238200641386a21010b0240200c200b6b41034b0d00200b41046a2204200b490d03200c41017422032004200320044b1b22044100480d0302400240200c0d002004102d21070c010b2007200c2004103121070b2007450d062006200436024420062007360240200128020021040b2006200b41046a3602482007200b6a2004360000200841206a22082005470d000b2006280244210402400240024002400240024002404127200e422086200d84200635024842208620062802402205ad84200641086a100b220341036a220741024b0d004100210c20070e03010002010b4104102d220c450d0a410021070340200920076a280200220828020041016a220b41014d0d072008200b360200200c20076a2008360200200741046a22074104470d000b02402004450d002005102f0b2002350204210d2002350200210e4104102d2208450d0a20064204370244200620083602404100200641c0006a10692006350248210f200628024421022006280240210b410a10332208450d0a2003200d422086200e84200f422086200bad842008410a200641086a100c41036a221041034b0d024101210120100e0404020203040b4102210c0b41012101024020040d000c080b2005102f0c070b41d5cfca00412841f8b4ca001039000b2006410936023c410121012006200841016a36023820082d0000221041014b0d01410421040240024020100e020100010b200641c0006a200641386a10dd01200628024022044104460d02200628024421050b410021010b2008102f2002450d03200b102f0c030b2008102f024020020d000c030b200b102f0c020b00000b1038000b2003100d200c210803402008280200220b200b280200417f6a36020002402008280200220b2802000d00200b280208100a2008280200220b200b280204417f6a3602042008280200220b2802040d00200b102f0b200841046a21082007417c6a22070d000b200c102f4102210c0b200641146a290200210d200641106a2802002108200628021c2107200628020c210b02400240024002400240024002400240024020062802244101460d0020010d04200441044b0d0320040e050203030301020b2006412c6a2802002104200641286a280200220c0d0541002101200041003a0004200041186a200d3e0200200041146a2008360200200041106a200b3602002000410c6a4128360200200041086a41c3f5c600360200410121030c060b2000200b36020420004100360200200041106a41003a00002000410c6a4100360200200041086a20083602000c030b2000200b36020420004100360200200041106a20053a00002000410c6a200d3e0200200041086a20083602000c020b200041003a000420004101360200200041186a200d3e0200200041146a2008360200200041106a200b3602002000410c6a4111360200200041086a41ebf5c6003602000c010b200041003a0004200da721040240200c0d00200041fcf5c60036020820004101360200200041186a2004360200200041146a2008360200200041106a200b3602002000410c6a41103602000c010b2000418cf6c60036020820004101360200200041186a2004360200200041146a2008360200200041106a200b3602002000410c6a41213602000b20072007280200417f6a220836020020080d022007280208100a20072007280204417f6a220836020420080d022007102f0c020b200641306a28020021012000200c36020441002103200041106a41003a00002000410c6a2001360200200041086a2004360200410121012008450d00200b102f0b2000200336020020072007280200417f6a2208360200024020080d002007280208100a20072007280204417f6a220836020420080d002007102f0b200c452001720d002004450d00200c102f0b4100210803400240200a20086a220741046a280200450d002007280200102f0b0240200741106a280200450d002007410c6a280200102f0b200841206a2208418007470d000b200a102f200928020022072007280200417f6a3602000240200928020022072802000d002007280208100a200928020022072007280204417f6a360204200928020022072802040d002007102f0b2009102f200641d0006a24000f0b1036000b120041c3c4c10041fc0041f8b4ca001039000b7201027f230041106b22042400024002402003450d002002280200450d010b4182bfc60041f40341f8c2c6001055000b2001280210210320012802182105200228020421022004410036020020042002360204200041054104200520032001411c6a200410f5041b360200200441106a24000bf80e03077f017e017f230041b00c6b2204240002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d0320022802042105200241246a2802002106200241346a280200210302400240200241146a2802002207450d004105210220012802002802182802402802b4012003490d010b200441186a4200370300200441106a4200370300200441086a42003703002004420037030020012802182108200128021021092004428180808080043703b00141052102200820092001411c6a220a200441b0016a10f5040d00024002402001280214280208200520044120101e41026a220841024b0d0020080e03020001020b41d5cfca0041284180d0ca001039000b0240024020070d004100210a0c010b2001280210210820012802182109200441013602b001200420033602b40120092008200a200441b0016a10f5040d012003417f4c0d060240024020030d004101210a02402001280214280208200641014100101e41026a220341024b0d004200210b20030e03040002040b41d5cfca0041284180d0ca001039000b20031033220a450d090240024020012802142802082006200a2003101e41026a220841024b0d002003ad210b20080e03010002010b41d5cfca0041284180d0ca001039000b200a102f0c020b200b422086200b84210b0b20012802002102200441206a41186a2203200441186a290300370300200441206a41106a2201200441106a290300370300200441206a41086a2208200441086a290300370300200420042903003703202002280218210502400240200a450d0020052802402802b401200b422088a74f0d0041ec90c7002102200ba7450d01200a102f0c010b200441c0006a41186a2003290300370300200441c0006a41106a2001290300370300200441c0006a41086a20082903003703002004200429032037034020052802180d072005417f36021820044198016a200541e8006a29000037030020044190016a200541e0006a29000037030020044188016a200541d8006a2900003703002004200529005037038001024002402005411c6a220c28020022094190bdc600460d00200541206a28020021060c010b41002106200441d0096a410041e00210e7061a200441b0016a410041a00810e7061a41880b102d2209450d09200941003b010620094100360200200941086a200441d0096a41e00210e8061a200941e8026a200441b0016a41a00810e8061a200541206a41003602002005200936021c0b024003400240024020092f010622070d00410021070c010b20074105742102200941086a21034100210103402002450d01024020044180016a2003412010ea0622080d00410121020c040b200241606a2102200141016a2101200341206a21032008417f4a0d000b2001417f6a21070b02402006450d002006417f6a2106200920074102746a41880b6a28020021090c010b0b200441e0006a41186a20044180016a41186a290300370300200441e0006a41106a20044180016a41106a290300370300200441e0006a41086a20044180016a41086a29030037030020042004290380013703604100210620072101410021020b0240024020020d00200441ec096a200441e0006a41086a290300370200200441d0096a41246a200441e0006a41106a290300370200200441fc096a200441e0006a41186a290300370200200420013602dc092004200c3602d809200420093602d409200420063602d009200420042903603702e4092004200541246a3602e009200441d0016a20042903a001370300200441d8016a200441a0016a41086a290300370300200441e4016a4200370200200442003703c801200442003703b00120044190bdc6003602e001200441003a00ec01200441ed016a200429008001370000200441f5016a20044180016a41086a290000370000200441fd016a20044180016a41106a29000037000020044185026a20044180016a41186a290000370000200441003a008d02200441d0096a200441b0016a10970221020c010b200441c8016a4200370300200441c4016a4190bdc600360200200441003602d001200441003602c001200442003703b80120044190bdc6003602b401200441003602b0012009200141e0006c6a41e8026a2102200441b0016a1090020b200441b0016a41186a200441c0006a41186a290300370300200441b0016a41106a200441c0006a41106a290300370300200441b0016a41086a200441c0006a41086a290300370300200420042903403703b0012004200b370284012004200a36028001200441d0096a200241306a200441b0016a20044180016a109802024020042802d009450d0020042802d4092202450d00200441d8096a280200450d002002102f0b2005200528021841016a360218410021020b4105410420021b21020b20002002360200200441b00c6a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b41c3c5ca004110200441b0016a41dc90c70041e4c5ca00103e000b1036000be60201027f230041306b2204240002402003450d0020022802000d0020022802042105200441186a4200370300200441106a4200370300200441086a420037030020044200370300200128021821022001280210210320044281808080800437032002400240200220032001411c6a200441206a10f5040d00024002402001280214280208200520044120101e41026a220241024b0d0020020e03020001020b41d5cfca0041284180d0ca001039000b200441206a2001280200280218220241186a200241d0006a2002410c6a4100200228020c1b200410f604024002402004280220450d00200141046a21020240200141086a280200450d002002280200102f0b20022004290320370200200241086a200441206a41086a280200360200410021010c010b2001410c6a4100360200410121010b20004100360200200020013602040c010b200041053602000b200441306a24000f0b4182bfc60041f40341f8c2c6001055000b800d04037f017e077f047e230041a0016b22042400024002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802204101470d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620022802042105200241146a2802002106200241286a2903002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b2001280210210220012802182103200441013602482004200636024c200320022001411c6a220c200441c8006a10f5040d092006417f4c0d070240024002400240024020060d004101210d02402001280214280208200541014100101e41026a220241024b0d00200141146a210520020e030f00020f0b41d5cfca0041284180d0ca001039000b20061033220d450d01024020012802142802082005200d2006101e41026a220241024b0d00200141146a210520020e030d00010d0b41d5cfca0041284180d0ca001039000b41002102200441003a0068024002400240034020062002460d01200441c8006a20026a200d20026a2d00003a00002004200241016a22033a00682003210220034120470d000b200441f0006a41186a2202200441c8006a41186a290300370300200441f0006a41106a2203200441c8006a41106a290300370300200441f0006a41086a220e200441c8006a41086a2903003703002004200429034837037002402006450d00200d102f0b200441086a41086a200e290300370300200441086a41106a2003290300370300200441086a41186a2002290300370300200420042903703703082001280210210220012802182103200441013602482004200936024c20032002200c200441c8006a10f5040d0f2009417f4c0d0d20090d022005280200280208200841014100101e41026a220241024b0d0120020e030f010f0f0b0240200241ff0171450d00200441003a00680b2006450d0e200d102f0c0e0b41d5cfca0041284180d0ca001039000b200910332202450d0002402005280200280208200820022009101e41026a220341024b0d0020030e03030002030b41d5cfca0041284180d0ca001039000b1036000b2009410f4d0d00200241086a290000210f200229000021102002102f2001280210210220012802182103200441013602482004200b36024c20032002200c200441c8006a10f5040d0a200141046a2203200b10f203024002402001280214280208200a20012802042001410c6a280200101e41026a220241024b0d0020020e030c00010c0b41d5cfca0041284180d0ca001039000b200128020c21052001410036020c200141086a28020021062001280204210d20014201370204200128021822022903082211211202400240024002402007500d002007211220112007540d010b2002201120127d37030820022903102107200441f0006a41186a200241186a29030037030020042012370378200420123703702004200737038001200128020041186a2802002109200441c8006a41186a200441086a41186a290300370300200441c8006a41106a200441086a41106a290300370300200441c8006a41086a200441086a41086a29030037030020042004290308370348200420053602980120042006360294012004200d36029001200441286a2009200441c8006a2010200f200441f0006a20044190016a1086024101210c0240024020042802284101460d00200441286a410472210d200441286a41106a2d00002105200441346a2802002109200441306a28020021064100210c0c010b200441286a41106a210d200441286a41186a28020021092004413c6a2802002106410021050b200d280200210d2002200429037820022903087c370308200141086a2802002102200c450d012002450d002003280200102f0b2003200d3602004180022105410021090c010b02402002450d002003280200102f0b2003200d3602000b2001200936020c200141086a200636020020004100360200200020053602040c0b0b2002102f0c090b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b200d102f0b200041053602000b200441a0016a24000bb60f04037f017e077f047e230041b0016b2204240002400240024002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802204101470d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620022802042105200241146a2802002106200241286a2903002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b2001280210210220012802182103200441013602782004200636027c200320022001411c6a220c200441f8006a10f5040d0b2006417f4c0d070240024020060d004101210d02402001280214280208200541014100101e41026a220241024b0d00200141146a210520020e030e00020e0b41d5cfca0041284180d0ca001039000b20061033220d450d09024020012802142802082005200d2006101e41026a220241024b0d00200141146a210520020e030c00010c0b41d5cfca0041284180d0ca001039000b41002102200441003a009801024002400240034020062002460d01200441f8006a20026a200d20026a2d00003a00002004200241016a22033a0098012003210220034120470d000b200441d8006a41186a2202200441f8006a41186a290300370300200441d8006a41106a2203200441f8006a41106a290300370300200441d8006a41086a220e200441f8006a41086a2903003703002004200429037837035802402006450d00200d102f0b200441086a200e290300370300200441106a2003290300370300200441186a2002290300370300200420042903583703002001280210210220012802182103200441013602782004200936027c20032002200c200441f8006a10f5040d0e2009417f4c0d0a20090d022005280200280208200841014100101e41026a220241024b0d0120020e030e010e0e0b0240200241ff0171450d00200441003a0098010b2006450d0d200d102f0c0d0b41d5cfca0041284180d0ca001039000b200910332202450d080240024002402005280200280208200820022009101e41026a220341024b0d0020030e03020001020b41d5cfca0041284180d0ca001039000b2009410f4d0d00200241086a290000210f200229000021102002102f2001280210210220012802182103200441013602782004200b36027c20032002200c200441f8006a10f5040d0c200141046a220d200b10f203024002402001280214280208200a20012802042001410c6a280200101e41026a220241024b0d0020020e030e00010e0b41d5cfca0041284180d0ca001039000b2001410c6a2202280200210520024100360200200141086a28020021032001280204210620014201370204200128021822022903082211211202400240024002402007500d002007211220112007540d010b2002201120127d37030820022903102107200441d8006a41186a200241186a290300370300200420123703602004201237035820042007370368200128020041186a2802002109200420053602282004200336022420042006360220200441f8006a20092010200f200441d8006a2004200441206a109e02410121050240024020042802784101460d00200441206a41086a200441f8006a41186a290300370300200441206a41106a20044198016a2802003602002004200441f8006a41106a290300370320200441a8016a2d00002108200441a0016a280200210c2004419c016a280200210920044184016a280200210a200441f8006a41086a280200210341002105200428027c21060c010b200441f8006a41186a280200210a2004418c016a280200210320044188016a2802002106410021080b2002200429036020022903087c370308200441c0006a41086a2202200441206a41086a290300370300200441c0006a41106a220b200441206a41106a280200360200200420042903203703402005450d01200141086a280200450d00200d280200102f0b200120063602042001410c6a4100360200200141086a200336020041800221020c010b200441f8006a41106a200b280200360200200441f8006a41086a2002290300370300200420042903403703780240200141086a280200450d00200d280200102f0b200120093602044100210d2001410c6a4100360200200141086a200c360200200841ff017122020d000240200c411f4b0d00200c410174220d4120200d41204b1b220d4100480d0c02400240200c0d00200d102d21090c010b2009200c200d103121090b2009450d0b20012009360204200141086a200d3602002001410c6a280200210d0b2001410c6a200d41206a3602002009200d6a2201200a36000820012003360004200120063600002001200429037837000c200141146a20044180016a2903003700002001411c6a20044188016a2802003600000b20004100360200200020023602040c0d0b2002102f0c0b0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b1036000b1038000b200d102f0b200041053602000b200441b0016a24000b830301047f230041106b22042400024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a2802002102200128021021032001280218210620044103360200200420023602040240200620032001411c6a2207200410f5040d0020012802102103200128021821062004410136020020042002360204200620032007200410f5040d00200141046a200210f203024002402001280214280208200520012802042001410c6a280200101e41026a220241024b0d0020020e03020001020b41d5cfca0041284180d0ca001039000b200128020c21022001410036020c200141086a280200210320012802042106200142013702040240200128021c450d00200141206a2802002207450d00200141246a280200450d002007102f0b2001410136021c200141286a2002360200200141246a2003360200200141206a20063602000b20004105360200200441106a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000bec0101037f410021042001410c6a4100360200200128020021050240024002400240200141086a28020022064120490d00200128020421060c010b200641017422044120200441204b1b22044100480d020240024020060d002004102d21060c010b200128020420062004103121060b2006450d0120012006360204200141086a20043602002001410c6a28020021040b2001410c6a200441206a360200200620046a220141186a200541386a290000370000200141106a200541306a290000370000200141086a200541286a29000037000020012005290020370000200041043602000f0b1036000b1038000bf20101037f410021042001410c6a4100360200200128020028021821050240024002400240200141086a28020022064120490d00200128020421060c010b200641017422044120200441204b1b22044100480d020240024020060d002004102d21060c010b200128020420062004103121060b2006450d0120012006360204200141086a20043602002001410c6a28020021040b2001410c6a200441206a360200200620046a220141186a200541e8006a290000370000200141106a200541e0006a290000370000200141086a200541d8006a29000037000020012005290050370000200041043602000f0b1036000b1038000bd10102027f027e410021042001410c6a41003602002001280218220541186a2903002106200529031021070240024002400240200141086a28020022054110490d00200128020421050c010b200541017422044110200441104b1b22044100480d020240024020050d002004102d21050c010b200128020420052004103121050b2005450d0120012005360204200141086a20043602002001410c6a28020021040b2001410c6a200441106a360200200520046a2201200637000820012007370000200041043602000f0b1036000b1038000bbe0103017f017e017f410021042001410c6a4100360200200128021829030821050240024002400240200141086a28020022064108490d00200128020421060c010b200641017422044108200441084b1b22044100480d020240024020060d002004102d21060c010b200128020420062004103121060b2006450d0120012006360204200141086a20043602002001410c6a28020021040b2001410c6a200441086a360200200620046a2005370000200041043602000f0b1036000b1038000bc704020b7f027e230041206b220424002001410c6a41003602000240024002402001280200280218220528021841016a220641004c0d00200541d0006a2107200520063602182005411c6a2108200541206a28020021090240024002400340024002402008280200220a2f0106220b0d004100210c0c010b200b4105742108200a41086a210d417f210c0340024020080d00200b210c0c020b200c41016a210c2007200d412010ea06220e450d03200841606a2108200d41206a210d200e417f4a0d000b0b2009450d022009417f6a2109200a200c4102746a41880b6a21080c000b0b200a200c41e0006c6a220841c5036a310000200841e8026a290300220f200f50220d1ba7450d004200200841f8026a290300200d1b210f4200200841f0026a290300200d1b21100c010b200441086a200541286a28020020072005412c6a28020028021c110300200441106a290300210f20052802182106200429030821100b20052006417f6a36021802400240200141086a280200220d2001410c6a28020022086b4110490d002001280204210d0c010b200841106a220c2008490d03200d4101742208200c2008200c4b1b22084100480d0302400240200d0d002008102d210d0c010b2001280204200d20081031210d0b200d450d022001200d360204200141086a20083602002001410c6a28020021080b2001410c6a200841106a360200200d20086a2208200f3700082008201037000020004104360200200441206a24000f0b41c6c4ca004118200441186a41cc90c70041f0c4ca00103e000b1036000b1038000bd10102027f027e410021042001410c6a41003602002001280200220541086a2903002106200529030021070240024002400240200141086a28020022054110490d00200128020421050c010b200541017422044110200441104b1b22044100480d020240024020050d002004102d21050c010b200128020420052004103121050b2005450d0120012005360204200141086a20043602002001410c6a28020021040b2001410c6a200441106a360200200520046a2201200637000820012007370000200041043602000f0b1036000b1038000bfd0401057f230041206b22042400024002400240024002402003450d0020022802000d0020034101460d0120022802100d01410521050240200241146a2802002203200128021022062802744b0d0020022802042107200128021821022004410136020020042003360204200220062001411c6a200410f5040d002003417f4c0d0302400240024020030d004101210602402001280214280208200741014100101e41026a220241024b0d0020020e03040002040b41d5cfca0041284180d0ca001039000b200310332206450d0602402001280214280208200720062003101e41026a220241024b0d0020020e03020001020b41d5cfca0041284180d0ca001039000b2001410c6a2205410036020020042006200310ac044120102d2202450d0520022004290300370000200241186a200441186a290300370000200241106a200441106a290300370000200241086a200441086a29030037000002400240200141086a2802002207200528020022056b4120490d00200128020421070c010b200541206a22082005490d07200741017422052008200520084b1b22054100480d070240024020070d002005102d21070c010b200128020420072005103121070b2007450d0620012007360204200141086a20053602002001410c6a28020021050b2001410c6a200541206a360200200720056a220141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002002102f410421052003450d010b2006102f0b20002005360200200441206a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b1036000b1038000bbe0103017f017e017f410021042001410c6a4100360200200128020029031021050240024002400240200141086a28020022064108490d00200128020421060c010b200641017422044108200441084b1b22044100480d020240024020060d002004102d21060c010b200128020420062004103121060b2006450d0120012006360204200141086a20043602002001410c6a28020021040b2001410c6a200441086a360200200620046a2005370000200041043602000f0b1036000b1038000bd90102027f027e410021042001410c6a4100360200200128020028021828024022054188016a290300210620052903800121070240024002400240200141086a28020022054110490d00200128020421050c010b200541017422044110200441104b1b22044100480d020240024020050d002004102d21050c010b200128020420052004103121050b2005450d0120012005360204200141086a20043602002001410c6a28020021040b2001410c6a200441106a360200200520046a2201200637000820012007370000200041043602000f0b1036000b1038000bd90102027f027e410021042001410c6a4100360200200128020028021828024022054198016a290300210620052903900121070240024002400240200141086a28020022054110490d00200128020421050c010b200541017422044110200441104b1b22044100480d020240024020050d002004102d21050c010b200128020420052004103121050b2005450d0120012005360204200141086a20043602002001410c6a28020021040b2001410c6a200441106a360200200520046a2201200637000820012007370000200041043602000f0b1036000b1038000bb70803047f047e017f230041f0096b22042400024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a28020021022001280210210320012802182106200441013602b807200420023602bc07024002400240200620032001411c6a2207200441b8076a10f5040d002002417f4c0d0502400240024020020d004101210302402001280214280208200541014100101e41026a220641024b0d0020060e03040002040b41d5cfca0041284180d0ca001039000b200210332203450d0802402001280214280208200520032002101e41026a220641024b0d0020060e03020001020b41d5cfca0041284180d0ca001039000b2004200236022c20042003360228200441b8076a200441286a10b302024020042802b8072206411b460d0020044188056a200441b8076a41047241ac0210e8061a02402002450d002003102f0b200441d8026a20044188056a41ac0210e8061a20042006360228200441286a410472200441d8026a41ac0210e8061a200441003602c007200442013703b807200441286a200441b8076a10910120042802c0072103024020042802bc07450d0020042802b807102f0b02400240200128021822022903102208200241186a29030022098450450d00420021080c010b200441186a2003ad42004280c8afa025420010ed06200441086a2004290318220a4280a094a58d1d7c220b200441186a41086a290300200b200a54ad7c2008200910ee062004290308427f200441086a41086a290300501b21080b20012802102103200441043602b807200420083703c007200220032007200441b8076a10f504450d03200441286a108e01410521020c040b2002450d010b2003102f0b410521020c010b2001280200210220044188056a200441286a41b00210e8061a200441e0026a22032002280218220241d8006a290000370300200441e8026a2206200241e0006a290000370300200441f0026a2205200241e8006a290000370300200420022900503703d802200441bf076a20044188056a41b00210e8061a02402002413c6a2802002201200241386a280200470d00200141016a22072001490d062001410174220c2007200c20074b1bad42d8027e2208422088a70d062008a722074100480d060240024020010d002007102d21010c010b2002280234200141d8026c2007103121010b2001450d0520022001360234200241386a200741d8026e360200200228023c21010b2002280234200141d8026c6a220141013a0000200120042903d802370001200141096a2003290300370000200141116a2006290300370000200141196a2005290300370000200141216a200441b8076a41b70210e8061a2002200228023c41016a36023c410421020b20002002360200200441f0096a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b1036000b1038000b8016040c7f027e047f017e230041a0036b22042400024002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620034107460d0720022802700d0720022802042105200241146a2802002106200241246a2802002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b200241f4006a280200210c2001280210210220012802182103200441013602a801200420063602ac01024002400240024002400240024002400240200320022001411c6a220d200441a8016a10f5040d002006417f4c0d1102400240024020060d004101210e02402001280214280208200541014100101e41026a220241024b0d00200141146a210520020e03040002040b41d5cfca0041284180d0ca001039000b20061033220e450d14024020012802142802082005200e2006101e41026a220241024b0d00200141146a210520020e03020001020b41d5cfca0041284180d0ca001039000b41002102200441003a00c8010240034020062002460d01200441a8016a20026a200e20026a2d00003a00002004200241016a22033a00c8012003210220034120470d000b20044180036a41086a2202200441a8016a41086a29030037030020044180036a41106a2203200441a8016a41106a29030037030020044180036a41186a220f200441a8016a41186a290300370300200420042903a8013703800302402006450d00200e102f0b200441086a41086a2002290300370300200441086a41106a2003290300370300200441086a41186a200f29030037030020042004290380033703082001280210210220012802182103200441013602a801200420083602ac0120032002200d200441a8016a10f5040d072008417f4c0d1320080d04410121062005280200280208200741014100101e41026a220241024b0d0320020e03070305070b0240200241ff0171450d00200441003a00c8010b2006450d010b200e102f0b200441c8006a41186a20044180036a41186a290300370300200441c8006a41106a20044180036a41106a290300370300200441c8006a41086a20044180036a41086a2903003703002004200429038003370348410521020c070b41d5cfca0041284180d0ca001039000b200810332206450d0f02402005280200280208200720062008101e41026a220241024b0d0020020e03020001020b41d5cfca0041284180d0ca001039000b41002102200441003a00c8010240034020082002460d01200441a8016a20026a200620026a2d00003a00002004200241016a22033a00c8012003210220034120470d000b20044180036a41086a2202200441a8016a41086a29030037030020044180036a41106a2203200441a8016a41106a29030037030020044180036a41186a220e200441a8016a41186a290300370300200420042903a8013703800302402008450d002006102f0b200441286a41086a2002290300370300200441286a41106a2003290300370300200441286a41186a200e29030037030020042004290380033703282001280210210320012802182106200441013602a8012004200a3602ac014105210220062003200d200441a8016a10f5040d05200a417f4c0d0e200a0d042005280200280208200941014100101e41026a220341024b0d0320030e03050305050b0240200241ff0171450d00200441003a00c8010b2008450d010b2006102f0b410521020c020b41d5cfca0041284180d0ca001039000b200a10332203450d0a024002400240200528020028020820092003200a101e41026a220641024b0d0020060e03010002010b41d5cfca0041284180d0ca001039000b2003102f0c010b0240200a410f4b0d002003102f0c010b200341086a2900002110200329000021112003102f02400240200c0d004101210e41002106410021080c010b20044180036a41186a210320044180036a41106a210720044180036a41086a210a410021124100210241002106410021084101210e03402003420037030020074200370300200a42003703002004420037038003200128021821092001280210210f2004428180808080043703a801024002402009200f200d200441a8016a10f5040d00024002402005280200280208200b20026a220920044180036a4120101e41026a220f41024b0d00200f0e03020001020b41d5cfca0041284180d0ca001039000b200441a8016a41186a22132003290300370300200441a8016a41106a22142007290300370300200441a8016a41086a2215200a29030037030020042004290380033703a801024020062008470d002012200641016a2208201220084b1b220841ffffff3f712008470d10200841057422084100480d100240024020060d002008102d210e0c010b200e200220081031210e0b200e450d0f200841057621080b200e20026a220f20042903a801370000200f41186a2013290300370000200f41106a2014290300370000200f41086a2015290300370000200941206a20094f0d010b410521022008450d03200e102f0c030b201241026a2112200241206a2102200c200641016a2206470d000b0b20012802002802182103200441e8006a41086a200441086a41086a290300370300200441e8006a41106a2201200441086a41106a290300370300200441e8006a41186a2205200441086a41186a29030037030020044188016a41086a200341d8006a29000037030020044188016a41106a220d200341e0006a29000037030020044188016a41186a2207200341e8006a29000037030020042004290308370368200420032900503703880120044180036a41186a220a200441286a41186a29030037030020044180036a41106a2209200441286a41106a29030037030020044180036a41086a200441286a41086a290300370300200420042903283703800302402003413c6a2802002202200341386a280200470d00200241016a220c2002490d0c2002410174220b200c200b200c4b1bad42d8027e2216422088a70d0c2016a7220c4100480d0c0240024020020d00200c102d21020c010b2003280234200241d8026c200c103121020b2002450d0b20032002360234200341386a200c41d8026e360200200328023c21020b2003280234200241d8026c6a220241023a0000200220042903880137000120022004290368370021200241096a20044188016a41086a290300370000200241116a200d290300370000200241196a2007290300370000200241296a200441e8006a41086a290300370000200241316a2001290300370000200241396a20052903003700002002200e360064200220083600682002200636006c20022011370370200241f8006a20103703002002200429038003370041200241c9006a20044180036a41086a290300370000200241d1006a2009290300370000200241d9006a200a290300370000200220042f00483b0061200241e3006a200441c8006a41026a2d00003a000020024180016a200441a8016a41d80110e8061a2003200328023c41016a36023c410421020b20002002360200200441a0036a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b1036000b1038000b16002000410036020020002001410c6a2802003602040ba50201067f230041106b220424000240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d024105210302402001410c6a2802002205200241146a2802002206490d00200520066b200241246a2802002205470d00200228020421072001280204210820012802182102200128021021092004410236020020042005360204200220092001411c6a200410f5040d000240024020012802142802082007200820066a2005101f41026a220241024b0d0020020e03020001020b41d5cfca00412841e4d0ca001039000b410421030b20002003360200200441106a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000bee0101047f230041106b22042400024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a280200210220012802102106200128021821072004410136020020042002360204410521030240200720062001411c6a200410f5040d00200141046a200210f203024002402001280214280208200520012802042001410c6a280200101e41026a220141024b0d0020010e03020001020b41d5cfca0041284180d0ca001039000b410421030b20002003360200200441106a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000bef0903077f017e027f230041d0026b220424000240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d03200241246a2802002105200241346a2802002106024002400240200241146a2802002203450d00200228020421072001280210210820012802182109200441013602082004200336020c41052102200920082001411c6a200441086a10f5040d0b2003417f4c0d07200310332208450d08024002402001280214280208200720082003101e41026a220941024b0d0020090e03010003010b41d5cfca0041284180d0ca001039000b2008102f0c0b0b41012107410021094100210a0c010b200420033602dc01200420083602d801200441086a200441d8016a109803200429020c210b200428020821072008102f2007450d09200ba7210a2001280210280264200b422088a72209490d080b20072009410041202009676b10e003024020094102490d00200721022009210303402002200241206a2208412010ea06450d09200821022003417f6a220341024f0d000b0b2001280210210220012802182103200441013602082004200636020c200320022001411c6a2208200441086a10f5040d072006417f4c0d040240024020060d004101210c02402001280214280208200541014100101e41026a220241024b0d0020020e030a00020a0b41d5cfca0041284180d0ca001039000b20061033220c450d060240024020012802142802082005200c2006101e41026a220241024b0d0020020e03010002010b41d5cfca0041284180d0ca001039000b200c102f0c080b2001280210210220012802182103200441086a41086a20063602002004200936020c200441053602080240200320022008200441086a10f504450d002006450d08200c102f0c080b200441a8026a41086a2001280200280218220341d8006a290000370300200441b8026a2208200341e0006a290000370300200441c0026a2201200341e8006a290000370300200420032900503703a80202402003413c6a2802002202200341386a280200470d00200241016a22052002490d072002410174220d2005200d20054b1bad42d8027e220b422088a70d07200ba722054100480d070240024020020d002005102d21020c010b2003280234200241d8026c2005103121020b2002450d0620032002360234200341386a200541d8026e360200200328023c21020b2003280234200241d8026c6a220241003a0000200220042f00cd023b0001200241073a00102002200936000c2002200a36000820022007360004200220042903a802370011200241036a200441cd026a41026a2d00003a0000200241196a200441b0026a290300370000200241216a2008290300370000200241296a20012903003700002002200c360034200220063600382002200636003c200220042f00a5023b0031200241336a200441a5026a41026a2d00003a0000200241c0006a200441d8016a41c80010e8061a20024188016a200441086a41d00110e8061a2003200328023c41016a36023c410421020c080b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b1036000b1038000b41052102200a450d002007102f0b20002002360200200441d0026a24000bfe0903047f027e037f230041d00b6b22042400024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a280200210220012802102106200128021821072004410136025020042002360254410521030240200720062001411c6a200441d0006a10f5040d002002417f4c0d03024020020d0002402001280214280208200541014100101e41026a220241024b0d0020020e03020002020b41d5cfca0041284180d0ca001039000b200210332206450d050240024002402001280214280208200520062002101e41026a220741024b0d0020070e03010002010b41d5cfca0041284180d0ca001039000b2006102f0c010b02402002410f4b0d002006102f0c010b200641086a2900002108200629000021092006102f2001280200280218220a2802180d04200a417f360218200441386a200a41e8006a290000370300200441306a200a41e0006a290000370300200441206a41086a200a41d8006a2900003703002004200a29005037032002400240200a411c6a220b28020022074190bdc600460d00200a41206a280200210c0c010b4100210c200441f0086a410041e00210e7061a200441d0006a410041a00810e7061a41880b102d2207450d06200741003b010620074100360200200741086a200441f0086a41e00210e8061a200741e8026a200441d0006a41a00810e8061a200a41206a4100360200200a200736021c0b024003400240024020072f010622050d00410021050c010b20054105742102200741086a21014100210303402002450d010240200441206a2001412010ea0622060d00410121020c040b200241606a2102200341016a2103200141206a21012006417f4a0d000b2003417f6a21050b0240200c450d00200c417f6a210c200720054102746a41880b6a28020021070c010b0b200441186a200441206a41186a290300370300200441106a200441206a41106a290300370300200441086a200441206a41086a290300370300200420042903203703004100210c20052103410021020b0240024020020d002004418c096a200441086a290300370200200441f0086a41246a200441106a2903003702002004419c096a200441186a290300370200200420033602fc082004200b3602f808200420073602f4082004200c3602f00820042004290300370284092004200a41246a36028009200441f0006a2004290340370300200441f8006a200441c0006a41086a29030037030020044184016a4200370200200442003703682004420037035020044190bdc60036028001200441003a008c012004418d016a200429002037000020044195016a200441206a41086a2900003700002004419d016a200441206a41106a290000370000200441a5016a200441206a41186a290000370000200441003a00ad01200441f0086a200441d0006a10970221020c010b200441e8006a4200370300200441e4006a4190bdc60036020020044100360270200441003602602004420037035820044190bdc600360254200441003602502007200341e0006c6a41e8026a2102200441d0006a1090020b200241286a2008370300200241206a200937030020024201370318200a200a28021841016a360218410421030b20002003360200200441d00b6a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000b41c3c5ca004110200441d0006a41dc90c70041e4c5ca00103e000b1036000b9f0203037f027e027f230041206b220424002001410c6a22054100360200200441086a2001280200280218220641186a200641d0006a10f704200441086a41106a290300210720042802082106200429031021080240024002400240200141086a2802002209200528020022056b4110490d00200128020421090c010b200541106a220a2005490d0220094101742205200a2005200a4b1b22054100480d020240024020090d002005102d21090c010b200128020420092005103121090b2009450d0120012009360204200141086a20053602002001410c6a28020021050b2001410c6a200541106a360200200920056a22012007427f20061b37000820012008427f20061b37000020004104360200200441206a24000f0b1036000b1038000bdb0201047f230041106b220424000240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a280200210220012802102106200128021821072004410136020020042002360204410521030240200720062001411c6a200410f5040d002002417f4c0d0302400240024020020d004101210602402001280214280208200541014100101e41026a220141024b0d0020010e03040002040b41d5cfca0041284180d0ca001039000b0240200210332206450d0002402001280214280208200520062002101e41026a220141024b0d0020010e03030002030b41d5cfca0041284180d0ca001039000b1036000b2004200620021066024020042802000d00200429020410080b410421032002450d010b2006102f0b20002003360200200441106a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000b103d000bba0101037f410021042001410c6a4100360200200128020028021c21050240024002400240200141086a28020022064104490d00200128020421060c010b200641017422044104200441044b1b22044100480d020240024020060d002004102d21060c010b200128020420062004103121060b2006450d0120012006360204200141086a20043602002001410c6a28020021040b2001410c6a200441046a360200200620046a2005360000200041043602000f0b1036000b1038000bab0302037f017e230041106b22042400024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a28020021022001280210210320012802182106200441013602002004200236020402400240200620032001411c6a200410f5040d00200141046a2203200210f203024002402001280214280208200520012802042001410c6a280200101e41026a220241024b0d0020020e03020001020b41d5cfca0041284180d0ca001039000b200135020c21072001410036020c200141086a220628020021052001280204210220014201370204200420074220862002ad8410021073200628020021060240024020042802000d0002402006450d002003280200102f0b2001410036020c20012002360204200141086a2005360200410121010c010b02402006450d002003280200102f0b20032004290300370200200341086a200441086a280200360200410021012005450d002002102f0b20004100360200200020013602040c010b200041053602000b200441106a24000f0b4182bfc60041f40341f8c2c6001055000b4182bfc60041f40341f8c2c6001055000baa05020a7f017e230041c0006b220424002004200136020c2004200041c8e1ca0020011b3602082004200441086a10e60102400240024002400240024020042802000d0020042802042205200428020c4104762201200120054b1b22064104742201417f4c0d030240024020060d00410821070c010b2001102d2207450d050b024002402005450d00200441206a4104722108410021094100210a410021000340200441206a200441086a10dd01200441306a41086a220b200841086a280200360200200420082902003703302004280220220c4104460d02200041016a2101200441106a41086a220d200b28020036020020042004290330370310024020002006470d0020092001200920014b1b220b41ffffffff0071200b470d09200b410474220b4100480d090240024020000d00200b102d21070c010b2007200a200b103121070b2007450d08200b41047621060b2007200a6a2200200c360200200041046a20042903103702002000410c6a200d280200360200200941026a2109200a41106a210a2001210020052001470d000b0b2007450d01200441206a2002200720052003110400200428022021004101102d2201450d0520044281808080103702342004200136023020004105470d02200141013a00004201210e0c030b2006450d002007102f0b41a4dcc10041f000200441206a41f0dbc1004194ddc100103e000b200141003a000020014101410210312101024020004104470d002001450d03200141003a00012004428280808020370234200420013602304202210e0c010b2001450d02200141013a0001200442828080802037023420042001360230200441206a200441306a10e7012004350238210e200428023021010b2001ad422086200e84210e02402006450d002007102f0b200441c0006a2400200e0f0b103d000b1036000b1038000bd90202047f017e02400240024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a360200200441034b0d0520040e0401020304010b200041043602000f0b024020054104490d00200041003602002003280001210420012002417b6a3602042001200341056a360200200020043602040f0b200041043602000f0b024020054108490d0020004101360200200329000121062001200241776a3602042001200341096a360200200041086a20063703000f0b200041043602000f0b024020054104490d00200041023602002003280001210420012002417b6a3602042001200341056a360200200020043602040f0b200041043602000f0b024020054108490d0020004103360200200329000121062001200241776a3602042001200341096a360200200041086a20063703000f0b200041043602000f0b200041043602000b130020004103360204200041c0c5c1003602000b13002000410c360204200041e8c7c1003602000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41d8dbc100200241086a103c2101200241206a240020010b4d01017f230041206b22002400200041146a410136020020004201370204200041b4d8c9003602002000410436021c200041fcdbc9003602182000200041186a360210200041e8d8c9001043000bac0503047f017e017f230041e0006b220224000240024020012802004111460d00200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a42003703000c010b024002400240024002400240200141086a2d00000e06050402010004050b200141c8006a21030c020b200141d0006a21030c010b200141186a21030b200241306a41186a4200370300200241306a41106a22044200370300200241306a41086a220142003703002002420037033041aa97ca00ad42808080808001841001220529000021062001200541086a290000370300200220063703302005102f41b297ca00ad4280808080800184100122052900002106200241d0006a41086a2207200541086a290000370300200220063703502005102f200420022903502206370300200241106a41086a2001290300370300200241106a41106a2006370300200241106a41186a2007290300370300200220022903303703102002200241106a10e301024020032903004280ade20420022903087d4280ade20420022802001b560d00200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a42003703000c030b200041800c3b0001200041013a0000200041036a41003a00000c020b200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a42003703000c010b200241c4006a410136020020024201370234200241b4d8c9003602302002410436021420024180dcc1003602102002200241106a360240200241306a41e8d8c9001043000b200241e0006a24000b980204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001ad42808080808004841002107302400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410b36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b885c7003602382002200241286a360248200241346a41d8dbc100200241386a103c1a200235022042208620023502188410080240200228021c450d002002280218102f0b420021030b2004450d002001102f0b2000200537030820002003370300200241d0006a24000b820303037f017e017f02402001450d00034020002802e40121002001417f6a22010d000b0b02402002450d0041002103034002400240200320002f01064f0d0041002104200021010c010b41002104034002400240024020004190bdc600460d00200028020022010d0141002103410021010c020b41edb3ca00412841f8b4ca001039000b200441016a210420002f010421030b2000102f20012100200320012f01064f0d000b0b200341016a210520012003410c6c6a220041e4006a2902002106200041e0006a28020021070240024020040d0020012100200521030c010b200120054102746a41e4016a2802002100410021032004417f6a2201450d00034020002802e40121002001417f6a22010d000b0b2007450d012002417f6a210202402006a7450d002007102f0b20020d000b0b0240024020004190bdc600460d00200028020021012000102f2001450d00034020014190bdc600460d02200128020021002001102f2000210120000d000b0b0f0b41edb3ca00412841f8b4ca001039000bf00401077f20022003106902402001450d00034020002802940321002001417f6a22010d000b0b0240024002402002450d00200341046a210441002105034002400240200520002f0106490d0041002106024003400240200028020022010d0041002107410021010c020b200641016a210620002f0104210720012100200720012f01064f0d000b0b200741016a2105024020060d00200121000c020b200120054102746a4194036a2802002100410021052006417f6a2206450d01034020002802940321002006417f6a22060d000c020b0b2000210120052107200541016a21050b0240024020042802002208200341086a220628020022096b4120490d00200328020021080c010b200941206a220a2009490d0420084101742209200a2009200a4b1b22094100480d040240024020080d002009102d21080c010b200328020020082009103121080b2008450d032003200836020020042009360200200628020021090b2006200941206a360200200820096a220941186a200120074105746a41086a220841186a290000370000200941106a200841106a290000370000200941086a200841086a29000037000020092008290000370000200120074102746a41e8026a28020021090240024020042802002207200628020022016b4104490d00200328020021070c010b200141046a22082001490d04200741017422012008200120084b1b22014100480d040240024020070d002001102d21070c010b200328020020072001103121070b2007450d032003200736020020042001360200200628020021010b2006200141046a360200200720016a20093600002002417f6a22020d000b0b0f0b1036000b1038000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000bba0a02037f017e02400240024002400240024020002802000e0400010203000b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128020020022004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41003a00002000280204210302400240200141046a2802002202200428020022006b4104490d00200128020021020c010b200041046a22042000490d05200241017422002004200020044b1b22004100480d050240024020020d002000102d21020c010b200128020020022000103121020b2002450d0420012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128020020022004103121030b2003450d0320012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41013a00002000290308210502400240200141046a2802002202200428020022006b4108490d00200128020021020c010b200041086a22032000490d04200241017422002003200020034b1b22004100480d040240024020020d002000102d21020c010b200128020020022000103121020b2002450d0320012002360200200141046a2000360200200141086a28020021000b200141086a200041086a360200200220006a20053700000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d03200241017422042003200420034b1b22044100480d030240024020020d002004102d21030c010b200128020020022004103121030b2003450d0220012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41023a00002000280204210302400240200141046a2802002202200428020022006b4104490d00200128020021020c010b200041046a22042000490d03200241017422002004200020044b1b22004100480d030240024020020d002000102d21020c010b200128020020022000103121020b2002450d0220012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d02200241017422042003200420034b1b22044100480d020240024020020d002004102d21030c010b200128020020022004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41033a00002000290308210502400240200141046a2802002202200428020022006b4108490d00200128020021020c010b200041086a22032000490d02200241017422002003200020034b1b22004100480d020240024020020d002000102d21020c010b200128020020022000103121020b2002450d0120012002360200200141046a2000360200200141086a28020021000b200141086a200041086a360200200220006a20053700000f0b1036000b1038000bec0f05027f037e0d7f017e017f23004190016b2202240041aa97ca00ad4280808080800184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f41cbcec100ad4280808080e00184100122032900002104200241206a41086a200341086a290000370300200220043703202003102f0240024002400240024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241e8006a41186a2207200141186a290000370300200241e8006a41106a22082006370300200241e8006a41086a2005370300200220043703682001102f2003102f41c000102d2203450d00200320022903103700002003200229032037001020032002290368370020200341086a200241106a41086a2201290300370000200341186a200241206a41086a290300370000200341286a200241e8006a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c00036023420022003360230200241106a2003ad4280808080800884100210730240200228021022090d00410221010c060b2002280214210a20022001280200220736024c200220093602482007450d0320092d0000210120022007417f6a36024c2002200941016a360248200141014b0d03024002400240024020010e020001000b200241086a200241c8006a10e60120022802080d06200228024c220b200228020c2207490d062007417f4c0d040240024020070d00410121080c010b200710332208450d04200820022802482201200710e8061a2002200b20076b220b36024c2002200120076a3602480b2008450d06024002400240024002400240200b4104490d002002280248220c280000210d2002200b417c6a220e36024c2002200c41046a36024841002101200241003a008801417b210f02400340200e2001460d01200241e8006a20016a200c20016a221041046a2d00003a00002002200b200f6a36024c2002201041056a3602482002200141016a22113a008801200f417f6a210f2011210120114120470d000b2002200228006b360023200220022802683602202002200228022036025020022002280023360053200b20116b2201417c6a4110490d06200241f7006a2900002105200229006f2104200228007f210f200228008301211020022d008701210e2002200c20116a221241146a221336024820022001416c6a220c36024c200c4104490d042012410c6a2900002114201241046a29000021062013280000210c2002200141686a36024c2002201241186a2213360248200b41686a2011460d0520132d000021132002200141676a221536024c2002201241196a360248201341014b0d054100210b20130e020302030b0240200141ff0171450d00200241003a0088010b2007450d0c0c0b0b2007450d0b2008102f0c0b0b20154104490d02201241196a28000021112002200141636a36024c20022012411d6a3602484101210b0b2002200228005336006320022002280250360260200220022802603602382002200228006336003b200220022800593602402002200241dc006a28000036004341002101200721120c040b2007450d082008102f0c080b2007450d072008102f0c070b20070d050c060b41002101200241003a0088012007417f6a210d2007417e6a21070340200d2001460d02200241e8006a20016a200920016a220841016a2d00003a00002002200841026a3602482002200141016a22083a0088012002200736024c2007417f6a21072008210120084120470d000b2002200228006b3600232002200228026836022020022002280023360053200220022802203602502002200228025036026020022002280053360063200241f7006a2900002114200229006f2106200228007f2108200228008301211220022d008701210720022002280063360043200220022802603602402002200241dc006a28000036003b20022002280059360238410121010b2002200228004336005320022002280240360250200220022802383602602002200228003b3600630c050b200141ff0171450d03200241003a0088010c030b1036000b103d000b2008102f0b20024100360228200242013703202002410b3602542002200241306a3602502002200241206a360260200241fc006a41013602002002420137026c200241b885c7003602682002200241d0006a360278200241e0006a41d8dbc100200241e8006a103c1a2002350228422086200235022084100802402002280224450d002002280220102f0b410221010b200a450d002009102f0b200220022802503602682002200228005336006b20022002280260360220200220022800633600230240024020014102470d00200041023a00000c010b200020013a000020002002280268360001200041106a2014370000200041086a2006370000200041c3006a20053700002000413b6a2004370000200041046a200228006b360000200041306a20113600002000412c6a200b360000200041286a200c360000200041246a200d360000200041206a20073600002000411c6a2012360000200041186a2008360000200041346a2002280220360000200041376a2002280023360000200041cb006a200f360000200041cf006a2010360000200041d3006a200e3a00000b2003102f20024190016a24000b840603027f037e047f230041c0006b2202240041aa97ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41cbcec100ad4280808080e00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322002900002104200041086a2900002105200041106a2900002106200241206a41186a2207200041186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202000102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241003602282002420137032020012d000021074101102d21000240024020074101460d002000450d02200041003a0000200242818080801037022420022000360220200141086a200241206a10ea01200235022842208621042002280224452101200228022021000c010b2000450d01200041013a00002002428180808010370224200220003602204120102d2207450d0120072001290001370000200741186a2208200141196a290000370000200741106a2209200141116a290000370000200741086a220a200141096a29000037000020004101412110312200450d0120002007290000370001200041096a200a290000370000200041116a2009290000370000200041196a2008290000370000200242a18080809004370224200220003602202007102f410021014280808080900421040b2003ad428080808080088420042000ad841004024020010d002000102f0b2003102f200241c0006a24000f0b1036000bda0b02057f027e20002802102102200041186a2802002203200110690240024002400240200141046a2802002204200141086a28020022056b2003490d00200128020021040c010b200520036a22062005490d02200441017422052006200520064b1b22054100480d020240024020040d002005102d21040c010b200128020020042005103121040b2004450d0120012004360200200141046a2005360200200141086a28020021050b200141086a2206200520036a360200200420056a2002200310e8061a200028021c210402400240200141046a2802002205200628020022036b4104490d00200128020021050c010b200341046a22022003490d02200541017422032002200320024b1b22034100480d020240024020050d002003102d21050c010b200128020020052003103121050b2005450d0120012005360200200141046a2003360200200141086a28020021030b200141086a2202200341046a360200200520036a20043600004120102d2203450d002003200029002c370000200341186a200041c4006a290000370000200341106a2000413c6a290000370000200341086a200041346a29000037000002400240200141046a2802002204200228020022056b4120490d00200128020021040c010b200541206a22022005490d02200441017422052002200520024b1b22054100480d020240024020040d002005102d21040c010b200128020020042005103121040b2004450d0120012004360200200141046a2005360200200141086a28020021050b200141086a2202200541206a360200200420056a220541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a290000370000200520032900003700002003102f200041086a29030021072000290300210802400240200141046a2802002205200228020022036b4110490d00200128020021050c010b200341106a22042003490d02200541017422032004200320044b1b22034100480d020240024020050d002003102d21050c010b200128020020052003103121050b2005450d0120012005360200200141046a2003360200200141086a28020021030b200141086a2204200341106a360200200520036a22032007370008200320083700002000280220210202400240200141046a2802002205200428020022036b4104490d00200128020021050c010b200341046a22042003490d02200541017422032004200320044b1b22034100480d020240024020050d002003102d21050c010b200128020020052003103121050b2005450d0120012005360200200141046a2003360200200141086a28020021030b200141086a2204200341046a360200200520036a2002360000024020002802244101460d0002400240200141046a28020020042802002200460d00200128020021030c010b200041016a22032000490d03200041017422052003200520034b1b22054100480d030240024020000d002005102d21030c010b200128020020002005103121030b2003450d0220012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a41003a00000f0b02400240200141046a28020020042802002203460d00200128020021050c010b200341016a22052003490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21050c010b200128020020032004103121050b2005450d0120012005360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200520036a41013a00002000280228210502400240200141046a2802002203200428020022006b4104490d00200128020021030c010b200041046a22042000490d02200341017422002004200020044b1b22004100480d020240024020030d002000102d21030c010b200128020020032000103121030b2003450d0120012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20053600000f0b1036000b1038000ba00603027f037e057f230041c0006b2202240041aa97ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41cbcec100ad4280808080e00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322002900002104200041086a2900002105200041106a2900002106200241206a41186a2207200041186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202000102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241003602282002420137032020012d000021084101102d21000240024020084101460d002000450d02200041003a0000200242818080801037022420022000360220200141086a200241206a10ea01200235022842208621042002280224452107200228022021000c010b2000450d01200041013a00002002428180808010370224200220003602204120102d2207450d0120072001290001370000200741186a2209200141196a290000370000200741106a220a200141116a290000370000200741086a220b200141096a29000037000020004101412110312200450d0120002007290000370001200041096a200b290000370000200041116a200a290000370000200041196a2009290000370000200242a18080809004370224200220003602202007102f410021074280808080900421040b2003ad428080808080088420042000ad841004024020070d002000102f0b2003102f024020080d002001411c6a280200450d00200141186a280200102f0b200241c0006a24000f0b1036000bbc0303027f037e027f230041c0006b2201240041aa97ca00ad4280808080800184100122022900002103200141086a200241086a290000370300200120033703002002102f41cbcec100ad4280808080e00184100122022900002103200141106a41086a200241086a290000370300200120033703102002102f02404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141206a41186a2206200041186a290000370300200141206a41106a22072005370300200141206a41086a2004370300200120033703202000102f2002102f41c000102d2202450d00200220012903003700002002200129031037001020022001290320370020200241086a200141086a290300370000200241186a200141106a41086a290300370000200241286a200141206a41086a290300370000200241306a2007290300370000200241386a20062903003700002002ad428080808080088410052002102f200141c0006a24000f0b1036000bab0502077f047e230041b0036b22032400200341186a200141186a290000370300200341106a200141106a290000370300200341086a200141086a29000037030020032001290000370300024002400240200028020022044190bdc600460d00200028020421050c010b41002105200341d0006a410041e00210e7061a200341c8006a22014100360200200341c0006a22064200370300200341206a41186a4200370300200341206a41106a4200370300200341206a41086a420037030020034200370320419403102d2204450d01200441003b010620044100360200200441086a200341d0006a41e00210e8061a20044190036a200128020036020020044188036a200629030037020020044180036a200341386a290300370200200441f8026a200341306a290300370200200441f0026a200341206a41086a290300370200200420032903203702e80220004100360204200020043602000b0240024003400240024020042f010622070d00410021080c010b20074105742101200441086a2106417f21080340024020010d00200721080c020b200841016a210820032006412010ea062209450d03200141606a2101200641206a21062009417f4a0d000b0b02402005450d002005417f6a2105200420084102746a4194036a28020021040c010b0b200341206a41186a200341186a290300220a370300200341206a41106a200341106a290300220b370300200341206a41086a200341086a290300220c37030020032003290300220d370320200341ec006a200c370200200341f4006a200b370200200341fc006a200a3702002003200836025c20032004360254200341003602502003200d370264200320003602582003200041086a360260200341d0006a200210ee011a0c010b200420084102746a41e8026a20023602000b200341b0036a24000f0b1036000beb0701087f23004190046b2202240020002802102203200328020041016a360200200241086a2203200041086a29020037030020022000290200370300200241306a41186a2000412c6a290000370300200241306a41106a200041246a290000370300200241306a41086a2000411c6a29000037030020022000290014370330200241d0006a2002200241306a2001107702400240024020022d00504101470d002003200241d9006a290000370300200241106a200241e1006a290000370300200241186a200241e9006a29000037030020022002290051370300200241d0006a412c6a280200210120024188016a280200210420024184016a280200210320024180016a2802002105200228028c012106200241f8006a28020022002802002207450d0120002f01042108200241f4006a2802002109200241d0006a410172210003402002200841ffff037136022c20022001360228200220073602242002200941016a360220200241306a41186a200241186a2201290300370300200241306a41106a200241106a2207290300370300200241306a41086a200241086a220829030037030020022002290300370330200241d0006a200241206a200241306a200520032004107820022d00504101470d032008200041086a2900003703002007200041106a2900003703002001200041186a29000037030020022000290000370300200228027c2101200228028801210420022802840121032002280280012105200228027822082802002207450d0220082f01042108200228027421090c000b0b200241d0006a41086a280200200241d0006a41106a2802004102746a41e8026a21060c010b200241d0006a410272410041be0310e7061a02400240024041c403102d2200450d0020004100360200200041046a200241d0006a41c00310e8061a200020012802002207360294032001200036020020012001280204220841016a360204200741003b010420072000360200200241d0006a41186a200241186a290300370300200241d0006a41106a200241106a290300370300200241d0006a41086a200241086a2903003703002002200229030037035020082004470d0120002f01062201410a4b0d02200020014105746a220441206a200241d0006a41186a290300370000200441186a200241d0006a41106a290300370000200441106a200241d0006a41086a290300370000200441086a2002290350370000200020014102746a41e8026a20053602002000200141016a22014102746a4194036a2003360200200020013b0106200320013b0104200320003602000c030b1036000b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000b20024190046a240020060bfc0707047f017e017f017e017f017e047f230041e0006b22022400200241306a41186a22034200370300200241306a41106a22044200370300200241306a41086a220542003703002002420037033041aa97ca00ad42808080808001842206100122072900002108200241d0006a41086a2209200741086a290000370300200220083703502007102f200520092903003703002002200229035037033041c997ca00ad4280808080e00184220810012207290000210a2009200741086a2900003703002002200a3703502007102f20042002290350220a370300200241106a41086a220b2005290300370300200241106a41106a220c200a370300200241106a41186a220d2009290300370300200220022903303703102002200241106a10e3012002280200210e2002290308210a2003420037030020044200370300200542003703002002420037033020061001220729000021062009200741086a290000370300200220063703502007102f200520092903003703002002200229035037033020081001220729000021062009200741086a290000370300200220063703502007102f200420022903502206370300200b2005290300370300200c2006370300200d2009290300370300200220022903303703102002200a42017c4201200e1b2206370330200241106aad4280808080800484200241306aad4280808080800184100402404120102d2209450d0020092001290000370000200941186a200141186a290000370000200941106a200141106a290000370000200941086a200141086a2900003700002009412041c00010312205450d00200520063700202005ad4280808080800584100322092900002106200941086a2900002108200941106a290000210a200241306a41186a200941186a290000370300200241306a41106a200a370300200241306a41086a2008370300200220063703302009102f4137102d2209450d00200942bac6a1cbc68dd9aff300370000200942f4dec98bf6ac999de400370008200941e5cc85ab073600102009413a3a0016200941ece8013b001420092002290330370017200920022f01383b001f2009200228013a360021200920022f013e3b0025200920022d00403a0027200920022d00413a0028200920022d00423a0029200920022d00433a002a200920022d00443a002b200920022d00453a002c200920022d00463a002d200920022d00473a002e200920022d00483a002f200920022d00493a0030200920022d004a3a0031200920022d004b3a0032200920022d004c3a0033200920022d004d3a0034200920022d004e3a0035200920022d004f3a0036200041ccddc10041a4ddc1006b410f6a36020820004137360204200020093602002005102f200241e0006a24000f0b1036000b130020004105360204200041acddc1003602000b3400200041aa97ca0036020420004100360200200041146a4107360200200041106a41b4efc100360200200041086a42083702000b3301017f02404110102d22020d001036000b2002420037000820024201370000200042908080808002370204200020023602000b2201017f230041106b22022400200241003602002000200210f401200241106a24000bff0201067f230041106b220224000240024002400240024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0120024100360208200242013703000c020b103d000b2004102d2205450d04200241003602082002200436020420022005360200024020030d00200541003a0000200241013602080c030b20040d010b4101102d2205450d0320024101360204200220053602000b200541013a000020024101360208200141086a2802002204200210690240024020022802042201200228020822056b2004490d00200228020021010c010b200520046a22062005490d02200141017422072006200720064b1b22064100480d020240024020010d002006102d21010c010b200228020020012006103121010b2001450d0320022006360204200220013602000b2002200520046a360208200120056a2003200410e8061a0b20002002290300370200200041086a200241086a280200360200200241106a24000f0b1038000b1036000bcc0101017f23004190016b22022400200241003a0078200242808084808002370368200242e4003703582002420137035020024201370348200242af0137034020024287013703382002420137033020024201370328200242013703202002420137031820024201370310200242013703082002420137030020024280808080c00037036020024280808180800437037020024100360288012002420137038001200220024180016a10f601200041086a200228028801360200200020022903800137020020024190016a24000bf41802047f017e200028026021020240024002400240200141046a2802002203200141086a28020022046b4104490d00200128020021030c010b200441046a22052004490d02200341017422042005200420054b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2205200441046a360200200320046a20023600002000290300210602400240200141046a2802002203200528020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290308210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290310210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290318210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290320210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290328210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290330210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290338210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290340210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290348210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290350210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000290358210602400240200141046a2802002203200228020022046b4108490d00200128020021030c010b200441086a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441086a360200200320046a20063700002000280264210502400240200141046a2802002203200228020022046b4104490d00200128020021030c010b200441046a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441046a360200200320046a20053600002000280268210502400240200141046a2802002203200228020022046b4104490d00200128020021030c010b200441046a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441046a360200200320046a2005360000200028026c210502400240200141046a2802002203200228020022046b4104490d00200128020021030c010b200441046a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441046a360200200320046a20053600002000280270210502400240200141046a2802002203200228020022046b4104490d00200128020021030c010b200441046a22022004490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21030c010b200128020020032004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021040b200141086a2202200441046a360200200320046a200536000020002d0078210502400240200141046a28020020022802002204460d00200128020021030c010b200441016a22032004490d02200441017422022003200220034b1b22024100480d020240024020040d002002102d21030c010b200128020020042002103121030b2003450d0120012003360200200141046a2002360200200141086a28020021040b200141086a2202200441016a360200200320046a20053a00002000280274210302400240200141046a2802002204200228020022006b4104490d00200128020021040c010b200041046a22022000490d02200441017422002002200020024b1b22004100480d020240024020040d002000102d21040c010b200128020020042000103121040b2004450d0120012004360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200420006a20033600000f0b1036000b1038000b13002000410e360204200041bcf8c1003602000b2f01017f02404108102d22020d001036000b2000428880808080013702042000200236020020024280ade2043700000b2e01017f02404104102d22020d001036000b20004284808080c000370204200020023602002002418080013600000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241203600000b2d01017f02404108102d22020d001036000b20004288808080800137020420002002360200200242e8073700000b3801017f02404110102d22020d001036000b2002420037000820024280a094a58d1d370000200042908080808002370204200020023602000b3701017f02404110102d22020d001036000b2002420037000820024280c8afa025370000200042908080808002370204200020023602000b3a01017f02404110102d22020d001036000b20024200370008200242808086bdbacdd21a370000200042908080808002370204200020023602000b3b01017f02404110102d22020d001036000b200242003700082002428080a8ec85afd1b101370000200042908080808002370204200020023602000b3901017f02404110102d22020d001036000b200242003700082002428080e983b1de16370000200042908080808002370204200020023602000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241083600000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241023600000bd91f05047f027e097f017e157f230041d00d6b22072400200741186a41186a200141186a290000370300200741186a41106a200141106a290000370300200741186a41086a200141086a29000037030020072001290000370318200741386a41186a200241186a290000370300200741386a41106a200241106a290000370300200741386a41086a200241086a2900003703002007200229000037033820062802002108200628020421092006280208210a200741a0066a200741186a20051084020240024020072802a0064101470d00200020072902a40637020420004101360200200041186a4100360200200041106a42013702002000410c6a200741a0066a410c6a2802003602002009450d012008102f0c010b200741d0066a2903002105200741c8066a290300210b200741d8006a41186a200741c0066a290300370300200741d8006a41106a200741a0066a41186a2201290300370300200741d8006a41086a200741a0066a41106a2202290300370300200720072903a8063703582001420037030020024200370300200741a0066a41086a22014200370300200742003703a00641aa97ca00ad428080808080018410012206290000210c2001200641086a2900003703002007200c3703a0062006102f41ba97ca00ad4280808080f0018410012206290000210c200741f8096a41086a220d200641086a2900003703002007200c3703f8092006102f200220072903f809220c370300200741c8036a41086a2001290300370300200741c8036a41106a200c370300200741c8036a41186a200d290300370300200720072903a0063703c803200741a0066a200741c8036a10850220072d0098072102200741c8036a200741a0066a41f80010e8061a2007200741a0066a41fc006a2800003600fb0920072007280099073602f8090240024020024102470d002007428080818080043703e8012007428080848080023703e001200742e4003703d001200742013703c801200742013703c001200742af013703b80120074287013703b001200742013703a801200742013703a00120074201370398012007420137039001200742013703880120074201370380012007420137037820074280808080c0003703d801410021020c010b200741f8006a200741c8036a41f80010e8061a200741f8006a41fc006a20072800fb09360000200720072802f8093600f1010b20074190026a420037030020074180026a4200370300200741a0026a4200370300200720023a00f0012007428080e983b1de16370388022007428080e983b1de163703f80120074280a094a58d1d37039802200742a08080808080103703a8022007200741f8006a3602b0022007200741f8006a3602b402200741f8096a41186a220e200741186a41186a290300370300200741f8096a41106a220f200741186a41106a290300370300200741f8096a41086a2210200741186a41086a290300370300200720072903183703f809200741a0066a41186a220d4200370300200741a0066a41106a22014200370300200741a0066a41086a22024200370300200742003703a00641d5a2ca00ad428080808090018410012206290000210c2002200641086a2900003703002007200c3703a0062006102f41ecb0c000ad4280808080308410012211290000210c200741f8086a41086a2206201141086a2900003703002007200c3703f8082011102f200120072903f808220c370300200741c8036a41086a22122002290300370300200741c8036a41106a2213200c370300200741c8036a41186a22142006290300370300200720072903a0063703c803200741086a200741c8036a10e3012007290310210c20072802082115200d42003703002001420037030020024200370300200742003703a006418de6c300ad4280808080e000841001221129000021162002201141086a290000370300200720163703a0062011102f419ce6c300ad4280808080e000841001221129000021162006201141086a290000370300200720163703f8082011102f200120072903f8082216370300201220022903003703002013201637030020142006290300370300200720072903a0063703c8032007200741c8036a4120109501200741f0026a4200370300200741e4026a418886c700360200200741e0026a41c8e1ca00360200200741d4026a4190bdc60036020020074190036a201029030037030020074198036a200f290300370300200741a0036a200e290300370300200741b8026a41206a42003703002007428080808080013703e802200742003703c002200720072903f80937038803200741003602d00220072802002106200728020421112007200741b4026a360280032007200741b0026a3602fc022007200741f8006a3602f80220072011410020061b360284032007200c420020151b3703b802200d200741386a41186a2903003703002001200741386a41106a2903003703002002200741386a41086a290300370300200720072903383703a0062007200a3602d003200720093602cc03200720083602c803200741a8036a200741b8026a200741a0066a20032004200741d8006a200741c8036a10860241012117024020072802a8030d00200741a8036a41106a2d00000d00200741a0066a41086a200741d8026a290300370300200741c8036a41086a200741ac066a280200360200200720072903d0023703a006200720072902a4063703c803200741c80d6a200741c8036a108702410021170b200741186a200729035820072903602007290368200741d8006a41186a290300200b200510880220072802ec02221820072802f402220241d8026c6a210820072802f002211920182101024002402002450d00200741c10a6a2111200741e1066a210a200741f8096a410172211a200741f8086a41076a211b200741810a6a2109200741f8086a410272210e200741a10a6a210f200741a0066a41106a211c200741c8066a211d20074184076a2114200741c1066a210d200741a0066a410172211320182101034020012d00002106200741c8036a200141016a41d70210e8061a0240024002400240024020064103460d00200720063a00a0062013200741c8036a41d70210e8062102024002400240024020060e03000102000b20072802a806211220072802ac06210620072802a4062102201b201c41f80010e8061a2007410d3a00f809201a200741f8086a41ff0010e8061a20022006200741f8096a108c014101210641002110024020120d00410021120c030b2002102f410021120c020b200741980d6a41186a2206200241186a2210290000370300200741980d6a41106a2212200241106a2215290000370300200741980d6a41086a221e200241086a221f290000370300200720022900003703980d200741f8096a201d41b00210e8061a200e2002290000370000200e41086a201f290000370000200e41106a2015290000370000200e41186a201029000037000020074180023b01f808200741e80c6a200741f8096a200741f8086a108b0120072d00e80c2102200920072903980d370000200941086a201e290300370000200941106a2012290300370000200941186a2006290300370000200741063a00800a2007410d3a00f809200720024104463a00a10a4100211041c8e1ca004100200741f8096a108c0141012112410021060c010b200741a80c6a41186a2206200241186a2210290000370300200741a80c6a41106a2212200241106a2215290000370300200741a80c6a41086a221e200241086a221f290000370300200720022900003703a80c200741c80c6a41186a2220200d41186a2221290000370300200741c80c6a41106a2222200d41106a2223290000370300200741c80c6a41086a2224200d41086a22252900003703002007200d2900003703c80c200741e80c6a41186a2226200a41186a2227290000370300200741e80c6a41106a2228200a41106a2229290000370300200741e80c6a41086a222a200a41086a222b2900003703002007200a2900003703e80c200741a0066a41f8006a29030021052007290390072103200741980d6a41186a2010290000370300200741980d6a41106a2015290000370300200741980d6a41086a201f290000370300200720022900003703980d200741f8086a41186a2021290000370300200741f8086a41106a2023290000370300200741f8086a41086a20252900003703002007200d2900003703f808200741f8096a41186a2027290000370300200741f8096a41106a2029290000370300200741f8096a41086a202b2900003703002007200a2900003703f809200741b80d6a41086a201441086a280200360200200720142902003703b80d200741880d6a200741980d6a200741f8086a200741f8096a20032005200741b80d6a10890220072d00880d2102200920072903a80c370000200941086a201e290300370000200941106a2012290300370000200941186a2006290300370000200f20072903c80c370000200f41086a2024290300370000200f41106a2022290300370000200f41186a2020290300370000200741033a00800a2007410d3a00f809200741f8096a41f8006a2005370300201141186a2026290300370000201141106a2028290300370000201141086a202a290300370000201120072903e80c370000200720033703e80a200720024104463a00e10a41c8e1ca004100200741f8096a108c014101211041012112410121060b20072d00a006220241014b0d0120020e020302030b200141d8026a21010c050b201020072802880745720d02200728028407102f0c020b2006450d01201d108e010c010b2012450d00024020072802a806450d0020072802a406102f0b20072d00b0064107470d0020072802d806450d0020072802d406102f0b200141d8026a22012008470d000c020b0b20082001460d0003402001220241d8026a21010240024020022d0000220641014b0d000240024020060e020001000b0240200241086a280200450d00200241046a280200102f0b200241106a2d00004107470d02200241386a280200450d02200241346a280200102f0c020b200241286a108d010c010b200241e8006a280200450d00200241e4006a280200102f0b20082001470d000b0b02402019450d002018102f0b200020072903a803370200200041186a200741a8036a41186a280200360200200041106a200741a8036a41106a290300370200200041086a200741a8036a41086a290300370200024020072802c4022202450d00200741b8026a41106a280200450d002002102f0b2017450d00200741b8026a411c6a280200210220072802dc0221080240024020072802d80222060d00200221010c010b2006210920022101034020012802880b21012009417f6a22090d000b0340200220022f01064102746a41880b6a28020021022006417f6a22060d000b0b200741a0066a411c6a20022f0106360200200741b8066a4100360200200741b4066a2002360200200720083602c006200741003602b006200742003703a806200720013602a406200741003602a006200741a0066a108a020b200741d00d6a24000bd90706017f017e037f017e017f037e230041a0026b2203240042002104200341a0016a41186a4200370300200341a0016a41106a22054200370300200341a0016a41086a22064200370300200342003703a00141aa97ca00ad42808080808001841001220729000021082006200741086a290000370300200320083703a0012007102f41d9cec100ad4280808080800184100122072900002108200341d8006a41086a2209200741086a290000370300200320083703582007102f200520032903582208370300200341f0006a41086a2006290300370300200341f0006a41106a2008370300200341f0006a41186a2009290300370300200320032903a001370370200341386a200341f0006a4120109c0102400240024020032903404201200328023822061b2208200341386a41106a290300420020061b220a8450450d004200210b4200210c0c010b200341186a200a42002002420010ed06200341286a200842002002420010ed06200341086a420042002008420010ed0602402003290320200329031084420052200341286a41086a290300220b200329031820032903087c7c220c200b54724101460d002003290328210b0c010b200041003a0004200041013602002000410c6a4127360200200041086a41e085c7003602000c010b41002106200341003a006b200341083a006a200320013602542003200b3703582003200c370360024002400240200b200c8450450d004200210c0c010b2003200136026c2003200341ec006a3602b0012003200341ea006a3602ac012003200341d4006a3602a8012003200341eb006a3602a4012003200341d8006a3602a001200341f0006a2001200341a0016a10a50441012106024020032802704101470d00200341f8006a29030021044200210c200328027421070c020b20034198016a290300210c20034190016a29030021040240200341f0006a41086a2903004201510d00410021060c010b200341f0006a41106a290300210b200328026c2107200341d8016a200341f0006a41186a290300370300200341d0016a200b37030041002106200341a0016a41086a41003a0000200341a9016a2007290000370000200341b1016a200741086a290000370000200341b9016a200741106a290000370000200341c1016a200741186a290000370000200341033a00a00141c8e1ca004100200341a0016a108c010b0b024020060d0020004100360200200041306a200c370300200041286a2004370300200041206a200a370300200041186a2008370300200041106a2002370300200041086a20023703000c010b2000200736020420004101360200200041086a20043702000b200341a0026a24000bf00201047f230041c0016b220224002002412036020420022001360200200241086a2001ad4280808080800484100210730240024020022802082201450d00200228020c21032002200241106a28020036029c012002200136029801200241186a20024198016a1091020240024020022d00900122044102470d00200241003602a801200242013703a0012002410b3602b401200220023602b0012002200241a0016a3602bc012002412c6a41013602002002420137021c200241b885c7003602182002200241b0016a360228200241bc016a41d8dbc100200241186a103c1a20023502a80142208620023502a00184100820022802a401450d0120022802a001102f0c010b2000200241186a41f80010e80621052002200241186a41fc006a2800003600a30120022002280091013602a001200541fc006a20022800a301360000200520022802a0013600790b200020043a00782003450d012001102f0c010b200041023a00780b200241c0016a24000bed3207037f017e017f017e057f047e057f23002207210820074180106b4160712207240020072004370360200720033703582007200536026c0240024002402001280230200128024022092802b001460d002005420020052903082203200941386a2903007d2204200420035622091b3703082009450d01200041003a0004200041013602002000410c6a4123360200200041086a41c891c700360200200041106a2006290200370200200041186a200641086a280200360200200824000f0b200041003a0004200041013602002000410c6a4129360200200041086a419f91c700360200200041106a2006290200370200200041186a200641086a2802003602000c010b20074180056a200210e801024002400240024020072d008005417f6a41ff01714102490d0020074180056a41106a290300210a20074180056a41086a220b290300210c200741a4056a280200210d200741a8056a280200210e42002103200741a00d6a41186a4200370300200741a00d6a41106a220f4200370300200741a00d6a41086a22054200370300200742003703a00d418de6c300ad4280808080e000841001220929000021042005200941086a290000370300200720043703a00d2009102f419ce6c300ad4280808080e00084100122092900002104200741d8026a41086a2210200941086a290000370300200720043703d8022009102f200f20072903d8022204370300200741e8016a41086a2005290300370300200741e8016a41106a220f2004370300200741e8016a41186a22112010290300370300200720072903a00d3703e801200741d0006a200741e8016a412010950141002007280254410020072802501b2209200e6b220e200e20094b1b220e450d02200741a00d6a2002108d0242002103200741c0006a20072903a00d221220052903002213428080a8ec85afd1b101420010ee064200200dad2204200729034022147d221520152004564200200741c0006a41086a2903002004201454ad7c7d22044200522004501b22051b22144200200420051b220484500d02420121032012428080d287e2bc2d5441002013501b0d02200741306a200ead42002014200410ed06200741206a2007290330200741306a41086a290300428080e983b1de16420010ed06024002402012428080aef89dc3527c2203200c200c200356200a20132003201254ad7c427f7c220356200a2003511b22051b22042007290320220c2004200c542003200a20051b2204200741206a41086a290300220a542004200a511b22051b22032004200a20051b220484500d00200741a00d6a2002108d0220072903c00d220c4200201220037d220a200a201256201320047d2012200354ad7d221220135620122013511b220e1b221458200741c80d6a290300220a42002012200e1b221258200a201251220e1bad2113200c201456200a201256200e1b0d032005450d010c030b4201211320050d020b200720033703d802200720043703e002420321030c020b200741f0006a20074180056a41d80010e8061a0c020b200741e8026a2004370300200720033703e002200720133703d802420221030b200741a00d6a200b41d00010e8061a200f20102903003703002011200741d8026a41106a290300370300200720033703e801200720072903d8023703f001200741f0006a2002200741a00d6a2009200741e8016a109f020b024002400240024002400240024002400240024002400240024020072d007022094103714103460d00024020090e03000100000b200741c8016a41186a220b200141e8006a290000370300200741c8016a41106a220e200141e0006a290000370300200741c8016a41086a220f200141d8006a290000370300200720012900503703c801200741f0006a41206a28020021054100211141002110024020090d002005417f4c0d02200741f0006a411c6a280200210d200741f0006a41186a28020021090240024020050d00410121100c010b2005102d2210450d090b20102009200510e8061a200d450d002009102f0b200741a4026a410036020020074194026a41ec91c700360200200741e8016a41206a4200370300200741e8016a411c6a4190bdc600360200200741e8016a41146a2005360200200741e8016a41106a2005360200200741e8016a41d8006a200241086a290000370300200741e8016a41e0006a200241106a290000370300200741e8016a41e8006a200241186a290000370300200720013602f001200741e8016a41286a200141186a22163602002007420837029c022007410036028002200720103602f401200720022900003703b802200720012802483602b002200720012903403703a8022007200128023041016a36029802200129030021032007200128024c3602b402200720033703e801200741d8026a41206a200f290300370300200741d8026a41286a200e29030037030020074188036a200b290300370300200741d8026a41146a200641086a280200360200200720023602e002200720072903c8013703f002200720062902003702e4022007200741ec006a3602dc022007200741d8006a3602d802024020072903582203200741d8006a41086a290300220484500d0020074180056a200728026c4100200741f0026a200220032004200741e8016a10a305024020072d0080054104460d0020072f00e502200741e7026a2d000041107472210e200741d8026a41106a290300210320072d00e402210f200729028405210420072802800521060c0e0b200728028002211120072802e00221020b201141016a220d41004c0d02200741d8026a41186a2117200741e4026a21182007200d36028002200741e8016a41206a280200210f20074184026a2219210602400240024002400340024002402006280200220e2f010622110d00410021090c010b20114105742106200e41c5036a2110200e41086a2105417f21090340024020060d00201121090c020b20022005412010ea06220b450d03200641606a2106201041e0006a2110200941016a2109200541206a2105200b417f4a0d000b0b200f450d02200f417f6a210f200e20094102746a41880b6a21060c000b0b0240024020102d00000d002010415f6a2d0000210520074180056a41186a2209201041606a220641186a29000037030020074180056a41106a2210200641106a29000037030020074180056a41086a220b200641086a29000037030020072006290000370380054102210620054101470d01200741a00d6a41186a2009290300370300200741a00d6a41106a2010290300370300200741a00d6a41086a200b29030037030020072007290380053703a00d410121060c010b2010415f6a2d00002106200741a00d6a41186a201041606a220541186a290000370300200741a00d6a41106a200541106a290000370300200741a00d6a41086a200541086a290000370300200720052900003703a00d0b200641ff01714102470d010b20074190036a200728029002200220072802940228021011030020072d0090032106200728028002210d0c010b20074199036a200741a80d6a290300370000200741a1036a200741b00d6a290300370000200741a9036a200741b80d6a290300370000200720063a009003200720072903a00d370091030b2007200d417f6a36028002410121110240200641ff01714101470d00200741b8036a41186a200741a9036a290000370300200741b8036a41106a200741a1036a290000370300200741b8036a41086a20074199036a29000037030020072007290091033703b80320074180056a200741b8036a20072802b00228020010920202402007280280054101470d0020072f00e502200741e7026a2d000041107472210e2007290284052104200741d8026a41106a290300210320072d00e402210f410021060c0e0b200741a00d6a41186a220520074180056a410472220641186a2802002209360200200741d8036a41106a200641086a290200370300200741d8036a41186a200641106a290200370300200741f8036a2009360200200741043602dc03200741fb8bca003602d803200720062902003703e00320072802ac0221062005201741186a2900002203370300200741a00d6a41106a201741106a2900002204370300200741a00d6a41086a2205201741086a2900002212370300200741a8056a2012370300200741b0056a2004370300200741b8056a20033703002007201729000022033703a00d200720033703a00520072802d802220941086a29030021032007200741e8016a360298052009290300210420072903e801211220072802b4022109200720033703880520072004370380052007200936029c0520072012370390052005201841086a280200360200200720182902003703a00d200741e0046a2006200741d8036a20074180056a200741a00d6a20072802dc0228020010bf0120072f00f104200741f3046a2d000041107472210e200741e0046a41106a2d0000210f200741e0046a41086a290300211220072802e4042111024020072802e0044101470d00200741f4046a290200210320122104201121060c0d0b20072802800241016a221a41004c0d0420072802e00221022007201a360280022007280288022117201921060240024002400340024002402006280200220d2f010622180d00410021090c010b20184105742106200d41c5036a2110200d41086a2105417f21090340024020060d00201821090c020b20022005412010ea06220b450d03200641606a2106201041e0006a2110200941016a2109200541206a2105200b417f4a0d000b0b2017450d022017417f6a2117200d20094102746a41880b6a21060c000b0b2010310000201041a37f6a290300220320035022061ba7450d004200201041ab7f6a220541086a29030020061b21034200200529030020061b21040c010b200741106a200728029002200220072802940228021c110300200741186a290300210320072903102104200728028002211a0b2007201a417f6a221036028002200420072802a80222062903800154200320064188016a29030022045420032004511b0d050c060b420021124100210f0240200741e8026a280200450d0020072802e402102f0b0c060b200041003a0004200041013602002000410c6a4119360200200041086a418b93c700360200200041106a2006290200370200200041186a200641086a28020036020020090d0c2007418c016a280200450d0c20074188016a280200102f200824000f0b103d000b41c6c4ca00411820074180056a41cc90c70041f0c4ca00103e000b41c6c4ca00411820074180056a41cc90c70041f0c4ca00103e000b20072802f0012206450d030240024020072802e0022205200641d0006a2209460d0020092005412010ea06450d00034020062802082206450d022005200641d0006a2209460d0120092005412010ea060d000b0b2011410876210e41d492c700ad4280808080f00684210441002106201221032011210f0c070b20100d042007417f36028002200741003a00bc04200742003702b404200741013a009d0420074190bdc6003602b004200741e0046a41186a200541186a290000370300200741e0046a41106a200541106a290000370300200741e0046a41086a200541086a290000370300200720052900003703e00402400240200728028402220b4190bdc600460d0020072802880221020c010b200741a00d6a410041e00210e7061a20074180056a410041a00810e7061a41880b102d220b450d0341002102200b41003b0106200b4100360200200b41086a200741a00d6a41e00210e8061a200b41e8026a20074180056a41a00810e8061a20074100360288022007200b360284020b02400240034002400240200b2f0106220d0d00410021090c010b200d4105742106200b41086a2105417f21090340024020060d00200d21090c020b200941016a2109200741e0046a2005412010ea062210450d03200641606a2106200541206a21052010417f4a0d000b0b02402002450d002002417f6a2102200b20094102746a41880b6a280200210b0c010b0b200741c0046a41186a200741e0046a41186a2903002203370300200741c0046a41106a200741e0046a41106a2903002204370300200741c0046a41086a200741e0046a41086a290300220a370300200720072903e00422133703c004200741bc0d6a200a370200200741a00d6a41246a2004370200200741cc0d6a20033702002007200741e8016a41246a3602b00d200720093602ac0d200720193602a80d2007200b3602a40d200741003602a00d200720133702b40d20074180056a41186a42003703002007420037038005200741b8056a20072903b804370300200741b0056a20072903b004370300200741a8056a20072903a804370300200741a0056a20072903a004370300200741d8056a200729039804370300200741d0056a200729039004370300200741c8056a200729038804370300200741c0056a200729038004370300200741a00d6a20074180056a1097021a420221040c010b200b200941e0006c6a22064190036a20072903a80437030020064188036a20072903a004370300200641c0036a200729039804370000200641b8036a200729039004370000200641b0036a200729038804370000200641a8036a20072903800437000020064180036a4200370300200641e8026a2205290300210420054200370300200641a0036a2205280200210b200520072903b80437030020064198036a22062903002103200620072903b0043703002003a721062003422088a721050b024020044202510d000240024020050d00200621090c010b2005211020062109034020092802ec0321092010417f6a22100d000b0340200620062f01064102746a41ec036a28020021062005417f6a22050d000b0b2007419c056a20062f010636020020074198056a410036020020074194056a20063602002007200b3602a005200741003602900520074200370388052007200936028405200741003602800520074180056a1090020b200720072802800241016a360280020b200741f0036a280200450d00200741ec036a280200102f0b20072802a402210520072802a002210d200728029c022102200728028c02211720072802880221102007280284022106024020072802f4012209450d0020072802f801450d002009102f0b02400240200f41ff01710d00200720173602880520072010360284052007200636028005201620074180056a10a40502400240200141386a28020022062001413c6a28020022076b200541d8026c220941d8026d2205490d00200128023421060c010b200720056a22102007490d06200641017422072010200720104b1bad42d8027e2203422088a70d062003a722074100480d060240024020060d002007102d21060c010b2001280234200641d8026c2007103121060b2006450d0320012006360234200141386a200741d8026e3602002001413c6a28020021070b2006200741d8026c6a2002200910e8061a2001413c6a2207200728020020056a3602000240200d450d002002102f0b2000200e3b001120002011360204200041136a200e4110763a0000200041106a41003a0000200041086a20123702000c010b2000200e3b001120002011360204200041136a200e4110763a0000200041106a200f3a0000200041086a201237020002402005450d00200541d8026c210141002105034002400240200220056a22092d0000220b41014b0d0002400240200b0e020001000b0240200941086a280200450d00200941046a280200102f0b200941106a2d00004107470d02200941386a280200450d02200941346a280200102f0c020b200941286a108d010c010b200941e8006a280200450d00200941e4006a280200102f0b2001200541d8026a2205470d000b0b0240200d450d002002102f0b0240024020100d00200621050c010b2010210920062105034020052802880b21052009417f6a22090d000b0340200620062f01064102746a41880b6a28020021062010417f6a22100d000b0b2007419c056a20062f010636020020074198056a410036020020074194056a2006360200200720173602a005200741003602900520074200370388052007200536028405200741003602800520074180056a108a020b20004100360200200824000f0b1036000b419092c700413241c492c7001055000b41c3c5ca00411020074180056a41dc90c70041e4c5ca00103e000b1038000b200741f0036a280200450d00200741ec036a280200102f0b2000200e3b00112000200636020420004101360200200041136a200e4110763a0000200041146a2003370000200041106a200f3a0000200041086a2004370200024020072802f4012206450d0020072802f801450d002006102f0b200741e8016a411c6a2802002106200728028c0221100240024020072802880222050d00200621090c010b2005210020062109034020092802880b21092000417f6a22000d000b0340200620062f01064102746a41880b6a28020021062005417f6a22050d000b0b20074180056a411c6a20062f01063602004100210520074198056a410036020020074194056a2006360200200720103602a005200741003602900520074200370388052007200936028405200741003602800520074180056a108a02024020072802a4022206450d00200728029c022100200641d8026c2110034002400240200020056a22062d0000220941014b0d000240024020090e020001000b0240200641086a280200450d00200641046a280200102f0b200641106a2d00004107470d02200641386a280200450d02200641346a280200102f0c020b200641286a108d010c010b200641e8006a280200450d00200641e4006a280200102f0b2010200541d8026a2205470d000b0b20072802a002450d00200728029c02102f200824000f0b200824000bce3d0f067f027e047f067e047f027e067f027e027f087e017f027e0b7f027e0b7f230041f0046b22022400200128020821032001280200210402400240200128020422050d00200421010c010b2005210620042101034020012802880b21012006417f6a22060d000b0340200420042f01064102746a41880b6a28020021042005417f6a22050d000b0b2002419c016a20042f01063602004100210720024198016a410036020020024194016a2004360200200220033602a001200241003602900142002108200242003703880120022001360284012002410036028001024002402003450d0020022003417f6a3602a0010240024020012f0106450d004100210620012104410021050c010b4100210641002105034002400240024020014190bdc600460d00200128020022040d012005ad2109410021040c020b41edb3ca00412841f8b4ca001039000b200641016a210620013301044220862005ad8421090b2001102f2009a72105200421012009422088a7220720042f01064f0d000b0b200241d0046a41186a220a200420074105746a220141206a290000370300200241d0046a41106a220b200141186a290000370300200241d0046a41086a220c200141106a2900003703002002200141086a2900003703d0042004200741e0006c6a220141a4036a2d0000210d200141a0036a280200210320014198036a290300210e20014190036a290300210f20014188036a290300211020014180036a2903002111200141f8026a2903002112200141f0026a2903002113200141e8026a2903002109200241e8036a41186a2214200141bd036a290000370300200241e8036a41106a2215200141b5036a290000370300200241e8036a41086a2216200141ad036a2900003703002002200141a5036a2900003703e803200741016a2107200141c5036a2d0000211702402006450d00200420074102746a41880b6a2802002104410021072006417f6a2201450d00034020042802880b21042001417f6a22010d000b0b200241c8026a41186a200a290300370300200241c8026a41106a200b290300370300200241c8026a41086a200c290300370300200241c8036a41086a2016290300370300200241c8036a41106a2015290300370300200241c8036a41186a2014290300370300200220022903d0043703c802200220022903e8033703c8032002200736028c01200220053602880120022004360284012002410036028001024020094202520d00420021080c010b200241d0046aad42808080808004842118200241c8036aad428080808080048421192002419c046a211a200241e8036a412c6a211b200241e8036a41106a211c200241e8036a41086a211d200241c8026a412c6a211e200241c8026a41106a211f4200210842002120420021210340200241c8016a41186a2201200241c8026a41186a2222290300370300200241c8016a41106a2204201f290300370300200241c8016a41086a2205200241c8026a41086a2223290300370300200241a8016a41086a2206200241c8036a41086a220b290300370300200241a8016a41106a2207200241c8036a41106a220c290300370300200241a8016a41186a220a200241c8036a41186a2214290300370300200220022903c8023703c801200220022903c8033703a801200241e8016a41186a2001290300370300200241e8016a41106a2004290300370300200241e8016a41086a2005290300370300200220022903c8013703e80120024188026a41186a2204200a29030037030020024188026a41106a2205200729030037030020024188026a41086a22072006290300370300200220022903a801370388020240024002402017ad42ff0183200920095022011b4201520d00200241e8036a200241e8016a108d02200241e8036a41186a22062903002124201d290300210920022903f803212520022903e8032126200241e8006a200241e8016a4200201320011b4200201220011b108e02200241e8006a41106a29030021132002290370212720022903682128200241e8036a200241e8016a108d0220062903002129201d290300211220022903f803212a20022903e803212b200241d0006a202120082020202820272013109d01200241d0006a41106a29030021202002290358210820022903502121427f202620257c221320132026542201200920247c2001ad7c221320095420132009511b22011b427f201320011b84500d00427f202b202a7c22092009202b542201201220297c2001ad7c220920125420092012511b22011b427f200920011b84500d010b0240024002400240024002400240024002400240200d41ff0171220a41014622010d00201741ff01710d0020032011a772450d010b200241e8036a200241e8016a10e8010240024020022d00e8032215417f6a220641014b0d004102212c024020060e020002000b20150d0b200228028404450d0b200228028004102f0c0b0b200241a8026a41086a201a41086a290200370300200241a8026a41106a201a41106a290200370300200241a8026a41186a201a41186a2902003703002002201a2902003703a802201c290300212d20022903f003212e20022802bc04212f2002280298042130200228029404212c2002280290042131200228028c0421322002280288042133200228028404213420022802800421350b410221360240202c4102460d002033417f4c0d020240024020330d00410121370c010b2033102d2237450d040b20372035203310e8061a200241e8036a41186a200241a8026a41186a290300370300201c200241a8026a41106a290300370300201d200241a8026a41086a290300370300200220022903a8023703e803202c41014621362033213820332139202e213a202d213b2032213c2031213d2030213e0b2014200241e8036a41186a2206290300370300200c201c290300370300200b201d290300370300200241a8036a41086a223f2007290300370300200241a8036a41106a22402005290300370300200241a8036a41186a22412004290300370300200220022903e8033703c80320022002290388023703a803201741ff0171450d040c030b200ea7210102400240200e422088a722050d00200121040c010b2005210620012104034020042802ec0321042006417f6a22060d000b0340200120012f01064102746a41ec036a28020021012005417f6a22050d000b0b20022003360288042002410036028004200241003602f803200242003703f003200220043602ec03200241003602e803200220013602fc03200220012f010636028404200241e8036a1090020c090b103d000b1036000b20364102460d010240203941164d0d002039ad4220862037ad84203941696aad422086203741176aad844101101d024020010d00200241e8016a10ec012038450d042037102f0c040b20024198036a200241e8016a10ef0120064200370300201c420037030041082142200241e8036a41086a22014200370300200242003703e803418de6c300ad4280808080e000841001221729000021092001201741086a290000370300200220093703e8032017102f419ce6c300ad4280808080e00084100122172900002109200241c0046a41086a2215201741086a290000370300200220093703c0042017102f201c20022903c004370000201c41086a2015290300370000200241d0046a41086a2001290300370300200241d0046a41106a201c290300370300200241d0046a41186a2006290300370300200220022903e8033703d004200241c8006a200241d0046a4120109501200228024c210120022802482117201f41086a20024198036a41086a280200360200201f200229039803370200201e20022903a803370100201e41086a200241a8036a41086a290300370100201e41106a2040290300370100201e41186a2041290300370100427f212b2002427f3703d0022002427f3703c802200241083602e40241002136200241003602ec0220022001410020171b22433602e802024020380d00427f21240c060b2037102f427f212b427f21240c050b41172039104b000b20364102470d020b2001450d0020024198036a200241e8016a10ef0120064200370300201c420037030041082142200241e8036a41086a22014200370300200242003703e803418de6c300ad4280808080e000841001221729000021092001201741086a290000370300200220093703e8032017102f419ce6c300ad4280808080e00084100122172900002109200241c0046a41086a2215201741086a290000370300200220093703c0042017102f201c20022903c004370000201c41086a2015290300370000200241d0046a41086a2001290300370300200241d0046a41106a201c290300370300200241d0046a41186a2006290300370300200220022903e8033703d004200241c0006a200241d0046a41201095012002280244210120022802402117201f41086a20024198036a41086a280200360200201f200229039803370200201e20022903a803370100201e41086a200241a8036a41086a290300370100201e41106a2040290300370100201e41186a2041290300370100427f212b2002427f3703d0022002427f3703c802200241083602e40241002136200241003602ec0220022001410020171b22433602e802427f21240c020b202c4102460d02024020340d00410021340c030b2035102f0c020b201e20022903c803370200201e41086a200b290300370200201e41106a200c290300370200201e41186a20142903003702002002203a3703c8022002203e3602f002200220363602ec022002203d3602e8022002203c3602e402200220393602e002200220383602dc02200220373602d8022002203b3703d002203d2143203a212b203b2124203c21420b024020114201520d00200220103703c8022002200f3703d0022010212b200f21240b0240200a450d00201e200229038802370000201e41186a2004290300370000201e41106a2005290300370000201e41086a20072903003700000b02402003450d0020064200370300201c4200370300201d4200370300200242003703e803418de6c300ad4280808080e00084100122012900002109201d200141086a290000370300200220093703e8032001102f419ce6c300ad4280808080e00084100122012900002109200241c0046a41086a2204200141086a290000370300200220093703c0042001102f201c20022903c004370000201c41086a2004290300370000200241d0046a41086a201d290300370300200241d0046a41106a201c290300370300200241d0046a41186a2006290300370300200220022903e8033703d004200241386a200241d0046a412010950141012136200241013602ec022002200228023c410020022802381b3602f0020b200ea7210102400240200e422088a722050d00200121040c010b2005210620012104034020042802ec0321042006417f6a22060d000b0340200120012f01064102746a41ec036a28020021012005417f6a22050d000b0b20012f01062105200220033602880420022005360284042002410036028004200220013602fc03200241003602f803200242003703f003200220043602ec03200241003602e80302402003450d0020022003417f6a221636028804410021150240024020042f0106450d004100210620042101410021050c010b4100210641002105034002400240024020044190bdc600460d00200428020022010d012005ad2109410021010c020b41edb3ca00412841f8b4ca001039000b200641016a210620043301044220862005ad8421090b2004102f2009a72105200121042009422088a7221520012f01064f0d000b0b200241d0046a41186a2203200120154105746a220441206a290000370300200241d0046a41106a2217200441186a290000370300200241d0046a41086a220a200441106a2900003703002002200441086a2900003703d004201541016a210720012015410c6c6a220441f0026a280200210d200441ec026a2802002144200441e8026a280200211502402006450d00200120074102746a41ec036a2802002101410021072006417f6a2204450d00034020012802ec0321012004417f6a22040d000b0b20142003290300370300200c2017290300370300200b200a290300370300200220022903d0043703c803200220073602f403200220053602f003200220013602ec03200241003602e80320022802e002224541696aad42208620022802d802220441176aad84210e2045ad4220862004ad8421110240024003402041201429030022093703002040200c2903002212370300203f200b2903002213370300200220022903c80322263703a80320142009370300200c2012370300200b2013370300200220263703c803204541164d0d0120191003220441086a2900002109200441106a2900002112200429000021132003200441186a29000037030020172012370300200a2009370300200220133703d0042004102f200241c0046a2011200e4101201810101073024020022802c0042204450d00204220022802c8046b214220022802c404450d002004102f0b024002402015450d0020191003220441086a2900002109200441106a2900002112200429000021132003200441186a29000037030020172012370300200a2009370300200220133703d0042004102f2011200e41012018200dad4220862015ad84100f2042200d6a21422044450d012015102f0c010b20191003220441086a2900002109200441106a2900002112200429000021132003200441186a29000037030020172012370300200a2009370300200220133703d0042004102f2011200e4101201810110b2016450d0220022016417f6a2216360288044100210602400240200720012f01064f0d00200121040c010b41002106034002400240024020014190bdc600460d00200128020022040d012005ad2109410021040c020b41edb3ca00412841f8b4ca001039000b200641016a210620013301044220862005ad8421090b2001102f2009a72105200421012009422088a7220720042f01064f0d000b0b2003200420074105746a220141206a2900003703002017200141186a290000370300200a200141106a2900003703002002200141086a2900003703d004200741016a214620042007410c6c6a220141f0026a280200210d200141ec026a2802002144200141e8026a28020021150240024020060d0020042101204621070c010b200420464102746a41ec036a2802002101410021072006417f6a2204450d00034020012802ec0321012004417f6a22040d000b0b20142003290300370300200c2017290300370300200b200a290300370300200220022903d0043703c803200220073602f403200220053602f003200220013602ec03200241003602e8030c000b0b41172045104b000b200220423602e4020b200241e8036a109002200241d0046a41186a2201200241a8026a41186a290300370300200241d0046a41106a2204200241a8026a41106a290300370300200241d0046a41086a2205200241a8026a41086a290300370300200220022903a8023703d00402400240202c4102460d00201b20022903d004370200201b41086a2005290300370200201b41106a2004290300370200201b41186a20012903003702002002202e3703e80320022030360290042002202c36028c0420022031360288042002203236028404200220343602fc03200220353602f8032002202f3602b4042002202d3703f0032002203336028004410121010240203320022802e002470d000240024020022802d80222042035460d0020352004203310ea060d0220322042470d020c010b20322042470d010b201b201e412010ea060d00202e202b85202d202485844200520d0020312043470d000240202c2036470d0041002101202c4101470d01203020022802f002460d010b410121010b02402034450d002035102f0b20014102460d002001450d010b201d200241c8026a41d00010e8061a200241003a00e803200241e8016a200241e8036a10eb010c020b20022802dc02450d0120022802d802102f0c010b200ea7210102400240200e422088a722050d00200121040c010b2005210620012104034020042802ec0321042006417f6a22060d000b0340200120012f01064102746a41ec036a28020021012005417f6a22050d000b0b20022003360288042002410036028004200241003602f803200242003703f003200220043602ec03200241003602e803200220013602fc03200220012f010636028404200241e8036a1090020b20022802a0012201450d0220022001417f6a3602a0012002280288012105200228028001210602400240200228028c01220720022802840122042f01064f0d00200421010c010b034002400240024020044190bdc600460d00200428020022010d012005ad2109410021010c020b41edb3ca00412841f8b4ca001039000b200641016a210620043301044220862005ad8421090b2004102f2009a72105200121042009422088a7220720012f01064f0d000b0b200241d0046a41186a220a200120074105746a220441206a290000370300200241d0046a41106a2215200441186a290000370300200241d0046a41086a2216200441106a2900003703002002200441086a2900003703d0042001200741e0006c6a220441a4036a2d0000210d200441a0036a280200210320044198036a290300210e20044190036a290300210f20044188036a290300211020044180036a2903002111200441f8026a2903002112200441f0026a2903002113200441e8026a2903002109200241e8036a41186a2242200441bd036a290000370300201c200441b5036a290000370300201d200441ad036a2900003703002002200441a5036a2900003703e803200741016a2107200441c5036a2d0000211702402006450d00200120074102746a41880b6a2802002101410021072006417f6a2204450d00034020012802880b21012004417f6a22040d000b0b2022200a290300370300201f201529030037030020232016290300370300200b201d290300370300200c201c29030037030020142042290300370300200220022903d0043703c802200220022903e8033703c8032002200736028c0120022005360288012002200136028401200241003602800120094202520d000c020b0b42002120420021210b20024180016a108a02024002402021500d00200241e8036a41186a22034200370300200241e8036a41106a22044200370300200241e8036a41086a22014200370300200242003703e80341e7a2ca00ad4280808080800184220910012206290000210e200241c8026a41086a2205200641086a2900003703002002200e3703c8022006102f20012005290300370300200220022903c8023703e80341ecb5c600ad4280808080d00184220e100122072900002111200241c0046a41086a2206200741086a290000370300200220113703c0042007102f200420022903c0042211370300200241d0046a41086a22172001290300370300200241d0046a41106a220a2011370300200241d0046a41186a220b2006290300370300200220022903e8033703d004200241206a200241d0046a4120109c01200241206a41106a29030021112002290328211920022802202107200342003703002004420037030020014200370300200242003703e80320091001220329000021092005200341086a290000370300200220093703c8022003102f20012005290300370300200220022903c8023703e803200e1001220529000021092006200541086a290000370300200220093703c0042005102f200420022903c004220937030020172001290300370300200a2009370300200b2006290300370300200220022903e8033703d004200242002011420020071b220920207d2019420020071b220e200854ad7d2211200e20087d2219200e56201120095620112009511b22011b3703f00320024200201920011b3703e803200241e8036a2101200241d0046a21040c010b02402008202084500d0041ac86c700413341f8b4ca001039000b200241e8036a41186a22034200370300200241e8036a41106a22044200370300200241e8036a41086a22014200370300200242003703e80341e7a2ca00ad4280808080800184220910012206290000210e200241c8026a41086a2205200641086a2900003703002002200e3703c8022006102f20012005290300370300200220022903c8023703e80341ecb5c600ad4280808080d00184220e100122072900002111200241c0046a41086a2206200741086a290000370300200220113703c0042007102f200420022903c0042211370300200241d0046a41086a22172001290300370300200241d0046a41106a220a2011370300200241d0046a41186a220b2006290300370300200220022903e8033703d004200241086a200241d0046a4120109c01200241086a41106a29030021112002290310211920022802082107200342003703002004420037030020014200370300200242003703e80320091001220329000021092005200341086a290000370300200220093703c8022003102f20012005290300370300200220022903c8023703e803200e1001220529000021092006200541086a290000370300200220093703c0042005102f200420022903c004220937030020172001290300370300200a2009370300200b2006290300370300200220022903e8033703d00420022011420020071b3703f00320022019420020071b3703e803200241e8036a2101200241d0046a21040b2004ad42808080808004842001ad42808080808002841004200241f0046a24000bc50b04067f017e047f037e23004180026b22072400200741186a200242002003200410ed06200741f0006a41186a22084200370300200741f0006a41106a22094200370300200741f0006a41086a220a42003703002007420037037041aa97ca00ad428080808080018422031001220b2900002104200741f0016a41086a220c200b41086a290000370300200720043703f001200b102f200a200c290300370300200720072903f00137037041b297ca00ad428080808080018422041001220b290000210d200c200b41086a2900003703002007200d3703f001200b102f200920072903f001220d370300200741c0006a41086a220e200a290300370300200741c0006a41106a220f200d370300200741c0006a41186a2210200c29030037030020072007290370370340200741286a200741c0006a10e3012007290330210d200728022821112008420037030020094200370300200a42003703002007420037037020031001220b2900002103200c200b41086a290000370300200720033703f001200b102f200a200c290300370300200720072903f00137037020041001220b2900002103200c200b41086a290000370300200720033703f001200b102f200920072903f0012203370300200e200a290300370300200f20033703002010200c290300370300200720072903703703402007200120027d200d420020111b7c370370200741c0006aad22034280808080800484200741f0006aad2204428080808080018410042007200729031822023703f0012007200741186a41086a29030022013703f80102400240024020022001844200510d002007200036023c200741c0006a2000200741f0016a2007413c6a108f020240024020072903404201510d00200741e8006a2903002102200741e0006a290300210120072903484201520d01200741c0006a41106a290300210d200741a8016a200741c0006a41186a290300370300200741a0016a200d370300200741f0006a41086a41003a0000200741f9006a200029000037000020074181016a200041086a29000037000020074189016a200041106a29000037000020074191016a200041186a290000370000200741033a007041c8e1ca004100200741f0006a108c010c010b200741d0006a2903002102200729034821010b2005200154220c200620025420062002511b0d01200620027d200cad7d2106200520017d21050b20052006109a010c010b200741f0006a41186a22004200370300200741f0006a41106a22094200370300200741f0006a41086a220a42003703002007420037037041e7a2ca00ad4280808080800184220d1001220b2900002112200741f0016a41086a220c200b41086a290000370300200720123703f001200b102f200a200c290300370300200720072903f00137037041ecb5c600ad4280808080d0018422121001220b2900002113200c200b41086a290000370300200720133703f001200b102f200920072903f0012213370300200741c0006a41086a2208200a290300370300200741c0006a41106a220e2013370300200741c0006a41186a220f200c290300370300200720072903703703402007200741c0006a4120109c01200741106a2903002113200729030821142007280200210b2000420037030020094200370300200a420037030020074200370370200d10012200290000210d200c200041086a2900003703002007200d3703f0012000102f200a200c290300370300200720072903f001370370201210012200290000210d200c200041086a2900003703002007200d3703f0012000102f200920072903f001220d3703002008200a290300370300200e200d370300200f200c290300370300200720072903703703402007427f20134200200b1b220d200220067d2001200554ad7d7c20144200200b1b2206200120057d7c2205200654220cad7c2206200c2006200d542006200d511b220c1b3703782007427f2005200c1b370370200342808080808004842004428080808080028410040b20074180026a24000bc72b040e7f017e057f067e230041a0046b22072400200741a0036a200110e801410221080240024020072d00a00322094102470d00410121094102210a0c010b200741f0026a41086a200741a9036a290000370300200741f0026a41106a200741b1036a290000370300200741f0026a41186a200741b9036a290000370300200741f0026a41206a200741c1036a29000037030020074197036a220b200741c8036a280000360000200741c8026a41086a220a200741d8036a290300370300200741c8026a41106a220c200741e0036a290300370300200741c8026a41186a220d200741e8036a290300370300200741c8026a41206a220e200741f0036a290300370300200720072900a1033703f0022007200741d0036a2903003703c802024020090d00200741cc036a2802002108200741a0026a41206a200b280000360200200741a0026a41186a2007418f036a290000370300200741a0026a41106a20074187036a290000370300200741a0026a41086a200741ff026a290000370300200741f8016a41086a200a290300370300200741f8016a41106a200c290300370300200741f8016a41186a200d290300370300200741f8016a41206a200e290300370300200720072900f7023703a002200720072903c8023703f8010b4102210a4101210920084102460d00200741c6036a200741a0026a41206a280200360100200741be036a200741a0026a41186a290300370100200741b6036a200741a0026a41106a290300370100200741ae036a200741a0026a41086a290300370100200741f0026a41086a200741f8016a41086a290300370300200741f0026a41106a200741f8016a41106a290300370300200741f0026a41186a200741f8016a41186a290300370300200741f0026a41206a200741f8016a41206a290300370300200720072903a0023701a603200720072903f8013703f002410021092008210a0b200741c8016a41086a200741a0036a41086a2208290100370300200741c8016a41106a200741a0036a41106a220b290100370300200741c8016a41186a200741a0036a41186a220c290100370300200741c8016a41206a200741a0036a41206a290100370300200741c8016a41286a200741a0036a41286a2f01003b0100200741a0016a41086a220d200741f0026a41086a220e290300370300200741a0016a41106a220f200741f0026a41106a2210290300370300200741a0016a41186a2211200741f0026a41186a2212290300370300200741a0016a41206a2213200741f0026a41206a290300370300200720072901a0033703c801200720072903f0023703a00102400240024002400240024002400240024020090d00200741d0006a41286a221420072903a001370300200741d0006a41206a200741ee016a280100360200200741d0006a41186a200741e6016a290100370300200741d0006a41106a200741de016a290100370300200741d0006a41086a200741d6016a29010037030020074180016a200d29030037030020074188016a200f29030037030020074190016a201129030037030020074198016a2013290300370300200720072901ce013703502007200a360274200c4200370300200b420037030020084200370300200742003703a003418de6c300ad4280808080e000841001220929000021152008200941086a290000370300200720153703a0032009102f419ce6c300ad4280808080e00084100122092900002115200741f8016a41086a220a200941086a290000370300200720153703f8012009102f200b20072903f8012215370300200e2008290300370300201020153703002012200a290300370300200720072903a0033703f002200741c8006a200741f0026a4120109501200728024c410020072802481b210c024020072802744101470d002014280200200c470d0020004183243b0100200041086a4115360200200041046a419bcdc100360200200041026a41053a00000c070b200741a0036a200210e8010240024020072d00a00322084102460d00200741f0026a41086a220d200741aa036a290100370300200741f0026a410e6a220e200741b0036a290100370100200720072901a2033703f002200741bc036a2802002109200741b8036a280200210a20080d012009450d00200a102f0b20004183243b0100200041086a411a360200200041046a41c0cdc100360200200041026a41033a00000c070b20072d00a1032108200741c8016a410e6a220f200e290100370100200741c8016a41086a220e200d290300370300200741d1026a200e290300370000200741d7026a200f290100370000200720083a00c802200720072903f0023700c902200720093600e3022007200a3600df022007200741a0036a41206a2d00003a00e702200641086a280200211120072802742116200728027821172007200628020022123602f80120072012201141057422096a3602fc012007200741d0006a360280020240024002402011450d00200741f8016a41086a210d2012210803402007200841206a220a3602f801200741a0036a200d2008108b0220072802a00322080d02200a2108200941606a22090d000b0b4104210f41002110410021140c010b200741f0026a41086a220a200741a0036a410c6a280200360200200720072902a4033703f0024110102d220f450d02200f2008360200200f20072903f002370204200f410c6a200a280200360200200a200741f8016a41086a280200360200200720072903f80122153703f00202402015a7220920072802f402220d470d0041012110410121140c010b200741a0036a4104722113200d41606a21184101211041012114034020092108024003402007200841206a22093602f002200741a0036a200a2008108b0220072802a003220e0d0120092108200d2009470d000c030b0b200741c8016a41086a201341086a28020022193602002007201329020022153703c801200741a0036a41086a221a2019360200200720153703a003024020142010470d00201041016a22142010490d05201041017422192014201920144b1b221441ffffffff00712014470d05201441047422144100480d050240024020100d002014102d210f0c010b200f201041047420141031210f0b200f450d04201441047621140b200f20104104746a2219200e360200201920072903a0033702042019410c6a201a280200360200201041016a211020182008470d000b0b02400240200741d0006a41186a350200422086200735026084100e2215422088a7220e0d00410121130c010b2015a721130b200741a0036a41186a200341186a290000370300200741a0036a41106a200341106a290000370300200741a0036a41086a200341086a290000370300200720032900003703a003200741003602f802200742013703f0022013200e200741f0026a108c020240024020072802f402220d20072802f802220a6b4120490d00200a41206a210820072802f00221090c010b200a41206a2208200a490d03200d41017422092008200920084b1b22194100480d0302400240200d0d002019102d21090c010b20072802f002200d2019103121090b2009450d02200720193602f402200720093602f0022019210d0b200720083602f8022009200a6a220a20072903a003370000200a41086a200741a0036a41086a290300370000200a41106a200741a0036a41106a290300370000200a41186a200741a0036a41186a2903003700002008ad4220862009ad84100322082900002115200841086a290000211b200841106a290000211c200741c8016a41186a200841186a290000370300200741c8016a41106a201c370300200741c8016a41086a201b370300200720153703c8012008102f0240200d450d002009102f0b0240200e450d002013102f0b0240200741c8016a200741c8026a412010ea060d00200c201720111b210e4101201620111b2111200741d0006a41106a210d4100210902402010450d002010410474210a200f410c6a2108410021090340200828020020096a2109200841106a2108200a41706a220a0d000b0b2007200728026c20096b36026c200110ec01200741a0036a41106a220a2005370300200741d0036a200e360200200741cc036a2011360200200741c8036a200c360200200741c4036a200728026c360200200741a0036a41186a220c200d290300370300200741a0036a41206a200d41086a280200360200200741d4036a2003290000370200200741dc036a200341086a290000370200200741e4036a200341106a290000370200200741ec036a200341186a290000370200200720043703a803200741003a00a0032002200741a0036a10eb01200741a0036a2001108d02200741a0036a41086a2209290300211520072903a003211b200741306a200142004200108e02200741306a41106a290300211d2007290338211c2007290330211e200c4200370300200a420037030020094200370300200742003703a00341e7a2ca00ad4280808080800184221f100122012900002104200741f8016a41086a2208200141086a290000370300200720043703f8012001102f20092008290300370300200720072903f8013703a00341ecb5c600ad4280808080d0018422201001220129000021042008200141086a290000370300200720043703f8012001102f200b20072903f801370000200b41086a22012008290300370000200741f0026a41086a220d2009290300370300200741f0026a41106a220e200a290300370300200741f0026a41186a2211200c290300370300200720072903a0033703f002200741186a200741f0026a4120109c01200741186a41106a2903004200200728021822131b21042007290320420020131b210502400240201e4200520d00200c4200370300200a420037030020094200370300200742003703a003201f10012213290000211f2008201341086a2900003703002007201f3703f8012013102f20092008290300370300200720072903f8013703a003202010012213290000211f2008201341086a2900003703002007201f3703f8012013102f200b20072903f80137000020012008290300370000200d2009290300370300200e200a2903003703002011200c290300370300200720072903a0033703f0022007427f2004201d7c2005201c7c221c2005542208ad7c22052008200520045420052004511b22081b3703a8032007427f201c20081b3703a003200741a0036a21080c010b200c4200370300200a420037030020094200370300200742003703a003201f10012213290000211f2008201341086a2900003703002007201f3703f8012013102f20092008290300370300200720072903f8013703a003202010012213290000211f2008201341086a2900003703002007201f3703f8012013102f200b20072903f80137000020012008290300370000200d2009290300370300200e200a2903003703002011200c290300370300200720072903a0033703f002200742002004201d7d2005201c54ad7d221d2005201c7d221c200556201d200456201d2004511b22081b3703a80320074200201c20081b3703a003200741a0036a21080b200741f0026aad4280808080800484221c2008ad428080808080028410042007201b3703f801200720153703800202400240201b20158450450d0042002105420021150c010b200720023602a001200741f0026a2002200741f8016a200741a0016a108f02024020072903f0024201510d0020074198036a290300211520074190036a290300210520072903f8024201520d01200741f0026a41106a2903002104200741d8036a200741f0026a41186a290300370300200741d0036a2004370300200741a0036a41086a41003a0000200741a9036a2002290000370000200741b1036a200241086a290000370000200741b9036a200241106a290000370000200741c1036a200241186a290000370000200741033a00a00341c8e1ca004100200741a0036a108c010c010b20074180036a290300211520072903f80221050b200741a0036a41186a22014200370300200741a0036a41106a220a4200370300200741a0036a41086a22094200370300200742003703a00341e7a2ca00ad428080808080018422041001220c290000211b200741f8016a41086a2208200c41086a2900003703002007201b3703f801200c102f20092008290300370300200720072903f8013703a00341ecb5c600ad4280808080d00184221b1001220c290000211d2008200c41086a2900003703002007201d3703f801200c102f200b20072903f801370000200b41086a220e2008290300370000200741f0026a41086a22112009290300370300200741f0026a41106a2213200a290300370300200741f0026a41186a22032001290300370300200720072903a0033703f0022007200741f0026a4120109c01200741106a290300211d2007290308211f2007280200210c20014200370300200a420037030020094200370300200742003703a00320041001220d29000021042008200d41086a290000370300200720043703f801200d102f20092008290300370300200720072903f8013703a003201b1001220d29000021042008200d41086a290000370300200720043703f801200d102f200b20072903f801370000200e2008290300370000201120092903003703002013200a29030037030020032001290300370300200720072903a0033703f0022007427f201d4200200c1b220420157c201f4200200c1b221520057c221b2015542208ad7c22052008200520045420052004511b22081b3703a8032007427f201b20081b3703a003201c200741a0036aad42808080808002841004200041043a000002402010450d0020104104742108200f41046a210003400240200041046a280200450d002000280200102f0b200041106a2100200841706a22080d000b0b02402014450d00200f102f0b200641046a280200450d092012102f0c090b200f20104104746a210c024020100d00200f21080c050b200741a0036aad4280808080800484211c200f210803400240200828020022090d00200841106a21080c060b2007280268220b41164d0d04200841046a280200210a20072802602101200841086a280200210d2008410c6a35020021042009ad4280808080800484100322092900002105200941086a2900002115200941106a290000211b200741a0036a41186a200941186a290000370300200741a0036a41106a201b370300200741a0036a41086a2015370300200720053703a0032009102f200bad4220862001ad84200b41696aad422086200141176aad844101201c2004422086200aad84100f0240200d450d00200a102f0b200841106a2208200c470d000c060b0b20004183243b0100200041086a4115360200200041046a41dacdc100360200200041026a41023a00000c060b1036000b1038000b4117200b104b000b200c2008460d000340200841106a21090240200841086a280200450d00200841046a280200102f0b20092108200c2009470d000b0b02402014450d00200f102f0b20004183243b0100200041086a4110360200200041046a41b0cdc100360200200041026a41043a00000b200741e4006a280200450d002007280260102f0b200641046a280200450d002006280200102f0b200741a0046a24000bd20403067f017e037f230041306b22012400024020002802202202450d00034020002002417f6a360220200028020821032000280200210402400240200028020c2205200028020422062f01064f0d00200621020c010b034002400240024020064190bdc600460d00200628020022020d012003ad2107410021020c020b41edb3ca00412841f8b4ca001039000b200441016a210420063301044220862003ad8421070b2006102f2007a72103200221062007422088a7220520022f01064f0d000b0b200541016a21082002200541e0006c6a220941a0036a280200210a2009419c036a280200210520094198036a2802002106200941e8026a290300210702402004450d00200220084102746a41880b6a2802002102410021082004417f6a2204450d00034020022802880b21022004417f6a22040d000b0b2000200836020c20002003360208200020023602042000410036020020074202510d010240024020050d00200621020c010b2005210320062102034020022802ec0321022003417f6a22030d000b0340200620062f01064102746a41ec036a28020021062005417f6a22050d000b0b2001200a3602282001410036022020014100360218200142003703102001200236020c200141003602082001200636021c200120062f0106360224200141086a109002200028022022020d000b0b02400240200028020422064190bdc600460d00200628020021022006102f2002450d00034020024190bdc600460d02200228020021062002102f2006210220060d000b0b200141306a24000f0b41edb3ca00412841f8b4ca001039000bad0302047f047e230041d0006b22032400024002402001280200220441186a280200220541164d0d00200428021021062002ad42808080808004842207100322042900002108200441086a2900002109200441106a290000210a200341106a41186a200441186a290000370300200341106a41106a200a370300200341106a41086a2009370300200320083703102004102f20032005ad4220862006ad84200541696aad422086200641176aad844101200341106aad428080808080048410101073024002402003280200450d0020012802002204280218220541164d0d032004280210210620071003220441086a2900002108200441106a29000021092004290000210a200341306a41186a200441186a290000370300200341306a41106a2009370300200341306a41086a20083703002003200a3703302004102f2005ad4220862006ad84200541696aad422086200641176aad844101200341306aad4280808080800484101120002002360200200020032903003702042000410c6a200341086a2802003602000c010b200041003602000b200341d0006a24000f0b41172005104b000b41172005104b000ba40301057f230041106b22032400024002400240200141046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b2003410036020820032004360204200320053602002001200310690240024020032802042206200328020822056b2001490d00200328020021040c010b200520016a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d002007102d21040c010b200328020020062007103121040b2004450d022003200736020420032004360200200721060b200420056a2000200110e8061a02400240200241046a2802002207200241086a28020022006b200520016a2201490d00200228020021050c010b200020016a22052000490d03200741017422002005200020054b1b22004100480d030240024020070d002000102d21050c010b200228020020072000103121050b2005450d0220022005360200200241046a2000360200200241086a28020021000b200241086a200020016a360200200520006a2004200110e8061a02402006450d002004102f0b200341106a24000f0b103d000b1036000b1038000bfd0403027f037e027f230041e0016b22022400418de6c300ad4280808080e00084100122032900002104200241086a200341086a290000370300200220043703002003102f41f0e8c600ad4280808080f0008410012203290000210420024198016a41086a200341086a29000037030020022004370398012003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241c8006a41186a2207200141186a290000370300200241c8006a41106a22082006370300200241c8006a41086a2005370300200220043703482001102f2003102f41c000102d2203450d0020032002290300370000200320022903980137001020032002290348370020200341086a200241086a290300370000200341186a20024198016a41086a290300370000200341286a200241c8006a41086a2201290300370000200341306a2008290300370000200341386a2007290300370000200241c8006a200310f6022002290348210420024198016a200141c80010e8061a0240024020044201510d002002410041c50010e7061a0c010b200220024198016a41c80010e8061a0b2003102f200041386a200241386a290300370300200041306a200241306a290300370300200041286a200241286a290300370300200041206a200241206a290300370300200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a29030037030020002002290300370300200241e0016a24000f0b1036000bdb130a027f017e017f027e027f067e037f037e027f067e230041e0046b22042400418de6c300ad4280808080e00084100122052900002106200441a8016a41086a200541086a290000370300200420063703a8012005102f41f0e8c600ad4280808080f00084100122052900002106200441206a41086a200541086a290000370300200420063703202005102f0240024002404120102d2205450d0020052001290000370000200541186a200141186a290000370000200541106a200141106a290000370000200541086a200141086a2900003700002005ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441e0036a41186a220a200741186a290000370300200441e0036a41106a220b2009370300200441e0036a41086a2008370300200420063703e0032007102f2005102f41c000102d2205450d00200520042903a80137000020052004290320370010200520042903e003370020200541086a200441a8016a41086a290300370000200541186a200441206a41086a290300370000200541286a200441e0036a41086a290300370000200541306a200b290300370000200541386a200a290300370000200441206a200510f6022004290320210c4200210920044200370320200441e8006a280200210a20042d006c210b02400240200c4201510d00200441f0006a41306a4200370300200441f0006a41286a4200370300200441f0006a41206a420037030020044188016a420037030020044180016a4200370300200441f0006a41086a4200370300200442003703704200210d42002108420021064200210e0c010b200441206a41386a290300210f200441206a41306a2903002110200441206a41206a290300210d200441206a41186a2903002109200441206a41c0006a290300210e2004290330210620042903282108200441f0006a41206a200441206a41286a290300370300200441f0006a41286a2010370300200441f0006a41306a200f37030020044180016a20093703002004200d3703880120042008370370200420063703780b427f2006200d7c200820097c22102008542207ad7c220f2007200f200654200f2006511b22071b210f427f201020071b21100240200920027c221142ffffe883b1de1656200d20037c2011200954ad7c22094200522009501b0d002010200f84500d020b2004200237037020042003370378200441a8016a41186a200441f0006a41186a2903002209370300200441a8016a41206a2212200441f0006a41206a290300370300200441a8016a41286a2213200441f0006a41286a290300370300200441a8016a41306a2214200441f0006a41306a290300370300200420033703b001200420023703a8012004200429038001220d3703b8012008200256200620035620062003511b2107200320067d2002200854ad7d2111200620037d2008200254ad7d2115200220087d2116200820027d21172010200f8450211802400240427f2002200d7c220620062002542219200320097c2019ad7c220620035420062003511b22191b2208428080e983b1de16544100427f200620191b2206501b0d00200441b8016a2903002108201429030021092013290300211a2012290300211b20042903b001211c20042903a801211d4201211e20042903c001211f0c010b4200211e02402008200684500d0020082006109a0120044198046a200637030020044190046a2008370300200441e0036a41086a41013a0000200441e9036a2001290000370000200441f1036a200141086a290000370000200441f9036a200141106a29000037000020044181046a200141186a290000370000200441033a00e00341c8e1ca004100200441e0036a108c010b0b2015201120071b210d2017201620071b210f2007ad21102018ad2106200441c8006a201b370300200441d0006a201a370300200441306a201c370300200441d8006a2009370300200441386a20083703002004201f3703402004200e3703602004201d370328410021072004200b4100200c42015122181b3a006c2004200a410020181b3602682004201e420151220aad3703200240200a0d002005ad428080808080088410050c030b200441c0003602e403200420053602e003200441286a200441e0036a109003410121070c020b1036000b420221060b2005102f0240024020064202520d004200210642002108420021090c010b024002400240200c4201510d00200741ff0171450d0041032107200441e0026a21050c010b200c4201520d01200741ff01710d0141042107200441e0016a21050b200541046a20073a0000200541003a0000200541056a20012900003700002005410d6a200141086a290000370000200541156a200141106a2900003700002005411d6a200141186a29000037000041c8e1ca0041002005108c010b02402006427f7c220c4201560d004200210642002108420021090240200ca70e020002000b20044198046a200337030020044190046a2002370300200441e0036a41086a41003a0000200441e9036a2001290000370000200441f1036a200141086a290000370000200441f9036a200141106a29000037000020044181046a200141186a290000370000200441033a00e00341c8e1ca004100200441e0036a108c010b200441e0036a41186a220b4200370300200441e0036a41106a22074200370300200441e0036a41086a22014200370300200442003703e00341e7a2ca00ad428080808080018422021001220a2900002103200441e0016a41086a2205200a41086a290000370300200420033703e001200a102f20012005290300370300200420042903e0013703e00341ecb5c600ad4280808080d0018422031001220a29000021062005200a41086a290000370300200420063703e001200a102f200720042903e0012206370300200441e0026a41086a22182001290300370300200441e0026a41106a22192006370300200441e0026a41186a22122005290300370300200420042903e0033703e002200441086a200441e0026a4120109c01200441086a41106a2903002106200429031021082004280208210a200b42003703002007420037030020014200370300200442003703e00320021001220b29000021022005200b41086a290000370300200420023703e001200b102f20012005290300370300200420042903e0013703e00320031001220b29000021022005200b41086a290000370300200420023703e001200b102f200720042903e0012202370300201820012903003703002019200237030020122005290300370300200420042903e0033703e002200420064200200a1b3703e803200420084200200a1b3703e003200441e0026aad4280808080800484200441e0036aad4280808080800284100420102106200f2108200d21090b2000200837030820002006370300200041106a2009370300200441e0046a24000bd61208027f017e017f027e027f0b7e067f027e230041a0036b2204240020032802002105418de6c300ad4280808080e00084100122032900002106200441d8006a41086a200341086a290000370300200420063703582003102f41f0e8c600ad4280808080f0008410012203290000210620044190016a41086a200341086a29000037030020042006370390012003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441a0026a41186a220a200741186a290000370300200441a0026a41106a220b2009370300200441a0026a41086a2008370300200420063703a0022007102f2003102f41c000102d2203450d00200320042903583700002003200429039001370010200320042903a002370020200341086a200441d8006a41086a290300370000200341186a20044190016a41086a290300370000200341286a200441a0026a41086a290300370000200341306a200b290300370000200341386a200a29030037000020044190016a200310f602200429039001210c420021092004420037039001200441d8016a280200210a20042d00dc01210b02400240200c4201510d00200441206a41306a4200370300200441206a41286a4200370300200441206a41206a4200370300200441386a4200370300200441306a4200370300200441206a41086a4200370300200442003703204200210d42002108420021064200210e0c010b20044190016a41386a290300210f20044190016a41306a290300211020044190016a41206a290300210d20044190016a41186a290300210920044190016a41c0006a290300210e20042903a00121062004290398012108200441206a41206a20044190016a41286a290300370300200441206a41286a2010370300200441206a41306a200f370300200441306a20093703002004200d37033820042008370320200420063703280b427f2006200d7c200820097c220d2008542207ad7c22092007200920065420092006511b22071b210f427f200d20071b21104200211102400240024002402002290300221242ffffe883b1de1656200241086a290300220d420052200d501b0d0042002113420021144200211542002116420021092010200f84500d010b4200211342002006200d7c200820127c22112008542207ad7c22082007200820065420082006511b22071b21094200201120071b210620074101470d0120064280807c832116200642ff0183211120064280fe03832114420021150b2003102f20002014201184201684370308200041106a2015201384200984370300420121060c010b200441a0026a41186a22174200370300200441a0026a41106a22184200370300200441a0026a41086a22024200370300200442003703a00241e7a2ca00ad4280808080800184221310012219290000211420044190026a41086a2207201941086a29000037030020042014370390022019102f2002200729030037030020042004290390023703a00241ecb5c600ad4280808080d0018422141001221929000021152007201941086a29000037030020042015370390022019102f20182004290390022215370300200441d8006a41086a221a2002290300370300200441d8006a41106a221b2015370300200441d8006a41186a22192007290300370300200420042903a002370358200441086a200441d8006a4120109c01200441086a41106a2903002115200429031021162004280208211c201742003703002018420037030020024200370300200442003703a00220131001221729000021132007201741086a29000037030020042013370390022017102f2002200729030037030020042004290390023703a00220141001221729000021132007201741086a29000037030020042013370390022017102f20182004290390022213370300201a2002290300370300201b201337030020192007290300370300200420042903a002370358200420154200201c1b3703a802200420164200201c1b3703a002200441d8006aad4280808080800484200441a0026aad4280808080800284100420042009370328200420063703202019200441306a220741086a2903002213370300200441d8006a41206a2202200741106a29030037030020044180016a2218200741186a29030037030020044188016a2219200741206a290300370300200420093703602004200637035820042007290300221437036802400240427f200620147c221420142006542207200920137c2007ad7c220620095420062009511b22071b2209428080e983b1de16544100427f200620071b2206501b0d00201b290300210620192903002109201829030021132002290300211420042903602115200429035821164201211d2004290370211e0c010b4200211d02402009200684500d0020092006109a01200441d8026a2006370300200441d0026a2009370300200441a0026a41086a41013a0000200441a9026a2005290000370000200441b1026a200541086a290000370000200441b9026a200541106a290000370000200441c1026a200541186a290000370000200441033a00a00241c8e1ca004100200441a0026a108c010b0b200441b8016a2014370300200441c0016a2013370300200441a0016a2015370300200441c8016a2009370300200441a8016a20063703002004201e3703b0012004200e3703d0012004201637039801410021072004200b4100200c42015122021b3a00dc012004200a410020021b3602d8012004201d4201512202ad370390010240024020020d002003ad42808080808008841005410121070c010b200441c0003602a402200420033602a00220044198016a200441a0026a1090030b2003102f2010200f8450ad2106024002400240200c4201510d0020070d0041032107200441a0026a21030c010b200c4201522007410173720d014104210720044190016a21030b200341046a20073a0000200341003a0000200341056a20012900003700002003410d6a200141086a290000370000200341156a200141106a2900003700002003411d6a200141186a29000037000041c8e1ca0041002003108c010b20002006370308200041286a200d370300200041206a2012370300200041186a2008370300200041106a2011370300420021060b20002006370300200441a0036a24000f0b1036000ba60303057f017e027f024020002802202201450d00034020002001417f6a360220200028020821022000280200210302400240200028020c2204200028020422052f01064f0d00200521010c010b034002400240024020054190bdc600460d00200528020022010d012002ad2106410021010c020b41edb3ca00412841f8b4ca001039000b200341016a210320053301044220862002ad8421060b2005102f2006a72102200121052006422088a7220420012f01064f0d000b0b200441016a210720012004410c6c6a220541ec026a2802002108200541e8026a280200210402402003450d00200120074102746a41ec036a2802002101410021072003417f6a2205450d00034020012802ec0321012005417f6a22050d000b0b2000200736020c20002002360208200020013602042000410036020002402004450d002008450d002004102f0b200028022022010d000b0b02400240200028020422054190bdc600460d00200528020021012005102f2001450d00034020014190bdc600460d02200128020021052001102f2005210120050d000b0b0f0b41edb3ca00412841f8b4ca001039000b9e0703057f0c7e067f230041106b21020240200128020422034104490d0020012802002204280000210520012003417c6a22063602042001200441046a36020020064108490d00200429000421072001200341746a220636020420012004410c6a36020020064108490d00200429000c210820012003416c6a22063602042001200441146a36020020064108490d00200429001421092001200341646a220636020420012004411c6a36020020064108490d00200429001c210a20012003415c6a22063602042001200441246a36020020064108490d002004290024210b2001200341546a220636020420012004412c6a36020020064108490d00200429002c210c20012003414c6a22063602042001200441346a36020020064108490d002004290034210d2001200341446a220636020420012004413c6a36020020064108490d00200429003c210e2001200341bc7f6a22063602042001200441c4006a36020020064108490d002004290044210f2001200341b47f6a22063602042001200441cc006a36020020064108490d00200429004c21102001200341ac7f6a22063602042001200441d4006a36020020064108490d00200429005421112001200341a47f6a22063602042001200441dc006a36020020064108490d00200429005c211220012003419c7f6a22063602042001200441e4006a36020020064104490d00200428006421132001200341987f6a22063602042001200441e8006a36020020064104490d00200428006821142001200341947f6a22063602042001200441ec006a36020020064104490d00200428006c21152001200341907f6a22063602042001200441f0006a36020020064104490d002004280070211620012003418c7f6a22063602042001200441f4006a22043602002006450d0020042d0000210620012003418b7f6a22173602042001200441016a360200200641014b0d00410021180240024020060e020100010b410121180b20174104490d00200428000121062001200341877f6a3602042001200441056a360200200020183a007820002006360274200020163602702000201536026c2000201436026820002013360264200020053602602000201237035820002011370350200020103703482000200f3703402000200e3703382000200d3703302000200c3703282000200b3703202000200a370318200020093703102000200837030820002007370300200041fc006a2002410c6a280000360000200020022800093600790f0b200041023a00780bc31606027f017e017f027e097f017e230041b0016b2203240041aa97ca00ad4280808080800184100122042900002105200341e8006a41086a200441086a290000370300200320053703682004102f41e4f4c100ad4280808080b00184100122042900002105200341c8006a41086a200441086a290000370300200320053703482004102f0240024002400240024002404120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341f8006a41186a2209200641186a290000370300200341f8006a41106a220a2008370300200341f8006a41086a2007370300200320053703782006102f2004102f41c000102d2204450d00200420032903683700002004200329034837001020042003290378370020200441086a200341e8006a41086a290300370000200441186a200341c8006a41086a290300370000200441286a200341f8006a41086a290300370000200441306a200a290300370000200441386a2009290300370000200341c00036029c012003200436029801200341286a2004ad428080808080088410021073024002402003280228220b0d004102210a0c010b200328022c210c2003200341286a41086a2802003602a4012003200b3602a001200341206a200341a0016a10e6010240024020032802200d0020032802242106200341186a200341a0016a10e60120032802180d00200328021c2109200341106a200341a0016a10e60120032802100d0020032802a401220a450d002003280214210d2003200a417f6a3602a401200320032802a001220a41016a3602a001200a2d0000220e41014b0d004100210a02400240200e0e020100010b4101210a0b200341086a200341a0016a10e60120032802080d0020032802a401220f200328020c2210490d002010417f4c0d040240024020100d004101210e0c010b20101033220e450d04200e20032802a0012211201010e8061a2003200f20106b3602a4012003201120106a3602a0010b200e450d002010ad22054220862005842105200341e8006a41026a200341f8006a41026a2d00003a0000200320032f00783b01680c010b20034100360250200342013703482003410b36026c200320034198016a3602682003200341c8006a3602ac012003418c016a41013602002003420137027c200341b885c7003602782003200341e8006a36028801200341ac016a41d8dbc100200341f8006a103c1a200335025042208620033502488410080240200328024c450d002003280248102f0b4102210a0b200c450d00200b102f0b200341f8006a41026a200341e8006a41026a2d00003a0000200320032f01683b017802400240200a4102470d004101210b41848ec2002106411121090c010b200341c8006a41026a200341f8006a41026a2d00003a0000200320032f01783b01484100210b0b2004102f200341c4006a41026a2204200341c8006a41026a2d00003a0000200320032f01483b014402400240200b0d00200341386a220b2005370300200341c3006a20042d00003a00002003200a3a00402003200e3602342003200d3602302003200936022c200320032f01443b004120032006360228200341286a41086a2109200228026020064b0d010c060b2000200636020420004101360200200041086a20093602000c060b41aa97ca00ad4280808080800184100122042900002107200341e8006a41086a200441086a290000370300200320073703682004102f41c0f4c100ad4280808080c00184100122042900002107200341c8006a41086a200441086a290000370300200320073703482004102f4120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100322062900002107200641086a2900002108200641106a2900002112200341f8006a41186a220a200641186a290000370300200341f8006a41106a220d2012370300200341f8006a41086a220c2008370300200320073703782006102f2004102f41c000102d2204450d002005a72110200420032903683700002004200329034837001020042003290378370020200441086a200341e8006a41086a290300370000200441186a200341c8006a41086a290300370000200441286a200c290300370000200441306a200d290300370000200441386a200a290300370000200341f8006a200441c000109302200329027c2105200328027821062004102f02400240024002402006450d00200341f8006a20062005422088a720021094022005a7210220032802784101460d03200341c8006a41186a220d200341f8006a410472220441186a280200360200200341c8006a41106a220c200441106a290200370300200341c8006a41086a220a200441086a2902003703002003200429020037034802402010450d00200e102f0b200341286a41186a200d280200360200200341286a41106a200c290300370300200341286a41086a200a2903003703002003200329034837032841aa97ca00ad4280808080800184100122042900002105200341e8006a41086a200441086a290000370300200320053703682004102f41e4f4c100ad4280808080b00184100122042900002105200a200441086a290000370300200320053703482004102f4120102d2204450d0420042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100322012900002105200141086a2900002107200141106a2900002108200341f8006a41186a220a200141186a290000370300200341f8006a41106a220e2008370300200341f8006a41086a220d2007370300200320053703782001102f2004102f41c000102d2204450d04200420032903683700002004200329034837001020042003290378370020200441086a200341e8006a41086a290300370000200441186a200341c8006a41086a290300370000200441286a200d290300370000200441306a200e290300370000200441386a200a290300370000200341003602800120034201370378200341286a200341f8006a109502200341286a410472200341f8006a1095022009200341f8006a10950220032d0040210e200328027c2003280280012201460d012003280278210a0c020b200041958ec20036020420004101360200200041086a411a3602000c060b200141016a220a2001490d042001410174220d200a200d200a4b1b220d4100480d040240024020010d00200d102d210a0c010b20032802782001200d1031210a0b200a450d022003200d36027c2003200a3602780b2003200141016a36028001200a20016a200e3a00002003280234210c2003413c6a280200220a200341f8006a106902400240200328027c220d200328028001220e6b200a490d00200328027821010c010b200e200a6a2201200e490d04200d41017422102001201020014b1b22104100480d0402400240200d0d002010102d21010c010b2003280278200d2010103121010b2001450d022003201036027c200320013602782010210d0b2001200e6a200c200a10e8061a2004ad4280808080800884200e200a6aad4220862001ad8410040240200d450d002001102f0b2004102f2002450d052006102f0c050b2000200329027c370204200041013602002002450d032006102f0c030b1036000b103d000b1038000b2010450d01200e102f0c010b20002003290328370204200041003602002000411c6a200341c0006a280200360200200041146a200b2903003702002000410c6a20092903003702000b200341b0016a24000b980302057f017e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad8410021073024002400240024020032802102201450d00200328021421022003200341186a280200360224200320013602202003200341206a10e6010240024020032802000d002003280224220420032802042205490d002005417f4c0d040240024020050d00410121060c010b200510332206450d06200620032802202207200510e8061a2003200420056b3602242003200720056a3602200b2006450d0020002005ad2208422086200884370204200020063602000c010b20034100360230200342013703282003410b36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b885c7003602482003200341386a360258200341c4006a41d8dbc100200341c8006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b200041003602000b2002450d012001102f0c010b200041003602000b200341e0006a24000f0b103d000b1036000bf79c0106167f017e047f017e037f027e230041e0046b22042400200441003602b002200420023602ac02200420013602a80202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020024104490d00200441043602b00220012800004180c2cdeb06460d01410121010c030b200441013a0068200441e4036a4101360200200442013702d403200441b4afca003602d0032004412836029402200420044190026a3602e0032004200441e8006a3602900220044180016a200441d0036a103a0c010b0240024002400240024002402002417c714104460d00200241074d0d02200441083602b0020240200128000422054101460d00410221010c080b200441d0036a200441a8026a10cc0420042802d0034101470d014104210641002107410021080c040b200441013a0068200441e4036a4101360200200442013702d403200441b4afca003602d0032004412836029402200420044190026a3602e0032004200441e8006a3602900220044180016a200441d0036a103a0c050b200441d0036a410572210941042106412c210a4100210541002107410021084100210b034020044190026a41026a2201200941026a2d00003a0000200420092f00003b019002200428028004210c20042802fc03210d20042802f803210e20042802f403210f20042802f003211020042802ec03211120042802e803211220042802e403211320042802e003211420042802dc03211520042802d8032116024020042d00d4032217417e6a41ff0171410c4f0d0041002118024002400240024002400240024002400240024002400240024020170e100c0c000102030405060708090a0b0c0c0c0b410121180c0b0b410221180c0a0b410321180c090b410421180c080b410521180c070b410621180c060b410721180c050b410821180c040b410921180c030b410a21180c020b410b21180c010b410c21180b0240200b41ff0171221920184d0d00411321010c040b41002118024002400240024002400240024002400240024002400240024020170e100c0c000102030405060708090a0b0c0c0c0b410121180c0b0b410221180c0a0b410321180c090b410421180c080b410521180c070b410621180c060b410721180c050b410821180c040b410921180c030b410a21180c020b410b21180c010b410c21180b024020192018470d00411421010c040b4100210b02400240024002400240024002400240024002400240024020170e100c0c000102030405060708090a0b0c0c0c0b4101210b0c0b0b4102210b0c0a0b4103210b0c090b4104210b0c080b4105210b0c070b4106210b0c060b4107210b0c050b4108210b0c040b4109210b0c030b410a210b0c020b410b210b0c010b410c210b0b20044180016a41026a221820012d00003a0000200420042f0190023b018001024020072008470d00200741016a22012007490d0920052001200520014b1bad42307e221a422088a70d09201aa722014100480d090240024020070d002001102d21060c010b2006200a41546a2001103121060b2006450d0a200141306e21080b2006200a6a220141546a20173a00002001200c3602002001417c6a200d360200200141786a200e360200200141746a200f360200200141706a20103602002001416c6a2011360200200141686a2012360200200141646a2013360200200141606a20143602002001415c6a2015360200200141586a2016360200200141556a220120042f0180013b0000200141026a20182d00003a0000200541026a2105200a41306a210a200741016a2107200441d0036a200441a8026a10cc0420042802d0034101460d030c000b0b41082002104a000b024002402017410e4b0d00024002400240024002400240024002400240024002400240024020170e0f0001020304050607080e090e0a0b0c000b2015450d0d2016102f0c0d0b02402015450d002016102f0b2012450d0c2013102f0c0c0b02402014450d002014410474210a2016211703400240201741046a280200450d002017280200102f0b201741106a2117200a41706a220a0d000b0b2015450d0b2016102f0c0b0b02402014450d00201441286c210a2016211703400240201741046a280200450d002017280200102f0b0240201741106a280200450d002017410c6a280200102f0b201741286a2117200a41586a220a0d000b0b2015450d0a2016102f0c0a0b2015450d092016102f0c090b2015450d082016102f0c080b2015450d072016102f0c070b02402014450d00201620144104746a211220162114034002402014280208220a450d0020142802002117200a410474210a0340024020172d00004109470d000240201741046a2209280200220528020441ffffffff0371450d002005280200102f200928020021050b2005102f0b201741106a2117200a41706a220a0d000b0b201441106a21170240201441046a280200450d002014280200102f0b2017211420172012470d000b0b2015450d062016102f0c060b02402014450d00201441146c210a2016211703400240201741046a280200450d002017280200102f0b201741146a2117200a416c6a220a0d000b0b2015450d052016102f0c050b02402014450d0020162014411c6c6a2112201621140340024020142802042217450d0002402014410c6a280200220a450d00200a410474210a0340024020172d00004109470d000240201741046a2209280200220528020441ffffffff0371450d002005280200102f200928020021050b2005102f0b201741106a2117200a41706a220a0d000b0b201441086a280200450d002014280204102f0b2014411c6a21170240201441146a280200450d002014280210102f0b2017211420172012470d000b0b2015450d042016102f0c040b02402014450d002016201441186c6a21122016211403400240201441046a280200450d002014280200102f0b0240201441146a280200220a450d00201428020c2117200a410474210a0340024020172d00004109470d000240201741046a2209280200220528020441ffffffff0371450d002005280200102f200928020021050b2005102f0b201741106a2117200a41706a220a0d000b0b201441186a21170240201441106a280200450d00201428020c102f0b2017211420172012470d000b0b2015450d032016102f0c030b02402014450d0020162014411c6c6a2112201621140340024020142802042217450d0002402014410c6a280200220a450d00200a410474210a0340024020172d00004109470d000240201741046a2209280200220528020441ffffffff0371450d002005280200102f200928020021050b2005102f0b201741106a2117200a41706a220a0d000b0b201441086a280200450d002014280204102f0b2014411c6a21170240201441146a280200450d002014280210102f0b2017211420172012470d000b0b2015450d022016102f0c020b02402016450d002015450d002016102f0b02402012450d0002402010450d002010410c6c210a201221170340024020172802002205450d00201741046a280200450d002005102f0b2017410c6a2117200a41746a220a0d000b0b2011450d002012102f0b200e450d010240200c450d00200e200c4104746a2115200e211603402016220941106a2116024020092802042217450d0002402009410c6a280200220a450d00200a410c6c210a0340024020172802002205450d00201741046a280200450d002005102f0b2017410c6a2117200a41746a220a0d000b0b200941086a280200450d002009280204102f0b20162015470d000b0b200d450d01200e102f0c010b02402015450d002016102f0b02402012450d002011450d002012102f0b200e450d00200f102f0b0c010b024020042d00d4030d002006200741306c6a21172006210102400340024020172001470d00410021090c020b20012d0000210b200141306a220a2101200b410c470d000b200a415c6a28020021090b2006200741306c6a210a2006210b02400340410021010240200a200b470d004100210b0c020b200b2d00002117200b41306a2205210b20174104470d000b200441e0006a200541546a10d6032004280264210b0b02402009200b470d004101210541e100210b41f3da0121174100210a0c050b2006200710cd044101210a411a2101024020080d000c050b2006102f0c040b20042802d403220141107621172001410876210b200441d0036a41106a2802002109200441dc036a2802002116200441d0036a41086a28020021050b2006200710cd044101210a02402008450d002006102f0b20092108201621060c020b200428028001210520042802840121062004280288012108410521010b410021174104410010cd044101210a4100210b0b2017411074200b41ff017141087472200141ff01717221170240200a450d002006210b0c110b20042802b0022002470d0f200441d0026a2007360200200441cc026a2008360200200420063602c802200420053602c402200420173602c002200441d0036a200441c0026a10ce04024020042802d0032201450d00024020042802d403450d002001102f0b2006200710cd0441b689ca002101411321022008450d122006102f0c120b2006200741306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002102200141306a220a210120024102470d000b200441d8006a200a41546a10d60320042802582101200428025c21020b2002410020011b2112200141c8e1ca0020011b210e2006200741306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002102200141306a220a210120024108470d000b200441d0006a200a41546a10d60320042802502101200428025421020b2002410020011b2111200141c8e1ca0020011b21162006200741306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002102200141306a220a210120024104470d000b200441c8006a200a41546a10d60320042802482101200428024c21020b2002410020011b2115200141c8e1ca0020011b21142006200741306c6a210a2006210102400340410021020240200a2001470d00410021010c020b20012d0000210b200141306a22092101200b4103470d000b200441c0006a200941546a10d603200428024021012004280244210b0b0240200b410020011b220b450d00200b41286c210b200141c8e1ca0020011b41186a2101410021020340200220012d0000456a2102200141286a2101200b41586a220b0d000b0b024020110d00411e2101200041858cca003602040c0f0b2016201141146c6a21114100210c4100211002400240034041a38cca00210b41382101201641086a280200417c6a220941024b0d012016280200210a02400240024020090e03000401000b41012110200a41fb8bca00460d01200a28000041e3c2b1e306460d010c030b4101210c200a41ff8bca00460d00200a41ff8bca00410610ea060d020b02402016410c6a280200450d0041132101200041a18dca003602040c120b0240201641106a280200220120026b220a20014d0d00412a2101200041b48dca003602040c120b41fb8cca00210b412621012015200a4d0d012014200a4102746a220a450d0141db8cca00210b412021012012200a280200220a4d0d01200e200a4104746a220a450d0141de8dca00210b411f2101200a2802080d01200a2d000d220a41077141044b0d010240200a0e050002020200000b201641146a22162011470d000b200c2010714101710d01411c411e200c41017122021b2101200041fd8dca0041858cca0020021b3602040c100b2000200b3602040c0f0b2006200741306c6a210b2006210102400340200b2001460d0120012d00002102200141306a220a210120024106470d000b200441386a200a41546a10d603200428023c0d030b2006200741306c6a210b200328027021092006210102400340200b2001460d0120012d00002102200141306a220a210120024105470d000b200441306a200a41546a220110d6030240200428023441014d0d0041182101200041e889ca003602040c100b200441286a200110d603200428022c450d0020042802282201450d00200128020020094d0d0041222101200041808aca003602040c0f0b2006200741306c6a210b2006210102400340200b2001460d0120012d00002102200141306a220a210120024107470d000b200441206a200a41546a10d6032004280220220120042802244104746a210b03402001200b460d012001450d012001410c6a2102200141106a210120022d0000410271450d000b413221012000418c8bca003602040c0f0b2006200741306c6a210b2006210102400340200b2001460d0120012d00002102200141306a220a21012002410c470d000b200a415c6a2802002201450d00200a41546a280200220a200141186c6a21090340200a220241186a210a2002280208410374210120022802002102024003402001450d01200141786a210120022d0004210b200241086a2102200b410271450d000b41312101200041db8aca003602040c110b200a2009470d000b0b2006200741306c6a210b2006210102400340200b2001460d0120012d00002102200141306a220a210120024102470d000b200441186a200a41546a10d603200428021c2201450d002004280218220220014104746a211503402002450d01200241106a2116200420022d000d220b3a00d0032002280200220120022802086a2109410021024100200441d0036a200b4104461b210a024003400240024002400240200241ff01710e03000102000b20012009460d01410021022001210b200141016a21010c020b20012009460d03410121022001210b200141016a21010c010b200a450d0241022102200a210b4100210a0b200b2d0000410271450d000b41392101200041a28aca003602040c110b2016210220162015470d000b0b2006200741306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002102200141306a220a210120024102470d000b200441106a200a41546a10d60320042802102101200428021421020b2002410020011b210e200141c8e1ca0020011b21112006200741306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002102200141306a220a210120024103470d000b200441086a200a41546a10d60320042802082101200428020c210b0b200141c8e1ca0020011b2202200b410020011b41286c6a210a41002114034002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402002200a460d00412d210141d494c600210b20022802084103470d2702402002280200220941d0bcca00460d00200941d0bcca00410310ea060d280b200241286a21154115210941cd93c60021164114210141c094c600210b0240024020022d00180e0401290028010b412f2101418195c600210b20022802144106470d280240200228020c2209419193c600460d002009419193c600410610ea060d290b2014450d02411f2101200041b095c6003602040c290b41362109419793c6002116200e200228021c22014d0d26201120014104746a2212450d2620022802142109200228020c2102024020032d00780d002009410b470d0041382101418894c600210b200241f896ca00460d28410b2109200241f896ca00410b10ea06450d280c0e0b4100211602402009417d6a220141124d0d004100210b0c100b4100210b0240024002400240024002400240024002400240024002400240024020010e13001d1d1d1d041d071b0b0a1d011d1d1d1d1d0c000b4126210141e293c600210b200241d3bcca00460d34200241d3bcca00410310ea06450d3441d3bcca002002410310ea060d1b4101102d220c450d28200c41003a000020122d000c41e000460d010c190b200241a994ca00460d0141a994ca002002410f10ea06450d01200241b894ca00460d0341b894ca002002410f10ea06450d030240200241cf94ca00460d0041cf94ca002002410f10ea060d1b0b4107102d2209450d2720094100360003200941013a0002200941003b000020122d000c41e000460d060c170b20122802084101470d17024020122802002210200c460d0041002102034020024101460d01200c20026a2109201020026a2116200241016a210220162d000020092d0000470d190c000b0b20122d000d4104470d17200c102f201521020c240b4104102d2209450d252009410036000020122d000c41e000470d1420122802084104470d140240201228020022162009460d0041002101034020014104460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d160c000b0b20122d000d4104470d142009102f201521020c230b200241c794ca00460d01200229000042e5f0d1fbb5ac98b6ec00510d010c170b4101102d2209450d23200941003a000020122d000c41e000470d1120122802084101470d11201228020022162009460d1041002101034020014101460d11200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d120c000b0b4107102d2209450d2220094100360003200941013a0002200941003b000020122d000c41e000470d0e20122802084107470d0e201228020022162009460d0d41002101034020014107460d0e200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d0f0c000b0b200241de94ca00460d0141de94ca002002410a10ea06450d010240200241e894ca00460d0041e894ca002002410a10ea060d060b4126210941e293c600211620122d000c41e000470d2c20122802080d2c2015210220122d000d4104460d1f0c2c0b20122802084107470d10201228020022162009460d0a41002101034020014107460d0b200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d110c000b0b4102102d2209450d1f200941003b000020122d000c41e000470d0820122802084102470d080240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d0a0c000b0b20122d000d4104470d082009102f201521020c1d0b0240200241fd94ca00460d004100211641fd94ca002002410d10ea060d120b4126210941e293c600211620122d000c41e000470d2920122802080d292015210220122d000d4104460d1c0c290b02402002418a95ca00460d0041002116418a95ca002002410c10ea060d110b4126210941e293c600211620122d000c41e000470d2820122802080d282015210220122d000d4104460d1b0c280b0240200241a195ca00460d004100211641a195ca002002411510ea060d120b4126210941e293c600211620122d000c41e000470d2720122802080d272015210220122d000d4104460d1a0c270b0240200241b695ca00460d0041b695ca002002410a10ea060d260b4102102d2209450d1b200941003b000020122d000c41e000470d0320122802084102470d030240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d050c000b0b20122d000d4104470d032009102f201521020c190b024020140d004100211b4100211c0c020b024020142802040d00200041cf95c600360204413221010c280b02402014280200221b201441086a280200221c4d0d002000418196c60036020441c90021010c280b201c200328026c4d0d01200041ca96c60036020441c10021010c270b2002411c6a2114201521020c170b200441d0036a41086a2202420037030020044190bdc6003602d40320042003290308221aa7417f201a428080808010541b3602e00320042003290310221aa7417f201a428080808010541b3602d003200441d0036a4104722201410d10cf042001410c10cf042001410710cf042001410f10cf04200441e8006a41106a20042802e003360200200441e8006a41086a2002290300370300200420042903d003370368200441d0036a41106a220b2007360200200441d0036a410c6a2008360200200420063602d803200420053602d403200420173602d00320044180016a200441d0036a10d0044101102d2201450d18200141003a0000200420042f01d00322073b01c002200b41e0083b01002002428180808010370300200420013602d403200441013602d003200420073b01e20320044180016a200441d0036a10d10421174103102d2202450d18200241026a41002d00d2bc4a3a0000200241002f00d0bc4a3b00004103102d2207450d18200741026a41002d00d5bc4a3a0000200741002f00d3bc4a3b0000200441c0026a41026a200441d0036a41026a220a2d000022063a0000200420042f00d00322083b01c00220044194016a280200210b20044180016a41106a2802002101200a20063a0000200420083b01d0030240200b2001470d00200141016a220b2001490d182001410174220a200b200a200b4b1bad42287e221a422088a70d18201aa7220b4100480d180240024020010d00200b102d21010c010b200428028c01200141286c200b103121010b2001450d192004200136028c012004200b41286e36029001200428029401210b0b200428028c01200b41286c6a220141003a00182001200736020c200142838080803037020420012002360200200141106a428380808030370200200141196a20042f01d0033b00002001411b6a200441d2036a2d00003a00002001411c6a2017360200200420042802940141016a36029401200441d0036a20044180016a418c0110e8061a20044190026a200441d0036a10d20420044190026a41106a280200220841306c2101200428029802220a41546a210202400340410021072001450d01200141506a21012002412c6a210b200241306a22172102200b2d00004103470d000b201741086a2802002201450d00200141286c2102201728020041186a2101410021070340200720012d0000456a2107200141286a2101200241586a22020d000b0b200841306c2101200a41546a21022007417f6a210b02400340410021072001450d01200141506a21012002412c6a2117200241306a2206210220172d00004103470d000b200641086a2802002201450d00200141286c2102200628020041186a2101410021070340200720012d0000456a2107200141286a2101200241586a22020d000b0b200841306c2101200a415c6a21020240034041002105024020010d00410021010c020b200141506a2101200241246a2117200241306a2206210220172d00004104470d000b200628020021010b02400240024002402008450d00200120076a2113200a200841306c6a210c200441e8006a41047221194100211d4100211803400240200a2d000041786a220141044b0d0002400240024002400240024020010e050301020600030b200a28020c2201450d05200a2802042217200141186c6a211e201821010340200121180240201722072802144104742202450d00200728020c21010340024020012d0000410b470d00200141046a22172802002206200b490d002017200641016a3602000b200141106a2101200241706a22020d000b0b200442003703e00320044280808080c0003703d803200442043703d0034110102d2201450d2420042802d8032102200420013602d003200441013602d403200120024104746a22014200370200200141056a4200370000200420042802d80341016a3602d80302402007280214220e450d0041002115200e210103400240024002400240201520014f0d00411021080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200728020c221020154104746a2d000022120eac010001020202020202020202020202020303030404050506060707080809090a0a0b0b0c0d0d0e0e0f0f1010111213131414151516161717181819191a1a1b1b1c1c1d1d1e1e1f1f2020212122222323242425252627272828292a2a2b2b2c2d2d2e2e2f2f303031313232333434353536363737383839393a3a3b3b3c3c3d3d3e3e3f3f40404141424243434444454546464747484a4a4a4a49494a4a4a4a4a4a4a4a4a4a4a4a4a4a4b4b4b4b000b411121080c4a0b411221080c490b410a21080c480b410821080c470b410821080c460b410421080c450b410421080c440b410421080c430b410421080c420b410421080c410b410421080c400b410421080c3f0b410521080c3e0b410521080c3d0b410521080c3c0b410521080c3b0b410521080c3a0b411321080c390b411421080c380b410621080c370b410721080c360b410b21080c350b410b21080c340b410b21080c330b410b21080c320b410b21080c310b410b21080c300b410b21080c2f0b410b21080c2e0b410b21080c2d0b410b21080c2c0b410b21080c2b0b410c21080c2a0b410c21080c290b410c21080c280b410c21080c270b410c21080c260b410c21080c250b410021080c240b410021080c230b410121080c220b410221080c210b410321080c200b410321080c1f0b410021080c1e0b410021080c1d0b410021080c1c0b410021080c1b0b410021080c1a0b410021080c190b410121080c180b410221080c170b410321080c160b410321080c150b410021080c140b410021080c130b410021080c120b410021080c110b410d21080c100b410d21080c0f0b410d21080c0e0b410d21080c0d0b410d21080c0c0b410d21080c0b0b410d21080c0a0b410d21080c090b410d21080c080b410d21080c070b410d21080c060b410d21080c050b410d21080c040b410d21080c030b410e21080c020b410e21080c010b410f21080b201541016a21142004280270210520192101024002400240034002400240200128020022062f010622010d00410021010c010b200641086a2116410021170340200120172202460d01200241016a211702404100417f4101201620026a2d0000220920084b1b20092008461b41016a0e03000401000b0b2017417f6a21010b2005450d022005417f6a2105200620014102746a41ec006a21010c000b0b200620024103746a220241186a2101200241146a2802000e04000d0100000b200441e8006a21010b20012802002102024002400240024002400240024002402012417e6a220141084b0d00024020010e09020403000506060708020b200441d0036a201510d304450d0b0c130b20042802d8032201417f6a221720014f0d12201720014b0d1220042802d00320174104746a2217280208220120026a22022001490d12201741086a20023602000c0a0b20042802d8032201417f6a221720014f0d11201720014b0d1120042802d00320174104746a2217280208220120026a22022001490d11201741086a200236020020042802d8032201417f6a221720014f0d11201720014b0d1120042802d003220220174104746a280204211702400240200120042802d403460d00200121060c010b200141016a22062001490d30200141017422082006200820064b1b220641ffffffff00712006470d30200641047422064100480d3020022001410474200610312202450d31200420023602d003200420064104763602d40320042802d80321060b200220064104746a220241003a000c2002201736020420022001360200200220042f00c0023b000d200241086a41003602002002410f6a200441c2026a2d00003a0000200420042802d80341016a3602d8030c090b20042802d8032201417f6a221720014f0d10201720014b0d1020042802d00320174104746a2217280208220120026a22022001490d10201741086a200236020020042802d803220221010240200220042802d403470d00200241016a22012002490d2f200241017422172001201720014b1b220141ffffffff00712001470d2f200141047422014100480d2f0240024020020d002001102d21170c010b20042802d00320024104742001103121170b2017450d30200420173602d003200420014104763602d40320042802d80321010b20042802d00320014104746a220141003a000c2001201436020420012002360200200120042f00c0023b000d200141086a41003602002001410f6a200441c2026a2d00003a0000200420042802d80341016a3602d8030c080b20042802d8032201417f6a221720014f0d0f201720014b0d0f20042802d00320174104746a2217280208220120026a22022001490d0f201741086a200236020020042802d803220221010240200220042802d403470d00200241016a22012002490d2e200241017422172001201720014b1b220141ffffffff00712001470d2e200141047422014100480d2e0240024020020d002001102d21170c010b20042802d00320024104742001103121170b2017450d2f200420173602d003200420014104763602d40320042802d80321010b20042802d00320014104746a220141013a000c2001201436020420012002360200200120042f00c0023b000d200141086a41003602002001410f6a200441c2026a2d00003a0000200420042802d80341016a3602d8030c070b200441d0036a201510d3040d0e20042802d8032202450d0e20042002417f6a22013602d80320042802d003221720014104746a22062d000c4102460d0e2001450d062002417e6a220220014f0d0e201720024104746a22172006280200220220172802002217201720024b1b360200200220014f0d06200441d0036a201510d3040d0e0c060b20042802d8032201417f6a221720014f0d0d201720014b0d0d20042802d00320174104746a2217280208220120026a22022001490d0d201020154104746a41046a2802002106201741086a200236020020042802d8032201417f6a220220014b0d0d200220066b220120024b0d0d200441d0036a201510d3040d0d20042802d803220220014d0d0d20042802d003221720014104746a2d000c0d05200241047420176a41706a2202200120022802002202200220014b1b3602000c050b20042802d8032201417f6a221720014f0d0c201720014b0d0c20042802d00320174104746a2217280208220120026a22022001490d0c201741086a200236020020042802d8032201417f6a220820014b0d0c201020154104746a41046a280200220128020421022001280200211220012802082101200441003a00c0020240200820016b220120084d0d00200441013a00c0020c0d0b4104102d2206450d2b20062001360200024020020d0041012117410121160c040b200820122802006b220520084b0d024102211720024102742110410121164104210141022102034002402017417f6a22092016470d00200941016a22162009490d2c20022016200220164b1b220941ffffffff03712009470d2c200941027422094100480d2c0240024020020d002009102d21060c010b200620012009103121060b2006450d2d200941027621160b200620016a200536020020102001460d04201220016a2105201741016a2117200241026a2102200141046a2101200820052802006b220520084d0d000b200441013a00c0020c0b0b20042802d8032201417f6a221720014f0d0b201720014b0d0b20042802d00320174104746a2217280208220120026a22022001490d0b201741086a2002360200200441d0036a201510d3040d0b20042802d8032201450d0b20042802d00322022d000c0d03200141047420026a41706a41003602000c030b41d8bcca0020152001103b000b41012116200441013a00c0020c080b20042d00c0020d072006450d082017ad4220862016ad84211a410121090240200441d0036a201510d3040d0041002109201a422088a72201450d0020014102742117200621010340024020042802d8032208200128020022024b0d00410121090c020b024020042802d003220520024104746a2d000c0d00200841047420056a41706a2208200220082802002208200820024b1b3602000b200141046a21012017417c6a22170d000b0b0240201aa7450d002006102f0b20090d080b2014200e460d0120072802142101201421150c000b0b20042802dc0320042802e4032201410041202001676b10d40420042903e003211f20042802dc032120024020042802d403450d0020042802d003102f0b024020200d004101211d0c070b02400240024020072802142202201f422088a722084101746a220141ffffffff00712001470d0020014104742217417f4c0d000240024020170d00410821060c010b2017102d2206450d2820174104762101200728021421020b20074100360214200728020c21212007200636020c200741106a2209280200212220092001360200202120024104746a2106202020084103746a210f41022116024020020d0020202110202121010c020b41002101202021104100210820212102034020022d00002105200441d0036a41026a220e200241036a22152d00003a00002004200241016a22142f00003b01d003200241046a2800002112200241086a290000211a200441c0026a41026a221720152d00003a0000200420142f00003b01c0020240200541ac01470d00200241106a21010c040b200441a8026a41026a20172d000022153a0000200420042f01c00222143b01a802201720153a0000200420143b01c0020240024020164102470d0002402010200f470d0041002116200f21100c020b20102902002223422088a7210d2023a7211141012116201041086a21100b20164101470d0020082011470d00024020012009280200470d00200141016a22162001490d29200141017422152016201520164b1b221641ffffffff00712016470d29201641047422164100480d290240024020010d002016102d21010c010b200728020c20014104742016103121010b2001450d2a2007200136020c20092016410476360200200728021421010b200728020c20014104746a220120042f00d0033b00012001412d3a00002001200d360204200141036a200e2d00003a00002007200728021441016a2201360214024020012009280200470d00200141016a22162001490d29200141017422152016201520164b1b221641ffffffff00712016470d29201641047422164100480d290240024020010d002016102d21010c010b200728020c20014104742016103121010b2001450d2a2007200136020c20092016410476360200200728021421010b200728020c20014104746a2201200b3602042001410b3a00002007200728021441016a220136021441022116200821110b200441fc006a41026a221520172d00003a0000200420042f01c0023b017c024020012009280200470d00200141016a22172001490d28200141017422142017201420174b1b221741ffffffff00712017470d28201741047422174100480d280240024020010d002017102d21010c010b200728020c20014104742017103121010b2001450d292007200136020c20092017410476360200200728021421010b200841016a2108200728020c20014104746a220120042f017c3b0001200120053a00002001201a37030820012012360204200141036a20152d00003a00002007200728021441016a2201360214200241106a22022006470d000b200621010c010b103d000b200441c0026a41026a200441d0036a41026a2d00003a0000200420042f01d0033b01c0020b024020062001460d000340200141106a2102024020012d00004109470d000240200141046a2217280200220128020441ffffffff0371450d002001280200102f201728020021010b2001102f0b2002210120062002470d000b0b201fa7210102402022450d002021102f0b2010200f47201620164102461b210202402001450d002020102f0b024020024101470d004101211d0c070b200741186a2117024002402004280278450d0020072802142202450d00200728020c210120024104742102410021070340024020012d0000412c470d002001410b3a0000200141046a2013360200200741016a21070b200141106a2101200241706a22020d000b4101210120070d010b201821010b2017201e470d000b200121180c050b200a2802042201200b490d04200a200141016a3602040c040b200a28020c2201450d03200a28020422172001411c6c6a2106034020172201411c6a2117024020012802182202450d0020012802102101200241027421020340024020012802002207200b490d002001200741016a3602000b200141046a21012002417c6a22020d000b0b20172006460d040c000b0b200a28020c2201450d02200141146c2102200a28020441106a2101034002402001417c6a2802000d0020012802002207200b490d002001200741016a3602000b200141146a21012002416c6a22020d000c030b0b2016450d002006102f0b024020042802d403450d0020042802d003102f0b024020042802e003450d0020042802dc03102f0b4101211d0b200a41306a220a200c470d000b41012109201d4101710d0220184101710d0120042802a0022105200428029802210a0b2004419c026a280200211420042802940221162004280290022115410021090c020b200441d0036a41106a20044190026a41106a280200360200200441d0036a41086a20044190026a41086a29030037030020042004290390023703d003200441c0026a200441d0036a10d0044110102d2202450d1a200241063a00004101102d2201450d1a200141003a00004101102d2217450d1a201720012d00003a00002001102f4110102d2207450d1a200741063a000041f000102d2201450d1a200141063a00602001412c3b01502001200b3602442001410b3a0040200141d8003a0030200120042802783602242001412d3a0020200141003602142001410f3a0010200141003602042001410f3a0000024020072d00004109470d0002402007280204220b28020441ffffffff0371450d00200b280200102f2007280204210b0b200b102f0b2007102f024020022d00004109470d0002402002280204220728020441ffffffff0371450d002007280200102f200228020421070b2007102f0b2002102f200441f4036a4287808080f000370200200441f0036a2001360200200441ec036a4100360200200441d0036a410c6a4281808080800c370200200441d8036a4101360200200441003602fc03200442043702e403200420173602d403200441013602d003200441c0026a200441d0036a10d504200441d0036a200441c0026a418c0110e8061a200441a8026a200441d0036a10d204200441a8026a410c6a2802002114200441b8026a280200210520042802a802211520042802ac02211620042802b002210a410021090c010b2004419c026a2802002114200428029802220a20042802a002220510cd04411a211641be8bca0021152014450d00200a102f0b200441f4006a2802002117200428026c21010240200441f0006a2802002202450d00200221070340200128026c21012007417f6a22070d000b03402002417f6a22020d000b0b02402017450d0041002107034002400240200720012f01064f0d004100210b200121020c010b4100210b034002400240024020014190bdc600460d00200128020022020d0141002107410021020c020b41edb3ca00412841f8b4ca001039000b200b41016a210b20012f010421070b2001102f20022101200720022f01064f0d000b0b200741016a2106200220074103746a41146a280200210802400240200b0d0020022101200621070c010b200220064102746a41ec006a280200210141002107200b417f6a2202450d000340200128026c21012002417f6a22020d000b0b20084103460d012017417f6a22170d000b0b02400240024020014190bdc600460d00200128020021022001102f2002450d00034020024190bdc600460d02200228020021012002102f2001210220010d000b0b0240024020090d00200441c0026a41106a2005360200200441c0026a410c6a20143602002004200a3602c802200420163602c402200420153602c002200441d0036a200441c0026a200328026810d60420042802d0034101470d010240200441d0036a41086a280200450d0020042802d403102f0b200041d88bca0036020420004101360200200041086a41233602000c2d0b2000201536020420004101360200200041086a20163602000c2c0b200441e4036a2802002102200441d0036a41106a2802002114200441d0036a410c6a2802002115200441d8036a280200210b20042802d403210720032802602112200441003602b002200442013703a8024104102d2201450d1a200441043602ac02200420042802b002221741046a3602b002200420013602a802200120176a20073600000240024020042802ac02220720042802b00222016b4104490d0020042802a80221070c010b200141046a22172001490d1a200741017422012017200120174b1b22014100480d1a0240024020070d002001102d21070c010b20042802a80220072001103121070b2007450d1b200420013602ac02200420073602a80220042802b00221010b2004200141046a3602b002200720016a200b3600002015200241306c6a2116024020020d00201521010c020b200441d0036a4101722102200441d0036a41276a210b200441d0036a41206a2117200441d0036a41186a210a200441d0036a41086a2106201521010240034020012d00002107200b200141286a2900003700002017200141216a290000370300200a200141196a290000370300200441d0036a41106a2208200141116a2900003703002006200141096a2900003703002004200141016a2900003703d003024020074110470d00200141306a21010c040b200441c0026a41276a2205200b290000370000200441c0026a41206a22092017290300370300200441c0026a41186a200a290300221a370300200441c0026a41106a20082903002223370300200441c0026a41086a2006290300221f370300200420042903d00322243703c00220022024370000200241086a201f370000200241106a2023370000200241186a201a370000200241206a2009290300370000200241276a2005290000370000200420073a00d00320044180016a200441d0036a200441a8026a10d70420042d0080012207411f470d01200141306a22012016470d000b201621010c020b200428028401210b2004280288012102200141306a2201201620016b41306d10cd0402402014450d002015102f0b024020042802ac02450d0020042802a802102f0b024020074105470d002002450d00200b102f0b200041998eca0036020420004101360200200041086a41253602000c2b0b41edb3ca00412841f8b4ca001039000b2001201620016b41306d10cd0402402014450d002015102f0b20042802a802210120042902ac02211a2000411c6a41003a0000200041146a201a370200200041106a20013602002000410c6a201c360200200041086a201b360200200020123602042000411d6a20042f0090023b0000200041003602002000411f6a20044192026a2d00003a00000c290b2009102f0c210b2009102f0c200b20122d000d22014104460d05200141fb01710d052009102f201521020c130b20122d000d22014104460d00200141fb01710d002009102f201521020c120b2009102f0c1d0b20122d000d22014104460d00200141fb01710d002009102f201521020c100b2009102f0c1b0b2009102f0c1a0b2009102f0c190b200c102f0c1a0b02400240200241f294ca00460d0041f294ca002002410b10ea060d010b4126210941e293c600211620122d000c41e000470d1920122802080d192015210220122d000d4104460d0c0c190b02402002419695ca00460d0041012116419695ca002002410b10ea060d010b4126210941e293c600211620122d000c41e000470d1820122802080d182015210220122d000d4104460d0b0c180b2009411546210b0b0240200941796a2201410c4b0d000240024020010e0d00020202020202020202020201000b0240200241c095ca00460d0041c095ca002002410710ea060d020b4126210941e293c600211620122d000c41e000470d1820122802080d182015210220122d000d4104460d0b0c180b200241c795ca00460d0241c795ca002002411310ea06450d020b200b450d020b0240200241da95ca00460d004100210141da95ca002002411510ea060d030b4126210941e293c600211620122d000c41e000470d1520122802080d152015210220122d000d4104460d080c150b4126210941e293c600211620122d000c41e000470d1420122802080d142015210220122d000d4104460d070c140b41002101200941726a220b41084b0d0002400240024002400240024002400240024002400240200b0e09010b03000a0b0b0b08010b200241ef95ca00460d0141ef95ca002002411110ea06450d01200241ae96ca00460d0641ae96ca002002411110ea06450d060240200241bf96ca00460d0041bf96ca002002411110ea060d0b0b4104102d2209450d122009410036000020122d000c41e000460d080c1b0b02402002418096ca00460d00418096ca002002410e10ea060d0a0b4108102d2209450d112009420037000020122d000c41e000460d020c190b4102102d2209450d10200941003b000020122d000c41e000470d1720122802084102470d170240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d190c000b0b20122d000d4104470d172009102f201521020c0e0b2002418e96ca00460d01418e96ca002002411010ea06450d0102402002419e96ca00460d0041012101419e96ca002002411010ea060d080b4103102d2209450d0f200941003a0002200941003b000020122d000c41e000460d020c150b20122802084108470d160240201228020022162009460d0041002101034020014108460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d180c000b0b20122d000d4104470d162009102f201521020c0c0b4126210941e293c600211620122d000c41e000470d1820122802080d1820122d000d22014104460d1820152102200141fb0171450d0b0c180b20122802084103470d120240201228020022162009460d0041002101034020014103460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d140c000b0b20122d000d4104470d122009102f201521020c0a0b4102102d2209450d0b200941003b000020122d000c41e000470d1020122802084102470d100240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d120c000b0b20122d000d4104470d102009102f201521020c090b0240200241d096ca00460d0041d096ca002002411610ea060d030b4102102d2209450d0a200941003b000020122d000c41e000460d030c0e0b20122802084104470d120240201228020022162009460d0041002101034020014104460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d140c000b0b20122d000d4104470d122009102f201521020c070b200241e696ca00460d0241e696ca002002411210ea06450d020b02402016450d00200241f896ca00460d0341f896ca002002410b10ea06450d030b02402001450d002002418397ca00460d04418397ca002002411010ea06450d040b4126210141e293c600210b20094117470d1302402002419397ca00460d00419397ca002002411710ea060d140b4102102d2216450d07201641003b000020122d000c41e000460d040c0a0b20122802084102470d0a0240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d0c0c000b0b20122d000d4104470d0a2009102f201521020c040b4126210941e293c600211620122d000c41e000470d1020122802080d102015210220122d000d4104460d030c100b4102102d2209450d04200941003b000020122d000c41e000470d0620122802084102470d060240201228020022162009460d0041002101034020014102460d01200920016a2102201620016a210b200141016a2101200b2d000020022d0000470d080c000b0b20122d000d4104470d062009102f201521020c020b4126210941e293c600211620122d000c41e000470d0e20122802080d0e2015210220122d000d4104460d010c0e0b20122802084102470d0502402012280200220c2016460d0041002102034020024102460d01201620026a210b200c20026a2109200241016a210220092d0000200b2d0000470d070c000b0b20122d000d22024104460d05200241fb01710d052016102f201521020c000b0b1038000b1036000b200041c989ca00360204411f21010c0b0b2009102f0c070b2016102f200041e293c6003602040c090b2009102f0c050b2009102f0c040b2009102f0c030b2009102f0c020b2009102f0c010b2009102f0b41262101200041e293c6003602040c020b20092101200020163602040c010b2000200b3602040b20004101360200200041086a200136020002402007450d002006200741306c6a21092006210a0340200a221741306a210a0240024020172d00002201410e4b0d00024002400240024002400240024002400240024002400240024020010e0f0001020304050607080e090e0a0b0c000b201741086a280200450d0d201741046a280200102f0c0d0b0240201741086a280200450d00201741046a280200102f0b201741146a280200450d0c201741106a280200102f0c0c0b02402017410c6a2802002202450d00201741046a28020021012002410474210203400240200141046a280200450d002001280200102f0b200141106a2101200241706a22020d000b0b201741086a280200450d0b2017280204102f0c0b0b02402017410c6a2802002202450d00201741046a2802002101200241286c210203400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101200241586a22020d000b0b201741086a280200450d0a2017280204102f0c0a0b201741086a280200450d09201741046a280200102f0c090b201741086a280200450d08201741046a280200102f0c080b201741086a280200450d07201741046a280200102f0c070b02402017410c6a2802002201450d00201741046a280200220b20014104746a210503400240200b2802082202450d00200b2802002101200241047421020340024020012d00004109470d000240200141046a2200280200220728020441ffffffff0371450d002007280200102f200028020021070b2007102f0b200141106a2101200241706a22020d000b0b200b41106a21010240200b41046a280200450d00200b280200102f0b2001210b20012005470d000b0b201741086a280200450d062017280204102f0c060b02402017410c6a2802002202450d00201741046a2802002101200241146c210203400240200141046a280200450d002001280200102f0b200141146a21012002416c6a22020d000b0b201741086a280200450d052017280204102f0c050b02402017410c6a2802002201450d00201741046a280200220b2001411c6c6a210503400240200b2802042201450d000240200b410c6a2802002202450d00200241047421020340024020012d00004109470d000240200141046a2200280200220728020441ffffffff0371450d002007280200102f200028020021070b2007102f0b200141106a2101200241706a22020d000b0b200b41086a280200450d00200b280204102f0b200b411c6a21010240200b41146a280200450d00200b280210102f0b2001210b20012005470d000b0b201741086a280200450d042017280204102f0c040b02402017410c6a2802002201450d00201741046a280200220b200141186c6a210503400240200b41046a280200450d00200b280200102f0b0240200b41146a2802002202450d00200b28020c2101200241047421020340024020012d00004109470d000240200141046a2200280200220728020441ffffffff0371450d002007280200102f200028020021070b2007102f0b200141106a2101200241706a22020d000b0b200b41186a21010240200b41106a280200450d00200b28020c102f0b2001210b20012005470d000b0b201741086a280200450d032017280204102f0c030b02402017410c6a2802002201450d00201741046a280200220b2001411c6c6a210503400240200b2802042201450d000240200b410c6a2802002202450d00200241047421020340024020012d00004109470d000240200141046a2200280200220728020441ffffffff0371450d002007280200102f200028020021070b2007102f0b200141106a2101200241706a22020d000b0b200b41086a280200450d00200b280204102f0b200b411c6a21010240200b41146a280200450d00200b280210102f0b2001210b20012005470d000b0b201741086a280200450d022017280204102f0c020b0240201741046a2802002201450d00201741086a280200450d002001102f0b0240201741146a2802002201450d0002402017411c6a2802002202450d002002410c6c21020340024020012802002207450d00200141046a280200450d002007102f0b2001410c6a2101200241746a22020d000b0b201741186a280200450d002017280214102f0b201741246a280200220b450d0102402017412c6a2802002201450d00200b20014104746a21050340200b220041106a210b024020002802042201450d0002402000410c6a2802002202450d002002410c6c21020340024020012802002207450d00200141046a280200450d002007102f0b2001410c6a2101200241746a22020d000b0b200041086a280200450d002000280204102f0b200b2005470d000b0b201741286a280200450d012017280224102f0c010b0240201741086a280200450d00201741046a280200102f0b0240201741146a2802002201450d00201741186a280200450d002001102f0b201741246a280200450d00201741206a280200102f0b200a2009470d000b0b2008450d032006102f0c030b200441003a0068200441e4036a4101360200200442013702d403200441b4afca003602d0032004412836029402200420044190026a3602e0032004200441e8006a3602900220044180016a200441d0036a103a2004280280012105200428028401210b2006200710cd04410521172008450d002006102f0b41a089ca00210141162102200b450d00201741ff01714105470d002005102f0b2000200136020420004101360200200041086a20023602000b200441e0046a24000bee0601037f024002400240024002402000280200220241c000490d00200241808001490d012002418080808004490d0202400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128020020022004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41033a00002000280200210302400240200141046a2802002202200428020022006b4104490d00200128020021020c010b200041046a22042000490d05200241017422002004200020044b1b22004100480d050240024020020d002000102d21020c010b200128020020022000103121020b2002450d0420012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000f0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d04200041017422042003200420034b1b22044100480d040240024020000d002004102d21030c010b200128020020002004103121030b2003450d0320012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a20024102743a00000f0b02400240200141046a2802002203200141086a28020022006b4102490d00200128020021030c010b200041026a22042000490d03200341017422002004200020044b1b22004100480d030240024020030d002000102d21030c010b200128020020032000103121030b2003450d0220012003360200200141046a2000360200200141086a28020021000b200141086a200041026a360200200320006a20024102744101723b00000f0b02400240200141046a2802002203200141086a28020022006b4104490d00200128020021030c010b200041046a22042000490d02200341017422002004200020044b1b22004100480d020240024020030d002000102d21030c010b200128020020032000103121030b2003450d0120012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20024102744102723600000f0b1036000b1038000b960f03087f017e017f230041106b2202240020024100360208200242013703000240024002402001280200220341044b0d000240024002400240024020030e050001020304000b4101102d2203450d05200242818080801037020420022003360200200341013a0000200128020421032001410c6a28020022042002106902402004450d002003200441286c6a210503400240024020022802042206200228020822076b4120490d00200228020021040c010b200741206a22042007490d09200641017422082004200820044b1b22084100480d090240024020060d002008102d21040c010b200228020020062008103121040b2004450d082002200836020420022004360200200821060b200420076a220841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002002200741206a220936020820082003290000370000200341206a290300210a0240200620096b41074b0d00200941086a22082009490d092006410174220b2008200b20084b1b22084100480d090240024020060d002008102d21040c010b200420062008103121040b2004450d0820022008360204200220043602000b2002200741286a360208200420096a200a3700002005200341286a2203470d000b0b200141106a28020021060240024020022802042204200228020822036b4104490d00200228020021040c010b200341046a22072003490d07200441017422082007200820074b1b22074100480d070240024020040d002007102d21040c010b200228020020042007103121040b2004450d0620022007360204200220043602000b2002200341046a360208200420036a20063600000c040b4101102d2203450d04200242818080801037020420022003360200200341023a0000200128020421060240024020022802042204200228020822036b4104490d00200228020021040c010b200341046a22072003490d06200441017422082007200820074b1b22074100480d060240024020040d002007102d21040c010b200228020020042007103121040b2004450d0520022007360204200220043602000b2002200341046a360208200420036a200636000020012802082103200141106a28020022042002106902402004450d002003200441286c6a210503400240024020022802042207200228020822086b4120490d00200841206a2104200228020021060c010b200841206a22042008490d08200741017422062004200620044b1b22094100480d080240024020070d002009102d21060c010b200228020020072009103121060b2006450d072002200936020420022006360200200921070b200620086a220841186a200341186a290000370000200841106a200341106a290000370000200841086a200341086a2900003700002002200436020820082003290000370000200341206a290300210a0240200720046b41074b0d00200441086a22082004490d08200741017422092008200920084b1b22084100480d080240024020070d002008102d21060c010b200620072008103121060b2006450d0720022008360204200220063602000b2002200441086a360208200620046a200a3700002005200341286a2203470d000b0b200141146a28020021060240024020022802042204200228020822036b4104490d00200228020021040c010b200341046a22072003490d06200441017422082007200820074b1b22074100480d060240024020040d002007102d21040c010b200228020020042007103121040b2004450d0520022007360204200220043602000b2002200341046a360208200420036a20063600000c030b4101102d2203450d03200242818080801037020420022003360200200341033a0000200141086a290300210a0240024020022802042206200228020822036b4108490d00200341086a2104200228020021060c010b200341086a22042003490d05200641017422072004200720044b1b22074100480d050240024020060d002007102d21060c010b200228020020062007103121060b2006450d0420022007360204200220063602000b20022004360208200620036a200a3700000c020b4101102d2203450d02200242818080801037020420022003360200200341043a0000200128020421060240024020022802042204200228020822036b4104490d00200228020021040c010b200341046a22072003490d04200441017422082007200820074b1b22074100480d040240024020040d002007102d21040c010b200228020020042007103121040b2004450d0320022007360204200220043602000b2002200341046a360208200420036a20063600000c010b4101102d2203450d01200242818080801037020420022003360200200341053a0000200128020421070240024020022802042206200228020822036b4104490d00200341046a2104200228020021060c010b200341046a22042003490d03200641017422082004200820044b1b22084100480d030240024020060d002008102d21060c010b200228020020062008103121060b2006450d0220022008360204200220063602000b20022004360208200620036a20073600000b20002002290300370200200041086a200241086a280200360200200241106a24000f0b1036000b1038000bd01a01197f230041d0116b2202240020002802102203200328020041016a360200200028020c2104200028020821052000280200210620002802042103200241206a41186a22072000412c6a290000370300200241206a41106a2208200041246a290000370300200241206a41086a22092000411c6a29000037030020022000290014370320200241a0026a200141e00010e8061a024002400240024002400240024020032f01062201410b490d000240024020034190bdc600460d00200241b0036a410041e00210e7061a20024198066a410041a00810e7061a41880b102d220a0d010c080b4195b4ca00412d41f8b4ca001039000b200a41003b0106200a4100360200200a41086a200241b0036a41e00210e8062101200a41e8026a20024198066a41a00810e8062107200220032f00c8013b01ac032002200341ca016a2d00003a00ae03200220032900db01370398032002200341e0016a29000037009d03200341cb016a280000210b200341cf016a280000210c200341d3016a280000210d200341d7016a280000210e20024198066a200341a8076a41e00010e8061a2001200341e8016a20032f010641796a220041057410e8062101200720034188086a200041e0006c10e8062107200341063b0106200a20003b0106200220022f01ac033b019403200220022d00ae033a0096032002200229039803370380032002200229009d0337008503200241b0036a20024198066a41e00010e8061a0240024020044107490d00200441057420016a41c07e6a2001200441796a22084105746a2201200041ffff037120086b41057410e9061a200141186a200241206a41186a290300370000200141106a200241206a41106a290300370000200141086a200241206a41086a29030037000020012002290320370000200441e0006c20076a220041c07b6a200041e07a6a220f200a41066a22002f010020086b41e0006c10e9061a200f200241a0026a41e00010e8061a0c010b200341066a2100200341086a20044105746a220141206a200120032f010620046b41057410e9061a200141186a200241206a41186a290300370000200141106a200241206a41106a290300370000200141086a200241206a41086a29030037000020012002290320370000200341e8026a200441e0006c6a220f41e0006a200f20032f010620046b41e0006c10e9061a200f200241a0026a41e00010e8061a0b20024188026a41026a220420022d0096033a0000200020002f010041016a3b0100200220022f0194033b01880220022002290380033703800120022002290085033700850120024190016a200241b0036a41e00010e8061a2002411c6a41026a221020042d00003a0000200220022f0188023b011c2002200229038001370308200220022900850137000d200241206a20024190016a41e00010e8061a0240200328020022070d00410021030c030b20032f0104211120024198066a41027221124100210303402002419c026a41026a221320102d00003a0000200220022f011c3b019c0220022002290308370388022002200229000d37008d02200241a0026a200241206a41e00010e8061a20062003470d02201141ffff0371210802400240024020072f01062203410b490d002012410041b20b10e7061a41b80b102d2201450d0a20014100360200200141046a20024198066a41b40b10e8061a200220072f00c8013b01ac032002200741ca016a2d00003a00ae03200220072900db01370398032002200741e0016a29000037009d03200741cb016a2800002114200741cf016a2800002115200741d3016a2800002116200741d7016a280000211720024198066a200741a8076a41e00010e8061a200141086a200741e8016a20072f0106220041796a220341057410e8062118200141e8026a20074188086a200341e0006c10e8062119200141880b6a200741a40b6a2000417a6a220941027410e806211a200741063b0106200120033b010602402009450d0041002103201a210003402000280200220420033b010420042001360200200041046a21002009200341016a2203470d000b0b200241b0036a20024198066a41e00010e8061a200220022d00ae0322033a009603200220022f01ac0322003b0194032002200229009d033700850320022002290398033703800320024194066a41026a220920033a0000200220003b01940620022002290380033703800120022002290085033700850120024198066a200241b0036a41e00010e8061a201141ffff037122004107490d0120182008417a6a22044105746a2018200841796a22034105746a220020012f010620036b41057410e9061a200041186a200229008d023700002000200e36000f2000200d36000b2000200c3600072000200b360003200041026a20132d00003a0000200020022f019c023b00002000200229038802370013200841e0006c20196a220041c07b6a200041e07a6a220020012f010620036b41e0006c10e9061a2000200241a0026a41e00010e8061a200120012f010641016a22003b01062008410274220b201a6a416c6a201a20044102746a2211200041ffff0371220820046b41027410e9061a2011200a36020020082004490d022001200b6a41f00a6a2100034020002802002204200341016a22033b010420042001360200200041046a210020032008490d000c030b0b200741086a2200200841016a22044105746a200020084105746a2200200320086b220141057410e9061a2000200e36000f2000200d36000b2000200c3600072000200b360003200041026a2002419c026a41026a2d00003a0000200020022f019c023b00002000200229038802370013200041186a200229008d023700002007200841e0006c6a220041c8036a200041e8026a2200200141e0006c10e9061a2000200241a0026a41e00010e8061a2007200341016a22033b01062008410274200741880b6a22006a41086a200020044102746a2200200341ffff037120046b41027410e9061a2000200a360200201141ffff037120072f010622034f0d06200a20043b0104200a2007360200200420034f0d062003417f6a210120072004417f6a22034102746a41900b6a2100034020002802002204200341026a3b010420042007360200200041046a21002001200341016a2203470d000c070b0b200741086a2203200841016a22044105746a200320084105746a220320072f0106221120086b221a41057410e9061a2003200e36000f2003200d36000b2003200c3600072003200b360003200341026a20132d00003a0000200320022f019c023b00002003200229038802370013200341186a200229008d02370000200741e8026a200841e0006c6a220341e0006a2003201a41e0006c10e9061a2003200241a0026a41e00010e8061a2007201141016a22033b01062008410274221a200741880b6a22116a41086a201120044102746a2211200341ffff037120046b41027410e9061a2011200a360200200020072f010622044f0d002007201a6a418c0b6a2103034020032802002200200841016a22083b010420002007360200200341046a210320042008470d000b0b200641016a210320024184026a41026a220020092d00003a0000200220022f0194063b01840220022002290380013703f00120022002290085013700f50120024190016a20024198066a41e00010e8061a201020002d00003a0000200220022f0184023b011c200220022903f001370308200220022900f50137000d200241206a20024190016a41e00010e8061a0240200728020022000d002014210b2017210e2016210d2015210c2001210a0c040b20072f010421112014210b2017210e2016210d2015210c200021072001210a200321060c000b0b200320044105746a220041286a200041086a2206200120046b41057410e9061a200041206a2007290300370000200041186a2008290300370000200041106a2009290300370000200620022903203700002003200441e0006c6a220041c8036a200041e8026a220f20032f010620046b41e0006c10e9061a200f200241a0026a41e00010e8061a200320032f010641016a3b01060c020b41c2b4ca00413541f8b4ca001039000b20024198066a410272410041b20b10e7061a41b80b102d2200450d0320004100360200200041046a20024198066a41b40b10e8061a2000200528020022043602880b2005200036020020052005280204220141016a360204200441003b010420042000360200200241a0026a41026a2002411c6a41026a2d00003a0000200220022f011c3b01a002200220022903083703b0032002200229000d3700b50320024198066a200241206a41e00010e8061a20012003470d0120002f01062204410a4b0d02200020044105746a2203410a6a200241a0026a41026a2d00003a0000200341086a20022f01a0023b0000200341176a200e360000200341136a200d3600002003410f6a200c3600002003410b6a200b3600002003411b6a20022903b003370000200341206a20022900b5033700002000200441e0006c6a41e8026a20024198066a41e00010e8061a2000200441016a22034102746a41880b6a200a360200200020033b0106200a20033b0104200a20003602000b200241d0116a2400200f0f0b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000b1036000b802003077f037e147f23004180076b22042400200441e0006a41186a200241186a290000370300200441e0006a41106a200241106a290000370300200441e0006a41086a200241086a2900003703002004200229000037036002400240024002400240200128020022054190bdc600460d00200128020421060c010b41002106200441e8026a410041e00210e7061a200441c0016a410041840110e7061a41ec03102d2205450d01200541003b010620054100360200200541086a200441e8026a41e00210e8061a200541e8026a200441c0016a41840110e8061a20014100360204200120053602000b02400240024002400240024003400240024020052f010622070d00410021080c010b20074105742102200541086a2109417f21080340024020020d00200721080c020b200841016a2108200441e0006a2009412010ea06220a450d03200241606a2102200941206a2109200a417f4a0d000b0b02402006450d002006417f6a2106200520084102746a41ec036a28020021050c010b0b200441086a41186a2206200441e0006a41186a2202290300370300200441086a41106a200441e0006a41106a2209290300220b370300200441086a41086a200441e0006a41086a220a290300220c37030020042004290360220d3703082001200128020841016a3602082009200b370300200a200c370300200220062903003703002004200d370360200441d8026a41086a2207200341086a280200360200200420032902003703d802024020052f01062203410b490d0020054190bdc600460d02200441e8026a410041e00210e7061a200441c0016a410041840110e7061a41ec03102d220e450d07200e41003b0106200e4100360200200e41086a200441e8026a41e00210e8062109200e41e8026a200441c0016a41840110e806210a200441e8026a41086a2206200541b8036a280200360200200420052900db013703a8012004200541e0016a2900003700ad01200420052902b0033703e802200420052f00c8013b01bc012004200541ca016a2d00003a00be01200541cb016a280000210f200541cf016a2800002110200541d3016a2800002111200541d7016a28000021122009200541e8016a20052f010641796a220241057410e8062109200a200541bc036a2002410c6c10e806210a200541063b0106200e20023b0106200420042f01bc013b01a401200420042d00be013a00a601200420042903a8013703c001200420042900ad013700c501200441286a41086a2006280200360200200420042903e8023703280240024020084107490d00200841057420096a41c07e6a2009200841796a22064105746a2209200241ffff037120066b41057410e9061a200941186a200441e0006a41186a290300370000200941106a200441e0006a41106a290300370000200941086a200441e0006a41086a290300370000200920042903603700002008410c6c200a6a220241b87f6a200241ac7f6a2209200e41066a22022f010020066b410c6c10e9061a200941086a200441d8026a41086a280200360200200920042903d8023702000c010b200541086a20084105746a220941206a2009200541066a22022f010020086b41057410e9061a200941186a200441e0006a41186a290300370000200941106a200441e0006a41106a290300370000200941086a200441e0006a41086a29030037000020092004290360370000200541e8026a2008410c6c6a2209410c6a200920022f010020086b410c6c10e9061a200941086a200441d8026a41086a280200360200200920042903d8023702000b200220022f010041016a3b010020044198016a41026a220220042d00a6013a0000200441c8026a41086a2213200441286a41086a280200360200200420042f01a4013b019801200420042903c001370350200420042900c501370055200420042903283703c8022004413c6a41026a221420022d00003a0000200420042f0198013b013c2004200429005537002d20042004290350370328200441c0006a41086a22152013280200360200200420042903c8023703400240200528020022060d00410021160c050b20052f01042103200441e8026a410272211741002116034020044194016a41026a221820142d00003a0000200420042f013c3b019401200420042903283703602004200429002d37006520044198016a41086a22192015280200360200200420042903403703980141000d04200341ffff0371210502400240024020062f01062202410b490d002017410041960410e7061a419c04102d220a450d0b200a4100360200200a41046a200441e8026a41980410e8061a200420062f00c8013b01bc012004200641ca016a2d00003a00be012004200641db016a2900003703a8012004200641e0016a2900003700ad01200641cb016a280000211a200641cf016a280000211b200641d3016a280000211c200641d7016a280000211d200441e8026a41086a221e200641b8036a2802003602002004200641b0036a2902003703e802200a41086a200641e8016a20062f0106220941796a220241057410e806211f200a41e8026a200641bc036a2002410c6c10e8062120200a41ec036a20064188046a2009417a6a220741027410e8062121200641063b0106200a20023b010602402007450d00410021022021210903402009280200220820023b01042008200a360200200941046a21092007200241016a2202470d000b0b200441d8026a41086a2202201e280200360200200420042d00be0122093a00a601200420042f01bc0122083b01a401200420042903a8013703c001200420042900ad013700c501200420042903e8023703d802200441c4026a41026a220720093a0000200420083b01c402200420042903c0013703e802200420042900c5013700ed0220132002280200360200200420042903d8023703c802200341ffff037122094107490d01201f2005417a6a22084105746a201f200541796a22024105746a2209200a2f010620026b41057410e9061a200941186a20042900653700002009201236000f2009201136000b200920103600072009200f360003200941026a20182d00003a0000200920042f0194013b0000200920042903603700132005410c6c20206a220941b87f6a200941ac7f6a2209200a2f0106220320026b410c6c10e9061a200941086a20192802003602002009200429039801370200200a200341016a22093b01062005410274220f20216a416c6a202120084102746a2203200941ffff0371220520086b41027410e9061a2003200e36020020052008490d02200a200f6a41d4036a2109034020092802002208200241016a22023b01042008200a360200200941046a210920022005490d000c030b0b200641086a2209200541016a22084105746a200920054105746a2209200220056b41057410e9061a200941186a20042900653700002009201236000f2009201136000b200920103600072009200f360003200941026a20044194016a41026a2d00003a0000200920042f0194013b00002009200429036037001320062005410c6c6a220241f4026a200241e8026a220920062f0106220a20056b410c6c10e9061a200241f0026a20044198016a41086a28020036020020092004290398013702002006200a41016a22023b01062005410274200641ec036a22096a41086a200920084102746a2209200241ffff0371220a20086b41027410e9061a2009200e360200200341ffff0371200a4f0d0820062008417f6a22024102746a41f0036a2109034020092802002208200241016a22023b010420082006360200200941046a21092002200a490d000c090b0b200641086a2202200541016a22034105746a200220054105746a220220062f010620056b41057410e9061a200241186a20042900653700002002201236000f2002201136000b200220103600072002200f360003200241026a20182d00003a0000200220042f0194013b000020022004290360370013200641e8026a2005410c6c6a2202410c6a200220062f0106220820056b410c6c10e9061a200241086a201928020036020020022004290398013702002006200841016a22023b01062005410274220f200641ec036a22086a41086a200820034102746a2221200241ffff0371220820036b41027410e9061a2021200e360200200920084f0d002006200f6a41f0036a2102034020022802002209200541016a22053b010420092006360200200241046a210220082005470d000b0b201641016a211620044190016a41026a220220072d00003a000020044180016a41086a22092013280200360200200420042f01c40222083b019001200420042903e802370350200420042900ed02370055200420042903c80237038001201420022d00003a0000200420083b013c2004200429005537002d200420042903503703282015200928020036020020042004290380013703400240200628020022020d00201a210f201d2112201c2111201b2110200a210e0c060b20062f01042103201a210f201d2112201c2111201b211020022106200a210e0c000b0b200520084105746a220641286a200641086a2201200320086b41057410e9061a200641206a2002290300370000200641186a2009290300370000200641106a200a2903003700002001200429036037000020052008410c6c6a220241f4026a200241e8026a220920052f010620086b410c6c10e9061a200241f0026a2007280200360200200920042903d802370200200520052f010641016a3b01060c040b200441e8026a41086a220220052008410c6c6a220941f0026a22082802003602002004200941e8026a22092902003703e802200920032902003702002008200341086a280200360200200441c0016a41086a20022802002202360200200420042903e802220b3703c0012000410c6a20023602002000200b370204200041013602000c040b4195b4ca00412d41f8b4ca001039000b41c2b4ca00413541f8b4ca001039000b200441e8026a410272410041960410e7061a419c04102d2202450d0220024100360200200241046a200441e8026a41980410e8061a2002200128020022093602ec032001200236020020012001280204220841016a360204200941003b010420092002360200200441e0006a41026a2004413c6a41026a2d00003a0000200420042f013c3b0160200420042903283703e8022004200429002d3700ed02200441c0016a41086a200441c0006a41086a280200360200200420042903403703c00120082016470d0320022f01062208410a4b0d04200220084105746a2209410a6a200441e0006a41026a2d00003a0000200941086a20042f01603b0000200941176a2012360000200941136a20113600002009410f6a20103600002009410b6a200f3600002009411b6a20042903e802370000200941206a20042900ed0237000020022008410c6c6a220941f0026a200441c0016a41086a280200360200200941e8026a20042903c0013702002002200841016a22094102746a41ec036a200e360200200220093b0106200e20093b0104200e20023602000b200041003602000b20044180076a24000f0b1036000b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000bbd2504077f037e1d7f027e230041f00a6b22042400200441c0016a41186a200241186a290000370300200441c0016a41106a200241106a290000370300200441c0016a41086a200241086a290000370300200420022900003703c00102400240024002400240200128020022054190bdc600460d00200128020421060c010b41002106200441f8046a410041e00210e7061a20044190026a410041e00210e7061a41c805102d2205450d01200541003b010620054100360200200541086a200441f8046a41e00210e8061a200541e8026a20044190026a41e00210e8061a20014100360204200120053602000b02400240024002400240024003400240024020052f010622070d00410021080c010b20074105742102200541086a2109417f21080340024020020d00200721080c020b200841016a2108200441c0016a2009412010ea06220a450d03200241606a2102200941206a2109200a417f4a0d000b0b02402006450d002006417f6a2106200520084102746a41c8056a28020021050c010b0b200441186a2206200441c0016a41186a2202290300370300200441106a200441c0016a41106a2209290300220b370300200441086a200441c0016a41086a220a290300220c370300200420042903c001220d3703002001200128020841016a36020820044188016a41106a2207200b37030020044188016a41086a220e200c37030020044188016a41186a220f20062903003703002004200d370388012002200341186a2903003703002009200341106a290300370300200a200341086a290300370300200420032903003703c001024020052f01062203410b490d0020054190bdc600460d02200441f8046a410041e00210e7061a20044190026a410041e00210e7061a41c805102d2210450d07201041003b010620104100360200201041086a200441f8046a41e00210e8062109201041e8026a20044190026a41e00210e806210a200441f8046a41086a2206200541b0046a290300370300200441f8046a41106a2207200541b8046a290300370300200441f8046a41186a2203200541c0046a290300370300200420052900db013703f8012004200541e0016a2900003700fd01200420052903a8043703f804200420052f00c8013b018c022004200541ca016a2d00003a008e02200541cb016a2800002111200541cf016a2800002112200541d3016a2800002113200541d7016a28000021142009200541e8016a20052f010641796a2202410574220e10e8062109200a200541c8046a200e10e806210a200541063b0106201020023b0106200420042f018c023b01f401200420042d008e023a00f601200420042903f8013703e001200420042900fd013700e50120044190026a41186a200329030037030020044190026a41106a200729030037030020044190026a41086a2006290300370300200420042903f804370390020240024020084107490d002009200841057441c07e6a22066a2009200841796a220841057422076a2209200241ffff037120086b41057410e9061a200941186a20044188016a41186a290300370000200941106a20044188016a41106a290300370000200941086a20044188016a41086a2903003700002009200429038801370000200a20066a200a20076a2209201041066a22022f010020086b41057410e9061a200941186a200441c0016a41186a290300370300200941106a200441c0016a41106a290300370300200941086a200441c0016a41086a290300370300200920042903c0013703000c010b200541066a2102200541086a22092008410574220a41206a22066a2009200a6a220920052f010620086b41057410e9061a200941186a20044188016a41186a290300370000200941106a20044188016a41106a290300370000200941086a20044188016a41086a2903003700002009200429038801370000200541e8026a220920066a2009200a6a220920052f010620086b41057410e9061a200941186a200441c0016a41186a290300370300200941106a200441c0016a41106a290300370300200941086a200441c0016a41086a290300370300200920042903c0013703000b200220022f010041016a3b0100200441a8016a41026a220220042d00f6013a0000200441d8006a41086a220920044190026a41086a2215290300370300200441d8006a41106a220820044190026a41106a2216290300370300200441d8006a41186a220a20044190026a41186a2217290300370300200420042f01f4013b01a801200420042903e001370378200420042900e50137007d2004200429039002370358200441346a41026a221820022d00003a0000200420042f01a8013b01342004200429007d37002520042004290378370320200441386a41186a2219200a290300370300200441386a41106a221a2008290300370300200441386a41086a221b2009290300370300200420042903583703380240200528020022060d004100211c0c050b20052f0104211d200441f8046a410272211e4100211c0340200441bc016a41026a221f20182d00003a0000200420042f01343b01bc01200420042903203703782004200429002537007d200441c0016a41186a22202019290300370300200441c0016a41106a2221201a290300370300200441c0016a41086a2222201b290300370300200420042903383703c00141000d04201d41ffff0371210502400240024020062f01062202410b490d00201e410041f20510e7061a41f805102d220a450d0b200a4100360200200a41046a200441f8046a41f40510e8061a200420062f00c8013b018c022004200641ca016a2d00003a008e02200420062900db013703f8012004200641e0016a2900003700fd01200641cb016a2800002123200641cf016a2800002124200641d3016a2800002125200641d7016a2800002126200441f8046a41186a2203200641c0046a290300370300200441f8046a41106a220e200641b8046a290300370300200441f8046a41086a220f200641b0046a290300370300200420062903a8043703f804200a41086a200641e8016a20062f0106220241796a2209410574220810e8062127200a41e8026a200641c8046a200810e8062128200a41c8056a200641e4056a2002417a6a220741027410e8062129200641063b0106200a20093b010602402007450d00410021022029210903402009280200220820023b01042008200a360200200941046a21092007200241016a2202470d000b0b201720032903003703002016200e2903003703002015200f290300370300200420042903f80437039002200420042f018c023b01f401200420042d008e023a00f601200420042903f8013703e001200420042900fd013700e501200441f4046a41026a220720042d00f6013a0000200420042f01f4013b01f404200420042903e001370358200420042900e50137005d20032017290300370300200e2016290300370300200f201529030037030020042004290390023703f804201d41ffff037122094107490d0120272005417a6a2208410574221d6a2027200541796a2202410574222a6a2209200a2f010620026b41057410e9061a200941186a200429007d3700002009201436000f2009201336000b2009201236000720092011360003200941026a201f2d00003a0000200920042f01bc013b0000200920042903783700132028201d6a2028202a6a2209200a2f0106221d20026b41057410e9061a200941186a2020290300370300200941106a2021290300370300200941086a2022290300370300200920042903c001370300200a201d41016a22093b01062005410274221120296a416c6a202920084102746a221d200941ffff0371220520086b41027410e9061a201d201036020020052008490d02200a20116a41b0056a2109034020092802002208200241016a22023b01042008200a360200200941046a210920022005490d000c030b0b200641086a2209200541016a2208410574220a6a2009200541057422076a2209200220056b410574220310e9061a2009201436000f2009201336000b2009201236000720092011360003200941026a200441bc016a41026a2d00003a0000200920042f01bc013b000020092004290378370013200941186a200429007d370000200641e8026a2209200a6a200920076a2209200310e9061a200941186a200441c0016a41186a290300370300200941106a200441c0016a41106a290300370300200941086a200441c0016a41086a290300370300200920042903c0013703002006200241016a22023b01062005410274200641c8056a22096a41086a200920084102746a2209200241ffff037120086b41027410e9061a20092010360200201d41ffff037120062f010622024f0d08201020083b010420102006360200200820024f0d082002417f6a210a20062008417f6a22024102746a41d0056a2109034020092802002208200241026a3b010420082006360200200941046a2109200a200241016a2202470d000c090b0b200641086a2202200541016a2208410574221d6a2002200541057422296a220220062f0106222720056b410574222810e9061a2002201436000f2002201336000b2002201236000720022011360003200241026a201f2d00003a0000200220042f01bc013b000020022004290378370013200241186a200429007d370000200641e8026a2202201d6a200220296a2202202810e9061a200241186a2020290300370300200241106a2021290300370300200241086a2022290300370300200220042903c0013703002006202741016a22023b010620054102742229200641c8056a221d6a41086a201d20084102746a221d200241ffff037120086b41027410e9061a201d2010360200200920062f010622084f0d00200620296a41cc056a2102034020022802002209200541016a22053b010420092006360200200241046a210220082005470d000b0b201c41016a211c200441b8016a41026a220220072d00003a000020044188016a41086a2209200f29030037030020044188016a41106a2208200e29030037030020044188016a41186a22052003290300370300200420042f01f4043b01b801200420042903583703a8012004200429005d3700ad01200420042903f80437038801201820022d00003a0000200420042f01b8013b0134200420042900ad01370025200420042903a80137032020192005290300370300201a2008290300370300201b200929030037030020042004290388013703380240200628020022020d0020232111202621142025211320242112200a21100c060b20062f0104211d2023211120262114202521132024211220022106200a21100c000b0b200541086a22062008410574220141206a221d6a200620016a2206200320086b41057410e9061a200641186a200f290300370000200641106a2007290300370000200641086a200e2903003700002006200429038801370000200541e8026a2206201d6a200620016a220620052f010620086b41057410e9061a200641186a2002290300370300200641106a2009290300370300200641086a200a290300370300200620042903c001370300200520052f010641016a3b01060c040b200520084105746a22024180036a2209290300210b2003290300210c2003290308210d2003290310212b2009200341186a290300370300200241f8026a2209290300212c2009202b370300200241f0026a2209290300212b2009200d370300200241e8026a2202290300210d2002200c370300200041186a200b3703002000202c3703102000202b3703082000200d3703000c040b4195b4ca00412d41f8b4ca001039000b41c2b4ca00413541f8b4ca001039000b200441f8046a410272410041f20510e7061a41f805102d2209450d0220094100360200200941046a200441f8046a41f40510e8061a2009200128020022023602c8052001200936020020012001280204220841016a360204200241003b010420022009360200200441c0016a41026a200441346a41026a2d00003a0000200420042f01343b01c00120042004290320370390022004200429002537009502200441f8046a41186a200441386a41186a290300370300200441f8046a41106a200441386a41106a290300370300200441f8046a41086a200441386a41086a290300370300200420042903383703f8042008201c470d0320092f01062208410a4b0d04200920084105746a2202410a6a200441c0016a41026a2d00003a0000200241086a20042f01c0013b0000200241176a2014360000200241136a20133600002002410f6a20123600002002410b6a20113600002002411b6a200429039002370000200241206a200429009502370000200241e8026a20042903f804370300200241f0026a200441f8046a41086a290300370300200241f8026a20044188056a29030037030020024180036a20044190056a2903003703002009200841016a22024102746a41c8056a2010360200200920023b0106201020023b0104201020093602000b200041003602100b200441f00a6a24000f0b1036000b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000b8e0c01087f230041c0046b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a2900003703002003200129000037032002400240024002400240200028020022044190bdc600460d00200028020421050c010b4100210520034180016a410041e00210e7061a200341f8006a22014100360200200341f0006a22064200370300200341d0006a41186a4200370300200341d0006a41106a4200370300200341d0006a41086a420037030020034200370350419403102d2204450d01200441003b010620044100360200200441086a20034180016a41e00210e8061a20044190036a200128020036020020044188036a200629030037020020044180036a200341e8006a290300370200200441f8026a200341e0006a290300370200200441f0026a200341d0006a41086a290300370200200420032903503702e80220004100360204200020043602000b02400240024003400240024020042f010622070d00410021080c010b20074105742101200441086a2106417f21080340024020010d00200721080c020b200841016a2108200341206a2006412010ea062209450d03200141606a2101200641206a21062009417f4a0d000b0b02402005450d002005417f6a2105200420084102746a4194036a28020021040c010b0b200341186a2201200341206a41186a2205290300370300200341106a2206200341206a41106a2207290300370300200341086a2209200341206a41086a220a290300370300200320032903203703002000200028020841016a3602082003200836024c200320003602482003200436024420034100360240200341d0006a41186a2001290300370300200341d0006a41106a2006290300370300200341d0006a41086a20092903003703002003200329030037035020034180016a200341c0006a200341d0006a2002107720032d0080014101470d02200a20034189016a290000370300200720034191016a290000370300200520034199016a2900003703002003200329008101370320200341ac016a2802002106200341b8016a2802002109200341b4016a2802002108200341b0016a2802002104200341a8016a28020022012802002205450d0120012f01042107200341a4016a280200210020034180016a410172210103402003200741ffff037136024c20032006360248200320053602442003200041016a360240200341d0006a41186a200341206a41186a2206290300370300200341d0006a41106a200341206a41106a2205290300370300200341d0006a41086a200341206a41086a22072903003703002003200329032037035020034180016a200341c0006a200341d0006a200420082009107820032d0080014101470d032007200141086a2900003703002005200141106a2900003703002006200141186a2900003703002003200129000037032020032802ac01210620032802b801210920032802b401210820032802b001210420032802a80122072802002205450d0220072f0104210720032802a40121000c000b0b200420084102746a41e8026a20023602000c010b20034180016a410272410041be0310e7061a41c403102d2201450d0120014100360200200141046a20034180016a41c00310e8061a200120062802002205360294032006200136020020062006280204220741016a360204200541003b01042005200136020020034180016a41186a200341206a41186a29030037030020034180016a41106a200341206a41106a29030037030020034180016a41086a200341206a41086a290300370300200320032903203703800120072009470d0220012f01062206410a4b0d03200120064105746a220941206a20034180016a41186a290300370000200941186a20034180016a41106a290300370000200941106a20034180016a41086a290300370000200941086a200329038001370000200120064102746a41e8026a20043602002001200641016a22064102746a4194036a2008360200200120063b0106200820063b0104200820013602000b200341c0046a24000f0b1036000b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000bed1307027f017e057f027e017f017e0a7f230041b0036b2202240020002802102203200328020041016a36020020002902142104200028020c2105200028020821062000280200210320002802042100200241f0016a41086a2207200141086a280200360200200220012902003703f001024002400240024002400240024020002f01062201410b490d000240024020004190bdc600460d00200241d0026a410272410041da0010e7061a200241386a410041840110e7061a41e401102d22080d010c080b4195b4ca00412d41f8b4ca001039000b20084100360200200841046a200241d0026a41dc0010e8061a200841e0006a200241386a41840110e8062107200241386a41086a2209200041b0016a280200360200200220002902a8013703382000413c6a330000210a2000413e6a310000210b20002d003f210c2000350038210d200841086a200041c0006a20002f010641796a220141037410e806210e2007200041b4016a2001410c6c10e8062107200041063b0106200820013b0106200241d0026a41086a2009280200360200200220022903383703d002200d200a200b4210868442208684210a0240024020054107490d002005410374200e6a41506a200e200541796a22094103746a220e200141ffff037120096b41037410e9061a200e20043700002005410c6c20076a220541b87f6a200541ac7f6a2205200841066a22012f010020096b410c6c10e9061a200541086a200241f0016a41086a280200360200200520022903f0013702000c010b200041086a20054103746a220741086a2007200041066a22012f010020056b41037410e9061a20072004370000200041e0006a2005410c6c6a2207410c6a200720012f010020056b410c6c10e9061a200741086a200241f0016a41086a280200360200200720022903f0013702000b200120012f010041016a3b0100200241286a41086a220f200241d0026a41086a22102802002205360200200241086a221120053602002002200c3a0017200220022903d00222043703282002200a3e02102002200a4230883c00162002200a4220883d011420022004370300200229031021040240200028020022090d00410021120c030b20002f01042113200241d0026a4102722114410021000340200220093602242002200341016a2212360220200f20112802003602002002200229030037032820032000470d02201341ffff0371210702400240024020092f01062203410b490d002014410041da0010e7061a200241f0016a200241d0026a41dc0010e8061a200241386a410041b40110e7061a419402102d2201450d0a20014100360200200141046a200241f0016a41dc0010e8061a200141e0006a200241386a41b40110e8062100200941386a290000210a200241386a41086a220e200941b0016a2802003602002002200941a8016a290200370338200141086a200941c0006a20092f0106220541796a220341037410e80621152000200941b4016a2003410c6c10e8062116200141e4016a20094180026a2005417a6a220c41027410e8062117200941063b0106200120033b01060240200c450d00410021032017210003402000280200220520033b010420052001360200200041046a2100200c200341016a2203470d000b0b2010200e280200220336020020022002290338220b3703d002200e20033602002002200b370338201341ffff037122004107490d0120152007417a6a22004103746a2015200741796a22034103746a220520012f010620036b41037410e9061a200520043700002007410c6c20166a220541b87f6a200541ac7f6a220520012f0106220c20036b410c6c10e9061a200541086a200f280200360200200520022903283702002001200c41016a22053b01062007410274221320176a416c6a201720004102746a220c200541ffff0371220720006b41027410e9061a200c200836020020072000490d02200120136a41cc016a2100034020002802002205200341016a22033b010420052001360200200041046a210020032007490d000c030b0b200941086a2205200741016a22004103746a200520074103746a2205200320076b220141037410e9061a2005200437000020092007410c6c6a220541ec006a200541e0006a220c2001410c6c10e9061a200541e8006a200241286a41086a280200360200200c20022903283702002009200341016a22033b01062007410274200941e4016a22056a41086a200520004102746a2205200341ffff0371220120006b41027410e9061a20052008360200201341ffff037120014f0d0620092000417f6a22034102746a41e8016a2100034020002802002205200341016a22033b010420052009360200200041046a210020032001490d000c070b0b200941086a2203200741016a220c4103746a200320074103746a220320092f0106220520076b221341037410e9061a20032004370000200941e0006a2007410c6c6a2203410c6a20032013410c6c10e9061a200341086a200f280200360200200320022903283702002009200541016a22033b010620074102742217200941e4016a22056a41086a2005200c4102746a2213200341ffff03712205200c6b41027410e9061a20132008360200200020054f0d00200920176a41e8016a2103034020032802002200200741016a22073b010420002009360200200341046a210320052007470d000b0b200241106a41086a200e280200220336020020112003360200200220022903382204370310200220043703000240200928020022030d0020012108200a21040c040b20092f0104211320032109200a21042001210820122100201221030c000b0b200020054103746a220341106a200341086a2203200120056b41037410e9061a2003200437000020002005410c6c6a220341ec006a200341e0006a220120002f010620056b410c6c10e9061a200341e8006a2007280200360200200120022903f001370200200020002f010641016a3b01060c020b41c2b4ca00413541f8b4ca001039000b200241d0026a410272410041da0010e7061a200241f0016a200241d0026a41dc0010e8061a200241386a410041b40110e7061a419402102d2203450d0320034100360200200341046a200241f0016a41dc0010e8061a200341e0006a200241386a41b40110e80621052003200628020022003602e4012006200336020020062006280204220141016a360204200041003b010420002003360200200241386a41086a200241086a2802003602002002200229030037033820012012470d0120032f01062200410a4b0d0220052000410c6c6a22052002290338370200200320004103746a41086a2004370000200541086a200241386a41086a2802003602002003200041016a22004102746a41e4016a2008360200200320003b0106200820003b0104200820033602000b200241b0036a24000f0b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000b1036000be66d05027f067e147f0c7e157f230041d00d6b22032400024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030407000b200341f4066a4101360200200342013702e406200341b4d8c9003602e0062003410436028c04200341fcdbc90036028804200320034188046a3602f006200341e0066a41e8d8c9001043000b200141e8006a280200210420034188046a200141086a41e00010e8061a200341d00a6a20014184016a280200360200200341c80a6a200141fc006a290200370300200341b80a6a41086a200141f4006a2902003703002003200141ec006a2902003703b80a0240024020022d000120022d0000410047720d0041aa97ca00ad42808080808001842205100122022900002106200229000821072002102f41ba97ca00ad4280808080f0018422081001220229000021092002290008210a2002102f2003200a3703f001200320093703e801200320073703e001200320063703d801200341e0066a200341d8016a108502410020032802c00720032d00d8074102461b2004490d0120004183243b0100200041086a4116360200200041046a4184cec100360200200041026a41003a00000c100b200041023a00000c0f0b200341ec066a2004360200200341e0066a41086a41053a00002003410d3a00e00641c8e1ca004100200341e0066a108c01200341e0066a20034188046a41e00010e8061a200341cc076a200341b80a6a41086a290300370200200341d4076a200341c80a6a290300370200200341dc076a200341d00a6a280200360200200320043602c007200320032903b80a3702c4072005100122022900002106200229000821072002102f20081001220229000021092002290008210a2002102f2003200a3703f001200320093703e801200320073703e001200320063703d801200341003602c009200342013703b809200341e0066a200341b8096a10f60120032802bc092102200341d8016aad428080808080048420033502c00942208620032802b8092204ad84100402402002450d002004102f0b200041043a00000c0e0b200141086a280200210b200141046a280200210c02400240024020022d00000d0020022d00014101470d002001410c6a280200210d200141106a2903002106200241196a2d00002104200241186a2d0000210e200241166a2f0100210f200241156a2d00002110200241146a2d00002111200241126a2f01002112200241116a2d00002113200241106a2d000021142002410e6a2f010021152002410d6a2d000021162002410c6a2d000021172002410a6a2f01002118200241096a2d00002119200241086a2d0000211a200241066a2f0100211b200241056a2d0000211c200241046a2d0000211d200241026a2f0100211e20032002411a6a2901003703d00a200320043a00cf0a2003200e3a00ce0a2003200f3b01cc0a200320103a00cb0a200320113a00ca0a200320123b01c80a200320133a00c70a200320143a00c60a200320153b01c40a200320163a00c30a200320173a00c20a200320183b01c00a200320193a00bf0a2003201a3a00be0a2003201b3b01bc0a2003201c3a00bb0a2003201d3a00ba0a2003201e3b01b80a200341e0066a200341b80a6a200610840220032802e0064101470d02200020032902e406370200200041086a200341ec066a2802003602000c010b200041023a00000b4100210e410121040240200b450d00200c102f0b410121000c100b20034190076a290300210a20034188076a290300210541202104200341e0066a41206a2903002108200341f8066a290300211f4110210e200341e0066a41106a290300210620032903e806212041aa97ca00ad4280808080800184100122022900002107200229000821092002102f41ba97ca00ad4280808080f00184100122022900002121200229000821222002102f200320223703f001200320213703e801200320093703e001200320073703d801200341e0066a200341d8016a10850220032903e006210720032903e806212120032903f006212220032903f8062123200329038007212420032903880721252003290390072126200329039807212720032903a007212820032903a807212920032903b007212a20032903b807210920032802c007211220032802c407210f20032802c807211020032802cc07211320032802d007211120032802d407211420032d00d80721022003200341e0066a41fc006a2800003600bb09200320032800d9073602b8090240024020024102470d0042012107200342013703d804200342013703d004200342af013703c80420034287013703c004200342013703b804200342013703b004200342013703a804200342013703a00420034201370398042003420137039004200342013703880441002102200341003602e8044180800121114180800421104104210f42e40021090c010b20034188046a41fc006a20032800bb09360000200320123602e8042003202a3703d804200320293703d004200320283703c804200320273703c004200320263703b804200320253703b004200320243703a804200320233703a004200320223703980420032021370390042003200737038804200320032802b809360081052013210e201421040b200320074200200dad2221420010ed06200320023a008005200320043602fc04200320113602f8042003200e3602f404200320103602f0042003200f3602ec04200320093703e00442002006427f200329030020032903084200521b7d2207200720065622021b210602400240024002402002450d00412c210241af8ec20021040c010b200341e0066a200c200d20034188046a10940220032802e0064101470d01200341e8066a280200210220032802e40621040b0240200b450d00200c102f0b200341b80a6a20202006201f20082005200a108802200041086a2002360200200041046a2004360200200041003a00000c010b200341d8016a41186a2204200341e0066a410472220241186a280200360200200341d8016a41106a220e200241106a290200370300200341d8016a41086a2211200241086a290200370300200320022902003703d801200341e80c6a41026a22122021422086200cad841003220241026a2d00003a00002002280003210f2002280007211020022f0000211320034198036a410d6a2214200241186a29000037000020034198036a41086a2215200241136a290000370300200320133b01e80c2003200229000b370398032002102f200341e0066a41186a2004280200360200200341e0066a41106a200e290300370300200341e0066a41086a2011290300370300200320032903d8013703e006200341980d6a41026a220e20122d00003a0000200341b8096a41086a22112015290300370300200341b8096a410d6a22122014290000370000200320032f01e80c3b01980d20032003290398033703b80941aa97ca00ad4280808080800184100122022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007211920022d0006211a20022f0004211b20022d0003211c20022d0002211d20022f0000211e2002102f41e4f4c100ad4280808080b0018410012202290008210720022d0007212b20022d0006212c20022f0004212d20022d0003212e20022d0002212f20022f000021302002102f4120102d2204450d04200420032f01980d3b0000200420103600072004200f360003200420032903b80937000b200441026a200e2d00003a0000200441136a2011290300370000200441186a20122900003700002004ad428080808080048410032202290018210920022d0017210e20022d0016211120022f0014211220022d0013213120022d0012213220022f0010213320022d000f213420022d000e213520022f000c213620022d000b213720022d000a213820022f0008213920022d0007213a20022d0006213b20022f0004213c20022d0003213d20022d0002213e20022f0000213f2002102f2004102f41c000102d2202450d04200220093700382002200e3a0037200220113a0036200220123b0034200220313a0033200220323a0032200220333b0030200220343a002f200220353a002e200220363b002c200220373a002b200220383a002a200220393b00282002203a3a00272002203b3a00262002203c3b00242002203d3a00232002203e3a00222002203f3b0020200220073700182002202b3a00172002202c3a00162002202d3b00142002202e3a00132002202f3a0012200220303b0010200220133a000f200220143a000e200220153b000c200220163a000b200220173a000a200220183b0008200220193a00072002201a3a00062002201b3b00042002201c3a00032002201d3a00022002201e3b0000200341003602c009200342013703b809200341e0066a200341b8096a109502200341e0066a410472200341b8096a109502200341e8066a200341b8096a10950220032d00f80621110240024020032802bc0920032802c0092204460d0020032802b809210e0c010b200441016a220e2004490d0420044101742212200e2012200e4b1b22124100480d040240024020040d002012102d210e0c010b20032802b809200420121031210e0b200e450d05200320123602bc092003200e3602b8090b2003200441016a3602c009200e20046a20113a000020032802ec062113200341f4066a280200220e200341b8096a10690240024020032802bc09221220032802c00922116b200e490d0020032802b80921040c010b2011200e6a22042011490d04201241017422142004201420044b1b22144100480d040240024020120d002014102d21040c010b20032802b80920122014103121040b2004450d05200320143602bc09200320043602b809201421120b200420116a2013200e10e8061a2002ad42808080808008842011200e6aad4220862004ad84100402402012450d002004102f0b2002102f0240200341f0066a280200450d002013102f0b200341b8096a41026a220e200341e80c6a41026a2d00003a0000200341e0066a41086a221120034198036a41086a290300370300200341e0066a410d6a221220034198036a410d6a290000370000200320032f01e80c3b01b80920032003290398033703e00641aa97ca00ad4280808080800184100122022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007211920022d0006211a20022f0004211b20022d0003211c20022d0002211d20022f0000211e2002102f41c0f4c100ad4280808080c0018410012202290008210720022d0007212b20022d0006212c20022f0004212d20022d0003212e20022d0002212f20022f000021302002102f4120102d2204450d04200420032f01b8093b0000200420103600072004200f360003200420032903e00637000b200441026a200e2d00003a0000200441136a2011290300370000200441186a20122900003700002004ad428080808080048410032202290018210920022d0017210e20022d0016211120022f0014211220022d0013213120022d0012213220022f0010213320022d000f213420022d000e213520022f000c213620022d000b213720022d000a213820022f0008213920022d0007213a20022d0006213b20022f0004213c20022d0003213d20022d0002213e20022f0000213f2002102f2004102f41c000102d2202450d04200220093700382002200e3a0037200220113a0036200220123b0034200220313a0033200220323a0032200220333b0030200220343a002f200220353a002e200220363b002c200220373a002b200220383a002a200220393b00282002203a3a00272002203b3a00262002203c3b00242002203d3a00232002203e3a00222002203f3b0020200220073700182002202b3a00172002202c3a00162002202d3b00142002202e3a00132002202f3a0012200220303b0010200220133a000f200220143a000e200220153b000c200220163a000b200220173a000a200220183b0008200220193a00072002201a3a00062002201b3b00042002201c3a00032002201d3a00022002201e3b0000200341c0003602e406200320023602e006200c200d200341e0066a109d022002102f0240200b450d00200c102f0b200341980d6a41026a200341e80c6a41026a2d000022023a0000200341b8096a41086a220420034198036a41086a290300370300200341b8096a410d6a220e20034198036a410d6a290000370000200320032f01e80c220b3b01980d20032003290398033703b809200341e0066a41086a41043a0000200341e9066a200b3b0000200341eb066a20023a0000200341f0066a2010360200200341ec066a200f3602002003410d3a00e006200341f4066a20032903b809370200200341fc066a200429030037020020034181076a200e29000037000041c8e1ca004100200341e0066a108c01200341b80a6a20202006201f20082005200a108802200041043a00000b4100210e41012104410121000c0f0b200141c0006a2903002106200141386a2903002107200141c8006a2903002109200341a8046a200141246a28020036020020034188046a41186a2001411c6a29020037030020034188046a41106a200141146a29020037030020034188046a41086a2001410c6a2902003703002003200141046a290200370388042001412c6a2802002104200141286a280200210e0240024020022d00000d0020022d00014101470d002002411a6a290100210a200241196a2d0000210b200241186a2d0000210c200241166a2f0100210f200241156a2d00002110200241146a2d00002111200241126a2f01002112200241116a2d00002113200241106a2d000021142002410e6a2f010021152002410d6a2d000021162002410c6a2d000021172002410a6a2f01002118200241096a2d00002119200241086a2d0000211a200241066a2f0100211b200241056a2d0000211c200241046a2d0000211d200241026a2f01002102200141306a280200211e200341e0066a41206a20034188046a41206a280200360200200341e0066a41186a220d20034188046a41186a290300370300200341e0066a41106a222b20034188046a41106a290300370300200341e0066a41086a222c20034188046a41086a29030037030020032003290388043703e006200341b80a6a200341e0066a10bb0120032d00b80a4101470d01200041013a00002004450d0d0c0c0b200041023a000020040d0b0c0c0b200341b80a6a41086a2d0000212d200341c10a6a2f0000212e200341c30a6a2d0000212f200341c40a6a2d00002130200341c50a6a2f00002131200341c70a6a2d00002132200341b80a6a41106a2d00002133200341c90a6a2f00002134200341cb0a6a2d00002135200341cc0a6a2d00002136200341cd0a6a2f00002137200341cf0a6a2d00002138200341b80a6a41186a2d0000213920032f00b90a213a20032d00bb0a213b20032d00bc0a213c20032f00bd0a213d20032d00bf0a213e2003200341d10a6a2900003703f001200320393a00ef01200320383a00ee01200320373b01ec01200320363a00eb01200320353a00ea01200320343b01e801200320333a00e701200320323a00e601200320313b01e401200320303a00e3012003202f3a00e2012003202e3b01e0012003202d3a00df012003203e3a00de012003203d3b01dc012003203c3a00db012003203b3a00da012003203a3b01d8012003200a3703d00a2003200b3a00cf0a2003200c3a00ce0a2003200f3b01cc0a200320103a00cb0a200320113a00ca0a200320123b01c80a200320133a00c70a200320143a00c60a200320153b01c40a200320163a00c30a200320173a00c20a200320183b01c00a200320193a00bf0a2003201a3a00be0a2003201b3b01bc0a2003201c3a00bb0a2003201d3a00ba0a200320023b01b80a200d20032903f001370300202b20032903e801370300202c20032903e001370300200320032903d8013703e0062003201e3602a0032003200436029c032003200e36029803200341b8096a200341b80a6a200341e0066a20072006200920034198036a10830202400240024020032802b8094101460d00200341c0096a280200450d0120032802bc09102f0c010b20032d00bc0922024104470d010b200041043a00000c0c0b200341cc096a2802002104200341b8096a41106a280200210f200341c4096a280200210e200341b8096a41086a280200210b200020032f00bd0920032d00bf0941107472220c3b0001200020023a0000200041036a200c4110763a0000200041086a200e360000200041046a200b3600002004450d0b200f102f0c0b0b200141386a2903002107200141306a2903002109200141c0006a2903002106200341f8006a41186a200141196a290000370300200341f8006a41106a200141116a290000370300200341f8006a41086a200141096a29000037030020032001290001370378200141286a2802002104200141246a280200210e20022d00000d0320022d00014101470d03200241196a2d0000210b200241186a2d0000210c200241166a2f0100210f200241156a2d00002110200241146a2d00002111200241126a2f01002112200241116a2d00002113200241106a2d000021142002410e6a2f010021152002410d6a2d000021162002410c6a2d000021172002410a6a2f01002118200241096a2d00002119200241086a2d0000211a200241066a2f0100211b200241056a2d0000211c200241046a2d0000211d200241026a2f0100211e2001412c6a280200210d20032002411a6a2901003703b0012003200b3a00af012003200c3a00ae012003200f3b01ac01200320103a00ab01200320113a00aa01200320123b01a801200320133a00a701200320143a00a601200320153b01a401200320163a00a301200320173a00a201200320183b01a001200320193a009f012003201a3a009e012003201b3b019c012003201c3a009b012003201d3a009a012003201e3b019801200341e0066a20034198016a2006108402024020032802e0064101470d0020032d00e706411074210220032f00e506210b20032802ec06212d20032802e806212b20032d00e406211b02402004450d00200e102f0b200b200272210d4100212e410121020c070b20034190076a290300210a20034188076a29030021054120210b200341b8016a41186a200341e0066a41206a2903003703004110210c200341b8016a41106a200341e0066a41186a290300370300200341c0016a200341e0066a41106a290300370300200320032903e8063703b80141aa97ca00ad4280808080800184100122022900002106200229000821082002102f41ba97ca00ad4280808080f0018410012202290000211f200229000821202002102f200320203703f0012003201f3703e801200320083703e001200320063703d801200341e0066a200341d8016a10850220032903e006210820032903e806211f20032903f006212020032903f8062121200329038007212220032903880721232003290390072124200329039807212520032903a007212620032903a807212720032903b007212820032903b807210620032802c007211220032802c407210f20032802c807211020032802cc07211320032802d007211120032802d407211420032d00d80721022003200341e0066a41fc006a2800003600bb09200320032800d9073602b8090240024020024102470d00200342013703a802200342013703a002200342af013703980220034287013703900220034201370388022003420137038002200342013703f801200342013703f001200342013703e801200342013703e001200342013703d80141002102200341003602b8024180800121114180800421104104210f42e40021060c010b200341d8016a41fc006a20032800bb09360000200320123602b802200320283703a802200320273703a0022003202637039802200320253703900220032024370388022003202337038002200320223703f801200320213703f001200320203703e8012003201f3703e001200320083703d801200320032802b8093600d1022013210c2014210b0b200341f0026a4200370300200341e0026a420037030020034180036a4200370300200320023a00d0022003200b3602cc02200320113602c8022003200c3602c402200320103602c0022003200f3602bc02200320063703b0022003428080e983b1de163703e8022003428080e983b1de163703d80220034280a094a58d1d3703f802200342a0808080808010370388032003200341d8016a360290032003200341d8016a36029403200341b80a6a41186a221020034198016a41186a290300370300200341b80a6a41106a221120034198016a41106a290300370300200341b80a6a41086a221220034198016a41086a29030037030020032003290398013703b80a200341e0066a41186a22134200370300200341e0066a41106a220b4200370300200341e0066a41086a22024200370300200342003703e00641d5a2ca00ad42808080809001841001220c29000021062002200c41086a290000370300200320063703e006200c102f41ecb0c000ad428080808030841001220f2900002106200341b8096a41086a220c200f41086a290000370300200320063703b809200f102f200b20032903b809220637030020034188046a41086a2214200229030037030020034188046a41106a2215200637030020034188046a41186a2216200c290300370300200320032903e00637038804200341186a20034188046a10e301200329032021062003280218211720134200370300200b420037030020024200370300200342003703e006418de6c300ad4280808080e000841001220f29000021082002200f41086a290000370300200320083703e006200f102f419ce6c300ad4280808080e000841001220f2900002108200c200f41086a290000370300200320083703b809200f102f200b20032903b809220837030020142002290300370300201520083703002016200c290300370300200320032903e00637038804200341106a20034188046a4120109501200341d0036a420037030020034198036a412c6a418886c70036020020034198036a41286a41c8e1ca00360200200341b4036a4190bdc600360200200341f0036a2012290300370300200341f8036a201129030037030020034180046a201029030037030020034198036a41206a42003703002003428080808080013703c803200342003703a003200320032903b80a3703e8034100212f200341003602b0032003280210210c2003280214210f200320034194036a3602e003200320034190036a3602dc032003200341d8016a3602d8032003200f4100200c1b3602e40320032006420020171b370398032003200d360290042003200436028c042003200e36028804200341e0066a20034198036a20092007200341b8016a200341f8006a20034188046a109e02410121300240024020032802e0064101470d0020032f00e50620032d00e70641107472210d200b28020022314108762133200341f4066a280200212e200341ec066a280200212d2002280200212b20032d00e406211b4101212f410121300c010b20034190076a2802002231410876213320032f00850720034187076a2d000041107472210d200341e0066a412c6a280200212d200341e0066a41286a280200212b20034184076a2d0000211b0240203141ff0171450d000c010b200341e0066a41086a200341b8036a29030037030020034188046a41086a200341ec066a280200360200200320032903b0033703e006200320032902e40637038804200341c80d6a20034188046a1087024100212f41002131410021300b20034198016a20032903b80120032903c00120032903c801200341b8016a41186a2903002005200a10880220032802cc03222c20032802d403220241d8026c6a210b20032802d0032132202c21042002450d04200341810b6a210f200341a1076a210c200341b80a6a410172211c200341b8096a41076a211d200341c10a6a2110200341b8096a4102722111200341e0066a41106a211e20034188076a211a200341c4076a211620034181076a2112200341e0066a4101722115202c2102034020022d0000210420034188046a200241016a41d70210e8061a0240024002400240024020044103460d00200320043a00e006201520034188046a41d70210e806210e024002400240024020040e03000102000b20032802e806211420032802ec06210e20032802e4062104201d201e41f80010e8061a2003410d3a00b80a201c200341b8096a41ff0010e8061a2004200e200341b80a6a108c014101210e41002113024020140d00410021140c030b2004102f410021140c020b200341980d6a41186a2204200e41186a2213290000370300200341980d6a41106a2214200e41106a2217290000370300200341980d6a41086a2218200e41086a22192900003703002003200e2900003703980d200341b80a6a201a41b00210e8061a2011200e290000370000201141086a2019290000370000201141106a2017290000370000201141186a201329000037000020034180023b01b809200341e80c6a200341b80a6a200341b8096a108b0120032d00e80c210e201020032903980d370000201041086a2018290300370000201041106a2014290300370000201041186a2004290300370000200341063a00c00a2003410d3a00b80a2003200e4104463a00e10a4100211341c8e1ca004100200341b80a6a108c01410121144100210e0c010b20032900e106210920032900e906210a20032900f106210520032900f9062108200329008107211f200329008907212020032900910721212003290099072122200341e80c6a41186a2204200c41186a2213290000370300200341e80c6a41106a2214200c41106a2217290000370300200341e80c6a41086a2218200c41086a22192900003703002003200c2900003703e80c200341e0066a41f8006a290300210620032903d0072107200341980d6a41186a200e41186a290000370300200341980d6a41106a200e41106a290000370300200341980d6a41086a200e41086a2900003703002003200e2900003703980d200341b8096a41186a201241186a290000370300200341b8096a41106a201241106a290000370300200341b8096a41086a201241086a290000370300200320122900003703b809200341b80a6a41186a2013290000370300200341b80a6a41106a2017290000370300200341b80a6a41086a20192900003703002003200c2900003703b80a200341b80d6a41086a201641086a280200360200200320162902003703b80d200341880d6a200341980d6a200341b8096a200341b80a6a20072006200341b80d6a10890220032d00880d210e200f41186a2004290300370000200f41106a2014290300370000200f41086a2018290300370000200f20032903e80c370000200320223700f90a200320213700f10a200320203700e90a2003201f3700e10a200320083700d90a200320053700d10a2003200a3700c90a200320093700c10a200341033a00c00a2003410d3a00b80a200341b80a6a41f8006a2006370300200320073703a80b2003200e4104463a00a10b41c8e1ca004100200341b80a6a108c0141012113410121144101210e0b20032d00e006220441014b0d0120040e020302030b200241d8026a21040c090b201320032802c80745720d0220032802c407102f0c020b200e450d01201a108e010c010b2014450d00024020032802e806450d0020032802e406102f0b20032d00f0064107470d00200328029807450d00200328029407102f0b200241d8026a2202200b470d000c060b0b1038000b1036000b200141216a2d00002111200341e80c6a41186a200141196a290000370300200341e80c6a41106a200141116a290000370300200341e80c6a41086a200141096a290000370300200320012900013703e80c200341980d6a41186a22042001413a6a290000370300200341980d6a41106a220e200141326a290000370300200341980d6a41086a220b2001412a6a2900003703002003200141226a2900003703980d2002411a6a2901002106200241196a2d0000210c200241186a2d0000210f200241166a2f010021100240024020022d0000450d002003200637029c012003200c3a009b012003200f3a009a01200320103b019801200341d8016a41186a2004290300370300200341d8016a41106a200e290300370300200341d8016a41086a200b290300370300200320032903980d3703d8010c010b200241156a2d00002112200241146a2d00002113200241126a2f01002114200241116a2d00002115200241106a2d000021162002410e6a2f010021172002410d6a2d000021182002410c6a2d000021192002410a6a2f0100211a200241096a2d0000211b200241086a2d0000211c200241066a2f0100211d200241056a2d0000211e200241046a2d0000210d200241026a2f0100212b20022d000121022003200637039801200341d8016a41186a2004290300370300200341d8016a41106a200e290300370300200341d8016a41086a200b290300370300200320032903980d3703d8010240024020114101710d0041022104200241ff01714101470d020c010b200241ff01714102470d014100210420032903f001210620032f01ec01211020032f01e801211420032f01e401211720032f01e001211a20032f01dc01211d20032f01d801212b20032d00ef01210c20032d00ee01210f20032d00eb01211220032d00ea01211320032d00e701211520032d00e601211620032d00e301211820032d00e201211920032d00df01211b20032d00de01211c20032d00db01211e20032d00da01210d0b200320063703b0032003200c3a00af032003200f3a00ae03200320103b01ac03200320123a00ab03200320133a00aa03200320143b01a803200320153a00a703200320163a00a603200320173b01a403200320183a00a303200320193a00a2032003201a3b01a0032003201b3a009f032003201c3a009e032003201d3b019c032003201e3a009b032003200d3a009a032003202b3b01980320034188046a200341e80c6a10e8010240024020032d008804417f6a41ff01714102490d00200341d8016a41086a200341bc046a290200370300200341d8016a41106a200341c4046a290200370300200341d8016a41186a200341cc046a290200370300200341d8016a41206a200341d4046a290200370300200341d8016a41286a200341dc046a2802003602002003200341b4046a2902003703d80120034188046a41106a290300210720034188046a41086a290300210a200341ac046a280200211120034188046a41206a2802002113200341a4046a280200210c20034188046a41186a280200211220034188046a41286a280200210b200341e0066a41186a4200370300200341e0066a41106a220f4200370300200341e0066a41086a22024200370300200342003703e006418de6c300ad4280808080e000841001220e29000021062002200e41086a290000370300200320063703e006200e102f419ce6c300ad4280808080e000841001220e2900002106200341b8096a41086a2210200e41086a290000370300200320063703b809200e102f200f20032903b8092206370300200341b80a6a41086a2002290300370300200341b80a6a41106a2006370300200341b80a6a41186a2010290300370300200320032903e0063703b80a200341f0006a200341b80a6a4120109501024002400240410041002003280274410020032802701b220e20046b22042004200e4b1b2204200b6b220f200f20044b1b2204450d00200341e0066a200341e80c6a108d02200341e0006a20032903e006220920022903002205428080a8ec85afd1b101420010ee0642002011ad2206200329036022087d221f201f2006564200200341e0006a41086a2903002006200854ad7c7d22064200522006501b22021b22084200200620021b220684500d004201211f2009428080d287e2bc2d5441002005501b0d02200341d0006a2004ad42002008200610ed06200341c0006a2003290350200341d0006a41086a290300428080e983b1de16420010ed06024002402009428080aef89dc3527c2206200a200a200656200720052006200954ad7c427f7c22065620072006511b22021b22082003290340221f2008201f542006200720021b2208200341c0006a41086a290300221f542008201f511b22021b22062008201f20021b220884500d00200341e0066a200341e80c6a108d0220032903800722204200200920067d221f201f200956200520087d2009200654ad7d220920055620092005511b22041b22215820034188076a29030022054200200920041b220958200520095122041bad211f2020202156200520095620041b0d032002450d010c030b4201211f20020d020b200320063703b801200320083703c0010b200c450d022012102f0c020b200341c8016a2008370300200320063703c0012003201f3703b8014202211f0b200341b80a6a41186a2013360200200341cc0a6a200c360200200341e40a6a200341d8016a41086a290300370200200341ec0a6a200341d8016a41106a290300370200200341f40a6a200341d8016a41186a290300370200200341fc0a6a200341f8016a290300370200200341840b6a20034180026a280200360200200320073703c00a2003200a3703b80a2003200b3602d80a200320113602d40a200320123602c80a200320032903d8013702dc0a200341b8096a41106a200341b8016a41086a290300370300200341b8096a41186a200341b8016a41106a2903003703002003201f3703b809200320032903b8013703c009200341e0066a200341e80c6a200341b80a6a200e200341b8096a109f02024020032d00e0060d00200341fc066a280200450d00200341f8066a280200102f0b200342003703c00a200342808086bdbacdd21a3703b80a200320034198036a3602d80120034188046a20034198036a200341b80a6a200341d8016a10a002410121042003280288044101460d01200341b0046a290300210720034188046a41206a2903002109024020034188046a41086a220c2903004201520d0020034188046a41106a290300210620034198076a20034188046a41186a29030037030020034190076a2006370300200341e0066a41086a41003a0000200341e9066a200329039803370000200341f1066a20034198036a41086a290300370000200341f9066a20034198036a41106a29030037000020034181076a20034198036a41186a290300370000200341033a00e00641c8e1ca004100200341e0066a108c010b200341e0066a41186a22104200370300200341e0066a41106a22044200370300200341e0066a41086a22024200370300200342003703e00641e7a2ca00ad428080808080018422061001220b290000210a200341b80a6a41086a220e200b41086a2900003703002003200a3703b80a200b102f2002200e290300370300200320032903b80a3703e00641ecb5c600ad4280808080d00184220a1001220f2900002105200341b8096a41086a220b200f41086a290000370300200320053703b809200f102f200420032903b8092205370300200c200229030037030020034188046a41106a2211200537030020034188046a41186a2212200b290300370300200320032903e00637038804200341286a20034188046a4120109c01200341286a41106a2903002105200329033021082003280228210f201042003703002004420037030020024200370300200342003703e0062006100122102900002106200e201041086a290000370300200320063703b80a2010102f2002200e290300370300200320032903b80a3703e006200a1001220e2900002106200b200e41086a290000370300200320063703b809200e102f200420032903b8092206370300200c2002290300370300201120063703002012200b290300370300200320032903e006370388042003427f20054200200f1b220620077c20084200200f1b220720097c22092007542202ad7c22072002200720065420072006511b22021b3703e8062003427f200920021b3703e00620034188046aad4280808080800484200341e0066aad428080808080028410040b200041043a00000c0a0b200328028c042102200041046a20034190046a29030037020020002002360200410121000c0a0b20004183243b0100200041086a4115360200200041046a41efcdc10036020041012104200041026a41013a0000410121000c090b200041023a00002004450d04200e102f0c040b200b2004460d0003402004220241d8026a21040240024020022d0000220e41014b0d0002400240200e0e020001000b0240200241086a280200450d00200241046a280200102f0b200241106a2d00004107470d02200241386a280200450d02200241346a280200102f0c020b200241286a108d010c010b200241e8006a280200450d00200241e4006a280200102f0b200b2004470d000b0b02402032450d00202c102f0b024020032802a4032202450d00200341a8036a280200450d002002102f0b02402030450d0020034198036a411c6a280200210220032802bc03210c0240024020032802b803220e0d00200221040c010b200e210b20022104034020042802880b2104200b417f6a220b0d000b0340200220022f01064102746a41880b6a2802002102200e417f6a220e0d000b0b200341e0066a411c6a20022f0106360200200341f8066a4100360200200341f4066a20023602002003200c36028007200341003602f006200342003703e806200320043602e406200341003602e006200341e0066a108a020b0240202f450d002033410874203141ff01717221020c010b202b450d01200d410874201b41ff017172102f0c010b201b41ff01714104460d002000200d3b00012000201b3a0000200041036a200d4110763a0000200041086a202d360200200041046a202b360200202e450d012002102f0c010b200041043a00000b41002100410121040c030b200e102f0b41012100410021040c010b41012104410121000b4101210e0b024020012d0000417e6a220241024b0d00024002400240024020020e03000102000b200e450d03200141086a280200450d03200141046a280200102f0c030b20040d010c020b2000450d01200141286a280200450d01200141246a280200102f0c010b2001412c6a280200450d00200141286a280200102f0b200341d00d6a24000b8f0201057f230041106b22032400024002400240200141046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b2003410036020820032004360204200320053602002001200310690240024020032802042206200328020822056b2001490d00200328020021040c010b200520016a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d002007102d21040c010b200328020020062007103121040b2004450d022003200736020420032004360200200721060b200420056a2000200110e8061a2002290200200520016aad4220862004ad84100402402006450d002004102f0b200341106a24000f0b103d000b1036000b1038000bde2e05027f027e097f037e027f230041f00d6b2207240002400240024002400240024002400240024002402001280230200128024022082802b001460d002004420020042903082209200841c0006a2903007d220a200a20095622081b37030820080d02200741106a41186a200141e8006a290000370300200741106a41106a200141e0006a290000370300200741106a41086a200141d8006a29000037030020072001290050370310200741900b6a41186a20063502084220862006350200841003220841186a290000370300200741900b6a41106a200841106a290000370300200741900b6a41086a200841086a290000370300200720082900003703900b2008102f4120102d22080d010c090b200041003a0004200041013602002000410c6a4129360200200041086a41f594c700360200200041106a2006290200370200200041186a200641086a2802003602000c070b20082005290000370000200841186a200541186a290000370000200841106a200541106a290000370000200841086a200541086a2900003700002008412041c00010312208450d07200820072903900b370020200841386a200741900b6a41186a290300370000200841306a200741900b6a41106a290300370000200841286a200741900b6a41086a290300370000200841c00041800110312208450d0720082007290310370040200841d8006a200741106a41186a290300370000200841d0006a200741106a41106a290300370000200841c8006a200741106a41086a290300370000200741f0026a41186a220b2008ad4280808080800c841003220c41186a290000370300200741f0026a41106a220d200c41106a290000370300200741f0026a41086a220e200c41086a2900003703002007200c2900003703f002200c102f200741306a41186a220c200b290300370300200741306a41106a220b200d290300370300200741306a41086a220d200e290300370300200720072903f0023703302008102f200741f0006a41d8006a200d290300370300200741d0016a200b290300370300200741d8016a200c2903003703004100210e200741ac016a41003602002007419c016a41ec91c70036020020074190016a42003703002007418c016a220f4190bdc60036020020072001360278200741f0006a41286a200141186a2210360200200720072903303703c001200742083702a40120074100360288012007410036027c200720012802483602b801200720012903403703b0012007200128023041016a3602a001200129030021092007200128024c3602bc0120072009370370200741f4016a41026a2208200641036a2d00003a0000200720062f00013b01f40120062d0000211120062902042109200741a8026a41186a200541186a290000370300200741a8026a41106a200541106a290000370300200741a8026a41086a200541086a290000370300200720052900003703a80220074101360288012010200741306a10a70521062007200728028801417f6a220c36028801024020060d00200c0d032007417f36028801200741f8016a41186a200741306a41186a290300370300200741f8016a41106a200741306a41106a290300370300200741f8016a41086a200741306a41086a290300370300200720072903303703f80102400240200728028c01220e4190bdc600460d0020072802900121120c010b41002112200741900b6a410041e00210e7061a200741f0026a410041a00810e7061a41880b102d220e450d09200e41003b0106200e4100360200200e41086a200741900b6a41e00210e8061a200e41e8026a200741f0026a41a00810e8061a20074100360290012007200e36028c010b0240034002400240200e2f010622130d004100210b0c010b20134105742106200e41e8026a210c200e41086a2108417f210b0340024020060d002013210b0c020b200741f8016a2008412010ea06220d450d03200641606a2106200c41e0006a210c200b41016a210b200841206a2108200d417f4a0d000b0b02402012450d002012417f6a2112200e200b4102746a41880b6a280200210e0c010b0b200741d0026a41186a200741f8016a41186a290300220a370300200741d0026a41106a200741f8016a41106a2903002214370300200741d0026a41086a200741f8016a41086a2903002215370300200720072903f80122163703d002200741ac0b6a2015370200200741900b6a41246a2014370200200741bc0b6a200a3702002007200741f0006a41246a3602a00b2007200b36029c0b2007200f3602980b2007200e3602940b200741003602900b200720163702a40b200741a4036a4200370200200741003a00ac03200742003703f002200741003a00cd0320074190bdc6003602a0032007420037038803200741900b6a200741f0026a109702210c0b200741c0026a290300210a200c4201370318200c41013a003c200c41286a427f370300200c41206a427f370300200c413d6a20072903a802370000200c41c5006a200741a8026a41086a290300370000200c41cd006a200741b8026a290300370000200c41d5006a200a370000200720072802880141016a36028801200741f0026a20044101200741106a200741306a20022003200741f0006a10a305024020072d00f002220e4104460d00200741f0016a41026a20072d00f3023a0000200741ec016a41026a200741f4016a41026a2d00003a0000200720072f00f1023b01f001200720072f01f4013b01ec012009422088a72105200741f0026a41086a280200210120072802f40221122009a721040c070b200741f0026a200520072802b801280200109202024020072802f0024101470d00200741ec016a41026a200741f4016a41026a2d00003a0000200720072f01f4013b01ec012009422088a72105200741f8026a280200210120072802f40221122009a721044100210e0c070b200741900b6a41186a200741f0026a410472220641186a2802002208360200200741f8016a41106a200641086a290200370300200741f8016a41186a200641106a29020037030020074198026a2008360200200741063602fc01200741ff8bca003602f801200720062902003703800220072802b40121062007200741f0006a360288032007290370210a20072802bc01210820074198036a200741106a41086a290300370300200741a0036a200741106a41106a290300370300200741a8036a200741106a41186a290300370300200720033703f802200720023703f0022007200836028c032007200a370380032007200729031037039003200720113a00d002200720093702d402200720072f01f4013b00d1022007200741f4016a41026a2d00003a00d302200741900b6a2006200741f8016a200741f0026a200741d0026a200410bf01200741900b6a410572210620072d00940b2111024020072802900b4101470d00200741f0016a41026a200641026a2d00003a0000200741ec016a41026a200741a30b6a2d00003a0000200720072f00a10b3b01ec01200720062f00003b01f001200741a40b6a2902002202422088a72105200741900b6a41086a28020021122007419c0b6a28020021012002a721042011210e200741900b6a41106a2d000021110c060b200741a4026a41026a200641026a2d00003a0000200741a0026a41026a200741a30b6a2d00003a0000200720072f00a10b3b01a002200720062f00003b01a40220072802880141016a221741004c0d02200741900b6a41086a28020021042007419c0b6a2802002105200741900b6a41106a2d0000211820072017360288012007280290012112024002400240034002400240200f280200220e2f010622130d004100210c0c010b20134105742106200e41c5036a210b200e41086a2108417f210c0340024020060d002013210c0c020b200741306a2008412010ea06220d450d03200641606a2106200b41e0006a210b200c41016a210c200841206a2108200d417f4a0d000b0b2012450d022012417f6a2112200e200c4102746a41880b6a210f0c000b0b200b310000200b41a37f6a290300220220025022061ba7450d004200200b41ab7f6a220841086a29030020061b21024200200829030020061b21030c010b2007200728029801200741306a200728029c0128021c110300200741086a29030021022007290300210320072802880121170b20072017417f6a36028801200320072802b00122062903800154200220064188016a29030022035420022003511b450d04200741ec016a41026a200741a4026a41026a2d00003a0000200720072f01a4023b01ec01411e210141c895c70021124100210e0c050b200741ec016a41026a20082d00003a0000200720072f01f4013b01ec012009422088a721052009a72104412a2101419e95c70021120c050b200041003a0004200041013602002000410c6a412a360200200041086a41e695c700360200200041106a2006290200370200200041186a200641086a2802003602000c050b41c6c4ca004118200741f0026a41cc90c70041f0c4ca00103e000b41c3c5ca004110200741f0026a41dc90c70041e4c5ca00103e000b200741d0026a41086a2208200741106a41086a290300370300200741d0026a41106a220c200741106a41106a290300370300200741d0026a41186a220b200741106a41186a290300370300200741a8026a41086a220d200741306a41086a290300370300200741a8026a41106a220e200741306a41106a290300370300200741a8026a41186a2212200741306a41186a290300370300200720072903103703d002200720072903303703a8020240024020072802ac01220620072802a801470d00200641016a22132006490d012006410174220f2013200f20134b1bad42d8027e2202422088a70d012002a722134100480d010240024020060d002013102d21060c010b20072802a401200641d8026c2013103121060b2006450d05200720063602a4012007201341d8026e3602a80120072802ac0121060b20072802a401200641d8026c6a220641003a0000200620072f00cd023b0001200641013a00102006410036000c20064201370004200620072903d002370011200620072903a802370031200641036a200741cd026a41026a2d00003a0000200641196a2008290300370000200641216a200c290300370000200641296a200b290300370000200641396a200d290300370000200641c1006a200e290300370000200641c9006a201229030037000020064180016a200741bf0b6a290000370000200641f9006a200741b80b6a290000370000200641f1006a200741b00b6a290000370000200641e9006a200741900b6a41186a290000370000200641e1006a200741900b6a41106a290000370000200641d9006a200741900b6a41086a290000370000200620072900900b37005120064188016a200741f0026a41d00110e8061a200741f0016a41026a2206200741a4026a41026a2d00003a0000200741ec016a41026a220c200741a0026a41026a2d00003a0000200720072802ac0141016a22083602ac01200720072f01a4023b01f001200720072f01a0023b01ec010240200741f8016a41186a280200450d002007418c026a280200102f20072802ac0121080b200741ec006a41026a20062d00003a0000200741e8006a41026a200c2d00003a0000200720072f01f0013b016c200720072f01ec013b016820072802a801211220072802a401210e2007280294012113200728029001210b200728028c0121060240200728027c220c450d0020074180016a280200450d00200c102f0b200741900b6a41026a220c200741ec006a41026a2d00003a0000200741f0006a41026a220d200741e8006a41026a2d00003a0000200720072f016c3b01900b200720072f01683b017002400240201841ff01710d00200720133602f8022007200b3602f402200720063602f0022010200741f0026a10a40502400240200141386a280200220b2001413c6a28020022066b200841d8026c220d41d8026d220c490d00200128023421080c010b2006200c6a22082006490d03200b41017422062008200620084b1bad42d8027e2202422088a70d032002a722064100480d0302400240200b0d002006102d21080c010b2001280234200b41d8026c2006103121080b2008450d0720012008360234200141386a200641d8026e3602002001413c6a28020021060b2008200641d8026c6a200e200d10e8061a2001413c6a22062006280200200c6a36020002402012450d00200e102f0b200741e4006a41026a200741900b6a41026a2d00003a0000200741e0006a41026a200741f0006a41026a2d00003a0000200720072f01900b3b0164200720072f01703b01600c010b200741e4006a41026a200c2d00003a0000200741e0006a41026a200d2d00003a0000200720072f01900b3b0164200720072f01703b016002402008450d00200841d8026c210141002108034002400240200e20086a220c2d0000220d41014b0d0002400240200d0e020001000b0240200c41086a280200450d00200c41046a280200102f0b200c41106a2d00004107470d02200c41386a280200450d02200c41346a280200102f0c020b200c41286a108d010c010b200c41e8006a280200450d00200c41e4006a280200102f0b2001200841d8026a2208470d000b0b02402012450d00200e102f0b02400240200b0d00200621080c010b200b210c20062108034020082802880b2108200c417f6a220c0d000b0340200620062f01064102746a41880b6a2802002106200b417f6a220b0d000b0b2007418c036a20062f010636020020074188036a410036020020074184036a200636020020072013360290032007410036028003200742003703f802200720083602f402200741003602f002200741f0026a108a020b200741d4006a41026a2206200741e4006a41026a2d00003a0000200741d0006a41026a2208200741e0006a41026a2d00003a0000200720072f0164220c3b015c200720072f0160220b3b01582007200c3b01542007200b3b0150200041246a20113a00002000411c6a200741c8006a290300370000200041146a200741c0006a2903003700002000410c6a200741386a29030037000020002007290330370004200041306a20183a00002000412c6a2005360200200041286a2004360200200020072f01543b0025200041276a20062d00003a0000200020072f01503b0031200041336a20082d00003a0000200041003602000c030b1038000b20074190026a280200450d002007418c026a280200102f0b200741e4006a41026a200741f0016a41026a2d00003a0000200741e0006a41026a200741ec016a41026a2d00003a0000200720072f01f0013b0164200720072f01ec013b01600240200728027c2206450d0020074180016a280200450d002006102f0b2005ad2102200728029401210d200728028c0121060240024020072802900122080d002006210c0c010b2008210b2006210c0340200c2802880b210c200b417f6a220b0d000b0340200620062f01064102746a41880b6a28020021062008417f6a22080d000b0b200242208621022004ad21032007418c036a20062f01063602004100210820074188036a410036020020074184036a20063602002007200d360290032007410036028003200742003703f8022007200c3602f402200741003602f002200741f0026a108a02024020072802ac012206450d0020072802a401210b200641d8026c210d034002400240200b20086a22062d0000220c41014b0d0002400240200c0e020001000b0240200641086a280200450d00200641046a280200102f0b200641106a2d00004107470d02200641386a280200450d02200641346a280200102f0c020b200641286a108d010c010b200641e8006a280200450d00200641e4006a280200102f0b200d200841d8026a2208470d000b0b20022003842102024020072802a801450d0020072802a401102f0b200741dc006a41026a200741e4006a41026a2d000022063a0000200741d8006a41026a2208200741e0006a41026a2d00003a0000200720072f0164220c3b015c200720072f01603b01582000200e3a00042000200c3b0005200041076a20063a0000200041106a20113a00002000410c6a2001360200200041086a2012360200200041146a200237020020004101360200200020072f01583b0011200041136a20082d00003a00000b200741f00d6a24000f0b1036000be50f03017f037e087f230041b0026b22052400024002400240024002400240024002400240024020042802000e0401020300010b200441106a290300210620042903082107200541286a2003360200200541186a20022903103703002005412c6a2002290224370200200541206a200241186a290300370300200541346a200229022c3702002005413c6a200241346a290200370200200541c4006a2002413c6a290200370200200541cc006a200241c4006a290200370200200541106a200241086a29030020067d20022903002208200754ad7d37030041002102200541003a00002005200820077d3703082001200510e901200541003a00af01200541083a007720052006370368200520073703602005200136025c02400240200720068450450d0042002107420021060c010b200520013602a8012005200541a8016a3602c0012005200541f7006a3602bc012005200541dc006a3602b8012005200541af016a3602b4012005200541e0006a3602b001200541f8006a2001200541b0016a10a50441012102024020052802784101470d004200210620052903800121070c010b200541a0016a290300210620054198016a2903002107410021022005290380014201520d00200541f8006a41106a290300210820052802a8012101200541e8016a200541f8006a41186a290300370300200541e0016a200837030041002102200541b0016a41086a41003a0000200541b9016a2001290000370000200541c1016a200141086a290000370000200541c9016a200141106a290000370000200541d1016a200141186a290000370000200541033a00b00141c8e1ca004100200541b0016a108c010b024020020d0020072006109a010b2000200541d80010e8061a0c080b200541b7016a200241d00010e8061a200041003a0000200041016a200541b0016a41d70010e8061a0c070b200110ec01200241186a280200220341164d0d022003ad42208620022802102204ad84200341696aad422086200441176aad844101101d200541b0016a41086a41023a0000200541d9016a41003a0000200541b9016a2001290000370000200541c1016a200141086a290000370000200541c9016a200141106a290000370000200541d1016a200141186a2900003700002005410d3a00b00141c8e1ca004100200541b0016a108c01200041023a00000c010b024020042903084201520d00200441106a2903002107200441186a290300210641002104200541003a005c200541083a00af01200520063703800120052007370378200520013602a80102400240200720068450450d0042002107420021060c010b200520013602602005200541e0006a3602c0012005200541af016a3602bc012005200541a8016a3602b8012005200541dc006a3602b4012005200541f8006a3602b00120052001200541b0016a10a50441012104024020052802004101470d0042002106200529030821070c010b200541286a2903002106200541206a29030021074100210420052903084201520d00200541106a290300210820052802602103200541e8016a200541186a290300370300200541e0016a200837030041002104200541b0016a41086a41003a0000200541b9016a2003290000370000200541c1016a200341086a290000370000200541c9016a200341106a290000370000200541d1016a200341186a290000370000200541033a00b00141c8e1ca004100200541b0016a108c010b20040d0020072006109a010b02400240200241186a2802002209ad42208620022802102204ad842207100e2206422088a7220a0d004101210b0c010b2006a7210b0b200541b0016a41186a200241c4006a290000370300200541c0016a2002413c6a290000370300200541b8016a200241346a2900003703002005200229002c3703b0012005410036020820054201370300200b200a2005108c02024002402005280204220c2005280208220d6b4120490d00200d41206a21032005280200210e0c010b200d41206a2203200d490d04200c410174220e2003200e20034b1b220f4100480d0402400240200c0d00200f102d210e0c010b2005280200200c200f1031210e0b200e450d032005200f3602042005200e360200200f210c0b20052003360208200e200d6a220d20052903b001370000200d41086a200541b0016a41086a290300370000200d41106a200541b0016a41106a290300370000200d41186a200541b0016a41186a290300370000200541f8006a41186a220d2003ad422086200ead841003220341186a290000370300200541f8006a41106a220f200341106a290000370300200541f8006a41086a2210200341086a290000370300200520032900003703782003102f0240200c450d00200e102f0b200541196a200d290300370000200541116a200f290300370000200541096a201029030037000020052005290378370001200541013a00002001200510e901200941164d0d042007200941696aad422086200441176aad844101101d200541b0016a41086a41023a0000200541d9016a41013a0000200541b0016a41096a2001290000370000200541b0016a41116a200141086a290000370000200541b0016a41196a200141106a290000370000200541d1016a200141186a2900003700002005410d3a00b00141c8e1ca004100200541b0016a108c012000200541d80010e8061a200a450d00200b102f0b200241146a280200450d042004102f0c040b41172003104b000b1036000b1038000b41172009104b000b200541b0026a24000bd70d08027f017e017f027e027f057e027f067e230041f0026b2204240020032802002105418de6c300ad4280808080e00084100122032900002106200441386a41086a200341086a290000370300200420063703382003102f41f0e8c600ad4280808080f00084100122032900002106200441f0006a41086a200341086a290000370300200420063703702003102f0240024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441f0016a41186a220a200741186a290000370300200441f0016a41106a220b2009370300200441f0016a41086a2008370300200420063703f0012007102f2003102f41c000102d2203450d002003200429033837000020032004290370370010200320042903f001370020200341086a200441386a41086a290300370000200341186a200441f0006a41086a290300370000200341286a200441f0016a41086a290300370000200341306a200b290300370000200341386a200a290300370000200441f0006a200310f6022004290370210c4200210920044200370370200441b8016a280200210a20042d00bc01210b02400240200c4201510d00200441306a4200370300200441286a4200370300200441206a4200370300200441186a4200370300200441106a4200370300200441086a4200370300200442003703004200210d42002108420021064200210e0c010b200441f0006a41386a290300210f200441f0006a41306a2903002110200441f0006a41206a290300210d200441f0006a41186a2903002109200441f0006a41c0006a290300210e200429038001210620042903782108200441206a200441f0006a41286a290300370300200441286a2010370300200441306a200f370300200441106a20093703002004200d37031820042008370300200420063703080b0240427f200820097c2209200920085422072006200d7c2007ad7c220920065420092006511b22071b427f200920071b8450450d0041dbb4c600ad4280808080b00184210641838c1c21010c020b024020082002290300220d7c220920085422072006200241086a290300220f7c2007ad7c220820065420082006511b450d004191ccc700ad4280808080800184210641838c0821010c020b2004200937030020042008370308200441386a41186a200441106a220741086a2903002206370300200441386a41206a2202200741106a290300370300200441e0006a2211200741186a290300370300200441e8006a2212200741206a290300370300200420083703402004200937033820042007290300221037034802400240427f200920107c221020102009542207200820067c2007ad7c220620085420062008511b22071b2210428080e983b1de16544100427f200620071b2206501b0d00200441386a41106a2903002106201229030021102011290300211320022903002114200429034021152004290338211642012117200429035021180c010b4200211702402010200684500d0020102006109a01200441a8026a2006370300200441a0026a2010370300200441f0016a41086a41013a0000200441f9016a200529000037000020044181026a200541086a29000037000020044189026a200541106a29000037000020044191026a200541186a290000370000200441033a00f00141c8e1ca004100200441f0016a108c010b0b20044198016a2014370300200441a0016a201337030020044180016a2015370300200441a8016a201037030020044188016a200637030020042018370390012004200e3703b00120042016370378410021072004200b4100200c42015122021b3a00bc012004200a410020021b3602b801200420174201512202ad3703700240024020020d002003ad42808080808008841005410121070c010b200441c0003602f401200420033602f001200441f8006a200441f0016a1090030b2003102f024002400240200c4201510d0020070d0041032107200441f0016a21030c010b200c4201522007410173720d0141042107200441f0006a21030b200341046a20073a0000200341003a0000200341056a20012900003700002003410d6a200141086a290000370000200341156a200141106a2900003700002003411d6a200141186a29000037000041c8e1ca0041002003108c010b200041286a200f370300200041206a200d370300200041186a2008370300200041106a2009370300200041086a4200370300410021030c020b1036000b2003102f200041086a200637020020002001360204410121030b20002003360200200441f0026a24000b130020004106360204200041dc8ec2003602000ba60303057f017e027f024020002802202201450d00034020002001417f6a360220200028020821022000280200210302400240200028020c2204200028020422052f01064f0d00200521010c010b034002400240024020054190bdc600460d00200528020022010d012002ad2106410021010c020b41edb3ca00412841f8b4ca001039000b200341016a210320053301044220862002ad8421060b2005102f2006a72102200121052006422088a7220420012f01064f0d000b0b200441016a2107200120044105746a220541fc026a2802002108200541f8026a280200210402402003450d00200120074102746a41c8056a2802002101410021072003417f6a2205450d00034020012802c80521012005417f6a22050d000b0b2000200736020c2000200236020820002001360204200041003602002004450d0102402008450d002004102f0b200028022022010d000b0b02400240200028020422054190bdc600460d00200528020021012005102f2001450d00034020014190bdc600460d02200128020021052001102f2005210120050d000b0b0f0b41edb3ca00412841f8b4ca001039000bc40201027f02402001450d00034020002802940321002001417f6a22010d000b0b02402002450d0041002103034002400240200320002f0106490d0041002104034002400240024020004190bdc600460d00200028020022010d0141002103410021010c020b41edb3ca00412841f8b4ca001039000b200441016a210420002f010421030b2000102f20012100200320012f01064f0d000b200341016a2103024020040d00200121000c020b200120034102746a4194036a2802002100410021032004417f6a2201450d01034020002802940321002001417f6a22010d000c020b0b200341016a21030b2002417f6a22020d000b0b0240024020004190bdc600460d00200028020021012000102f2001450d00034020014190bdc600460d02200128020021002001102f2000210120000d000b0b0f0b41edb3ca00412841f8b4ca001039000bfd0505047f017e017f017e0a7f230041e0016b22022400200241c0006a41186a22034200370300200241c0006a41106a22044200370300200241c0006a41086a2205420037030020024200370340419298ca00ad42808080809001842206100122072900002108200241e0006a41086a2209200741086a290000370300200220083703602007102f200520092903003703002002200229036037034041bfa8c200ad4280808080c001841001220729000021082009200741086a290000370300200220083703602007102f200420022903602208370300200241206a41086a220a2005290300370300200241206a41106a220b2008370300200241206a41186a220c200929030037030020022002290340370320200241e0006a200241206a10a502410321070240024020022d008001220d4103470d00200041086a410b360200200041046a41c193c2003602002000418a2a3b00010c010b200241206aad428080808080048422081005200241086a220e2009290300370300200241106a220f200241e0006a41106a2210290300370300200241186a2211200241e0006a41186a2212290300370300200220022903603703002003420037030020044200370300200542003703002002420037034020061001220729000021062009200741086a290000370300200220063703602007102f200520092903003703002002200229036037034041a898ca00ad4280808080d002841001220729000021062009200741086a290000370300200220063703602007102f20042002290360370000200441086a2009290300370000200a2005290300370300200b2004290300370300200c200329030037030020022002290340370320200241013a00602008200241e0006aad428080808010841004200941023a0000200241063a006041c8e1ca004100200241e0006a108c01201220112903003703002010200f2903003703002009200e29030037030020022002290300370360200141809c316a200241e0006a200d4180de3410a602410421070b200020073a0000200241e0016a24000bfe0301057f230041f0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024020022802102203450d00200241186a28020021042002280214210541002101200241003a0068024002400240034020042001460d01200241c8006a20016a200320016a2d00003a00002002200141016a22063a00682006210120064120470d000b200241286a41186a200241c8006a41186a290300370300200241286a41106a200241c8006a41106a290300370300200241286a41086a200241c8006a41086a2903003703002002200229034837032820042006460d01200320066a2d0000220141034f0d0120002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a2903003700000c020b200141ff0171450d00200241003a00680b20024100360230200242013703282002410b3602242002200241086a3602202002200241286a36026c200241dc006a41013602002002420137024c200241b885c7003602482002200241206a360258200241ec006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b410321010b200020013a00202005450d012003102f0c010b200041033a00200b200241f0006a24000b800a07047f017e017f017e027f017e057f230041d0016b22042400200441c8006a41186a22054200370300200441c8006a41106a22064200370300200441c8006a41086a2207420037030020044200370348419298ca00ad4280808080900184220810012209290000210a200441286a41086a220b200941086a2900003703002004200a3703282009102f2007200b29030037030020042004290328370348418398ca00ad4280808080f00184220a1001220c290000210d200441386a41086a2209200c41086a2900003703002004200d370338200c102f20062004290338220d370300200441086a41086a220c2007290300370300200441086a41106a220e200d370300200441086a41186a220f2009290300370300200420042903483703082004200441086a4120109501200428020421102004280200211120054200370300200642003703002007420037030020044200370348200810012212290000210d200b201241086a2900003703002004200d3703282012102f2007200b29030037030020042004290328370348200a10012212290000210a2009201241086a2900003703002004200a3703382012102f20062004290338220a370300200c2007290300370300200e200a370300200f20092903003703002004200429034837030820042010410020111b221241016a360248200441086aad4280808080800484200441c8006aad4280808080c000841004200f200141186a290000370300200e200141106a290000370300200c200141086a290000370300200420012900003703082008100122012900002108200b200141086a290000370300200420083703282001102f41ce97c200ad42808080808002841001220129000021082009200141086a290000370300200420083703382001102f200420123602cc01200441cc016aad4280808080c00084100322012900002108200141086a290000210a200141106a290000210d2005200141186a2900003703002006200d3703002007200a370300200420083703482001102f024041c000102d2201450d00200120042903283700002001200429033837001020012004290348370020200141086a200b290300370000200141186a2009290300370000200141286a2007290300370000200141306a2006290300370000200141386a20052903003700004104102d2207450d00200720003600004120102d2206450d0020062004290308370000200641186a2209200441086a41186a290300370000200641106a2205200441086a41106a290300370000200641086a220c200441086a41086a2903003700004124210b20074104412410312207450d00200720062900003700042007411c6a2009290000370000200741146a20052900003700002007410c6a200c2900003700002006102f02400240200241ff0171220641024d0d00412421060c010b024002400240024020060e03000102000b410021060c020b410121060c010b410221060b200420063a004841c800210b2007412441c80010312207450d01200720063a0024412521060b0240200b20066b41034b0d002007200b200b4101742209200641046a2205200920054b1b10312207450d010b200720066a20033600002001ad4280808080800884200641046aad4220862007ad8410042007102f2001102f200441d4006a2012360200200441d1006a20023a0000200441d0006a41033a0000200441063a004841c8e1ca004100200441c8006a108c01200441d0016a24000f0b1036000bb01f06057f017e017f017e137f097e230022022103200241e0036b4160712202240020024180016a41186a420037030020024180016a41106a2204420037030020024180016a41086a220542003703002002420037038001419298ca00ad4280808080900184100122062900002107200241a0036a41086a2208200641086a290000370300200220073703a0032006102f20052008290300370300200220022903a0033703800141aba8c200ad4280808080b00184100122062900002107200241d8006a41086a2208200641086a290000370300200220073703582006102f200420022903582207370300200241386a41086a2005290300370300200241386a41106a2007370300200241386a41186a2008290300370300200220022903800137033820024120360284022002200241386a3602800220024188026a200241386aad42808080808004842209100210730240024002400240024002400240200228028802220a0d004100210b0c010b200228028c02210c200220024188026a41086a28020036029c022002200a36029802200241306a20024198026a10e6010240024020022802300d002002280234220d200228029c02220e41c4006e22052005200d4b1b220fad42c4007e2207422088a70d042007a72205417f4c0d040240024020050d004104210b0c010b2005102d220b450d07200541c4006e210f0b02400240200d450d0041002110034002400240200e41044f0d00410121050c010b2002200e417c6a220836029c022002200228029802221141046a360298022011280000211241002105200241003a00a0010240024002400240034020082005460d0120024180016a20056a201120056a220641046a2d00003a00002002200641056a360298022002200541016a22063a00a0012006210520064120470d000b200241c0036a41086a221320024180016a41086a2214290300370300200241c0036a41106a221520024180016a41106a2216290300370300200241c0036a41186a221720024180016a41186a221829030037030020022002290380013703c0032002200820066b36029c0241002105200241003a00a001201120066a21192006200e6b41046a210e0340200e20056a450d0220024180016a20056a201920056a221141046a2d00003a00002002201141056a360298022002200541016a22113a00a0012008417f6a21082011210520114120470d000b200241d8006a41086a22052014290300370300200241d8006a41106a22112016290300370300200241d8006a41186a22192018290300370300200241a0036a41086a221a2013290300370300200241a0036a41106a221b2015290300370300200241a0036a41186a221c201729030037030020022002290380013703582002200820066b220e36029c02200220022903c0033703a0032018201c2903003703002016201b2903003703002014201a290300370300200220022903a00337038001201720192903003703002015201129030037030020132005290300370300200220022903583703c003410021052012211a0c040b2002410036029c02200541ff0171450d020c010b2002410036029c02200541ff0171450d010b200241003a00a0010b4100210e410121050b20024180036a41086a220820024180016a41086a29030037030020024180036a41106a221120024180016a41106a29030037030020024180036a41186a221920024180016a41186a290300370300200241e0026a41086a2212200241c0036a41086a290300370300200241e0026a41106a2213200241c0036a41106a290300370300200241e0026a41186a2214200241c0036a41186a290300370300200220022903800137038003200220022903c0033703e00220050d02201041016a2106200241c0026a41186a22152019290300370300200241c0026a41106a22192011290300370300200241c0026a41086a22112008290300370300200241a0026a41086a22082012290300370300200241a0026a41106a22122013290300370300200241a0026a41186a2213201429030037030020022002290380033703c002200220022903e0023703a0020240200f2010470d00201041017422052006200520064b1bad42c4007e2207422088a70d072007a722054100480d070240024020100d002005102d210b0c010b200b201041c4006c20051031210b0b200b450d0a200541c4006e210f0b200b201041c4006c6a2205201a360200200520022903c0023702042005410c6a2011290300370200200541146a20192903003702002005411c6a2015290300370200200520022903a0023702242005412c6a2008290300370200200541346a20122903003702002005413c6a2013290300370200200621102006200d470d000b0b200dad422086200fad842107200b450d010c020b0240200f450d00200b102f0b0b4100210b20024100360260200242013703582002410b3602c403200220024180026a3602c0032002200241d8006a3602a00320024194016a41013602002002420137028401200241b885c700360280012002200241c0036a36029001200241a0036a41d8dbc10020024180016a103c1a20023502604220862002350258841008200228025c450d002002280258102f0b200c450d00200a102f0b200b4104200b1b2112024020074200200b1b221d422088a7220b450d0020024180016a201228020010a8020240024020022802900122050d004200211e420021070c010b200241206a20022903800120024180016a41086a29030020024198016a350200420010ed06200241206a41086a29030021072002290320211e200228029401450d002005102f0b0240200b4101470d002002201e3703800141002111200241003602900120022007370388010c040b201241c4006a210e200b41c4006c41bc7f6a2119410021112012211041012106034020024180016a200e220828020010a8020240024020022802900122050d004200211f420021200c010b200241106a20022903800120024180016a41086a290300200235029801420010ed06200241106a41086a29030021202002290310211f200228029401450d002005102f0b200841c4006a210e20072020201e201f56200720205620072020511b22051b2107201e201f20051b211e2010200820051b21102011200620051b2111200641016a2106201941bc7f6a22190d000b2002201e370380012002201136029001200220073703880120100d030b20004183143b0100200041086a410b360200200041046a41c193c200360200200041026a41153a00000240201da7450d002012102f0b200324000f0b1038000b103d000b2011200b4f0d012012201141c4006c6a220541186a220829020021202012200b417f6a221141c4006c6a220641c0006a2802002110200641206a290200211e200641286a290200211f200641306a2902002121200641386a29020021222006290200212320062902082107200629021021242008200641186a290200370200200529021021252005202437021020052902082124200520073702082005290200210720052023370200200541386a2022370200200541306a2021370200200541286a201f370200200541206a2206280200210b2006201e370200200541c0006a20103602002002202537039001200220243703880120022007370380012002202037039801200241c0036a41186a200228029c01360200200241c0036a41106a200229029401370300200241c0036a41086a200229028c0137030020022002290284013703c00320024180016a41186a2208420037030020024180016a41106a2210420037030020024180016a41086a220542003703002002420037038001419298ca00ad4280808080900184100122062900002120200241a0036a41086a220e200641086a290000370300200220203703a0032006102f2005200e290300370300200220022903a0033703800141aba8c200ad4280808080b00184100122062900002120200241d8006a41086a220e200641086a290000370300200220203703582006102f20042002290358370000200441086a200e290300370000200241386a41086a2005290300370300200241386a41106a2010290300370300200241386a41186a2008290300370300200220022903800137033820024180016a2012201110850120092002350288014220862002280280012205ad8410040240200228028401450d002005102f0b2007a7210e0240201da7450d002012102f0b419298ca00ad4280808080900184100122052900002107200241a0036a41086a2206200541086a290000370300200220073703a0032005102f41b6a8c200ad4280808080900184100122052900002107200241d8006a41086a2208200541086a290000370300200220073703582005102f2002200e3602800320024180036aad4280808080c00084100322052900002107200541086a2900002120200541106a290000211e20024180016a41186a2211200541186a29000037030020024180016a41106a2210201e37030020024180016a41086a2219202037030020022007370380012005102f41c000102d2205450d00200520022903a003370000200520022903583700102005200229038001370020200541086a2006290300370000200541186a2008290300370000200541286a2019290300370000200541306a2010290300370000200541386a201129030037000020024180016a200510b60102402002280290012210450d002005ad428080808080088410050b20024188016a290300210720024198016a2802002119200229038001212020022802940121122005102f02402010450d0002402019410574450d002020200784500d0020024189016a210620194105742108200241b8016a2111201021050340200220203703a003200220073703a8032002200536028003200241d8006a2005200241a0036a20024180036a109601024020022903584201520d002002290360211e200541186a290000211f200541106a290000211d200541086a2900002109200529000021212011200241d8006a41106a29030037030020062021370000200641086a2009370000200641106a201d370000200641186a201f370000200241003a008801200241033a0080012002201e3703b00141c8e1ca00410020024180016a108c010b200541206a2105200841606a22080d000b0b200241a8016a2007370300200241a0016a202037030020024180016a41186a2205201936020020024194016a201236020020024180016a41106a220620103602002002418c016a200e36020020024180016a41086a220841013a0000200241063a00800141c8e1ca00410020024180016a108c012005200241c0036a41186a2802003602002006200241c0036a41106a2903003703002008200241c0036a41086a290300370300200220022903c003370380012002200b36029c01200141809c316a20024180016a41004180de3410a6020b200041043a0000200324000f0b1036000b419cc3ca002011200b103b000bf70305027f017e027f027e027f230041d0006b22022400419298ca00ad4280808080900184100122032900002104200241086a41086a2205200341086a290000370300200220043703082003102f41b6a8c200ad4280808080900184100122032900002104200241386a41086a2206200341086a290000370300200220043703382003102f2002200136024c200241cc006aad4280808080c00084100322032900002104200341086a2900002107200341106a2900002108200241186a41186a2209200341186a290000370300200241186a41106a220a2008370300200241186a41086a22012007370300200220043703182003102f024041c000102d2203450d00200320022903083700002003200229033837001020032002290318370020200341086a2005290300370000200341186a2006290300370000200341286a2001290300370000200341306a200a290300370000200341386a2009290300370000200241186a200310b601200620012903003703002005200241186a411c6a280200360200200220022903183703382002200229022c370308024020022802282205450d002000200229033837030020002002290308370214200041086a200241386a41086a2903003703002000411c6a200241086a41086a2802003602000b200020053602102003102f200241d0006a24000f0b1036000baf0305027f017e027f027e027f230041d0006b22022400419298ca00ad4280808080900184100122032900002104200241086a41086a2205200341086a290000370300200220043703082003102f41a2a8c200ad4280808080900184100122032900002104200241186a41086a2206200341086a290000370300200220043703182003102f2002200136024c200241cc006aad4280808080c00084100322032900002104200341086a2900002107200341106a2900002108200241286a41186a2201200341186a290000370300200241286a41106a22092008370300200241286a41086a220a2007370300200220043703282003102f024041c000102d2203450d00200320022903083700002003200229031837001020032002290328370020200341086a2005290300370000200341186a2006290300370000200341286a200a290300370000200341306a2009290300370000200341386a2001290300370000200241286a200341c00010aa020240024020022802282201450d002000200229022c370204200020013602000c010b20004100360208200042013702000b2003102f200241d0006a24000f0b1036000bbf0201017f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102201450d00200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a109803024002402003280248450d0020002003290348370200200041086a200341c8006a41086a2802003602000c010b20034100360230200342013703282003410b36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b885c7003602482003200341386a360258200341c4006a41d8dbc100200341c8006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b200041003602000b2002450d012001102f0c010b200041003602000b200341e0006a24000bac0603027f037e037f230041f0006b22022400200241086a2001410c6a290200370300200241106a200141146a290200370300200241186a2001411c6a2902003703002002200129020437030020012802002103419298ca00ad4280808080900184100122012900002104200241206a41086a200141086a290000370300200220043703202001102f41de97c200ad4280808080e00084100122012900002104200241306a41086a200141086a290000370300200220043703302001102f02404104102d2201450d002001200336000020014104412410312201450d00200120022903003700042001411c6a200241186a290300370000200141146a200241106a2903003700002001410c6a200241086a2903003700002001ad4280808080c00484100322032900002104200341086a2900002105200341106a2900002106200241c0006a41186a2207200341186a290000370300200241c0006a41106a22082006370300200241c0006a41086a22092005370300200220043703402003102f2001102f41c000102d2201450d00200120022903203700002001200229033037001020012002290340370020200141086a200241206a41086a290300370000200141186a200241306a41086a290300370000200141286a2009290300370000200141306a2008290300370000200141386a2007290300370000200241c00036026420022001360260200241306a2001ad42808080808008841002107302400240200228023022030d0041002103410021070c010b2002280234210902400240200241386a280200450d0020032d0000220741ff0071220841064b0d00200741077621070c010b20024100360208200242013703002002410b3602242002200241e0006a3602202002200236026c200241d4006a410136020020024201370244200241b885c7003602402002200241206a360250200241ec006a41d8dbc100200241c0006a103c1a2002350208422086200235020084100802402002280204450d002002280200102f0b410221070b02402009450d002003102f0b4100200820074102461b2103200741017121070b2001102f200020033a0001200020073a0000200241f0006a24000f0b1036000ba40e08017f047e0c7f017e027f027e037f057e23004190046b2205240002400240024020040d00420021064200210742002108420021090c010b419298ca00ad42808080809001841001220a290000210620054190036a41086a220b200a41086a2900003703002005200637039003200a102f41f992c200ad42808080809002841001220a2900002106200541a0036a41086a220c200a41086a290000370300200520063703a003200a102f200541a8026a41086a220a200b290300370300200541a8026a41186a220b200c29030037030020052005290390033703a802200520052903a0033703b802200541e0016a200541a8026a108801200541a8026a20052802e001220c20052802e80110ad02024020052802e401450d00200c102f0b20054190016a41086a200a290300220637030020054190016a41106a200541a8026a41106a290300220737030020054190016a41186a200b290300220837030020054190016a41206a200541a8026a41206a220d2d0000220a3a0000200520052903a802220937039001200541b8016a41206a200a3a0000200541b8016a41186a2008370300200541b8016a41106a2007370300200541b8016a41086a2006370300200520093703b801200541e0016a200541b8016a10ae024200210842002109420021064200210720052d00a0024107460d002004417f6a210e200541a8026a41c0006a210f200541a8026a41186a211042002106420021074200210842002109034020102007370300200520063703b802200520083703a802200520093703b002200d200541e0016a41c10010e806210a02400240200f2002460d00200f2002412010ea060d010b200541b0036a41186a220c200a41186a2211290200370300200541b0036a41106a2212200a41106a2213290200370300200541b0036a41086a2214200a41086a22152902003703002005200a2902003703b003419298ca00ad428080808090018410012204290000211620054190036a41086a2217200441086a29000037030020052016370390032004102f41de97c200ad4280808080e00084100122042900002116200541a0036a41086a2218200441086a290000370300200520163703a0032004102f4104102d2204450d032004200136000020044104412410312204450d03200420052903b0033700042004411c6a200c290300370000200441146a20122903003700002004410c6a20142903003700002004ad4280808080c004841003220b2900002116200b41086a2900002119200b41106a290000211a200541d0036a41186a221b200b41186a290000370300200541d0036a41106a221c201a370300200541d0036a41086a221d2019370300200520163703d003200b102f2004102f41c000102d2204450d032004200529039003370000200420052903a003370010200420052903d003370020200441086a2017290300370000200441186a2018290300370000200441286a201d290300370000200441306a201c290300370000200441386a201b29030037000020054188016a200441c00041c8e1ca004100410010b501200528028801210b2004102f200b4101460d0020052d0088032104200c201129000037030020122013290000370300201420152900003703002005200a2900003703b003200541d0036a200541b0036a108d02427f201d2903002216201b2903007c20052903d003221920052903e0037c221a201954220aad7c2219200a201920165420192016511b220a1b2119427f201a200a1b211602400240200420032004200341ff0171491b220441ff0171450d00200541c8006a201942002004ad42ff0183221a420010ed06200541d8006a20164200201a420010ed06201b200c290300370300201c2012290300370300201d2014290300370300200520052903b0033703d003200541e8006a2001200541d0036a2004200e10ac02200541386a420042002016420010ed06427f200541d8006a41086a290300221a200529034820052903387c7c221e2005290350200529034084420052201e201a547222041b211e427f200529035820041b211a200541e8006a41186a290300211f200541e8006a41086a290300212020052903782121200529036821220c010b200541086a20162019420a420010ee06201b200c290300370300201c2012290300370300201d2014290300370300200520052903b0033703d003200541186a2001200541d0036a4100200e10ac02200541186a41186a290300211f200541186a41086a290300212020052903282121200529031821222005290308221a2116200541086a41086a290300221e21190b201920077c201620067c2207201654ad7c201f7c200720217c2206200754ad7c2107201e20097c201a20087c2209201a54ad7c20207c200920227c2208200954ad7c21090b200541e0016a200541b8016a10ae0220052d00a0024107470d000b0b2000200637031020002008370300200041186a20073703002000200937030820054190046a24000f0b1036000bd50302047f047e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102204450d00200341186a28020021052003280214210641002101200341003a006802400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200341003a00680b4100210120034100360228200342013703202003410b3602442003200341086a3602402003200341206a36026c200341dc006a41013602002003420137024c200341b885c7003602482003200341c0006a360258200341ec006a41d8dbc100200341c8006a103c1a200335022842208620033502208410082003280224450d002003280220102f0b200020013a00002006450d012004102f0c010b200041003a00000b200341f0006a24000b800803037f047e067f230022022103200241c0036b41607122022400200141186a22042900002105200420022903b80237000020012900102106200120022903b00237001020012900082107200120022903a802370008200241003a00a00220012900002108200120022903a002370000200220053703b801200220063703b001200220073703a801200220083703a001200141206a2d00002104200241a0026a41176a22092005370000200241a0026a41106a220a20022900b101370300200241a0026a41086a220b20022900a901370300200220022900a1013703a0020240024002402008a741ff01714101470d00200241106a41176a2009290000370000200241106a41106a200a290300370300200241106a41086a200b290300370300200220022903a002370310200220043a002f20024190026a200241106a10b602200241a0026a200228029002220420022802980210cb0220022d00c1024102470d02200241003602a0032002420137039803200241306a41146a41293602002002413c6a410b360200200241093602ac032002419298ca003602a8032002410b3602342002410b3602b4032002418a93c2003602b003200220024190026a3602402002200241b0036a3602382002200241a8036a360230200220024198036a3602bc03200241d8006a41146a41033602002002420337025c200241b48fc4003602582002200241306a360268200241bc036a41d8dbc100200241d8006a103c1a20023502a0034220862002350298038410080240200228029c03450d00200228029803102f0b200041073a0040200228029402450d01200228029002102f200324000f0b200041073a00400b200324000f0b200241a0016a200241a0026a41e30010e8061a0240200228029402450d002004102f0b200241306a41206a2204200241a0026a41206a2d00003a0000200241306a41186a2209200241a0026a41186a220a290300370300200241306a41106a220b200241a0026a41106a220c290300370300200241306a41086a220d200241a0026a41086a220e290300370300200220022903a002370330200241d8006a200241c1016a41c20010e8061a200141206a200241d8006a41c1006a2d00003a0000200141186a20024191016a290000370000200141106a20024189016a290000370000200141086a20024181016a29000037000020012002290079370000200a200241106a41186a290300370300200c200241106a41106a290300370300200e200241106a41086a290300370300200220022903103703a002200241c8026a200d290300370300200241d0026a200b290300370300200241d8026a2009290300370300200241e0026a20042d00003a0000200220022903303703c0022000200241a0026a41c10010e8061a200324000bd61007017f017e017f017e027f037e087f230041f0006b22012400419298ca00ad42808080809001842202100122032900002104200141106a41086a2205200341086a290000370300200120043703102003102f41ce97c200ad4280808080800284100122032900002104200141206a41086a2206200341086a290000370300200120043703202003102f20012000360250200141d0006aad22044280808080c00084100322032900002107200341086a2900002108200341106a2900002109200141306a41186a220a200341186a290000370300200141306a41106a220b2009370300200141306a41086a220c2008370300200120073703302003102f024041c000102d2203450d00200320012903103700002003200129032037001020032001290330370020200341086a2005290300370000200341186a2006290300370000200341286a200c290300370000200341306a200b290300370000200341386a200a2903003700002003ad428080808080088410052003102f200a4200370300200b4200370300200c42003703002001420037033020021001220329000021022005200341086a290000370300200120023703102003102f200c200529030037030020012001290310370330419b98ca00ad4280808080d0018422021001220329000021072006200341086a290000370300200120073703202003102f200b20012903202207370300200141d0006a41086a200c290300370300200141d0006a41106a2007370300200141d0006a41186a200629030037030020012001290330370350200141086a200141d0006a41201095010240200128020c410020012802081b22032000470d00200141306a41186a22054200370300200141306a41106a22064200370300200141306a41086a2203420037030020014200370330419298ca00ad42808080809001841001220c2900002107200141106a41086a220a200c41086a29000037030020012007370310200c102f2003200a29030037030020012001290310370330418398ca00ad4280808080f001841001220c2900002107200141206a41086a220a200c41086a29000037030020012007370320200c102f200b2001290320370000200b41086a200a290300370000200141d0006a41086a2003290300370300200141d0006a41106a2006290300370300200141d0006a41186a2005290300370300200120012903303703502001200141d0006a41201095012001280200210c20012802042105200041016a220310b0022106200320054100200c1b22054f0d0020060d000340200341016a220310b002210c200320054f0d01200c450d000b0b200141306a41186a22054200370300200141306a41106a22064200370300200141306a41086a220c420037030020014200370330419298ca00ad428080808090018422071001220d2900002108200141106a41086a220a200d41086a29000037030020012008370310200d102f200c200a2903003703002001200129031037033020021001220e2900002102200141206a41086a220d200e41086a29000037030020012002370320200e102f200b2001290320370000200b41086a200d290300370000200141d0006a41086a200c290300370300200141d0006a41106a2006290300370300200141d0006a41186a2005290300370300200120012903303703502001200336023020044280808080800484200141306aad4280808080c0008410042007100122032900002102200a200341086a290000370300200120023703102003102f41a2a8c200ad4280808080900184100122032900002102200d200341086a290000370300200120023703202003102f2001200036025020044280808080c00084100322032900002104200341086a2900002102200341106a29000021072005200341186a29000037030020062007370300200c2002370300200120043703302003102f41c000102d2203450d00200320012903103700002003200129032037001020032001290330370020200341086a200a290300370000200341186a200d290300370000200341286a200c290300370000200341306a2006290300370000200341386a20052903003700002003ad428080808080088410052003102f200141d0006a200010a9022001280254210f20012802502110024020012802582203450d002003410574210b419298ca00ad428080808090018421082010210c0340200141d0006a41186a2205200c41186a290000370300200141d0006a41106a2206200c41106a290000370300200141d0006a41086a220a200c41086a2900003703002001200c2900003703502008100122032900002104200141106a41086a220d200341086a290000370300200120043703102003102f41de97c200ad4280808080e00084100122032900002104200141206a41086a220e200341086a290000370300200120043703202003102f4104102d2203450d022003200036000020034104412410312203450d02200320012903503700042003411c6a2005290300370000200341146a20062903003700002003410c6a200a2903003700002003ad4280808080c00484100322052900002104200541086a2900002102200541106a2900002107200141306a41186a2206200541186a290000370300200141306a41106a220a2007370300200141306a41086a22112002370300200120043703302005102f2003102f41c000102d2203450d02200c41206a210c200320012903103700002003200129032037001020032001290330370020200341086a200d290300370000200341186a200e290300370000200341286a2011290300370000200341306a200a290300370000200341386a20062903003700002003ad428080808080088410052003102f200b41606a220b0d000b0b0240200f450d002010102f0b200141f0006a24000f0b1036000b8e0305027f017e027f027e027f230041d0006b22012400419298ca00ad4280808080900184100122022900002103200141086a41086a2204200241086a290000370300200120033703082002102f41ce97c200ad4280808080800284100122022900002103200141186a41086a2205200241086a290000370300200120033703182002102f2001200036024c200141cc006aad4280808080c00084100322022900002103200241086a2900002106200241106a2900002107200141286a41186a2200200241186a290000370300200141286a41106a22082007370300200141286a41086a22092006370300200120033703282002102f024041c000102d22020d001036000b200220012903083700002002200129031837001020022001290328370020200241086a2004290300370000200241186a2005290300370000200241286a2009290300370000200241306a2008290300370000200241386a20002903003700002001200241c00041c8e1ca004100410010b501200128020021002002102f200141d0006a240020004101460be21407027f017e017f027e057f037e037f230041b0086b22032400419298ca00ad4280808080900184100122042900002105200341d8006a41086a200441086a290000370300200320053703582004102f4199a8c200ad428080808090018410012204290000210520034190036a41086a200441086a29000037030020032005370390032004102f0240024002404120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341c0056a41186a2209200641186a290000370300200341c0056a41106a220a2008370300200341c0056a41086a2007370300200320053703c0052006102f2004102f41c000102d2204450d00200420032903583700002004200329039003370010200420032903c005370020200441086a200341d8006a41086a290300370000200441186a20034190036a41086a220b290300370000200441286a200341c0056a41086a220c290300370000200441306a200a290300370000200441386a2009290300370000200341c0056a200410b202024020032802d0052206450d002004ad428080808080088410050b200b200341e4056a290200220837030020034190036a41106a200341ec056a220d290200220e37030020034190036a41186a200341f4056a290200220f3703002003200341dc056a290200221037039003200c2903002105200341c0056a41186a2209280200210a20032903c005210720032802d405210b2009200f370300200341c0056a41106a2211200e370300200c2008370300200320103703c00502402006450d00200341186a41186a220c2009290300370300200341186a41106a22092011290300370300200341186a41086a2211200341c0056a41086a290300370300200320032903c0053703182004102f200341386a41186a200c290300370300200341386a41106a2009290300370300200341386a41086a2011290300370300200320032903183703382003200a36028c032003200636028803200341d8006a20034188036a10b30202402003280258411b460d0020034190036a200341d8006a41b00210e8061a200320073703a008200320053703a80802402007200584500d002003200341386a3602f407200341f8076a200341386a200341a0086a200341f4076a10960120032903f8074201520d002003290380082108200341f8056a200341f8076a41106a290300370300200341f0056a2008370300200341c0056a41086a41003a0000200341c9056a2003290338370000200341d1056a200341386a41086a290300370000200341d9056a200341386a41106a290300370000200341e1056a200341d0006a290300370000200341033a00c00541c8e1ca004100200341c0056a108c010b200341c0056a41086a2204410c3a0000200341e9056a2003290338370000200341c9056a220c2001290000370000200341d1056a200141086a290000370000200341d9056a200141106a290000370000200341e1056a200141186a290000370000200341f1056a200341386a41086a290300370000200341f9056a200341386a41106a29030037000020034181066a200341386a41186a290300370000200341063a00c00520034198066a200537030020034190066a200737030041c8e1ca004100200341c0056a108c01200341c0056a20034190036a41b00210e8061a200341003b01f807200341a0086a200341c0056a200341f8076a108b0120032d00a0082101200341c0056a410c6a2002360200200c20014104463a0000200441073a0000200341063a00c00541c8e1ca004100200341c0056a108c01200041043a00000c030b200320073703f8072003200537038008024002400240024020072005844200520d00200342003703a808200342003703a0080c010b2003200341386a3602a00820034190036a200341386a200341f8076a200341a0086a10bd01200341b0036a290300210520032903a803210702402003290390034201520d002003290398032108200341f8056a20034190036a41106a290300370300200341f0056a2008370300200341c0056a41086a41003a0000200341c9056a2003290338370000200341d1056a200341386a41086a290300370000200341d9056a200341386a41106a290300370000200341e1056a200341d0006a290300370000200341033a00c00541c8e1ca004100200341c0056a108c010b200320073703a008200320053703a80820072005844200520d010b200341c0056a41186a22114200370300200341c0056a41106a22094200370300200341c0056a41086a220c4200370300200342003703c00541e7a2ca00ad428080808080018422051001220a2900002107200341f8076a41086a2204200a41086a290000370300200320073703f807200a102f200c2004290300370300200320032903f8073703c00541ecb5c600ad4280808080d0018422071001220a29000021082004200a41086a290000370300200320083703f807200a102f200920032903f807220837030020034190036a41086a220d200c29030037030020034190036a41106a2212200837030020034190036a41186a22132004290300370300200320032903c00537039003200320034190036a4120109c01200341106a29030021082003290308210e2003280200210a2011420037030020094200370300200c4200370300200342003703c00520051001221129000021052004201141086a290000370300200320053703f8072011102f200c2004290300370300200320032903f8073703c00520071001221129000021052004201141086a290000370300200320053703f8072011102f200920032903f8072205370300200d200c2903003703002012200537030020132004290300370300200320032903c00537039003200320084200200a1b3703c8052003200e4200200a1b3703c00520034190036aad4280808080800484200341c0056aad428080808080028410040c010b200341c0056a41f4c7c40010b402200341c0056a2007200510b502200341d8056a2005370300200341d0056a2007370300200341c8056a41063a00002003410c3a00c00541c8e1ca004100200341c0056a108c010b200341c0056a41086a410d3a0000200341c9056a2001290000370000200341ec056a2002360200200341d1056a200141086a290000370000200341d9056a200141106a290000370000200341e1056a200141186a290000370000200341063a00c00541c8e1ca004100200341c0056a108c01200041086a410f360200200041046a41cc93c200360200200041026a41143a000020004183143b01000c020b2004102f200341c0056a41086a410e3a0000200d2002360200200341c9056a2001290000370000200341d1056a200141086a290000370000200341d9056a200141106a290000370000200341e1056a200141186a290000370000200341063a00c00541c8e1ca004100200341c0056a108c01200041086a410f360200200041046a41ec93c200360200200041026a41123a000020004183143b01000c020b1036000b200b450d002006102f0b200341b0086a24000b890702097f027e230041a0016b22022400200241c00036021420022001360210200241186a2001ad428080808080088410021073024002400240024002400240024020022802182203450d00200228021c21042002200241206a28020036024c20022003360248200241086a200241c8006a10e60120022802080d04200228024c2205200228020c2206490d042006417f4c0d010240024020060d00410121070c010b200610332207450d03200720022802482201200610e8061a2002200520066b220536024c2002200120066a3602480b2007450d0441002101200241003a009801417f2108024002400240034020052001460d01200241f8006a20016a200228024822092d00003a00002002200520086a36024c2002200941016a3602482002200141016a220a3a0098012008417f6a2108200a2101200a4120470d000b200241d8006a41186a200241f8006a41186a290300370300200241d8006a41106a200241f8006a41106a290300370300200241d8006a41086a200241f8006a41086a290300370300200220022903783703582005200a6b22014110490d012002200941116a3602482002200141706a220836024c200841044f0d0220060d060c070b0240200141ff0171450d00200241003a0098010b2006450d060c050b20060d040c050b200941096a290000210b2009290001210c200241286a41086a2208200241d8006a41086a290300370300200241286a41106a220a200241d8006a41106a290300370300200241286a41186a2205200241d8006a41186a290300370300200220022903583703282002200941156a36024820022001416c6a36024c2007450d04200928001121012000200c37030020002006360214200020073602102000200b370308200041186a20063602002000411c6a20022903283702002000413c6a2001360200200041246a20082903003702002000412c6a200a290300370200200041346a20052903003702000c050b200041003602100c050b103d000b1036000b2007102f0b20024100360260200242013703582002410b36022c2002200241106a3602282002200241d8006a3602542002418c016a41013602002002420137027c200241b885c7003602782002200241286a36028801200241d4006a41d8dbc100200241f8006a103c1a200235026042208620023502588410080240200228025c450d002002280258102f0b200041003602100b2004450d002003102f0b200241a0016a24000bb2c40209087f027e067f027e027f067e0a7f017e1c7f230041c0116b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005411a4b0d3d200141046a210720050e1b0102030405060708090a0b0c0d0e0f101112131415161718192324010b2000411b3602000c540b2006450d5120042d0001210520012003417e6a22083602042001200441026a360200200541094b0d51410a2109024002400240024002400240024002400240024020050e0a00010203040506070809000b20084104490d5a2004280002210620012003417a6a3602042001200441066a360200410121090c080b2002200110e60120022802000d59200728020020022802042204490d592004417f4c0d2b0240024020040d00410121060c010b200410332206450d2120072802002004490d5920062001280200200410e8061a200128020422032004490d2d2001200320046b3602042001200128020020046a3602000b2006450d592004ad220a422086200a84210a410221090c070b20084108490d582004290002210a2001200341766a36020420012004410a6a360200410321090c060b200241086a200110e60120022802080d572007280200200228020c2204490d572004417f4c0d290240024020040d00410121060c010b200410332206450d1f20072802002004490d5720062001280200200410e8061a200128020422032004490d2c2001200320046b3602042001200128020020046a3602000b2006450d572004ad220a422086200a84210a410421090c050b200241106a200110e60120022802100d56200728020020022802142204490d562004417f4c0d280240024020040d00410121060c010b200410332206450d1e20072802002004490d5620062001280200200410e8061a200128020422032004490d2c2001200320046b3602042001200128020020046a3602000b2006450d562004ad220a422086200a84210a410521090c040b2008450d5520042d0002210520012003417d6a22073602042001200441036a360200200541014b0d554106210941002106024020050e020400040b20074104490d552004350003210a2001200341796a22053602042001200441076a36020020054104490d552004350007210b2001200341756a36020420012004410b6a360200200b422086200a84210a410121060c030b200241286a200110e60120022802280d54200228022c220c200728020041186e22042004200c4b1b220dad42187e220a422088a70d26200aa72204417f4c0d260240024020040d00410421060c010b2004102d2206450d1c200441186e210d0b0240200c450d004100210e41002104410021080340200241206a200110e60102400240024020022802200d00200728020020022802242203490d002003417f4c0d2b02400240024020030d004101210f0c010b20031033220f450d2220072802002003490d01200f2001280200200310e8061a200128020422052003490d312001200520036b3602042001200128020020036a3602000b200241186a200110e601024020022802180d002007280200200228021c2205490d002005417f4c0d2d02400240024020050d00410121100c010b200510332210450d2420072802002005490d0120102001280200200510e8061a200128020422092005490d342001200920056b3602042001200128020020056a3602000b200841016a21092008200d470d05200e2009200e20094b1bad42187e220a422088a70d5d200aa7220d41004e0d040c5d0b2010102f0b2003450d010b200f102f0b02402008450d002006210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141186a2101200441686a22040d000b0b200d450d580c570b0240024020080d00200d102d21060c010b20062004200d103121060b2006450d1e200d41186e210d0b200620046a2208200f360200200841106a2005ad220a422086200a843702002008410c6a2010360200200841046a2003ad220a422086200a84370200200e41026a210e200441186a210420092108200c2009470d000b0b2006450d54200cad422086200dad84210a410721090c020b200241386a200110e60120022802380d53200228023c22102007280200410c6e2204200420104b1b220fad420c7e220a422088a70d25200aa72204417f4c0d250240024020040d00410421060c010b2004102d2206450d1b2004410c6e210f0b0240024002402010450d004100210841002103410021090340200241306a200110e60120022802300d03200728020020022802342204490d032004417f4c0d290240024020040d004101210e0c010b20041033220e450d1f20072802002004490d03200e2001280200200410e8061a200128020422052004490d302001200520046b3602042001200128020020046a3602000b200941016a210502402009200f470d0020082005200820054b1bad420c7e220a422088a70d59200aa7220f4100480d590240024020090d00200f102d21060c010b20062003200f103121060b2006450d1f200f410c6e210f0b200620036a2209200e360200200941046a2004ad220a422086200a84370200200841026a21082003410c6a21032005210920102005470d000b0b2006450d552010ad422086200fad84210a410821090c030b200e102f0b02402009450d002006210103400240200141046a280200450d002001280200102f0b2001410c6a2101200341746a22030d000b0b200f0d520c530b200241c0006a200110e60120022802400d52200728020020022802442204490d522004417f4c0d240240024020040d00410121060c010b200410332206450d1a20072802002004490d5220062001280200200410e8061a200128020422032004490d2c2001200320046b3602042001200128020020046a3602000b2006450d522004ad220a422086200a84210a410921090b20004100360200200041106a200a3702002000410c6a2006360200200041086a2009360200200041186a200241900f6a41980210e8061a0c530b2006450d4e20042d0001210520012003417e6a22063602042001200441026a360200200541044b0d4e02400240024002400240024002400240024020050e050001020304000b200241900f6a200110970320022802900f2204450d5620022902940f220a422088a72110200aa7210341012111410021050c040b20064102490d5520042f0002210520012003417c6a3602042001200441046a360200200241e00c6a200110b30220022802e00c411b460d55200241900f6a200241e00c6a41b00210e8061a41b002102d2204450d1e2004200241900f6a41b00210e8061a20024191096a33000020024193096a31000042108684210a200229008909210b200228028409211020022d008809210d410221110c030b20064102490d5420042f0002210520012003417c6a3602042001200441046a360200200241900f6a200110980320022802900f2204450d5420022802940f21030240024020072802002206450d00200241980f6a2802002110200128020022092d0000210720012006417f6a22083602042001200941016a3602000240024002400240200741014b0d0020070e020201020b200241023602900f0c040b024020084104490d002009280001210820012006417b6a22073602042001200941056a36020020074104490d00200928000521072001200641776a3602042001200941096a360200200241980f6a2007360200200220083602940f4101210d0c020b200241023602900f0c030b4100210d0b2002200d3602900f200241990f6a330000210a2002419b0f6a310000211220022900910f210b200241e00c6a200110b30220022802e00c411b460d07200241900f6a200241e00c6a41b00210e8061a41b002102d2201450d1f200a201242108684210a2001200241900f6a41b00210e8061a410321110c040b200241023602900f0b2003450d540c530b20064102490d5320042f0002210820012003417c6a3602042001200441046a360200200241900f6a200110980320022802900f2206450d5320022802940f2109024020072802002204450d00200241980f6a2802002107200128020022052d0000210320012004417f6a22103602042001200541016a360200200341014b0d004100210e0240024020030e020100010b20104104490d012005280001210f20012004417b6a22033602042001200541056a36020020034104490d012005280005210c2001200441776a22103602042001200541096a3602004101210e0b41002103200241003a00b00f2010417f6a2104024003402004417f460d01200241900f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00b00f2004417f6a21042005210320054120470d000b200241c00c6a41106a200241a70f6a290000370300200241c00c6a41086a2002419f0f6a2900002212370300200220022900970f22133703c00c20022f01900f20022d00920f4110747222144108762105200241d10c6a330000200241d30c6a31000042108684210a200241af0f6a2d0000211520022800930f210420022802c40c211020022802d40c210120022900c90c210b2013a721032012a7210d410421110c030b0240200341ff0171450d00200241003a00b00f0b2009450d542006102f0c540b2009450d532006102f0c530b20064102490d5220042f0002210820012003417c6a3602042001200441046a360200200241900f6a200110980320022802900f2206450d5220022802940f2109200728020022034104490d02200241980f6a280200210720012802002210280000210e20012003417c6a22043602042001201041046a36020020044104490d022010280004210f2001200341786a220d3602042001201041086a36020041002104200241003a00b00f200341776a21030340200d2004460d02200241900f6a20046a201020046a220541086a2d00003a0000200120033602042001200541096a3602002002200441016a22053a00b00f2003417f6a21032005210420054120470d000b20024180096a41106a200241a70f6a29000037030020024198096a200241af0f6a2d00003a000020024180096a41086a2002419f0f6a290000221237030020022f01900f20022d00920f411074722214410876210520022900970f2213422088a7211020024191096a290000220a423888a72115200a421888a7210120022800930f2104200229008909210b2013a721032012a7210d410521110b200020143a0005200020113a0004200041013602002000411d6a200a3d0000200041156a200b3700002000413c6a200c360200200041386a200f360200200041346a200e360200200041306a20073602002000412c6a2009360200200041286a2006360200200041266a20083b0100200041246a20153a0000200041206a2001360200200041146a200d3a0000200041106a20103602002000410c6a2003360200200041086a2004360200200041066a20053b01002000411f6a200a4210883c0000200041c0006a20024190066a41f00110e8061a0c550b0240200441ff0171450d00200241003a00b00f0b2009450d502006102f0c500b2009450d4f2006102f0c4f0b20030d4d0c4e0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c510b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241c8006a20011099032002290348a70d002002290350210a20004103360200200041086a200a370300200041106a200241900f6a41a00210e8061a0c510b2000411b3602000c500b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241e00c6a2001109a0320022802e00c2201450d00200041086a20022902e40c3702002000200136020420004104360200200041106a200241900f6a41a00210e8061a0c500b2000411b3602000c4f0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a360200200541034b0d0002400240024002400240024020050e0400010203000b20064104490d052004280002210520012003417a6a3602042001200441066a36020020024180086a41086a20024190066a41086a29030037030020024180086a41106a20024190066a41106a2f01003b0100200220022903900637038008410121064100210141002109410021080c030b41002105200241003a00800d2003417e6a2109417d21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024190066a410f6a200241e00c6a410f6a29000037000020024190066a41176a200241e00c6a41176a29000037000020024190066a411f6a200241e00c6a411f6a2d00003a0000200220022d00e20c22093a009206200220022f01e00c22083b019006200220022800e30c220536009306200220022900e70c37009706200320076b2203417e6a4104490d0541022106200420076a220741026a280000210e200241800c6a41106a20024190066a410772220441106a290000370300200241800c6a41086a200441086a290000370300200241800c6a41186a200441186a2d00003a000020012003417a6a3602042001200741066a36020020024180086a41086a200241800c6a410f6a29000037030020024180086a41106a200241800c6a41176a2f00003b010020022004290000220a3703800c200220022900870c370380082008200941107472220741ffffff0771220141107621042001410876210320022f01840c20022d00860c41107472210820022d00830c2109200aa721010c030b200541ff0171450d04200241003a00800d0c040b20064104490d032004280002210520012003417a6a3602042001200441066a36020020024180086a41086a200241a00c6a41086a29030037030020024180086a41106a200241a00c6a41106a2f01003b0100200220022903a00c37038008410321064100210141002104410021080c010b41002105200241003a00800d2003417e6a2109417d2106034020092005460d02200241e00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241e00c6a41176a29000037030020024180096a41086a200241e00c6a410f6a290000220b37030041042106200320076b2203417e6a4104490d0220022d00e20c210920022f01e00c210820022800e30c210520022900e70c210a2002290089092112200420076a220441026a280000210e200241c00c6a41116a20024180096a41116a29000037000020012003417a6a3602042001200441066a360200200220123700c90c20024180086a41086a200241c00c6a410f6a29000037030020024180086a41106a200241c00c6a41176a2f00003b01002002200ba73a00c80c2002200a3703c00c200220022900c70c370380082008200941107472220741ffffff07712201411076210420014108762103200a422088a72108200a421888a72109200aa721010b200241800a6a41106a20024180086a41106a2f0100220f3b0100200241800a6a41086a20024180086a41086a290300220a3703002002200229038008220b3703800a2000410e6a20014110763a00002000410c6a20013b01002000410f6a2008410874200941ff017172360000200041086a2005360200200020043a0007200020033a0006200020073a0005200020063a0004200041053602002000200b3700132000411b6a200a370000200041236a200f3b0000200041286a200e360200200041003a00272000412c6a200241900f6a41840210e8061a0c500b200541ff0171450d00200241003a00800d0b2000411b3602000c4e0b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541034b0d00024002400240024020050e0400010203000b200241e00c6a2001109b0320022d00e00c4102460d03200241f40c6a290200210a200241ec0c6a290200210b200241fc0c6a2902002112200241e80c6a280200210420022802e40c210320022802e00c2105200241d8006a2001109c0320022802580d03200241e8006a290300211341012101200229036021160c4b0b200241e00c6a2001109b0320022d00e00c4102460d02200241f40c6a290200210a200241ec0c6a290200210b200241fc0c6a2902002112200241e80c6a280200210420022802e40c210320022802e00c210520024188016a2001109c03200229038801a70d0220024188016a41106a29030021132002290390012116200241f0006a2001109c032002290370a70d02200241f0006a41106a290300211720022903782118410221010c4a0b200241e00c6a2001109b0320022d00e00c4102460d01200241f40c6a290200210a200241ec0c6a290200210b200241fc0c6a2902002112200241e00c6a41086a2206280200210420022802e40c210320022802e00c2105200241e00c6a2001109b0320022d00e00c4102460d0120024190066a41206a2207200241e00c6a41206a28020036020020024190066a41186a2209200241e00c6a41186a29030037030020024190066a41106a2208200241e00c6a41106a29030037030020024190066a41086a2006290300370300200220022903e00c37039006200241a0016a2001109c0320022903a001a70d01200241a0016a41106a290300211920022903a801211a200929030021172008290300211820024198066a29030021132007350200211b2002290390062116410321010c490b200241e00c6a2001109b0320022d00e00c4102460d00200241f40c6a290200210a200241ec0c6a290200210b200241fc0c6a2902002112200241e80c6a280200210420022802e40c210320022802e00c2105200241b8016a2001109c0320022802b8010d00200241c8016a29030021134104210120022903c00121160c480b2000411b3602000c4d0b2006450d4020042d0001210520012003417e6a221c3602042001200441026a360200200541144b0d4041042110420021134100211d4100210d0240024002400240024002400240024002400240024002400240024002400240024002400240024020050e1500010259030405060708090a0b0c0d0e0f10111213000b200241e00c6a2001109b0320022d00e00c4102460d53200241fc0c6a2902002116200241f40c6a290200211b200241ec0c6a290200211a20022902e40c211920022802e00c2106200241d0016a2001109c0320022903d001a70d5320072802002204450d53200241e0016a290300210b20022903d801210a200128020022032d0000210e20012004417f6a360204410121102001200341016a360200200e41024b0d53201b4238882016420886842112201b4220882016422086842113201ba7220d418080807871211d2019422088a721082016422088a72115201a422088a721142019a72109201aa7210f0c580b200241e8016a2001109c0320022903e801a70d5220022903f001220a422088a72108200241f8016a290300220b422088a72114200aa72109200ba7210f410221100c560b20024180026a2001109c03200229038002a70d51200229038802220a422088a7210820024190026a290300220b422088a72114200aa72109200ba7210f410321104100210d0c560b20024198026a200110e6012002280298020d50200228029c02210641052110420021124100211d4100210d420021130c520b200241a0026a200110e60120022802a0020d4f20022802a4022208200728020041246e2204200420084b1b2209ad42247e220a422088a70d2b200aa72204417f4c0d2b0240024020040d00410421060c010b2004102d2206450d21200441246e21090b024002402008450d004122210541002107410021040340200241e00c6a2001109b0320022d00e00c220e4102460d02200441016a210320022d00e30c210f20022f00e10c211020022f01820d210d20022d00810d210c20022d00800d211120022802fc0c211520022802f80c211420022802f40c211d20022802f00c211c20022802ec0c211e20022f01ea0c211f20022d00e90c212020022d00e80c212120022802e40c2122024020042009470d0020072003200720034b1bad42247e220a422088a70d5e200aa722094100480d5e0240024020040d002009102d21060c010b20062005415e6a2009103121060b2006450d24200941246e21090b200620056a2204200d3b00002004415f6a220d2010200f41107472220f3b00002004417f6a200c3a00002004417e6a20113a00002004417a6a2015360000200441766a2014360000200441726a201d3600002004416e6a201c3600002004416a6a201e360000200441686a201f3b0000200441676a20203a0000200441666a20213a0000200441626a20223600002004415e6a200e3a0000200d41026a200f4110763a0000200741026a2107200541246a21052003210420082003470d000b0b2006450d50410621100c530b2009450d4f2006102f0c4f0b410721104100210d0c530b201c450d4d20042d0002210e20012003417d6a3602042001200441036a360200200e41034f0d4d41082110420021124100211d4100210d42002113410021144100210f410021080c520b200241e00c6a2001109b0320022d00e00c4102460d4c20024198096a200241fc0c6a28020036020020024190096a200241f40c6a290200220a370300200aa7220d418080807871211d2002290294092213421888211220022902e40c220a422088a72108200241ec0c6a290200220b422088a72114200241800d6a280200211520022802e00c2106200aa72109200ba7210f410921100c510b200241a8026a200110e60120022802a8020d4b20022802ac022106410a21100c4c0b410b21104100210d0c4f0b410c21104100210d0c4e0b200241e00c6a200110980320022802e00c2206450d4820022902e40c220a422088a72108200aa72109410d21100c4b0b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241980c6a2201200241ff0c6a2d00003a0000200241800c6a41106a200241f70c6a290000220a37030020022f01e00c20022d00e20c41107472220e411076210c200e4108762111200aa7220d418080807871211d20023502940c2001310000422086842213421888211220022900e70c220a422088a72108200241ef0c6a290000220b422088a7211420022800e30c2106200aa72109200ba7210f410e21100c4d0b200541ff0171450d47200241003a00800d0c470b410f21104100210d0c4b0b201c4104490d452004280002210620012003417a6a3602042001200441066a360200200241b0026a200110e60120022802b0020d45200728020020022802b40222034102742204490d452004417f4c0d210240024020040d00410121090c010b200410332209450d1720072802002004490d4520092001280200200410e8061a200128020422052004490d2a2001200520046b3602042001200128020020046a3602000b2009450d454100211d024002402004450d0020094103710d46200341ffffffff0371220f0d012009102f0b410421094100210f0b41000d452009450d4541102110420021124100210d42002113200f21080c4a0b201c4104490d442004280002210620012003417a6a3602042001200441066a360200200241b8026a200110e60120022802b8020d4420022802bc02220f200728020041246e22042004200f4b1b2208ad42247e220a422088a70d20200aa72204417f4c0d200240024020040d00410421090c010b2004102d2209450d16200441246e21080b0240200f450d00200241e00c6a410772211120024191096a21154100210d0340200241003a00800d200d220c41016a210d2007280200210e417f210341002104024002400240024002400340200e2004460d01200241e00c6a20046a200128020022102d00003a00002001200e20036a3602042001201041016a3602002002200441016a22053a00800d2003417f6a21032005210420054120470d000b20024180096a41086a201141086a29000037030020024180096a41106a201141106a29000037030020024180096a41186a201141186a2d00003a00002002201129000037038009200e20056b22044104490d0120022d00e20c210320022f01e00c210520022800e30c210e201028000121142001201041056a36020020012004417c6a3602042015290000210a200229008909210b200229038009211220022d00880921102008200c470d04200c4101742204200d2004200d4b1bad42247e2213422088a70d562013a722044100480d56200c0d022004102d21090c030b200441ff0171450d00200241003a00800d0b2008450d490c480b2009200c41246c2004103121090b2009450d18200441246e21080b2009200c41246c6a2204200520034110747222034180feff0771410876410874200341ff0171723b01002004200b37021020042014360220200420103a000f200420123700072004200e360003200441026a20034110763a0000200441186a200a370200200d200f470d000b0b2009450d4420022903c80c2213421888211220022802c40c220d418080807871211d411121100c490b201c4104490d432004280002210620012003417a6a3602042001200441066a360200411221100c440b200241c0026a2001109c0320022903c002a70d4220022903c802220a422088a72108200241d0026a290300220b422088a72114200aa72109200ba7210f411321100c460b200241d8026a200110e60120022802d8020d4120022802dc022106411421100c420b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241b80c6a2201200241ff0c6a2d00003a0000200241a00c6a41106a200241f70c6a290000220a37030020022f01e00c20022d00e20c41107472220e411076210c200e4108762111200aa7220d418080807871211d20023502b40c2001310000422086842213421888211220022900e70c220a422088a72108200241ef0c6a290000220b422088a7211420022800e30c2106200aa72109200ba7210f411521100c460b200541ff0171450d40200241003a00800d0c400b2006450d2620042d0001210520012003417e6a3602042001200441026a360200200541014b0d26410021040240024020050e020001000b200241e00c6a200110ee0220022d00e00c4101460d2720024190066a200241e00c6a41017241800110e8061a200241e0026a200110e60120022802e0020d27200728020020022802e4022203490d272003417f4c0d1c0240024020030d00410121040c010b200310332204450d1220072802002003490d2720042001280200200310e8061a200128020422052003490d262001200520036b3602042001200128020020036a3602000b2004450d272003ad220a422086200a84210a20024180096a20024190066a41800110e8061a0b20024180086a20024180096a41800110e8061a200041086a200a3702002000200436020420004108360200200041106a20024180086a41800110e8061a20004190016a200241900f6a41a00110e8061a0c4b0b02402006450d0020042d0001210520012003417e6a221f3602042001200441026a360200200541164b0d00410e21110240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e17000102030405060708090a0b0c540d0e0f101112131415000b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024180096a41086a200241ef0c6a290000220b37030020024198096a2204200241ff0c6a2d00003a000020024180096a41106a200241f70c6a290000221237030020022800e30c210920022900e70c211320022f01e00c210320022d00e20c21052004310000210a200228028c09210e20022f018a09210f20022d00890921102002350294092116200241e8026a2001109c0320022903e802a70d172016200a42208684210a2012a72115200ba72114200241e8026a41106a290300211220022903f002210b2003200541107472220641ffffff07712201410876210d2001411076211d2013422088a7211e2013a7211c410121110c540b200541ff0171450d16200241003a00800d0c160b20024180036a200110e6012002280280030d1520022802840321094100211e410221110c520b20024188036a200110e6012002280288030d1420072802002204450d14200228028c032109200128020022052d0000210320012004417f6a3602042001200541016a360200200341ff0071220d41064b0d14200341077621064100211e410321110c510b20024190036a200110e6012002280290030d1320072802002204450d132002280294032109200128020022052d0000210320012004417f6a3602042001200541016a360200200341ff0071220d41064b0d13200341077621064100211e410421110c500b201f4104490d122004280002210920012003417a6a3602042001200441066a3602004100211e410521110c4f0b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a2201200241ff0c6a2d00003a000020024180096a41106a200241f70c6a290000220b37030020024180096a41086a200241ef0c6a290000221237030020022f01e00c20022d00e20c411074722206411076211d2006410876210d200235029409200131000042208684210a20022900e70c2213422088a7211e20022800e30c2109200228028c09210e20022f018a09210f20022d00890921102013a7211c200ba721152012a72114410621110c4f0b200541ff0171450d11200241003a00800d0c110b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a2201200241ff0c6a2d00003a000020024180096a41106a200241f70c6a290000220b37030020024180096a41086a200241ef0c6a290000221237030020022f01e00c20022d00e20c411074722206411076211d2006410876210d200235029409200131000042208684210a20022900e70c2213422088a7211e20022800e30c2109200228028c09210e20022f018a09210f20022d00890921102013a7211c200ba721152012a72114410721110c4e0b200541ff0171450d10200241003a00800d0c100b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a2201200241ff0c6a2d00003a000020024180096a41106a200241f70c6a290000220b3703004108211120024180096a41086a200241ef0c6a290000221237030020022f01e00c20022d00e20c411074722206411076211d2006410876210d200235029409200131000042208684210a20022900e70c2213422088a7211e20022800e30c2109200228028c09210e20022f018a09210f20022d00890921102013a7211c200ba721152012a721140c4d0b200541ff0171450d0f200241003a00800d0c0f0b41002105200241003a00800d2003417e6a2109417d21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024180096a41086a200241ef0c6a2900002212370300200320076b2203417e6a4104490d0f20022d00e20c210620022f01e00c2108200241f70c6a2900002113200241ff0c6a2d0000210e20022800e30c210920022900e70c2116200420076a220441026a280000210c20012003417a6a22053602042001200441066a220736020020054104490d0f20082006411074722206411076211d2006410876210d2007350000210b2001200341766a36020420012004410a6a3602002002200e3a009806200231009806210a2002201337039006200235029406200a42208684210a2016422088a7211e2012422088a7210e2012421088a7210f2012420888a721102016a7211c2013a721152012a7211442002112410921110c4c0b200541ff0171450d0e200241003a00800d0c0e0b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024190066a41086a2201200241ff0c6a2d00003a000020024180096a41086a200241ef0c6a290000220b3703002002200241f70c6a29000022123703900620022f01e00c20022d00e20c411074722206411076211d2006410876210d200235029406200131000042208684210a20022900e70c2213422088a7211e200b422088a7210e200b421088a7210f200b420888a7211020022800e30c21092013a7211c2012a72115200ba72114410a21110c4b0b200541ff0171450d0d200241003a00800d0c0d0b20024198036a200110e6012002280298030d0c200228029c0321094100211e410b21110c490b201f4104490d0b2004280002210920012003417a6a3602042001200441066a3602004100211e410c21110c480b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024180096a41086a200241ef0c6a290000220a370300200220022f01e00c22013b019006200220022800e30c220936009306200220022900e70c370097062002200a3c009f062002200120022d00e20c411074722206411076221d3a009206200229008909220b42388820024191096a290000220a42088684a721152006410876210d200a421888210a200b421888a7210e200b420888a7210f2002290097062212422088a7211e20022d009f062114200ba721102012a7211c410d21110c480b200541ff0171450d0a200241003a00800d0c0a0b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241a8066a2201200241ff0c6a2d00003a000020024190066a41106a200241f70c6a290000220b370300410f211120024190066a41086a2204200241e00c6a410f6a29000037030020022f01e00c20022d00e20c411074722206411076211d2006410876210d20023502a406200131000042208684210a20022900e70c2212422088a7211e20022800e30c210920042d00002114200228029c06210e20022f019a06210f20022d00990621102012a7211c200ba721150c470b200541ff0171450d09200241003a00800d0c090b41002105200241003a00800d2003417e6a21092003417d6a21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024190066a410f6a200241e00c6a410f6a29000037000020024190066a41176a200241e00c6a41176a29000037000020024190066a411f6a200241e00c6a411f6a2d00003a0000200220022d00e20c22053a009206200220022f01e00c220e3b019006200220022800e30c220936009306200220022900e70c370097062003417e6a2007460d09200420076a220441026a2d00002108200120063602042001200441036a360200200841074f0d09200241800c6a41186a220420024190066a410772220141186a2d00003a000041102111200241800c6a41106a200141106a290000220b370300200241800c6a41086a200141086a29000022123703002002200129000022133703800c200e200541107472220641ffffff07712201411076211d2001410876210d20023502940c200431000042208684210a200ba721152012a7211420022802840c211e20022d00890c211020022f018a0c210f200228028c0c210e2013a7211c0c460b200541ff0171450d08200241003a00800d0c080b411121110c440b411221110c430b200241a0036a200110e60120022802a0030d05200728020020022802a4032204490d052004417f4c0d200240024020040d00410121090c010b200410332209450d1620072802002004490d0520092001280200200410e8061a200128020422032004490d2d2001200320046b3602042001200128020020046a3602000b2009450d052004ad220a422086200a84220a422088a7211e200aa7211c411321114100211d0c420b200241a8036a200110e60120022802a8030d04200728020020022802ac032204490d042004417f4c0d1f0240024020040d00410121090c010b200410332209450d1520072802002004490d0420092001280200200410e8061a200128020422032004490d2d2001200320046b3602042001200128020020046a3602000b2009450d042004ad220a422086200a84220a422088a7211e200aa7211c411421114100211d0c410b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241b80c6a2201200241ff0c6a2d00003a0000200241a00c6a41106a200241f70c6a290000220b370300200241a00c6a41086a2204200241ef0c6a29000037030020022f01e00c20022d00e20c411074722206411076211d2006410876210d20023502b40c200131000042208684210a20022900e70c2212422088a7211e20022800e30c210920042d0000211420022802ac0c210e20022f01aa0c210f20022d00a90c21102012a7211c200ba72115411521110c410b200541ff0171450d03200241003a00800d0c030b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241d80c6a2201200241ff0c6a2d00003a0000200241c00c6a41106a200241f70c6a290000220b370300200241c00c6a41086a2204200241ef0c6a29000037030020022f01e00c20022d00e20c411074722206411076211d2006410876210d20023502d40c200131000042208684210a20022900e70c2212422088a7211e20022800e30c210920042d0000211420022802cc0c210e20022f01ca0c210f20022d00c90c21102012a7211c200ba72115411621110c400b200541ff0171450d02200241003a00800d0c020b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a00004117211120024180096a41106a200241e00c6a41176a29000037030020024180096a41086a200241ef0c6a2900002212370300200229008909220b42388820024191096a290000220a42088684a7211520022f01e00c20022d00e20c411074722206411076211d2006410876210d200a421888210a20022900e70c2213422088a7211e200b421888a7210e200b420888a7210f20022800e30c21092013a7211c2012a72114200ba721100c3f0b200541ff0171450d01200241003a00800d0c010b2009102f0b2000411b3602000c4a0b200241e00c6a2001109d03024020022d00e00c4106460d0020024190066a41286a200241e00c6a41286a290300220a37030020024190066a41206a200241e00c6a41206a290300220b37030020024190066a41186a200241e00c6a41186a290300221237030020024190066a41106a200241e00c6a41106a290300221337030020024190066a41086a200241e00c6a41086a2903002216370300200220022903e00c221b370390062000410a3602002000201b3702042000410c6a2016370200200041146a20133702002000411c6a2012370200200041246a200b3702002000412c6a200a370200200041346a200241900f6a41fc0110e8061a0c4a0b2000411b3602000c490b200241e00c6a2001109d03024020022d00e00c4106460d0020024190066a41286a200241e00c6a41286a290300220a37030020024190066a41206a200241e00c6a41206a290300220b37030020024190066a41186a200241e00c6a41186a290300221237030020024190066a41106a200241e00c6a41106a290300221337030020024190066a41086a200241e00c6a41086a2903002216370300200220022903e00c221b370390062000410b3602002000201b3702042000410c6a2016370200200041146a20133702002000411c6a2012370200200041246a200b3702002000412c6a200a370200200041346a200241900f6a41fc0110e8061a0c490b2000411b3602000c480b2006450d3820042d0001210520012003417e6a360204410221032001200441026a360200200541054b0d3802400240024002400240024020050e06000501020304000b200241e00c6a200110980320022802e00c2204450d3d200241e80c6a280200210720022802e40c2106200241b0036a2001109c03024020022903b003a70d00200241c0036a290300211220022903b803210b410121030c050b2006450d3d2004102f0c3d0b200241e00c6a2001109b0320022d00e00c4102460d3c200241f40c6a2902002112200241ec0c6a290200210b200241fc0c6a290200210a200241e80c6a280200210720022802e40c210620022802e00c2104410321030c030b410421030c020b410521030c010b200241e00c6a2001109b0320022d00e00c4102460d39200241f40c6a2902002112200241ec0c6a290200210b200241fc0c6a290200210a200241e80c6a280200210720022802e40c210620022802e00c2104410621030b2000410c360200200041206a2012370200200041186a200b370200200041286a200a370200200041146a2007360200200041106a20063602002000410c6a2004360200200041086a2003360200200041306a200241900f6a41800210e8061a0c470b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541064b0d004107210802400240024002400240024020050e070001020304053d000b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024188096a200241ef0c6a290000220a370300200220022d00e20c22013a009206200220022f01e00c22043b019006200220022800e30c220936009306200220022900e70c370097062002200a3c009f062004200141107472210720024191096a2900002112200229008909210b20022d009f06210f200229009706210a410121080c3d0b200541ff0171450d05200241003a00800d0c050b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198066a2201200241ef0c6a29000037030020024190066a41106a200241f70c6a290000370300200241a8066a200241ff0c6a2d00003a000020022f01e00c20022d00e20c41107472210720022800e30c210920022900e70c210a200241a1066a290000211220012d0000210f200229009906210b410221080c3c0b200541ff0171450d04200241003a00800d0c040b41002105200241003a00800d410220036b21092003417d6a2106024002400340200920056a450d01200241e00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b200241a80c6a200241ef0c6a290000370300200241a00c6a41106a200241f70c6a290000370300200241b80c6a200241ff0c6a2d00003a0000200220022900e70c3703a00c20022800e30c210920022f01e00c210e20022d00e20c210f41002105200241003a00800d200420076a2108200720036b41026a2103200e200f4110747221070340200320056a450d02200241e00c6a20056a200820056a220441026a2d00003a0000200120063602042001200441036a3602002002200541016a22043a00800d2006417f6a21062004210520044120470d000b200241800c6a41086a2201200241ef0c6a290000370300200241800c6a41106a2204200241e00c6a41176a290000370300200241800c6a41186a2203200241e00c6a411f6a2d00003a0000200220022900e70c3703800c2002200936009306200220073b019006200220074110763a00920620022800e30c210e20022f01e00c210520022d00e20c210620024190066a411f6a200241a00c6a41186a2d00003a000020024190066a41176a200241a00c6a41106a2903003700002002200241a00c6a41086a29030037009f06200220022903a00c370097062005200641107472210620024190066a41186a290300211220032d0000211e2004280200211d2001280200211520022903a006210b20022802940c211c200228028c0c211420022802840c211120022f01820c210c20022d00810c210d20022d00800c211020022d009f06210f200229009706210a410321080c3c0b200541ff0171450d04200241003a00800d0c040b200541ff0171450d03200241003a00800d0c030b200241e00c6a200110980320022802e00c2209450d0220022f00910920024193096a2d000041107472210620022902e40c210a20024189096a2900002112200229008109210b41042108410021070c390b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b200241c80c6a2201200241ef0c6a290000370300200241c00c6a41106a200241f70c6a290000370300200241d80c6a200241ff0c6a2d00003a000020022f01e00c20022d00e20c41107472210720022800e30c210920022900e70c210a200241d10c6a290000211220012d0000210f20022900c90c210b410521080c390b200541ff0171450d01200241003a00800d0c010b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024188096a200241ef0c6a290000221337030020022f01e00c20022d00e20c41107472210720022800e30c210920022900e70c210a20024191096a2900002112200229008909210b2013a7210f410621080c380b200541ff0171450d00200241003a00800d0b2000411b3602000c460b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241c8036a200110e60120022802c8030d0020022802cc0321012000410e36020020002001360204200041086a200241900f6a41a80210e8061a0c460b2000411b3602000c450b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241d0036a200110e60120022802d0030d00200728020020022802d4032204490d002004417f4c0d1502400240024020040d00410121030c010b200410332203450d0c20072802002004490d0120032001280200200410e8061a200128020422052004490d252001200520046b3602042001200128020020046a3602000b2003450d01200020033602042000410f360200200041086a2004ad220a422086200a84370200200041106a200241900f6a41a00210e8061a0c460b2003102f0b2000411b3602000c440b2006450d3120042d0001210520012003417e6a3602042001200441026a360200200541074b0d3102400240024002400240024002400240024020050e080001020304050607000b200241d8036a2001109c0320022903d803a70d39200241e8036a290300210a20022903e003210b200241e00c6a2001109b0320022d00e00c4102460d3920024198096a200241fc0c6a28020036020020024190096a200241f40c6a29020037030020024188096a200241ec0c6a29020022123703002002200b3703800a2002200a3703880a20022902e40c2213422088a72105200241800d6a280200210420022802e00c210320024191096a290000210a20022f019a09210620022d0099092107200229008909210b2013a721092012a721084101210e0c3a0b200241f0036a200110e60120022802f0030d3820022802f4032103200241800a6a41106a200241e00c6a41106a290300370300200241800a6a41086a200241e00c6a41086a290300370300200220022903e00c3703800a410021054102210e0c390b200241f8036a200110e60120022802f8030d3720022802fc032103200241c90c6a290000210a20022900c10c210b20022f01d20c210620022d00d10c2107410021054103210e0c380b20024180046a200110e6012002280280040d3620072802002002280284042209490d362009417f4c0d1802400240024020090d00410121040c010b200910332204450d0f20072802002009490d0120042001280200200910e8061a200128020422032009490d292001200320096b3602042001200128020020096a3602000b2004450d3741002105200241003a00800d2007280200417f6a2103024003402003417f460d01200241e00c6a20056a200128020022062d00003a0000200120033602042001200641016a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024180096a41086a200241ef0c6a290000220a370300200220022f01e00c22013b019006200220022800e30c220336009306200220022900e70c370097062002200a3c009f062002200120022d00e20c411074722201411076220f3a00920620024191096a290000210a200229008909210b20022d009f0621082002290097062112200220093602840a200220093602800a200141087621102012422088a721052012a721094104210e0c390b0240200541ff0171450d00200241003a00800d0b2009450d370b2004102f0c360b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024190066a41086a2201200241ef0c6a29000037030020024190066a41106a200241f70c6a290000370300200241a8066a200241ff0c6a2d00003a0000200220022900e70c22123703900620022800e30c210320022f01e00c210420022d00e20c2105200241a1066a290000210a20012d00002108200229009906210b200241800a6a41106a20024180086a41106a290000370300200241800a6a41086a20024180086a41086a29000037030020022002290080083703800a20042005411074722201411076210f200141087621102012422088a721052012a721094105210e0c370b200541ff0171450d35200241003a00800d0c350b20024188046a200110e6012002280288040d342007280200200228028c042208490d342008417f4c0d160240024020080d00410121040c010b200810332204450d0c20072802002008490d3420042001280200200810e8061a200128020422032008490d272001200320086b3602042001200128020020086a3602000b2004450d3441002103200241003a00800d20072802002107417f21050240034020072003460d01200241e00c6a20036a200128020022092d00003a00002001200720056a3602042001200941016a3602002002200341016a22063a00800d2005417f6a21052006210320064120470d000b20024190066a410f6a200241e00c6a410f6a29000037000020024190066a41176a200241e00c6a41176a29000037000020024190066a411f6a200241e00c6a411f6a2d00003a0000200220022d00e20c22053a009206200220022f01e00c220e3b019006200220022800e30c220336009306200220022900e70c37009706200720066b22064110490d03200941096a290000210a2009290001210b2001200641706a3602042001200941116a360200200241800c6a41186a20024190066a410772220141186a2d00003a0000200241800c6a41106a200141106a290000370300200241800c6a41086a200141086a2900002212370300200241800a6a41106a200a3703002002200129000022133703800c200220083602840a200220083602800a2002200b3703880a200e200541107472220141ffffff07712205411076210f200541087621102012a72108200241800c6a41116a290000210a20022802840c210520022900890c210b2013a721094106210e0c360b0240200341ff0171450d00200241003a00800d0b2008450d340c330b41002105200241003a00800d2003417e6a2109417d21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b200241c00c6a41086a2205200241ef0c6a290000370300200241c00c6a41106a2206200241f70c6a290000370300200241c00c6a41186a2209200241ff0c6a2d00003a0000200220022900e70c3703c00c200320076b2208417e6a4110490d3420022d00e20c210e20022f01e00c210f20022800e30c2103200420076a220441026a290000210a2004410a6a290000210b20012008416e6a3602042001200441126a360200200241a00c6a41186a20092d00003a0000200241a00c6a41106a2006290300370300200241a00c6a41086a200529030022123703002002200b3703880a2002200a3703800a200f200e41107472220141ffffff07712204411076210f2004410876211020022903c00c2213422088a72105200241b10c6a290000210a20022900a90c210b2013a721092012a721084107210e410021060c350b200541ff0171450d33200241003a00800d0c330b41002105200241003a00800d2003417e6a21072003417d6a21030240034020072005460d01200241e00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800d2003417f6a21032006210520064120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a2900003703004108210e20024180096a41086a200241ef0c6a2900002212370300200241800a6a41086a20024190066a41086a290000370300200241800a6a41106a20024190066a41106a29000037030020022002290090063703800a20022f01e00c20022d00e20c411074722201411076210f2001410876211020022900e70c2213422088a7210520022800e30c210320024191096a290000210a200229008909210b2013a721092012a721080c340b200541ff0171450d32200241003a00800d0c320b20080d300c310b2006450d2d20042d0001210520012003417e6a3602042001200441026a360200200541044b0d2d02400240024002400240024020050e050001020304000b200241e00c6a200110910220022d00d80d4102460d32200241d80b6a41086a200241e00c6a41186a2d00003a000020024180086a41086a2002418c0d6a29020037030020024190086a200241940d6a29020037030020024180086a41186a2002419c0d6a280200360200200220022903f00c3703d80b200220022902840d3703800820022903e80c210a20022903e00c211220022d00f90c210620022f01fa0c210e20022802fc0c210420022802800d210520022902c40d220b42ffffffff0f832113200b428080808070832116200241d80d6a290300211b20022903d00d211a20022802cc0d210320022802c00d210720022802bc0d210820022f01ba0d210f20022d00b90d211020022d00b80d210d20022903b00d211920022903a80d211820022903a00d210b4101210c0c330b20024198046a2001109903200229039804a70d3120022903a004210a20024190046a200110e6012002280290040d3120072802002002280294042204490d312004417f4c0d160240024020040d00410121090c010b200410332209450d0c20072802002004490d2920092001280200200410e8061a200128020422032004490d282001200320046b3602042001200128020020046a3602000b2009450d312004ad220b422086200b842112200241d80b6a41086a20024190066a41086a2d00003a000020024180086a41086a200241e00c6a41086a29020037030020024180086a41106a200241e00c6a41106a29020037030020024180086a41186a200241e00c6a41186a28020036020020022002290390063703d80b200220022902e00c370380084102210c42002113420021160c320b200241e00c6a2001109b0320022d00e00c4102460d3020024198066a200241ec0c6a29020037030020024190066a41106a200241f40c6a290200370300200241a8066a200241fc0c6a280200360200200220022902e40c37039006200241800d6a280200210420022802e00c2109200241c0046a2001109c0320022903c004a70d30200241c0046a41106a290300210a20022903c8042112200241b0046a200110990320022903b004a70d3020022903b804210b200241a8046a200110e60120022802a8040d30200728020020022802ac042203490d302003417f4c0d150240024020030d00410121050c010b200310332205450d0b20072802002003490d0320052001280200200310e8061a200128020422062003490d292001200620036b3602042001200128020020036a3602000b2005450d3020024180096a41186a20024190066a41186a280200220136020020024194086a200a370200200241d80b6a41086a20013a00002002201237028c0820022003ad220a422086200a84370380082002200241a0066a2903003703d80b20024190066a41086a290300210a200229039006211220022d00c80c210d20022d00c90c211020022f01ca0c210f20022802d00c210720022802cc0c210820022d009909210620022f019a09210e4103210c4200211341002111420021160c310b200241f0046a2001109c0320022903f004a70d2f20024180056a290300210a20022903f804210b200241e0046a200110990320022903e004a70d2f20022903e804211241002103200241003a00800d2007280200417f6a2104024002400240024003402004417f460d01200241e00c6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00800d2004417f6a21042005210320054120470d000b200241880c6a200241ef0c6a290000370300200241800c6a41106a200241f70c6a290000370300200241980c6a200241ff0c6a2d00003a0000200220022900e70c3703800c20022800e30c210920022f01e00c210320022d00e20c2106200241d8046a200110e60120022802d8040d33200728020020022802dc042205490d332005417f4c0d1820050d014101210441010d020c330b200341ff0171450d32200241003a00800d0c320b200510332204450d0b20072802002005490d0120042001280200200510e8062107200128020422082005490d2a2001200820056b3602042001200128020020056a3602002007450d310b2002418c086a200a370200200241d80b6a41086a200241980c6a2d00003a00002002200b37028408200220123702940820022005360280082002200241900c6a2903003703d80b200320064110747222014180feff07714108762111200241800c6a41086a290300210a20022903800c21124104210c42002113420021160c310b2004102f0c2f0b41002105200241003a00800d2003417e6a21092003417d6a21060240024002400240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b200241a80c6a200241ef0c6a290000370300200241a00c6a41106a200241f70c6a290000370300200241b80c6a200241ff0c6a2d00003a0000200220022900e70c3703a00c2003417e6a2007460d3220022d00e20c210f20022f01e00c211020022800e30c2109200420076a220841026a2d00002104200120063602042001200841036a360200200441014b0d324100210620040e020201020b200541ff0171450d31200241003a00800d0c310b41002104200241003a00800d200720036b41036a2106200320076b417c6a21030340200620046a450d02200241e00c6a20046a200820046a220541036a2d00003a0000200120033602042001200541046a3602002002200441016a22053a00800d2003417f6a21032005210420054120470d000b20024180096a41186a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024188096a200241ef0c6a290000220a370300200241850c6a20022800e30c22014110763a0000200220013b00830c200220022d00e20c22043a00820c200220022f01e00c22033b01800c20024191096a2900002113200229008909210b200220022900e70c3700c10c200220014118763a00c00c2003200441107472210e200aa7210d4101210620022802c00c21050b200241af066a2203200241b80c6a2d00003a0000200220022802c40c360280082002200241c00c6a41086a2d00003a00840820022010200f4110747222013b0190062002200936009306200220022903a00c37009706200220014110763a0092062002200241a00c6a41086a29030037009f062002200241a00c6a41106a2903003700a70620022801820c2104200229009f06210a2002290097062112200241d80b6a41086a20032d00003a0000200220022900a7063703d80b2002418e086a20133701002002200b370186082002200d3a00850820014180feff077141087621114105210c42002113420021160c300b200441ff0171450d2e200241003a00800d0c2e0b2005102f0c2d0b200241e00c6a2001109e03024020022802e00c4104460d0020024190066a41286a200241e00c6a41286a280200220136020020024190066a41206a200241e00c6a41206a290300220a37030020024190066a41186a200241e00c6a41186a290300220b37030020024190066a41106a200241e00c6a41106a290300221237030020024190066a41086a200241e00c6a41086a2903002213370300200220022903e00c22163703900620004112360200200020163702042000410c6a2013370200200041146a20123702002000411c6a200b370200200041246a200a3702002000412c6a2001360200200041306a200241900f6a41800210e8061a0c420b2000411b3602000c410b02402006450d0020042d0001210520012003417e6a22063602042001200441026a36020020050d0020064104490d002004280002210520012003417a6a3602042001200441066a36020020024198056a200110e6012002280298050d002007280200200228029c052204490d002004417f4c0d11024002400240024002400240024020040d004101210e0c010b20041033220e450d0c20072802002004490d01200e2001280200200410e8061a200128020422032004490d2c2001200320046b3602042001200128020020046a3602000b200e450d052004ad220a422086200a84210b20024190056a200110e601024002402002280290050d00200228029405220c2007280200410c6e22042004200c4b1b220dad420c7e220a422088a70d18200aa72204417f4c0d180240024020040d004104210f0c010b2004102d220f450d0e2004410c6e210d0b024002400240200c450d00410021084100210341002109034020024188056a200110e6012002280288050d032007280200200228028c052204490d032004417f4c0d1c0240024020040d00410121100c010b200410332210450d1220072802002004490d0320102001280200200410e8061a200128020422062004490d332001200620046b3602042001200128020020046a3602000b200941016a210602402009200d470d0020082006200820064b1bad420c7e220a422088a70d4c200aa7220d4100480d4c0240024020090d00200d102d210f0c010b200f2003200d1031210f0b200f450d12200d410c6e210d0b200f20036a22092010360200200941046a2004ad220a422086200a84370200200841026a21082003410c6a210320062109200c2006470d000b0b200ba72103200f450d03200728020022064104490d0520012802002209280000211020012006417c6a22043602042001200941046a36020020044104490d06200b422088a72111200928000421152001200641786a22083602042001200941086a36020041002104200241003a00a00d200641776a2106034020082004460d08200241e00c6a20046a200920046a220741086a2d00003a0000200120063602042001200741096a3602002002200441016a22073a00a00d2006417f6a210620072104200741c000470d000b200e450d09200241e00c6a41386a290300210a200241e00c6a41086a290300210b20022903900d211220022903e00c2113200228028c0d210120022902840d211620022802800d210420022802fc0c210620022f01fa0c210720022d00f80c210920022903f00c211b200020022d00f90c3a00412000200536020420004113360200200041e0006a200a370200200041d8006a2012370200200041306a200b370200200041286a2013370200200041d4006a2001360200200041cc006a2016370200200041c8006a2004360200200041c4006a2006360200200041c2006a20073b0100200041c0006a20093a0000200041386a201b370200200041246a2015360200200041206a20103602002000411c6a200c360200200041186a200d360200200041146a200f360200200041106a20113602002000410c6a2003360200200041086a200e360200200041e8006a200241900f6a41c80110e8061a0c4a0b2010102f0b02402009450d00200f210103400240200141046a280200450d002001280200102f0b2001410c6a2101200341746a22030d000b0b200d450d00200f102f0b200ba721030b2003450d050b200e102f0c040b02402003450d00200e102f0b0240200c450d00200c410c6c2104200f210103400240200141046a280200450d002001280200102f0b2001410c6a2101200441746a22040d000b0b200d0d020c030b02402003450d00200e102f0b0240200c450d00200c410c6c2104200f210103400240200141046a280200450d002001280200102f0b2001410c6a2101200441746a22040d000b0b200d0d010c020b0240200441ff0171450d00200241003a00a00d0b02402003450d00200e102f0b0240200c450d00200c410c6c2104200f210103400240200141046a280200450d002001280200102f0b2001410c6a2101200441746a22040d000b0b200d450d010b200f102f0b2000411b3602000c400b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c3f0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c3e0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c3d0b2006450d2620042d0001210520012003417e6a22233602042001200441026a3602002005410a4b0d26410421244200211802400240024002400240024002400240024002400240024020050e0b0001020b03040506070809000b41002105200241003a00b00f2003417e6a21072003417d6a21030240034020072005460d01200241900f6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00b00f2003417f6a21032006210520064120470d000b200241800c6a41086a2002419f0f6a290000220b370300200241800c6a41106a200241a70f6a2900002213370300200241980c6a2201200241af0f6a2d00003a0000200220022900970f22123703800c20022800930f210620022f01900f210420022d00920f21032001310000210a200228028c0c211420023502940c2116200241f00b6a41086a200241800a6a41086a290000370300200220022900800a3703f00b200241d80b6a41106a200241e00c6a41106a290000370300200241d80b6a41086a200241e00c6a41086a290000370300200220022900e00c3703d80b200241c00b6a41106a20024190066a41106a290000370300200241c00b6a41086a20024190066a41086a29000037030020022002290090063703c00b200241a80b6a41106a20024180096a41106a290000370300200241a80b6a41086a20024180096a41086a29000037030020022002290080093703a80b200241900b6a41106a20024180086a41106a290000370300200241900b6a41086a20024180086a41086a29000037030020022002290080083703900b2004200341107472210e2016200a42208684210a2012422088a72108200b4280feffff0f83420888a721252012a721092013a72111200ba7210d410121244100211d0c0b0b200541ff0171450d31200241003a00b00f0c310b200241a0056a200110e60120022802a0050d3020022802a4052208200728020041c8006e2204200420084b1b2209ad42c8007e220a422088a70d16200aa72204417f4c0d160240024020040d00410421060c010b2004102d2206450d0c200441c8006e21090b02402008450d00200241e00c6a410c6a210e4100210f41002105410021040340200241e00c6a200110a9010240024020022d00e00c22104106460d0020024180096a41086a2211200e41086a29020037030020024180096a41106a2215200e41106a2902003703002002200e2902003703800920022802e80c210d20022802e40c210c20022f01e20c211420022d00e10c211d200241900f6a200110a90120022d00900f4106470d0120104101470d00200d450d00200c102f0b02402004450d00200620056a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b2004200141c8006a2201470d000b0b2009450d330c320b200441016a210320024180086a41106a221c201529030037030020024180086a41086a2215201129030037030020024190066a41086a2211200241900f6a41086a29030037030020024190066a41106a221e200241900f6a41106a29030037030020024190066a41186a221f200241900f6a41186a29030037030020024190066a41206a2220200241900f6a41206a280200360200200220022903800937038008200220022903900f37039006024020042009470d00200f2003200f20034b1bad42c8007e220a422088a70d48200aa722094100480d480240024020040d002009102d21060c010b200620052009103121060b2006450d0e200941c8006e21090b200620056a220420103a0000200441086a200d360200200441046a200c360200200441026a20143b0000200441016a201d3a00002004410c6a200229038008370200200441146a20152903003702002004411c6a201c290300370200200441246a2002290390063702002004412c6a2011290300370200200441346a201e2903003702002004413c6a201f290300370200200441c4006a2020280200360200200f41026a210f200541c8006a21052003210420082003470d000b0b2006450d30200241900f6a200110a90102400240024002400240024002400240024020022d00900f220d4106460d00200241b00f6a280200210c200241a80f6a290300210b200241a40f6a220428020021102002419c0f6a2203290200210a200241900f6a41086a2205280200211120022802940f211420022f00910f210e20022d00930f210f200241900f6a200110a90120022d00900f221d4106460d01200241800a6a41086a200241ac0f6a221f290200370300200220042902003703800a200329020021122005280200211c20022802940f211520023100930f211820023100920f211720023100910f2126200241900f6a200110a90120022d00900f221e4106460d0220024180086a41086a200241a40f6a220429020037030020024180086a41106a201f29020037030020022002419c0f6a220329020037038008200241900f6a41086a2205280200211f20022802940f212020022d00930f212720022d00920f212820022d00910f2122200241900f6a200110a90120022d00900f22214106460d0320024180096a41086a200429020037030020024180096a41106a200241ac0f6a220429020037030020022003290200370380092005280200212920022802940f212a20022f01920f212b20022d00910f212c200241900f6a200110a90120022d00900f222d4106460d0620024190066a41086a200241a40f6a290200370300200241a0066a200429020037030020022002419c0f6a29020037039006200241900f6a41086a280200212e20022802940f212f20072802002204450d0720022d00930f213020022d00920f213120022d00910f2132200128020022032d0000210520012004417f6a22073602042001200341016a360200200541014b0d07420021134100212441002123420021164100213320050e020504050b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d370c380b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d360c370b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d350c360b0240201e4101470d00201f450d002020102f0b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d340c350b2007450d0220032d0001212420012004417e6a22053602042001200341026a3602002005450d0220032d0002210720012004417d6a22053602042001200341036a3602002005450d0220032d0003213420012004417c6a22053602042001200341046a3602002005450d0220032d0004213320012004417b6a22053602042001200341056a3602002005450d0220032d0005213520012004417a6a22053602042001200341066a3602002005450d0220032d000621362001200441796a22053602042001200341076a3602002005450d0220032d000721372001200441786a22053602042001200341086a3602002005450d0220032d000821382001200441776a22053602042001200341096a3602002005450d0220032d000921392001200441766a220536020420012003410a6a3602002005450d0220032d000a213a2001200441756a220536020420012003410b6a3602002005450d0220032d000b213b2001200441746a220536020420012003410c6a3602002005450d0220032d000c213c2001200441736a220536020420012003410d6a3602002005450d0220032d000d213d2001200441726a220536020420012003410e6a3602002005450d0220032d000e21252001200441716a220536020420012003410f6a3602002005450d0220032d000f213e2001200441706a22053602042001200341106a3602002005450d0220032d0010213f20012004416f6a22053602042001200341116a3602002005450d0220032d0011214020012004416e6a22053602042001200341126a3602002005450d0220032d0012214120012004416d6a22053602042001200341136a3602002005450d0220032d0013214220012004416c6a22053602042001200341146a3602002005450d022003310014211320012004416b6a3602042001200341156a3602002002203341187420344110747220074108747222232024723602900f2002203cad423886203bad42ff018342308684203aad42ff0183422886842039ad42ff0183422086842038ad42ff01834218868422162037ad42ff0183421086842036ad42ff0183420886842035ad42ff0183843702940f201642188820134238862042ad42ff0183423086842041ad42ff0183422886842040ad42ff018342208684203fad42ff018342188684203ead42ff0183421086842025ad42ff018342088684203dad42ff01838422164228868421132016421888211620022800930f2134410121330b200241900f6a200110a90120022d00900f22354106460d02200241e00c6a41086a2204200241a40f6a2203290200370300200241e00c6a41106a2205200241ac0f6a220729020037030020022002419c0f6a2902003703e00c200241900f6a41086a223b280200213620022802940f213720022d00930f213a20022d00920f213920022d00910f2138200241900f6a200110a90120022d00900f4106470d0b024020354101470d002036450d002037102f0b0240202d4101470d00202e450d00202f102f0b024020214101470d002029450d00202a102f0b0240201e4101470d00201f450d002020102f0b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d320c330b024020214101470d002029450d00202a102f0b0240201e4101470d00201f450d002020102f0b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d310c320b0240202d4101470d00202e450d00202f102f0b024020214101470d002029450d00202a102f0b0240201e4101470d00201f450d002020102f0b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d300c310b0240202d4101470d00202e450d00202f102f0b024020214101470d002029450d00202a102f0b0240201e4101470d00201f450d002020102f0b0240201d4101470d00201c450d002015102f0b0240200d4101470d002011450d002014102f0b02402008450d002006200841c8006c6a2104200621010340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012004470d000b0b20090d2f0c300b200241a8056a200110e60120022802a8050d2f20022802ac05220e200728020041c4006e22042004200e4b1b2210ad42c4007e220a422088a70d15200aa72204417f4c0d150240024020040d00410421060c010b2004102d2206450d0b200441c4006e21100b0240200e450d00200241900f6a410772210d20024191096a210c41002109410021080340200241003a00b00f2008220f41016a21082007280200417f6a2104410021030240024002400240024003402004417f460d01200241900f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00b00f2004417f6a21042005210320054120470d000b20024180096a41086a200d41086a29000037030020024180096a41106a200d41106a29000037030020024180096a41186a200d41186a2d00003a00002002200d2900003703800920022800930f210520022f01900f210320022d00920f2111200241900f6a200110a90120022d00900f22154106460d0120022d00930f211420022f00910f211d200c290000210a200229008909210b20022f01b20f211c20022d00b10f211e20022d00b00f211f20022802ac0f212020022802a80f212120022802a40f212220022802a00f2128200228029c0f212720022f019a0f212920022d00990f212a20022d00980f212d20022802940f212c20022d008809212b20022903800921122010200f470d04200f41017422042008200420084b1bad42c4007e2213422088a70d4b2013a722044100480d4b200f0d022004102d21060c030b200341ff0171450d00200241003a00b00f0b0240200f450d00200641286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102f0b200141c4006a2101200941bc7f6a22090d000b0b20100d330c340b2006200f41c4006c2004103121060b2006450d0d200441c4006e21100b2006200f41c4006c6a2204201d201441107472220f3b00212004200320114110747222034180feff0771410876410874200341ff0171723b01002004200b3702102004201c3b00422004201e3a00412004201f3a00402004202036003c2004202136003820042022360034200420283600302004202736002c200420293b002a2004202a3a00292004202d3a00282004202c360024200420153a00202004202b3a000f2004201237000720042005360003200441236a200f4110763a0000200441026a20034110763a0000200441186a200a370200200941c4006a21092008200e470d000b0b2006450d2f200241f00b6a41086a200241c00c6a41086a290300370300200241d80b6a41086a200241e00c6a41086a290200370300200241d80b6a41106a200241e00c6a41106a290200370300200241c00b6a41086a20024190066a41086a290300370300200241c00b6a41106a20024190066a41106a290300370300200241a80b6a41106a20024180086a41106a290200370300200241a80b6a41086a20024180086a41086a290200370300200220022903c00c3703f00b200220022902e00c3703d80b20022002290390063703c00b20022002290280083703a80b200241900b6a41106a200241800a6a41106a290300370300200241900b6a41086a200241800a6a41086a290300370300200220022903800a3703900b200ead4220862010ad84220a422088a72108200aa72109410321244100210e4100211d0c080b200241c8056a200110e60120022802c8050d2e20022802cc052106200241b0056a2001109c0320022903b005a70d2e200241b0056a41106a290300210a20022903b805210b200241f00b6a41086a20024180086a41086a290300370300200241d80b6a41086a200241900f6a41086a290200370300200241d80b6a41106a200241900f6a41106a290200370300200241c00b6a41086a200241e00c6a41086a290300370300200241c00b6a41106a200241e00c6a41106a290300370300200241a80b6a41106a20024190066a41106a290200370300200241a80b6a41086a20024190066a41086a29020037030020022002290380083703f00b200220022902900f3703d80b200220022903e00c3703c00b20022002290290063703a80b200241900b6a41106a20024180096a41106a290300370300200241900b6a41086a20024180096a41086a29030037030020022002290380093703900b200b422088a72108200a422088a72114200a4280feffff0f83420888a72125200ba72109200aa7210d410521244100211d0c070b20234104490d2d2004280002210620012003417a6a360204410621242001200441066a360200200241f00b6a41086a20024180086a41086a290300370300200241d80b6a41086a200241900f6a41086a290200370300200241d80b6a41106a200241900f6a41106a290200370300200241c00b6a41086a200241e00c6a41086a290300370300200241c00b6a41106a200241e00c6a41106a29030037030020022002290380083703f00b200220022902900f3703d80b200220022903e00c3703c00b200241a80b6a41106a20024190066a41106a290200370300200241a80b6a41086a20024190066a41086a290200370300200241900b6a41086a20024180096a41086a290300370300200241900b6a41106a20024180096a41106a29030037030020022002290290063703a80b20022002290380093703900b41002108410021254100210d4100211d0c060b200241e8056a200110e60120022802e8050d2c20022802ec052106200241d0056a2001109c0320022903d005a70d2c200241d0056a41106a290300210a20022903d805210b200241f00b6a41086a20024180086a41086a290300370300200241d80b6a41086a200241900f6a41086a290200370300200241d80b6a41106a200241900f6a41106a290200370300200241c00b6a41086a200241e00c6a41086a290300370300200241c00b6a41106a200241e00c6a41106a290300370300200241a80b6a41106a20024190066a41106a290200370300200241a80b6a41086a20024190066a41086a29020037030020022002290380083703f00b200220022902900f3703d80b200220022903e00c3703c00b20022002290290063703a80b200241900b6a41106a20024180096a41106a290300370300200241900b6a41086a20024180096a41086a29030037030020022002290380093703900b200b422088a72108200a422088a72114200a4280feffff0f83420888a72125200ba72109200aa7210d410721244100211d0c050b200241f0056a200110e60120022802f0050d2b20022802f405211041002103200241003a00b00f2007280200417f6a2104024003402004417f460d01200241900f6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00b00f2004417f6a21042005210320054120470d000b20024190066a410f6a2201200241900f6a410f6a29000037000020024190066a411f6a2204200241900f6a411f6a2d00003a0000200220022d00920f22033a009206200220022f01900f22053b019006200220022800930f220636009306200220022900970f370097062002200241a70f6a2900003700a7062001350000210b2004310000210a4108212420022800a706211120022800a3062114200229009706211220023500ab062113200241f00b6a41086a200241800c6a41086a290300370300200220022903800c3703f00b200241d80b6a41106a200241e00c6a41106a290200370300200241d80b6a41086a200241e00c6a41086a290200370300200220022902e00c3703d80b200241c00b6a41106a20024180096a41106a290300370300200241c00b6a41086a20024180096a41086a29030037030020022002290380093703c00b200241a80b6a41106a20024180086a41106a290200370300200241a80b6a41086a20024180086a41086a29020037030020022002290280083703a80b200241900b6a41106a200241800a6a41106a290300370300200241900b6a41086a200241800a6a41086a290300370300200220022903800a3703900b2005200341107472210e2013200a42208684210a200b420888a721252012422088a72108200ba7210d2012a721094100211d0c050b200341ff0171450d2b200241003a00b00f0c2b0b200241f8056a200110e60120022802f8050d2a200728020022044108490d2a20022802fc05210620012802002203290000210a2001200441786a3602042001200341086a360200200a4280025a0d2a200241f00b6a41086a20024180086a41086a290300370300200241d80b6a41086a200241900f6a41086a290200370300200241d80b6a41106a200241900f6a41106a290200370300200241c00b6a41086a200241e00c6a41086a290300370300200241c00b6a41106a200241e00c6a41106a290300370300200241a80b6a41106a20024190066a41106a290200370300200241a80b6a41086a20024190066a41086a29020037030020022002290380083703f00b200220022902900f3703d80b200220022903e00c3703c00b20022002290290063703a80b200241900b6a41106a20024180096a41106a290300370300200241900b6a41086a20024180096a41086a29030037030020022002290380093703900b200a422088a72108200aa72109410921244100211d0c030b20024180066a200110e6012002280280060d292002280284062106200241900f6a2001109b0320022d00900f4102460d29200241800a6a41086a200241900f6a41086a290300370300200220022903900f3703800a20072802002203450d29200241ac0f6a2902002113200241a40f6a290200210a200241a00f6a2802002111200128020022052d0000210420012003417f6a22073602042001200541016a360200200441064b0d29420021124100211c4100210c0240024002400240024002400240024020040e0707000501020304070b20074110490d30200541096a29000021122005290001210b20012003416f6a3602042001200541116a360200200b422088a7211c200ba721154101210c0c060b4103210c0c040b4104210c0c030b4105210c0c020b4106210c0c010b4102210c0b0b200241c00c6a41086a200241800a6a41086a2903002216370300200241f00b6a41086a200241a00c6a41086a290300370300200241d80b6a41086a200241e00c6a41086a290200370300200241d80b6a41106a200241e00c6a41106a290200370300200241c00b6a41086a20024190066a41086a290300370300200241c00b6a41106a20024190066a41106a290300370300200220022903800a221b3703c00c200220022903a00c3703f00b200220022902e00c3703d80b20022002290390063703c00b20022802cc0c2114200241a80b6a41106a20024180096a41106a290200370300200241a80b6a41086a20024180096a41086a290200370300200241900b6a41106a20024180086a41106a290300370300200241900b6a41086a20024180086a41086a29030037030020022002290280093703a80b20022002290380083703900b2013422088210b201b422088a7210820164280feffff0f83420888a72125201ba721092013a721102016a7210d410a21244100211d420021180c020b200241900f6a2001109b0320022d00900f4102460d2820024198096a200241ac0f6a28020036020020024180096a41106a200241a40f6a290200221337030020024180096a41086a2002419c0f6a290200220b370300200241f00b6a41086a200241c00c6a41086a290300370300200220022902940f221237038009200220022903c00c3703f00b200241b00f6a280200211020022802900f2106200229029409210a200228028c092114200241d80b6a41106a200241e00c6a41106a290200370300200241d80b6a41086a200241e00c6a41086a290200370300200220022902e00c3703d80b200241c00b6a41106a20024190066a41106a290300370300200241c00b6a41086a20024190066a41086a29030037030020022002290390063703c00b200241a80b6a41106a20024180086a41106a290200370300200241a80b6a41086a20024180086a41086a29020037030020022002290280083703a80b200241900b6a41106a200241800a6a41106a290300370300200241900b6a41086a200241800a6a41086a290300370300200220022903800a3703900b2012422088a72108200b4280feffff0f83420888a721252012a721092013a72111200ba7210d410b21244100210e4100211d0c010b200e200f411074722125200241f00b6a41086a200241800a6a41086a290300370300200241d80b6a41086a20024180086a41086a290300370300200241d80b6a41106a20024180086a41106a290300370300200241c00b6a41106a20024180096a41106a290300370300200241c00b6a41086a20024180096a41086a290300370300200220022903800a3703f00b20022002290380083703d80b20022002290380093703c00b200729020021192003290200211a200241900f6a41106a280200213d203b290300211b20022802940f213c20022802900f213b200241a80b6a41106a20024190066a41106a290300370300200241a80b6a41086a20024190066a41086a290300370300200241900b6a41086a2004290300370300200241900b6a41106a200529030037030020022002290390063703a80b200220022903e00c3703900b201842108620174208868420268421182023202472210f410221240b200241800b6a41086a2201200241f00b6a41086a290300370300200241e80a6a41086a2204200241d80b6a41086a290300370300200241e80a6a41106a2203200241d80b6a41106a290300370300200241d00a6a41086a2205200241c00b6a41086a290300370300200241d00a6a41106a2207200241c00b6a41106a290300370300200241b80a6a41106a2223200241a80b6a41106a290300370300200241b80a6a41086a223e200241a80b6a41086a290300370300200220022903f00b3703800b200220022903d80b3703e80a200220022903c00b3703d00a200220022903a80b3703b80a200241a00a6a41106a223f200241900b6a41106a290300370300200241a00a6a41086a2240200241900b6a41086a290300370300200220022903900b3703a00a2000410b6a200e4110763a00002000200e3b0009200041186a2025410874ad200dad42ff0183843e0200200041106a2008ad4220862009ad84370200200041c8006a2012370200200041c4006a201c360200200041c0006a2015360200200041386a2018422886201dad42ff018342208684200cad84370200200041306a200b3702002000412c6a2010360200200041246a200a370200200041206a20113602002000411c6a20143602002000410c6a2006360200200041086a20243a000020004117360200200041e8006a201f360200200041e4006a2020360200200020273a0063200020283a0062200020223a0061200041e0006a201e3a0000200041d0006a20022903800b370200200041d8006a2001290300370200200041fc006a2003290300370200200041f4006a2004290300370200200041ec006a20022903e80a3702002000418c016a202936020020004188016a202a3602002000202b3b0086012000202c3a00850120004184016a20213a0000200041a0016a200729030037020020004198016a200529030037020020004190016a20022903d00a370200200041b0016a202e360200200041ac016a202f360200200020303a00ab01200020313a00aa01200020323a00a901200041a8016a202d3a0000200041c4016a2023290300370200200041bc016a203e290300370200200041b4016a20022903b80a370200200041d4016a2036360200200041d0016a20373602002000203a3a00cf01200020393a00ce01200020383a00cd01200041cc016a20353a0000200041e8016a203f290300370200200041e0016a2040290300370200200041d8016a20022903a00a37020020004197026a200f4110763a00002000200f3b009502200041a4026a20163700002000419c026a20133700002000418c026a201937020020004184026a201a37020020004198026a203436000020004194026a20333a000020004180026a203d360200200041f8016a201b370200200041f4016a203c360200200041f0016a203b3602000c3c0b2006450d0820042d0001210520012003417e6a221d3602042001200441026a3602002005410b4b0d084107210f024002400240024002400240024020050e0c0001020304050d0608090a0b000b201d4110490d0e2004410a6a290000210a2004290002210b20012003416e6a3602042001200441126a3602004101210f420021120c0c0b201d4104490d0d2004280002210820012003417a6a3602042001200441066a3602004102210f0c0b0b41002105200241003a00800d2003417e6a2109417d21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024180096a41086a200241ef0c6a290000220a37030020024190066a41086a200241ff0c6a2d00003a00002002200241f70c6a29000037039006200320076b2203417e6a4110490d0d20022d00e20c210620022f01e00c210920022800e30c210820022900e70c210b200420076a2204410e6a280000210d200441066a2900002112200441026a280000211020012003416e6a22053602042001200441126a220736020020054110490d0d200920064110747222064110762114200641087621152004411a6a290000211b2007290000211620012003415e6a3602042001200441226a360200200229039006211320022d009806210c4103210f410021110c0b0b200541ff0171450d0c200241003a00800d0c0c0b4104210f201d4104490d0b2004280002210820012003417a6a3602042001200441066a3602000c090b200241e00c6a2001109b0320022d00e00c4102460d0a20072802002203450d0a200241ec0c6a290200210a200241800d6a280200210e200241fe0c6a2f01002111200241fd0c6a2d00002109200241fc0c6a2d0000210c200241f40c6a290200211320022902e40c210b20022802e00c2108200128020022052d0000210420012003417f6a3602042001200541016a360200200441014b0d0a410021060240024020040e020100010b410121060b200228029c06210d200229029406211220022802900621104105210f0c080b201d450d0920042d0002210520012003417d6a3602042001200441036a360200200541014b0d094200210b4106210f410021064200210a20050e020706070b41002105200241003a00800d2003417e6a2108417d2106024002400240034020082005460d01200241e00c6a20056a200420056a220941026a2d00003a00002001200320066a3602042001200941036a3602002002200541016a22093a00800d2006417f6a21062009210520094120470d000b200241880c6a200241ef0c6a290000370300200241800c6a41106a200241f70c6a290000370300200241980c6a200241ff0c6a2d00003a0000200220022900e70c3703800c200320096b2203417e6a4104490d0b20022d00e20c210520022f01e00c210620022800e30c2108200420096a220441026a280000210e20012003417a6a3602042001200441066a36020020024188066a200110e6012002280288060d0b2007280200200228028c062204490d0b2004417f4c0d0e20040d01410121100c020b200541ff0171450d0a200241003a00800d0c0a0b200410332210450d0120072802002004490d0820102001280200200410e8061a200128020422032004490d232001200320046b3602042001200128020020046a3602000b2010450d082004ad220a422086200a84211220024190066a41186a200241800c6a41186a2d0000220c3a00002006200541107472220641ffffff0771220141107621144108210f20014108762115200241800c6a41106a2903002113200241800c6a41086a290300210a20022903800c210b0c060b1036000b4109210f0c040b41002105200241003a00800d2003417e6a21092003417d6a2106024002400240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b200241a80c6a200241ef0c6a290000370300200241a00c6a41106a200241f70c6a290000370300200241b80c6a200241ff0c6a2d00003a0000200220022900e70c3703a00c2003417e6a2007460d0820022d00e20c210520022f01e00c210920022800e30c2108200420076a220341026a2d00002104200120063602042001200341036a360200200441014b0d08200920054110747221064100210920040e020201020b200541ff0171450d07200241003a00800d0c070b410121090b200220063b0190062002200836009306200220064110763a009206200641ffffff07712201411076211420014108762115200241a00c6a41086a290300210a200241a00c6a41106a2903002113200241b80c6a2d0000210c20022903a00c210b410a210f0c030b41002105200241003a00800d2003417e6a21092003417d6a21060240034020092005460d01200241e00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00800d2006417f6a21062007210520074120470d000b20024198096a200241ff0c6a2d00003a000020024180096a41106a200241f70c6a29000037030020024180096a41086a200241ef0c6a290000220a3703002003417e6a2007460d0520022d00e20c210320022f01e00c210520022800e30c210820022900e70c210b20024191096a29000021122002290089092113200420076a220441026a2d00002109200120063602042001200441036a360200200941034f0d052005200341107472220641087621152002200aa73a00c80c200220133700c90c20134238882012420886842113200641107621142012423888a7210c20022903c80c210a410b210f410021110c030b200541ff0171450d04200241003a00800d0c040b201d4104490d032004280002210820012003417a6a3602042001200441066a3602004200210b410c210f410021144200210a0c010b4200210b410121064200210a0b200020113b012a200020093a0029200020143a000b200020153a000a200020063a000920004118360200200041c8006a201b370200200041c0006a2016370200200041186a200a370200200041106a200b3702002000413c6a200d360200200041346a2012370200200041306a20103602002000412c6a200e360200200041286a200c3a0000200041206a20133702002000410c6a2008360200200041086a200f3a0000200041d0006a200241900f6a41e00110e8061a0c340b2010102f0b2000411b3602000c320b200241e00c6a2001109f03024020022d00e00c410a460d0020024190066a200241e00c6a41c40010e8061a20004119360200200041046a20024190066a41c40010e8061a200041c8006a200241900f6a41e80110e8061a0c320b2000411b3602000c310b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541024b0d004101210402400240024020050e03020001020b200241e00c6a2001109b034102210420022d00e00c4102460d02200241f40c6a2902002112200241ec0c6a290200210b200241fc0c6a290200210a200241e80c6a280200210320022802e40c210620022802e00c21090c010b200241e00c6a2001109b0320022d00e00c4102460d01200728020022054110490d01200241f40c6a2902002112200241ec0c6a290200210b200241fc0c6a290200210a200241e00c6a41086a280200210320022802e40c210620022802e00c21092001280200220441086a2900002116200429000021132001200441106a3602002001200541706a220736020420074110490d01200441186a290000211a2004290010211b2001200541606a22073602042001200441206a36020020074104490d012004280020210820012005415c6a3602042001200441246a360200410321040b2000411a360200200041c8006a201a370200200041c0006a201b370200200041386a2016370200200041306a2013370200200041206a2012370200200041186a200b370200200041d0006a2008360200200041286a200a370200200041146a2003360200200041106a20063602002000410c6a2009360200200041086a2004360200200041d8006a200241900f6a41d80110e8061a0c310b2000411b3602000c300b103d000b20042003104b000b20042003104b000b20042003104b000b20032005104b000b20052009104b000b20042005104b000b20042003104b000b20042005104b000b20032005104b000b2004102f0b2000411b3602000c240b20042003104b000b20042003104b000b20042005104b000b20092003104b000b20082003104b000b20042003104b000b2009102f0c080b20032006104b000b20052008104b000b20042003104b000b20042006104b000b20042003104b000b2000411b3602000c170b2006102f0b2000411b3602000c150b2000411b3602000c140b200241c00b6a41086a2215200241d80b6a41086a2d00003a0000200241800a6a41086a221420024180086a41086a290300370300200241800a6a41106a221d20024180086a41106a290300370300200241800a6a41186a221c20024180086a41186a280200360200200220022903d80b3703c00b20022002290380083703800a200041186a200a370200200041106a20123702002000410c6a2009360200200020113b000a200020013a0009200041086a200c3a000020004111360200200041306a20053602002000412c6a20043602002000412a6a200e3b0100200020063a0029200041206a20022903c00b370200200041286a20152d00003a0000200041346a20022903800a3702002000413c6a2014290300370200200041c4006a201d290300370200200041cc006a201c28020036020020004188016a201b37020020004180016a201a370200200041fc006a2003360200200041f4006a2016201384370200200041f0006a2007360200200041ec006a2008360200200041ea006a200f3b0100200020103a0069200041e8006a200d3a0000200041e0006a2019370200200041d8006a2018370200200041d0006a200b37020020004190016a200241900f6a41a00110e8061a0c130b2004102f0b2000411b3602000c110b200241d80b6a41106a220d200241800a6a41106a290300370300200241d80b6a41086a220c200241800a6a41086a290300370300200220022903800a3703d80b200041216a200a370000200041196a200b3700002000412c6a20043602002000412a6a20063b0100200020073a0029200041186a20083a0000200041106a2005ad4220862009ad843702002000410c6a20033602002000200f3a000b200020103a000a200020013a0009200041086a200e3a000020004110360200200041306a20022903d80b370200200041386a200c290300370200200041c0006a200d290300370200200041c8006a200241900f6a41e80110e8061a0c100b200020063b0025200020073b00052000200b370015200041003b0046200041003a00452000200d3a002d200020083a00042000410d360200200041276a20064110763a0000200041076a20074110763a00002000411d6a2012370000200041c4006a201e3a0000200041c0006a201c3600002000413c6a201d360000200041386a2014360000200041346a2015360000200041306a20113600002000412e6a200c3b00002000412c6a20103a0000200041286a200e360000200041146a200f3a00002000410c6a200a370000200041086a2009360000200041c8006a200241900f6a41e80110e8061a0c0f0b2000411b3602000c0e0b200041003b012a200020083a0029200020103a00192000201d3a000b2000200d3a000a200020063a000920004109360200200041286a200a4220883c0000200041246a200a3e0200200041386a2012370200200041306a200b3702002000412c6a200c360200200041206a20153602002000411c6a200e3602002000411a6a200f3b0100200041186a20143a00002000410c6a2009360200200041086a20113a0000200041106a201ead422086201cad84370200200041c0006a200241900f6a41f00110e8061a0c0d0b2009102f0b2000411b3602000c0b0b4100211d420021124100210d420021134100210c0b410021144100210f41002108410021090c020b420021124100211d4100210d420021134100210f0c010b420021124100210d420021130b2000200c3a000b200020113a000a2000200e3a000920004107360200200041386a200b370200200041306a200a3702002000412c6a20153602002000410c6a2006360200200041086a20103a0000200041246a2012421886201342ffffff078384370200200041206a201d200d41ffffff077172360200200041186a2014ad422086200fad84370200200041106a2008ad4220862009ad84370200200041c0006a200241900f6a41f00110e8061a0c060b20004106360200200041e0006a2019370200200041d8006a201a370200200041c8006a2017370200200041c0006a2018370200200041386a2013370200200041306a2016370200200041206a200a370200200041186a200b370200200041d0006a201b370200200041286a2012370200200041146a2004360200200041106a20033602002000410c6a2005360200200041086a2001360200200041e8006a200241900f6a41c80110e8061a0c050b2004102f0b2000411b3602000c030b2006102f0b2000411b3602000c010b1038000b200241c0116a24000bce0201057f230041d0006b22022400024002404104102d2203450d00200341edde91e306360000410c210420034104410c10312205450d0020052001290000370004200241003a004820052106410021030340200241003a0008200241086a20062004410047220110e8061a024020040d00200241003a00080b20042001490d02200241286a20036a20022d00083a00002002200341016a22033a0048200420016b2104200620016a210620034120470d000b200241086a41186a2204200241286a41186a290300370300200241086a41106a2203200241286a41106a290300370300200241086a41086a2201200241286a41086a290300370300200220022903283703082005102f200041186a2004290300370000200041106a2003290300370000200041086a200129030037000020002002290308370000200241d0006a24000f0b1036000b20012004104b000bbf0908017f037e037f017e017f017e047f037e230041e0016b22032400200320023703582003200137035002400240200120028450450d0042002104420021050c010b2003200036021c200341206a2000200341d0006a2003411c6a108f02024020032903204201510d00200341c8006a2903002105200341c0006a290300210420032903284201520d01200341206a41106a290300210620034198016a200341206a41186a29030037030020034190016a2006370300200341e0006a41086a41003a0000200341e9006a2000290000370000200341f1006a200041086a290000370000200341f9006a200041106a29000037000020034181016a200041186a290000370000200341033a006041c8e1ca004100200341e0006a108c010c010b200341306a2903002105200329032821040b200341e0006a41186a22074200370300200341e0006a41106a22084200370300200341e0006a41086a220942003703002003420037036041e7a2ca00ad4280808080800184220a1001220b2900002106200341d0006a41086a2200200b41086a29000037030020032006370350200b102f200920002903003703002003200329035037036041ecb5c600ad4280808080d00184220c1001220b29000021062000200b41086a29000037030020032006370350200b102f200820032903502206370300200341206a41086a220d2009290300370300200341206a41106a220e2006370300200341206a41186a220f2000290300370300200320032903603703202003200341206a4120109c01200220057d2001200454ad7d200520027d2004200154ad7d200420015820052002582005200251220b1b22101b2111200120047d200420017d20101b2112200341106a2903004200200328020022101b21062003290308420020101b21130240024020042001562005200256200b1b0d0020074200370300200842003703002009420037030020034200370360200a1001220b29000021012000200b41086a29000037030020032001370350200b102f2009200029030037030020032003290350370360200c1001220b29000021012000200b41086a29000037030020032001370350200b102f20082003290350370000200841086a2000290300370000200d2009290300370300200e2008290300370300200f20072903003703002003200329036037032020034200200620117d2013201254ad7d2201201320127d2202201356200120065620012006511b22001b37036820034200200220001b370360200341e0006a21000c010b20074200370300200842003703002009420037030020034200370360200a1001220b29000021012000200b41086a29000037030020032001370350200b102f2009200029030037030020032003290350370360200c1001220b29000021012000200b41086a29000037030020032001370350200b102f20082003290350370000200841086a2000290300370000200d2009290300370300200e2008290300370300200f2007290300370300200320032903603703202003427f200620117c201320127c22022013542200ad7c22012000200120065420012006511b22001b3703682003427f200220001b370360200341e0006a21000b200341206aad42808080808004842000ad42808080808002841004200341e0016a24000bbe0303027f037e027f230041c0006b22022400419298ca00ad4280808080900184100122032900002104200241086a200341086a290000370300200220043703002003102f418a93c200ad4280808080b00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200042c0808080800837020420002003360200200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c0006a24000f0b1036000b130020004117360204200041cca8c2003602000bf50905027f017e027f027e057f230041b0016b22022400419298ca00ad4280808080900184100122032900002104200241c0006a41086a2205200341086a290000370300200220043703402003102f41ce97c200ad4280808080800284100122032900002104200241e8006a41086a2206200341086a290000370300200220043703682003102f20022001360208200241086aad4280808080c00084100322032900002104200341086a2900002107200341106a290000210820024188016a41186a2201200341186a29000037030020024188016a41106a2209200837030020024188016a41086a220a200737030020022004370388012003102f024041c000102d220b450d00200b2002290340370000200b2002290368370010200b200229038801370020200b41086a2005290300370000200b41186a2006290300370000200b41286a200a290300370000200b41306a2009290300370000200b41386a2001290300370000200241c00036022c2002200b360228200241306a200bad42808080808008841002107302400240200228023022050d00410321030c010b2002280234210a02400240200241386a280200220c4104490d002005280000210941002103200241003a00a801200c417c6a21060240034020062003460d0120024188016a20036a200520036a41046a2d00003a00002002200341016a22013a00a8012001210320014120470d000b200241e8006a41186a20024188016a41186a290300370300200241e8006a41106a20024188016a41106a290300370300200241e8006a41086a20024188016a41086a2903003703002002200229038801370368200c417c6a2001460d01200520016a220641046a2d0000220341034f0d01200c20016b417b6a4104490d01200241c0006a41086a200241e8006a41086a2903002204370300200241c0006a41106a200241e8006a41106a2903002207370300200241c0006a41186a200241e8006a41186a29030022083703002002413c6a41026a220c200241e4006a41026a220d2d00003a0000200241086a41086a2004370300200241086a41106a2007370300200241086a41186a2008370300200220022903682204370340200220022f00643b013c20022004370308200641056a2800002101200d200c2d00003a0000200220022f013c3b01640c020b200341ff0171450d00200241003a00a8010b20024100360270200242013703682002410b3602442002200241286a3602402002200241e8006a3602082002419c016a41013602002002420137028c01200241b885c700360288012002200241c0006a36029801200241086a41d8dbc10020024188016a103c1a200235027042208620023502688410080240200228026c450d002002280268102f0b410321030b200a450d002005102f0b20024188016a41086a2205200241086a41086a29030037030020024188016a41106a2206200241086a41106a29030037030020024188016a41186a220a200241086a41186a290300370300200241e8006a41026a220c200241e4006a41026a2d00003a00002002200229030837038801200220022f01643b0168024020034103460d0020002001360204200020093602002000200229038801370208200020022f01683b0029200041106a2005290300370200200041186a2006290300370200200041206a200a2903003702002000412b6a200c2d00003a00000b200020033a0028200b102f200241b0016a24000f0b1036000b34002000419298ca0036020420004100360200200041146a4111360200200041106a4190efc200360200200041086a42093702000ba80101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102d2206450d0020062002290300370000200641186a2003290300370000200641106a2004290300370000200641086a20052903003700002006412041c00010312206450d00200042c0808080900437020420002006360200200641003a0020200241206a24000f0b1036000b4d01027f230041106b2202240002404104102d22030d001036000b2002420437020420022003360200410020021069200041086a200228020836020020002002290300370200200241106a24000b130020004107360204200041a490c3003602000b2e01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241809c313600000b2e01017f02404104102d22020d001036000b20004284808080c0003702042000200236020020024180a3053600000b3a01017f02404110102d22020d001036000b20024200370008200242808084fea6dee111370000200042908080808002370204200020023602000b2e01017f02404104102d22020d001036000b20004284808080c0003702042000200236020020024180de343600000bde4201057f230041106b2202240002400240024020002d0000417f6a220341164b0d000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e17000102030405060708090a0b0c0d0e0f10111213141516000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d19200341017422052004200520044b1b22054100480d190240024020030d002005102d21040c010b200128020020032005103121040b2004450d1820012004360200200141046a2005360200200141086a28020021030b200141086a2206200341016a360200200420036a41003a00004120102d2203450d1720032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002205200628020022046b4120490d00200128020021050c010b200441206a22062004490d19200541017422042006200420064b1b22044100480d190240024020050d002004102d21050c010b200128020020052004103121050b2005450d1820012005360200200141046a2004360200200141086a28020021040b200141086a200441206a360200200520046a220441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200420032900003700002003102f2002200041286a360208200241086a200110c2020c160b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41013a0000200041046a20011095020c150b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a0000200041046a200110950220002d00012104200041026a2d0000210602400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d17200041017422052003200520034b1b22054100480d170240024020000d002005102d21030c010b200128020020002005103121030b2003450d1620012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20044100474107742006723a00000c140b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a0000200041046a200110950220002d00012104200041026a2d0000210602400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d16200041017422052003200520034b1b22054100480d160240024020000d002005102d21030c010b200128020020002005103121030b2003450d1520012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20044100474107742006723a00000c130b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a00002000280204210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d15200341017422002005200020054b1b22004100480d150240024020030d002000102d21030c010b200128020020032000103121030b2003450d1420012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c120b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d14200341017422052004200520044b1b22054100480d140240024020030d002005102d21040c010b200128020020032005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41053a00004120102d2203450d1220032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1320012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200120032900003700002003102f0c110b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41063a00004120102d2203450d1120032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d13200441017422002005200020054b1b22004100480d130240024020040d002000102d21040c010b200128020020042000103121040b2004450d1220012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200120032900003700002003102f0c100b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d12200341017422052004200520044b1b22054100480d120240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41073a00004120102d2203450d1020032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d12200441017422002005200020054b1b22004100480d120240024020040d002000102d21040c010b200128020020042000103121040b2004450d1120012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200120032900003700002003102f0c0f0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a2206200341016a360200200420036a41083a00004120102d2203450d0f20032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002205200628020022046b4120490d00200128020021050c010b200441206a22062004490d11200541017422042006200420064b1b22044100480d110240024020050d002004102d21050c010b200128020020052004103121050b2005450d1020012005360200200141046a2004360200200141086a28020021040b200141086a2206200441206a360200200520046a220441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200420032900003700002003102f2000280224210502400240200141046a2802002204200628020022036b4104490d00200128020021040c010b200341046a22062003490d11200441017422032006200320064b1b22034100480d110240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a2206200341046a360200200420036a20053600002000280228210402400240200141046a2802002203200628020022006b4104490d00200128020021030c010b200041046a22052000490d11200341017422002005200020054b1b22004100480d110240024020030d002000102d21030c010b200128020020032000103121030b2003450d1020012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c0e0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41093a00004120102d2203450d0e20032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d10200441017422002005200020054b1b22004100480d100240024020040d002000102d21040c010b200128020020042000103121040b2004450d0f20012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200120032900003700002003102f0c0d0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410a3a0000200041046a20011095020c0c0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410b3a00002000280204210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0e200341017422002005200020054b1b22004100480d0e0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0d20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c0b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0d200341017422052004200520044b1b22054100480d0d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0c20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410c3a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0d200441017422032005200320054b1b22034100480d0d0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0c20012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a290000370000200120002900013700000c0a0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0c200041017422042003200420034b1b22044100480d0c0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0b20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a410d3a00000c090b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0a20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410e3a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0b200441017422032005200320054b1b22034100480d0b0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0a20012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a290000370000200120002900013700000c080b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0a200341017422052004200520044b1b22054100480d0a0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0920012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a410f3a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0a200441017422032005200320054b1b22034100480d0a0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0920012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002003200029000137000020002d0021220041064b0d070240024002400240024002400240024020000e0700010203040506000b410021040c060b410121040c050b410221040c040b410321040c030b410421040c020b410521040c010b410621040b200220043a000f02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0a200041017422052003200520034b1b22054100480d0a0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0920012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c070b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d09200041017422042003200420034b1b22044100480d090240024020000d002004102d21030c010b200128020020002004103121030b2003450d0820012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41103a00000c060b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d08200041017422042003200420034b1b22044100480d080240024020000d002004102d21030c010b200128020020002004103121030b2003450d0720012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41113a00000c050b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d07200341017422052004200520044b1b22054100480d070240024020030d002005102d21040c010b200128020020032005103121040b2004450d0620012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41123a0000200028020421062000410c6a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d07200441017422032005200320054b1b22034100480d070240024020040d002003102d21040c010b200128020020042003103121040b2004450d0620012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c040b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d06200341017422052004200520044b1b22054100480d060240024020030d002005102d21040c010b200128020020032005103121040b2004450d0520012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41133a0000200028020421062000410c6a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d06200441017422032005200320054b1b22034100480d060240024020040d002003102d21040c010b200128020020042003103121040b2004450d0520012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c030b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d05200341017422052004200520044b1b22054100480d050240024020030d002005102d21040c010b200128020020032005103121040b2004450d0420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41143a00004120102d2203450d0320032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a29000037000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d05200441017422002005200020054b1b22004100480d050240024020040d002000102d21040c010b200128020020042000103121040b2004450d0420012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220141186a200341186a290000370000200141106a200341106a290000370000200141086a200341086a290000370000200120032900003700002003102f0c020b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d04200341017422052004200520044b1b22054100480d040240024020030d002005102d21040c010b200128020020032005103121040b2004450d0320012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41153a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d04200441017422032005200320054b1b22034100480d040240024020040d002003102d21040c010b200128020020042003103121040b2004450d0320012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a290000370000200120002900013700000c010b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d03200341017422052004200520044b1b22054100480d030240024020030d002005102d21040c010b200128020020032005103121040b2004450d0220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41163a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d03200441017422032005200320054b1b22034100480d030240024020040d002003102d21040c010b200128020020042003103121040b2004450d0220012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a290000370000200120002900013700000b200241106a24000f0b1036000b1038000bea0903017f027e057f230041e0006b220224000240024002400240024002400240024020002802002200290300220342c000544100200041086a29030022045022051b0d0020034280800154410020051b0d01200342808080800454410020051b0d02411020047920037942c0007c20044200521ba741037622066b41044f0d0341d6bcc600413641f8b4ca001039000b02400240200141046a280200200141086a2802002200460d00200128020021050c010b200041016a22052000490d06200041017422062005200620054b1b22064100480d060240024020000d002006102d21050c010b200128020020002006103121050b2005450d0520012005360200200141046a2006360200200141086a28020021000b200141086a200041016a360200200520006a2003a74102743a00000c030b02400240200141046a2802002205200141086a28020022006b4102490d00200128020021050c010b200041026a22062000490d05200541017422002006200020064b1b22004100480d050240024020050d002000102d21050c010b200128020020052000103121050b2005450d0420012005360200200141046a2000360200200141086a28020021000b200141086a200041026a360200200520006a2003a74102744101723b00000c020b02400240200141046a2802002205200141086a28020022006b4104490d00200128020021050c010b200041046a22062000490d04200541017422002006200020064b1b22004100480d040240024020050d002000102d21050c010b200128020020052000103121050b2005450d0320012005360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200520006a2003a74102744102723600000c010b02400240200141046a280200200141086a2802002205460d00200128020021070c010b200541016a22082005490d03200541017422072008200720084b1b22084100480d030240024020050d002008102d21070c010b200128020020052008103121070b2007450d0220012007360200200141046a2008360200200141086a28020021050b200141086a2208200541016a360200200720056a413320064102746b3a0000200029030021032002200041086a290300220437030820022003370300200641706a2105200141046a2107034002400240200728020020082802002200460d00200128020021060c010b200041016a22062000490d04200041017422092006200920064b1b22094100480d040240024020000d002009102d21060c010b200128020020002009103121060b2006450d032001200636020020072009360200200828020021000b2008200041016a360200200620006a2003a73a00002003420888200442388684210320044208882104200541016a22002005492106200021052006450d000b2002200337030020022004370308200320048450450d030b200241e0006a24000f0b1036000b1038000b200241286a41146a4109360200200241346a412a360200200241106a41146a410336020020022002360240200241e0bdc600360244200241c8006a41146a410036020020024203370214200241b4e0ca003602102002412a36022c200241c8e1ca003602582002420137024c20024198bdc6003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41e8d8c9001043000ba7ed0205027f037e127f057e287f230022032104200341a0076b41607122032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e18000102030405060708090a0b0c0d0e0f1011121314151617000b200341b4036a4101360200200342013702a403200341b4d8c9003602a003200341043602a406200341fcdbc9003602a0062003200341a0066a3602b003200341a0036a41e8d8c9001043000b200141306a2903002105200141286a2903002106200341c0026a41186a200141196a290000370300200341c0026a41106a200141116a290000370300200341c0026a41086a200141096a290000370300200320012900013703c0022002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c420b200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211920022d00012102200320073703a003200241ff01714101470d412003200737039005200320083a008f05200320093a008e052003200a3b018c052003200b3a008b052003200c3a008a052003200d3b0188052003200e3a0087052003200f3a008605200320103b018405200320113a008305200320123a008205200320133b018005200320143a00ff04200320153a00fe04200320163b01fc04200320173a00fb04200320183a00fa04200320193b01f804200642808084fea6dee1115441002005501b0d172003200537038002200320063703f8012003200341f8046a3602d0012003200341f8046a3602d8042003200341d8046a3602a8032003200341d0016a3602a4032003200341f8016a3602a003200341a0066a200341f8046a200341a0036a1094010240024020032802a0064101470d00200320032900a5063703a0032003200341ac066a2800003600a70320032d00a40621020c010b41042102200341a0066a41086a2903004201520d00200341a0066a41106a290300210720032802d8042108200341d8036a200341a0066a41186a290300370300200341d0036a2007370300200341a0036a41086a41003a0000200341a9036a2008290000370000200341b1036a200841086a290000370000200341b9036a200841106a290000370000200341c1036a200841186a290000370000200341033a00a00341c8e1ca004100200341a0036a108c010b200320032903a0033703c005200320032800a7033600c7050240200241ff01714104470d00419298ca00ad4280808080900184220710012202290000211a2002290008211b2002102f41f497ca00ad4280808080f00184221c10012202290000211d2002290008211e2002102f2003201e3703c8012003201d3703c0012003201b3703b8012003201a3703b001200341086a200341b0016a4120109501200328020c210820032802082109200710012202290000211a2002290008211b2002102f201c10012202290000211c2002290008211d2002102f2003201d3703c8012003201c3703c0012003201b3703b8012003201a3703b00120032008410020091b220a41016a3602a003200341b0016aad4280808080800484221a200341a0036aad4280808080c00084221b10042003200341f8046a3602a0062007100122022d000f210820022d000e210920022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41b6a8c200ad428080808090018410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f2003200a3602a003201b10032202290018211b20022d0017212020022d0016212120022f0014212220022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f41c000102d2202450d412002201b370038200220203a0037200220213a0036200220223b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220083a000f200220093a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b00004118102d2208450d4120082006370000200820053700082003429880808080023702a403200320083602a0034101200341a0036a106920032802a006210820032802a00321090240024020032802a403220c20032802a803220b6b411f4d0d00200c210d0c010b200b41206a220d200b490d3a200c410174220e200d200e200d4b1b220d4100480d3a02400240200c0d00200d102d21090c010b2009200c200d103121090b2009450d420b2009200b6a220c41086a200841086a290000370000200c41106a200841106a290000370000200c41186a200841186a2900003700002003200b41206a220b3602a803200c20082900003700002002ad4280808080800884200bad4220862009ad8410040240200d450d002009102f0b2002102f200341ac066a200341c0026a41086a290300370200200341b4066a200341c0026a41106a290300370200200341bc066a200341c0026a41186a290300370200200341cc066a200341f8046a41086a290300370200200341d4066a200341f8046a41106a290300370200200341dc066a200341f8046a41186a2903003702002003200a3602a006200320032903c0023702a406200320032903f8043702c4062003200341a0066a36029007419298ca00ad42808080809001841001220229000021072002290008211b2002102f41aba8c200ad4280808080b0018410012202290000211c2002290008211d2002102f2003201d3703c8012003201c3703c0012003201b3703b801200320073703b001200341f8016a201a100210730240024020032802f801450d0020034190016a41086a200341f8016a41086a280200360200200320032903f801370390010c010b4104102d2202450d42200342043702a403200320023602a0034100200341a0036a106920034198016a20032802a803360200200320032903a003370390010b200341d0016a41086a20034190016a41086a280200220236020020032003290390013703d001024002402002450d00200341a0036a20032802d00122082002410110c40220032802a0034101470d0120032802d401450d412008102f0c410b4101200341d0016a1069200328029007200341d0016a107f0c3e0b20032802a403210b0240200341ac036a2802002208200341a0036a41086a2802002209460d002002200820096b6a220241046a220c417f4c0d3902400240200c0d004101210d0c010b200c102d220d450d430b2003200c3602dc042003200d3602d804200320023602e0042003200341d8046a3602a003200b200341a0036a200810c50220022008490d1a20032802e004220b2002490d1b20032802d801220b2009490d1c20032802d804210c20032802d001210d2003200220086b2202360280062003200b20096b220b360290062002200b470d1d200c20086a200d20096a200210e8061a200328029007200341d8046a107f20032802e004210820032802dc04210920032802d804210220032802d401450d3f20032802d001102f0c3f0b2003200341d0016a3602a003200b200341a0036a200910c502200328029007200341d0016a107f0c3d0b200020023a0000200020032903c005370001200041086a20032800c705360000410121080c420b2002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c3b0b200141046a280200210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211f20022d00012102200320073703a003200241ff01714101470d3a2003200737039005200320083a008f05200320093a008e052003200a3b018c052003200c3a008b052003200d3a008a052003200e3b0188052003200f3a008705200320103a008605200320113b018405200320123a008305200320133a008205200320143b018005200320153a00ff04200320163a00fe04200320173b01fc04200320183a00fb04200320193a00fa042003201f3b01f804200341a0036a200b10a802024002400240024020032802b0032208450d00200341bc036a280200210c200341b8036a280200210a20032802b403210220032903a00321072003200341a8036a29030022053703c802200320073703c0022003200341f8046a3602d8044104210902402007200584500d002003200341f8046a3602f8012003200341f8016a3602a8032003200341d8046a3602a4032003200341c0026a3602a003200341a0066a200341f8046a200341a0036a109401024020032802a0064101470d00200320032900a5063703a0032003200341ac066a2800003600a70320032d00a40621090c010b41042109200341a0066a41086a2903004201520d00200341a0066a41106a290300210620032802f801210d200341d8036a200341a0066a41186a290300370300200341d0036a2006370300200341a0036a41086a41003a0000200341a9036a200d290000370000200341b1036a200d41086a290000370000200341b9036a200d41106a290000370000200341c1036a200d41186a290000370000200341033a00a00341c8e1ca004100200341a0036a108c010b200320032903a0033703c005200320032800a7033600c705200941ff01714104470d03200341b0016a41186a2209200341f8046a41186a290300370300200341b0016a41106a220d200341f8046a41106a290300370300200341b0016a41086a220e200341f8046a41086a290300370300200320032903f8043703b001200a2002460d012002210f200a21020c020b20004183143b0100200041086a410f360200200041046a41b1d5c700360200200041026a41013a00000c3c0b200241016a220f2002490d3920024101742210200f2010200f4b1b220f41ffffff3f71200f470d39200f410574220f4100480d390240024020020d00200f102d21080c010b20082002410574200f103121080b2008450d41200f410576210f0b200820024105746a220220032903b001370000200241186a2009290300370000200241106a200d290300370000200241086a200e290300370000200341a0036a41186a200a41016a360200200341b4036a200f360200200320053703a803200320073703a0032003200c3602bc03200320083602b003419298ca00ad4280808080900184100122022d000f210820022d000e210920022f000c210a20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41b6a8c200ad428080808090018410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f2003200b3602a006200341a0066aad4280808080c0008410032202290018210520022d0017210b20022d0016212020022f0014212120022d0013212220022d0012212320022f0010212420022d000f212520022d000e212620022f000c212720022d000b212820022d000a212920022f0008212a20022d0007212b20022d0006212c20022f0004212d20022d0003212e20022d0002212f20022f000021302002102f41c000102d2202450d40200220053700382002200b3a0037200220203a0036200220213b0034200220223a0033200220233a0032200220243b0030200220253a002f200220263a002e200220273b002c200220283a002b200220293a002a2002202a3b00282002202b3a00272002202c3a00262002202d3b00242002202e3a00232002202f3a0022200220303b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220083a000f200220093a000e2002200a3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b0000200341c0003602a406200320023602a006200341a0036a200341a0066a10b8012002102f024020032802b403450d0020032802b003102f0b200041043a0000410121080c420b200020093a0000200020032903c005370001200041086a20032800c7053600002002450d392008102f410121080c410b024020022d00000d004101210820022d000141ff01714101470d00200141026a2d00002109200141046a280200210a20012d0001210b2002411a6a2901002107200241196a2d0000210c200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d000021132002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241086a2d00002118200241066a2f01002119200241056a2d0000211f200241046a2d00002120200241026a2f010021212003200241096a2d00003a00b701200320183a00b601200320193b01b4012003201f3a00b301200320203a00b201200320213b01b001200320123a00bf01200320133a00be01200320143b01bc01200320153a00bb01200320163a00ba01200320173b01b8012003200c3a00c7012003200d3a00c6012003200e3b01c4012003200f3a00c301200320103a00c201200320113b01c001200320073703c801200341b8036a2007370300200341b0036a20032903c001370300200341a8036a20032903b801370300200320032903b0013703a0032000200341a0036a200a200b41ff0171410047200910c6020c410b200041023a0000410121080c400b200241196a2d00002109200241186a2d0000210a200241166a2f0100210b2002411a6a2901002107024020022d0000450d00200320073702a403200320093a00a3032003200a3a00a2032003200b3b01a0030c370b200241156a3100002105200241146a3100002106200241126a330100211a200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f01002117200141026a2d00002118200141046a280200211920022d0001210220012d0001211f200320073703a003200241ff01714101470d36419298ca00ad4280808080900184100122022d000f212020022d000e212120022f000c212220022d000b212320022d000a212420022f0008212520022d0007212620022d0006212720022f0004212820022d0003212920022d0002212a20022f0000212b2002102f41d49ac800ad4280808080d0008410012202290008211b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f4120102d2208450d3d2008200e3b000c200820113b0008200820143b0004200820173b0000200820073700182008200c3a000f2008200f3a000b200820123a0007200820153a00032008410e6a200d3a00002008410a6a20103a0000200841066a20133a0000200841026a20163a000020082009ad42ff0183423886200aad42ff018342308684200bad42ffff038342208684200542188684200642108684201a843700102008ad428080808080048410032202290018210720022d0017210920022d0016210a20022f0014210b20022d0013210c20022d0012210d20022f0010210e20022d000f210f20022d000e211020022f000c211120022d000b211220022d000a211320022f0008211420022d0007211520022d0006211620022f0004211720022d0003213220022d0002213320022f000021342002102f2008102f41c000102d2202450d3d20022007370038200220093a00372002200a3a00362002200b3b00342002200c3a00332002200d3a00322002200e3b00302002200f3a002f200220103a002e200220113b002c200220123a002b200220133a002a200220143b0028200220153a0027200220163a0026200220173b0024200220323a0023200220333a0022200220343b00202002201b3700182002202c3a00172002202d3a00162002202e3b00142002202f3a0013200220303a0012200220313b0010200220203a000f200220213a000e200220223b000c200220233a000b200220243a000a200220253b0008200220263a0007200220273a0006200220283b0004200220293a00032002202a3a00022002202b3b0000200341a0036a200210c7020240024020032d00a00322094102460d00200341b8036a2d0000210a200341b7036a2d0000210b200341b5036a2f0000210c200341b4036a2d0000210d200341b3036a2d0000210e200341b1036a2f0000210f200341b0036a2d00002110200341af036a2d00002111200341ad036a2f00002112200341ac036a2d00002113200341ab036a2d00002114200341a9036a2f00002115200341a8036a2d0000211620032d00a703211720032f00a503212020032d00a403212120032d00a30321222003200341b9036a29000022073703c8012003200a3a00c7012003200b3a00c6012003200c3b01c4012003200d3a00c3012003200e3a00c2012003200f3b01c001200320103a00bf01200320113a00be01200320123b01bc01200320133a00bb01200320143a00ba01200320153b01b801200320163a00b701200320173a00b601200320203b01b401200320213a00b301200320223a00b201200320032f00a10322233b01b0012002102f4101210820094101470d01200320073703b8032003200a3a00b7032003200b3a00b6032003200c3b01b4032003200d3a00b3032003200e3a00b2032003200f3b01b003200320103a00af03200320113a00ae03200320123b01ac03200320133a00ab03200320143a00aa03200320153b01a803200320163a00a703200320173a00a603200320203b01a403200320213a00a303200320223a00a203200320233a00a003200320234108763a00a1032000200341a0036a2019201f41ff0171410047201810c6020c410b2002102f0b20004183143b0100200041086a4108360200200041046a419795c200360200200041026a41023a0000410121080c3f0b0240024020022d0000417f6a220841024b0d00200141046a2802002109024020080e03000102000b200241046a2d00000d00200241086a28020041036c2002410c6a2802004101744f0d010b200041023a0000410121080c3f0b200341f8046a200910b80220032d00a0054103460d18200341a0036a410a6a200341f8046a41086a290300370100200341a0036a41126a200341f8046a41106a290300370100200341a0036a411a6a200341f8046a41186a290300370100200341a0036a41226a200341f8046a41206a290300370100200341a0036a412a6a200341f8046a41286a280200360100200320032903f8043701a203200341a0066a41086a200341a0036a41086a220a290100370300200341a0066a41106a200341a0036a41106a220b290100370300200341a0066a41186a200341a0036a41186a220c290100370300200341a0066a41206a200341a0036a41206a290100370300200341a0066a41266a200341a0036a41266a290100370100200320032901a0033703a006200341c0026a41286a200341a0066a412a6a280100360200200341c0026a41206a2202200341a0066a41226a290100370300200341c0026a41186a2208200341a0066a411a6a290100370300200341c0026a41106a220d200341a0066a41126a290100370300200341c0026a41086a220e200341a0066a410a6a290100370300200320032901a2063703c002200341b0016a41186a2002290300370300200341b0016a41106a2008290300370300200341b0016a41086a200d2903003703002003200e2903003703b001200c2002290300370300200b2008290300370300200a200d2903003703002003200e2903003703a003419298ca00ad4280808080900184100122022d000f210d20022d000e210e20022f000c210f20022d000b211020022d000a211120022f0008211220022d0007211320022d0006211420022f0004211520022d0003211620022d0002211720022f000021182002102f41fc80c300ad4280808080d0018410012202290008210720022d0007211920022d0006211f20022f0004212020022d0003212120022d0002212220022f000021232002102f4120102d2208450d3c200820032903a003370000200841186a200c290300370000200841106a200b290300370000200841086a200a2903003700002008ad428080808080048410032202290018210520022d0017210a20022d0016210b20022f0014210c20022d0013212420022d0012212520022f0010212620022d000f212720022d000e212820022f000c212920022d000b212a20022d000a212b20022f0008212c20022d0007212d20022d0006212e20022f0004212f20022d0003213020022d0002213120022f000021322002102f2008102f41c000102d2202450d3c200220053700382002200a3a00372002200b3a00362002200c3b0034200220243a0033200220253a0032200220263b0030200220273a002f200220283a002e200220293b002c2002202a3a002b2002202b3a002a2002202c3b00282002202d3a00272002202e3a00262002202f3b0024200220303a0023200220313a0022200220323b002020022007370018200220193a00172002201f3a0016200220203b0014200220213a0013200220223a0012200220233b00102002200d3a000f2002200e3a000e2002200f3b000c200220103a000b200220113a000a200220123b0008200220133a0007200220143a0006200220153b0004200220163a0003200220173a0002200220183b0000200341106a200241c00041c8e1ca004100410010b5012003280210210a2002102f41012108200a4101460d12200341a0036a41186a220a200341b0016a41186a290300370300200341a0036a41106a220b200341b0016a41106a290300370300200341a0036a41086a220c200341b0016a41086a290300370300200320032903b0013703a003419298ca00ad4280808080900184100122022d000f210d20022d000e210e20022f000c210f20022d000b211020022d000a211120022f0008211220022d0007211320022d0006211420022f0004211520022d0003211620022d0002211720022f000021182002102f41fc80c300ad4280808080d0018410012202290008210720022d0007211920022d0006211f20022f0004212020022d0003212120022d0002212220022f000021232002102f4120102d2208450d3c200820032903a003370000200841186a200a290300370000200841106a200b290300370000200841086a200c2903003700002008ad428080808080048410032202290018210520022d0017210a20022d0016210b20022f0014210c20022d0013212420022d0012212520022f0010212620022d000f212720022d000e212820022f000c212920022d000b212a20022d000a212b20022f0008212c20022d0007212d20022d0006212e20022f0004212f20022d0003213020022d0002213120022f000021322002102f2008102f41c000102d2202450d3c200220053700382002200a3a00372002200b3a00362002200c3b0034200220243a0033200220253a0032200220263b0030200220273a002f200220283a002e200220293b002c2002202a3a002b2002202b3a002a2002202c3b00282002202d3a00272002202e3a00262002202f3b0024200220303a0023200220313a0022200220323b002020022007370018200220193a00172002201f3a0016200220203b0014200220213a0013200220223a0012200220233b00102002200d3a000f2002200e3a000e2002200f3b000c200220103a000b200220113a000a200220123b0008200220133a0007200220143a0006200220153b0004200220163a0003200220173a0002200220183b000041012108200341013a00a0032002ad4280808080800884200341a0036aad4280808080108410042002102f200910af02200041043a00000c3e0b20034190056a200141196a29000037030020034188056a200141116a29000037030020034180056a200141096a290000370300200320012900013703f8040240024020022d0000417f6a220841024b0d00024020080e03000102000b200241086a2802004101742002410c6a280200490d00200241046a28020041ff0171450d010b200041023a0000410121080c3e0b419298ca00ad4280808080900184221b100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341206a200341b0016a412041c8e1ca004100410010b50102400240024020032802204101460d00200341a0036a41186a2209200341f8046a41186a290300370300200341a0036a41106a220a200341f8046a41106a290300370300200341a0036a41086a220b200341f8046a41086a290300370300200320032903f8043703a003201b100122022d000f210c20022d000e210d20022f000c210e20022d000b210f20022d000a211020022f0008211120022d0007211220022d0006211320022f0004211420022d0003211520022d0002211620022f000021172002102f41b080c300ad428080808090018410012202290008210720022d0007211820022d0006211920022f0004211f20022d0003212020022d0002212120022f000021222002102f4120102d2208450d3e200820032903a003370000200841186a2009290300370000200841106a200a290300370000200841086a200b2903003700002008ad428080808080048410032202290018210520022d0017210920022d0016210a20022f0014210b20022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d3e20022005370038200220093a00372002200a3a00362002200b3b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220183a0017200220193a00162002201f3b0014200220203a0013200220213a0012200220223b00102002200c3a000f2002200d3a000e2002200e3b000c2002200f3a000b200220103a000a200220113b0008200220123a0007200220133a0006200220143b0004200220153a0003200220163a0002200220173b0000200341a0066a200210c80220032802a40622090d012002102f0c020b20004183143b0100200041086a4111360200200041046a41c0d5c700360200200041026a41053a0000410121080c3f0b20032903a806210720032802a006210a2002102f200341a0036a41186a4200370300200341a0036a41106a220b4200370300200341a0036a41086a22024200370300200342003703a003418de6c300ad4280808080e000841001220829000021052002200841086a290000370300200320053703a0032008102f419ce6c300ad4280808080e00084100122082900002105200341d8046a41086a220c200841086a290000370300200320053703d8042008102f200b20032903d8042205370300200341a0066a41086a2002290300370300200341a0066a41106a2005370300200341a0066a41186a200c290300370300200320032903a0033703a006200341186a200341a0066a41201095010240200328021c410020032802181b200a4f0d0020004183143b0100200041086a4113360200200041046a41ed94c200360200200041026a41063a00002007a7450d372009102f410121080c3f0b2007a7450d002009102f0b200341a0036a41186a200341f8046a41186a290300370300200341a0036a41106a200341f8046a41106a290300370300200341a0036a41086a200341f8046a41086a290300370300200320032903f8043703a003200341003a00c003419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341203602a4062003200341b0016a3602a006200341a0036a200341a0066a108401200041043a0000410121080c3d0b200341b8066a200141196a290000370300200341b0066a200141116a290000370300200341a0066a41086a200141096a290000370300200320012900013703a0060240024020022d0000417f6a220841024b0d00024020080e03000102000b200241046a2d00000d00200241086a2802004102742002410c6a28020041036c4f0d010b200041023a0000410121080c3d0b200341a0036a41186a200341a0066a41186a290300370300200341a0036a41106a200341a0066a41106a290300370300200341a0036a41086a200341a0066a41086a290300370300200320032903a0063703a003200341023a00c003419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341203602fc042003200341b0016a3602f804200341a0036a200341f8046a108401200041043a0000410121080c3c0b200341b8066a200141196a290000370300200341b0066a200141116a290000370300200341a8066a200141096a290000370300200320012900013703a0060240024020022d0000417f6a220841024b0d00024020080e03000102000b200241086a2802002002410c6a280200490d00200241046a28020041ff0171450d010b200041023a0000410121080c3c0b200341a0036a41186a200341a0066a41186a290300370300200341a0036a41106a200341a0066a41106a290300370300200341a0036a41086a200341a0066a41086a290300370300200320032903a0063703a00341012108200341013a00c003419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341203602fc042003200341b0016a3602f804200341a0036a200341f8046a108401200041043a00000c3b0b200141286a280200210b200141246a280200210a200341d8026a200141196a290000370300200341d0026a200141116a290000370300200341c0026a41086a200141096a290000370300200320012900013703c002410121080240024020022d0000417e6a220941014b0d00024020090e020002000b200241046a2d00000d00200241086a28020041036c2002410c6a2802004101744f0d010b200041023a00000c3b0b419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341a0036a200341b0016a10a502024002400240024020032d00c00322024103460d0020032f01a003210820032901a203210720032901aa03210520032801b203210920032f01b603210c200320032903b803370390052003200c3b018e052003200936018a052003200537018205200320073701fa04200320083a00f804200320084108763a00f90420020d014111210341dc94c2002102410721080c020b20004183143b0100200041086a410f360200200041046a41b1d5c70036020041012108200041026a41013a00000c3d0b200341c0026a200341f8046a412010ea06450d01410b210341d194c2002102410821080b20004183143b0100200041086a2003360200200041046a2002360200200041026a20083a0000410121080c3b0b419298ca00ad4280808080900184100122082900002107200829000821052008102f41bfa8c200ad4280808080c001841001220829000021062008290008211a2008102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341b0016aad42808080808004841005200341a0036a41186a220d4200370300200341a0036a41106a22094200370300200341a0036a41086a22084200370300200342003703a003418de6c300ad4280808080e000841001220c29000021072008200c41086a290000370300200320073703a003200c102f419ce6c300ad4280808080e000841001220c2900002107200341d8046a41086a220e200c41086a290000370300200320073703d804200c102f200920032903d8042207370300200341a0066a41086a2008290300370300200341a0066a41106a2007370300200341a0066a41186a200e290300370300200320032903a0033703a006200341286a200341a0066a4120109501200328022c210c2003280228210e200d200341c0026a41186a2903003703002009200341c0026a41106a2903003703002008200341c0026a41086a290300370300200320032903c0023703a003200c4100200e1b200a4180a305200a4180a3054b1b6a200341a0036a2002200b10a602200041043a0000410121080c3a0b200341d8026a200141196a290000370300200341c0026a41106a200141116a290000370300200341c0026a41086a200141096a290000370300200320012900013703c00220022d00004102470d14200241236a2d00002109200241216a2f0000210a2002411f6a2d0000210b2002411d6a2f0000210c2002410f6a2d0000210d2002410d6a2f0000210e2002410b6a2d0000210f200241096a2f00002110200241076a2d00002111200241056a2f00002112200241246a3502002105200241206a3100002106200241116a2900002107200241106a2d000021132002410c6a2d00002114200241086a2d00002115200241046a2d000021082003200241196a2800003602a803200320073703a00320084101470d142003200e200d4110747222023b018005200341f8046a410a6a20024110763a000020032007a722023b01840520034186056a20024110763a0000200320032902a40337038805200320133a008305200320143a00ff04200320153a00fb04200320074218883c00870520032010200f4110747222023b01fc04200320024110763a00fe042003201220114110747222023b01f804200320024110763a00fa0420032006421886200c200b41107472ad42ffffff078384200a200941107472ad42ffffff07834220868420054238868437039005419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341a0036a200341b0016a10a5020240024020032d00c0034103460d0020032903a003210720032903a803210520032903b0032106200320032903b8033703b803200320063703b003200320053703a803200320073703a003200341c0026a200341a0036a412010ea06450d0120004183143b0100200041086a410f360200200041046a41b1d5c700360200200041026a41013a0000410121080c3b0b20004183143b0100200041086a410a360200200041046a41c794c200360200200041026a41093a0000410121080c3a0b419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41b080c300ad428080808090018410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d37200820032903c002370000200841186a200341c0026a41186a290300370000200841106a200341c0026a41106a290300370000200841086a200341c0026a41086a2903003700002008ad428080808080048410032202290018210520022d0017212020022d0016212120022f0014212220022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d3720022005370038200220203a0037200220213a0036200220223b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b0000200341a0036a200210c80220032903a803210720032802a803211120032802a40321102002102f41002109024020100d0041012110410021114100210b0c2d0b2007a7210b024002402007422088a7220c41014b0d0041002102200c0e022e012e0b200c210841002102034020022008410176220920026a220a2010200a4105746a200341f8046a412010ea0641004a1b2102200820096b220841014b0d000b0b0240201020024105746a200341f8046a412010ea062208450d00200341a0036a41186a200341f8046a41186a290300370300200341a0036a41106a200341f8046a41106a290300370300200341a0036a41086a200341f8046a41086a290300370300200320032903f8043703a0032008411f7620026a220a200c4b0d16200341a0036a2108200c21090c2e0b20004183143b0100200041086a410d360200200041046a41ba94c200360200200041026a410a3a00002011450d312010102f410121080c390b024020022d000120022d0000410047720d00200141046a28020010af02200041043a0000410121080c390b200041023a0000410121080c380b024020022d000120022d0000410047720d00200141046a280200210c200341a0036a41186a220f4200370300200341a0036a41106a220e4200370300200341a0036a41086a220d4200370300200342003703a003419298ca00ad4280808080900184100122022900002107200d200241086a290000370300200320073703a0032002102f418ca8c200ad4280808080d00184100122022900002107200341d8046a41086a2208200241086a290000370300200320073703d8042002102f200e20032903d8042207370300200341a0066a41086a200d290300370300200341a0066a41106a2007370300200341a0066a41186a2008290300370300200320032903a0033703a006200341a0036a200341a0066a10c90220032802a0032202410420021b211920032902a403420020021b221b422088a7220b450d294100210820192102410021090340024002400240200241246a280200200c460d0020080d01410021080c020b200841016a21080c010b200920086b220a200b4f0d17200341a0036a41206a22102002200841586c6a220a41206a2211290200370300200f200a41186a2212290200370300200e200a41106a2213290200370300200d200a41086a22142902003703002003200a2902003703a003200241206a22152902002107200241186a22162902002105200241106a22172902002106200241086a2218290200211a200a20022902003702002014201a370200201320063702002012200537020020112007370200201520102903003702002016200f2903003702002017200e2903003702002018200d290300370200200220032903a0033702000b200241286a2102200b200941016a2209460d290c000b0b200041023a0000410121080c370b200341f8016a41186a200141196a290000370300200341f8016a41106a200141116a290000370300200341f8016a41086a200141096a290000370300200320012900013703f801200241196a2d00002108200241186a2d00002109200241166a2f0100210a2002411a6a2901002107024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c260b200241026a2f0100210b200241046a2d0000210c200241056a2d0000210d200241066a2f0100210e200241086a2d0000210f200241096a2d000021102002410a6a2f010021112002410c6a2d000021122002410d6a2d000021132002410e6a2f01002114200241106a2d00002115200241116a2d00002116200241126a3301002105200241146a3100002106200241156a310000211a20022d00012102200320073703a003200241ff01714101470d25200341be016a20153a0000200341ba016a20123a0000200320143b01bc01200320113b01b8012003200f3a00b6012003200e3b01b4012003200c3a00b2012003200b3b01b001200320073703c801200320163a00bf01200320133a00bb01200320103a00b7012003200d3a00b30120032008ad42ff01834238862009ad42ff018342308684200aad42ffff038342208684201a421886842006421086842005843703c001419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41d49ac800ad4280808080d0008410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d34200820032903f801370000200841186a200341f8016a41186a290300370000200841106a200341f8016a41106a290300370000200841086a200341f8016a41086a2903003700002008ad428080808080048410032202290018210520022d0017212020022d0016212120022f0014212220022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d3420022005370038200220203a0037200220213a0036200220223b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b0000200341a0036a200210c7020240024020032d00a00322084102470d00200341023a00c0020c010b200341b9036a2900002107200320032900a1033700c102200320083a00c002200320073e00d902200320074230883c00df02200320074220883d00dd022003200341a9036a2900003700c9022003200341b1036a2900003700d1022007423888a721080b200341f8046a41186a200341b0016a41186a290300370300200341f8046a41106a200341b0016a41106a290300370300200341f8046a41086a200341b0016a41086a290300370300200320032903b0013703f804200341a0036a41186a20032903d802370300200341a0036a41206a20083a0000200341023a00a006200320032903d0023703b003200320032903c8023703a803200320032903c00222073703a003200320032903b8063703d802200320032903b0063703d002200320032903a8063703c802200320032903a0063703c002024002400240024002402007a7410371417f6a220841014b0d0020080e020102010b200341a0036a410172200341f8046a412010ea060d02200320032903f8043700c102200341013a00c00220032003418f056a2900003700d802200320034188056a2903003700d102200320034180056a2903003700c90220032d0097052109200320032903d8023703b803200320032903d0023703b003200320032903c8023703a803200320032903c00222073703a003024002402007a7220841ff01714102470d002002ad428080808080088410050c010b200320083a00e0054101102d220a450d39200a20083a0000200a4101412110312208450d39200820032900a103370001200820093a0020200841186a20032900b803370000200841116a20032900b103370000200841096a20032900a9033700002002ad42808080808008842008ad428080808090048410042008102f0b2002102f200041043a0000410121080c3a0b2002102f4185ccc7002103410c2102410b21080c020b2002102f41a793c200210341072102411821080c010b2002102f419e93c200210341092102411921080b20004183143b0100200041086a2002360200200041046a2003360200200041026a20083a0000410121080c360b2002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f010021190240024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a003410121020c010b20022d00012102200320073703a003200241ff017141014721020b200320073703c801200320083a00c701200320093a00c6012003200a3b01c4012003200b3a00c3012003200c3a00c2012003200d3b01c0012003200e3a00bf012003200f3a00be01200320103b01bc01200320113a00bb01200320123a00ba01200320133b01b801200320143a00b701200320153a00b601200320163b01b401200320173a00b301200320183a00b201200320193b01b001024020020d00200341a0066a41186a2209200341b0016a41186a290300370300200341a0066a41106a220a200341b0016a41106a290300370300200341a0066a41086a220b200341b0016a41086a290300370300200320032903b0013703a006419298ca00ad4280808080900184100122022d000f210c20022d000e210d20022f000c210e20022d000b210f20022d000a211020022f0008211120022d0007211220022d0006211320022f0004211420022d0003211520022d0002211620022f000021172002102f41d49ac800ad4280808080d0008410012202290008210720022d0007211820022d0006211920022f0004211f20022d0003212020022d0002212120022f000021222002102f4120102d2208450d34200820032903a006370000200841186a2009290300370000200841106a200a290300370000200841086a200b2903003700002008ad428080808080048410032202290018210520022d0017210920022d0016210a20022f0014210b20022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d3420022005370038200220093a00372002200a3a00362002200b3b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220183a0017200220193a00162002201f3b0014200220203a0013200220213a0012200220223b00102002200c3a000f2002200d3a000e2002200e3b000c2002200f3a000b200220103a000a200220113b0008200220123a0007200220133a0006200220143b0004200220153a0003200220163a0002200220173b0000200341a0036a200210c702024020032d00a0034102460d00200341a0066a10ca020b2002ad428080808080088410052002102f200041043a0000410121080c360b200041023a0000410121080c350b200341f8016a41186a200141196a290000370300200341f8016a41106a200141116a290000370300200341f8016a41086a200141096a290000370300200320012900013703f801200241196a2d00002108200241186a2d00002109200241166a2f0100210a2002411a6a2901002107024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c230b200241026a2f0100210b200241046a2d0000210c200241056a2d0000210d200241066a2f0100210e200241086a2d0000210f200241096a2d000021102002410a6a2f010021112002410c6a2d000021122002410d6a2d000021132002410e6a2f01002114200241106a2d00002115200241116a2d00002116200241126a3301002105200241146a3100002106200241156a310000211a20022d00012102200320073703a003200241ff01714101470d22200341be016a20153a0000200341ba016a20123a0000200320143b01bc01200320113b01b8012003200f3a00b6012003200e3b01b4012003200c3a00b2012003200b3b01b001200320073703c801200320163a00bf01200320133a00bb01200320103a00b7012003200d3a00b30120032008ad42ff01834238862009ad42ff018342308684200aad42ffff038342208684201a421886842006421086842005843703c001419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41d49ac800ad4280808080d0008410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d32200820032903f801370000200841186a200341f8016a41186a290300370000200841106a200341f8016a41106a290300370000200841086a200341f8016a41086a2903003700002008ad428080808080048410032202290018210520022d0017212020022d0016212120022f0014212220022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d3220022005370038200220203a0037200220213a0036200220223b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b0000200341a0036a200210c7020240024020032d00a00322084102470d00200341023a00c0020c010b200341b9036a2900002107200320032900a1033700c102200320083a00c002200320073e00d902200320074230883c00df02200320074220883d00dd022003200341a9036a2900003700c9022003200341b1036a2900003700d1022007423888a721080b200341f8046a41186a200341b0016a41186a290300370300200341f8046a41106a200341b0016a41106a290300370300200341f8046a41086a200341b0016a41086a290300370300200320032903b0013703f804200341a0036a41186a20032903d802370300200341a0036a41206a20083a0000200341023a00a006200320032903d0023703b003200320032903c8023703a803200320032903c00222073703a003200320032903b8063703d802200320032903b0063703d002200320032903a8063703c802200320032903a0063703c0020240024002402007a741ff01714101470d00200341a0036a410172200341f8046a412010ea060d01200320032903f8043700c102200341003a00c00220032003418f056a2900003700d802200320034188056a2903003700d102200320034180056a2903003700c90220032d0097052109200320032903d8023703b803200320032903d0023703b003200320032903c8023703a803200320032903c00222073703a003024002402007a7220841ff01714102470d002002ad428080808080088410050c010b200320083a00e0054101102d220a450d36200a20083a0000200a4101412110312208450d36200820032900a103370001200820093a0020200841186a20032900b803370000200841116a20032900b103370000200841096a20032900a9033700002002ad42808080808008842008ad428080808090048410042008102f0b2002102f200041043a0000410121080c370b2002102f419593c200210341092102411a21080c010b2002102f41b094c2002103410a2102410c21080b20004183143b0100200041086a2002360200200041046a2003360200200041026a20083a0000410121080c340b200141216a2d0000210b20034190016a41186a200141196a29000037030020034190016a41106a200141116a29000037030020034190016a41086a200141096a29000037030020032001290001370390012002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211f20022d00012102200320073703a003200241ff01714101470d20200320073703e801200320083a00e701200320093a00e6012003200a3b01e4012003200c3a00e3012003200d3a00e2012003200e3b01e0012003200f3a00df01200320103a00de01200320113b01dc01200320123a00db01200320133a00da01200320143b01d801200320153a00d701200320163a00d601200320173b01d401200320183a00d301200320193a00d2012003201f3b01d001419298ca00ad4280808080900184100122022900002107200341a0066a41086a200241086a290000370300200320073703a0062002102f418a93c200ad4280808080b00184100122022900002107200341a0036a41086a200241086a290000370300200320073703a0032002102f4120102d2202450d31200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad4280808080800484100322082900002107200841086a2900002105200841106a2900002106200341b0016a41186a2209200841186a290000370300200341b0016a41106a220a2006370300200341b0016a41086a2005370300200320073703b0012008102f2002102f41c000102d2202450d31200220032903a006370000200241086a200341a0066a41086a290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903b001370020200241286a200341b0016a41086a290300370000200241306a200a290300370000200241386a2009290300370000200341a0066a200241c00010cb02024020032d00c10622084102470d002003200341d0016a36029007419298ca00ad4280808080900184100122082900002107200341e0056a41086a2209200841086a290000370300200320073703e0052008102f41f992c200ad4280808080900284100122082900002107200341f0056a41086a220a200841086a290000370300200320073703f0052008102f200341c0056a41086a2009290300370300200341d8056a200a290300370300200320032903e0053703c005200320032903f0053703d005200341a0036a200341c0056a108801200341f8016a20032802a003220820032802a80310ad02024020032802a403450d002008102f0b200341d0056a2108024020032d00f8010d00419298ca00ad4280808080900184100122092900002107200341e0056a41086a220a200941086a290000370300200320073703e0052009102f41f992c200ad4280808080900284100122092900002107200341f0056a41086a220c200941086a290000370300200320073703f0052009102f200341c0056a41086a200a290300370300200820032903f005370000200841086a200c290300370000200320032903e0053703c005200341a0036a200341c0056a10880120032802a003210920033502a80321074120102d2208450d33200820032903d001370000200841186a200341d0016a41186a290300370000200841106a200341d0016a41106a290300370000200841086a200341d0016a41086a29030037000020074220862009ad842008ad428080808080048410042008102f20032802a403450d202009102f0c200b200341d8046a41186a20034191026a290000370300200341d8046a41106a20034189026a290000370300200341d8046a41086a200341f8016a41096a290000370300200320032900f9013703d804200341b0016a200341d8046a10b602200341a0036a20032802b001220a20032802b801220c10cb02024020032d00c1034102470d00200341003602c802200342013703c002200341c0056a41146a4129360200200341cc056a410b360200200341093602e4052003419298ca003602e0052003410b3602c4052003410b3602f4052003418a93c2003602f0052003200341b0016a3602d0052003200341f0056a3602c8052003200341e0056a3602c0052003200341c0026a36028006200341f8046a41146a4103360200200342033702fc04200341cc90c4003602f8042003200341c0056a3602880520034180066a41d8dbc100200341f8046a103c1a20033502c80242208620033502c002841008024020032802c402450d0020032802c002102f0b2003280290072109419298ca00ad42808080809001841001220a2900002107200341e0056a41086a220c200a41086a290000370300200320073703e005200a102f41f992c200ad42808080809002841001220a2900002107200341f0056a41086a220d200a41086a290000370300200320073703f005200a102f200341c0056a41086a200c290300370300200820032903f005370000200841086a200d290300370000200320032903e0053703c005200341f8046a200341c0056a10880120032802f804210a20033502800521074120102d2208450d3320082009290000370000200841186a200941186a290000370000200841106a200941106a290000370000200841086a200941086a2900003700002007422086200aad842008ad428080808080048410042008102f024020032802fc04450d00200a102f0b20032802b401450d2020032802b001102f0c200b200341f8046a200341c1036a41c20010e8061a20032d0099052109200341c0026a41206a200341a0036a41206a2d00003a0000200341c0026a41186a200341a0036a41186a290300370300200341c0026a41106a200341a0036a41106a290300370300200341c0026a41086a200341a0036a41086a290300370300200341e8026a2003419a056a410020094101461b360200200320032903a0033703c002200320034190076a3602e402200341003602c805200342013703c0054120102d2209450d32200920032903c002370000200941086a200341c0026a41086a290300370000200941106a200341c0026a41106a290300370000200941186a200341c0026a41186a290300370000200342a080808080043702c405200320093602c005024020032d00e002220d41064b0d0002400240024002400240024002400240200d0e0700010203040506000b200341003a00e0050c060b200341013a00e0050c050b200341023a00e0050c040b200341033a00e0050c030b200341043a00e0050c020b200341053a00e0050c010b200341063a00e0050b2009412041c00010312209450d33200920032d00e0053a0020200320093602c005200342c080808090043702c4050b200341e4026a200341c0056a10cd0220032802c4052109200cad422086200aad8420033502c80542208620032802c005220aad84100402402009450d00200a102f0b024020032802b401450d0020032802b001102f0b2003280290072109419298ca00ad42808080809001841001220a2900002107200341e0056a41086a220c200a41086a290000370300200320073703e005200a102f41f992c200ad42808080809002841001220a2900002107200341f0056a41086a220d200a41086a290000370300200320073703f005200a102f200341c0056a41086a200c290300370300200820032903f005370000200841086a200d290300370000200320032903e0053703c005200341a0036a200341c0056a10880120032802a003210a20033502a80321074120102d2208450d3220082009290000370000200841186a200941186a290000370000200841106a200941106a290000370000200841086a200941086a2900003700002007422086200aad842008ad428080808080048410042008102f024020032802a403450d00200a102f0b200341c0026a41086a200341d8046a41086a290300370300200341c0026a41106a200341d8046a41106a290300370300200341c0026a41186a200341d8046a41186a290300370300200320032903d8043703c00241012109410021080c200b200341f8046a41186a200341da066a290100370300200341f8046a41106a200341d2066a290100370300200341f8046a41086a200341ca066a290100370300200341c0026a41086a200341eb066a290000370300200341c0026a41106a200341f3066a290000370300200341c0026a41186a200341fb066a290000370300200320032901c2063703f8042003200341e3066a2900003703c002200341e2066a2d000021090c1f0b2002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c1d0b200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211920022d00012102200320073703a003200241ff01714101470d1c200320073703e801200320083a00e701200320093a00e6012003200a3b01e4012003200b3a00e3012003200c3a00e2012003200d3b01e0012003200e3a00df012003200f3a00de01200320103b01dc01200320113a00db01200320123a00da01200320133b01d801200320143a00d701200320153a00d601200320163b01d401200320173a00d301200320183a00d201200320193b01d001419298ca00ad4280808080900184100122022900002107200341a0066a41086a200241086a290000370300200320073703a0062002102f418a93c200ad4280808080b00184100122022900002107200341a0036a41086a200241086a290000370300200320073703a0032002102f4120102d2208450d30200820032903d001370000200841186a200341d0016a41186a290300370000200841106a200341d0016a41106a290300370000200841086a200341d0016a41086a2903003700002008ad42808080808004841003220229001821072002290010210520022d000f210920022d000b210a20022d0007210b20022d0003210c20022f0000210d200241026a2d0000210e20022f0004210f200241066a2d0000211020022f000821112002410a6a2d0000211220022f000c21132002410e6a2d000021142002102f2008102f41c000102d2202450d302002201320144110747222083b002c2002201120124110747222113b00282002200f201041107472220f3b00242002200d200e41107472220d3b0020200220032903a006370000200220032903a0033700102002200737003820022005370030200220093a002f2002200a3a002b2002200b3a00272002200c3a00232002412e6a20084110763a00002002412a6a20114110763a0000200241266a200f4110763a0000200241226a200d4110763a0000200241086a200341a0066a41086a220a290300370000200241186a200341a0036a41086a220b290300370000200341c0006a200241c00041c8e1ca004100410010b501200328024021092002102f41012108024020094101470d00419298ca00ad4280808080900184100122022900002107200a200241086a290000370300200320073703a0062002102f418a93c200ad4280808080b00184100122022900002107200b200241086a290000370300200320073703a0032002102f4120102d2209450d31200920032903d001370000200941186a200341d0016a41186a290300370000200941106a200341d0016a41106a290300370000200941086a200341d0016a41086a2903003700002009ad42808080808004841003220229001821072002290010210520022d000f210a20022d000b210b20022d0007210c20022d0003210d20022f0000210e200241026a2d0000210f20022f00042110200241066a2d0000211120022f000821122002410a6a2d0000211320022f000c21142002410e6a2d000021152002102f2009102f41c000102d2202450d312002201420154110747222093b002c2002201220134110747222123b00282002201020114110747222103b00242002200e200f41107472220e3b0020200220032903a006370000200220032903a00337001020022007370038200220053700302002200a3a002f2002200b3a002b2002200c3a00272002200d3a00232002412e6a20094110763a00002002412a6a20124110763a0000200241266a20104110763a0000200241226a200e4110763a0000200241086a200341a0066a41086a290300370000200241186a200341a0036a41086a290300370000200341a0036a200241c00010cb02024020032d00c10322094102460d002002ad428080808080088410050b200341d8046a41186a220b200341a0036a41186a290300370300200341d8046a41106a220c200341a0036a41106a290300370300200341d8046a41086a220d200341a0036a41086a290300370300200320032903a0033703d80420032d00c003210a200341f8016a200341a0036a41226a41c10010e8061a200341b0016a41086a200d290300370300200341b0016a41106a200c290300370300200341b0016a41186a200b290300370300200320032903d8043703b001200341c0026a200341f8016a41c10010e8061a20094102460d1b200320093a00f804200341f8046a410172200341c0026a41c10010e806210d2003419a056a210b0240024020032d009905220c4101460d0020034100360280060c010b20034180066a200b10b6020b02400240024020094101460d0020034100360290060c010b20034190066a200d10b6022003280290060d010b0240200c4101460d00419298ca00ad4280808080900184100122092900002107200341e0056a41086a220b200941086a290000370300200320073703e0052009102f41f992c200ad4280808080900284100122092900002107200341f0056a41086a220c200941086a290000370300200320073703f0052009102f200341c0056a41086a200b290300370300200341d8056a200c290300370300200320032903e0053703c005200320032903f0053703d005200341a0036a200341c0056a10880120033502a80342208620032802a0032209ad84100520032802a403450d1b2009102f0c1b0b419298ca00ad4280808080900184100122092900002107200341e0056a41086a220c200941086a290000370300200320073703e0052009102f41f992c200ad4280808080900284100122092900002107200341f0056a41086a220d200941086a290000370300200320073703f0052009102f200341c0056a41086a200c290300370300200341c0056a41186a200d290300370300200320032903e0053703c005200320032903f0053703d005200341a0036a200341c0056a10880120032802a003210c20033502a80321074120102d2209450d322009200b290000370000200941186a200b41186a290000370000200941106a200b41106a290000370000200941086a200b41086a2900003700002007422086200cad842009ad428080808080048410042009102f20032802a403450d1a200c102f0c1a0b200341f0056a41086a20034190066a41086a280200220b360200200320032903900622073703f005200341a0066a2007a7220c200b10cb02024020032d00c1064102470d0020034100360298012003420137039001200341c0056a41146a4129360200200341cc056a410b36020020034109360294072003419298ca00360290072003410b3602c4052003410b3602e4052003418a93c2003602e0052003200341f0056a3602d0052003200341e0056a3602c805200320034190076a3602c005200320034190016a36029c07200341a0036a41146a4103360200200342033702a4032003419090c4003602a0032003200341c0056a3602b0032003419c076a41d8dbc100200341a0036a103c1a200335029801422086200335029001841008200328029401450d19200328029001102f0c190b200341a0036a200341a0066a41c20010e8061a20034182046a20034199056a220941206a2d00003a0000200341fa036a200941186a290000370100200341f2036a200941106a290000370100200341ea036a200941086a290000370100200341a0036a41c2006a2009290000370100200341003602c805200342013703c0054120102d2209450d31200920032903a003370000200941086a200341a0036a41086a290300370000200941106a200341a0036a41106a290300370000200941186a200341a0036a41186a290300370000200342a080808080043702c405200320093602c005024020032d00c003220d41064b0d0002400240024002400240024002400240200d0e0700010203040506000b4100210d0c060b4101210d0c050b4102210d0c040b4103210d0c030b4104210d0c020b4105210d0c010b4106210d0b2003200d3a00e0052009412041c00010312209450d322009200d3a0020200342c080808090043702c405200320093602c0050b200341c1036a200341c0056a10ce0220032802c4052109200bad422086200cad8420033502c80542208620032802c005220bad8410042009450d18200b102f0c180b20004183143b0100200041086a410c360200200041046a41a494c200360200200041026a410d3a00000c320b024020022d000120022d0000410047720d00419298ca00ad4280808080900184100122022900002107200229000821052002102f41aba8c200ad4280808080b001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341b0016aad42808080808004841005200041043a0000410121080c320b200041023a0000410121080c310b2001410c6a2802002121200141086a280200210c200141046a280200210b2002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211f200241026a2f010021200240024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a003410121020c010b20022d00012102200320073703a003200241ff017141014721020b200320073703c801200320083a00c701200320093a00c6012003200a3b01c4012003200d3a00c3012003200e3a00c2012003200f3b01c001200320103a00bf01200320113a00be01200320123b01bc01200320133a00bb01200320143a00ba01200320153b01b801200320163a00b701200320173a00b601200320183b01b401200320193a00b3012003201f3a00b201200320203b01b00102400240024020020d00200341c0026a41186a200341b0016a41186a290300370300200341c0026a41106a200341b0016a41106a290300370300200341c0026a41086a200341b0016a41086a290300370300200320032903b0013703c0022021ad221a422086200bad84100322022900002107200241086a2900002105200241106a2900002106200341f8046a41186a2209200241186a290000370300200341f8046a41106a220a2006370300200341f8046a41086a220d2005370300200320073703f8042002102f419298ca00ad4280808080900184100122022d000f210e20022d000e210f20022f000c211020022d000b211120022d000a211220022f0008211320022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f000021192002102f4199a8c200ad428080808090018410012202290008210720022d0007211f20022d0006212020022f0004212220022d0003212320022d0002212420022f000021252002102f4120102d2208450d31200820032903f804370000200841186a2009290300370000200841106a200a290300370000200841086a200d2903003700002008ad428080808080048410032202290018210520022d0017210920022d0016210a20022f0014210d20022d0013212620022d0012212720022f0010212820022d000f212920022d000e212a20022f000c212b20022d000b212c20022d000a212d20022f0008212e20022d0007212f20022d0006213020022f0004213120022d0003213220022d0002213320022f000021342002102f2008102f41c000102d2202450d3120022005370038200220093a00372002200a3a00362002200d3b0034200220263a0033200220273a0032200220283b0030200220293a002f2002202a3a002e2002202b3b002c2002202c3a002b2002202d3a002a2002202e3b00282002202f3a0027200220303a0026200220313b0024200220323a0023200220333a0022200220343b0020200220073700182002201f3a0017200220203a0016200220223b0014200220233a0013200220243a0012200220253b00102002200e3a000f2002200f3a000e200220103b000c200220113a000b200220123a000a200220133b0008200220143a0007200220153a0006200220163b0004200220173a0003200220183a0002200220193b0000200341e0006a200241c00041c8e1ca004100410010b501200328026021082002102f20084101460d11200341d0006a201a42004280a094a58d1d420010ed062003200341d8006a2903002207370380022003200329035022053703f8012003200341c0026a3602d001410421022021450d022003200341c0026a3602d8042003200341d8046a3602a8032003200341d0016a3602a4032003200341f8016a3602a003200341a0066a200341c0026a200341a0036a10940120032802a0064101470d01200320032900a5063703a0032003200341ac066a2800003600a70320032d00a40621020c020b200041023a00000c160b41042102200341a0066a41086a2903004201520d00200341a0066a41106a290300210620032802d8042108200341d8036a200341a0066a41186a290300370300200341d0036a2006370300200341a0036a41086a41003a0000200341a9036a2008290000370000200341b1036a200841086a290000370000200341b9036a200841106a290000370000200341c1036a200841186a290000370000200341033a00a00341c8e1ca004100200341a0036a108c010b200320032903a0033703c005200320032800a7033600c7050240200241ff01714104470d00200341a0036a41186a22094200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a003418de6c300ad4280808080e000841001220829000021062002200841086a290000370300200320063703a0032008102f419ce6c300ad4280808080e00084100122082900002106200341d8046a41086a220d200841086a290000370300200320063703d8042008102f200a20032903d8042206370300200341a0066a41086a22082002290300370300200341a0066a41106a220a2006370300200341a0066a41186a220e200d290300370300200320032903a0033703a006200341c8006a200341a0066a4120109501200328024c210d2003280248210f200e200341f8046a41186a2210290300370300200a200341f8046a41106a220e2903003703002008200341f8046a41086a220a290300370300200320032903f8043703a00620092021360200200341b4036a200c360200200341c4036a200341c0026a41086a2209290300370200200341cc036a200341c0026a41106a220c290300370200200341d4036a200341c0026a41186a2211290300370200200320073703a803200320053703a0032003200b3602b003200320032903c0023702bc03410021082003200d4100200f1b3602dc03200341a0066a200341a0036a10cf02200341f8036a2007370300200341f0036a20053703002002410b3a0000200341a9036a20032903f804370000200341b1036a200a290300370000200341b9036a200e290300370000200341c1036a2010290300370000200341c9036a20032903c002370000200341d1036a2009290300370000200341d9036a200c290300370000200341e1036a2011290300370000200341063a00a00341c8e1ca004100200341a0036a108c01200041043a00000c310b200020023a0000200020032903c005370001200041086a20032800c7053600000c140b2001410c6a2802002123200141086a2802002122200141046a28020021212002411a6a2901002107200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211f200241026a2f010021200240024020022d0000450d00200320073702a4032003200a3a00a3032003200b3a00a2032003200c3b01a003410121020c010b20022d00012102200320073703a003200241ff017141014721020b200320073703c8012003200a3a00c7012003200b3a00c6012003200c3b01c4012003200d3a00c3012003200e3a00c2012003200f3b01c001200320103a00bf01200320113a00be01200320123b01bc01200320133a00bb01200320143a00ba01200320153b01b801200320163a00b701200320173a00b601200320183b01b401200320193a00b3012003201f3a00b201200320203b01b0010240024020020d002023ad4220862021ad84100322022900002105200241086a2900002106200241106a290000211a200341f8046a41186a2209200241186a290000370300200341f8046a41106a2224201a370300200341f8046a41086a22252006370300200320053703f8042002102f419298ca00ad4280808080900184100122022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f4199a8c200ad428080808090018410012202290008210520022d0007213220022d0006213320022f0004213420022d0003213520022d0002213620022f000021372002102f4120102d2208450d2f200820032903f804370000200841186a2009290300370000200841106a2024290300370000200841086a20252903003700002008ad428080808080048410032202290018210620022d0017210920022d0016212420022f0014212520022d0013213820022d0012213920022f0010213a20022d000f213b20022d000e213c20022f000c213d20022d000b213e20022d000a213f20022f0008214020022d0007214120022d0006214220022f0004214320022d0003214420022d0002214520022f000021462002102f2008102f41c000102d2202450d2f20022006370038200220093a0037200220243a0036200220253b0034200220383a0033200220393a00322002203a3b00302002203b3a002f2002203c3a002e2002203d3b002c2002203e3a002b2002203f3a002a200220403b0028200220413a0027200220423a0026200220433b0024200220443a0023200220453a0022200220463b002020022005370018200220323a0017200220333a0016200220343b0014200220353a0013200220363a0012200220373b0010200220263a000f200220273a000e200220283b000c200220293a000b2002202a3a000a2002202b3b00082002202c3a00072002202d3a00062002202e3b00042002202f3a0003200220303a0002200220313b0000200341f0006a200241c00041c8e1ca004100410010b501200328027021082002102f20084101460d10200341a0036a41186a4200370300200341a0036a41106a22244200370300200341a0036a41086a22024200370300200342003703a003419298ca00ad42808080809001841001220829000021052002200841086a290000370300200320053703a0032008102f418ca8c200ad4280808080d00184100122082900002105200341d8046a41086a2209200841086a290000370300200320053703d8042008102f202420032903d8042205370300200341a0066a41086a2002290300370300200341a0066a41106a2005370300200341a0066a41186a2009290300370300200320032903a0033703a006200341a0036a200341a0066a10c90220032802a0032202410420021b222520032902a403420020021b2205422088a741286c6a210920252102034020022009460d020240200341f8046a200241046a2208460d00200841246a21022008200341f8046a412010ea060d010b0b200341a0036a41186a22024200370300200341a0036a41106a22264200370300200341a0036a41086a22084200370300200342003703a003418de6c300ad4280808080e000841001220929000021062008200941086a290000370300200320063703a0032009102f419ce6c300ad4280808080e00084100122092900002106200341d8046a41086a2227200941086a290000370300200320063703d8042009102f202420032903d804370000202441086a2027290300370000200341a0066a41086a22092008290300370300200341a0066a41106a22242026290300370300200341a0066a41186a22262002290300370300200320032903a0033703a006200341e8006a200341a0066a4120109501200328026c2127200328026821282026200341f8046a41186a22292903003703002024200341f8046a41106a22262903003703002009200341f8046a41086a2224290300370300200320032903f8043703a006200341d4036a22092007370200200341d3036a222a200a3a0000200341d2036a200b3a0000200341d0036a222b200c3b0100200341cf036a222c200d3a0000200341ce036a200e3a0000200341cc036a222d200f3b0100200341cb036a222e20103a0000200341ca036a20113a0000200341c8036a20123b0100200341c7036a20133a0000200341c6036a20143a0000200341c4036a20153b0100200341c3036a20163a0000200341c2036a20173a0000200341a0036a41206a20183b0100200341bf036a20193a0000200341be036a201f3a000020022023360200200341b4036a2022360200200320203b01bc03200320213602b003200342003703a803200342003703a0034100210220032027410020281b3602dc03200341a0066a200341a0036a10cf02200341f8036a4200370300200341f0036a42003703002008410b3a0000200341a9036a20032903f804370000200341b1036a2024290300370000200341b9036a2026290300370000200341c1036a2029290300370000200341e1036a2007370000200341e0036a200a3a0000200341df036a200b3a0000200341dd036a200c3b0000200341dc036a200d3a0000200341db036a200e3a0000200341d9036a200f3b0000200341d8036a20103a0000200341d7036a20113a0000200341d5036a20123b0000200920133a0000202a20143a0000200341d1036a20153b0000202b20163a0000202c20173a0000200341cd036a20183b0000202d20193a0000202e201f3a0000200341c9036a20203b0000200341063a00a00341c8e1ca004100200341a0036a108c0102402005a7450d002025102f0b200041043a0000410121080c320b200041023a00000c130b20004183143b0100200041086a410b360200200041046a418894c200360200200041026a410f3a00002005a7450d122025102f0c120b200341c0056a41186a200141196a290000370300200341c0056a41106a200141116a290000370300200341c0056a41086a200141096a290000370300200320012900013703c0052002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f010021190240024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a003410121020c010b20022d00012102200320073703a003200241ff017141014721020b200320073703c801200320083a00c701200320093a00c6012003200a3b01c4012003200b3a00c3012003200c3a00c2012003200d3b01c0012003200e3a00bf012003200f3a00be01200320103b01bc01200320113a00bb01200320123a00ba01200320133b01b801200320143a00b701200320153a00b601200320163b01b401200320173a00b301200320183a00b201200320193b01b00102400240024020020d00200341f8016a41186a200341b0016a41186a290300370300200341f8016a41106a200341b0016a41106a290300370300200341f8016a41086a200341b0016a41086a290300370300200320032903b0013703f801419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f4199a8c200ad428080808090018410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d2f200820032903c005370000200841186a200341c0056a41186a290300370000200841106a200341c0056a41106a290300370000200841086a200341c0056a41086a2903003700002008ad428080808080048410032202290018210520022d0017212020022d0016212120022f0014212220022d0013212320022d0012212420022f0010212520022d000f212620022d000e212720022f000c212820022d000b212920022d000a212a20022f0008212b20022d0007212c20022d0006212d20022f0004212e20022d0003212f20022d0002213020022f000021312002102f2008102f41c000102d2202450d2f20022005370038200220203a0037200220213a0036200220223b0034200220233a0033200220243a0032200220253b0030200220263a002f200220273a002e200220283b002c200220293a002b2002202a3a002a2002202b3b00282002202c3a00272002202d3a00262002202e3b00242002202f3a0023200220303a0022200220313b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b0000200341a0036a200210b202200341a0066a41086a2208200341a0036a41206a290300370300200341a0066a41106a2209200341c8036a290300370300200341a0066a41186a220a200341d0036a290300370300200341a0066a41206a220b200341d8036a2802003602002003200341a0036a41186a2903003703a006024020032802b003220c450d00200341a0036a41086a2903002105200341dc036a280200210d20032903a003210620032802b403210e200341f8046a41206a200b280200360200200341f8046a41186a200a290300370300200341f8046a41106a2009290300370300200341f8046a41086a2008290300370300200320032903a0063703f8042002102f200341c0026a41186a20034194056a290200370300200341c0026a41106a2003418c056a290200370300200341c0026a41086a20034184056a290200370300200320032902fc043703c0020240200e450d00200c102f0b200341a0036a41186a220b4200370300200341a0036a41106a22084200370300200341a0036a41086a22024200370300200342003703a003418de6c300ad4280808080e000841001220929000021072002200941086a290000370300200320073703a0032009102f419ce6c300ad4280808080e00084100122092900002107200341d8046a41086a220a200941086a290000370300200320073703d8042009102f200820032903d8042207370300200341a0066a41086a22092002290300370300200341a0066a41106a220c2007370300200341a0066a41186a220e200a290300370300200320032903a0033703a006200341f8006a200341a0066a4120109501200328027c410020032802781b200d4180de344100200341f8016a200341c0026a412010ea061b6a41809c316a490d02200b42003703002008420037030020024200370300200342003703a003419298ca00ad42808080809001841001220d29000021072002200d41086a290000370300200320073703a003200d102f418ca8c200ad4280808080d001841001220d2900002107200a200d41086a290000370300200320073703d804200d102f200820032903d804370000200841086a200a29030037000020092002290300370300200c2008290300370300200e200b290300370300200320032903a0033703a006200341a0036a200341a0066a10c90220032802a0032202410420021b220a20032902a403420020021b2207422088a741286c6a2109200a2102034020022009460d040240200341c0056a200241046a2208460d00200841246a21022008200341c0056a412010ea060d010b0b20004183143b0100200041086a4108360200200041046a41fb93c200360200200041026a41113a00002007a7450d2a200a102f410121080c320b2002102f200041086a410f360200200041046a41ec93c200360200200041026a41123a000020004183143b0100410121080c310b200041023a0000410121080c300b20004183143b0100200041086a4105360200200041046a418394c200360200200041026a41103a0000410121080c2f0b200341a0036a200341c0026a200341f8016a20062005410010bc01419298ca00ad4280808080900184100122022d000f210920022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002102f4199a8c200ad428080808090018410012202290008211a20022d0007211620022d0006211720022f0004211820022d0003211920022d0002211f20022f000021202002102f4120102d2208450d2c200820032903c005370000200841186a200341c0056a41186a2221290300370000200841106a200341c0056a41106a2222290300370000200841086a200341c0056a41086a22232903003700002008ad428080808080048410032202290018211b20022d0017212420022d0016212520022f0014212620022d0013212720022d0012212820022f0010212920022d000f212a20022d000e212b20022f000c212c20022d000b212d20022d000a212e20022f0008212f20022d0007213020022d0006213120022f0004213220022d0003213320022d0002213420022f000021352002102f2008102f41c000102d2202450d2c2002201b370038200220243a0037200220253a0036200220263b0034200220273a0033200220283a0032200220293b00302002202a3a002f2002202b3a002e2002202c3b002c2002202d3a002b2002202e3a002a2002202f3b0028200220303a0027200220313a0026200220323b0024200220333a0023200220343a0022200220353b00202002201a370018200220163a0017200220173a0016200220183b0014200220193a00132002201f3a0012200220203b0010200220093a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b00002002ad428080808080088410052002102f200341a0036a41086a410f3a0000200341a9036a20032903c005370000200341b1036a2023290300370000200341b9036a2022290300370000200341c1036a2021290300370000200341c9036a20032903c002370000200341d1036a200341c0026a41086a290300370000200341d9036a200341c0026a41106a290300370000200341e1036a200341c0026a41186a290300370000200341063a00a00320034190046a200637030020034198046a200537030020034181046a200341f8016a41186a290300370000200341f9036a200341f8016a41106a290300370000200341f1036a200341f8016a41086a290300370000200341e9036a20032903f80137000041c8e1ca004100200341a0036a108c0102402007a7450d00200a102f0b200041043a0000410121080c2e0b200341f8046a41186a200141196a29000037030020034188056a200141116a29000037030020034180056a200141096a290000370300200320012900013703f8042002411a6a2901002107024020022d0000450d00200241196a2d00002108200241186a2d00002109200241166a2f01002102200320073702a403200320083a00a303200320093a00a203200320023b01a0030c100b20022d00012102200320073703a003200241ff01714101470d0f419298ca00ad4280808080900184100122022900002107200341a0066a41086a200241086a290000370300200320073703a0062002102f41f9b5c600ad4280808080d00084100122022900002107200341a0036a41086a200241086a290000370300200320073703a0032002102f4120102d2202450d2b200220032903f804370000200241186a200341f8046a41186a290300370000200241106a200341f8046a41106a290300370000200241086a200341f8046a41086a2903003700002002ad4280808080800484100322082900002107200841086a2900002105200841106a2900002106200341b0016a41186a2209200841186a290000370300200341b0016a41106a220a2006370300200341b0016a41086a2005370300200320073703b0012008102f2002102f41c000102d2202450d2b200220032903a006370000200241086a200341a0066a41086a220b290300370000200220032903a003370010200241186a200341a0036a41086a2208290300370000200220032903b001370020200241286a200341b0016a41086a290300370000200241306a200a290300370000200241386a200929030037000020034188016a200241c000109501200328028c01210a20032802880121092002102f2009450d0d200341a0036a41186a4200370300200341a0036a41106a2209420037030020084200370300200342003703a003418de6c300ad4280808080e000841001220229000021072008200241086a290000370300200320073703a0032002102f419ce6c300ad4280808080e00084100122022900002107200341d8046a41086a220c200241086a290000370300200320073703d8042002102f200920032903d8042207370300200b2008290300370300200341a0066a41106a2007370300200341a0066a41186a200c290300370300200320032903a0033703a00620034180016a200341a0066a41201095010240200a20032802840141002003280280011b4b0d00200342e4cab5fbb6ccdcb0e3003703c002200341c0026a200341f8046a10b101419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41f9b5c600ad4280808080d0008410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d2c200820032903f804370000200841186a200341f8046a41186a2220290300370000200841106a200341f8046a41106a2221290300370000200841086a200341f8046a41086a22222903003700002008ad428080808080048410032202290018210520022d0017212320022d0016212420022f0014212520022d0013212620022d0012212720022f0010212820022d000f212920022d000e212a20022f000c212b20022d000b212c20022d000a212d20022f0008212e20022d0007212f20022d0006213020022f0004213120022d0003213220022d0002213320022f000021342002102f2008102f41c000102d2202450d2c20022005370038200220233a0037200220243a0036200220253b0034200220263a0033200220273a0032200220283b0030200220293a002f2002202a3a002e2002202b3b002c2002202c3a002b2002202d3a002a2002202e3b00282002202f3a0027200220303a0026200220313b0024200220323a0023200220333a0022200220343b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b00002002ad428080808080088410052002102f200341a0036a41086a41103a0000200341a9036a20032903f804370000200341b1036a2022290300370000200341b9036a2021290300370000200341c1036a2020290300370000200341063a00a00341c8e1ca004100200341a0036a108c01200041043a0000410121080c2e0b20004183143b0100200041086a410a360200200041046a41ae93c200360200200041026a41173a0000410121080c2d0b2002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a024020022d0000450d00200320073702a403200320083a00a303200320093a00a2032003200a3b01a0030c0e0b2001410f6a2d0000210f2001410d6a2f000021102001410b6a2d00002111200141096a2f00002112200141076a2d00002113200141056a2f00002114200141036a2d0000211520012f00012116200141196a2900002106200141116a2900002105200141106a2d0000210b2001410c6a2d0000210c200141086a2d0000210d200141046a2d0000210e200241156a2d00002117200241146a2d00002118200241126a2f01002119200241116a2d0000211f200241106a2d000021202002410e6a2f010021212002410d6a2d000021222002410c6a2d000021232002410a6a2f01002124200241096a2d00002125200241086a2d00002126200241066a2f01002127200241056a2d00002128200241046a2d00002129200241026a2f0100212a20022d00012102200320073703a003200241ff01714101470d0d200320073703b806200320083a00b706200320093a00b6062003200a3b01b406200320173a00b306200320183a00b206200320193b01b0062003201f3a00af06200320203a00ae06200320213b01ac06200320223a00ab06200320233a00aa06200320243b01a806200320253a00a706200320263a00a606200320273b01a406200320283a00a306200320293a00a2062003202a3b01a006419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c211720022d000b211820022d000a211920022f0008211f20022d0007212020022d0006212120022f0004212220022d0003212320022d0002212420022f000021252002102f41d49ac800ad4280808080d0008410012202290008210720022d0007212620022d0006212720022f0004212820022d0003212920022d0002212a20022f0000212b2002102f4120102d2208450d2a200820032903a006370000200841186a200341a0066a41186a290300370000200841106a200341a0066a41106a290300370000200841086a200341a0066a41086a2903003700002008ad428080808080048410032202290018211a20022d0017212c20022d0016212d20022f0014212e20022d0013212f20022d0012213020022f0010213120022d000f213220022d000e213320022f000c213420022d000b213520022d000a213620022f0008213720022d0007213820022d0006213920022f0004213a20022d0003213b20022d0002213c20022f0000213d2002102f2008102f41c000102d2202450d2a2002201a3700382002202c3a00372002202d3a00362002202e3b00342002202f3a0033200220303a0032200220313b0030200220323a002f200220333a002e200220343b002c200220353a002b200220363a002a200220373b0028200220383a0027200220393a00262002203a3b00242002203b3a00232002203c3a00222002203d3b002020022007370018200220263a0017200220273a0016200220283b0014200220293a00132002202a3a00122002202b3b0010200220093a000f2002200a3a000e200220173b000c200220183a000b200220193a000a2002201f3b0008200220203a0007200220213a0006200220223b0004200220233a0003200220243a0002200220253b0000200341a0036a200210c70220032d00a003211720032010200f4110747222083b01bc01200341be016a20084110763a00002003201220114110747222093b01b801200341ba016a20094110763a000020032014201341107472220a3b01b401200341b6016a200a4110763a0000200320063702c801200320053702c0012003200b3a00bf012003200c3a00bb012003200d3a00b7012003200e3a00b30120032016201541107472220f3b01b0012003200f4110763a00b2010240024020174102460d00200f418080fc07714110762110200a418080fc077141107621112009418080fc077141107621122008418080fc077141107621132005421088a721142005421888a721152005422088a721162005423088a721172005423888a721182005a721190c010b200341a0066a10d00220032902c801210620032d00c701211820032d00c601211720032f01c401211620032d00c301211520032d00c201211420032f01c001211920032d00bf01210b20032d00be01211320032f01bc01210820032d00bb01210c20032d00ba01211220032f01b801210920032d00b701210d20032d00b601211120032f01b401210a20032d00b301210e20032d00b201211020032f01b001210f0b200341003a00e0054101102d2203450d2a200341003a000020034101412110312203450d2a20032006370019200320183a0018200320173a0017200320163b0015200320153a0014200320143a0013200320193b00112003200b3a0010200320133a000f200320083b000d2003200c3a000c200320123a000b200320093b00092003200d3a0008200320113a00072003200a3b00052003200e3a0004200320103a00032003200f3b00012002ad42808080808008842003ad428080808090048410042003102f2002102f200041043a0000410121080c2c0b20004183143b0100200041086a410f360200200041046a418095c200360200200041026a41043a00000c2b0b20004183143b0100200041086a4108360200200041046a419f95c200360200200041026a41003a0000410121080c2a0b20082002104b000b2002200b104a000b2009200b104b000b200341c0056a41146a4109360200200341cc056a410a360200200341f8016a41146a4103360200200320034180066a3602e005200320034190066a3602f005200341a0036a41146a4100360200200342033702fc01200341b4e0ca003602f8012003410a3602c405200341c8e1ca003602b003200342013702a40320034188e1ca003602a0032003200341c0056a360288022003200341a0036a3602d0052003200341f0056a3602c8052003200341e0056a3602c005200341f8016a41c8e1ca001043000b200041086a4108360200200041046a418f95c200360200200041026a41033a000020004183143b0100410121080c250b200041023a0000410121080c240b419ae3c300411e41f8b4ca001039000b4188bbca00200a200b103b000b20004183143b0100200041086a4111360200200041046a419394c200360200200041026a410e3a00000c050b20004183143b0100200041086a4111360200200041046a419394c200360200200041026a410e3a00000c030b20004183143b0100200041086a4109360200200041046a41b893c200360200200041026a41163a0000410121080c1f0b200041023a0000410121080c1e0b200041023a0000410121080c1d0b41002102410121082022450d1d2021102f0c1d0b4101210241002108200c450d1c200b102f0c1c0b024020032802f405450d0020032802f005102f0b4101210c0c010b4100210c0b0240024020032802800622090d004100210b0c010b200341f0056a41086a20034180066a41086a280200220d360200200320032903800622073703f005200341a0066a2007a7220e200d10cb020240024020032d00c1064102470d0020034100360298012003420137039001200341c0056a41146a4129360200200341cc056a410b36020020034109360294072003419298ca00360290072003410b3602c4052003410b3602e4052003418a93c2003602e0052003200341f0056a3602d0052003200341e0056a3602c805200320034190076a3602c005200320034190016a36029c07200341a0036a41146a4103360200200342033702a403200341b48fc4003602a0032003200341c0056a3602b0032003419c076a41d8dbc100200341a0036a103c1a200335029801422086200335029001841008200328029401450d01200328029001102f0c010b200341a0036a200341a0066a41e30010e8061a200341e1036a200341f8046a41206a2d00003a0000200341d9036a200341f8046a41186a290300370000200341d1036a200341f8046a41106a290300370000200341c9036a200341f8046a41086a290300370000200320032903f8043700c103200341003602c805200342013703c0054120102d220b450d18200b20032903a003370000200b41086a200341a0036a41086a290300370000200b41106a200341a0036a41106a290300370000200b41186a200341a0036a41186a290300370000200342a080808080043702c4052003200b3602c005024020032d00c003220f41064b0d0002400240024002400240024002400240200f0e0700010203040506000b200341003a00e0050c060b200341013a00e0050c050b200341023a00e0050c040b200341033a00e0050c030b200341043a00e0050c020b200341053a00e0050c010b200341063a00e0050b200b412041c0001031220b450d19200b20032d00e0053a00202003200b3602c005200342c080808090043702c4050b200341c1036a200341c0056a10ce0220032802c405210b200dad422086200ead8420033502c80542208620032802c005220dad841004200b450d00200d102f0b024020032802f405450d0020032802f005102f0b4101210b0b0240200c200328029006220d45720d00200328029406450d00200d102f0b0240200b200945720d00200328028406450d002009102f0b200a41ff01714107470d010b4100210a0b2002102f200341a0036a41186a4200370300200341a0036a41106a220b4200370300200341a0036a41086a22024200370300200342003703a003418de6c300ad4280808080e000841001220929000021072002200941086a290000370300200320073703a0032009102f419ce6c300ad4280808080e00084100122092900002107200341d8046a41086a220c200941086a290000370300200320073703d8042009102f200b20032903d8042207370300200341a0066a41086a2002290300370300200341a0066a41106a2007370300200341a0066a41186a200c290300370300200320032903a0033703a006200341386a200341a0066a4120109501200328023c210b2003280238210c419298ca00ad4280808080900184100122022d000f210d20022d000e210e20022f000c210f20022d000b211020022d000a211120022f0008211220022d0007211320022d0006211420022f0004211520022d0003211620022d0002211720022f000021182002102f41f9b5c600ad4280808080d0008410012202290008210720022d0007211920022d0006211f20022f0004212020022d0003212120022d0002212220022f000021232002102f4120102d2209450d14200920032903d001370000200941186a200341d0016a41186a290300370000200941106a200341d0016a41106a290300370000200941086a200341d0016a41086a2903003700002009ad428080808080048410032202290018210520022d0017212420022d0016212520022f0014212620022d0013212720022d0012212820022f0010212920022d000f212a20022d000e212b20022f000c212c20022d000b212d20022d000a212e20022f0008212f20022d0007213020022d0006213120022f0004213220022d0003213320022d0002213420022f000021352002102f2009102f41c000102d2202450d1420022005370038200220243a0037200220253a0036200220263b0034200220273a0033200220283a0032200220293b00302002202a3a002f2002202b3a002e2002202c3b002c2002202d3a002b2002202e3a002a2002202f3b0028200220303a0027200220313a0026200220323b0024200220333a0023200220343a0022200220353b002020022007370018200220193a00172002201f3a0016200220203b0014200220213a0013200220223a0012200220233b00102002200d3a000f2002200e3a000e2002200f3b000c200220103a000b200220113a000a200220123b0008200220133a0007200220143a0006200220153b0004200220163a0003200220173a0002200220183b00002003200a41187441187541027441d897ca006a2802004180de346c200b4100200c1b6a3602a0032002ad4280808080800884200341a0036aad4280808080c0008410042002102f200342e4cab5fbb6ccdcb0e3003703f001200341f0016a200341d0016a427f427f410210b001200341a0036a41086a41093a0000200341a0036a41096a20032903d001370000200341b1036a200341d0016a41086a290300370000200341b9036a200341e0016a290300370000200341c1036a200341e8016a290300370000200341063a00a00341c8e1ca004100200341a0036a108c01200041043a00000c160b200041023a0000410121080c150b41002109410021080b200341a9036a20032903f804370000200341c9036a20093a0000200341ca036a20032903c002370100200341b1036a200341f8046a41086a290300370000200341b9036a200341f8046a41106a290300370000200341c1036a200341f8046a41186a290300370000200341d2036a200341c0026a41086a290300370100200341da036a200341c0026a41106a290300370100200341e2036a200341c0026a41186a290300370100200320083a00a8032003200b3a00a403200320034190016a3602a003200341003602a806200342013703a0064120102d2208450d112008200329039001370000200841086a20034190016a41086a290300370000200841106a20034190016a41106a290300370000200841186a20034190016a41186a290300370000200342a080808080043702a406200320083602a0060240200b41064b0d0002400240024002400240024002400240200b0e0700010203040506000b200341003a00e0050c060b200341013a00e0050c050b200341023a00e0050c040b200341033a00e0050c030b200341043a00e0050c020b200341053a00e0050c010b200341063a00e0050b2008412041c00010312208450d12200820032d00e0053a0020200320083602a006200342c080808090043702a4060b200341a0036a41086a200341a0066a10ce0220032802a40621082002ad428080808080088420033502a80642208620032802a0062209ad84100402402008450d002009102f0b2002102f200342e4cab5fbb6ccdcb0e3003703900620034190066a200341d0016a10d202419298ca00ad4280808080900184100122022d000f210920022d000e210a20022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f41f9b5c600ad4280808080d0008410012202290008210720022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f4120102d2208450d11200820032903d001370000200841186a200341d0016a41186a2220290300370000200841106a200341d0016a41106a2221290300370000200841086a200341d0016a41086a22222903003700002008ad428080808080048410032202290018210520022d0017212320022d0016212420022f0014212520022d0013212620022d0012212720022f0010212820022d000f212920022d000e212a20022f000c212b20022d000b212c20022d000a212d20022f0008212e20022d0007212f20022d0006213020022f0004213120022d0003213220022d0002213320022f000021342002102f2008102f41c000102d2202450d1120022005370038200220233a0037200220243a0036200220253b0034200220263a0033200220273a0032200220283b0030200220293a002f2002202a3a002e2002202b3b002c2002202c3a002b2002202d3a002a2002202e3b00282002202f3a0027200220303a0026200220313b0024200220323a0023200220333a0022200220343b002020022007370018200220153a0017200220163a0016200220173b0014200220183a0013200220193a00122002201f3b0010200220093a000f2002200a3a000e2002200b3b000c2002200c3a000b2002200d3a000a2002200e3b00082002200f3a0007200220103a0006200220113b0004200220123a0003200220133a0002200220143b00002002ad428080808080088410052002102f200341a0036a41086a41083a0000200341a9036a20032903d001370000200341b1036a2022290300370000200341b9036a2021290300370000200341c1036a2020290300370000200341c9036a200329039001370000200341d1036a20034190016a41086a290300370000200341d9036a20034190016a41106a290300370000200341e1036a20034190016a41186a290300370000200341063a00a00341c8e1ca004100200341a0036a108c01200041043a0000410121080c130b200041023a0000410121080c120b200041023a0000410121080c110b200041023a0000410121080c100b2008417f6a200b4f0d00200b20086b2202200b490d01201b42ffffffff0f83211b0b20004183143b0100200041086a410f360200200041046a41b1d5c70036020041012108200041026a41013a0000201ba7450d0e2019102f0c0e0b419298ca00ad4280808080900184100122082900002107200829000821052008102f418ca8c200ad4280808080d001841001220829000021062008290008211a2008102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341a0036a20192002108101200341b0016aad428080808080048420033502a80342208620032802a0032202ad841004024020032802a403450d002002102f0b0240201ba7450d002019102f0b200041043a0000410121080c0d0b200341a0036a41186a200341f8046a41186a290300370300200341a0036a41106a200341f8046a41106a290300370300200341a0036a41086a200341f8046a41086a290300370300200320032903f8043703a003200341a0036a21084100210a0b02402009200b470d0020112009470d00201141016a22022011490d022011410174220b2002200b20024b1b220241ffffff3f712002470d02200241057422024100480d020240024020110d002002102d21100c010b201020114105742002103121100b2010450d0a200241057621110b2010200a4105746a220241206a20022009200a6b41057410e9061a200241186a200841186a290000370000200241106a200841106a290000370000200241086a200841086a29000037000020022008290000370000200341a0036a41186a4200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a003418de6c300ad4280808080e000841001220829000021072002200841086a290000370300200320073703a0032008102f419ce6c300ad4280808080e00084100122082900002107200341d8046a41086a220b200841086a290000370300200320073703d8042008102f200a20032903d8042207370300200341a0066a41086a2002290300370300200341a0066a41106a2007370300200341a0066a41186a200b290300370300200320032903a0033703a006200341306a200341a0066a41201095012003280230210a2003280234210b419298ca00ad4280808080900184100122022d000f210c20022d000e210d20022f000c210f20022d000b211220022d000a211320022f0008211420022d0007211520022d0006211620022f0004211720022d0003211820022d0002211920022f0000211f2002102f41b080c300ad428080808090018410012202290008210720022d0007212020022d0006212120022f0004212220022d0003212320022d0002212420022f000021252002102f4120102d2208450d09200820032903c002370000200841186a200341c0026a41186a290300370000200841106a200341c0026a41106a290300370000200841086a200341c0026a41086a2903003700002008ad428080808080048410032202290018210520022d0017212620022d0016212720022f0014212820022d0013212920022d0012212a20022f0010212b20022d000f212c20022d000e212d20022f000c212e20022d000b212f20022d000a213020022f0008213120022d0007213220022d0006213320022f0004213420022d0003213520022d0002213620022f000021372002102f2008102f41c000102d220e450d09200e2005370038200e20263a0037200e20273a0036200e20283b0034200e20293a0033200e202a3a0032200e202b3b0030200e202c3a002f200e202d3a002e200e202e3b002c200e202f3a002b200e20303a002a200e20313b0028200e20323a0027200e20333a0026200e20343b0024200e20353a0023200e20363a0022200e20373b0020200e2007370018200e20203a0017200e20213a0016200e20223b0014200e20233a0013200e20243a0012200e20253b0010200e200c3a000f200e200d3a000e200e200f3b000c200e20123a000b200e20133a000a200e20143b0008200e20153a0007200e20163a0006200e20173b0004200e20183a0003200e20193a0002200e201f3b0000200941016a2202410574220d41047241046a2208417f4c0d002008102d2209450d092009200b41809c316a41809c31200a1b2212360000200341043602a803200320083602a403200320093602a0032002200341a0036a10690240024020020d0020032802a803210820032802a403210b20032802a003210c0c010b410020032802a80322086b210a20032802a003210c20032802a4032109201021020340024002402009200a6a411f4d0d002009210b0c010b200841206a220b2008490d042009410174220f200b200f200b4b1b220b4100480d040240024020090d00200b102d210c0c010b200c2009200b1031210c0b200c450d0c0b200c20086a22092002290000370000200941186a200241186a290000370000200941106a200241106a290000370000200941086a200241086a290000370000200a41606a210a200841206a2108200b2109200241206a2102200d41606a220d0d000b2003200b3602a403200320083602a8032003200c3602a0030b200ead42808080808008842008ad422086200cad8410040240200b450d00200c102f0b200e102f02402011450d002010102f0b200341a0036a41086a410a3a0000200341a9036a20032903f804370000200341c9036a20032903c002370000200341b1036a200341f8046a41086a290300370000200341b9036a200341f8046a41106a290300370000200341c1036a200341f8046a41186a290300370000200341d1036a200341c0026a41086a290300370000200341d9036a200341c0026a41106a290300370000200341e1036a200341c0026a41186a290300370000200341063a00a003200341ec036a201236020041c8e1ca004100200341a0036a108c01419298ca00ad4280808080900184100122022900002107200229000821052002102f41bfa8c200ad4280808080c001841001220229000021062002290008211a2002102f2003201a3703c801200320063703c001200320053703b801200320073703b001200341b0016aad42808080808004841005200041043a0000410121080c0b0b103d000b1038000b200041023a0000410121080c080b410121080c070b200041023a0000410121080c060b20032802d801210820032802d401210920032802d00121020b2002450d00201a2008ad4220862002ad8410042009450d012002102f0c010b419298ca00ad42808080809001841001220229000021072002290008211b2002102f41aba8c200ad4280808080b0018410012202290000211c2002290008211d2002102f2003201d3703c8012003201c3703c0012003201b3703b801200320073703b0014108102d2202450d01200342083702a403200320023602a0034101200341a0036a1069200328029007200341a0036a107f20032802a4032102201a20033502a80342208620032802a0032208ad8410042002450d002008102f0b200341b8036a2005370300200341b0036a2006370300200341ac036a200a360200200341a8036a41003a0000200341063a00a00341c8e1ca004100200341a0036a108c01200041043a0000410121080c020b1036000b200041023a0000410121080b410121020b024020012d0000416d6a220341014b0d000240024020030e020100010b2002450d01200141086a280200450d01200141046a280200102f0c010b2008450d00200141086a280200450d00200141046a280200102f200424000f0b200424000bd60201027f024002402002450d002002417f6a21040240024020012d0000220241037122054103460d0002400240024020050e03000102000b200241027621020c030b2004450d0320012d0001410874200272220241ffff0371418002490d03200241fcff037141027621020c020b20044103490d0220012f0001200141036a2d000041107472410874200272220241808004490d02200241027621020c010b200241034b0d0120044104490d0120012800012202418080808004490d010b200220036a22012002490d0141012103410121050240200241c000490d0041022105200241808001490d00410441052002418080808004491b21050b0240200141c000490d0041022103200141808001490d00410441052001418080808004491b21030b20002001360204200041003602002000410c6a2003360200200041086a20053602000f0b200041013602000f0b200041013602000b9f0301027f230041e0006b22032400200341003a00050240024002400240200041c000490d00200041808001490d012000418080808004490d0241052104200341053a0005200341033a0000200320003600010c030b41012104200341013a0005200320004102743a00000c020b41022104200341023a0005200320004102744101723b01000c010b41042104200341043a0005200320004102744102723602000b024002402001280200220028020822012002490d0020002802002100200320023602082003200436020c20042002470d0120002003200210e8061a200341e0006a24000f0b20022001104a000b200341286a41146a4109360200200341346a410a360200200341106a41146a41033602002003200341086a36024020032003410c6a360244200341c8006a41146a410036020020034203370214200341b4e0ca003602102003410a36022c200341c8e1ca003602582003420137024c20034188e1ca003602482003200341286a3602202003200341c8006a3602382003200341c4006a3602302003200341c0006a360228200341106a41c8e1ca001043000b881a07027f017e017f027e037f017e027f23004190016b220524000240024002400240024002400240200210b002450d00419298ca00ad4280808080900184100122062900002107200541d8006a41086a200641086a290000370300200520073703582006102f41de97c200ad4280808080e00084100122062900002107200541f0006a41086a200641086a290000370300200520073703702006102f4104102d2206450d042006200236000020064104412410312206450d04200620012900003700042006411c6a200141186a290000370000200641146a200141106a2900003700002006410c6a200141086a2900003700002006ad4280808080c00484100322082900002107200841086a2900002109200841106a290000210a200541106a41186a220b200841186a290000370300200541106a41106a220c200a370300200541106a41086a220d2009370300200520073703102008102f2006102f41c000102d2206450d04200620052903583700002006200529037037001020062005290310370020200641086a200541d8006a41086a290300370000200641186a200541f0006a41086a290300370000200641286a200d290300370000200641306a200c290300370000200641386a200b2903003700002005200641c00041c8e1ca004100410010b501200528020021082006102f20084101460d032005200136020c419298ca00ad4280808080900184100122062900002107200541d8006a41086a2208200641086a290000370300200520073703582006102f41a2a8c200ad4280808080900184100122062900002107200541f0006a41086a220b200641086a290000370300200520073703702006102f20052002360240200541c0006aad220e4280808080c00084100322062900002107200641086a2900002109200641106a290000210a200541106a41186a220c200641186a290000370300200541106a41106a220d200a370300200541106a41086a220f2009370300200520073703102006102f41c000102d2206450d04200620052903583700002006200529037037001020062005290310370020200641086a2008290300370000200641186a200b290300370000200641286a200f290300370000200641306a200d290300370000200641386a200c290300370000200541f0006a2006ad42808080808008842207100210732005280270220b450d01200541f8006a28020021082005280274210c0c020b2000418a263b0001200041086a4111360200200041046a41db93c200360200410321060c050b4104102d2208450d0220054204370214200520083602104100200541106a1069200528021821082005280214210c2005280210210b0b200520083602382005200c3602342005200b3602300240024002400240024002400240024002402008450d00200541106a200b2008410110c40220052802104101470d01200c450d08200b102f0c080b4101200541306a1069200528020c210c024002402005280234220b2005280238220d6b4120490d00200528023021080c010b200d41206a2208200d490d0b200b410174220d2008200d20084b1b220f4100480d0b02400240200b0d00200f102d21080c010b2005280230200b200f103121080b2008450d0a2005200f360234200520083602302005280238210d200f210b0b2008200d6a220f41086a200c41086a290000370000200f41106a200c41106a290000370000200f41186a200c41186a2900003700002005200d41206a220d360238200f200c2900003700000c010b2005280214210d02402005411c6a280200220b200541186a280200220c460d002008200b200c6b6a220841046a220f417f4c0d0202400240200f0d00410121100c010b200f102d2210450d0a0b2005200f36024420052010360240200520083602482005200541c0006a360210200d200541106a200b10c5022008200b490d032005280248220d2008490d042005280238220d200c490d052005280240210f2005280230211020052008200b6b22083602502005200d200c6b220d3602542008200d470d06200f200b6a2010200c6a200810e8061a200528020c210c024002402005280244220b2005280248220d6b4120490d00200528024021080c010b200d41206a2208200d490d0b200b410174220d2008200d20084b1b220f4100480d0b02400240200b0d00200f102d21080c010b2005280240200b200f103121080b2008450d0a2005200f360244200520083602402005280248210d200f210b0b2008200d6a220f41086a200c41086a290000370000200f41106a200c41106a290000370000200f41186a200c41186a2900003700002005200d41206a220d360248200f200c2900003700002005280234450d012005280230102f0c010b2005200541306a360210200d200541106a200c10c502200528020c210c024002402005280234220b2005280238220d6b4120490d00200528023021080c010b200d41206a2208200d490d0a200b410174220d2008200d20084b1b220f4100480d0a02400240200b0d00200f102d21080c010b2005280230200b200f103121080b2008450d092005200f360234200520083602302005280238210d200f210b0b2008200d6a220f41086a200c41086a290000370000200f41106a200c41106a290000370000200f41186a200c41186a2900003700002005200d41206a220d360238200f200c2900003700000b2008450d052007200dad4220862008ad8410040240200b450d002008102f0b2006102f0c060b103d000b200b2008104b000b2008200d104a000b200c200d104b000b200541f0006a41146a4109360200200541fc006a410a360200200541d8006a41146a41033602002005200541d0006a360288012005200541d4006a36028c01200541106a41146a41003602002005420337025c200541b4e0ca003602582005410a360274200541c8e1ca003602202005420137021420054188e1ca003602102005200541f0006a3602682005200541106a3602800120052005418c016a360278200520054188016a360270200541d8006a41c8e1ca001043000b2006102f419298ca00ad4280808080900184100122062900002107200541d8006a41086a2208200641086a290000370300200520073703582006102f41a2a8c200ad4280808080900184100122062900002107200541f0006a41086a220b200641086a290000370300200520073703702006102f20052002360240200e4280808080c00084100322062900002107200641086a2900002109200641106a290000210a200541106a41186a220c200641186a290000370300200541106a41106a220d200a370300200541106a41086a220f2009370300200520073703102006102f41c000102d2206450d01200620052903583700002006200529037037001020062005290310370020200641086a2008290300370000200641186a200b290300370000200641286a200f290300370000200641306a200d290300370000200641386a200c2903003700004108102d2208450d0120054208370214200520083602104101200541106a1069200528020c2108024002402005280214220f2005280218220c6b4120490d002005280210210b0c010b200c41206a220b200c490d03200f410174220d200b200d200b4b1b220d4100480d0302400240200f0d00200d102d210b0c010b2005280210200f200d1031210b0b200b450d022005200d3602142005200b360210200d210f0b200b200c6a220d41086a200841086a290000370000200d41106a200841106a290000370000200d41186a200841186a2900003700002005200c41206a220c360218200d20082900003700002006ad4280808080800884200cad422086200bad8410040240200f450d00200b102f0b2006102f0b419298ca00ad4280808080900184100122062900002107200541d8006a41086a200641086a290000370300200520073703582006102f41de97c200ad4280808080e00084100122062900002107200541f0006a41086a200641086a290000370300200520073703702006102f4104102d2206450d002006200236000020064104412410312206450d00200620012900003700042006411c6a200141186a290000370000200641146a200141106a2900003700002006410c6a200141086a2900003700002006ad4280808080c00484100322012900002107200141086a2900002109200141106a290000210a200541106a41186a2202200141186a290000370300200541106a41106a2208200a370300200541106a41086a220b2009370300200520073703102001102f2006102f41c000102d2206450d00200620052903583700002006200529037037001020062005290310370020200641086a200541d8006a41086a290300370000200641186a200541f0006a41086a290300370000200641286a200b290300370000200641306a2008290300370000200641386a20022903003700004101102d2201450d00200141807f410020031b2004723a00002006ad42808080808008842001ad4280808080108410042001102f2006102f410421060c020b1036000b1038000b200020063a000020054190016a24000bad0602067f047e23004190016b22022400200241c00036020c20022001360208200241106a2001ad4280808080800884100210730240024020022802102203450d002002280214210402400240200241186a2802002201450d0020032d0000220541014b0d002001417f6a2106024002400240024020050e020001000b41002101200241003a008801200341016a21070240034020062001460d01200241e8006a20016a200720016a2d00003a00002002200141016a22053a0088012005210120054120470d000b200241c8006a41186a200241e8006a41186a2903002208370300200241206a41086a200241e8006a41086a290300370300200241206a41106a200241e8006a41106a290300370300200241206a41186a200837030020022002290368370320410021010c020b200141ff0171450d03200241003a0088010c030b41002101200241003a008801200341016a2107034020062001460d02200241e8006a20016a200720016a2d00003a00002002200141016a22053a0088012005210120054120470d000b200241c8006a41186a200241e8006a41186a2903002208370300200241206a41086a200241e8006a41086a290300370300200241206a41106a200241e8006a41106a290300370300200241206a41186a200837030020022002290368370320410121010b200241e8006a41186a200241206a41186a2903002208370300200241e8006a41106a200241206a41106a2903002209370300200241e8006a41086a200241206a41086a290300220a37030020022002290320220b370368200041196a2008370000200041116a2009370000200041096a200a3700002000200b3700010c020b200141ff0171450d00200241003a0088010b20024100360250200242013703482002410b3602242002200241086a3602202002200241c8006a360244200241fc006a41013602002002420137026c200241b885c7003602682002200241206a360278200241c4006a41d8dbc100200241e8006a103c1a200235025042208620023502488410080240200228024c450d002002280248102f0b410221010b200020013a00002004450d012003102f0c010b200041023a00000b20024190016a24000bde0201047f230041e0006b22022400200241c00036020c20022001360208200241106a2001ad4280808080800884100210730240024020022802102201450d00200228021421032002200241186a2802002204360224200220013602200240024020044104490d0020022004417c6a3602242002200141046a36022020012800002104200241c8006a200241206a10980320022802482205450d002000200229024c37020820002005360204200020043602000c010b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602040b2003450d012001102f0c010b200041003602040b200241e0006a24000bdc0703067f017e0a7f230041a0016b220224002002412036021420022001360210200241186a2001ad428080808080048410021073024002400240024002400240024020022802182203450d00200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10e60120022802080d04200228020c2205200228022c220641286e2201200120054b1b2207ad42287e2208422088a70d012008a72201417f4c0d010240024020010d00410421090c010b2001102d2209450d03200141286e21070b02402005450d004100210a0340024002400240024020064104490d00200a41016a210b20022006417c6a220c36022c20022002280228220d41046a360228200d280000210e41002101200241003a00980102400340200c2001460d01200241f8006a20016a200d20016a220f41046a2d00003a00002002200f41056a3602282002200141016a220f3a009801200f2101200f4120470d000b200241d8006a41086a220c200241f8006a41086a290300370300200241d8006a41106a2210200241f8006a41106a290300370300200241d8006a41186a2211200241f8006a41186a2903003703002002200229037837035820022006200f6b2206417c6a220136022c20014104490d01200241386a41086a2212200c290300370300200241386a41106a220c2010290300370300200241386a41186a22102011290300370300200220022903583703382002200641786a220636022c2002200d200f6a220141086a360228200141046a280000210f2007200a470d04200a4101742201200b2001200b4b1bad42287e2208422088a70d0a2008a722014100480d0a200a0d022001102d21090c030b2002410036022c200141ff0171450d00200241003a0098010b2007450d092009102f0c090b2009200a41286c2001103121090b2009450d05200141286e21070b2009200a41286c6a2201200e360200200120022903383702042001410c6a2012290300370200200141146a200c2903003702002001411c6a20102903003702002001200f360224200b210a200b2005470d000b0b2009450d042000200736020420002009360200200041086a20053602000c050b200041003602000c050b103d000b1036000b1038000b20024100360260200242013703582002410b36023c2002200241106a3602382002200241d8006a3602342002418c016a41013602002002420137027c200241b885c7003602782002200241386a36028801200241346a41d8dbc100200241f8006a103c1a200235026042208620023502588410080240200228025c450d002002280258102f0b200041003602000b2004450d002003102f0b200241a0016a24000bcb0503027f037e027f230041f0016b22012400418de6c300ad4280808080e00084100122022900002103200141086a41086a200241086a290000370300200120033703082002102f41f0e8c600ad4280808080f00084100122022900002103200141a8016a41086a200241086a290000370300200120033703a8012002102f02404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141d0006a41186a2206200041186a290000370300200141d0006a41106a22072005370300200141d0006a41086a2004370300200120033703502000102f2002102f41c000102d2202450d0020022001290308370000200220012903a80137001020022001290350370020200241086a200141086a41086a290300370000200241186a200141a8016a41086a290300370000200241286a200141d0006a41086a2200290300370000200241306a2007290300370000200241386a2006290300370000200141d0006a200210f60220012903502103200141a8016a200041c40010e8061a200141a4016a41026a22062001419f016a2d00003a0000200120012f009d013b01a4010240024020034201510d0041002100200141086a410041c40010e7061a0c010b20012d009c012100200141086a200141a8016a41c40010e8061a200141046a41026a20062d00003a0000200120012f01a4013b01040b200141d8006a200141086a41c40010e80621062001419f016a200141066a2d00003a000020014201370350200141002000411874220041808080786a2207200720004b1b4118763a009c01200120012f01043b009d01200141c0003602ac01200120023602a8012006200141a8016a1090032002102f200141f0016a24000f0b1036000bec0d03077f017e067f230041c0026b220324002003200236020420032001360200200341086a2002ad4220862001ad84100210730240024020032802082204450d00200341106a2802002105200328020c210641002101200341003a00b8022005417e6a21070240024002400240024002400240034020052001460d0120034198026a20016a200420016a2d00003a00002003200141016a22023a00b8022007417f6a21072002210120024120470d000b200341f8016a41186a20034198026a41186a290300370300200341f8016a41106a20034198026a41106a290300370300200341f8016a41086a20034198026a41086a29030037030020032003290398023703f80120052002460d04200420026a22082d0000220941074f0d04200341f8006a41186a200341f8016a41186a290300370300200341f8006a41106a200341f8016a41106a290300370300200341f8006a41086a200341f8016a41086a290300370300200320032903f8013703782005417f6a2002460d04200841016a2d0000220141014b0d04200520026b210220010e020201020b200141ff0171450d03200341003a00b8020c030b41002101200341003a00b8022002417e6a21050240034020052001460d0120034198026a20016a200820016a41026a2d00003a00002003200141016a22023a00b8022002210120024120470d000b200341d8016a41086a20034198026a41086a290300220a370300200341b8016a41186a20034198026a41186a290300370300200341b8016a41106a20034198026a41106a290300370300200341b8016a41086a200a3703002003200329039802220a3703d8012003200a3703b801200720026b2107200820026a41026a2105410121010c020b200141ff0171450d02200341003a00b8020c020b200841026a21052002417e6a2107410021010b20034198016a41186a200341b8016a41186a29030037030020034198016a41106a200341b8016a41106a29030037030020034198016a41086a200341b8016a41086a290300370300200320032903b801370398012007450d0020052d0000220241014b0d004100210802400240024020020e020100010b41002102200341003a00b802200541016a21082007417f6a2105034020052002460d0220034198026a20026a200820026a2d00003a00002003200241016a22073a00b8022007210220074120470d000b200341d8016a41086a20034198026a41086a290300220a370300200341b8016a41186a20034198026a41186a290300370300200341b8016a41106a20034198026a41106a290300370300200341b8016a41086a200a3703002003200329039802220a3703d8012003200a3703b801410121080b200341186a41186a2202200341b8016a41186a290300370300200341186a41106a2207200341b8016a41106a290300370300200341186a41086a2205200341b8016a41086a290300370300200341386a41086a220b20034198016a41086a290300370300200341386a41106a220c20034198016a41106a290300370300200341386a41186a220d20034198016a41186a290300370300200320032903b8013703182003200329039801370338200341d8006a41186a220e200341f8006a41186a290300370300200341d8006a41106a220f200341f8006a41106a290300370300200341d8006a41086a2210200341f8006a41086a2903003703002003200329037837035820014102460d0220002003290358370000200020093a0020200041186a200e290300370000200041106a200f290300370000200041086a201029030037000020034198026a41086a2209200b29030037030020034198026a41106a220b200c29030037030020034198026a41186a220c200d2903003703002003200329033837039802200341f8016a41186a220d2002290300370300200341f8016a41106a22022007290300370300200341f8016a41086a22072005290300370300200320032903183703f8012000413a6a200c290300370000200041326a200b2903003700002000412a6a20092903003700002000200329039802370022200041c2006a20083a0000200041c3006a20032903f801370000200041cb006a2007290300370000200041d3006a2002290300370000200041db006a200d2903003700000c030b200241ff0171450d00200341003a00b8020b410221010b2003410036028002200342013703f8012003410b3602dc01200320033602d8012003200341f8016a3602b801200341ac026a41013602002003420137029c02200341b885c700360298022003200341d8016a3602a802200341b8016a41d8dbc10020034198026a103c1a20033502800242208620033502f80184100820032802fc01450d0020032802f801102f0b200020013a00212006450d012004102f0c010b200041023a00210b200341c0026a24000bbd0101047f230041106b2202240020002802082103200028020021004101210420012802184199a5c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a4190ebc30010621a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d00200228020022002802184198a5c00041012000411c6a28020028020c11000021040b200241106a240020040bc80801047f0240024002400240200028020022020d0002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d04200341017422022004200220044b1b22024100480d040240024020030d002002102d21040c010b200128020020032002103121040b2004450d0320012004360200200141046a2002360200200141086a28020021030b200141086a200341016a360200200420036a41003a00000c010b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d03200341017422052004200520044b1b22054100480d030240024020030d002005102d21040c010b200128020020032005103121040b2004450d0220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a00002002280200210302400240200141046a2802002202200528020022046b4120490d00200128020021020c010b200441206a22052004490d03200241017422042005200420054b1b22044100480d030240024020020d002004102d21020c010b200128020020022004103121020b2002450d0220012002360200200141046a2004360200200141086a28020021040b200141086a200441206a360200200220046a220441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a290000370000200420032900003700000b200141046a2802002104200141086a28020021030240200028020422000d000240024020042003460d00200128020021000c010b200341016a22002003490d03200341017422042000200420004b1b22044100480d030240024020030d002004102d21000c010b200128020020032004103121000b2000450d0220012000360200200141046a2004360200200141086a28020021030b200141086a200341016a360200200020036a41003a00000f0b0240024020042003460d00200128020021040c010b200341016a22042003490d02200341017422022004200220044b1b22024100480d020240024020030d002002102d21040c010b200128020020032002103121040b2004450d0120012004360200200141046a2002360200200141086a28020021030b200141086a2202200341016a360200200420036a41013a000002400240200141046a2802002204200228020022036b4120490d00200128020021040c010b200341206a22022003490d02200441017422032002200320024b1b22034100480d020240024020040d002003102d21040c010b200128020020042003103121040b2004450d0120012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000f0b1036000b1038000bbe0801037f200141046a2802002102200141086a2802002103024002400240024020002d00004101460d000240024020022003460d00200128020021020c010b200341016a22022003490d04200341017422042002200420024b1b22044100480d040240024020030d002004102d21020c010b200128020020032004103121020b2002450d0320012002360200200141046a2004360200200141086a28020021030b200141086a200341016a360200200220036a41003a00000c010b0240024020022003460d00200128020021020c010b200341016a22022003490d03200341017422042002200420024b1b22044100480d030240024020030d002004102d21020c010b200128020020032004103121020b2002450d0220012002360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200220036a41013a000002400240200141046a2802002202200428020022036b4120490d00200128020021020c010b200341206a22042003490d03200241017422032004200320044b1b22034100480d030240024020020d002003102d21020c010b200128020020022003103121020b2002450d0220012002360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200220036a220341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a290000370000200320002900013700000b200141046a2802002102200141086a2802002103024020002d00214101460d000240024020022003460d00200128020021000c010b200341016a22002003490d03200341017422022000200220004b1b22024100480d030240024020030d002002102d21000c010b200128020020032002103121000b2000450d0220012000360200200141046a2002360200200141086a28020021030b200141086a200341016a360200200020036a41003a00000f0b0240024020022003460d00200128020021020c010b200341016a22022003490d02200341017422042002200420024b1b22044100480d020240024020030d002004102d21020c010b200128020020032004103121020b2002450d0120012002360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200220036a41013a000002400240200141046a2802002202200428020022036b4120490d00200128020021020c010b200341206a22042003490d02200241017422032004200320044b1b22034100480d020240024020020d002003102d21020c010b200128020020022003103121020b2002450d0120012002360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200220036a220141186a2000413a6a290000370000200141106a200041326a290000370000200141086a2000412a6a2900003700002001200041226a2900003700000f0b1036000b1038000bfb0903047f037e037f230041e0006b22022400200241186a2203200041186a290000370300200241106a2204200041106a290000370300200241086a2205200041086a29000037030020022000290000370300419298ca00ad4280808080900184100122002900002106200241206a41086a200041086a290000370300200220063703202000102f4199a8c200ad4280808080900184100122002900002106200241306a41086a200041086a290000370300200220063703302000102f0240024002404120102d2200450d0020002002290300370000200041186a2003290300370000200041106a2004290300370000200041086a20052903003700002000ad4280808080800484100322032900002106200341086a2900002107200341106a2900002108200241c0006a41186a200341186a290000370300200241c0006a41106a2008370300200241c0006a41086a2007370300200220063703402003102f2000102f41c000102d2203450d00200320022903203700002003200229033037001020032002290340370020200341086a200241206a41086a290300370000200341186a200241306a41086a290300370000200341286a200241c0006a41086a290300370000200341306a200241d0006a290300370000200341386a200241c0006a41186a290300370000200141186a280200220941186a2200417f4c0d010240024020000d00410121040c010b2000102d2204450d010b2002410036024820022000360244200220043602402001280210210a2009200241c0006a106902400240200228024422052002280248220b6b2009490d00200228024021000c010b200b20096a2200200b490d03200541017422042000200420004b1b22044100480d030240024020050d002004102d21000c010b200228024020052004103121000b2000450d012002200436024420022000360240200421050b2002200b20096a22043602482000200b6a200a200910e8061a02400240200520046b411f4d0d00200521090c010b200441206a22092004490d032005410174220b2009200b20094b1b22094100480d030240024020050d002009102d21000c010b200020052009103121000b2000450d0120022009360244200220003602400b200020046a220541186a200141346a290000370000200541106a2001412c6a290000370000200541086a200141246a2900003700002002200441206a220b3602482005200129001c370000200141086a290300210620012903002107024002402009200b6b410f4d0d00200921050c010b200b41106a2205200b490d032009410174220a2005200a20054b1b22054100480d030240024020090d002005102d21000c010b200020092005103121000b2000450d0120022005360244200220003602400b2000200b6a22092006370008200920073700002002200441306a2209360248200128023c210b02400240200520096b4104490d00200441346a21040c010b200941046a22042009490d032005410174220a2004200a20044b1b220a4100480d030240024020050d00200a102d21000c010b20002005200a103121000b2000450d012002200a360244200220003602400b20022004360248200020096a200b360000200228024421002003ad4280808080800884200235024842208620022802402204ad84100402402000450d002004102f0b2003102f0240200141146a280200450d002001280210102f0b200241e0006a24000f0b1036000b103d000b1038000bcb0503027f037e027f230041f0016b22012400418de6c300ad4280808080e00084100122022900002103200141086a41086a200241086a290000370300200120033703082002102f41f0e8c600ad4280808080f00084100122022900002103200141a8016a41086a200241086a290000370300200120033703a8012002102f02404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141d0006a41186a2206200041186a290000370300200141d0006a41106a22072005370300200141d0006a41086a2004370300200120033703502000102f2002102f41c000102d2202450d0020022001290308370000200220012903a80137001020022001290350370020200241086a200141086a41086a290300370000200241186a200141a8016a41086a290300370000200241286a200141d0006a41086a2200290300370000200241306a2007290300370000200241386a2006290300370000200141d0006a200210f60220012903502103200141a8016a200041c40010e8061a200141a4016a41026a22062001419f016a2d00003a0000200120012f009d013b01a4010240024020034201510d0041002100200141086a410041c40010e7061a0c010b20012d009c012100200141086a200141a8016a41c40010e8061a200141046a41026a20062d00003a0000200120012f01a4013b01040b200141d8006a200141086a41c40010e80621062001419f016a200141066a2d00003a0000200142013703502001417f2000411874220041808080086a220720072000491b4118763a009c01200120012f01043b009d01200141c0003602ac01200120023602a8012006200141a8016a1090032002102f200141f0016a24000f0b1036000bb60201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210420034120710d012004ad41012001104521000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000b20024180016a240020000f0b2004418001104b000b2004418001104b000bca0d030e7f047e037f230022022103200241a0016b416071220224002002427f3703082002427f37030041012104200241013a00182002200029000037031020024180016a200110ff042002280280012105200228028401210602400240024002402002280288012207450d002005200741057422086a2109200841606a210a200241e0006a41106a210b200241e0006a41196a210c41012104200521080340200241c0006a41106a220d200841106a290300370300200241c0006a41086a220e200841086a29030037030020022008290300370340200841186a2d0000210f2002200841196a28000036022820022008411c6a28000036002b200f4103460d01200b200d290300370300200241e0006a41086a200e290300370300200c2002280228360000200c41036a200228002b360000200220022903403703602002200f3a0078024002400240200b2000460d00200b2900002000290000510d002002200c2800003602582002200c41036a28000036005b200241e8006a2903002110200229036021110c010b2002200229039001370310200229030821122002200229038801370308200229030021132002200229038001370300200241033a00980120022903182110200220022903980122113703182011a721042010a7220d41ff01714103460d01200241e8006a2903002210201220022903602211201356201020125620102012511b220b1b211020112013200b1b2111200f4102200f200d41ff0171461b210f0b200229037021122002200228005b36003320022002280258360230200220022802303602382002200228003336003b4120102d220d450d04200d2011370300200d200f3a0018200d2012370310200d2002280238360019200d2010370308200d411c6a200228003b36000002400240200a0d004101210c410121140c010b200841206a2115200741057420056a41606a2116200241e0006a41106a210b200241e0006a41196a210a4101210c410121140340201521080340200241c0006a41106a220e200841106a290300370300200241c0006a41086a2207200841086a29030037030020022008290300370340200841186a2d0000210f2002200841196a28000036022820022008411c6a28000036002b200f4103460d02200b200e290300370300200241e0006a41086a220e2007290300370300200a2002280228360000200a41036a2207200228002b360000200220022903403703602002200f3a007802400240200b2000460d00200b2900002000290000510d002002200a2800003602582002200728000036005b200e2903002110200229036021110c010b2002200229039001370310200229030821122002200229038801370308200229030021132002200229038001370300200241033a00980120022903182110200220022903980122113703182011a7210402402010a741ff017122074103460d00200e2903002210201220022903602211201356201020125620102012511b220e1b211020112013200e1b2111200f4102200f2007461b210f0c010b200841206a22082009470d010c030b0b200229037021122002200228005b36003320022002280258360230200220022802303602382002200228003336003b2002200228003b36008301200220022802383602800102402014200c470d00200c41016a220e200c490d08200c4101742207200e2007200e4b1b220e41ffffff3f71200e470d08200e410574220e4100480d0802400240200c0d00200e102d210d0c010b200d200c410574200e1031210d0b200d450d07200e41057621140b200841206a2115200d200c4105746a220e200f3a0018200e2010370308200e2011370300200e2012370310200e200228028001360019200e411c6a200228008301360000200c41016a210c20162008470d000b0b2006450d032005102f0c030b200a41606a210a200841206a22082009470d000b0b4108210d4100210c02402006450d002005102f0b410021140b0240200441ff01714103460d0020024180016a41186a220f200229031837030020024180016a41106a2200200229031037030020024180016a41086a220b200229030837030020022002290300370380010240200c2014470d00200c41016a2208200c490d03200c410174220a2008200a20084b1b220841ffffff3f712008470d03200841057422084100480d0302400240200c0d002008102d210d0c010b200d200c41057420081031210d0b200d450d02200841057621140b200d200c4105746a2208200229038001370300200841186a200f290300370300200841106a2000290300370300200841086a200b290300370300200c41016a210c0b2001200d200c10800502402014450d00200d102f0b200324000f0b1036000b1038000b13002000411b360204200041849bc3003602000b130020004105360204200041c0e6c3003602000b130020004106360204200041f0a7c0003602000b130020004102360204200041ccd9c9003602000b13002000410536020420004180b6c6003602000b130020004103360204200041c0cbc8003602000b130020004101360204200041d09eca003602000b130020004111360204200041e497c2003602000b130020004107360204200041fcd5c7003602000b130020004105360204200041d889c7003602000b130020004106360204200041bcd2c4003602000b130020004103360204200041e898ca003602000b13002000410b360204200041d4c8c4003602000b130020004108360204200041e4cec1003602000b130020004103360204200041b8b3c4003602000b130020004103360204200041ccc5c3003602000b130020004101360204200041889cca003602000b130020004107360204200041b0f6c0003602000b13002000410f36020420004180b8c4003602000b130020004106360204200041c4cec7003602000b13002000410236020420004194f1c0003602000bf70101077f230041106b220124002001410036020820014201370300200110e80220012802042102200128020021030240024002400240200041046a2802002204200041086a28020022056b20012802082206490d00200028020021040c010b200520066a22072005490d02200441017422052007200520074b1b22054100480d020240024020040d002005102d21040c010b200028020020042005103121040b2004450d0120002004360200200041046a2005360200200041086a28020021050b200041086a200520066a360200200420056a2003200610e8061a02402002450d002003102f0b200141106a24000f0b1036000b1038000b990903017f017e057f230041e0006b22022400024002400240024002400240024002402000290300220342c000540d00200342808001540d012003428080808004540d024108200379a741037622046b41044f0d0341d6bcc600413641f8b4ca001039000b02400240200141046a280200200141086a2802002200460d00200128020021050c010b200041016a22052000490d06200041017422042005200420054b1b22044100480d060240024020000d002004102d21050c010b200128020020002004103121050b2005450d0520012005360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200520006a2003a74102743a00000c030b02400240200141046a2802002205200141086a28020022006b4102490d00200128020021050c010b200041026a22042000490d05200541017422002004200020044b1b22004100480d050240024020050d002000102d21050c010b200128020020052000103121050b2005450d0420012005360200200141046a2000360200200141086a28020021000b200141086a200041026a360200200520006a2003a74102744101723b00000c020b02400240200141046a2802002205200141086a28020022006b4104490d00200128020021050c010b200041046a22042000490d04200541017422002004200020044b1b22004100480d040240024020050d002000102d21050c010b200128020020052000103121050b2005450d0320012005360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200520006a2003a74102744102723600000c010b02400240200141046a280200200141086a2802002205460d00200128020021060c010b200541016a22072005490d03200541017422062007200620074b1b22074100480d030240024020050d002007102d21060c010b200128020020052007103121060b2006450d0220012006360200200141046a2007360200200141086a28020021050b200141086a2207200541016a360200200620056a411320044102746b3a0000200220002903002203370308200441786a2105200141046a2106034002400240200628020020072802002200460d00200128020021040c010b200041016a22042000490d04200041017422082004200820044b1b22084100480d040240024020000d002008102d21040c010b200128020020002008103121040b2004450d032001200436020020062008360200200728020021000b2007200041016a360200200420006a2003a73a000020034208882103200541016a22002005492104200021052004450d000b20022003370308200350450d030b200241e0006a24000f0b1036000b1038000b200241286a41146a4109360200200241346a412b360200200241106a41146a41033602002002200241086a36024020024190bdc600360244200241c8006a41146a410036020020024203370214200241b4e0ca003602102002412b36022c200241c8e1ca003602582002420137024c20024198bdc6003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41e8d8c9001043000b9b1301067f230041106b2202240002400240024002400240024002400240024020012d00000e06010402030500010b20024100360208200242013703004101102d2203450d06200242818080801037020420022003360200200341003a0000200141046a28020021042001410c6a2802002201200210690240024020022802042205200228020822036b2001490d00200228020021050c010b200320016a22062003490d08200541017422072006200720064b1b22064100480d080240024020050d002006102d21050c010b200228020020052006103121050b2005450d0720022006360204200220053602000b2002200320016a360208200520036a2004200110e8061a0c050b20024100360208200242013703004101102d2203450d05200242818080801037020420022003360200200341023a00004120102d2203450d0520032001290001370000200341186a200141196a290000370000200341106a200141116a290000370000200341086a200141096a2900003700000240024020022802042204200228020822016b4120490d00200141206a2105200228020021040c010b200141206a22052001490d07200441017422062005200620054b1b22064100480d070240024020040d002006102d21040c010b200228020020042006103121040b2004450d0620022006360204200220043602000b200420016a220141086a200341086a290000370000200141106a200341106a290000370000200141186a200341186a29000037000020022005360208200120032900003700002003102f0c040b20024100360208200242013703004101102d2203450d04200242818080801037020420022003360200200341043a00000240024020022802042205200228020822036b4104490d00200228020021050c010b200341046a22042003490d06200541017422062004200620044b1b22044100480d060240024020050d002004102d21050c010b200228020020052004103121050b2005450d0520022004360204200220053602000b2002200341046a360208200520036a200128000136000020012802082104200141106a2802002201200210690240024020022802042205200228020822036b2001490d00200228020021050c010b200320016a22062003490d06200541017422072006200720064b1b22064100480d060240024020050d002006102d21050c010b200228020020052006103121050b2005450d0520022006360204200220053602000b2002200320016a360208200520036a2004200110e8061a0c030b20024100360208200242013703004101102d2203450d03200242818080801037020420022003360200200341053a00000240024020022802042205200228020822036b4104490d00200228020021050c010b200341046a22042003490d05200541017422062004200620044b1b22044100480d050240024020050d002004102d21050c010b200228020020052004103121050b2005450d0420022004360204200220053602000b2002200341046a360208200520036a200128000136000020012802082104200141106a2802002201200210690240024020022802042205200228020822036b2001490d00200228020021050c010b200320016a22062003490d05200541017422072006200720064b1b22064100480d050240024020050d002006102d21050c010b200228020020052006103121050b2005450d0420022006360204200220053602000b2002200320016a360208200520036a2004200110e8061a0c020b20024100360208200242013703004101102d2203450d02200242818080801037020420022003360200200341063a00000240024020022802042205200228020822036b4104490d00200228020021050c010b200341046a22042003490d04200541017422062004200620044b1b22044100480d040240024020050d002004102d21050c010b200228020020052004103121050b2005450d0320022004360204200220053602000b2002200341046a360208200520036a200128000136000020012802082104200141106a2802002201200210690240024020022802042205200228020822036b2001490d00200228020021050c010b200320016a22062003490d04200541017422072006200720064b1b22064100480d040240024020050d002006102d21050c010b200228020020052006103121050b2005450d0320022006360204200220053602000b2002200320016a360208200520036a2004200110e8061a0c010b20024100360208200242013703004101102d2203450d01200242818080801037020420022003360200200341073a000002400240200228020420022802082203460d00200228020021050c010b200341016a22052003490d03200341017422042005200420054b1b22044100480d030240024020030d002004102d21050c010b200228020020032004103121050b2005450d0220022004360204200220053602000b2002200341016a360208200520036a41003a00002002280204210520022802082103024020012802044101460d000240024020052003460d00200228020021010c010b200341016a22012003490d04200341017422052001200520014b1b22054100480d040240024020030d002005102d21010c010b200228020020032005103121010b2001450d0320022005360204200220013602000b2002200341016a360208200120036a41003a00000c010b0240024020052003460d00200228020021050c010b200341016a22052003490d03200341017422042005200420054b1b22044100480d030240024020030d002004102d21050c010b200228020020032004103121050b2005450d0220022004360204200220053602000b2002200341016a360208200520036a41013a0000200141086a28020021060240024020022802042204200228020822036b4104490d00200341046a2105200228020021040c010b200341046a22052003490d03200441017422072005200720054b1b22074100480d030240024020040d002007102d21040c010b200228020020042007103121040b2004450d0220022007360204200220043602000b20022005360208200420036a20063600002001410c6a28020021050240024020022802042203200228020822016b4104490d00200228020021030c010b200141046a22042001490d03200341017422062004200620044b1b22044100480d030240024020030d002004102d21030c010b200228020020032004103121030b2003450d0220022004360204200220033602000b2002200141046a360208200320016a20053600000b200020022201290200370200200041086a200141086a280200360200200241106a24000f0b1036000b1038000bc80901037f024002400240024002400240024020002d00004101470d00200041046a280200220241ffff034b0d01200241ef014b0d04200141046a280200200141086a2802002200460d02200128020021030c030b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d06200241017422042003200420034b1b22044100480d060240024020020d002004102d21030c010b200128020020022004103121030b2003450d0520012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41ff013a000002400240200141046a2802002203200428020022026b4120490d00200128020021030c010b200241206a22042002490d06200341017422022004200220044b1b22024100480d060240024020030d002002102d21030c010b200128020020032002103121030b2003450d0520012003360200200141046a2002360200200141086a28020021020b200141086a200241206a360200200320026a220141186a200041196a290000370000200141106a200041116a290000370000200141086a200041096a290000370000200120002900013700000f0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d05200041017422042003200420034b1b22044100480d050240024020000d002004102d21030c010b200128020020002004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021000b200141086a2204200041016a360200200320006a41fd013a000002400240200141046a2802002203200428020022006b4104490d00200128020021030c010b200041046a22042000490d05200341017422002004200020044b1b22004100480d050240024020030d002000102d21030c010b200128020020032000103121030b2003450d0420012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20023600000f0b200041016a22032000490d03200041017422042003200420034b1b22044100480d030240024020000d002004102d21030c010b200128020020002004103121030b2003450d0220012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a20023a00000f0b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d02200041017422042003200420034b1b22044100480d020240024020000d002004102d21030c010b200128020020002004103121030b2003450d0120012003360200200141046a2004360200200141086a28020021000b200141086a2204200041016a360200200320006a41fc013a000002400240200141046a2802002203200428020022006b4102490d00200128020021030c010b200041026a22042000490d02200341017422002004200020044b1b22004100480d020240024020030d002000102d21030c010b200128020020032000103121030b2003450d0120012003360200200141046a2000360200200141086a28020021000b200141086a200041026a360200200320006a20023b00000f0b1036000b1038000bff1201077f02400240024020002d0000417f6a220241044b0d000240024002400240024020020e050001020304000b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d07200241017422042003200420034b1b22044100480d070240024020020d002004102d21030c010b200128020020022004103121030b2003450d0620012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41003a0000200028022421022000412c6a28020022032001106902402003450d0020034105742106200141046a210703400240024020072802002204200528020022036b4120490d00200128020021040c010b200341206a22082003490d09200441017422032008200320084b1b22034100480d090240024020040d002003102d21040c010b200128020020042003103121040b2004450d082001200436020020072003360200200528020021030b2005200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a29000037000020032002290000370000200241206a2102200641606a22060d000b0b024020002d00014101460d0002400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d08200241017422042003200420034b1b22044100480d080240024020020d002004102d21030c010b200128020020022004103121030b2003450d0720012003360200200141046a2004360200200141086a28020021020b200141086a200241016a360200200320026a41003a00000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d07200241017422042003200420034b1b22044100480d070240024020020d002004102d21030c010b200128020020022004103121030b2003450d0620012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41013a000002400240200141046a2802002203200428020022026b4120490d00200128020021030c010b200241206a22042002490d07200341017422022004200220044b1b22024100480d070240024020030d002002102d21030c010b200128020020032002103121030b2003450d0620012003360200200141046a2002360200200141086a28020021020b200141086a200241206a360200200320026a220241186a200041026a220341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200220032900003700000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d06200241017422042003200420034b1b22044100480d060240024020020d002004102d21030c010b200128020020022004103121030b2003450d0520012003360200200141046a2004360200200141086a28020021020b200141086a200241016a360200200320026a41013a0000200028020420011091010f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128020020022004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021020b200141086a200241016a360200200320026a41023a0000200041046a2001109502200028020820011091010f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128020020022004103121030b2003450d0320012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41033a00004120102d2202450d0220022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d04200441017422032005200320054b1b22034100480d040240024020040d002003102d21040c010b200128020020042003103121040b2004450d0320012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f200041246a200110950220002d0021210402400240200141046a28020020052802002202460d00200128020021030c010b200241016a22032002490d04200241017422052003200520034b1b22054100480d040240024020020d002005102d21030c010b200128020020022005103121030b2003450d0320012003360200200141046a2005360200200141086a28020021020b200141086a200241016a360200200320026a20043a00000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d03200241017422042003200420034b1b22044100480d030240024020020d002004102d21030c010b200128020020022004103121030b2003450d0220012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41043a00004120102d2202450d0120022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d03200441017422032005200320054b1b22034100480d030240024020040d002003102d21040c010b200128020020042003103121040b2004450d0220012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f200041246a20011095020b0f0b1036000b1038000bcc0301037f02404120102d2202450d0020022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700004110102d2203450d00200341e7e485f30636020c200342a08080808004370204200320023602004120102d2202450d0020022001290020370000200241186a200141386a290000370000200241106a200141306a290000370000200241086a200141286a29000037000020034110412010312204450d00200441e2c289ab0636021c200442a08080808004370214200420023602104120102d2203450d0020032001290040370000200341186a200141d8006a290000370000200341106a200141d0006a290000370000200341086a200141c8006a2900003700002004412041c00010312202450d00200241e9dabdf30636022c200242a08080808004370224200220033602204120102d2203450d0020032001290060370000200341186a200141f8006a290000370000200341106a200141f0006a290000370000200341086a200141e8006a29000037000020004284808080c00037020420002002360200200241e1ea91cb0636023c200242a08080808004370234200220033602300f0b1036000ba60901077f230041d0026b2202240041002103200241003a002820012802042104417f210502400240024002400240034020042003460d01200241086a20036a200128020022062d00003a00002001200420056a3602042001200641016a3602002002200341016a22073a00282005417f6a21052007210320074120470d000b20024188016a41086a200241086a41086a29030037030020024188016a41106a200241086a41106a29030037030020024188016a41186a200241086a41186a290300370300200220022903083703880141002108200241003a0028200420076b2107200420056a2103034020072008460d02200241086a20086a200620086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00282003417f6a21032005210820054120470d000b200241a8016a41086a200241086a41086a290300370300200241a8016a41106a200241086a41106a290300370300200241a8016a41186a200241086a41186a290300370300200220022903083703a80141002107200241003a0028200620056a210803402003417f460d03200241086a20076a200820076a220541016a2d00003a0000200120033602042001200541026a3602002002200741016a22053a00282003417f6a21032005210720054120470d000b200241c8016a41086a200241086a41086a290300370300200241c8016a41106a200241086a41106a290300370300200241c8016a41186a200241086a41186a290300370300200220022903083703c80141002107200241003a00c802200820056a41016a210503402003417f460d04200241a8026a20076a20052d00003a0000200120033602042001200541016a22053602002002200741016a22083a00c8022003417f6a21032008210720084120470d000b200241e8016a41086a2201200241a8026a41086a290300370300200241e8016a41106a2203200241a8026a41106a290300370300200241e8016a41186a2205200241a8026a41186a290300370300200241086a41086a20024188016a41086a290300370300200241086a41106a20024188016a41106a290300370300200241086a41186a20024188016a41186a290300370300200220022903a8023703e8012002200229038801370308200241c0006a200241a8016a41186a290300370300200241386a200241a8016a41106a290300370300200241306a200241a8016a41086a290300370300200220022903a801370328200241e0006a200241c8016a41186a290300370300200241d8006a200241c8016a41106a290300370300200241d0006a200241c8016a41086a290300370300200220022903c80137034820024180016a2005290300370300200241f8006a2003290300370300200241f0006a2001290300370300200220022903e801370368200041016a200241086a41800110e8061a200041003a00000c040b0240200341ff0171450d00200241003a00280b200041013a00000c030b0240200841ff0171450d00200241003a00280b200041013a00000c020b0240200741ff0171450d00200241003a00280b200041013a00000c010b0240200741ff0171450d00200241003a00c8020b200041013a00000b200241d0026a24000bb1bb0303077f027e027f230041106b220224000240024002400240024002400240024002400240024020002d0000220341144b0d0002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e15000102030405060708090a0b0c0d0e0f1011121314000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41003a000020002d0004220341044b0d140240024002400240024020030e050001020304000b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d1b200341017422052004200520044b1b22054100480d1b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1a20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a00002000280208210602400240200141046a2802002204200528020022036b4104490d00200128020021040c010b200341046a22052003490d1b200441017422032005200320054b1b22034100480d1b0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1a20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341046a360200200420036a20063600002000410c6a2d0000210602400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d1b200341017422052004200520044b1b22054100480d1b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1a20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a20063a00002000410d6a2d0000210402400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d1b200041017422052003200520034b1b22054100480d1b0240024020000d002005102d21030c010b200128020020002005103121030b2003450d1a20012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c180b02400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22042003490d1a200341017422052004200520044b1b22044100480d1a0240024020030d002004102d21050c010b200128020020032004103121050b2005450d1920012005360200200141046a2004360200200141086a28020021030b41012104200141086a2206200341016a360200200520036a41013a0000024002400240024020002d00080e0400030102000b410021040c020b410221040c010b200241033a000002400240200141046a28020020062802002203460d00200128020021040c010b200341016a22042003490d1b200341017422052004200520044b1b22054100480d1b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1a20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a0000200220002d000922063a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d1b200341017422052004200520044b1b22054100480d1b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1a20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a20063a000020002d000a21040b200220043a000002400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22052003490d1a200341017422062005200620054b1b22064100480d1a0240024020030d002006102d21050c010b200128020020032006103121050b2005450d1920012005360200200141046a2006360200200141086a28020021030b200141086a2206200341016a360200200520036a20043a00002000280214210502400240200141046a2802002204200628020022036b4104490d00200128020021040c010b200341046a22062003490d1a200441017422032006200320064b1b22034100480d1a0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1920012004360200200141046a2003360200200141086a28020021030b200141086a2206200341046a360200200420036a2005360000200041186a2d0000210502400240200141046a28020020062802002203460d00200128020021040c010b200341016a22042003490d1a200341017422062004200620044b1b22064100480d1a0240024020030d002006102d21040c010b200128020020032006103121040b2004450d1920012004360200200141046a2006360200200141086a28020021030b200141086a2206200341016a360200200420036a20053a0000200041196a2d0000210402400240200141046a28020020062802002200460d00200128020021030c010b200041016a22032000490d1a200041017422052003200520034b1b22054100480d1a0240024020000d002005102d21030c010b200128020020002005103121030b2003450d1920012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c170b02400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d19200041017422042003200420034b1b22044100480d190240024020000d002004102d21030c010b200128020020002004103121030b2003450d1820012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41023a00000c160b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041056a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c150b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d17200441017422032005200320054b1b22034100480d170240024020040d002003102d21040c010b200128020020042003103121040b2004450d1620012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041056a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c140b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d16200441017422072006200720064b1b22074100480d160240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41013a000020002d0004220441054b0d1302400240024002400240024020040e06000102030405000b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1b200441017422072006200720064b1b22074100480d1b0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1a20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41003a0000200028020821070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d1b200641017422042008200420084b1b22044100480d1b0240024020060d002004102d21060c010b200128020020062004103121060b2006450d1a20012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a20073600000240024002400240024020002d000c0e0400010203000b410021040c030b410121040c020b410221040c010b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1c200441017422072006200720064b1b22074100480d1c0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1b20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a0000200220002d000d22073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1c200441017422082006200820064b1b22084100480d1c0240024020040d002008102d21060c010b200128020020042008103121060b2006450d1b20012006360200200141046a2008360200200141086a28020021040b2003200441016a360200200620046a20073a000020002d000e21040b200220043a000002400240200528020020032802002200460d00200128020021050c010b200041016a22052000490d1b200041017422062005200620054b1b22064100480d1b0240024020000d002006102d21050c010b200128020020002006103121050b2005450d1a20012005360200200141046a2006360200200141086a28020021000b2003200041016a360200200520006a20043a00000c180b02400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d1a200041017422052004200520044b1b22054100480d1a0240024020000d002005102d21040c010b200128020020002005103121040b2004450d1920012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41013a00000c170b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d19200441017422072006200720064b1b22074100480d190240024020040d002007102d21060c010b200128020020042007103121060b2006450d1820012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41023a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d19200641017422042007200420074b1b22044100480d190240024020060d002004102d21060c010b200128020020062004103121060b2006450d1820012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041056a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d19200541017422042006200420064b1b22044100480d190240024020050d002004102d21050c010b200128020020052004103121050b2005450d1820012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041256a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c160b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d18200441017422072006200720064b1b22074100480d180240024020040d002007102d21060c010b200128020020042007103121060b2006450d1720012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d18200641017422042007200420074b1b22044100480d180240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041056a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200028024821070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d18200641017422042008200420084b1b22044100480d180240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041cc006a28020021070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d18200641017422042008200420084b1b22044100480d180240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a20073600000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d18200541017422042006200420064b1b22044100480d180240024020050d002004102d21050c010b200128020020052004103121050b2005450d1720012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041256a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c150b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d17200441017422072006200720064b1b22074100480d170240024020040d002007102d21060c010b200128020020042007103121060b2006450d1620012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41043a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d17200641017422042007200420074b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1620012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041056a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200028024821070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d17200641017422042008200420084b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1620012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041cc006a28020021070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d17200641017422042008200420084b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1620012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a20073600000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d17200641017422042007200420074b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1620012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041256a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700002005280200210620032802002104024020002d00504104460d000240024020062004460d00200128020021070c010b200441016a22062004490d18200441017422072006200720064b1b22064100480d180240024020040d002006102d21070c010b200128020020042006103121070b2007450d1720012007360200200141046a2006360200200141086a28020021040b410121062003200441016a360200200720046a41013a0000024002400240024020002d00500e0400030102000b410021060c020b410221060c010b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d19200441017422072006200720064b1b22074100480d190240024020040d002007102d21060c010b200128020020042007103121060b2006450d1820012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a0000200220002d005122073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d19200441017422082006200820064b1b22084100480d190240024020040d002008102d21060c010b200128020020042008103121060b2006450d1820012006360200200141046a2008360200200141086a28020021040b2003200441016a360200200620046a20073a000020002d005221060b200220063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d18200041017422052004200520044b1b22054100480d180240024020000d002005102d21040c010b200128020020002005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c150b0240024020062004460d00200128020021000c010b200441016a22002004490d17200441017422052000200520004b1b22054100480d170240024020040d002005102d21000c010b200128020020042005103121000b2000450d1620012000360200200141046a2005360200200141086a28020021040b2003200441016a360200200020046a41003a00000c140b02400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d16200441017422072006200720064b1b22074100480d160240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41053a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d16200641017422042007200420074b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1520012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041056a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200028024821070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d16200641017422042008200420084b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1520012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041cc006a28020021070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d16200641017422042008200420084b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1520012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a20073600000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d16200541017422042006200420064b1b22044100480d160240024020050d002004102d21050c010b200128020020052004103121050b2005450d1520012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041256a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c130b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a0000024020002d00044101460d0002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d16200441017422032005200320054b1b22034100480d160240024020040d002003102d21040c010b200128020020042003103121040b2004450d1520012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041056a220441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200320042900003700002000280228210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d16200341017422002005200020054b1b22004100480d160240024020030d002000102d21030c010b200128020020032000103121030b2003450d1520012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c130b02400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a00002000280208210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d15200341017422002005200020054b1b22004100480d150240024020030d002000102d21030c010b200128020020032000103121030b2003450d1420012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c120b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d14200341017422052004200520044b1b22054100480d140240024020030d002005102d21040c010b200128020020032005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41033a000020002d0008220341044b0d1102400240024002400240024020030e050001020304000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d19200341017422052004200520044b1b22054100480d190240024020030d002005102d21040c010b200128020020032005103121040b2004450d1820012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d19200441017422032005200320054b1b22034100480d190240024020040d002003102d21040c010b200128020020042003103121040b2004450d1820012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200029033021092002200041386a290300370308200220093703000c040b200241013a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d18200341017422052004200520044b1b22054100480d180240024020030d002005102d21040c010b200128020020032005103121040b2004450d1720012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d18200441017422032005200320054b1b22034100480d180240024020040d002003102d21040c010b200128020020042003103121040b2004450d1720012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200029033021092002200041386a290300370308200220093703000c030b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d17200341017422052004200520044b1b22054100480d170240024020030d002005102d21040c010b200128020020032005103121040b2004450d1620012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d17200441017422032005200320054b1b22034100480d170240024020040d002003102d21040c010b200128020020042003103121040b2004450d1620012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d17200441017422032005200320054b1b22034100480d170240024020040d002003102d21040c010b200128020020042003103121040b2004450d1620012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041296a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200029035021092002200041d8006a290300370308200220093703000c020b200241033a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d16200341017422052004200520044b1b22054100480d160240024020030d002005102d21040c010b200128020020032005103121040b2004450d1520012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d16200441017422032005200320054b1b22034100480d160240024020040d002003102d21040c010b200128020020042003103121040b2004450d1520012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200041386a29030021092000290330210a02400240200141046a2802002204200528020022036b4110490d00200128020021040c010b200341106a22052003490d16200441017422032005200320054b1b22034100480d160240024020040d002003102d21040c010b200128020020042003103121040b2004450d1520012004360200200141046a2003360200200141086a28020021030b200141086a200341106a360200200420036a220320093700082003200a370000200029034021092002200041c8006a290300370308200220093703000c010b200141086a2802002103200241043a0000024002402003200141046a280200460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d15200441017422032005200320054b1b22034100480d150240024020040d002003102d21040c010b200128020020042003103121040b2004450d1420012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200029033021092002200041386a290300370308200220093703000b2002210302400240200141046a2802002204200141086a28020022006b4110490d00200128020021040c010b200041106a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1320012004360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200420006a220041086a200341086a290000370000200020032900003700000c110b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41043a000020002d0008220341024b0d1002400240024020030e03000102000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d15200341017422052004200520044b1b22054100480d150240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d15200441017422032005200320054b1b22034100480d150240024020040d002003102d21040c010b200128020020042003103121040b2004450d1420012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200041386a29030021092000290330210a02400240200141046a2802002203200528020022006b4110490d00200128020021030c010b200041106a22042000490d15200341017422002004200020044b1b22004100480d150240024020030d002000102d21030c010b200128020020032000103121030b2003450d1420012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020093700082000200a3700000c120b200241013a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d14200341017422052004200520044b1b22054100480d140240024020030d002005102d21040c010b200128020020032005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d14200441017422032005200320054b1b22034100480d140240024020040d002003102d21040c010b200128020020042003103121040b2004450d1320012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200041386a29030021092000290330210a02400240200141046a2802002203200528020022006b4110490d00200128020021030c010b200041106a22042000490d14200341017422002004200020044b1b22004100480d140240024020030d002000102d21030c010b200128020020032000103121030b2003450d1320012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020093700082000200a3700000c110b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a0000200028020c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d14200341017422002005200020054b1b22004100480d140240024020030d002000102d21030c010b200128020020032000103121030b2003450d1520012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c100b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41053a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d13200341017422052004200520044b1b22054100480d130240024020030d002005102d21040c010b200128020020032005103121040b2004450d1420012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a00002000280204210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d13200341017422002005200020054b1b22004100480d130240024020030d002000102d21030c010b200128020020032000103121030b2003450d1420012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c0f0b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d12200441017422072006200720064b1b22074100480d120240024020040d002007102d21060c010b200128020020042007103121060b2006450d1320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41063a000020002d0008220441104b0d0e0240024002400240024002400240024002400240024002400240024002400240024020040e11000102030405060708090a0b0c0d0e0f10000b200241003a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d22200441017422072006200720064b1b22074100480d220240024020040d002007102d21060c010b200128020020042007103121060b2006450d2320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41003a0000200028020c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d22200641017422042008200420084b1b22044100480d220240024020060d002004102d21060c010b200128020020062004103121060b2006450d2320012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d22200441017422002005200020054b1b22004100480d220240024020040d002000102d21040c010b200128020020042000103121040b2004450d2320012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c1e0b200241013a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d21200441017422072006200720064b1b22074100480d210240024020040d002007102d21060c010b200128020020042007103121060b2006450d2220012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41013a0000200028020c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d21200641017422042008200420084b1b22044100480d210240024020060d002004102d21060c010b200128020020062004103121060b2006450d2220012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041286a29030021092000290320210a0240024020052802002206200328020022046b4110490d00200128020021060c010b200441106a22072004490d21200641017422042007200420074b1b22044100480d210240024020060d002004102d21060c010b200128020020062004103121060b2006450d2220012006360200200141046a2004360200200141086a28020021040b200141086a220b200441106a360200200620046a220420093700082004200a37000020002802102104200041186a2802002200200110692000450d1d20004105742107200141046a210c03400240024020052802002206200328020022006b4120490d00200128020021060c010b200041206a22082000490d22200641017422002008200020084b1b22004100480d220240024020060d002000102d21060c010b200128020020062000103121060b2006450d2320012006360200200c2000360200200b28020021000b2003200041206a360200200620006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a29000037000020002004290000370000200441206a2104200741606a22070d000c1e0b0b200241023a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d20200041017422052004200520044b1b22054100480d200240024020000d002005102d21040c010b200128020020002005103121040b2004450d2120012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41023a00000c1c0b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1f200441017422072006200720064b1b22074100480d1f0240024020040d002007102d21060c010b200128020020042007103121060b2006450d2020012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a0000200028020c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d1f200641017422042008200420084b1b22044100480d1f0240024020060d002004102d21060c010b200128020020062004103121060b2006450d2020012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a200736000020002d0009220041024b0d1b02400240024020000e03000102000b200241003a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d21200041017422052004200520044b1b22054100480d210240024020000d002005102d21040c010b200128020020002005103121040b2004450d2220012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41003a00000c1d0b200241013a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d20200041017422052004200520044b1b22054100480d200240024020000d002005102d21040c010b200128020020002005103121040b2004450d2120012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41013a00000c1c0b200241023a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d1f200041017422052004200520044b1b22054100480d1f0240024020000d002005102d21040c010b200128020020002005103121040b2004450d2020012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a41023a00000c1b0b200241043a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1e200441017422072006200720064b1b22074100480d1e0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1f20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41043a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d1e200441017422002005200020054b1b22004100480d1e0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1f20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c1a0b200241053a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1d200441017422072006200720064b1b22074100480d1d0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1e20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41053a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d1d200441017422002005200020054b1b22004100480d1d0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1e20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c190b200241063a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1c200441017422072006200720064b1b22074100480d1c0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1d20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41063a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d1c200441017422002005200020054b1b22004100480d1c0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1d20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c180b200241073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1b200441017422072006200720064b1b22074100480d1b0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1c20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41073a0000200028020c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d1b200641017422042008200420084b1b22044100480d1b0240024020060d002004102d21060c010b200128020020062004103121060b2006450d1c20012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200220002d000922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d1b200041017422052004200520044b1b22054100480d1b0240024020000d002005102d21040c010b200128020020002005103121040b2004450d1c20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c170b200241083a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d1a200441017422072006200720064b1b22074100480d1a0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1b20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41083a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d1a200641017422042007200420074b1b22044100480d1a0240024020060d002004102d21060c010b200128020020062004103121060b2006450d1b20012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d1a200541017422042006200420064b1b22044100480d1a0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1b20012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041296a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c160b200241093a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d19200441017422072006200720064b1b22074100480d190240024020040d002007102d21060c010b200128020020042007103121060b2006450d1a20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41093a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d19200541017422042006200420064b1b22044100480d190240024020050d002004102d21050c010b200128020020052004103121050b2005450d1a20012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c150b2002410a3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d18200441017422072006200720064b1b22074100480d180240024020040d002007102d21060c010b200128020020042007103121060b2006450d1920012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410a3a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d18200641017422042007200420074b1b22044100480d180240024020060d002004102d21060c010b200128020020062004103121060b2006450d1920012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700004120102d2204450d18200441186a200041c1006a290000370000200441106a200041396a290000370000200441086a200041316a2900003700002004200041296a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d18200741017422062008200620084b1b22064100480d180240024020070d002006102d21070c010b200128020020072006103121070b2007450d1920012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f200028024c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d18200441017422002005200020054b1b22004100480d180240024020040d002000102d21040c010b200128020020042000103121040b2004450d1920012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c140b2002410b3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d17200441017422072006200720064b1b22074100480d170240024020040d002007102d21060c010b200128020020042007103121060b2006450d1820012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410b3a00004120102d2204450d17200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d17200741017422062008200620084b1b22064100480d170240024020070d002006102d21070c010b200128020020072006103121070b2007450d1820012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f0240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d17200641017422042007200420074b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1820012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041d8006a29030021092000290350210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d17200441017422002005200020054b1b22004100480d170240024020040d002000102d21040c010b200128020020042000103121040b2004450d1820012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c130b2002410c3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d16200441017422072006200720064b1b22074100480d160240024020040d002007102d21060c010b200128020020042007103121060b2006450d1720012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410c3a00004120102d2204450d16200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d16200741017422062008200620084b1b22064100480d160240024020070d002006102d21070c010b200128020020072006103121070b2007450d1720012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f0240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d16200641017422042007200420074b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041d8006a29030021092000290350210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d16200441017422002005200020054b1b22004100480d160240024020040d002000102d21040c010b200128020020042000103121040b2004450d1720012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c120b2002410d3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d15200441017422072006200720064b1b22074100480d150240024020040d002007102d21060c010b200128020020042007103121060b2006450d1620012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410d3a00004120102d2204450d15200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d15200741017422062008200620084b1b22064100480d150240024020070d002006102d21070c010b200128020020072006103121070b2007450d1620012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f200028022c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d15200441017422002005200020054b1b22004100480d150240024020040d002000102d21040c010b200128020020042000103121040b2004450d1620012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c110b2002410e3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d14200441017422072006200720064b1b22074100480d140240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410e3a00004120102d2204450d14200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d14200741017422062008200620084b1b22064100480d140240024020070d002006102d21070c010b200128020020072006103121070b2007450d1520012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f200028022c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c100b2002410f3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d13200441017422072006200720064b1b22074100480d130240024020040d002007102d21060c010b200128020020042007103121060b2006450d1420012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410f3a00004120102d2204450d13200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d13200741017422062008200620084b1b22064100480d130240024020070d002006102d21070c010b200128020020072006103121070b2007450d1420012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f0240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d13200641017422042007200420074b1b22044100480d130240024020060d002004102d21060c010b200128020020062004103121060b2006450d1420012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041f8006a29030021092000290370210a0240024020052802002206200328020022046b4110490d00200128020021060c010b200441106a22072004490d13200641017422042007200420074b1b22044100480d130240024020060d002004102d21060c010b200128020020062004103121060b2006450d1420012006360200200141046a2004360200200141086a28020021040b2003200441106a360200200620046a220420093700082004200a3700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d13200541017422042006200420064b1b22044100480d130240024020050d002004102d21050c010b200128020020052004103121050b2005450d1420012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041c9006a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0f0b200241103a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d12200441017422072006200720064b1b22074100480d120240024020040d002007102d21060c010b200128020020042007103121060b2006450d1320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41103a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d12200541017422042006200420064b1b22044100480d120240024020050d002004102d21050c010b200128020020052004103121050b2005450d1320012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0e0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41073a0000200041046a200110f0020c0d0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41083a0000200041046a200110f0020c0c0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41093a000020002d0004220341044b0d0b0240024002400240024020030e050001020304000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22042003490d13200341017422052004200520044b1b22044100480d130240024020030d002004102d21050c010b200128020020032004103121050b2005450d1420012005360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200520036a41003a000020002802082103200041106a2802002200200110692000450d0f2003200041306c6a2108200141046a210503400240024020052802002206200428020022006b4120490d00200128020021060c010b200041206a22072000490d14200641017422002007200020074b1b22004100480d140240024020060d002000102d21060c010b200128020020062000103121060b2006450d152001200636020020052000360200200428020021000b2004200041206a360200200620006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a29000037000020002003290000370000200341286a2903002109200341206a290300210a0240024020052802002206200428020022006b4110490d00200128020021060c010b200041106a22072000490d14200641017422002007200020074b1b22004100480d140240024020060d002000102d21060c010b200128020020062000103121060b2006450d152001200636020020052000360200200428020021000b2004200041106a360200200620006a220020093700082000200a3700002008200341306a2203470d000c100b0b200241013a000002400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d12200041017422042003200420034b1b22044100480d120240024020000d002004102d21030c010b200128020020002004103121030b2003450d1320012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41013a00000c0e0b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d11200441017422032005200320054b1b22034100480d110240024020040d002003102d21040c010b200128020020042003103121040b2004450d1220012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041056a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0d0b200241033a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d10200441017422032005200320054b1b22034100480d100240024020040d002003102d21040c010b200128020020042003103121040b2004450d1120012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041056a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0c0b200141086a2802002103200241043a0000024002402003200141046a280200460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0f200441017422032005200320054b1b22034100480d0f0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041056a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0f200441017422032005200320054b1b22034100480d0f0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041256a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200220002d004522043a000002400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d11200041017422052003200520034b1b22054100480d110240024020000d002005102d21030c010b200128020020002005103121030b2003450d1020012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c0b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410a3a000020002d0001220041054b0d0a024002400240024002400240024020000e06000102030405000b410021030c050b410121030c040b410221030c030b410321030c020b410421030c010b410521030b200220033a000002400240200141046a280200200141086a2802002200460d00200128020021040c010b200041016a22042000490d10200041017422052004200520044b1b22054100480d100240024020000d002005102d21040c010b200128020020002005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200420006a20033a00000c0a0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410b3a00002000280204220341024b0d0902400240024020030e03000102000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021050c010b200341016a22042003490d11200341017422052004200520044b1b22044100480d110240024020030d002004102d21050c010b200128020020032004103121050b2005450d1220012005360200200141046a2004360200200141086a28020021030b200141086a2204200341016a360200200520036a41003a000020002802082103200041106a2802002200200110692000450d0b2003200041286c6a2108200141046a210503400240024020052802002206200428020022006b4120490d00200128020021060c010b200041206a22072000490d12200641017422002007200020074b1b22004100480d120240024020060d002000102d21060c010b200128020020062000103121060b2006450d132001200636020020052000360200200428020021000b2004200041206a360200200620006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a29000037000020002003290000370000200341206a29030021090240024020052802002206200428020022006b4108490d00200128020021060c010b200041086a22072000490d12200641017422002007200020074b1b22004100480d120240024020060d002000102d21060c010b200128020020062000103121060b2006450d132001200636020020052000360200200428020021000b2004200041086a360200200620006a20093700002008200341286a2203470d000c0c0b0b200241013a000002400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d10200041017422042003200420034b1b22044100480d100240024020000d002004102d21030c010b200128020020002004103121030b2003450d1120012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41013a00000c0a0b200241023a000002400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0f200041017422042003200420034b1b22044100480d0f0240024020000d002004102d21030c010b200128020020002004103121030b2003450d1020012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41023a00000c090b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d0e200441017422072006200720064b1b22074100480d0e0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0f20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410c3a000020002d00082204410a4b0d080240024002400240024002400240024002400240024020040e0b000102030405060708090a000b200241003a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d18200441017422072006200720064b1b22074100480d180240024020040d002007102d21060c010b200128020020042007103121060b2006450d1920012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41003a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d18200441017422002005200020054b1b22004100480d180240024020040d002000102d21040c010b200128020020042000103121040b2004450d1920012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c120b200241013a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d17200441017422072006200720064b1b22074100480d170240024020040d002007102d21060c010b200128020020042007103121060b2006450d1820012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41013a0000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d17200441017422002005200020054b1b22004100480d170240024020040d002000102d21040c010b200128020020042000103121040b2004450d1820012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c110b200241023a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d16200441017422072006200720064b1b22074100480d160240024020040d002007102d21060c010b200128020020042007103121060b2006450d1720012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41023a0000200028022c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d16200641017422042008200420084b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041386a29030021092000290330210a0240024020052802002206200328020022046b4110490d00200128020021060c010b200441106a22072004490d16200641017422042007200420074b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441106a360200200620046a220420093700082004200a3700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d16200541017422042006200420064b1b22044100480d160240024020050d002004102d21050c010b200128020020052004103121050b2005450d1720012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c100b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d15200441017422072006200720064b1b22074100480d150240024020040d002007102d21060c010b200128020020042007103121060b2006450d1620012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a0000200028020c21070240024020052802002206200328020022046b4104490d00200128020021060c010b200441046a22082004490d15200641017422042008200420084b1b22044100480d150240024020060d002004102d21060c010b200128020020062004103121060b2006450d1620012006360200200141046a2004360200200141086a28020021040b2003200441046a360200200620046a2007360000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d15200441017422002005200020054b1b22004100480d150240024020040d002000102d21040c010b200128020020042000103121040b2004450d1620012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0f0b200241043a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d14200441017422072006200720064b1b22074100480d140240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41043a0000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0e0b200241053a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d13200441017422072006200720064b1b22074100480d130240024020040d002007102d21060c010b200128020020042007103121060b2006450d1420012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41053a0000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d13200441017422002005200020054b1b22004100480d130240024020040d002000102d21040c010b200128020020042000103121040b2004450d1420012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0d0b200241063a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d12200441017422072006200720064b1b22074100480d120240024020040d002007102d21060c010b200128020020042007103121060b2006450d1320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41063a0000200041186a29030021092000290310210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d12200441017422002005200020054b1b22004100480d120240024020040d002000102d21040c010b200128020020042000103121040b2004450d1320012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0c0b200241073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d11200441017422072006200720064b1b22074100480d110240024020040d002007102d21060c010b200128020020042007103121060b2006450d1220012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41073a00004120102d2204450d11200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002205200328020022006b4120490d00200128020021050c010b200041206a22062000490d11200541017422002006200020064b1b22004100480d110240024020050d002000102d21050c010b200128020020052000103121050b2005450d1220012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a290000370000200020042900003700002004102f0c0b0b200241083a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d10200441017422072006200720064b1b22074100480d100240024020040d002007102d21060c010b200128020020042007103121060b2006450d1120012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41083a00004120102d2204450d10200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002205200328020022006b4120490d00200128020021050c010b200041206a22062000490d10200541017422002006200020064b1b22004100480d100240024020050d002000102d21050c010b200128020020052000103121050b2005450d1120012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a290000370000200020042900003700002004102f0c0a0b200241093a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0f200441017422072006200720064b1b22074100480d0f0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1020012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41093a00004120102d2204450d0f200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d0f200741017422062008200620084b1b22064100480d0f0240024020070d002006102d21070c010b200128020020072006103121070b2007450d1020012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f0240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d0f200641017422042007200420074b1b22044100480d0f0240024020060d002004102d21060c010b200128020020062004103121060b2006450d1020012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041d8006a29030021092000290350210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d0f200441017422002005200020054b1b22004100480d0f0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1020012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c090b2002410a3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0e200441017422072006200720064b1b22074100480d0e0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0f20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410a3a00004120102d2204450d0e200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002205200328020022006b4120490d00200128020021050c010b200041206a22062000490d0e200541017422002006200020064b1b22004100480d0e0240024020050d002000102d21050c010b200128020020052000103121050b2005450d0f20012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a290000370000200020042900003700002004102f0c080b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d0d200441017422072006200720064b1b22074100480d0d0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0e20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410d3a00000240024002400240024002400240024020002d00080e080001020304050607000b200241003a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d14200441017422072006200720064b1b22074100480d140240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41003a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d14200641017422042007200420074b1b22044100480d140240024020060d002004102d21060c010b200128020020062004103121060b2006450d1520012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d14200641017422042007200420074b1b22044100480d140240024020060d002004102d21060c010b200128020020062004103121060b2006450d1520012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041d8006a29030021092000290350210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d14200441017422002005200020054b1b22004100480d140240024020040d002000102d21040c010b200128020020042000103121040b2004450d1520012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0e0b200241013a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d13200441017422072006200720064b1b22074100480d130240024020040d002007102d21060c010b200128020020042007103121060b2006450d1420012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41013a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d13200641017422042007200420074b1b22044100480d130240024020060d002004102d21060c010b200128020020062004103121060b2006450d1420012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d13200541017422042006200420064b1b22044100480d130240024020050d002004102d21050c010b200128020020052004103121050b2005450d1420012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041296a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0d0b200241023a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d12200441017422072006200720064b1b22074100480d120240024020040d002007102d21060c010b200128020020042007103121060b2006450d1320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41023a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d12200641017422042007200420074b1b22044100480d120240024020060d002004102d21060c010b200128020020062004103121060b2006450d1320012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200220002d002922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d12200041017422052004200520044b1b22054100480d120240024020000d002005102d21040c010b200128020020002005103121040b2004450d1320012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c0c0b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d11200441017422072006200720064b1b22074100480d110240024020040d002007102d21060c010b200128020020042007103121060b2006450d1220012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d11200641017422042007200420074b1b22044100480d110240024020060d002004102d21060c010b200128020020062004103121060b2006450d1220012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d11200641017422042007200420074b1b22044100480d110240024020060d002004102d21060c010b200128020020062004103121060b2006450d1220012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700004120102d2204450d11200441186a200041e1006a290000370000200441106a200041d9006a290000370000200441086a200041d1006a2900003700002004200041c9006a2900003700000240024020052802002207200328020022066b4120490d00200128020021070c010b200641206a22082006490d11200741017422062008200620084b1b22064100480d110240024020070d002006102d21070c010b200128020020072006103121070b2007450d1220012007360200200141046a2006360200200141086a28020021060b2003200641206a360200200720066a220641186a200441186a290000370000200641106a200441106a290000370000200641086a200441086a290000370000200620042900003700002004102f200041f8006a29030021092000290370210a0240024020052802002206200328020022046b4110490d00200128020021060c010b200441106a22072004490d11200641017422042007200420074b1b22044100480d110240024020060d002004102d21060c010b200128020020062004103121060b2006450d1220012006360200200141046a2004360200200141086a28020021040b2003200441106a360200200620046a220420093700082004200a370000200220002d006922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d11200041017422052004200520044b1b22054100480d110240024020000d002005102d21040c010b200128020020002005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c0b0b200241043a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d10200441017422072006200720064b1b22074100480d100240024020040d002007102d21060c010b200128020020042007103121060b2006450d1120012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41043a00004120102d2204450d10200441186a200041216a290000370000200441106a200041196a290000370000200441086a200041116a2900003700002004200041096a2900003700000240024020052802002205200328020022006b4120490d00200128020021050c010b200041206a22062000490d10200541017422002006200020064b1b22004100480d100240024020050d002000102d21050c010b200128020020052000103121050b2005450d1120012005360200200141046a2000360200200141086a28020021000b2003200041206a360200200520006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a290000370000200020042900003700002004102f0c0a0b200241053a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0f200441017422072006200720064b1b22074100480d0f0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1020012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41053a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d0f200441017422002005200020054b1b22004100480d0f0240024020040d002000102d21040c010b200128020020042000103121040b2004450d1020012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c090b200241063a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0e200441017422072006200720064b1b22074100480d0e0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0f20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41063a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d0e200641017422042007200420074b1b22044100480d0e0240024020060d002004102d21060c010b200128020020062004103121060b2006450d0f20012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200220002d002922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d0e200041017422052004200520044b1b22054100480d0e0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c080b200241073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0d200441017422072006200720064b1b22074100480d0d0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0e20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41073a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d0d200541017422042006200420064b1b22044100480d0d0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b200141086a2206200441206a360200200520046a220441186a200041096a220541186a290000370000200441106a200541106a290000370000200441086a200541086a29000037000020042005290000370000200028022c2107200041346a28020022002001106902400240200141046a2802002205200628020022046b2000490d00200128020021050c010b200420006a22062004490d0d200541017422042006200420064b1b22044100480d0d0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b2003200420006a360200200520046a2007200010e8061a0c070b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410e3a000020002d0001220341024b0d0602400240024020030e03000102000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a0000200220002d000222043a000002400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d0e200041017422052003200520034b1b22054100480d0e0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0f20012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c080b200241013a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0d200341017422052004200520044b1b22054100480d0d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0d200441017422032005200320054b1b22034100480d0d0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0e20012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041026a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c070b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a0000200220002d000222043a000002400240200141046a28020020052802002200460d00200128020021030c010b200041016a22032000490d0c200041017422052003200520034b1b22054100480d0c0240024020000d002005102d21030c010b200128020020002005103121030b2003450d0d20012003360200200141046a2005360200200141086a28020021000b200141086a200041016a360200200320006a20043a00000c060b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0c20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a410f3a000020002d0004220341024b0d0502400240024020030e03000102000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0f200441017422032005200320054b1b22034100480d0f0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041056a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c070b200241013a000002400240200141046a280200200141086a2802002200460d00200128020021030c010b200041016a22032000490d0e200041017422042003200420034b1b22044100480d0e0240024020000d002004102d21030c010b200128020020002004103121030b2003450d0f20012003360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200320006a41013a00000c060b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0d200341017422052004200520044b1b22054100480d0d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a00002000280208210b200041106a2802002200200110692000450d05200b200041d0006c6a210c200141046a210703400240024020072802002203200528020022006b4120490d00200128020021030c010b200041206a22042000490d0e200341017422002004200020044b1b22004100480d0e0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0f2001200336020020072000360200200528020021000b2005200041206a360200200320006a220041186a200b41186a290000370000200041106a200b41106a290000370000200041086a200b41086a2900003700002000200b2900003700002002200b41206a3602002002200110c2022002200b41306a3602002002200110c202200b2802402100200b28024822032001106902402003450d00200341306c210603400240024020072802002204200528020022036b4120490d00200128020021040c010b200341206a22082003490d10200441017422032008200320084b1b22034100480d100240024020040d002003102d21040c010b200128020020042003103121040b2004450d112001200436020020072003360200200528020021030b2005200341206a360200200420036a220341186a200041286a290000370000200341106a200041206a290000370000200341086a200041186a2900003700002003200041106a290000370000200220003602002002200110c202200041306a2100200641506a22060d000b0b200c200b41d0006a220b470d000c060b0b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41103a000002400240200141046a28020020052802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4110490d00200128020021040c010b200341106a22052003490d0c200441017422032005200320054b1b22034100480d0c0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341106a360200200420036a220341086a200041106a220441086a29000037000020032004290000370000200028020421062000410c6a28020022002001106902400240200141046a2802002204200528020022036b2000490d00200128020021040c010b200320006a22052003490d0c200441017422032005200320054b1b22034100480d0c0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a200320006a360200200420036a2006200010e8061a0c040b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0c20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41113a000020002d0008220341064b0d03024002400240024002400240024020030e0700010203040506000b200241003a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d11200341017422052004200520044b1b22054100480d110240024020030d002005102d21040c010b200128020020032005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41003a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d11200441017422032005200320054b1b22034100480d110240024020040d002003102d21040c010b200128020020042003103121040b2004450d1220012004360200200141046a2003360200200141086a28020021030b200141086a200341206a360200200420036a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c090b200241013a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d10200341017422052004200520044b1b22054100480d100240024020030d002005102d21040c010b200128020020032005103121040b2004450d1120012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d10200441017422032005200320054b1b22034100480d100240024020040d002003102d21040c010b200128020020042003103121040b2004450d1120012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200041386a29030021092000290330210a02400240200141046a2802002203200528020022006b4110490d00200128020021030c010b200041106a22042000490d10200341017422002004200020044b1b22004100480d100240024020030d002000102d21030c010b200128020020032000103121030b2003450d1120012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020093700082000200a3700000c080b200241023a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d1020012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0f200441017422032005200320054b1b22034100480d0f0240024020040d002003102d21040c010b200128020020042003103121040b2004450d1020012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200041386a29030021092000290330210a02400240200141046a2802002203200528020022006b4110490d00200128020021030c010b200041106a22042000490d0f200341017422002004200020044b1b22004100480d0f0240024020030d002000102d21030c010b200128020020032000103121030b2003450d1020012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020093700082000200a3700000c070b200241033a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0e200441017422032005200320054b1b22034100480d0e0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0f20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200028022c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0e200341017422002005200020054b1b22004100480d0e0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0f20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c060b200141086a2802002103200241043a0000024002402003200141046a280200460d00200128020021040c010b200341016a22042003490d0d200341017422052004200520044b1b22054100480d0d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0d200441017422032005200320054b1b22034100480d0d0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0e20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200028022c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0d200341017422002005200020054b1b22004100480d0d0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0e20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c050b200241053a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0c200341017422052004200520044b1b22054100480d0c0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41053a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0c200441017422032005200320054b1b22034100480d0c0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0d20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041096a220441186a290000370000200341106a200441106a290000370000200341086a200441086a29000037000020032004290000370000200028022c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0c200341017422002005200020054b1b22004100480d0c0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0d20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c040b200241063a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0c20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41063a0000200028020c210402400240200141046a2802002203200528020022006b4104490d00200128020021030c010b200041046a22052000490d0b200341017422002005200020054b1b22004100480d0b0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0c20012003360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200320006a20043600000c030b02400240200141046a2205280200200141086a22032802002204460d00200128020021060c010b200441016a22062004490d0a200441017422072006200720064b1b22074100480d0a0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0b20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41123a000020002d00082204410e4b0d0202400240024002400240024002400240024002400240024002400240024020040e0f000102030405060708090a0b0c0d0e000b200241003a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d18200441017422072006200720064b1b22074100480d180240024020040d002007102d21060c010b200128020020042007103121060b2006450d1920012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41003a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d18200541017422042006200420064b1b22044100480d180240024020050d002004102d21050c010b200128020020052004103121050b2005450d1920012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c100b200241013a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d17200441017422072006200720064b1b22074100480d170240024020040d002007102d21060c010b200128020020042007103121060b2006450d1820012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41013a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d17200641017422042007200420074b1b22044100480d170240024020060d002004102d21060c010b200128020020062004103121060b2006450d1820012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041386a29030021092000290330210a0240024020052802002204200328020022006b4110490d00200128020021040c010b200041106a22052000490d17200441017422002005200020054b1b22004100480d170240024020040d002000102d21040c010b200128020020042000103121040b2004450d1820012004360200200141046a2000360200200141086a28020021000b2003200041106a360200200420006a220020093700082000200a3700000c0f0b200241023a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d16200441017422072006200720064b1b22074100480d160240024020040d002007102d21060c010b200128020020042007103121060b2006450d1720012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41023a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d16200641017422042007200420074b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200041d8006a29030021092000290350210a0240024020052802002206200328020022046b4110490d00200128020021060c010b200441106a22072004490d16200641017422042007200420074b1b22044100480d160240024020060d002004102d21060c010b200128020020062004103121060b2006450d1720012006360200200141046a2004360200200141086a28020021040b2003200441106a360200200620046a220420093700082004200a3700000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d16200541017422042006200420064b1b22044100480d160240024020050d002004102d21050c010b200128020020052004103121050b2005450d1720012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041296a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0e0b200241033a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d15200441017422072006200720064b1b22074100480d150240024020040d002007102d21060c010b200128020020042007103121060b2006450d1620012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41033a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d15200541017422042006200420064b1b22044100480d150240024020050d002004102d21050c010b200128020020052004103121050b2005450d1620012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0d0b200241043a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d14200441017422072006200720064b1b22074100480d140240024020040d002007102d21060c010b200128020020042007103121060b2006450d1520012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41043a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d14200541017422042006200420064b1b22044100480d140240024020050d002004102d21050c010b200128020020052004103121050b2005450d1520012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0c0b200241053a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d13200441017422072006200720064b1b22074100480d130240024020040d002007102d21060c010b200128020020042007103121060b2006450d1420012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41053a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d13200541017422042006200420064b1b22044100480d130240024020050d002004102d21050c010b200128020020052004103121050b2005450d1420012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c0b0b200241063a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d12200441017422072006200720064b1b22074100480d120240024020040d002007102d21060c010b200128020020042007103121060b2006450d1320012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41063a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d12200641017422042007200420074b1b22044100480d120240024020060d002004102d21060c010b200128020020062004103121060b2006450d1320012006360200200141046a2004360200200141086a28020021040b200141086a220b200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200028022c2104200041346a2802002200200110692000450d0a20004105742107200141046a210c03400240024020052802002206200328020022006b4120490d00200128020021060c010b200041206a22082000490d13200641017422002008200020084b1b22004100480d130240024020060d002000102d21060c010b200128020020062000103121060b2006450d1420012006360200200c2000360200200b28020021000b2003200041206a360200200620006a220041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a29000037000020002004290000370000200441206a2104200741606a22070d000c0b0b0b200241073a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d11200441017422072006200720064b1b22074100480d110240024020040d002007102d21060c010b200128020020042007103121060b2006450d1220012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41073a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d11200641017422042007200420074b1b22044100480d110240024020060d002004102d21060c010b200128020020062004103121060b2006450d1220012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200220002d002922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d11200041017422052004200520044b1b22054100480d110240024020000d002005102d21040c010b200128020020002005103121040b2004450d1220012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c090b200241083a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d10200441017422072006200720064b1b22074100480d100240024020040d002007102d21060c010b200128020020042007103121060b2006450d1120012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41083a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d10200541017422042006200420064b1b22044100480d100240024020050d002004102d21050c010b200128020020052004103121050b2005450d1120012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c080b200241093a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0f200441017422072006200720064b1b22074100480d0f0240024020040d002007102d21060c010b200128020020042007103121060b2006450d1020012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a41093a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d0f200541017422042006200420064b1b22044100480d0f0240024020050d002004102d21050c010b200128020020052004103121050b2005450d1020012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c070b2002410a3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0e200441017422072006200720064b1b22074100480d0e0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0f20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410a3a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d0e200541017422042006200420064b1b22044100480d0e0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0f20012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c060b2002410b3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0d200441017422072006200720064b1b22074100480d0d0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0e20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410b3a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d0d200641017422042007200420074b1b22044100480d0d0240024020060d002004102d21060c010b200128020020062004103121060b2006450d0e20012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200420062900003700000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d0d200641017422042007200420074b1b22044100480d0d0240024020060d002004102d21060c010b200128020020062004103121060b2006450d0e20012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041296a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200220002d004922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d0d200041017422052004200520044b1b22054100480d0d0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c050b2002410c3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0c200441017422072006200720064b1b22074100480d0c0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0d20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410c3a00000240024020052802002206200328020022046b4120490d00200128020021060c010b200441206a22072004490d0c200641017422042007200420074b1b22044100480d0c0240024020060d002004102d21060c010b200128020020062004103121060b2006450d0d20012006360200200141046a2004360200200141086a28020021040b2003200441206a360200200620046a220441186a200041096a220641186a290000370000200441106a200641106a290000370000200441086a200641086a29000037000020042006290000370000200220002d002922063a000002400240200528020020032802002200460d00200128020021040c010b200041016a22042000490d0c200041017422052004200520044b1b22054100480d0c0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021000b2003200041016a360200200420006a20063a00000c040b2002410d3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0b200441017422072006200720064b1b22074100480d0b0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0c20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410d3a0000200028020c21060240024020052802002204200328020022006b4104490d00200128020021040c010b200041046a22052000490d0b200441017422002005200020054b1b22004100480d0b0240024020040d002000102d21040c010b200128020020042000103121040b2004450d0c20012004360200200141046a2000360200200141086a28020021000b2003200041046a360200200420006a20063600000c030b2002410e3a000002400240200528020020032802002204460d00200128020021060c010b200441016a22062004490d0a200441017422072006200720064b1b22074100480d0a0240024020040d002007102d21060c010b200128020020042007103121060b2006450d0b20012006360200200141046a2007360200200141086a28020021040b2003200441016a360200200620046a410e3a00000240024020052802002205200328020022046b4120490d00200128020021050c010b200441206a22062004490d0a200541017422042006200420064b1b22044100480d0a0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0b20012005360200200141046a2004360200200141086a28020021040b2003200441206a360200200520046a220141186a200041096a220041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200120002900003700000c020b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d09200341017422052004200520044b1b22054100480d090240024020030d002005102d21040c010b200128020020032005103121040b2004450d0a20012004360200200141046a2005360200200141086a28020021030b200141086a200341016a360200200420036a41133a000020002d0001220341054b0d01024002400240024002400240024020030e06000102030405000b200241003a000002400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d0f200441017422052003200520034b1b22034100480d0f0240024020040d002003102d21050c010b200128020020042003103121050b2005450d1020012005360200200141046a2003360200200141086a28020021040b200041026a2103200141086a200441016a360200200520046a41003a00000c050b200241013a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0f20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41013a000002400240200141046a2802002203200528020022046b4120490d00200128020021050c010b200441206a22052004490d0e200341017422042005200420054b1b22044100480d0e0240024020030d002004102d21050c010b200128020020032004103121050b2005450d0f20012005360200200141046a2004360200200141086a28020021040b200041226a2103200141086a200441206a360200200520046a220441186a200041026a220041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200420002900003700000c040b200141086a2802002103200141046a2802002104200241023a00000240024020042003460d00200128020021040c010b200341016a22042003490d0d200341017422052004200520044b1b22054100480d0d0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41023a000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d0d200441017422032005200320054b1b22034100480d0d0240024020040d002003102d21040c010b200128020020042003103121040b2004450d0e20012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200041026a220441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002003200429000037000002400240200141046a2802002203200528020022046b4120490d00200128020021050c010b200441206a22052004490d10200341017422042005200420054b1b22044100480d100240024020030d002004102d21050c010b200128020020032004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b200041c2006a2103200141086a200441206a360200200520046a220441186a200041226a220041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200420002900003700000c030b200241033a000002400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0f200341017422052004200520044b1b22054100480d0f0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0e20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41033a000002400240200141046a2802002203200528020022046b4120490d00200128020021050c010b200441206a22052004490d0f200341017422042005200420054b1b22044100480d0f0240024020030d002004102d21050c010b200128020020032004103121050b2005450d0e20012005360200200141046a2004360200200141086a28020021040b200041226a2103200141086a200441206a360200200520046a220441186a200041026a220041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200420002900003700000c020b200141086a2802002103200241043a0000024002402003200141046a280200460d00200128020021040c010b200341016a22042003490d0e200341017422052004200520044b1b22054100480d0e0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0d20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41043a000002400240200141046a2802002203200528020022046b4120490d00200128020021050c010b200441206a22052004490d0e200341017422042005200420054b1b22044100480d0e0240024020030d002004102d21050c010b200128020020032004103121050b2005450d0d20012005360200200141046a2004360200200141086a28020021040b200041226a2103200141086a200441206a360200200520046a220441186a200041026a220041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200420002900003700000c010b200241053a000002400240200141046a280200200141086a2802002204460d00200128020021050c010b200441016a22032004490d0d200441017422052003200520034b1b22034100480d0d0240024020040d002003102d21050c010b200128020020042003103121050b2005450d0c20012005360200200141046a2003360200200141086a28020021040b200041026a2103200141086a200441016a360200200520046a41053a00000b02400240200141046a2802002204200141086a28020022006b4120490d00200128020021040c010b200041206a22052000490d0c200441017422002005200020054b1b22004100480d0c0240024020040d002000102d21040c010b200128020020042000103121040b2004450d0b20012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000c010b02400240200141046a280200200141086a2802002203460d00200128020021040c010b200341016a22042003490d0b200341017422052004200520044b1b22054100480d0b0240024020030d002005102d21040c010b200128020020032005103121040b2004450d0a20012004360200200141046a2005360200200141086a28020021030b200141086a2205200341016a360200200420036a41143a0000200041096a2103024020002d00084101460d0002400240200141046a28020020052802002204460d00200128020021050c010b200441016a22052004490d0c200441017422062005200620054b1b22064100480d0c0240024020040d002006102d21050c010b200128020020042006103121050b2005450d0b20012005360200200141046a2006360200200141086a28020021040b200141086a2206200441016a360200200520046a41003a000002400240200141046a2802002205200628020022046b4120490d00200128020021050c010b200441206a22062004490d0c200541017422042006200420064b1b22044100480d0c0240024020050d002004102d21050c010b200128020020052004103121050b2005450d0b20012005360200200141046a2004360200200141086a28020021040b200141086a2206200441206a360200200520046a220441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a29000037000020042003290000370000200041386a29030021092000290330210a02400240200141046a2802002203200628020022006b4110490d00200128020021030c010b200041106a22042000490d0c200341017422002004200020044b1b22004100480d0c0240024020030d002000102d21030c010b200128020020032000103121030b2003450d0b20012003360200200141046a2000360200200141086a28020021000b200141086a200041106a360200200320006a220020093700082000200a3700000c010b02400240200141046a28020020052802002200460d00200128020021040c010b200041016a22042000490d0b200041017422052004200520044b1b22054100480d0b0240024020000d002005102d21040c010b200128020020002005103121040b2004450d0a20012004360200200141046a2005360200200141086a28020021000b200141086a2205200041016a360200200420006a41013a000002400240200141046a2802002204200528020022006b4120490d00200128020021040c010b200041206a22052000490d0b200441017422002005200020054b1b22004100480d0b0240024020040d002000102d21040c010b200128020020042000103121040b2004450d0a20012004360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200420006a220041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a290000370000200020032900003700000b200241106a24000f0b1036000b1038000b1038000b1036000b1038000b1036000b1038000b1036000b1036000b1038000bcf2701057f02400240024020002d0000220241064b0d00024002400240024002400240024020020e0700010203040506000b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d09200241017422042003200420034b1b22044100480d090240024020020d002004102d21030c010b200128020020022004103121030b2003450d0820012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41003a000002400240200141046a2802002203200428020022026b4120490d00200128020021030c010b200241206a22042002490d09200341017422022004200220044b1b22024100480d090240024020030d002002102d21030c010b200128020020032002103121030b2003450d0820012003360200200141046a2002360200200141086a28020021020b200141086a2204200241206a360200200320026a220241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a290000370000200220002900013700002000280244210502400240200141046a2802002203200428020022026b4104490d00200128020021030c010b200241046a22042002490d09200341017422022004200220044b1b22024100480d090240024020030d002002102d21030c010b200128020020032002103121030b2003450d0820012003360200200141046a2002360200200141086a28020021020b200141086a2206200241046a360200200320026a20053600004120102d2202450d07200241186a200041396a290000370000200241106a200041316a290000370000200241086a200041296a2900003700002002200041216a29000037000002400240200141046a2802002204200628020022036b4120490d00200128020021040c010b200341206a22052003490d09200441017422032005200320054b1b22034100480d090240024020040d002003102d21040c010b200128020020042003103121040b2004450d0820012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f2000280248210302400240200141046a2802002202200528020022006b4104490d00200128020021020c010b200041046a22042000490d09200241017422002004200020044b1b22004100480d090240024020020d002000102d21020c010b200128020020022000103121020b2002450d0820012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d08200241017422042003200420034b1b22044100480d080240024020020d002004102d21030c010b200128020020022004103121030b2003450d0720012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41013a000002400240200141046a2802002203200428020022026b4120490d00200128020021030c010b200241206a22042002490d08200341017422022004200220044b1b22024100480d080240024020030d002002102d21030c010b200128020020032002103121030b2003450d0720012003360200200141046a2002360200200141086a28020021020b200141086a2205200241206a360200200320026a220241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a290000370000200220002900013700004120102d2202450d06200241186a200041396a290000370000200241106a200041316a290000370000200241086a200041296a2900003700002002200041216a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d08200441017422032005200320054b1b22034100480d080240024020040d002003102d21040c010b200128020020042003103121040b2004450d0720012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f20002d0041210402400240200141046a28020020052802002202460d00200128020021030c010b200241016a22032002490d08200241017422052003200520034b1b22054100480d080240024020020d002005102d21030c010b200128020020022005103121030b2003450d0720012003360200200141046a2005360200200141086a28020021020b200141086a2205200241016a360200200320026a20043a00002000280244210402400240200141046a2802002203200528020022026b4104490d00200128020021030c010b200241046a22052002490d08200341017422022005200220054b1b22024100480d080240024020030d002002102d21030c010b200128020020032002103121030b2003450d0720012003360200200141046a2002360200200141086a28020021020b200141086a2205200241046a360200200320026a20043600002000280248210302400240200141046a2802002202200528020022006b4104490d00200128020021020c010b200041046a22042000490d08200241017422002004200020044b1b22004100480d080240024020020d002000102d21020c010b200128020020022000103121020b2002450d0720012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d07200241017422042003200420034b1b22044100480d070240024020020d002004102d21030c010b200128020020022004103121030b2003450d0620012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41023a00004120102d2202450d0520022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002203200428020022006b4120490d00200128020021030c010b200041206a22042000490d07200341017422002004200020044b1b22004100480d070240024020030d002000102d21030c010b200128020020032000103121030b2003450d0620012003360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200320006a220141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002002102f0f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d06200241017422042003200420034b1b22044100480d060240024020020d002004102d21030c010b200128020020022004103121030b2003450d0520012003360200200141046a2004360200200141086a28020021020b200141086a2204200241016a360200200320026a41033a00004120102d2202450d0420022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002203200428020022006b4120490d00200128020021030c010b200041206a22042000490d06200341017422002004200020044b1b22004100480d060240024020030d002000102d21030c010b200128020020032000103121030b2003450d0520012003360200200141046a2000360200200141086a28020021000b200141086a200041206a360200200320006a220141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002002102f0f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128020020022004103121030b2003450d0420012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41043a00004120102d2202450d0320022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d05200441017422032005200320054b1b22034100480d050240024020040d002003102d21040c010b200128020020042003103121040b2004450d0420012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f20002d0021210302400240200141046a28020020052802002200460d00200128020021020c010b200041016a22022000490d05200041017422042002200420024b1b22044100480d050240024020000d002004102d21020c010b200128020020002004103121020b2002450d0420012002360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200220006a20033a00000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128020020022004103121030b2003450d0320012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41053a00004120102d2202450d0220022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d04200441017422032005200320054b1b22034100480d040240024020040d002003102d21040c010b200128020020042003103121040b2004450d0320012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f20002d0021210302400240200141046a28020020052802002200460d00200128020021020c010b200041016a22022000490d04200041017422042002200420024b1b22044100480d040240024020000d002004102d21020c010b200128020020002004103121020b2002450d0320012002360200200141046a2004360200200141086a28020021000b200141086a200041016a360200200220006a20033a00000f0b02400240200141046a280200200141086a2802002202460d00200128020021030c010b200241016a22032002490d03200241017422042003200420034b1b22044100480d030240024020020d002004102d21030c010b200128020020022004103121030b2003450d0220012003360200200141046a2004360200200141086a28020021020b200141086a2205200241016a360200200320026a41063a00004120102d2202450d0120022000290001370000200241186a200041196a290000370000200241106a200041116a290000370000200241086a200041096a29000037000002400240200141046a2802002204200528020022036b4120490d00200128020021040c010b200341206a22052003490d03200441017422032005200320054b1b22034100480d030240024020040d002003102d21040c010b200128020020042003103121040b2004450d0220012004360200200141046a2003360200200141086a28020021030b200141086a2205200341206a360200200420036a220341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200320022900003700002002102f2000280224210402400240200141046a2802002203200528020022026b4104490d00200128020021030c010b200241046a22052002490d03200341017422022005200220054b1b22024100480d030240024020030d002002102d21030c010b200128020020032002103121030b2003450d0220012003360200200141046a2002360200200141086a28020021020b200141086a2205200241046a360200200320026a20043600002000280228210302400240200141046a2802002202200528020022006b4104490d00200128020021020c010b200041046a22042000490d03200241017422002004200020044b1b22004100480d030240024020020d002000102d21020c010b200128020020022000103121020b2002450d0220012002360200200141046a2000360200200141086a28020021000b200141086a200041046a360200200220006a20033600000b0f0b1036000b1038000b881901057f230041206b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1b010214030405060708090a0b0c0d0e0f1011121314141415161700010b4190ce0021030240200141086a2802002201417f6a4102490d0002400240024020010e0400010102000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c90010430b000b41c0843d21030b20004180023b0104200020033602000c170b024002400240024002400240024002400240024002400240200141086a2802000e0b000102030405060708090a000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b200041013a000420002001410c6a2802003602000c090b200041003a000420004190ce003602000c080b200041013a000420004190ce003602000c070b200041013a0004200041c09a0c3602000c060b200041013a0004200041c09a0c3602000c050b200041013a0004200041a09c013602000c040b200041013a000420004190ce003602000c030b200041013a000420004190ce003602000c020b200041013a000420004190ce003602000c010b200041013a0004200041a8c3013602000b200041013a00050c160b0240024002400240024002400240024020012d00040e06000102030405000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b200141086a28020021044190ce0021030240200141106a280200220541b0026c2206450d00200421010340200241086a200110f102200141b0026a2101200228020820036a2103200641d07d6a22060d000b0b200541b0026c21010340024020010d00410121010c070b200141d07d6a2101200241086a200410f102200441b0026a210420022d000c0d000c050b0b200241086a200141086a280200220110f10220022802082103200241086a200110f10220034190ce006a210320022d000c21010c040b200241086a200141206a280200220310f102200141106a280200210120022802082104200241086a200310f102200420014190ce006c6a4190ce006a210320022d000c21010c030b200141306a2802004190ce006c4190ce006a21030c010b200141306a2802004190ce006c4190ce006a21030b410021010b200041013a0005200020013a0004200020033602000c150b20004181023b010420004190ce003602000c140b20004181023b010420004190ce003602000c130b20004180023b010420004190ce003602000c120b4100210341c0843d2104024002400240200141086a2802000e050002010202000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b4101210341d0860321040b200041013a0005200020033a0004200020043602000c110b4100210441a0c21e210302400240024002400240024002400240200141086a2d00000e1600070701010202070702030303030603040707070506000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b4180b51821030c050b41b0e32d21030c040b41882721030c030b41c0843d21030c020b410121040c010b4190ce0021030b200041013a0005200020043a0004200020033602000c100b20004180023b0104200041f093093602000c0f0b4100210441c096b1022103024002400240024002400240024002400240200141086a2d00000e18000808010102080808030304040707070505060707060607000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b41c09a0c21030c060b4101210441a0c21e21030c050b41c09a0c21030c040b410121044190ce0021030c030b41a0c21e21030c020b4190ce0021030c010b41a08d0621030b200041013a0005200020043a0004200020033602000c0e0b41a08d062103024002400240024020012d00040e06000303010202000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b41c096b10221030c010b41c09a0c21030b20004181023b0104200020033602000c0d0b41a08d062103024002400240024020012d00040e06000303010202000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b41c096b10221030c010b41c09a0c21030b20004181023b0104200020033602000c0c0b4100210441a08d062103024002400240024002400240200141086a2802000e0700050102030404000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b4190ce0021030c030b41c0843d21030c020b41a0c21e21030c010b41012104418089fa0021030b200041013a0005200020043a0004200020033602000c0b0b20004180023b0104200041d086033602000c0a0b20004180023b010420004190ce003602000c090b20004180023b010420004190ce003602000c080b4100210441a0c21e2103024002400240024002400240200141086a2d00000e09000501010204030404000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b410121040b41a08d0621030c020b41f0930921030c010b41d0860321030b200041013a0005200020043a0004200020033602000c070b20004180023b010420004190ce003602000c060b0240024002400240024020012802040e0400010203000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b200241086a200141086a280200220110f10220022802082103200241086a200110f102200020022d000c3a0004200020034190ce006a3602000c020b200041003a000420004190ce003602000c010b200241086a2001412c6a280200220110f10220022802082103200241086a200110f102200020022d000c3a0004200020034190ce006a3602000b200041013a00050c050b20004180023b010420004190ce003602000c040b10e101000b4190ce0021030240024002400240200141086a2d00000e0c000301010101010101010102000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b41d0860321030c010b41a08d0621030b20004180023b0104200020033602000c020b41d086032103024002400240024002400240024002400240200141086a2d00000e0d00080108010203040705060807000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b41a09c0121030c060b41b0ea0121030c050b41a09c0121030c040b41b0ea0121030c030b41a09c0121030c020b41b0ea0121030c010b4190ce0021030b20004180023b0104200020033602000c010b0240024002400240024002400240024002400240024020012d00040e0a00010203040506070809000b2002411c6a41013602002002420137020c200241b4d8c90036020820024104360204200241fcdbc90036020020022002360218200241086a41e8d8c9001043000b200241086a200141286a280200220110f10220022802082103200241086a200110f102200020022d000c3a0004200020034190ce006a3602000c080b200041003a000420004190ce003602000c070b200041003a0004200041a08d063602000c060b200041003a0004200041a08d063602000c050b200041003a0004200041a08d063602000c040b200041003a0004200041a08d063602000c030b200041003a0004200041b0ea013602000c020b200041003a0004200041b0ea013602000c010b200041003a000420004190ce003602000b200041013a00050b200241206a24000b87260b017f017e027f017e027f047e017f097e017f027e037f23004180086b22062400200620043703102006200337030820062001360204200620053a001f02400240024002400240024020012002460d002003200484500d0020012002412010ea06450d00418de6c300ad4280808080e0008410012201290000210320064180056a41086a200141086a29000037030020062003370380052001102f41f0e8c600ad4280808080f0008410012201290000210320064180066a41086a200141086a29000037030020062003370380062001102f4120102d2201450d0120012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a2900003700002001ad4280808080800484100322052900002103200541086a2900002104200541106a290000210720064180076a41186a2208200541186a29000037030020064180076a41106a2209200737030020064180076a41086a200437030020062003370380072005102f2001102f41c000102d2201450d01200120062903800537000020012006290380063700102001200629038007370020200141086a20064180056a41086a290300370000200141186a20064180066a41086a290300370000200141286a20064180076a41086a290300370000200141306a2009290300370000200141386a2008290300370000200641206a200110f602200629032021074200210a20064200370320200641e8006a280200210b20062d006c210c0240024020074201510d00200641f0006a41386a4200370300200641f0006a41306a4200370300200641f0006a41286a4200370300200641f0006a41206a420037030020064188016a420037030020064180016a4200370300200641f0006a41086a4200370300200642003703704200210d4200210e4200210f0c010b200641206a41386a2903002103200641206a41306a2903002104200641206a41206a290300210d200641206a41186a290300210a200641206a41c0006a29030021102006290330210f2006290328210e200641f0006a41206a200641206a41286a290300370300200641f0006a41286a2004370300200641f0006a41306a200337030020064180016a200a3703002006200d37038801200620103703a8012006200e3703702006200f3703780b20062802042108418de6c300ad4280808080e0008410012205290000210320064180046a41086a200541086a29000037030020062003370380042005102f41f0e8c600ad4280808080f00084100122052900002103200641c8046a41086a200541086a290000370300200620033703c8042005102f4120102d2205450d0120052008290000370000200541186a200841186a290000370000200541106a200841106a290000370000200541086a200841086a2900003700002005ad4280808080800484100322092900002103200941086a2900002104200941106a290000211020064180076a41186a2211200941186a29000037030020064180076a41106a201037030020064180076a41086a200437030020062003370380072009102f2005102f41c000102d2205450d012005200629038004370000200520062903c8043700102005200629038007370020200541086a20064180046a41086a290300370000200541186a200641c8046a41086a290300370000200541286a20064180076a41086a290300370000200541306a20064180076a41106a290300370000200541386a2011290300370000200641b0036a200510f60220062903b003211242002113200642003703b003200641f8036a280200210920062d00fc0321110240024020124201510d0020064190046a41306a420037030020064190046a41286a420037030020064190046a41206a4200370300200641a8046a420037030020064190046a41106a420037030020064190046a41086a42003703002006420037039004420021144200210442002103420021150c010b200641b0036a41386a2903002110200641b0036a41306a2903002116200641b0036a41206a2903002114200641b0036a41186a2903002113200641b0036a41c0006a290300211520062903c003210320062903b803210420064190046a41206a200641b0036a41286a29030037030020064190046a41286a201637030020064190046a41306a201037030020064190046a41106a2013370300200620143703a804200620043703900420062003370398040b02402004200629030822167d22172004562003200641086a41086a29030022187d2004201654ad7d221020035620102003511b450d004198b5c600ad21034280808080b002210441838c0c21090c040b2006201737039004200620103703980402402006290370221920167c221a201954221b200641f0006a41086a290300221c20187c201bad7c2219201c542019201c511b450d004191ccc700ad210342808080808001210441838c0821090c040b2006201a37037020064188016a290300211c200620193703780240427f201a2006290380017c221d201d201a54221b2019201c7c201bad7c221c201954201c2019511b221b1b428080e983b1de16544100427f201c201b1b501b450d004186b5c600ad21034280808080a002210441838c1021090c040b02402016201884500d0020064180076a2006280204108d0220062903a007201756200641a8076a290300221620105620162010511b450d0041abb5c600ad21034280808080d002210441838c0421090c040b0240024020062d001f4101460d002017428080e983b1de165441002010501b450d0141fdb4c600ad21030c040b2006280204211e418de6c300ad4280808080e000841001221b290000211620064180046a41086a201b41086a2900003703002006201637038004201b102f41f0e8c600ad4280808080f000841001221b2900002116200641c8046a41086a201b41086a290000370300200620163703c804201b102f4120102d221b450d02201b201e290000370000201b41186a201e41186a290000370000201b41106a201e41106a290000370000201b41086a201e41086a290000370000201bad42808080808004841003221e2900002116201e41086a2900002119201e41106a290000211820064180076a41186a221f201e41186a29000037030020064180076a41106a2220201837030020064180076a41086a20193703002006201637038007201e102f201b102f41c000102d221b450d02201b200629038004370000201b20062903c804370010201b200629038007370020201b41086a20064180046a41086a290300370000201b41186a200641c8046a41086a290300370000201b41286a20064180076a41086a290300370000201b41306a2020290300370000201b41386a201f29030037000020064180076a201b10f60220062d00cc07211e2006290380072116201b102f201e450d0020164201520d002017428080e983b1de165441002010501b450d0041fdb4c600ad21030c030b200641c8046a41186a200641a0046a221b41086a2903002216370300200641c8046a41206a221e201b41106a290300370300200641f0046a221f201b41186a290300370300200641f8046a2220201b41206a2903003703002006201b29030022193703d804200620173703c804200620103703d004427f200420137c22132013200454221b200320147c201bad7c220420035420042003511b221b1b427f2004201b1b84211302400240427f201720197c22032003201754221b201020167c201bad7c220320105420032010511b221b1b2204428080e983b1de16544100427f2003201b1b2203501b0d00200641c8046a41106a290300210320202903002104201f2903002116201e290300211920062903d004211820062903c80421144201211c20062903e004211a0c010b4200211c02402004200384500d0020042003109a01200641b8076a2003370300200641b0076a200437030020064180076a41086a41013a000020064189076a200829000037000020064191076a200841086a29000037000020064199076a200841106a290000370000200641a1076a200841186a290000370000200641033a00800741c8e1ca00410020064180076a108c010b0b201350211e200641d8036a2019370300200641e0036a2016370300200641c0036a2018370300200641e8036a2004370300200641c8036a20033703002006201a3703d003200620153703f003200620143703b8034100211b2006201141002012420151221f1b3a00fc03200620094100201f1b3602f8032006201c4201512209ad3703b0030240024020090d002005ad428080808080088410054101211b0c010b200641c000360284072006200536028007200641b8036a20064180076a1090030b201ead21032005102f02400240024020124201510d00201b0d004103210920064180066a21050c010b2012420152201b410173720d014104210920064180056a21050b200541046a20093a0000200541003a0000200541056a20082900003700002005410d6a200841086a290000370000200541156a200841106a2900003700002005411d6a200841186a29000037000041c8e1ca0041002005108c010b41002111410421092003500d04200641b8076a2010370300200641b0076a20173703004100211120064180076a41086a41003a000020064189076a200829000037000020064191076a200841086a29000037000020064199076a200841106a290000370000200641a1076a200841186a290000370000200641033a00800741c8e1ca00410020064180076a108c010c040b200041043a00000c040b1036000b42808080809001210441838c1421090b2005102f20094108762111200320048421030b20064180056a41086a2208200641f0006a41106a220541086a29030037030020064180056a41106a221b200541106a29030037030020064180056a41186a221e200541186a29030037030020064180056a41206a221f200541206a29030037030020062005290300370380050240200941ff01714104470d00200641f0006a41086a29030021032006290370210420062903a801211620064180066a41186a2008290300221237030020064180066a41206a201b290300370300200641a8066a2208201e290300370300200641b0066a2209201f290300370300200620062903800522133703900620062004370380062006200337038806427f200e200a7c22102010200e542205200f200d7c2005ad7c2210200f542010200f511b22051b427f201020051b84210a02400240427f200420137c220f200f2004542205200320127c2005ad7c220f200354200f2003511b22051b2210428080e983b1de16544100427f200f20051b220f501b0d0020064190066a290300210f200929030021102008290300210e200641a0066a29030021122006290388062113200629038006210d4201211920062903980621170c010b4200211902402010200f84500d002010200f109a01200641b8076a200f370300200641b0076a201037030020064180076a41086a41013a000020064189076a200229000037000020064191076a200241086a29000037000020064199076a200241106a290000370000200641a1076a200241186a290000370000200641033a00800741c8e1ca00410020064180076a108c010b0b200a502108200641c8006a2012370300200641d0006a200e370300200641306a2013370300200641d8006a2010370300200641386a200f37030020062017370340200620163703602006200d370328410021052006200c4100200742015122091b3a006c2006200b410020091b360268200620194201512209ad3703200240024020090d002001ad42808080808008841005410121050c010b200641c000360284072006200136028007200641286a20064180076a1090030b2008ad210f2001102f02400240024020074201510d0020050d0041032105200641b0026a21010c010b20074201522005410173720d0141042105200641b0016a21010b200141046a20053a0000200141003a0000200141056a20022900003700002001410d6a200241086a290000370000200141156a200241106a2900003700002001411d6a200241186a29000037000041c8e1ca0041002001108c010b0240200f500d00200641b8076a2003370300200641b0076a200437030020064180076a41086a41003a000020064189076a200229000037000020064191076a200241086a29000037000020064199076a200241106a290000370000200641a1076a200241186a290000370000200641033a00800741c8e1ca00410020064180076a108c010b2006280204210120062903082103200641d8076a200641086a41086a290300370300200641d0076a200337030020064180076a41086a41023a000020064189076a200129000037000020064191076a200141086a29000037000020064199076a200141106a290000370000200641a1076a200141186a290000370000200641a9076a2002290000370000200641b1076a200241086a290000370000200641b9076a200241106a290000370000200641c1076a200241186a290000370000200641033a00800741c8e1ca00410020064180076a108c01200041043a00000c010b2001102f200041036a41003a0000200020113b0001200041046a2003370000200020093a00000b20064180086a24000bf00204027f017e017f077e0240024020012802042202450d0020012802002203310000210420012002417f6a22053602042001200341016a3602002005450d012003310001210620012002417e6a22053602042001200341026a3602002005450d012003310002210720012002417d6a22053602042001200341036a3602002005450d012003310003210820012002417c6a22053602042001200341046a3602002005450d012003310004210920012002417b6a22053602042001200341056a3602002005450d012003310005210a20012002417a6a22053602042001200341066a3602002005450d012003310006210b2001200241796a22053602042001200341076a3602002005450d01200041003a00002003310007210c2001200241786a3602042001200341086a3602002000200c423886200b42308684200a422886842009422086842008421886842007421086842006420886842004843700010f0b200041013a00000f0b200041013a00000bb20201037f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024020022802102201450d00200228021421032002200241186a28020036022420022001360220200241c8006a200241206a10f5030240024020022802482204450d002000200229024c370204200020043602000c010b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602000b2003450d012001102f0c010b200041003602000b200241e0006a24000b850301087f230041206b22032400024002400240200141246c41046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b2003410036020820032004360204200320053602002001200310690240024020010d002003280208210420032802042106200328020021050c010b200141246c210720032802042106200328020821010340200341106a200010ea022003280210210802400240200620016b20032802182209490d00200120096a2104200328020021050c010b200120096a22042001490d05200641017422052004200520044b1b220a4100480d050240024020060d00200a102d21050c010b20032802002006200a103121050b2005450d042003200a36020420032005360200200a21060b20032004360208200520016a2008200910e8061a02402003280214450d002008102f0b200041246a2100200421012007415c6a22070d000b0b20022902002004ad4220862005ad84100402402006450d002005102f0b200341206a24000f0b103d000b1036000b1038000be40603047f017e0f7f230041c0016b22022400200241c00036020c20022001360208200241106a2001ad4280808080800884100210730240024020022802102201450d00200228021421032002200241186a28020022043602642002200136026002400240024020044104490d0020022004417c6a22053602642002200141046a3602602005450d002001280000210520022004417b6a3602642002200141056a36026020012d00042104200241f8006a200241e0006a1085054201210620022903784201520d010b20024100360228200242013703202002410b36026c2002200241086a3602682002200241206a3602742002418c016a41013602002002420137027c200241b885c7003602782002200241e8006a36028801200241f4006a41d8dbc100200241f8006a103c1a2002350228422086200235022084100802402002280224450d002002280220102f0b420021060c010b200241206a41386a2207200241f8006a41c0006a290300370300200241206a41306a2208200241f8006a41386a2209290300370300200241206a41286a220a200241f8006a41306a220b290300370300200241206a41206a220c200241f8006a41286a220d290300370300200241206a41186a220e200241f8006a41206a220f290300370300200241206a41106a2210200241f8006a41186a2211290300370300200241206a41086a2212200241f8006a41106a2213290300370300200241f4006a41026a2214200241e8006a41026a22152d00003a00002002200229038001370320200220022f00683b017420092007290300370300200b2008290300370300200d200a290300370300200f200c2903003703002011200e29030037030020132010290300370300200241f8006a41086a2207201229030037030020022002290320370378201520142d00003a0000200220022f01743b0168200020043a004c200041c8006a2005360200200041c0006a2009290300370300200041386a200b290300370300200041306a200d290300370300200041286a200f290300370300200041206a2011290300370300200041186a2013290300370300200041106a200729030037030020002002290378370308200020022f01683b004d200041cf006a20152d00003a00000b200020063703002003450d012001102f0c010b200042003703000b200241c0016a24000b940201047f230041d0006b220124002001412036020420012000360200200141086a2000ad42808080808004841002107302400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0020022d0000220441014b0d0041002100024020040e020200020b410121000c010b20014100360220200142013703182001410b36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141b885c7003602382001200141286a360248200141346a41d8dbc100200141386a103c1a200135022042208620013502188410080240200128021c450d002001280218102f0b410221000b2003450d002002102f0b200141d0006a240020000bea1504047f017e127f027e23004190036b22012400200141e8026a41186a4200370300200141e8026a41106a22024200370300200141e8026a41086a22034200370300200142003703e802419487ca00ad4280808080a001841001220429000021052003200441086a290000370300200120053703e8022004102f418691c700ad4280808080e00084100122042900002105200141c8026a41086a2206200441086a290000370300200120053703c8022004102f200220012903c8022205370300200141106a41086a2003290300370300200141106a41106a2005370300200141106a41186a2006290300370300200120012903e802370310200141203602342001200141106a360230200141386a200141106aad42808080808004841002107302400240200128023822070d00410021080c010b200128023c21092001200141386a41086a28020036025c20012007360258200141086a200141d8006a10e60102400240024002400240024002402001280208450d0041002103200141003602480c010b200128020c220a200128025c220b41c4006e22032003200a4b1b220cad42c4007e2205422088a70d012005a72203417f4c0d010240024020030d00410421080c010b2003102d2208450d03200341c4006e210c0b024002400240200a450d00200141e8026a410772210d4100210e0340200b450d022001200b417f6a220f36025c20012001280258220641016a36025820062d0000220341014b0d0202400240024020030e020001000b200f4104490d04200141a4026a41026a200141a8026a41026a2d00003a000020014188026a41086a200141c8026a41086a29020037030020014188026a41106a200141c8026a41106a29020037030020014188026a41186a200141c8026a41186a2d00003a0000200141e8016a41086a200141e8026a41086a290100370300200141e8016a41106a200141e8026a41106a290100370300200141e8016a41186a200141e8026a41186a290100370300200120012f00a8023b01a402200120012902c80237038802200120012901e8023703e8012001200b417b6a221036025c2001200641056a36025820062800012111200120012f01c4023b01e601410021020c010b41002102200141003a008803200b417e6a2104024002400240024002400340200f20022203460d01200141e8026a20036a200620036a220241016a2d00003a00002001200241026a3602582001200341016a22023a0088032001200436025c2004417f6a210420024120470d000b200141c4026a41026a221220012d00ea023a0000200141a8026a41086a2213200d41086a290000370300200141a8026a41106a2214200d41106a290000370300200141a8026a41186a2215200d41186a2d00003a0000200120012f01e8023b01c4022001200d2900003703a80241002110200f2002460d0220012800eb0221162001200436025c2001200620026a220f41026a360258200f41016a2d0000220241014d0d0120042110410221020c050b0240200341ff0171450d00200141003a0088030b41002110410221020c040b024020020e020200020b41002102200141003a008803200b20036b417c6a21030240034020042002460d01200141e8026a20026a200f20026a220641026a2d00003a00002001200641036a3602582001200241016a22063a0088032001200336025c2003417f6a21032006210220064120470d000b200141c8026a41186a200141e8026a41186a290300370300200141c8026a41106a200141e8026a41106a290300370300200141c8026a41086a200141e8026a41086a290300370300200120012903e8023703c802200420066b2110410121170c030b0240200241ff0171450d00200141003a0088030b410021100b410221020c020b41002117200421100b200141e8016a41186a200141c8026a41186a290300370300200141e8016a41106a200141c8026a41106a290300370300200141e8016a41086a200141c8026a41086a290300370300200141a4026a41026a20122d00003a000020014188026a41086a201329030037030020014188026a41106a201429030037030020014188026a41186a20152d00003a0000200120012903c8023703e801200120012f01c4023b01a402200120012903a8023703880241012102201621110b200141e2016a41026a2203200141a4026a41026a2d00003a0000200141c8016a41086a220620014188026a41086a290300370300200141c8016a41106a220f20014188026a41106a290300370300200141c8016a41186a220b20014188026a41186a2d00003a0000200141a8016a41086a2212200141e8016a41086a290300370300200141a8016a41106a2213200141e8016a41106a290300370300200141a8016a41186a2214200141e8016a41186a290300370300200120012f01a4023b01e20120012001290388023703c801200120012903e8013703a801200120012f01e6013b01a60120024102460d03200e41016a2104200141a2016a41026a221520032d00003a000020014188016a41086a2216200629030037030020014188016a41106a2206200f29030037030020014188016a41186a220f200b2d00003a0000200141e8006a41086a220b2012290300370300200141e8006a41106a22122013290300370300200141e8006a41186a22132014290300370300200120012f01e2013b01a201200120012903c80137038801200120012903a801370368200120012f01a6013b01660240200c200e470d00200e41017422032004200320044b1bad42c4007e2205422088a70d082005a722034100480d0802400240200e0d002003102d21080c010b2008200e41c4006c2003103121080b2008450d07200341c4006e210c0b2008200e41c4006c6a220320023a000020032011360004200341036a20152d00003a0000200320012f01a2013b0001200f2d0000210220062903002105201629030021182001290388012119200320173a002120032019370008200341106a2018370000200341186a2005370000200341206a20023a00002003413a6a2013290300370000200341326a20122903003700002003412a6a200b29030037000020032001290368370022200320012f01663b00422010210b2004210e2004200a470d000b0b200141d0006a200a3602002001200c36024c2001200836024820080d06200821030c020b200141e2016a41026a200141a4026a41026a2d00003a0000200141c8016a41086a20014188026a41086a290300370300200141c8016a41106a20014188026a41106a290300370300200141c8016a41186a20014188026a41186a2d00003a0000200141a8016a41086a200141e8016a41086a290300370300200141a8016a41106a200141e8016a41106a290300370300200141a8016a41186a200141e8016a41186a290300370300200120012f01a4023b01e20120012001290388023703c801200120012903e8013703a801200120012f01e6013b01a6010b4100210320014100360248200c450d002008102f0b200141003602d002200142013703c8022001410b3602ec012001200141306a3602e8012001200141c8026a3602a801200141fc026a4101360200200142013702ec02200141b885c7003602e8022001200141e8016a3602f802200141a8016a41d8dbc100200141e8026a103c1a20013502d00242208620013502c802841008024020012802cc02450d0020012802c802102f0b200321080c040b103d000b1036000b1038000b200129024c21050b2009450d002007102f0b024002402008450d0020002005370204200020083602000c010b20004100360208200042043702000b20014190036a24000bc90802097f037e230041206b220224002002410036020820024201370300024002404120102d2203450d0020032001290010370000200341186a2204200141286a290000370000200341106a2205200141206a290000370000200341086a2206200141186a2900003700004120102d2207450d00200242a080808080043702042002200736020020072003290000370000200741086a2006290000370000200741106a2005290000370000200741186a20042900003700002003102f200120021095024120102d2203450d0020032001290030370000200341186a200141c8006a290000370000200341106a200141c0006a290000370000200341086a200141386a2900003700000240024020022802042205200228020822066b4120490d00200641206a2107200228020021040c010b200641206a22072006490d02200541017422042007200420074b1b22084100480d020240024020050d002008102d21040c010b200228020020052008103121040b2004450d012002200836020420022004360200200821050b200420066a220641086a200341086a290000370000200641106a200341106a290000370000200641186a200341186a29000037000020022007360208200620032900003700002003102f4120102d2203450d0020032001290050370000200341186a200141e8006a290000370000200341106a200141e0006a290000370000200341086a200141d8006a2900003700000240200520076b411f4b0d00200741206a22062007490d02200541017422082006200820064b1b22064100480d020240024020050d002006102d21040c010b200420052006103121040b2004450d0120022006360204200220043602000b200420076a220441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a2900003700002002200741206a360208200420032900003700002003102f200128020421042001410c6a2802002201200210690240024020010d002002280208210320022802042106200228020021070c010b200141246c210920022802042106200228020821010340200241106a200410ea022002280210210802400240200620016b20022802182205490d00200120056a2103200228020021070c010b200120056a22032001490d04200641017422072003200720034b1b220a4100480d040240024020060d00200a102d21070c010b20022802002006200a103121070b2007450d032002200a36020420022007360200200a21060b20022003360208200720016a2008200510e8061a02402002280214450d002008102f0b200441246a2104200321012009415c6a22090d000b0b2003ad4220862007ad8410032201290000210b200141086a290000210c200141106a290000210d200041186a200141186a290000370000200041106a200d370000200041086a200c3700002000200b3700002001102f02402006450d002007102f0b200241206a24000f0b1036000b1038000ba30405027f017e027f027e027f230041e0006b22022400418de6c300ad4280808080e00084100122032900002104200241286a41086a2205200341086a290000370300200220043703282003102f4193e6c300ad4280808080900184100122032900002104200241086a2206200341086a290000370300200220043703002003102f2002200136025c200241dc006aad4280808080c00084100322032900002104200341086a2900002107200341106a2900002108200241386a41186a2201200341186a290000370300200241386a41106a22092008370300200241386a41086a220a2007370300200220043703382003102f024041c000102d2203450d00200320022903283700002003200229030037001020032002290338370020200341086a2005290300370000200341186a2006290300370000200341286a200a290300370000200341306a2009290300370000200341386a20012903003700002002200341c00010ad02200a200241096a2900003703002009200241116a2900003703002001200241196a290000370300200220022900013703380240024020022d00004101460d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290338370000200041186a200241386a41186a290300370000200041106a200241386a41106a290300370000200041086a200241386a41086a2903003700000b2003102f200241e0006a24000f0b1036000b890f05017f017e047f017e067f230041e0016b2201240042002102200141d0006a41186a22034200370300200141d0006a41106a22044200370300200141d0006a41086a2205420037030020014200370350419487ca00ad4280808080a00184100122062900002107200141c0006a41086a2208200641086a290000370300200120073703402006102f200520082903003703002001200129034037035041da85c700ad4280808080e000841001220629000021072008200641086a290000370300200120073703402006102f200420012903402207370300200141206a41086a22062005290300370300200141206a41106a2007370300200141206a41186a200829030037030020012001290350370320200141f0006a200141206a412010ad0220012d00702108200320014189016a290000370300200420014181016a2900003703002005200141f9006a290000370300200120012900713703500240024020084101470d0020002001290350370000200041186a2003290300370000200041106a2004290300370000200041086a20052903003700000c010b200141f0006a41186a4200370300200141f0006a41106a22094200370300200141f0006a41086a2208420037030020014200370370418de6c300ad4280808080e000841001220a29000021072008200a41086a29000037030020012007370370200a102f41bae6c300ad4280808080e000841001220a29000021072006200a41086a29000037030020012007370320200a102f20092001290320220737030020052008290300370300200420073703002003200629030037030020012001290370370350200141f0006a200141d0006a10f402024002402001280270220a0d004104210a410021050c010b20012902742202422088a721050b02400240200541246c2205450d002005415c6a2108200a210503400240024020052d00004101460d002008450d030c010b200541016a2800002103200541086a28020021062001200541106a280200360254200120063602500240200341c28289aa04460d0020080d010c030b200141f0006a200141d0006a10920520012d007022054102460d02200141d4016a28020021092001280274210b200141f0006a41186a4200370300200141f0006a41106a22064200370300200141f0006a41086a2208420037030020014200370370419c9eca00ad4280808080f000841001220329000021072008200341086a290000370300200120073703702003102f41a5c6c800ad4280808080a00184100122032900002107200141206a41086a220c200341086a290000370300200120073703202003102f200620012903202207370300200141d0006a41086a2008290300370300200141d0006a41106a2007370300200141d0006a41186a200c29030037030020012001290370370350200141f0006a200141d0006a412010aa0220012802702208410120081b2106410021030240200b200920054101711b22052001290274420020081b2207422088a74f0d00200620054105746a2205450d00200141186a200541186a290000370300200141106a200541106a290000370300200141086a200541086a29000037030020012005290000370300410121030b02402007a7450d002006102f0b2003450d02200141f0006a41186a2208200141186a290300370300200141f0006a41106a2203200141106a290300370300200141f0006a41086a2206200141086a29030037030020012001290300370370200141d0006a41186a220c4200370300200141d0006a41106a220d4200370300200141d0006a41086a2209420037030020014200370350419487ca00ad4280808080a001841001220b2900002107200141c0006a41086a2205200b41086a29000037030020012007370340200b102f200920052903003703002001200129034037035041da85c700ad4280808080e000841001220b29000021072005200b41086a29000037030020012007370340200b102f20042001290340370000200441086a2005290300370000200141206a41086a2009290300370300200141206a41106a200d290300370300200141206a41186a200c2903003703002001200129035037032002404120102d2205450d0020052001290370370000200541186a2008290300370000200541106a2003290300370000200541086a2006290300370000200141206aad42808080808004842005ad428080808080048410042005102f200041186a2008290300370000200041106a2003290300370000200041086a2006290300370000200020012903703700000c040b1036000b200541246a21052008415c6a21080c000b0b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402002422088a72205450d00200541246c2108200a210503400240024020052d0000220341044b0d0002400240024020030e050400010204040b2005410c6a280200450d03200541086a280200102f0c030b2005410c6a280200450d02200541086a280200102f0c020b2005410c6a280200450d01200541086a280200102f0c010b200541086a280200450d00200541046a280200102f0b200541246a21052008415c6a22080d000b0b2002a7450d00200a102f0b200141e0016a24000b9e0d08047f017e017f017e057f017e0b7f017e230041c0036b22012400200141e0006a41186a22024200370300200141e0006a41106a22034200370300200141e0006a41086a220442003703002001420037036041eba1ca00ad4280808080f0008422051001220629000021072004200641086a290000370300200120073703602006102f41adcac800ad4280808080900184100122062900002107200141106a41086a2208200641086a290000370300200120073703102006102f200320012903102207370300200141306a41086a22062004290300370300200141306a41106a2007370300200141306a41186a200829030037030020012001290360370330200141e0006a200141306a10fd03024002400240024020012903604202510d00200328020021092000280208210a2000280204210b2000280200210c20051001220029000021072008200041086a290000370300200120073703102000102f41e5cac800ad42808080808002841001220029000021072006200041086a290000370300200120073703302000102f200120093602002001ad4280808080c00084100322002900002107200041086a2900002105200041106a290000210d2002200041186a2900003703002003200d37030020042005370300200120073703602000102f41c000102d220e450d01200e2001290310370000200e2001290330370010200e2001290360370020200e41086a200141106a41086a290300370000200e41186a200141306a41086a290300370000200e41286a200141e0006a41086a290300370000200e41306a200141f0006a290300370000200e41386a200141e0006a41186a290300370000200141e0006a200e109f050240024020012802642208450d00200141086a200129036837030020012008360204200128026021040c010b200141086a42003703004190bdc600210820014190bdc600360204410021040b200120043602000240200a450d00200c200a41246c6a210f200141f4006a21102001410c6a211120014104722112200141d8006a2113200141306a41206a2114200c210a0340200a2802202115200141106a41186a2216200a41186a290000370300200141106a41106a2217200a41106a290000370300200141106a41086a2218200a41086a2900003703002001200a2900003703100240024020084190bdc600460d00200128020821020c010b200141e0006a410041e00210e7061a2013410036020020144200370300200141306a41186a22044200370300200141306a41106a22004200370300200141306a41086a2203420037030020014200370330419403102d2208450d0441002102200841003b010620084100360200200841086a200141e0006a41e00210e8061a20084190036a201328020036020020084188036a201429030037020020084180036a2004290300370200200841f8026a2000290300370200200841f0026a2003290300370200200820012903303702e80220014100360208200120083602040b200a41246a210a0240024003400240024020082f010622090d00410021030c010b20094105742104200841086a2100417f21030340024020040d00200921030c020b200341016a2103200141106a2000412010ea062206450d03200441606a2104200041206a21002006417f4a0d000b0b02402002450d002002417f6a2102200820034102746a4194036a28020021080c010b0b200141306a41186a20162903002207370300200141306a41106a20172903002205370300200141306a41086a2018290300220d37030020012001290310221937033020102019370200201041086a200d370200201041106a2005370200201041186a2007370200200120113602702001200336026c200120123602682001200836026420014100360260200141e0006a410010ee0121040c010b200820034102746a41e8026a21040b2004200428020020156a3602002001200128020020156a2204360200200a200f460d01200128020421080c000b0b0240200b450d00200c102f200128020021040b20012802042200450d022001410c6a2802002103200141086a280200210620014100360268200142013703604104102d2208450d012008200436000020014284808080c00037026420012008360260200020062003200141e0006a10e50120012802642104200ead4280808080800884200135026842208620012802602208ad84100402402004450d002008102f0b20002006200310a302200e102f0c030b200041046a280200450d022000280200102f0c020b1036000b200ead42808080808008841005200e102f0b200141c0036a24000bc30704057f017e057f027e23004180016b22012400200141c8006a41186a22024200370300200141c8006a41106a22034200370300200141c8006a41086a2204420037030020014200370348419c9eca00ad4280808080f000841001220529000021062004200541086a290000370300200120063703482005102f41a39eca00ad4280808080c00184100122072900002106200141e8006a41086a2205200741086a290000370300200120063703682007102f200320012903682206370300200141286a41086a22072004290300370300200141286a41106a22082006370300200141286a41186a2209200529030037030020012001290348370328200141106a200141286a41201095012001280214210a2001280210210b2009200041186a2900003703002008200041106a2900003703002007200041086a2900003703002001200029000037032841d39bca00ad4280808080800184100122002900002106200141186a41086a2207200041086a290000370300200120063703182000102f4194c9c300ad4280808080e001841001220029000021062005200041086a290000370300200120063703682000102f2001200a4100200b1b36027c200141fc006aad4280808080c00084100322002900002106200041086a290000210c200041106a290000210d2002200041186a2900003703002003200d3703002004200c370300200120063703482000102f024041c000102d2200450d00200020012903183700002000200129036837001020002001290348370020200041086a2007290300370000200041186a2005290300370000200041286a2004290300370000200041306a2003290300370000200041386a20022903003700004120102d2204450d0020042001290328370000200441186a200141286a41186a290300370000200441106a200141286a41106a290300370000200441086a200141286a41086a2903003700002004ad4280808080800484100322032900002106200341086a290000210c200341106a290000210d200141c8006a41186a2205200341186a290000370300200141c8006a41106a2202200d370300200141c8006a41086a2207200c370300200120063703482003102f2004102f200041c00041800110312200450d0020002001290348370040200041d8006a2005290300370000200041d0006a2002290300370000200041c8006a2007290300370000200141086a200041e0001095012001200128020c41016a410120012802081b3602482000ad4280808080800c84200141c8006aad4280808080c0008410042000102f20014180016a24000f0b1036000bed0403027f017e047f230041e0006b22022400419bd9c900ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003102f41c1d9c900ad4280808080800184100122032900002104200241186a41086a200341086a290000370300200220043703182003102f20022001360234200241346aad4280808080c00084100722032900002104200241386a41086a200341086a290000370300200220043703382003102f200241d4006a200241386a360200200241003a00582002200241c8006a36024c2002200241346a3602502002200241386a360248200241286a200241c8006a106c0240024002400240024002402002280230220541206a2201417f4c0d0020022802282106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290308370000200341086a200241086a41086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290318370010200341186a200241186a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a2000200136020820002007360204200020033602000240200228022c450d002006102f0b200241e0006a24000f0b1036000b1038000bbb0402097f057e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102204450d00200341186a28020021052003280214210641002101200341003a0068024002400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341286a41186a2201200341c8006a41186a2207290300370300200341286a41106a2208200341c8006a41106a2209290300370300200341286a41086a220a200341c8006a41086a220b29030037030020032003290348370328200520026b410f4d0d01200b200a290300220c37030020092008290300220d37030020072001290300220e37030020032003290328220f370348200420026a22012900002110200041306a200141086a290000370300200041286a2010370300200041206a200e370300200041186a200d370300200041106a200c3703002000200f3703084201210c0c020b200141ff0171450d00200341003a00680b20034100360230200342013703282003410b3602242003200341086a3602202003200341286a36026c200341dc006a41013602002003420137024c200341b885c7003602482003200341206a360258200341ec006a41d8dbc100200341c8006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b4200210c0b2000200c3703002006450d012004102f0c010b200042003703000b200341f0006a24000bd6d8020b017f027e137f017e017f017e127f057e017f037e147f23004190096b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e16000102030405061d1c1614131211100f0e0d0c0b0a09000b200341c4076a4101360200200342013702b407200341b4d8c9003602b007200341043602dc06200341fcdbc9003602d8062003200341d8066a3602c007200341b0076a41e8d8c9001043000b200141306a2903002104200141286a290300210520012d00012106200341f8066a200141246a280200360200200341d8066a41186a2001411c6a290200370300200341d8066a41106a200141146a290200370300200341d8066a41086a2001410c6a2902003703002003200141046a2902003703d80620022d00000d0620022d00014101470d06200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820032002411a6a29010037039806200320073a009706200320083a009606200320093b0194062003200a3a0093062003200b3a0092062003200c3b0190062003200d3a008f062003200e3a008e062003200f3b018c06200320103a008b06200320113a008a06200320123b018806200320133a008706200320143a008606200320153b018406200320163a008306200320173a008206200320183b01800641eba1ca00ad4280808080f00084100122022d000f210820022d000e210920022f000c210a20022d000b210b20022d000a210c20022f0008210d20022d0007210e20022d0006210f20022f0004211020022d0003211120022d0002211220022f000021132002102f41a1cac800ad4280808080e0008410012202290008211920022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211a2002102f4120102d2207450d232007200329038006370000200741186a20034180066a41186a290300370000200741106a20034180066a41106a290300370000200741086a20034180066a41086a2903003700002007ad428080808080048410032202290018211b20022d0017211c20022d0016211d20022f0014211e20022d0013211f20022d0012212020022f0010212120022d000f212220022d000e212320022f000c212420022d000b212520022d000a212620022f0008212720022d0007212820022d0006212920022f0004212a20022d0003212b20022d0002212c20022f0000212d2002102f2007102f41c000102d2202450d232002201b3700382002201c3a00372002201d3a00362002201e3b00342002201f3a0033200220203a0032200220213b0030200220223a002f200220233a002e200220243b002c200220253a002b200220263a002a200220273b0028200220283a0027200220293a00262002202a3b00242002202b3a00232002202c3a00222002202d3b002020022019370018200220143a0017200220153a0016200220163b0014200220173a0013200220183a00122002201a3b0010200220083a000f200220093a000e2002200a3b000c2002200b3a000b2002200c3a000a2002200d3b00082002200e3a00072002200f3a0006200220103b0004200220113a0003200220123a0002200220133b0000200341106a200241c00041c8e1ca004100410010b501200328021021082002102f41012107024020084101470d0020004183103b0100200041086a410d360200200041046a41c9c7c800360200200041026a41023a0000410121080c2b0b200341b0076a41206a200341d8066a41206a280200360200200341b0076a41186a200341d8066a41186a290300370300200341b0076a41106a200341d8066a41106a290300370300200341b0076a41086a200341d8066a41086a290300370300200320032903d8063703b007200341e8036a200341b0076a10bb01200341b8086a41086a2202200341f1036a290000370300200341b8086a41106a2207200341f9036a290000370300200341b8086a41186a220820034181046a290000370300200320032900e9033703b80820032d00e8034101460d13200341a8066a41186a2008290300370300200341a8066a41106a2007290300370300200341a8066a41086a2002290300370300200320032903b8083703a80641eba1ca00ad4280808080f0008410012202290000211920034180056a41086a200241086a29000037030020032019370380052002102f41a7cac800ad4280808080e00084100122022900002119200341a8056a41086a200241086a290000370300200320193703a8052002102f4120102d2207450d23200720032903a806370000200741186a200341a8066a41186a290300370000200741106a200341a8066a41106a290300370000200741086a200341a8066a41086a2903003700002007ad428080808080048410032202290018211920022d0017210820022d0016210920022f0014210a20022d0013210b20022d0012210c20022f0010210d20022d000f210e20022d000e210f20022f000c211020022d000b211120022d000a211220022f0008211320022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211a2002102f2007102f41c000102d2202450d232002200329038005370000200220032903a80537001020022019370038200220083a0037200220093a00362002200a3b00342002200b3a00332002200c3a00322002200d3b00302002200e3a002f2002200f3a002e200220103b002c200220113a002b200220123a002a200220133b0028200220143a0027200220153a0026200220163b0024200220173a0023200220183a00222002201a3b0020200241086a20034180056a41086a290300370000200241186a200341a8056a41086a290300370000200341086a200241c00041c8e1ca004100410010b501200328020821082002102f41012107024020084101470d00410d210241bcc7c8002106410321080c2a0b02402005428080e983b1de165441002004501b450d00411121024180c7c8002106410721080c2a0b41eba1ca00ad4280808080f00084100122022900002119200341d8036a41086a200241086a290000370300200320193703d8032002102f41a1cac800ad4280808080e0008410012202290000211920034180056a41086a200241086a29000037030020032019370380052002102f4120102d2202450d232002200329038006370000200241186a20034180066a41186a290300370000200241106a20034180066a41106a290300370000200241086a20034180066a41086a2903003700002002ad4280808080800484100322072900002119200741086a290000211b200741106a290000212e200341a8056a41186a2208200741186a290000370300200341a8056a41106a2209202e370300200341a8056a41086a201b370300200320193703a8052007102f2002102f41c000102d2202450d23200220032903d803370000200241086a200341d8036a41086a2903003700002002200329038005370010200241186a20034180056a41086a290300370000200220032903a805370020200241286a200341a8056a41086a290300370000200241306a2009290300370000200241386a20082903003700004120102d2207450d23200720032903a806370000200741186a200341a8066a41186a290300370000200741106a200341a8066a41106a290300370000200741086a200341a8066a41086a2903003700002002ad42808080808008842007ad428080808080048410042007102f2002102f41eba1ca00ad4280808080f00084100122022d000f210820022d000e210920022f000c210a20022d000b210b20022d000a210c20022f0008210d20022d0007210e20022d0006210f20022f0004211020022d0003211120022d0002211220022f000021132002102f41c8abc900ad4280808080d0008410012202290008211920022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211a2002102f4120102d2207450d232007200329038006370000200741186a20034180066a41186a290300370000200741106a20034180066a41106a290300370000200741086a20034180066a41086a2903003700002007ad428080808080048410032202290018211b20022d0017211c20022d0016211d20022f0014211e20022d0013211f20022d0012212020022f0010212120022d000f212220022d000e212320022f000c212420022d000b212520022d000a212620022f0008212720022d0007212820022d0006212920022f0004212a20022d0003212b20022d0002212c20022f0000212d2002102f2007102f41c000102d2202450d232002201b3700382002201c3a00372002201d3a00362002201e3b00342002201f3a0033200220203a0032200220213b0030200220223a002f200220233a002e200220243b002c200220253a002b200220263a002a200220273b0028200220283a0027200220293a00262002202a3b00242002202b3a00232002202c3a00222002202d3b002020022019370018200220143a0017200220153a0016200220163b0014200220173a0013200220183a00122002201a3b0010200220083a000f200220093a000e2002200a3b000c2002200b3a000b2002200c3a000a2002200d3b00082002200e3a00072002200f3a0006200220103b0004200220113a0003200220123a0002200220133b000002400240200641037122074103470d004101210742002119410121060c010b024002400240024020070e03000102000b410021060c020b410121060c010b410221060b200320063a00d8034101102d2207450d24200720063a00004100210642808080801021190b2002ad428080808080088420192007ad841004024020060d002007102f0b2002102f20034180066a10d002200341b0076a20034180066a108d02200341b0076a41086a290300211920032903b007211b200341e8036a41186a220720034180066a41186a290300370300200341e8036a41106a220620034180066a41106a290300370300200341e8036a41086a220820034180066a41086a29030037030020032003290380063703e80341eba1ca00ad4280808080f0008410012202290000212e2002290008212f2002102f41d2a0ca00ad4280808080a00184100122022900002130200229000821312002102f200320313703d008200320303703c8082003202f3703c0082003202e3703b8082003200341b8086a4120109501200341b0076a41186a20192004201b200554201920045420192004511b22021b2204370300200341d8076a4100360200200341ec076a2008290300370200200341f4076a2006290300370200200341fc076a20072903003702002003201b200520021b22053703c007200320043703b807200320053703b007200342083703d007200320032903e8033702e407200320032903003702dc07200341a8066a200341b0076a10b6030240200341d4076a280200450d0020032802d007102f0b200041043a00000c280b4101210720022d00014101470d0420022d000041ff01710d04200141106a2903002104200141086a290300210520032002411a6a2901003703c0052003200241026a2901003703a80520032002410a6a2901003703b0052003200241126a2901003703b805200341b0076a200341a8056a10b50341012107024020032d00b0074101470d00200341d8066a41176a2208200341c9076a290000370000200341d8066a41106a2209200341b0076a41126a290100370300200341e8036a41086a2202200341b0076a410a6a290100370300200341e8036a41106a22062009290300370300200341e8036a41176a22092008290000370000200320032901b2073703e803200320032d00b1073a00a806200341a8066a41186a2009290000370000200341b9066a2006290300370000200341b1066a2002290300370000200320032903e8033700a906200341b0076a200341a8066a108103024020032802dc074102460d00200341b8086a41086a2209200341dc076a220841086a290100370300200341b8086a41106a220a200841106a290100370300200341b8086a41186a220b200841186a290100370300200341b8086a41206a220c200841206a290100370300200341b8086a41286a220d200841286a280100360200200320082901003703b808200341b0076a41086a220e290300211b200341b0076a41186a290300213120032903b007211920032903c007213020032802d007210f20032802d807211020032802d4072108200220092903003703002006200a290300370300200341e8036a41186a2209200b290300370300200341e8036a41206a220a200c290300370300200341e8036a41286a220b200d280200360200200341fc066a2008360200200341d8066a41286a2010360200200341d8066a41186a2031370300200320032903b8083703e8032003200f3602f806200320303703e806200320193703d8062003201b3703e006200341ac076a200b280200360200200341a4076a200a2903003702002003419c076a200929030037020020034194076a20062903003702002003418c076a2002290300370200200320032903e80337028407200341b0076a200341a8056a108d02024020032903b007222e20197d2232202e56200e290300222f201b7d202e201954ad7d222e202f56202e202f511b0d0020032030200520322032200556202e200456202e2004511b22021b22057c222f3703e806200341f0066a20312004202e20021b22047c202f203054ad7c3703002003200520197c22193703d80620032004201b7c2019200554ad7c3703e006200341a8066a200341d8066a10b60320032802fc0621080b02402008450d0020032802f806102f0b200041043a0000410121080c2b0b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b0100410121080c2a0b200041086a4108360200200041046a41d6c7c800360200200041026a41013a000020004183103b0100410121080c290b200141106a2903002105200141086a29030021192002411a6a2901002104200241196a2d00002106200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012107024020022d00000d0020022d000141014721070b200320043703d008200320063a00cf08200320083a00ce08200320093b01cc082003200a3a00cb082003200b3a00ca082003200c3b01c8082003200d3a00c7082003200e3a00c6082003200f3b01c408200320103a00c308200320113a00c208200320123b01c008200320133a00bf08200320143a00be08200320153b01bc08200320163a00bb08200320173a00ba08200320183b01b80802400240024002400240024020070d00200341a8066a41186a200341b8086a41186a2207290300370300200341a8066a41106a200341b8086a41106a2206290300370300200341a8066a41086a200341b8086a41086a2208290300370300200320032903b8083703a806200341b0076a200341a8066a108103024020032802dc074102460d002008200341dc076a220241086a2901003703002006200241106a2901003703002007200241186a290100370300200341b8086a41206a220b200241206a290100370300200341b8086a41286a220c200241286a280100360200200320022901003703b808200341b0076a41086a290300212e200341b0076a41186a290300210420032903b007212f20032903c007211b20032802d007210a20032802d807210920032802d4072102200341e8036a41086a220d2008290300370300200341e8036a41106a22082006290300370300200341e8036a41186a22062007290300370300200341e8036a41206a2207200b290300370300200341e8036a41286a220b200c280200360200200341fc066a2002360200200341d8066a41286a2009360200200341d8066a41186a2004370300200320032903b8083703e8032003200a3602f8062003201b3703e8062003202f3703d8062003202e3703e006200341ac076a200b280200360200200341a4076a20072903003702002003419c076a200629030037020020034194076a20082903003702002003418c076a200d290300370200200320032903e803370284072009411f4b0d02201b2019201b201954200420055420042005511b22071b22192004200520071b220584500d06200341d8066a41186a4200200420057d201b201954ad7d222e201b20197d222f428080e983b1de16544100202e501b22071b37030020034200202f20071b3703e80641eba1ca00ad4280808080f0008410012206290000212e2006290008212f2006102f41d2a0ca00ad4280808080a00184100122062900002130200629000821312006102f200320313703c005200320303703b8052003202f3703b0052003202e3703a805200341186a200341a8056a4120109501200328021c21062003280218210820092002470d0520032802fc062002460d0320032802f806210a0c040b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c2c0b200041023a00000c2b0b20004183103b0100200041086a410c360200200041046a41f4c6c800360200200041026a41083a00002002450d2a200a102f0c2a0b200241016a22092002490d252002410174220a2009200a20094b1bad42187e222e422088a70d25202ea722094100480d250240024020020d002009102d210a0c010b20032802f806200241186c20091031210a0b200a450d242003200a3602f8062003200941186e3602fc060b20032802800721090b200a200941186c6a22022004200520071b3703082002201b201920071b3703002002200641a0056a41a00520081b360210200320032802800741016a36028007200341a8066a200341d8066a10b60320032802fc0621020b02402002450d0020032802f806102f0b200041043a00000c260b024002400240024020022d00000d0020022d00014101470d00200241196a2d00002107200241186a2d00002106200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703c006200320073a00bf06200320063a00be06200320083b01bc06200320093a00bb062003200a3a00ba062003200b3b01b8062003200c3a00b7062003200d3a00b6062003200e3b01b4062003200f3a00b306200320103a00b206200320113b01b006200320123a00af06200320133a00ae06200320143b01ac06200320153a00ab06200320163a00aa06200320173b01a806200341b0076a200341a8066a108103024020032802dc074102460d00200341b8086a41086a2207200341dc076a220241086a290100370300200341b8086a41106a2206200241106a290100370300200341b8086a41186a2209200241186a290100370300200341b8086a41206a2208200241206a290100370300200341b8086a41286a220c200241286a280100360200200320022901003703b808200341b0076a41086a2903002104200341b0076a41186a290300212e20032903b007210520032903c007212f20032802d007210b20032802d807210a20032802d407210d200341e8036a41086a22022007290300370300200341e8036a41106a220e2006290300370300200341e8036a41186a220f2009290300370300200341e8036a41206a22102008290300370300200341e8036a41286a2208200c280200360200200341fc066a200d360200200341d8066a41286a200a360200200341d8066a41186a202e370300200320032903b8083703e8032003200b3602f8062003202f3703e806200320053703d806200320043703e006200341ac076a2008280200360200200341a4076a221120102903003702002003419c076a2210200f29030037020020034194076a220f200e2903003702002003418c076a220c2002290300370200200320032903e8033702840741eba1ca00ad4280808080f000841001220229000021192002290008211b2002102f41d2a0ca00ad4280808080a00184100122022900002130200229000821312002102f200320313703c005200320303703b8052003201b3703b005200320193703a805200341206a200341a8056a412010950120032802204101470d04200328022421082007200f29020037030020062010290200370300200920112902003703002003200329028c073703b80820034188076a280200210f20032802840721100240200a450d00200b200a41186c6a2109200a41186c41686a2107200b21020340200241086a290300211b200229030021192008200241106a2802002206490d0442002004201b7d2005201954ad7d221b200520197d2219200556201b200456201b2004511b22061b21044200201920061b2105200741686a2107200241186a22022009470d000b0b4108210e4100210a0240200d450d00200b102f0b410021060c030b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c290b200041023a00000c280b4118102d220e450d22200e2019370300200e2006360210200e201b3703080240024020070d004101210a410121060c010b200241186a2111200a41186c200b6a41686a21134101210a4101210603402011210202400340200241086a290300211b200229030021192008200241106a2802002207490d0142002004201b7d2005201954ad7d221b200520197d2219200556201b200456201b2004511b22071b21044200201920071b2105200241186a22022009470d000c030b0b02402006200a470d00200a41016a2206200a490d26200a41017422112006201120064b1bad42187e2230422088a70d262030a722064100480d2602400240200a0d002006102d210e0c010b200e200a41186c20061031210e0b200e450d25200641186e21060b200241186a2111200e200a41186c6a2212201b3703082012201937030020122007360210200a41016a210a20132002470d000b0b200d450d00200b102f0b200c20032903b808370200200341d8066a41186a202e370300200c41086a200341b8086a41086a290300370200200c41106a200341b8086a41106a290300370200200c41186a200341b8086a41186a2903003702002003202f3703e806200320053703d8062003200f3602880720032010360284072003200a36028007200320063602fc062003200e3602f806200320043703e0060b02400240200a0d00202f202e84500d010b200341a8066a200341d8066a10b6030c250b200341c8076a200341a4076a290200370300200341c0076a2003419c076a290200370300200341b0076a41086a20034194076a2902003703002003200329028c073703b007200341e8036a200341b0076a108306200320032900e9033703b8082003200341e8036a41086a2800003600bf08024020032d00e80322024104470d00200342f3e885db96cddbb3203703800620034180066a200341b0076a10b1010c250b200020023a0000200020032903b808370001200041086a20032800bf0836000020032802fc06450d2520032802f806102f0c250b200141046a280200211a2002411a6a2901002104200241196a2d00002106200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012107024020022d00000d0020022d000141014721070b200320043703c005200320063a00bf05200320083a00be05200320093b01bc052003200a3a00bb052003200b3a00ba052003200c3b01b8052003200d3a00b7052003200e3a00b6052003200f3b01b405200320103a00b305200320113a00b205200320123b01b005200320133a00af05200320143a00ae05200320153b01ac05200320163a00ab05200320173a00aa05200320183b01a80502400240024020070d00200341d8056a41186a200341a8056a41186a290300370300200341d8056a41106a200341a8056a41106a290300370300200341d8056a41086a200341a8056a41086a290300370300200320032903a8053703d805200341b0076a200341d8056a108103024020032802dc074102460d00200341b8086a41086a200341dc076a220241086a2901002204370300200341b8086a41106a200241106a2901002205370300200341b8086a41186a200241186a2901002219370300200341b8086a41206a200241206a290100221b370300200341e8036a41106a22072005370300200341e8036a41186a22062019370300200341e8036a41206a2208201b370300200341e8036a41286a2209200241286a280100360200200341e8036a41086a220a20043703002003200229010022043703b808200341b0076a41086a2903002105200341b0076a41186a290300211920032903b007211b20032903c007212e20032903d007212f200341d8066a41286a20032802d807360200200341d8066a41186a201937030020034194076a20072903003702002003419c076a2006290300370200200341a4076a2008290300370200200341ac076a2009280200360200200320043703e8032003202f3703f8062003202e3703e806200320053703e0062003201b3703d806200320032903e803370284072003200a29030037028c072003418c076a220610e90541eba1ca00ad4280808080f00084100122022d000f210820022d000e210920022f000c210a20022d000b210b20022d000a210c20022f0008210d20022d0007210e20022d0006210f20022f0004211020022d0003211120022d0002211220022f000021132002102f41a5c6c800ad4280808080a0018410012202290008210420022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211c2002102f4120102d2207450d2320072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a2900003700002007ad428080808080048410032202290018210520022d0017211d20022d0016211e20022f0014211f20022d0013212020022d0012212120022f0010212220022d000f212320022d000e212420022f000c212520022d000b212620022d000a212720022f0008212820022d0007212920022d0006212a20022f0004212b20022d0003212c20022d0002212d20022f000021332002102f2007102f41c000102d2202450d23200220053700382002201d3a00372002201e3a00362002201f3b0034200220203a0033200220213a0032200220223b0030200220233a002f200220243a002e200220253b002c200220263a002b200220273a002a200220283b0028200220293a00272002202a3a00262002202b3b00242002202c3a00232002202d3a0022200220333b002020022004370018200220143a0017200220153a0016200220163b0014200220173a0013200220183a00122002201c3b0010200220083a000f200220093a000e2002200a3b000c2002200b3a000b2002200c3a000a2002200d3b00082002200e3a00072002200f3a0006200220103b0004200220113a0003200220123a0002200220133b0000200341e8036a200241c000109b0420032d00ec0322074102470d032003200636028c0941eba1ca00ad4280808080f00084100122072900002104200341e0046a41086a2208200741086a290000370300200320043703e0042007102f4195c6c800ad428080808080028410012207290000210420034180066a41086a2209200741086a29000037030020032004370380062007102f200341b8086a41086a2008290300370300200341d0086a2009290300370300200320032903e0043703b80820032003290380063703c808200341b0076a200341b8086a108801200341a8066a20032802b007220720032802b80710ad02024020032802b407450d002007102f0b200341c8086a210720032d00a8060d0241eba1ca00ad4280808080f00084100122082900002104200341e0046a41086a2209200841086a290000370300200320043703e0042008102f4195c6c800ad428080808080028410012208290000210420034180066a41086a220a200841086a29000037030020032004370380062008102f200341b8086a41086a20092903003703002007200329038006370000200741086a200a290300370000200320032903e0043703b808200341b0076a200341b8086a10880120032802b007210820033502b80721044120102d2207450d2320072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a29000037000020044220862008ad842007ad428080808080048410042007102f20032802b407450d252008102f0c250b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c270b200041023a00000c260b200341c0056a200341c1066a290000370300200341b8056a200341b9066a290000370300200341a8056a41086a200341b1066a290000370300200320032900a9063703a805200341c0046a200341a8056a109a04200341b0076a20032802c004220620032802c8042208109b04024020032d00b4074102470d002003410036028805200342013703800520034180066a41146a41293602002003418c066a410b360200200341073602dc03200341eba1ca003602d8032003410b360284062003410a3602e404200341a5c6c8003602e0042003200341c0046a360290062003200341e0046a360288062003200341d8036a36028006200320034180056a36028009200341b8086a41146a4103360200200342033702bc08200341cc90c4003602b808200320034180066a3602c80820034180096a41d8dbc100200341b8086a103c1a2003350288054220862003350280058410080240200328028405450d00200328028005102f0b200328028c09210641eba1ca00ad4280808080f00084100122082900002104200341e0046a41086a2209200841086a290000370300200320043703e0042008102f4195c6c800ad428080808080028410012208290000210420034180066a41086a220a200841086a29000037030020032004370380062008102f200341b8086a41086a20092903003703002007200329038006370000200741086a200a290300370000200320032903e0043703b80820034180066a200341b8086a108801200328028006210820033502880621044120102d2207450d2120072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a29000037000020044220862008ad842007ad428080808080048410042007102f0240200328028406450d002008102f0b20032802c404450d2320032802c004102f0c230b20032802b0072109200341b8086a200341b0076a41047241c20010e8061a20034180056a41086a200341da086a410020032d00d9084101461b360200200320093602800520032003418c096a360284052003410036028806200342013703800620034180056a20034180066a10950220034180056a41047220034180066a10cd0220032802840621092008ad4220862006ad842003350288064220862003280280062206ad84100402402009450d002006102f0b024020032802c404450d0020032802c004102f0b200328028c09210641eba1ca00ad4280808080f00084100122082900002104200341e0046a41086a2209200841086a290000370300200320043703e0042008102f4195c6c800ad428080808080028410012208290000210420034180066a41086a220a200841086a29000037030020032004370380062008102f200341b8086a41086a20092903003703002007200329038006370000200741086a200a290300370000200320032903e0043703b808200341b0076a200341b8086a10880120032802b007210820033502b80721044120102d2207450d2020072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a29000037000020044220862008ad842007ad428080808080048410042007102f024020032802b407450d002008102f0b20034180066a41086a200341a8056a41086a29030037030020034180066a41106a200341a8056a41106a29030037030020034180066a41186a200341a8056a41186a290300370300200320032903a8053703800641012106410021070c230b200341b8086a41186a20034185046a290000370300200341b8086a41106a200341fd036a290000370300200341b8086a41086a200341f5036a29000037030020034180066a41086a20034196046a29010037030020034180066a41106a2003419e046a29010037030020034180066a41186a200341a6046a290100370300200320032900ed033703b80820032003418e046a290100370380062003418d046a2d000021060c220b2001410c6a280200211d200141086a2802002109200141046a28020021062002411a6a2901002104200241196a2d00002108200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d0000211a200241026a2f0100211c41012107024020022d00000d0020022d000141014721070b200320043703d008200320083a00cf082003200a3a00ce082003200b3b01cc082003200c3a00cb082003200d3a00ca082003200e3b01c8082003200f3a00c708200320103a00c608200320113b01c408200320123a00c308200320133a00c208200320143b01c008200320153a00bf08200320163a00be08200320173b01bc08200320183a00bb082003201a3a00ba082003201c3b01b808024020070d0020034180056a41186a200341b8086a41186a220729030037030020034180056a41106a200341b8086a41106a220829030037030020034180056a41086a200341b8086a41086a220a290300370300200320032903b80837038005200341b0076a20034180056a10810320032802dc074102460d18200a200341dc076a220241086a2901003703002008200241106a2901003703002007200241186a290100370300200341b8086a41206a220c200241206a290100370300200341b8086a41286a220d200241286a280100360200200320022901003703b808200341b0076a41086a2903002104200341b0076a41186a290300210520032903b007211920032903c007211b20032802d007210b20032802d807210e20032802d4072102200341d8066a41086a220f200a290300370300200341d8066a41106a220a2008290300370300200341d8066a41186a22082007290300370300200341d8066a41206a2207200c290300370300200341d8066a41286a220c200d280200360200200341e8036a41246a2002360200200341e8036a41286a200e360200200341e8036a41186a2005370300200320032903b8083703d8062003200b360288042003201b3703f803200320193703e803200320043703f003200341bc046a200c280200360200200341b4046a2007290300370200200341ac046a2008290300370200200341a4046a200a2903003702002003200f29030037029c04200320032903d80637029404201d450d19201d41246c2208450d1b200341d8066a41086a2202200641096a290000370300200341d8066a41106a2207200641116a290000370300200341d8066a41186a220a200641196a290000370300200341f7066a220b200641206a280000360000200320062900013703d80620062d0000220c4102460d1b200341b0076a41096a2002290300370000200341b0076a41116a2007290300370000200341b0076a41196a200a290300370000200341b0076a41206a200b2800003600002003200c3a00b007200320032903d8063700b107200341b8086a200341b0076a10bb01200341a8066a41086a200341b8086a41096a290000370300200341a8066a41106a200341b8086a41116a290000370300200341a8066a41186a200341b8086a41196a290000370300200320032900b9083703a80641012107024020032d00b8084101470d0020034180066a41086a200341a8056a41086a29030037030020034180066a41106a200341a8056a41106a29030037030020034180066a41186a200341a8056a41186a290300370300200320032903a805370380060c1d0b200341d8056a41086a2207200341a8066a41086a290300370300200341d8056a41106a220a200341a8066a41106a290300370300200341d8056a41186a220b200341a8066a41186a290300370300200320032903a806220437038006200320043703d8054120102d2202450d1f200220032903d805370000200241186a200b290300370000200241106a200a290300370000200241086a2007290300370000024002400240200620086a200641246a460d00200341d8066a41086a22072006412d6a290000370300200341d8066a41106a2208200641356a290000370300200341d8066a41186a220a2006413d6a290000370300200341f7066a220b200641c4006a280000360000200320062900253703d80620062d0024220c4102460d00200341b0076a41096a2007290300370000200341b0076a41116a2008290300370000200341b0076a41196a200a290300370000200341b0076a41206a200b2800003600002003200c3a00b007200320032903d8063700b107200341b8086a200341b0076a10bb01200341a8066a41086a200341b8086a41096a290000370300200341a8066a41106a200341b8086a41116a290000370300200341a8066a41186a200341b8086a41196a290000370300200320032900b9083703a80620032d00b8084101470d0220034180066a41086a200341a8056a41086a29030037030020034180066a41106a200341a8056a41106a29030037030020034180066a41186a200341a8056a41186a290300370300200320032903a80537038006410121070c010b410021070b410121084101210a0c1e0b200641c8006a210b20034180066a41086a221e200341a8066a41086a22182903002204370300200341d8056a41186a2211200341a8066a41186a221a290300370300200341d8056a41106a2212200341a8066a41106a221c290300370300200341d8056a41086a22132004370300200320032903a806220437038006200320043703d805201d41246c41b87f6a2110200341b8086a410172210d200341b0076a410172210c200341d8066a411f6a21174102210f4120210e410221084101210a0340200341b0076a41186a22142011290300370300200341b0076a41106a22152012290300370300200341b0076a41086a22162013290300370300200320032903d8053703b00702402008417f6a200a470d00200f2008200f20084b1b220741ffffff3f712007470d22200741057422074100480d222002200e200710312202450d212007410576210a0b2002200e6a220720032903b007370000200741186a2014290300370000200741106a2015290300370000200741086a20162903003700004100210720084110460d1e2010450d1e200341d8066a41086a2214200b41096a290000370300200341d8066a41106a2215200b41116a290000370300200341d8066a41186a2216200b41196a2900003703002017200b41206a2800003600002003200b2900013703d806200b2d0000221d4102460d1e200c20032903d806370000200c41086a2014290300370000200c41106a2015290300370000200c41186a2016290300370000200c411f6a20172800003600002003201d3a00b007200341b8086a200341b0076a10bb012018200d41086a290000370300201c200d41106a290000370300201a200d41186a2900003703002003200d2900003703a806024020032d00b8084101470d0020034180066a41086a200341a8056a41086a29030037030020034180066a41106a200341a8056a41106a29030037030020034180066a41186a200341a8056a41186a290300370300200320032903a80537038006410121070c1f0b200b41246a210b201e201829030022043703002011201a2903003703002012201c29030037030020132004370300200320032903a806220437038006200320043703d805200f41026a210f200e41206a210e200841016a21082010415c6a21100c000b0b200041023a00000c190b200041023a0000410121080c240b200041023a00000c210b200341d8066a41186a200141196a290000370300200341e8066a200141116a290000370300200341d8066a41086a200141096a290000370300200320012900013703d806200341b0076a200341d8066a108d020240427f20032903b007220420032903c0077c220520052004542202200341b0076a41086a22072903002204200341b0076a41186a2903007c2002ad7c220520045420052004511b22021b427f200520021b844200520d00200341b0076a200341d8066a108306200320032900b1073703b808200320072800003600bf08024020032d00b00722024104470d00200342f3e885db96cddbb3203703e803200341e8036a200341d8066a10b101200041043a00000c220b200020023a0000200020032903b808370001200041086a20032800bf083600000c210b20004183103b0100200041086a410c360200200041046a41dbc6c800360200200041026a410a3a00000c200b024020022d000120022d0000410047720d00200141046a280200210841eba1ca00ad4280808080f00084222e100122022900002104200229000821052002102f41d2a0ca00ad4280808080a001841001220229000021192002290008211b2002102f2003201b3701c005200320193701b805200320053701b005200320043701a805200341d0036a200341a8056a412010950141012107024020032802d0034101470d0020032802d4032106202e100122022900002104200229000821052002102f41a3a0ca00ad4280808080c00184221910012202290000211b2002290008212e2002102f2003202e3701c0052003201b3701b805200320053701b005200320043701a805200341c8036a200341a8056a412010950102404100200620032802cc0341d40020032802c8031b6b2202200220064b1b22024100200620086b2209200920064b1b22064f0d000340200210ee052006200241016a2202470d000b0b41eba1ca00ad4280808080f00084100122022900002104200229000821052002102f20191001220229000021192002290008211b2002102f2003201b3701c005200320193701b805200320053701b005200320043701a805200320083602b007200341a8056aad4280808080800484200341b0076aad4280808080c0008410040b200041043a0000410121080c220b200041023a00000c1f0b41012107024020022d00014101470d0020022d000041ff01710d00200141106a290300211b200141086a290300212e20032002411a6a2901003703c0062003200241026a2901003703a80620032002410a6a2901003703b0062003200241126a2901003703b806200341b0076a200341a8066a108103024020032802dc074102460d00200341b8086a41086a2207200341dc076a220241086a290100370300200341b8086a41106a2206200241106a290100370300200341b8086a41186a2208200241186a290100370300200341b8086a41206a220a200241206a290100370300200341b8086a41286a220b200241286a280100360200200320022901003703b808200341b0076a41186a290300212f200341b0076a41086a290300213420032903c007213020032903b007213520032802d807210220032802d407210c20032802d0072109200341e8036a41086a220d2007290300370300200341e8036a41106a22072006290300370300200341e8036a41186a22062008290300370300200341e8036a41206a2208200a290300370300200341e8036a41286a220a200b280200360200200320032903b8083703e80302402002450d00200341d8066a41286a200a280200360200200341d8066a41206a2008290300370300200341d8066a41186a2006290300370300200341d8066a41106a2007290300370300200341d8066a41086a200d290300370300200320032903e8033703d80642002131420021320240034002402002417f6a220720024d0d00410021070c020b024020072002490d00200221070c020b02402009200741186c6a22060d00200221070c020b02402006290300220420317c2205202e58200641086a290300223620327c2005200454ad7c2219201b582019201b5122081b0d0020062004202e20317d22057d37030020062036201b20327d202e203154ad7d22197d2004200554ad7d3703082019202f7c200520307c2230200554ad7c212f200221070c020b2036202f7c200420307c2230200454ad7c212f2007210220052131201921322005202e542019201b5420081b0d000b0b200341b0076a41186a202f370300200341b0076a41286a2007360200200341d4076a2202200c360200200341e4076a200341e0066a290300370200200341ec076a200341e8066a290300370200200341f4076a200341d8066a41186a290300370200200341fc076a200341f8066a29030037020020034184086a200341d8066a41286a280200360200200320303703c007200320353703b007200320093602d007200320032903d8063702dc07200320343703b807200341a8066a200341b0076a10b60302402002280200450d0020032802d007102f0b200041043a00000c210b20004183103b0100200041086a410d360200200041046a41e7c6c800360200200041026a41093a0000200c450d202009102f0c200b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c1f0b200041023a0000410121080c200b02400240024002400240024020022d00000d0020022d00014101470d002002411a6a2901002104200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d0000211a200241046a2d0000211c200241026a2f0100211d200341b0036a200141046a28020022061084060240024020032802b003450d00200341c0036a290300212f20032903b803212e41eba1ca00ad4280808080f00084100122022900002105200341d8036a41086a200241086a290000370300200320053703d8032002102f41a7cac800ad4280808080e0008410012202290000210520034180056a41086a200241086a29000037030020032005370380052002102f4120102d2202450d20200220043700182002200a3a00172002200b3a00162002200c3b00142002200d3a00132002200e3a00122002200f3b0010200220103a000f200220113a000e200220123b000c200220133a000b200220143a000a200220153b0008200220163a0007200220173a0006200220183b00042002201a3a00032002201c3a00022002201d3b00002002ad4280808080800484100322072900002105200741086a2900002119200741106a290000211b200341a8056a41186a2208200741186a290000370300200341a8056a41106a2209201b370300200341a8056a41086a2019370300200320053703a8052007102f2002102f41c000102d2202450d20200220032903d803370000200241086a200341d8036a41086a2903003700002002200329038005370010200241186a20034180056a41086a2207290300370000200220032903a805370020200241286a200341a8056a41086a221e290300370000200241306a2009290300370000200241386a2008290300370000200341b0076a200210a005201e200341b0076a41086a2903003703002009200341b0076a41106a2903003703002008200341b0076a41186a290300370300200341a8056a41206a2209200341b0076a41206a290300370300200341a8056a41286a221f200341b0076a41286a2802003602002007200341b0076a41386a29030037030020034180056a41106a200341b0076a41c0006a29030037030020034180056a41186a200341b0076a41c8006a29030037030020034180056a41206a2220200341b0076a41d0006a290300370300200320032903b0073703a805200320032903e00737038005024020032802dc0722084102460d00200341a8066a41286a2221201f280200360200200341a8066a41206a221f2009290300370300200341a8066a41186a2209200341a8056a41186a290300370300200341a8066a41106a2222200341a8056a41106a290300370300200341a8066a41086a2223201e29030037030020034180066a41086a221e200729030037030020034180066a41106a220720034180056a41106a29030037030020034180066a41186a222420034180056a41186a29030037030020034180066a41206a22252020290300370300200320032903a8053703a8062003200329038005370380062002102f200341e8036a410e6a2023290300370100200341e8036a41166a2022290300370100200341e8036a411e6a2009290300370100200341e8036a41266a201f290300370100200341e8036a412e6a2021280200360100200320032903a8063701ee03200341b8086a41086a200341e8036a41086a290100370300200341b8086a41106a200341e8036a41106a290100370300200341b8086a41186a200341e8036a41186a290100370300200341b8086a41206a200341e8036a41206a290100370300200341b8086a41286a200341e8036a41286a290100370300200341b8086a41306a200341e8036a41306a2f01003b0100200320032901e8033703b808200341d8056a41206a22022025290300370300200341d8056a41186a22092024290300370300200341d8056a41106a221f2007290300370300200341d8056a41086a2207201e29030037030020032003290380063703d805200341d8066a41286a200341b8086a412e6a280100360200200341d8066a41206a200341b8086a41266a290100370300200341d8066a41186a200341b8086a411e6a290100370300200341d8066a41106a200341b8086a41166a290100370300200341d8066a41086a200341b8086a410e6a290100370300200320032901be083703d8062003200836028407200341d8066a41d0006a2002290300370300200341d8066a41c8006a200929030037030020034198076a201f290300370300200341d8066a41386a2007290300370300200341d8066a41306a220220032903d805370300200620022802004d410220081b22024102460d022002410171450d0220004183103b0100200041086a4112360200200041046a41c9c6c800360200200041026a410b3a0000200341fc066a280200450d2620032802f806102f0c260b2002102f200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c250b20004183103b0100200041086a4112360200200041046a41c9c6c800360200200041026a410b3a00000c240b2003200636028807200341013602840741eba1ca00ad4280808080f00084100122022d000f210820022d000e210920022f000c211e20022d000b211f20022d000a212020022f0008212120022d0007212220022d0006212320022f0004212420022d0003212520022d0002212620022f000021272002102f41a7cac800ad4280808080e0008410012202290008210520022d0007212820022d0006212920022f0004212a20022d0003212b20022d0002212c20022f0000212d2002102f4120102d2202450d1e200220043700182002200a3a00172002200b3a00162002200c3b00142002200d3a00132002200e3a00122002200f3b0010200220103a000f200220113a000e200220123b000c200220133a000b200220143a000a200220153b0008200220163a0007200220173a0006200220183b00042002201a3a00032002201c3a00022002201d3b00002002ad428080808080048410032207290018211920072d0017213320072d0016213720072f0014213820072d0013213920072d0012213a20072f0010213b20072d000f213c20072d000e213d20072f000c213e20072d000b213f20072d000a214020072f0008214120072d0007214220072d0006214320072f0004214420072d0003214520072d0002214620072f000021472007102f2002102f41c000102d2202450d1e20022019370038200220333a0037200220373a0036200220383b0034200220393a00332002203a3a00322002203b3b00302002203c3a002f2002203d3a002e2002203e3b002c2002203f3a002b200220403a002a200220413b0028200220423a0027200220433a0026200220443b0024200220453a0023200220463a0022200220473b002020022005370018200220283a0017200220293a00162002202a3b00142002202b3a00132002202c3a00122002202d3b0010200220083a000f200220093a000e2002201e3b000c2002201f3a000b200220203a000a200220213b0008200220223a0007200220233a0006200220243b0004200220253a0003200220263a0002200220273b0000200341c0003602b407200320023602b007200341d8066a200341b0076a10f3052002102f200341a8066a2006108506200341b0076a20062003418c076a220910f205200341a8036a20032802b007220820032802b80710c10320032802a803210220032802ac032107024020032802b407450d002008102f0b200341e8036a2006200910f005200341b0076a20032802e803220620032802f00310bc030240024020032802d00722230d004200211b41082123410021244200210542002130420021190c010b200341b8076a2903002105200341c8076a290300211920032903b007211b20032903c007213020032802d40721240b024020032802ec03450d002006102f0b20034198036a201b4201201b42015620054200522005501b22061b221b2005420020061b2205428094ebdc03420010ee0620034188036a201b200520032903980322314201203142015620034198036a41086a29030022314200522031501b22061b22322031420020061b223610ee06200329038803223142808080801054410020034188036a41086a290300501b450d01200341f8026a201b2030201b203054200520195420052019511b22061b2005201920061b2032203610ee0620032903f8022205428080808010544100200341f8026a41086a290300501b450d022031a7450d032007410020021b2122200542ffffffff0f83428094ebdc037e203142ffffffff0f83802105200341a8066a4104722102200341a8066a41086a280200211f024002400340410021214100210602402002280200221e2f01062220450d0020204105742102201e41086a2107417f21060340024020020d00202021060c020b200641016a210620092007412010ea062208450d03200241606a2102200741206a21072008417f4a0d000b0b201f450d02201f417f6a211f201e20064102746a4194036a21020c000b0b201e20064102746a41e8026a28020021210b200341d0026a202e202f428094ebdc03420010ee06200341c0026a20032903d0022219200341d0026a41086a290300221b4280ec94a37c427f10ed0620032802a80621022003418094ebdc033602b4072003200542ffffffff0f834100418094ebdc0320226b22072007418094ebdc034b1bad7e428094ebdc0380a722073602b007200341b0076a2007418094ebdc034b4102746a28020021072003418094ebdc033602b4072003417f202220076a220720072022491b22073602b007200341b0076a2007418094ebdc034b4102746a35020021052003418094ebdc033602b4072003200520024101200241014b1b2202202120022021491b2002418094ebdc036e22074101200741014b1b22076ead428094ebdc037e200220076ead8042ffffffff0f837e428094ebdc0380a722023602b007200341b0026a2019201b200341b0076a2002418094ebdc034b4102746a3502002205420010ed06200341e0026a200920032903b00222192005202e20032903c0027c7e22052005428094ebdc038022054280ec94a37c7e7c4280cab5ee01562005a76aad7c2205200341b0026a41086a2903002005201954ad7c108606200341e0026a41106a290300210520032903e8022119024020032903e002221ba74101470d00200320043702d0082003200a3a00cf082003200b3a00ce082003200c3b01cc082003200d3a00cb082003200e3a00ca082003200f3b01c808200320103a00c708200320113a00c608200320123b01c408200320133a00c308200320143a00c208200320153b01c008200320163a00bf08200320173a00be08200320183b01bc082003201a3a00bb082003201c3a00ba082003201d3b01b808200341e8076a2005370300200341e0076a2019370300200341d1076a2004370000200341b0076a41206a200a3a0000200341cf076a200b3a0000200341cd076a200c3b0000200341cc076a200d3a0000200341cb076a200e3a0000200341c9076a200f3b0000200341b0076a41186a220820103a0000200341c7076a20113a0000200341c5076a20123b0000200341c4076a20133a0000200341c3076a20143a0000200341c1076a20153b0000200341b0076a41106a220620163a0000200341bf076a20173a0000200341bd076a20183b0000200341bc076a201a3a0000200341bb076a201c3a0000200341b9076a201d3b0000200341b0076a41086a220741003a0000200341043a00b00741c8e1ca004100200341b0076a108c01200842003703002006420037030020074200370300200342003703b00741e7a2ca00ad4280808080800184220410012209290000211b200341b8086a41086a2202200941086a2900003703002003201b3703b8082009102f20072002290300370300200320032903b8083703b00741ecb5c600ad4280808080d00184221b10012209290000212e2002200941086a2900003703002003202e3703b8082009102f200620032903b808222e370300200341e8036a41086a220a2007290300370300200341e8036a41106a220b202e370300200341e8036a41186a220c2002290300370300200320032903b0073703e80320034180026a200341e8036a4120109c0120034180026a41106a290300212e200329038802212f2003280280022109200842003703002006420037030020074200370300200342003703b00720041001220829000021042002200841086a290000370300200320043703b8082008102f20072002290300370300200320032903b8083703b007201b1001220829000021042002200841086a290000370300200320043703b8082008102f200620032903b8082204370300200a2007290300370300200b2004370300200c2002290300370300200320032903b0073703e8032003427f202e420020091b220420057c202f420020091b220520197c22192005542202ad7c22052002200520045420052004511b22021b3703b8072003427f201920021b3703b007200341b0076a2102200341e8036a21070c050b201b4201520d05200341b0076a41186a22094200370300200341b0076a41106a22064200370300200341b0076a41086a22074200370300200342003703b00741e7a2ca00ad4280808080800184220410012208290000211b200341b8086a41086a2202200841086a2900003703002003201b3703b8082008102f20072002290300370300200320032903b8083703b00741ecb5c600ad4280808080d00184221b10012208290000212e2002200841086a2900003703002003202e3703b8082008102f200620032903b808222e370300200341e8036a41086a220a2007290300370300200341e8036a41106a220b202e370300200341e8036a41186a220c2002290300370300200320032903b0073703e80320034198026a200341e8036a4120109c0120034198026a41106a290300212e20032903a002212f2003280298022108200942003703002006420037030020074200370300200342003703b00720041001220929000021042002200941086a290000370300200320043703b8082009102f20072002290300370300200320032903b8083703b007201b1001220929000021042002200941086a290000370300200320043703b8082009102f200620032903b8082204370300200a2007290300370300200b2004370300200c2002290300370300200320032903b0073703e8032003427f202e420020081b220420057c202f420020081b220520197c22192005542202ad7c22052002200520045420052004511b22021b3703b8072003427f201920021b3703b007200341b0076a2102200341e8036a21070c040b200041023a00000c220b200341113602b40720034198b4c0003602b0074186b3c00041e000200341b0076a419cb2c00041e8b3c000103e000b200341113602b40720034198b4c0003602b0074186b3c00041e000200341b0076a419cb2c00041f8b3c000103e000b4180b2c00041194188b4c0001039000b2007ad42808080808004842002ad428080808080028410040b200041043a000002402024450d002023102f0b20032802ac0620032802b006200341b4066a28020010a302200341fc066a280200450d1d20032802f806102f0c1d0b2001410c6a2802002106200141086a2802002108024002400240024002400240024020022d00000d0020022d00014101470d0002400240200141106a280200220941104b0d002002411a6a2901002119200241196a2d00002113200241186a2d00002114200241166a2f01002115200241156a2d00002116200241146a2d00002117200241126a2f01002118200241116a2d0000211a200241106a2d0000211c2002410e6a2f0100211d2002410d6a2d0000211e2002410c6a2d0000211f2002410a6a2f01002120200241096a2d00002121200241086a2d00002122200241066a2f01002123200241056a2d00002124200241046a2d00002125200241026a2f01002126200341e8016a200141046a280200220d10840620032802e8010d0120004183103b0100200041086a4112360200200041046a41c9c6c800360200200041026a410b3a00000c070b20004183103b0100200041086a411a360200200041046a41afc6c800360200200041026a410c3a00000c060b200341e8016a41106a290300212f20032903f001212e41eba1ca00ad4280808080f00084100122022900002104200341d8036a41086a200241086a290000370300200320043703d8032002102f41a7cac800ad4280808080e0008410012202290000210420034180056a41086a200241086a29000037030020032004370380052002102f4120102d2202450d1e20022019370018200220133a0017200220143a0016200220153b0014200220163a0013200220173a0012200220183b00102002201a3a000f2002201c3a000e2002201d3b000c2002201e3a000b2002201f3a000a200220203b0008200220213a0007200220223a0006200220233b0004200220243a0003200220253a0002200220263b00002002ad4280808080800484100322072900002104200741086a2900002105200741106a290000211b200341a8056a41186a220a200741186a290000370300200341a8056a41106a220b201b370300200341a8056a41086a2005370300200320043703a8052007102f2002102f41c000102d2202450d1e200220032903d803370000200241086a200341d8036a41086a2903003700002002200329038005370010200241186a20034180056a41086a2207290300370000200220032903a805370020200241286a200341a8056a41086a220c290300370000200241306a200b290300370000200241386a200a290300370000200341b0076a200210a005200c200341b0076a41086a290300370300200b200341b0076a41106a290300370300200a200341b0076a41186a290300370300200341a8056a41206a220b200341b0076a41206a290300370300200341a8056a41286a220e200341b0076a41286a2802003602002007200341b0076a41386a29030037030020034180056a41106a200341b0076a41c0006a29030037030020034180056a41186a200341b0076a41c8006a29030037030020034180056a41206a220f200341b0076a41d0006a290300370300200320032903b0073703a805200320032903e007370380050240024020032802dc07220a4102460d00200341a8066a41286a2210200e280200360200200341a8066a41206a220e200b290300370300200341a8066a41186a220b200341a8056a41186a290300370300200341a8066a41106a2211200341a8056a41106a290300370300200341a8066a41086a2212200c29030037030020034180066a41086a220c200729030037030020034180066a41106a220720034180056a41106a29030037030020034180066a41186a222720034180056a41186a29030037030020034180066a41206a2228200f290300370300200320032903a8053703a8062003200329038005370380062002102f200341e8036a410e6a2012290300370100200341e8036a41166a2011290300370100200341e8036a411e6a200b290300370100200341e8036a41266a200e290300370100200341e8036a412e6a2010280200360100200320032903a8063701ee03200341b8086a41086a200341e8036a41086a290100370300200341b8086a41106a200341e8036a41106a290100370300200341b8086a41186a200341e8036a41186a290100370300200341b8086a41206a200341e8036a41206a290100370300200341b8086a41286a200341e8036a41286a290100370300200341b8086a41306a200341e8036a41306a2f01003b0100200320032901e8033703b808200341d8056a41206a22022028290300370300200341d8056a41186a220b2027290300370300200341d8056a41106a220e2007290300370300200341d8056a41086a2207200c29030037030020032003290380063703d805200341d8066a41286a200341b8086a412e6a280100360200200341d8066a41206a200341b8086a41266a290100370300200341d8066a41186a200341b8086a411e6a290100370300200341d8066a41106a200341b8086a41166a290100370300200341d8066a41086a200341b8086a410e6a290100370300200320032901be083703d8062003200a36028407200341d8066a41d0006a2002290300370300200341d8066a41c8006a200b29030037030020034198076a200e290300370300200341d8066a41386a2007290300370300200341d8066a41306a220220032903d805370300200d20022802004d4102200a1b22024102460d012002410171450d0120004183103b0100200041086a4112360200200041046a41c9c6c800360200200041026a410b3a0000200341fc066a280200450d0720032802f806102f0c070b2002102f200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c060b2003200d36028807200341013602840741eba1ca00ad4280808080f00084100122022d000f210a20022d000e210b20022f000c210c20022d000b210e20022d000a210f20022f0008211020022d0007211120022d0006211220022f0004212720022d0003212820022d0002212920022f0000212a2002102f41a7cac800ad4280808080e0008410012202290008210420022d0007212b20022d0006212c20022f0004212d20022d0003213320022d0002213720022f000021382002102f4120102d2202450d1e20022019370018200220133a0017200220143a0016200220153b0014200220163a0013200220173a0012200220183b00102002201a3a000f2002201c3a000e2002201d3b000c2002201e3a000b2002201f3a000a200220203b0008200220213a0007200220223a0006200220233b0004200220243a0003200220253a0002200220263b00002002ad428080808080048410032207290018210520072d0017213920072d0016213a20072f0014213b20072d0013213c20072d0012213d20072f0010213e20072d000f213f20072d000e214020072f000c214120072d000b214220072d000a214320072f0008214420072d0007214520072d0006214620072f0004214720072d0003214820072d0002214920072f0000214a2007102f2002102f41c000102d2202450d1e20022005370038200220393a00372002203a3a00362002203b3b00342002203c3a00332002203d3a00322002203e3b00302002203f3a002f200220403a002e200220413b002c200220423a002b200220433a002a200220443b0028200220453a0027200220463a0026200220473b0024200220483a0023200220493a00222002204a3b0020200220043700182002202b3a00172002202c3a00162002202d3b0014200220333a0013200220373a0012200220383b00102002200a3a000f2002200b3a000e2002200c3b000c2002200e3a000b2002200f3a000a200220103b0008200220113a0007200220123a0006200220273b0004200220283a0003200220293a00022002202a3b0000200341c0003602b407200320023602b007200341d8066a200341b0076a10f3052002102f200341a8066a200d1085060240200941246c22020d00410021290c050b200820026a2211415c6a212a200341a8066a410472212c2003418c076a210f20082107410021290340200721020340200241206a2802002107200341e8036a41186a200241186a290000370300200341e8036a41106a200241106a290000370300200341e8036a41086a200241086a290000370300200320022900003703e803200341b0076a200d200341e8036a10f205200341e0016a20032802b007220920032802b80710c10320032802e001210b20032802e4012110024020032802b407450d002009102f0b200341b8086a200d200341e8036a10f105200341b0076a20032802b808220a20032802c00810bc030240024020032802d007220c0d00420021054100210e4108210c41002109420021040c010b200341b0076a41086a290300210420032903b007210520032802d407210e20032802d80721090b024020032802bc08450d00200a102f0b02400240200920074d0d00200c200741306c6a2207450d000240200f200741106a2209460d002009200f412010ea060d020b200341d0016a20054201200542015620044200522004501b22091b22052004420020091b2204428094ebdc03420010ee06200341c0016a2005200420032903d001221b4201201b420156200341d0016a41086a290300221b420052201b501b22091b2231201b420020091b223210ee0620032903c001221b428080808010544100200341c0016a41086a290300501b450d05200341b0016a20052007290300223020052030542004200741086a29030022305420042030511b22071b2004203020071b2031203210ee0620032903b0012204428080808010544100200341b0016a41086a290300501b450d06201ba7450d0720104100200b1b212b200442ffffffff0f83428094ebdc037e201b42ffffffff0f8380210420032802b0062112202c2107024002400340410021284100210a0240200728020022102f01062227450d0020274105742107201041086a2109417f210a0340024020070d002027210a0c020b200a41016a210a200341e8036a2009412010ea06220b450d03200741606a2107200941206a2109200b417f4a0d000b0b2012450d022012417f6a21122010200a4102746a4194036a21070c000b0b2010200a4102746a41e8026a28020021280b20032802a80621072003418094ebdc033602b407200320074101200741014b1b2207202820072028491b2007418094ebdc036e22094101200941014b1b22096ead428094ebdc037e200720096ead8042ffffffff0f834100418094ebdc03202b6b22072007418094ebdc034b1bad7e428094ebdc0380a722073602b007200341b0076a2007418094ebdc034b4102746a35020021052003418094ebdc033602b40720032005200442ffffffff0f837e428094ebdc0380a722073602b007200341b0076a2007418094ebdc034b4102746a28020021072003418094ebdc033602b4072003417f202920076a220720072029491b22073602b007200341b0076a2007418094ebdc034b4102746a28020021290b0240200e450d00200c102f0b200241246a2107202a2002460d070c020b200241246a21020240200e450d00200c102f0b20112002460d060c000b0b0b200041023a00000c040b200341113602b40720034198b4c0003602b0074186b3c00041e000200341b0076a419cb2c00041e8b3c000103e000b200341113602b40720034198b4c0003602b0074186b3c00041e000200341b0076a419cb2c00041f8b3c000103e000b4180b2c00041194188b4c0001039000b02402006450d002008102f0b20034188016a202e202f428094ebdc03420010ee06200341f8006a200329038801220420034188016a41086a29030022054280ec94a37c427f10ed06200341e8006a200420052029ad221b420010ed0620034198016a2003418c076a20032903682204201b202e20032903787c7e22052005428094ebdc038022054280ec94a37c7e7c4280cab5ee01562005a76aad7c2205200341e8006a41086a2903002005200454ad7c10860620034198016a41106a290300210420032903a0012105024002400240200329039801221ba74101470d00200320193702d008200320133a00cf08200320143a00ce08200320153b01cc08200320163a00cb08200320173a00ca08200320183b01c8082003201a3a00c7082003201c3a00c6082003201d3b01c4082003201e3a00c3082003201f3a00c208200320203b01c008200320213a00bf08200320223a00be08200320233b01bc08200320243a00bb08200320253a00ba08200320263b01b808200341e8076a2004370300200341e0076a2005370300200341d1076a2019370000200341b0076a41206a20133a0000200341cf076a20143a0000200341cd076a20153b0000200341cc076a20163a0000200341cb076a20173a0000200341c9076a20183b0000200341b0076a41186a2208201a3a0000200341c7076a201c3a0000200341c5076a201d3b0000200341c4076a201e3a0000200341c3076a201f3a0000200341c1076a20203b0000200341b0076a41106a220620213a0000200341bf076a20223a0000200341bd076a20233b0000200341bc076a20243a0000200341bb076a20253a0000200341b9076a20263b0000200341b0076a41086a220741003a0000200341043a00b00741c8e1ca004100200341b0076a108c01200842003703002006420037030020074200370300200342003703b00741e7a2ca00ad4280808080800184221910012209290000211b200341b8086a41086a2202200941086a2900003703002003201b3703b8082009102f20072002290300370300200320032903b8083703b00741ecb5c600ad4280808080d00184221b10012209290000212e2002200941086a2900003703002003202e3703b8082009102f200620032903b808222e370300200341e8036a41086a220a2007290300370300200341e8036a41106a220b202e370300200341e8036a41186a220c2002290300370300200320032903b0073703e803200341386a200341e8036a4120109c01200341386a41106a290300212e2003290340212f20032802382109200842003703002006420037030020074200370300200342003703b00720191001220829000021192002200841086a290000370300200320193703b8082008102f20072002290300370300200320032903b8083703b007201b1001220829000021192002200841086a290000370300200320193703b8082008102f200620032903b8082219370300200a2007290300370300200b2019370300200c2002290300370300200320032903b0073703e8032003427f202e420020091b221920047c202f420020091b220420057c22052004542202ad7c22042002200420195420042019511b22021b3703b8072003427f200520021b3703b007200341b0076a2102200341e8036a21070c010b201b4201520d01200341b0076a41186a22094200370300200341b0076a41106a22064200370300200341b0076a41086a22074200370300200342003703b00741e7a2ca00ad4280808080800184221910012208290000211b200341b8086a41086a2202200841086a2900003703002003201b3703b8082008102f20072002290300370300200320032903b8083703b00741ecb5c600ad4280808080d00184221b10012208290000212e2002200841086a2900003703002003202e3703b8082008102f200620032903b808222e370300200341e8036a41086a220a2007290300370300200341e8036a41106a220b202e370300200341e8036a41186a220c2002290300370300200320032903b0073703e803200341d0006a200341e8036a4120109c01200341d0006a41106a290300212e2003290358212f20032802502108200942003703002006420037030020074200370300200342003703b00720191001220929000021192002200941086a290000370300200320193703b8082009102f20072002290300370300200320032903b8083703b007201b1001220929000021192002200941086a290000370300200320193703b8082009102f200620032903b8082219370300200a2007290300370300200b2019370300200c2002290300370300200320032903b0073703e8032003427f202e420020081b221920047c202f420020081b220420057c22052004542202ad7c22042002200420195420042019511b22021b3703b8072003427f200520021b3703b007200341b0076a2102200341e8036a21070b2007ad42808080808004842002ad428080808080028410040b200041043a000020032802ac06200341b0066a280200200341b4066a28020010a3020240200341fc066a280200450d0020032802f806102f0b41002100410121070c010b41002100410121072006450d002008102f0b41012108410121060c1f0b200241036a2d0000210820022f00012109200141106a28020021072001410c6a2802002113200141086a2802002110200141046a2802002114024002400240024020022d0000220a417f6a220641024b0d00024020060e03000102000b200241046a2d00000d00200241086a2802004102742002410c6a28020041036c4f0d010b410021062009200841107472200a4100477241ff01710d010b20102007410041202007676b10e40341eba1ca00ad4280808080f00084100122022d000f210620022d000e210820022f000c210920022d000b210a20022d000a210b20022f0008210c20022d0007210d20022d0006210e20022f0004210f20022d0003211120022d0002211220022f000021152002102f41e0cfc800ad428080808080028410012202290008210420022d0007211620022d0006211720022f0004211820022d0003211a20022d0002211c20022f0000211d2002102f200320143602b007200341b0076aad22194280808080c0008410032202290018210520022d0017211e20022d0016211f20022f0014212020022d0013212120022d0012212220022f0010212320022d000f212420022d000e212520022f000c212620022d000b212720022d000a212820022f0008212920022d0007212a20022d0006212b20022f0004212c20022d0003212d20022d0002213320022f000021372002102f41c000102d2202450d18200220053700382002201e3a00372002201f3a0036200220203b0034200220213a0033200220223a0032200220233b0030200220243a002f200220253a002e200220263b002c200220273a002b200220283a002a200220293b00282002202a3a00272002202b3a00262002202c3b00242002202d3a0023200220333a0022200220373b002020022004370018200220163a0017200220173a0016200220183b00142002201a3a00132002201c3a00122002201d3b0010200220063a000f200220083a000e200220093b000c2002200a3a000b2002200b3a000a2002200c3b00082002200d3a00072002200e3a00062002200f3b0004200220113a0003200220123a0002200220153b0000200341b0076a2002109a0520032902b407210420032802b00721062002102f2004420020061b21042006410820061b2111024020074102742212450d0041002107417f210a41002108410021060340024002400240201020076a280200220920064f0d00410e210241a2c7c8002107410521060c010b200820096a22022004422088a7220b490d01411121024191c7c8002107410621060b20004183103b0100200041086a2002360200200041046a2007360200200041026a20063a000002402013450d002010102f0b02402004422088a72200450d00201141306a2102200041d8006c210003400240200241746a280200450d00200241706a280200102f0b02402002280200450d002002417c6a280200102f0b200241d8006a2102200041a87f6a22000d000b0b41002106410121072004a7450d042011102f0c040b2011200241d8006c6a220228022c210e2002280220210f200241306a280200210c200241246a280200210d2002200241d8006a200a200b6a20096b41d8006c10e9061a0240200d450d00200f102f0b0240200c450d00200e102f0b200641016a210620044280808080707c2104200a41016a210a2008417f6a21082012200741046a2207470d000b0b02402013450d002010102f0b41eba1ca00ad4280808080f00084100122022d000f210720022d000e210620022f000c210820022d000b210920022d000a210a20022f0008210b20022d0007210c20022d0006210d20022f0004210e20022d0003210f20022d0002211020022f000021122002102f41e0cfc800ad428080808080028410012202290008210520022d0007211320022d0006211520022f0004211620022d0003211720022d0002211820022f0000211a2002102f200320143602b00720194280808080c0008410032202290018211920022d0017211420022d0016211c20022f0014211d20022d0013211e20022d0012211f20022f0010212020022d000f212120022d000e212220022f000c212320022d000b212420022d000a212520022f0008212620022d0007212720022d0006212820022f0004212920022d0003212a20022d0002212b20022f0000212c2002102f41c000102d2202450d1820022019370038200220143a00372002201c3a00362002201d3b00342002201e3a00332002201f3a0032200220203b0030200220213a002f200220223a002e200220233b002c200220243a002b200220253a002a200220263b0028200220273a0027200220283a0026200220293b00242002202a3a00232002202b3a00222002202c3b002020022005370018200220133a0017200220153a0016200220163b0014200220173a0013200220183a00122002201a3b0010200220073a000f200220063a000e200220083b000c200220093a000b2002200a3a000a2002200b3b00082002200c3a00072002200d3a00062002200e3b00042002200f3a0003200220103a0002200220123b0000200341b0076a20112004422088a7220710f9052002ad428080808080088420033502b80742208620032802b0072206ad841004024020032802b407450d002006102f0b2002102f02402007450d00200741d8006c2107201141306a210203400240200241746a280200450d00200241706a280200102f0b02402002280200450d002002417c6a280200102f0b200241d8006a2102200741a87f6a22070d000b0b02402004a7450d002011102f0b200041043a000041002106410121070c010b200041023a0000410121072013450d002010102f0b41012108410121000c1e0b024020022d000120022d0000410047720d0041eba1ca00ad4280808080f00084100122022900002104200229000821052002102f41f1a0ca00ad42808080808001841001220229000021192002290008211b2002102f2003201b3703c005200320193703b805200320053703b005200320043703a805200341033a00d803410121074101102d2202450d16200220032d00d8033a0000200341a8056aad42808080808004842002ad4280808080108410042002102f200041043a0000410121080c1d0b200041023a00000c1a0b200341c8076a200141196a290000370300200341c0076a200141116a290000370300200341b0076a41086a200141096a290000370300200320012900013703b007024020022d000120022d0000410047720d00200341d8066a200341b0076a108306200320032900d9063703b8082003200341d8066a41086a2800003600bf08024020032d00d80622024104470d00200342f3e885db96cddbb3203703e803200341e8036a200341b0076a10b101200041043a00000c1b0b200020023a0000200020032903b808370001200041086a20032800bf083600000c1a0b200041023a00000c190b41002108200141086a2802002106200141046a2802002109024020022d000120022d0000410047720d002001410c6a280200210741eba1ca00ad4280808080f00084100122022900002104200229000821052002102f41c4aac900ad4280808080d001841001220229000021192002290008211b2002102f2003201b3703c005200320193703b805200320053703b005200320043703a805200341203602b4072003200341a8056a3602b00720092007200341b0076a10aa0102402006450d002009102f0b200041043a0000410121070c1b0b200041023a0000410121072006450d1a2009102f0c1a0b024020022d000120022d0000410047720d0041eba1ca00ad4280808080f00084100122022900002104200229000821052002102f41f1a0ca00ad42808080808001841001220229000021192002290008211b2002102f2003201b3703c005200320193703b805200320053703b005200320043703a80541012107200341013a00d8034101102d2202450d13200220032d00d8033a0000200341a8056aad42808080808004842002ad4280808080108410042002102f200041043a0000410121080c1a0b200041023a00000c170b024020022d000120022d0000410047720d0041eba1ca00ad4280808080f00084100122022900002104200229000821052002102f41f1a0ca00ad42808080808001841001220229000021192002290008211b2002102f2003201b3703c005200320193703b805200320053703b005200320043703a805200341023a00d803410121074101102d2202450d12200220032d00d8033a0000200341a8056aad42808080808004842002ad4280808080108410042002102f200041043a0000410121080c190b200041023a00000c160b024020022d000120022d0000410047720d00200141046a280200210741eba1ca00ad4280808080f00084100122022900002104200229000821052002102f41afa0ca00ad4280808080e001841001220229000021192002290008211b2002102f2003201b3703c005200320193703b805200320053703b005200320043703a805200320073602b007200341a8056aad4280808080800484200341b0076aad4280808080c000841004200041043a00000c160b200041023a00000c150b410121070c010b200341a0066a200141246a28020036020020034180066a41186a2001411c6a29020037030020034180066a41106a200141146a29020037030020034180066a41086a2001410c6a2902003703002003200141046a2902003703800620022d00000d0220022d00014101470d02200241196a2d00002107200241186a2d00002106200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703d804200320073a00d704200320063a00d604200320083b01d404200320093a00d3042003200a3a00d2042003200b3b01d0042003200c3a00cf042003200d3a00ce042003200e3b01cc042003200f3a00cb04200320103a00ca04200320113b01c804200320123a00c704200320133a00c604200320143b01c404200320153a00c304200320163a00c204200320173b01c004200341b0076a200341c0046a10b50320032d00b0074101470d03200341d8066a41176a2202200341b0076a41196a290000370000200341d8066a41106a2206200341c2076a290100370300200341e8036a41086a2207200341ba076a290100370300200341e8036a41106a22082006290300370300200341e8036a41176a22092002290000370000200320032901b2073703e803200320032d00b1073a00e004200341e0046a41186a2009290000370000200341e0046a41116a2008290300370000200341e0046a41096a2007290300370000200320032903e8033700e104200341b0076a41206a20034180066a41206a280200360200200341b0076a41186a20034180066a41186a290300370300200341b0076a41106a20034180066a41106a290300370300200341b0076a41086a20034180066a41086a29030037030020032003290380063703b007200341d8066a200341b0076a10bb014101210720032d00d8064101460d00200341d8066a41086a2d00002107200341d8066a41096a2f00002108200341e3066a2d00002109200341e4066a2d0000210a200341e5066a2f0000210b200341e7066a2d0000210c20062d00002106200341d8066a41116a2f0000210d200341eb066a2d0000210e200341ec066a2d0000210f200341ed066a2f0000211020022d00002102200341d8066a41186a2d0000211120032f00d906211220032d00db06211320032d00dc06211420032f00dd06211520032d00df0621162003200341d8066a41196a2900003703f005200320113a00ef05200320023a00ee05200320103b01ec052003200f3a00eb052003200e3a00ea052003200d3b01e805200320063a00e7052003200c3a00e6052003200b3b01e4052003200a3a00e305200320093a00e205200320083b01e005200320073a00df05200320163a00de05200320153b01dc05200320143a00db05200320133a00da05200320123b01d80541eba1ca00ad4280808080f00084100122022900002104200341d8036a41086a200241086a290000370300200320043703d8032002102f41a7cac800ad4280808080e0008410012202290000210420034180056a41086a200241086a29000037030020032004370380052002102f4120102d2202450d0e200220032903d805370000200241186a200341d8056a41186a290300370000200241106a200341d8056a41106a290300370000200241086a200341d8056a41086a2903003700002002ad4280808080800484100322072900002104200741086a2900002105200741106a2900002119200341a8056a41186a2206200741186a290000370300200341a8056a41106a22082019370300200341a8056a41086a22092005370300200320043703a8052007102f2002102f41c000102d2202450d0e200220032903d803370000200241086a200341d8036a41086a2903003700002002200329038005370010200241186a20034180056a41086a290300370000200220032903a805370020200241286a2009290300370000200241306a2008290300370000200241386a2006290300370000200341306a200241c00041c8e1ca004100410010b501200328023021062002102f4101210720064101470d0120004183103b0100200041086a410d360200200041046a41bcc7c800360200200041026a41033a0000410121080c150b200020073a0000410121080c140b200341d8056a200341e0046a412010ea06450d0241eba1ca00ad4280808080f00084100122022d000f210620022d000e210820022f000c210920022d000b210a20022d000a210b20022f0008210c20022d0007210d20022d0006210e20022f0004210f20022d0003211020022d0002211120022f000021122002102f41a1cac800ad4280808080e0008410012202290008210420022d0007211320022d0006211420022f0004211520022d0003211620022d0002211720022f000021182002102f4120102d2207450d0c200720032903c004370000200741186a200341c0046a41186a290300370000200741106a200341c0046a41106a290300370000200741086a200341c0046a41086a2903003700002007ad428080808080048410032202290018210520022d0017211a20022d0016211c20022f0014211d20022d0013211e20022d0012211f20022f0010212020022d000f212120022d000e212220022f000c212320022d000b212420022d000a212520022f0008212620022d0007212720022d0006212820022f0004212920022d0003212a20022d0002212b20022f0000212c2002102f2007102f41c000102d2202450d0c200220053700382002201a3a00372002201c3a00362002201d3b00342002201e3a00332002201f3a0032200220203b0030200220213a002f200220223a002e200220233b002c200220243a002b200220253a002a200220263b0028200220273a0027200220283a0026200220293b00242002202a3a00232002202b3a00222002202c3b002020022004370018200220133a0017200220143a0016200220153b0014200220163a0013200220173a0012200220183b0010200220063a000f200220083a000e200220093b000c2002200a3a000b2002200b3a000a2002200c3b00082002200d3a00072002200e3a00062002200f3b0004200220103a0003200220113a0002200220123b00004120102d2207450d0c200720032903d805370000200741186a200341d8056a41186a290300370000200741106a200341d8056a41106a290300370000200741086a200341d8056a41086a2903003700002002ad42808080808008842007ad428080808080048410042007102f2002102f41eba1ca00ad4280808080f0008410012202290000210420034180056a41086a200241086a29000037030020032004370380052002102f41a7cac800ad4280808080e00084100122022900002104200341a8056a41086a200241086a290000370300200320043703a8052002102f4120102d2202450d0c200220032903e004370000200241186a200341e0046a41186a290300370000200241106a200341e0046a41106a290300370000200241086a200341e0046a41086a2903003700002002ad4280808080800484100322072900002104200741086a2900002105200741106a2900002119200341b8086a41186a200741186a290000370300200341b8086a41106a2019370300200341b8086a41086a2005370300200320043703b8082007102f2002102f41c000102d2202450d0c2002200329038005370000200241086a20034180056a41086a2209290300370000200220032903a805370010200241186a200341a8056a41086a220a290300370000200220032903b808370020200241286a200341b8086a41086a2207290300370000200241306a200341b8086a41106a2206290300370000200241386a200341b8086a41186a2208290300370000200341b0076a200210a005024020032802dc072212410246220b0d002002ad428080808080088410050b200341d8066a41286a220c200341b0076a41286a280200360200200341d8066a41206a220d200341b0076a41206a2213290300370300200341d8066a41186a220e200341b0076a41186a290300370300200341d8066a41106a220f200341b0076a41106a290300370300200341d8066a41086a2210200341b0076a41086a2903003703002007200341b0076a41386a2903003703002006200341f0076a22142903003703002008200341f8076a2215290300370300200341b8086a41206a221120034180086a2216290300370300200320032903b0073703d806200320032903e0073703b808200a2010290300370300200341a8056a41106a200f290300370300200341a8056a41186a200e290300370300200341a8056a41206a220a200d290300370300200341a8056a41286a200c2802003602002009200729030037030020034180056a41106a200629030037030020034180056a41186a200829030037030020034180056a41206a22072011290300370300200320032903d8063703a805200320032903b808370380050240200b0d00200341e8036a41286a2206200341a8056a41286a280200360200200341e8036a41206a2208200a290300370300200341e8036a41186a2209200341a8056a41186a290300370300200341e8036a41106a220a200341a8056a41106a290300370300200341e8036a41086a220b200341a8056a41086a220c290300370300200341a8066a41086a220d20034180056a41086a220e290300370300200341a8066a41106a220f20034180056a41106a290300370300200341a8066a41186a221020034180056a41186a290300370300200341a8066a41206a22112007290300370300200320032903a8053703e80320032003290380053703a8062002102f200341b0076a41286a200628020036020020132008290300370300200341b0076a41186a2009290300370300200341b0076a41106a200a290300370300200341b0076a41086a200b290300370300200341e0076a20032903a806370300200341e8076a200d2903003703002014200f2903003703002015201029030037030020162011290300370300200320032903e8033703b007200320123602dc0741eba1ca00ad4280808080f00084100122022900002104200e200241086a29000037030020032004370380052002102f41a7cac800ad4280808080e00084100122022900002104200c200241086a290000370300200320043703a8052002102f4120102d2202450d0d200220032903d805370000200241186a200341d8056a41186a290300370000200241106a200341d8056a41106a290300370000200241086a200341d8056a41086a2903003700002002ad4280808080800484100322072900002104200741086a2900002105200741106a2900002119200341b8086a41186a200741186a290000370300200341b8086a41106a2019370300200341b8086a41086a2005370300200320043703b8082007102f2002102f41c000102d2202450d0d2002200329038005370000200241086a20034180056a41086a290300370000200220032903a805370010200241186a200341a8056a41086a290300370000200220032903b808370020200241286a200341b8086a41086a290300370000200241306a200341c8086a290300370000200241386a200341b8086a41186a290300370000200341c0003602dc06200320023602d806200341b0076a200341d8066a10c4032002102f200341d4076a280200450d0320032802d007102f0c030b2002102f0c020b200041023a00000c100b200041086a4108360200200041046a41d6c7c80036020041012107200041026a41013a000020004183103b0100410121080c110b200041043a00000c0e0b20012d0001210620032002411a6a2901003703c0052003200241026a2901003703a80520032002410a6a2901003703b0052003200241126a2901003703b80541012107024020022d00014101470d0020022d000041ff01710d00200341e8036a41186a200341a8056a41186a290300370300200341e8036a41106a200341a8056a41106a290300370300200341e8036a41086a200341a8056a41086a290300370300200320032903a8053703e803200341b0076a200341e8036a108103024020032802dc074102460d00200341b8086a41106a200341dc076a220241106a2901002204370300200341b8086a41186a200241186a2901002205370300200341d8066a41086a200241086a290100370300200341d8066a41106a2004370300200341d8066a41186a2005370300200341d8066a41206a2208200241206a290100370300200341d8066a41286a200241286a280100360200200320022901003703d80620032802d407210920032802d007213741eba1ca00ad4280808080f00084100122022d000f210a20022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002102f41c8abc900ad4280808080d0008410012202290008210420022d0007211620022d0006211720022f0004211820022d0003211a20022d0002211c20022f0000211d2002102f4120102d2207450d0a200720032903e006370000200741186a2008290300370000200741106a200341d8066a41186a290300370000200741086a200341d8066a41106a2903003700002007ad428080808080048410032202290018210520022d0017210820022d0016211e20022f0014211f20022d0013212020022d0012212120022f0010212220022d000f212320022d000e212420022f000c212520022d000b212620022d000a212720022f0008212820022d0007212920022d0006212a20022f0004212b20022d0003212c20022d0002212d20022f000021332002102f2007102f41c000102d2202450d0a20022005370038200220083a00372002201e3a00362002201f3b0034200220203a0033200220213a0032200220223b0030200220233a002f200220243a002e200220253b002c200220263a002b200220273a002a200220283b0028200220293a00272002202a3a00262002202b3b00242002202c3a00232002202d3a0022200220333b002020022004370018200220163a0017200220173a0016200220183b00142002201a3a00132002201c3a00122002201d3b00102002200a3a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b000002400240200641037122074103470d004101210742002104410121060c010b024002400240024020070e03000102000b410021060c020b410121060c010b410221060b200320063a00d8034101102d2207450d0b200720063a00004100210642808080801021040b2002ad428080808080088420042007ad841004024020060d002007102f0b2002102f02402009450d002037102f0b200041043a00000c0f0b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c0e0b200041023a0000410121080c0f0b41012107024020022d00014101470d0020022d000041ff01710d0020032002411a6a2901003703c0062003200241026a2901003703a80620032002410a6a2901003703b0062003200241126a2901003703b806200341b0076a200341a8066a108103024020032802dc074102460d00200341b8086a41086a2206200341dc076a220241086a290100370300200341b8086a41106a2208200241106a290100370300200341b8086a41186a2209200241186a290100370300200341b8086a41206a220a200241206a290100370300200341b8086a41286a220b200241286a280100360200200320022901003703b808200341b0076a41086a2903002104200341b0076a41186a290300210520032903b007211920032903c007211b20032802d007210720032802d807210c20032802d4072102200341e8036a41086a220d2006290300370300200341e8036a41106a22062008290300370300200341e8036a41186a22082009290300370300200341e8036a41206a2209200a290300370300200341e8036a41286a220a200b280200360200200341fc066a2002360200200341d8066a41286a200c360200200341d8066a41186a2005370300200320032903b8083703e803200320073602f8062003201b3703e806200320193703d806200320043703e006200341ac076a200a280200360200200341a4076a20092903003702002003419c076a200829030037020020034194076a20062903003702002003200d29030037028c07200320032903e803370284072003418c076a220610e805200610e90502402002450d002007102f0b200041043a00000c0e0b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c0d0b200041023a0000410121080c0e0b200041086a410d360200200041046a41dec7c800360200200041026a41003a000020004183103b01000c010b20004183103b0100200041086a410c360200200041046a41b0c7c800360200200041026a41043a00002002450d00200b102f0b41012108410021072009450d0b2006102f0c0b0b410021070b4100210a4101210202402009450d002006102f0b410021080c010b2009450d002006102f0b0240024002402007450d00200a450d012002102f0c010b20020d010b41012108200041013a00000240200328028c04450d00200328028804102f0b410021070c080b41eba1ca00ad4280808080f000842204100122072900002105200729000821192007102f41d2a0ca00ad4280808080a0018410012207290000211b2007290008212e2007102f2003202e3703c0052003201b3703b805200320193703b005200320053703a805200341286a200341a8056a4120109501200320083602e0052003200a3602dc05200320023602d805200341003a00e8052003200328022c410020032802281b3602e4052003419c046a220610e8052004100122022d000f210820022d000e210920022f000c210b20022d000b210c20022d000a210d20022f0008210e20022d0007210f20022d0006211020022f0004211120022d0003211220022d0002211320022f000021142002102f418bc6c800ad4280808080a0018410012202290008210420022d0007211520022d0006211620022f0004211720022d0003211820022d0002211a20022f0000211c2002102f4120102d2207450d0020072006290000370000200741186a200641186a290000370000200741106a200641106a290000370000200741086a200641086a2900003700002007ad428080808080048410032202290018210520022d0017211d20022d0016211e20022f0014211f20022d0013212020022d0012212120022f0010212220022d000f212320022d000e212420022f000c212520022d000b212620022d000a212720022f0008212820022d0007212920022d0006212a20022f0004212b20022d0003212c20022d0002212d20022f000021332002102f2007102f41c000102d220a450d00200a2005370038200a201d3a0037200a201e3a0036200a201f3b0034200a20203a0033200a20213a0032200a20223b0030200a20233a002f200a20243a002e200a20253b002c200a20263a002b200a20273a002a200a20283b0028200a20293a0027200a202a3a0026200a202b3b0024200a202c3a0023200a202d3a0022200a20333b0020200a2004370018200a20153a0017200a20163a0016200a20173b0014200a20183a0013200a201a3a0012200a201c3b0010200a20083a000f200a20093a000e200a200b3b000c200a200c3a000b200a200d3a000a200a200e3b0008200a200f3a0007200a20103a0006200a20113b0004200a20123a0003200a20133a0002200a20143b0000200341d8066a200a41c0001098040240024020032d00e8064102460d00200341b8086a41086a200341f5066a290000370300200341b8086a41106a200341fd066a290000370300200341b8086a41186a20034185076a29000037030020034180066a41086a20034196076a29010037030020034180066a41106a2003419e076a29010037030020034180066a41186a200341a6076a2901003703002003200341ed066a2900003703b80820032003418e076a290100370380062003418d076a2d0000210220032d00ec06210720032802dc06450d0120032802d806102f0c010b200320063602b40841eba1ca00ad4280808080f00084100122022900002104200341e0046a41086a2207200241086a290000370300200320043703e0042002102f41fbc5c800ad428080808080028410012202290000210420034180066a41086a2208200241086a29000037030020032004370380062002102f200341b8086a41086a2007290300370300200341d0086a2008290300370300200320032903e0043703b80820032003290380063703c808200341b0076a200341b8086a108801200341a8066a20032802b007220220032802b80710ad02024020032802b407450d002002102f0b200341c8086a210d0240024020032d00a8060d0041eba1ca00ad4280808080f00084100122022900002104200341e0046a41086a2207200241086a290000370300200320043703e0042002102f41fbc5c800ad428080808080028410012202290000210420034180066a41086a2208200241086a29000037030020032004370380062002102f200341b8086a41086a2007290300370300200d200329038006370000200d41086a2008290300370000200320032903e0043703b808200341b0076a200341b8086a10880120032802b007210720033502b80721044120102d2202450d0320022006290000370000200241186a200641186a290000370000200241106a200641106a290000370000200241086a200641086a29000037000020044220862007ad842002ad428080808080048410042002102f024020032802b407450d002007102f0b410021020c010b200341a8056a41186a200341c1066a290000370300200341a8056a41106a200341b9066a290000370300200341a8056a41086a200341b1066a290000370300200320032900a9063703a805200341c0046a200341a8056a109704200341b0076a20032802c004220e20032802c804220f109804024020032d00c0074102470d00200341003602e804200342013703e00420034180066a41146a41293602002003418c066a410b3602002003410736028409200341eba1ca00360280092003410b360284062003410a3602dc032003418bc6c8003602d8032003200341c0046a360290062003200341d8036a36028806200320034180096a360280062003200341e0046a36028c09200341b8086a41146a4103360200200342033702bc08200341cc90c4003602b808200320034180066a3602c8082003418c096a41d8dbc100200341b8086a103c1a20033502e80442208620033502e004841008024020032802e404450d0020032802e004102f0b20032802b408210741eba1ca00ad4280808080f00084100122022900002104200341e0046a41086a2206200241086a290000370300200320043703e0042002102f41fbc5c800ad428080808080028410012202290000210420034180066a41086a2208200241086a29000037030020032004370380062002102f200341b8086a41086a2006290300370300200d200329038006370000200d41086a2008290300370000200320032903e0043703b80820034180066a200341b8086a108801200328028006210620033502880621044120102d2202450d0320022007290000370000200241186a200741186a290000370000200241106a200741106a290000370000200241086a200741086a29000037000020044220862006ad842002ad428080808080048410042002102f0240200328028406450d002006102f0b024020032802c404450d0020032802c004102f0b410021020c010b200341b8086a200341b0076a41146a41c20010e8061a20032d00d908210220034180066a41106a200341b0076a41106a28020036020020034180066a41086a200341b0076a41086a290300220437030020034180066a41186a200341da086a410020024101461b360200200320032903b0072205370380062003200341b4086a36029406200341003602e804200342013703e0042004a72202200341e0046a10692005a721100240024020020d0020032802e404210820032802e80421070c010b2002410574210b410020032802e80422076b210920032802e404210820102102034002400240200820096a4120490d0020032802e00421060c010b200741206a22062007490d062008410174220c2006200c20064b1b220c4100480d060240024020080d00200c102d21060c010b20032802e0042008200c103121060b2006450d052003200c3602e404200320063602e004200c21080b200620076a220641086a200241086a290000370000200641106a200241106a290000370000200641186a200241186a2900003700002003200741206a22073602e80420062002290000370000200941606a2109200241206a2102200b41606a220b0d000b0b200328028c06210902400240200820076b4104490d0020032802e00421020c010b200741046a22022007490d04200841017422062002200620024b1b22064100480d040240024020080d002006102d21020c010b20032802e00420082006103121020b2002450d03200320063602e404200320023602e004200621080b2003200741046a22063602e804200220076a2009360000200320032d00900622093a00d803024020082006470d00200841016a22092008490d042008410174220b2009200b20094b1b22094100480d040240024020080d002009102d21020c010b200220082009103121020b2002450d03200320093602e404200320023602e00420032d00d80321090b2003200741056a3602e804200220066a20093a000020034180066a41146a200341e0046a10cd0220032802e4042102200fad422086200ead8420033502e80442208620032802e0042207ad84100402402002450d002007102f0b0240200328028406450d002010102f0b024020032802c404450d0020032802c004102f0b20032802b408210741eba1ca00ad4280808080f00084100122022900002104200341e0046a41086a2206200241086a290000370300200320043703e0042002102f41fbc5c800ad428080808080028410012202290000210420034180066a41086a2208200241086a29000037030020032004370380062002102f200341b8086a41086a2006290300370300200d200329038006370000200d41086a2008290300370000200320032903e0043703b808200341b0076a200341b8086a10880120032802b007210620033502b80721044120102d2202450d0220022007290000370000200241186a200741186a290000370000200241106a200741106a290000370000200241086a200741086a29000037000020044220862006ad842002ad428080808080048410042002102f024020032802b407450d002006102f0b20034180066a41086a200341a8056a41086a29030037030020034180066a41106a200341a8056a41106a29030037030020034180066a41186a200341a8056a41186a290300370300200320032903a80537038006410121020b410021070b200341d5076a20023a0000200341d6076a200329038006370100200341bd076a200341b8086a41086a290300370000200341c5076a200341b8086a41106a290300370000200341cd076a200341b8086a41186a290300370000200341de076a20034180066a41086a290300370100200341e6076a20034180066a41106a290300370100200341ee076a20034180066a41186a290300370100200320073a00b407200320032903b8083700b5072003200341d8056a3602b007200341003602e006200342013703d80620032802d805210220032802e0052207200341d8066a10690240024020070d0020032802dc06210820032802e00621070c010b2007410574210b410020032802e00622076b210920032802dc062108034002400240200820096a4120490d0020032802d80621060c010b200741206a22062007490d042008410174220c2006200c20064b1b220c4100480d040240024020080d00200c102d21060c010b20032802d8062008200c103121060b2006450d032003200c3602dc06200320063602d806200c21080b200620076a220641086a200241086a290000370000200641106a200241106a290000370000200641186a200241186a2900003700002003200741206a22073602e00620062002290000370000200941606a2109200241206a2102200b41606a220b0d000b0b20032802e405210902400240200820076b4104490d0020032802d80621020c010b200741046a22022007490d02200841017422062002200620024b1b22064100480d020240024020080d002006102d21020c010b20032802d80620082006103121020b2002450d01200320063602dc06200320023602d806200621080b2003200741046a22063602e006200220076a2009360000200320032d00e80522093a00d803024020082006470d00200841016a22092008490d022008410174220b2009200b20094b1b22094100480d020240024020080d002009102d21020c010b200220082009103121020b2002450d01200320093602dc06200320023602d80620032d00d80321090b2003200741056a3602e006200220066a20093a0000200341b0076a410472200341d8066a10ce0220032802dc062102200aad428080808080088420033502e00642208620032802d8062207ad84100402402002450d002007102f0b200a102f024020032802dc05450d0020032802d805102f0b0240200328028c04450d00200328028804102f0b200041043a000041012108410021070c070b1036000b1038000b41002106410021070b200341d5076a20063a0000200341d6076a200329038006370100200341bd076a200341b8086a41086a290300370000200341c5076a200341b8086a41106a290300370000200341cd076a200341b8086a41186a290300370000200341de076a20034180066a41086a290300370100200341e6076a20034180066a41106a290300370100200341ee076a20034180066a41186a290300370100200320073a00b4072003201a3602b007200320032903b8083700b507200341003602f003200342013703e803200341b0076a200341e8036a109502200341b0076a410472200341e8036a10ce0220032802ec0321072002ad428080808080088420033502f00342208620032802e8032206ad84100402402007450d002006102f0b2002102f024020032802fc06450d0020032802f806102f0b200041043a00000c010b024020032802fc06450d0020032802f806102f0b200041043a00000b41012107410121080c010b20004183103b0100200041086a2002360200200041046a2006360200200041026a20083a0000410121080b41012106410121000b024020012d0000417a6a2202410b4b0d00024002400240024020020e0c000404040404040104040203000b2007450d03200141086a280200450d03200141046a280200102f0c030b2008450d02200141086a280200450d02200141046a280200102f0c020b2006450d012001410c6a280200450d01200141086a280200102f0c010b2000450d002001410c6a280200450d00200141086a280200102f0b20034190096a24000bb60603027f037e057f230041b0016b2202240041eba1ca00ad4280808080f00084100122032900002104200241d8006a41086a200341086a290000370300200220043703582003102f41a7cac800ad4280808080e0008410012203290000210420024180016a41086a200341086a29000037030020022004370380012003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241186a2207200141186a290000370300200241106a22082006370300200241086a2005370300200220043703002001102f2003102f41c000102d2203450d0020032002290358370000200320022903800137001020032002290300370020200341086a200241d8006a41086a2201290300370000200341186a20024180016a41086a2209290300370000200341286a200241086a220a290300370000200341306a2008290300370000200341386a20072903003700002002200310a0052009200a29030037030020024180016a41106a200829030037030020024180016a41186a200729030037030020024180016a41206a2208200241206a29030037030020024180016a41286a220a200241286a2802003602002001200241386a290300370300200241d8006a41106a200241c0006a290300370300200241d8006a41186a200241c8006a290300370300200241d8006a41206a220b200241d0006a2903003703002002200229030037038001200220022903303703580240200228022c22074102460d00200020022903800137030020002002290358370330200041286a200a280200360200200041206a2008290300370300200041186a20024180016a41186a290300370300200041106a20024180016a41106a290300370300200041086a2009290300370300200041386a2001290300370300200041c0006a200241d8006a41106a290300370300200041c8006a200241d8006a41186a290300370300200041d0006a200b2903003703000b2000200736022c2003102f200241b0016a24000f0b1036000b980605027f017e057f027e027f230041c0006b22022400419c9eca00ad4280808080f00084100122032900002104200241206a41086a200341086a290000370300200220043703202003102f4186ebc300ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f200241306a41e7eac300410d109c040240024002400240024002402002280238220541206a2206417f4c0d0020022802302107024002402006450d002006102d2203450d062006410f4d0d01200621080c050b411021084110102d21030c030b200641017422094110200941104b1b220841004e0d010c050b103d000b200320062008103121030b2003450d010b20032002290320370000200341086a200241206a41086a2903003700000240024020084170714110460d00200821090c010b200841017422094120200941204b1b22094100480d0220032008200910312203450d010b20032002290300370010200341186a200241086a29030037000002400240200941606a2005490d00200921080c010b2005415f4b0d02200941017422082006200820064b1b22084100480d0220032009200810312203450d010b200341206a2007200510e8061a02402002280234450d002007102f0b4120102d2209450d0020092001290000370000200941186a200141186a290000370000200941106a200141106a290000370000200941086a200141086a2900003700002009ad4280808080800484100322012900002104200141086a290000210a200141106a290000210b200241186a2207200141186a290000370300200241106a220c200b370300200241086a220d200a370300200220043703002001102f2009102f200541c0006a210902400240200820066b411f4d0d00200821010c010b200841017422012009200120094b1b22014100480d0220032008200110312203450d010b200320066a22062002290300370000200641186a2007290300370000200641106a200c290300370000200641086a200d290300370000200020093602082000200136020420002003360200200241c0006a24000f0b1036000b1038000bd60201027f230041c0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102201450d00200328021421042003200341186a2802003602ac02200320013602a802200341a0016a200341a8026a10ee02410121020240024020032d00a0014101470d004100210220034100360228200342013703202003410b3602b4022003200341086a3602b0022003200341206a3602bc02200341b4016a4101360200200342013702a401200341b885c7003602a0012003200341b0026a3602b001200341bc026a41d8dbc100200341a0016a103c1a200335022842208620033502208410082003280224450d012003280220102f0c010b200341206a200341a0016a41017241800110e8061a200041016a200341206a41800110e8061a0b200020023a00002004450d012001102f0c010b200041003a00000b200341c0026a24000ba70804027f017e087f027e230041c0006b22022400419c9eca00ad4280808080f00084100122032900002104200241206a41086a200341086a290000370300200220043703202003102f41ac9fc400ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f200241306a41e7eac300410d109c040240024002400240024002402002280238220541206a2206417f4c0d002002280230210702400240024002402006450d002006102d2203450d082006410f4d0d01200621080c030b411021084110102d21030c010b200641017422094110200941104b1b22084100480d07200320062008103121030b2003450d050b20032002290320370000200341086a200241206a41086a2903003700000240024020084170714110460d00200821090c010b200841017422094120200941204b1b22094100480d0620032008200910312203450d050b20032002290300370010200341186a200241086a29030037000002400240200941606a2005490d002009210a0c010b2005415f4b0d06200941017422082006200820064b1b220a4100480d0620032009200a10312203450d050b200341206a2007200510e8061a02402002280234450d002007102f0b200141086a280200220941046a2208417f4c0d002008450d012008102d2207450d04200241003602082002200736020020022008360204200841034b0d032008410174220b4104200b41044b1b220b4100480d0520072008200b103121070c020b103d000b200241003602082002410136020020022008360204200841017422084104200841044b1b220b102d21070b2007450d012002200b360204200220073602000b20024104360208200720012800003600002001280204210b2009200210690240024020022802042201200228020822076b2009490d00200228020021080c010b200720096a22082007490d022001410174220c2008200c20084b1b220c4100480d020240024020010d00200c102d21080c010b20022802002001200c103121080b2008450d012002200c36020420022008360200200c21010b200820076a200b200910e8061a200720096aad4220862008ad84100322092900002104200941086a290000210d200941106a290000210e200241186a200941186a290000370300200241106a200e370300200241086a200d370300200220043703002009102f02402001450d002008102f0b200541c0006a210902400240200a20066b411f4d0d00200a21080c010b200a41017422082009200820094b1b22084100480d022003200a200810312203450d010b200320066a22062002290300370000200641186a200241186a290300370000200641106a200241106a290300370000200641086a200241086a290300370000200020093602082000200836020420002003360200200241c0006a24000f0b1036000b1038000b806a06077f017e027f017e0d7f027e230041a0046b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341e4016a4101360200200342013702d401200341b4d8c9003602d001200341043602ac01200341fcdbc9003602a8012003200341a8016a3602e001200341d0016a41e8d8c9001043000b2001412c6a2802002104200141286a2802002105200141246a280200210620012d0001210720034188016a41186a2001411a6a29000037030020034188016a41106a200141126a29000037030020034188016a41086a2001410a6a2900003703002003200141026a290000370388010240024020022d000120022d0000410047720d0020062004108701200341d0016a41186a4200370300200341d0016a41106a22024200370300200341d0016a41086a22084200370300200342003703d00141f2cbc700ad4280808080b0028410012209290000210a2008200941086a2900003703002003200a3703d0012009102f41ebdec700ad4280808080f0008410012209290000210a200341c8006a41086a220b200941086a2900003703002003200a3703482009102f20022003290348220a370300200341a8016a41086a2008290300370300200341a8016a41106a200a370300200341a8016a41186a200b290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa02200341d0016a2006200420032802d0012208410120081b220920032902d401420020081b220a422088a71097052002280200210220032802d401210820032802d001210b20032802dc01220c200341e4016a2802002006200410980502402002450d00200c102f0b02402008450d00200b102f0b20034180046a41186a220220034188016a41186a29030037030020034180046a41106a220420034188016a41106a29030037030020034180046a41086a220820034188016a41086a29030037030020032003290388013703800402400240200741ff01710d00200341a8016a41186a4200370300200341a8016a41106a22074200370300200341a8016a41086a22024200370300200342003703a80141f2cbc700ad4280808080b0028410012204290000210d200341e8006a41086a2208200441086a2900003703002003200d3703682004102f20022008290300370300200320032903683703a80141fbd4c700ad4280808080d0008410012204290000210d200341f8006a41086a2208200441086a2900003703002003200d3703782004102f20072003290378220d370300200341286a41086a2002290300370300200341286a41106a200d370300200341286a41186a2008290300370300200320032903a801370328200341286aad428080808080048410050c010b200341a8016a41186a2002290300370300200341a8016a41106a2004290300370300200341a8016a41086a200829030037030020032003290380043703a801200341c8006a41186a4200370300200341c8006a41106a22084200370300200341c8006a41086a220442003703002003420037034841f2cbc700ad4280808080b0028410012207290000210d200341286a41086a2202200741086a2900003703002003200d3703282007102f200420022903003703002003200329032837034841fbd4c700ad4280808080d0008410012207290000210d2002200741086a2900003703002003200d3703282007102f20082003290328220d370300200341d0016a41086a2004290300370300200341d0016a41106a200d370300200341d0016a41186a2002290300370300200320032903483703d0014120102d2202450d07200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a290300370000200341d0016aad42808080808004842002ad428080808080048410042002102f0b0240200aa7450d002009102f0b02402005450d002006102f0b200041043a00000c010b200041023a00002005450d002006102f0b41012104410021050c110b200141046a280200210720032002411a6a2901003703c0012003200241026a2901003703a80120032002410a6a2901003703b0012003200241126a2901003703b8010240024020022d00014101470d0020022d000041ff01710d0020034188016a41186a200341a8016a41186a220429030037030020034188016a41106a200341a8016a41106a220529030037030020034188016a41086a200341a8016a41086a2208290300370300200320032903a80137038801200341d0016a41186a4200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d00141f2cbc700ad4280808080b0028410012206290000210a2002200641086a2900003703002003200a3703d0012006102f41ebdec700ad4280808080f0008410012206290000210a200341c8006a41086a220b200641086a2900003703002003200a3703482006102f20092003290348220a370300200820022903003703002005200a3703002004200b290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220a422088a741057421062002410120021b2208210202400340024020060d00410021050c020b4101210520034188016a2002460d01200641606a2106200220034188016a412010ea062104200241206a210220040d000b0b0240200aa7450d002008102f0b2005450d0141002104200341003602d801200342013703d0012007200341d0016a10910120032802d401210620034180046a41186a220820033502d80142208620032802d0012205ad841003220241186a29000037030020034180046a41106a2209200241106a29000037030020034180046a41086a220b200241086a29000037030020032002290000370380042002102f02402006450d002005102f0b200341d0016a200741b00210e8061a200341a8016a410d6a20034188016a41086a290300370000200341a8016a41156a20034188016a41106a290300370000200341a8016a411d6a20034188016a41186a29030037000041012105200341013a00ac0120032003290388013700ad01200341013a00a801200341c8006a200341d0016a200341a8016a108b0120032d00482102200341d0016a410d6a200b290300370000200341d0016a41156a2009290300370000200341d0016a411d6a2008290300370000200341f5016a20024104463a0000200341053a00d401200341073a00d00120032003290380043700d50141c8e1ca004100200341d0016a108c01200041043a00002007102f0c120b200041023a00000c100b20004183163b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c0f0b200141086a2802002107200141046a280200210e2002411a6a290100210a200241196a2d00002104200241186a2d00002105200241166a2f01002108200241156a2d00002109200241146a2d0000210b200241126a2f0100210c200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211a41012106024020022d00000d0020022d000141014721060b2003200a370340200320043a003f200320053a003e200320083b013c200320093a003b2003200b3a003a2003200c3b01382003200f3a0037200320103a0036200320113b0134200320123a0033200320133a0032200320143b0130200320153a002f200320163a002e200320173b012c200320183a002b200320193a002a2003201a3b01280240024002400240024020060d0020034188016a41186a200341286a41186a29030037030020034188016a41106a200341286a41106a29030037030020034188016a41086a200341286a41086a2903003703002003200329032837038801200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d00141f2cbc700ad4280808080b0028410012206290000210a2002200641086a2900003703002003200a3703d0012006102f41ebdec700ad4280808080f0008410012206290000210a200341c8006a41086a2204200641086a2900003703002003200a3703482006102f20082003290348220a370300200341a8016a41086a2002290300370300200341a8016a41106a200a370300200341a8016a41186a2004290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220a422088a741057421062002410120021b2209210202400340024020060d00410021050c020b4101210520034188016a2002460d01200641606a2106200220034188016a412010ea062104200241206a210220040d000b0b0240200aa7450d002009102f0b2005450d08200341003602d801200342013703d0012007200341d0016a10910120032802d401210620034180046a41186a220420033502d80142208620032802d001220bad841003220241186a29000037030020034180046a41106a2205200241106a29000037030020034180046a41086a2209200241086a29000037030020032002290000370380042002102f02402006450d00200b102f0b200341d0016a41186a2004290300370300200341d0016a41106a2005290300370300200341d0016a41086a200929030037030020032003290380043703d00141f2cbc700ad4280808080b0028410012202290000210a200341e8006a41086a200241086a2900003703002003200a3703682002102f41f0abc800ad4280808080a0018410012202290000210a200341f8006a41086a200241086a2900003703002003200a3703782002102f4120102d2202450d07200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad428080808080048410032206290000210a200641086a290000210d200641106a290000211b200341c8006a41186a2204200641186a290000370300200341c8006a41106a2205201b370300200341c8006a41086a2209200d3703002003200a3703482006102f2002102f41c000102d2202450d0720022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a2009290300370000200241306a2005290300370000200241386a2004290300370000200341186a200241c00041c8e1ca004100410010b501200328021821062002102f20064101460d09200e4102490d034200210d200341c8006a41186a220f4200370300200341c8006a41106a22064200370300200341c8006a41086a220242003703002003420037034841f2cbc700ad4280808080b00284220a10012205290000211b200341e8006a41086a2204200541086a2900003703002003201b3703682005102f20022004290300370300200320032903683703484188a3ca00ad4280808080d00184221b10012209290000211c200341f8006a41086a2205200941086a2900003703002003201c3703782009102f20062003290378221c370300200341a8016a41086a22092002290300370300200341a8016a41106a220b201c370300200341a8016a41186a220c2005290300370300200320032903483703a801200341106a200341a8016a41201095012003280214211120032802102112200f4200370300200642003703002002420037030020034200370348200a10012210290000211c2004201041086a2900003703002003201c3703682010102f2002200429030037030020032003290368370348201b10012210290000211c2005201041086a2900003703002003201c3703782010102f20062003290378221c37030020092002290300370300200b201c370300200c2005290300370300200320032903483703a801200341086a200341a8016a412010950120032802082110200328020c2113200f4200370300200642003703002002420037030020034200370348200a1001220f290000211c2004200f41086a2900003703002003201c370368200f102f2002200429030037030020032003290368370348201b10012204290000211b2005200441086a2900003703002003201b3703782004102f20062003290378221b37030020092002290300370300200b201b370300200c2005290300370300200320032903483703a801410121062003201341016a410120101b3602d001200341a8016aad4280808080800484200341d0016aad4280808080c000841004200341d0016a41186a220f4200370300200341d0016a41106a22104200370300200341d0016a41086a22044200370300200342003703d001200a10012205290000210a2004200541086a2900003703002003200a3703d0012005102f41e2dec700ad428080808090018410012205290000210a2002200541086a2900003703002003200a3703482005102f20082003290348370000200841086a200229030037000020092004290300370300200b2010290300370300200c200f290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032802d00122050d0141002102410021040c020b200041023a00000c100b20032902d401220d422088a72104200da72102200521060b200c20034180046a41186a290300370300200b20034180046a41106a290300370300200920034180046a41086a29030037030020032003290380043703a8010240024020042002460d002002210c0c010b02402002200da7220c470d00200241016a22042002490d0b200241017422052004200520044b1b220441ffffff3f712004470d0b200441057422044100480d0b0240024020020d002004102d21060c010b200620024105742004103121060b2006450d06200d42808080807083210d2004410576210c0b200d422088a721040b200620044105746a220220032903a801370000200241186a200341a8016a41186a2209290300370000200241106a200341a8016a41106a2205290300370000200241086a200341a8016a41086a2202290300370000200942003703002005420037030020024200370300200342003703a80141f2cbc700ad4280808080b0028410012209290000210a200341e8006a41086a220b200941086a2900003703002003200a3703682009102f2002200b290300370300200320032903683703a80141e2dec700ad428080808090018410012209290000210a200341f8006a41086a220b200941086a2900003703002003200a3703782009102f20052003290378220a370300200341c8006a41086a2002290300370300200341c8006a41106a200a370300200341c8006a41186a200b290300370300200320032903a8013703480240024020060d00200341c8006aad428080808080048410050c010b200341203602d4012003200341c8006a3602d0012006200441016a200341d0016a108301200c450d002006102f0b200341d0016a200741b00210e8061a200341a8016a41186a220620034180046a41186a290300370300200341a8016a41106a220420034180046a41106a290300370300200341a8016a41086a220520034180046a41086a29030037030020032003290380043703a80141f2cbc700ad4280808080b0028410012202290000210a200341e8006a41086a200241086a2900003703002003200a3703682002102f41f0abc800ad4280808080a0018410012202290000210a200341f8006a41086a200241086a2900003703002003200a3703782002102f4120102d2202450d04200220032903a801370000200241186a2006290300370000200241106a2004290300370000200241086a20052903003700002002ad428080808080048410032206290000210a200641086a290000210d200641106a290000211b200341c8006a41186a200641186a290000370300200341c8006a41106a201b370300200341c8006a41086a200d3703002003200a3703482006102f2002102f41c000102d2202450d0420022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a200341c8006a41086a2206290300370000200241306a200341c8006a41106a290300370000200241386a200341c8006a41186a290300370000200341003602b001200342013703a801200341d0016a200341a8016a10910120032802ac0121042002ad428080808080088420033502b00142208620032802a8012205ad84100402402004450d002005102f0b2002102f200341d0016a108e01200341d0016a41186a22054200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d001418de6c300ad4280808080e0008410012204290000210a2002200441086a2900003703002003200a3703d0012004102f419ce6c300ad4280808080e0008410012204290000210a2006200441086a2900003703002003200a3703482004102f20082003290348370000200841086a2006290300370000200341a8016a41086a2002290300370300200341a8016a41106a2009290300370300200341a8016a41186a2005290300370300200320032903d0013703a8012003200341a8016a412010950120032802042102200328020021044120102d2206450d042006200329038801370000200641186a20034188016a41186a290300370000200641106a20034188016a41106a290300370000200641086a20034188016a41086a290300370000200341ec016a4100360200200341dc016a428180808010370200200320024180e5086a4180e50820041b3602f001200342013702e401200320063602d8012003200e3602d40120032011410020121b22053602d001200341a8016a41186a220420034180046a41186a290300370300200341a8016a41106a220820034180046a41106a290300370300200341a8016a41086a220920034180046a41086a29030037030020032003290380043703a80141f2cbc700ad4280808080b0028410012202290000210a200341e8006a41086a200241086a2900003703002003200a3703682002102f41f2dec700ad4280808080e0008410012202290000210a200341f8006a41086a200241086a2900003703002003200a3703782002102f4120102d2202450d04200220032903a801370000200241186a2004290300370000200241106a2008290300370000200241086a20092903003700002002ad428080808080048410032204290000210a200441086a290000210d200441106a290000211b200341c8006a41186a200441186a290000370300200341c8006a41106a201b370300200341c8006a41086a200d3703002003200a3703482004102f2002102f41c000102d2202450d0420022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a200341c8006a41086a290300370000200241306a200341c8006a41106a290300370000200241386a200341c8006a41186a290300370000200341c0003602ac01200320023602a801200341d0016a200341a8016a10bd052002102f2006102f200341dd016a20034188016a41086a290300370000200341e5016a20034188016a41106a290300370000200341ed016a20034188016a41186a290300370000200341f5016a200329038004370000200341fd016a20034180046a41086a29030037000020034185026a20034180046a41106a2903003700002003418d026a20034180046a41186a2903003700002003419c026a200e36020020034198026a2005360200200341003a00d401200341073a00d00120032003290388013700d501200341d0016a21020c010b200341d0016a41186a22044200370300200341d0016a41106a22054200370300200341d0016a41086a22024200370300200342003703d00141f2cbc700ad4280808080b0028410012206290000210a2002200641086a2900003703002003200a3703d0012006102f41ebdec700ad4280808080f0008410012206290000210a200341c8006a41086a2209200641086a2900003703002003200a3703482006102f20082003290348370000200841086a2009290300370000200341a8016a41086a2002290300370300200341a8016a41106a2005290300370300200341a8016a41186a2004290300370300200320032903d0013703a801200341286a200341a8016a412010aa0202400240200328022822060d00410021020c010b200329022c220a422088a72102200aa7450d002006102f0b200341d0016a200741b00210e8061a200341b4016a2002360200200341a8016a41086a4101360200200341003a00ac01200341013a00a801200341c8006a200341d0016a200341a8016a108b0120032d00482102200341dd016a20034180046a41086a290300370000200341e5016a20034190046a290300370000200341ed016a20034198046a290300370000200341043a00d401200341f5016a20024104463a0000200341073a00d00120032003290380043700d501200341d0016a21020b4100210641c8e1ca0041002002108c01200041043a00002007102f0c0d0b200141216a2d0000210e200141246a280200211a20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a290100210a200241196a2d00002104200241186a2d00002105200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210b200241116a2d0000210c200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211941012106024020022d00000d0020022d000141014721060b2003200a3701e801200320043a00e701200320053a00e601200320073b01e401200320083a00e301200320093a00e2012003200b3b01e0012003200c3a00df012003200f3a00de01200320103b01dc01200320113a00db01200320123a00da01200320133b01d801200320143a00d701200320153a00d601200320163b01d401200320173a00d301200320183a00d201200320193b01d00120060d0420034180046a41186a200341d0016a41186a220629010037030020034180046a41106a200341d0016a41106a220729010037030020034180046a41086a200341d0016a41086a2202290100370300200320032901d00137038004200642003703002007420037030020024200370300200342003703d00141f2cbc700ad4280808080b0028410012206290000210a2002200641086a2900003703002003200a3703d0012006102f41ebdec700ad4280808080f0008410012206290000210a200341c8006a41086a2204200641086a2900003703002003200a3703482006102f20072003290348220a370300200341a8016a41086a2002290300370300200341a8016a41106a200a370300200341a8016a41186a2004290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220a422088a741057421062002410120021b2208210202400340024020060d00410021050c020b4101210520034180046a2002460d01200641606a2106200220034180046a412010ea062104200241206a210220040d000b0b0240200aa7450d002008102f0b024002402005450d00200341d0016a20034188016a10c605024020032802d8012209450d00200341e8016a280200210b200341e4016a280200211020032802dc01210c20032802d001201a460d02410a210241a7d5c7002106410321040c0c0b20004183163b0100200041086a410f360200200041046a41b1d5c700360200200041026a41023a00000c0c0b20004183163b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c0b0b200341f0016a2802002114200341ec016a280200210f20032802d40121134100210641002104410021120240200341e0016a2802002211450d002011410574210541002104200921020240034020034180046a2002460d012004200220034180046a412010ea0622084100476a21042008450d01200241206a2102200541606a22050d000b410021120c010b410121120b410021020240200f450d00200f410574210541002106201021020240034020034180046a2002460d012006200220034180046a412010ea0622084100476a21062008450d01200241206a2102200541606a22050d000b410021020c010b410121020b024002400240200e41ff01710d002002450d010c0b0b20120d0a200341286a41186a220820034180046a41186a290300370300200341286a41106a221220034180046a41106a290300370300200341286a41086a221520034180046a41086a2903003703002003200329038004370328024002402011200c460d00200c21052011210c0c010b200c41016a2204200c490d09200c41017422052004200520044b1b220441ffffff3f712004470d09200441057422044100480d0902400240200c0d002004102d21090c010b2009200c4105742004103121090b2009450d04200441057621050b2009200c4105746a22042003290328370000200441186a2008290300370000200441106a2012290300370000200441086a2015290300370000201141016a21112002450d01200f20064d0d072010200f417f6a220f4105746a2202290000210a2002290008210d2002290010211b201020064105746a220641186a200241186a2900003700002006201b3700102006200d3700082006200a3700000c010b200341c8006a41186a220620034180046a41186a290300370300200341c8006a41106a220520034180046a41106a290300370300200341c8006a41086a220820034180046a41086a290300370300200320032903800437034802400240200f200b460d00200b2115200f210b0c010b200b41016a2202200b490d08200b41017422152002201520024b1b220241ffffff3f712002470d08200241057422024100480d0802400240200b0d002002102d21100c010b2010200b4105742002103121100b2010450d03200241057621150b2010200b4105746a22022003290348370000200241186a2006290300370000200241106a2005290300370000200241086a2008290300370000200f41016a210f02402012450d00201120044d0d0920092011417f6a22114105746a2202290000210a2002290008210d2002290010211b200920044105746a220641186a200241186a2900003700002006201b3700102006200d3700082006200a3700000b200c21052015210b0b200341f5016a200329038801370000200341dd016a20034180046a41086a290300370000200341e5016a20034180046a41106a290300370000200341ed016a20034180046a41186a290300370000200341fd016a20034188016a41086a29030037000020034185026a20034188016a41106a2903003700002003418d026a20034188016a41186a290300370000200341013a00d401200341073a00d00120032003290380043700d5012003419c026a200f36020020034198026a201136020020034195026a200e3a00004100210241c8e1ca004100200341d0016a108c01200341d0016a41186a22084200370300200341d0016a41106a220c4200370300200341d0016a41086a22064200370300200342003703d00141f2cbc700ad4280808080b0028410012204290000210a2006200441086a2900003703002003200a3703d0012004102f41ebdec700ad4280808080f0008410012204290000210a200341c8006a41086a2212200441086a2900003703002003200a3703482004102f20072003290348370000200741086a2012290300370000200341a8016a41086a2006290300370300200341a8016a41106a200c290300370300200341a8016a41186a2008290300370300200320032903d0013703a801200341286a200341a8016a412010aa02024020032802282206450d00200329022c220a422088a72102200aa7450d002006102f0b02400240201120134f22060d0041002002200f6b2204200420024b1b2013490d00200341ec016a200f360200200341d0016a41186a200b360200200341d0016a41106a2011360200200341dc016a2005360200200320143602f001200320103602e401200320093602d801200320133602d4012003201a3602d00141f2cbc700ad4280808080b0028410012202290000210a200341e8006a41086a200241086a2900003703002003200a3703682002102f41f2dec700ad4280808080e0008410012202290000210a200341f8006a41086a200241086a2900003703002003200a3703782002102f4120102d2202450d032002200329038801370000200241186a20034188016a41186a290300370000200241106a20034188016a41106a290300370000200241086a20034188016a41086a2903003700002002ad428080808080048410032206290000210a200641086a290000210d200641106a290000211b200341a8016a41186a200641186a290000370300200341a8016a41106a201b370300200341a8016a41086a200d3703002003200a3703a8012006102f2002102f41c000102d2202450d0320022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a290300370000200220032903a801370020200241286a200341a8016a41086a290300370000200241306a200341b8016a290300370000200241386a200341a8016a41186a290300370000200341c0003602ac01200320023602a801200341d0016a200341a8016a10bd052002102f02402005450d002009102f0b200b450d012010102f0c010b200341ec016a200f360200200341d0016a41186a200b360200200341d0016a41106a2011360200200341dc016a2005360200200320143602f001200320103602e401200320093602d8012003201a3602d001200320133602d401200341a8016a41186a20034188016a41186a290300370300200341a8016a41106a20034188016a41106a290300370300200341a8016a41086a20034188016a41086a29030037030020032003290388013703a80120062002200341d0016a200341a8016a10c7050b200041043a00000c0a0b200141246a280200210620034198046a200141196a29000037030020034190046a200141116a29000037030020034188046a200141096a2900003703002003200129000137038004024002400240024020022d00000d0020022d00014101470d00200341d0016a20034180046a10c605024020032802d8012207450d00200341d0016a41186a22022802002109200341e4016a280200210f20032802dc01210b20032802d0012006460d02410a210241a7d5c7002106410321040c030b20004183163b0100200041086a410f360200200041046a41b1d5c700360200200041026a41023a00000c0d0b200041023a00000c0c0b200341d0016a41206a2802002111200341ec016a2802002112200341d0016a41106a220c280200211020032802d401211320024200370300200c420037030041082102200341d0016a41086a22044200370300200342003703d001418de6c300ad4280808080e0008410012205290000210a2004200541086a2900003703002003200a3703d0012005102f419ce6c300ad4280808080e0008410012205290000210a200341c8006a41086a2208200541086a2900003703002003200a3703482005102f200c2003290348220a370300200341a8016a41086a2004290300370300200341a8016a41106a200a370300200341a8016a41186a2008290300370300200320032903d0013703a801200341206a200341a8016a41201095012003280224410020032802201b20114f0d014180d5c7002106410621040b20004183163b0100200041086a2002360200200041046a2006360200200041026a20043a00000240200b450d002007102f0b2009450d0a200f102f0c0a0b200341a8016a41186a22084200370300200341a8016a41106a22044200370300200341a8016a41086a22024200370300200342003703a80141f2cbc700ad4280808080b0028410012205290000210a200341e8006a41086a2214200541086a2900003703002003200a3703682005102f20022014290300370300200320032903683703a80141fbd4c700ad4280808080d0008410012205290000210a200341f8006a41086a2214200541086a2900003703002003200a3703782005102f20042003290378220a370300200341c8006a41086a2002290300370300200341c8006a41106a200a370300200341c8006a41186a2014290300370300200320032903a801370348200341d0016a200341c8006a412010ad0220032d00d00121052008200341e9016a2900003703002004200341e1016a2900003703002002200341d9016a290000370300200320032900d1013703a8010240024020054101460d00410021080c010b200341286a41186a2008290300220a370300200341286a41106a2004290300220d370300200341286a41086a2002290300221b370300200320032903a801221c370328200341d0016a41186a200a370300200341d0016a41106a200d370300200341d0016a41086a201b3703002003201c3703d00120104105742104200721020340024020040d00410021080c020b41012108200341d0016a2002460d01200441606a21042002200341d0016a412010ea062105200241206a210220050d000b0b200341d0016a41186a22054200370300200341d0016a41106a22144200370300200341d0016a41086a22024200370300200342003703d00141f2cbc700ad4280808080b0028410012204290000210a2002200441086a2900003703002003200a3703d0012004102f41ebdec700ad4280808080f0008410012204290000210a200341c8006a41086a2215200441086a2900003703002003200a3703482004102f200c2003290348370000200c41086a2015290300370000200341a8016a41086a2002290300370300200341a8016a41106a2014290300370300200341a8016a41186a2005290300370300200320032903d0013703a80120034188016a200341a8016a412010aa020240024020032802880122040d00410021020c010b200329028c01220a422088a72102200aa7450d002004102f0b200341dd016a20034180046a41086a2204290300370000200341e5016a20034180046a41106a2205290300370000200341ed016a20034180046a41186a220c290300370000200341fc016a41002002201220106a6b221420081b20126a360200200341f8016a2014410020081b20106a2208360200200341063a00d401200341073a00d00120032003290380043700d50141c8e1ca004100200341d0016a108c01200341ec016a2012360200200341d0016a41186a2009360200200341d0016a41106a2010360200200341dc016a200b360200200320113602f0012003200f3602e401200320073602d801200320063602d001200320133602d401200341a8016a41186a200c290300370300200341a8016a41106a2005290300370300200341a8016a41086a200429030037030020032003290380043703a801200820134f2002200341d0016a200341a8016a10c705200041043a00000c090b1036000b20004183163b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c080b20004183163b0100200041086a4111360200200041046a41c0d5c700360200200041026a41013a00000c070b200041023a00000c050b419cc3ca002006200f103b000b1038000b419cc3ca0020042011103b000b410d2102419ad5c7002106410421040b20004183163b0100200041086a2002360200200041046a2006360200200041026a20043a00000240200c450d002009102f0b200b450d002010102f0b41012105410121040c030b2007108e012007102f410021060b41012105410121040c020b2007108e012007102f41002104410121050b410121060b024020012d0000417f6a220241024b0d0002400240024020020e03000102000b2005450d02200141286a280200450d02200141246a280200102f0c020b2004450d01200141046a2802002202108e012002102f0c010b2006450d00200141086a2802002202108e012002102f0b200341a0046a24000b8e6906097f017e017f017e0c7f027e230041a0046b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341e4016a4101360200200342013702d401200341b4d8c9003602d001200341043602ac01200341fcdbc9003602a8012003200341a8016a3602e001200341d0016a41e8d8c9001043000b2001412c6a2802002104200141286a2802002105200141246a280200210620012d0001210720034188016a41186a22082001411a6a29000037030020034188016a41106a2209200141126a29000037030020034188016a41086a220a2001410a6a2900003703002003200141026a290000370388010240024020022d000120022d0000410047720d0020062004108701200341d0016a41186a4200370300200341d0016a41106a220b4200370300200341d0016a41086a22024200370300200342003703d00141dfcbc700ad4280808080b00284220c1001220d290000210e2002200d41086a2900003703002003200e3703d001200d102f41ebdec700ad4280808080f000841001220d290000210e200341c8006a41086a220f200d41086a2900003703002003200e370348200d102f200b2003290348220e370300200341a8016a41086a2002290300370300200341a8016a41106a200e370300200341a8016a41186a200f290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa022006200420032802d0012202410120021b220d20032902d401420020021b220e422088a7108a0320034180046a41186a200829030037030020034180046a41106a200929030037030020034180046a41086a200a29030037030020032003290388013703800402400240200741ff01710d00200341a8016a41186a4200370300200341a8016a41106a22074200370300200341a8016a41086a22024200370300200342003703a801200c10012204290000210c200341e8006a41086a2208200441086a2900003703002003200c3703682004102f20022008290300370300200320032903683703a80141fbd4c700ad4280808080d0008410012204290000210c200341f8006a41086a2208200441086a2900003703002003200c3703782004102f20072003290378220c370300200341286a41086a2002290300370300200341286a41106a200c370300200341286a41186a2008290300370300200320032903a801370328200341286aad428080808080048410050c010b200341a8016a41186a220820034180046a41186a290300370300200341a8016a41106a220920034180046a41106a290300370300200341a8016a41086a220a20034180046a41086a29030037030020032003290380043703a801200341c8006a41186a4200370300200341c8006a41106a220b4200370300200341c8006a41086a2204420037030020034200370348200c10012207290000210c200341286a41086a2202200741086a2900003703002003200c3703282007102f200420022903003703002003200329032837034841fbd4c700ad4280808080d0008410012207290000210c2002200741086a2900003703002003200c3703282007102f200b2003290328220c370300200341d0016a41086a2004290300370300200341d0016a41106a200c370300200341d0016a41186a2002290300370300200320032903483703d0014120102d2202450d07200220032903a801370000200241186a2008290300370000200241106a2009290300370000200241086a200a290300370000200341d0016aad42808080808004842002ad428080808080048410042002102f0b0240200ea7450d00200d102f0b02402005450d002006102f0b200041043a00000c010b200041023a00002005450d002006102f0b41012105410021040c110b200141046a280200210720032002411a6a2901003703c0012003200241026a2901003703a80120032002410a6a2901003703b0012003200241126a2901003703b8010240024020022d00014101470d0020022d000041ff01710d0020034188016a41186a200341a8016a41186a220529030037030020034188016a41106a200341a8016a41106a220429030037030020034188016a41086a200341a8016a41086a2208290300370300200320032903a80137038801200341d0016a41186a4200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d00141dfcbc700ad4280808080b0028410012206290000210c2002200641086a2900003703002003200c3703d0012006102f41ebdec700ad4280808080f0008410012206290000210c200341c8006a41086a220a200641086a2900003703002003200c3703482006102f20092003290348220c370300200820022903003703002004200c3703002005200a290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220c422088a741057421062002410120021b2208210202400340024020060d00410021040c020b4101210420034188016a2002460d01200641606a2106200220034188016a412010ea062105200241206a210220050d000b0b0240200ca7450d002008102f0b2004450d0141002105200341003602d801200342013703d0012007200341d0016a10910120032802d401210620034180046a41186a220820033502d80142208620032802d0012204ad841003220241186a29000037030020034180046a41106a2209200241106a29000037030020034180046a41086a220a200241086a29000037030020032002290000370380042002102f02402006450d002004102f0b200341d0016a200741b00210e8061a200341a8016a410d6a20034188016a41086a290300370000200341a8016a41156a20034188016a41106a290300370000200341a8016a411d6a20034188016a41186a29030037000041012104200341013a00ac0120032003290388013700ad01200341023a00a801200341c8006a200341d0016a200341a8016a108b0120032d00482102200341d0016a410d6a200a290300370000200341d0016a41156a2009290300370000200341d0016a411d6a2008290300370000200341f5016a20024104463a0000200341053a00d401200341083a00d00120032003290380043700d50141c8e1ca004100200341d0016a108c01200041043a00002007102f0c120b200041023a00000c100b20004183183b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c0f0b200141086a2802002107200141046a28020021102002411a6a290100210c200241196a2d00002105200241186a2d00002104200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210d200241116a2d0000210b200241106a2d0000210f2002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002119200241026a2f0100211a41012106024020022d00000d0020022d000141014721060b2003200c370340200320053a003f200320043a003e200320083b013c200320093a003b2003200a3a003a2003200d3b01382003200b3a00372003200f3a0036200320113b0134200320123a0033200320133a0032200320143b0130200320153a002f200320163a002e200320173b012c200320183a002b200320193a002a2003201a3b01280240024002400240024020060d0020034188016a41186a200341286a41186a29030037030020034188016a41106a200341286a41106a29030037030020034188016a41086a200341286a41086a2903003703002003200329032837038801200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d00141dfcbc700ad4280808080b0028410012206290000210c2002200641086a2900003703002003200c3703d0012006102f41ebdec700ad4280808080f0008410012206290000210c200341c8006a41086a2205200641086a2900003703002003200c3703482006102f20082003290348220c370300200341a8016a41086a2002290300370300200341a8016a41106a200c370300200341a8016a41186a2005290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220c422088a741057421062002410120021b2209210202400340024020060d00410021040c020b4101210420034188016a2002460d01200641606a2106200220034188016a412010ea062105200241206a210220050d000b0b0240200ca7450d002009102f0b2004450d08200341003602d801200342013703d0012007200341d0016a10910120032802d401210620034180046a41186a220520033502d80142208620032802d001220aad841003220241186a29000037030020034180046a41106a2204200241106a29000037030020034180046a41086a2209200241086a29000037030020032002290000370380042002102f02402006450d00200a102f0b200341d0016a41186a2005290300370300200341d0016a41106a2004290300370300200341d0016a41086a200929030037030020032003290380043703d00141dfcbc700ad4280808080b0028410012202290000210c200341e8006a41086a200241086a2900003703002003200c3703682002102f41f0abc800ad4280808080a0018410012202290000210c200341f8006a41086a200241086a2900003703002003200c3703782002102f4120102d2202450d07200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad428080808080048410032206290000210c200641086a290000210e200641106a290000211b200341c8006a41186a2205200641186a290000370300200341c8006a41106a2204201b370300200341c8006a41086a2209200e3703002003200c3703482006102f2002102f41c000102d2202450d0720022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a2009290300370000200241306a2004290300370000200241386a2005290300370000200341186a200241c00041c8e1ca004100410010b501200328021821062002102f20064101460d0920104102490d034200210e200341c8006a41186a220b4200370300200341c8006a41106a22064200370300200341c8006a41086a220242003703002003420037034841dfcbc700ad4280808080b00284220c10012204290000211b200341e8006a41086a2205200441086a2900003703002003201b3703682004102f20022005290300370300200320032903683703484188a3ca00ad4280808080d00184221b10012209290000211c200341f8006a41086a2204200941086a2900003703002003201c3703782009102f20062003290378221c370300200341a8016a41086a22092002290300370300200341a8016a41106a220a201c370300200341a8016a41186a220d2004290300370300200320032903483703a801200341106a200341a8016a41201095012003280214211120032802102112200b4200370300200642003703002002420037030020034200370348200c1001220f290000211c2005200f41086a2900003703002003201c370368200f102f2002200529030037030020032003290368370348201b1001220f290000211c2004200f41086a2900003703002003201c370378200f102f20062003290378221c37030020092002290300370300200a201c370300200d2004290300370300200320032903483703a801200341086a200341a8016a41201095012003280208210f200328020c2113200b4200370300200642003703002002420037030020034200370348200c1001220b290000211c2005200b41086a2900003703002003201c370368200b102f2002200529030037030020032003290368370348201b10012205290000211b2004200541086a2900003703002003201b3703782005102f20062003290378221b37030020092002290300370300200a201b370300200d2004290300370300200320032903483703a801410121062003201341016a4101200f1b3602d001200341a8016aad4280808080800484200341d0016aad4280808080c000841004200341d0016a41186a220b4200370300200341d0016a41106a220f4200370300200341d0016a41086a22054200370300200342003703d001200c10012204290000210c2005200441086a2900003703002003200c3703d0012004102f41e2dec700ad428080808090018410012204290000210c2002200441086a2900003703002003200c3703482004102f20082003290348370000200841086a200229030037000020092005290300370300200a200f290300370300200d200b290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032802d00122040d0141002102410021050c020b200041023a00000c100b20032902d401220e422088a72105200ea72102200421060b200d20034180046a41186a290300370300200a20034180046a41106a290300370300200920034180046a41086a29030037030020032003290380043703a8010240024020052002460d002002210d0c010b02402002200ea7220d470d00200241016a22052002490d0b200241017422042005200420054b1b220541ffffff3f712005470d0b200541057422054100480d0b0240024020020d002005102d21060c010b200620024105742005103121060b2006450d06200e42808080807083210e2005410576210d0b200e422088a721050b200620054105746a220220032903a801370000200241186a200341a8016a41186a2209290300370000200241106a200341a8016a41106a2204290300370000200241086a200341a8016a41086a2202290300370000200942003703002004420037030020024200370300200342003703a80141dfcbc700ad4280808080b0028410012209290000210c200341e8006a41086a220a200941086a2900003703002003200c3703682009102f2002200a290300370300200320032903683703a80141e2dec700ad428080808090018410012209290000210c200341f8006a41086a220a200941086a2900003703002003200c3703782009102f20042003290378220c370300200341c8006a41086a2002290300370300200341c8006a41106a200c370300200341c8006a41186a200a290300370300200320032903a8013703480240024020060d00200341c8006aad428080808080048410050c010b200341203602d4012003200341c8006a3602d0012006200541016a200341d0016a108301200d450d002006102f0b200341d0016a200741b00210e8061a200341a8016a41186a220620034180046a41186a290300370300200341a8016a41106a220520034180046a41106a290300370300200341a8016a41086a220420034180046a41086a29030037030020032003290380043703a80141dfcbc700ad4280808080b0028410012202290000210c200341e8006a41086a200241086a2900003703002003200c3703682002102f41f0abc800ad4280808080a0018410012202290000210c200341f8006a41086a200241086a2900003703002003200c3703782002102f4120102d2202450d04200220032903a801370000200241186a2006290300370000200241106a2005290300370000200241086a20042903003700002002ad428080808080048410032206290000210c200641086a290000210e200641106a290000211b200341c8006a41186a200641186a290000370300200341c8006a41106a201b370300200341c8006a41086a200e3703002003200c3703482006102f2002102f41c000102d2202450d0420022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a200341c8006a41086a2206290300370000200241306a200341c8006a41106a290300370000200241386a200341c8006a41186a290300370000200341003602b001200342013703a801200341d0016a200341a8016a10910120032802ac0121052002ad428080808080088420033502b00142208620032802a8012204ad84100402402005450d002004102f0b2002102f200341d0016a108e01200341d0016a41186a22044200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d001418de6c300ad4280808080e0008410012205290000210c2002200541086a2900003703002003200c3703d0012005102f419ce6c300ad4280808080e0008410012205290000210c2006200541086a2900003703002003200c3703482005102f20082003290348370000200841086a2006290300370000200341a8016a41086a2002290300370300200341a8016a41106a2009290300370300200341a8016a41186a2004290300370300200320032903d0013703a8012003200341a8016a412010950120032802042102200328020021054120102d2206450d042006200329038801370000200641186a20034188016a41186a290300370000200641106a20034188016a41106a290300370000200641086a20034188016a41086a290300370000200341ec016a4100360200200341dc016a428180808010370200200320024180e5086a4180e50820051b3602f001200342013702e401200320063602d801200320103602d40120032011410020121b22043602d001200341a8016a41186a220520034180046a41186a290300370300200341a8016a41106a220820034180046a41106a290300370300200341a8016a41086a220920034180046a41086a29030037030020032003290380043703a80141dfcbc700ad4280808080b0028410012202290000210c200341e8006a41086a200241086a2900003703002003200c3703682002102f41f2dec700ad4280808080e0008410012202290000210c200341f8006a41086a200241086a2900003703002003200c3703782002102f4120102d2202450d04200220032903a801370000200241186a2005290300370000200241106a2008290300370000200241086a20092903003700002002ad428080808080048410032205290000210c200541086a290000210e200541106a290000211b200341c8006a41186a200541186a290000370300200341c8006a41106a201b370300200341c8006a41086a200e3703002003200c3703482005102f2002102f41c000102d2202450d0420022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a29030037000020022003290348370020200241286a200341c8006a41086a290300370000200241306a200341c8006a41106a290300370000200241386a200341c8006a41186a290300370000200341c0003602ac01200320023602a801200341d0016a200341a8016a10bd052002102f2006102f200341dd016a20034188016a41086a290300370000200341e5016a20034188016a41106a290300370000200341ed016a20034188016a41186a290300370000200341f5016a200329038004370000200341fd016a20034180046a41086a29030037000020034185026a20034180046a41106a2903003700002003418d026a20034180046a41186a2903003700002003419c026a201036020020034198026a2004360200200341003a00d401200341083a00d00120032003290388013700d501200341d0016a21020c010b200341d0016a41186a22054200370300200341d0016a41106a22044200370300200341d0016a41086a22024200370300200342003703d00141dfcbc700ad4280808080b0028410012206290000210c2002200641086a2900003703002003200c3703d0012006102f41ebdec700ad4280808080f0008410012206290000210c200341c8006a41086a2209200641086a2900003703002003200c3703482006102f20082003290348370000200841086a2009290300370000200341a8016a41086a2002290300370300200341a8016a41106a2004290300370300200341a8016a41186a2005290300370300200320032903d0013703a801200341286a200341a8016a412010aa0202400240200328022822060d00410021020c010b200329022c220c422088a72102200ca7450d002006102f0b200341d0016a200741b00210e8061a200341b4016a2002360200200341a8016a41086a4101360200200341003a00ac01200341023a00a801200341c8006a200341d0016a200341a8016a108b0120032d00482102200341dd016a20034180046a41086a290300370000200341e5016a20034190046a290300370000200341ed016a20034198046a290300370000200341043a00d401200341f5016a20024104463a0000200341083a00d00120032003290380043700d501200341d0016a21020b4100210641c8e1ca0041002002108c01200041043a00002007102f0c0d0b200141216a2d00002110200141246a280200211a20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a290100210c200241196a2d00002105200241186a2d00002104200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210d200241106a2d0000210b2002410e6a2f0100210f2002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211941012106024020022d00000d0020022d000141014721060b2003200c3701e801200320053a00e701200320043a00e601200320073b01e401200320083a00e301200320093a00e2012003200a3b01e0012003200d3a00df012003200b3a00de012003200f3b01dc01200320113a00db01200320123a00da01200320133b01d801200320143a00d701200320153a00d601200320163b01d401200320173a00d301200320183a00d201200320193b01d00120060d0420034180046a41186a200341d0016a41186a220629010037030020034180046a41106a200341d0016a41106a220729010037030020034180046a41086a200341d0016a41086a2202290100370300200320032901d00137038004200642003703002007420037030020024200370300200342003703d00141dfcbc700ad4280808080b0028410012206290000210c2002200641086a2900003703002003200c3703d0012006102f41ebdec700ad4280808080f0008410012206290000210c200341c8006a41086a2205200641086a2900003703002003200c3703482006102f20072003290348220c370300200341a8016a41086a2002290300370300200341a8016a41106a200c370300200341a8016a41186a2005290300370300200320032903d0013703a801200341d0016a200341a8016a412010aa0220032902d401420020032802d00122021b220c422088a741057421062002410120021b2208210202400340024020060d00410021040c020b4101210420034180046a2002460d01200641606a2106200220034180046a412010ea062105200241206a210220050d000b0b0240200ca7450d002008102f0b024002402004450d00200341d0016a20034188016a10c405024020032802d8012209450d00200341e8016a280200210a200341e4016a280200210f20032802dc01210d20032802d001201a460d02410a210241a7d5c7002106410321050c0c0b20004183183b0100200041086a410f360200200041046a41b1d5c700360200200041026a41023a00000c0c0b20004183183b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c0b0b200341f0016a2802002114200341ec016a280200210b20032802d40121134100210641002105410021120240200341e0016a2802002211450d002011410574210441002105200921020240034020034180046a2002460d012005200220034180046a412010ea0622084100476a21052008450d01200241206a2102200441606a22040d000b410021120c010b410121120b410021020240200b450d00200b410574210441002106200f21020240034020034180046a2002460d012006200220034180046a412010ea0622084100476a21062008450d01200241206a2102200441606a22040d000b410021020c010b410121020b024002400240201041ff01710d002002450d010c0b0b20120d0a200341286a41186a220820034180046a41186a290300370300200341286a41106a221220034180046a41106a290300370300200341286a41086a221520034180046a41086a2903003703002003200329038004370328024002402011200d460d00200d21042011210d0c010b200d41016a2205200d490d09200d41017422042005200420054b1b220541ffffff3f712005470d09200541057422054100480d0902400240200d0d002005102d21090c010b2009200d4105742005103121090b2009450d04200541057621040b2009200d4105746a22052003290328370000200541186a2008290300370000200541106a2012290300370000200541086a2015290300370000201141016a21112002450d01200b20064d0d07200f200b417f6a220b4105746a2202290000210c2002290008210e2002290010211b200f20064105746a220641186a200241186a2900003700002006201b3700102006200e3700082006200c3700000c010b200341c8006a41186a220620034180046a41186a290300370300200341c8006a41106a220420034180046a41106a290300370300200341c8006a41086a220820034180046a41086a290300370300200320032903800437034802400240200b200a460d00200a2115200b210a0c010b200a41016a2202200a490d08200a41017422152002201520024b1b220241ffffff3f712002470d08200241057422024100480d0802400240200a0d002002102d210f0c010b200f200a41057420021031210f0b200f450d03200241057621150b200f200a4105746a22022003290348370000200241186a2006290300370000200241106a2004290300370000200241086a2008290300370000200b41016a210b02402012450d00201120054d0d0920092011417f6a22114105746a2202290000210c2002290008210e2002290010211b200920054105746a220641186a200241186a2900003700002006201b3700102006200e3700082006200c3700000b200d21042015210a0b200341f5016a200329038801370000200341e5016a20034180046a41106a290300370000200341ed016a20034180046a41186a29030037000020034185026a20034188016a41106a2903003700002003418d026a20034188016a41186a290300370000200341083a00d001200341dd016a20034180046a41086a290300370000200341fd016a20034188016a41086a290300370000200341013a00d40120032003290380043700d5012003419c026a200b36020020034198026a201136020020034195026a20103a00004100210241c8e1ca004100200341d0016a108c01200341d0016a41186a22084200370300200341d0016a41106a220d4200370300200341d0016a41086a22064200370300200342003703d00141dfcbc700ad4280808080b0028410012205290000210c2006200541086a2900003703002003200c3703d0012005102f41ebdec700ad4280808080f0008410012205290000210c200341c8006a41086a2212200541086a2900003703002003200c3703482005102f20072003290348370000200741086a2012290300370000200341a8016a41086a2006290300370300200341a8016a41106a200d290300370300200341a8016a41186a2008290300370300200320032903d0013703a801200341286a200341a8016a412010aa02024020032802282206450d00200329022c220c422088a72102200ca7450d002006102f0b02400240201120134f22060d0041002002200b6b2205200520024b1b2013490d00200341ec016a200b360200200341d0016a41186a200a360200200341d0016a41106a2011360200200341dc016a2004360200200320143602f0012003200f3602e401200320093602d801200320133602d4012003201a3602d00141dfcbc700ad4280808080b0028410012202290000210c200341e8006a41086a200241086a2900003703002003200c3703682002102f41f2dec700ad4280808080e0008410012202290000210c200341f8006a41086a200241086a2900003703002003200c3703782002102f4120102d2202450d032002200329038801370000200241186a20034188016a41186a290300370000200241106a20034188016a41106a290300370000200241086a20034188016a41086a2903003700002002ad428080808080048410032206290000210c200641086a290000210e200641106a290000211b200341a8016a41186a200641186a290000370300200341a8016a41106a201b370300200341a8016a41086a200e3703002003200c3703a8012006102f2002102f41c000102d2202450d0320022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a290300370000200220032903a801370020200241286a200341a8016a41086a290300370000200241306a200341b8016a290300370000200241386a200341a8016a41186a290300370000200341c0003602ac01200320023602a801200341d0016a200341a8016a10bd052002102f02402004450d002009102f0b200a450d01200f102f0c010b200341ec016a200b360200200341d0016a41186a200a360200200341d0016a41106a2011360200200341dc016a2004360200200320143602f0012003200f3602e401200320093602d8012003201a3602d001200320133602d401200341a8016a41186a20034188016a41186a290300370300200341a8016a41106a20034188016a41106a290300370300200341a8016a41086a20034188016a41086a29030037030020032003290388013703a80120062002200341d0016a200341a8016a10c5050b200041043a00000c0a0b200141246a280200210620034198046a200141196a29000037030020034190046a200141116a29000037030020034188046a200141096a2900003703002003200129000137038004024002400240024020022d00000d0020022d00014101470d00200341d0016a20034180046a10c405024020032802d8012207450d00200341d0016a41186a22022802002109200341e4016a280200210b20032802dc01210a20032802d0012006460d02410a210241a7d5c7002106410321050c030b20004183183b0100200041086a410f360200200041046a41b1d5c700360200200041026a41023a00000c0d0b200041023a00000c0c0b200341d0016a41206a2802002111200341ec016a2802002112200341d0016a41106a220d280200210f20032802d401211320024200370300200d420037030041082102200341d0016a41086a22054200370300200342003703d001418de6c300ad4280808080e0008410012204290000210c2005200441086a2900003703002003200c3703d0012004102f419ce6c300ad4280808080e0008410012204290000210c200341c8006a41086a2208200441086a2900003703002003200c3703482004102f200d2003290348220c370300200341a8016a41086a2005290300370300200341a8016a41106a200c370300200341a8016a41186a2008290300370300200320032903d0013703a801200341206a200341a8016a41201095012003280224410020032802201b20114f0d014180d5c7002106410621050b20004183183b0100200041086a2002360200200041046a2006360200200041026a20053a00000240200a450d002007102f0b2009450d0a200b102f0c0a0b200341a8016a41186a22084200370300200341a8016a41106a22054200370300200341a8016a41086a22024200370300200342003703a80141dfcbc700ad4280808080b0028410012204290000210c200341e8006a41086a2214200441086a2900003703002003200c3703682004102f20022014290300370300200320032903683703a80141fbd4c700ad4280808080d0008410012204290000210c200341f8006a41086a2214200441086a2900003703002003200c3703782004102f20052003290378220c370300200341c8006a41086a2002290300370300200341c8006a41106a200c370300200341c8006a41186a2014290300370300200320032903a801370348200341d0016a200341c8006a412010ad0220032d00d00121042008200341e9016a2900003703002005200341e1016a2900003703002002200341d9016a290000370300200320032900d1013703a8010240024020044101460d00410021080c010b200341286a41186a2008290300220c370300200341286a41106a2005290300220e370300200341286a41086a2002290300221b370300200320032903a801221c370328200341d0016a41186a200c370300200341d0016a41106a200e370300200341d0016a41086a201b3703002003201c3703d001200f4105742105200721020340024020050d00410021080c020b41012108200341d0016a2002460d01200541606a21052002200341d0016a412010ea062104200241206a210220040d000b0b200341d0016a41186a22044200370300200341d0016a41106a22144200370300200341d0016a41086a22024200370300200342003703d00141dfcbc700ad4280808080b0028410012205290000210c2002200541086a2900003703002003200c3703d0012005102f41ebdec700ad4280808080f0008410012205290000210c200341c8006a41086a2215200541086a2900003703002003200c3703482005102f200d2003290348370000200d41086a2015290300370000200341a8016a41086a2002290300370300200341a8016a41106a2014290300370300200341a8016a41186a2004290300370300200320032903d0013703a80120034188016a200341a8016a412010aa020240024020032802880122050d00410021020c010b200329028c01220c422088a72102200ca7450d002005102f0b200341e5016a20034180046a41106a2205290300370000200341ed016a20034180046a41186a2204290300370000200341083a00d001200341dd016a20034180046a41086a220d290300370000200341fc016a410020022012200f6a6b221420081b20126a360200200341f8016a2014410020081b200f6a2208360200200341063a00d40120032003290380043700d50141c8e1ca004100200341d0016a108c01200341ec016a2012360200200341d0016a41186a2009360200200341d0016a41106a200f360200200341dc016a200a360200200320113602f0012003200b3602e401200320073602d801200320063602d001200320133602d401200341a8016a41186a2004290300370300200341a8016a41106a2005290300370300200341a8016a41086a200d29030037030020032003290380043703a801200820134f2002200341d0016a200341a8016a10c505200041043a00000c090b1036000b20004183183b0100200041086a4109360200200041046a41d1d5c700360200200041026a41003a00000c080b20004183183b0100200041086a4111360200200041046a41c0d5c700360200200041026a41013a00000c070b200041023a00000c050b419cc3ca002006200b103b000b1038000b419cc3ca0020052011103b000b410d2102419ad5c7002106410421050b20004183183b0100200041086a2002360200200041046a2006360200200041026a20053a00000240200d450d002009102f0b200a450d00200f102f0b41012104410121050c030b2007108e012007102f410021060b41012104410121050c020b2007108e012007102f41002105410121040b410121060b024020012d0000417f6a220241024b0d0002400240024020020e03000102000b2004450d02200141286a280200450d02200141246a280200102f0c020b2005450d01200141046a2802002202108e012002102f0c010b2006450d00200141086a2802002202108e012002102f0b200341a0046a24000bef7405037f027e127f037e047f23004190046b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e0700010203040506000b200341e4016a4101360200200342013702d401200341b4d8c9003602d00120034104360244200341fcdbc9003602402003200341c0006a3602e001200341d0016a41e8d8c9001043000b200141086a2802002104200128020421050240024020022d00000d0020022d00014101470d00200141186a2903002106200141106a29030021072001410c6a2802002108200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211920032002411a6a290100370330200320013a002f200320093a002e2003200a3b012c2003200b3a002b2003200c3a002a2003200d3b01282003200e3a00272003200f3a0026200320103b0124200320113a0023200320123a0022200320133b0120200320143a001f200320153a001e200320163b011c200320173a001b200320183a001a200320193b011820034190016a41186a420037030020034190016a41106a2201420037030020034190016a41086a22024200370300200342003703900141bd98ca00ad428080808080028410012209290000211a200341c0006a41086a220a200941086a2900003703002003201a3703402009102f2002200a2903003703002003200329034037039001418c91c700ad4280808080a0018410012209290000211a200341d0016a41086a220b200941086a2900003703002003201a3703d0012009102f200120032903d001221a370300200341b0016a41086a2002290300370300200341b0016a41106a201a370300200341b0016a41186a200b29030037030020032003290390013703b001200341c0006a200341b0016aad4280808080800484221a10021073024002400240024020032802402202450d00200328024421092003200a2802003602d401200320023602d001200341106a200341d0016a10e6012003280210450d014100210d0c020b200342003702d401200341013602d001200341d0016a10f103210d0c020b2003280214210d0b2009450d002002102f0b20034190016a41186a220b420037030020034190016a41106a220c420037030020034190016a41086a22024200370300200342003703900141bd98ca00ad428080808080028410012209290000211b200341c0006a41086a220a200941086a2900003703002003201b3703402009102f2002200a290300370300200320032903403703900141ebdec700ad4280808080f0008410012209290000211b200341d0016a41086a220a200941086a2900003703002003201b3703d0012009102f200120032903d001370000200141086a200a290300370000200341b0016a41086a2002290300370300200341b0016a41106a200c290300370300200341b0016a41186a200b29030037030020032003290390013703b001200341d0016a201a100210734100210241002101024020032802d0012209450d0020032802d401210b2003200a28020036024420032009360240200341086a200341c0006a10e601024002402003280208450d00410021010c010b200328020c21010b200b450d002009102f0b410c21092001200d6a22010d0141f388c70021010c170b200041023a00000c170b0240200820014d0d0041e088c7002101410221020c160b0240200841104d0d004114210941cc88c7002101410321020c160b024020080d004107210941ec88c7002101410121020c160b02402007428180e983b1de165441002006501b450d00410a210941c288c7002101410421020c160b0240200341186a10b3050d00200342003703b8032003428080e983b1de163703b0032003200341186a360280032003200341186a3602d8022003200341d8026a3602d801200320034180036a3602d4012003200341b0036a3602d001200341c0006a200341186a200341d0016a109401024020032802404101470d0020032d00444104460d01410f210941b388c7002101410521020c170b200341c0006a41086a2903004201520d00200341c0006a41106a290300211a20032802d802210120034188026a200341c0006a41186a29030037030020034180026a201a370300200341d0016a41086a41003a0000200341d9016a2001290000370000200341e1016a200141086a290000370000200341e9016a200141106a290000370000200341f1016a200141186a290000370000200341033a00d00141c8e1ca004100200341d0016a108c010b200341d0016a200341186a108d02200342f0d0c9abc6add9b1f400370338200341386a200341186a427f20032903d001221a20032903e0017c221b201b201a542201200341d0016a41086a2202290300221a200341d0016a41186a2903007c2001ad7c221b201a54201b201a511b22011b221a2007201a200754427f201b20011b221a200654201a2006511b22011b221b201a200620011b221a411e10b00141bd98ca00ad4280808080800284100122012900002106200341c0006a41086a200141086a290000370300200320063703402001102f41ce89c700ad4280808080f000841001220129000021062002200141086a290000370300200320063703d0012001102f4120102d2201450d0f20012003290318370000200141186a200341186a41186a290300370000200141106a200341186a41106a290300370000200141086a200341186a41086a2903003700002001ad4280808080800484100322022900002106200241086a2900002107200241106a290000211c20034190016a41186a200241186a29000037030020034190016a41106a2209201c37030020034190016a41086a200737030020032006370390012002102f2001102f41c000102d2201450d0f20012003290340370000200141086a200341c0006a41086a2202290300370000200120032903d001370010200141186a200341d0016a41086a220a2903003700002001200329039001370020200141286a20034190016a41086a220b290300370000200141306a2009290300370000200141386a20034190016a41186a22092903003700002003201a3703d8012003201b3703d0012001ad4280808080800884200341d0016aad428080808080028410042001102f41bd98ca00ad428080808080028410012201290000211a2002200141086a2900003703002003201a3703402001102f41ae85c700ad4280808080f0008410012201290000211a200a200141086a2900003703002003201a3703d0012001102f4120102d2201450d0f20012003290318370000200141186a200341186a41186a290300370000200141106a200341186a41106a290300370000200141086a200341186a41086a2903003700002001ad428080808080048410032202290000211a200241086a290000211b200241106a29000021062009200241186a29000037030020034190016a41106a22092006370300200b201b3703002003201a370390012002102f2001102f41c000102d220a450d0f200a2003290340370000200a41086a200341c0006a41086a290300370000200a20032903d001370010200a41186a200341d0016a41086a290300370000200a200329039001370020200a41286a20034190016a41086a2202290300370000200a41306a2009290300370000200a41386a20034190016a41186a290300370000200341c0006a200a41c0001095040240024020032d004c22014102460d00200341b0036a41086a200341d5006a290000370300200341b0036a41106a200341dd006a290000370300200341b0036a41186a200341e5006a290000370300200341b0016a41086a200341f6006a290100370300200341b0016a41106a200341fe006a290100370300200341b0016a41186a20034186016a2901003703002003200341cd006a2900003703b0032003200341ee006a2901003703b001200341ed006a2d000021022003280244450d012003280240102f0c010b2003200341186a3602d40241bd98ca00ad428080808080028410012201290000211a2002200141086a2900003703002003201a370390012001102f41a185c700ad4280808080d0018410012201290000211a200341b0016a41086a2209200141086a2900003703002003201a3703b0012001102f200341b0036a41086a2002290300370300200341b0036a41186a200929030037030020032003290390013703b003200320032903b0013703c003200341d0016a200341b0036a108801200341d8026a20032802d001220120032802d80110ad02024020032802d401450d002001102f0b200341c0036a21100240024020032d00d8020d0041bd98ca00ad428080808080028410012201290000211a20034190016a41086a2202200141086a2900003703002003201a370390012001102f41a185c700ad4280808080d0018410012201290000211a200341b0016a41086a2209200141086a2900003703002003201a3703b0012001102f200341b0036a41086a2002290300370300201020032903b001370000201041086a200929030037000020032003290390013703b003200341d0016a200341b0036a10880120032802d001210220033502d801211a4120102d2201450d1220012003290318370000200141186a200341186a41186a290300370000200141106a200341186a41106a290300370000200141086a200341186a41086a290300370000201a4220862002ad842001ad428080808080048410042001102f024020032802d401450d002002102f0b410021020c010b20034198036a200341f1026a29000037030020034180036a41106a200341e9026a29000037030020034180036a41086a200341e1026a290000370300200320032900d90237038003200341a0036a20034180036a109404200341d0016a20032802a003221120032802a8032212109504024020032d00dc014102470d0020034100360298012003420137039001200341b0016a41146a4129360200200341b0016a410c6a410b360200200341103602fc03200341bd98ca003602f8032003410b3602b4012003410736028404200341ae85c700360280042003200341a0036a3602c001200320034180046a3602b8012003200341f8036a3602b001200320034190016a36028c04200341b0036a41146a4103360200200342033702b403200341cc90c4003602b0032003200341b0016a3602c0032003418c046a41d8dbc100200341b0036a103c1a2003350298014220862003350290018410080240200328029401450d00200328029001102f0b20032802d402210241bd98ca00ad428080808080028410012201290000211a20034190016a41086a2209200141086a2900003703002003201a370390012001102f41a185c700ad4280808080d0018410012201290000211a200341b0016a41086a220b200141086a2900003703002003201a3703b0012001102f200341b0036a41086a2009290300370300201020032903b001370000201041086a200b29030037000020032003290390013703b003200341b0016a200341b0036a10880120032802b001210920033502b801211a4120102d2201450d1220012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000201a4220862009ad842001ad428080808080048410042001102f024020032802b401450d002009102f0b024020032802a403450d0020032802a003102f0b410021020c010b200341b0036a200341d0016a410c6a41c20010e8061a20032d00d1032102200341b0016a41086a200341d0016a41086a2802002201360200200341b0016a41106a200341d2036a410020024101461b360200200320032903d001221a3703b0012003200341d4026a3602bc012001410574220e4104722202417f4c0d082002102d2209450d11201aa72113200341003602980120032002360294012003200936029001200120034190016a106902402001450d00410020032802980122026b210b200328029001210d2003280294012109201321010340024002402009200b6a411f4d0d002009210c0c010b200241206a220c2002490d162009410174220f200c200f200c4b1b220c4100480d160240024020090d00200c102d210d0c010b200d2009200c1031210d0b200d450d140b200d20026a22092001290000370000200941186a200141186a290000370000200941106a200141106a290000370000200941086a200141086a290000370000200b41606a210b200241206a2102200c2109200141206a2101200e41606a220e0d000b2003200c3602940120032002360298012003200d360290010b200341b0016a410c6a20034190016a10cd0220032802940121012012ad4220862011ad842003350298014220862003280290012202ad84100402402001450d002002102f0b024020032802b401450d002013102f0b024020032802a403450d0020032802a003102f0b20032802d402210241bd98ca00ad428080808080028410012201290000211a20034190016a41086a2209200141086a2900003703002003201a370390012001102f41a185c700ad4280808080d0018410012201290000211a200341b0016a41086a220b200141086a2900003703002003201a3703b0012001102f200341b0036a41086a2009290300370300201020032903b001370000201041086a200b29030037000020032003290390013703b003200341d0016a200341b0036a10880120032802d001210920033502d801211a4120102d2201450d1120012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000201a4220862009ad842001ad428080808080048410042001102f024020032802d401450d002009102f0b200341b0016a41086a20034180036a41086a290300370300200341b0016a41106a20034180036a41106a290300370300200341b0016a41186a20034180036a41186a29030037030020032003290380033703b001410121020b410021010b200341dd016a20032903b003370000200341fd016a20023a0000200341fe016a20032903b001370100200341e5016a200341b0036a41086a290300370000200341ed016a200341b0036a41106a290300370000200341f5016a200341b0036a41186a29030037000020034186026a200341b0016a41086a2903003701002003418e026a200341b0016a41106a29030037010020034196026a200341b0016a41186a290300370100200320013a00dc01200320083602d801200320043602d401200320053602d001200341c0003602442003200a360240200341d0016a200341c0006a10ef03200a102f02402004450d002005102f0b200041043a00000c170b20032002411a6a2901003703c8012003200241026a2901003703b00120032002410a6a2901003703b8012003200241126a2901003703c00120022d00014101470d0420022d000041ff01710d04200341d0016a41186a200341b0016a41186a290300370300200341d0016a41106a200341b0016a41106a290300370300200341d0016a41086a200341b0016a41086a290300370300200320032903b0013703d0010240200341d0016a10b305450d00200341d0016a410110b405200041043a00000c140b200041831a3b0100200041086a410b360200200041046a41a888c700360200200041026a41063a00000c130b200341d0036a200141246a280200360200200341b0036a41186a2001411c6a290200370300200341b0036a41106a200141146a290200370300200341b0036a41086a2001410c6a290200370300200320012902043703b00320022d00000d0520022d00014101470d05200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d00002108200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a29010037039803200320043a009703200320053a009603200320093b0194032003200a3a009303200320083a0092032003200b3b0190032003200c3a008f032003200d3a008e032003200e3b018c032003200f3a008b03200320103a008a03200320113b018803200320123a008703200320133a008603200320143b018403200320153a008303200320163a008203200320173b018003200341d0016a41206a200341b0036a41206a280200360200200341d0016a41186a200341b0036a41186a290300370300200341d0016a41106a200341b0036a41106a290300370300200341d0016a41086a200341b0036a41086a290300370300200320032903b0033703d001200341c0006a200341d0016a10bb0120034190016a41086a2202200341c9006a29000037030020034190016a41106a2204200341d1006a29000037030020034190016a41186a2205200341d9006a290000370300200320032900413703900120032d00404101460d06200341d8026a41186a2005290300370300200341d8026a41106a2004290300370300200341d8026a41086a200229030037030020032003290390013703d80220034180036a200341d8026a412010ea06450d070240024020034180036a10b305450d0002400240200341d8026a10b305450d0041bd98ca00ad428080808080028410012202290000211a200341c0006a41086a200241086a2900003703002003201a3703402002102f41ae85c700ad4280808080f0008410012202290000211a200341d0016a41086a200241086a2900003703002003201a3703d0012002102f4120102d2202450d11200220032903d802370000200241186a200341d8026a41186a290300370000200241106a200341d8026a41106a290300370000200241086a200341d8026a41086a2903003700002002ad428080808080048410032204290000211a200441086a290000211b200441106a2900002106200341b0016a41186a2205200441186a290000370300200341b0016a41106a22092006370300200341b0016a41086a201b3703002003201a3703b0012004102f2002102f41c000102d2202450d1120022003290340370000200241086a200341c0006a41086a220e290300370000200220032903d001370010200241186a200341d0016a41086a220b290300370000200220032903b001370020200241286a200341b0016a41086a220d290300370000200241306a2009290300370000200241386a2005290300370000200341d0016a200241c00010aa022002102f20032802d0012202410120021b220f20032902d401420020021b221b422088a74105746a2110200341d0016a41106a2108200f2105034020052010460d020240200510e1040d00200541206a2112200341d0016a41186a220c420037030020084200370300200b4200370300200342003703d00141bd98ca00ad4280808080800284220610012202290000211a200b200241086a2900003703002003201a3703d0012002102f419691c700ad428080808090018410012202290000211a200d200241086a2900003703002003201a3703b0012002102f200820032903b001370000200841086a2213200d290300370000200e200b290300370300200341c0006a41106a22142008290300370300200341c0006a41186a2215200c290300370300200320032903d001370340200341d0016a200341c0006a10e40420032902d401420020032802d00122021b221a422088a741306c2104410021092002410820021b22112102024003402004450d01024020052002460d0020022005412010ea06210a200941016a2109200441506a2104200241306a2102200a0d010b0b201aa7450d012011102f0c010b0240201aa7450d002011102f0b200c420037030020084200370300200b4200370300200342003703d001200610012202290000211a200b200241086a2900003703002003201a3703d0012002102f418c91c700ad4280808080a0018410012202290000211a200d200241086a2900003703002003201a3703b0012002102f200820032903b0013700002013200d290300370000200e200b290300370300201420082903003703002015200c290300370300200320032903d001370340200341d0016a200341c0006a412010aa0220032802d0012204410120041b210c4100210202400240024020032902d401420020041b221a422088a7220441014b0d0020040e020201020b034020022004410176220920026a220a200c200a4105746a2005412010ea0641004a1b2102200420096b220441014b0d000b0b200c20024105746a2005412010ea064521020b0240201aa7450d00200c102f0b201221052002450d010b0b201ba7450d00200f102f0b200342003703b8012003428080e983b1de163703b001200320034180036a36029001200341c0006a20034180036a200341b0016a20034190016a10bd01200341e0006a290300211a2003290358211b024020032903404201520d002003290348210620034188026a200341c0006a41106a29030037030020034180026a2006370300200341d0016a41086a41003a0000200341d9016a200329038003370000200341e1016a20034180036a41086a290300370000200341e9016a20034180036a41106a290300370000200341f1016a20034198036a290300370000200341033a00d00141c8e1ca004100200341d0016a108c010b201b201a109a014100210220034180036a21040c140b0240201ba7450d00200f102f0b200341d0016a200341d8026a20034180036a428080e983b1de164200410010bc01200341c0006a41086a2204200341dc016a280200360200200320032902d4013703404101210220032802d0014101460d01200341d8026a21040c130b200041831a3b0100200041086a410b360200200041046a41a888c700360200200041026a41063a00000c130b20002003290340370200200041086a20042802003602000c120b024020022d00000d0020022d00014101470d00200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d00002108200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703c803200320043a00c703200320053a00c603200320093b01c4032003200a3a00c303200320083a00c2032003200b3b01c0032003200c3a00bf032003200d3a00be032003200e3b01bc032003200f3a00bb03200320103a00ba03200320113b01b803200320123a00b703200320133a00b603200320143b01b403200320153a00b303200320163a00b203200320173b01b003200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d00141bd98ca00ad428080808080028410012204290000211a2002200441086a2900003703002003201a3703d0012004102f418c91c700ad4280808080a0018410012204290000211a200341b0016a41086a2205200441086a2900003703002003201a3703b0012004102f200820032903b001221a370300200341c0006a41086a2002290300370300200341c0006a41106a201a370300200341c0006a41186a2005290300370300200320032903d001370340200341d0016a200341c0006a412010aa0220032802d0012202410120021b210a4100210b024020032902d401420020021b221a422088a7220441014b0d00410021024100210c20040e020d0c0d0b41002102034020022004410176220520026a2209200a20094105746a200341b0036a412010ea0641004a1b2102200420056b220441014b0d000c0c0b0b200041023a00000c110b20022d00000d0620022d00014101470d06200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d00002108200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703c803200320043a00c703200320053a00c603200320093b01c4032003200a3a00c303200320083a00c2032003200b3b01c0032003200c3a00bf032003200d3a00be032003200e3b01bc032003200f3a00bb03200320103a00ba03200320113b01b803200320123a00b703200320133a00b603200320143b01b403200320153a00b303200320163a00b203200320173b01b00320034180036a200341b0036a10b5050240024020032d008003450d00200341d0016a41186a4200370300200341d0016a41106a220a4200370300200341d0016a41086a22024200370300200342003703d00141bd98ca00ad428080808080028410012204290000211a2002200441086a2900003703002003201a3703d0012004102f419691c700ad428080808090018410012204290000211a200341b0016a41086a2205200441086a2900003703002003201a3703b0012004102f200a20032903b001221a370300200341c0006a41086a2002290300370300200341c0006a41106a201a370300200341c0006a41186a2005290300370300200320032903d001370340200341d0016a200341c0006a10e40420032902d401420020032802d00122021b221a422088a7220b41306c2104410021052002410820021b22082102024003402004450d03200341b0036a2002460d01200541016a2105200441506a21042002200341b0036a412010ea062109200241306a210220090d000b20094541016a41017120056a417f6a21050b2008200541306c6a2202200241306a2005417f73200b6a41306c10e9061a200342003703e00220034280809aa6eaafe3013703d8022003200341b0036a36028003200341c0006a200341b0036a200341d8026a20034180036a109601024020032903404201520d002003290348211b20034188026a200341c0006a41106a290300370300200341d0016a41306a201b370300200341d0016a41086a41003a0000200341d9016a20032903b003370000200341e1016a200341b0036a41086a290300370000200341e9016a200341b0036a41106a290300370000200341f1016a200341c8036a290300370000200341033a00d00141c8e1ca004100200341d0016a108c010b200341b0016a41186a4200370300200341b0016a41106a22054200370300200341b0016a41086a22024200370300200342003703b00141bd98ca00ad428080808080028410012204290000211b200341c0006a41086a2209200441086a2900003703002003201b3703402004102f20022009290300370300200320032903403703b001419691c700ad428080808090018410012204290000211b200341d0016a41086a2209200441086a2900003703002003201b3703d0012004102f200520032903d001221b37030020034190016a41086a200229030037030020034190016a41106a201b37030020034190016a41186a2009290300370300200320032903b00137039001200341203602d401200320034190016a3602d0012008200b417f6a200341d0016a10ab010240201aa7450d002008102f0b200041043a00000c120b200342003703e00220034280809aa6eaafe3013703d8022003200341b0036a3602b001200341c0006a200341b0036a200341d8026a200341b0016a109601024020032903404201520d002003290348211a20034188026a200341c0006a41106a29030037030020034180026a201a370300200341d0016a41086a41003a0000200341d9016a20032903b003370000200341e1016a200341b0036a41086a290300370000200341e9016a200341b0036a41106a290300370000200341f1016a200341c8036a290300370000200341033a00d00141c8e1ca004100200341d0016a108c010b200341dd016a200341b8036a290300370000200341e5016a200341c0036a290300370000200341ed016a200341c8036a290300370000200341033a00d401200341093a00d001200320032903b0033700d50141c8e1ca004100200341d0016a108c01200041043a00000c110b200341d0016a41186a22054200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d00141bd98ca00ad428080808080028410012204290000211b2002200441086a2900003703002003201b3703d0012004102f418c91c700ad4280808080a0018410012204290000211b200341b0016a41086a220b200441086a2900003703002003201b3703b0012004102f200a20032903b001370000200a41086a200b290300370000200341c0006a41086a2002290300370300200341c0006a41106a2009290300370300200341c0006a41186a2005290300370300200320032903d001370340200341d0016a200341c0006a412010aa0220032802d0012202410120021b210a02400240024020032902d401420020021b221b422088a7220b41014b0d0041002102200b0e020201020b200b210441002102034020022004410176220520026a2209200a20094105746a200341b0036a412010ea0641004a1b2102200420056b220441014b0d000b0b200a20024105746a200341b0036a412010ea060d002002200b4f0d08200a20024105746a2204200441206a2002417f73200b6a41057410e9061a200342003703e00220034280809aa6eaafe3013703d8022003200341b0036a36028003200341c0006a200341b0036a200341d8026a20034180036a109601024020032903404201520d002003290348210620034188026a200341c0006a41106a29030037030020034180026a2006370300200341d0016a41086a41003a0000200341d9016a20032903b003370000200341e1016a200341b0036a41086a290300370000200341e9016a200341b0036a41106a290300370000200341f1016a200341c8036a290300370000200341033a00d00141c8e1ca004100200341d0016a108c010b200341b0016a41186a4200370300200341b0016a41106a22054200370300200341b0016a41086a22024200370300200342003703b00141bd98ca00ad4280808080800284100122042900002106200341c0006a41086a2209200441086a290000370300200320063703402004102f20022009290300370300200320032903403703b001418c91c700ad4280808080a00184100122042900002106200341d0016a41086a2209200441086a290000370300200320063703d0012004102f200520032903d001220637030020034190016a41086a200229030037030020034190016a41106a200637030020034190016a41186a2009290300370300200320032903b00137039001200341203602d401200320034190016a3602d001200a200b417f6a200341d0016a10aa010240201ba7450d00200a102f0b200041043a0000201aa7450d112008102f0c110b200041831a3b0100200041086a410d360200200041046a41cc87c700360200200041026a410c3a00000240201ba7450d00200a102f0b201aa7450d102008102f0c100b200341b0036a41206a2204200141246a280200360200200341b0036a41186a22052001411c6a290200370300200341b0036a41106a2209200141146a290200370300200341b0036a41086a220a2001410c6a290200370300200320012902043703b00320022d000120022d0000410047720d07200341d0016a41206a2004280200360200200341d0016a41186a2005290300370300200341d0016a41106a2009290300370300200341d0016a41086a200a290300370300200320032903b0033703d001200341c0006a200341d0016a10bb01200341b0016a41086a200341c9006a290000370300200341b0016a41106a200341d1006a290000370300200341b0016a41186a200341d9006a290000370300200320032900413703b001024020032d00404101460d00200341d8026a41186a200341b0016a41186a290300370300200341d8026a41106a200341b0016a41106a290300370300200341d8026a41086a200341b0016a41086a290300370300200320032903b0013703d802200341b0016a200341d8026a10b505024020032d00b0014101470d00200020032902b401370200200041086a200341bc016a2802003602000c110b20032d00b1012102200342003703880320034280809aa6eaafe301370380032003200341d8026a36029001200341c0006a200341d8026a20034180036a20034190016a10bd01200341e0006a290300211a2003290358211b024020032903404201520d002003290348210620034188026a200341c0006a41106a29030037030020034180026a2006370300200341d0016a41086a41003a0000200341d9016a20032903d802370000200341e1016a200341d8026a41086a290300370000200341e9016a200341d8026a41106a290300370000200341f1016a200341f0026a290300370000200341033a00d00141c8e1ca004100200341d0016a108c010b201b201a109a01200341dd016a200341e0026a290300370000200341e5016a200341e8026a290300370000200341ed016a200341f0026a290300370000200341023a00d401200341093a00d001200320032903d8023700d50141c8e1ca004100200341d0016a108c010240200241ff01710d0010b6040b200041043a00000c100b200041013a00000c0f0b200041023a00000c0e0b103d000b200041023a00000c0c0b200041013a00000c0b0b200041831a3b0100200041086a410a360200200041046a419e88c700360200200041026a41073a00000c0a0b200041023a00000c090b41b8e3c300411d41f8b4ca001039000b200041023a00000c070b0240200a20024105746a200341b0036a412010ea0622040d004101210b2002210c0c010b2004411f7620026a210c0b0240201aa7450d00200a102f0b0240200b450d004113210a418b88c7002102410821040c040b410c210a0240200341b0036a10e104450d0041ff87c7002102410921040c040b200341d0016a41186a22054200370300200341d0016a41106a22094200370300200341d0016a41086a22024200370300200342003703d00141bd98ca00ad428080808080028410012204290000211a2002200441086a2900003703002003201a3703d0012004102f419691c700ad428080808090018410012204290000211a200341b0016a41086a220b200441086a2900003703002003201a3703b0012004102f200820032903b001370000200841086a200b290300370000200341c0006a41086a2002290300370300200341c0006a41106a2009290300370300200341c0006a41186a2005290300370300200320032903d001370340200341d0016a200341c0006a10e40420032902d401420020032802d00122021b221a422088a741306c2104410021052002410820021b220b2102024003402004450d010240200341b0036a2002460d00200541016a2105200441506a21042002200341b0036a412010ea062109200241306a210220090d010b0b41f387c7002102410a2104201aa7450d04200b102f0c040b0240201aa7450d00200b102f0b200342003703e00220034280809aa6eaafe3013703d8022003200341b0036a3602b0012003200341b0036a36028003200320034180036a3602d8012003200341b0016a3602d4012003200341d8026a3602d001200341c0006a200341b0036a200341d0016a1094010240024020032802404101470d0020032d00444104460d01411a210a41d987c7002102410b21040c050b200341c0006a41086a2903004201520d00200341c0006a41106a290300211a200328028003210220034188026a200341c0006a41186a29030037030020034180026a201a370300200341d0016a41086a41003a0000200341d9016a2002290000370000200341e1016a200241086a290000370000200341e9016a200241106a290000370000200341f1016a200241186a290000370000200341033a00d00141c8e1ca004100200341d0016a108c010b20032903c803211b20032d00c703210920032d00c603210a20032f01c403210b20032d00c303210d20032d00c203210e20032f01c003210f20032d00bf03211020032d00be03211120032f01bc03211220032d00bb03211320032d00ba03211420032f01b803211520032d00b703211620032d00b603211720032f01b403211820032d00b303211920032d00b203211d20032f01b003211e4200211a200341d0016a41186a22054200370300200341d0016a41106a221f4200370300200341d0016a41086a22024200370300200342003703d00141bd98ca00ad42808080808002841001220429000021062002200441086a290000370300200320063703d0012004102f418c91c700ad4280808080a00184100122042900002106200341b0016a41086a2220200441086a290000370300200320063703b0012004102f200820032903b001370000200841086a2020290300370000200341c0006a41086a2002290300370300200341c0006a41106a201f290300370300200341c0006a41186a2005290300370300200320032903d001370340200341d0016a200341c0006a412010aa020240024020032802d00122040d004100210241012104410021050c010b20032902d401221a422088a72105201aa721020b2005200c490d01024020052002470d002002201aa7470d00200241016a22082002490d032002410174221f2008201f20084b1b220841ffffff3f712008470d03200841057422084100480d030240024020020d002008102d21040c010b200420024105742008103121040b2004450d012008410576ad211a0b2004200c4105746a220241206a20022005200c6b41057410e9061a2002201b370018200220093a00172002200a3a00162002200b3b00142002200d3a00132002200e3a00122002200f3b0010200220103a000f200220113a000e200220123b000c200220133a000b200220143a000a200220153b0008200220163a0007200220173a0006200220183b0004200220193a00032002201d3a00022002201e3b0000200341b0016a41186a4200370300200341b0016a41106a220a4200370300200341b0016a41086a22024200370300200342003703b00141bd98ca00ad428080808080028410012209290000211b200341c0006a41086a2208200941086a2900003703002003201b3703402009102f20022008290300370300200320032903403703b001418c91c700ad4280808080a0018410012209290000211b200341d0016a41086a2208200941086a2900003703002003201b3703d0012009102f200a20032903d001221b37030020034190016a41086a200229030037030020034190016a41106a201b37030020034190016a41186a2008290300370300200320032903b001370390010240024020040d0020034190016aad428080808080048410050c010b200341203602d401200320034190016a3602d0012004200541016a200341d0016a10aa01201aa7450d002004102f0b200041043a00000c050b1036000b419ae3c300411e41f8b4ca001039000b1038000b200041831a3b0100200041086a200a360200200041046a2002360200200041026a20043a00000c010b2004410010b405200341dd016a200341d8026a41086a290300370000200341e5016a200341d8026a41106a290300370000200341ed016a200341d8026a41186a290300370000200341f5016a200329038003370000200341fd016a20034180036a41086a29030037000020034185026a20034180036a41106a2903003700002003418d026a20034180036a41186a29030037000020034195026a20023a0000200341043a00d401200341093a00d001200320032903d8023700d50141c8e1ca004100200341d0016a108c01200041043a00000b20012802004101470d02200141086a280200450d022001280204102f0c020b200041831a3b0100200041086a2009360200200041046a2001360200200041026a20023a00000b2004450d002005102f0b20034190046a24000bb512080a7f027e047f017e047f027e027f057e23002204210520044180016b416071220424000240024002400240024002400240200141ffffff3f712001470d0020014105742206417f4c0d00024020060d00200020014105746a210741012108200121090c030b2006102d2208450d05200020014105746a21072006410576220920014f0d02200941017422062001200620014b1b220641ffffff3f712006470d01200641057422064100480d010240024020090d002006102d21080c010b200820094105742006103121080b2008450d05200641057621090c030b103d000b1038000b20010d00410021060c010b200720006b210a410021060340200820066a2207200020066a220b290000370000200741186a200b41186a290000370000200741106a200b41106a290000370000200741086a200b41086a290000370000200a200641206a2206470d000b200020014105746a20006b41606a41057641016a21060b20042006360208200420093602042004200836020020082006410041202006676b10e003200441206a41186a220a4200370300200441206a41106a220c4200370300200441206a41086a220d42003703002004420037032041dfcbc700ad4280808080b00284220e10012206290000210f200d200641086a2900003703002004200f3703202006102f41e2dec700ad428080808090018410012206290000210f200441c8006a41086a2200200641086a2900003703002004200f3703482006102f200c2004290348220f370300200441e0006a41086a2210200d290300370300200441e0006a41106a2211200f370300200441e0006a41186a2212200029030037030020042004290320370360200441206a200441e0006a412010aa0220042802202206410120061b21132004290224420020061b2214422088a72206450d0120064105742115200441e0006a410c722116200441206a410c6a2101200441206a4114722117200441206a4108722118201321070340200a200741186a290000370300200c200741106a290000370300200d200741086a29000037030020042007290000370320200e10012206290000210f200441106a41086a2208200641086a2900003703002004200f3703102006102f41f2dec700ad4280808080e0008410012206290000210f2000200641086a2900003703002004200f3703482006102f4120102d2206450d0120062004290320370000200641186a200a290300370000200641106a200c290300370000200641086a200d2903003700002006ad42808080808004841003220b290000210f200b41086a2900002119200b41106a290000211a2012200b41186a2900003703002011201a370300201020193703002004200f370360200b102f2006102f41c000102d2206450d01200620042903103700002006200429034837001020062004290360370020200641086a2008290300370000200641186a2000290300370000200641286a2010290300370000200641306a2011290300370000200641386a2012290300370000200441206a200610a1052000200141086a290200370300200441c8006a41106a2209200141106a280200360200200420012902003703482004280240211b02402004280228220b450d002004290320210f20162004290348370200201641086a2000290300370200201641106a20092802003602002004200f370360201b211c0b2004200b360268200441003602282004290378211a20042004290338221d3703782004290370211e20042004290330221f370370200429036021202004200429032022193703602004290368210f2004200429032822213703682021a7210b02400240200fa722090d002021210f201f211e201d211a0c010b200420203703202004200f3703282004201e3703302004201a37033820042009201ea74105746a360254200420093602502004200f422088a736024c2004200936024820042004360258200441106a200441c8006a10f803201841086a2008280200360200201820042903103702002004201e422088a72209201a422088a74105746a360254200420093602502004201aa736024c2004200936024820042004360258200441106a200441c8006a10f803201741086a2008280200360200201720042903103702002004290328210f200429032021192004290338211a2004290330211e0240200b450d00201da7210802402021422088a7450d00200b102f0b2008450d00201f422088a7102f0b200420193703602004200f3703682004201e3703702004201a370378200fa7210b201b211c0b2004200f3703282004201e370330200a201a370300200420193703202004201c360240200fa7210802400240200b0d002006ad428080808080088410050c010b200441c00036024c20042006360248200441206a200441c8006a10b7050b02402008450d00201aa7210b0240200f422088a7450d002008102f0b200b450d00201e422088a7102f0b200741206a21072006102f201541606a22150d000c020b0b1036000b02402014a7450d002013102f0b200441e0006a41186a220a4200370300200441e0006a41106a22074200370300200441e0006a41086a220642003703002004420037036041dfcbc700ad4280808080b00284220f100122002900002119200441106a41086a220b200041086a290000370300200420193703102000102f2006200b2903003703002004200429031037036041ebdec700ad4280808080f00084100122082900002119200441c8006a41086a2200200841086a290000370300200420193703482008102f200720042903482219370300200441206a41086a22012006290300370300200441206a41106a22092019370300200441206a41186a221c200029030037030020042004290360370320200441203602642004200441206a36026020022003200441e0006a10ad01200a4200370300200742003703002006420037030020044200370360200f10012208290000210f200b200841086a2900003703002004200f3703102008102f2006200b2903003703002004200429031037036041fbd4c700ad4280808080d000841001220b290000210f2000200b41086a2900003703002004200f370348200b102f20072004290348220f370300200120062903003703002009200f370300201c200029030037030020042004290360370320200441206aad4280808080800484100502402004280204450d002004280200102f0b200524000bec0502057f017e23004190016b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141f0006a41186a4200370300200141f0006a41106a22034200370300200141f0006a41086a220042003703002001420037037041dfcbc700ad4280808080b002841001220229000021062000200241086a290000370300200120063703702002102f41fbd4c700ad4280808080d00084100122022900002106200141206a41086a2204200241086a290000370300200120063703202002102f200320012903202206370300200141c0006a41086a2000290300370300200141c0006a41106a2006370300200141c0006a41186a200429030037030020012001290370370340200141c0006aad428080808080048410050c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141f0006a41186a4200370300200141f0006a41106a22034200370300200141f0006a41086a220042003703002001420037037041dfcbc700ad4280808080b002841001220229000021062000200241086a290000370300200120063703702002102f41fbd4c700ad4280808080d00084100122022900002106200141e0006a41086a2204200241086a290000370300200120063703602002102f200320012903602206370300200141c0006a41086a2000290300370300200141c0006a41106a2006370300200141c0006a41186a2004290300370300200120012903703703404120102d2200450d0120002001290320370000200041186a200141206a41186a290300370000200041106a200141206a41106a290300370000200041086a200141206a41086a290300370000200141c0006aad42808080808004842000ad428080808080048410042000102f0b20014190016a24000f0b1036000b8d0901177f230041206b220424002002410020031b21052000410020011b2106200241206a200220031b2107200041206a200020011b2108200020014105746a2109200220034105746a210a4100210b4100210c4101210d4100210e4100210f4101211002400340200b4101742111200b41057421120240024003402011211320122114200b2115200c2116200d2117200721032005210202400340024020020d00410021052006450d020c040b02402006450d000240024020022006460d0020022006412010ea0622180d010b2003200341206a2003200a4622021b210741002008200820094622141b21064100200320021b21052015210b2016210c2017210d2008200841206a20141b21080c070b02402018417f4c0d00200221050c050b200441186a2218200241186a290000370300200441106a2219200241106a290000370300200441086a221a200241086a29000037030020042002290000370300024020152016470d00201541016a22022015490d0820132002201320024b1b220241ffffff3f712002470d08200241057422024100480d080240024020150d002002102d21170c010b201720142002103121170b2017450d06200241057621160b201720146a22022004290300370000200241186a2018290300370000200241106a2019290300370000200241086a201a290300370000410020032003200a4622181b2102201341026a2113201441206a2114201541016a21152003200341206a20181b21030c010b0b200441186a2203200541186a290000370300200441106a2215200541106a290000370300200441086a2206200541086a290000370300200420052900003703000240200b200c470d00200b41016a2202200b490d06200b41017422142002201420024b1b220241ffffff3f712002470d06200241057422024100480d0602400240200b0d002002102d210d0c010b200d200b41057420021031210d0b200d450d042002410576210c0b200d200b4105746a22022004290300370000200241186a2003290300370000200241106a2015290300370000200241086a200629030037000041002106410020072007200a4622021b2105201141026a2111201241206a2112200b41016a210b2007200741206a20021b21070c010b0b201720152000200110880302402016450d002017102f0b0240200f450d002010102f0b200441206a24000f0b200441186a2214200641186a290000370300200441106a2213200641106a290000370300200441086a2218200641086a290000370300200420062900003703000240200e200f470d00200e41016a2202200e490d03200e41017422062002200620024b1b220241ffffff3f712002470d03200241057422024100480d0302400240200e0d002002102d21100c010b2010200e4105742002103121100b2010450d012002410576210f0b2010200e4105746a22022004290300370000200241186a2014290300370000200241106a2013290300370000200241086a201829030037000041002008200820094622021b2106200e41016a210e2015210b2016210c2017210d2008200841206a20021b2108200321070c010b0b1036000b1038000be2a50107017f027e137f017e057f057e087f23004180096b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e09000102030405090a0f000b20034184076a4101360200200342013702f406200341b4d8c9003602f006200341043602b405200341fcdbc9003602b0052003200341b0056a36028007200341f0066a41e8d8c9001043000b200141306a2903002104200141286a2903002105200341d0056a200141246a280200360200200341b0056a41186a2001411c6a290200370300200341b0056a41106a200141146a290200370300200341b0056a41086a2001410c6a2902003703002003200141046a2902003703b00520022d00000d0420022d00014101470d04200241196a2d00002106200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703a003200320063a009f03200320073a009e03200320083b019c03200320093a009b032003200a3a009a032003200b3b0198032003200c3a0097032003200d3a0096032003200e3b0194032003200f3a009303200320103a009203200320113b019003200320123a008f03200320133a008e03200320143b018c03200320153a008b03200320163a008a03200320173b018803200341f0066a41206a200341b0056a41206a280200360200200341f0066a41186a200341b0056a41186a290300370300200341f0066a41106a200341b0056a41106a290300370300200341f0066a41086a200341b0056a41086a290300370300200320032903b0053703f00620034180086a200341f0066a10bb0120032d0080084101460d0c20034180086a41086a2d0000210c20034189086a2f0000210d2003418b086a2d0000210e2003418c086a2d0000210f2003418d086a2f000021102003418f086a2d0000211120034180086a41106a2d0000211220034191086a2f0000211320034193086a2d0000211420034194086a2d0000211520034195086a2f0000211620034197086a2d0000211720034180086a41186a2d0000211820034199086a290000211920032f008108211a20032d008308211b20032d008408211c20032f008508211d20032d008708211e200341286a2005200442c0843d420010ee06200341186a2003290328221f200341286a41086a290300222042c0fb42427f10ed06200341086a201f202042d08603420010ed062003200341086a41086a29030020032903082220200520032903187c221f42d086037e201f421480221f42c0fb427e7c42a0c21e56201fa76aad7c221f202054ad7c22204200201f428080e983b1de165620204200522020501b22021b22203703b0022003201f428080e983b1de1620021b22213703a802200320034188036a3602c006200320034188036a3602c8012003200341c8016a3602f8062003200341c0066a3602f4062003200341a8026a3602f00620034180086a20034188036a200341f0066a109401024002402003280280084101470d0020032d0084084104460d0120004183223b0100200041086a411c360200200041046a41d8c7c400360200200041026a41003a0000410121060c180b20034180086a41086a2903004201520d0020034180086a41106a290300211f20032802c8012102200341a8076a20034180086a41186a290300370300200341a0076a201f370300200341f0066a41086a41003a0000200341f9066a200229000037000020034181076a200241086a29000037000020034189076a200241106a29000037000020034191076a200241186a290000370000200341033a00f00641c8e1ca004100200341f0066a108c010b20034198046a41186a220a420037030020034198046a41106a2207420037030020034198046a41086a2202420037030020034200370398044180a3ca00ad4280808080800184221f100122062900002122200341e8036a41086a2208200641086a290000370300200320223703e8032006102f20022008290300370300200320032903e803370398044188a3ca00ad4280808080d001842222100122062900002123200341c0066a41086a2209200641086a290000370300200320233703c0062006102f200720032903c0062223370300200341c8046a41086a220b2002290300370300200341c8046a41106a22242023370300200341c8046a41186a2225200929030037030020032003290398043703c8042003200341c8046a41201095012003280204212620032802002127200a420037030020074200370300200242003703002003420037039804201f1001220629000021232008200641086a290000370300200320233703e8032006102f20022008290300370300200320032903e8033703980420221001220629000021222009200641086a290000370300200320223703c0062006102f200720032903c0062222370300200b2002290300370300202420223703002025200929030037030020032003290398043703c80420032026410020271b220b41016a3602f006200341c8046aad4280808080800484200341f0066aad4280808080c000841004200341f0066a41186a20034188036a41186a290300370300200341f0066a41106a20034188036a41106a290300370300200341f0066a41086a20034188036a41086a29030037030020032003290388033703f006201f10012206290000211f2008200641086a2900003703002003201f3703e8032006102f41e2dec700ad428080808090018410012206290000211f2009200641086a2900003703002003201f3703c0062006102f2003200b3602800820034180086aad4280808080c0008410032206290000211f200641086a2900002122200641106a2900002123200a200641186a29000037030020072023370300200220223703002003201f370398042006102f41c000102d2206450d0e200620032903e803370000200641086a2008290300370000200620032903c006370010200641186a20092903003700002006200329039804370020200641286a2002290300370000200641306a2007290300370000200641386a200a2903003700004120102d2202450d0e200220032903f006370000200241186a200341f0066a41186a290300370000200241106a200341f0066a41106a290300370000200241086a200341f0066a41086a2903003700002002412041c00010312202450d0e20022005370020200241286a2004370000200241c00041800110312202450d0e2002202137005020022019370048200220183a0047200220173a0046200220163b0044200220153a0043200220143a0042200220133b0040200220123a003f200220113a003e200220103b003c2002200f3a003b2002200e3a003a2002200d3b00382002200c3a00372002201e3a00362002201d3b00342002201c3a00332002201b3a00322002201a3b0030200241d8006a20203700002006ad42808080808008842002ad4280808080800c8410042002102f2006102f200341f8066a41003a00002003410c3a00f006200341f0066a410c6a200b36020041c8e1ca004100200341f0066a108c01200041043a0000410121060c160b41012106024020022d00004101470d00200241086a2802004102490d00200241046a28020041ff01710d00200141046a28020021074180a3ca00ad4280808080800184100122022900002105200341e8036a41086a2208200241086a290000370300200320053703e8032002102f41e2dec700ad4280808080900184100122022900002105200341c0066a41086a2209200241086a290000370300200320053703c0062002102f200320073602f006200341f0066aad4280808080c00084100322022900002105200241086a2900002104200241106a290000211f200341c8046a41186a220a200241186a290000370300200341c8046a41106a220b201f370300200341c8046a41086a220c2004370300200320053703c8042002102f41c000102d2202450d0e200220032903e803370000200241086a2008290300370000200220032903c006370010200241186a2009290300370000200220032903c804370020200241286a200c290300370000200241306a200b290300370000200241386a200a290300370000200341f0066a200210aa04024020032903f00642015222080d002002ad428080808080088410050b20034188036a200341f0066a41086a41e00010e8061a200341f0066a20034188036a41e00010e8061a024020080d00200341a8026a200341f0066a41e00010e8061a2002102f200341b0056a41066a200341a8026a41e00010e8061a20034180086a200341b0056a41e60010e8061a200341c8016a20034180086a41066a41e00010e8061a20032903d80121052003200341c8016a41186a290300220437038808200320053703800802400240200520048450450d004200211f420021200c010b2003200341c8016a41206a220236028803200341b0056a200220034180086a20034188036a10bd01200341b0056a41206a290300212020032903c805211f20032903b0054201520d0020032903b8052119200341a8076a200341b0056a41106a290300370300200341a0076a2019370300200341f0066a41086a41003a0000200341f9066a200229000037000020034181076a200241086a29000037000020034189076a200241106a29000037000020034191076a200241186a290000370000200341033a00f00641c8e1ca004100200341f0066a108c010b201f2020109a01200341f0066a41186a200437030020034180076a2005370300200341f8066a41033a00002003410c3a00f006200341f0066a410c6a200736020041c8e1ca004100200341f0066a108c01200041043a00000c170b2002102f200041086a4114360200200041046a41c4c7c40036020041012106200041026a41013a000020004183223b01000c160b200041023a00000c150b4101210620022d00004101470d09200241086a2802004104490d09200241046a28020041ff01710d09200141046a28020021094180a3ca00ad4280808080800184100122022900002105200341e8036a41086a2206200241086a290000370300200320053703e8032002102f41e2dec700ad4280808080900184100122022900002105200341c0066a41086a2207200241086a290000370300200320053703c0062002102f200320093602f006200341f0066aad4280808080c00084100322022900002105200241086a2900002104200241106a290000211f20034198046a41186a2208200241186a29000037030020034198046a41106a220a201f37030020034198046a41086a220b200437030020032005370398042002102f41c000102d2202450d0c200220032903e803370000200241086a2006290300370000200220032903c006370010200241186a20072903003700002002200329039804370020200241286a200b290300370000200241306a200a290300370000200241386a2008290300370000200341386a200241c00041c8e1ca004100410010b501200328023821072002102f41012106024020074101470d0020034198046a41186a220d420037030020034198046a41106a2202420037030020034198046a41086a2207420037030020034200370398044180a3ca00ad4280808080800184221f100122082900002105200341e8036a41086a220a200841086a290000370300200320053703e8032008102f2007200a290300370300200320032903e803370398044195a3ca00ad42808080809001842220100122082900002105200341c0066a41086a220b200841086a290000370300200320053703c0062008102f200220032903c0062205370300200341c8046a41086a220e2007290300370300200341c8046a41106a220f2005370300200341c8046a41186a2210200b29030037030020032003290398043703c804200341f0066a200341c8046a10fe0320032802f006220c4104200c1b2108024020032902f4064200200c1b22054220882204a7220c2005a7470d00200c41016a2211200c490d122004a722134101742212201120112012491b221141ffffffff03712011470d12201141027422114100480d1202400240200c0d002011102d21080c010b200820134102742011103121080b2008450d0e20054220882204a7210c2011410276ad21050b2008200c4102746a2009360200200d420037030020024200370300200742003703002003420037039804201f10012209290000211f200a200941086a2900003703002003201f3703e8032009102f2007200a290300370300200320032903e80337039804202010012209290000211f200b200941086a2900003703002003201f3703c0062009102f200220032903c006370000200241086a200b290300370000200e2007290300370300200f20022903003703002010200d29030037030020032003290398043703c8040240024020080d00200341c8046aad428080808080048410050c010b200341203602f4062003200341c8046a3602f00620082004a741016a200341f0066a10a3042005a7450d002008102f0b200041043a00000c150b20004183223b0100200041086a4114360200200041046a41c4c7c400360200200041026a41013a00000c140b2001412c6a2802002108200141286a2802002106200141246a2802002107200341c0066a41186a200141196a290000370300200341c0066a41106a200141116a290000370300200341c0066a41086a200141096a290000370300200320012900013703c006024002400240024020022d00000d0020022d00014101470d00200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d0000211a200241026a2f0100211b20032002411a6a2901003703e001200320093a00df012003200a3a00de012003200b3b01dc012003200c3a00db012003200d3a00da012003200e3b01d8012003200f3a00d701200320103a00d601200320113b01d401200320123a00d301200320133a00d201200320143b01d001200320153a00cf01200320163a00ce01200320173b01cc01200320183a00cb012003201a3a00ca012003201b3b01c8012008418080014b0d012008ad22204220862007ad84100322022900002105200241086a2900002104200241106a290000211f200341a8026a41186a200241186a290000370300200341a8026a41106a201f370300200341a8026a41086a2004370300200320053703a8022002102f200341f0066a200341a8026a10de04200341d8006a20032802f006220920032802f80641c8e1ca004100410010b50120032802582102024020032802f406450d002009102f0b20024101460d022003200341c0066a3602f4062003200341a8026a3602f00620034180086a200341f0066a108001200341f0066a20034180086a10df04200341d0006a20032802f006220920032802f80641c8e1ca004100410010b50120032802502102024020032802f406450d002009102f0b20024101470d0320004183223b0100200041086a410c360200200041046a41acc7c400360200200041026a41033a000020060d180c190b200041023a000020060d170c180b20004183223b0100200041086a410c360200200041046a41b8c7c400360200200041026a41023a000020060d160c170b20004183223b0100200041086a410c360200200041046a41acc7c400360200200041026a41033a000020060d150c160b200341c0006a202042004280a094a58d1d420010ed06200320032903402204428080e983b1de167c2205370388032003200341c0006a41086a2903002005200454ad7c2204370390032003200341c8016a3602e8032003200341c8016a36029804200320034198046a3602f8062003200341e8036a3602f406200320034188036a3602f006200341b0056a200341c8016a200341f0066a1094010240024020032802b0054101470d00200320032900b5053703f0062003200341bc056a2800003600f70620032d00b40521020c010b41042102200341b0056a41086a2903004201520d00200341b0056a41106a290300211f2003280298042109200341a8076a200341b0056a41186a290300370300200341a0076a201f370300200341f0066a41086a41003a0000200341f9066a200929000037000020034181076a200941086a29000037000020034189076a200941106a29000037000020034191076a200941186a290000370000200341033a00f00641c8e1ca004100200341f0066a108c010b200320032903f0063703c804200320032800f7063600cf04200241ff01714104470d07200341f0066a200341a8026a10de0420032802f0062102200320032802f8063602b405200320023602b00520072008200341b0056a109d02024020032802f406450d002002102f0b200341c8046a41086a200341a8026a41086a2202290300370300200341c8046a41106a200341a8026a41106a2208290300370300200341c8046a41186a200341a8026a41186a220929030037030020034198046a41086a200341c0066a41086a220a29030037030020034198046a41106a200341c0066a41106a220b29030037030020034198046a41186a200341c0066a41186a220c290300370300200320032903a8023703c804200320032903c0063703980420034188036a41186a200341c8016a41186a220d29030037030020034188036a41106a200341c8016a41106a220e29030037030020034188036a41086a200341c8016a41086a220f290300370300200320032903c80137038803200341a0076a200437030020034198076a2005370300200341b8076a4100360200200342013703f006200341f0066a41106a200f290300370300200341f0066a41186a200e29030037030020034190076a200d290300370300200342083703b007200341003602a807200320032903c8013703f806200341c4076a2002290300370200200341cc076a2008290300370200200341d4076a2009290300370200200320032903a8023702bc07200341f4076a200c290300370200200341ec076a200b290300370200200341e4076a200a290300370200200320032903c0063702dc07200341b0056a20034180086a10df0420032802b0052102200320032802b8053602ec03200320023602e803200341f0066a200341e8036a10da04024020032802b405450d002002102f0b200341f0066a41086a41073a0000200341f9066a20032903800837000020034181076a20034180086a41086a29030037000020034189076a20034180086a41106a29030037000020034191076a20034180086a41186a2903003700002003410c3a00f00641c8e1ca004100200341f0066a108c01200041043a00002006450d150c140b200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a8012002411a6a2901002105200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012106024020022d00000d0020022d000141014721060b200320053703e004200320073a00df04200320083a00de04200320093b01dc042003200a3a00db042003200b3a00da042003200c3b01d8042003200d3a00d7042003200e3a00d6042003200f3b01d404200320103a00d304200320113a00d204200320123b01d004200320133a00cf04200320143a00ce04200320153b01cc04200320163a00cb04200320173a00ca04200320183b01c8040240024020060d00200341f8046a41186a200341c8046a41186a2202290300370300200341f8046a41106a200341c8046a41106a2206290300370300200341f8046a41086a200341c8046a41086a2207290300370300200320032903c8043703f804200341a0056a200341a8016a10df04200341f0066a20032802a005220a20032802a80510e0042007200341f0066a41106a2903003703002006200341f0066a41186a2903003703002002200341f0066a41206a290300370300200341c8046a41206a220b200341f0066a41286a290300370300200341c8046a41286a220c200341a0076a290300370300200320032903f8063703c804200341a8076a280200210d200341ac076a280200210e200341b0076a2802002109200341f0066a41c4006a2802002108200341b8076a280200210f20032903f006210520034188036a200341bc076a41c40010e8061a024020054202510d0020034198046a41286a200c29030037030020034198046a41206a200b29030037030020034198046a41186a200229030037030020034198046a41106a200629030037030020034198046a41086a2007290300370300200320032903c80437039804200341a8026a20034188036a41c40010e8061a024020032802a405450d00200a102f0b200341e8036a41086a220220034198046a41086a290300370300200341e8036a41106a220620034198046a41106a290300370300200341e8036a41186a220720034198046a41186a290300370300200341e8036a41206a220a20034198046a41206a290300370300200341e8036a41286a220b20034198046a41286a29030037030020032003290398043703e803200341c8016a200341a8026a41c40010e8061a200341c0066a41086a220c2002290300370300200341c0066a41106a22022006290300370300200341c0066a41186a22062007290300370300200341c0066a41206a2207200a290300370300200341c0066a41286a220a200b290300370300200320032903e8033703c00620034180086a200341c8016a41c40010e8061a200341f8056a200f360200200341b0056a41c4006a2008360200200341ec056a200e360200200341b0056a41106a220b200c290300370300200341b0056a41186a220c2002290300370300200341b0056a41206a22022006290300370300200341b0056a41286a220e2007290300370300200341e0056a220f200a290300370300200320093602f0052003200d3602e805200320032903c0063703b805200320053703b005200341fc056a20034180086a41c40010e8061a20034188036a41186a2206200229030037030020034188036a41106a2202200c29030037030020034188036a41086a2207200b290300370300200320032903b8053703880320054201520d02200f2903002104200e290300211f200341f0066a410e6a2007290300370100200341f0066a41166a2002290300370100200341f0066a411e6a2006290300220537010020034180086a411e6a220a200537010020032003290388033701f60620034180086a41086a200341f0066a41086a29010037030020034180086a41106a200341f0066a41106a29010037030020034180086a41186a200341f0066a41186a290100370300200320032901f006370380082006200a290100370300200220034180086a41166a290100370300200720034180086a410e6a29010037030020032003290186083703880320034188036a200341f8046a412010ea060d04200341f0066a200341fc056a10de0420033502f80642208620032802f0062202ad841005024020032802f406450d002002102f0b200341f0066a200341a8016a10df0420033502f80642208620032802f0062202ad841005024020032802f406450d002002102f0b2003201f3703a802200320043703b0020240201f200484500d002003200341f8046a3602c80120034180086a200341f8046a200341a8026a200341c8016a1096012003290380084201520d002003290388082105200341a8076a20034180086a41106a290300370300200341a0076a2005370300200341f0066a41086a41003a0000200341f9066a20032903f80437000020034181076a200341f8046a41086a29030037000020034189076a200341f8046a41106a29030037000020034191076a20034190056a290300370000200341033a00f00641c8e1ca004100200341f0066a108c010b200341f0066a41086a410a3a0000200341f9066a20032903a80137000020034181076a200341a8016a41086a29030037000020034189076a200341b8016a29030037000020034191076a200341c0016a2903003700002003410c3a00f00641c8e1ca004100200341f0066a108c0102402008450d002009102f0b200041043a0000410121060c150b024020032802a405450d00200a102f0b200041086a410a360200200041046a41a2c7c400360200200041026a41043a000020004183223b0100410121060c140b200041023a0000410121060c130b200041086a4109360200200041046a4199c7c400360200200041026a41053a000020004183223b01000c020b200041023a00000c100b20004183223b0100200041086a4109360200200041046a4199c7c400360200200041026a41053a00000b2008450d0e2009102f410121060c0f0b200141386a2903002105200141306a29030021042001412c6a2802002108200141286a2802002106200141246a2802002107200341c0026a200141196a290000370300200341b8026a200141116a290000370300200341b0026a200141096a290000370300200320012900013703a80220032002411a6a2901003703b0042003200241026a2901003703980420032002410a6a2901003703a0042003200241126a2901003703a8040240024020022d00014101470d0020022d000041ff01710d0020034188036a41186a20034198046a41186a29030037030020034188036a41106a20034198046a41106a29030037030020034188036a41086a20034198046a41086a29030037030020032003290398043703880320034188036a10e104450d012008ad4220862007ad8410032202290000211f200241086a2900002120200241106a290000211920034180086a41186a200241186a29000037030020034180086a41106a201937030020034180086a41086a20203703002003201f370380082002102f200341f0066a20034180086a10de04200341e0006a20032802f006220920032802f80641c8e1ca004100410010b50120032802602102024020032802f406450d002009102f0b20024101460d032003200341a8026a3602f406200320034180086a3602f006200341b0056a200341f0066a108001200341f0066a20034180086a10de0420032802f0062102200320032802f8063602cc01200320023602c80120072008200341c8016a109d02024020032802f406450d002002102f0b200341c8046a41186a200341b0056a41186a290300221f370300200341c8046a41106a200341b0056a41106a2903002220370300200341c8046a41086a200341b0056a41086a2903002219370300200320032903b00522213703c804200341f0066a41086a41073a0000200341f9066a202137000020034181076a201937000020034189076a202037000020034191076a201f3700002003410c3a00f00641c8e1ca004100200341f0066a108c014130102d2202450d08200220043703202002200329038803370000200241286a2005370300200241186a20034188036a41186a290300370000200241106a20034188036a41106a290300370000200241086a20034188036a41086a290300370000200341b4076a428180808010370200200341c4076a20034180086a41086a290300370200200341cc076a20034180086a41106a290300370200200341d4076a20034180086a41186a290300370200200320023602b007200341003602a807200342003703f00620032003290380083702bc07200341e4076a200341a8026a41086a290300370200200341ec076a200341a8026a41106a290300370200200341f4076a200341a8026a41186a290300370200200320032903a8023702dc07200341c8016a200341b0056a10df0420032802c8012108200320032802d0013602c406200320083602c006200341f0066a200341c0066a10da04024020032802cc01450d002008102f0b2002102f200041043a00002006450d0e0c0d0b200041023a000020060d0c0c0d0b200041023a000020060d0b0c0c0b200141306a2903002105200141286a2903002104200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a801024020022d00000d0020022d00014101470d00200241196a2d00002106200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a29010037039005200320063a008f05200320073a008e05200320083b018c05200320093a008b052003200a3a008a052003200b3b0188052003200c3a0087052003200d3a0086052003200e3b0184052003200f3a008305200320103a008205200320113b018005200320123a00ff04200320133a00fe04200320143b01fc04200320153a00fb04200320163a00fa04200320173b01f80402400240024002400240024002400240200341f8046a10e104450d0020034180086a41186a200341a8016a41186a29030037030020034180086a41106a200341a8016a41106a29030037030020034180086a41086a200341a8016a41086a290300370300200320032903a80137038008200341a0056a20034180086a10e204200341f0066a20032802a005220220032802a80510e004200341c8046a41086a2206200341f0066a41106a290300370300200341c8046a41106a2207200341f0066a41186a290300370300200341c8046a41186a2208200341f0066a41206a290300370300200341c8046a41206a220a200341f0066a41286a290300370300200341c8046a41286a220b200341a0076a290300370300200320032903f8063703c804200341a8076a2802002126200341ac076a2802002125200341b0076a2802002109200341f0066a41c4006a280200211e200341b8076a280200210e20032903f006212120034188036a200341bc076a41c40010e8061a024020214202510d0020034198046a41286a200b29030037030020034198046a41206a200a29030037030020034198046a41186a200829030037030020034198046a41106a200729030037030020034198046a41086a2006290300370300200320032903c80437039804200341a8026a20034188036a41c40010e8061a024020032802a405450d002002102f0b200341e8036a41086a220220034198046a41086a290300370300200341e8036a41106a220620034198046a41106a290300370300200341e8036a41186a220720034198046a41186a290300370300200341e8036a41206a220820034198046a41206a290300370300200341e8036a41286a220a20034198046a41286a29030037030020032003290398043703e803200341c8016a200341a8026a41c40010e8061a200341c0066a41086a2002290300370300200341c0066a41106a2006290300370300200341c0066a41186a2007290300370300200341c0066a41206a2008290300370300200341c0066a41286a200a290300370300200320032903e8033703c006200341b0056a200341c8016a41c40010e8061a200320093602980520034188036a41186a200341f8046a41186a29030037030020034188036a41106a200341f8046a41106a29030037030020034188036a41086a200341f8046a41086a290300370300200320032903f8043703880341002102200e41014b0d020240200e0e020004000b200341f0066a41186a20034188036a41186a290300370300200341f0066a41106a20034188036a41106a290300370300200341f0066a41086a20034188036a41086a29030037030020032003290388033703f00641002107200341f0066a21060c040b024020032802a405450d002002102f0b200041086a410a360200200041046a41a2c7c400360200200041026a41043a000020004183223b0100410121060c160b200041023a0000410121060c150b200e210603402006410176220720026a220820022009200841306c6a20034188036a412010ea064101481b2102200620076b220641014b0d000b0b2009200241306c6a220620034188036a412010ea062207450d01200341f0066a41186a20034188036a41186a290300370300200341f0066a41106a20034188036a41106a290300370300200341f0066a41086a20034188036a41086a29030037030020032003290388033703f006200341f0066a2106200e2007411f7620026a2207490d040b0240200e201e470d00201e41016a2202201e490d0f201e41017422082002200820024b1bad42307e221f422088a70d0f201fa722024100480d0f02400240201e0d002002102d21090c010b2009201e41306c2002103121090b2009450d0b2003200936029805200241306e211e0b2009200741306c6a220241306a2002200e20076b41306c10e9061a200241286a200537030020022004370320200241186a200641186a290300370300200241106a200641106a290300370300200241086a200641086a29030037030020022006290300370300200e41016a210e0c010b200341c8046a41186a220720034188036a41186a290300370300200341c8046a41106a220820034188036a41106a290300370300200341c8046a41086a220a20034188036a41086a29030037030020032003290388033703c804200e20024d0d01200620032903c804370300200a290300211f20082903002120200729030021192009200241306c6a22022004370320200641186a2019370300200641106a2020370300200641086a201f370300200241286a20053703000b200341f0066a10e30420032802f0062124200328029805210f02400240200e0d00410021090c010b202420032802f80622024105746a210a2024410020021b2106202441206a202420021b21024100210d4100210b0340200b220c41016a210b200f200c41306c6a2109024002400340024020060d00410021060c020b20062009412010ea06220741004a0d01410020022002200a4622081b21062002200241206a20081b2208210220074100480d000b024002400240200d0d004100210d0c010b200c200d6b2202200e4f0d0120034180086a41286a2207200f200241306c6a220241286a220c29030037030020034180086a41206a2210200241206a221129030037030020034180086a41186a2212200241186a221329030037030020034180086a41106a2214200241106a221529030037030020034180086a41086a2216200241086a22172903003703002003200229030037038008200941086a22182903002105200941106a221a2903002104200941186a221b290300211f200941206a221c290300212020092903002119200c200941286a221d290300370300201120203703002013201f370300201520043703002017200537030020022019370300201d2007290300370300201c2010290300370300201b2012290300370300201a20142903003703002018201629030037030020092003290380083703000b200821020c020b4188bbca002002200e103b000b200d41016a210d0b200b200e470d000b200e200d4100200d417f6a200e491b6b21090b024020032802f406450d002024102f0b20034180086a41186a420037030020034180086a41106a2207420037030020034180086a41086a22024200370300200342003703800841bd98ca00ad42808080808002841001220629000021052002200641086a29000037030020032005370380082006102f41ebdec700ad4280808080f00084100122062900002105200341a8026a41086a2208200641086a290000370300200320053703a8022006102f200720032903a8022205370300200341f0066a41086a2002290300370300200341f0066a41106a2005370300200341f0066a41186a200829030037030020032003290380083703f00620034180086a200341f0066a10e4044100210602400240200329028408420020032802800822021b2205422088a7220741306c22080d004101210a4100210c0c010b200841306d220841ffffff3f712008470d0d200841057422084100480d0d2008102d220a450d092008410576210c0b2005a7210d2002410820021b210b02402007450d00200741306c210841012107200a2102200b21060340200641086a2900002105200641106a29000021042006290000211f200241186a200641186a290000370000200241106a2004370000200241086a20053700002002201f370000200741016a2107200241206a2102200641306a2106200841506a22080d000b200741017621060b0240200d450d00200b102f0b0240200c450d00200a102f0b02400240200920064f0d00202621020c010b4101210220264101460d00200341f0066a41186a4200370300200341f0066a41106a22084200370300200341f0066a41086a22064200370300200342003703f006418de6c300ad4280808080e000841001220729000021052006200741086a290000370300200320053703f0062007102f419ce6c300ad4280808080e00084100122072900002105200341a8026a41086a220a200741086a290000370300200320053703a8022007102f200820032903a802220537030020034180086a41086a200629030037030020034180086a41106a200537030020034180086a41186a200a290300370300200320032903f00637038008200341e8006a20034180086a412010950120032802682107200328026c210820034198046a41186a200341a8016a41186a290300220537030020034198046a41106a200341a8016a41106a290300220437030020034198046a41086a200341a8016a41086a290300221f370300200320032903a801222037039804200641083a0000200341f9066a202037000020034181076a201f37000020034189076a200437000020034191076a20053700002003410c3a00f00641c8e1ca004100200341f0066a108c0120084180e1016a4180e10120071b21250b200341f0066a41106a200341c8066a290300370300200341f0066a41186a200341c0066a41106a290300370300200341f0066a41206a200341c0066a41186a290300370300200341f0066a41286a200341c0066a41206a290300370300200341a0076a200341c0066a41286a290300370300200341b8076a2009360200200341f0066a41c4006a201e360200200341ac076a2025360200200320213703f006200320032903c0063703f8062003200f3602b007200320023602a807200341bc076a200341b0056a41c40010e8061a20034180086a200341a8016a10df042003280280082102200320032802880836028c032003200236028803200341f0066a20034188036a10da040240200328028408450d002002102f0b0240201e450d00200f102f0b200041043a0000410121060c100b419cc3ca002002200e103b000b419ae3c300411e41f8b4ca001039000b200041023a0000410121060c0d0b20004183223b0100200041086a410c360200200041046a41acc7c400360200200041026a41033a000020060d090c0a0b200020023a0000200020032903c804370001200041086a20032800cf0436000020060d0c0c0d0b200041023a00000c0a0b41012106200041013a00000c090b20034190056a200141196a29000037030020034188056a200141116a29000037030020034180056a200141096a290000370300200320012900013703f804024002400240024020022d00000d0020022d00014101470d0020034188036a41186a200341f8046a41186a29030037030020034188036a41106a200341f8046a41106a29030037030020034188036a41086a200341f8046a41086a290300370300200320032903f80437038803200341a8016a20034188036a10e204200341f0066a20032802a801220920032802b00110e004200341c8046a41086a220a200341f0066a41106a290300370300200341c8046a41106a220b200341f0066a41186a290300370300200341c8046a41186a220c200341f0066a41206a290300370300200341c8046a41206a220d200341f0066a41286a290300370300200341c8046a41286a220e200341a0076a290300370300200320032903f8063703c804200341a8076a2802002102200341ac076a2802002107200341b0076a2802002108200341f0066a41c4006a2802002106200341b8076a280200210f20032903f006210520034188036a200341bc076a41c40010e8061a024020054202510d0020034198046a41286a200e29030037030020034198046a41206a200d29030037030020034198046a41186a200c29030037030020034198046a41106a200b29030037030020034198046a41086a200a290300370300200320032903c80437039804200341a8026a20034188036a41c40010e8061a024020032802ac01450d002009102f0b200341e8036a41086a220920034198046a41086a290300370300200341e8036a41106a220a20034198046a41106a290300370300200341e8036a41186a220b20034198046a41186a290300370300200341e8036a41206a220c20034198046a41206a290300370300200341e8036a41286a220d20034198046a41286a29030037030020032003290398043703e803200341c8016a200341a8026a41c40010e8061a200341c0066a41086a220e2009290300370300200341c0066a41106a2209200a290300370300200341c0066a41186a220a200b290300370300200341c0066a41206a220b200c290300370300200341c0066a41286a220c200d290300370300200320032903e8033703c00620034180086a200341c8016a41c40010e8061a200341f8056a200f360200200341b0056a41c4006a2006360200200341ec056a2007360200200341b0056a41106a200e290300370300200341b0056a41186a2009290300370300200341b0056a41206a200a290300370300200341b0056a41286a200b290300370300200341e0056a200c290300370300200320053703b005200320083602f005200320032903c0063703b805200320023602e805200341fc056a20034180086a41c40010e8061a20024101460d024190c7c4002102410621070c030b024020032802ac01450d002009102f0b200041086a410a360200200041046a41a2c7c400360200200041026a41043a000020004183223b0100410121060c0c0b200041023a0000410121060c0b0b200341f0066a41186a4200370300200341f0066a41106a220a4200370300200341f0066a41086a22024200370300200342003703f006418de6c300ad4280808080e000841001220929000021052002200941086a290000370300200320053703f0062009102f419ce6c300ad4280808080e00084100122092900002105200341a8026a41086a220b200941086a290000370300200320053703a8022009102f200a20032903a802220537030020034180086a41086a200229030037030020034180086a41106a200537030020034180086a41186a200b290300370300200320032903f00637038008200341a0016a20034180086a412010950120032802a401410020032802a0011b20074f0d014187c7c4002102410721070b20004183223b0100200041086a4109360200200041046a2002360200200041026a20073a00002006450d082008102f410121060c090b200341f0066a200341fc056a10de0420033502f80642208620032802f0062202ad841005024020032802f406450d002002102f0b200341f0066a41186a200341f8046a41186a290300370300200341f0066a41106a200341f8046a41106a290300370300200341f0066a41086a200341f8046a41086a290300370300200320032903f8043703f00620034180086a200341f0066a10e2042003350288084220862003280280082202ad8410050240200328028408450d002002102f0b200341f0066a200341b0056a41900110e8061a200341b8076a280200211d200341b4076a280200212820032802b007211820034188036a10e304200328028803211e02400240201d0d004100211d0c010b201e20032802900322024105746a210a201e410020021b2106201e41206a201e20021b21024100210d4100210b0340200b220c41016a210b2018200c41306c6a2109024002400340024020060d00410021060c020b20062009412010ea06220741004a0d01410020022002200a4622081b21062002200241206a20081b2208210220074100480d000b024002400240200d0d004100210d0c010b200c200d6b2202201d4f0d0120034180086a41286a22072018200241306c6a220241286a220c29030037030020034180086a41206a220e200241206a220f29030037030020034180086a41186a2210200241186a221129030037030020034180086a41106a2212200241106a221329030037030020034180086a41086a2214200241086a22152903003703002003200229030037038008200941086a22162903002105200941106a22172903002104200941186a221a290300211f200941206a221b290300212020092903002119200c200941286a221c290300370300200f20203703002011201f370300201320043703002015200537030020022019370300201c2007290300370300201b200e290300370300201a2010290300370300201720122903003703002016201429030037030020092003290380083703000b200821020c020b4188bbca002002201d103b000b200d41016a210d0b200b201d470d000b200d450d00201d201d200d6b2202201d2002491b211d0b0240200328028c03450d00201e102f0b201d4115490d020240201d4101762229ad42307e2205422088a70d002005a72202417f4c0d004108212502402002450d002002102d2225450d02200241306e21290b201841506a212a201841907f6a212b4104211041002126410021164100210e201d2115034020152108410021154101210902402008417f6a2227450d000240024002400240024002402018202741306c6a220241206a290300200841306c220720186a41406a2206290300220454200241286a290300221f200641086a290300220554201f2005511b0d002008417e6a210b202b20076a2102410021154100210603400240200b2006470d00200821090c080b2004200229030022205a21072005200241086a290300221f5121092005201f5a210a200241506a2102200641016a210620202104201f21052007200a20091b0d000b200641016a21092006417f7320086a21070c010b202b200841066c410374220b6a21022027210702400340024020074101470d00410021070c020b2004200229030022205421062005200241086a290300221f5121092005201f54210a200241506a21022007417f6a210720202104201f21052006200a20091b0d000b0b20082007490d012008201d4b0d03200820076b2209410176220a450d00202a200b6a21022018200741306c6a2106034020034180086a41286a220b200641286a220c29030037030020034180086a41206a220d200641206a220f29030037030020034180086a41186a2211200641186a221229030037030020034180086a41106a2213200641106a221429030037030020034180086a41086a2215200641086a22172903003703002003200629030037038008200241086a221a2903002105200241106a221b2903002104200241186a221c290300211f200241206a221e2903002120200241286a2224290300211920062002290300370300200c2019370300200f20203703002012201f37030020142004370300201720053703002024200b290300370300201e200d290300370300201c2011290300370300201b2013290300370300201a20152903003703002002200329038008370300200241506a2102200641306a2106200a417f6a220a0d000b0b024020070d00200721150c050b0240200941094d0d00200721150c050b2008201d4b0d012018200741306c6a210c034020082007417f6a2215490d040240200820156b22094102490d002018200741306c6a220241206a220a2903002018201541306c6a220641206a220b290300221f5a200241286a220d2903002204200641286a220f29030022055a20042005511b0d00200629030021042006200229030037030020034180086a41186a2211200641186a221229030037030020034180086a41106a2213200641106a221429030037030020034180086a41086a2217200641086a221a290300370300201a200241086a2903003703002014200241106a2903003703002012200241186a290300370300200b200a290300370300200f200d2903003703002003200437038008024020094103490d002027210a200c210b20064180016a290300201f5a20064188016a290300220420055a20042005511b0d0002400340200b220241286a200241d8006a290300370300200241206a200241d0006a290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a220b2903003703002007200a417f6a220a460d0120024180016a290300201f5a20024188016a290300220420055a20042005511b450d000b0b200241306a21020b2002201f3703202002200329038008370300200241286a2005370300200241186a2011290300370300200241106a2013290300370300200241086a20172903003703000b2015450d05200c41506a210c201521072009410a4f0d050c000b0b20072008104b000b20082007417f6a2215490d010b2008201d104a000b20152008104b000b0240200e2026470d00202641016a22022026490d07202641017422062002200620024b1b220241ffffffff01712002470d07200241037422024100480d070240024020260d002002102d21100c010b201020264103742002103121100b2010450d03200241037621262016210e0b2010200e4103746a2202200936020420022015360200201641016a220e21160240200e4102490d000240034002400240024002402010200e417f6a22164103746a2202280200450d00200e41037420106a220841746a2802002207200228020422064d0d000240200e41024b0d00200e21164102210e2015450d0b0c080b2010200e417d6a22114103746a2802042202200620076a4d0d010240200e41034b0d00200e21164103210e2015450d0b0c080b200841646a280200200220076a4d0d01200e21160c060b200e4103490d01200228020421062010200e417d6a22114103746a28020421020b20022006490d010b200e417e6a21110b024002400240024002400240200e201141016a22174b221a450d00200e20114b221b450d01201020114103746a2212280204221c20122802006a2202201020174103746a22132802002214490d022002201d4b0d032018201441306c6a220d2013280204220f41306c22066a2108200241306c2107200220146b220a200f6b2202200f4f0d0420252008200241306c220610e806220a20066a210902400240200f4101480d00200241014e0d010b20082102200a21060c060b202a20076a21072008210203402007200241506a220b200941506a220c200941706a2206290300200241706a220829030054200641086a2903002205200841086a29030022045420052004511b22081b2206290300370300200741086a200641086a290300370300200741106a200641106a290300370300200741186a200641186a290300370300200741206a200641206a290300370300200741286a200641286a2903003703002009200c20081b21090240200d200b200220081b2202490d00200a21060c070b200741506a2107200a2106200a2009490d000c060b0b41c4c2ca002017200e103b000b41c4c2ca002011200e103b000b20142002104b000b2002201d104a000b2025200d200610e806220c20066a210902400240200f4101480d00200a200f4a0d010b200d2102200c21060c010b201820076a210b200c2106200d21020340200220082006200841206a290300200641206a29030054200841286a2903002205200641286a29030022045420052004511b220a1b2207290300370300200241086a200741086a290300370300200241106a200741106a290300370300200241186a200741186a290300370300200241206a200741206a290300370300200241286a200741286a2903003703002006200641306a200a1b2106200241306a2102200841306a2008200a1b2208200b4f0d01200920064b0d000b0b20022006200920066b220720074130706b10e8061a0240201b450d0020122014360200201241046a201c200f6a360200201a450d022013201341086a200e2017417f736a41037410e9061a2016210e201641014d0d030c010b0b419cc3ca002011200e103b000b41b8e3c300411d41f8b4ca001039000b2015450d030c000b0b103d000b1036000b02402026450d002010102f0b2029450d012025102f0c010b201d4102490d00201d417f6a21072018201d41306c6a21094100210a0340024002400240201d20072202417f6a2207490d00201d20076b22084102490d022018200241306c6a220241206a220b2903002018200741306c6a220641206a220c290300221f5a200241286a220d2903002204200641286a220e29030022055a20042005511b0d02200629030021042006200229030037030020034180086a41186a220f200641186a221029030037030020034180086a41106a2211200641106a221229030037030020034180086a41086a2213200641086a22142903003703002014200241086a2903003703002012200241106a2903003703002010200241186a290300370300200c200b290300370300200e200d290300370300200320043703800820084103490d01200a21082009210b20064180016a290300201f5a20064188016a290300220420055a20042005511b0d010340200b220241506a22062002290300370300200641286a200241286a290300370300200641206a200241206a290300370300200641186a200241186a290300370300200641106a200241106a290300370300200641086a200241086a2903003703002008417f6a2208450d02200241306a210b200241d0006a290300201f5a200241d8006a290300220420055a20042005511b0d020c000b0b2007201d104b000b2002201f3703202002200329038008370300200241286a2005370300200241186a200f290300370300200241106a2011290300370300200241086a20132903003703000b200a41016a210a200941506a210920070d000b0b200341c8016a41f4c7c40010b40220034180086a200341c8016a108d020240201d201d41017622024d0d0020034188086a29030022052018200241306c6a220241286a29030022042002290320221f200329038008222056200420055620042005511b22021b21042020201f20021b2105024020032903f0064201520d00200341a8026a41186a200341f0066a41206a290300370300200341a8026a41106a200341f0066a41186a290300370300200341b0026a200341f0066a41106a290300370300200320032903f8063703a802200341f0066a41286a290300211f2003200341f0066a41306a29030022203703c8062003201f3703c0060240201f202084500d002003200341a8026a3602c80420034188036a200341a8026a200341c0066a200341c8046a1096012003290388034201520d00200329039003211f200341b8086a20034188036a41106a290300370300200341b0086a201f37030020034180086a41086a41003a000020034189086a20032903a80237000020034191086a200341a8026a41086a29030037000020034199086a200341a8026a41106a290300370000200341a1086a200341c0026a290300370000200341033a00800841c8e1ca00410020034180086a108c010b200341a8026a200341dc076a412010ea06450d0020034190016a2005200442e400420010ee0620034180016a200329039001221f20034190016a41086a2903002220429c7f427f10ed06200341f0006a201f20204214420010ed0620034180086a200341c8016a200341a8026a2003290370222020052003290380017ca741ff0071220241146c200241056e2202419c7f6c6a41fcff037141324b20026aad7c221f200341f0006a41086a290300201f202054ad7c2220410110f202200420207d2005201f54ad7d21042005201f7d21050b4101210620034180086a200341c8016a200341dc076a20052004410110f20202402028450d002018102f0b200041043a00000c050b41c4c2ca002002201d103b000b1038000b2007102f0b41002107410121060c040b410121060b410121070c020b2007102f0b41012107410021060b024020012d0000417c6a220241024b0d000240024020020e03010200010b2007450d01200141286a280200450d01200141246a280200102f0c010b2006450d00200141286a280200450d00200141246a280200102f0b20034180096a24000b8b0101017f41f2cbca00ad4280808080d001841008024002400240024020002d00000e0400010203000b200041046a29020010080f0b41e4cbca00ad4280808080e0018410080f0b41dacbca00ad4280808080a0018410080f0b20003100011019200041026a31000010190240200041046a2802002201450d00200041086a3502004220862001ad8410080b0b9c06010d7f23004180016b220224002002412036020c20022001360208200241106a2001ad42808080808004841002107302400240024002400240024020022802102203450d00200228021421042002200241186a280200360224200220033602202002200241206a10e60120022802000d0320022802042205200228022422014105762206200620054b1b22074105742206417f4c0d010240024020070d00410121080c010b2006102d2208450d030b02402005450d004100210903402001210a200241003a00782009220b41016a2109410021010240024002400340200a2001460d01200241d8006a20016a200228022022062d00003a00002002200641016a3602202002200141016a22063a00782006210120064120470d000b200241386a41186a220c200241d8006a41186a290300370300200241386a41106a220d200241d8006a41106a290300370300200241386a41086a220e200241d8006a41086a290300370300200220022903583703382007200b470d020240200b41017422012009200120094b1b220141ffffff3f712001470d002001410574220141004e0d020b1038000b200241003602240240200141ff0171450d00200241003a00780b2007450d072008102f0c070b02400240200b0d002001102d21080c010b2008200b4105742001103121080b2008450d05200141057621070b200a20066b21012008200b4105746a220b2002290338370000200b41186a200c290300370000200b41106a200d290300370000200b41086a200e29030037000020092005470d000b2002200a20066b3602240b2008450d032000200736020420002008360200200041086a20053602000c040b200041003602000c040b103d000b1036000b20024100360240200242013703382002410b36022c2002200241086a3602282002200241386a360234200241ec006a41013602002002420137025c200241b885c7003602582002200241286a360268200241346a41d8dbc100200241d8006a103c1a200235024042208620023502388410080240200228023c450d002002280238102f0b200041003602000b2004450d002003102f0b20024180016a24000ba07f05037f037e167f027e037f230041b0046b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0a0001020304050a0b0c0d000b2003419c016a41013602002003420137028c01200341b4d8c90036028801200341043602ec03200341fcdbc9003602e8032003200341e8036a3602980120034188016a41e8d8c9001043000b200141246a2802002104200341e0006a200141196a290000370300200341d8006a200141116a290000370300200341d0006a200141096a2900003703002003200129000137034820032002411a6a2901003703a0012003200241026a2901003703880120032002410a6a290100370390012003200241126a2901003703980102400240024020022d00014101470d0020022d000041ff01710d00200341e8006a41186a20034188016a41186a290300370300200341e8006a41106a20034188016a41106a290300370300200341e8006a41086a20034188016a41086a290300370300200320032903880137036820034188016a200341e8006a10bf0520032d0088014101470d01200341ff036a2202200341a1016a290000370000200341e8036a41106a220520034188016a41126a290100370300200341d1036a20034188016a410a6a290100370000200341d9036a2005290300370000200341c8036a41186a2002290000370000200320032d0089013a00c8032003200329018a013700c903200341c8036a200341c8006a412010ea060d0220034188016a200441b00210e8061a200341e8036a410a6a200341d0006a290300370100200341e8036a41126a200341d8006a29030037010020034182046a200341e0006a29030037010020034180023b01e803200320032903483701ea03200020034188016a200341e8036a108b010c240b200041023a00002004108e010c230b20004183343b0100200041086a410a360200200041046a41b7cdc700360200200041026a41003a00002004108e010c220b20004183343b0100200041086a410a360200200041046a41b7cdc700360200200041026a41003a00002004108e010c210b200341c8036a41186a200141196a290000370300200341c8036a41106a200141116a290000370300200341c8036a41086a200141096a290000370300200320012900013703c803200341e8036a41186a200141396a290000370300200341e8036a41106a200141316a290000370300200341e8036a41086a200141296a2900003703002003200141216a2900003703e80320022d000120022d0000410047720d0341e796c800ad4280808080800184100122022900002106200341b8036a41086a200241086a290000370300200320063703b8032002102f41d49ac800ad4280808080d00084100122022900002106200341c8006a41086a200241086a290000370300200320063703482002102f4120102d2202450d19200220032903e803370000200241186a200341e8036a41186a290300370000200241106a200341e8036a41106a290300370000200241086a200341e8036a41086a2903003700002002ad4280808080800484100322042900002106200441086a2900002107200441106a290000210820034188016a41186a2205200441186a29000037030020034188016a41106a2209200837030020034188016a41086a220a200737030020032006370388012004102f2002102f41c000102d2202450d19200220032903b803370000200241086a200341b8036a41086a29030037000020022003290348370010200241186a200341c8006a41086a2903003700002002200329038801370020200241286a200a290300370000200241306a2009290300370000200241386a20052903003700004120102d2204450d19200420032903c803370000200441186a200341c8036a41186a2205290300370000200441106a200341c8036a41106a2209290300370000200441086a200341c8036a41086a220a2903003700002002ad42808080808008842004ad428080808080048410042004102f2002102f20034192016a200a2903003701002003419a016a2009290300370100200341a2016a2005290300370100200341aa016a20032903e803370100200341b2016a200341e8036a41086a290300370100200341ba016a200341e8036a41106a290300370100200341c2016a200341e8036a41186a29030037010020034193083b018801200320032903c80337018a0141c8e1ca00410020034188016a108c01200041043a0000410121040c1e0b200141086a2802002109200141046a280200210a02400240024002400240024020022d00000d0020022d00014101470d002001410c6a280200210b200141106a280200210c200141026a2f0100210d200241196a2d00002104200241186a2d00002105200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d000021132002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241096a2d00002118200241086a2d00002119200241066a2f0100211a200241056a2d0000211b200241046a2d0000211c200241026a2f0100211d20032002411a6a2901003703e003200320043a00df03200320053a00de032003200e3b01dc032003200f3a00db03200320103a00da03200320113b01d803200320123a00d703200320133a00d603200320143b01d403200320153a00d303200320163a00d203200320173b01d003200320183a00cf03200320193a00ce032003201a3b01cc032003201b3a00cb032003201c3a00ca032003201d3b01c80341e796c800ad4280808080800184100122022900002106200341e8036a41086a200241086a290000370300200320063703e8032002102f41f898c800ad4280808080b0018410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f4120102d2204450d1e200420032903c803370000200441186a200341c8036a41186a290300370000200441106a200341c8036a41106a290300370000200441086a200341c8036a41086a2903003700002004ad428080808080048410032202290018210620022d0017210520022d0016210e20022f0014210f20022d0013211020022d0012211120022f0010211220022d000f211320022d000e211420022f000c211520022d000b211620022d000a211720022f0008211820022d0007211920022d0006211a20022f0004211b20022d0003211c20022d0002211d20022f0000211e2002102f2004102f41c000102d2202450d1e200220032903e803370000200220032903880137001020022006370038200220053a00372002200e3a00362002200f3b0034200220103a0033200220113a0032200220123b0030200220133a002f200220143a002e200220153b002c200220163a002b200220173a002a200220183b0028200220193a00272002201a3a00262002201b3b00242002201c3a00232002201d3a00222002201e3b0020200241086a200341e8036a41086a290300370000200241186a20034188016a41086a290300370000200341186a200241c00041c8e1ca004100410010b501200328021821042002102f20044101460d01200d450d02200b450d03200b200d490d04200b41094b0d11200b41016a2104200a210203402004417f6a22044102490d062002200241206a2205412010ea06210e20052102200e4100480d000b20004183343b0100200041086a4109360200200041046a4187cdc700360200200041026a41043a00000c240b200041023a00000c230b20004183343b0100200041086a4112360200200041046a41e7ccc700360200200041026a41063a00000c220b20004183343b0100200041086a410d360200200041046a41aacdc700360200200041026a41013a00000c210b20004183343b0100200041086a4110360200200041046a419acdc700360200200041026a41023a00000c200b20004183343b0100200041086a4110360200200041046a419acdc700360200200041026a41023a00000c1f0b200341086a200bad42004280c0f4c198af0b420010ed062003200329030822074280808d93f5d7f1007c22063703682003200341086a41086a2903002006200754ad7c22073703702003200341c8036a360298042003200341c8036a3602482003200341c8006a36029001200320034198046a36028c012003200341e8006a36028801200341e8036a200341c8036a20034188016a1094010240024020032802e8034101470d00200320032900ed03370388012003200341f4036a28000036008f0120032d00ec0321020c010b41042102200341e8036a41086a2903004201520d00200341e8036a41106a290300210820032802482104200341c0016a200341e8036a41186a290300370300200341b8016a200837030020034188016a41086a41003a000020034191016a200429000037000020034199016a200441086a290000370000200341a1016a200441106a290000370000200341a9016a200441186a290000370000200341033a00880141c8e1ca00410020034188016a108c010b20032003290388013703b8032003200328008f013600bf030240200241ff01714104470d0041e796c800ad4280808080800184100122022900002108200341b8036a41086a200241086a290000370300200320083703b8032002102f41f898c800ad4280808080b00184100122022900002108200341c8006a41086a200241086a290000370300200320083703482002102f4120102d2202450d19200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a2903003700002002ad4280808080800484100322042900002108200441086a290000211f200441106a290000212020034188016a41186a2205200441186a29000037030020034188016a41106a220e202037030020034188016a41086a201f37030020032008370388012004102f2002102f41c000102d2214450d19201420032903b803370000201441086a200341b8036a41086a29030037000020142003290348370010201441186a200341c8006a41086a2903003700002014200329038801370020201441286a20034188016a41086a290300370000201441306a200e290300370000201441386a2005290300370000200341003602900120034201370388014104102d2202450d1920034284808080c00037028c0120032002360288012002200c36000020024104411410312202450d19200220063700042002410c6a200737000020034294808080c00237028c012003200236028801200b20034188016a1069200b4105742112410020032802900122116b2113200328028c0121104100210e410021020340201120026a210f02400240201320106a200e6a4120490d0020032802880121040c010b200f41206a2204200f490d1d201041017422052004200520044b1b22054100480d1d0240024020100d002005102d21040c010b20032802880120102005103121040b2004450d1b2003200536028c012003200436028801200521100b200420116a20026a220441086a200a20026a220541086a290000370000200441106a200541106a290000370000200441186a200541186a2900003700002003200f41206a3602900120042005290000370000200e41606a210e2012200241206a2202470d000b201120026a210502400240201020116b20026b4102490d0020032802880121040c010b200541026a22042005490d1c2010410174220e2004200e20044b1b220e4100480d1c0240024020100d00200e102d21040c010b2003280288012010200e103121040b2004450d1a2003200e36028c012003200436028801200e21100b200420116a20026a200d3b00002014ad4280808080800884200541026aad4220862004ad84100402402010450d002004102f0b2014102f02402009450d00200a102f0b20034192016a200341d0036a2903003701002003419a016a200341d8036a290300370100200341a2016a200341e0036a290300370100200341133b018801200320032903c80337018a014100210541c8e1ca00410020034188016a108c01200041043a0000410121040c210b200020023a0000200020032903b803370001200041086a20032800bf033600000c1e0b200341e8006a41186a200141196a290000370300200341e8006a41106a200141116a290000370300200341e8006a41086a200141096a2900003703002003200129000137036820022d00000d0b20022d00014101470d0b200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211a200241026a2f0100211b20032002411a6a2901003703e003200320043a00df03200320053a00de03200320093b01dc032003200a3a00db032003200e3a00da032003200f3b01d803200320103a00d703200320113a00d603200320123b01d403200320133a00d303200320143a00d203200320153b01d003200320163a00cf03200320173a00ce03200320183b01cc03200320193a00cb032003201a3a00ca032003201b3b01c80341e796c800ad4280808080800184100122022900002106200341b8036a41086a200241086a290000370300200320063703b8032002102f41f898c800ad4280808080b00184100122022900002106200341c8006a41086a200241086a290000370300200320063703482002102f4120102d2202450d1720022003290368370000200241186a200341e8006a41186a290300370000200241106a200341e8006a41106a290300370000200241086a200341e8006a41086a2903003700002002ad4280808080800484100322042900002106200441086a2900002107200441106a290000210820034188016a41186a2205200441186a29000037030020034188016a41106a2209200837030020034188016a41086a200737030020032006370388012004102f2002102f41c000102d2202450d17200220032903b803370000200241086a200341b8036a41086a29030037000020022003290348370010200241186a200341c8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a290300370000200241306a2009290300370000200241386a2005290300370000200341306a200241c00041c8e1ca004100410010b501200328023021052002102f4101210420054101470d09200341c8006a200341e8006a10c0054120102d2202450d17200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a29030037000020032002ad428080808080048410062204290000370390042004102f20034194016a200241206a360200200341003a0098012003200236029001200320034190046a41086a220f36028c01200320034190046a36028801200341e8036a20034188016a106c2002102f20032802e803210a02400240200328024c2205200328025022046b20032802f0032209490d00200328024821020c010b200420096a22022004490d1a2005410174220e2002200e20024b1b220e4100480d1a0240024020050d00200e102d21020c010b20032802482005200e103121020b2002450d182003200e36024c20032002360248200e21050b2003200420096a220e360250200220046a200a200910e8061a024020032802ec03450d00200a102f0b200341286a2002200e41c8e1ca004100410010b5012003280228210902402005450d002002102f0b4101210420094101460d0c2003420037035020034280808d93f5d7f1003703482003200341c8036a360290042003200341c8036a36029804200320034198046a36029001200320034190046a36028c012003200341c8006a36028801200341e8036a200341c8036a20034188016a1094010240024020032802e8034101470d00200320032900ed03370388012003200341f4036a28000036008f0120032d00ec0321020c010b41042102200341e8036a41086a2903004201520d00200341e8036a41106a29030021062003280298042104200341c0016a200341e8036a41186a290300370300200341b8016a200637030020034188016a41086a41003a000020034191016a200429000037000020034199016a200441086a290000370000200341a1016a200441106a290000370000200341a9016a200441186a290000370000200341033a00880141c8e1ca00410020034188016a108c010b20032003290388013703b8032003200328008f013600bf030240200241ff01714104470d0020034188016a41186a420037030020034188016a41106a2205420037030020034188016a41086a220242003703002003420037038801418de6c300ad4280808080e000841001220429000021062002200441086a29000037030020032006370388012004102f419ce6c300ad4280808080e00084100122042900002106200341c8006a41086a2209200441086a290000370300200320063703482004102f200520032903482206370300200341e8036a41086a2002290300370300200341e8036a41106a2006370300200341e8036a41186a200929030037030020032003290388013703e803200341206a200341e8036a41201095012003280224210220032802202104200341a4016a4100360200200342003703900120034280808d93f5d7f100370388012003420137029c0120032002410020041b36029801200341b8036a200341e8006a10c0054120102d2202450d18200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a29030037000020032002ad428080808080048410062204290000370390042004102f200341f4036a200241206a360200200341003a00f803200320023602f0032003200f3602ec03200320034190046a3602e803200341c8006a200341e8036a106c2002102f2003280248210a0240024020032802bc03220520032802c00322046b20032802502209490d0020032802b80321020c010b200420096a22022004490d1b2005410174220e2002200e20024b1b220e4100480d1b0240024020050d00200e102d21020c010b20032802b8032005200e103121020b2002450d192003200e3602bc03200320023602b803200e21050b2003200420096a220e3602c003200220046a200a200910e8061a0240200328024c450d00200a102f0b2003200e3602ec03200320023602e80320034188016a200341e8036a10be0502402005450d002002102f0b200341aa016a20032903c80337010020034192016a200341e8006a41086a2903003701002003419a016a200341e8006a41106a290300370100200341a2016a200341e8006a41186a290300370100200341b2016a200341c8036a41086a290300370100200341ba016a200341c8036a41106a290300370100200341c2016a200341c8036a41186a29030037010020034193023b0188012003200329036837018a0141c8e1ca00410020034188016a108c01200041043a0000410121040c1d0b200020023a0000200020032903b803370001200041086a20032800bf03360000410121040c1c0b200341e8006a41186a200141196a290000370300200341e8006a41106a200141116a290000370300200341e8006a41086a200141096a29000037030020032001290001370368200341c8036a41186a200141396a290000370300200341c8036a41106a200141316a290000370300200341c8036a41086a200141296a2900003703002003200141216a2900003703c8032002411a6a2901002106200241196a2d00002105200241186a2d00002109200241166a2f0100210a200241156a2d0000210e200241146a2d0000210f200241126a2f01002110200241116a2d00002111200241106a2d000021122002410e6a2f010021132002410d6a2d000021142002410c6a2d000021152002410a6a2f01002116200241096a2d00002117200241086a2d00002118200241066a2f01002119200241056a2d0000211a200241046a2d0000211b200241026a2f0100211c41012104024020022d00000d0020022d000141014721040b200320063703a001200320053a009f01200320093a009e012003200a3b019c012003200e3a009b012003200f3a009a01200320103b019801200320113a009701200320123a009601200320133b019401200320143a009301200320153a009201200320163b019001200320173a008f01200320183a008e01200320193b018c012003201a3a008b012003201b3a008a012003201c3b01880102400240024020040d00200341e8036a41186a20034188016a41186a290300370300200341e8036a41106a20034188016a41106a290300370300200341e8036a41086a20034188016a41086a29030037030020032003290388013703e80320034188016a200341e8006a10c1050240200328029c01220a450d00200341a4016a2204280200210220032802a001210f20034188016a200341e8006a200341c8036a10c205200328029c01220e450d0520034190016a290300210620042802002111200329038801210720032802a0012110200328029801211341c6ccc7002112200241014b0d0241002104410921054109210920020e021703170b20004183343b0100200041086a410e360200200041046a41f9ccc700360200200041026a41053a0000410121040c1e0b200041023a0000410121040c1d0b41002104034020042002410176220520046a2209200a20094105746a200341e8036a412010ea0641004a1b2104200220056b220241014b0d000b0b4109210541092109200a20044105746a200341e8036a412010ea060d13201141014b0d034100210220110e020212020b200041023a00000c190b20004183343b0100200041086a410a360200200041046a41cfccc700360200200041026a41083a00000c170b20034188016a41186a200341e8036a41186a29030037030020034188016a41106a200341e8036a41106a29030037030020034188016a41086a200341e8036a41086a290300370300200320032903e803370388014100210520034188016a21040c120b2011210441002102034020022004410176220520026a2209200e20094105746a200341e8036a412010ea0641004a1b2102200420056b220441014b0d000c0f0b0b200341e8006a41186a200141196a290000370300200341e8006a41106a200141116a290000370300200341e8006a41086a200141096a2900003703002003200129000137036820022d00000d0720022d00014101470d07200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211a200241026a2f0100211b20032002411a6a2901003703e003200320043a00df03200320053a00de03200320093b01dc032003200a3a00db032003200e3a00da032003200f3b01d803200320103a00d703200320113a00d603200320123b01d403200320133a00d303200320143a00d203200320153b01d003200320163a00cf03200320173a00ce03200320183b01cc03200320193a00cb032003201a3a00ca032003201b3b01c80320034188016a200341e8006a10c105024002400240200328029c012205450d0020034188016a41206a280200212120032802a0012109200328029801210e20034188016a200341e8006a200341c8036a10c205200328029c01220a450d01200341a4016a280200212220032802a001210f200328029801211041e796c800ad4280808080800184100122022900002106200341e8036a41086a200241086a290000370300200320063703e8032002102f41d49ac800ad4280808080d0008410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f4120102d2204450d14200420032903c803370000200441186a200341c8036a41186a290300370000200441106a200341c8036a41106a290300370000200441086a200341c8036a41086a2903003700002004ad428080808080048410032202290018210620022d0017211120022d0016211220022f0014211320022d0013211420022d0012211520022f0010211620022d000f211720022d000e211820022f000c211920022d000b211a20022d000a211b20022f0008211c20022d0007211d20022d0006211e20022f0004210d20022d0003210b20022d0002210c20022f000021232002102f2004102f41c000102d2202450d14200220032903e803370000200220032903880137001020022006370038200220113a0037200220123a0036200220133b0034200220143a0033200220153a0032200220163b0030200220173a002f200220183a002e200220193b002c2002201a3a002b2002201b3a002a2002201c3b00282002201d3a00272002201e3a00262002200d3b00242002200b3a00232002200c3a0022200220233b0020200241086a200341e8036a41086a2212290300370000200241186a20034188016a41086a2204290300370000200341c0006a200241c00041c8e1ca004100410010b501200328024021112002102f20114101470d02410c21024185ccc7002104410f210e0c0e0b20004183343b0100200041086a410e360200200041046a41f9ccc700360200200041026a41053a0000410121040c180b20004183343b0100200041086a410a360200200041046a41cfccc700360200200041026a41083a00000c0d0b20034188016a41186a420037030020034188016a41106a22114200370300200442003703002003420037038801418de6c300ad4280808080e000841001220229000021062004200241086a29000037030020032006370388012002102f419ce6c300ad4280808080e00084100122022900002106200341c8006a41086a2213200241086a290000370300200320063703482002102f20112003290348220637030020122004290300370300200341e8036a41106a2006370300200341e8036a41186a201329030037030020032003290388013703e803200341386a200341e8036a412010950102402010200e6a220220104f0d004191ccc7002104410e210e410821020c0c0b02402002200328023c410020032802381b4d0d00410b210241bbccc7002104410a210e0c0c0b02402022202141ffff03714f0d004109210241a4ccc7002104410c210e0c0c0b41e796c800ad4280808080800184100122022900002106200341b8036a41086a200241086a290000370300200320063703b8032002102f41d49ac800ad4280808080d00084100122022900002106200341c8006a41086a200241086a290000370300200320063703482002102f4120102d2202450d11200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a2903003700002002ad4280808080800484100322042900002106200441086a2900002107200441106a290000210820034188016a41186a220e200441186a29000037030020034188016a41106a2210200837030020034188016a41086a200737030020032006370388012004102f2002102f41c000102d2202450d11200220032903b803370000200241086a200341b8036a41086a29030037000020022003290348370010200241186a200341c8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a290300370000200241306a2010290300370000200241386a200e2903003700004120102d2204450d1120042003290368370000200441186a200341e8006a41186a220e290300370000200441106a200341e8006a41106a2210290300370000200441086a200341e8006a41086a22112903003700002002ad42808080808008842004ad428080808080048410042004102f2002102f200341c8036a10d00220034192016a20112903003701002003419a016a2010290300370100200341a2016a200e290300370100200341aa016a20032903c803370100200341b2016a200341c8036a41086a290300370100200341ba016a200341c8036a41106a290300370100200341c2016a200341c8036a41186a29030037010020034193083b0188012003200329036837018a0141c8e1ca00410020034188016a108c010240200f450d00200a102f0b02402009450d002005102f0b200041043a0000410121040c160b200341c8036a41186a200141196a290000370300200341c8036a41106a200141116a290000370300200341c8036a41086a200141096a290000370300200320012900013703c8032002411a6a2901002106200241196a2d00002105200241186a2d00002109200241166a2f0100210a200241156a2d0000210e200241146a2d0000210f200241126a2f01002110200241116a2d00002111200241106a2d000021122002410e6a2f010021132002410d6a2d000021142002410c6a2d000021152002410a6a2f01002116200241096a2d00002117200241086a2d00002118200241066a2f01002119200241056a2d0000211a200241046a2d0000211b200241026a2f0100211c41012104024020022d00000d0020022d000141014721040b200320063703a001200320053a009f01200320093a009e012003200a3b019c012003200e3a009b012003200f3a009a01200320103b019801200320113a009701200320123a009601200320133b019401200320143a009301200320153a009201200320163b019001200320173a008f01200320183a008e01200320193b018c012003201a3a008b012003201b3a008a012003201c3b018801024020040d00200341e8036a41186a20034188016a41186a290300370300200341e8036a41106a20034188016a41106a290300370300200341e8036a41086a20034188016a41086a29030037030020032003290388013703e803200341c8006a200341e8036a10c0054120102d2202450d11200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a29030037000020032002ad428080808080048410062204290000370390042004102f20034194016a200241206a360200200341003a0098012003200236029001200320034190046a41086a36028c01200320034190046a36028801200341e8006a20034188016a106c2002102f2003280268210a02400240200328024c2205200328025022046b20032802702209490d00200328024821020c010b200420096a22022004490d142005410174220e2002200e20024b1b220e4100480d140240024020050d00200e102d21020c010b20032802482005200e103121020b2002450d122003200e36024c20032002360248200e21050b2003200420096a220e360250200220046a200a200910e8061a0240200328026c450d00200a102f0b20034188016a2002200e109e050240200328029c012204450d00200ead4220862002ad84100520034188016a41086a2903002106200329038801210720032903a001210802402005450d002002102f0b20034188016a200341c8036a200341e8036a20072006410010bc0120034192016a200341e8036a41086a2903003701002003419a016a200341e8036a41106a290300370100200341a2016a200341e8036a41186a290300370100200341aa016a20032903c803370100200341b2016a200341c8036a41086a290300370100200341ba016a200341c8036a41106a290300370100200341c2016a200341c8036a41186a29030037010020034193063b018801200320032903e80337018a0141c8e1ca00410020034188016a108c0102402008a7450d002004102f0b200041043a0000410121040c170b02402005450d002002102f0b20004183343b0100200041086a410a360200200041046a41cfccc700360200200041026a41083a0000410121040c160b200041023a0000410121040c150b20022d00000d0720022d00014101470d07200241196a2d00002104200241186a2d00002105200241166a2f01002109200241156a2d0000210a200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002119200241046a2d0000211a200241026a2f0100211b20032002411a6a2901003703e003200320043a00df03200320053a00de03200320093b01dc032003200a3a00db032003200e3a00da032003200f3b01d803200320103a00d703200320113a00d603200320123b01d403200320133a00d303200320143a00d203200320153b01d003200320163a00cf03200320173a00ce03200320183b01cc03200320193a00cb032003201a3a00ca032003201b3b01c80320034188016a200341c8036a10c0052003280290012202417f4c0d0620032802880121040240024020020d00410121050c010b2002102d2205450d100b20052004200210e8062104200341fc006a20034190016a22092802002205360200200320023602702003200236026c200320043602682003200329038801220637027420034188016a2005ad422086200642ffffffff0f8384101810730240024002402003280288012202450d00200328028c012104024002402009280200220520032802702209490d002003280268220a2002460d01200a2002200910ea06450d010b2004450d012002102f0c010b200341f4006a2109200320053602a0042003200436029c04200320023602980420034188016a20022005109e050240200328029c01220a0d00200341003602c003200342013703b803200341d4006a412c360200200320093602a8042003412c36024c2003200341ac046a3602502003200341a8046a360248200320034198046a3602ac042003200341b8036a36029004200341fc036a4102360200200342023702ec03200341a8dcc9003602e8032003200341c8006a3602f80320034190046a41d8dbc100200341e8036a103c1a20033502c00342208620033502b80384100820032802bc03450d0020032802b803102f0b200341e8036a41086a220220034198046a41086a28020036020020032003290398043703e8030240200341f8006a280200450d002003280274102f0b200920032903e803370200200941086a2002280200360200200a0d010b41e796c800ad4280808080800184100122022900002106200341b8036a41086a200241086a290000370300200320063703b8032002102f41f898c800ad4280808080b00184100122022900002106200341c8006a41086a200241086a290000370300200320063703482002102f4120102d2202450d11200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a2903003700002002ad4280808080800484100322042900002106200441086a2900002107200441106a290000210820034188016a41186a2205200441186a29000037030020034188016a41106a2209200837030020034188016a41086a200737030020032006370388012004102f2002102f41c000102d2202450d11200220032903b803370000200241086a200341b8036a41086a29030037000020022003290348370010200241186a200341c8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a220a290300370000200241306a2009290300370000200241386a200529030037000020034188016a2002109b050240200328029c012204450d002002ad428080808080088410050b200a2903002106200329038801210720032802a00121052002102f024020040d00410e210241f9ccc7002104410521050c020b200320073703482003200637035002402007200684500d002003200341c8036a3602b803200341e8036a200341c8036a200341c8006a200341b8036a10960120032903e8034201520d0020032903f0032106200341c0016a200341e8036a41106a290300370300200341b8016a200637030020034188016a41086a41003a000020034191016a20032903c80337000020034199016a200341c8036a41086a290300370000200341a1016a200341c8036a41106a290300370000200341a9016a200341e0036a290300370000200341033a00880141c8e1ca00410020034188016a108c010b20034192016a200341d0036a2903003701002003419a016a200341d8036a290300370100200341a2016a200341e0036a290300370100200341930a3b018801200320032903c80337018a0141c8e1ca00410020034188016a108c0102402005450d002004102f0b0240200328026c450d002003280268102f0b0240200341f8006a280200450d002003280274102f0b200041043a0000410121040c160b410b21024199ccc7002104410d210520032802a001450d00200a102f0b20004183343b0100200041086a2002360200200041046a2004360200200041026a20053a00000240200328026c450d002003280268102f0b200341f8006a280200450d132003280274102f410121040c140b20034180016a200141196a290000370300200341f8006a200141116a290000370300200341f0006a200141096a290000370300200320012900013703684101210420022d00014101470d0720022d000041ff01710d0720032002411a6a2901003703e0032003200241026a2901003703c80320032002410a6a2901003703d0032003200241126a2901003703d803200341e8036a200341c8036a10bf05200341a1016a20034180016a29030037000020034199016a200341f8006a29030037000020034191016a200341f0006a2903003700002003200329036837008901200341013a008801024020032d00e8034101470d00200341e8036a41017220034188016a410172412010ea060d0041e796c800ad4280808080800184100122022900002106200341b8036a41086a200241086a290000370300200320063703b8032002102f41d49ac800ad4280808080d00084100122022900002106200341c8006a41086a200241086a290000370300200320063703482002102f4120102d2202450d0f200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a2903003700002002ad4280808080800484100322042900002106200441086a2900002107200441106a290000210820034188016a41186a2205200441186a29000037030020034188016a41106a2209200837030020034188016a41086a200737030020032006370388012004102f2002102f41c000102d2202450d0f200220032903b803370000200241086a200341b8036a41086a29030037000020022003290348370010200241186a200341c8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a290300370000200241306a2009290300370000200241386a20052903003700002002ad428080808080088410052002102f200341c8036a10ca02200041043a0000410121040c140b20004183343b0100200041086a410a360200200041046a41b7cdc700360200200041026a41003a0000410121040c130b20004183343b0100200041086a410e360200200041046a41f9ccc700360200200041026a41053a00000c120b20004183343b0100200041086a410a360200200041046a4190cdc700360200200041026a41033a00000c120b200041023a0000410121040c100b20004183343b0100200041086a410e360200200041046a41d9ccc700360200200041026a41073a00000c0f0b200041023a0000410121040c0e0b103d000b200041023a0000410121040c0c0b200041023a00000c0b0b20004183343b0100200041086a2002360200200041046a2004360200200041026a200e3a0000200f450d00200a102f0b2009450d082005102f410121040c090b200e20024105746a200341e8036a412010ea0622050d01410e210941adccc7002112410b21050b20004183343b0100200041086a2009360200200041046a2012360200200041026a20053a00002010450d05200e102f0c050b20034188016a41186a200341e8036a41186a29030037030020034188016a41106a200341e8036a41106a29030037030020034188016a41086a200341e8036a41086a290300370300200320032903e8033703880120034188016a210420112005411f7620026a2205490d020b024020112010470d00201041016a22022010490d03201041017422092002200920024b1b220241ffffff3f712002470d03200241057422024100480d030240024020100d002002102d210e0c010b200e201041057420021031210e0b200e450d01200241057621100b200e20054105746a220241206a2002201120056b41057410e9061a200241186a200441186a290000370000200241106a200441106a290000370000200241086a200441086a29000037000020022004290000370000200341a4016a201141016a36020020034188016a41186a2010360200200320063703900120032007370388012003200e36029c01200320133602980120034198046a200341e8006a10c0054120102d2202450d00200220032903c803370000200241186a200341c8036a41186a290300370000200241106a200341c8036a41106a290300370000200241086a200341c8036a41086a29030037000020032002ad428080808080048410062204290000370390042004102f200341d4006a200241206a360200200341003a005820032002360250200320034190046a41086a36024c200320034190046a360248200341b8036a200341c8006a106c2002102f20032802b803211102400240200328029c04220520032802a00422046b20032802c0032209490d0020032802980421020c010b200420096a22022004490d03200541017422122002201220024b1b22124100480d030240024020050d002012102d21020c010b20032802980420052012103121020b2002450d012003201236029c042003200236029804201221050b2003200420096a22123602a004200220046a2011200910e8061a024020032802bc03450d002011102f0b2003201236024c2003200236024820034188016a200341c8006a10be0502402005450d002002102f0b02402010450d00200e102f0b200341aa016a20032903c80337010020034192016a200341e8006a41086a2903003701002003419a016a200341e8006a41106a290300370100200341a2016a200341e8006a41186a290300370100200341b2016a200341c8036a41086a290300370100200341ba016a200341c8036a41106a290300370100200341c2016a200341c8036a41186a29030037010020034193043b0188012003200329036837018a01200341e2016a200341e8036a41186a290300370100200341da016a200341e8036a41106a290300370100200341d2016a200341e8036a41086a290300370100200341ca016a20032903e80337010041c8e1ca00410020034188016a108c010240200f450d00200a102f0b200041043a0000410121040c050b1036000b419ae3c300411e41f8b4ca001039000b1038000b200f450d00200a102f410121040c010b410121040b410121050c020b41002105410121042009450d01200a102f0c010b2004102f41012105410021040b024020012d0000417f6a220241024b0d000240024020020e03010200010b2005450d01200141086a280200450d01200141046a280200102f0c010b2004450d00200141246a2802002202108e012002102f0b200341b0046a24000bcb8a0208017f037e137f037e037f017e107f067e230041a0046b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0d000102030405060708090a0b0c000b200341b4036a4101360200200342013702a403200341b4d8c9003602a003200341043602d401200341fcdbc9003602d0012003200341d0016a3602b003200341a0036a41e8d8c9001043000b200141106a2903002104200141086a29030021052002411a6a2901002106200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012119024020022d00000d0020022d000141014721190b200320063703b803200320073a00b703200320083a00b603200320093b01b4032003200a3a00b3032003200b3a00b2032003200c3b01b0032003200d3a00af032003200e3a00ae032003200f3b01ac03200320103a00ab03200320113a00aa03200320123b01a803200320133a00a703200320143a00a603200320153b01a403200320163a00a303200320173a00a203200320183b01a00320190d0b200341a8016a41186a2219200341a0036a41186a290300370300200341a8016a41106a2207200341a0036a41106a290300370300200341a8016a41086a2208200341a0036a41086a2209290300370300200320032903a0033703a80141c6b5c400ad4280808080f0008410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f419cccc500ad4280808080b002841001220229000021062009200241086a290000370300200320063703a0032002102f4120102d2202450d23200220032903a801370000200241186a2019290300370000200241106a2007290300370000200241086a20082903003700002002ad4280808080800484100322192900002106201941086a290000211a201941106a290000211b200341f8026a41186a201941186a290000370300200341f8026a41106a201b370300200341f8026a41086a201a370300200320063703f8022019102f2002102f41c000102d2202450d232002200329038801370000200241086a20034188016a41086a290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903f802370020200241286a200341f8026a41086a290300370000200241306a20034188036a290300370000200241386a200341f8026a41186a290300370000200341106a200241c00041c8e1ca004100410010b501200328021021192002102f20194101460d1c41c6b5c400ad4280808080f00084100122022900002106200341e8006a41086a200241086a290000370300200320063703682002102f41dfdbc400ad4280808080800284100122022900002106200341f8006a41086a200241086a290000370300200320063703782002102f4120102d2202450d23200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a290000211a201941106a290000211b20034188016a41186a2207201941186a29000037030020034188016a41106a2208201b37030020034188016a41086a2209201a37030020032006370388012019102f2002102f41c000102d2202450d2320022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a2903003700002002200329038801370020200241286a2009290300370000200241306a2008290300370000200241386a2007290300370000200341086a200241c00041c8e1ca004100410010b501200328020821192002102f0240024020194101460d00200341a0036a41186a4200370300200341a0036a41106a22084200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f000841001221929000021062002201941086a290000370300200320063703a0032019102f41b4dac400ad4280808080c0008410012219290000210620034188016a41086a2207201941086a29000037030020032006370388012019102f20082003290388012206370300200341f8026a41086a2002290300370300200341f8026a41106a2006370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b220920032902a403420020021b2206422088a741e8006c6a210720092102034020022007460d020240200341a8016a200241c8006a2219460d00201941206a21022019200341a8016a412010ea060d010b0b20004183323b0100200041086a410a360200200041046a4189b6c400360200200041026a410c3a00000c2b0b20004183323b0100200041086a4109360200200041046a41e9b6c400360200200041026a41033a00000c2b0b200341a0036a41186a22074200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f0008410012219290000211a2002201941086a2900003703002003201a3703a0032019102f418c91c700ad4280808080a0018410012219290000211a20034188016a41086a220b201941086a2900003703002003201a370388012019102f2008200329038801370000200841086a200b290300370000200341f8026a41086a2002290300370300200341f8026a41106a200a290300370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b220b20032902a403420020021b221a422088a741e8006c6a2107200b21020240034020022007460d010240200341a8016a200241c8006a2219460d00201941206a21022019200341a8016a412010ea060d010b0b20004183323b0100200041086a4110360200200041046a41f9b5c400360200200041026a410d3a00000c290b200341a0036a41186a22074200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f0008410012219290000211b2002201941086a2900003703002003201b3703a0032019102f41ebdec700ad4280808080f0008410012219290000211b20034188016a41086a220c201941086a2900003703002003201b370388012019102f2008200329038801370000200841086a200c290300370000200341f8026a41086a2002290300370300200341f8026a41106a200a290300370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa0220032802a0032202410120021b210a0240024002400240024020032902a403420020021b221b422088a7221941014b0d004100210220190e020201020b41002102034020022019410176220720026a2208200a20084105746a200341a8016a412010ea0641004a1b2102201920076b221941014b0d000b0b200a20024105746a200341a8016a412010ea06450d010b200342003703800320034280809aa6eaafe3013703f8022003200341a8016a360288012003200341a8016a3602c0022003200341c0026a3602a803200320034188016a3602a4032003200341f8026a3602a003200341d0016a200341a8016a200341a0036a1094010240024020032802d0014101470d00200341dc016a2802002119200341d8016a280200210720032d00d701210820032d00d601210c20032d00d501210d20032d00d40121020c010b410421020240200341d0016a41086a2903004201520d00200341d0016a41106a290300211c20032802c0022119200341d8036a200341d0016a41186a290300370300200341d0036a201c370300200341a0036a41086a41003a0000200341a9036a2019290000370000200341b1036a201941086a290000370000200341b9036a201941106a290000370000200341c1036a201941186a290000370000200341033a00a00341c8e1ca004100200341a0036a108c010b0b200241ff01714104470d01200320063702d401200320093602d001200341a0036a41106a4200370300200341a0036a41086a22024280809aa6eaafe301370300200341003a00a003200341d0016a200341a8016a20052004200341a0036a10e604200341d8036a2004370300200341d0036a2005370300200241013a0000200341a9036a20032903a801370000200341b1036a200341a8016a41086a290300370000200341b9036a200341a8016a41106a290300370000200341c1036a200341c0016a290300370000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a00000240201ba7450d00200a102f0b201aa7450d2c200b102f0c2c0b20004183323b0100200041086a410d360200200041046a41f2b6c400360200200041026a41023a00000c280b2000200d3a0001200020023a0000200041086a2019360000200041046a2007360000200041036a20083a0000200041026a200c3a00000c270b200141046a2802002118200241026a2f01002119200241046a2d00002107200241056a2d00002108200241066a2f01002109200241086a2d0000210a200241096a2d0000210b2002410a6a2f0100210c2002410c6a2d0000210d2002410d6a2d0000210e2002410e6a2f0100210f200241106a2d00002110200241116a2d00002111200241126a2f01002112200241146a2d00002113200241156a2d00002114200241166a2f01002115200241186a2d00002116200241196a2d0000211720022d0000211d20022d0001211e20032002411a6a29010022063703b803200320173a00b703200320163a00b603200320153b01b403200320143a00b303200320133a00b203200320123b01b003200320113a00af03200320103a00ae032003200f3b01ac032003200e3a00ab032003200d3a00aa032003200c3b01a8032003200b3a00a7032003200a3a00a603200320093b01a403200320083a00a303200320073a00a203200320193b01a0030240201d410047201e410147720d00200320183602a002200341a0036a41186a4200370300200341a0036a41106a221e4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f0008422041001221d29000021052002201d41086a290000370300200320053703a003201d102f41b4dac400ad4280808080c0008422051001221d290000211a20034188016a41086a221f201d41086a2900003703002003201a37038801201d102f201e200329038801221a370300200341f8026a41086a2002290300370300200341f8026a41106a201a370300200341f8026a41186a201f290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a003210220032902a403211a200341c4016a2006370200200341c3016a20173a0000200341a8016a411a6a20163a0000200341a8016a41186a20153b0100200341bf016a20143a0000200341a8016a41166a20133a0000200341a8016a41146a20123b0100200341bb016a20113a0000200341a8016a41126a20103a0000200341a8016a41106a200f3b0100200341b7016a200e3a0000200341a8016a410e6a200d3a0000200341a8016a410c6a200c3b0100200341b3016a200b3a0000200341a8016a410a6a200a3a0000200341a8016a41086a20093b0100200320083a00af01200320073a00ae01200320193b01ac012002410820021b21192003200341a0026a3602a8014103210802402018201a420020021b2206422088a722094f0d0002402019201841e8006c6a220241c8006a220a200341a8016a4104722207460d00200a2007412010ea060d010b20022d0000210820032002280001360288012003200241046a28000036008b01200241106a290300211a200241086a290300211b200341d0016a200241186a41d00010e8061a2002200241e8006a2018417f7320096a41e8006c10e9061a0240024020084101470d00200341a0036a41086a200341d0016a41086a2d00003a000020032003280288013602c0022003200328008b013600c302200320032903d0013703a00341c6b5c400ad4280808080f0008410012202290000211c200341e8006a41086a200241086a2900003703002003201c3703682002102f41d8cdc500ad428080808080018410012202290000211c200341f8006a41086a200241086a2900003703002003201c3703782002102f4120102d2202450d262002201b370007200220032802c002360000200220032903a0033700172002410f6a201a370000200241036a20032800c3023600002002411f6a200341a0036a41086a2d00003a00002002ad428080808080048410032208290000211a200841086a290000211b200841106a290000211c200341f8026a41186a2209200841186a290000370300200341f8026a41106a220a201c370300200341f8026a41086a220b201b3703002003201a3703f8022008102f2002102f41c000102d2202450d2620022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a290300370000200220032903f802370020200241286a200b290300370000200241306a200a290300370000200241386a20092903003700002002ad428080808080088410052002102f0c010b2003201b3703c0022003201a3703c802201b201a84500d00200320073602b002200341f8026a2007200341c0026a200341b0026a10960120032903f8024201520d00200329038003211a200341d8036a200341f8026a41106a290300370300200341d0036a201a370300200341a0036a41086a41003a0000200341a9036a2007290000370000200341b1036a200741086a290000370000200341b9036a200741106a290000370000200341c1036a200741186a290000370000200341033a00a00341c8e1ca004100200341a0036a108c010b20064280808080707c210641042108200341a0036a41086a41043a0000200341a9036a2007290000370000200341b1036a200741086a290000370000200341b9036a200741106a290000370000200341c1036a200741186a290000370000200341123a00a00341c8e1ca004100200341a0036a108c010b200341f8026a41186a4200370300200341f8026a41106a22094200370300200341f8026a41086a22024200370300200342003703f8022004100122072900002104200341e8006a41086a220a200741086a290000370300200320043703682007102f2002200a290300370300200320032903683703f8022005100122072900002104200341f8006a41086a220a200741086a290000370300200320043703782007102f20092003290378220437030020034188016a41086a200229030037030020034188016a41106a200437030020034188016a41186a200a290300370300200320032903f802370388010240024020190d0020034188016aad428080808080048410050c010b200341a0036a20192006422088a710b10420034188016aad428080808080048420033502a80342208620032802a0032202ad841004024020032802a403450d002002102f0b2006a7450d002019102f0b200041193b0001200020083a0000200041086a410b360200200041046a41ffb6c4003602000c2a0b200041023a00000c290b200141c0006a290300211a200141386a290300211b200141306a2903002104200141286a2903002105200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a8012002411a6a2901002106200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012119024020022d00000d0020022d000141014721190b200320063703b803200320073a00b703200320083a00b603200320093b01b4032003200a3a00b3032003200b3a00b2032003200c3b01b0032003200d3a00af032003200e3a00ae032003200f3b01ac03200320103a00ab03200320113a00aa03200320123b01a803200320133a00a703200320143a00a603200320153b01a403200320163a00a303200320173a00a203200320183b01a00320190d0a200341d0016a41186a200341a0036a41186a2207290300370300200341d0016a41106a200341a0036a41106a2208290300370300200341d0016a41086a200341a0036a41086a2209290300370300200320032903a0033703d00141c6b5c400ad4280808080f00084100122022d000f210a20022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002102f419cccc500ad4280808080b00284100122022900002106200341f8026a41086a200241086a290000370300200320063703f8022002102f4120102d2202450d21200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a290000211c201941106a29000021202007201941186a290000370300200820203703002009201c370300200320063703a0032019102f2002102f41c000102d2202450d21200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b00002002200a3a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220032903f802370010200241186a200341f8026a41086a290300370000200220032903a003370020200241286a200341a0036a41086a2207290300370000200241306a200341b0036a290300370000200241386a200341a0036a41186a290300370000200341286a200241c00041c8e1ca004100410010b501200328022821192002102f20194101460d0b41c6b5c400ad4280808080f0008410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f41dfdbc400ad42808080808002841001220229000021062007200241086a290000370300200320063703a0032002102f4120102d2202450d21200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a290000211c201941106a2900002120200341f8026a41186a2207201941186a290000370300200341f8026a41106a22082020370300200341f8026a41086a2209201c370300200320063703f8022019102f2002102f41c000102d2202450d212002200329038801370000200241086a20034188016a41086a290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903f802370020200241286a2009290300370000200241306a2008290300370000200241386a2007290300370000200341206a200241c00041c8e1ca004100410010b501200328022021192002102f0240024020194101460d00200341a0036a41186a4200370300200341a0036a41106a22084200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f000841001221929000021062002201941086a290000370300200320063703a0032019102f41b4dac400ad4280808080c0008410012219290000210620034188016a41086a2207201941086a29000037030020032006370388012019102f20082003290388012206370300200341f8026a41086a2002290300370300200341f8026a41106a2006370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b220920032902a403420020021b2206422088a741e8006c6a210720092102034020022007460d020240200341a8016a200241c8006a2219460d00201941206a21022019200341a8016a412010ea060d010b0b20004183323b0100200041086a410a360200200041046a4189b6c400360200200041026a410c3a00000c260b20004183323b0100200041086a4109360200200041046a41e9b6c400360200200041026a41033a00000c290b200341a0036a41186a22074200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f0008410012219290000211c2002201941086a2900003703002003201c3703a0032019102f418c91c700ad4280808080a0018410012219290000211c20034188016a41086a220b201941086a2900003703002003201c370388012019102f2008200329038801370000200841086a200b290300370000200341f8026a41086a2002290300370300200341f8026a41106a200a290300370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b220c20032902a403420020021b221c422088a741e8006c6a2107200c21020240034020022007460d010240200341a8016a200241c8006a2219460d00201941206a21022019200341a8016a412010ea060d010b0b20004183323b0100200041086a4110360200200041046a41f9b5c400360200200041026a410d3a00000c240b200341a0036a41186a22074200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f000841001221929000021202002201941086a290000370300200320203703a0032019102f41ebdec700ad4280808080f0008410012219290000212020034188016a41086a220b201941086a29000037030020032020370388012019102f2008200329038801370000200841086a200b290300370000200341f8026a41086a2002290300370300200341f8026a41106a200a290300370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa024101210820032802a0032202410120021b210a4109210d41d1d5c700210e024020032902a403420020021b2220422088a7220b41014b0d0041002102200b0e022321230b200b211941002102034020022019410176220720026a2208200a20084105746a200341a8016a412010ea0641004a1b2102201920076b221941014b0d000c210b0b200141046a280200210720032002411a6a2901003703b8032003200241026a2901003703a00320032002410a6a2901003703a8032003200241126a2901003703b00320022d000041004720022d0001410147720d0b200341d0016a41186a2219200341a0036a41186a290300370300200341d0016a41106a2208200341a0036a41106a290300370300200341d0016a41086a2209200341a0036a41086a290300370300200320032903a0033703d00141c6b5c400ad4280808080f00084100122022900002106200341e8006a41086a200241086a290000370300200320063703682002102f41d8cdc500ad4280808080800184100122022900002106200341f8006a41086a200241086a290000370300200320063703782002102f4120102d2202450d20200220032903d001370000200241186a2019290300370000200241106a2008290300370000200241086a20092903003700002002ad4280808080800484100322192900002106201941086a2900002104201941106a2900002105200341f8026a41186a201941186a290000370300200341f8026a41106a2005370300200341f8026a41086a2004370300200320063703f8022019102f2002102f41c000102d2202450d2020022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a290300370000200220032903f802370020200241286a200341f8026a41086a2208290300370000200241306a200341f8026a41106a2209290300370000200241386a200341f8026a41186a220a290300370000200210dd0421192002102f0240201941ff01710d00200341a0036a41186a4200370300200341a0036a41106a220b4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f0008422041001221929000021062002201941086a290000370300200320063703a0032019102f41b4dac400ad4280808080c00084220510012219290000210620034188016a41086a220c201941086a29000037030020032006370388012019102f200b20032903880122063703002008200229030037030020092006370300200a200c290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032219410820191b210202400240200720032902a403420020191b2206422088a72208490d00410b210841ffb6c40021094103210a0c010b02402002200741e8006c6a22192d00000d004192a5c6002109410b21084100210a0c010b0240200341d0016a201941016a2219460d002019200341d0016a412010ea06450d004180a5c6002109411221084100210a0c010b41c6b5c400ad4280808080f0008410012219290000211a200341e8006a41086a201941086a2900003703002003201a3703682019102f41d8cdc500ad428080808080018410012219290000211a200341f8006a41086a201941086a2900003703002003201a3703782019102f4120102d2219450d22201920032903d001370000201941186a200341d0016a41186a290300370000201941106a200341d0016a41106a290300370000201941086a200341d0016a41086a2903003700002019ad428080808080048410032209290000211a200941086a290000211b200941106a290000211c200341f8026a41186a220a200941186a290000370300200341f8026a41106a220b201c370300200341f8026a41086a201b3703002003201a3703f8022009102f2019102f41c000102d2219450d2220192003290368370000201941086a200341e8006a41086a29030037000020192003290378370010201941186a200341f8006a41086a290300370000201920032903f802370020201941286a200341f8026a41086a290300370000201941306a200b290300370000201941386a200a2903003700002019ad428080808080088410052019102f200341a0036a2002200741e8006c6a221941e80010e8061a2019201941e8006a20082007417f736a41e8006c10e9061a20034188016a41186a20034180046a290300221a37030020034188016a41106a200341f8036a290300221b37030020034188016a41086a200341f0036a290300221c370300200320032903e803222037038801200341a0036a41086a41053a0000200341a9036a2020370000200341b1036a201c370000200341b9036a201b370000200341c1036a201a370000200341123a00a00341c8e1ca004100200341a0036a108c0120064280808080707c21064104210a0b200341f8026a41186a4200370300200341f8026a41106a220b4200370300200341f8026a41086a22194200370300200342003703f8022004100122072900002104200341e8006a41086a220c200741086a290000370300200320043703682007102f2019200c290300370300200320032903683703f8022005100122072900002104200341f8006a41086a220c200741086a290000370300200320043703782007102f200b2003290378220437030020034188016a41086a201929030037030020034188016a41106a200437030020034188016a41186a200c290300370300200320032903f802370388010240024020020d0020034188016aad428080808080048410050c010b200341a0036a20022006422088a710b10420034188016aad428080808080048420033502a80342208620032802a0032219ad841004024020032802a403450d002019102f0b2006a7450d002002102f0b200041193b00012000200a3a0000200041086a2008360200200041046a20093602000c280b20004183323b0100200041086a410b360200200041046a419eb6c400360200200041026a41093a00000c270b20012d0001211d200341f0016a200141246a280200360200200341d0016a41186a2001411c6a290200370300200341d0016a41106a200141146a290200370300200341d0016a41086a2001410c6a2902003703002003200141046a2902003703d0012002411a6a2901002106200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012119024020022d00000d0020022d000141014721190b2003200637039003200320073a008f03200320083a008e03200320093b018c032003200a3a008b032003200b3a008a032003200c3b0188032003200d3a0087032003200e3a0086032003200f3b018403200320103a008303200320113a008203200320123b018003200320133a00ff02200320143a00fe02200320153b01fc02200320163a00fb02200320173a00fa02200320183b01f80220190d0b200341c0026a41186a200341f8026a41186a2207290300370300200341c0026a41106a200341f8026a41106a2209290300370300200341c0026a41086a200341f8026a41086a220a290300370300200320032903f8023703c002200341a0036a41206a200341d0016a41206a280200360200200341a0036a41186a220b200341d0016a41186a290300370300200341a0036a41106a2208200341d0016a41106a290300370300200341a0036a41086a2202200341d0016a41086a290300370300200320032903d0013703a003200341f8026a200341a0036a10bb0120034188016a41086a221920034181036a29000037030020034188016a41106a220c20034189036a29000037030020034188016a41186a220d20034191036a290000370300200320032900f90237038801024002400240024002400240024020032d00f8024101460d00200341a8016a41186a200d290300370300200341a8016a41106a200c290300370300200341a8016a41086a201929030037030020032003290388013703a801200b42003703002008420037030020024200370300200342003703a00341c6b5c400ad4280808080f000841001220b29000021062002200b41086a290000370300200320063703a003200b102f418c91c700ad4280808080a001841001220b29000021062019200b41086a2900003703002003200637038801200b102f20082003290388012206370300200a20022903003703002009200637030020072019290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b220a20032902a403420020021b2206422088a741e8006c6a2107200a2102034020022007460d040240200341a8016a200241c8006a2219460d00201941206a21022019200341a8016a412010ea060d010b0b200341a0036a41186a22074200370300200341a0036a41106a22094200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f000841001221929000021042002201941086a290000370300200320043703a0032019102f41ebdec700ad4280808080f0008410012219290000210420034188016a41086a220b201941086a29000037030020032004370388012019102f2008200329038801370000200841086a200b290300370000200341f8026a41086a2002290300370300200341f8026a41106a2009290300370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa0220032802a0032202410120021b210920032902a403420020021b2204422088a7220241014b0d014100211920020e020402040b200041013a00000c2c0b41002119034020192002410176220720196a2208200920084105746a200341c0026a412010ea0641004a1b2119200220076b220241014b0d000b0b200920194105746a200341c0026a412010ea060d01201d41ff01710d02200341013a00f802200341a0036a200341a8016a200341c0026a10b20420033502a803210520032802a00321194101102d2202450d23200241013a000020054220862019ad842002ad4280808080108410042002102f20032802a403450d032019102f0c030b20004183323b0100200041086a410c360200200041046a41edb5c400360200200041026a410e3a00000c200b20004183323b0100200041086a4109360200200041046a41d1d5c700360200200041026a41013a00002004a7450d1f2009102f0c1f0b200341023a00f802200341a0036a200341a8016a200341c0026a10b20420033502a803210520032802a00321194101102d2202450d20200241023a000020054220862019ad842002ad4280808080108410042002102f20032802a403450d002019102f0b200341a0036a41086a410b3a0000200341a9036a20032903a801370000200341b1036a200341a8016a41086a290300370000200341b9036a200341a8016a41106a290300370000200341c1036a200341a8016a41186a290300370000200341c9036a20032903c002370000200341d1036a200341c0026a41086a290300370000200341d9036a200341c0026a41106a290300370000200341e1036a200341c0026a41186a290300370000200341123a00a003200341e9036a201d3a000041c8e1ca004100200341a0036a108c0102402004a7450d002009102f0b02402006a7450d00200a102f0b200041043a00000c260b20012d0001210a20032002411a6a2901003703a0012003200241026a2901003703880120032002410a6a290100370390012003200241126a2901003703980120022d00014101470d0b20022d000041ff01710d0b200341d0016a41186a20034188016a41186a290300370300200341d0016a41106a20034188016a41106a290300370300200341d0016a41086a20034188016a41086a220229030037030020032003290388013703d001200341a0036a41186a4200370300200341a0036a41106a22084200370300200341a0036a41086a22194200370300200342003703a00341c6b5c400ad4280808080f000841001220729000021062019200741086a290000370300200320063703a0032007102f41ebdec700ad4280808080f000841001220729000021062002200741086a29000037030020032006370388012007102f20082003290388012206370300200341f8026a41086a2019290300370300200341f8026a41106a2006370300200341f8026a41186a2002290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa0220032802a0032202410120021b21090240024002400240024020032902a403420020021b2206422088a7220241014b0d004100211920020e020201020b41002119034020192002410176220720196a2208200920084105746a200341d0016a412010ea0641004a1b2119200220076b220241014b0d000b0b200920194105746a200341d0016a412010ea060d00200a41ff01710d01200341013a00f802200341a0036a200341d0016a10b30420033502a803210420032802a00321194101102d2202450d21200241013a000020044220862019ad842002ad4280808080108410042002102f20032802a403450d022019102f0c020b20004183323b0100200041086a4109360200200041046a41d1d5c700360200200041026a41013a00002006a7450d272009102f0c270b200341023a00f802200341a0036a200341d0016a10b30420033502a803210420032802a00321194101102d2202450d1f200241023a000020044220862019ad842002ad4280808080108410042002102f20032802a403450d002019102f0b200341a0036a41086a410c3a0000200341a9036a20032903d001370000200341b1036a200341d0016a41086a290300370000200341b9036a200341e0016a290300370000200341c1036a200341e8016a290300370000200341c9036a200a3a0000200341123a00a00341c8e1ca004100200341a0036a108c0102402006a7450d002009102f0b200041043a00000c250b20022d00000d0b20022d00014101470d0b200241196a2d00002119200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703e801200320193a00e701200320073a00e601200320083b01e401200320093a00e3012003200a3a00e2012003200b3b01e0012003200c3a00df012003200d3a00de012003200e3b01dc012003200f3a00db01200320103a00da01200320113b01d801200320123a00d701200320133a00d601200320143b01d401200320153a00d301200320163a00d201200320173b01d001200341a0036a41186a4200370300200341a0036a41106a220a4200370300200341a0036a41086a22024200370300200342003703a00341c6b5c400ad4280808080f000841001221929000021062002201941086a290000370300200320063703a0032019102f41ebdec700ad4280808080f0008410012219290000210620034188016a41086a2207201941086a29000037030020032006370388012019102f200a2003290388012206370300200341f8026a41086a2002290300370300200341f8026a41106a2006370300200341f8026a41186a2007290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa0220032802a0032202410120021b2109024002400240024020032902a403420020021b2206422088a7220241014b0d004100211920020e020201020b41002119034020192002410176220720196a2208200920084105746a200341d0016a412010ea0641004a1b2119200220076b220241014b0d000b0b200920194105746a200341d0016a412010ea060d0041c6b5c400ad4280808080f0008410012202290000210420034188016a41086a200241086a29000037030020032004370388012002102f41f6dbc400ad4280808080f00084100122022900002104200341a0036a41086a200241086a290000370300200320043703a0032002102f4120102d2202450d1f200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad4280808080800484100322192900002104201941086a2900002105201941106a290000211a200341f8026a41186a2207201941186a290000370300200341f8026a41106a2208201a370300200341f8026a41086a2005370300200320043703f8022019102f2002102f41c000102d2202450d1f2002200329038801370000200241086a20034188016a41086a290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903f802370020200241286a200341f8026a41086a290300370000200241306a2008290300370000200241386a2007290300370000200341a0036a200210b70420032902a403210420032802a00321192002102f2004420020191b210402402019410820191b2202450d002004422088a7220d450d00200341a0036a41186a22084200370300200341a0036a41106a220b4200370300200341a0036a41086a22194200370300200342003703a003418de6c300ad4280808080e000841001220729000021052019200741086a290000370300200320053703a0032007102f419ce6c300ad4280808080e0008410012207290000210520034188016a41086a220c200741086a29000037030020032005370388012007102f200a200329038801370000200a41086a200c290300370000200341f8026a41086a22072019290300370300200341f8026a41106a200b290300370300200341f8026a41186a2008290300370300200320032903a0033703f802200341306a200341f8026a412010950120022802002003280234410020032802301b4d0d020b20004183323b0100200041086a4108360200200041046a41d5b6c400360200200041026a41053a000002402004a7450d002002102f0b2006a7450d262009102f0c260b20004183323b0100200041086a4109360200200041046a41d1d5c700360200200041026a41013a00000c1b0b200341a0036a10e803200341f8026a200341a0036a200341d0016a2002290308200241106a290300410110f2020240024020032d00f80222194104460d002007280200210720032802fc02210820032d00fb02210a20032d00fa02210b200020032d00f9023a0001200020193a0000200041086a2007360200200041046a2008360200200041036a200a3a0000200041026a200b3a00000c010b2002200241186a200d417f6a220741186c10e906210802402007450d0041c6b5c400ad4280808080f00084100122022d000f210a20022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002102f41f6dbc400ad4280808080f00084100122022900002105200341f8026a41086a200241086a290000370300200320053703f8022002102f4120102d2202450d1f200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad4280808080800484100322192900002105201941086a290000211a201941106a290000211b200341a0036a41186a2216201941186a290000370300200341a0036a41106a2217201b370300200341a0036a41086a201a370300200320053703a0032019102f2002102f41c000102d2202450d1f200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b00002002200a3a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220032903f802370010200241186a200341f8026a41086a290300370000200220032903a003370020200241286a200341a0036a41086a290300370000200241306a2017290300370000200241386a2016290300370000200341c0003602a403200320023602a00320082007200341a0036a10b8042002102f02402004a7450d002008102f0b200041043a00000c1c0b41c6b5c400ad4280808080f00084100122192900002105200341e8006a41086a201941086a290000370300200320053703682019102f41f6dbc400ad4280808080f00084100122192900002105200341f8006a41086a201941086a290000370300200320053703782019102f4120102d2219450d1e201920032903d001370000201941186a200341d0016a41186a290300370000201941106a200341d0016a41106a290300370000201941086a200341d0016a41086a2903003700002019ad4280808080800484100322072900002105200741086a290000211a200741106a290000211b20034188016a41186a2208200741186a29000037030020034188016a41106a220a201b37030020034188016a41086a201a37030020032005370388012007102f2019102f41c000102d2219450d1e200442ffffffff0f83210420192003290368370000201941086a200341e8006a41086a29030037000020192003290378370010201941186a200341f8006a41086a2903003700002019200329038801370020201941286a20034188016a41086a290300370000201941306a200a290300370000201941386a20082903003700002019ad428080808080088410052019102f200041043a00000b2004a7450d1a2002102f0c1a0b200141246a2802002109200341e8016a200141196a290000370300200341e0016a200141116a290000370300200341d8016a200141096a290000370300200320012900013703d0012001412c6a2802002119200141286a28020021080240024020022d0000417f6a220741024b0d00200141306a3502002104024020070e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200041023a00000c190b20034188016a41186a420037030020034188016a41106a2202420037030020034188016a41086a22014200370300200342003703880141c6b5c400ad4280808080f00084100122072900002106200341e8006a41086a220a200741086a290000370300200320063703682007102f2001200a2903003703002003200329036837038801419ab6c400ad4280808080c00084100122072900002106200341f8006a41086a220a200741086a290000370300200320063703782007102f200220032903782206370300200341f8026a41086a2001290300370300200341f8026a41106a2006370300200341f8026a41186a200a29030037030020032003290388013703f802200341386a200341f8026a412041c8e1ca004100410010b50120032802384101460d0b20094102490d0c20034188016a41186a2207420037030020034188016a41106a220a420037030020034188016a41086a22014200370300200342003703880141c6b5c400ad4280808080f0008422051001220b2900002106200341e8006a41086a220c200b41086a29000037030020032006370368200b102f2001200c290300370300200320032903683703880141cdb5c400ad4280808080a001841001220b2900002106200341f8006a41086a220d200b41086a29000037030020032006370378200b102f20022003290378370000200241086a220b200d290300370000200341f8026a41086a220e2001290300370300200341f8026a41106a220f200a290300370300200341f8026a41186a2210200729030037030020032003290388013703f802200320093602a003200341f8026aad42808080808004842206200341a0036aad4280808080c000841004200341a0036a200341d0016a10e70420032d00a00322094104470d0d20074200370300200a42003703002001420037030020034200370388012005100122092900002105200c200941086a290000370300200320053703682009102f2001200c2903003703002003200329036837038801419ab6c400ad4280808080c00084100122092900002105200d200941086a290000370300200320053703782009102f20022003290378370000200b200d290300370000200e2001290300370300200f200a2903003703002010200729030037030020032003290388013703f8024120102d2201450d1c200120032903d001370000200141186a200341d0016a41186a220d290300370000200141106a200341d0016a41106a220e290300370000200141086a200341d0016a41086a220f29030037000020062001ad428080808080048410042001102f20034188016a41186a2209420037030020034188016a41106a220a420037030020034188016a41086a22074200370300200342003703880141c6b5c400ad4280808080f00084220510012201290000211a200341e8006a41086a220b200141086a2900003703002003201a3703682001102f2007200b29030037030020032003290368370388014193b6c400ad4280808080f0008410012201290000211a200341f8006a41086a220c200141086a2900003703002003201a3703782001102f20022003290378370000200241086a2210200c290300370000200341f8026a41086a22112007290300370300200341f8026a41106a2212200a290300370300200341f8026a41186a2213200929030037030020032003290388013703f8024120102d2201450d1c200120032903d001370000200141186a200d290300370000200141106a200e290300370000200141086a200f29030037000020062001ad428080808080048410042001102f200341a0036a41186a20044220862008ad841003220141186a290000370300200341a0036a41106a200141106a290000370300200341a0036a41086a200141086a290000370300200320012900003703a0032001102f20094200370300200a42003703002007420037030020034200370388012005100122012900002104200b200141086a290000370300200320043703682001102f2007200b290300370300200320032903683703880141c4cbc500ad4280808080d00084100122012900002104200c200141086a290000370300200320043703782001102f200220032903783700002010200c290300370000201120072903003703002012200a2903003703002013200929030037030020032003290388013703f8024120102d2202450d1c200220032903a003370000200241186a200341a0036a41186a290300370000200241106a200341a0036a41106a290300370000200241086a200341a0036a41086a220129030037000020062002ad428080808080048410042002102f200141003a0000200341a9036a20032903d001370000200341b1036a200341d0016a41086a290300370000200341b9036a200341d0016a41106a290300370000200341c1036a200341d0016a41186a290300370000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a00002019450d242008102f0c240b200241026a2f01002119200241046a2d00002107200241056a2d00002108200241066a2f01002109200241086a2d0000210a200241096a2d0000210b2002410a6a2f0100210c2002410c6a2d0000210d2002410d6a2d0000210e2002410e6a2f0100210f200241106a2d00002110200241116a2d00002111200241126a2f01002112200241146a2d00002113200241156a2d00002114200241166a2f01002115200241186a2d00002116200241196a2d0000211720022d0000211d20022d0001211820032002411a6a29010022063703b803200320173a00b703200320163a00b603200320153b01b403200320143a00b303200320133a00b203200320123b01b003200320113a00af03200320103a00ae032003200f3b01ac032003200e3a00ab032003200d3a00aa032003200c3b01a8032003200b3a00a7032003200a3a00a603200320093b01a403200320083a00a303200320073a00a203200320193b01a00320184101470d0d201d41ff01710d0d20034188016a41186a221e420037030020034188016a41106a2218420037030020034188016a41086a22024200370300200342003703880141c6b5c400ad4280808080f000841001221d2900002104200341e8006a41086a221f201d41086a29000037030020032004370368201d102f2002201f29030037030020032003290368370388014193b6c400ad4280808080f000841001221d2900002104200341f8006a41086a221f201d41086a29000037030020032004370378201d102f201820032903782204370300200341f8026a41086a2002290300370300200341f8026a41106a2004370300200341f8026a41186a201f29030037030020032003290388013703f802200341a0036a200341f8026a412010ad0220032d00a003211f201e200341a0036a41196a2900003703002018200341a0036a41116a2900003703002002200341a0036a41096a290000370300200320032900a103370388014101211d02400240201f4101460d004100211d200341003a00d0010c010b200341d0016a41096a2002290300370000200341d0016a41116a2018290300370000200341d0016a41196a201e290300370000200341013a00d00120032003290388013700d1010b200341b9036a2006370000200341b8036a20173a0000200341b7036a20163a0000200341b5036a20153b0000200341b4036a20143a0000200341b3036a20133a0000200341b1036a20123b000041102102200341a0036a41106a20113a0000200341af036a20103a0000200341ad036a200f3b0000200341ac036a200e3a0000200341ab036a200d3a0000200341a9036a200c3b0000200341a8036a200b3a00002003200a3a00a703200320093b00a503200320083a00a403200320073a00a303200320193b00a103200341013a00a003201d450d15200341d0016a410172200341a0036a410172412010ea060d1520034188016a41186a221d420037030020034188016a41106a221e420037030020034188016a41086a22024200370300200342003703880141c6b5c400ad4280808080f000841001221f2900002104200341e8006a41086a2221201f41086a29000037030020032004370368201f102f200220212903003703002003200329036837038801419ab6c400ad4280808080c000841001221f2900002104200341f8006a41086a2221201f41086a29000037030020032004370378201f102f20182003290378370000201841086a2021290300370000200341f8026a41086a2002290300370300200341f8026a41106a201e290300370300200341f8026a41186a201d29030037030020032003290388013703f802200341a0036a200341f8026a412010ad0220032d00a0032121201d200341a0036a41196a290000370300201e200341a0036a41116a2900003703002002200341a0036a41096a290000370300200320032900a103370388014101211f0240024020214101460d004100211f200341003a00d0010c010b200341d0016a41096a2002290300370000200341d0016a41116a201e290300370000200341d0016a41196a201d290300370000200341013a00d00120032003290388013700d1010b200341b9036a2006370000200341b8036a20173a0000200341b7036a20163a0000200341b5036a20153b0000200341b4036a20143a0000200341b3036a20133a000041112102200341a0036a41116a20123b0000200341b0036a20113a0000200341af036a20103a0000200341ad036a200f3b0000200341ac036a200e3a0000200341ab036a200d3a0000200341a9036a200c3b0000200341a8036a200b3a00002003200a3a00a703200320093b00a503200320083a00a403200320073a00a303200320193b00a103200341013a00a00302400240201f450d00200341d0016a410172200341a0036a410172412010ea06450d010b4107211941dcb5c40021070c170b20034188016a41186a221d420037030020034188016a41106a221e420037030020034188016a41086a22024200370300200342003703880141c6b5c400ad4280808080f000842204100122212900002105200341e8006a41086a221f202141086a290000370300200320053703682021102f2002201f290300370300200320032903683703880141ebdec700ad4280808080f00084100122222900002105200341f8006a41086a2221202241086a290000370300200320053703782022102f20182003290378370000201841086a22222021290300370000200341f8026a41086a22232002290300370300200341f8026a41106a2224201e290300370300200341f8026a41186a2225201d29030037030020032003290388013703f802200341f8026aad428080808080048422051005201d4200370300201e4200370300200242003703002003420037038801200410012226290000211a201f202641086a2900003703002003201a3703682026102f2002201f2903003703002003200329036837038801419ab6c400ad4280808080c0008410012226290000211a2021202641086a2900003703002003201a3703782026102f2018200329037837000020222021290300370000202320022903003703002024201e2903003703002025201d29030037030020032003290388013703f80220051005201d4200370300201e4200370300200242003703002003420037038801200410012226290000211a201f202641086a2900003703002003201a3703682026102f2002201f29030037030020032003290368370388014193b6c400ad4280808080f0008410012226290000211a2021202641086a2900003703002003201a3703782026102f2018200329037837000020222021290300370000202320022903003703002024201e2903003703002025201d29030037030020032003290388013703f80220051005201d4200370300201e4200370300200242003703002003420037038801200410012226290000211a201f202641086a2900003703002003201a3703682026102f2002201f290300370300200320032903683703880141c4cbc500ad4280808080d0008410012226290000211a2021202641086a2900003703002003201a3703782026102f2018200329037837000020222021290300370000202320022903003703002024201e2903003703002025201d29030037030020032003290388013703f80220051005201d4200370300201e4200370300200242003703002003420037038801200410012226290000211a201f202641086a2900003703002003201a3703682026102f2002201f2903003703002003200329036837038801418c91c700ad4280808080a0018410012226290000211a2021202641086a2900003703002003201a3703782026102f2018200329037837000020222021290300370000202320022903003703002024201e2903003703002025201d29030037030020032003290388013703f80220051005201d4200370300201e42003703002002420037030020034200370388012004100122262900002104201f202641086a290000370300200320043703682026102f2002201f2903003703002003200329036837038801419cccc500ad4280808080b002841001221f29000021042021201f41086a29000037030020032004370378201f102f2018200329037837000020222021290300370000202320022903003703002024201e2903003703002025201d29030037030020032003290388013703f80220051013200341c1036a2006370000200341a0036a41206a20173a0000200341bf036a20163a0000200341bd036a20153b0000200341bc036a20143a0000200341bb036a20133a0000200341b9036a20123b0000200341a0036a41186a20113a0000200341b7036a20103a0000200341b5036a200f3b0000200341b4036a200e3a0000200341b3036a200d3a0000200341b1036a200c3b0000200341a0036a41106a200b3a0000200341af036a200a3a0000200341ad036a20093b0000200341ac036a20083a0000200341ab036a20073a0000200341a9036a20193b0000200341a0036a41086a410e3a0000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a00000c220b200141216a2d00002107200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a801200341a0036a41206a200241206a290200370300200341a0036a41186a200241186a290200370300200341a0036a41106a200241106a290200370300200341a0036a41086a200241086a290200370300200320022902003703a003200341d0016a200341a0036a10e80420032d00d0014101460d0d41c6b5c400ad4280808080f00084100122022900002106200341a0026a41086a200241086a290000370300200320063703a0022002102f41dfdbc400ad4280808080800284100122022900002106200341b0026a41086a200241086a290000370300200320063703b0022002102f4120102d2219450d1a201920032903a801370000201941186a200341a8016a41186a290300370000201941106a200341a8016a41106a290300370000201941086a200341a8016a41086a2903003700002019ad428080808080048410032202290018210620022d0017210820022d0016210920022f0014210a20022d0013210b20022d0012210c20022f0010210d20022d000f210e20022d000e210f20022f000c211020022d000b211120022d000a211220022f0008211320022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211d2002102f2019102f41c000102d2202450d1a200220032903a002370000200220032903b00237001020022006370038200220083a0037200220093a00362002200a3b00342002200b3a00332002200c3a00322002200d3b00302002200e3a002f2002200f3a002e200220103b002c200220113a002b200220123a002a200220133b0028200220143a0027200220153a0026200220163b0024200220173a0023200220183a00222002201d3b0020200241086a200341a0026a41086a290300370000200241186a200341b0026a41086a290300370000200341c0006a200241c00041c8e1ca004100410010b501200328024021192002102f20194101470d0e024002400240200741ff01710d0041c6b5c400ad4280808080f00084100122022d000f210820022d000e210920022f000c210a20022d000b210b20022d000a210c20022f0008210d20022d0007210e20022d0006210f20022f0004211020022d0003211120022d0002211220022f000021132002102f41f6dbc400ad4280808080f00084100122022900002106200341f8026a41086a200241086a290000370300200320063703f8022002102f4120102d2202450d1d200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a2900002104201941106a2900002105200341a0036a41186a2214201941186a290000370300200341a0036a41106a22152005370300200341a0036a41086a2004370300200320063703a0032019102f2002102f41c000102d2202450d1d2002200e3a00072002200f3a0006200220103b0004200220113a0003200220123a0002200220133b0000200220083a000f200220093a000e2002200a3b000c2002200b3a000b2002200c3a000a2002200d3b0008200220032903f802370010200241186a200341f8026a41086a2208290300370000200220032903a003370020200241286a200341a0036a41086a2219290300370000200241306a2015290300370000200241386a20142903003700002002ad428080808080088410052002102f41c6b5c400ad4280808080f0008410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f41efdbc400ad4280808080f000841001220229000021062019200241086a290000370300200320063703a0032002102f4120102d2202450d1d200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a2900002104201941106a2900002105200341f8026a41186a2209201941186a290000370300200341f8026a41106a220a200537030020082004370300200320063703f8022019102f2002102f41c000102d2202450d1d2002200329038801370000200241086a20034188016a41086a2208290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903f802370020200241286a200341f8026a41086a290300370000200241306a200a290300370000200241386a20092903003700002002ad428080808080088410052002102f41c6b5c400ad4280808080f00084100122022900002106200341e8006a41086a200241086a290000370300200320063703682002102f41d8cdc500ad4280808080800184100122022900002106200341f8006a41086a200241086a290000370300200320063703782002102f4120102d2202450d1d200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a2900002104201941106a290000210520034188016a41186a2209201941186a29000037030020034188016a41106a220a20053703002008200437030020032006370388012019102f2002102f41c000102d2202450d1d20022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a290300370000200241306a200a290300370000200241386a2009290300370000200210dd0441ff017122194102470d012002102f0c020b200341a0036a200341a8016a10e70420032d00a00322024104460d01200341a0036a41086a280200211920032802a403210720032d00a303210820032d00a2032109200020032d00a1033a0001200020023a0000200041086a2019360200200041046a2007360200200041036a20083a0000200041026a20093a00000c230b2002ad428080808080088410052002102f20190d00200341a0036a41186a220f4200370300200341a0036a41106a220d4200370300200341a0036a41086a220c4200370300200342003703a00341c6b5c400ad4280808080f000842204100122022900002106200c200241086a290000370300200320063703a0032002102f41b4dac400ad4280808080c00084220510012202290000210620034188016a41086a2219200241086a29000037030020032006370388012002102f200d2003290388012206370300200341f8026a41086a220e200c290300370300200341f8026a41106a2006370300200341f8026a41186a2019290300370300200320032903a0033703f802200341a0036a200341f8026a10ad0420032802a0032202410820021b2109024020032902a403420020021b2206422088a72210450d00201041037441786a41037641016a210a2009417f73200341a8016a6a210b4100210241002119024003400240200920026a22082d0000450d00200b2002460d02200841016a200341a8016a412010ea06450d020b200241e8006a2102200a201941016a2219470d000c020b0b200341a0036a200841e80010e8061a2008200841e8006a201041e8006c20026b41987f6a10e9061a200341e8016a20034180046a290300221a370300200341e0016a200341f8036a290300221b370300200341d0016a41086a200341f0036a290300221c370300200320032903e80322203703d001200341a0036a41086a41053a0000200341a9036a2020370000200341b1036a201c370000200341b9036a201b370000200341c1036a201a370000200341123a00a00341c8e1ca004100200341a0036a108c0120064280808080707c21060b200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d0012004100122192900002104200e201941086a290000370300200320043703f8022019102f2002200e290300370300200320032903f8023703d0012005100122192900002104200341c0026a41086a220a201941086a290000370300200320043703c0022019102f200820032903c0022204370300200c2002290300370300200d2004370300200f200a290300370300200320032903d0013703a003024020090d00200341a0036aad428080808080048410050c010b200341d0016a20092006422088a710b104200341a0036aad428080808080048420033502d80142208620032802d0012202ad841004024020032802d401450d002002102f0b2006a7450d002009102f0b41c6b5c400ad4280808080f00084100122022900002106200341f8026a41086a200241086a290000370300200320063703f8022002102f41dfdbc400ad4280808080800284100122022900002106200341c0026a41086a200241086a290000370300200320063703c0022002102f4120102d2202450d1a200220032903a801370000200241186a200341a8016a41186a2208290300370000200241106a200341a8016a41106a2209290300370000200241086a200341a8016a41086a2903003700002002ad4280808080800484100322192900002106201941086a2900002104201941106a2900002105200341a0036a41186a220a201941186a290000370300200341a0036a41106a220b2005370300200341a0036a41086a2004370300200320063703a0032019102f2002102f41c000102d2202450d1a200220032903f802370000200241086a200341f8026a41086a290300370000200220032903c002370010200241186a200341c0026a41086a290300370000200220032903a003370020200241286a200341a0036a41086a2219290300370000200241306a200b290300370000200241386a200a2903003700002002ad428080808080088410052002102f201941073a0000200341a9036a20032903a801370000200341b1036a200341a8016a41086a290300370000200341b9036a2009290300370000200341c1036a2008290300370000200341c9036a20073a0000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a00000c210b200141216a2d00002108200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a801200341a0036a41206a200241206a290200370300200341a0036a41186a200241186a290200370300200341a0036a41106a200241106a290200370300200341a0036a41086a200241086a290200370300200320022902003703a003200341d0016a200341a0036a10e80420032d00d0014101460d0e41c6b5c400ad4280808080f00084100122022d000f210720022d000e210920022f000c210a20022d000b210b20022d000a210c20022f0008210d20022d0007210e20022d0006210f20022f0004211020022d0003211120022d0002211220022f000021132002102f419cccc500ad4280808080b0028410012202290008210620022d0007211420022d0006211520022f0004211620022d0003211720022d0002211820022f0000211d2002102f4120102d2219450d19201920032903a801370000201941186a200341a8016a41186a290300370000201941106a200341a8016a41106a290300370000201941086a200341a8016a41086a2903003700002019ad428080808080048410032202290018210420022d0017211e20022d0016211f20022f0014212120022d0013212220022d0012212320022f0010212420022d000f212520022d000e212620022f000c212720022d000b212820022d000a212920022f0008212a20022d0007212b20022d0006212c20022f0004212d20022d0003212e20022d0002212f20022f000021302002102f2019102f41c000102d2202450d19200220043700382002201e3a00372002201f3a0036200220213b0034200220223a0033200220233a0032200220243b0030200220253a002f200220263a002e200220273b002c200220283a002b200220293a002a2002202a3b00282002202b3a00272002202c3a00262002202d3b00242002202e3a00232002202f3a0022200220303b002020022006370018200220143a0017200220153a0016200220163b0014200220173a0013200220183a00122002201d3b0010200220073a000f200220093a000e2002200a3b000c2002200b3a000b2002200c3a000a2002200d3b00082002200e3a00072002200f3a0006200220103b0004200220113a0003200220123a0002200220133b0000200341c0003602a402200320023602a002200341f8026a2002ad4280808080800884100210730240024020032802f80222070d00410221190c010b20032802fc02210f2003200341f8026a41086a28020022193602b402200320073602b00202400240024020194110490d002003201941706a3602b4022003200741106a3602b002200741086a290000210620072900002104200341a0036a200341b0026a10c30420032d00a00322194102470d010b200341003602d801200342013703d0012003410b36028c012003200341a0026a360288012003200341d0016a360278200341b4036a4101360200200342013702a403200341b885c7003602a003200320034188016a3602b003200341f8006a41d8dbc100200341a0036a103c1a20033502d80142208620033502d001841008024020032802d401450d0020032802d001102f0b410221190c010b200341d0016a41086a200341c0036a290300370300200320032800a40336008b01200320032800a103360288012003200341b8036a2903003703d0012004423888200642088684a721092004423088200642108684a7210a2004422088a7210b2004421888a7210c2004421088a7210d200341b0036a290300211a200341a0036a41086a2903002105200341d0036a290300211b200341c8036a290300211c2004a7210e0b200f450d002007102f0b200341f8026a41086a2207200341d0016a41086a29030037030020032003280288013602a0032003200328008b013600a303200320032903d0013703f8020240024020194102470d000c010b200341c0026a41086a2007290300370300200320032800a3033600e302200320032802a0033602e002200320032903f8023703c0022009ad423886200aad42ff018342308684200bad42ffff038342208684200cad42ff018342188684200dad42ff018342108684200ead42ffff03838421040b2002102f02400240024020194102460d00200341a0026a41086a2202200341c0026a41086a290300370300200320032802e0023602e802200320032800e3023600eb02200320032903c0023703a0020240024020084103710e03030100030b41c6b5c400ad4280808080f00084100122022900002120200229000821312002102f41e4d8c400ad42808080803084100122022900002132200229000821332002102f200320333701b803200320323701b003200320313701a803200320203701a003200341d0006a200341a0036a4120109c0120032903584200200328025022021b22312004542207200341e0006a290300420020021b222020065420202006511b0d13200341a0036a200341a8016a10e704200341a0036a41086a2102024020032d00a00322084104470d0041c6b5c400ad4280808080f000842232100122082900002133200829000821342008102f41e4d8c400ad42808080803084100122082900002135200829000821362008102f200320363701b803200320353701b003200320343701a803200320333701a0032003202020067d2007ad7d3703d8012003203120047d3703d001200341a0036aad4280808080800484200341d0016aad42808080808002841004200341a0036a41186a220a4200370300200341a0036a41106a2207420037030020024200370300200342003703a003418de6c300ad4280808080e000841001220829000021202002200841086a290000370300200320203703a0032008102f419ce6c300ad4280808080e0008410012209290000212020034188016a41086a2208200941086a29000037030020032020370388012009102f20072003290388012220370300200341f8026a41086a220b2002290300370300200341f8026a41106a220c2020370300200341f8026a41186a220d2008290300370300200320032903a0033703f802200341c8006a200341f8026a4120109501200328024c210e2003280248210f200a42003703002007420037030020024200370300200342003703a00320321001220929000021202002200941086a290000370300200320203703a0032009102f41ebdec700ad4280808080f000841001220929000021202008200941086a29000037030020032020370388012009102f20072003290388012220370300200b2002290300370300200c2020370300200d2008290300370300200320032903a0033703f802200341a0036a200341f8026a412010aa0220032902a403420020032802a00322021b2220422088a741f4036a2207450d15200341e4003a00a103200341e40041d0860320076e22076b3a00a003200e4100200f1b2108200341a0036a200741ff017141e4004b6a2d00004180fe126c210702402020a7450d002002410120021b102f0b200720086a2107200341b0026a41086a2202200341a0026a41086a290300370300200320032802e8023602f002200320032800eb023600f302200320032903a0023703b0020240024020194101470d00200341af036a201a370000200341bf036a20022d00003a0000200320053700a703200320032800f3023600a303200320032802f0023602a003200320032903b0023700b70341c6b5c400ad4280808080f00084100122022900002105200341e8006a41086a200241086a290000370300200320053703682002102f41d8cdc500ad4280808080800184100122022900002105200341f8006a41086a200241086a290000370300200320053703782002102f4120102d2202450d20200220032903a003370000200241186a200341a0036a41186a290300370000200241106a200341a0036a41106a290300370000200241086a200341a0036a41086a2903003700002002ad4280808080800484100322192900002105201941086a290000211a201941106a290000212020034188016a41186a2208201941186a29000037030020034188016a41106a2209202037030020034188016a41086a220a201a37030020032005370388012019102f2002102f41c000102d2202450d2020022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a2903003700002002200329038801370020200241286a200a290300370000200241306a2009290300370000200241386a20082903003700000240200210dd0441ff017122194102470d002002102f0c020b2002ad428080808080088410052002102f20190d01200341a0036a20072004201c2004201c5422022006201b542006201b511b22191b2006201b20191b10b00442002006201b7d2002ad7d22052004201c7d221a200456200520065620052006511b22021b21064200201a20021b21040c010b200320053703f8022003201a370380032005201a84500d002003200341a8016a36028801200341d0016a200341a8016a200341f8026a20034188016a10960120032903d0014201520d0020032903d8012105200341d8036a200341d0016a41106a290300370300200341d0036a2005370300200341a0036a41086a41003a0000200341a9036a20032903a801370000200341b1036a200341a8016a41086a290300370000200341b9036a200341a8016a41106a290300370000200341c1036a200341c0016a290300370000200341033a00a00341c8e1ca004100200341a0036a108c010b200341a8016a20072004200610b0040c040b2002280200210220032802a403211920032d00a303210720032d00a2032109200020032d00a1033a0001200020083a0000200041086a2002360200200041046a2019360200200041036a20073a0000200041026a20093a00000c240b02402019410171450d00200341d0016a41086a2219200341a0026a41086a2d00003a0000200320032802e8023602b002200320032800eb023600b302200320032903a0023703d00141c6b5c400ad4280808080f0008410012202290000210620034188016a41086a200241086a29000037030020032006370388012002102f41d8cdc500ad4280808080800184100122022900002106200341a0036a41086a200241086a290000370300200320063703a0032002102f4120102d2202450d1d20022005370007200220032802b002360000200220032903d0013700172002410f6a201a370000200241036a20032800b3023600002002411f6a20192d00003a00002002ad4280808080800484100322192900002106201941086a2900002104201941106a2900002105200341f8026a41186a2207201941186a290000370300200341f8026a41106a22082005370300200341f8026a41086a2004370300200320063703f8022019102f2002102f41c000102d2202450d1d2002200329038801370000200241086a20034188016a41086a290300370000200220032903a003370010200241186a200341a0036a41086a290300370000200220032903f802370020200241286a200341f8026a41086a290300370000200241306a2008290300370000200241386a20072903003700004101102d2219450d1d201941013a00002002ad42808080808008842019ad4280808080108410042019102f2002102f0c030b200341a0036a41bcd9c40010b402200341d0016a200341a8016a200341a0036a2005201a410010bc010c020b20004183323b0100200041086a410c360200200041046a41ddb6c400360200200041026a41043a00000c220b200341a0036a41186a220a4200370300200341a0036a41106a22084200370300200341a0036a41086a22074200370300200342003703a00341c6b5c400ad4280808080f000841001220929000021202007200941086a290000370300200320203703a0032009102f41b4dac400ad4280808080c0008410012209290000212020034188016a41086a220b200941086a29000037030020032020370388012009102f20082003290388012220370300200341f8026a41086a2007290300370300200341f8026a41106a2020370300200341f8026a41186a200b290300370300200320032903a0033703f802200341a0036a200341f8026a10ad04200320032902a403420020032802a00322091b3702d40120032009410820091b3602d0012008201a37030020072005370300200341d0036a201b370300200341c8036a201c370300200a20032903a002370300200341c0036a2002290300370300200320193a00a003200320032802e8023600a103200320032800eb023600a403200341d0016a200341a8016a20042006200341a0036a10e6040b200341a0036a41186a2207200341a8016a41186a290300370300200341a0036a41106a2208200341a8016a41106a290300370300200341a0036a41086a2209200341a8016a41086a290300370300200320032903a8013703a00341c6b5c400ad4280808080f00084100122022d000f210a20022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002102f419cccc500ad4280808080b0028410012202290008210620022d0007211620022d0006211720022f0004211820022d0003211d20022d0002211e20022f0000211f2002102f4120102d2219450d19201920032903a003370000201941186a2007290300370000201941106a2008290300370000201941086a20092903003700002019ad428080808080048410032202290018210420022d0017210720022d0016210820022f0014210920022d0013212120022d0012212220022f0010212320022d000f212420022d000e212520022f000c212620022d000b212720022d000a212820022f0008212920022d0007212a20022d0006212b20022f0004212c20022d0003212d20022d0002212e20022f0000212f2002102f2019102f41c000102d2202450d1920022004370038200220073a0037200220083a0036200220093b0034200220213a0033200220223a0032200220233b0030200220243a002f200220253a002e200220263b002c200220273a002b200220283a002a200220293b00282002202a3a00272002202b3a00262002202c3b00242002202d3a00232002202e3a00222002202f3b002020022006370018200220163a0017200220173a0016200220183b00142002201d3a00132002201e3a00122002201f3b00102002200a3a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b00002002ad428080808080088410052002102f200041043a00000c200b20022d000120022d0000410047720d100240200141046a28020022024102490d0020034188016a41186a420037030020034188016a41106a2208420037030020034188016a41086a22194200370300200342003703880141c6b5c400ad4280808080f00084100122072900002106200341e8006a41086a2209200741086a290000370300200320063703682007102f20192009290300370300200320032903683703880141cdb5c400ad4280808080a00184100122072900002106200341f8006a41086a2209200741086a290000370300200320063703782007102f200820032903782206370300200341f8026a41086a2019290300370300200341f8026a41106a2006370300200341f8026a41186a200929030037030020032003290388013703f802200320023602a003200341f8026aad4280808080800484200341a0036aad4280808080c000841004200341ac036a2002360200200341a0036a41086a410d3a0000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a00000c200b20004183323b0100200041086a410a360200200041046a41cdb5c400360200200041026a410f3a00000c1f0b200041023a00000c1e0b200041023a00000c1d0b20004183323b0100200041086a4109360200200041046a41e9b6c400360200200041026a41033a00000c1c0b200041023a00000c1b0b200041023a00000c1a0b200041023a00000c190b200041023a00000c180b20004183323b0100200041086a410e360200200041046a41c7b6c400360200200041026a41063a00000c0c0b20004183323b0100200041086a410a360200200041046a41cdb5c400360200200041026a410f3a00000c0b0b200341a0036a41086a280200210220032802a403210120032d00a303210720032d00a203210a200020032d00a1033a0001200020093a0000200041086a2002360200200041046a2001360200200041036a20073a0000200041026a200a3a00000c0a0b200041023a00000c140b200041023a00000c130b20004183323b0100200041086a410c360200200041046a41ddb6c400360200200041026a41043a00000c120b200041023a00000c110b20004183323b0100200041086a410f360200200041046a41b8b6c400360200200041026a41073a00000c100b4180d9c4004119419cd9c4001039000b200041023a00000c0e0b20004183323b0100200041086a4109360200200041046a41e9b6c400360200200041026a41033a00000c0d0b410a211941e3b5c40021070b20004183323b0100200041086a2019360200200041046a2007360200200041026a20023a00000c0b0b2019450d0b2008102f0c0b0b2006a7450d092009102f0c090b2006a7450d08200a102f0c080b0240200a20024105746a200341a8016a412010ea060d00410d210d41f2b6c400210e410221080c020b4101210802400240200b41014b0d0041002102200b0e020301030b4100210203402002200b410176221920026a2207200a20074105746a200341d0016a412010ea0641004a1b2102200b20196b220b41014b0d000b0b200a20024105746a200341d0016a412010ea060d0141c6b5c400ad4280808080f00084100122022900002131200341a0026a41086a200241086a290000370300200320313703a0022002102f41d8cdc500ad4280808080800184100122022900002131200341b0026a41086a200241086a290000370300200320313703b0022002102f4120102d2219450d00201920032903d001370000201941186a200341d0016a41186a290300370000201941106a200341d0016a41106a290300370000201941086a200341d0016a41086a2903003700002019ad428080808080048410032202290018213120022d0017210720022d0016210820022f0014210b20022d0013210d20022d0012210e20022f0010210f20022d000f211020022d000e211120022f000c211220022d000b211320022d000a211420022f0008211520022d0007211620022d0006211720022f0004211820022d0003211d20022d0002211e20022f0000211f2002102f2019102f41c000102d2202450d00200220032903a002370000200220032903b00237001020022031370038200220073a0037200220083a00362002200b3b00342002200d3a00332002200e3a00322002200f3b0030200220103a002f200220113a002e200220123b002c200220133a002b200220143a002a200220153b0028200220163a0027200220173a0026200220183b00242002201d3a00232002201e3a00222002201f3b002041082108200241086a200341a0026a41086a290300370000200241186a200341b0026a41086a290300370000200341186a200241c00041c8e1ca004100410010b501200328021821192002102f024020194101470d00410f210d41a9b6c400210e0c020b41c6b5c400ad4280808080f00084100122022900002131200341e8006a41086a200241086a290000370300200320313703682002102f41d8cdc500ad4280808080800184100122022900002131200341f8006a41086a200241086a290000370300200320313703782002102f4120102d2202450d00200220032903d001370000200241186a200341d0016a41186a290300370000200241106a200341d0016a41106a290300370000200241086a200341d0016a41086a2903003700002002ad4280808080800484100322192900002131201941086a2900002132201941106a290000213320034188016a41186a2207201941186a29000037030020034188016a41106a2208203337030020034188016a41086a203237030020032031370388012019102f2002102f41c000102d2202450d0020022003290368370000200241086a200341e8006a41086a29030037000020022003290378370010200241186a200341f8006a41086a2903003700002002200329038801370020200241286a20034188016a41086a290300370000200241306a2008290300370000200241386a20072903003700004101102d2219450d00201941003a00002002ad42808080808008842019ad4280808080108410042019102f2002102f200320063702fc02200320093602f802200341a0036a41306a201a370300200341b9036a2202200341d0016a41186a2219290300370000200341b1036a2207200341d0016a41106a2208290300370000200341a9036a2209200341d0016a41086a220b2903003700002003201b3703c803200320032903d0013700a103200341013a00a003200341f8026a200341a8016a20052004200341a0036a10e604200341f8036a2004370300200341f0036a2005370300200341a0036a41086a41023a0000200920032903a8013700002007200341a8016a41086a2903003700002002200341a8016a41106a290300370000200341c1036a200341a8016a41186a290300370000200341c9036a20032903d001370000200341d1036a200b290300370000200341d9036a2008290300370000200341e1036a2019290300370000200341123a00a00341c8e1ca004100200341a0036a108c01200041043a000002402020a7450d00200a102f0b201ca7450d07200c102f0c070b1036000b20004183323b0100200041086a200d360200200041046a200e360200200041026a20083a00002020a7450d00200a102f0b201ca7450d00200c102f0b2006a7450d032009102f0c030b201ba7450d00200a102f0b201aa7450d00200b102f0b2006a7450d002009102f0b20012d00004108470d002001412c6a280200450d00200141286a280200102f0b200341a0046a24000bfd0102027f027e2000280240210202404104102d2203450d002003200236000020002d0044210220034104410810312203450d00200320023a0004200041086a29030021042000290300210520034108411510312203450d00200320053700052003410d6a2004370000200041186a29030021042000290310210520034115412a10312203450d00200320053700152003411d6a2004370000200041286a2903002104200029032021052003412a41d40010312203450d00200320053700252003412d6a2004370000200320002903303700352003413d6a200041386a29030037000020012902002003ad4280808080d0088410042003102f0f0b1036000b830301037f230041206b2203240002400240200241c4006c41046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b20034100360208200320043602042003200536020020022003106902402002450d00200241c4006c210203400240024020012d00004101460d00200341003a00102003200341106a41011082012003200141046a2802003602102003200341106a41041082010c010b200341013a00102003200341106a41011082014120102d2204450d042003422037021420032004360210200341106a200141016a412010820120032802142104200320032802102205200328021810820102402004450d002005102f0b0240200141216a2d00004101460d00200341003a00102003200341106a41011082010c010b200341013a00102003200341106a41011082012003200141226a41201082010b200141c4006a2101200241bc7f6a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000bc00801027f02402000280200220141194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020010e1a0001121202121203040506070809120a0b0c0d0e1212120f1011000b200041086a1096030f0b200041046a1095030f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a2101034020011097010240200141046a280200450d002001280200102f0b200141f0006a2101200241907f6a22020d000b0b200041086a280200450d0f2000280204102f0f0b200041086a1094030f0b20002802042201450d0d200041086a280200450d0d2001102f0f0b200041086a2d0000416d6a220141014b0d0c0240024020010e020001000b200041106a280200450d0d2000410c6a280200102f0f0b200041106a280200450d0c2000410c6a280200102f0f0b20002d0004417f6a220141024b0d0b02400240024020010e03000102000b2000412c6a280200450d0d200041286a280200102f0f0b200041086a22012802001092032001280200102f0f0b2000410c6a22012802001092032001280200102f0f0b20002d0004417f6a220141024b0d0a02400240024020010e03000102000b2000412c6a280200450d0c200041286a280200102f0f0b200041086a22012802001092032001280200102f0f0b2000410c6a22012802001092032001280200102f0f0b200041086a2802004101470d09200041106a280200450d092000410c6a280200102f0f0b20002d00044104470d082000410c6a280200450d08200041086a280200102f0f0b200041086a280200450d072000280204102f0f0b200041086a2d0000417c6a220141024b0d060240024020010e03000801000b200041306a280200450d072000412c6a280200102f0f0b200041306a280200450d062000412c6a280200102f0f0b200041086a2d0000417e6a220141024b0d0502400240024020010e03000102000b200041106a280200450d072000410c6a280200102f0c070b200041346a280200450d06200041306a280200102f0f0b200041306a280200450d052000412c6a280200102f0f0b02402000280204220141024b0d00024020010e03060006060b200041086a22012802001092032001280200102f0f0b2000412c6a22012802001092032001280200102f0f0b02402000410c6a280200450d00200041086a280200102f0b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041186a280200450d032000280214102f0f0b200041086a1093030f0b200041086a2d00004108470d01200041346a280200450d01200041306a280200102f0f0b20002d0004417f6a220141024b0d000240024020010e03000201000b200041286a22012802001092032001280200102f0f0b2000410c6a280200450d00200041086a280200102f0f0b0bb20401027f024020002d0000417e6a220141014b0d000240024020010e020001000b02402000410c6a2802002202450d00200041046a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a280200102f0b0240200141246a2d00004101470d002001412c6a280200450d00200141286a280200102f0b200141c8006a22012002470d000b0b0240200041086a280200450d002000280204102f0b0240200041106a2d00004101470d00200041186a280200450d00200041146a280200102f0b0240200041346a2d00004101470d002000413c6a280200450d00200041386a280200102f0b0240200041d8006a2d00004101470d00200041e0006a280200450d00200041dc006a280200102f0b0240200041fc006a2d00004101470d0020004184016a280200450d0020004180016a280200102f0b0240200041a0016a2d00004101470d00200041a8016a280200450d00200041a4016a280200102f0b0240200041c4016a2d00004101470d00200041cc016a280200450d00200041c8016a280200102f0b200041e8016a2d00004101470d01200041f0016a280200450d01200041ec016a280200102f0c010b02402000410c6a2802002201450d00200141c4006c2102200041046a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a280200102f0b200141c4006a2101200241bc7f6a22020d000b0b200041086a280200450d002000280204102f0f0b0b8c0101017f024020002d0000417a6a2201410b4b0d00024002400240024020010e0c000404040404040104040203000b200041086a280200450d03200041046a280200102f0c030b200041086a280200450d02200041046a280200102f0f0b2000410c6a280200450d01200041086a280200102f0f0b2000410c6a280200450d00200041086a280200102f0f0b0bea0101027f0240024020002d0000220141044b0d00024002400240024020010e050500010203050b02402000410c6a2802002202450d00200041046a2802002101200241b0026c210203402001108d01200141b0026a2101200241d07d6a22020d000b0b200041086a280200450d042000280204102f0f0b200041046a22012802001092032001280200102f0f0b0240200041086a280200450d00200041046a280200102f0b2000411c6a22012802001092032001280200102f0f0b200041286a280200450d01200041246a280200102f0c010b200041286a280200450d00200041246a280200102f0f0b0bcc0201027f02402000280200417e6a220141074b0d0002400240024002400240024020010e080006010206030405000b200041086a280200450d052000280204102f0f0b200041086a280200450d042000280204102f0f0b200041086a280200450d032000280204102f0c030b02402000410c6a2802002202450d0020002802042101200241186c210203400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141186a2101200241686a22020d000b0b200041086a280200450d022000280204102f0f0b02402000410c6a2802002202450d00200028020421012002410c6c210203400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200041086a280200450d012000280204102f0f0b200041086a280200450d002000280204102f0f0b0bb80303047f017e047f230041f0046b22022400200241086a200110e601024002400240024002402002280208450d00200041003602000c010b200228020c2203200128020441b0026e2204200420034b1b2205ad42b0027e2206422088a70d012006a72204417f4c0d010240024020040d00410821070c010b2004102d2207450d03200441b0026e21050b024002402003450d004100210841002104410021090340200241c0026a200110b30220022802c002411b460d02200941016a210a200241106a200241c0026a41b00210e8061a024020092005470d002008200a2008200a4b1bad42b0027e2206422088a70d072006a722054100480d070240024020090d002005102d21070c010b200720042005103121070b2007450d06200541b0026e21050b200720046a200241106a41b00210e8061a200841026a2108200441b0026a2104200a21092003200a470d000b0b2000200536020420002007360200200041086a20033602000c010b2000410036020002402009450d002007210a0340200a108d01200a41b0026a210a200441d07d6a22040d000b0b2005450d002007102f0b200241f0046a24000f0b103d000b1036000b1038000bb004010a7f230041d0006b220224002002200110e60102400240024002402002280200450d00200041003602000c010b2002280204220320012802044105762204200420034b1b22054105742204417f4c0d010240024020050d00410121060c010b2004102d2206450d030b02402003450d00410021070340200241003a00482007220841016a21072001280204417f6a21044100210902400240024003402004417f460d01200241286a20096a2001280200220a2d00003a0000200120043602042001200a41016a3602002002200941016a220a3a00482004417f6a2104200a2109200a4120470d000b200241086a41186a2209200241286a41186a290300370300200241086a41106a220a200241286a41106a290300370300200241086a41086a220b200241286a41086a2903003703002002200229032837030820052008470d020240200841017422042007200420074b1b220441ffffff3f712004470d002004410574220441004e0d020b1038000b0240200941ff0171450d00200241003a00480b200041003602002005450d042006102f0c040b0240024020080d002004102d21060c010b200620084105742004103121060b2006450d05200441057621050b200620084105746a22042002290308370000200441186a2009290300370000200441106a200a290300370000200441086a200b29030037000020072003470d000b0b2000200536020420002006360200200041086a20033602000b200241d0006a24000f0b103d000b1036000bb50404057f017e017f017e0240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a3602000240200441037122064103460d00024002400240024020060e03000102000b2004410276ad21070c020b41012106024020050d000c050b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d04200141fcff0371410276ad21070c010b410121060240200541034f0d000c040b200341036a2d0000210520032f0001210820012002417c6a3602042001200341046a3602002008200541107472410874200472220141808004490d032001410276ad21070b410021060c020b02402004410276220841044b0d000240024020080e050002020201000b20054104490d022003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c030b20054108490d01200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c020b200841046a220541084b0d002002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c030b2003417f6a310000210920012002360204200120033602002002417f6a2102200341016a210320092004410374413871ad862007842107200441016a220441ff01712005490d000b2007427f412820084103746b413871ad885821060c010b410121060b2000200737030820002006ad3703000bce0303047f017e047f230041f0016b22022400200241086a200110e601024002400240024002402002280208450d00200041003602000c010b200228020c2203200128020441f0006e2204200420034b1b2205ad42f0007e2206422088a70d012006a72204417f4c0d010240024020040d00410421070c010b2004102d2207450d03200441f0006e21050b024002402003450d00410021084100210441002109034020024180016a200110f603200228028401450d02200941016a210a200241106a20024180016a41f00010e8061a024020092005470d002008200a2008200a4b1bad42f0007e2206422088a70d072006a722054100480d070240024020090d002005102d21070c010b200720042005103121070b2007450d06200541f0006e21050b200720046a200241106a41f00010e8061a200841026a2108200441f0006a2104200a21092003200a470d000b0b2000200536020420002007360200200041086a20033602000c010b2000410036020002402009450d00200741046a210a0340200a1097010240200a41046a280200450d00200a280200102f0b200a41f0006a210a200441907f6a22040d000b0b2005450d002007102f0b200241f0016a24000f0b103d000b1036000b1038000bf30601067f230041f0006b2102024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204410121072001200441016a360200200541f001490d06200541847e6a220541034b0d0120050e0402030405020b200041023a00000f0b200041023a00000f0b20064102490d0420042f0001210520012003417d6a3602042001200441036a3602000240200541ef014d0d00410121070c040b200041023a00000f0b20064104490d042004280001210520012003417b6a3602042001200441056a36020041012107200541ffff034b0d02200041023a00000f0b024020064104490d00200041023a000020012003417b6a3602042001200441056a3602000f0b200041023a00000f0b41002105200241003a00682003417f6a21062003417e6a210302400240034020062005460d01200241c8006a20056a200420056a220741016a2d00003a0000200120033602042001200741026a3602002002200541016a22073a00682003417f6a21032007210520074120470d000b200241c6006a20022d004a3a0000200241306a200241d7006a290000370300200241386a200241df006a290000370300200241c0006a200241e7006a2d00003a0000200220022f01483b01442002200229004f370328200228004b2105410021010c010b0240200541ff0171450d00200241003a00680b410121010b200241246a41026a2203200241c4006a41026a2d00003a0000200241086a41086a2207200241286a41086a290300370300200241086a41106a2204200241286a41106a290300370300200241086a41186a2206200241286a41186a2d00003a0000200220022f01443b01242002200229032837030820010d03200241286a41026a20032d00003a0000200241c8006a41086a2007290300370300200241c8006a41106a2004290300370300200241c8006a41186a20062d00003a0000200220022f01243b012820022002290308370348410021070b200020073a0000200020022f01283b0001200041046a2005360200200041086a2002290348370200200041036a2002412a6a2d00003a0000200041106a200241c8006a41086a290300370200200041186a200241c8006a41106a290300370200200041206a200241c8006a41186a2802003602000f0b200041023a00000f0b200041023a00000f0b200041023a00000bde0506067f017e017f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b024020054102762209410c4b0d0002400240024020090e0d00030303010303030303030302000b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210a0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210a0c050b20064110490d03200441096a290000210a2004290001210820012003416f6a3602042001200441116a360200200a428080808080808080015421070c040b200941046a220641104b0d022003417e6a2103200441026a21044100210541012107200241186a210b420021084200210a03402003417f460d01200241106a2004417f6a3100004200200541037441f8007110eb0620012003360204200120043602002003417f6a2103200441016a2104200b290300200a84210a20022903102008842108200541016a220541ff01712006490d000b2002427f427f41e80020094103746b41f8007110ec062008200229030058200a200241086a290300220c58200a200c511b21070c030b0c020b4200210a410021070c010b410121070b20002008370308200041106a200a37030020002007ad370300200241206a24000bd10f02097f047e230041d0056b220224000240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541044b0d0620050e050102030405010b200041063a00000c090b200241a0036a2001109803024020022802a0032206450d0020022802a4032107024020012802042203450d00200241a8036a2802002108200128020022042d0000210520012003417f6a3602042001200441016a360200200541014b0d004100210902400240024020050e020100010b41002105200241003a00c0032003417f6a210a2003417e6a21030340200a2005460d02200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241f0006a41186a200241a0036a41186a290300370300200241f0006a41106a200241a0036a41106a290300370300200241f0006a41086a200241a0036a41086a290300370300200220022903a003370370410121090b200241206a41186a200241f0006a41186a290300220b370300200241206a41106a200241f0006a41106a290300220c370300200241206a41086a200241f0006a41086a290300220d37030020022002290370220e370320200020093a0001200041013a0000200041026a200e3700002000410a6a200d370000200041126a200c3700002000411a6a200b3700002000412c6a2008360100200041286a2007360100200041246a20063601000c0b0b200541ff0171450d00200241003a00c0030b200041063a00002007450d092006102f0c090b200041063a00000c080b200241f0006a200110b302024002402002280270411b460d00200241a0036a200241f0006a41b00210e8061a41b002102d22010d010c080b200041063a00000c080b2001200241a0036a41b00210e8062101200041023a0000200020022f00503b0001200041036a200241d0006a41026a2d00003a0000200041046a2001360200200041086a2002290220370200200041106a200241206a41086a290200370200200041186a200241206a41106a290200370200200041206a200241206a41186a290200370200200041286a200241206a41206a2902003702000c070b200241086a200110e601024020022802080d00200228020c2105200241f0006a200110b3022002280270411b460d00200241a0036a200241f0006a41b00210e8061a41b002102d2201450d062001200241a0036a41b00210e8062101200041033a0000200020022f00503b0001200041036a200241d2006a2d00003a0000200041086a2001360200200041046a20053602002000410c6a2002290220370200200041146a200241206a41086a2902003702002000411c6a200241306a290200370200200041246a200241386a2902003702002000412c6a200241c0006a2802003602000c070b200041063a00000c060b41002105200241003a00c0032003417f6a210a2003417e6a210302400240024002400340200a2005460d01200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241206a41086a200241a0036a41086a290300370300200241206a41106a200241a0036a41106a290300370300200241206a41186a200241a0036a41186a290300370300200220022903a003370320200241106a200110e60120022802100d0120012802042203450d0120022802142104200128020022092d0000210520012003417f6a3602042001200941016a360200200541014b0d014100210120050e020302030b200541ff0171450d00200241003a00c0030b200041063a00000c070b410121010b200241d0006a41186a200241206a41186a290300220b370300200241d0006a41106a200241206a41106a290300220c370300200241d0006a41086a200241206a41086a290300220d37030020022002290320220e370350200041043a00002000200e370001200041096a200d370000200041116a200c370000200041196a200b370000200041246a2004360200200041216a20013a00000c050b41002105200241003a00c0032003417f6a210a2003417e6a210302400340200a2005460d01200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241206a41086a2205200241a0036a41086a290300370300200241206a41106a2203200241a0036a41106a290300370300200241206a41186a2209200241a0036a41186a290300370300200220022903a003370320200241186a200110e6012002280218450d020c030b200541ff0171450d02200241003a00c0030c020b200041063a00000c030b200228021c2101200241d0006a41186a2009290300220b370300200241d0006a41106a2003290300220c370300200241d0006a41086a2005290300220d37030020022002290320220e370350200041053a00002000200e370001200041096a200d370000200041116a200c370000200041196a200b370000200041216a20022f004d3b0000200041236a200241cf006a2d00003a0000200041246a20013602000c020b200041063a00000c010b1036000b200241d0056a24000bfa0602047f047e230041b0056b22022400024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541024b0d0320050e03010204010b200041043602000c050b200241d0006a200110b302024002402002280250411b460d0020024180036a200241d0006a41b00210e8061a41b002102d22010d010c050b200041043602000c050b2000200120024180036a41b00210e80636020420004101360200200041086a2002290228370200200041106a200241286a41086a290200370200200041186a200241286a41106a290200370200200041206a200241286a41186a290200370200200041286a200241286a41206a2802003602000c040b20024180036a2001109b03024020022d0080034102460d00200241d0006a41206a20024180036a41206a2802002201360200200241d0006a41186a20024180036a41186a2903002206370300200241d0006a41106a20024180036a41106a2903002207370300200241d0006a41086a20024180036a41086a29030022083703002002200229038003220937035020004102360200200020093702042000410c6a2008370200200041146a20073702002000411c6a2006370200200041246a20013602000c040b200041043602000c030b200041043602000c020b20024180036a2001109b03024020022d0080034102470d00200041043602000c020b200241286a41206a20024180036a41206a280200360200200241286a41186a20024180036a41186a290300370300200241286a41106a20024180036a41106a290300370300200241286a41086a20024180036a41086a2903003703002002200229038003370328200241d0006a200110b30202402002280250411b460d0020024180036a200241d0006a41b00210e8061a41b002102d2201450d01200120024180036a41b00210e8062101200241206a200241286a41206a2802002205360200200241186a200241286a41186a2903002206370300200241106a200241286a41106a2903002207370300200241086a200241286a41086a290300220837030020022002290328220937030020004103360200200020093702042000410c6a2008370200200041146a20073702002000411c6a2006370200200041246a2005360200200041286a20013602000c020b200041043602000c010b1036000b200241b0056a24000b8d1e03077f047e017f230041e0056b2202240002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541084b0d0a20050e09010203040506070809010b2000410a3a00000c0a0b41002105200241003a00d0032003417f6a21062003417e6a2107024002400240034020062005460d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b200241c0006a41086a200241b0036a41086a290300370300200241c0006a41106a200241b0036a41106a290300370300200241c0006a41186a200241b0036a41186a290300370300200220022903b00337034020024180016a200110b302200228028001411b460d01200241b0036a20024180016a41b00210e8061a41b002102d22010d021036000b200541ff0171450d00200241003a00d0030b2000410a3a00000c0a0b2001200241b0036a41b00210e8062101200241206a41186a200241c0006a41186a2903002209370300200241206a41106a200241c0006a41106a290300220a370300200241206a41086a200241c0006a41086a290300220b37030020022002290340220c370320200041013a00002000200c370001200041096a200b370000200041116a200a370000200041196a2009370000200041216a20022f001d3b0000200041236a2002411f6a2d00003a0000200041246a2001360200200041286a2002290200370200200041306a200241086a290200370200200041386a200241106a290200370200200041c0006a200241186a2802003602000c090b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041023a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c0b0b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c080b20024180016a20011098030240024002402002280280012204450d002002280284012105200128020422074102490d0120024188016a2802002106200128020022082f0000210d20012007417e6a22033602042001200841026a36020020034104490d022008280002210320012007417a6a3602042001200841066a360200200041106a20033602002000410c6a2006360200200041086a2005360200200041046a2004360200200041026a200d3b0100200041033a0000200041146a20022902b0033702002000411c6a200241b0036a41086a290200370200200041246a200241b0036a41106a2902003702002000412c6a200241c8036a290200370200200041346a200241d0036a2902003702002000413c6a200241d8036a2902003702000c0a0b2000410a3a00000c090b2000410a3a00002005450d082004102f0c080b2000410a3a00002005450d072004102f0c070b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041043a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c070b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c060b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041053a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c080b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c050b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041063a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c050b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c040b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041073a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c040b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c030b200041083a00000c020b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041093a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c020b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c010b2000410a3a00000b200241e0056a24000b892f010e7f230041d0006b22012400024002404108102d2202450d002002410c3602042002418aa9c4003602004108102d2203450d00200320022902003702002002102f4108102d2202450d002002410c36020420024196a9c40036020020034108411010312203450d00200320022902003702082002102f4108102d2202450d0020024108360204200241a2a9c40036020020034110412010312204450d00200420022902003702102002102f4108102d2202450d002002410a360204200241aaa9c400360200200420022902003702182002102f4108102d2203450d002003410b360204200341b4a9c4003602002004412041c00010312202450d00200220032902003702202003102f4108102d2203450d0020034118360204200341f2b3c600360200200220032902003702282003102f4108102d2203450d002003411236020420034189cdc100360200200220032902003702302003102f41d400102d2205450d0041002106024020022802002203450d002005200228020436020820052003360204200541003602000240200228020822030d00410121060c010b2005200228020c360214200520033602102005410036020c0240200228021022030d00410221060c010b200520022802143602202005200336021c200541003602180240200228021822030d00410321060c010b2005200228021c36022c20052003360228200541003602240240200228022022030d00410421060c010b2005200228022436023820052003360234200541003602300240200228022822030d00410521060c010b2005200228022c360244200520033602402005410036023c0240200228023022030d00410621060c010b200520022802343602502005200336024c20054100360248410721060b2002102f20014100360228200142013703204104102d2202450d0020014284808080c00037022420012002360220200241edcad18b0636000002400240200128022420012802282202460d00200128022021030c010b200241016a22032002490d02200241017422042003200420034b1b22044100480d020240024020020d002004102d21030c010b200128022020022004103121030b2003450d0120012004360224200120033602200b2001200241016a360228200320026a410b3a0000411c200141206a106941e8acc300210703402007280204210820072802082204200141206a10690240024020012802242202200128022822096b2004490d00200128022021030c010b200920046a22032009490d032002410174220a2003200a20034b1b220a4100480d030240024020020d00200a102d21030c010b20012802202002200a103121030b2003450d022001200a36022420012003360220200a21020b2001200920046a220a360228200320096a2008200410e8061a02400240200728020c4102470d0002402002200a470d00200241016a22042002490d05200241017422092004200920044b1b22044100480d050240024020020d002004102d21030c010b200320022004103121030b2003450d0420012004360224200120033602200b2001200a41016a3602282003200a6a41003a00000c010b02402002200a470d00200241016a22042002490d04200241017422092004200920044b1b22044100480d040240024020020d002004102d21030c010b200320022004103121030b2003450d0320012004360224200120033602200b2001200a41016a3602282003200a6a41013a00000240200728020c4101470d002007280214210920072802182202200141206a10690240024020012802242204200128022822036b2002490d00200128022021040c010b200320026a220a2003490d0520044101742208200a2008200a4b1b220a4100480d050240024020040d00200a102d21040c010b20012802202004200a103121040b2004450d042001200a360224200120043602200b2001200320026a360228200420036a2009200210e8061a200728022021020240200728021c4101470d0020022007280228200141206a106b0c020b2002200741246a280200200141206a106b0c010b200141306a20072802101105002001280234210920012802382202200141206a10690240024020012802242204200128022822036b2002490d00200128022021040c010b200320026a220a2003490d0420044101742208200a2008200a4b1b220a4100480d040240024020040d00200a102d21040c010b20012802202004200a103121040b2004450d032001200a360224200120043602200b2001200320026a360228200420036a2009200210e8061a200128024021040240200128023c4101460d0020042001280244200141206a106b0c010b200420012802482202200141206a106b02402002450d00200241d8006c21094100210303400240200420036a220241346a280200450d002002413c6a280200450d00200241386a280200102f0b0240200241c4006a280200450d00200241cc006a280200450d00200241c8006a280200102f0b2009200341d8006a2203470d000b0b2001280244450d002004102f0b200128022421032001280228210202400240200728022c4102470d000240024020032002460d00200128022021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128022020022004103121030b2003450d0420012004360224200120033602200b2001200241016a360228200320026a41003a00000c010b0240024020032002460d00200128022021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128022020022004103121030b2003450d0320012004360224200120033602200b2001200241016a360228200320026a41013a00000240200728022c4101470d002007280230210320072802382202200141206a10692002450d012002412c6c210a2003411c6a21020340200241686a28020021082002416c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d062009410174220c200b200c200b4b1b220b4100480d060240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d052001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a200241706a200141206a106a2002200141206a10682002412c6a2102200a41546a220a0d000c020b0b200141186a200728023011050020012802182103200128021c2202200141206a10692002450d002002412c6c210a2003411c6a21020340200241686a28020021082002416c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d052009410174220c200b200c200b4b1b220b4100480d050240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d042001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a200241706a200141206a106a2002200141206a10682002412c6a2102200a41546a220a0d000b0b200128022421032001280228210202400240200728023c4102470d000240024020032002460d00200128022021030c010b200241016a22032002490d05200241017422042003200420034b1b22044100480d050240024020020d002004102d21030c010b200128022020022004103121030b2003450d0420012004360224200120033602200b2001200241016a360228200320026a41003a00000c010b0240024020032002460d00200128022021030c010b200241016a22032002490d04200241017422042003200420034b1b22044100480d040240024020020d002004102d21030c010b200128022020022004103121030b2003450d0320012004360224200120033602200b2001200241016a360228200320026a41013a00000240200728023c4101470d002007280240210320072802482202200141206a10692002450d012002412c6c210a2003411c6a21020340200241686a28020021082002416c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d062009410174220c200b200c200b4b1b220b4100480d060240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d052001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a200241706a200141206a10682002200141206a10682002412c6a2102200a41546a220a0d000c020b0b200141106a20072802401105002001280210210320012802142202200141206a10692002450d002002412c6c210a2003411c6a21020340200241686a28020021082002416c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d052009410174220c200b200c200b4b1b220b4100480d050240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d042001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a200241706a200141206a10682002200141206a10682002412c6a2102200a41546a220a0d000b0b02400240200728024c4101470d002007280250210c20072802582202200141206a10692002450d01200241386c210d410021090340200c20096a220241046a2802002108200241086a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d06200a410174220e200b200e200b4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d052001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a200241106a2802002108200241146a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d06200a410174220e200b200e200b4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d052001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a02400240200241186a2802004101470d002002411c6a2802002108200241246a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d08200a410174220e200b200e200b4b1b220b4100480d0802400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d072001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a0c010b200141306a2002411c6a280200200241206a28020028020c1102002001280230210820012802382203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d07200a410174220e200b200e200b4b1b220b4100480d0702400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d062001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a2001280234450d002008102f0b200241286a200141206a1068200d200941386a2209470d000c020b0b200141086a20072802501105002001280208210c200128020c2202200141206a10692002450d00200241386c210d410021090340200c20096a220241046a2802002108200241086a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d05200a410174220e200b200e200b4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d042001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a200241106a2802002108200241146a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d05200a410174220e200b200e200b4b1b220b4100480d0502400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d042001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a02400240200241186a2802004101470d002002411c6a2802002108200241246a2802002203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d07200a410174220e200b200e200b4b1b220b4100480d0702400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d062001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a0c010b200141306a2002411c6a280200200241206a28020028020c1102002001280230210820012802382203200141206a1069024002402001280224220a200128022822046b2003490d002001280220210a0c010b200420036a220b2004490d06200a410174220e200b200e200b4b1b220b4100480d0602400240200a0d00200b102d210a0c010b2001280220200a200b1031210a0b200a450d052001200b3602242001200a3602200b2001200420036a360228200a20046a2008200310e8061a2001280234450d002008102f0b200241286a200141206a1068200d200941386a2209470d000b0b02400240200728025c4101470d002007280260210320072802682202200141206a10692002450d012002411c6c210a2003410c6a21020340200241786a28020021082002417c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d062009410174220c200b200c200b4b1b220b4100480d060240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d052001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a2002200141206a10682002411c6a2102200a41646a220a0d000c020b0b200120072802601105002001280200210320012802042202200141206a10692002450d002002411c6c210a2003410c6a21020340200241786a28020021082002417c6a2802002203200141206a10690240024020012802242209200128022822046b2003490d00200128022021090c010b200420036a220b2004490d052009410174220c200b200c200b4b1b220b4100480d050240024020090d00200b102d21090c010b20012802202009200b103121090b2009450d042001200b360224200120093602200b2001200420036a360228200920046a2008200310e8061a2002200141206a10682002411c6a2102200a41646a220a0d000b0b200741ec006a220741b8c4c300470d000b02400240200128022420012802282202460d00200128022021030c010b200241016a22032002490d02200241017422042003200420034b1b22044100480d020240024020020d002004102d21030c010b200128022020022004103121030b2003450d0120012004360224200120033602200b2001200241016a360228200320026a41043a00002006200141206a106902402006450d002006410c6c210a200541086a210303402003417c6a280200210820032802002202200141206a10690240024020012802242209200128022822046b2002490d00200128022021090c010b200420026a22072004490d042009410174220b2007200b20074b1b22074100480d040240024020090d002007102d21090c010b200128022020092007103121090b2009450d0320012007360224200120093602200b2001200420026a360228200920046a2008200210e8061a2003410c6a2103200a41746a220a0d000b0b20002001290320370200200041086a200141206a41086a2802003602002005102f200141d0006a24000f0b1036000b1038000ba00b01057f230041106b22022400200141046a2802002103200141086a2802002104024002400240024020002d00004101460d000240024020032004460d00200128020021050c010b200441016a22032004490d04200441017422052003200520034b1b22034100480d040240024020040d002003102d21050c010b200128020020042003103121050b2005450d0320012005360200200141046a2003360200200141086a28020021040b200141086a2206200441016a36020041002103200520046a41003a000002400240024002400240024002400240024020002d00010e080700010203040506070b200241013a000f410121030c070b410221030c050b410321030c040b410421030c030b410521030c020b410621030c010b200241073a000f02400240200141046a28020020062802002204460d00200128020021030c010b200441016a22032004490d06200441017422052003200520034b1b22054100480d060240024020040d002005102d21030c010b200128020020042005103121030b2003450d0520012003360200200141046a2005360200200141086a28020021040b200141086a200441016a360200200320046a41073a000020002d000221030b200220033a000f0b02400240200141046a280200200141086a2802002204460d00200128020021000c010b200441016a22002004490d04200441017422052000200520004b1b22054100480d040240024020040d002005102d21000c010b200128020020042005103121000b2000450d0320012000360200200141046a2005360200200141086a28020021040b200141086a200441016a360200200020046a20033a00000c010b0240024020032004460d00200128020021030c010b200441016a22032004490d03200441017422052003200520034b1b22054100480d030240024020040d002005102d21030c010b200128020020042005103121030b2003450d0220012003360200200141046a2005360200200141086a28020021040b200141086a200441016a360200200320046a41013a000020002d0001220441024b0d0002400240024020040e03000102000b02400240200141046a280200200141086a2802002204460d00200128020021000c010b200441016a22002004490d05200441017422032000200320004b1b22034100480d050240024020040d002003102d21000c010b200128020020042003103121000b2000450d0420012000360200200141046a2003360200200141086a28020021040b200141086a200441016a360200200020046a41003a00000c020b02400240200141046a280200200141086a2802002204460d00200128020021000c010b200441016a22002004490d04200441017422032000200320004b1b22034100480d040240024020040d002003102d21000c010b200128020020042003103121000b2000450d0320012000360200200141046a2003360200200141086a28020021040b200141086a200441016a360200200020046a41013a00000c010b02400240200141046a280200200141086a2802002204460d00200128020021030c010b200441016a22032004490d03200441017422052003200520034b1b22054100480d030240024020040d002005102d21030c010b200128020020042005103121030b2003450d0220012003360200200141046a2005360200200141086a28020021040b200141086a2205200441016a360200200320046a41023a000020002d0002210302400240200141046a28020020052802002204460d00200128020021000c010b200441016a22002004490d03200441017422052000200520004b1b22054100480d030240024020040d002005102d21000c010b200128020020042005103121000b2000450d0220012000360200200141046a2005360200200141086a28020021040b200141086a200441016a360200200020046a20033a00000b200241106a24000f0b1036000b1038000beb0f03057f017e077f230041e0006b2202240020012802202103200241306a41186a4200370300200241306a41106a22044200370300200241306a41086a2205420037030020024200370330419c9eca00ad4280808080f000841001220629000021072005200641086a290000370300200220073703302006102f41a5c6c800ad4280808080a00184100122062900002107200241d0006a41086a2208200641086a290000370300200220073703502006102f200420022903502207370300200241106a41086a2005290300370300200241106a41106a2007370300200241106a41186a200829030037030020022002290330370310200241306a200241106a412010aa0220022802302205410120051b2106024002400240024002400240024002400240024020032002290234420020051b2207422088a7490d002007a7450d012006102f0c010b2003200620034105746a10a303210302402007a7450d002006102f0b20030d010b200241306a41186a22054200370300200241306a41106a22064200370300200241306a41086a2203420037030020024200370330419c9eca00ad4280808080f000841001220829000021072003200841086a290000370300200220073703302008102f41a39eca00ad4280808080c00184100122082900002107200241d0006a41086a2209200841086a290000370300200220073703502008102f20042002290350370000200441086a22082009290300370000200241106a41086a220a2003290300370300200241106a41106a220b2006290300370300200241106a41186a220c200529030037030020022002290330370310200241086a200241106a4120109501200128021c200228020c410020022802081b220d470d012005420037030020064200370300200342003703002002420037033041d39bca00ad42808080808001841001220e29000021072003200e41086a29000037030020022007370330200e102f419087ca00ad4280808080c000841001220e29000021072009200e41086a29000037030020022007370350200e102f2004200229035037000020082009290300370000200a2003290300370300200b2006290300370300200c200529030037030020022002290330370310200241306a200241106a108d0320022802302204410120041b210c200128022022052002290234420020041b2207422088a74f0d03200c20054105746a220e450d032002410036023820024201370330200128020021034104102d22040d020c070b20004180063b0001200041013a0000200041036a41003a00000c050b20004180063b0001200041013a0000200041036a41003a00000c040b20024284808080c0003702342002200436023020042003360000200128020421082001410c6a2802002204200241306a10690240024020022802342206200228023822036b2004490d00200228023021060c010b200320046a22092003490d032006410174220a2009200a20094b1b22094100480d030240024020060d002009102d21060c010b200228023020062009103121060b2006450d0520022009360234200220063602300b2002200320046a360238200620036a2008200410e8061a200141106a2802002103200141186a2802002204200241306a10690240024020040d002002280234210620022802382109200d21080c010b20032004410c6c6a210b03402003280200210a200341086a2802002204200241306a10690240024020022802342206200228023822056b2004490d00200228023021080c010b200520046a22082005490d05200641017422092008200920084b1b22094100480d050240024020060d002009102d21080c010b200228023020062009103121080b2008450d072002200936023420022008360230200921060b2002200520046a2209360238200820056a200a200410e8061a2003410c6a2203200b470d000b20012802202105200128021c21080b02400240200620096b4104490d00200941046a2103200228023021040c010b200941046a22032009490d03200641017422042003200420034b1b220a4100480d030240024020060d00200a102d21040c010b20022802302006200a103121040b2004450d052002200a36023420022004360230200a21060b20022003360238200420096a200836000002400240200620036b41034d0d00200621080c010b200341046a22082003490d03200641017422092008200920084b1b22084100480d030240024020060d002008102d21040c010b200420062008103121040b2004450d0520022008360234200220043602300b200420036a2005360000200141246a200341046aad4220862004ad84200e1014210302402008450d002004102f0b20034101460d010b20004180083b0001200041013a0000200041036a41003a00002007a7450d02200c102f0c020b410c102d2203450d024104102d2204450d022004200d36000020044104412410312204450d022004200e2900003700042004411c6a200e41186a290000370000200441146a200e41106a2900003700002004410c6a200e41086a290000370000200041306a41013a0000200041286a428180808010370200200041246a2003360200200041206a4100360200200041186a4204370300200041106a42e400370300200041086a427f370300200342a4808080c00437020420032004360200200041316a2002280030360000200041346a200241336a280000360000200041003a00002007a7450d01200c102f0c010b1038000b200241e0006a24000f0b1036000b870b04057f017e047f037e230041f0006b22022400200241386a41186a22034200370300200241386a41106a22044200370300200241386a41086a2205420037030020024200370338419c9eca00ad4280808080f000841001220629000021072005200641086a290000370300200220073703382006102f41a39eca00ad4280808080c00184100122062900002107200241d8006a41086a2208200641086a290000370300200220073703582006102f200420022903582207370300200241186a41086a22092005290300370300200241186a41106a2007370300200241186a41186a200829030037030020022002290338370318200241106a200241186a41201095012002280214210a2002280210210b41d39bca00ad42808080808001841001220629000021072009200641086a290000370300200220073703182006102f41db9bca00ad4280808080a002841001220629000021072008200641086a290000370300200220073703582006102f2002200a4100200b1b220a36026c200241ec006aad220c4280808080c00084100322062900002107200641086a290000210d200641106a290000210e2003200641186a2900003703002004200e3703002005200d370300200220073703382006102f024041c000102d2206450d00200620022903183700002006200229035837001020062002290338370020200641086a2009290300370000200641186a2008290300370000200641286a2005290300370000200641306a2004290300370000200641386a200329030037000020022000360218200241186aad4280808080c00084100322082900002107200841086a290000210d200841106a290000210e2003200841186a2900003703002004200e3703002005200d370300200220073703382008102f200641c00041800110312206450d0020062002290338370040200641d8006a200241386a41186a2204290300370000200641d0006a200241386a41106a2208290300370000200641c8006a200241386a41086a2203290300370000200241086a200641e00041c8e1ca004100410010b501200228020821052006102f41012106024020054101460d0041d39bca00ad4280808080800184100122062900002107200241d8006a41086a200641086a290000370300200220073703582006102f4194c9c300ad4280808080e00184100122062900002107200241186a41086a200641086a290000370300200220073703182006102f2002200a36026c200c4280808080c00084100322062900002107200641086a290000210d200641106a290000210e2004200641186a2900003703002008200e3703002003200d370300200220073703382006102f41c000102d2206450d01200620022903583700002006200229031837001020062002290338370020200641086a200241d8006a41086a290300370000200641186a200241186a41086a290300370000200641286a200241386a41086a2208290300370000200641306a200241386a41106a2203290300370000200641386a200241386a41186a22092903003700004120102d2205450d0120052001290000370000200541186a200141186a290000370000200541106a200141106a290000370000200541086a200141086a2900003700002005ad4280808080800484100322042900002107200441086a290000210d200441106a290000210e2009200441186a2900003703002003200e3703002008200d370300200220073703382004102f2005102f200641c00041800110312206450d0120062002290338370040200641d8006a200241d0006a290300370000200641d0006a200241c8006a290300370000200641c8006a200241c0006a2903003700002002200641e00010950120022802042105200228020021042006102f200541004720044100477121060b200241f0006a240020060f0b1036000bfb20030b7f047e097f230041c0066b2202240002400240024020012802082203200128020c2204460d002001200341206a220536020820012802102106200241f8026a41186a200341186a290000370300200241f8026a41106a200341106a290000370300200241f8026a41086a200341086a290000370300200220032900003703f802200128021421074100210802400240024002402001411c6a280200220941014b0d0020090e020201020b2009210a0340200a410176220b20086a220c20082007200c4105746a200241f8026a412010ea064101481b2108200a200b6b220a41014b0d000b0b200720084105746a200241f8026a412010ea060d002006210c0c010b2001200641016a220c3602104108210820052004460d020240200941014d0d0003402001200541206a2203360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f802410021082009210a0340200a410176220520086a220b20082007200b4105746a200241f8026a412010ea064101481b2108200a20056b220a41014b0d000b200720084105746a200241f8026a412010ea06450d022001200c41016a220c3602102003210520032004460d030c000b0b0240024020090e020100010b03402001200541206a2208360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f80202402007200241f8026a412010ea060d00410021080c030b2001200c41016a220c3602102008210520042008460d030c000b0b2001200436020820012006200420036b41406a4105766a41026a3602100c020b0240024002400240024002400240200920084d0d00200241186a200720084105746a220841186a290000220d370300200241106a200841106a290000220e370300200241086a200841086a290000220f3703002002200829000022103703002001200c41016a360210200141206a2802002108200141246a280200210a200241206a41186a200d370300200241206a41106a200e370300200241206a41086a200f370300200220103703202002200a36024c200220083602482002200c360244200241f8026a41186a4200370300200241f8026a41106a22054200370300200241f8026a41086a22084200370300200242003703f802419c9eca00ad4280808080f000841001220a290000210d2008200a41086a2900003703002002200d3703f802200a102f41a5c6c800ad4280808080a001841001220a290000210d200241b8026a41086a220b200a41086a2900003703002002200d3703b802200a102f200520022903b802220d370300200241d0006a41086a2008290300370300200241d0006a41106a200d370300200241d0006a41186a200b290300370300200220022903f802370350200241f8026a200241d0006a412010aa0220022802f8022208410120081b210a02400240200c20022902fc02420020081b220d422088a7490d00200da7450d01200a102f2002280244210c0c010b200c200a200c4105746a10a30321050240200da7450d00200a102f0b410221082002280244210c20050d0a0b200228024c210620022802482111411b102d2208450d06200841176a41002800bacf43360000200841106a41002900b3cf43370000200841086a41002900abcf43370000200841002900a3cf433700004104102d220a450d06200a200c3600002008411b413610312209450d062009200a28000036001b200a102f200241b8026a41002009ad4280808080f00384220d10151073024002400240024020022802b8022208450d00200241c0026a280200220a4104490d00200a417c714104460d0041000d0020082800002011470d002008280004220a41036a20064b0d010b4104102d2208450d092008201136000020084104410810312208450d0920082006360004200241d0006a41086a200241b8026a41086a280200360200200220022903b802370350200241f8026a200241d0006a10f40120022802fc02210a4100200d20023502800342208620022802f802220bad842008ad4280808080800184101621050240200a450d00200b102f0b02402002280250220a450d002002280254450d00200a102f0b2008102f4104210820054101460d022006210a0c010b024020022802bc02450d002008102f0b410121080b2009102f200a210c0c0a0b200241f8026a10a503024020022802f8022212450d002002418c036a280200211320024188036a280200211420024184036a280200211520024180036a280200211620022802fc0221172002410036028003200242013703f8024104102d2208450d0720024284808080c0003702fc02200220083602f802200820063600002016200241f8026a10690240024020022802fc02220a20022802800322086b2016490d0020022802f802210a0c010b200820166a22052008490d05200a410174220b2005200b20054b1b22054100480d0502400240200a0d002005102d210a0c010b20022802f802200a20051031210a0b200a450d08200220053602fc022002200a3602f8020b2002200820166a36028003200a20086a2012201610e8061a2013200241f8026a10692013450d0220152013410c6c6a21032015210a0340200a2802002101200a41086a2802002208200241f8026a10690240024020022802fc02220b20022802800322056b2008490d0020022802f80221070c010b200520086a22072005490d06200b41017422042007200420074b1b22044100480d0602400240200b0d002004102d21070c010b20022802f802200b2004103121070b2007450d09200220043602fc02200220073602f8022004210b0b2002200520086a220436028003200720056a2001200810e8061a200a410c6a220a2003470d000c040b0b41012108410521060c050b41c4c2ca0020082009103b000b20022802fc02210b20022802800321040b02400240200b20046b4104490d0020022802f80221080c010b200441046a22082004490d01200b410174220a2008200a20084b1b220a4100480d0102400240200b0d00200a102d21080c010b20022802f802200b200a103121080b2008450d042002200a3602fc02200220083602f802200a210b0b2002200441046a220a36028003200820046a20113600004103210502400240200b200a6b41034d0d00200b21070c010b200a41046a2207200a490d01200b41017422012007200120074b1b22074100480d0102400240200b0d002007102d21080c010b2008200b2007103121080b2008450d04200220073602fc02200220083602f8020b2008200a6a200c360000200241f8026a41e9dabdf306200241206a2008200441086a10a6034101210a024020022d00f8024101470d00200241f6026a20022d00fb023a0000200241b8026a41086a2002418c036a290200370300200241c8026a20024194036a290200370300200241d0026a2002419c036a290200370300200241d8026a200241a4036a290200370300200241e0026a200241ac036a290200370300200241e5026a200241b1036a290000370000200220022f00f9023b01f402200220024184036a2902003703b802200241f8026a41086a280200210b4100210a20022802fc0221050b200241b4026a41026a2201200241f4026a41026a2d00003a0000200241f8016a41086a200241b8026a41086a290300370300200241f8016a41106a2204200241b8026a41106a290300370300200241f8016a41186a2203200241b8026a41186a290300370300200241f8016a41206a2218200241b8026a41206a290300370300200241f8016a41286a2219200241b8026a41286a290300370300200241f8016a41306a200241b8026a41306a290300370300200220022f01f4023b01b402200220022903b8023703f8010240200a0d00200241f4016a41026a20012d00003a0000200241f8026a41086a200241f8016a41086a290300370300200241f8026a41106a2004290300370300200241f8026a41186a2003290300370300200241f8026a41206a2018290300370300200241f8026a41286a2019290300370300200241f8026a412d6a200241f8016a412d6a290000370000200220022f01b4023b01f401200220022903f8013703f80202402007450d002008102f0b200220022f01f4013b01b8022002200241f6016a2d00003a00ba02410021080c030b02402007450d002008102f0b02402017450d002012102f0b02402013450d002013410c6c210a2015210803400240200841046a280200450d002008280200102f0b2008410c6a2108200a41746a220a0d000b0b410121082014450d012015102f0c010b1038000b200b2112200521060b200241b8016a41086a220a200241f8026a41086a290300370300200241b8016a41106a2207200241f8026a41106a290300370300200241b8016a41186a2201200241f8026a41186a290300370300200241b8016a41206a2204200241f8026a41206a290300370300200241b8016a41286a2203200241f8026a41286a290300370300200241b8016a412d6a2218200241f8026a412d6a290000370000200220022d00ba023a00f201200220022f01b8023b01f001200220022903f8023703b80102400240024020080d00200241d0006a41186a2013360200200241d0006a41146a2014360200200241d0006a41106a2015360200200241d0006a410c6a2016360200200241d0006a41086a2017360200200241f6006a20022d00f2013a0000200241fb006a200b360000200241f7006a2005360000200241ff006a20022903b80137000020024187016a200a2903003700002002418f016a200729030037000020024197016a20012903003700002002419f016a2004290300370000200241a7016a2003290300370000200241ac016a20182900003700002002200c3602702002201136026c2002201236025420022006360250200220022f01f0013b0174024041002802a4e24a4103490d00200241b8026a411c6a412d360200200241b8026a41146a412e360200200241b8026a410c6a412e3602002002412e3602bc022002200241d0006a3602d0022002200241c8006a3602c8022002200241cc006a3602c0022002200241c4006a3602b80241002802b0e24a210841002802ace24a210a41002802a8e24a2105200241b8036a41da03360200200241b0036a42c580808010370300200241ac036a4188ccc300360200200241a4036a4210370200200241a0036a41f8cbc30036020020024198036a420437030020024188036a4204370300200241f8026a41086a4108360200200241f8026a411c6a200241b8026a360200200241c0cfc30036028403200241f0cbc3003602fc02200241033602f802200a41cca5c000200541024622051b200241f8026a200841e4a5c00020051b2802101102000b2002411336029004200242023703e00320024194046a200241d0006a41e40010e8061a2002200241f8026a3602f801200241b8026a200241f8016a10a90320022802b80220022802bc0220022802c00210aa03210a20024190046a108e014107210841062106200a0d010c020b4107210820064107460d010b4104102d2208450d012008201136000020084104410810312208450d01200841003600044100200d2008ad428080808080018410172008102f200621080b2009102f2012210c0c030b1036000b410821080b0b2000200c36020420002008360200200241c0066a24000ba70603017f017e0e7f230041306b220124000240024010262202422088a722030d00410121040c010b2002a721040b20012003360224200120043602200240024002400240024002402003450d0020042d0000210520012003417f6a3602242001200441016a360220200541014b0d00024020050e020002000b200141186a200141206a10e60120012802180d0020012802242205200128021c2206490d002006417f4c0d030240024020060d00410121070c010b200610332207450d05200720012802202208200610e8061a2001200520066b3602242001200820066a3602200b2007450d00200141106a200141206a10e601024020012802100d00200128021422092001280224410c6e2205200520094b1b220aad420c7e2202422088a70d042002a72205417f4c0d040240024020050d004104210b0c010b2005102d220b450d062005410c6e210a0b024002402009450d004100210c410021084100210d0340200141086a200141206a10e60120012802080d022001280224220e200128020c2205490d022005417f4c0d070240024020050d004101210f0c010b20051033220f450d09200f20012802202210200510e8061a2001200e20056b3602242001201020056a3602200b200d41016a210e0240200d200a470d00200c200e200c200e4b1bad420c7e2202422088a70d0a2002a7220a4100480d0a02400240200d0d00200a102d210b0c010b200b2008200a1031210b0b200b450d09200a410c6e210a0b200b20086a220d200f360200200d41046a2005ad2202422086200284370200200c41026a210c2008410c6a2108200e210d2009200e470d000b0b200b450d012007450d020c040b0240200d450d00200b210503400240200541046a280200450d002005280200102f0b2005410c6a2105200841746a22080d000b0b200a450d00200b102f0b2006450d002007102f0b41f4c8ca00412e200141286a418ccaca0041a4c9ca00103e000b410021070b2000200636020420002007360200200041146a2009360200200041106a200a3602002000410c6a200b360200200041086a200636020002402003450d002004102f0b200141306a24000f0b103d000b1036000b1038000b970403017f017e017f23004190016b22052400200520013602040240200541046a20022004ad4220862003ad84102b2206422088a72201450d002006a722072d0000220341014b0d004100210202400240024020030e020100010b41002102200541003a008801200741016a21042001417f6a2101034020012002460d02200541c8006a20026a200420026a2d00003a00002005200241016a22033a00880120032102200341c000470d000b200541086a41386a200541c8006a41386a290300370300200541086a41306a200541c8006a41306a290300370300200541086a41286a200541c8006a41286a290300370300200541086a41206a200541c8006a41206a290300370300200541086a41186a200541c8006a41186a290300370300200541086a41106a200541c8006a41106a290300370300200541086a41086a200541c8006a41086a29030037030020052005290348370308410121020b200020023a000020002005290308370001200041096a200541106a290300370000200041116a200541186a290300370000200041196a200541206a290300370000200041216a200541286a290300370000200041296a200541306a290300370000200041316a200541386a290300370000200041396a200541c0006a2903003700002007102f20054190016a24000f0b200241ff0171450d00200541003a0088010b41f4c8ca00412e200541c8006a418ccaca0041a4c9ca00103e000bec0603067f017e097f23004190016b2202240002400240024002402000410c6a2802002203417f4c0d0020002802042104200028020021050240024020030d00410121060c010b2003102d2206450d040b20062004200310e8062107200041186a2802002204ad420c7e2208422088a70d002008a72209417f4c0d002000280210210a02400240024020090d00200a2004410c6c6a210b4104210c200421060c010b2009102d220c450d05200a2004410c6c6a210b2009410c6e220620044f0d0002402006410174220d2004200d20044b1b220e410c6c22044100480d00024002402009410b4b0d002004102d210c0c010b200c2006410c6c20041031210c0b200c0d020c060b1038000b2004450d022006210e0b410021064100210f0340200a20066a220941086a2802002204417f4c0d01200928020021100240024020040d00410121110c010b2004102d2211450d050b200c20066a220d20112010200410e806360200200d41086a2004360200200d41046a20043602002006410c6a2106200f41016a210f2009410c6a200b470d000b200e21060c020b103d000b4100210f0b200241286a200f360200200241106a41146a2006360200200241206a200c360200200241106a410c6a2003360200200241186a22042003360200200241106a412c6a2000412c6a290200370200200241106a41346a200041346a290200370200200241106a413c6a2000413c6a290200370200200241106a41c4006a200041c4006a290200370200200241106a41cc006a200041cc006a290200370200200241106a41d4006a200041d4006a290200370200200241106a41dc006a200041dc006a29020037020020022007360214200220053602102002200029021c37022c200220002902243702342002410c6a412f360200200241043602042002418cc9c3003602002001411c6a28020021062002200241106a36020820012802182109200241f8006a41146a41023602002002420237027c20024194d0c300360278200220023602880120092006200241f8006a103c210902402004280200450d002002280214102f0b024020022802282206450d00200228022021042006410c6c210603400240200441046a280200450d002004280200102f0b2004410c6a2104200641746a22060d000b0b02402002280224450d002002280220102f0b20024190016a240020090f0b1036000baf0201037f23004180016b2202240002400240024002400240200128020022034110710d002000280200210420034120710d012004ad41012001104521000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000b20024180016a240020000f0b2004418001104b000b2004418001104b000b8d1203067f027e067f230041206b2202240002400240024041ca03102d2203450d00200242ca03370204200220033602002002410210f20302400240200128020022012903684202520d0002400240200228020420022802082203460d00200228020021040c010b200341016a22042003490d05200341017422052004200520044b1b22054100480d050240024020030d002005102d21040c010b200228020020032005103121040b2004450d0320022005360204200220043602000b200420036a41043a00002002200228020841016a3602080c010b02400240200228020420022802082203460d00200228020021040c010b200341016a22042003490d04200341017422052004200520044b1b22054100480d040240024020030d002005102d21040c010b200228020020032005103121040b2004450d0220022005360204200220043602000b200420036a4184013a00002002200228020841016a3602082001200210eb02024020012d0024220341024b0d000240024002400240024020030e03000102000b410021060c020b410121060c010b41022106200241023a001041c10021040c010b200220063a001041c00021040b02400240200228020420022802082203460d00200228020021050c010b200341016a22052003490d05200341017422072005200720054b1b22074100480d050240024020030d002007102d21050c010b200228020020032007103121050b2005450d0320022007360204200220053602000b2002200341016a360208200520036a20063a00000240024020022802042205200228020822036b2004490d00200228020021050c010b200320046a22062003490d05200541017422072006200720064b1b22064100480d050240024020050d002006102d21050c010b200228020020052006103121050b2005450d0320022006360204200220053602000b2002200320046a360208200520036a200141256a200410e8061a0b0240024020012903684201520d00200141f8006a29030020012903702208420c882209420120094201561b8021090240024020022802042204200228020822036b4102490d00200228020021040c010b200341026a22052003490d06200441017422062005200620054b1b22054100480d060240024020040d002005102d21040c010b200228020020042005103121040b2004450d0420022005360204200220043602000b2002200341026a360208200420036a2009a741047420087aa7417f6a22034101200341014b1b2203410f2003410f491b723b00000c010b02400240200228020420022802082203460d00200228020021040c010b200341016a22042003490d05200341017422052004200520044b1b22054100480d050240024020030d002005102d21040c010b200228020020032005103121040b2004450d0320022005360204200220043602000b2002200341016a360208200420036a41003a00000b20014190016a2002109502200220014180016a360210200241106a200210c2020b20014198016a2002109101200228020821014104102d2203450d0020024204370214200220033602102001417e6a200241106a10692002280208220341014d0d01200228021821052002280214210a2002280210210620024100360208200228020021010240024002400240024002402003417e6a2207450d004102210b2005450d04200120062d00003a00004101210c2002200228020841016a36020820054101460d04200620056a210d200120062d00013a00012002200228020841016a3602084102210b200641026a21042005417e6a220e0d014100210e0c020b0240024002402002280204220320054f0d00200341017422042005200420054b1b22044100480d0a0240024020030d002004102d21010c010b200120032004103121010b2001450d0820022004360204200220013602002002280208210b0c010b4100210b2005450d010b2001200b6a220320062d00003a0000024020054101470d00200b41016a210b0c010b2005417f6a2104200641016a2101200341016a21030340200320012d00003a0000200341016a2103200141016a21012004417f6a22040d000b200b20056a210b0b2002200b3602084102210b0c020b024002402002280204220120036b200e490d00200228020021010c010b2003200e6a220b2003490d0720014101742203200b2003200b4b1b22034100480d070240024020010d002003102d21010c010b200228020020012003103121010b2001450d0520022003360204200220013602000b200120056a200141026a200710e9061a0240200520022802082201460d00200520016b210b2005417e6a2103200228020020016a210c410021010340024020032001470d002005210b0c040b200c20016a20042d00003a00002002200228020841016a360208200441016a2104200b200141016a2201470d000b200d20046b220e0d004100210e4101210c2005210b0c010b200e4100480d062005210b200e102d220c450d040b0240200d2004460d00200c20042d00003a00004101210f02400240200441016a2201200d470d00200c41016a21050c010b200c41016a21032006200520046b6a21040340200320012d00003a0000200341016a2103200d200141016a2201470d000b2004450d01200c20046a21052004210f0b02400240200228020422012007200b6a22036b200f490d00200228020021010c010b2003200f6a22042003490d07200141017422032004200320044b1b22034100480d070240024020010d002003102d21010c010b200228020020012003103121010b2001450d0520022003360204200220013602000b2001200b200f6a220d6a2001200b6a200710e9061a0240200d20022802082201460d00200228020020016a2103200b200f6a20016b2104200c2101034020052001460d01200320012d00003a00002002200228020841016a360208200141016a2101200341016a21032004417f6a22040d000b0b200d210b0b200e450d00200c102f0b2007450d010b0240200b20022802082201460d002002280200220320016a2003200b6a200710e9061a0b2002200720016a3602080b0240200a450d002006102f0b20002002290300370200200041086a200241086a280200360200200241206a24000f0b1036000b41a6b5ca00411c41f8b4ca001039000b1038000b810103017f017e027f230041106b220324000240024002402002ad4220862000ad8410252204428080808010540d00410121022004a722052d0000220641014b0d0020060e020102010b41f4c8ca00412e200341086a418ccaca0041a4c9ca00103e000b410021020b2005102f02402001450d002000102f0b200341106a240020020bef0401017f230041306b220224000240024002400240024002400240024020002802000e0701020304050600010b2001411c6a2802002100200128021821012002412c6a4100360200200241c8e1ca003602282002420137021c200241f8ccc30036021820012000200241186a103c21010c060b2002200041046a36020c2002410a3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420137021c20024180cdc3003602182002200241106a36022820012000200241186a103c21010c050b2002200041046a36020c2002410a3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024188cdc3003602182002200241106a36022820012000200241186a103c21010c040b2002200028020436020c200241013602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024198cdc3003602182002200241106a36022820012000200241186a103c21010c030b2001411c6a2802002100200128021821012002412c6a4100360200200241c8e1ca003602282002420137021c200241a8cdc30036021820012000200241186a103c21010c020b2001411c6a2802002100200128021821012002412c6a4100360200200241c8e1ca003602282002420137021c200241b0cdc30036021820012000200241186a103c21010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241c8e1ca003602282002420137021c200241b8cdc30036021820012000200241186a103c21010b200241306a240020010b980201027f230041206b220224002002200128021841c8e1ca0041002001411c6a28020028020c1100003a00102002200136020841012101200241013a00112002410036020c200220003602182002200041246a36021c200241086a200241186a41a4d0c30010612002411c6a41b4d0c30010611a20022d0010210002400240200228020c22030d00200021010c010b0240200041ff01710d00024020034101470d0020022d001141ff0171450d00200228020822002d00004104710d004101210120002802184196a5c00041012000411c6a28020028020c1100000d010b2002280208220128021841e4d3ca0041012001411c6a28020028020c11000021010b200220013a00100b200241206a2400200141ff01714100470b1c00200128021841ffcbca00410f2001411c6a28020028020c1100000b88810109057f017e017f017e077f017e207f057e057f23004180066b2200240020004180056a41186a2201420037030020004180056a41106a220242003703004108210320004180056a41086a220442003703002000420037038005419c9eca00ad4280808080f0008422051001220629000021072004200641086a29000037030020002007370380052006102f41a39eca00ad4280808080c00184100122062900002107200041e0036a41086a2208200641086a290000370300200020073703e0032006102f200220002903e0032207370300200041b0046a41086a22092004290300370300200041b0046a41106a220a2007370300200041b0046a41186a220b200829030037030020002000290380053703b004200041286a200041b0046a4120109501200028022c210c2000280228210d200142003703002002420037030020044200370300200042003703800541d39bca00ad42808080808001841001220629000021072004200641086a29000037030020002007370380052006102f419087ca00ad4280808080c000841001220629000021072008200641086a290000370300200020073703e0032006102f200220002903e003220737030020092004290300370300200a2007370300200b200829030037030020002000290380053703b00420004180056a200041b0046a108d03200028028005210e200029028405210f200142003703002002420037030020044200370300200042003703800520051001220629000021052004200641086a29000037030020002005370380052006102f41a5c6c800ad4280808080a001841001220629000021052008200641086a290000370300200020053703e0032006102f200220002903e003220537030020092004290300370300200a2005370300200b200829030037030020002000290380053703b00420004180056a200041b0046a412010aa022000280280052206410120061b2110200029028405420020061b2205a721110240024002400240024002400240024002402005422088a72206450d002010200641057422126a2113200041c4036a211420004180056a41206a2115200041f8026a4104722116200041d0026a410472211741022106410021180340200041e0016a41186a201020186a221941186a221a290000370300200041e0016a41106a201941106a221b290000370300200041e0016a41086a201941086a221c290000370300200020192900003703e00120172019290000370000201741086a201c290000370000201741106a201b290000370000201741186a201a29000037000020002006417e6a221b3602d0024100211a0240201b201710a3030d00200041f8026a41206a200041d0026a41206a280200360200200041f8026a41186a200041d0026a41186a290300370300200041f8026a41106a200041d0026a41106a290300370300200041f8026a41086a200041d0026a41086a290300370300200020002903d0023703f80220004190026a41186a221a201641186a221b29000037030020004190026a41106a221c201641106a221d29000037030020004190026a41086a221e201641086a221f29000037030020002016290000370390022001201b2900003703002002201d2900003703002004201f2900003703002000201629000037038005200041a0036a20004180056a10af03200041b0026a41186a221b201a290300370300200041b0026a41106a221d201c290300370300200041b0026a41086a221c201e29030037030020002000290390023703b00220002802c003221a450d00201520002903a003370300201541186a200041a0036a41186a290300370300201541106a200041a0036a41106a290300370300201541086a200041a0036a41086a2903003703002001201b2903003703002002201d2903003703002004201c29030037030020004180026a41086a221b201441086a280200360200200020002903b002370380052000201429020037038002200041b0046a41386a221c20004180056a41386a290300370300200041b0046a41306a221d20004180056a41306a290300370300200041b0046a41286a221e20004180056a41286a290300370300200041b0046a41206a221f2015290300370300200b2001290300370300200a20022903003703002009200429030037030020002000290380053703b004200041e0036a41386a201c290300370300200041e0036a41306a201d290300370300200041e0036a41286a201e290300370300200041e0036a41206a201f290300370300200041e0036a41186a200b290300370300200041e0036a41106a200a29030037030020082009290300370300200020002903b0043703e003200041d0036a41086a201b28020036020020002000290380023703d0030b200041a0016a41086a2008290300370300200041a0016a41106a200041e0036a41106a290300370300200041a0016a41186a200041e0036a41186a290300370300200041a0016a41206a200041e0036a41206a290300370300200041a0016a41286a200041e0036a41286a290300370300200041a0016a41306a200041e0036a41306a290300370300200041a0016a41386a200041e0036a41386a29030037030020004190016a41086a200041d0036a41086a280200360200200020002903e0033703a001200020002903d00337039001201a0d02200641016a21062012201841206a2218470d000b0b410021202000410036029801200042083703900102402011450d002010102f0b4100211a0c010b200041c0006a41386a2217200041a0016a41386a290300370300200041c0006a41306a2216200041a0016a41306a290300370300200041c0006a41286a2204200041a0016a41286a290300370300200041c0006a41206a221b200041a0016a41206a290300370300200041c0006a41186a221c200041a0016a41186a290300370300200041c0006a41106a2208200041a0016a41106a290300370300200041c0006a41086a2201200041a0016a41086a29030037030020004180016a41086a221d20004190016a41086a280200360200200020002903a001370340200020002903900137038001200041306a41086a221e201d280200360200200020002903800137033020004180056a41086a221d200129030037030020004180056a41106a2201200829030037030020004180056a41186a2208201c29030037030020004180056a41206a221c201b29030037030020004180056a41286a221b200429030037030020004180056a41306a2204201629030037030020004180056a41386a221620172903003703002000200029034037038005200041b0046a41086a2217201e280200360200200020002903303703b00441d000102d2203450d0120032000290380053703002003201a360240200320002903b004370244200341386a2016290300370300200341306a2004290300370300200341286a201b290300370300200341206a201c290300370300200341186a2008290300370300200341106a2001290300370300200341086a201d290300370300200341cc006a201728020036020002400240201241606a2018470d004101211a410121200c010b201941206a2117201220186b41606a211b200041c4036a211e200041f8026a4104722116200041d0026a410472211902400340200041e0016a41186a201741186a2218290000370300200041e0016a41106a201741106a221a290000370300200041e0016a41086a201741086a2204290000370300200020172900003703e00120172900002105201941186a201829000037000020192005370000201941086a2004290000370000201941106a201a29000037000020002006417f6a221a3602d002410021180240201a201910a3030d00200041f8026a41206a200041d0026a41206a280200360200200041f8026a41186a200041d0026a41186a290300370300200041f8026a41106a200041d0026a41106a290300370300200041f8026a41086a200041d0026a41086a290300370300200020002903d0023703f80220004190026a41186a2218201641186a220429000037030020004190026a41106a2208201641106a221c29000037030020004190026a41086a2201201641086a2212290000370300200020162900003703900220004180056a41186a221a200429000037030020004180056a41106a2204201c29000037030020004180056a41086a221c20122900003703002000201629000037038005200041a0036a20004180056a10af03200041b0026a41186a22122018290300370300200041b0026a41106a221d2008290300370300200041b0026a41086a2208200129030037030020002000290390023703b00220002802c0032218450d00201520002903a003370300201541186a200041a0036a41186a290300370300201541106a200041a0036a41106a290300370300201541086a200041a0036a41086a290300370300201a20122903003703002004201d290300370300201c200829030037030020004180026a41086a2208201e41086a280200360200200020002903b002370380052000201e29020037038002200041b0046a41386a220120004180056a41386a290300370300200041b0046a41306a221220004180056a41306a290300370300200041b0046a41286a221d20004180056a41286a290300370300200041b0046a41206a221f20004180056a41206a290300370300200041b0046a41186a2209201a290300370300200041b0046a41106a221a2004290300370300200041b0046a41086a2204201c29030037030020002000290380053703b004200041e0036a41386a2001290300370300200041e0036a41306a2012290300370300200041e0036a41286a201d290300370300200041e0036a41206a201f290300370300200041e0036a41186a2009290300370300200041e0036a41106a201a290300370300200041e0036a41086a2004290300370300200020002903b0043703e003200041d0036a41086a200828020036020020002000290380023703d0030b200041a0016a41086a200041e0036a41086a290300370300200041a0016a41106a200041e0036a41106a290300370300200041a0016a41186a200041e0036a41186a290300370300200041a0016a41206a200041e0036a41206a290300370300200041a0016a41286a200041e0036a41286a290300370300200041a0016a41306a200041e0036a41306a290300370300200041a0016a41386a200041e0036a41386a29030037030020004190016a41086a200041d0036a41086a280200360200200020002903e0033703a001200020002903d0033703900120180d01201741206a21174101211a200641016a2106201b41606a221b0d000b410121200c010b200041c0006a41386a2221200041a0016a41386a2212290300370300200041c0006a41306a2222200041a0016a41306a221d290300370300200041c0006a41286a2223200041a0016a41286a221e290300370300200041c0006a41206a2224200041a0016a41206a221f290300370300200041c0006a41186a2225200041a0016a41186a2209290300370300200041c0006a41106a2226200041a0016a41106a220a290300370300200041c0006a41086a2227200041a0016a41086a220b29030037030020004180016a41086a222820004190016a41086a2214280200360200200020002903a001370340200020002903900137038001200041306a41086a222920282802003602002000200029038001370330201741206a2117200041c4036a212a200041f8026a4104722116200041d0026a41047221194101211a41012120034020004180056a41086a221c202729030037030020004180056a41106a2208202629030037030020004180056a41186a2201202529030037030020004180056a41206a222b202429030037030020004180056a41286a222c202329030037030020004180056a41306a222d202229030037030020004180056a41386a222e20212903003703002000200029034037038005200041b0046a41086a222f2029280200360200200020002903303703b00402402020201a470d00201a41016a2204201a490d09201a410174221b2004201b20044b1bad42d0007e2205422088a70d092005a722044100480d0902400240201a0d002004102d21030c010b2003201a41d0006c2004103121030b2003450d04200441d0006e21200b2003201a41d0006c6a22042000290380053703002008290300210520012903002107202b2903002130202c2903002131202d2903002132202e2903002133201c290300213420042018360240200441086a2034370300200441386a2033370300200441306a2032370300200441286a2031370300200441206a2030370300200441186a2007370300200441106a2005370300200420002903b004370244200441cc006a202f280200360200201a41016a211a20172013460d010340200041e0016a41186a201741186a2218290000370300200041e0016a41106a201741106a2204290000370300200041e0016a41086a201741086a221b290000370300200020172900003703e001200020063602d002201b29000021052004290000210720172900002130201941186a2018290000370000201941106a2007370000201941086a2005370000201920303700004100211802402006201910a3030d00200041f8026a41206a200041d0026a41206a280200360200200041f8026a41186a200041d0026a41186a290300370300200041f8026a41106a200041d0026a41106a290300370300200041f8026a41086a200041d0026a41086a290300370300200020002903d0023703f80220004190026a41186a2218201641186a220429000037030020004190026a41106a221b201641106a223529000037030020004190026a41086a2236201641086a223729000037030020002016290000370390022001200429000037030020082035290000370300201c20372900003703002000201629000037038005200041a0036a20004180056a10af03200041b0026a41186a22042018290300370300200041b0026a41106a2235201b290300370300200041b0026a41086a221b203629030037030020002000290390023703b00220002802c0032218450d00201520002903a003370300201541186a200041a0036a41186a290300370300201541106a200041a0036a41106a290300370300201541086a200041a0036a41086a2903003703002001200429030037030020082035290300370300201c201b29030037030020004180026a41086a2204202a41086a280200360200200020002903b002370380052000202a29020037038002200041b0046a41386a221b202e290300370300200041b0046a41306a2235202d290300370300200041b0046a41286a2236202c290300370300200041b0046a41206a2237202b290300370300200041b0046a41186a22382001290300370300200041b0046a41106a22392008290300370300202f201c29030037030020002000290380053703b004200041e0036a41386a201b290300370300200041e0036a41306a2035290300370300200041e0036a41286a2036290300370300200041e0036a41206a2037290300370300200041e0036a41186a2038290300370300200041e0036a41106a2039290300370300200041e0036a41086a202f290300370300200020002903b0043703e003200041d0036a41086a200428020036020020002000290380023703d0030b200b200041e0036a41086a290300370300200a200041e0036a41106a2903003703002009200041e0036a41186a290300370300201f200041e0036a41206a290300370300201e200041e0036a41286a290300370300201d200041e0036a41306a2903003703002012200041e0036a41386a2903003703002014200041d0036a41086a280200360200200020002903e0033703a001200020002903d00337039001024020180d00200641016a21062013201741206a2217470d010c030b0b202120122903003703002022201d2903003703002023201e2903003703002024201f290300370300202520092903003703002026200a2903003703002027200b29030037030020282014280200360200200020002903a001370340200020002903900137038001202920282802003602002000200029038001370330201741206a2117200641016a21060c000b0b02402011450d002010102f0b2000201a36029801200020203602940120002003360290010b20004180056a41186a2219420037030020004180056a41106a2218420037030020004180056a41086a221742003703002000420037038005419c9eca00ad4280808080f0008422051001220629000021072017200641086a29000037030020002007370380052006102f41a39eca00ad4280808080c001842207100122062900002130200041e0036a41086a2216200641086a290000370300200020303703e0032006102f200220002903e003370000200241086a22042016290300370000200041b0046a41086a22152017290300370300200041b0046a41106a221b2018290300370300200041b0046a41186a221c201929030037030020002000290380053703b004200041206a200041b0046a4120109501200028022421082000280220210141d39bca00ad428080808080018422301001220629000021312015200641086a290000370300200020313703b0042006102f41db9bca00ad4280808080a002841001220629000021312016200641086a290000370300200020313703e0032006102f20002008410020011b3602a001200041a0016aad4280808080c000842231100322062900002132200641086a2900002133200641106a29000021342019200641186a290000370300201820343703002017203337030020002032370380052006102f41c000102d2206450d00200620002903b004370000200620002903e0033700102006200029038005370020200641086a2015290300370000200641186a2016290300370000200641286a2017290300370000200641306a2018290300370000200641386a20192903003700002006ad428080808080088410132006102f201942003703002018420037030020174200370300200042003703800520051001220629000021052017200641086a29000037030020002005370380052006102f20071001220629000021052016200641086a290000370300200020053703e0032006102f200220002903e0033700002004201629030037000020152017290300370300201b2018290300370300201c201929030037030020002000290380053703b004200041186a200041b0046a4120109501200028021c21022000280218210420301001220629000021052016200641086a290000370300200020053703e0032006102f4194c9c300ad4280808080e001841001220629000021052015200641086a290000370300200020053703b0042006102f20002002410020041b3602a0012031100322062900002105200641086a2900002107200641106a29000021302019200641186a290000370300201820303703002017200737030020002005370380052006102f41c000102d2206450d00200f4200200e1b2132200620002903e003370000200620002903b0043700102006200029038005370020200641086a200041e0036a41086a290300370000200641186a200041b0046a41086a290300370000200641286a20004180056a41086a2217290300370000200641306a20004180056a41106a290300370000200641386a20004180056a41186a2903003700002006ad428080808080088410132006102f02400240024002400240024002400240201a450d0020004180056a20004190016a10b003200041bb046a201728020036000020002000290380053700b3042000418c056a200041b7046a290000370000200041023a0084052000410f3a008005200020002900b0043700850541c8e1ca00410020004180056a108c01200041f8026a41106a20004190016a41086a28020036020020002032422088a7222b3602fc022000200c4100200d1b22043602f802200020002903900137038003200041d0036a200041f8026a41086a10b00320002802d803210220002802d403210d20002802d003210c4104102d2239450d082039200436000020004284808080c0003702a401200020393602a00141ed9bca00ad4280808080800184100122062900002105200041e0036a41086a200641086a290000370300200020053703e0032006102f41f59bca00ad4280808080a00284100122062900002105200041b0046a41086a200641086a290000370300200020053703b0042006102f4110102d2206450d0841002116200641086a41002902b8f646370000200641002902b0f6463700002006ad4280808080800284100322172900002105201741086a2900002107201741106a290000213020004190026a41186a2219201741186a29000037030020004190026a41106a203037030020004190026a41086a200737030020002005370390022017102f2006102f41c000102d2206450d08200620002903e003370000200620002903b0043700102006200029039002370020200641086a200041e0036a41086a290300370000200641186a200041b0046a41086a290300370000200641286a20004190026a41086a290300370000200641306a200041a0026a290300370000200641386a201929030037000020004180056a200641c000109302200029028405210520002802800521172006102f20002005420020171b22074220883e02b40420002017410120171b221b3602b004200041106a200041b0046a10e60120002802142115024020002802100d00201520002802b404220641246e2217201720154b1b221aad42247e2205422088a70d0a2005a72217417f4c0d0a0240024020170d00410421160c010b2017102d2216450d0a201741246e211a0b2015450d004100211c034002400240024020064104490d00201c41016a210820002006417c6a22193602b404200020002802b004221841046a3602b0042018280000210141002106200041003a00a0050240034020192006460d0120004180056a20066a201820066a221741046a2d00003a00002000201741056a3602b0042000200641016a22173a00a0052017210620174120470d000b200041b0026a41086a221820004180056a41086a290300370300200041b0026a41106a221020004180056a41106a290300370300200041b0026a41186a221220004180056a41186a29030037030020002000290380053703b0022000201920176b22063602b404201a201c470d03201c41017422172008201720084b1bad42247e2205422088a70d132005a7221741004e0d020c130b200041003602b404200641ff0171450d00200041003a00a0050b0240201a450d002016102f0b410021160c030b02400240201c0d002017102d21160c010b2016201c41246c2017103121160b2016450d0b201741246e211a0b2016201c41246c6a22172001360200201720002903b0023702042017410c6a2018290300370200201741146a20102903003702002017411c6a20122903003702002008211c20082015470d000b0b20004180056a200041a0016a10b103200041b0046a200028028005221720002802880510aa0220002802b004210620002902b40421050240200028028405450d002017102f0b2005420020061b210502402007a7450d00201b102f0b201a410020161b21112016410420161b211b2006410120061b212a2005a721202002450d012015410020161b21082005422088a72109200c200241d0006c6a213520004180056a41306a210320004180056a41206a2113200041e0036a41306a2136200041e0036a41206a2137200041e0036a41c4006a212f41002138200c2102034020004180056a41386a22172002220641386a2903003703002003200641306a29030037030020004180056a41286a2219200641286a2903003703002013200641206a29030037030020004180056a41186a2201200641186a29030037030020004180056a41106a2210200641106a29030037030020004180056a41086a2212200641086a29030037030020004180026a41086a2218200641cc006a28020036020020002006290300370380052000200641c4006a29020037038002200641d0006a2102200641c0006a2802002206450d03200041c0006a41386a22162017290300370300200041c0006a41306a22172003290300370300200041c0006a41286a221a2019290300370300200041c0006a41206a22192013290300370300200041c0006a41186a22152001290300370300200041c0006a41106a221c2010290300370300200041c0006a41086a221d201229030037030020004180016a41086a221e20182802003602002000200029038005370340200020002903800237038001200041e0036a41386a201629030037030020362017290300370300200041e0036a41286a201a29030037030020372019290300370300200041e0036a41186a22162015290300370300200041e0036a41106a221a201c290300370300200041e0036a41086a221c201d290300370300200020002903403703e003200020063602a004202f200029038001370200202f41086a201e2802003602004104102d2215450d09201520043600004118102d2206450d09200641086a41002902b8f646370000200042988080808002370284052000200636028005200641002902b0f646370000410420004180056a106902400240200028028405221720002802880522196b4104490d0020002802800521060c010b201941046a22062019490d0f201741017422182006201820064b1b22184100480d0f0240024020170d002018102d21060c010b20002802800520172018103121060b2006450d0a20002018360284052000200636028005201821170b2000201941046a221836028805200620196a20152800003600000240201720186b411f4b0d00201841206a221d2018490d0f2017410174221e201d201e201d4b1b221d4100480d0f0240024020170d00201d102d21060c010b20062017201d103121060b2006450d0a2000201d3602840520002006360280050b200620186a220641086a201c290300370000200641106a201a290300370000200641186a20162903003700002000201941246a36028805200620002903e003370000200020373602b004200041b0046a20004180056a10c202200020363602b004200041b0046a20004180056a10c20220002802a004210620002802a804221720004180056a106902402017450d00201741306c2118034002400240200028028405221920002802880522176b4120490d0020002802800521190c010b201741206a22162017490d112019410174221a2016201a20164b1b22164100480d110240024020190d002016102d21190c010b20002802800520192016103121190b2019450d0c200020163602840520002019360280050b201920176a221941086a200641186a290000370000201941106a200641206a290000370000201941186a200641286a2900003700002000201741206a360288052019200641106a290000370000200020063602b004200041b0046a20004180056a10c202200641306a2106201841506a22180d000b0b2000280284052117200041a0016a41186a220a2000350288054220862000280280052219ad841003220641186a290000370300200041a0016a41106a220b200641106a290000370300200041a0016a41086a2214200641086a290000370300200020062900003703a0012006102f02402017450d002019102f0b2015102f41ed9bca00ad4280808080800184220f100122062900002105200041d0026a41086a2219200641086a290000370300200020053703d0022006102f4194bbc600ad4280808080f000842231100122062900002105200041a0036a41086a2218200641086a290000370300200020053703a0032006102f4120102d2206450d09200620002903a001370000200641186a200a290300370000200641106a200b290300370000200641086a20142903003700002006ad4280808080800484100322172900002105201741086a2900002107201741106a2900002130200041b0046a41186a221d201741186a290000370300200041b0046a41106a221e2030370300200041b0046a41086a221f2007370300200020053703b0042017102f2006102f41c000102d2206450d09200620002903d002370000200620002903a003370010200620002903b004370020200641086a2019290300370000200641186a2018290300370000200641286a201f290300370000200641306a201e290300370000200641386a201d290300370000200041086a200641c00041c8e1ca004100410010b501200028020821172006102f024002400240024020174101460d00200041b0046a200041e0036a41d00010e8061a20004180056a200041b0046a41d00010e8061a200041003602d805200042013703d005200f1001220629000021052019200641086a290000370300200020053703d0022006102f20311001220629000021052018200641086a290000370300200020053703a0032006102f4120102d2206450d0d200620002903a001370000200641186a200a290300370000200641106a200b290300370000200641086a20142903003700002006ad4280808080800484100322172900002105201741086a2900002107201741106a2900002130201d201741186a290000370300201e2030370300201f2007370300200020053703b0042017102f2006102f41c000102d221c450d0d201c20002903d002370000201c20002903a003370010201c20002903b004370020201c41086a2019290300370000201c41186a2018290300370000201c41286a201f290300370000201c41306a201e290300370000201c41386a201d290300370000200041003602b804200042013703b0044120102d2206450d0d200042a080808080043702b404200020063602b0042006200029038005370000200641086a2012290300370000200641106a2010290300370000200641186a2001290300370000200020133602a003200041a0036a200041b0046a10c202200020033602a003200041a0036a200041b0046a10c20220002802c005210620002802c8052217200041b0046a106902402017450d00201741306c211803400240024020002802b404221920002802b80422176b4120490d0020002802b00421190c010b201741206a22162017490d152019410174221a2016201a20164b1b22164100480d150240024020190d002016102d21190c010b20002802b00420192016103121190b2019450d10200020163602b404200020193602b0040b201920176a221941086a200641186a290000370000201941106a200641206a290000370000201941186a200641286a2900003700002000201741206a3602b8042019200641106a290000370000200020063602a003200041a0036a200041b0046a10c202200641306a2106201841506a22180d000b0b20002802d005210620002802d8052217200041b0046a10690240024020170d0020002802b804211720002802b404211a20002802b00421180c010b20174105742115410020002802b80422176b211620002802b404211a034002400240201a20166a4120490d0020002802b00421180c010b201741206a22192017490d15201a41017422182019201820194b1b22194100480d1502400240201a0d002019102d21180c010b20002802b004201a2019103121180b2018450d10200020193602b404200020183602b0042019211a0b201820176a221941086a200641086a290000370000201941106a200641106a290000370000201941186a200641186a2900003700002000201741206a22173602b80420192006290000370000201641606a2116200641206a2106201541606a22150d000b0b201cad42808080808008842017ad4220862018ad8410040240201a450d002018102f0b201c102f024020002802c405450d0020002802c005102f0b024020002802d405450d0020002802d005102f0b2001200a2903003703002010200b29030037030020122014290300370300200020002903a00137038005410021060240200841014b0d00024020080e020003000b200041e0016a41186a2001290300370300200041e0016a41106a2010290300370300200041e0016a41086a201229030037030020002000290380053703e001410021060c030b20082117034020062017410176221920066a2218201b201841246c6a28020020044b1b2106201720196b221741014b0d000c020b0b20002802a404450d0220002802a004102f0c020b0240201b200641246c6a28020022172004460d00200620172004496a21060b200041e0016a41186a2001290300370300200041e0016a41106a2010290300370300200041e0016a41086a201229030037030020002000290380053703e001200820064f0d00419ae3c300411e41f8b4ca001039000b024020082011470d00200841016a22172008490d10200841017422192017201920174b1bad42247e2205422088a70d102005a722174100480d100240024020080d002017102d211b0c010b201b200841246c20171031211b0b201b450d0b201741246e21110b201b200641246c6a221741246a2017200820066b41246c10e9061a201720043602002017411c6a200041e0016a41186a290300370200201741146a200041e0016a41106a2903003702002017410c6a200041e0016a41086a290300370200201720002903e001370204201d2001290300370300201e2010290300370300201f201229030037030020002000290380053703b004024020092020470d00200941016a22062009490d10200941017422172006201720064b1b220641ffffff3f712006470d10200641057422064100480d100240024020090d002006102d212a0c010b202a200941057420061031212a0b202a450d0b200641057621200b200841016a2108202a20094105746a220620002903b004370000200641186a201d290300370000200641106a201e290300370000200641086a201f29030037000041012138200941016a21090b20022035470d000b203521020c020b200041013a0084052000410f3a00800541c8e1ca00410020004180056a108c012020450d0b2003102f0c0b0b200d450d01200c102f0c010b024020352002460d000340200241d0006a21060240200241c4006a280200450d00200241c0006a280200102f0b2006210220352006470d000b0b0240200d450d00200c102f0b2038410171450d0002402009450d0020094105742117202a2106034020004180056a200610b20320002802c00522190d03200641206a2106201741606a22170d000b0b410821124100211d4100211e0c020b2039102f02402020450d00202a102f0b2011450d02201b102f0c020b200041e0036a41386a221220004180056a41386a2218290300370300200041e0036a41306a221d20004180056a41306a221a290300370300200041e0036a41286a221e20004180056a41286a2215290300370300200041e0036a41206a221f20004180056a41206a2202290300370300200041e0036a41186a220a20004180056a41186a221c290300370300200041e0036a41106a220b20004180056a41106a2201290300370300200041e0036a41086a221420004180056a41086a2210290300370300200041a0036a41086a220320004180056a41cc006a290200370300200041a0036a41106a221320004180056a41d4006a290200370300200041a0036a41186a223520004180056a41dc006a28020036020020002000290380053703e0032000200041c4056a22162902003703a003200041c0006a41086a22362014290300370300200041c0006a41106a2214200b290300370300200041c0006a41186a220b200a290300370300200041c0006a41206a220a201f290300370300200041c0006a41286a221f201e290300370300200041c0006a41306a221e201d290300370300200041c0006a41386a221d2012290300370300200041a0016a41086a22122003290300370300200041a0016a41106a22032013290300370300200041a0016a41186a22132035280200360200200020002903e003370340200020002903a0033703a0012010203629030037030020012014290300370300201c200b2903003703002002200a2903003703002015201f290300370300201a201e2903003703002018201d2903003703002000200029034037038005200041b0046a41086a221d2012290300370300200041b0046a41106a221e2003290300370300200041b0046a41186a221f2013280200360200200020002903a0013703b00441e000102d2212450d03201220002903800537030020122019360240201220002903b004370244201241386a2018290300370300201241306a201a290300370300201241286a2015290300370300201241206a2002290300370300201241186a201c290300370300201241106a2001290300370300201241086a2010290300370300201241cc006a201d290300370200201241d4006a201e290300370200201241dc006a201f280200360200024020174120470d004101211d4101211e0c010b200641206a211c202a20094105746a221941606a21134101211d4101211e0340201c21060240034020004180056a200610b20320002802c00522170d012019200641206a2206470d000c030b0b200041e0036a41386a221820004180056a41386a2201290300370300200041e0036a41306a221c20004180056a41306a2210290300370300200041e0036a41286a223520004180056a41286a221f290300370300200041e0036a41206a223620004180056a41206a220a290300370300200041e0036a41186a221a20004180056a41186a220b290300370300200041e0036a41106a221520004180056a41106a2214290300370300200041e0036a41086a220220004180056a41086a2203290300370300200041a0036a41086a2237201641086a290200370300200041a0036a41106a222f201641106a290200370300200041a0036a41186a2238201641186a28020036020020002000290380053703e003200020162902003703a003200041b0046a41086a220c2002290300370300200041b0046a41106a220d2015290300370300200041b0046a41186a222c201a290300370300200041b0046a41206a222d2036290300370300200041b0046a41286a22362035290300370300200041b0046a41306a2235201c290300370300200041b0046a41386a221c2018290300370300200041a0016a41086a22182037290300370300200041a0016a41106a2237202f290300370300200041a0016a41186a222f2038280200360200200020002903e0033703b004200020002903a0033703a0012003200c2903003703002014200d290300370300200b202c290300370300200a202d290300370300201f2036290300370300201020352903003703002001201c290300370300200020002903b004370380052002201829030037030020152037290300370300201a202f280200360200200020002903a0013703e0030240201e201d470d00201d41016a2218201d490d0a201d410174221c2018201c20184b1bad42e0007e2205422088a70d0a2005a722184100480d0a02400240201d0d002018102d21120c010b2012201d41e0006c2018103121120b2012450d05201841e0006e211e0b200641206a211c2012201d41e0006c6a2218200029038005370300201841106a2014290300370300201841086a20032903003703002010290300210520012903002107201f2903002130200a290300210f200b2903002131201841c0006a2017360200201841186a2031370300201841206a200f370300201841286a2030370300201841386a2007370300201841306a2005370300201841c4006a20002903e003370200201841cc006a2002290300370200201841d4006a2015290300370200201841dc006a201a280200360200201d41016a211d20132006470d000b0b200041a0056a20083602002000419c056a201136020020004190056a2009ad4220862020ad843703002000201b360298052000202a36028c0520004284808080c000370284052000203936028005200841246c41046a2206417f4c0d030240024020060d00410121170c010b2006102d2217450d030b200041003602b804200020063602b404200020173602b0042008200041b0046a10690240024020080d0020002802b804211920002802b404211620002802b00421180c010b201b200841246c6a2110410020002802b80422196b211a20002802b4042116201b2106034020062802002117024002402016201a6a4104490d0020002802b00421180c010b201941046a22182019490d0a201641017422152018201520184b1b22154100480d0a0240024020160d002015102d21180c010b20002802b00420162015103121180b2018450d05200020153602b404200020183602b004201521160b2000201941046a22153602b804201820196a20173600004120102d2217450d04201741186a22022006411c6a290000370000201741106a221c200641146a290000370000201741086a22082006410c6a2900003700002017200641046a29000037000002402016201a6a417c6a411f4b0d00201541206a22012015490d0a201641017422152001201520014b1b22154100480d0a0240024020160d002015102d21180c010b201820162015103121180b2018450d05200020153602b404200020183602b004201521160b201820196a2215410c6a2008290000370000201541146a201c2900003700002015411c6a20022900003700002000201941246a22193602b804201541046a20172900003700002017102f201a415c6a211a200641246a22062010470d000b0b41ed9bca00ad4280808080800184100122062900002105200041e0036a41086a200641086a290000370300200020053703e0032006102f41f59bca00ad4280808080a00284100122062900002105200041b0046a41086a200641086a290000370300200020053703b0042006102f4110102d2206450d02200641086a41002902b8f646370000200641002902b0f6463700002006ad4280808080800284100322172900002105201741086a2900002107201741106a290000213020004190026a41186a221a201741186a29000037030020004190026a41106a203037030020004190026a41086a200737030020002005370390022017102f2006102f41c000102d2206450d02200620002903e003370000200620002903b0043700102006200029039002370020200641086a200041e0036a41086a290300370000200641186a200041b0046a41086a290300370000200641286a20004190026a41086a290300370000200641306a200041a0026a290300370000200641386a201a290300370000200041c0003602b404200020063602b00420182019200041b0046a109d022006102f02402016450d002018102f0b200041b0046a20004180056a10b10320002802b0042106200020002802b8043602e403200020063602e003202a2009200041e0036a108301024020002802b404450d002006102f0b2039102f02402020450d00202a102f0b02402011450d00201b102f0b20120d010b2000280280032119024020004188036a2802002206450d00200641d0006c2117201941c0006a210603400240200641046a280200450d002006280200102f0b200641d0006a2106201741b07f6a22170d000b0b024020004184036a280200450d002019102f0b4183d1ca00ad4280808080c00184100841f4d0ca00ad4280808080f0018410080c050b4104102d2206450d002006200436000020004188056a4284808080c0003703004100211920004198056a41002902b8f646370300200041103a00800520004180056a41106a41002902b0f646370300200020063602840541c8e1ca00410020004180056a108c010240202b410a6e417f73201d6a2217201d4b0d002000418094ebdc03360284052000202b4101202b41014b1b2206201741036c221720062017491b2006418094ebdc036e22174101201741014b1b22176ead428094ebdc037e200620176ead8042ffffffff0f834280bbb0217e428094ebdc0380a722063602800520004180056a2006418094ebdc034b4102746a28020021190b201d450d02201d41ffffffff0371201d470d05201d41027422064100480d052006102d2218450d0020064102762116201d211720182106034020062019360200200641046a21062017417f6a22170d000b2012201d2018201d200410b30302402016450d002018102f0b201d450d03201d41e0006c2117201241d4006a210603400240200641706a280200450d002006416c6a280200102f0b02402006280200450d002006417c6a280200102f0b200641e0006a2106201741a07f6a22170d000c040b0b1036000b103d000b2012410041044100200410b3030b0240201e450d002012102f0b2000280280032119024020004188036a2802002206450d00200641d0006c2117201941c0006a210603400240200641046a280200450d002006280200102f0b200641d0006a2106201741b07f6a22170d000b0b20004184036a280200450d002019102f0b02402032a7450d00200e4101200e1b102f0b20004180066a24000f0b1038000be70703047f017e037f23004180016b22022400200241286a41186a4200370300200241286a41106a22034200370300200241286a41086a220442003703002002420037032841eba1ca00ad4280808080f000841001220529000021062004200541086a290000370300200220063703282005102f41adcac800ad4280808080900184100122052900002106200241086a41086a2207200541086a290000370300200220063703082005102f200320022903082206370300200241d8006a41086a2004290300370300200241d8006a41106a2006370300200241d8006a41186a200729030037030020022002290328370358200241286a200241d8006a10fd03024002400240024020022903284202520d00200041003602200c010b200241086a200328020010bd034120102d2204450d0120042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020022004ad4280808080800484100622012900003703782001102f200241346a200441206a360200200241003a0038200220043602302002200241f8006a41086a36022c2002200241f8006a360228200241d8006a200241286a106c2004102f2002280258210702400240200228020c2205200228021022016b20022802602203490d00200228020821040c010b200120036a22042001490d03200541017422082004200820044b1b22084100480d030240024020050d002008102d21040c010b200228020820052008103121040b2004450d022002200836020c20022004360208200821050b2002200120036a2208360210200420016a2007200310e8061a0240200228025c450d002007102f0b200241286a2004200810bc03200241d8006a41186a2207200241286a41186a290300370300200241d8006a41106a2208200241286a41106a290300370300200241d8006a41086a2209200241286a41086a29030037030020022002290328370358200241d4006a28020021030240024020022802482201450d00200241086a41086a2009290300370300200241086a41106a2008290300370300200241086a41186a200729030037030020022002290358370308200229024c21060c010b42002106200241086a41186a4200370300200241086a41106a4200370300200241086a41086a420037030020024200370308410821010b02402005450d002004102f0b2000200229030837030020002006370224200020013602202000412c6a2003360200200041186a200241086a41186a290300370300200041106a200241086a41106a290300370300200041086a200241086a41086a2903003703000b20024180016a24000f0b1036000b1038000be50607027f017e0b7f027e017f017e037f230041206b2202240002400240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d0020012802002106024002400240024020050d002006200341d0006c6a210741082108200321090c010b2005102d2208450d052006200341d0006c6a21070240200541d0006e22012003490d00200121090c010b2001410174220a2003200a20034b1b220941d0006c220a4100480d0402400240200541cf004b0d00200a102d21080c010b2008200141d0006c200a103121080b2008450d050c010b20030d00410021030c010b200341047441706a410476210b2008210c0340200241186a220d200641186a290300370300200241106a220e200641106a290300370300200241086a220f200641086a29030037030020022006290300370300200641c8006a2802002203ad42307e2204422088a70d022004a72201417f4c0d02200641386a2903002104200641306a2903002110200641286a2903002111200641c0006a2802002112200629032021130240024002400240024020010d002012200341306c6a211441082115200321050c010b2001102d2215450d082012200341306c6a2114200141306e220520034f0d002005410174220a2003200a20034b1b221641306c22034100480d07024002402001412f4b0d002003102d21150c010b2015200541306c2003103121150b20150d010c080b2003450d01200521160b410021014100210a0340201520016a2205201220016a22032903003703002005200341086a290300370308200541106a200341106a290300370300200541186a200341186a290300370300200541206a200341206a290300370300200541286a200341286a290300370300200141306a2101200a41016a210a200341306a2014470d000b201621050c010b4100210a0b200c2013370320200c2002290300370300200c41386a2004370300200c41306a2010370300200c41286a2011370300200c41c8006a200a360200200c41c4006a2005360200200c41c0006a2015360200200c41186a200d290300370300200c41106a200e290300370300200c41086a200f290300370300200c41d0006a210c200641d0006a22062007470d000b200b41016a21030b200020033602082000200936020420002008360200200241206a24000f0b103d000b1038000b1036000bc20605027f017e017f027e047f230041c0006b2202240041ed9bca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f4198f1c600ad4280808080e00284100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02400240024002404110102d2203450d00200341086a41002902b8f646370000200341002902b0f6463700002003ad4280808080800284100322052900002104200541086a2900002106200541106a2900002107200241206a41186a2208200541186a290000370300200241206a41106a2007370300200241206a41086a2006370300200220043703202005102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a200241306a290300370000200341386a20082903003700002001280208220541046a2208417f4c0d01200128020021090240024020080d00410121010c010b2008102d2201450d010b2002410036022820022008360224200220013602202005200241206a1069024002402002280224220a200228022822016b2005490d00200228022021080c010b200120056a22082001490d03200a410174220b2008200b20084b1b220b4100480d0302400240200a0d00200b102d21080c010b2002280220200a200b103121080b2008450d012002200b36022420022008360220200b210a0b200820016a2009200510e8061a200120056aad4220862008ad84100322052900002104200541086a2900002106200541106a2900002107200241206a41186a200541186a290000370300200241206a41106a2007370300200241206a41086a2006370300200220043703202005102f0240200a450d002008102f0b200341c000418001103122030d030b1036000b103d000b1038000b20032002290320370040200341d8006a200241386a290300370000200341d0006a200241306a290300370000200341c8006a200241286a29030037000020004280818080800c37020420002003360200200241c0006a24000bab0f03027f037e0f7f230041d0026b2202240041ed9bca00ad4280808080800184100122032900002104200241e8006a41086a200341086a290000370300200220043703682003102f4194bbc600ad4280808080f00084100122032900002104200241b0016a41086a200341086a290000370300200220043703b0012003102f02400240024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241f0016a41186a2207200141186a290000370300200241f0016a41106a22082006370300200241f0016a41086a2005370300200220043703f0012001102f2003102f41c000102d2209450d0020092002290368370000200920022903b001370010200920022903f001370020200941086a200241e8006a41086a290300370000200941186a200241b0016a41086a220a290300370000200941286a200241f0016a41086a220b290300370000200941306a2008290300370000200941386a2007290300370000200241c00036024420022009360240200241c8006a2009ad4280808080800884100210730240200228024822070d00410021030c040b200228024c210c2002200241c8006a41086a28020022083602ac01200220073602a80141002103200241003a002002400240034020082003460d01200220036a200720036a22012d00003a00002002200141016a3602a8012002200341016a22013a00202001210320014120470d000b200241b0026a41086a220d200241086a220e290300370300200241b0026a41106a220f200241106a2210290300370300200241b0026a41186a2211200241186a2212290300370300200220022903003703b0022002200820016b3602ac012002200241a8016a108a0520022802202203450d01200241f0016a41186a22082011290300370300200241f0016a41106a2211200f290300370300200241f0016a41086a220f200d290300370300200241f0016a41286a220d200e290300370300200241f0016a41306a220e2010290300370300200241f0016a41386a22102012290300370300200220022903b0023703f0012002200229030037039002200241246a2802002101200241286a22122903002104200241b0016a41086a200f290300370300200241b0016a41106a2011290300370300200241b0016a41186a2008290300370300200241b0016a41206a2208200229039002370300200241b0016a41286a220f200d290300370300200241b0016a41306a220d200e290300370300200241b0016a41386a220e2010290300370300200220022903f0013703b001200241f0016a200241a8016a10980320022802f0010d032001450d012003102f0c010b200241003602ac01200341ff0171450d00200241003a00200b41002103200241003602b801200242013703b0012002410b36026c2002200241c0006a3602682002200241b0016a36020020024184026a4101360200200242013702f401200241b885c7003602f0012002200241e8006a36028002200241d8dbc100200241f0016a103c1a20023502b80142208620023502b001841008024020022802b401450d0020022802b001102f0b0c020b1036000b200241d8006a41086a2210200241f0016a41086a280200360200200241e8006a41086a2211200241b0016a41086a290300370300200241e8006a41106a2213200241b0016a41106a290300370300200241e8006a41186a2214200241b0016a41186a290300370300200241e8006a41206a22152008290300370300200241e8006a41286a2208200f290300370300200241e8006a41306a220f200d290300370300200241e8006a41386a220d200e290300370300200220022903f001370358200220022903b001370368200241386a200d290300370300200241306a200f29030037030020122008290300370300200241206a2015290300370300200241186a2014290300370300200241106a2013290300370300200241086a2011290300370300200241b0026a41086a201028020036020020022002290368370300200220022903583703b0020b200c450d002007102f0b200b200241086a290300370300200241f0016a41106a2207200241106a290300370300200241f0016a41186a2208200241186a290300370300200241f0016a41206a220b200241206a290300370300200241f0016a41286a200241286a290300370300200241f0016a41306a200241306a290300370300200241f0016a41386a200241386a290300370300200220022903003703f001200a200241b0026a41086a280200360200200220022903b0023703b00102402003450d00200020022903f00137030020002001360244200041c8006a2004370200200041386a200241f0016a41386a290300370300200041306a200241f0016a41306a290300370300200041286a200241f0016a41286a290300370300200041206a200b290300370300200041186a2008290300370300200041106a2007290300370300200041086a200241f0016a41086a290300370300200041d8006a200241b0016a41086a280200360200200041d0006a20022903b0013702000b200020033602402009102f200241d0026a24000bc94312047f017e017f017e077f027e047f017e087f027e027f027e017f017e057f017e027f027e230041d0036b22052400200541f8026a41186a22064200370300200541f8026a41106a22074200370300200541f8026a41086a22084200370300200542003703f80241eba1ca00ad4280808080f0008422091001220a290000210b200541d8026a41086a220c200a41086a2900003703002005200b3703d802200a102f2008200c290300370300200520052903d8023703f80241f9a0ca00ad4280808080b002841001220a290000210b200541e8026a41086a220c200a41086a2900003703002005200b3703e802200a102f200720052903e802220b370300200541a8036a41086a220d2008290300370300200541a8036a41106a220e200b370300200541a8036a41186a220f200c290300370300200520052903f8023703a803200541203602ec022005200541a8036a3602e802200541d8016a200541a8036aad4280808080800484220b100210730240024020052802d801220a0d004100210c0c010b20052802dc01211002400240200541d8016a41086a2802004104490d00200a28000021114101210c0c010b4100210c2005410036028002200542013703f8012005410b3602dc022005200541e8026a3602d8022005200541f8016a3602a8022005418c036a4101360200200542013702fc02200541b885c7003602f8022005200541d8026a36028803200541a8026a41d8dbc100200541f8026a103c1a20053502800242208620053502f801841008024020052802fc01450d0020052802f801102f0b0b2010450d00200a102f0b200642003703002007420037030020084200370300200542003703f80220091001220a29000021092008200a41086a290000370300200520093703f802200a102f41adcac800ad42808080809001841001220a2900002109200541f8016a41086a2206200a41086a290000370300200520093703f801200a102f200720052903f8012209370300200d2008290300370300200e2009370300200f2006290300370300200520052903f8023703a803200541f8026a200541a8036a10fd03024020052903f8024202510d002007280200211241eba1ca00ad4280808080f00084100122082900002109200541f8016a41086a220a200841086a290000370300200520093703f8012008102f41dca0ca00ad4280808080d00284100122082900002109200541a8036a41086a2206200841086a290000370300200520093703a8032008102f200520123602d801200541d8016aad4280808080c00084100322082900002109200841086a2900002113200841106a2900002114200541f8026a41186a220d200841186a290000370300200541f8026a41106a220e2014370300200541f8026a41086a220f2013370300200520093703f8022008102f02400240024041c000102d2208450d00200820052903f801370000200820052903a803370010200820052903f802370020200841086a200a290300370000200841186a2006290300370000200841286a200f290300370000200841306a200e290300370000200841386a200d290300370000200541d0016a200841c00010950120052802d401210620052802d001210a2008102f02400240200a0d0041aacfc800ad4280808080e0068410084100201241e07a6a2208200820124b1b2115201221160c010b4100201241e07a6a2208200820124b1b21150240200620044b0d00201221160c010b200541f8026a41186a22064200370300200541f8026a41106a220d4200370300200541f8026a41086a22084200370300200542003703f80241eba1ca00ad4280808080f000841001220a2900002109200541d8026a41086a220e200a41086a290000370300200520093703d802200a102f2008200e290300370300200520052903d8023703f802418ca1ca00ad4280808080a001841001220a2900002109200541e8026a41086a220e200a41086a290000370300200520093703e802200a102f200720052903e802370000200741086a200e290300370000200541a8036a41086a2008290300370300200541a8036a41106a200d290300370300200541a8036a41186a2006290300370300200520052903f8023703a803200541f8026a200541a8036a109d0520052802f8022208410420081b220d20052902fc02420020081b2209422088a741037422086a210a03402008450d04200841786a2108200a417c6a2106200a41786a210a200628020020044b0d000b200d20086a28020021162009a7450d00200d102f0b200541f8026a41186a22174200370300200541f8026a41106a22184200370300200541f8026a41086a22104200370300200542003703f80241eba1ca00ad4280808080f000842219100122082900002109200541d8026a41086a221a200841086a290000370300200520093703d8022008102f2010201a290300370300200520052903d8023703f8024196a1ca00ad4280808080e002842209100122082900002113200541e8026a41086a221b200841086a290000370300200520133703e8022008102f200720052903e802370000200741086a221c201b290300370000200541a8036a41086a221d2010290300370300200541a8036a41106a221e2018290300370300200541a8036a41186a221f2017290300370300200520052903f8023703a803200541c8016a200541a8036a412010950120052802cc01210a20052802c8012106201742003703002018420037030020104200370300200542003703f8022019100122082900002113201a200841086a290000370300200520133703d8022008102f2010201a290300370300200520052903d8023703f8022009100122082900002109201b200841086a290000370300200520093703e8022008102f200720052903e802370000201c201b290300370000201d2010290300370300201e2018290300370300201f2017290300370300200520052903f8023703a8032005200a201220064101461b3602f802200b200541f8026aad22094280808080c00084100420032001200120034b1b2220450d0320114100200c1b2121200541a8026aad4280808080c000842122200942808080808002842123201241016a21242000210f410021250340201742003703002018420037030020104200370300200542003703f8022019100122082900002109201a200841086a290000370300200520093703d8022008102f2010201a290300370300200520052903d8023703f80241c4aac900ad4280808080d00184100122082900002109201b200841086a290000370300200520093703e8022008102f200720052903e802370000201c201b290300370000201d2010290300370300201e2018290300370300201f2017290300370300200520052903f8023703a803200541f8026a200541a8036a412010aa0220052902fc02420020052802f80222081b2209422088a7410574210a2025220641016a2125200220064102746a210e2000200641e0006c6a210c2008410120081b220d2108024003400240200a0d00410021040c020b41012104200f2008460d012008200c412010ea062106200a41606a210a200841206a210820060d000b0b02402009a7450d00200d102f0b024020040d00200e2802002108200542003703a0022005420037039802200541b8016a200c2903202209200c41286a290300428094ebdc03420010ee0620054198016a200c290330220b200c41386a290300428094ebdc03420010ee06200541a8016a20052903b8012214200541b8016a41086a29030022264280ec94a37c427f10ed06200541e8006a201420262008ad2213420010ed0620054188016a200529039801221420054198016a41086a29030022264280ec94a37c427f10ed06200541f8006a201420262013420010ed06200542003703b002200542003703a802200b2005290388017c20137e2214428094ebdc0380210b02400240024020052903684200200920052903a8017c20137e22092009428094ebdc038022094280ec94a37c7e7c4280cab5ee01562009a76a220aad7d85200541e8006a41086a2903004200200a410047ad7d8584500d0020052903782126200541f8006a41086a2903002127200541d8016a2016200c10e60520052802d801210a200520052802e00122063602ec022005200a3602e802200541f8016a2006ad422086200aad84100210730240024020052802f80122060d00420021090c010b20052802fc01210402400240200528028002220d4104490d00200d417c6a410f4d0d0020062800002128420121090c010b200541003602b003200542013703a8032005410b3602dc022005200541e8026a3602d8022005200541a8036a3602cc032005410136028c03200542013702fc02200541b885c7003602f8022005200541d8026a36028803200541cc036a41d8dbc100200541f8026a103c1a20053502b00342208620053502a803841008024020052802ac03450d0020052802a803102f0b420021090b2004450d002006102f0b024020052802dc01450d00200a102f0b20082028410020094200521b22034d0d03200541f8026a2016200c10e605200535028003212920052802f80221064110102d220a450d05200a2008360000200a4110412010312208450d05200820262014200b4280ec94a37c7e7c4280cab5ee0156200ba76aad7c22093700042008410c6a20272009202654ad7c220b37000020294220862006ad842008ad4280808080c0028410042008102f024020052802fc02450d002006102f0b200541f8016a200c10eb05200528028402450d01200541d8016a41106a200541f8016a41106a290300370300200541d8016a41086a200541f8016a41086a290300370300200520052903f8013703d8010c020b200542003703e002200542003703d802200542003703f002200542003703e802200541f8016a200c10eb0502400240200528028402450d00200541d8016a41106a200541f8016a41106a290300370300200541d8016a41086a200541f8016a41086a290300370300200520052903f8013703d8010c010b200542003703b80320054280808080c0003703b003200520153602ac03200541003602a803200c200541a8036a10ec05200541d8016a41106a20052903b803370300200541d8016a41086a20052903b003370300200520052903a8033703d8010b201020052903d801370200201041086a200541d8016a41086a290300370200201041106a200541d8016a41106a290300370200200541003a00a4032005200c3602fc02200520153602f802200520213602a0032005200541e8026a36029c032005200541d8026a36029803200541a8036a200541f8026a201610b703024020052802b0034102460d0020052802a803220d200528028003470d00410021080240202420052802840322064d0d000240200528029403220a200528029003470d00200a41016a2208200a490d08200a41017422042008200420084b1b220841ffffffff03712008470d08200841027422084100480d0802400240200a0d002008102d21040c010b200528028c03200a4102742008103121040b2004450d072005200436028c0320052008410276360290030b200528028c03220841046a2008200a41027410e9061a2008202420066b3602002005202436028403410121082005200a41016a360294032005200d41016a220d360280030b200520083a00a403200c10e805200c10e9050240200c10a20441ff0171220a4102460d00200a410171450d0010f5050b2008450d00200528028403210e0240024002402005280294032201450d00200528028c03210a2001410274210441002106200e210802400340200820154d0d01200641016a21062008200a2802006b2108200a41046a210a2004417c6a22040d000c020b0b200120064f0d010b2005200e2015200e20154b1b360284030c010b2005200e2015200e20154b1b36028403200520063602940341000d00200d20016b200d20066b4f0d00410020016b21080340201d200c41086a290200370300201e200c41106a290200370300201f200c41186a2902003703002005200c2902003703a8032005200d20086a3602c803200541a8036a10ed052006200841016a22086a0d000b0b200c201010ec050b200528029003450d02200528028c03102f0c020b200542003703b80320054280808080c0003703b003200520153602ac03200541003602a803200c200541a8036a10ec05200541d8016a41106a20052903b803370300200541d8016a41086a20052903b003370300200520052903a8033703d8010b201020052903d801370200201041086a222a200541d8016a41086a222b290300370200201041106a222c200541d8016a41106a222d290300370200200541003a00a4032005200c3602fc02200520153602f802200520213602a0032005200541a8026a36029c03200520054198026a36029803200541e0006a200541f8026a20162009200b10b803200528028003210e02400240024020052802604101470d002005280264220a200e460d010b20052d00a40321080c010b02400240202420052802840322084d0d0002402005280294032206200528029003470d00200641016a22042006490d072006410174220d2004200d20044b1b220441ffffffff03712004470d07200441027422044100480d070240024020060d002004102d210d0c010b200528028c03200641027420041031210d0b200d450d062005200d36028c0320052004410276360290030b200528028c03220441046a2004200641027410e9061a2004202420086b3602002005202436028403410121082005200641016a360294032005200a41016a220a360280030c010b20052d00a40321080b200520083a00a403200c10e805200c10e9050240200c10a20441ff017122064102460d002006410171450d0010f5050b200a210e0b0240200841ff0171450d00200528028403210120052802f802210d0240024002402005280294032211450d00200528028c03210a201141027421044100210620012108024003402008200d4d0d01200641016a21062008200a2802006b2108200a41046a210a2004417c6a22040d000c020b0b201120064f0d010b20052001200d2001200d4b1b360284030c010b20052001200d2001200d4b1b36028403200520063602940341000d00200e20116b200e20066b4f0d00410020116b210a20052802fc0221080340201f200841186a290000370300201e200841106a290000370300201d200841086a290000370300200520082900003703a8032005200e200a6a3602c803200541a8036a10ed052006200a41016a220a6a0d000b0b20052802fc02201010ec050b0240200528029003450d00200528028c03102f0b42002109200542003703e002200542003703d8020240024002400240200c41c8006a220a28020022080d00410821110c010b2008ad42307e2209422088a70d062009a722084100480d062008102d2211450d05200841306ead2109200a28020022080d010b42002114420021260c010b200c41c0006a2802002201200841306c6a212e2003ad21290340200542003703f002200542003703e802200541386a20012903002226200141086a290300428094ebdc03420010ee06200541286a2005290338220b200541386a41086a29030022144280ec94a37c427f10ed06200541186a200b20142029420010ed06200541086a200b20142013420010ed06200541f8026a2016200141106a220d10e705200541c8006a20052802f802220a200528028003109c014200200541086a41086a29030020052903082214202620052903287c222620137e220b200b428094ebdc0380220b4280ec94a37c7e7c4280cab5ee0156200ba76aad7c220b201454ad7c2214200541186a41086a29030020052903182227202620297e22262026428094ebdc038022264280ec94a37c7e7c4280cab5ee01562026a76aad7c2226202754ad7c7d200b202654ad7d2227200b20267d2226200b56202720145620272014511b22081b21144200202620081b210b200541c8006a41106a29030021262005290350212720052802482108024020052802fc02450d00200a102f0b200541a8036a2016200d10e70520052802a803210a20053502b003212f20052027420020081b2227200b7c220b3703f80220052026420020081b20147c200b202754ad7c221437038003202f422086200aad8420231004024020052802ac03450d00200a102f0b200541f8016a200d10eb0502400240200528028402450d00202d200541f8016a41106a290300370300202b200541f8016a41086a290300370300200520052903f8013703d8010c010b200542003703b80320054280808080c0003703b003200520153602ac03200541003602a803200d200541a8036a10ec05202d20052903b803370300202b20052903b003370300200520052903a8033703d8010b201020052903d801370200202a202b290300370200202c202d290300370200200541003a00a4032005200d3602fc02200520153602f802200520213602a0032005200541e8026a36029c032005200541d8026a360298032005200541f8026a2016200b201410b803200528028003210302400240024020052802004101470d00200528020422062003470d00202420052802840322084d0d010240200528029403220a200528029003470d00200a41016a2204200a490d09200a410174220e2004200e20044b1b220441ffffffff03712004470d09200441027422044100480d0902400240200a0d002004102d210e0c010b200528028c03200a41027420041031210e0b200e450d082005200e36028c0320052004410276360290030b200528028c03220441046a2004200a41027410e9061a2004202420086b3602002005202436028403410121082005200a41016a360294032005200641016a220336028003200541013a00a4030c020b20052d00a40321080c010b200520052d00a40322083a00a403200621030b0240200841ff0171450d00200528028403213020052802f802210e0240024002402005280294032231450d00200528028c03210a203141027421044100210620302108024003402008200e4d0d01200641016a21062008200a2802006b2108200a41046a210a2004417c6a22040d000c020b0b203120064f0d010b20052030200e2030200e4b1b360284030c010b20052030200e2030200e4b1b36028403200520063602940341000d00200320316b200320066b4f0d00410020316b210a20052802fc0221080340201f200841186a290000370300201e200841106a290000370300201d200841086a290000370300200520082900003703a80320052003200a6a3602c803200541a8036a10ed052006200a41016a220a6a0d000b0b20052802fc02201010ec050b0240200528029003450d00200528028c03102f0b200d41086a290000210b200d29000021142017200d41186a2900003703002018200d41106a2900003703002010200b370300200520143703f802201b290300210b20052903e80221140240024020094220882226a722082009a7460d002008210a0c010b200841016a22062008490d062026a7220a4101742204200620062004491bad42307e2209422088a70d062009a722064100480d060240024020080d002006102d21110c010b2011200841306c2006103121110b2011450d05200641306ead21090b20102903002126201829030021272017290300212f20052903f80221322011200a41306c6a2208201437032020082032370300200841286a200b370300200841186a202f370300200841106a2027370300200841086a2026370300200942ffffffff0f83200a41016aad422086842109200141306a2201202e470d000b201a290300212620052903d80221140b20054198026a41086a29030021272005290398022113202b200c41086a290300370300202d200c41106a290300370300200541d8016a41186a2208200c41186a2903003703002005200c2903003703d8012011450d00200541a8026a41086a290300212920052903a802212f200541f8016a41186a22012008290300370300200541f8016a41106a2203202d290300370300200541f8016a41086a2230202b290300370300200520052903d8013703f8010240024002400240200c280258220841ffffff3f712008470d0020084105742204417f4c0d00200c280250210c024020040d00200c20046a21064101210d2008210e0c020b2004102d220d450d06200c20046a21062004410576220e20084f0d01200e410174220a2008200a20084b1b220841ffffff3f712008470d07200841057422084100480d0702400240200e0d002008102d210d0c010b200d200e41057420081031210d0b200d450d062008410576210e0c020b103d000b20080d004100210c0c010b200d2108200c210a03402008200a290000370000200841186a200a41186a290000370000200841106a200a41106a290000370000200841086a200a41086a290000370000200841206a21082006200a41206a220a470d000b200c20046a200c6b41606a41057641016a210c0b201f2001290300370300201e2003290300370300201d2030290300370300200520052903f8013703a803201910012208290000210b201a200841086a2900003703002005200b3703d8022008102f41e0cfc800ad428080808080028410012208290000210b201b200841086a2900003703002005200b3703e8022008102f200520123602a80220221003220841086a290000210b200841106a2900002132200829000021332017200841186a290000370300201820323703002010200b370300200520333703f8022008102f41c000102d2206450d02200620052903d802370000200620052903e802370010200620052903f80237002041082104200641086a200541d8026a41086a290300370000200641186a200541e8026a41086a290300370000200641286a200541f8026a41086a290300370000200641306a2018290300370000200641386a2017290300370000200541f8026a2006109a050240024020052802f80222010d004100210a4200210b410021080c010b20052902fc02220b422088a7210a200ba72108200121040b2017201f2903003703002018201e2903003703002010201d290300370300200520052903a8033703f8020240200a2008470d000240200a200ba7470d00200a41016a2208200a490d05200a41017422012008200120084b1bad42d8007e2232422088a70d052032a722084100480d0502400240200a0d002008102d21040c010b2004200a41d8006c2008103121040b2004450d04200b42808080807083200841d8006ead84210b0b200b422088a7210a0b2004200a41d8006c22016a2208201320147c2214370310200820293703082008202f3703002008200d36022c20082011360220200841186a202720267c2014201354ad7c370300200841346a200c360200200841306a200e360200200841246a2009370200200820052903f802370338200841c0006a2010290300370300200841c8006a2018290300370300200841d0006a20172903003703000240024020040d002006ad428080808080088410050c010b200541f8026a2004200a41016a220810f9052006ad428080808080088420053502800342208620052802f802220aad841004024020052802fc02450d00200a102f0b200ba7210c02402008450d00200441306a2108200141d8006a210a03400240200841746a280200450d00200841706a280200102f0b02402008280200450d002008417c6a280200102f0b200841d8006a2108200a41a87f6a220a0d000b0b200c450d002004102f0b2006102f0b200f41e0006a210f20252020490d000c040b0b1036000b1038000b2009a7450d00200d102f0b200541d0036a24000bfb1808017f047e017f057e047f057e057f047e230041c0056b22052400200541c0046a200010b50302400240024020052d00c0044101470d00200541086a41186a200541d9046a290000370300200541186a200541d1046a290000370300200541086a41086a200541c9046a290000370300200520052900c104370308200541c0046a200541086a10810320052802ec044102460d00200541286a200541c0046a41d80010e8061a200541286a41086a290300210620052903282107024002402005290338220820012008200154200541286a41186a290300220920025420092002511b220a1b220b20092002200a1b220c8450450d002007210d2006210e0c010b200541c0006a220a2009200c7d2008200b54ad7d220f37030020052008200b7d220d37033802400240200d428080e983b1de1656200f420052200f501b450d00200b2108200c21090c010b200a420037030020054200370338200f20027c200d20017c2201200d54ad7c21020b20054200200620097d2007200854ad7d220b200720087d220f200756200b200656200b2006511b220a1b220e37033020054200200f200a1b220d370328200220097d2001200854ad7d2102200120087d21010b02400240200541d0006a28020022100d004100210a410021100c010b2005280248210a201041186c21114100211003400240200a2903002208200120012008562002200a41086a221229030022095620022009511b22131b220b2009200220131b220c84500d00200a2008200b7d220d370300200a2009200c7d2008200b54ad7d220f37030802400240200d428080e983b1de1656200f420052200f501b450d002001210f200b2108200c21090c010b200a4200370308200a42003703002002200f7c2001200d7c220f200154ad7c21020b200541286a41086a221342002013290300220120097d2005290328220b200854ad7d220c200b20087d220d200b56200c200156200c2001511b22131b220e37030020054200200d20131b220d370328200220097d200f200854ad7d2102200f20087d210120122903002109200a29030021080b024020082009844200520d00200a41186a210a201041016a2110201141686a22110d010b0b2005280250220a2010490d020b200541003602500240200a20106b220a450d0002402010450d00200528024822132013201041186c6a200a41186c10e9061a0b2005200a3602500b024042002007200d7d220820082007562006200e7d2007200d54ad7d220820065620082006511b220a1b220242002008200a1b220184500d00418de6c300ad4280808080e000841001220a290000210820054188026a41086a200a41086a2900003703002005200837038802200a102f41f0e8c600ad4280808080f000841001220a290000210820054180016a41086a200a41086a2900003703002005200837038001200a102f4120102d220a450d03200a2000290000370000200a41186a200041186a290000370000200a41106a200041106a290000370000200a41086a200041086a290000370000200aad4280808080800484100322102900002108201041086a2900002109201041106a290000210b200541c0046a41186a2213201041186a290000370300200541c0046a41106a2211200b370300200541c0046a41086a2009370300200520083703c0042010102f200a102f41c000102d220a450d03200a200529038802370000200a200529038001370010200a20052903c004370020200a41086a20054188026a41086a290300370000200a41186a20054180016a41086a290300370000200a41286a200541c0046a41086a290300370000200a41306a2011290300370000200a41386a201329030037000020054180016a200a10f602200529038001210e4200210b2005420037038001200541c8016a280200211320052d00cc01211102400240200e4201510d00200541d0016a41306a4200370300200541d0016a41286a4200370300200541d0016a41206a4200370300200541e8016a4200370300200541e0016a4200370300200541d0016a41086a4200370300200542003703d0014200210c4200210942002108420021140c010b20054180016a41386a290300210f20054180016a41306a290300210d20054180016a41206a290300210c20054180016a41186a290300210b20054180016a41c0006a290300211420052903900121082005290388012109200541d0016a41206a20054180016a41286a290300370300200541d0016a41286a200d370300200541d0016a41306a200f370300200541e0016a200b3703002005200c3703e801200520093703d001200520083703d8010b20052009200220092009200256200820015620082001511b22101b220d7d22063703d001200520082001200820101b22157d2009200d54ad7d220f3703d8012008200c7c2009200b7c22162009542212ad7c2109200541d0016a41106a2110024002402002200d7d2207200120157d2002200d54ad7d22178450450d004200210b4200211720022115200121180c010b200541e8016a200c2017200c200b200756200c201756200c2017511b22191b22187d200b2007200b20191b220c54ad7d3703002005200b200c7d3703e001201720187d2007200c54ad7d2117201820157c200c200d7c2215200c54ad7c21182007200c7d210b0b200920085121192009200854211a20054188026a41186a201041086a290300220837030020054188026a41206a221b201041106a290300370300200541b0026a221c201041186a290300370300200541b8026a221d201041206a29030037030020052010290300220c3703980220052006370388022005200f3703900202400240427f2006200c7c220c200c2006542210200f20087c2010ad7c2208200f542008200f511b22101b220c428080e983b1de16544100427f200820101b220d501b0d0020054198026a290300210c201d290300210d201c2903002107201b290300211e200529039002211f20052903880221204201210820052903a00221210c010b420021080240200c200d84500d00200c200d109a01200541f8046a200d370300200541f0046a200c370300200541c0046a41086a41013a0000200541c9046a2000290000370000200541d1046a200041086a290000370000200541d9046a200041106a290000370000200541e1046a200041186a290000370000200541033a00c00441c8e1ca004100200541c0046a108c010b0b2012201a20191b2110200541a8016a201e370300200541b0016a200737030020054190016a201f370300200541b8016a200d37030020054198016a200c370300200520213703a001200520143703c0012005202037038801200520114100200e42015122121b3a00cc0120052013410020121b3602c801200520084201512213ad370380010240024020130d00200aad428080808080088410050c010b200541c0003602c4042005200a3602c00420054188016a200541c0046a1090030b427f200920101b2109427f201620101b210c200a102f2008420152210a024002400240200e4201510d00200a0d0041032110200541c0036a210a0c010b200e420152200a410173720d0141042110200541c0026a210a0b200a41046a20103a0000200a41003a0000200a41056a2000290000370000200a410d6a200041086a290000370000200a41156a200041106a290000370000200a411d6a200041186a29000037000041c8e1ca004100200a108c010b0240200c2009844200520d00200541f8046a200f370300200541f0046a2006370300200541c0046a41086a41003a0000200541c9046a2000290000370000200541d1046a200041086a290000370000200541d9046a200041106a290000370000200541e1046a200041186a290000370000200541033a00c00441c8e1ca004100200541c0046a108c010b2004427f2004290300220820157c22092009200854220a200441086a2210290300220820187c200aad7c220920085420092008511b220a1b3703002010427f2009200a1b3703000240200b201784500d002003420020032903002208200b7d22092009200856200341086a220a290300220920177d2008200b54ad7d220820095620082009511b22101b370300200a4200200820101b3703000b200541086a200541286a10b603200541f8046a2001370300200541f0046a2002370300200541c0046a41086a41013a0000200541c9046a2000290000370000200541d1046a200041086a290000370000200541d9046a200041106a290000370000200541e1046a200041186a290000370000200541043a00c00441c8e1ca004100200541c0046a108c010b200541cc006a280200450d002005280248102f0b200541c0056a24000f0b41a6b5ca00411c41f8b4ca001039000b1036000bdb0403027f037e027f230041e0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241306a41086a200341086a290000370300200220043703302003102f41a1cac800ad4280808080e00084100122032900002104200241086a41086a200341086a290000370300200220043703082003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241c0006a41186a2207200141186a290000370300200241c0006a41106a22082006370300200241c0006a41086a2005370300200220043703402001102f2003102f41c000102d2203450d00200320022903303700002003200229030837001020032002290340370020200341086a200241306a41086a290300370000200341186a200241086a41086a290300370000200341286a200241c0006a41086a2201290300370000200341306a2008290300370000200341386a2007290300370000200241086a200341c00010ad022001200241086a41096a2900003703002008200241086a41116a2900003703002007200241086a41196a290000370300200220022900093703400240024020022d00084101460d00200041003a00000c010b200041013a000020002002290340370001200041096a2001290300370000200041116a200241d0006a290300370000200041196a200241d8006a2903003700000b2003102f200241e0006a24000f0b1036000bf90303027f037e027f230041d0006b22022400200242f3e885db96cddbb320370308200241086a200141346a2001290300200141086a290300411f10b00141eba1ca00ad4280808080f00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f41a7cac800ad4280808080e00084100122032900002104200241206a41086a200341086a290000370300200220043703202003102f02404120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322002900002104200041086a2900002105200041106a2900002106200241306a41186a2207200041186a290000370300200241306a41106a22082006370300200241306a41086a2005370300200220043703302000102f2003102f41c000102d2203450d00200320022903103700002003200229032037001020032002290330370020200341086a200241106a41086a290300370000200341186a200241206a41086a290300370000200341286a200241306a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c000360234200220033602302001200241306a10f3052003102f200241d0006a24000f0b1036000bbd0101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b024002402001411c6a2802002205450d00200141146a2802002101200541027421062003417f6a2103034002402004200128020022076b220520024b0d00200420024b0d030b200141046a21012003417f6a2103200521042006417c6a22060d000b0b200041023602080f0b2000200736020c2000410136020820002005ad4220862003ad843702000ba51308037f017e017f027e017f017e017f037e230041c0026b22052400200541c0016a2001200210b70302400240024002400240024020052802c8014102460d0020052802c0012106200541c0016a41086a2001280204220741086a290000370300200541c0016a41106a200741106a290000370300200541c0016a41186a200741186a290000370300200520063602e001200520072900003703c00141eba1ca00ad4280808080f00084100122072900002108200541e8016a41086a200741086a290000370300200520083703e8012007102f41b6cbc800ad4280808080900184100122072900002108200541f8016a41086a200741086a290000370300200520083703f8012007102f4104102d2207450d0420074104412010312207450d04200720052903c001370000200741186a200541c0016a41186a290300370000200741106a200541c0016a41106a290300370000200741086a200541c0016a41086a2903003700002007412041c00010312209450d04200920063600202009ad4280808080c00484100322072900002108200741086a290000210a200741106a290000210b20054188026a41186a200741186a29000037030020054188026a41106a200b37030020054188026a41086a200a37030020052008370388022007102f2009102f41c000102d2207450d04200720052903e801370000200720052903f8013700102007200529038802370020200741086a200541e8016a41086a220c290300370000200741186a200541f8016a41086a290300370000200741286a20054188026a41086a290300370000200741306a20054188026a41106a290300370000200741386a20054188026a41186a290300370000200541c0003602ac02200520073602a802200541e8016a2007ad4280808080800884100210730240024020052802e80122090d004200210d0c010b20052802ec01210e024002400240200c280200220c4110490d00200c4170714110470d010b2005410036028002200542013703f8012005410b3602b4022005200541a8026a3602b0022005200541f8016a3602bc022005419c026a41013602002005420137028c02200541b885c700360288022005200541b0026a36029802200541bc026a41d8dbc10020054188026a103c1a20053502800242208620053502f801841008024020052802fc01450d0020052802f801102f0b4200210d0c010b200941186a290000210a200941086a290000210f200929001021082009290000210b4201210d0b200e450d002009102f0b2007102f200a4200200d42005222071b210a2008420020071b2108200b420020071b220d200354200f420020071b220b200454200b2004511b0d01200d200385200b2004858450450d03200541b0016a20032004428094ebdc03420010ee06200541a0016a20052903b001220b200541b0016a41086a290300220d4280ec94a37c427f10ed0620054190016a200b200d2001350228220f420010ed0620054180016a4200200529039001220d200f20052903a00120037c7e220b200b428094ebdc0380220b4280ec94a37c7e7c4280cab5ee0156200ba76aad7c220b20087d220f200f200b5620054190016a41086a290300200b200d54ad7c220d200a7d200b200854ad7d220b200d56200b200d511b22071b220d4200200b20071b428094ebdc03420010ee06200541f0006a200529038001220b20054180016a41086a290300220f4280ec94a37c427f10ed06200541e0006a200b200f4280cab5ee01420010ed06200541e0006a41086a2903002005290360220f200d20052903707c220b4280cab5ee017e428094ebdc03824280cab5ee0156200b420188a76aad7c220b200f54ad7c210d410021070c020b410021070c040b200541c0006a20032004428094ebdc03420010ee06200541d0006a20032004428094ebdc03420010ef06200541306a2005290340200541c0006a41086a2903002001350228220f420010ed06200541206a420020052903302210200f20052903507e220f200f428094ebdc0380220f4280ec94a37c7e7c4280cab5ee0156200fa76aad7c220f20087d22112011200f56200541306a41086a290300200f201054ad7c2210200a7d200f200854ad7d220f201056200f2010511b22071b22104200200f20071b428094ebdc03420010ee06200541106a2005290320220f200541206a41086a29030022114280ec94a37c427f10ed062005200f20114280cab5ee01420010ed06200128022422072003200d7d220f20072903007c2211370300200741086a22072004200b7d2003200d54ad7d20072903007c2011200f54ad7c370300200141106a2207200728020022072002200720024b1b360200200541086a2903002005290300220d201020052903107c220b4280cab5ee017e428094ebdc03824280cab5ee0156200b420188a76aad7c220b200d54ad7c210d410121070b02400240200b200d84500d00200128022022072007290300220f200b7c2210370300200741086a22072007290300200d7c2010200f54ad7c370300200a200d7c2008200b7c220b200854ad7c210a200b21080c010b2007450d010b200141013a002c41eba1ca00ad4280808080f0008410012207290000210b200541e8016a41086a200741086a2900003703002005200b3703e8012007102f41b6cbc800ad428080808090018410012207290000210b200541f8016a41086a200741086a2900003703002005200b3703f8012007102f4104102d2207450d0120074104412010312207450d01200720052903c001370000200741186a200541c0016a41186a290300370000200741106a200541c0016a41106a290300370000200741086a200541c0016a41086a2903003700002007412041c00010312201450d01200120063600202001ad4280808080c0048410032207290000210b200741086a290000210d200741106a290000210f20054188026a41186a200741186a29000037030020054188026a41106a200f37030020054188026a41086a200d3703002005200b370388022007102f2001102f41c000102d2207450d01200720052903e801370000200720052903f8013700102007200529038802370020200741086a200541e8016a41086a290300370000200741186a200541f8016a41086a290300370000200741286a20054188026a41086a290300370000200741306a20054188026a41106a290300370000200741386a20054188026a41186a2903003700004110102d2201450d01200120033700002001200437000820014110412010312201450d0120012008370010200141186a200a3700002007ad42808080808008842001ad428080808080048410042001102f2007102f0b410121070c010b1036000b2000200636020420002007360200200541c0026a24000bd58e010e047f017e017f027e017f027e017f027e097f027e037f037e0c7f057e230041d0036b22012400200141f8006a200010ba03200141d0026a41186a4200370300200141d0026a41106a22024200370300200141d0026a41086a22034200370300200142003703d002418de6c300ad4280808080e000841001220429000021052003200441086a290000370300200120053703d0022004102f41f883c400ad4280808080f0018410012204290000210520014188016a41086a2206200441086a29000037030020012005370388012004102f20022001290388012205370300200141e0016a41086a2003290300370300200141e0016a41106a2005370300200141e0016a41186a2006290300370300200120012903d0023703e0010240024002400240024002400240200141e0016a10f702220341ff01714102460d00200141e0016aad22074280808080800484220810052003410171450d00200141f0026a41186a4200370300200141f0026a41106a22094200370300200141f0026a41086a22034200370300200142003703f00241eba1ca00ad4280808080f000841001220429000021052003200441086a290000370300200120053703f0022004102f41aca1ca00ad4280808080e0018410012204290000210520014190036a41086a2206200441086a29000037030020012005370390032004102f20092001290390032205370300200141d0026a41086a2003290300370300200141d0026a41106a2005370300200141d0026a41186a2006290300370300200120012903f0023703d002200141203602c4012001200141d0026a3602c001200141f0026a200141d0026aad220a4280808080800484220b1002107341022104024020012802f0022206450d0020012802f402210c024002402003280200450d0020062d0000220341014b0d0041002104024020030e020200020b410121040c010b200141003602980320014201370390032001410b36029c012001200141c0016a36029801200120014190036a3602a001200141f4016a4101360200200142013702e401200141b885c7003602e001200120014198016a3602f001200141a0016a41d8dbc100200141e0016a103c1a2001350298034220862001350290038410080240200128029403450d00200128029003102f0b410221040b200c450d002006102f0b0240024020044102460d0020044101710d010b42002105200141f0026a41186a22044200370300200141f0026a41106a22064200370300200141f0026a41086a22034200370300200142003703f00241eba1ca00ad4280808080f00084220d1001220c290000210e2003200c41086a2900003703002001200e3703f002200c102f41f2a1ca00ad4280808080a001841001220f290000210e20014190036a41086a220c200f41086a2900003703002001200e37039003200f102f2009200129039003370000200941086a2210200c290300370000200141d0026a41086a22112003290300370300200141d0026a41106a22122006290300370300200141d0026a41186a22132004290300370300200120012903f0023703d002200b1005200442003703002006420037030020034200370300200142003703f002200d1001220f290000210e2003200f41086a2900003703002001200e3703f002200f102f41baa1ca00ad4280808080b003841001220f290000210e200c200f41086a2900003703002001200e37039003200f102f20092001290390033700002010200c290300370000201120032903003703002012200629030037030020132004290300370300200120012903f0023703d002200141f0006a200141d0026a41201095012001280274211420012802702115200442003703002006420037030020034200370300200142003703f002200d1001220f290000210e2003200f41086a2900003703002001200e3703f002200f102f41d2a0ca00ad4280808080a001841001220f290000210e200c200f41086a2900003703002001200e37039003200f102f20092001290390033700002010200c290300370000201120032903003703002012200629030037030020132004290300370300200120012903f0023703d002200141e8006a200141d0026a4120109501200128026c211620012802682117200442003703002006420037030020034200370300200142003703f002200d1001220f290000210e2003200f41086a2900003703002001200e3703f002200f102f4180b1c000ad4280808080f001841001220f290000210e200c200f41086a2900003703002001200e37039003200f102f20092001290390033700002010200c290300370000201120032903003703002012200629030037030020132004290300370300200120012903f0023703d002200141d8006a200141d0026a10e3012001290360210e20012903582118200d1001220f2900002119200141c0016a41086a221a200f41086a290000370300200120193703c001200f102f41dca0ca00ad4280808080d002841001220f290000211920014188016a41086a221b200f41086a2900003703002001201937038801200f102f20012016410020171b221c3602e00120074280808080c0008422191003220f290000211d200f41086a290000211e200f41106a290000211f200141a0016a41186a2216200f41186a290000370300200141a0016a41106a2217201f370300200141a0016a41086a2220201e3703002001201d3703a001200f102f41c000102d220f450d02200f20012903c001370000200f41086a201a290300370000200f200129038801370010200f41186a201b290300370000200f20012903a001370020200f41286a2020290300370000200f41306a2017290300370000200f41386a201629030037000020012014410020151b3602e001200fad428080808080088420191004200f102f2001200e42002018a71b3703e801200142013703e0012001201c3602f001200442003703002006420037030020034200370300200142003703f002200d1001220f290000210e2003200f41086a2900003703002001200e3703f002200f102f41adcac800ad42808080809001841001220f290000210e200c200f41086a2900003703002001200e37039003200f102f20092001290390033700002010200c290300370000201120032903003703002012200629030037030020132004290300370300200120012903f0023703d00220014120360294032001200141d0026a36029003200141e0016a20014190036a10bb03200442003703002006420037030020034200370300200142003703f002200d1001220f290000210d2003200f41086a2900003703002001200d3703f002200f102f41f2b0c000ad4280808080e001841001220f290000210d200c200f41086a2900003703002001200d37039003200f102f20092001290390033700002010200c290300370000201120032903003703002012200629030037030020132004290300370300200120012903f0023703d002200141e0016a200141d0026a412010aa0220012802e0012203410120031b21210240024020012902e401420020031b221f422088a722220d004200210e0c010b2022410574212320014188016a41086a2106200141e0016a41246a212420014190036a41246a2125420021054200210e20212104034041eba1ca00ad4280808080f00084221810012203290000210d200141c0016a41086a2212200341086a2900003703002001200d3703c0012003102f4198b1c000ad4280808080f0008410012203290000210d2006200341086a2900003703002001200d370388012003102f4120102d2203450d0420032004290000370000200341186a200441186a220c290000370000200341106a200441106a220f290000370000200341086a200441086a22102900003700002003ad428080808080048410032211290000210d201141086a2900002119201141106a290000211d200141a0016a41186a2213201141186a290000370300200141a0016a41106a2214201d370300200141a0016a41086a221520193703002001200d3703a0012011102f2003102f41c000102d2203450d04200320012903c001370000200341086a20122903003700002003200129038801370010200341186a2006290300370000200320012903a001370020200341286a2015290300370000200341306a2014290300370000200341386a2013290300370000200141e0016a200341c00010bc03200141f0026a41086a2217200141e0016a41086a2226290300370300200141f0026a41106a221a200141e0016a41106a2227290300370300200141f0026a41186a221b200141e0016a41186a2228290300370300200141d0026a41086a2211202441086a280200360200200120012903e0013703f002200120242902003703d002024002402001280280022216450d00202520012903d00237020020014190036a41186a201b29030037030020014190036a41106a201a29030037030020014190036a41086a2017290300370300202541086a2011280200360200200120012903f00237039003200120163602b0030c010b20014190036a41186a420037030020014190036a41106a420037030020014190036a41086a42003703002001420037039003200141003602b803200142083703b0030b2003102f20014190036a41086a22292903002119200129039003210d200141d0026a201c10bd034120102d2203450d0420032004290000370000200341186a200c290000370000200341106a200f290000370000200341086a201029000037000020012003ad428080808080048410062211290000370388012011102f200141003a00f0012001200341206a3602ec01200120033602e801200120063602e401200120014188016a3602e001200141f0026a200141e0016a106c2003102f20012802f002212a0240024020012802d402221620012802d80222116b20012802f8022220490d0020012802d00221030c010b201120206a22032011490d072016410174222b2003202b20034b1b222b4100480d070240024020160d00202b102d21030c010b20012802d0022016202b103121030b2003450d052001202b3602d402200120033602d002202b21160b2001201120206a222b3602d802200320116a202a202010e8061a024020012802f402450d00202a102f0b2001202b3602e401200120033602e00120014190036a200141e0016a10be0302402016450d002003102f0b201b20014190036a41186a290300370300201a20014190036a41106a2903003703002017202929030037030020012001290390033703f00220012802bc03211620012802b403212020012802b0032111024020012802b803220341c100490d0020112003410041202003676b10bf0341c00021030b2028201b2903003703002027201a29030037030020262017290300370300200120012903f0023703e0012001201636028c02200120033602880220012020360284022001201136028002200141a0016a201c10c0034120102d2203450d0420032004290000370000200341186a200c290000370000200341106a200f290000370000200341086a201029000037000020012003ad428080808080048410062211290000370388012011102f200141003a00e0022001200341206a3602dc02200120033602d802200120063602d402200120014188016a3602d002200141c0016a200141d0026a106c2003102f20012802c001211a0240024020012802a401221620012802a80122116b20012802c8012217490d0020012802a00121030c010b201120176a22032011490d072016410174221b2003201b20034b1b221b4100480d070240024020160d00201b102d21030c010b20012802a0012016201b103121030b2003450d052001201b3602a401200120033602a001201b21160b2001201120176a221b3602a801200320116a201a201710e8061a024020012802c401450d00201a102f0b2001201b3602d402200120033602d002200141e0016a200141d0026a10be0302402016450d002003102f0b0240200128028402450d00200128028002102f0b20181001220329000021182012200341086a290000370300200120183703c0012003102f41a5c6c800ad4280808080a001841001220329000021182006200341086a29000037030020012018370388012003102f4120102d2203450d0420032004290000370000200341186a200c290000370000200341106a200f290000370000200341086a20102900003700002003ad4280808080800484100322112900002118201141086a290000211d201141106a290000211e2013201141186a2900003703002014201e3703002015201d370300200120183703a0012011102f2003102f41c000102d2203450d04200320012903c001370000200341086a20122903003700002003200129038801370010200341186a2006290300370000200320012903a001370020200341286a2015290300370000200341306a2014290300370000200341386a2013290300370000200141d0006a200341c00010c10320012802542113200128025021142003102f200141c0016a201c10c2034120102d2203450d0420032004290000370000200341186a200c290000370000200341106a200f290000370000200341086a201029000037000020012003ad42808080808004841006220c29000037038801200c102f200141003a00f0012001200341206a3602ec01200120033602e801200120063602e401200120014188016a3602e001200141d0026a200141e0016a106c2003102f20012802d00221120240024020012802c401220f20012802c801220c6b20012802d8022211490d0020012802c00121030c010b200c20116a2203200c490d07200f41017422102003201020034b1b22104100480d0702400240200f0d002010102d21030c010b20012802c001200f2010103121030b2003450d05200120103602c401200120033602c0012010210f0b2013410020141b21102001200c20116a22133602c8012003200c6a2012201110e8061a024020012802d402450d002012102f0b200d20057c2105200141003a00e5010240024002400240201041c000490d00201041808001490d012010418080808004490d02200141053a00e501200141033a00e001200120103600e1014280808080d00021180c030b200141013a00e501200120104102743a00e00142808080801021180c020b200141023a00e501200120104102744101723b01e00142808080802021180c010b200141043a00e501200120104102744102723602e0014280808080c00021180b2005200d54210c2013ad4220862003ad8420182007841004024020012d00e501450d00200141003a00e5010b2019200e7c210d200cad210e0240200f450d002003102f0b200441206a2104200d200e7c210e202341606a22230d000b0b41eba1ca00ad4280808080f00084220d100122032900002118200141c0016a41086a2204200341086a290000370300200120183703c0012003102f41f5cac800ad4280808080e0018410012203290000211820014188016a41086a2206200341086a29000037030020012018370388012003102f2001201c3602e00120074280808080c00084100322032900002118200341086a2900002119200341106a290000211d200141a0016a41186a220c200341186a290000370300200141a0016a41106a220f201d370300200141a0016a41086a22102019370300200120183703a0012003102f41c000102d2203450d02200320012903c001370000200341086a20042903003700002003200129038801370010200341186a2006290300370000200320012903a001370020200341286a2010290300370000200341306a200f290300370000200341386a200c2903003700002001200e3703e801200120053703e0012003ad42808080808008842007428080808080028410042003102f200141f0026a41186a22064200370300200141f0026a41106a220c4200370300200141f0026a41086a22034200370300200142003703f002200d1001220429000021052003200441086a290000370300200120053703f0022004102f41d5a1ca00ad4280808080e0028410012204290000210520014190036a41086a220f200441086a29000037030020012005370390032004102f2009200129039003370000200941086a200f290300370000200141d0026a41086a2003290300370300200141d0026a41106a200c290300370300200141d0026a41186a2006290300370300200120012903f0023703d002200141203602a4012001200141d0026a3602a001200141f0026a200b100210730240024020012802f00222030d004100210f0c010b20012802f40221062001200141f8026a28020022043602c401200120033602c0010240024020044104490d0020012004417c6a3602c4012001200341046a3602c00120032800002111200141c8006a200141c0016a10e60120012802480d0020012802c401220c200128024c22104102742204490d002004417f4c0d060240024020040d004101210f0c010b20041033220f450d06200f20012802c0012212200410e8061a2001200c20046b3602c4012001201220046a3602c0010b200f450d000240024002402004450d00200f4103710d02201041ffffffff037122040d01200f102f0b410021044104210f0b41000d01200f450d012004ad220542208620058421050c020b200f102f0b4100210f200141003602980320014201370390032001410b36029c012001200141a0016a36029801200120014190036a36028801200141f4016a4101360200200142013702e401200141b885c7003602e001200120014198016a3602f00120014188016a41d8dbc100200141e0016a103c1a2001350298034220862001350290038410080240200128029403450d00200128029003102f0b0b2006450d002003102f0b4190bdc600210420014190bdc6003602f002200142003702f402200f4104200f1b211b4100210c41002110024020054200200f1b222c422088a72203202241ffffff3f712206200620034b1b2206450d0020212103201b2104034020014190036a41186a200341186a290000220537030020014190036a41106a200341106a290000220d37030020014190036a41086a200341086a290000220e370300200120032900002218370390032004280200210c200141e0016a41186a2005370300200141e0016a41106a200d370300200141e0016a41086a200e370300200120183703e001200141f0026a200141e0016a200c10ed01200341206a2103200441046a21042006417f6a22060d000b20012802f802210c20012802f402211020012802f00221040b41eba1ca00ad4280808080f00084100122032900002105200141c0016a41086a2206200341086a290000370300200120053703c0012003102f41e5cac800ad428080808080028410012203290000210520014188016a41086a2212200341086a29000037030020012005370388012003102f2001201c3602e00120074280808080c00084100322032900002105200341086a290000210d200341106a290000210e200141a0016a41186a2213200341186a290000370300200141a0016a41106a2214200e370300200141a0016a41086a2215200d370300200120053703a0012003102f41c000102d2203450d02200320012903c001370000200341086a20062903003700002003200129038801370010200341186a2012290300370000200320012903a001370020200341286a2015290300370000200341306a2014290300370000200341386a2013290300370000200141003602e801200142013703e0014104102d2206450d02200620114100200f1b36000020014284808080c0003702e401200120063602e00120042010200c200141e0016a10e50120012802e40121062003ad428080808080088420013502e80142208620012802e001220fad84100402402006450d00200f102f0b2003102f20042010200c10a302200141e0016a41186a4200370300200141e0016a41106a22064200370300200141e0016a41086a22034200370300200142003703e00141eba1ca00ad4280808080f000841001220429000021052003200441086a290000370300200120053703e0012004102f41a7cac800ad4280808080e0008410012204290000210520014188016a41086a220c200441086a29000037030020012005370388012004102f20062001290388012205370300200141c0016a41086a22042003290300370300200141c0016a41106a22032005370300200141c0016a41186a2206200c290300370300200120012903e0013703c0014120102d2210450d02201020012903c001370000201041186a2006290300370000201041106a2003290300370000201041086a2004290300370000200141e0016a2010ad42808080808004841018107302400240024020012802e001220f0d0041002103410021140c010b20014194026a21134100211441202112024003400240024020012902e4012205422088a722114120490d00200141c0016a200f460d01200141c0016a200f412010ea06450d010b2005a7450d02200f102f0c020b200120113602c4032001200f3602c00320014188016a200542808080807083200fad84220d10021073024002402001280288012206450d00200128028c0121152001200128029001220c3602c402200120063602c00241002103200141003a00800202400240024002400340200c2003460d01200141e0016a20036a200620036a22042d00003a00002001200441016a3602c0022001200341016a22043a0080022004210320044120470d000b200141a0016a41086a2216200141e0016a41086a290300370300200141a0016a41106a2217200141e0016a41106a290300370300200141a0016a41186a221a200141e0016a41186a290300370300200120012903e0013703a0012001200c20046b3602c402200141306a200141c0026a109c032001290330a70d02200141306a41106a290300212d2001290338212e200141186a200141c0026a109c032001290318a7450d010c020b200141003602c402200341ff0171450d01200141003a0080020c010b200141186a41106a290300212f20012903202130200141e0016a200141c0026a10c30320012802e0012203450d00200141f0026a41086a2016290300370300200141f0026a41106a2017290300370300200141f0026a41186a201a290300370300200120012903a001220e370390032001200e3703f00220012902e401210e20302118202f2119202e211d202d211e0c010b200141003602980320014201370390032001410b36029c012001200141c0036a36029801200120014190036a3602f002200141013602f401200142013702e401200141b885c7003602e001200120014198016a3602f001200141f0026a41d8dbc100200141e0016a103c1a2001350298034220862001350290038410080240200128029403450d00200128029003102f0b410021030b02402015450d002006102f0b2003450d00201320012903f002370200200141e0016a41186a2019370300201341186a200141f0026a41186a290300370200201341106a200141f0026a41106a290300370200201341086a200141f0026a41086a290300370200200120183703f0012001201d3703e0012001410036028c022001200e3702840220012003360280022001201e3703e80120012011360294032001200f36029003200141e0016a20014190036a10c403200128028402450d01200128028002102f0c010b200d1005201441016a21140b02402012450d002010102f0b200141e0016a200d101810732005a72112200f211020012802e001220f0d000b0b201441004721032012450d010b2010102f0b02402003450d0041d0fcc000ad4280808080e0068410084186fdc000ad4280808080b0048410082014ad10190b200141f0026a41186a22044200370300200141f0026a41106a22064200370300200141f0026a41086a22034200370300200142003703f00241eba1ca00ad4280808080f0008422051001220c290000210d2003200c41086a2900003703002001200d3703f002200c102f4198b1c000ad4280808080f000841001220f290000210d20014190036a41086a220c200f41086a2900003703002001200d37039003200f102f2009200129039003370000200941086a2212200c290300370000200141d0026a41086a220f2003290300370300200141d0026a41106a22102006290300370300200141d0026a41186a22112004290300370300200120012903f0023703d002200b1013200442003703002006420037030020034200370300200142003703f002200510012213290000210d2003201341086a2900003703002001200d3703f0022013102f418fb1c000ad428080808090018410012213290000210d200c201341086a2900003703002001200d370390032013102f20092001290390033700002012200c290300370000200f20032903003703002010200629030037030020112004290300370300200120012903f0023703d002200b1005200442003703002006420037030020034200370300200142003703f002200510012213290000210d2003201341086a2900003703002001200d3703f0022013102f41f2b0c000ad4280808080e0018410012213290000210d200c201341086a2900003703002001200d370390032013102f20092001290390033700002012200c290300370000200f20032903003703002010200629030037030020112004290300370300200120012903f0023703d002200b1005200442003703002006420037030020034200370300200142003703f002200510012213290000210d2003201341086a2900003703002001200d3703f0022013102f4180b1c000ad4280808080f0018410012213290000210d200c201341086a2900003703002001200d370390032013102f20092001290390033700002012200c290300370000200f20032903003703002010200629030037030020112004290300370300200120012903f0023703d002200b1005200442003703002006420037030020034200370300200142003703f002200510012213290000210d2003201341086a2900003703002001200d3703f0022013102f41baa1ca00ad4280808080b0038410012213290000210d200c201341086a2900003703002001200d370390032013102f20092001290390033700002012200c290300370000200f20032903003703002010200629030037030020112004290300370300200120012903f0023703d002200b1005200442003703002006420037030020034200370300200142003703f002200510012213290000210d2003201341086a2900003703002001200d3703f0022013102f41d5a1ca00ad4280808080e0028410012213290000210d200c201341086a2900003703002001200d370390032013102f20092001290390033700002012200c290300370000200f20032903003703002010200629030037030020112004290300370300200120012903f0023703d002200b1005200141a0016a41186a4200370300200141a0016a41106a22064200370300200141a0016a41086a22034200370300200142003703a00120051001220429000021052003200441086a290000370300200120053703a0012004102f41aca1ca00ad4280808080e0018410012204290000210520014188016a41086a220c200441086a29000037030020012005370388012004102f20062001290388012205370300200f2003290300370300201020053703002011200c290300370300200120012903a0013703d0024101102d2203450d02200341013a0000200a42808080808004842003ad4280808080108410042003102f0240202ca7450d00201b102f0b201fa7450d002021102f0b200141c0016a41186a4200370300200141c0016a41106a22064200370300200141c0016a41086a22034200370300200142003703c00141e7a2ca00ad42808080808001841001220429000021052003200441086a290000370300200120053703c0012004102f41aca1ca00ad4280808080e0018410012204290000210520014190036a41086a220c200441086a29000037030020012005370390032004102f20062001290390032205370300200141a0016a41086a2003290300370300200141a0016a41106a2005370300200141a0016a41186a200c290300370300200120012903c0013703a001200141203602d4022001200141a0016a3602d002200141f0026a200141a0016aad42808080808004841002107341022103024020012802f0022204450d0020012802f402210602400240200141f0026a41086a280200450d0020042d0000220c41014b0d00410021030240200c0e020200020b410121030c010b200141003602980320014201370390032001410b36029c012001200141d0026a36029801200120014190036a3602c001200141f4016a4101360200200142013702e401200141b885c7003602e001200120014198016a3602f001200141c0016a41d8dbc100200141e0016a103c1a2001350298034220862001350290038410080240200128029403450d00200128029003102f0b410221030b2006450d002004102f0b0240024020034102460d0020034101710d010b41b1dac000ad4280808080d003841008200141a0016a41186a22064200370300200141a0016a41106a22294200370300200141a0016a41086a22044200370300200142003703a00141e7a2ca00ad42808080808001841001220329000021052004200341086a290000370300200120053703a0012003102f41cedac000ad4280808080b0018410012203290000210520014190036a41086a220c200341086a29000037030020012005370390032003102f2006200c29030022053703002029200129039003220d370300200141c0016a41186a220c2005370300200141c0016a41106a220f200d370300200141c0016a41086a22102004290300370300200120012903a0013703c0014120102d2203450d02200320012903a001370000200341186a2006290300370000200341106a2029290300370000200341086a2004290300370000200141f0026a41086a22042010290300370300200141f0026a41106a2206200f290300370300200141f0026a41186a220f200c290300370300200120012903c0013703f002200141bc026a41026a220c200141e0016a41026a2d00003a0000200120012f00e0013b01bc02200142a0808080800437029403200120033602900320014190036a41146a200429030037020020014190036a411c6a2006290300370200200141b4036a200f290300370200200141013a00bc03200120012903f00237029c03200141bf036a200c2d00003a0000200120012f01bc023b00bd03200141e0016a20014190036a10c503024020012802e001450d0020074280808080c00084211e200141e0016a41186a211c20014198026a212720014188026a2128200141e3016a211a0340200141d0026a41086a200141e0016a41086a290300220d370300200120012903e00122053703d002201c290300210720012903f001210b200141c0026a41086a200da72206360200200120053703c002200641206a2204417f4c0d05024002400240024002400240024002402004450d00200410332203450d0c2004410f4d0d0141e7a2ca00ad42808080808001841001220c290000210d200141c0016a41086a2213200c41086a2900003703002001200d3703c001200c102f200341086a2013290300370000200320012903c0013700002004411f4d0d0241f9b5c600ad4280808080d0008422191001220c290000210d20014188016a41086a2214200c41086a2900003703002001200d37038801200c102f200341186a20142903003700002003200129038801370010200341206a2005a7200610e8061a200120033602c003200120043602c403200141a0016a2004ad4220862003ad84100210730240024020012802a00122160d004100211b0c010b20012802a4012126200120012802a80136028c012001201636028801200141106a20014188016a10e6010240024020012802100d0020012802142215200128028c014105762204200420154b1b22104105742204417f4c0d100240024020100d004108211b0c010b2004102d221b450d100b024002402015450d0041002112410021114100210f0340200141e0016a20014188016a10f30220012d00e0014101460d02200128028c0122064110490d0220012900e10121052001200128028801220441106a360288012001200641706a220c36028c01200c4104490d02200441086a290000210d2004290000210e20012006416c6a220c36028c012001200441146a36028801200c450d02200f41016a210c20042800102117200141c8036a41026a200141c0016a41026a2d0000222a3a0000200141cc036a41026a2224202a3a000020012006416b6a36028c012001200441156a36028801200120012f00c00122063b01c803200120063b01cc0320042d001421060240200f2010470d002012200c2012200c4b1b220441ffffff3f712004470d15200441057422044100480d1502400240200f0d002004102d211b0c010b201b201120041031211b0b201b450d13200441057621100b201b20116a2204411c6a20063a00002004200d3703082004200e370300200441146a2005370200200441106a20173602002004411d6a20012f01cc033b00002004411f6a20242d00003a0000201241026a2112201141206a2111200c210f2015200c470d000b0b201b450d010c020b2010450d00201b102f0b200141003602c801200142013703c0012001410b36029c012001200141c0036a360298012001200141c0016a3602c803200141013602f401200142013702e401200141b885c7003602e001200120014198016a3602f001200141c8036a41d8dbc100200141e0016a103c1a20013502c80142208620013502c001841008024020012802c401450d0020012802c001102f0b4100211b20232110202021150b02402026450d002016102f0b20102123201521200b2003102f0240201b0d004200211d4200210e420021194200210d0c080b20204105742103410021110240024020200d004108212a410021240c010b2003410575220441ffffff3f712004470d0f20034100480d0f2003102d222a450d0d200341057621240b0240201b20036a2217201b460d0041002111202a2103201b21040340200441086a2903002105200441146a290200210d200441106a280200210f2004290300210e4100211002402004411c6a2d000022064101460d004102410120064101711b21100b0240200f417f460d0020012802c802221541206a220c417f4c0d10200c450d0620012802c0022116200c10332206450d0f200c410f4d0d07419298ca00ad42808080809001841001221229000021182013201241086a290000370300200120183703c0012012102f200641086a2013290300370000200620012903c001370000200c411f4d0d0820191001221229000021182014201241086a29000037030020012018370388012012102f200641186a20142903003700002006200129038801370010200641206a2016201510e8061a2001200f3602e001200cad4220862006ad84201e10042006102f0b200120012800e0013602c0012001201a2800003600c301200341186a20103a0000200320053703082003200e370300200341106a200d370300200341196a20012802c0013600002003411c6a20012800c301360000200341206a2103201141016a2111200441206a22042017470d000b0b02402023450d00201b102f0b024020110d004200211d4200210e420021194200210d0c070b20114105742104420021194200210d4200211d4200210e202a210303400240200341186a2d0000220641024b0d00024002400240024020060e03020100020b200e200341086a2903002205201d2003290300221856200e200556200e2005511b22061b210e201d201820061b211d0c020b200e200341086a2903002205201d2003290300221856200e200556200e2005511b22061b210e201d201820061b211d0c020b200341086a2903002105200329030021180b200d20052019201856200d200556200d2005511b22061b210d2019201820061b21190b200341206a2103200441606a2204450d070c000b0b41104100104a000b41102004104a000b41202004104a000b41104100104a000b4110200c104a000b4120200c104a000b20012802c802210320012802c0022104200120113602e801200120243602e4012001202a3602e00120042003200141e0016a10c6030b20012802c802210320012802c00221042027200d3703002028200e370300201c420037030020012019370390022001201d37038002200142003703f001200120073703e8012001200b3703e00120042003200141e0016a10c703024020012802c402450d0020012802c002102f0b200141e0016a20014190036a10c50320012802e0010d000b0b0240200128029403450d00200128029003102f0b200141a0016a41186a22064200370300200141a0016a41106a220c4200370300200141a0016a41086a22044200370300200142003703a00141e7a2ca00ad42808080808001841001220329000021052004200341086a290000370300200120053703a0012003102f41d9dac000ad4280808080f0018410012203290000210520014190036a41086a220f200341086a29000037030020012005370390032003102f202941086a200f2903003700002029200129039003370000200141c0016a41186a220f2006290300370300200141c0016a41106a2210200c290300370300200141c0016a41086a22112004290300370300200120012903a0013703c0014120102d2203450d02200320012903a001370000200341186a2006290300370000200341106a200c290300370000200341086a2004290300370000200141d0026a41086a22042011290300370300200141d0026a41106a22062010290300370300200141d0026a41186a220c200f290300370300200120012903c0013703d002200141c0016a41026a220f200141e0016a41026a2d00003a0000200120012f00e0013b01c001200142a08080808004370294032001200336029003200141a4036a2004290300370200200141ac036a2006290300370200200141b4036a200c290300370200200141013a00bc03200120012903d00237029c03200141bf036a200f2d00003a0000200120012f01c0013b00bd03200141e0016a20014190036a10c503024020012802e0012204450d0020014180026a210320014188026a2106200141e0016a41186a210c0340200c290300210520012903f001210d20012802e401210f200141e0016a200420012802e801221010c8030240024020012903e0014201510d004200210e200141f0026a41186a4200370300200141f0026a41106a4200370300200141f0026a41086a4200370300200142003703f002420021180c010b200141f0026a41086a200641086a290300370300200141f0026a41106a200641106a290300370300200141f0026a41186a200641186a290300370300200120062903003703f002200141e0016a41106a290300211820012903e801210e0b200c2005370300200320012903f002370300200341086a200141f0026a41086a290300370300200341106a200141f0026a41106a290300370300200341186a200141f0026a41186a2903003703002001200d3703f001200120183703e8012001200e3703e00120042010200141e0016a10c7030240200f450d002004102f0b200141e0016a20014190036a10c50320012802e00122040d000b0b0240200128029403450d00200128029003102f0b200141a0016a41186a22064200370300200141a0016a41106a220c4200370300200141a0016a41086a22044200370300200142003703a00141e7a2ca00ad42808080808001841001220329000021052004200341086a290000370300200120053703a0012003102f41adc5c300ad4280808080f0008410012203290000210520014190036a41086a220f200341086a29000037030020012005370390032003102f202941086a200f2903003700002029200129039003370000200141c0016a41186a220f2006290300370300200141c0016a41106a2210200c290300370300200141c0016a41086a22112004290300370300200120012903a0013703c0014120102d2203450d02200320012903a001370000200341186a2006290300370000200341106a200c290300370000200341086a2004290300370000200141d0026a41086a22042011290300370300200141d0026a41106a22062010290300370300200141d0026a41186a220c200f290300370300200120012903c0013703d002200141a0016a41026a220f200141e0016a41026a2d00003a0000200120012f00e0013b01a001200142a08080808004370294032001200336029003200141a4036a200429030037020020014190036a411c6a200629030037020020014190036a41246a200c290300370200200141013a00bc03200120012903d00237029c03200141bf036a200f2d00003a0000200120012f01a0013b00bd03200141e0016a20014190036a10c903024020012802e001220c450d00200141e0016a41086a211320014188026a2116200141e0016a41186a2117200141a0026a212a20014190026a2123200141e3016a212020014198026a211c0240024003402016290300211920172903002105200129038002211d20012903f001210d200128029002211a20012802e401211b200141e0016a200c20012802e801220f10c8030240024020012903e0014201510d004200211e200141f0026a41186a4200370300200141f0026a41106a4200370300200141f0026a41086a4200370300200142003703f00242002107420021184200210e0c010b200141f0026a41186a201341186a290300370300200141f0026a41106a201341106a290300370300200141f0026a41086a201341086a290300370300200120132903003703f002202a29030021072023290300210e200129039802211e20012903880221180b200f41206a2203417f4c0d0702402003450d00200310332204450d072003410f4d0d0241e7a2ca00ad428080808080018410012210290000210b200141c0016a41086a2206201041086a2900003703002001200b3703c0012010102f200441086a2006290300370000200420012903c0013700002003411f4d0d0341f9b5c600ad4280808080d0008410012210290000210b20014188016a41086a2211201041086a2900003703002001200b370388012010102f200441186a20112903003700002004200129038801370010200441206a200c200f10e8061a200141e0016a2004200310ca032004102f02400240024020012802e00122100d0041002104410821100c010b20012802e4012204211520012802e80122122004470d010b200441016a22122004490d0a200441017422142012201420124b1b221241ffffff3f712012470d0a201241057422124100480d0a0240024020040d002012102d21100c010b201020044105742012103121100b2010450d0820124105762115200421120b201020124105746a220441013a0018200420053703082004200d370300200442f6cacda397cddbb320370310200420012800e0013600192004411c6a2020280000360000200310332204450d0741adc5c300ad4280808080f00084220b10012214290000210a2006201441086a2900003703002001200a3703c0012014102f200441086a2006290300370000200420012903c001370000200b10012206290000210b2011200641086a2900003703002001200b370388012006102f200441186a20112903003700002004200129038801370010200441206a200c200f10e8061a4124102d2206450d072006201d3700102006200d3700002006201a360020200641186a2019370000200620053700082003ad4220862004ad842006ad4280808080c0048410042006102f2004102f2001201241016a3602e801200120153602e401200120103602e001200c200f200141e0016a10c603201c20073703002016200e20052018200d56200e200556200e2005511b22031b3703002017200141f0026a41186a290300370300200141e0016a41106a200141f0026a41106a2903003703002013200141f0026a41086a2903003703002001201e3703900220012018200d20031b37038002200120012903f0023703e001200c200f200141e0016a10c7030240201b450d00200c102f0b200141e0016a20014190036a10c90320012802e001220c0d010c040b0b41104100104a000b41102003104a000b41202003104a000b0240200128029403450d00200128029003102f0b200141a0016a41186a22064200370300200141a0016a41106a220c4200370300200141a0016a41086a22044200370300200142003703a00141e7a2ca00ad42808080808001841001220329000021052004200341086a290000370300200120053703a0012003102f41f0e8c600ad4280808080f0008410012203290000210520014190036a41086a220f200341086a29000037030020012005370390032003102f202941086a200f2903003700002029200129039003370000200141c0016a41186a220f2006290300370300200141c0016a41106a2210200c290300370300200141c0016a41086a22112004290300370300200120012903a0013703c0014120102d2203450d02200320012903a001370000200341186a2006290300370000200341106a200c290300370000200341086a2004290300370000200141f0026a41086a22042011290300370300200141f0026a41106a22062010290300370300200141f0026a41186a220c200f290300370300200120012903c0013703f002200141d0026a41026a220f200141e0016a41026a2d00003a0000200120012f00e0013b01d002200142a08080808004370294032001200336029003200141a4036a2004290300370200200141ac036a2006290300370200200141b4036a200c290300370200200141013a00bc03200120012903f00237029c03200141bf036a200f2d00003a0000200120012f01d0023b00bd03200141e0016a20014190036a10cb03024020012802e001220c450d00200141a8026a211a20014198026a211b20014188026a2120200141e0016a41186a211c41e7eac300ad4280808080d00184210a0340201a2903002105201b290300210d2020290300210e201c290300211820012903a0022119200129039002211d200129038002211e20012903f001210720012802e4012112200141086a418de6c300410641e8dac000410c200c20012802e801220310cc03200128020c211320012802082114419298ca00410941d49ac8004105200c200310722110200a10062204290000210b2004102f4108102d2204450d042004200b37000020044108411510312206450d042006410d6a41002900ecea43370000200641002900e7ea433700080240024020030d00411521040c010b200341156a22042003490d072004412a2004412a4b1b220f4100480d0720064115200f10312206450d050b200641156a200c200310e8061a419c9eca0041074186ebc3004108200620041072211541eba1ca00410741a1cac8004106200c200310722116200341206a220f417f4c0d05200f450d07200f10332204450d04200f410f4d0d08418de6c300ad4280808080e0008410012211290000210b200141c0016a41086a2217201141086a2900003703002001200b3703c0012011102f200441086a2017290300370000200420012903c001370000200f411f4d0d0941f0e8c600ad4280808080f0008410012211290000210b20014188016a41086a2217201141086a2900003703002001200b370388012011102f200441186a20172903003700002004200129038801370010200441206a200c200310e8061a4105102d2203450d0420034102410120101b201020151b20166a3a000420032013410020141b36000020034105411510312203450d04200320073700052003410d6a201837000020034115412a10312203450d042003201e3700152003411d6a200e3700002003412a41d40010312203450d04200320193700352003201d3700252003413d6a20053700002003412d6a200d370000200fad4220862004ad842003ad4280808080d0088410042003102f2004102f2006102f02402012450d00200c102f0b200141e0016a20014190036a10cb0320012802e001220c0d000b0b0240200128029403450d00200128029003102f0b200141e7a2ca00410841f2a1ca00410a41c8e1ca00410010cc03200141d0026a41186a22064200370300200141d0026a41106a220c4200370300200141d0026a41086a22034200370300200142003703d00241e7a2ca00ad42808080808001841001220429000021052003200441086a290000370300200120053703d0022004102f41aca1ca00ad4280808080e0018410012204290000210520014188016a41086a220f200441086a29000037030020012005370388012004102f2002200129038801370000200241086a200f290300370000200141e0016a41086a2003290300370300200141e0016a41106a200c290300370300200141e0016a41186a2006290300370300200120012903d0023703e0014101102d2203450d02200341013a000020082003ad4280808080108410042003102f0b10cd030b2000280200200041106a200041d0006a200141f8006a410110ce03200028020010cf0310cd0310cd032001280278210c02402001280280012203450d00200341246c2104200c210303400240024020032d0000220641044b0d0002400240024020060e050400010204040b2003410c6a280200450d03200341086a280200102f0c030b2003410c6a280200450d02200341086a280200102f0c020b2003410c6a280200450d01200341086a280200102f0c010b200341086a280200450d00200341046a280200102f0b200341246a21032004415c6a22040d000b0b0240200128027c450d00200c102f0b200141d0036a24000f0b1036000b103d000b1038000b41104100104a000b4110200f104a000b4120200f104a000bf103030d7f017e017f230041306b2202240041042103200241086a200141046a10d60302400240024002400240200228020c41246c22040d0041002105410021060c010b200228020821014100210541002106410421030340024020012d00004101470d00200141106a2802002207417f4c0d03200141036a2d00002108200141016a2f00002109200141086a280200210a200141046a2d0000210b0240024020070d004101210c0c010b2007102d220c450d050b200c200a200710e806210c200241206a41086a220d200241106a41086a29020037030020022002290210370320024020052006470d00200641016a220a2006490d062006410174220e200a200e200a4b1bad42247e220f422088a70d06200fa7220a4100480d060240024020060d00200a102d21030c010b2003200641246c200a103121030b2003450d05200a41246e21060b2003200541246c6a220a2007360210200a200736020c200a200c360208200a201041807e71200b722210360204200a200920084110747222073b0001200a41013a0000200a41036a20074110763a0000200a2002290320370214200a411c6a200d290300370200200541016a21050b200141246a21012004415c6a22040d000b0b200020053602082000200636020420002003360200200241306a24000f0b103d000b1036000b1038000b9a0102027f017e2000280210210202404104102d2203450d002003200236000020002903002104200341044108103121030240024020044201510d002003450d02200341003a00044280808080d00021040c010b2003450d01200341013a00042000290308210420034108411010312203450d01200320043700054280808080d00121040b200129020020042003ad8410042003102f0f0b1036000b870301017f230041f0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100210730240024020032802082201450d00200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a108a05024002402003280238450d0020002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000c010b20034100360258200342013703502003410b360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341b885c7003602182003200341e0006a360228200341ec006a41d8dbc100200341186a103c1a2003350258422086200335025084100802402003280254450d002003280250102f0b200041003602200b2002450d012001102f0c010b200041003602200b200341f0006a24000bd10403027f017e047f230041d0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41b6cac800ad4280808080b00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f2002200136022c20022002412c6aad4280808080c00084100622032900003703302003102f200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a106c0240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000b8e0301067f230041106b2202240020024100360208200242013703002002200036020c2002410c6a200210c2022002200041106a36020c2002410c6a200210c20220002802202103200041286a2802002200200210690240024002402000450d00200041306c210403400240024020022802042205200228020822006b4120490d00200041206a2106200228020021050c010b200041206a22062000490d04200541017422072006200720064b1b22074100480d040240024020050d002007102d21050c010b200228020020052007103121050b2005450d0320022007360204200220053602000b200520006a220041086a200341186a290000370000200041106a200341206a290000370000200041186a200341286a290000370000200220063602082000200341106a2900003700002002200336020c2002410c6a200210c202200341306a2103200441506a22040d000b0b200228020421032001290200200235020842208620022802002200ad84100402402003450d002000102f0b200241106a24000f0b1036000b1038000be22c080a7f017e017f047e147f017e017f017e230041d0026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110dd032003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00410241012000200a41306c6a220d290300220e200d41506a220f290300221056200d41086a2903002211200f41086a29030022125620112012511b220f1b200f200d41306a29030022132010200e200f1b221056200d41386a290300220e20122011200f1b221156200e2011511b22141b2013201020141b2000200a200a417f6a2215200f1b221641306c6a220d29030056200e201120141b2211200d41086a29030022125620112012511b22176a2000200c41306c6a220d290300220e200d41506a2218290300221056200d41086a2903002211201841086a29030022125620112012511b22186a2000200c410172221941306c6a220d29030022132010200e20181b221056200d41086a290300220e2012201120181b221156200e2011511b221a6a20132010201a1b2000200c200c417f6a221b20181b221c41306c6a220d29030056200e2011201a1b2211200d41086a29030022125620112012511b221d6a2000200b41306c6a220d290300220e200d41506a221e290300221056200d41086a2903002211201e41086a29030022125620112012511b221e6a200d41306a29030022132010200e201e1b221056200d41386a290300220e20122011201e1b221156200e2011511b221f6a20132010201f1b2000200b200b417f6a2220201e1b222141306c6a220d29030056200e2011201f1b2211200d41086a29030022125620112012511b22066a210d2021200b41016a2020200b201e1b201f1b20061b210b201c2019201b200c20181b201a1b201d1b210c2016200a41016a2015200a200f1b20141b20171b210a0b200d2000200c41306c6a220f290300220e2000200a41306c6a2218290300221056200f41086a2903002211201841086a29030022125620112012511b220f6a2000200b41306c6a220d29030022132010200e200f1b221056200d41086a290300220e20122011200f1b221156200e2011511b220d6a211820132010200d1b2000200c200a200f1b222141306c6a221e29030058200e2011200d1b2211201e41086a29030022125820112012511b450d01200b200a200c200f1b200d1b21210c020b2000200110de030c0f0b201841016a2218410c490d0002402001410176220b450d002000200141306c6a41506a210a2000210c0340200441a0026a41286a220f200c41286a220d290300370300200441a0026a41206a2218200c41206a221e290300370300200441a0026a41186a2214200c41186a221a290300370300200441a0026a41106a221f200c41106a2215290300370300200441a0026a41086a2216200c41086a22172903003703002004200c2903003703a002200a41086a22192903002111200a41106a221b2903002112200a41186a221c290300210e200a41206a221d2903002110200a41286a22202903002113200c200a290300370300200d2013370300201e2010370300201a200e37030020152012370300201720113703002020200f290300370300201d2018290300370300201c2014290300370300201b201f29030037030020192016290300370300200a20042903a002370300200c41306a210c200a41506a210a200b417f6a220b0d000b0b20012021417f736a21214101210a0c010b201845210a0b0240200a452009724101710d002000200110df030d0d0b2002450d02202120014f0d01024020022903002000202141306c6a220a29030056200241086a2903002211200a41086a220c29030022125620112012511b450d0020002108200121070c040b200441a0026a41286a221a200041286a2218290300370300200441a0026a41206a221f200041206a221e290300370300200441a0026a41186a2215200041186a2214290300370300200441a0026a41106a2216200041106a220b290300370300200441a0026a41086a2217200041086a220f290300370300200420002903003703a002200c2903002111200a41106a220d2903002112200a41186a2219290300210e200a41206a221b2903002110200a41286a221c29030021132000200a29030037030020182013370300201e20103703002014200e370300200b2012370300200f2011370300201c201a290300370300201b201f29030037030020192015290300370300200d2016290300370300200c2017290300370300200a20042903a002370300200f29030021112000290300210e200441186a221c2018290300370300200441106a221d201e290300370300200441086a222020142903003703002004200b290300370300200041506a2119200041306a211b4100210c2001210b03400240200c200b417f6a220f4f0d00201b200c41306c6a210a0340200e200a290300582011200a41086a29030022125820112012511b450d01200a41306a210a200f200c41016a220c470d000b200f210c0b2019200b41306c6a210a02400340200c200b417f6a220b4f0d01200a2903002112200a41086a210f200a41506a220d210a200e2012562011200f29030022125620112012511b0d000b201a201b200c41306c6a220a41286a220f290300370300201f200a41206a22212903003703002015200a41186a22062903003703002016200a41106a22222903003703002017200a41086a22232903003703002004200a2903003703a002200d41386a22242903002112200d41c0006a22252903002110200d41c8006a22262903002113200d41d0006a22272903002128200d41d8006a2229290300212a200a200d41306a220d290300370300200f202a370300202120283703002006201337030020222010370300202320123703002029201a2903003703002027201f290300370300202620152903003703002025201629030037030020242017290300370300200d20042903a002370300200c41016a210c0c010b0b2000200e370300200020113703082000200429030037031020142020290300370300201e201d2903003703002018201c29030037030002402001200c41016a220a490d002000200a41306c6a21002001200a6b220141154f0d010c0c0b0b200a2001104b000b41d4bbca0020212001103b000b2007450d010b202120074f0d01200441a0026a41286a2217200841286a2222290300370300200441a0026a41206a2219200841206a2223290300370300200441a0026a41186a221b200841186a2224290300370300200441a0026a41106a221c200841106a2225290300370300200441a0026a41086a221d200841086a2226290300370300200420082903003703a0022008202141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a0023703002026290300211120082903002112200441186a22272022290300370300200441106a22292023290300370300200441086a2205202429030037030020042025290300370300200841306a2101410021212007417f6a220f450d022001210a0340200a290300201256200a41086a290300220e201156200e2011511b450d03200a41306a210a200f202141016a2221470d000b200f21210c020b4188bbca0041004100103b000b4198bbca0020212007103b000b2008200741306c6a210a200f210b02400340200a2100200b220c20214d22060d01200c417f6a210b200041506a220a290300201258200a41086a290300220e201158200e2011511b0d000b0b0240200c2021490d00200f200c490d0241800121154100210d4100211a4100210f4100211441800121162001202141306c6a220921010340200020016b220a41306e210c0240200a41afe0004b22200d00200c41807f6a200c201a200d492014200f49220b7222181b210a02402018450d002016200a200b1b2116200a2015200b1b21150c010b200a200a41017622166b21150b02402014200f470d00024020160d00200441206a220f21140c010b4100210c200441206a2214210f2001210a0340200f200c3a0000200f410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b41027441b8e0c3006a2802006a210f200a41306a210a2016200c41016a220c470d000b0b0240201a200d470d00024020150d00200441a0016a220d211a0c010b200041506a210a4100210c200441a0016a221a210d0340200d200c3a0000200d410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b41027441c4e0c3006a2802006a210d200a41506a210a2015200c41016a220c470d000b0b0240200d201a6b220a200f20146b220c200c200a4b1b221f450d002017200120142d000041306c6a220a41286a2903003703002019200a41206a290300370300201b200a41186a290300370300201c200a41106a290300370300201d200a41086a2903003703002004200a2903003703a002200120142d000041306c6a220a2000201a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703000240201f4101460d004100210b03402000201a200b6a22182d0000417f7341306c6a220a20012014200b6a41016a221e2d000041306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703002001201e2d000041306c6a220a2000201841016a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a290300370300200b41026a210a200b41016a220c210b200a201f490d000b201a200c6a211a2014200c6a21140b2000201a2d0000417f7341306c6a220a20042903a002370300200a41286a2017290300370300200a41206a2019290300370300200a41186a201b290300370300200a41106a201c290300370300200a41086a201d290300370300201a41016a211a201441016a21140b2001201641306c6a20012014200f461b21012000410020156b41306c6a2000201a200d461b210020200d000b024002402014200f4f0d002000210a034020172001200f417f6a220f2d000041306c6a220c41286a220b2903003703002019200c41206a220d290300370300201b200c41186a2200290300370300201c200c41106a2218290300370300201d200c41086a221e2903003703002004200c2903003703a002200a41506a220a41086a221a290300210e200a41106a221f2903002110200a41186a22152903002113200a41206a22162903002128200a41286a2220290300212a200c200a290300370300200b202a370300200d20283703002000201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c290300370300201a201d290300370300200a20042903a0023703002014200f490d000c020b0b2001210a201a200d4f0d000340200d417f6a220d2d0000210c2017200a41286a220b2903003703002019200a41206a220f290300370300201b200a41186a2201290300370300201c200a41106a2218290300370300201d200a41086a221e2903003703002004200a2903003703a0022000200c417f7341306c6a220c41086a2214290300210e200c41106a221f2903002110200c41186a22152903002113200c41206a22162903002128200c41286a2220290300212a200a200c290300370300200b202a370300200f20283703002001201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c2903003703002014201d290300370300200c20042903a002370300200a41306a210a201a200d490d000b0b2008201137030820082012370300200820042903003703102024200529030037030020232029290300370300202220272903003703002007200a20096b41306e20216a22014d0d032017202229030037030020192023290300370300201b2024290300370300201c2025290300370300201d2026290300370300200420082903003703a0022008200141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a002370300200720016b220c450d04200c20012001200c4b1b210b2007410376210f200a41306a2100024002402001200c417f6a220c490d002000200c200a200310bf03200821000c010b200820012002200310bf03200a2102200c21010b200b200f4f2105200141154f0d010c050b0b2021200c104b000b200c200f104a000b4198bbca0020012007103b000b41a8bbca00411c41c4bbca001039000b20014102490d00200041a07f6a210d410021184101210c0340200c41016a210f02402000200c41306c6a220b290300220e200b41506a220a29030058200b41086a221e2903002211200a41086a221429030022125820112012511b0d00200441186a221a200b41286a221f290300370300200441106a2215200b41206a2216290300370300200441086a2217200b41186a22192903003703002004200b290310370300200b200a290300370300201e2014290300370300200b41106a200a41106a2903003703002019200a41186a2903003703002016200a41206a290300370300201f200a41286a2903003703002000200c417f6a221e41306c6a211402400240201e0d004100211e0c010b2018210c200d210a200e200b41a07f6a220b290300582011200b41086a29030022125820112012511b0d00024002400340200a4188016a200a41d8006a290300370300200a4180016a200a41d0006a290300370300200a41f8006a200a41c8006a290300370300200a41f0006a200a41c0006a290300370300200a41e8006a200a41386a290300370300200a41e0006a200a41306a290300370300200c4101460d01200a2903002112200a41086a210b200c417f6a210c200a41506a210a200e2012562011200b29030022125620112012511b0d000c020b0b4100210c0b2000200c41306c6a2114200c211e0b2014200e370300201420113703082000201e41306c6a220a41286a201a290300370300200a41206a2015290300370300200a41186a2017290300370300200a20042903003703100b201841016a2118200d41306a210d200f210c200f2001470d000b0b200441d0026a24000bd10403027f017e047f230041d0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41c1cac800ad4280808080a00284100122032900002104200241106a41086a200341086a290000370300200220043703102003102f2002200136022c20022002412c6aad4280808080c00084100622032900003703302003102f200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a106c0240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000bab0201037f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad841002107302400240200328021022010d00410021020c010b200328021421042003200341186a280200360224200320013602202003200341206a10e6010240024020032802000d0020032802042105410121020c010b4100210220034100360230200342013703282003410b36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b885c7003602482003200341386a360258200341c4006a41d8dbc100200341c8006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b0b2004450d002001102f0b2000200536020420002002360200200341e0006a24000bd10403027f017e047f230041d0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41d3cac800ad4280808080a00284100122032900002104200241106a41086a200341086a290000370300200220043703102003102f2002200136022c20022002412c6aad4280808080c00084100622032900003703302003102f200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a106c0240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000bb60306047f017e057f017e017f017e230041306b22022400200241286a200110e601024002400240024002402002280228450d00200041003602000c010b200228022c2203200128020441186e2204200420034b1b2205ad42187e2206422088a70d012006a72204417f4c0d010240024020040d00410821070c010b2004102d2207450d03200441186e21050b024002402003450d00200241106a41106a2108410021094100210a4100210b0340200241106a2001109c032002290310a70d02200829030021062002290318210c200241086a200110e60120022802080d02200b41016a2104200228020c210d0240200b2005470d0020092004200920044b1bad42187e220e422088a70d07200ea722054100480d0702400240200b0d002005102d21070c010b2007200a2005103121070b2007450d06200541186e21050b2007200a6a220b2006370308200b200c370300200b41106a200d360200200941026a2109200a41186a210a2004210b20032004470d000b0b2000200536020420002007360200200041086a20033602000c010b200041003602002005450d002007102f0b200241306a24000f0b103d000b1036000b1038000bc60501067f230041106b220224002002410036020820024201370300024002404120102d2203450d00200242a080808080043702042002200336020020032000290034370000200341086a2000413c6a290000370000200341106a200041c4006a290000370000200341186a200041cc006a2900003700002002200036020c2002410c6a200210c2022002200041106a36020c2002410c6a200210c20220002802202103200041286a28020022042002106902402004450d002003200441186c6a210403402002200336020c2002410c6a200210c202200341106a20021095022004200341186a2203470d000b0b02400240200028022c4101460d00024002402002280204220420022802082205460d00200228020021030c010b200541016a22032005490d04200541017422042003200420034b1b22044100480d040240024020050d002004102d21030c010b200228020020052004103121030b2003450d0320022004360204200220033602000b2002200541016a2200360208200320056a41003a00000c010b024002402002280204220420022802082205460d00200228020021030c010b200541016a22032005490d03200541017422042003200420034b1b22044100480d030240024020050d002004102d21030c010b200228020020052004103121030b2003450d0220022004360204200220033602000b2002200541016a2206360208200320056a41013a00002000280230210702400240200420066b4104490d00200541056a21000c010b200641046a22002006490d03200441017422052000200520004b1b22054100480d030240024020040d002005102d21030c010b200320042005103121030b2003450d022002200536020420022003360200200521040b20022000360208200320066a20073600000b20012902002000ad4220862003ad84100402402004450d002003102f0b200241106a24000f0b1036000b1038000bdc0304057f017e027f027e230041306b22022400200241206a2001350208422086200135020084101810730240024020022802202203450d002001410c6a2104200141046a2105200241186a21060240024003400240024020022902242207422088a722084120490d0020042003460d0120042003412010ea06450d010b2007a7450d042003102f0c040b02402008417f4c0d002008102d2209450d0220092003200810e806210902402005280200450d002001280200102f0b200120083602082001200936020020052008360200200241086a20032008109c0102402002290308a7450d002006290300210a2002290310210b024020012d002c450d002007428080808070832003ad8410050b20012802082208411f4d0d04200841606a2208417f4c0d01200128020021010240024020080d00410121050c010b2008102d2205450d040b2005200141206a200810e8062101200041186a200a370300200041106a200b370300200041086a200836020020002008360204200020013602002007a7450d062003102f0c060b02402007a7450d002003102f0b200241206a200135020842208620013502008410181073200228022022030d010c040b0b103d000b1036000b41202008104b000b200041003602000b200241306a24000bdc0203047f017e017f230041106b2203240002400240024002400240200141206a2204417f4c0d002004450d01200410332205450d022004410f4d0d0341e7a2ca00ad4280808080800184100122062900002107200341086a2208200641086a290000370300200320073703002006102f200541086a2008290300370000200520032903003700002004411f4d0d0441f9b5c600ad4280808080d000841001220629000021072008200641086a290000370300200320073703002006102f200541186a200829030037000020052003290300370010200541206a2000200110e8061a2003200228020022082002280208109d042004ad4220862005ad84200335020842208620032802002204ad84100402402003280204450d002004102f0b2005102f0240200241046a280200450d002008102f0b200341106a24000f0b103d000b41104100104a000b1036000b41102004104a000b41202004104a000bcb0304047f017e017f017e230041106b2203240002400240024002400240200141206a2204417f4c0d002004450d01200410332205450d022004410f4d0d0341e7a2ca00ad4280808080800184100122062900002107200341086a2208200641086a290000370300200320073703002006102f200541086a2008290300370000200520032903003700002004411f4d0d0441f0e8c600ad4280808080f000841001220629000021072008200641086a290000370300200320073703002006102f200541186a200829030037000020052003290300370010200541206a2000200110e8061a200241086a2903002107200229030021094110102d2208450d022008200937000020082007370008200241186a29030021072002290310210920084110412010312208450d0220082009370010200841186a2007370000200241286a2903002107200229032021092008412041c00010312208450d0220082009370020200841286a200737000020082002290330370030200841386a200241386a2903003700002004ad4220862005ad842008ad428080808080088410042008102f2005102f200341106a24000f0b103d000b41104100104a000b1036000b41102004104a000b41202004104a000b960203047f017e017f230041106b2203240002400240024002400240200241206a2204417f4c0d002004450d01200410332205450d022004410f4d0d0341e7a2ca00ad4280808080800184100122062900002107200341086a2208200641086a290000370300200320073703002006102f200541086a2008290300370000200520032903003700002004411f4d0d0441f0e8c600ad4280808080f000841001220629000021072008200641086a290000370300200320073703002006102f200541186a200829030037000020052003290300370010200541206a2001200210e8061a2000200520041089042005102f200341106a24000f0b103d000b41104100104a000b1036000b41102004104a000b41202004104a000bed0507047f017e027f017e017f057e017f230041d0006b22022400200241386a2001350208422086200135020084101810730240024020022802382203450d002001410c6a2104200141046a210502400240034002400240200229023c2206422088a722074120490d0020042003460d0120042003412010ea06450d010b2006a7450d042003102f0c040b02402007417f4c0d002007102d2208450d0220082003200710e806210802402005280200450d002001280200102f0b2001200736020820012008360200200520073602002002200736020420022003360200200241086a2006428080808070832003ad84220910021073024020022802082207450d00200228020c21080240024002402002280210220a4110490d00200a4170714110460d00200a417c714120470d010b20024100360220200242013703182002410b36022c200220023602282002200241186a3602342002410136024c2002420137023c200241b885c7003602382002200241286a360248200241346a41d8dbc100200241386a103c1a200235022042208620023502188410080240200228021c450d002002280218102f0b4200210b0c010b200741086a290000210c2007290000210d200741186a290000210e2007290010210f200728002021104201210b0b02402008450d002007102f0b200b500d00024020012d002c450d00200910050b20012802082207411f4d0d04200741606a2207417f4c0d01200128020021010240024020070d00410121050c010b2007102d2205450d040b2005200141206a200710e8062101200041286a200e370200200041206a200f370200200041186a200c370200200041106a200d370200200041306a2010360200200041086a200736020020002007360204200020013602002006a7450d062003102f0c060b02402006a7450d002003102f0b200241386a200135020842208620013502008410181073200228023822030d010c040b0b103d000b1036000b41202007104b000b200041003602000b200241d0006a24000bcd0604097f017e027f057e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102204450d00200328021421052003200341186a280200360224200320043602202003200341206a10e6010240024002400240024020032802000d002003280204220620032802244105762201200120064b1b22074105742201417f4c0d040240024020070d00410821080c010b2001102d2208450d030b024002402006450d00410021094100210a410021010340200341c0006a200341206a10f3020240024020032d00404101460d004103210b200328022422024110490d012003290041210c2003200241706a220d36022420032003280220220e41106a360220200d450d01200e41086a290000210f200e290000211020032002416f6a3602242003200e41116a3602204103210b200e2d0010220241034f0d01200320032800403602282003200341c0006a41036a28000036002b200c211120102112200f21132002210b0c010b4103210b0b200320032802283602382003200328002b36003b200b4103460d02200141016a21022003200328003b36005b20032003280238360258024020012007470d0020092002200920024b1b220741ffffff3f712007470d07200741057422074100480d070240024020010d002007102d21080c010b2008200a2007103121080b2008450d06200741057621070b2008200a6a220141186a200b3a00002001201337030820012012370300200141106a2011370300200141196a20032802583600002001411c6a200328005b360000200941026a2109200a41206a210a2002210120062002470d000b0b2008450d012000200736020420002008360200200041086a20063602000c020b2007450d002008102f0b20034100360230200342013703282003410b36023c2003200341086a3602382003200341286a360258200341d4006a410136020020034201370244200341b885c7003602402003200341386a360250200341d8006a41d8dbc100200341c0006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b200041003602000b2005450d042004102f0c040b1036000b1038000b103d000b200041003602000b200341e0006a24000be00503047f017e027f230041d0016b2202240020022001350208422086200135020084101810730240024020022802002203450d002001410c6a2104200141046a21050240024003400240024020022902042206422088a722074120490d0020042003460d0120042003412010ea06450d010b2006a7450d042003102f0c040b02402007417f4c0d002007102d2208450d0220082003200710e806210802402005280200450d002001280200102f0b200120073602082001200836020020052007360200200220032007108904024020022903004201520d00200241c8006a41386a200241c0006a290300370300200241c8006a41306a200241386a290300370300200241c8006a41286a200241306a290300370300200241c8006a41206a200241286a290300370300200241c8006a41186a200241206a290300370300200241c8006a41106a200241186a290300370300200241d0006a200241106a29030037030020022002290308370348024020012d002c450d002006428080808070832003ad8410050b20012802082207411f4d0d04200741606a2207417f4c0d01200128020021010240024020070d00410121050c010b2007102d2205450d040b2005200141206a200710e8062101200041086a20073602002000200736020420002001360200200241c8016a20024180016a290300370200200241c0016a200241f8006a290300370200200241b8016a200241f0006a290300370200200241b0016a200241e8006a290300370200200241a8016a200241e0006a290300370200200241a0016a200241d8006a2903003702002002418c016a410c6a200241c8006a41086a29030037020020022002290348370290012000410c6a2002418c016a41c40010e8061a2006a7450d062003102f0c060b02402006a7450d002003102f0b2002200135020842208620013502008410181073200228020022030d010c040b0b103d000b1036000b41202007104b000b200041003602000b200241d0016a24000bc20202037f017e230041206b2207240002400240024002400240200641206a2208417f4c0d002008450d01200810332209450d022008410f4d0d032002ad4220862001ad8410012202290000210a200741106a41086a2201200241086a2900003703002007200a3703102002102f200941086a2001290300370000200920072903103700002008411f4d0d042004ad4220862003ad8410012202290000210a2001200241086a2900003703002007200a3703102002102f200941186a200129030037000020092007290310370010200941206a2005200610e8061a200741086a20092008109501200728020c21010240200728020822064101470d002008ad4220862009ad8410050b2009102f2000200136020420002006360200200741206a24000f0b103d000b41104100104a000b1036000b41102008104a000b41202008104a000b9e0407047f017e017f017e017f017e057f230041e0006b22002400200041306a41186a22014200370300200041306a41106a22024200370300200041306a41086a2203420037030020004200370330418de6c300ad4280808080e000842204100122052900002106200041d0006a41086a2207200541086a290000370300200020063703502005102f200320072903003703002000200029035037033041d480c400ad4280808080b0028422061001220529000021082007200541086a290000370300200020083703502005102f200220002903502208370300200041106a41086a22092003290300370300200041106a41106a220a2008370300200041106a41186a220b200729030037030020002000290330370310200041086a200041106a4120109501200028020c210c2000280208210d2001420037030020024200370300200342003703002000420037033020041001220529000021042007200541086a290000370300200020043703502005102f200320072903003703002000200029035037033020061001220529000021042007200541086a290000370300200020043703502005102f20022000290350220437030020092003290300370300200a2004370300200b2007290300370300200020002903303703102000200c4100200d1b2207418094ebdc032007418094ebdc03491b360230200041106aad4280808080800484200041306aad4280808080c000841004200041e0006a24000ba91109017f017e037f017e017f017e047f017e017f230041e0006b22052400200541003602204180e5c300ad4280808080800284200541206aad4280808080c0008422061004200541206a41186a22074200370300200541206a41106a22084200370300200541206a41086a2209420037030020054200370320418de6c300ad4280808080e00084220a1001220b290000210c200541c0006a41086a220d200b41086a2900003703002005200c370340200b102f2009200d29030037030020052005290340370320419ce6c300ad4280808080e000841001220e290000210c200541d0006a41086a220b200e41086a2900003703002005200c370350200e102f20082005290350220c370300200541086a220e2009290300370300200541106a220f200c370300200541186a2210200b29030037030020052005290320370300200520003602202005ad22114280808080800484220c2006100420074200370300200842003703002009420037030020054200370320200a100122122900002106200d201241086a290000370300200520063703402012102f2009200d2903003703002005200529034037032041bae6c300ad4280808080e00084100122122900002106200b201241086a290000370300200520063703502012102f200820052903502206370300200e2009290300370300200f20063703002010200b29030037030020052005290320370300200520053602202005412036022420032802002003280208200541206a10f50220074200370300200842003703002009420037030020054200370320200a100122032900002106200d200341086a290000370300200520063703402003102f2009200d2903003703002005200529034037032041a2e6c300ad4280808080a00184100122032900002106200b200341086a290000370300200520063703502003102f200820052903502206370300200e2009290300370300200f20063703002010200b2903003703002005200529032037030002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200c2003ad428080808080048410042003102f200a10012203290000210a200d200341086a2900003703002005200a3703402003102f4193e6c300ad42808080809001841001220d290000210a200b200d41086a2900003703002005200a370350200d102f20052000417f6a36020020114280808080c000841003220d290000210a200d41086a2900002106200d41106a29000021112007200d41186a29000037030020082011370300200920063703002005200a370320200d102f41c000102d2209450d00200920052903403700002009200529035037001020092005290320370020200941086a200541c0006a41086a2203290300370000200941186a200541d0006a41086a2207290300370000200941286a200541206a41086a220b290300370000200941306a200541206a41106a2200290300370000200941386a200541206a41186a220e2903003700004120102d220d450d00200d2001290000370000200d41186a200141186a290000370000200d41106a200141106a290000370000200d41086a200141086a2900003700002009ad4280808080800884200dad42808080808004841004200d102f2009102f200e420037030020004200370300200b420037030020054200370320418de6c300ad4280808080e0008410012209290000210a2003200941086a2900003703002005200a3703402009102f200b20032903003703002005200529034037032041ace6c300ad4280808080e0018410012209290000210a2007200941086a2900003703002005200a3703502009102f20082005290350370000200841086a2007290300370000200541086a200b290300370300200541106a2000290300370300200541186a200e290300370300200520052903203703004120102d2209450d0020092002290000370000200941186a200241186a290000370000200941106a200241106a290000370000200941086a200241086a290000370000200c2009ad428080808080048410042009102f02402004450d00200541206a41186a22014200370300200541206a41106a220d4200370300200541206a41086a2209420037030020054200370320418de6c300ad4280808080e00084220a100122032900002106200541c0006a41086a220b200341086a290000370300200520063703402003102f2009200b2903003703002005200529034037032041baebc300ad4280808080e00084100122022900002106200541d0006a41086a2203200241086a290000370300200520063703502002102f20082005290350370000200841086a22022003290300370000200541086a22072009290300370300200541106a2200200d290300370300200541186a220e200129030037030020052005290320370300200c100520014200370300200d42003703002009420037030020054200370320200a1001220f2900002106200b200f41086a29000037030020052006370340200f102f2009200b2903003703002005200529034037032041d882c400ad4280808080a001841001220f29000021062003200f41086a29000037030020052006370350200f102f2008200529035037000020022003290300370000200720092903003703002000200d290300370300200e200129030037030020052005290320370300200c100520014200370300200d42003703002009420037030020054200370320200a1001220f290000210a200b200f41086a2900003703002005200a370340200f102f2009200b2903003703002005200529034037032041c0ebc300ad4280808080b001841001220b290000210a2003200b41086a2900003703002005200a370350200b102f2008200529035037000020022003290300370000200720092903003703002000200d290300370300200e200129030037030020052005290320370300200c10130b200541e0006a24000f0b1036000b90a2010c017f017e017f047e037f027e0e7f067e117f027e027f047e230041f00a6b22012400200141003602d803200142013703d00302400240024002400240024020004180ee05700d0041c6b5c400ad4280808080f000842202100122032900002104200329000821052003102f41ebdec700ad4280808080f00084100122032900002106200329000821072003102f200120073702a807200120063702a00720012005370298072001200437029007200141d8046a20014190076a412010aa0220012902dc04420020012802d80422031b21042003410120031b2103024020012802d403450d0020012802d003102f0b200120043702d403200120033602d0032001200141d0036a3602dc032002100122032900002102200329000821042003102f41e4d8c400ad42808080803084100122032900002105200329000821062003102f200120063702a807200120053702a00720012004370298072001200237029007200141b8036a20014190076a4120109c01200141b8036a41106a290300210220012903c003210420012802b8032103200141e0036a41e7d8c400411010ac04200141003a00f8042002420020031b21062004420020031b2107200141e0036a21084120210341002109024002400240024002400340200141003a00900720014190076a20082003410047220a10e8061a024020030d00200141003a0090070b2003200a490d01200141d8046a20096a20012d0090073a00002001200941016a22093a00f8042003200a6b21032008200a6a210820094120470d000b20012903d804210420012903e004210520012903e804210b20012903f004210c4100210d200141d8046a410041800210e7061a4200210220014188076a420037030020014180076a4200370300200141f8066a200c370300200141f0066a200b370300200141e8066a2005370300200120043703e006200141c0003602d8064108210e024020012802dc0341086a2802000d00410021090c050b41c6b5c400ad4280808080f00084100122032900002104200329000821052003102f418c91c700ad4280808080a0018410012203290000210b2003290008210c2003102f2001200c3702a8072001200b3702a0072001200537029807200120043702900720014180096a20014190076a10ad040240024020012802800922030d00410021090c010b20014190076aad428080808080048410052001290284092202422088a721092003210e0b024020012802dc03220341046a280200220a200328020822086b20094f0d00200820096a22092008490d08200a41017422082009200820094b1b220941ffffff3f712009470d08200941057422094100480d0802400240200a0d002009102d210a0c010b2003280200200a41057420091031210a0b200a450d072003200a360200200341046a20094105763602000b418de6c300ad4280808080e00084100122032900002104200329000821052003102f419ce6c300ad4280808080e0008410012203290000210b2003290008210c2003102f2001200c3702a8072001200b3702a00720012005370298072001200437029007200141b0036a20014190076a412010950120012802dc0341086a28020041f4036a2203450d0120012802b403210920012802b003210a200141e4003a009107200141e40041d0860320036e22036b3a0090074100210f200120014190076a200341ff017141e4004b6a2d00004180fe126c20094100200a1b6a36028404200141003602900420014201370388042001410036029404200142003703a0042001420037039804200142003703e80a200142003703e00a200141d0046a20014184046a360200200141cc046a200141e00a6a360200200141a8046a41206a20014194046a360200200141c4046a20014198046a360200200141c0046a20014188046a360200200141bc046a200141d8046a3602002001200e2002422088a7220341e8006c220a6a3602b4042001200e3602b00420012002a722103602ac042001200e3602a8042001200141dc036a3602b8040240024002402003450d0020014190076a4101722111200141b8046a2112200e210303402001200341e8006a22083602b00420032d0000210920014180096a200341016a41e70010e8061a20094102460d01200120093a009007201120014180096a41e70010e8061a200141a00a6a201220014190076a10ae0420012903a00a4201510d0220082103200a41987f6a220a0d000b0b4108211102402010450d00200e102f0b410021100c010b200141e8096a41306a200141a00a6a41386a2903002202370300200141e8096a41286a200141a00a6a41306a2903002204370300200141e8096a41206a200141a00a6a41286a2903002205370300200141c8086a41086a2211200141a00a6a41106a290300370300200141c8086a41106a2212200141a00a6a41186a290300370300200141c8086a41186a2208200141a00a6a41206a290300370300200141c8086a41206a220a2005370300200141c8086a41286a22092004370300200141c8086a41306a22032002370300200120012903a80a3703c80820014190086a41306a220e200329030037030020014190086a41286a2203200929030037030020014190086a41206a2209200a29030037030020014190086a41186a220a200829030037030020014190086a41106a2208201229030037030020014190086a41086a22122011290300370300200120012903c808370390084138102d2211450d072011200129039008370300201141306a200e290300370300201141286a2003290300370300201141206a2009290300370300201141186a200a290300370300201141106a2008290300370300201141086a20122903003703002012200141a8046a41086a29030022023703002003200141a8046a41286a2802003602002009200141a8046a41206a290300370300200a200141a8046a41186a2903003703002008200141a8046a41106a290300370300200120012903a80437039008024002402002a72209200128029c082208470d004101210f410121100c010b200841987f6a2113200141a00a6a41086a211420014190076a410172211220014190086a41106a210e4101210f4101211003402009210303402001200341e8006a220a3602980820032d0000210920014180096a200341016a41e70010e8061a20094102460d02200120093a009007201220014180096a41e70010e8061a200141a00a6a200e20014190076a10ae04024020012903a00a4201510d00200a21032008200a470d010c030b0b200141e8096a41306a201441306a2903002202370300200141e8096a41286a201441286a2903002204370300200141e8096a41206a201441206a2903002205370300200141c8086a41086a2209201441086a290300370300200141c8086a41106a220a201441106a290300370300200141c8086a41186a2215201441186a290300370300200141c8086a41206a22162005370300200141c8086a41286a22172004370300200141c8086a41306a22182002370300200120142903003703c80820014190076a41306a2219201829030037030020014190076a41286a2218201729030037030020014190076a41206a2217201629030037030020014190076a41186a2216201529030037030020014190076a41106a2215200a29030037030020014190076a41086a221a2009290300370300200120012903c8083703900702402010200f470d00200f41016a2209200f490d0b200f410174220a2009200a20094b1bad42387e2202422088a70d0b2002a722094100480d0b02400240200f0d002009102d21110c010b2011200f41386c2009103121110b2011450d0a200941386e21100b200341e8006a21092011200f41386c6a220a200129039007370300200a41306a2019290300370300200a41286a2018290300370300200a41206a2017290300370300200a41186a2016290300370300200a41106a2015290300370300200a41086a201a290300370300200f41016a210f20132003470d000b0b200128029408450d00200128029008102f0b41c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41d7b5c400ad4280808080d000841001220329000021052003290008210b2003102f2001200b3702a807200120053702a0072001200437029807200120023702900720014190076aad4280808080800484220b1013024020012903980420014198046a41086a29030084500d00024002402001280290042203450d002001280288042109200141d8046a2003417f6a10af04220a2003490d0141acd9c400200a2003103b000b20014180096a10e80320014190076a41bcd9c40010b402200141a00a6a20014180096a20014190076a200129039804200141a0046a290300410110f2020c010b2009200a4105746a200128028404200129039804200141a0046a29030010b0040b024020012903e00a2202200141e00a6a41086a290300220484500d0020014180096a41bcd9c40010b40220014190076a10e803200141a00a6a20014180096a20014190076a20012903e00a200141e80a6a290300410110f2024200200620047d2007200254ad7d2204200720027d2202200756200420065620042006511b22031b21064200200220031b21070b410021090240200f450d00200f41386c2109201141046a2108200141d8046a200128029404417f6a10af04210e2011210303402008210a2009450d0402402003290328200341306a29030084500d00200941486a2109200a41386a210820032802002112200341386a21032012200e4d0d010b0b20014180096a41186a200a41186a29000037030020014180096a41106a200a41106a29000037030020014180096a41086a200a41086a2900003703002001200a290000370380094100210a410021144101210e0240200f41386c2212450d00201241386d220341ffffff3f712003470d09200341057422034100480d092003102d220e450d08200341057621140b41002108200e210303402011200a6a220941046a29020021022009410c6a2902002104200941146a2902002105200341186a2009411c6a290200370000200341106a2005370000200341086a200437000020032002370000200341206a2103200841016a21082012200a41386a220a470d000b02402010450d002011102f0b20012802dc032203280200200328020810870120012802dc03220328020821092003280200210a41c6b5c400ad4280808080f000842202100122032900002104200329000821052003102f41ebdec700ad4280808080f0008410012203290000210c2003290008211b2003102f2001201b3702a8072001200c3702a00720012005370298072001200437029007200120014190076a3602a00a200141203602a40a200a2009200141a00a6a10ad012002100122032900002102200329000821042003102f419ab6c400ad4280808080c000841001220329000021052003290008210c2003102f2001200c3702a807200120053702a007200120043702980720012002370290074120102d2203450d072003200129038009370000200341186a20014180096a41186a2209290300370000200341106a20014180096a41106a220a290300370000200341086a20014180096a41086a2212290300370000200b2003ad428080808080048410042003102f20014190076a41086a41063a000020014199076a200129038009370000200141a1076a2012290300370000200141a9076a200a290300370000200141b1076a2009290300370000200141c4076a2008360200200141c0076a2014360200200141bc076a200e360200200141123a00900741c8e1ca00410020014190076a108c01410121090b20014180096a41bcd9c40010b40220014190076a20014180096a108d0220014198076a2903002102200129039007210441c6b5c400ad4280808080f000841001220329000021052003290008210c2003102f41e4d8c400ad4280808080308410012203290000211b2003290008211c2003102f2001201c3702a8072001201b3702a0072001200c37029807200120053702900720014200200420077d22052005200456200220067d2004200754ad7d220420025620042002511b22031b4201884200200420031b2202423f8684220442808094f6c2d7e8d800200442808094f6c2d7e8d80054410020024201882202501b22031b220420077c22073703800920012002420020031b20067c2007200454ad7c220637038809200b20014180096aad4280808080800284100420090d032010450d032011102f0c030b200a2003104b000b4180d9c4004119419cd9c4001039000b41cbd9c40041d70041a4dac4001055000b0240200128028c04450d00200128028804102f0b20012802dc0341086a28020021090b41c6b5c400ad4280808080f00084221b100122032900002102200329000821042003102f41cdb5c400ad4280808080a001841001220329000021052003290008210b2003102f2001200b3702a807200120053702a00720012004370298072001200237029007200141a8036a20014190076a41201095014108211002400240410020012802ac03410020012802a8031b220320096b2209200920034b1b2203410a2003410a491b22090d00410021140c010b201b100122032900002102200329000821042003102f41b4dac400ad4280808080c000841001220329000021052003290008210b2003102f2001200b3702a807200120053702a0072001200437029807200120023702900720014180096a20014190076a10ad04024020012802800922190d00410021140c010b024002400240200129028409221d422088a722110d00201da72103410821104100210d410021140c010b0240024020110d0041002114410821104100210d0c010b20112009200920114b1b210e201941286a2103410021184100210d4100211441082110420021024200210441002112410021094100210a024002400340024002402012200e4f0d00024002400240200341106a2903002205200341186a290300220b84500d00200220057c220c2007562004200b7c200c200254ad7c220420065620042006511b450d01200c21020c030b201841ff01710d0220014180096a41186a2208200341386a29000037030020014180096a41106a220f200341306a29000037030020014180096a41086a2213200341286a2900003703002001200341206a2900003703800902400240200341586a2d00004101470d002001200341596a221541036a28000036009307200341086a2903002105200341606a2216290000210b201641086a290000210c201528000021152003290300211c200141a8046a41086a200341706a221641086a2d00003a00002001201536029007200120162900003703a804410121150c010b200341606a2215290300210b201541086a290300210c410021150b20014190086a41186a2216200829030037030020014190086a41106a2217200f29030037030020014190086a41086a220f2013290300370300200141e00a6a41086a2213200141a8046a41086a29030037030020012001290380093703900820012001280290073602a00a20012001280093073600a30a200120012903a8043703e00a0240200d2014470d00200d41016a2208200d490d0e200d41017422142008201420084b1bad42e8007e221e422088a70d0e201ea722084100480d0e02400240200d0d002008102d21100c010b2010200d41e8006c2008103121100b2010450d0d200841e8006e21140b2010200d41e8006c6a220820153a0000200841106a200c370300200841086a200b370300200820012802a00a360001200841046a20012800a30a3600002013290300210b20012903e00a210c200841c0006a420037030020084200370338200841306a2005370300200841286a201c370300200841186a200c370300200841206a200b3703002008200129039008370348200841d0006a200f290300370300200841d8006a2017290300370300200841e0006a2016290300370300410121180c010b20014180096a41186a2208200341386a29000037030020014180096a41106a220f200341306a29000037030020014180096a41086a2213200341286a2900003703002001200341206a2900003703800902400240200341586a2d00004101470d002001200341596a221541036a28000036009307200341086a2903002102200341606a2216290000211c201641086a290000211e201528000021152003290300211f200141a8046a41086a200341706a221641086a2d00003a00002001201536029007200120162900003703a804410121150c010b200341606a2215290300211c201541086a290300211e410021150b200141a00a6a41186a22162008290300370300200141a00a6a41106a2217200f290300370300200141a00a6a41086a220f201329030037030020014190086a41086a2213200141a8046a41086a29030037030020012001290380093703a00a20012001280290073602e80920012001280093073600eb09200120012903a804370390080240200d2014470d00200d41016a2208200d490d0d200d41017422142008201420084b1bad42e8007e2220422088a70d0d2020a722084100480d0d02400240200d0d002008102d21100c010b2010200d41e8006c2008103121100b2010450d0c200841e8006e21140b2010200d41e8006c6a220820153a0000200841106a201e370300200841086a201c370300200820012802e809360001200841046a20012800eb093600002013290300211c200129039008211e200841c0006a200b37030020082005370338200841306a2002370300200841286a201f370300200841186a201e370300200841206a201c370300200820012903a00a370348200841d0006a200f290300370300200841d8006a2017290300370300200841e0006a2016290300370300200c21020b200941016a2109201241016a2112200d41016a210d0c010b024020090d00410021090c010b200a20096b220820114f0d0220014190076a2003200941987f6c6a41586a220841e80010e8061a2008200341586a220f41e80010e9061a200f20014190076a41e80010e8061a0b200341e8006a21032011200a41016a220a460d020c000b0b4188bbca0020082011103b000b02402009417f6a20114f0d00201d42ffffffff0f83201120096bad42208684211d0b2012450d0041c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41b4dac400ad4280808080c00084100122032900002105200329000821062003102f200120063702a807200120053702a0072001200437029807200120023702900720014180096a2019201d422088a710b10420014190076aad42808080808004842001350288094220862001280280092209ad841004201da721030240200128028409450d002009102f0b20030d020c030b201da721030b2003450d010b2019102f0b201b100122032900002102200329000821042003102f418c91c700ad4280808080a00184100122032900002105200329000821062003102f200120063702a807200120053702a0072001200437029807200120023702900720014180096a2010200d10b10420014190076aad42808080808004842001350288094220862001280280092203ad8410040240200128028409450d002003102f0b41002103024020012802dc03221141086a2802002209410276220a450d0041002103200a2009460d004100210a0340200a41026a21032009200a41046a411e71762208450d012003210a20082009470d000b0b410021120340024020124101742212410172220aad220220027e2202422088a70d002012200a2002a720092003411f71764b1b21120b02402003450d0041002003417e6a220a200a20034b1b21030c010b0b02402012450d0002400240200d41e8006c220e450d00201041c8006a210f4100210d0c010b2012417f6a210a03402009450d07200141d8046a2009417f6a10af04220320094f0d08200a450d02200a417f6a210a20012802dc0328020821090c000b0b03402009450d062011280200210a200141d8046a2009417f6a10af04220320094f0d07200d41016a210d200a20034105746a2111200e2108200f2109034020014190076a2009201110b2042001350298072102200128029007210a4101102d2203450d04200341003a00002002422086200aad842003ad4280808080108410042003102f0240200128029407450d00200a102f0b200941e8006a2109200841987f6a22080d000b200d2012460d0120012802dc03221128020821090c000b0b2014450d002010102f0b0240024002400240024002400240024020004180a70c70220d0d00024020012802d8030d0041c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41ebdec700ad4280808080f00084100122032900002105200329000821062003102f200120063702a807200120053702a00720012004370298072001200237029007200141d8046a20014190076a412010aa0220012902dc04420020012802d80422031b21022003410120031b2103024020012802d403450d0020012802d003102f0b200120033602d003200120023702d4032002428080808010540d010b41c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41e4dac400ad4280808080800184100122032900002105200329000821062003102f200120063702a807200120053702a00720012004370298072001200237029007200141d8046a20014190076a412010ad02024020012d00d8044101470d00200141e1046a2800002103200141e5046a2800002109200141e9046a280000210a200141ed046a2800002108200141f1046a280000211120012800d904211220012800dd04210e2001200141f5046a2800003602f404200120113602f004200120083602ec042001200a3602e804200120093602e404200120033602e0042001200e3602dc04200120123602d8040240024020012802d8032209450d0020012802d0032103200941057421094100211141002112034020014190076a200310b304200128029007220820012802980710b40441ff0171210a0240200128029407450d002008102f0b024002400240200a417e6a220a41014b0d00200a0e020102010b201141016a21110c010b201241016a21120b200341206a2103200941606a22090d000b201220114a0d010b200141d8046a10b50441c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41ebdec700ad4280808080f00084100122032900002105200329000821062003102f200120063702a807200120053702a0072001200437029807200120023702900720014180096a20014190076a412010aa02200129028409420020012802800922031b21022003410120031b2103024020012802d403450d0020012802d003102f0b200120023702d403200120033602d0030b41c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41ecdac400ad4280808080d00184100122032900002105200329000821062003102f200120063702a807200120053702a0072001200437029807200120023702900720014190076aad428080808080048410130b024020012802d80341024d0d0020014180096a41f9dac400411110ac04200141003a00f80420014180096a210841202103410021090340200141003a00900720014190076a20082003410047220a10e8061a024020030d00200141003a0090070b2003200a490d03200141d8046a20096a20012d0090073a00002001200941016a22093a00f8042003200a6b21032008200a6a210820094120470d000b20012903d804210220012903e004210420012903e804210520012903f0042106200141d8046a410041800210e7061a20014188076a420037030020014180076a4200370300200141f8066a2006370300200141f0066a2005370300200141e8066a2004370300200120023703e006200141c0003602d80620012802d8032203417f6a2209450d032003450d04024002402003417e6a2209450d0020012802d003210a200141d8046a2003417d6a10af0422082009490d0141acd9c40020082009103b000b41b8dac400411c418cdbc4001055000b41c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41e4dac400ad4280808080800184100122032900002105200329000821062003102f200120063702a807200120053702a007200120043702980720012002370290074120102d2203450d092003200a41206a20084105746a2209290000370000200341186a200941186a220a290000370000200341106a200941106a2208290000370000200341086a200941086a221129000037000020014190076aad42808080808004842003ad428080808080048410042003102f20014190076a41086a410a3a000020014199076a2009290000370000200141a1076a2011290000370000200141a9076a2008290000370000200141b1076a200a290000370000200141123a00900741c8e1ca00410020014190076a108c010c010b41c6b5c400ad4280808080f00084100122032900002102200329000821042003102f41e4dac400ad4280808080800184100122032900002105200329000821062003102f200120063702a807200120053702a0072001200437029807200120023702900720014190076aad428080808080048410050b024020012802d403450d0020012802d003102f0b20014190076a41186a2208420037030020014190076a41106a2203420037030020014190076a41086a220942003703002001420037039007418de6c300ad4280808080e000841001220a29000021022009200a41086a2900003703002001200237039007200a102f41a2e6c300ad4280808080a001841001220a2900002102200141d8046a41086a2211200a41086a290000370300200120023703d804200a102f200320012903d804220237030020014180096a41086a200929030037030020014180096a41106a200237030020014180096a41186a2011290300370300200120012903900737038009200141d8046a20014180096a412010ad0220012d00d804210a2008200141f1046a2900003703002003200141e9046a2900003703002009200141e1046a290000370300200120012900d9043703900702400240200a4101460d00200141a00a6a41186a4200370300200141a00a6a41106a4200370300200141a00a6a41086a4200370300200142003703a00a0c010b200141a00a6a41186a2008290300370300200141a00a6a41106a2003290300370300200141a00a6a41086a200929030037030020012001290390073703a00a0b20014190076a41186a2208420037030020014190076a41106a2211420037030020014190076a41086a22094200370300200142003703900741dcbec600ad42808080808003841001220a29000021022009200a41086a2900003703002001200237039007200a102f41f4bec600ad4280808080e001841001220a2900002102200141d8046a41086a2212200a41086a290000370300200120023703d804200a102f200320012903d804370000200341086a201229030037000020014180096a41086a200929030037030020014180096a41106a201129030037030020014180096a41186a2008290300370300200120012903900737038009200141e8096a20014180096a412010aa02024002400240024020012802e80922030d002008200141a00a6a41186a2903003703002011200141a00a6a41106a2903003703002009200141a00a6a41086a290300370300200120012903a00a37039007410121034100210920014190076a210a410021120c010b20012902ec092202a7210802402002422088a7221141d100490d00200141d8046a41186a220a200141a00a6a41186a290300370300200141d8046a41106a2212200141a00a6a41106a290300370300200141d8046a41086a220e200141a00a6a41086a290300370300200120012903a00a3703d8042000417f6a41d10070220920114f0d07200320094105746a220920012903d804370000200941186a200a290300370000200941106a2012290300370000200941086a200e290300370000200821090c030b200141e8096a41086a280200211220012802ec09210920014190076a41186a200141a00a6a41186a29030037030020014190076a41106a200141a00a6a41106a29030037030020014190076a41086a200141a00a6a41086a290300370300200120012903a00a37039007024020112008460d0020014190076a210a20082109201121120c020b20014190076a210a20092011470d010b200941016a22082009490d0a200941017422112008201120084b1b220841ffffff3f712008470d0a200841057422084100480d0a0240024020090d002008102d21030c010b200320094105742008103121030b2003450d09200841057621090b200320124105746a2208200a290000370000200841186a200a41186a290000370000200841106a200a41106a290000370000200841086a200a41086a290000370000201241016a21110b200141d8046a41186a4200370300200141d8046a41106a22124200370300200141d8046a41086a220a4200370300200142003703d80441dcbec600ad4280808080800384100122082900002102200a200841086a290000370300200120023703d8042008102f41f4bec600ad4280808080e0018410012208290000210220014180096a41086a220e200841086a29000037030020012002370380092008102f2012200129038009220237030020014190076a41086a200a29030037030020014190076a41106a200237030020014190076a41186a200e290300370300200120012903d804370390070240024020030d0020014190076aad428080808080048410050c010b200141203602dc04200120014190076a3602d80420032011200141d8046a1083012009450d002003102f0b0240200d0d0010b6040b0240200041809c3170450d00200141a00a6a21210c070b20014180096a41186a420037030020014180096a41106a220a420037030020014180096a41086a220342003703002001420037038009419298ca00ad4280808080900184100122092900002102200141a8046a41086a2208200941086a290000370300200120023703a8042009102f20032008290300370300200120012903a8043703800941a898ca00ad4280808080d0028410012209290000210220014190086a41086a2208200941086a29000037030020012002370390082009102f200a2001290390082202370300200141a00a6a41086a2003290300370300200141a00a6a41106a2002370300200141a00a6a41186a200829030037030020012001290380093703a00a02400240200141a00a6a10f702220341ff01714102460d00200141a00a6aad4280808080800484100520034101710d010b200141d8046a200010a40220012d00d8044104460d0520014190076a200010a7020c060b200141d8046a200010a70220012d00d8044104460d0420014190076a200010a4020c050b200a2003104b000b41014100104b000b20094100104a000b419cc3ca0020092011103b000b200141043a0090070b200141a00a6a21210b20014180096a41186a2217420037030020014180096a41106a2222420037030020014180096a41086a220f42003703002001420037038009419298ca00ad42808080809001842202100122092900002104200141a8046a41086a2203200941086a290000370300200120043703a8042009102f200f2003290300370300200120012903a80437038009419b98ca00ad4280808080d001841001220a290000210420014190086a41086a2209200a41086a2900003703002001200437039008200a102f20222001290390082204370300200141a00a6a41086a2208200f290300370300200141a00a6a41106a22112004370300200141a00a6a41186a2212200929030037030020012001290380093703a00a200141a0036a2021412010950120012802a403210d20012802a003210e2017420037030020224200370300200f4200370300200142003703800920021001220a29000021022003200a41086a290000370300200120023703a804200a102f200f2003290300370300200120012903a80437038009418398ca00ad4280808080f001841001220329000021022009200341086a29000037030020012002370390082003102f202220012903900822023703002008200f290300370300201120023703002012200929030037030020012001290380093703a00a20014198036a2021412010950141002123024002400240200d4100200e1b2203200128029c0341002001280298031b220a4f0d00200141d8046a410472210920014181056a21120340200141d8046a200310b802024020012d00800522114103460d0020014190076a41086a200941086a290200220237030020014190076a41106a200941106a290200220437030020014190076a41186a200941186a290200220537030020014190076a41206a200941206a280200220836020020014190086a41026a220d201241026a2d00003a000020012009290200220637039007200120122f00003b01900820012802d804210e200141d8046a41086a22102002370300200141d8046a41106a22142004370300200141d8046a41186a22132005370300200141d8046a41206a22152008360200200120063703d804200141c8086a41026a2216200d2d00003a0000200120012f0190083b01c808410321080240200e2000470d0020014180096a41206a20152802003602002017201329030037030020222014290300370300200f2010290300370300200141a8046a41026a20162d00003a0000200120012903d80437038009200120012f01c8083b01a80420032118201121080b20084103470d030b200a200341016a2203470d000b0b41042124410021090c010b200141a00a6a41206a20014180096a41206a2802002209360200200141a00a6a41186a20014180096a41186a2903002202370300200141a00a6a41106a20014180096a41106a2903002204370300200141a00a6a41086a20014180096a41086a2903002205370300200141e0036a41026a2211200141a8046a41026a2d00003a0000200141e8096a41086a22122005370300200141e8096a41106a220d2004370300200141e8096a41186a220e2002370300200141e8096a41206a220f2009360200200120012903800922023703a00a200120012f01a8043b01e003200120023703e809200141e00a6a41026a221020112d00003a0000200120012f01e0033b01e00a4130102d2224450d01410121092024200036020420242018360200202420012903e809370208202420083a002c202420012f01e00a3b002d202441106a2012290300370200202441186a200d290300370200202441206a200e290300370200202441286a200f2802003602002024412f6a20102d00003a000041012123200341016a2203200a4f0d00200141d8046a410472210920014181056a211202400340200141d8046a200310b802024020012d00800522114103460d0020014190076a41086a200941086a290200220237030020014190076a41106a200941106a290200220437030020014190076a41186a200941186a290200220537030020014190076a41206a200941206a280200220836020020014190086a41026a220d201241026a2d00003a000020012009290200220637039007200120122f00003b01900820012802d804210e200141d8046a41086a220f2002370300200141d8046a41106a22102004370300200141d8046a41186a22142005370300200141d8046a41206a22132008360200200120063703d804200141c8086a41026a2215200d2d00003a0000200120012f0190083b01c808410321080240200e2000470d0020014180096a41206a201328020036020020014180096a41186a201429030037030020014180096a41106a201029030037030020014180096a41086a200f290300370300200141a8046a41026a20152d00003a0000200120012903d80437038009200120012f01c8083b01a80420032116201121080b20084103470d020b200a200341016a2203470d000b41012109410121230c010b200141a00a6a41206a222520014180096a41206a22182802002209360200200141a00a6a41186a222620014180096a41186a22192903002202370300200141a00a6a41106a222720014180096a41106a221a2903002204370300200141a00a6a41086a222820014180096a41086a22292903002205370300200141e0036a41026a222a200141a8046a41026a222b2d00003a0000200141e8096a41086a222c2005370300200141e8096a41106a222d2004370300200141e8096a41186a222e2002370300200141e8096a41206a222f2009360200200120012903800922023703a00a200120012f01a8043b01e003200120023703e809200141e00a6a41026a2230202a2d00003a0000200120012f01e0033b01e00a200341016a2103200141d8046a410472211120014181056a210d41012109410121230340200141d8046a41086a2210202c290300370300200141d8046a41106a2214202d290300370300200141d8046a41186a2213202e290300370300200141d8046a41206a2215202f28020036020020014190076a41026a220e20302d00003a0000200120012903e8093703d804200120012f01e00a3b019007024020232009470d00200941016a22122009490d042009410174220f2012200f20124b1bad42307e2202422088a70d042002a722124100480d040240024020090d002012102d21240c010b2024200941306c2012103121240b2024450d03201241306e21230b2024200941306c6a22122000360204201220163602002015280200210f20132903002102201429030021042010290300210520012903d80421062012412c6a20083a0000201241086a2006370200201241106a2005370200201241186a2004370200201241206a2002370200201241286a200f3602002012412d6a20012f0190073b00002012412f6a200e2d00003a0000200941016a21092003200a4f0d0102400340200141d8046a200310b802024020012d00800522124103460d0020014190076a41086a201141086a290200220237030020014190076a41106a201141106a290200220437030020014190076a41186a201141186a290200220537030020014190076a41206a201141206a280200220836020020014190086a41026a220e200d41026a2d00003a0000200120112902002206370390072001200d2f00003b01900820012802d804210f20102002370300201420043703002013200537030020152008360200200120063703d804200141c8086a41026a2217200e2d00003a0000200120012f0190083b01c808410321080240200f2000470d002018201528020036020020192013290300370300201a201429030037030020292010290300370300202b20172d00003a0000200120012903d80437038009200120012f01c8083b01a80420032116201221080b20084103470d020b200a200341016a2203470d000c030b0b2025201828020022123602002026201929030022023703002027201a2903002204370300202820292903002205370300202a202b2d00003a0000202c2005370300202d2004370300202e2002370300202f2012360200200120012903800922023703a00a200120012f01a8043b01e003200120023703e8092030202a2d00003a0000200120012f01e0033b01e00a200341016a21030c000b0b2009450d022024200941306c6a2131200141d8046aad4280808080800484213220014180096aad4280808080c000842133200141d8046a4104722103200141a00a6a41106a212c200141d8046a41186a21112024212a0340202a41086a2802002126202a28020021082011202a41246a290200370300200141d8046a41106a2213202a411c6a290200370300200141d8046a41086a2212202a41146a2902003703002001202a410c6a2902003703d804202a412c6a2d000022164103460d03200141c8086a41186a20112903002202370300200141c8086a41106a20132903002204370300200141c8086a41086a20122903002205370300200120012903d80422063703c808200141e8096a41186a22282002370300200141e8096a41106a22342004370300200141e8096a41086a22352005370300200120063703e80920014190076a200810a902200128029007210f0240024020012802980722090d00420021074200210b4200210c4200211b4200211c4200211e0c010b2009410574210d4200211c200f21094200211e4200210c4200211b420021074200210b0340200141d8046a2009108d02201129030021052012290300210220012903e804210620012903d804210420032009290000370000200341086a200941086a290000370000200341106a200941106a290000370000200341186a200941186a290000370000200120083602d804427f200220057c200420067c2205200454220aad7c2204200a200420025420042002511b220a1b2104427f2005200a1b210220014190036a200141d8046a10ab0220012d009003410171210a0240024020012d009103220e450d00200141f0026a20044200200ead2205420010ed0620014180036a200242002005420010ed06200141e0026a420042002002420010ed06427f20014180036a41086a290300220520012903f00220012903e0027c7c220620012903f80220012903e80284420052200620055472220e1b2105427f200129038003200e1b21060c010b200141d0026a20022004420a420010ee0620012903d00222062102200141d0026a41086a290300220521040b200941206a210942002005200a1b201b7c42002006200a1b221b200c7c220c201b54ad7c211b20054200200a1b200b7c20064200200a1b220520077c2207200554ad7c210b2004201e7c2002201c7c221c200254ad7c211e200d41606a220d0d000b0b0240200128029407450d00200f102f0b20014190076a200810a90220012802900721150240024020012802980722090d004200210242002106420021044200211f420021054200211d0c010b2009410574210d42002105201521094200211d420021044200211f4200210242002106034020032009290000370000200341086a200941086a220a290000370000200341106a200941106a220e290000370000200341186a200941186a220f290000370000200120083602d804200141c8026a200141d8046a10ab0220012d00c802211020012d00c90221142011200f2900003703002013200e2900003703002012200a290000370300200120092900003703d804200141a8026a2008200141d8046a2014411010ac02200141a8026a41186a290300201d7c20012903b802221d20057c2205201d54ad7c211d4200200141a8026a41086a29030022202010410171220a1b201f7c420020012903a8022236200a1b221f20047c2204201f54ad7c211f20204200200a1b20067c20364200200a1b220620027c2202200654ad7c2106200941206a2109200d41606a220d0d000b0b0240200128029407450d002015102f0b200141a00a6a41186a222f4200370300202c4200370300200141a00a6a41086a222d4200370300200142003703a00a41e7a2ca00ad4280808080800184100122092900002120202d200941086a290000370300200120203703a00a2009102f41ecb5c600ad4280808080d00184100122092900002120200141a8046a41086a222e200941086a290000370300200120203703a8042009102f202c20012903a804370300202c41086a2227202e29030037030020014190086a41086a2210202d29030037030020014190086a41106a2214202c29030037030020014190086a41186a2215202f290300370300200120012903a00a3703900820014190026a20014190086a4120109c0120014190026a41106a2903002136200128029002210a2001290398022137201f201b7c21382004200c7c2220200454ad21392006200b7c2106200220077c221f200254ad21074100210902402005201c7c220b420288201d201e7c200b200554ad7c220c423e86842202200c420288220484500d002002200b852004200c8584500d0041002109034020014180026a200b200c200941046a41fe007110ec06200941026a2109200129038002220220014180026a41086a290300220484500d012002200b852004200c85844200520d000b0b202a41306a212a20364200200a1b211b20374200200a1b211c203820397c211d200620077c211e42002106420021040340200141e0016a20044201862006423f888422044200200642018622064201842202420010ed06200141f0016a200242002002420010ed060240200420012903e801220584200584420052200141f0016a41086a290300220520012903e001220720077c7c2207200554720d0020012903f0012105200141d0016a200b200c200941ff007110ec0620042004200520012903d001562007200141d0016a41086a29030022055620072005511b220a1b210420062002200a1b21060b02402009450d0041002009417e6a220a200a20094b1b21090c010b0b410021090240201c420288201b423e86842202201b420288220584500d002002201c852005201b8584500d00410021090340200141c0016a201c201b200941046a41fe007110ec06200941026a210920012903c0012202200141c0016a41086a290300220584500d012002201c852005201b85844200520d000b0b42002105420021020340200141a0016a20024201862005423f888422024200200542018622054201842207420010ed06200141b0016a200742002007420010ed060240200220012903a801220b84200b84420052200141b0016a41086a290300220b20012903a001220c200c7c7c220c200b54720d0020012903b001210b20014190016a201c201b200941ff007110ec0620022002200b20012903900156200c20014190016a41086a290300220b56200c200b511b220a1b210220052007200a1b21050b02402009450d0041002009417e6a220a200a20094b1b21090c010b0b02400240024002400240200620048450450d004100210f0c010b02400240024020160e03010200010b201f202056201e201d56201e201d511b210f0c020b0340200141c0006a2020201d2006200410ee062005220b2002220c844200510d04200141c0006a41086a290300210220012903402105200141306a201f201e200b200c10ee064101210f20052001290330221b542002200141306a41086a290300220754200220075122091b0d020240201b200554200720025420091b450d004100210f0c030b200141206a200520022006200410ed06200141106a201b2007200b200c10ed060240201f200129031022027d2207201e200141106a41086a2903007d201f200254ad7d220284500d00201d200141206a41086a2903007d211b202020012903202205542109202020057d21052006211f2004211e2007210620022104200b2120200c211d2005201b2009ad7d220284500d030c010b0b4100210f0c010b0340200421072006210b20052002844200510d02200141f0006a201f201e200b200710ee0620014180016a2020201d2005200210ee064101210f200129038001220c2001290370221b5420014180016a41086a2903002204200141f0006a41086a290300220654200420065122091b0d010240201b200c54200620045420091b450d004100210f0c020b200141e0006a200c20042005200210ed06200141d0006a201b2006200b200710ed060240201f200129035022047d220c201e200141d0006a41086a2903007d201f200454ad7d22048450450d004100210f0c020b201d200141e0006a41086a2903007d211b202020012903602206542109202020067d21062005211f2002211e200c210520042102200b21202007211d2006201b2009ad7d2204844200520d000b0b200141d8046a200810a90220012802d804213020012802dc04212520012802e0042209450d022030200941057422196a212b203021090240034020014180096a41186a220a200941186a221629000037030020014180096a41106a220d200941106a221729000037030020014180096a41086a220e200941086a2218290000370300200120092900003703800920092900002102200341186a221a201629000037000020032002370000200341086a22162018290000370000200341106a22182017290000370000200120083602d804200141086a200141d8046a10ab022010200e2903003703002014200d2903003703002015200a2903003703002001200129038009370390080240200f20012d000841017145734101470d0020012d00092129200941206a21090c020b200941206a2109201941606a22190d000c040b0b034020014190076a41186a2015290300220237030020014190076a41106a2014290300220437030020014190076a41086a201029030022053703002001200129039008220637039007201120023703002013200437030020122005370300200120063703d804419298ca00ad4280808080900184100122172900002102202e201741086a290000370300200120023703a8042017102f41f9b5c600ad4280808080d000841001221729000021022010201741086a29000037030020012002370390082017102f4120102d2217450d05201720012903d804370000201741186a2011290300370000201741106a2013290300370000201741086a20122903003700002017ad4280808080800484100322192900002102201941086a2900002104201941106a2900002105200a201941186a290000370300200d2005370300200e200437030020012002370380092019102f2017102f41c000102d2217450d05201720012903a80437000020172001290390083700102017200129038009370020201741086a202e290300370000201741186a2010290300370000201741286a200e290300370000201741306a200d290300370000201741386a200a2903003700002001202941187441187541027441d897ca006a2802004180de346c20006a360280092017ad4280808080800884203310042017102f200142e4cab5fbb6ccdcb0e3003703e003200141e0036a200141d8046a10d2022009202b460d0302400340200a200941186a2217290000370300200d200941106a2219290000370300200e200941086a22292900003703002001200929000037038009200120083602d804202929000021022019290000210420092900002105201a20172900003700002018200437000020162002370000200320053700002001200141d8046a10ab022010200e2903003703002014200d2903003703002015200a290300370300200120012903800937039008200f20012d000041017145730d01202b200941206a2209470d000c050b0b20012d00012129200941206a21090c000b0b4180b2c000411941a0b1c0001039000b4180b2c000411941a0b1c0001039000b02402025450d002030102f0b200810af0202400240200f0d00200120083602e404200141053a00e004200141063a00d80441c8e1ca004100200141d8046a108c010c010b200120083602e404200141043a00e004200141063a00d80441c8e1ca004100200141d8046a108c0102400240024002402026450d0020014190076a41186a2216202829030037030020014190076a41106a2217203429030037030020014190076a41086a22182035290300370300200120012903e80937039007202f4200370300202c4200370300202d4200370300200142003703a00a419298ca00ad42808080809001842204100122092900002102202d200941086a290000370300200120023703a00a2009102f418ca8c200ad4280808080d001842205100122092900002102202e200941086a290000370300200120023703a8042009102f202c20012903a8043703002027202e2903003703002010202d2903003703002014202c2903003703002015202f290300370300200120012903a00a37039008202620006a2114200141d8046a20014190086a10c902024020012802d804220f0d004104210f41002119420021020c030b20012902dc042202a721194100210902402002422088a7221541014b0d0020150e020302030b2015210a03402009200a410176220d20096a220e2014200f200e41286c6a280200491b2109200a200d6b220a41014b0d000c020b0b201120282903003703002013203429030037030020122035290300370300200120012903e8093703d80420014190076a200141d8046a200810b1020c030b02402014200f200941286c6a280200220a460d0020092014200a4b6a21090b20112016290300370300201320172903003703002012201829030037030020012001290390073703d804200920154d0d01419ae3c300411e41f8b4ca001039000b20112016290300370300201320172903003703002012201829030037030020012001290390073703d80441002115410021090b024020152019470d0020152002a7470d00201541016a220a2015490d042015410174220d200a200d200a4b1bad42287e2202422088a70d042002a7220a4100480d040240024020150d00200a102d210f0c010b200f201541286c200a1031210f0b200f450d03200a41286ead21020b200f200941286c6a220a41286a200a201520096b41286c10e9061a200a2014360200200a20012903d804370204200a410c6a2012290300370200200a41146a2013290300370200200a411c6a2011290300370200200a2008360224202f4200370300202c4200370300202d4200370300200142003703a00a2004100122092900002104200141e00a6a41086a220a200941086a290000370300200120043703e00a2009102f202141086a200a290300370000202120012903e00a37000020051001220929000021042010200941086a29000037030020012004370390082009102f202c200129039008370000202720102903003700002012202d2903003703002013202c2903003703002011202f290300370300200120012903a00a3703d8040240200f0d00203210050c010b2002a7210920014180096a200f201541016a1081012032200135028809422086200128028009220aad8410040240200128028409450d00200a102f0b2009450d00200f102f0b202a2031470d000c030b0b1036000b1038000b02402023450d002024102f0b200141a00a6a41186a4200370300200141a00a6a41106a220a4200370300200141a00a6a41086a22034200370300200142003703a00a419298ca00ad42808080809001841001220929000021022003200941086a290000370300200120023703a00a2009102f418ca8c200ad4280808080d00184100122092900002102200141a8046a41086a2208200941086a290000370300200120023703a8042009102f200a20012903a804220237030020014190086a41086a200329030037030020014190086a41106a200237030020014190086a41186a2008290300370300200120012903a00a37039008200141d8046a20014190086a10c90220012802d8042203410420031b210e0240024020012902dc04420020031b2206422088a7220f450d00200e200f41286c6a210841002109200141d8046a41186a2111200141d8046a41106a2112200141d8046a41086a210d200e210302400340024020032802002000460d0020090d020c030b200341246a280200210a200341046a29000021022003410c6a2900002104200341146a290000210520112003411c6a29000037030020122005370300200d2004370300200120023703d80420014190076a200141d8046a200a10b102200941016a21092008200341286a2203470d000b0b2009200f4b0d0120014180096a41186a2208420037030020014180096a41106a2211420037030020014180096a41086a220342003703002001420037038009419298ca00ad42808080809001841001220a2900002102200141a8046a41086a2212200a41086a290000370300200120023703a804200a102f20032012290300370300200120012903a80437038009418ca8c200ad4280808080d001841001220a290000210220014190086a41086a2212200a41086a2900003703002001200237039008200a102f2022200129039008370000202241086a2012290300370000200141a00a6a41086a2003290300370300200141a00a6a41106a2011290300370300200141a00a6a41186a200829030037030020012001290380093703a00a200141d8046a200e200941286c6a200f20096b1081012021ad428080808080048420013502e00442208620012802d8042203ad84100420012802dc04450d002003102f0b02402006a7450d00200e102f0b200010fa03200141f00a6a24000f0b2009200f104b000b41b8dac400411c41d4dac4001055000b41acd9c40020032009103b000bca1e05057f027e047f0c7e017f230041c00b6b22042400200441a8066a200141c80310e8061a200441a0036a200441a8066a10d10341012105024002400240024002400240024002400240024020042d00a0034101460d00200441206a200441a0036a41086a41800310e8061a024020032802002206450d00200341086a280200210720032802042108200441186a4180e5c300411010950141002105200441a8066a200428021c410020042802181b10d20320042802a8062101200420042802b0063602a403200420013602a00320062007200441a0036a109d02024020042802ac06450d002001102f0b2008450d002006102f0b200441f0096a200441206a41d0006a10f102200441a8066a200441206a41800310e8061a20042903f00921090240024020042903c806220a4202520d00200420093703a0030240200441a0036a200210d303220141ff017141024622020d002002450d080b4100210b20042802f8064113470d0a200441a0036a200441fc066a10a20320042d00a0034101460d01200441cc036a2802002107200441c8036a280200210c200441c4036a2802002108200441bc036a280200210d200441b8036a280200210e0240200441c0036a2802002201450d002001410c6c2102200e210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b0240200d450d00200e102f0b02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200c450d0a2008102f0c0a0b200441900b6a41186a200441a8066a41186a290300370300200441900b6a41106a200441a8066a41106a290300370300200441900b6a41086a200441a8066a41086a290300370300200420042903a8063703900b200441e8066a290300210f200441e0066a2903002110200441f0066a280200210820042903d0062111200441a0036a41186a4200370300200441a0036a41106a220c4200370300200441a0036a41086a22014200370300200442003703a003418de6c300ad4280808080e000842212100122072900002113200441b00b6a41086a220e200741086a290000370300200420133703b00b2007102f2001200e290300370300200420042903b00b3703a003419ce6c300ad4280808080e00084100122072900002113200441a80a6a41086a220b200741086a290000370300200420133703a80a2007102f200c20042903a80a2213370300200441c80a6a41086a2001290300370300200441c80a6a41106a2013370300200441c80a6a41186a200b290300370300200420042903a0033703c80a200441106a200441c80a6a41201095010240200a4201520d0020114200510d030b201210012201290000210a200e200141086a2900003703002004200a3703b00b2001102f41f0e8c600ad4280808080f0008410012201290000210a200b200141086a2900003703002004200a3703a80a2001102f4120102d2201450d03200120042903900b370000200141186a200441900b6a41186a290300370000200141106a200441900b6a41106a290300370000200141086a200441900b6a41086a2903003700002001ad428080808080048410032207290000210a200741086a2900002112200741106a2900002113200441a0036a41186a220e200741186a290000370300200441a0036a41106a220b2013370300200441a0036a41086a220c20123703002004200a3703a0032007102f2001102f41c000102d2201450d03200120042903b00b370000200120042903a80a370010200120042903a003370020200141086a200441b00b6a41086a290300370000200141186a200441a80a6a41086a290300370000200141286a200c290300370000200141306a200b290300370000200141386a200e290300370000200441a0036a200110f6020240024020042903a0034201510d004200210a41002107420021124200211342002111420021144200211542002116420021174100210e0c010b200441b0036a2903002117200441c0036a2903002115200441b8036a2903002114200441a0036a41306a2903002111200441a0036a41286a2903002113200441e0036a2903002112200441a0036a41386a290300210a200441e8036a280200210720042903a803211620042802ec03210e0b2001102f024020072008470d00418de6c300ad4280808080e00084100122012900002118200441a80a6a41086a200141086a290000370300200420183703a80a2001102f41f0e8c600ad4280808080f00084100122012900002118200441a0036a41086a200141086a290000370300200420183703a0032001102f4120102d2201450d04200120042903900b370000200141186a200441900b6a41186a290300370000200141106a200441900b6a41106a290300370000200141086a200441900b6a41086a2903003700002001ad4280808080800484100322072900002118200741086a2900002119200741106a290000211a200441c80a6a41186a220b200741186a290000370300200441c80a6a41106a220c201a370300200441c80a6a41086a2019370300200420183703c80a2007102f2001102f41c000102d2201450d04200120042903a80a370000200141086a200441a80a6a41086a290300370000200120042903a003370010200141186a200441a0036a41086a290300370000200120042903c80a370020200141286a200441c80a6a41086a290300370000200141306a200c290300370000200141386a200b2903003700004104102d2207450d042007200841016a36000020074104410810312207450d042007200e3a000420074108411510312207450d04200720163700052007410d6a201737000020074115412a10312207450d04200720143700152007411d6a20153700002007412a41d40010312207450d042007200a370035200720133700252007413d6a20123700002007412d6a20113700002001ad42808080808008842007ad4280808080d0088410042007102f2001102f200420093703a0030240200441a0036a200210d303220141ff01714102470d00200420093703c80a200441a0036a2010200f200441900b6a200441c80a6a200210d403024020042d00a0034101460d00200441cc036a2802002107200441c8036a280200210b200441c4036a2802002108200441bc036a280200210c200441b8036a280200210e0240200441c0036a2802002201450d002001410c6c2102200e210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b0240200c450d00200e102f0b02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200b450d072008102f0c070b20042d00a10322014102460d0620042f01a20321020c070b20014180feff077141087621020c060b41034102200720084b1b2102410021010c050b20042d00a10322014102460d0820042f01a20341087420017221010c050b200020042f00a1033b0001200041013a0000200041036a20042d00a3033a000020032802002106410021000c050b41d0caca00411941eccaca001039000b1036000b200441a0036a200441a8066a41d0006a10e201024020042d00a0034101460d00200441cc036a2802002107200441c8036a280200210b200441c4036a2802002108200441bc036a280200210c200441b8036a280200210e0240200441c0036a2802002201450d002001410c6c2102200e210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b0240200c450d00200e102f0b02402007450d002007410c6c21022008210103400240200141046a280200450d002001280200102f0b2001410c6a2101200241746a22020d000b0b200b450d042008102f0c040b20042d00a10322014102460d0320042f01a20321020b2002410874200141ff01717221010b200441f8066a108e01200420042900980a3703880a20042004419f0a6a28000036008f0a200041036a20014110763a0000200020013b0001200041013a000020054521000b20000d022006450d02200341046a280200450d022006102f0c020b200441f00a6a41186a200441900b6a41186a290300370300200441f00a6a41106a200441900b6a41106a290300370300200441f00a6a41086a200441900b6a41086a290300370300200420042903900b3703f00a4101210b0b200441a80a6a41186a2208200441f00a6a41186a2201290300370300200441a80a6a41106a220e200441f00a6a41106a2202290300370300200441a80a6a41086a220c200441f00a6a41086a2207290300370300200420042903f00a3703a80a200441a0036a200441f8066a41b00210e8061a200441900b6a41186a220d2008290300370300200441900b6a41106a221b200e290300370300200441900b6a41086a2208200c290300370300200420042903a80a3703900b4102210e0240200b450d002001200d2903003703002002201b29030037030020072008290300370300200420042903900b3703f00a4101210e0b200441d20a6a2007290300370100200441da0a6a2002290300370100200441e20a6a20012903003701002004200e3a00c90a200420042903f00a3701ca0a41002101200441003a00c80a200441900b6a200441a0036a200441c80a6a108b01200420042900910b3703a003200420082800003600a703024020042d00900b220741044622080d00200420042800a7033600cf0a200420042903a0033703c80a0b200420042800cf0a36009f0a200420042903c80a3703980a2004200428009f0a36008f0a200420042903980a3703880a200441f8096a41086a2202200428008f0a360000200420042903880a3700f909200420073a00f8092009210a024020080d00200441f8096a108c03200228020021074101210120042903f809210a0b200441bc066a2009370200200441a8066a41106a2007360200200441a8066a41086a200a370300200441c4066a20042902a003370200200441cc066a200441a0036a41086a280200360200200420013a00ac06200420042f00c80a3b00ad06200441003a00a8062004200441ca0a6a2d00003a00af0641c8e1ca004100200441a8066a108c01200441086a4180e5c30041101095012004200428020c41016a410120042802081b3602a8064180e5c300ad4280808080800284200441a8066aad4280808080c0008410042000410c6a2002280200360200200041046a20042903f809370200200041003a00002006450d002005450d00200341046a280200450d002006102f0b200441c00b6a24000be22007017f027e027f017e057f037e037f23004190116b2202240042022103024002400240024002400240024002400240200129036822044202520d00200241186a20014198016a41b00210e8061a0c010b20024196036a200141246a41c20010e8061a200241d8036a41086a220520014188016a290300370300200241d8036a41106a220620014190016a290300370300200220014180016a2903003703d803200141f8006a29030021032001290370210720024190046a41206a200141206a28020036020020024190046a41186a200141186a29020037030020024190046a41106a200141106a29020037030020024190046a41086a200141086a2902003703002002200129020037039004200241c80a6a20024190046a10bb0120024190086a41086a2208200241d10a6a29000037030020024190086a41106a2209200241d90a6a29000037030020024190086a41186a220a200241e10a6a290000370300200220022900c90a3703900820022d00c80a4101460d02200241f0036a41186a200a290300370300200241f0036a41106a2009290300370300200241f0036a41086a200829030037030020022002290390083703f003200241800d6a20014198016a41b00210e8061a200241b00f6a41106a2006290300370300200241b00f6a41086a2005290300370300200220022903d8033703b00f41002105200241e8106a410010fa02200241a8106a41086a200241f3106a290000370300200241a8106a41106a200241fb106a290000370300200241bd106a200241e8106a41186a2201290000370000200220022900eb103703a81020022f01e810210b20022d00ea10210c20014200370300200241e8106a41106a22094200370300200241e8106a41086a22014200370300200242003703e810418de6c300ad4280808080e0008410012206290000210d200241c8106a41086a2208200641086a2900003703002002200d3703c8102006102f20012008290300370300200220022903c8103703e810419ce6c300ad4280808080e0008410012206290000210d20024188106a41086a220a200641086a2900003703002002200d370388102006102f2009200229038810220d37030020082001290300370300200241c8106a41106a200d370300200241c8106a41186a200a290300370300200220022903e8103703c810200241106a200241c8106a4120109501024020044201520d0020074200510d052002280214410020022802101b2101417f21052001ad220d20032003200d541b220d200d20037d2007827d220d42ffffffff0f560d00200da721050b418de6c300ad4280808080e0008410012201290000210d200241c8106a41086a2206200141086a2900003703002002200d3703c8102001102f4193e6c300ad428080808090018410012201290000210d20024188106a41086a2208200141086a2900003703002002200d370388102001102f2002200536028c112002418c116aad4280808080c0008410032201290000210d200141086a290000210e200141106a290000210f200241e8106a41186a2209200141186a290000370300200241e8106a41106a220a200f370300200241e8106a41086a2210200e3703002002200d3703e8102001102f41c000102d2201450d05200120022903c8103700002001200229038810370010200120022903e810370020200141086a2006290300370000200141186a2008290300370000200141286a2010290300370000200141306a200a290300370000200141386a2009290300370000200241086a200141c00041c8e1ca004100410010b501200228020821082001102f41012101024020084101470d00200241e8106a200510fa0220024188106a41086a200241f3106a29000037030020024188106a41106a200241fb106a29000037030020024188106a41156a20024180116a290000370000200241c8106a41086a200241a8106a41086a290300370300200241c8106a41106a200241a8106a41106a290300370300200241c8106a41156a200241a8106a41156a290000370000200220022900eb1037038810200220022903a8103703c81020022f01e81020022d00ea10411074722106410021010b200241e80f6a41086a2205200241c8106a41086a290300370300200241e80f6a41106a2208200241c8106a41106a290300370300200241e80f6a41156a2209200241c8106a41156a290000370000200241c80f6a41086a220a20024188106a41086a290300370300200241c80f6a41106a221020024188106a41106a290300370300200241c80f6a41156a221120024188106a41156a290000370000200220022903c8103703e80f20022002290388103703c80f20010d01200241d8076a41156a22012009290000370000200241d8076a41106a22092008290300370300200241d8076a41086a22082005290300370300200241b8076a41086a2205200a290300370300200241b8076a41106a220a2010290300370300200241b8076a41156a22102011290000370000200220022903e80f3703d807200220022903c80f3703b807200241f8076a41106a2211200241b00f6a41106a290300370300200241f8076a41086a2212200241b00f6a41086a290300370300200220022903b00f3703f807200241c80a6a41046a200241800d6a41b00210e8061a20024190086a200241c80a6a41b40210e8061a20024190046a20024190086a41046a41b00210e8061a200241f6066a200b200c41107472220b4110763a0000200241f4066a200b3b0100200241d0066a2003370300200241c8066a2007370300200241d8066a220b20022903f807370300200241e0066a2012290300370300200241e8066a220c2011290300370300200241f7066a20022903d807370000200241ff066a200829030037000020024187076a20092903003700002002418c076a2001290000370000200220043703c006200241e7013602f00620024196076a20064110763a000020024194076a20063b010020024197076a20022903b8073700002002419f076a2005290300370000200241a7076a200a290300370000200241ac076a20102900003700004104102d2201450d05200242043702cc0a200220013602c80a20024190046a200241c80a6a1091010240024020022903c0064201520d0020022903d00620022903c8062203420c882204420120044201561b8021040240024020022802cc0a220520022802d00a22016b4102490d0020022802c80a21050c010b200141026a22062001490d09200541017422012006200120064b1b22014100480d090240024020050d002001102d21050c010b20022802c80a20052001103121050b2005450d08200220013602cc0a200220053602c80a20022802d00a21010b2002200141026a3602d00a200520016a2004a741047420037aa7417f6a22014101200141014b1b2201410f2001410f491b723b00000c010b0240024020022802cc0a20022802d00a2201460d0020022802c80a21050c010b200141016a22052001490d08200141017422062005200620054b1b22064100480d080240024020010d002006102d21050c010b20022802c80a20012006103121050b2005450d07200220063602cc0a200220053602c80a20022802d00a21010b2002200141016a3602d00a200520016a41003a00000b200c200241c80a6a1095022002200b3602900820024190086a200241c80a6a10c20220022802f00621060240024020022802cc0a220520022802d00a22016b4104490d0020022802c80a21050c010b200141046a22082001490d07200541017422012008200120084b1b22014100480d070240024020050d002001102d21050c010b20022802c80a20052001103121050b2005450d06200220013602cc0a200220053602c80a20022802d00a21010b2002200141046a3602d00a200520016a20063600004120102d2201450d052001200241f4066a290200370000200141186a2002418c076a290200370000200141106a20024184076a290200370000200141086a200241fc066a2902003700000240024020022802cc0a220620022802d00a22056b4120490d0020022802c80a21060c010b200541206a22082005490d07200641017422052008200520084b1b22054100480d070240024020060d002005102d21060c010b20022802c80a20062005103121060b2006450d06200220053602cc0a200220063602c80a20022802d00a21050b200620056a220641086a200141086a290000370000200641106a200141106a290000370000200641186a200141186a2900003700002002200541206a3602d00a200620012900003700002001102f4120102d2201450d05200120024194076a290200370000200141186a200241ac076a290200370000200141106a200241a4076a290200370000200141086a2002419c076a2902003700000240024020022802cc0a220620022802d00a22056b4120490d0020022802c80a21060c010b200541206a22082005490d07200641017422052008200520084b1b22054100480d070240024020060d002005102d21060c010b20022802c80a20062005103121060b2006450d06200220053602cc0a200220063602c80a20022802d00a21050b200620056a220641086a200141086a290000370000200641106a200141106a290000370000200641186a200141186a2900003700002002200541206a3602d00a200620012900003700002001102f20022802cc0a210620022802c80a21010240024020022802d00a22054180024b0d0020024196036a20012005200241f0036a10e90321050c010b2005ad4220862001ad84100322052900002103200541086a2900002104200541106a2900002107200241c80a6a41186a200541186a290000370300200241c80a6a41106a2007370300200241c80a6a41086a2004370300200220033703c80a2005102f20024196036a200241c80a6a4120200241f0036a10e90321050b02402006450d002001102f0b2005450d03200241f0026a41086a200241f0036a41086a290300370300200241f0026a41106a200241f0036a41106a290300370300200241f0026a41186a200241f0036a41186a290300370300200241c8026a41086a200241d0066a290300370300200241c8026a41106a200241d8066a290300370300200241c8026a41186a200241e0066a290300370300200241e8026a200241e8066a290300370300200220022903f0033703f0022002200241c8066a2903003703c80220022903c0062103200241186a20024190046a41b00210e8061a0b200041086a20022903f002370300200041286a2003370300200041306a20022903c802370300200041206a200241f0026a41186a290300370300200041186a200241f0026a41106a290300370300200041106a200241f0026a41086a290300370300200041386a200241c8026a41086a290300370300200041c0006a200241c8026a41106a290300370300200041c8006a200241c8026a41186a290300370300200041d0006a200241c8026a41206a290300370300200041d8006a200241186a41b00210e8061a200041003a000020024190116a24000f0b200241800d6a108e01200041036a41003a0000200041800a3b0001200041013a00000c050b200041013b0001200041013a0000200041036a41003a000020014198016a108e010c040b20004180083b0001200041013a0000200041036a41003a000020024190046a108e010c030b41d0caca00411941eccaca001039000b1036000b1038000b20024190116a24000bd10403027f017e047f230041d0006b22022400418de6c300ad4280808080e00084100122032900002104200241086a200341086a290000370300200220043703002003102f41a881c400ad4280808080d00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f2002200136022c20022002412c6aad4280808080c00084100622032900003703302003102f200241c4006a200241306a360200200241003a00482002200241306a41086a36023c20022002412c6a3602402002200241306a360238200241206a200241386a106c0240024002400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000bdf0808017f017e027f017e017f017e067f017e230041e0006b2202240020002902002103200241306a41186a22044200370300200241306a41106a22054200370300200241306a41086a2200420037030020024200370330418de6c300ad4280808080e0008422061001220729000021082000200741086a290000370300200220083703302007102f41f880c400ad4280808080800284100122072900002108200241d0006a41086a2209200741086a290000370300200220083703502007102f200520022903502208370300200241106a41086a220a2000290300370300200241106a41106a220b2008370300200241106a41186a220c200929030037030020022002290330370310200241086a200241106a41201095014100210741800c210d0240417f200228020c410020022802081b220e20016a22012001200e491b220e42808080c0f588fe064280808080f28ba80920034280808080f01f835022011b22082008428094ebdc038022084280ec94a37c7e7c4280cab5ee01562008a76a4b0d002004420037030020054200370300200042003703002002420037033020061001220729000021082000200741086a290000370300200220083703302007102f41d480c400ad4280808080b0028422061001220729000021082009200741086a290000370300200220083703502007102f200520022903502208370300200a2000290300370300200b2008370300200c2009290300370300200220022903303703102002200241106a412010950141002107417f2002280204410020022802001b22054180afd0e502418094ebdc0320011b22002003a7220920002009491b6a220920092005491b220920004b0d00200241306a41186a22014200370300200241306a41106a22074200370300200241306a41086a2205420037030020024200370330418de6c300ad4280808080e0008422031001220d2900002108200241d0006a41086a2200200d41086a29000037030020022008370350200d102f200520002903003703002002200229035037033041f880c400ad42808080808002841001220d29000021082000200d41086a29000037030020022008370350200d102f200720022903502208370300200241106a41086a22042005290300370300200241106a41106a220a2008370300200241106a41186a220b2000290300370300200220022903303703102002200e360230200241106aad42808080808004842208200241306aad4280808080c00084220f10042001420037030020074200370300200542003703002002420037033020031001220d29000021032000200d41086a29000037030020022003370350200d102f200520002903003703002002200229035037033020061001220d29000021032000200d41086a29000037030020022003370350200d102f20072002290350220337030020042005290300370300200a2003370300200b200029030037030020022002290330370310200220093602302008200f1004410221074100210d0b200241e0006a2400200d2007720b851006017f047e027f017e037f017e230041f0026b2206240020064190016a200520042902002207a72007422888a72001200210f00402400240200629039001220720064190016a41086a290300220884500d00200641003a00ab01200620083703e802200620073703e002200620033602a4012006410141112001200284501b3a00aa01200620033602ac012006200641ac016a3602f0012006200641aa016a3602ec012006200641a4016a3602e8012006200641ab016a3602e4012006200641e0026a3602e001200641b0016a2003200641e0016a10a504024020062802b0014101470d00200041036a41003a000020004180023b0001200041013a00000c020b200641d8016a2903002101200641d0016a29030021020240200641b0016a41086a2903004201520d00200641b0016a41106a290300210920062802ac01210320064198026a200641b0016a41186a29030037030020064190026a2009370300200641e0016a41086a41003a0000200641e9016a2003290000370000200641f1016a200341086a290000370000200641f9016a200341106a29000037000020064181026a200341186a290000370000200641033a00e00141c8e1ca004100200641e0016a108c010b200641f8006a20022001109b01200641f8006a41106a29030021012006290380012102024020062903782209a7450d00200641c0006a200242004204420010ed06200641306a420042002002420010ed06200641d0006a2006290340200641c0006a41086a2903002209200142028620062903307c7c220a4205420010ee0642b3e6cc99b3e6cc99332006290350200142ffffffffffffffff3f83200152200629033842005272200a2009547222031b220920022002200956200142b3e6cc99b3e6cc9933200641d0006a41086a29030020031b22095620012009511b22031b220a2009200120031b220910be01200641e0006a2002200a7d200120097d2002200a54ad7d109b01200641e0006a41106a290300210220062903682101024020062903602209a7450d00200641e0016a10fb02200641e0016a2001200210b5020c020b2009500d01200641e0016a41186a220b4200370300200641e0016a41106a22044200370300200641e0016a41086a22054200370300200642003703e00141e7a2ca00ad428080808080018422091001220c290000210a200641e0026a41086a2203200c41086a2900003703002006200a3703e002200c102f20052003290300370300200620062903e0023703e00141ecb5c600ad4280808080d00184220a1001220c290000210d2003200c41086a2900003703002006200d3703e002200c102f200420062903e002220d370300200641b0016a41086a220e2005290300370300200641b0016a41106a220f200d370300200641b0016a41186a22102003290300370300200620062903e0013703b001200641186a200641b0016a4120109c01200641186a41106a290300210d200629032021112006280218210c200b42003703002004420037030020054200370300200642003703e00120091001220b29000021092003200b41086a290000370300200620093703e002200b102f20052003290300370300200620062903e0023703e001200a1001220b29000021092003200b41086a290000370300200620093703e002200b102f200420062903e0022209370300200e2005290300370300200f200937030020102003290300370300200620062903e0013703b00120064200200d4200200c1b220920027d20114200200c1b2202200154ad7d220a200220017d2201200256200a200956200a2009511b22031b3703e80120064200200120031b3703e001200641b0016aad4280808080800484200641e0016aad428080808080028410040c010b2009500d00200641e0016a41186a220b4200370300200641e0016a41106a22044200370300200641e0016a41086a22054200370300200642003703e00141e7a2ca00ad428080808080018422091001220c290000210a200641e0026a41086a2203200c41086a2900003703002006200a3703e002200c102f20052003290300370300200620062903e0023703e00141ecb5c600ad4280808080d00184220a1001220c290000210d2003200c41086a2900003703002006200d3703e002200c102f200420062903e002220d370300200641b0016a41086a220e2005290300370300200641b0016a41106a220f200d370300200641b0016a41186a22102003290300370300200620062903e0013703b0012006200641b0016a4120109c01200641106a290300210d200629030821112006280200210c200b42003703002004420037030020054200370300200642003703e00120091001220b29000021092003200b41086a290000370300200620093703e002200b102f20052003290300370300200620062903e0023703e001200a1001220b29000021092003200b41086a290000370300200620093703e002200b102f200420062903e0022209370300200e2005290300370300200f200937030020102003290300370300200620062903e0013703b00120064200200d4200200c1b220920017d20114200200c1b2201200254ad7d220a200120027d2202200156200a200956200a2009511b22031b3703e80120064200200220031b3703e001200641b0016aad4280808080800484200641e0016aad428080808080028410040b200041003a0000200041306a41013a0000200041286a4200370300200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a2007427f2008501b3703000b200641f0026a24000bec0101027f20014180feff07714108762102024002402001410171450d00411f210341b6cfca00210102400240200241ff01710e03000103000b41c100210341f5ceca0021010c020b41c100210341b4ceca0021010c010b411f21034195ceca0021010240024002400240024002400240200241ff01710e080006010203040507000b4120210341f5cdca0021010c060b412721034195cdca0021010c050b4117210341feccca0021010c040b41dfccca0021010c030b4126210341b9ccca0021010c020b412b2103418eccca0021010c010b4139210341bccdca0021010b20002003360204200020013602000b160020002001280208360204200020012802003602000b13002000410136020420004190d2c3003602000b3400200041d39bca0036020420004100360200200041146a4104360200200041106a41c0d3c300360200200041086a42083702000b130020004101360204200041a4dcc3003602000b130020004102360204200041ecddc3003602000b2d01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241e8073600000b2d01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241e5003600000b88090b107f017e017f017e017f017e017f017e017f017e017f230041306b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200241286a22082000200441306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e2903003703002013201029030037030020052002290300370300024020032001490d00200321040c030b2006410d7420067322044111762004732204410574200473220620077122044100200120042001491b6b220520014f0d01200241286a22082000200341306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e29030037030020132010290300370300200520022903003703002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200241286a22032000200441306c6a220141286a2204290300370300200241206a2206200141206a2207290300370300200241186a2208200141186a2209290300370300200241106a220a200141106a220b290300370300200241086a220c200141086a220d290300370300200220012903003703002000200541306c6a22002903002112200041086a22052903002114200041106a220e2903002116200041186a220f2903002118200041206a2210290300211a2004200041286a22112903003703002007201a37030020092018370300200b2016370300200d2014370300200120123703002011200329030037030020102006290300370300200f2008290300370300200e200a2903003703002005200c290300370300200020022903003703000b200241306a24000f0b4198bbca0020052001103b000b4188bbca0020042001103b000bf20907077f027e0b7f017e017f027e017f230041306b22022400024020014101762203450d0003402003417f6a2203210402400240024003402004410174220541017221060240200541026a220520014f0d00200620014f0d02200520062000200641306c6a22072903002000200541306c6a220829030056200741086a2903002209200841086a290300220a562009200a511b1b21060b200620014f0d03200420014f0d022000200441306c6a22042903002000200641306c6a220529030056200441086a22072903002209200541086a2208290300220a562009200a511b450d03200241286a220b200441286a220c290300370300200241206a220d200441206a220e290300370300200241186a220f200441186a2210290300370300200241106a2211200441106a2212290300370300200241086a221320072903003703002002200429030037030020082903002109200541106a2214290300210a200541186a22152903002116200541206a2217290300211820052903002119200c200541286a221a290300370300200e2018370300201020163703002012200a3703002007200937030020042019370300201a200b2903003703002017200d2903003703002015200f290300370300201420112903003703002008201329030037030020052002290300370300200621040c000b0b41b0bcca0020062001103b000b41c0bcca0020042001103b000b20030d000b0b0240024020014102490d002001210703402007417f6a220720014f0d02200241286a220b200041286a2205290300370300200241206a220c200041206a2206290300370300200241186a220d200041186a2208290300370300200241106a220e200041106a2210290300370300200241086a220f200041086a2211290300370300200220002903003703002000200741306c6a22042903002109200441086a290300210a200441106a2903002116200441186a2903002118200441206a29030021192005200441286a2903003703002006201937030020082018370300201020163703002011200a3703002000200937030041002105024002400240034020042002290300370300200441286a200b290300370300200441206a200c290300370300200441186a200d290300370300200441106a200e290300370300200441086a200f2903003703002005410174220441017221060240200441026a220420074f0d00200620074f0d02200420062000200641306c6a22082903002000200441306c6a221029030056200841086a2903002209201041086a290300220a562009200a511b1b21060b200620074f0d03200520074f0d022000200541306c6a22052903002000200641306c6a220429030056200541086a22082903002209200441086a2210290300220a562009200a511b450d03200b200541286a2211290300370300200c200541206a2212290300370300200d200541186a2213290300370300200e200541106a2214290300370300200f20082903003703002002200529030037030020102903002109200441106a290300210a200441186a2903002116200441206a2903002118200429030021192011200441286a29030037030020122018370300201320163703002014200a3703002008200937030020052019370300200621050c000b0b41b0bcca0020062007103b000b41c0bcca0020052007103b000b200741014b0d000b0b200241306a24000f0b4198bbca0020072001103b000bb80c050a7f017e017f037e0f7f230041306b22022400200041c07e6a21032001417f6a2104200041306a2105410021062001413249210741012108024003400240024020082001490d00410021090c010b410121092000200841306c220a6a220b290300220c200b41506a220d29030056200b41086a290300220e200d41086a290300220f56200e200f511b0d002005200a6a210903404101210b20042008460d03200841016a210820092903002210200c58210b200941086a290300220f200e51210d200f200e58210a200941306a21092010210c200f210e200b200a200d1b0d000b200820014921090b2008200146210b20070d0120082001460d010240024002400240024002402008417f6a220b20014f0d002009450d012000200b41306c6a2209290300210e20092000200841306c22116a220b290300370300200241286a220a200941286a2212290300370300200241206a2213200941206a2214290300370300200241186a2215200941186a2216290300370300200241106a2217200941106a2218290300370300200241086a2219200941086a220d290300370300200d200b41086a221a2903003703002018200b41106a221b2903003703002016200b41186a221c2903003703002014200b41206a221d2903003703002012200b41286a221e2903003703002002200e370300200b2002290300370300201e200a290300370300201d2013290300370300201c2015290300370300201b2017290300370300201a201929030037030020084102490d052009290300220c20002008417e6a221341306c6a220a29030058200d290300220e200a41086a221f290300220f58200e200f511b0d052009200a290300370300200d201f2903003703002009290310210f2018200a41106a2903003703002015201229030037030020172014290300370300201920162903003703002016200a41186a2903003703002014200a41206a2903003703002012200a41286a2903003703002002200f370300024020130d00410021130c050b200c20002008417d6a220d41306c6a220929030058200e200941086a290300220f58200e200f511b0d04200320116a2109034020094188016a200941d8006a29030037030020094180016a200941d0006a290300370300200941f8006a200941c8006a290300370300200941f0006a200941c0006a290300370300200941e8006a200941386a290300370300200941e0006a200941306a290300370300200d450d032009290300210f200941086a210a200941506a2109200d417f6a210d200c200f56200e200a290300220f56200e200f511b0d000b200d41016a21130c030b4188bbca00200b2001103b000b4198bbca0020082001103b000b410021130b2000201341306c6a210a0b200a200c370300200a200e3703082000201341306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b200641016a21060240200120086b22144102490d00200b290330200b290300220c58200b41386a290300220f201a290300220e58200f200e511b0d00200b200b41306a2212290300370300201a201241086a290300370300200b290310210f201b201241106a2903003703002015201e2903003703002017201d2903003703002019201c290300370300201c201241186a290300370300201d201241206a290300370300201e201241286a2903003703002002200f3703004101211a024020144103490d00200b290360200c58200b41e8006a290300220f200e58200f200e511b0d00200b41e0006a21094103210a4102210d0340200d221a41306c200b6a221241506a220d2009290300370300200d41286a200941286a290300370300200d41206a200941206a290300370300200d41186a200941186a290300370300200d41106a200941106a290300370300200d41086a200941086a290300370300200a20144f0d01200a41306c2109200a210d200a41016a210a200b20096a2209290300200c56200941086a290300220f200e56200f200e511b0d000b0b2012200c3703002012200e370308200b201a41306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b20064105470d000b4100210b0b200241306a2400200b0be52003167f037e067f230041c0026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110e1032003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00200a200a417f6a220d2000200a4105746a2000200d4105746a412010ea06220e410048220f1b2210200a41016a2211200d200a200f1b220a200020114105746a2000200a4105746a412010ea0641004822111b220a2000200a4105746a200020104105746a412010ea0622104100481b210a200c200c417f6a220d2000200c4105746a2000200d4105746a412010ea06221241004822131b2214200c4101722215200d200c20131b220c200020154105746a2000200c4105746a412010ea0622134100481b220c2000200c4105746a200020144105746a412010ea0622144100481b210c200b200b417f6a220d2000200b4105746a2000200d4105746a412010ea06221541004822161b2217200b41016a2218200d200b20161b220b200020184105746a2000200b4105746a412010ea06220d4100481b220b2000200b4105746a200020174105746a412010ea0622164100481b210b41024101200f1b200e411f7620111b2010411f766a2012411f766a2013411f766a2014411f766a2015411f766a200d411f766a2016411f766a210d0b2000200c4105746a2000200a4105746a412010ea06220f411f76200d6a2000200b4105746a2000200a200c200f410048220f1b220e4105746a412010ea062210411f766a210d2000200b200e20104100481b220b4105746a2000200c200a200f1b22194105746a412010ea06417f4c0d01200b21190c020b2000200110e2030c0f0b200d41016a220d410c490d0002402001410176220b450d00200020014105746a41606a210a2000210c0340200441206a41186a220d200c41186a220f290000370300200441206a41106a220e200c41106a2210290000370300200441206a41086a2211200c41086a22122900003703002004200c290000370320200a41086a2213290000211a200a41106a2214290000211b200a41186a2215290000211c200c200a290000370000200f201c3700002010201b3700002012201a3700002015200d2903003700002014200e29030037000020132011290300370000200a2004290320370000200a41606a210a200c41206a210c200b417f6a220b0d000b0b20012019417f736a21194101210a0c010b200d45210a0b0240200a452009724101710d002000200110e3030d0d0b2002450d02201920014f0d0102402002200020194105746a220a412010ea0641004e0d0020002108200121070c040b200441206a41186a2212200041186a220e290000370300200441206a41106a2213200041106a2210290000370300200441206a41086a2214200041086a221129000037030020042000290000370320200a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2000200a290000370000200e201c3700002010201b3700002011201a370000200d2012290300370000200b2013290300370000200c2014290300370000200a2004290320370000200441c0016a41186a2217200e290000370300200441c0016a41106a22182010290000370300200441c0016a41086a22192011290000370300200420002900003703c001200041606a2115200041206a21164100210c2001210b03400240200c200b417f6a220d4f0d002016200c4105746a210a0340200441c0016a200a412010ea06417f4c0d01200a41206a210a200d200c41016a220c470d000b200d210c0b2015200b4105746a210a02400340200c200b417f6a220b4f0d01200441c0016a200a412010ea06210d200a41606a220f210a200d4100480d000b20122016200c4105746a220a41186a220d2900003703002013200a41106a221d2900003703002014200a41086a22062900003703002004200a290000370320200f41286a221e290000211a200f41306a221f290000211b200f41386a2220290000211c200a200f41206a220f290000370000200d201c370000201d201b3700002006201a37000020202012290300370000201f2013290300370000201e2014290300370000200f2004290320370000200c41016a210c0c010b0b200020042903c001370000200e2017290300370000201020182903003700002011201929030037000002402001200c41016a220a490d002000200a4105746a21002001200a6b220141154f0d010c0c0b0b200a2001104b000b41d4bbca0020192001103b000b2007450d010b201920074f0d01200441206a41186a2216200841186a221e290000370300200441206a41106a2217200841106a221f290000370300200441206a41086a2218200841086a222029000037030020042008290000370320200820194105746a220a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2008200a290000370000201e201c370000201f201b3700002020201a370000200d2016290300370000200b2017290300370000200c2018290300370000200a2004290320370000200441186a2205201e290000370300200441106a2209201f290000370300200441086a2221202029000037030020042008290000370300200841206a21014100211d2007417f6a220d450d022001210a0340200a2004412010ea0641004e0d03200a41206a210a200d201d41016a221d470d000b200d211d0c020b4188bbca0041004100103b000b4198bbca0020192007103b000b200820074105746a210c200d210b02400340200c2100200b220a201d4d22060d01200a417f6a210b200041606a220c2004412010ea06417f4a0d000b0b0240200a201d490d00200d200a490d0241800121144100210f410021124100210d4100211141800121152001201d4105746a2222210103400240200020016b220a419fc0004b22190d00200a410576220a41807f6a200a2012200f492011200d49220c72220b1b210a0240200b450d002015200a200c1b2115200a2014200c1b21140c010b200a200a41017622156b21140b02402011200d470d00024020150d00200441c0006a220d21110c010b4100210a200441c0006a2211210d2001210c0340200d200a3a0000200d200c2004412010ea06417f73411f766a210d200c41206a210c2015200a41016a220a470d000b0b02402012200f470d00024020140d00200441c0016a220f21120c010b200041606a210a4100210c200441c0016a2212210f0340200f200c3a0000200f200a2004412010ea06411f766a210f200a41606a210a2014200c41016a220c470d000b0b0240200f20126b220a200d20116b220c200c200a4b1b2213450d002016200120112d00004105746a220a41186a2900003703002017200a41106a2900003703002018200a41086a2900003703002004200a290000370320200120112d00004105746a220a200020122d0000417f734105746a220c290000370000200a41186a200c41186a290000370000200a41106a200c41106a290000370000200a41086a200c41086a290000370000024020134101460d004100210a034020002012200a6a220e2d0000417f734105746a220c20012011200a6a41016a22102d00004105746a220b290000370000200c41186a200b41186a290000370000200c41106a200b41106a290000370000200c41086a200b41086a290000370000200120102d00004105746a220c2000200e41016a2d0000417f734105746a220b290000370000200c41186a200b41186a290000370000200c41106a200b41106a290000370000200c41086a200b41086a290000370000200a41026a210c200a41016a220b210a200c2013490d000b2012200b6a21122011200b6a21110b200020122d0000417f734105746a220a2004290320370000200a41186a2016290300370000200a41106a2017290300370000200a41086a2018290300370000201241016a2112201141016a21110b200020144105746b20002012200f461b2100200120154105746a20012011200d461b210120190d000b024002402011200d4f0d002000210a034020162001200d417f6a220d2d00004105746a220c41186a220b2900003703002017200c41106a220f2900003703002018200c41086a22002900003703002004200c290000370320200a41606a220a41086a220e290000211a200a41106a2210290000211b200a41186a2212290000211c200c200a290000370000200b201c370000200f201b3700002000201a3700002012201629030037000020102017290300370000200e2018290300370000200a20042903203700002011200d490d000c020b0b2001210a2012200f4f0d000340200f417f6a220f2d0000210c2016200a41186a220b2900003703002017200a41106a220d2900003703002018200a41086a22012900003703002004200a2900003703202000200c417f734105746a220c41086a220e290000211a200c41106a2210290000211b200c41186a2211290000211c200a200c290000370000200b201c370000200d201b3700002001201a3700002011201629030037000020102017290300370000200e2018290300370000200c2004290320370000200a41206a210a2012200f490d000b0b20082004290300370000201e2005290300370000201f2009290300370000202020212903003700002007200a20226b410576201d6a22014d0d032016201e2900003703002017201f2900003703002018202029000037030020042008290000370320200820014105746a220a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2008200a290000370000201e201c370000201f201b3700002020201a370000200d2016290300370000200b2017290300370000200c2018290300370000200a2004290320370000200720016b220c450d04200c20012001200c4b1b210b2007410376210d200a41206a2100024002402001200c417f6a220c490d002000200c200a200310e003200821000c010b200820012002200310e003200a2102200c21010b200b200d4f2105200141154f0d010c050b0b201d200a104b000b200a200d104a000b4198bbca0020012007103b000b41a8bbca00411c41c4bbca001039000b20014102490d00200041606a210f4101210b0340200b410574210a200b417f6a210c200b41016a210b02402000200a6a220a2000200c4105746a220d412010ea06417f4a0d00200441c0016a41186a220e200a41186a2210290000370300200441c0016a41106a2211200a41106a2212290000370300200441c0016a41086a2213200a41086a22142900003703002004200a2900003703c001200a200d2900003700002014200d41086a2900003700002012200d41106a2900003700002010200d41186a2900003700004100210d0240200c450d00200f210a03400240200441c0016a200a412010ea064100480d00200c210d0c020b200a41206a200a290000370000200a41386a200a41186a290000370000200a41306a200a41106a290000370000200a41286a200a41086a290000370000200a41606a210a200c417f6a220c0d000b0b2000200d4105746a220a20042903c001370000200a41186a200e290300370000200a41106a2011290300370000200a41086a20132903003700000b200f41206a210f200b2001470d000b0b200441c0026a24000beb050a067f017e017f017e017f017e017f017e017f017e230041206b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200020044105746a22042900002108200020054105746a220541086a2209290000210a200541106a220b290000210c200541186a220d290000210e20042005290000370000200441186a220f2900002110200f200e370000200441106a220f290000210e200f200c370000200441086a2204290000210c2004200a370000200d2010370000200b200e3700002009200c37000020052008370000024020032001490d00200321040c030b2006410d7420067322054111762005732205410574200573220620077122054100200120052001491b6b220520014f0d01200020034105746a22042900002108200020054105746a220541086a2209290000210a200541106a220b290000210c200541186a220d290000210e20042005290000370000200441186a220f2900002110200f200e370000200441106a220f290000210e200f200c370000200441086a2204290000210c2004200a370000200d2010370000200b200e3700002009200c370000200520083700002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200020044105746a22012900002108200020054105746a220041086a2205290000210a200041106a2204290000210c200041186a2203290000210e20012000290000370000200141186a220629000021102006200e370000200141106a2206290000210e2006200c370000200141086a2201290000210c2001200a370000200320103700002004200e3700002005200c370000200020083700000b200241206a24000f0b4198bbca0020052001103b000b4188bbca0020042001103b000be90609067f017e017f017e017f027e017f017e027f230041206b22022400024020014101762203450d0003402003417f6a2203210402400240024003402004410174220541017221060240200541026a220520014f0d00200620014f0d0220052006200020064105746a200020054105746a412010ea064100481b21060b200620014f0d03200420014f0d02200020044105746a2204200020064105746a2205412010ea0641004e0d03200541086a22072900002108200541106a2209290000210a200541186a220b290000210c2004290000210d20042005290000370000200441186a220e290000210f200e200c370000200441106a220e290000210c200e200a370000200441086a2204290000210a20042008370000200b200f3700002009200c3700002007200a3700002005200d370000200621040c000b0b41b0bcca0020062001103b000b41c0bcca0020042001103b000b20030d000b0b0240024020014102490d002001210703402007417f6a220720014f0d02200241186a2209200041186a2204290000370300200241106a220b200041106a2205290000370300200241086a220e200041086a2203290000370300200020074105746a220641086a2900002108200641106a290000210a200641186a290000210c2000290000210d200020062900003700002004200c3700002005200a370000200320083700002002200d37030041002105024002400240034020062002290300370000200641186a2009290300370000200641106a200b290300370000200641086a200e2903003700002005410174220641017221040240200641026a220620074f0d00200420074f0d0220062004200020044105746a200020064105746a412010ea064100481b21040b200420074f0d03200520074f0d02200020054105746a2205200020044105746a2206412010ea0641004e0d032009200541186a2203290000370300200b200541106a2210290000370300200e200541086a2211290000370300200641086a2900002108200641106a290000210a200641186a290000210c2005290000210d200520062900003700002003200c3700002010200a370000201120083700002002200d370300200421050c000b0b41b0bcca0020042007103b000b41c0bcca0020052007103b000b200741014b0d000b0b200241206a24000f0b4198bbca0020072001103b000bdb08030a7f017e0a7f230041c0006b22022400200041a07f6a21032001417f6a2104200141324921054101210641002107024003400240024020062001490d00410021080c010b41012108200020064105746a2209200941606a412010ea064100480d0003404101210a20042006460d03200641016a2106200941206a220a2009412010ea062108200a21092008417f4a0d000b200620014921080b2006200146210a20050d0120062001460d0102400240024002402006417f6a220920014f0d002008450d0120002006410574220b6a220a290000210c200a200020094105746a22092900003700002009200c370000200a41086a220d290000210c200d200941086a220e290000370000200e200c370000200a41106a220f290000210c200f200941106a22102900003700002010200c370000200a41186a2211290000210c2011200941186a22122900003700002012200c37000020064102490d03200920002006417e6a22084105746a2213412010ea06417f4a0d032009290000210c20092013290000370000200241206a41186a22142012290000370300200241206a41106a22152010290000370300200241206a41086a2216200e290000370300200e201341086a2900003700002010201341106a2900003700002012201341186a2900003700002002200c3703204100210e2008450d022003200b6a210903400240200241206a2009412010ea064100480d002008210e0c040b200941206a2009290000370000200941386a200941186a290000370000200941306a200941106a290000370000200941286a200941086a290000370000200941606a21092008417f6a22080d000c030b0b4188bbca0020092001103b000b4198bbca0020062001103b000b2000200e4105746a22092002290320370000200941186a2014290300370000200941106a2015290300370000200941086a20162903003700000b200741016a21070240200120066b22104102490d00200a41206a2209200a412010ea06417f4a0d00200a290000210c200a2009290000370000200241206a41186a22122011290000370300200241206a41106a2213200f290000370300200241206a41086a220b200d290000370300200d200941086a290000370000200f200941106a2900003700002011200941186a2900003700002002200c3703204101210d024020104103490d00200a41c0006a200241206a412010ea06417f4a0d00410321084102210e0340200a200e4105746a220941606a220d2009290000370000200d41186a200941186a290000370000200d41106a200941106a290000370000200d41086a200941086a290000370000024020082010490d00200e210d0c020b20084105742109200e210d2008210e200841016a2108200a20096a200241206a412010ea064100480d000b0b200a200d4105746a22092002290320370000200941186a2012290300370000200941106a2013290300370000200941086a200b2903003700000b20074105470d000b4100210a0b200241c0006a2400200a0bc21301147f23004180026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110e5032003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00200b200b417f6a220e2000200b4102746a280200220f2000200e4102746a280200221049220d1b2211200b41016a2212200e200b200d1b200020124102746a280200220b2010200f200d1b220e4922101b200b200e20101b200020114102746a2802004922131b210b200c200c417f6a220e2000200c4102746a28020022112000200e4102746a280200221249220f1b2214200c4101722215200e200c200f1b200020154102746a280200220c20122011200f1b220e4922111b200c200e20111b200020144102746a2802004922141b210c200a200a417f6a22122000200a4102746a2802002215200020124102746a280200220649220e1b2216200a41016a22172012200a200e1b200020174102746a280200220a20062015200e1b22154922121b200a201520121b200020164102746a2802004922151b210a41024101200e1b200e20121b20156a200f6a20116a20146a200d6a20106a20136a210d0b200d2000200c4102746a280200220f2000200a4102746a280200221049220e6a2000200b4102746a280200220d2010200f200e1b22114922106a210f200d201120101b2000200c200a200e1b220d4102746a280200490d01200b200a200c200e1b20101b210d0c020b2000200110e6030c0f0b200f41016a220f410c490d0002402001410176220b450d00200020014102746a417c6a210a2000210c0340200c280200210e200c200a280200360200200a200e360200200c41046a210c200a417c6a210a200b417f6a220b0d000b0b2001200d417f736a210d4101210a0c010b200f45210a0b0240200a452009724101710d002000200110e7030d0d0b2002450d02200d20014f0d01024020022802002000200d4102746a220a280200220c4f0d0020002108200121070c040b2000280200210b2000200c360200200a200b3602002000417c6a2110200041046a21112000280200210d4100210c2001210b03400240200c200b417f6a220e4f0d002011200c4102746a210a0340200d200a280200490d01200a41046a210a200e200c41016a220c470d000b200e210c0b2010200b4102746a210a02400340200c200b417f6a220b4f0d01200a280200210e200a417c6a220f210a200d200e490d000b2011200c4102746a220a2802002112200a200e360200200f41046a2012360200200c41016a210c0c010b0b2000200d36020002402001200c41016a220a490d002000200a4102746a21002001200a6b220141154f0d010c0c0b0b200a2001104b000b41d4bbca00200d2001103b000b2007450d010b200d20074f0d012008280200210a20082008200d4102746a220c280200360200200c200a360200200841046a210f20082802002111410021142007417f6a220d450d02200f210a0340200a28020020114f0d03200a41046a210a200d201441016a2214470d000b200d21140c020b4188bbca0041004100103b000b4198bbca00200d2007103b000b200820074102746a210c200d210b02400340200c210e200b220a20144d22060d01200a417f6a210b200e417c6a220c28020020114f0d000b0b0240200a2014490d00200d200a490d0241800121054100210b410021014100210c410021104180012109200f20144102746a2216210d03400240200e200d6b220a4183084b22130d00200a410276220a41807f6a200a2001200b492010200c49220f7222001b210a02402000450d002009200a200f1b2109200a2005200f1b21050c010b200a200a41017622096b21050b02402010200c470d00024020090d002004220c21100c010b4100210a20042210210c200d210f0340200c200a3a0000200c200f28020020114f6a210c200f41046a210f2009200a41016a220a470d000b0b02402001200b470d00024020050d0020044180016a220b21010c010b200e417c6a210a4100210f20044180016a2201210b0340200b200f3a0000200b200a2802002011496a210b200a417c6a210a2005200f41016a220f470d000b0b0240200b20016b220a200c20106b220f200f200a4b1b2212450d00200d20102d00004102746a220a2802002115200a200e20012d0000417f734102746a280200360200024020124101460d004100210a0340200e2001200a6a220f2d0000417f734102746a200d2010200a6a41016a22002d00004102746a280200360200200d20002d00004102746a200e200f41016a2d0000417f734102746a280200360200200a41026a210f200a41016a2200210a200f2012490d000b200120006a2101201020006a21100b200e20012d0000417f734102746a2015360200200141016a2101201041016a21100b200e20054102746b200e2001200b461b210e200d20094102746a200d2010200c461b210d20130d000b024002402010200c4f0d00200e210a0340200d200c417f6a220c2d00004102746a220b280200210e200b200a417c6a220a280200360200200a200e3602002010200c490d000c020b0b200d210a2001200b4f0d000340200a280200210c200a200e200b417f6a220b2d0000417f734102746a220d280200360200200d200c360200200a41046a210a2001200b490d000b0b200820113602002007200a20166b41027620146a22014d0d032008200820014102746a220a280200360200200a2011360200200720016b220c450d04200c20012001200c4b1b210b2007410376210e200a41046a2100024002402001200c417f6a220c490d002000200c200a200310e403200821000c010b200820012002200310e403200a2102200c21010b200b200e4f2105200141154f0d010c050b0b2014200a104b000b200a200d104a000b4198bbca0020012007103b000b41a8bbca00411c41c4bbca001039000b20014102490d00200041746a210e4102210d4101210a0340200a41016a210c02402000200a4102746a2210280200220b2000200a417f6a22114102746a220f28020022124f0d002010201236020002402011450d00200b2000200a417e6a22104102746a221128020022124f0d00200f2012360200024020100d002011210f0c010b0240200b2000200a417d6a220a4102746a220f2802002210490d002011210f0c010b20112010360200200a450d00200d210f200e210a02400340200b200a28020022104f0d01200a41046a2010360200200a417c6a210a200f41016a2210200f4921112010210f2011450d000b0b200a41046a210f0b200f200b3602000b200d417f6a210d200e41046a210e200c210a200c2001470d000b0b20044180026a24000bf30201067f02400240024020014108490d00200141017641feffffff07712202417f6a220320014f0d022001410d74200173220441117620047322044105742004732205417f2001417f6a677622067122044100200120042001491b6b220420014f0d01200020034102746a220328020021072003200020044102746a220428020036020020042007360200024020022001490d00200221030c030b2005410d7420057322044111762004732204410574200473220520067122044100200120042001491b6b220420014f0d01200020024102746a220328020021072003200020044102746a2204280200360200200420073602002002410172220320014f0d022005410d742005732204411176200473220441057420047320067122044100200120042001491b6b220420014f0d01200020034102746a220128020021022001200020044102746a2200280200360200200020023602000b0f0b4198bbca0020042001103b000b4188bbca0020032001103b000bc70301067f024020014101762202450d0003402002417f6a2202210302400240024003402003410174220441017221050240200441026a220420014f0d00200520014f0d0220042005200020054102746a280200200020044102746a280200491b21050b200520014f0d03200320014f0d02200020034102746a22032802002204200020054102746a220628020022074f0d032003200736020020062004360200200521030c000b0b41b0bcca0020052001103b000b41c0bcca0020032001103b000b20020d000b0b0240024020014102490d002001210403402004417f6a220420014f0d02200028020021052000200020044102746a2203280200360200200320053602004100210302400240024003402003410174220641017221050240200641026a220620044f0d00200520044f0d0220062005200020054102746a280200200020064102746a280200491b21050b200520044f0d03200320044f0d02200020034102746a22032802002206200020054102746a220728020022024f0d032003200236020020072006360200200521030c000b0b41b0bcca0020052004103b000b41c0bcca0020032004103b000b200441014b0d000b0b0f0b4198bbca0020042001103b000b8a05010f7f2001417d6a2102200041086a21032000416c6a21042001417f6a2105200041046a2106410021072001413249210841012109024003400240024020092001490d004100210a0c010b4101210a20002009410274220b6a220c280200220d200c417c6a280200490d002006200b6a210a03404101210c20052009460d03200941016a2109200a280200220c200d4f210b200a41046a210a200c210d200b0d000b2009200149210a0b2009200146210c20080d0120092001460d0102400240024002402009417f6a220d20014f0d00200a450d012000200d4102746a220c280200210b200c20002009410274220e6a220a280200220d360200200a200b360200024020094102490d00200d20002009417e6a220b4102746a220f28020022104f0d00200c201036020002400240200b0d00200f210c0c010b0240200d20002009417d6a220b4102746a220c2802002210490d00200f210c0c010b200f2010360200200b450d00200d200a41706a280200220f4f0d002004200e6a2110024003402010220c41086a200f360200200b417f6a220b450d01200c417c6a2110200d200c280200220f490d000b0b200c41046a210c0b200c200d3602000b200741016a2107200120096b220b4102490d03200a280204220f200a280200220c4f0d03200a41046a210d200a200f360200200b4103490d02200a280208220f200c4f0d02200d200f3602000240200b41044f0d00200a41086a210d0c030b200220096b210a2003200e6a210d0340200d41046a220b280200220e200c4f0d03200d200e360200200b210d200a417f6a220a0d000b200b210d0c020b4188bbca00200d2001103b000b4198bbca0020092001103b000b200d200c3602000b20074105470d000b4100210c0b200c0bef0201067f230041d0006b2201240002400240410b102d2202450d00200241edde91e3063600002002410b411610312203450d00200342f0f2bd99f7edd8b4e500370004200341002800c4d94436000c2003410f6a41002800c7d944360000200141003a00484113210220032104410021050340200141003a0008200141086a20042002410047220610e8061a024020020d00200141003a00080b20022006490d02200141286a20056a20012d00083a00002001200541016a22053a0048200220066b2102200420066a210420054120470d000b200141086a41186a2202200141286a41186a290300370300200141086a41106a2205200141286a41106a290300370300200141086a41086a2206200141286a41086a290300370300200120012903283703082003102f200041186a2002290300370000200041106a2005290300370000200041086a200629030037000020002001290308370000200141d0006a24000f0b1036000b20062002104b000bc90402017f037e23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a2002ad4220862001ad84200441206a101a41014621000c020b200441206a41186a200341186a290000370300200441206a41106a200341106a290000370300200441206a41086a200341086a29000037030020042003290000370320200041016a2002ad4220862001ad84200441206a101441014621000c010b2002ad4220862001ad84100322012900002105200141086a2900002106200141106a2900002107200441186a200141186a290000370300200441106a2007370300200441086a2006370300200420053703002001102f41012101200441206a200041016a200410ea034100210020042d00200d00200441c8006a41206a200441c1006a2d00003a0000200441c8006a41186a200441396a290000370300200441c8006a41106a200441316a290000370300200441c8006a41086a200441296a29000037030020042004290021370348200441c8006aad4280808080900484100322002900002105200041086a2900002106200041106a2900002107200441f0006a41186a200041186a290000370300200441f0006a41106a2007370300200441f0006a41086a2006370300200420053703702000102f0240200441f0006a2003460d00200441f0006a2003412010ea064521010b200121000b20044190016a240020000bcf0303017f017e037f230041d0006b22032400024020012002102c2204422088a72201450d002004a722052d0000220241014b0d002001417f6a210602400240024020020e020001000b41002101200341003a0049200541016a21070240034020062001460d01200341286a20016a200720016a2d00003a00002003200141016a22023a00492002210120024121470d000b200341106a200341316a290000370300200341186a200341396a290000370300200341206a200341c1006a2900003703002003200329002937030820032d0028210241002106200341086a21010c020b200141ff0171450d02200341003a00490c020b2006450d0120052d0001220241034f0d01200341086a41186a200341286a41186a290000370300200341086a41106a200341286a41106a290000370300200341086a41086a200341286a41086a2900003703002003200329002837030841012106200341086a21010b200020023a0001200020063a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a2900003700002005102f200341d0006a24000f0b41f4c8ca00412e200341286a418ccaca0041a4c9ca00103e000b130020004102360204200041f0e0c3003602000b130020004102360204200041fce1c3003602000b910302087f017e230041106b2202240002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002006450d0020042d0001210720012003417e6a22063602042001200441026a3602002006450d0020042d0002210820012003417d6a22063602042001200441036a36020020060d010b200041003602040c010b20042d0003210620012003417c6a3602042001200441046a360200200241086a200110e60102400240024020022802080d002001280204200228020c2204490d002004417f4c0d01024002400240024020040d00410121030c010b200410332203450d0120012802042004490d0220032001280200200410e8061a200128020422092004490d052001200920046b3602042001200128020020046a3602000b2003450d0220002004ad220a422086200a8437020820002003360204200020074108742005722008411074722006411874723602000c050b1036000b2003102f0b200041003602040c020b103d000b20042009104b000b200241106a24000bc80504047f017e087f037e230041f0006b220224002002200110e60102400240024002402002280200450d00200041003602000c010b20022802042203200128020441286e2204200420034b1b2205ad42287e2206422088a70d012006a72204417f4c0d010240024020040d00410821070c010b2004102d2207450d03200441286e21050b02402003450d00410021080340200241003a00682008220941016a21082001280204210a417f210b4100210402400240024002400340200a2004460d01200241c8006a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002002200441016a220d3a0068200b417f6a210b200d2104200d4120470d000b200241286a41186a2204200241c8006a41186a290300370300200241286a41106a220b200241c8006a41106a290300370300200241286a41086a220e200241c8006a41086a29030037030020022002290348370328200a200d6b220d4108490d01200c29000121062001200c41096a3602002001200d41786a360204200241086a41086a220d200e290300370300200241086a41106a220a200b290300370300200241086a41186a220b20042903003703002002200229032837030820052009470d030240200941017422042008200420084b1bad42287e220f422088a70d00200fa7220441004e0d030b1038000b200441ff0171450d00200241003a00680b200041003602002005450d042007102f0c040b0240024020090d002004102d21070c010b2007200941286c2004103121070b2007450d05200441286e21050b2007200941286c6a22042002290308370300200d290300210f200a2903002110200b290300211120042006370320200441186a2011370300200441106a2010370300200441086a200f37030020082003470d000b0b2000200536020420002007360200200041086a20033602000b200241f0006a24000f0b103d000b1036000b8e0301087f230041106b22022400024002400240200028020822034105744104722204417f4c0d00200028020021052004102d2206450d0120024100360208200220043602042002200636020020032002106902402003450d0020034105742107200228020021082002280204210420022802082103034002400240200420036b4120490d00200341206a2106200421090c010b200341206a22062003490d05200441017422092006200920064b1b22094100480d050240024020040d002009102d21080c010b200820042009103121080b2008450d040b200820036a22032005290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002009210420062103200541206a2105200741606a22070d000b2002200936020420022006360208200220083602000b2000410c6a200210ce02200228020421052001290200200235020842208620022802002203ad84100402402005450d002003102f0b200241106a24000f0b103d000b1036000b1038000bc20101047f230041106b22022400200028020022002802082103200028020021004101210420012802184199a5c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a4190ebc30010621a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d00200228020022002802184198a5c00041012000411c6a28020028020c11000021040b200241106a240020040bd90201077f0240024002400240024002402000280208220141ffffff3f712001470d0020014105742202417f4c0d0020002802002103024020020d00200320014105746a210041012104200121050c040b2002102d2204450d01200320014105746a21002002410576220520014f0d03200541017422022001200220014b1b220241ffffff3f712002470d02200241057422024100480d020240024020050d002002102d21040c010b200420054105742002103121040b2004450d01200241057621050c040b103d000b1036000b1038000b20010d00410021020c010b200020036b2106410021020340200420026a2200200320026a2207290000370000200041186a200741186a290000370000200041106a200741106a290000370000200041086a200741086a2900003700002006200241206a2202470d000b200320014105746a20036b41057521020b02402005450d002004102f0b20020b8c0201067f0240200041086a220228020022032001490d00200220013602000f0b0240024002400240200041046a280200220420036b200120036b2205490d0020002802002104200321000c010b200320056a22062003490d02200441017422072006200720064b1b22064100480d020240024020040d002006102d21040c010b200028020020042006103121040b2004450d0120002004360200200041046a2006360200200041086a28020021000b200420006a210602400240024020054102490d00200641002003417f73220320016a10e7061a2004200020016a20036a22006a21060c010b2005450d010b200641003a0000200041016a21000b200220003602000f0b1036000b1038000bf80204017f017e067f037e0240024002400240024020012802082202ad42287e2203422088a70d002003a72204417f4c0d0020012802002105024020040d002005200241286c6a210641082107200221010c020b024002402004102d2207450d002005200241286c6a2106200441286e220120024f0d03200141017422082002200820024b1b220941286c22024100480d0102400240200441274b0d002002102d21070c010b2007200141286c2002103121070b20070d040b1036000b1038000b103d000b2002450d01200121090b200620056b210841002104410021060340200520046a22022903002103200241086a290300210a200241106a290300210b200241186a290300210c200720046a220141206a200241206a290300370300200141186a200c370300200141106a200b370300200141086a200a37030020012003370300200641016a21062008200441286a2204470d000b200921010c010b410021060b2000200636020820002001360204200020073602000bbb0301037f024020002802082201450d002000280200220020014198016c6a21020340024020002d0000417a6a2201410c4b0d00024002400240024002400240024020010e0d00070701070207030704050706000b200041086a2d00004101470d06200041146a280200450d06200041106a280200102f0c060b200041046a2d00000d052000410c6a280200450d05200041086a280200102f0c050b200041046a2802000d042000410c6a280200450d04200041086a280200102f0c040b200041086a2d00004107470d03200041306a280200450d032000412c6a280200102f0c030b200041046a2d00004102490d020240200041106a2802002201450d00200141d0006c2103200041086a28020041c0006a210103400240200141046a280200450d002001280200102f0b200141d0006a2101200341b07f6a22030d000b0b2000410c6a280200450d022000280208102f0c020b200041086a280200450d01200041046a280200102f0c010b200041086a2d00004106470d00200041306a280200450d002000412c6a280200102f0b20004198016a210102402000418c016a280200450d00200028028801102f0b2001210020012002470d000b0b0bbd0c05047f017e0b7f027e027f230041e0006b22022400200241086a200110e601024002402002280208450d00200041003602000c010b02400240024002400240200228020c2203200128020441246e2204200420034b1b2205ad42247e2206422088a70d002006a72204417f4c0d000240024020040d00410421070c010b2004102d2207450d02200441246e21050b024020030d00410021040c050b2002412d6a2108200241cb006a220941056a210a4100210b4100210c03402001280204220d450d042001280200220e2d000021042001200d417f6a220f3602042001200e41016a360200200441074b0d040240024002400240024002400240024002400240024020040e08000f010f03040205000b2002200110e60120022802000d0e200128020420022802042204490d0e2004417f4c0d0b0240024020040d00410121100c010b200410332210450d0d20012802042004490d0820102001280200200410e8061a2001280204220d2004490d0e2001200d20046b3602042001200128020020046a3602000b2010450d0e2004ad22064220862006842106200241206a41086a200241386a41086a29020037030020022002290238370320201041807e71210f410521110c050b41002104200241003a0058200d417e6a210d02400340200f2004460d01200241386a20046a200e20046a221041016a2d00003a00002001200d3602042001201041026a3602002002200441016a22103a0058200d417f6a210d2010210420104120470d000b200220092900003703202002200a2900003700252002280047210e200229003f210620022f0138210420022d003a210d200228003b2110200841026a200241356a41026a2d00003a0000200820022f00353b0000201041807e71210f2004200d41107472210d410021110c060b200441ff0171450d0d200241003a00580c0d0b200241386a200110ed03200228023c450d0c20022f013820022d003a41107472210d2002280244210e200229023c210620022d003b2110410121114100210f0c040b200241386a200110ed03200228023c450d0b20022f013820022d003a41107472210d2002280244210e200229023c210620022d003b2110410221114100210f0c030b200241386a200110ed03200228023c450d0a20022f013820022d003a41107472210d2002280244210e200229023c210620022d003b2110410321114100210f0c020b200f450d09200e2d000121042001200d417e6a22103602042001200e41026a36020020040d092010450d09200e2d000221042001200d417d6a220f3602042001200e41036a360200200441014b0d09410021100240024020040e020100010b200f4104490d0a200e35000321062001200d41796a22043602042001200e41076a36020020044104490d0a200e35000721122001200d41756a3602042001200e410b6a36020020124220862006842113410121100b200241206a41086a200241386a41086a29020037030020022002290238370320410421114100210f201321060b0b200241106a41086a2214200241206a41086a29030037030020022002290320370310200c2005470d020240200541016a22042005490d00200541017422152004201520044b1bad42247e2212422088a70d002012a7220441004e0d020b1038000b2010102f0c060b0240024020050d002004102d21070c010b2007200541246c2004103121070b2007450d03200441246e21050b2007200c41246c6a2204200e360210200420063702082004200f201041ff0171723602042004200d3b0001200420113a0000200441036a200d4110763a0000200420022903103702142004411c6a2014290300370200200b41246a210b200c41016a2204210c20042003460d050c000b0b103d000b1036000b2004200d104b000b200041003602000240200c450d002007210103400240024020012d0000220441044b0d0002400240024020040e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a2101200b415c6a220b0d000b0b2005450d012007102f0c010b2000200536020420002007360200200041086a20043602000b200241e0006a24000ba00a03077f037e057f230041d0026b2202240041002103200241003a00c8022001280204417f6a210402400240024002400240024003402004417f460d01200241a8026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8022004417f6a21042005210320054120470d000b200241e8006a41086a200241a8026a41086a290300370300200241e8006a41106a200241a8026a41106a290300370300200241e8006a41186a200241a8026a41186a290300370300200220022903a8023703682002200110e60120022802000d022002280204210641002104200241003a00c80220012802042107417f2103034020072004460d02200241a8026a20046a200128020022082d00003a00002001200720036a3602042001200841016a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241a8016a41086a200241a8026a41086a2903002209370300200241a8016a41106a200241a8026a41106a290300220a370300200241a8016a41186a200241a8026a41186a290300220b37030020024188016a41086a200937030020024188016a41106a200a37030020024188016a41186a200b370300200220022903a80222093703a801200220093703880141002104200241003a00c802200720056b210c200720036a21030340200c2004460d04200241a8026a20046a200820046a220541016a2d00003a0000200120033602042001200541026a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241e8016a41086a200241a8026a41086a2903002209370300200241e8016a41106a200241a8026a41106a290300220a370300200241e8016a41186a200241a8026a41186a290300220b370300200241c8016a41086a22042009370300200241c8016a41106a2203200a370300200241c8016a41186a2205200b370300200220022903a80222093703e801200220093703c801200241a8026a200110f50320022802a8022201450d04200241c8006a41086a2208200241e8006a41086a290300370300200241c8006a41106a2207200241e8006a41106a290300370300200241c8006a41186a220c200241e8006a41186a290300370300200241286a41086a220d20024188016a41086a290300370300200241286a41106a220e20024188016a41106a290300370300200241286a41186a220f20024188016a41186a29030037030020022002290368370348200220022903880137032820022902ac022109200241086a41186a22102005290300370300200241086a41106a22052003290300370300200241086a41086a22032004290300370300200220022903c801370308200020093702082000200136020420002006360200200041106a2002290348370200200041186a2008290300370200200041206a2007290300370200200041286a200c290300370200200041306a2002290328370200200041386a200d290300370200200041c0006a200e290300370200200041c8006a200f290300370200200041e8006a2010290300370200200041e0006a2005290300370200200041d8006a2003290300370200200041d0006a20022903083702000c050b0240200341ff0171450d00200241003a00c8020b200041003602040c040b0240200441ff0171450d00200241003a00c8020b200041003602040c030b200041003602040c020b0240200441ff0171450d00200241003a00c8020b200041003602040c010b200041003602040b200241d0026a24000be00504047f017e087f057e230041f0006b220224002002200110e60102400240024002402002280200450d00200041003602000c010b20022802042203200128020441306e2204200420034b1b2205ad42307e2206422088a70d012006a72204417f4c0d010240024020040d00410821070c010b2004102d2207450d03200441306e21050b02402003450d00410021080340200241003a00682008220941016a21082001280204210a417f210b4100210402400240024002400340200a2004460d01200241c8006a20046a2001280200220c2d00003a00002001200a200b6a3602042001200c41016a3602002002200441016a220d3a0068200b417f6a210b200d2104200d4120470d000b200241286a41186a2204200241c8006a41186a290300370300200241286a41106a220b200241c8006a41106a290300370300200241286a41086a220e200241c8006a41086a29030037030020022002290348370328200a200d6b220d4110490d01200c41096a2900002106200c290001210f2001200d41706a3602042001200c41116a360200200241086a41086a220d200e290300370300200241086a41106a220a200b290300370300200241086a41186a220b20042903003703002002200229032837030820052009470d030240200941017422042008200420084b1bad42307e2210422088a70d002010a7220441004e0d030b1038000b200441ff0171450d00200241003a00680b200041003602002005450d042007102f0c040b0240024020090d002004102d21070c010b2007200941306c2004103121070b2007450d05200441306e21050b200d2903002110200a2903002111200b2903002112200229030821132007200941306c6a2204200f37032020042013370300200441286a2006370300200441186a2012370300200441106a2011370300200441086a201037030020082003470d000b0b2000200536020420002007360200200041086a20033602000b200241f0006a24000f0b103d000b1036000ba908040c7f017e057f037e23004180016b2202240002400240024002400240200141086a220328020022042001410c6a2802002205460d002001280210220628020021072006280208220841014b210903402003200441206a220a360200200241e0006a41186a200441186a290000370300200241e0006a41106a200441106a290000370300200241e0006a41086a200441086a29000037030020022004290000370360410021040240024020090d0020080e020401040b2008210b03402004200b410176220c20046a220d2007200d4105746a200241e0006a412010ea0641004a1b2104200b200c6b220b41014b0d000b0b200720044105746a200241e0006a412010ea060d02200a2104200a2005470d000b0b20004100360208200042013702002001280204450d012001280200102f0c010b200241c0006a41086a2204200241e0006a41086a290300370300200241c0006a41106a220b200241e0006a41106a290300370300200241c0006a41186a220c200241e0006a41186a29030037030020022002290360220e3703002002200e3703404120102d220f450d01200f2002290340370000200f41186a200c290300370000200f41106a200b290300370000200f41086a2004290300370000200128020421102001280200211102400240200a2005470d0041012112410121130c010b41012112410121130340200628020821032006280200210702400340200241e0006a41186a2208200a41186a290000370300200241e0006a41106a2209200a41106a290000370300200241e0006a41086a2201200a41086a2900003703002002200a290000370360200a41206a210a4100210402400240200341014b0d0020030e020301030b2003210b03402004200b410176220c20046a220d2007200d4105746a200241e0006a412010ea0641004a1b2104200b200c6b220b41014b0d000b0b200720044105746a200241e0006a412010ea060d01200a2005470d000c030b0b200241c0006a41086a2001290300220e370300200241c0006a41106a20092903002214370300200241c0006a41186a20082903002215370300200220022903602216370340200241186a220b2015370300200241106a220c2014370300200241086a220d200e37030020022016370300024020132012470d00201241016a22042012490d05201241017422072004200720044b1b220441ffffff3f712004470d05200441057422044100480d050240024020120d002004102d210f0c010b200f201241057420041031210f0b200f450d04200441057621130b200f20124105746a22042002290300370000200441186a200b290300370000200441106a200c290300370000200441086a200d290300370000201241016a2112200a2005470d000b0b02402010450d002011102f0b20002012360208200020133602042000200f3602000b20024180016a24000f0b1036000b1038000bd70704067f017e097f027e230041f0006b22032400200341206a2001200228020c2204110200024002400240024002402003280220450d00200341c8006a41106a200341206a41106a290300370300200341c8006a41086a200341206a41086a290300370300200341c8006a41186a200341206a41186a290300370300200341c8006a41206a200341206a41206a280200360200200341086a200341d4006a290200370300200341106a200341dc006a290200370300200341186a200341e4006a290200370300200320032903203703482003200329024c370300200341c8006a200120022802102205110200417f2003280248220641016a220720072006491b2208ad42287e2209422088a70d022009a72206417f4c0d024108210a02402006450d002006102d220a450d04200641286e21080b200a2003290300370300200a4201370320200a41186a200341186a220b290300370300200a41106a200341106a220c290300370300200a41086a200341086a290300370300200341206a200120041102000240024020032802200d004101210d0c010b200341c8006a410472210641c800210e4101210d0340200341c8006a41206a200341206a41206a280200360200200341c8006a41186a220f200341206a41186a290300370300200341c8006a41106a2210200341206a41106a290300370300200341c8006a41086a2211200341206a41086a29030037030020032003290320370348200341086a2207200641086a290200370300200c200641106a290200370300200b200641186a29020037030020032006290200370300200f200b2903003703002010200c29030037030020112007290300370300200320032903003703480240200d2008470d00200341206a200120051102002008417f2003280220220741016a221220122007491b6a22072008490d07200841017422122007201220074b1bad42287e2209422088a70d072009a722074100480d070240024020080d002007102d210a0c010b200a200841286c20071031210a0b200a450d06200741286e21080b200a200e6a221241606a220720032903483703002011290300210920102903002113200f290300211420124201370300200741186a2014370300200741106a2013370300200741086a2009370300200341206a20012004110200200e41286a210e200d41016a210d20032802200d000b0b2001200228020011050002402002280204450d002001102f0b2000200d360208200020083602042000200a3602000c010b2000410036020820004208370200200120022802001105002002280204450d002001102f0b200341f0006a24000f0b103d000b1036000b1038000bb8cc010d057f017e027f017e027f017e067f047e017f017e037f047e0b7f230041b00a6b2201240010fb030240024002400240024002400240024020004101460d00200141c0066a41186a22024200370300200141c0066a41106a22034200370300200141c0066a41086a22044200370300200142003703c00641aa87ca00ad4280808080c000841001220529000021062004200541086a290000370300200120063703c0062005102f41ce87ca00ad4280808080b00184100122052900002106200141d8036a41086a2207200541086a290000370300200120063703d8032005102f200320012903d8032206370300200141b8056a41086a22082004290300370300200141b8056a41106a2006370300200141b8056a41186a2007290300370300200120012903c0063703b805200141b8036a200141b8056a10e301420020012903c003420020012802b8031b220610fc037d220920092006561b42c801540d00200141e0086a41186a220a4200370300200141e0086a41106a220b4200370300200141e0086a41086a22074200370300200142003703e008419c9eca00ad4280808080f00084220c1001220d290000210620014198046a41086a2205200d41086a2900003703002001200637039804200d102f2007200529030037030020012001290398043703e00841a39eca00ad4280808080c001841001220d29000021062005200d41086a2900003703002001200637039804200d102f200b2001290398042206370300200141e0076a41086a220e2007290300370300200141e0076a41106a220f2006370300200141e0076a41186a22102005290300370300200120012903e0083703e007200141b0036a200141e0076a412010950120012802b403211120012802b0032112200a4200370300200b420037030020074200370300200142003703e008200c1001220d29000021062005200d41086a2900003703002001200637039804200d102f2007200529030037030020012001290398043703e00841af9eca00ad4280808080d001841001220d29000021062005200d41086a2900003703002001200637039804200d102f200b2001290398042206370300200e2007290300370300200f200637030020102005290300370300200120012903e0083703e007200141e0076a10f702210a10ae03200242003703002003420037030020044200370300200142003703c00641eba1ca00ad4280808080f0008422091001220529000021062004200541086a290000370300200120063703c0062005102f41adcac800ad42808080809001841001220529000021062008200541086a290000370300200120063703b8052005102f200320012903b8052206370300200141e8036a41086a2004290300370300200141e8036a41106a2006370300200141e8036a41186a2008290300370300200120012903c0063703e803410021082011410020121b210d200141e0086a200141e8036a10fd03024002400240024020012903e00822064202510d00200b280200210220012903e8082113200910012204290000210920014188046a41086a2205200441086a29000037030020012009370388042004102f41dca0ca00ad4280808080d00284100122042900002109200141d8036a41086a2207200441086a290000370300200120093703d8032004102f2001200241016a3602e008200141e0086aad22144280808080c00084100322042900002109200441086a2900002115200441106a2900002116200141c0066a41186a220e200441186a290000370300200141c0066a41106a220f2016370300200141c0066a41086a22102015370300200120093703c0062004102f41c000102d2204450d052004200129038804370000200441086a2005290300370000200420012903d803370010200441186a2007290300370000200420012903c006370020200441286a2010290300370000200441306a200f290300370000200441386a200e290300370000200141a8036a200441c00010950120012802ac03210720012802a80321052004102f20054101470d0020064201520d002007200d41016a470d00200141b8056a41186a220f4200370300200141b8056a41106a22074200370300200141b8056a41086a22054200370300200142003703b80541d5a2ca00ad42808080809001841001220429000021062005200441086a290000370300200120063703b8052004102f41ecb0c000ad4280808080308410012204290000210620014188046a41086a220e200441086a29000037030020012006370388042004102f2007200129038804220637030020014198046a41086a2211200529030037030020014198046a41106a2212200637030020014198046a41186a2217200e290300370300200120012903b8053703980420014198036a20014198046a10e30120012903a0032118200128029803211941eba1ca00ad4280808080f000841001220429000021062005200441086a290000370300200120063703b8052004102f41f5cac800ad4280808080e00184100122042900002106200e200441086a29000037030020012006370388042004102f200120023602e00820144280808080c00084100322042900002106200441086a2900002109200441106a2900002115200141e0066a41186a2210200441186a290000370300200141e0066a41106a221a2015370300200141e0066a41086a221b2009370300200120063703e0062004102f41c000102d2204450d05200420012903b8053700002004200129038804370010200420012903e006370020200441086a2005290300370000200441186a200e290300370000200441286a201b290300370000200441306a201a290300370000200441386a201029030037000020014180036a200441c000109c0120014180036a41106a2903002115200129038803211620012802800321102004102f200f42003703002007420037030020054200370300200142003703b80541e7a2ca00ad42808080808001841001220429000021062005200441086a290000370300200120063703b8052004102f41ecb5c600ad4280808080d00184100122042900002106200e200441086a29000037030020012006370388042004102f2007200129038804370000200741086a200e29030037000020112005290300370300201220072903003703002017200f290300370300200120012903b80537039804200141e8026a20014198046a4120109c01200141d8026a20012903f002420020012802e80222041b2209200141e8026a41106a290300420020041b2206428094ebdc03420010ee06200141c8026a20012903d802221c200141d8026a41086a290300221d4280ec94a37c427f10ed0620062015420020101b22152016420020101b2216200956201520065620152006511b22041b21062009201620041b211620012903c80220097c211e2018420020191b20137d2209428086ebc7f5002009428086ebc7f500541b421f8042ffffffff0f83428094ebdc037e429880b5e5038021134100210541d87d2104024002400340200141b8026a201c201d200441e8acc3006a3502002209420010ed062005201620012903b80222152009201e7e22092009428094ebdc038022094280ec94a37c7e7c4280cab5ee01562009a76aad7c22095a2006200141b8026a41086a2903002009201554ad7c22155a200620155122071b6a21052016200954200620155420071b0d01200441086a22040d000b200141a8026a201c201d42e8aafa0b420010ed06200141b0026a29030020012903a8022209201e42e8aafa0b7e22062006428094ebdc038022064280ec94a37c7e7c4280cab5ee01562006a76aad7c2206200954ad7c21090c010b02402005417f6a220420054d0d00200141a8016a201c201d42c0f0f50b420010ed06200141b0016a29030020012903a8012209201e42c0f0f50b7e201e42288022064280ec94a37c7e7c4280cab5ee01562006a76aad7c2206200954ad7c21090c010b200441244b0d0220014198026a201c201d2004410374220741c0aac3006a280200220ead2209420010ed06200141f8016a201620012903980222152009201e7e22092009428094ebdc038022094280ec94a37c7e7c4280cab5ee01562009a76aad7c22092016200956200620014198026a41086a2903002009201554ad7c22155620062015511b22041b22182009201620041b22097d221f2006201520041b2015200620041b7d2018200954ad7d41002005410374220f41c0aac3006a2802002205200e6b220e200e20054b1b22054101200541014b1bad2215420010ee06200141e8016a20012903f8012206200141f8016a41086a29030022092015420010ed0620014188026a201c201d200741c4aac3006a2802002205ad2218420010ed06200141b8016a20094200200f41c4aac3006a28020022072005200720054b220e1b20052007200e1b6bad2216420010ed06200141d8016a200642002016420010ed06200141c8016a420042002006420010ed06427f20014188026a41086a29030020012903880222092018201e7e22062006428094ebdc038022064280ec94a37c7e7c4280cab5ee01562006a76aad7c2206200954ad7c2209427f427f200141d8016a41086a290300221e20012903b80120012903c8017c7c221c20012903c00120012903d00184420052201c201e5472220e1b221c427f20012903d801200e1b221e201f20012903e8017d20167e2015807c2215201e54220ead7c2216200e2016201c542015201e5a1b220e1b221e7c2006427f2015200e1b22157c221c200654220ead7c2216200e201620095420162009511b220e1b42002009201e7d2006201554ad7d2216200620157d2215200656201620095620162009511b220f1b2004200720054d7322041b2109427f201c200e1b42002015200f1b20041b21060b20014198016a20062009428094ebdc03420010ee0620014188016a200129039801220920014198016a41086a29030022154280ec94a37c427f10ed0641eba1ca00ad4280808080f00084100122042900002116200141b8056a41086a2205200441086a290000370300200120163703b8052004102f4197cfc800ad4280808080b0028410012204290000211620014188046a41086a2207200441086a29000037030020012016370388042004102f200120023602e00820144280808080c00084100322042900002116200441086a290000211e200441106a290000211c200141e0066a41186a2202200441186a290000370300200141e0066a41106a220e201c370300200141e0066a41086a220f201e370300200120163703e0062004102f200129038801211641c000102d2204450d05200141f8006a200920152013420010ed06200420012903b8053700002004200129038804370010200420012903e006370020200441086a2005290300370000200441186a2007290300370000200441286a200f290300370000200441306a200e290300370000200441386a20022903003700002001200129037822092013200620167c7e22062006428094ebdc038022064280ec94a37c7e7c4280cab5ee01562006a76aad7c22063703e0082001200141f8006a41086a2903002006200954ad7c3703e8082004ad42808080808008842014428080808080028410042004102f0b200141e0086a41186a22024200370300200141e0086a41106a220e4200370300200141e0086a41086a22054200370300200142003703e008200c10012207290000210620014198046a41086a2204200741086a29000037030020012006370398042007102f2005200429030037030020012001290398043703e00841b0ebc300ad4280808080a001841001220729000021062004200741086a29000037030020012006370398042007102f200b200129039804370000200b41086a2004290300370000200141e0076a41086a2005290300370300200141e0076a41106a200e290300370300200141e0076a41186a2002290300370300200120012903e0083703e0072001412036028c042001200141e0076a36028804200141e0066a200141e0076aad42808080808004842216100210730240024020012802e00622020d000c010b20012802e406210e2001200141e0066a41086a2802003602ec03200120023602e803200141f0006a200141e8036a10e6010240024020012802700d002001280274221020012802ec03220741a0016e2204200420104b1b2211ad42a0017e2206422088a70d082006a72204417f4c0d080240024020040d00410121080c010b2004102d2208450d08200441a0016e21110b02402010450d00200141e0086a41206a2117200141b8056a41017221194100210f0340200141003a00d805200f41016a2112410021040240024002400240024002400340200141003a00d80320072004460d01200141b8056a20046a20012802e80322052d00003a00002001200541016a3602e8032001200441016a22053a00d8052005210420054120470d000b200141c0066a41086a2204200141b8056a41086a290300370300200141c0066a41106a221a200141b8056a41106a290300370300200141c0066a41186a221b200141b8056a41186a290300370300200120012903b8053703c0062001200720056b3602ec03200141b8056a200141e8036a10ee0220012d00b8054101460d01200141e0086a41186a201b290300370300200141e0086a41106a201a290300370300200141e0086a41086a2004290300370300200120012903c0063703e0082017201941800110e8061a20014198046a200141e0086a41a00110e8061a2011200f470d04200f41017422042012200420124b1bad42a0017e2206422088a70d132006a722044100480d13200f0d022004102d21080c030b200141003602ec03200441ff0171450d00200141003a00d8050b20110d030c060b2008200f41a0016c2004103121080b2008450d0b200441a0016e21110b2008200f41a0016c6a20014198046a41a00110e8061a20122010460d0220012802ec0321072012210f0c010b0b2008102f0c010b2010ad4220862011ad84210620080d010b41002108200141003602a00420014201370398042001410b3602bc05200120014188046a3602b805200120014198046a3602c006200141f4086a4101360200200142013702e408200141b885c7003602e0082001200141b8056a3602f008200141c0066a41d8dbc100200141e0086a103c1a20013502a004422086200135029804841008200128029c04450d00200128029804102f0b200e450d002002102f0b41002107410021204101212102402006420020081b221c422088a7221a41a0016c220e450d00200e41a0016e2220410574102d2221450d050b200a200a41ff01714102477121222008410120081b21230240201a450d00201a41a0016c2108410021072021210420232105034020042005290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a290000370000200741016a2107200441206a2104200541a0016a2105200841e07e6a22080d000b0b200141e0086a41186a22024200370300200141e0086a41106a22084200370300200141e0086a41086a22054200370300200142003703e008419c9eca00ad4280808080f0008422061001220a290000210920014198046a41086a2204200a41086a2900003703002001200937039804200a102f2005200429030037030020012001290398043703e00841a5c6c800ad4280808080a001841001220a29000021092004200a41086a2900003703002001200937039804200a102f200b200129039804370000200b41086a220a2004290300370000200141e0076a41086a220f2005290300370300200141e0076a41106a22102008290300370300200141e0076a41186a22112002290300370300200120012903e0083703e007200141203602e4082001200141e0076a3602e00820212007200141e0086a10aa0102402022450d00200242003703002008420037030020054200370300200142003703e00820061001220729000021092004200741086a29000037030020012009370398042007102f2005200429030037030020012001290398043703e00841bc9eca00ad4280808080a002841001220729000021092004200741086a29000037030020012009370398042007102f200b200129039804370000200a2004290300370000200f20052903003703002010200829030037030020112002290300370300200120012903e0083703e007200141e0086a200141e0076a10fe0320012802e0082207450d002016100520012802e408450d002007102f0b200242003703002008420037030020054200370300200142003703e00820061001220729000021062004200741086a29000037030020012006370398042007102f2005200429030037030020012001290398043703e00841a39eca00ad4280808080c001841001220729000021062004200741086a29000037030020012006370398042007102f200b200129039804370000200a2004290300370000200f20052903003703002010200829030037030020112002290300370300200120012903e0083703e0072001200d41016a221b3602e0082016200141e0086aad220c4280808080c0008422061004200141b8056a41186a4200370300200141b8056a41106a22054200370300200141b8056a41086a22074200370300200142003703b80541eba1ca00ad4280808080f0008422091001220229000021152007200241086a290000370300200120153703b8052002102f41adcac800ad428080808090018410012202290000211520014188046a41086a220a200241086a29000037030020012015370388042002102f200520012903880422153703002004200729030037030020014198046a41106a201537030020014198046a41186a200a290300370300200120012903b80537039804200141e0086a20014198046a10fd032008280200210720012903e00821152009100122042900002109200a200441086a29000037030020012009370388042004102f41dca0ca00ad4280808080d00284100122042900002109200141d8036a41086a200441086a290000370300200120093703d8032004102f20014100200741016a20154202511b3602e0082006100322042900002106200441086a2900002109200441106a2900002115200141c0066a41186a200441186a290000370300200141c0066a41106a2015370300200141c0066a41086a2009370300200120063703c0062004102f41c000102d2204450d042004200129038804370000200441086a20014188046a41086a2207290300370000200420012903d803370010200441186a200141d8036a41086a290300370000200420012903c006370020200441286a200141c0066a41086a290300370000200441306a200141c0066a41106a290300370000200441386a200141c0066a41186a290300370000200141e8006a200441c000109501200128026c2102200128026821082004102f024020084101470d0002402002201b460d002002201b4f0d0141ebc7c800ad428080808080068410080b201b10ff030b200141b8056a41186a22024200370300200141b8056a41106a220a4200370300200141b8056a41086a22044200370300200142003703b80541eba1ca00ad4280808080f0008422091001220829000021062007200841086a29000037030020012006370388042008102f2004200729030037030020012001290388043703b80541d2a0ca00ad4280808080a001841001220829000021062007200841086a29000037030020012006370388042008102f2005200129038804370000200541086a200729030037000020014198046a41086a200429030037030020014198046a41106a200a29030037030020014198046a41186a2002290300370300200120012903b80537039804200141e0006a20014198046a4120109501200d41026a2107024020012802604101460d00200141c8036a20071080040c030b20012802642108200910012204290000210620014188046a41086a2202200441086a29000037030020012006370388042004102f41dca0ca00ad4280808080d00284100122042900002106200141d8036a41086a220d200441086a290000370300200120063703d8032004102f200120083602e008200c4280808080c00084100322042900002106200441086a2900002109200441106a2900002115200141c0066a41186a2208200441186a290000370300200141c0066a41106a220a2015370300200141c0066a41086a220f2009370300200120063703c0062004102f41c000102d2204450d042004200129038804370000200441086a2002290300370000200420012903d803370010200441186a200d290300370000200420012903c006370020200441286a200f290300370000200441306a200a290300370000200441386a2008290300370000200141d8006a200441c000109501200128025c210f200128025821082004102f024020080d0041aacfc800ad4280808080e0068410084100210f0b200141b8056a41186a220d4200370300200141b8056a41106a220a4200370300200141b8056a41086a22084200370300200142003703b80541eba1ca00ad4280808080f0008410012202290000210620014188046a41086a2204200241086a29000037030020012006370388042002102f2008200429030037030020012001290388043703b80541f1a0ca00ad42808080808001841001220229000021062004200241086a29000037030020012006370388042002102f2005200129038804370000200541086a200429030037000020014198046a41086a200829030037030020014198046a41106a200a29030037030020014198046a41186a200d290300370300200120012903b80537039804410020014198046a1081042204200441ff01714104461b41ff0171220441034b0d0102400240024020040e0401000402010b200141b8056a41186a220d4200370300200141b8056a41106a220a4200370300200141b8056a41086a22084200370300200142003703b80541eba1ca00ad4280808080f0008410012202290000210620014188046a41086a2204200241086a29000037030020012006370388042002102f2008200429030037030020012001290388043703b80541f1a0ca00ad42808080808001841001220229000021062004200241086a29000037030020012006370388042002102f2005200129038804370000200541086a200429030037000020014198046a41086a200829030037030020014198046a41106a200a29030037030020014198046a41186a200d290300370300200120012903b8053703980420014198046aad428080808080048410050c010b2007200f6b220420074b0d0220044106490d020b200141c8036a20071080040c020b41f0bdc60020044125103b000b200141003602c8030b2023200e6a21240240024020012802c80322250d00200141e0086a41186a4200370300200141e0086a41106a22074200370300200141e0086a41086a22044200370300200142003703e008419c9eca00ad4280808080f000841001220529000021062004200541086a290000370300200120063703e0082005102f41a5c6c800ad4280808080a00184100122052900002106200141b8056a41086a2208200541086a290000370300200120063703b8052005102f200720012903b805220637030020014198046a41086a200429030037030020014198046a41106a200637030020014198046a41186a2008290300370300200120012903e00837039804200141e0086a20014198046a412010aa0220012902e408420020012802e00822041b21062004410120041b2125410021260c010b4101212620012902cc0321060b200120263a00a00a200120243602dc03200120233602d8032001200141d8036a36028c042001200141a00a6a3602880441002117024002402006422088a7220441057422050d0041012111410021270c010b2005410575ad42a0017e2209422088a70d062009a722054100480d062005102d2211450d02200541a0016e21270b2006a7212802402004450d002004410574220741606a410576212920014198046a4101722110200141e0086a41206a2112200141e0066a41e0006a212a200141e0066a41c0006a2119200141e0066a41206a211720112108202521040340200441086a2900002106200441106a290000210920042900002115200141c0066a41186a2202200441186a290000370300200141c0066a41106a220d2009370300200141c0066a41086a220a2006370300200120153703c006200141e8036a200141c0066a10820320014198046a20012802e803220f20012802f00310830320012d009804210e200141b8056a201041800110e8061a410021050240200e4101470d00200141e0076a200141b8056a41800110e8061a410121050b024020012802ec03450d00200f102f0b0240024020050d00200141e0066a410041800110e7061a0c010b200141e0066a200141e0076a41800110e8061a0b02402001280288042d00000d00200128028c04220e2802002205200e280204460d00200e200541a0016a36020002400240200141e0066a200541206a220e460d00200e200141e0066a412010ea060d010b02402017200541c0006a220e460d00200e2017412010ea060d010b02402019200541e0006a220e460d00200e2019412010ea060d010b202a20054180016a2205460d012005202a412010ea06450d010b20012802880441013a00000b200441206a2104200141e0086a41186a2002290300370300200141e0086a41106a200d290300370300200141e0086a41086a200a290300370300200120012903c0063703e0082012200141e0066a41800110e8061a2008200141e0086a41a00110e80641a0016a2108200741606a22070d000b202941016a21170b02402028450d002025102f0b2017ad42a0017e2206422088a70d022006a72204417f4c0d0220012d00a00a21250240024002400240024020040d002011201741a0016c6a210e4101210f201721190c010b2004102d220f450d052011201741a0016c6a210e200441a0016e221920174f0d00201941017422052017200520174b1b221041a0016c22054100480d09024002402004419f014b0d002005102d210f0c010b200f201941a0016c20051031210f0b200f450d050c010b2017450d01201921100b200141e0086a4180016a2105200141e0086a41e0006a2107200141e0086a41c0006a2108200141e0086a41206a21024100210d4100210a0340200141e0086a41186a2011200d6a220441186a290000370300200141e0086a41106a200441106a290000370300200141e0086a41086a200441086a290000370300200120042900003703e008200241186a200441386a290000370000200241106a200441306a290000370000200241086a200441286a2900003700002002200441206a2900003700002008200441c0006a290000370000200841086a200441c8006a290000370000200841106a200441d0006a290000370000200841186a200441d8006a2900003700002007200441e0006a290000370000200741086a200441e8006a290000370000200741106a200441f0006a290000370000200741186a200441f8006a290000370000200520044180016a290000370000200541086a20044188016a290000370000200541106a20044190016a290000370000200541186a20044198016a290000370000200f200d6a200141e0086a41a00110e8061a200d41a0016a210d200a41016a210a200441a0016a200e470d000b201021190c010b4100210a0b200141e0086a41186a22084200370300200141e0086a41106a22024200370300200141e0086a41086a22054200370300200142003703e008419c9eca00ad4280808080f0008410012207290000210620014198046a41086a2204200741086a29000037030020012006370398042007102f2005200429030037030020012001290398043703e00841b0ebc300ad4280808080a001841001220729000021062004200741086a29000037030020012006370398042007102f200b200129039804370000200b41086a2004290300370000200141e0076a41086a2005290300370300200141e0076a41106a2002290300370300200141e0076a41186a2008290300370300200120012903e0083703e007200a41a0016c4104722204417f4c0d022004102d2205450d01200141003602e808200120043602e408200120053602e008200a200141e0086a106902400240200a0d0020012802e808210420012802e408210820012802e00821050c010b200f200a41a0016c6a2112410020012802e808220a6b210220012802e4082108410021070340200a20076a210d02400240200820026a4120490d0020012802e00821050c010b200d41206a2204200d490d08200841017422052004200520044b1b22044100480d080240024020080d002004102d21050c010b20012802e00820082004103121050b2005450d04200120043602e408200120053602e008200421080b2005200a6a20076a220e41086a200f20076a220441086a290000370000200e41106a200441106a290000370000200e41186a200441186a2900003700002001200d41206a22103602e808200e200429000037000002400240200820026a41606a411f4d0d002008210e0c010b201041206a220e2010490d0820084101742210200e2010200e4b1b220e4100480d080240024020080d00200e102d21050c010b20052008200e103121050b2005450d042001200e3602e408200120053602e0080b2005200a6a20076a220841286a200441286a290000370000200841306a200441306a290000370000200841386a200441386a2900003700002001200d41c0006a22103602e808200841206a200441206a29000037000002400240200e20026a41406a411f4d0d00200e21080c010b201041206a22082010490d08200e41017422102008201020084b1b22084100480d0802400240200e0d002008102d21050c010b2005200e2008103121050b2005450d04200120083602e408200120053602e0080b2005200a6a20076a220e41c8006a200441c8006a290000370000200e41d0006a200441d0006a290000370000200e41d8006a200441d8006a2900003700002001200d41e0006a22103602e808200e41c0006a200441c0006a29000037000002400240200820026a41a07f6a411f4d0d002008210e0c010b201041206a220e2010490d0820084101742210200e2010200e4b1b220e4100480d080240024020080d00200e102d21050c010b20052008200e103121050b2005450d042001200e3602e408200120053602e0080b2005200a6a20076a220841e8006a200441e8006a290000370000200841f0006a200441f0006a290000370000200841f8006a200441f8006a2900003700002001200d4180016a22103602e808200841e0006a200441e0006a29000037000002400240200e20026a41807f6a411f4d0d00200e21080c010b201041206a22082010490d08200e41017422102008201020084b1b22084100480d0802400240200e0d002008102d21050c010b2005200e2008103121050b2005450d04200120083602e408200120053602e0080b2005200a6a20076a220e4188016a20044188016a290000370000200e4190016a20044190016a290000370000200e4198016a20044198016a2900003700002001200d41a0016a3602e808200e4180016a20044180016a290000370000200241e07e6a2102200741a0016a2107200441a0016a2012470d000b200a20076a21040b20162004ad4220862005ad84100402402008450d002005102f0b02402019450d00200f102f0b200141e0086a41186a22084200370300200141e0086a41106a22024200370300200141e0086a41086a22054200370300200142003703e008419c9eca00ad4280808080f0008410012207290000210620014198046a41086a2204200741086a29000037030020012006370398042007102f2005200429030037030020012001290398043703e00841af9eca00ad4280808080d001841001220729000021062004200741086a29000037030020012006370398042007102f200b200129039804370000200b41086a2004290300370000200141e0076a41086a2005290300370300200141e0076a41106a2002290300370300200141e0076a41186a2008290300370300200120012903e0083703e007200120253a00e0082016200c4280808080108410042001201b3602e408200141053a00e00841c8e1ca004100200141e0086a108c014108102d2207450d0120072024360204200720233602000240024020220d00200141e0086a41186a220d4200370300200141e0086a41106a22084200370300200141e0086a41086a22044200370300200142003703e00841b89bca00ad4280808080f00184100122022900002106200141b8056a41086a2205200241086a290000370300200120063703b8052002102f20042005290300370300200120012903b8053703e00841ac9bca00ad4280808080c001841001220229000021062005200241086a290000370300200120063703b8052002102f200820012903b805220637030020014198046a41086a220a200429030037030020014198046a41106a220e200637030020014198046a41186a220f2005290300370300200120012903e00837039804200141c8006a20014198046a10e3012001290350210620012802482110200d42003703002008420037030020044200370300200142003703e008419c9eca00ad4280808080f000841001220229000021092004200241086a290000370300200120093703e0082002102f41a39eca00ad4280808080c001841001220229000021092005200241086a290000370300200120093703b8052002102f200820012903b8052209370300200a2004290300370300200e2009370300200f2005290300370300200120012903e00837039804200141c0006a20014198046a41201095012006420020101b2001280244410020012802401b1082042007102f0c010b024002400240201a450d002007202341a0016a360200200141003a008009202341206a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b20014198046a41086a2204200141e0086a41086a29030037030020014198046a41106a2205200141e0086a41106a29030037030020014198046a41186a2208200141e0086a41186a290300370300200120012903e008370398042023450d00200141b8056a41186a2008290300370300200141b8056a41106a2005290300370300200141b8056a41086a200429030037030020012001290398043703b805200728020420072802006b41a0016e41016a220241286c2204417f4c0d062004102d220d450d05200d20012903b805370300200d4201370320200d41186a200141b8056a41186a290300370300200d41106a200141b8056a41106a290300370300200d41086a200141b8056a41086a2903003703000240200728020022042007280204470d00410121080c020b2007200441a0016a360200200141003a008009200441206a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200141c0066a41186a220b200141e0086a41186a2219290300220637030020014198046a41086a220a200141e0086a41086a221a29030037030020014198046a41106a220e200141e0086a41106a221b29030037030020014198046a41186a220f2006370300200120012903e00837039804410121080340200141b8056a41186a200f2903002206370300200141b8056a41106a200e2903002209370300200141b8056a41086a200a2903002215370300200120012903980422163703b805200141e8036a41186a22052006370300200141e8036a41106a22102009370300200141e8036a41086a22122015370300200120163703e803024020022008470d00200728020420072802006b41a0016e20026a41016a22042002490d0b200241017422252004202520044b1bad42287e2206422088a70d0b2006a722044100480d0b0240024020020d002004102d210d0c010b200d200241286c20041031210d0b200d450d07200441286e21020b200d200841286c6a220420012903e80337030020122903002106201029030021092005290300211520044201370320200441186a2015370300200441106a2009370300200441086a2006370300200841016a2108200728020022052007280204460d022007200541a0016a36020041002104200141003a008009200541206a21050340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200b20192903002206370300200a201a290300370300200e201b290300370300200f2006370300200120012903e008370398040c000b0b2007102f4108210d41002108410021020c010b2007102f0b200141e0086a41186a4200370300200141e0086a41106a220a4200370300200141e0086a41086a22054200370300200142003703e00841b89bca00ad4280808080f00184100122072900002106200141b8056a41086a2204200741086a290000370300200120063703b8052007102f20052004290300370300200120012903b8053703e00841ddc3c600ad4280808080f000841001220729000021062004200741086a290000370300200120063703b8052007102f200a20012903b805220637030020014198046a41086a200529030037030020014198046a41106a200637030020014198046a41186a2004290300370300200120012903e00837039804200141e0086a20014198046a1083040240024020012802e0084101460d00200120083602e808200120023602e4082001200d3602e00820014198046a200141e0086a41004100200110840420014198046aad428080808080048421060c010b20014198046aad42808080808004842206100520012902e4082109200120083602e808200120023602e4082001200d3602e00820014198046a200141e0086a2009a741012009422088a71084040b200141e0086a41186a22084200370300200141e0086a41106a22074200370300200141e0086a41086a22054200370300200142003703e00841b89bca00ad4280808080f001842209100122022900002115200141b8056a41086a2204200241086a290000370300200120153703b8052002102f20052004290300370300200120012903b8053703e00841ac9bca00ad4280808080c0018422151001220229000021162004200241086a290000370300200120163703b8052002102f200a20012903b805370000200a41086a2210200429030037000020014198046a41086a2202200529030037030020014198046a41106a220d200729030037030020014198046a41186a220e2008290300370300200120012903e00837039804200141306a20014198046a10e3012001280230211220012903382116200842003703002007420037030020054200370300200142003703e00820091001220f29000021092004200f41086a290000370300200120093703b805200f102f20052004290300370300200120012903b8053703e00820151001220f29000021092004200f41086a290000370300200120093703b805200f102f200a20012903b8053700002010200429030037000020022005290300370300200d2007290300370300200e2008290300370300200120012903e008370398042001201642017c420120121b22093703e0082006200c42808080808001841004200842003703002007420037030020054200370300200142003703e008419c9eca00ad4280808080f000841001220829000021062005200841086a290000370300200120063703e0082008102f41a39eca00ad4280808080c001841001220829000021062004200841086a290000370300200120063703b8052008102f200720012903b805220637030020022005290300370300200d2006370300200e2004290300370300200120012903e00837039804200141286a20014198046a41201095012009200128022c410020012802281b1082040b4108102d2204450d0120042024360204200420233602004108102d2205450d0120052011201741a0016c6a222a36020420052011360200200141800a6a200441e4c3c60010f903200141900a6a200541e4c3c60010f90320012802880a210820012802840a211020012802800a210f200141a00a6a41086a200141900a6a41086a280200360200200120012903900a3703a00a200141e0086a41186a22074200370300200141e0086a41106a220b4200370300200141e0086a41086a22054200370300200142003703e00841aa87ca00ad4280808080c00084220610012202290000210920014188046a41086a2204200241086a29000037030020012009370388042002102f2005200429030037030020012001290388043703e00841ae87ca00ad4280808080a0018422151001220229000021092004200241086a29000037030020012009370388042002102f200b2001290388042209370300200141c0066a41086a22022005290300370300200141c0066a41106a220d2009370300200141c0066a41186a220a2004290300370300200120012903e0083703c006200141186a200141c0066a10e3012001290320420020012802181b221642017c22092016540d0320074200370300200b420037030020054200370300200142003703e00820061001220e29000021162004200e41086a2900003703002001201637038804200e102f2005200429030037030020012001290388043703e00820151001220e29000021152004200e41086a2900003703002001201537038804200e102f200b200129038804370000200b41086a2212200429030037000020022005290300370300200d200b290300370300200a2007290300370300200120012903e0083703c006200120093703e008200141c0066aad4280808080800484221e200c4280808080800184100420074200370300200b420037030020054200370300200142003703e00820061001220e29000021062004200e41086a2900003703002001200637038804200e102f2005200429030037030020012001290388043703e00841b887ca00ad4280808080b001841001220e29000021062004200e41086a2900003703002001200637038804200e102f200b2001290388043700002012200429030037000020022005290300370300200d200b290300370300200a2007290300370300200120012903e0083703c006200841286c4104722204417f4c0d022004102d2205450d01200141003602e808200120043602e408200120053602e0082008200141e0086a10690240024020080d0020012802e808210420012802e408210820012802e00821070c010b200f200841286c6a210a20012802e408210820012802e8082104200f2105034002400240200820046b4120490d0020012802e00821070c010b200441206a22072004490d08200841017422022007200220074b1b22024100480d080240024020080d002002102d21070c010b20012802e00820082002103121070b2007450d04200120023602e408200120073602e008200221080b200720046a220241186a200541186a290000370000200241106a200541106a290000370000200241086a200541086a2900003700002001200441206a220d3602e80820022005290000370000200541206a2903002106024002402008200d6b4108490d00200441286a21040c010b200d41086a2204200d490d08200841017422022004200220044b1b22024100480d080240024020080d002002102d21070c010b200720082002103121070b2007450d04200120023602e408200120073602e008200221080b200120043602e8082007200d6a2006370000200a200541286a2205470d000b0b201e2004ad4220862007ad84100402402008450d002007102f0b02402010450d00200f102f0b200942017c22062009540d04200141c0066a41186a22074200370300200141c0066a41106a22084200370300200141c0066a41086a22044200370300200142003703c00641aa87ca00ad4280808080c0008410012202290000210920014188046a41086a2205200241086a29000037030020012009370388042002102f2004200529030037030020012001290388043703c00641e387ca00ad4280808080e001841001220229000021092005200241086a29000037030020012009370388042002102f2003200129038804370000200341086a2005290300370000200141e8036a41086a2004290300370300200141e8036a41106a2008290300370300200141e8036a41186a2007290300370300200120012903c0063703e803200141e0086a200141e8036a10850420012d00e00821052007200141f9086a2900003703002008200141f1086a2900003703002004200141e9086a290000370300200120012900e1083703c0060240024020054101460d0020014198046a41186a420037030020014198046a41106a420037030020014198046a41086a420037030020014200370398040c010b20014198046a41186a200729030037030020014198046a41106a200829030037030020014198046a41086a2004290300370300200120012903c006370398040b200141c0066a41186a22074200370300200141c0066a41106a22084200370300200141c0066a41086a22054200370300200142003703c00641aa87ca00ad4280808080c00084220910012202290000211520014188046a41086a2204200241086a29000037030020012015370388042002102f2005200429030037030020012001290388043703c00641f187ca00ad4280808080c0018422151001220229000021162004200241086a29000037030020012016370388042002102f2003200129038804370000200341086a220d2004290300370000200141e8036a41086a220a2005290300370300200141e8036a41106a220e2008290300370300200141e8036a41186a220f2007290300370300200120012903c0063703e803200141106a200141e8036a41201095012001280214211020012802102112200742003703002008420037030020054200370300200142003703c00620091001220229000021092004200241086a29000037030020012009370388042002102f2005200429030037030020012001290388043703c00620151001220229000021092004200241086a29000037030020012009370388042002102f2003200129038804370000200d2004290300370000200a2005290300370300200e2008290300370300200f2007290300370300200120012903c0063703e803200141003602e008200141e8036aad4280808080800484221d200c4280808080c000841004200141b8056a41186a20014198046a41186a290300370300200141b8056a41106a20014198046a41106a290300370300200141b8056a41086a20014198046a41086a29030037030020012001290398043703b805417f2010410020121b221041016a220420042010491b410d744128722219417f4c0d022019102d2212450d01201220012903b80537000020122006370020201241186a200141b8056a41186a290300370000201241106a200141b8056a41106a290300370000201241086a200141b8056a41086a290300370000200141ac0a6aad4280808080c000842116412821174100210541002104024002400340024002400240024002402007200d460d0020040d010b034020042108200520104f0d0241aa87ca00ad4280808080c00084100122042900002106200141d8036a41086a2207200441086a290000370300200120063703d8032004102f41fd87ca00ad428080808090028410012204290000210620014188046a41086a2202200441086a29000037030020012006370388042004102f200120053602ac0a20161003220441086a2900002106200441106a290000210920042900002115200141c0066a41186a220d200441186a290000370300200141c0066a41106a220a2009370300200141c0066a41086a220e2006370300200120153703c0062004102f41c000102d2204450d09200420012903d803370000200441086a20072903003700002004200129038804370010200441186a2002290300370000200420012903c006370020200441286a200e290300370000200441306a200a290300370000200441386a200d290300370000200141c0066a200441c000108604024020012802c0062207450d002004ad428080808080088410050b20012902c40621062004102f2007410120071b2204450d022006420020071b2206422088a7210702402008450d00200f450d002008102f0b200541016a21052006a7210f2007450d000b200420074105746a210d200421070b200141e8036a41186a200741186a2208290000370300200141e8036a41106a200741106a2202290000370300200141e8036a41086a200741086a220a290000370300200120072900003703e803200a29000021062002290000210920072900002115200141e0086a41186a22022008290000370300200141e0086a41106a22082009370300200141e0086a41086a220a2006370300200120153703e008200141c0066a41186a220e2002290300370300200141c0066a41106a221a2008290300370300200141c0066a41086a221b200a290300370300200120012903e0083703c006201920176b411f4d0d01201921020c020b02402008450d00200f450d002008102f0b2017ad4220862012ad84100322042900002106200441086a2900002109200441106a2900002115200141e0076a41186a200441186a290000370300200141e0076a41106a2015370300200141e0076a41086a2009370300200120063703e0072004102f02402019450d002012102f0b200141c0066a41186a22084200370300200141c0066a41106a22024200370300200141c0066a41086a22054200370300200142003703c00641aa87ca00ad4280808080c00084220610012207290000210920014188046a41086a2204200741086a29000037030020012009370388042007102f2005200429030037030020012001290388043703c00641e387ca00ad4280808080e001841001220729000021092004200741086a29000037030020012009370388042007102f2003200129038804370000200341086a2004290300370000200141e8036a41086a2005290300370300200141e8036a41106a2002290300370300200141e8036a41186a2008290300370300200120012903c0063703e8034120102d2204450d06200420012903e007370000200441186a200141e0076a41186a290300370000200441106a200141e0076a41106a290300370000200441086a200141e0076a41086a290300370000201d2004ad428080808080048410042004102f200141e0066a41186a20014198046a41186a220d2903002209370300200141e0066a41106a20014198046a41106a220a2903002215370300200141e0066a41086a20014198046a41086a220e29030022163703002001200129039804221d3703e006200d2009370300200a2015370300200e20163703002001201d37039804200141e0086a41186a22084200370300200141e0086a41106a22024200370300200141e0086a41086a22074200370300200142003703e008200610012205290000210620014188046a41086a2204200541086a29000037030020012006370388042005102f2007200429030037030020012001290388043703e00841d987ca00ad4280808080a001841001220529000021062004200541086a29000037030020012006370388042005102f200b200129038804370000200b41086a22172004290300370000200141c0066a41086a220f2007290300370300200141c0066a41106a22102002290300370300200141c0066a41186a22122008290300370300200120012903e0083703c0064120102d2205450d062005200129039804370000200541186a200d290300370000200541106a200a290300370000200541086a200e290300370000201e2005ad428080808080048410042005102f200842003703002002420037030020074200370300200142003703e00841aa87ca00ad4280808080c000841001220529000021062004200541086a29000037030020012006370388042005102f2007200429030037030020012001290388043703e00841e387ca00ad4280808080e001841001220529000021062004200541086a29000037030020012006370388042005102f200b20012903880437000020172004290300370000200f20072903003703002010200229030037030020122008290300370300200120012903e0083703c006200141e0086a200141c0066a10850420012d00e00821042012200141f9086a2900003703002010200141f1086a290000370300200f200141e9086a290000370300200120012900e1083703c00620044101460d03200141d0056a4200370300200141c8056a4200370300200141c0056a4200370300200142003703b8050c040b201741206a22082017490d09201941017422022008200220084b1b22024100480d090240024020190d002002102d21120c010b201220192002103121120b2012450d050b200741206a2107201220176a220820012903c006370000200841186a200e290300370000200841106a201a290300370000200841086a201b290300370000201741206a2117200221190c000b0b200141b8056a41186a200141c0066a41186a290300370300200141b8056a41106a200141c0066a41106a290300370300200141b8056a41086a200141c0066a41086a290300370300200120012903c0063703b8050b20014198046a41086a2204200141a00a6a41086a28020036020020014198046a41246a200141b8056a41186a29030037020020014198046a411c6a200141b8056a41106a29030037020020014198046a41146a200141b8056a41086a290300370200200120012903a00a220637039804200120012903b8053702a4042001418c096a200141c0046a280200360200200141e0086a41246a200141b8046a290300370200200141e0086a411c6a20014198046a41186a290300370200200141e0086a41146a20014198046a41106a290300370200200141ec086a2004290300370200200120063702e408200141003602e008200141e0086a1087044108102d2207450d0120072024360204200720233602004108102d2225450d012025202a3602042025201136020020014198046a41186a420037030020014198046a41106a2228420037030020014198046a41086a220542003703002001420037039804418de6c300ad4280808080e000841001220429000021062005200441086a29000037030020012006370398042004102f419ce6c300ad4280808080e0008410012208290000210620014188046a41086a2204200841086a29000037030020012006370388042008102f20282001290388042206370300200141e0086a41086a2005290300370300200141e0086a41106a2006370300200141e0086a41186a200429030037030020012001290398043703e008200141086a200141e0086a412010950120012802082102200128020c210d200141c0066a41186a220a4200370300200141c0066a41106a220e4200370300200141c0066a41086a22054200370300200142003703c00641d39bca00ad42808080808001841001220829000021062004200841086a29000037030020012006370388042008102f2005200429030037030020012001290388043703c00641bdc5c300ad4280808080e00184100122042900002106200141d8036a41086a2208200441086a290000370300200120063703d8032004102f200320012903d803370000200341086a2008290300370000200141b8056a41086a2005290300370300200141b8056a41106a200e290300370300200141b8056a41186a200a290300370300200120012903c0063703b8052001200d41e4006a41e40020021b3602e008200141b8056aad4280808080800484221e200c4280808080c00084100402400240200728020022042007280204460d002007200441a0016a360200200141003a008009200441e0006a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200141e0076a41086a2204200141e0086a41086a290300370300200141e0076a41106a2205200141e0086a41106a290300370300200141e0076a41186a2202200141e0086a41186a290300370300200120012903e008220637039804200120063703e00741012108200728020420072802006b41a0016e41016a220d410574102d220f450d03200f20012903e007370000200f41186a2002290300370000200f41106a2005290300370000200f41086a20042903003700000240200728020022042007280204460d002007200441a0016a360200200141003a008009200441e0006a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200141c0066a41186a220b200141e0086a41186a2217290300220637030020014198046a41086a2202200141e0086a41086a221929030037030020014198046a41106a220a200141e0086a41106a221a29030037030020014198046a41186a220e2006370300200120012903e00837039804410121080340200141b8056a41186a200e2903002206370300200141b8056a41106a200a2903002209370300200141b8056a41086a20022903002215370300200120012903980422163703b805200141e8036a41186a22052006370300200141e8036a41106a22102009370300200141e8036a41086a22122015370300200120163703e8030240200d2008470d00200728020420072802006b41a0016e200d6a41016a2204200d490d0a200d410174221b2004201b20044b1b220441ffffff3f712004470d0a200441057422044100480d0a02400240200d0d002004102d210f0c010b200f200d41057420041031210f0b200f450d062004410576210d0b200f20084105746a220420012903e803370000200441186a2005290300370000200441106a2010290300370000200441086a2012290300370000200841016a2108200728020022052007280204460d012007200541a0016a36020041002104200141003a008009200541e0006a21050340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200b2017290300220637030020022019290300370300200a201a290300370300200e2006370300200120012903e008370398040c000b0b2007102f0c010b2007102f4100210d4101210f410021080b200141c0066a41186a22074200370300200141c0066a41106a22024200370300200141c0066a41086a22044200370300200142003703c00641d39bca00ad428080808080018410012205290000210620014188046a41086a220a200541086a29000037030020012006370388042005102f2004200a29030037030020012001290388043703c006419087ca00ad4280808080c00084100122052900002106200141d8036a41086a220a200541086a290000370300200120063703d8032005102f200320012903d803370000200341086a200a290300370000200141b8056a41086a2004290300370300200141b8056a41106a2002290300370300200141b8056a41186a2007290300370300200120012903c0063703b8052008410574220e4104722204417f4c0d022004102d2205450d01200141003602e808200120043602e408200120053602e0082008200141e0086a10690240024020080d0020012802e808210520012802e408210220012802e008210a0c010b410020012802e80822056b210820012802e008210a20012802e4082107200f2104034002400240200720086a411f4d0d00200721020c010b200541206a22022005490d08200741017422102002201020024b1b22024100480d080240024020070d002002102d210a0c010b200a200720021031210a0b200a450d040b200a20056a22072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a290000370000200841606a2108200541206a210520022107200441206a2104200e41606a220e0d000b200120023602e408200120053602e8082001200a3602e0080b201e2005ad422086200aad84100402402002450d00200a102f0b0240200d450d00200f102f0b2025102f4108102d2207450d0120072024360204200720233602004108102d221b450d01201b202a360204201b2011360200024002402022450d0002400240200728020022042007280204460d002007200441a0016a360200200141003a00800920044180016a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200141e0076a41086a2204200141e0086a41086a290300370300200141e0076a41106a2205200141e0086a41106a290300370300200141e0076a41186a2202200141e0086a41186a290300370300200120012903e008220637039804200120063703e00741012108200728020420072802006b41a0016e41016a220d410574102d220f450d05200f20012903e007370000200f41186a2002290300370000200f41106a2005290300370000200f41086a20042903003700000240200728020022042007280204460d002007200441a0016a360200200141003a00800920044180016a2105410021040340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b200141c0066a41186a2203200141e0086a41186a220b290300220637030020014198046a41086a2202200141e0086a41086a221729030037030020014198046a41106a220a200141e0086a41106a221929030037030020014198046a41186a220e2006370300200120012903e00837039804410121080340200141b8056a41186a200e2903002206370300200141b8056a41106a200a2903002209370300200141b8056a41086a20022903002215370300200120012903980422163703b805200141e8036a41186a22052006370300200141e8036a41106a22102009370300200141e8036a41086a22122015370300200120163703e8030240200d2008470d00200728020420072802006b41a0016e200d6a41016a2204200d490d0c200d410174221a2004201a20044b1b220441ffffff3f712004470d0c200441057422044100480d0c02400240200d0d002004102d210f0c010b200f200d41057420041031210f0b200f450d082004410576210d0b200f20084105746a220420012903e803370000200441186a2005290300370000200441106a2010290300370000200441086a2012290300370000200841016a2108200728020022052007280204460d012007200541a0016a36020041002104200141003a00800920054180016a21050340200141003a00d803200141e0086a20046a200520046a2d00003a00002001200441016a22043a00800920044120470d000b2003200b290300220637030020022017290300370300200a2019290300370300200e2006370300200120012903e008370398040c000b0b2007102f0c010b2007102f4101210f410021084100210d0b20014198046a41186a2207420037030020014198046a41106a2202420037030020014198046a41086a22044200370300200142003703980441fe86ca00ad4280808080a002841001220529000021062004200541086a29000037030020012006370398042005102f419087ca00ad4280808080c0008410012205290000210620014188046a41086a220a200541086a29000037030020012006370388042005102f2028200129038804370000202841086a200a290300370000200141e0086a41086a2004290300370300200141e0086a41106a2002290300370300200141e0086a41186a200729030037030020012001290398043703e0082008410574220e4104722204417f4c0d042004102d2205450d03200141003602a0042001200436029c042001200536029804200820014198046a10690240024020080d0020012802a0042105200128029c042102200128029804210a0c010b410020012802a00422056b2108200128029804210a200128029c042107200f2104034002400240200720086a411f4d0d00200721020c010b200541206a22022005490d0a200741017422102002201020024b1b22024100480d0a0240024020070d002002102d210a0c010b200a200720021031210a0b200a450d060b200a20056a22072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a290000370000200841606a2108200541206a210520022107200441206a2104200e41606a220e0d000b2001200236029c04200120053602a0042001200a360298040b200c42808080808004842005ad422086200aad84100402402002450d00200a102f0b0240200d450d00200f102f0b201b102f0c010b201b102f2007102f0b02402027450d002011102f0b0240202620012802c803220445720d0020012802cc03450d002004102f0b02402020450d002021102f0b201ca7450d002023102f0b2001419bd9c900410741f3dcc900410b41c8e1ca00410010cc03024020012802004101470d0020012802042217450d0020014198046aad4280808080c00084211541002103419bd9c900ad4280808080f0008421164100211203402001201236029804200141e0086a41186a220220151003220441186a290000370300200141e0086a41106a2210200441106a290000370300200141e0086a41086a220d200441086a290000370300200120042900003703e0082004102f41c00010332204450d02201610012205290000210620014188046a41086a2207200541086a29000037030020012006370388042005102f200441086a2007290300370000200420012903880437000041fedcc900ad4280808080f00084100122052900002106200141d8036a41086a2207200541086a290000370300200120063703d8032005102f200441186a2007290300370000200420012903d803370010200441386a2002290300370000200441306a2010290300370000200441286a200d290300370000200420012903e00837002020014198046a200441c00010aa0202402001280298042211450d002004ad428080808080088410050b20012802a0042105200128029c04210b2004102f2011450d0102402005450d002005410574210820032105201121040340200141b8056a41186a2207200441186a290000370300200141b8056a41106a220a200441106a290000370300200141b8056a41086a220e200441086a290000370300200120042900003703b80520014198046a41186a420037030020014198046a41106a420037030020014198046a41086a420037030020014200370398040240200141b8056a20014198046a412010ea06450d00200141e0086a200141b8056a108d02427f20012903e008220620012903f0087c22092009200654220f200d290300220620022903007c200fad7c220920065420092006511b220f1b427f2009200f1b84500d00200220072903003703002010200a290300370300200d200e290300370300200120012903b8053703e00820014198046a200510fe0220013502a0042106200128029804210a4110102d2207450d0520074110412010312207450d05200720012903e008370000200741186a2002290300370000200741106a2010290300370000200741086a200d2903003700002007412041c00010312207450d0520074200370020200741286a42003700002006422086200aad842007ad428080808080068410042007102f200128029c04450d00200a102f0b200441206a2104200541016a2105200841606a22080d000b0b0240200b450d002011102f0b200341c0006a2103201241016a22122017470d000b0b02400240200041044b0d0020014198046aad428080808080048421060c010b200141e0076a10f8024100210520012802e007210241002107024020012802e807220a450d002000417b6a210d200a41c4006c2108410021072002210402400340024020042d00004101460d00200441046a280200200d4f0d020b200441c4006a2104200741016a2107200841bc7f6a22080d000b0b200a2007490d070b200141003602e807200a20076b210e2002200741c4006c220d6a210402400340200d2005460d01200220056a2108200541c4006a220a210520082d00004102470d000b2002200a6a21040b2002200741c4006c6a21080240034020082004460d0120042d00002105200441c4006a210420054102470d000b0b0240200e450d0002402007450d0020022002200741c4006c6a200e41c4006c10e9061a0b2001200e3602e8070b20012802e4072107200141b8056a41186a4200370300200141b8056a41106a22084200370300200141b8056a41086a22044200370300200142003703b805419487ca00ad4280808080a0018410012205290000210620014188046a41086a220d200541086a29000037030020012006370388042005102f2004200d29030037030020012001290388043703b805418691c700ad4280808080e00084100122052900002106200141d8036a41086a220d200541086a290000370300200120063703d8032005102f200820012903d803220637030020014198046a41086a200429030037030020014198046a41106a200637030020014198046a41186a200d290300370300200120012903b80537039804200141e0086a2002200e10910320014198046aad4280808080800484220620013502e80842208620012802e0082204ad841004024020012802e408450d002004102f0b2007450d002002102f0b200141b8056a41186a4200370300200141b8056a41106a22074200370300200141b8056a41086a22044200370300200142003703b805419487ca00ad4280808080a0018410012205290000210920014188046a41086a2208200541086a29000037030020012009370388042005102f2004200829030037030020012001290388043703b805419e87ca00ad4280808080c00184100122052900002109200141d8036a41086a2202200541086a290000370300200120093703d8032005102f200720012903d803220937030020014198046a41086a2205200429030037030020014198046a41106a2207200937030020014198046a41186a22082002290300370300200120012903b80537039804200141003a00d8032006200141d8036aad42808080801084100420014198046a10fb02200141c0066a41186a22022008290300370300200141c0066a41106a220d2007290300370300200141c0066a41086a220a200529030037030020012001290398043703c0064124102d22040d060b1036000b103d000b419ef4c90041c90041e8f4c9001055000b419ef4c90041c90041f8f4c9001055000b1038000b41a6b5ca00411c41f8b4ca001039000b200420012903c00637000020044114360220200441186a2002290300370000200441106a200d290300370000200441086a200a29030037000020014281808080103702e408200120043602e008200141e0086a10fc02200141e0086a41186a2008290300370300200141e0086a41106a2007290300370300200141e0086a41086a200529030037030020012001290398043703e008200141e0086a10fd0210fb03200141b00a6a24000ba71b0c017f017e037f017e037f017e017f017e047f017e017f027e230041f0036b2200240042002101200041a0036a41186a4200370300200041a0036a41106a22024200370300200041a0036a41086a22034200370300200042003703a00341aa87ca00ad4280808080c00084100122042900002105200041e0026a41086a2206200441086a290000370300200020053703e0022004102f20032006290300370300200020002903e0023703a00341db98ca00ad4280808080b001841001220429000021052006200441086a290000370300200020053703e0022004102f200220002903e0022205370300200041d0036a41086a2003290300370300200041d0036a41106a2005370300200041d0036a41186a2006290300370300200020002903a0033703d003200041d8016a200041d0036a10f3040240024020002d00d8014102470d00200041d8016a41186a4200370300200041d8016a41106a22044200370300200041d8016a41086a22064200370300200042003703d801418de6c300ad4280808080e000841001220329000021052006200341086a290000370300200020053703d8012003102f41bae6c300ad4280808080e00084100122032900002105200041106a41086a2207200341086a290000370300200020053703102003102f200420002903102205370300200041f8006a41086a2006290300370300200041f8006a41106a2005370300200041f8006a41186a2007290300370300200020002903d801370378200041d8016a200041f8006a10f4020240024020002802d80122080d0041042108410021060c010b20002902dc012201422088a721060b02400240200641246c2203450d002008210602400340024020062d00004101470d00200641016a2800002104200641086a28020021072000200641106a28020036027c20002007360278200441c28289aa04470d00200041d8016a200041f8006a10920520002d00d80122074102470d020b200641246a21062003415c6a2203450d020c000b0b200020002800dc0136006b200020002800d901360268200041e0016a2903002105200041106a200041e8016a41d80010e8061a200041c0026a29030021090c010b410221070b02402001422088a72206450d00200641246c21032008210603400240024020062d0000220441044b0d0002400240024020040e050400010204040b2006410c6a280200450d03200641086a280200102f0c030b2006410c6a280200450d02200641086a280200102f0c020b2006410c6a280200450d01200641086a280200102f0c010b200641086a280200450d00200641046a280200102f0b200641246a21062003415c6a22030d000b0b02402001a7450d002008102f0b200020002802683602d0012000200028006b3600d301200041f8006a200041106a41d80010e8061a0240024020074102470d0041002103200041d0036a21080c010b200020002802d0013602d802200020002800d3013600db02200020053703d002200041d8016a200041f8006a41d80010e8061a200020093703c802200041a0036a41186a22044200370300200041a0036a41106a22084200370300200041a0036a41086a22034200370300200042003703a00341aa87ca00ad4280808080c0008422011001220a2900002109200041e0026a41086a2206200a41086a290000370300200020093703e002200a102f20032006290300370300200020002903e0023703a00341c387ca00ad4280808080b00184220b1001220a29000021092006200a41086a290000370300200020093703e002200a102f200220002903e002370000200241086a220c2006290300370000200041d0036a41086a220a2003290300370300200041d0036a41106a220d2008290300370300200041d0036a41186a220e2004290300370300200020002903a0033703d0032000200041d0036a10e301024002402000280200450d002000290308500d00200041d0036aad42808080808004842109200041d0036a21080c010b200041d0026a200041c8026a20074101461b2903002109200442003703002008420037030020034200370300200042003703a00320011001220f29000021102006200f41086a290000370300200020103703e002200f102f20032006290300370300200020002903e0023703a003200b1001220f290000210b2006200f41086a2900003703002000200b3703e002200f102f200220002903e002370000200c2006290300370000200a2003290300370300200d2008290300370300200e2004290300370300200020002903a0033703d003200020093703a003200041d0036aad42808080808004842209200041a0036aad42808080808001841004200442003703002008420037030020034200370300200042003703a00320011001220f290000210b2006200f41086a2900003703002000200b3703e002200f102f20032006290300370300200020002903e0023703a00341b887ca00ad4280808080b001841001220f290000210b2006200f41086a2900003703002000200b3703e002200f102f200220002903e002370000200c2006290300370000200a2003290300370300200d2008290300370300200e2004290300370300200020002903a0033703d003200041a0036a200041d0036a10990520002902a403210b20002802a003210f200442003703002008420037030020034200370300200042003703a00320011001221129000021012006201141086a290000370300200020013703e0022011102f20032006290300370300200020002903e0023703a00341d987ca00ad4280808080a001841001221129000021012006201141086a290000370300200020013703e0022011102f200220002903e002370000200c2006290300370000200a2003290300370300200d2008290300370300200e2004290300370300200020002903a0033703d003200041a0036a200041d0036a10850420002d00a0032106200e200041b9036a290000370300200d200041b1036a290000370300200a200041a9036a290000370300200020002900a1033703d003200f4108200f1b21030240024020064101460d0020004198036a420037030020004190036a420037030020004188036a420037030020004200370380030c010b20004180036a41186a200041d0036a41186a29030037030020004180036a41106a200041d0036a41106a29030037030020004180036a41086a200041d0036a41086a290300370300200020002903d003370380030b200041e0026a41086a20004180036a41086a2903002201370300200041e0026a41106a20004180036a41106a2903002210370300200041e0026a41186a20004180036a41186a2903002212370300200020002903800322133703e002200041a0036a41086a200b4200200f1b370300200041a0036a41106a2013370300200041a0036a41186a2001370300200041c0036a2010370300200041c8036a2012370300200020033602a403200041003602a003200041a0036a108704200041d0036a21080b200041d0026a200041c8026a20074101461b2903002101200041a0036a41186a220a4200370300200041a0036a41106a220d4200370300200041a0036a41086a22034200370300200042003703a00341aa87ca00ad4280808080c0008410012204290000210b200041e0026a41086a2206200441086a2900003703002000200b3703e0022004102f20032006290300370300200020002903e0023703a00341ce87ca00ad4280808080b0018410012204290000210b2006200441086a2900003703002000200b3703e0022004102f200220002903e002370000200241086a2006290300370000200041d0036a41086a2003290300370300200041d0036a41106a200d290300370300200041d0036a41186a200a290300370300200020002903a0033703d003200020013703a0032009200041a0036aad428080808080018410044100210320070d0020004180036a41086a200041d8016a41086a29030037030020004180036a41106a200041d8016a41106a2d00003a0000200020002800db02360073200020002802d802360270200020002903d80137038003410121030b200041d8016a41086a20004180036a41086a290300370300200041d8016a41106a20004180036a41106a2d00003a0000200020002802703602782000200028007336007b20002000290380033703d801200041a0036a41186a220a4200370300200041a0036a41106a220d4200370300200041a0036a41086a22044200370300200042003703a00341aa87ca00ad4280808080c00084100122072900002101200041e0026a41086a2206200741086a290000370300200020013703e0022007102f20042006290300370300200020002903e0023703a00341db98ca00ad4280808080b001841001220729000021012006200741086a290000370300200020013703e0022007102f200220002903e002370000200241086a2006290300370000200041d0036a41086a2004290300370300200041d0036a41106a200d290300370300200041d0036a41186a200a290300370300200020002903a0033703d0034121410120031b102d2206450d010240024020030d00200641003a000042808080801021010c010b200641013a00002006200028027836000120062005370008200620002903d801370010200641046a200028007b360000200641186a200041e0016a290300370000200641206a200041e8016a2d00003a00004280808080900421010b2008ad428080808080048420012006ad8410042006102f0b200041f0036a24000f0b1036000b940405047f017e017f017e057f230041f0006b22002400200041c0006a41186a22014200370300200041c0006a41106a22024200370300200041c0006a41086a220342003703002000420037034041aa87ca00ad4280808080c000842204100122052900002106200041e0006a41086a2207200541086a290000370300200020063703602005102f200320072903003703002000200029036037034041ae87ca00ad4280808080a001841001220529000021062007200541086a290000370300200020063703602005102f200220002903602206370300200041206a41086a22082003290300370300200041206a41106a22092006370300200041206a41186a220a200729030037030020002000290340370320200041106a200041206a10e3012000280210210b200029031821062001420037030020024200370300200342003703002000420037034020041001220529000021042007200541086a290000370300200020043703602005102f200320072903003703002000200029036037034041c387ca00ad4280808080b001841001220529000021042007200541086a290000370300200020043703602005102f2002200029036022043703002008200329030037030020092004370300200a2007290300370300200020002903403703202000200041206a10e3012000280200210720002903082104200041f0006a24002004420020071b200642c8017e4200200b1b7c0bd60202057f027e230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100210730240024020022802082201450d00200228020c210302400240200241106a28020022044104490d0020044104460d0020012d0004220541014b0d0020012800002106420021070240024020050e020100010b2004417b6a4108490d0120012900052108420121070b20002008370308200041106a20063602000c010b20024100360220200242013703182002410b36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b885c7003602382002200241286a360248200241346a41d8dbc100200241386a103c1a200235022042208620023502188410080240200228021c450d002002280218102f0b420221070b200020073703002003450d012001102f0c010b200042023703000b200241d0006a24000bd80301077f230041e0006b220224002002412036020c20022001360208200241106a2001ad428080808080048410021073024002400240024020022802102201450d00200228021421032002200241186a280200360224200220013602202002200241206a10e6010240024020022802000d0020022802242204200228020422054102742206490d002006417f4c0d040240024020060d00410121070c010b200610332207450d06200720022802202208200610e8061a2002200420066b3602242002200820066a3602200b2007450d000240024002402006450d0020074103710d02200541ffffffff037122060d012007102f0b41042107410021060b41000d012007450d012000200636020420002007360200200041086a20063602000c020b2007102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602000b2003450d012001102f0c010b200041003602000b200241e0006a24000f0b103d000b1036000bf93819047f017e017f017e027f017e057f027e017f017e017f027e037f027e047f017e047f017e017f017e087f037e037f017e017f230041e0036b22012400200141e0026a41186a22024200370300200141e0026a41106a22034200370300200141e0026a41086a22044200370300200142003703e00241eba1ca00ad4280808080f000842205100122062900002107200141a0026a41086a2208200641086a290000370300200120073703a0022006102f20042008290300370300200120012903a0023703e00241adcac800ad4280808080900184220710012209290000210a200141d0006a41086a2206200941086a2900003703002001200a3703502009102f20032001290350220a370300200141a8016a41086a220b2004290300370300200141a8016a41106a220c200a370300200141a8016a41186a220d2006290300370300200120012903e0023703a801200141e0026a200141a8016a10fd032003280200210e20012903e002210a200242003703002003420037030020044200370300200142003703e00220051001220929000021052008200941086a290000370300200120053703a0022009102f20042008290300370300200120012903a0023703e00220071001220829000021052006200841086a290000370300200120053703502008102f200320012903502205370300200b2004290300370300200c2005370300200d2006290300370300200120012903e0023703a80102404104102d2204450d0020044100200e41016a200a4202511b220f36000020044104410810312204450d00200441003a0004200141a8016aad2210428080808080048422112004ad4280808080d0008410042004102f200141e0026a41186a22064200370300200141e0026a41106a22094200370300200141e0026a41086a22044200370300200142003703e00241eba1ca00ad4280808080f00084100122082900002105200141a0026a41086a2202200841086a290000370300200120053703a0022008102f20042002290300370300200120012903a0023703e002418ca1ca00ad4280808080a00184100122082900002105200141d0006a41086a2202200841086a290000370300200120053703502008102f20032001290350370000200341086a2002290300370000200141a8016a41086a2004290300370300200141a8016a41106a2009290300370300200141a8016a41186a2006290300370300200120012903e0023703a801200141e0026a200141a8016a109d0520012802e0022204410420041b2112024002400240024020012902e402420020041b22054220882207a722042005a7470d00200441016a22082004490d012007a722094101742206200820082006491b220841ffffffff01712008470d01200841037422084100480d010240024020040d002008102d21120c010b201220094103742008103121120b2012450d042005422088a721042008410376ad21050b201220044103746a220820003602042008200f360200200542ffffffff0f832113200441016a211402400240200f41a1054f0d0020132014ad4220868421130c010b2014450d00200f41e07a6a2108200441ffffffff017141016a21064100210e2012210402400340200428020020084f0d01200441086a21042006200e41016a220e470d000b0b2014200e490d030240200e450d00200e410374210d200141e0026aad4280808080c0008421052012210b0340200b280200210c41eba1ca00ad4280808080f00084220710012204290000210a20014180026a41086a2208200441086a2900003703002001200a370380022004102f4183cbc800ad4280808080b0028410012204290000210a20014190026a41086a2206200441086a2900003703002001200a370390022004102f2001200c3602e00220051003220441086a290000210a200441106a290000211520042900002116200141a0026a41186a2209200441186a290000370300200141a0026a41106a22002015370300200141a0026a41086a2202200a370300200120163703a0022004102f41c000102d2204450d0620042001290380023700002004200129039002370010200420012903a002370020200441086a2008290300370000200441186a2006290300370000200441286a2002290300370000200441306a2000290300370000200441386a20092903003700002004ad428080808080088410132004102f20071001220429000021072008200441086a29000037030020012007370380022004102f4196cbc800ad4280808080b002841001220429000021072006200441086a29000037030020012007370390022004102f2001200c3602e00220051003220441086a2900002107200441106a290000210a200429000021152009200441186a2900003703002000200a37030020022007370300200120153703a0022004102f41c000102d2204450d06200b41086a210b20042001290380023700002004200129039002370010200420012903a002370020200441086a2008290300370000200441186a2006290300370000200441286a2002290300370000200441306a2000290300370000200441386a20092903003700002004ad428080808080088410132004102f200d41786a220d0d000b0b2014200e6b2217450d000240200e450d0020122012200e4103746a201741037410e9061a0b20122802042118200141a0026a41186a22194200370300200141a0026a41106a220c4200370300200141a0026a41086a220d4200370300200142003703a002419c9eca00ad4280808080f00084221a10012204290000210520014180026a41086a2214200441086a29000037030020012005370380022004102f200d201429030037030020012001290380023703a00241919eca00ad4280808080b00184221b10012204290000210520014190026a41086a221c200441086a29000037030020012005370390022004102f200c2001290390022205370300200141e0026a41086a221d200d290300370300200141e0026a41106a221e2005370300200141e0026a41186a221f201c290300370300200120012903a0023703e002200141a8016a200141e0026a1083044101210620012902ac0121200240024020012802a80122044101460d00200441014621060c010b2020422088a722212018201820214b1b220e2020a72208490d000240200e20084d0d00200141e0026aad4280808080c000842115419c9eca00ad4280808080f0008421160340201610012204290000210520014180026a41086a2206200441086a29000037030020012005370380022004102f41f8dec700ad4280808080a0028410012204290000210520014190026a41086a2209200441086a29000037030020012005370390022004102f200120083602e00220151003220441086a2900002105200441106a29000021072004290000210a200141a0026a41186a2200200441186a290000370300200141a0026a41106a22022007370300200141a0026a41086a220b20053703002001200a3703a0022004102f41c000102d2204450d0720042001290380023700002004200129039002370010200420012903a002370020200441086a2006290300370000200441186a2009290300370000200441286a200b290300370000200441306a2002290300370000200441386a20002903003700002004ad428080808080088410052004102f200e200841016a2208470d000b0b20182021492106202042808080807083200ead8421200b20132017ad42208684211320194200370300200c4200370300200d4200370300200142003703a002201a1001220429000021052014200441086a29000037030020012005370380022004102f200d201429030037030020012001290380023703a002201b100122042900002105201c200441086a29000037030020012005370390022004102f200c200129039002370000200c41086a201c290300370000201d200d290300370300201e200c290300370300201f2019290300370300200120012903a0023703e002024020060d00200141e0026aad428080808080048410050c010b4108102d2204450d04200420203e0000200420204220883e0004200141e0026aad42808080808004842004ad428080808080018410042004102f0b200141e0026a41186a22064200370300200141e0026a41106a22094200370300200141e0026a41086a22044200370300200142003703e00241eba1ca00ad4280808080f00084100122082900002105200141a0026a41086a2200200841086a290000370300200120053703a0022008102f20042000290300370300200120012903a0023703e002418ca1ca00ad4280808080a00184100122082900002105200141d0006a41086a2200200841086a290000370300200120053703502008102f20032001290350370000200341086a2000290300370000200141a8016a41086a2004290300370300200141a8016a41106a2009290300370300200141a8016a41186a2006290300370300200120012903e0023703a8010240024020120d00201110050c010b2013422088a722044103744104722208417f4c0d022008102d2206450d04200141003602e802200120083602e402200120063602e0022004200141e0026a10690240024020040d0020012802e802210420012802e402210620012802e00221080c010b201220044103746a2114410020012802e80222026b210920012802e4022106410021040340200220046a2100201220046a220b280200210c02400240200620096a4104490d0020012802e00221080c010b200041046a22082000490d042006410174220d2008200d20084b1b220d4100480d040240024020060d00200d102d21080c010b20012802e0022006200d103121080b2008450d072001200d3602e402200120083602e002200d21060b2001200041046a220d3602e802200820026a20046a200c360000200b41046a280200210c0240200620096a417c6a41034b0d00200d41046a220e200d490d042006410174220d200e200d200e4b1b220d4100480d040240024020060d00200d102d21080c010b20082006200d103121080b2008450d072001200d3602e402200120083602e002200d21060b2001200041086a3602e802200820026a20046a41046a200c360000200941786a2109200441086a2104200b41086a2014470d000b200220046a21040b2013a7210920112004ad4220862008ad84100402402006450d002008102f0b2009450d002012102f0b200141e0026a41186a22224200370300200141e0026a41106a22234200370300200141e0026a41086a22244200370300200142003703e00241eba1ca00ad4280808080f000842225100122042900002105200141a0026a41086a2226200441086a290000370300200120053703a0022004102f20242026290300370300200120012903a0023703e0024196a1ca00ad4280808080e002842227100122042900002105200141d0006a41086a2228200441086a290000370300200120053703502004102f20032001290350370000200341086a22292028290300370000200141a8016a41086a222a2024290300370300200141a8016a41106a222b2023290300370300200141a8016a41186a222c2022290300370300200120012903e0023703a801200141c8006a200141a8016a4120109501200128024c212d02402001280248222e4101470d000240202d4100200f41d87e6a22042004200f4b1b222f4f0d00200141a0026aad42808080808002842130200141e0026aad4280808080800484213120104280808080c000842132200141a0026a41106a2112200141a8016a41386a2133200141a8016a41246a2100202d2134034041eba1ca00ad4280808080f00084100122042900002105200141a0026a41086a2214200441086a290000370300200120053703a0022004102f41e0cfc800ad4280808080800284100122042900002105200141d0006a41086a220f200441086a290000370300200120053703502004102f200120343602a80120321003220441086a2900002105200441106a29000021072004290000210a200141e0026a41186a220b200441186a290000370300200141e0026a41106a220d2007370300200141e0026a41086a220e20053703002001200a3703e0022004102f41c000102d2204450d06200420012903a00237000020042001290350370010200420012903e002370020200441086a2014290300370000200441186a200f290300370000200441286a200e290300370000200441306a200d290300370000200441386a200b290300370000200141e0026a2004109a050240024020012802e0022235450d002004ad4280808080800884100520012902e40221360c010b42002136410821350b2004102f20352036422088a7220441d8006c6a210c2035210902402004450d000340200141a8016a41186a2204200941186a290300370300200141a8016a41106a2208200941106a290300370300200141a8016a41086a2206200941086a2903003703002009280220210220092903002105200141e0026a41206a221c200941c4006a290200370300200141e0026a41286a2217200941cc006a290200370300200141e0026a41306a2219200941d4006a280200360200200e2009412c6a290200370300200d200941346a290200370300200b2009413c6a290200370300200120053703a8012001200941246a2902003703e002200941d8006a21092002450d0120014188016a41186a2218200429030037030020014188016a41106a221d200829030037030020014188016a41086a221e2006290300370300200f200e290300370300200141d0006a41106a221f200d290300370300200141d0006a41186a2221200b290300370300200141d0006a41206a2237201c290300370300200141d0006a41286a221c2017290300370300200141d0006a41306a22172019280200360200200120012903a80137038801200120012903e002370350200420182903003703002008201d2903003703002006201e29030037030020002001290350370200200041086a200f290300370200200041106a201f290300370200200041186a2021290300370200200041206a2037290300370200200041286a201c290300370200200041306a201728020036020020012001290388013703a801200120023602c801200142003703c802200142003703c002200120042903003703d802200120082903003703d002203320012903a8012006290300200141d0026a200141c0026a10b403024020012802d0012204450d00200441306c21082002210403402004200441206a290300200441286a290300200141d0026a200141c0026a10b403200441306a2104200841506a22080d000b0b200141c0026a41086a290300211020012903c002212020012802d401211c024002400240024020012903d0022207200141d0026a41086a290300220584500d0020012802dc012204450d00200141386a202020072020200754201020055420102005511b22081b221a2010200520081b221b2004ad420010ee0620044105742108200141386a41086a290300210a20012903382116201a2105201b2107201c2104034020042016200520052016562007200a562007200a511b22061b2215200a200720061b221310b502200720137d2005201554ad7d2107200520157d2105200441206a2104200841606a22080d000b427f2020201a7d220a20057c22052005200a5422042010201b7d2020201a54ad7d220520077c2004ad7c220720055420072005511b22041b2205427f200720041b2207844200520d01200141a0026a41186a220442003703002012420037030020144200370300200142003703a00241e7a2ca00ad4280808080800184220510012206290000210720014180026a41086a2208200641086a29000037030020012007370380022006102f2014200829030037030020012001290380023703a00241ecb5c600ad4280808080d00184220710012217290000210a20014190026a41086a2206201741086a2900003703002001200a370390022017102f2012200129039002370000201241086a22182006290300370000200e2014290300370300200d2012290300370300200b2004290300370300200120012903a0023703e002200141206a200141e0026a4120109c01200141206a41106a290300210a2001290328211520012802202117200442003703002012420037030020144200370300200142003703a00220051001221929000021052008201941086a29000037030020012005370380022019102f2014200829030037030020012001290380023703a00220071001220829000021052006200841086a29000037030020012005370390022008102f201220012903900237000020182006290300370000200e2014290300370300200d2012290300370300200b2004290300370300200120012903a0023703e0022001200a420020171b3703a80220012015420020171b3703a0022031203010040c030b20202010844200520d01200141a0026a41186a220442003703002012420037030020144200370300200142003703a00241e7a2ca00ad4280808080800184220510012206290000210720014180026a41086a2208200641086a29000037030020012007370380022006102f2014200829030037030020012001290380023703a00241ecb5c600ad4280808080d00184220710012217290000210a20014190026a41086a2206201741086a2900003703002001200a370390022017102f2012200129039002370000201241086a22182006290300370000200e2014290300370300200d2012290300370300200b2004290300370300200120012903a0023703e002200141086a200141e0026a4120109c01200141086a41106a290300210a2001290310211520012802082117200442003703002012420037030020144200370300200142003703a00220051001221929000021052008201941086a29000037030020012005370380022019102f2014200829030037030020012001290380023703a00220071001220829000021052006200841086a29000037030020012005370390022008102f201220012903900237000020182006290300370000200e2014290300370300200d2012290300370300200b2004290300370300200120012903a0023703e0022001200a420020171b3703a80220012015420020171b3703a0022031203010040c020b200141e0026a41f4c7c40010b402200141e0026a2005200710b502200b2007370300200120053703f002200141063a00e8022001410c3a00e00241c8e1ca004100200141e0026a108c010c010b200141e0026a41f4c7c40010b402200141e0026a2020201010b502200b2010370300200120203703f002200141063a00e8022001410c3a00e00241c8e1ca004100200141e0026a108c010b024020012802cc01450d002002102f0b024020012802d801450d00201c102f0b2009200c470d000b200c21090b2036a721080240200c2009460d0003400240200941246a280200450d00200941206a280200102f0b200941d8006a21040240200941306a280200450d002009412c6a280200102f0b20042109200c2004470d000b0b203441016a213402402008450d002035102f0b2034202f470d000b0b202d202f202d202f4b1b212d0b202242003703002023420037030020244200370300200142003703e00220251001220429000021052026200441086a290000370300200120053703a0022004102f20242026290300370300200120012903a0023703e00220271001220429000021052028200441086a290000370300200120053703502004102f2003200129035037000020292028290300370000202a2024290300370300202b2023290300370300202c2022290300370300200120012903e0023703a80102400240202e0d00201110050c010b2001202d3602e0022011200141e0026aad4280808080c0008410040b200141e0036a24000f0b1038000b103d000b41a6b5ca00411c41f8b4ca001039000b1036000bf68b010a047f017e017f017e017f017e077f047e167f067e230041f0086b22022400200241f0046a41186a22034200370300200241f0046a41106a22044200370300200241f0046a41086a22054200370300200242003703f00441eba1ca00ad4280808080f000842206100122072900002108200241d0086a41086a2209200741086a290000370300200220083703d0082007102f20052009290300370300200220022903d0083703f00441d2a0ca00ad4280808080a00184220810012207290000210a200241b8036a41086a220b200741086a2900003703002002200a3703b8032007102f200420022903b803220a37030020024180046a41086a220c200529030037030020024180046a41106a220d200a37030020024180046a41186a220e200b290300370300200220022903f00437038004200241b8026a20024180046a412010950120022802b802210f20022802bc022110200342003703002004420037030020054200370300200242003703f004200610012207290000210a2009200741086a2900003703002002200a3703d0082007102f20052009290300370300200220022903d0083703f0042008100122072900002108200b200741086a290000370300200220083703b8032007102f200420022903b8032208370300200c2005290300370300200d2008370300200e200b290300370300200220022903f004370380042002201041016a4100200f1b22113602f00420024180046aad22124280808080800484200241f0046aad22134280808080c0008422081004200610012207290000210a2009200741086a2900003703002002200a3703d0082007102f41dca0ca00ad4280808080d0028410012207290000210a200b200741086a2900003703002002200a3703b8032007102f200220113602800420124280808080c0008410032207290000210a200741086a2900002114200741106a29000021152003200741186a29000037030020042015370300200520143703002002200a3703f0042007102f024002400240024041c000102d2207450d00200720022903d008370000200720022903b803370010200720022903f004370020200741086a2009290300370000200741186a200b290300370000200741286a2005290300370000200741306a2004290300370000200741386a2003290300370000200220013602f0042007ad4280808080800884200810042007102f200342003703002004420037030020054200370300200242003703f00420061001220729000021062009200741086a290000370300200220063703d0082007102f20052009290300370300200220022903d0083703f00441a3a0ca00ad4280808080c00184100122072900002106200b200741086a290000370300200220063703b8032007102f200420022903b803370000200441086a200b290300370000200c2005290300370300200d2004290300370300200e2003290300370300200220022903f00437038004200241b0026a20024180046a41201095010240201120022802b40241016a41d50020022802b0021b6b220520114b0d00200510ee050b200242003702c40220024190bdc6003602c00241eba1ca00ad4280808080f00084100122052900002106200241b8036a41086a2207200541086a290000370300200220063703b8032005102f4195c6c800ad428080808080028410012205290000210620024180046a41086a2209200541086a29000037030020022006370380042005102f200241f0046a41086a22052007290300370300200241f0046a41186a220b2009290300370300200220022903b8033703f00420022002290380043703800520024180046a200241f0046a108801200241f0046a200228028004220920022802880410ad02200241f0046a41106a21160240200228028404450d002009102f0b20024190036a41086a2005290300220637030020024190036a41106a2016290300220837030020024190036a41186a200b290300220a37030020024190036a41206a200241f0046a41206a2d000022053a0000200220022903f004221437039003200241b8036a41206a20053a0000200241b8036a41186a200a370300200241b8036a41106a200837030020072006370300200220143703b803200241f0046a200241b8036a109904410121170240024002400240024002400240024020022802f0044101460d0041042118410021194100211a4100211b0c010b200241f0046a410272211c200241f0046a410172211d200241f0046a410472211e200241a8046a211f4100210d4100211a410121174100211b410421180340200241d0026a41086a201e41086a2902002206370300200241d0026a41106a201e41106a2902002208370300200241d0026a41186a201e41186a290200220a3703002002201e29020022143703d0022002280294052120200241f0026a41186a2221200a370300200241f0026a41106a22222008370300200241f0026a41086a22232006370300200220143703f002200241f0046a41186a2201200a370300200241f0046a41106a220f2008370300200241f0046a41086a22102006370300200220143703f0044120102d2205450d08200520022903f002370000200541186a2021290300370000200541106a2022290300370000200541086a2023290300370000200241e0036a41086a20102903002206370300200241e0036a41106a200f2903002208370300200241e0036a41186a2001290300220a370300200220022903f00422143703e0032001200a370300200f200837030020102006370300200220143703f0040240200d201b470d00200d41016a2207200d490d0c200d41017422092007200920074b1bad422c7e2206422088a70d0c2006a722074100480d0c02400240200d0d002007102d21180c010b2018200d412c6c2007103121180b2018450d092007412c6e211b0b2018200d412c6c6a220720022903f00437020020102903002106200f29030021082001290300210a200742818080801037022420072005360220200741186a200a370200200741106a2008370200200741086a2006370200200241d0086a41186a22242021290300370300200241d0086a41106a22252022290300370300200241d0086a41086a22262023290300370300200220022903f0023703d0080240024020022802c00222034190bdc600460d0020022802c402210c0c010b200241f0046a410041e00210e7061a201f410036020020024180046a41206a2205420037030020024180046a41186a2207420037030020024180046a41106a2209420037030020024180046a41086a220b42003703002002420037038004419403102d2203450d094100210c200341003b010620034100360200200341086a200241f0046a41e00210e8061a20034190036a201f28020036020020034188036a200529030037020020034180036a2007290300370200200341f8026a2009290300370200200341f0026a200b29030037020020032002290380043702e802200241003602c402200220033602c0020b200d41016a211902400240024003400240024020032f0106220e0d00410021090c010b200e4105742105200341086a2107417f21090340024020050d00200e21090c020b200941016a2109200241d0086a2007412010ea06220b450d03200541606a2105200741206a2107200b417f4a0d000b0b0240200c450d00200c417f6a210c200320094102746a4194036a28020021030c010b0b200241b0046a41186a22052024290300370300200241b0046a41106a22072025290300370300200241b0046a41086a220b2026290300370300200220022903d0083703b004200220022802c80241016a3602c802200220093602dc08200220033602d408200241003602d0082002200241c0026a3602d80820024180046a41186a2226200529030037030020024180046a41106a2227200729030037030020024180046a41086a2228200b290300370300200220022903b00437038004200241f0046a200241d0086a20024180046a2020107720022d00f0044101470d02200241d0046a41186a2209201d41186a2229290000370300200241d0046a41106a220b201d41106a222a290000370300200241d0046a41086a2203201d41086a222b2900003703002002201d2900003703d004200228029c05210520022802a805210c20022802a405210720022802a005210e20022802980522242802002220450d0120242f01042124034020022802940521252002202441ffff03713602dc08200220053602d808200220203602d4082002202541016a3602d008202620092903003703002027200b29030037030020282003290300370300200220022903d00437038004200241f0046a200241d0086a20024180046a200e2007200c107820022d00f0044101470d0320092029290000370300200b202a2900003703002003202b2900003703002002201d2900003703d004200228029c05210520022802a805210c20022802a405210720022802a005210e20022802980522242802002220450d0220242f010421240c000b0b200320094102746a41e8026a20203602000c010b201c410041be0310e7061a41c403102d2220450d0920204100360200202041046a200241f0046a41c00310e8061a202020052802002224360294032005202036020020052005280204222541016a360204202441003b010420242020360200200241b0086a41186a22242009290300370300200241b0086a41106a2226200b290300370300200241b0086a41086a220b2003290300370300200220022903d0043703b0082025200c470d0420202f01062205410a4b0d03202020054105746a220941206a2024290300370000200941186a2026290300370000200941106a200b290300370000200941086a20022903b008370000202020054102746a41e8026a200e3602002020200541016a22054102746a4194036a2007360200202020053b0106200720053b0104200720203602000b20012021290300370300200f202229030037030020102023290300370300200220022903f0023703f0040240200d201a470d00200d41016a2205200d490d0c200d41017422072005200720054b1b220541ffffff3f712005470d0c200541057422054100480d0c02400240200d0d002005102d21170c010b2017200d4105742005103121170b2017450d092005410576211a0b2017200d4105746a220520022903f004370000200541186a2001290300370000200541106a200f290300370000200541086a2010290300370000200241f0046a200241b8036a1099042019210d20022802f0044101460d000b0b41eba1ca00ad4280808080f00084100122052900002106200241b8036a41086a2207200541086a290000370300200220063703b8032005102f41fbc5c800ad428080808080028410012205290000210620024180046a41086a2209200541086a29000037030020022006370380042005102f200241f0046a41086a220520072903003703002016200229038004370000201641086a2009290300370000200220022903b8033703f00420024180046a200241f0046a108801200241f0046a200228028004220920022802880410ad020240200228028404450d002009102f0b20024190036a41086a2005290300220637030020024190036a41106a200241f0046a41106a2227290300220837030020024190036a41186a200241f0046a41186a2228290300220a37030020024190036a41206a200241f0046a41206a22252d000022053a0000200220022903f004221437039003200241b8036a41206a20053a0000200241b8036a41186a200a370300200241b8036a41106a200837030020072006370300200220143703b803200241f0046a200241b8036a1096040240024020022d00a0054102470d00201921200c010b20192120034020024180046a41286a200241f0046a41286a28020036020020024180046a41206a202529030037030020024180046a41186a2226202829030037030020024180046a41106a221f202729030037030020024180046a41086a221d200241f0046a41086a290300370300200220022903f004370380042025280200212402402002290294052214422088a72222450d00200228029c05212341002103202421074100210c0240034041eba1ca00ad4280808080f00084100122052900002106200241d0046a41086a220b200541086a290000370300200220063703d0042005102f41a9cbc800ad4280808080d00184100122052900002106200241f0026a41086a220d200541086a290000370300200220063703f0022005102f4120102d2205450d0b20052007290000370000200541186a200741186a2210290000370000200541106a200741106a221e290000370000200541086a200741086a22212900003700002005ad4280808080800484100322092900002106200941086a2900002108200941106a290000210a200241b0086a41186a220e200941186a290000370300200241b0086a41106a2201200a370300200241b0086a41086a220f2008370300200220063703b0082009102f2005102f41c000102d2205450d0b200520022903d004370000200520022903f002370010200520022903b008370020200541086a200b290300370000200541186a200d290300370000200541286a200f290300370000200541306a2001290300370000200541386a200e290300370000200241d0086a2005109c0502400240024002400240024020022802dc0822090d002005102f0c010b20022802d808210d20022903e00821062005102f02402006a7450d002009102f0b200d20234b0d010b20030d01410021030c020b200341016a21030c010b200c20036b220520224f0d01200241d0046a41186a2209200720034105746b220541186a220d290000370300200241d0046a41106a220e200541106a2201290000370300200b200541086a220f290000370300200220052900003703d00420212900002106201e29000021082010290000210a20052007290000370000200d200a37000020012008370000200f200637000020102009290300370000201e200e2903003700002021200b290300370000200720022903d0043700000b200741206a21072022200c41016a220c460d020c010b0b4188bbca0020052022103b000b2003417f6a20224f0d00201442ffffffff0f83202220036bad4220868421140b200241b0046a41186a22052026290300370300200241b0046a41106a2207201f290300370300200241b0046a41086a2209201d29030037030020022002290380043703b0042024450d01200241b0086a41186a220b2005290300370300200241b0086a41106a22032007290300370300200241b0086a41086a22072009290300370300200220022903b0043703b00802402020201b470d00202041016a22052020490d0c202041017422092005200920054b1bad422c7e2206422088a70d0c2006a722054100480d0c0240024020200d002005102d21180c010b20182020412c6c2005103121180b2018450d092005412c6e211b0b20182020412c6c6a220520022903b0083702002007290300210620032903002108200b290300210a2005201437022420052024360220200541186a200a370200200541106a2008370200200541086a2006370200202041016a2120200241f0046a200241b8036a10960420022d00a0054102470d000b0b200241f0046a41186a22074200370300200241f0046a41106a22094200370300200241f0046a41086a22054200370300200242003703f00441eba1ca00ad4280808080f000842206100122032900002108200241d0086a41086a220b200341086a290000370300200220083703d0082003102f2005200b290300370300200220022903d0083703f00441afa0ca00ad4280808080e001841001220c2900002108200241b8036a41086a2203200c41086a290000370300200220083703b803200c102f200420022903b803370000200441086a220d200329030037000020024180046a41086a220e200529030037030020024180046a41106a2201200929030037030020024180046a41186a220f2007290300370300200220022903f00437038004200241a8026a20024180046a412010950120022802ac02211620022802a802211c200742003703002009420037030020054200370300200242003703f00420061001220c2900002106200b200c41086a290000370300200220063703d008200c102f2005200b290300370300200220022903d0083703f00441bda0ca00ad4280808080d002841001220b29000021062003200b41086a290000370300200220063703b803200b102f200420022903b803370000200d2003290300370000200e200529030037030020012009290300370300200f2007290300370300200220022903f00437038004200241a0026a20024180046a412010950120022802a402210720022802a0022109200242003702e40320024190bdc6003602e003202020196a222aad42e0007e2206422088a70d042006a72205417f4c0d04410821104108212902402005450d002005102d2229450d07200541e0006e212a0b4100210f4100212b02402019410574220b450d00200b410575ad42d8007e2206422088a70d0a2006a722054100480d0a2005102d2210450d07200541d8006e212b0b2007410420091b222241014b212302402019450d00200b41606a2119200241a0056a210720024198056a21212010210341002109201721050340200241b8036a41186a220c200541186a220d290000370300200241b8036a41106a220e200541106a2201290000370300200241b8036a41086a220f200541086a221e290000370300200220052900003703b80320024180046a41186a200d29000037030020024180046a41106a200129000037030020024180046a41086a201e2900003703002002200529000037038004200241e0036a20024180046a2009109a02200241f0046a41086a4200370300200241f0046a41106a4200370300200241f0046a41186a4200370300200241f0046a41206a420037030020214200370300200741186a200c290300370000200741106a200e290300370000200741086a200f290300370000200720022903b803370000200242003703f0042003200241f0046a41d00010e806220341d0006a41003a0000200341d8006a2103200541206a2105200941016a2109200b41606a220b0d000b201941057641016a210f0b2022410120231b21050240201a450d002017102f0b024002400240200f2005490d000240202a2020412c6c2205412c6d22074f0d00202a41017422092007200920074b1bad42e0007e2206422088a70d0d2006a722074100480d0d02400240202a0d002007102d21290c010b2029202a41e0006c2007103121290b2029450d0a200741e0006e212a0b201820056a211f024020200d00410021262018211a0c060b200241b0086a41106a21012018210520292124410021260340200241b0046a41186a2209200541186a290200370300200241b0046a41106a220b200541106a290200370300200241b0046a41086a2203200541086a290200370300200220052902003703b0042005412c6a211a20052802202225450d06200541286a2802002107200541246a280200211d20024180046a41186a2204200929030037030020024180046a41106a2227200b29030037030020024180046a41086a22282003290300370300200220022903b0043703800420024190026a20024180046a10ef052007ad42c8007e2206422088a70d082006a72205417f4c0d0820024190026a41086a2903002115200229039002212c0240024020050d00410821222007211e0c010b2005102d2222450d0b200541c8006e211e0b0240024020070d00410021210c010b202520074105746a2119410021212025210e0340200e41086a2900002106200e41106a2900002108200e290000210a200241f0046a41186a2223200e41186a290000370300200241f0046a41106a22202008370300200241f0046a41086a221720063703002002200a3703f004200e41206a210e200241e0036a210520022802e403210c02400240034002400240200528020022032f0106220d0d00410021090c010b200d4105742105200341086a2107417f21090340024020050d00200d21090c020b200941016a2109200241f0046a2007412010ea06220b450d03200541606a2105200741206a2107200b417f4a0d000b0b200c450d02200c417f6a210c200320094102746a4194036a21050c000b0b200f200320094102746a41e8026a220528020022074d0d052010200741d8006c6a22072903202106200741286a2903002108200241b0086a41186a2209420037030020014200370300200241b0086a41086a22074200370300200242003703b00841e7a2ca00ad42808080808001841001220b290000210a2007200b41086a2900003703002002200a3703b008200b102f41ecb5c600ad4280808080d001841001220b290000210a200241f0026a41086a2203200b41086a2900003703002002200a3703f002200b102f200120022903f002370000200141086a2003290300370000200241d0046a41086a2007290300370300200241d0046a41106a2001290300370300200241d0046a41186a2009290300370300200220022903b0083703d004200241f8016a200241d0046a4120109c01200241e8016a200229038002200241f8016a41106a290300427f420010ee06200f2005280200220b4d0d06200241d8016a202c201520022903e801420020022802f80122031b220a4201200a420156200241e8016a41086a290300420020031b220a420052200a501b22031b200a420020031b10ee062010200b41d8006c6a220b41286a427f2008200620022903d8017c220a2006542203ad7c221420032014200854200a20065a1b22031b370300200b427f200a20031b370320200920232903003703002001202029030037030020072017290300370300200220022903f0043703b0082005280200210b024002402021201e460d00202121050c010b201e41016a2205201e490d11201e41017422032005200320054b1bad42c8007e2206422088a70d112006a722034100480d1102400240201e0d002003102d21220c010b2022201e41c8006c2003103121220b2022450d0e201e2105200341c8006e211e0b2022200541c8006c6a220542003703002005200b360220200541186a4200370300200541106a4200370300200541086a4200370300200520022903b0083702242005412c6a2007290300370200200541346a20012903003702002005413c6a2009290300370200202141016a21210b200e2019470d000b0b0240201d450d002025102f0b200241d0086a41186a22092004290300370300200241d0086a41106a220b2027290300370300200241d0086a41086a2203202829030037030020022002290380043703d008200241b0086a41186a220c420037030020014200370300200241b0086a41086a22054200370300200242003703b00841e7a2ca00ad42808080808001841001220729000021062005200741086a290000370300200220063703b0082007102f41ecb5c600ad4280808080d00184100122072900002106200241f0026a41086a220d200741086a290000370300200220063703f0022007102f200120022903f002370000200141086a200d290300370000200241d0046a41086a2005290300370300200241d0046a41106a2001290300370300200241d0046a41186a200c290300370300200220022903b0083703d004200241c0016a200241d0046a4120109c01200241b0016a20022903c801200241c0016a41106a290300427f420010ee06200241a0016a202c201520022903b001420020022802c00122051b220642012006420156200241b0016a41086a290300420020051b22064200522006501b22051b2006420020051b10ee0620244200370308202420022903a00137030020244200370310202441186a4200370300202441286a420037030020244201370320202420213602382024201e36023420242022360230202420022903d00837023c202441c4006a2003290300370200202441cc006a200b290300370200202441d4006a2009290300370200202641016a2126202441e0006a2124201a2105201a201f470d000c070b0b0240202b450d002010102f0b0240202a450d002029102f0b20022802e00320022802e40320022802e80310a30202402020450d002020412c6c2107201841206a210503400240200541046a280200450d002005280200102f0b2005412c6a2105200741546a22070d000b0b410021250240201b450d002018102f0b0c0a0b41c4c2ca002007200f103b000b419cc3ca00200b200f103b000b41c6b3ca00412741f8b4ca001039000b4196b3ca00413041f8b4ca001039000b201f201a460d000340201a412c6a21050240201a41246a280200450d00201a41206a280200102f0b2005211a201f2005470d000b0b20164100201c1b21170240201b450d002018102f0b2017ad42307e2206422088a70d002006a72205417f4c0d000240024020050d0041082123201721180c010b2005102d2223450d03200541306e21180b2017412c6c2205417f4c0d000240024020050d004104211b0c010b2005102d221b450d030b410021190240200f2017200f2017491b22160d002018211d4100211f0c020b201041a87f6a2104200f41d8006c21252029202641e0006c6a2120200241f0046a41186a2127200241f0046a41106a2122200241f0046a41086a21284100211f4100211a03400240200f450d00202521072010210503400240200541d0006a2d00000d0002400240200541206a2903002208200541286a290300220a8450450d0042002106427f2108427f210a0c010b427f210620024190016a427f427f2008200a10ee0620024190016a41086a290300210a20022903900121080b200520083703002005200a370308200541106a2006370300200541186a20063703000b200541d8006a2105200741a87f6a22070d000b0b2029210b02402026450d00024003400240200b2802382205450d00200541c8006c2109200b28023041206a21050340200f200528020022074d0d0302402010200741d8006c6a22072d00500d0020072903202206200741286a290300220884500d00200241f0046a200b290310200b41186a290300200b290300200b41086a29030020062008109405200720072903002206427f2006427f20022903f80420022802f00441014622031b220a7c22082008200654220c200741086a220d2903002206427f202229030020031b22147c200cad7c220820065420082006511b22031b200a20148450220c1b370300200d2006427f200820031b200c1b3703000b200541c8006a2105200941b87f6a22090d000b0b200b41e0006a220b2020460d020c000b0b419cc3ca002007200f103b000b201a41016a211a2025210520042107201021090340024020050d002018211d0c040b200541a87f6a2105200741d8006a2107200941d0006a210b200941d8006a22032109200b2d00000d000b02402005450d00200741086a2903002106200741186a2903002108200741106a290300210a200729030021144100210903400240200320096a220b41d0006a2d00000d00200b41086a2903002215200620142006200a2008200b290300222c2015200b41106a290300222d200b41186a290300222e10950541ff0171410146220c1b2106202c2014200c1b2114202e2008200c1b2108202d200a200c1b210a200b2007200c1b21070b2005200941d8006a2209470d000b20070d002018211d0c030b200741013a005002402026450d002007410c6a211e200741306a2121202921090340200941e0006a212402402009280238220b450d0020092802302105200b41c8006c210b034002400240201e2005460d00200541246a2021412010ea060d010b200941186a22032903002114200741086a220c29030021062009290310210a2007290300210820072903102115200541186a200741186a220d290300370300200541106a2015370300200520064200200620147d2008200a54ad7d22152008200a7d222c200856201520065620152006511b220e1b200a2014845022011b370308200520084200202c200e1b20011b370300200c2903002106200d29030021082007290300210a20092007290310370320200941286a20083703002009200a370310200320063703000b200541c8006a2105200b41b87f6a220b0d000b0b2024210920242020470d000b0b2027200741c8006a2900003703002022200741c0006a2900003703002028200741386a290000370300200220072900303703f004200741286a29030021062007290320210802400240201f2018460d002018211d0c010b201841016a22052018490d07201841017422072005200720054b1bad42307e220a422088a70d07200aa722054100480d070240024020180d002005102d21230c010b2023201841306c2005103121230b2023450d042018211f200541306e221d21180b2028290300210a202229030021142027290300211520022903f004212c2023201f41306c6a220520083703202005202c370300200541286a2006370300200541186a2015370300200541106a2014370300200541086a200a370300201f41016a211f201a20164f0d020c000b0b103d000b02402026450d002029202641e0006c6a2125201f41306c212020024180046a41186a212420024180046a41106a211820024180046a41086a211a410021192029211e03402024201e41d4006a2900003703002018201e41cc006a290000370300201a201e41c4006a2900003703002002201e29003c370380040240201e2802382205450d00201e280230220e200541c8006c6a2121201e41106a2122410021014104210f4100210d0340200e220c41246a2109200c41c8006a210e4100210b2020210720232105024003402007450d01024020092005460d0020052009412010ea062103200b41016a210b200741506a2107200541306a210520030d010b0b418094ebdc03210502402022200c1096050d0041002105200c290310201e29032085200c41186a290300201e41286a29030085844200520d00200241f0046a428094ebdc034200200c290300200c41086a2903002022290300202241086a290300109405427f20022903f80420022802f00441014622051b2206a7417f2006428080808010544100427f200241f0046a41106a29030020051b501b1b21050b200220053602f0042002418094ebdc033602f404200241f0046a2005418094ebdc034b4102746a2802002107200241f0046a41186a2209200c413c6a290000370300200241f0046a41106a220b200c41346a290000370300200241f0046a41086a2203200c412c6a2900003703002002200c2900243703f00402400240200d2001460d00200d21050c010b200141016a22052001490d092001410174220c2005200c20054b1bad42247e2206422088a70d092006a7220c4100480d090240024020010d00200c102d210f0c010b200f200141246c200c1031210f0b200f450d0620012105200c41246e21010b200f200541246c6a220520022903f00437020020032903002106200b29030021082009290300210a20052007360220200541186a200a370200200541106a2008370200200541086a2006370200200d41016a210d0b200e2021470d000b024002400240200d450d0002400240200d41246c22090d00410021050c010b200f41206a2107410021050340417f200520072802006a220b200b2005491b2105200741246a21072009415c6a22090d000b0b02404100418094ebdc0320056b22052005418094ebdc034b1b220c200d6e2205418094ebdc032005418094ebdc03491b2203450d00200f41206a2105410021070340200d2007460d032002417f2005280200220920036a220b200b2009491b22093602f0042002418094ebdc033602f4042005200241f0046a2009418094ebdc034b4102746a280200360200200541246a2105200d200741016a2207470d000b0b0240200c2003200d6c6b2203450d00410021050340200d2005200d7022074d0d042002417f200f200741246c6a2207280220220941016a220b200b2009491b22093602f0042002418094ebdc033602f4042007200241f0046a2009418094ebdc034b4102746a280200360220200541016a22052003490d000b0b200241f0046a41186a22072024290300370300200241f0046a41106a22092018290300370300200241f0046a41086a220b201a29030037030020022002290380043703f004024020192017470d00201741016a22052017490d0a201741017422032005200320054b1bad422c7e2206422088a70d0a2006a722054100480d0a0240024020170d002005102d211b0c010b201b2017412c6c20051031211b0b201b450d07201721192005412c6e21170b201b2019412c6c6a220520022903f004370200200b2903002106200929030021082007290300210a2005200d360228200520013602242005200f360220200541186a200a370200200541106a2008370200200541086a2006370200201941016a21190c030b2001450d02200f102f0c020b41c4c2ca002007200d103b000b41c4c2ca002007200d103b000b201e41e0006a221e2025470d000b0b0240202b450d002010102f0b02402026450d00202641e0006c2107202941306a210503400240200541046a280200450d002005280200102f0b200541e0006a2105200741a07f6a22070d000b0b0240202a450d002029102f0b20022802e00320022802e40320022802e80310a302024020230d00410021250c030b02400240201f41306c22050d004200212f410121250c010b200541306d220541ffffff3f712005470d04200541057422054100480d042005102d2225450d012005410576ad212f0b02400240201f0d00410021240c010b201f41306c21094100212420252105202321070340200741086a2900002106200741106a29000021082007290000210a200541186a200741186a290000370000200541106a2008370000200541086a20063700002005200a370000202441016a2124200541206a2105200741306a2107200941506a22090d000b0b0240201d450d002023102f0b200242003702d40820024190bdc6003602d00802402024450d002024410574210720252105034020024180046a41186a200541186a29000037030020024180046a41106a200541106a29000037030020024180046a41086a200541086a2900003703002002200529000037038004200242003703f804200242003703f00420024100360288052002420837038005200241b8036a200241d0086a20024180046a200241f0046a109902024020022802c8032209450d0020022802cc03450d002009102f0b200541206a2105200741606a22070d000b0b02402019412c6c2205450d00201b20056a2123200241b0086a41106a210141e7a2ca00ad42808080808001842115201b211003400240201028022841246c2205450d002010280220222120056a2122034020024180016a201010ef0520024180016a41086a2903002108200229038001210a200241b0086a41186a221e420037030020014200370300200241b0086a41086a220f4200370300200242003703b0082015100122052900002106200f200541086a290000370300200220063703b0082005102f41ecb5c600ad4280808080d00184100122052900002106200241f0026a41086a2207200541086a290000370300200220063703f0022005102f200120022903f002370000200141086a2007290300370000200241d0046a41086a200f290300370300200241d0046a41106a2001290300370300200241d0046a41186a201e290300370300200220022903b0083703d004200241e8006a200241d0046a4120109c01200241d8006a2002290370200241e8006a41106a290300427f420010ee06200241c8006a200a200820022903584200200228026822051b220642012006420156200241d8006a41086a290300420020051b22064200522006501b22051b2006420020051b10ee06200241386a20022903482206428094ebdc03802208420020212203350220220a420010ed06200241386a41086a29030020022903382214200a200620084280ec94a37c7e7c7e22062006428094ebdc038022064280ec94a37c7e7c4280cab5ee01562006a76aad7c2206201454ad7c2108200341246a2121200241d0086a210520022802d408210d024002400340024002402005280200220c2f0106220e0d00410021090c010b200e4105742105200c41086a2107417f21090340024020050d00200e21090c020b200941016a210920032007412010ea06220b450d03200541606a2105200741206a2107200b417f4a0d000b0b200d450d02200d417f6a210d200c20094102746a41c8056a21050c000b0b201e201041186a2900003703002001201041106a290000370300200f201041086a290000370300200220102900003703b008200c20094105746a220741f8026a210b024020074180036a22092802002205200741fc026a280200470d00200541016a22032005490d092005410174220c2003200c20034b1bad42307e220a422088a70d09200aa722034100480d090240024020050d002003102d21050c010b200b280200200541306c2003103121050b2005450d06200b2005360200200b41046a200341306e360200200928020021050b200b280200200541306c6a220520022903b00837030020052006370320200541186a201e290300370300200541106a2001290300370300200541086a200f290300370300200541286a20083703002009200928020041016a360200200741e8026a2205427f2005290300220a20067c22062006200a542207200541086a2205290300220620087c2007ad7c220820065420082006511b22071b3703002005427f200820071b3703000b20212022470d000b0b2010412c6a22102023470d000b0b20022802d808210c20022802d00821070240024020022802d40822090d00200721050c010b2009210b20072105034020052802c8052105200b417f6a220b0d000b0340200720072f01064102746a41c8056a28020021072009417f6a22090d000b0b200241d4036a20072f010636020041002103200241b8036a41186a4100360200200241cc036a20073602002002200c3602d803200241003602c80342002130200242003703c003200220053602bc03200241003602b803024002400240200c450d002002200c417f6a3602d8030240024020052f0106450d004100210b20052107410021090c010b4100210b41002109034002400240024020054190bdc600460d00200528020022070d012009ad2106410021070c020b41edb3ca00412841f8b4ca001039000b200b41016a210b20053301044220862009ad8421060b2005102f2006a72109200721052006422088a7220320072f01064f0d000b0b200241b0086a41186a220c200720034105746a220541206a290000370300200241b0086a41106a220e200541186a290000370300200241b0086a41086a2201200541106a2900003703002002200541086a2900003703b008200341016a210320054180036a280200210d200541fc026a280200211a200541f8026a28020021180240200b450d00200720034102746a41c8056a280200210741002103200b417f6a2205450d00034020072802c80521072005417f6a22050d000b0b200241f0046a41186a200c290300370300200241f0046a41106a200e290300370300200241f0046a41086a2001290300370300200220022903b0083703f004200220033602c403200220093602c003200220073602bc03200241003602b80320180d01420021300b420021310c010b200241b0086a41106a210742002130420021310340200241e0036a41186a200241f0046a41186a221e2903002206370300200241e0036a41106a200241f0046a41106a22212903002208370300200241e0036a41086a200241f0046a41086a2222290300220a370300200220022903f00422143703e003200241b0046a41186a2006370300200241b0046a41106a2008370300200241b0046a41086a200a370300200220143703b00402400240200d41306c220d0d004100210b4200212d4200212c410021204108212342002108420021060c010b4200212d410821234100210b4200212c410021204200210842002106201821050340200541286a2903002114200541206a2903002115200241d0086a41186a220e200541186a290300370300200241d0086a41106a2201200541106a290300370300200241d0086a41086a220f200541086a290300370300200220052903003703d008200241b0086a41186a220c420037030020074200370300200241b0086a41086a22094200370300200242003703b00841e7a2ca00ad428080808080018410012203290000210a2009200341086a2900003703002002200a3703b0082003102f41ecb5c600ad4280808080d0018410012203290000210a200241f0026a41086a2210200341086a2900003703002002200a3703f0022003102f200720022903f002370000200741086a2010290300370000200241d0046a41086a2009290300370300200241d0046a41106a2007290300370300200241d0046a41186a200c290300370300200220022903b0083703d004200241206a200241d0046a4120109c01200241106a2002290328200241206a41106a290300427f420010ee06200220022903104200200228022022031b220a4201200a420156200241106a41086a290300420020031b220a420052200a501b22031b200a420020031b2015201410ed06201e200e290300370300202120012903003703002022200f290300370300200220022903d0083703f004200241086a290300210a2002290300211402400240200241f0046a200241b0046a412010ea06450d00200c201e2903003703002007202129030037030020092022290300370300200220022903f0043703b0080240200b2020470d00200b41016a2203200b490d0a200b410174220e2003200e20034b1bad42307e2215422088a70d0a2015a722034100480d0a02400240200b0d002003102d21230c010b2023200b41306c2003103121230b2023450d07200341306e21200b2023200b41306c6a2203200a37030820032014370300200320022903b008370310200341186a2009290300370300200341206a2007290300370300200341286a200c290300370300200b41016a210b0c010b427f202c200a7c202d20147c222e202d542209ad7c221520092015202c542015202c511b22091b212c427f202e20091b212d0b200541306a2105427f2006200a7c200820147c220a2008542209ad7c22082009200820065420082006511b22091b2106427f200a20091b2108200d41506a220d0d000b0b0240201a450d002018102f0b20024180046a41186a2209202c3703002002202d370390042002200b3602a804200220203602a404200220233602a00420022008370380042002200637038804200241f0046a2011200241b0046a10f00520022802f0042105200220022802f8043602d408200220053602d008203120067c2106203020087c2208203054220bad210a20024180046a200241d0086a10be03024020022802f404450d002005102f0b2006200a7c2106200241d0086a41186a22032009290300370300200241d0086a41106a220c20024180046a41106a290300370300200241d0086a41086a220d20024180046a41086a29030037030020022002290380043703d00820022802ac04210e20022802a404210120022802a0042109024020022802a804220541c100490d0020092005410041202005676b10bf0341c00021050b2006203151210f20062031542110201e20032903003703002021200c2903003703002022200d290300370300200220022903d0083703f0042002200e36029c05200220053602980520022001360294052002200936029005200241b0086a2011200241b0046a10f10520022802b0082105200220022802b8083602d404200220053602d004200241f0046a200241d0046a10be03024020022802b408450d002005102f0b200b2010200f1b21050240200228029405450d00200228029005102f0b427f200620051b2131427f200820051b213020022802d8032205450d0120022005417f6a3602d80320022802c003210b20022802b80321030240024020022802c403220c20022802bc0322092f01064f0d00200921050c010b034002400240024020094190bdc600460d00200928020022050d01200bad2106410021050c020b41edb3ca00412841f8b4ca001039000b200341016a21032009330104422086200bad8421060b2009102f2006a7210b200521092006422088a7220c20052f01064f0d000b0b200241b0086a41186a220e2005200c4105746a220941206a2900003703002007200941186a290000370300200241b0086a41086a2201200941106a2900003703002002200941086a2900003703b008200c41016a210c20094180036a280200210d200941fc026a280200211a200941f8026a280200211802402003450d002005200c4102746a41c8056a28020021054100210c2003417f6a2209450d00034020052802c80521052009417f6a22090d000b0b201e200e2903003703002021200729030037030020222001290300370300200220022903b0083703f0042002200c3602c4032002200b3602c003200220053602bc03200241003602b80320180d000b0b200241b8036a10a20241eba1ca00ad4280808080f00084100122052900002106200241d0086a41086a2207200541086a290000370300200220063703d0082005102f41f5cac800ad4280808080e00184100122052900002106200241b8036a41086a2209200541086a290000370300200220063703b8032005102f200220113602800420124280808080c00084100322052900002106200541086a2900002108200541106a290000210a200241f0046a41186a200541186a290000370300200241f0046a41106a220b200a370300200241f0046a41086a22032008370300200220063703f0042005102f41c000102d2205450d002024ad210a200520022903d008370000200520022903b803370010200520022903f004370020200541086a2007290300370000200541186a2009290300370000200541286a2003290300370000200541306a200b290300370000200541386a200241f0046a41186a290300370000200220313703f804200220303703f0042005ad42808080808008842013428080808080028410042005102f200241003602b8032024450d01202520244105746a210f2025210103402001220341206a2101200241c0026a210520022802c402210d024002400340024002402005280200220c2f0106220e0d00410021090c010b200e4105742105200c41086a2107417f21090340024020050d00200e21090c020b200941016a210920032007412010ea06220b450d03200541606a2105200741206a2107200b417f4a0d000b0b0240200d0d00200241b8036a21090c030b200d417f6a210d200c20094102746a4194036a21050c000b0b200c20094102746a41e8026a21090b200241f0046a2011200310f20520023502f804210620022802f0042105200241003a00850402400240024002402009280200220741c000490d00200741808001490d012007418080808004490d02200241033a008004200241053a00850420022009280200360081044280808080d00021080c030b200241013a008504200220074102743a00800442808080801021080c020b200241023a008504200220074102744101723b01800442808080802021080c010b200241043a00850420022007410274410272360280044280808080c00021080b20064220862005ad8420082012841004024020022d008504450d00200241003a0085040b024020022802f404450d002005102f0b2001200f470d000c020b0b1036000b200a422086210602402019450d002019412c6c2107201b41206a210503400240200541046a280200450d002005280200102f0b2005412c6a2105200741546a22070d000b0b202f20068421062017450d00201b102f0b20022802c802210320022802c0022105024020022802c4022207450d00034020052802940321052007417f6a22070d000b0b02402003450d0041002109034002400240200920052f0106490d004100210b034002400240024020054190bdc600460d00200528020022070d0141002109410021070c020b41edb3ca00412841f8b4ca001039000b200b41016a210b20052f010421090b2005102f20072105200920072f01064f0d000b200941016a21090240200b0d00200721050c020b200720094102746a4194036a280200210541002109200b417f6a2207450d01034020052802940321052007417f6a22070d000c020b0b200941016a21090b2003417f6a22030d000b0b0240024020054190bdc600460d00200528020021072005102f2007450d00034020074190bdc600460d02200728020021052007102f2005210720050d000b0b2000200637020420002025360200200241f0086a24000f0b41edb3ca00412841f8b4ca001039000b1038000b800201037f230041d0006b220124002001412036020420012000360200200141086a2000ad42808080808004841002107302400240200128020822020d00410421000c010b200128020c210302400240200141106a280200450d0020022d000022004104490d010b20014100360220200142013703182001410b36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141b885c7003602382001200141286a360248200141346a41d8dbc100200141386a103c1a200135022042208620013502188410080240200128021c450d002001280218102f0b410421000b2003450d002002102f0b200141d0006a240020000b910305027f017e027f017e037f230041d0006b2202240041b89bca00ad4280808080f00184100122032900002104200241086a41086a2205200341086a290000370300200220043703082003102f41c79bca00ad4280808080c00184100122032900002104200241186a41086a2206200341086a290000370300200220043703182003102f20022000370348200241c8006aad4280808080800184100322032900002100200341086a2900002104200341106a2900002107200241286a41186a2208200341186a290000370300200241286a41106a22092007370300200241286a41086a220a2004370300200220003703282003102f024041c000102d22030d001036000b200320022903083700002003200229031837001020032002290328370020200341086a2005290300370000200341186a2006290300370000200341286a200a290300370000200341306a2009290300370000200341386a2008290300370000200220013602282003ad4280808080800884200241286aad4280808080c0008410042003102f200241d0006a24000bbc0201047f230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100210730240024020022802082201450d00200241106a2802002103200228020c2104200241003602380240024020034104490d0020012800002105200241003602382003417c714104460d00200041086a200128000436020020002005360204410121030c010b20024100360220200242013703182002410b36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b885c7003602382002200241286a360248200241346a41d8dbc100200241386a103c1a200235022042208620023502188410080240200228021c450d002002280218102f0b410021030b200020033602002004450d012001102f0c010b200041003602000b200241d0006a24000be11205057f017e037f027e047f230041f0006b22052400200541c0006a41186a22064200370300200541c0006a41106a22074200370300200541c0006a41086a220842003703002005420037034041b89bca00ad4280808080f0018410012209290000210a200541e0006a41086a220b200941086a2900003703002005200a3703602009102f2008200b2903003703002005200529036037034041cabec600ad4280808080d0018410012209290000210a200b200941086a2900003703002005200a3703602009102f20072005290360220a370300200541206a41086a22092008290300370300200541206a41106a220c200a370300200541206a41186a220d200b29030037030020052005290340370320200541186a200541206a412041c8e1ca004100410010b501024002400240024002400240024020052802184101470d00410d210b4191b4c6002108410221070c010b20064200370300200742003703002008420037030020054200370340418de6c300ad4280808080e0008410012206290000210a2008200641086a2900003703002005200a3703402006102f419ce6c300ad4280808080e0008410012206290000210a200b200641086a2900003703002005200a3703602006102f20072005290360220a37030020092008290300370300200c200a370300200d200b29030037030020052005290340370320200541106a200541206a41201095012005280214410020052802101b2109024020034101460d00200541206a210d0c030b200541c0006a41186a22064200370300200541c0006a41106a220c4200370300200541c0006a41086a220842003703002005420037034041b89bca00ad4280808080f00184220e1001220d290000210a200541e0006a41086a220b200d41086a2900003703002005200a370360200d102f2008200b2903003703002005200529036037034041f8c5c600ad4280808080a00184220f1001220d290000210a200b200d41086a2900003703002005200a370360200d102f20072005290360370000200741086a220d200b290300370000200541206a41086a22102008290300370300200541206a41106a2211200c290300370300200541206a41186a2212200629030037030020052005290340370320200541086a200541206a41201095012005280208450d01200528020c20094d0d014107210b418ab4c6002108410321070b20004183203b0100200041086a200b360200200041046a2008360200200041026a20073a0000200141046a280200450d022001280200102f0c020b20064200370300200c42003703002008420037030020054200370340200e10012213290000210a200b201341086a2900003703002005200a3703602013102f2008200b29030037030020052005290360370340200f10012213290000210a200b201341086a2900003703002005200a3703602013102f20072005290360370000200d200b290300370000201020082903003703002011200c29030037030020122006290300370300200520052903403703202005200920024101746a360240200541206aad4280808080800484200541c0006aad4280808080c000841004200541206a210d0b20012802082108200128020421102001280200210c200541c0006a41186a22114200370300200541c0006a41106a22124200370300200541c0006a41086a220142003703002005420037034041b89bca00ad4280808080f0018410012206290000210a200541e0006a41086a220b200641086a2900003703002005200a3703602006102f2001200b2903003703002005200529036037034041cabec600ad4280808080d0018410012206290000210a200b200641086a2900003703002005200a3703602006102f20072005290360370000200741086a200b290300370000200541206a41086a2001290300370300200541206a41106a2012290300370300200541206a41186a20112903003703002005200529034037032020054100360248200542013703404104102d220b450d0120054284808080c0003702442005200b360240200b2009360000200b410441081031220b450d01200542888080808001370244200b20023600042005200b3602402008200541c0006a106902402008450d00200c200841286c6a21062005280244210920052802482108200c210b034002400240200920086b4120490d00200841206a2107200528024021010c010b200841206a22072008490d05200941017422012007200120074b1b22024100480d050240024020090d002002102d21010c010b200528024020092002103121010b2001450d042005200236024420052001360240200221090b200120086a220841186a200b41186a290000370000200841106a200b41106a290000370000200841086a200b41086a290000370000200520073602482008200b290000370000200b41206a290300210a02400240200920076b4108490d00200741086a21080c010b200741086a22082007490d05200941017422022008200220084b1b22024100480d050240024020090d002002102d21010c010b200120092002103121010b2001450d042005200236024420052001360240200221090b20052008360248200120076a200a3700002006200b41286a220b470d000b0b200528024421072005280248210b0240024020034101460d00024002402007200b460d00200528024021080c010b200b41016a2208200b490d05200b41017422072008200720084b1b22074100480d0502400240200b0d002007102d21080c010b2005280240200b2007103121080b2008450d0420052007360244200520083602400b2005200b41016a22013602482008200b6a41003a00000c010b024002402007200b460d00200528024021080c010b200b41016a2208200b490d04200b41017422072008200720084b1b22074100480d0402400240200b0d002007102d21080c010b2005280240200b2007103121080b2008450d0320052007360244200520083602400b2005200b41016a22093602482008200b6a41013a00000240200720096b41034b0d00200941046a22012009490d04200741017422022001200220014b1b22014100480d040240024020070d002001102d21080c010b200820072001103121080b2008450d032005200136024420052008360240200121070b2005200b41056a2201360248200820096a20043600000b200dad42808080808004842001ad4220862008ad84100402402007450d002008102f0b02402010450d00200c102f0b200041043a00000b200541f0006a24000f0b1036000b1038000bd60302057f047e230041f0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024020022802102203450d00200241186a28020021042002280214210541002101200241003a006802400240034020042001460d01200241c8006a20016a200320016a2d00003a00002002200141016a22063a00682006210120064120470d000b200241206a41186a200241c8006a41186a2903002207370300200241206a41106a200241c8006a41106a2903002208370300200241206a41086a200241c8006a41086a290300220937030020022002290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200241003a00680b4100210120024100360228200242013703202002410b3602442002200241086a3602402002200241206a36026c200241dc006a41013602002002420137024c200241b885c7003602482002200241c0006a360258200241ec006a41d8dbc100200241c8006a103c1a200235022842208620023502208410082002280224450d002002280220102f0b200020013a00002005450d012003102f0c010b200041003a00000b200241f0006a24000b9b06010c7f23004180016b220324002003200236020c20032001360208200341106a2002ad4220862001ad841002107302400240024002400240024020032802102204450d00200328021421052003200341186a280200360224200320043602202003200341206a10e60120032802000d0320032802042206200328022422014105762202200220064b1b22074105742202417f4c0d010240024020070d00410121080c010b2002102d2208450d030b02402006450d004100210903402001210a200341003a00782009220b41016a2109410021010240024002400340200a2001460d01200341d8006a20016a200328022022022d00003a00002003200241016a3602202003200141016a22023a00782002210120024120470d000b200341386a41186a220c200341d8006a41186a290300370300200341386a41106a220d200341d8006a41106a290300370300200341386a41086a220e200341d8006a41086a290300370300200320032903583703382007200b470d020240200b41017422012009200120094b1b220141ffffff3f712001470d002001410574220141004e0d020b1038000b200341003602240240200141ff0171450d00200341003a00780b2007450d072008102f0c070b02400240200b0d002001102d21080c010b2008200b4105742001103121080b2008450d05200141057621070b200a20026b21012008200b4105746a220b2003290338370000200b41186a200c290300370000200b41106a200d290300370000200b41086a200e29030037000020092006470d000b2003200a20026b3602240b2008450d032000200736020420002008360200200041086a20063602000c040b200041003602000c040b103d000b1036000b20034100360240200342013703382003410b36022c2003200341086a3602282003200341386a360234200341ec006a41013602002003420137025c200341b885c7003602582003200341286a360268200341346a41d8dbc100200341d8006a103c1a200335024042208620033502388410080240200328023c450d002003280238102f0b200041003602000b2005450d002004102f0b20034180016a24000ba207020a7f017e230041e0006b220124002001410036024020014201370338200028020021024101102d2103024002400240024020024101460d002003450d02200142818080801037023c20012003360238200341013a0000200028020421042000410c6a2802002203200141386a10690240024020030d0020012802402105200128023c21060c010b2004200341286c6a2107200128023c21062001280240210520042103034002400240200620056b4120490d00200541206a2108200128023821090c010b200541206a22082005490d06200641017422092008200920084b1b220a4100480d060240024020060d00200a102d21090c010b20012802382006200a103121090b2009450d052001200a36023c20012009360238200a21060b200920056a220541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a2900003700002001200836024020052003290000370000200341206a290300210b02400240200620086b4108490d00200841086a21050c010b200841086a22052008490d062006410174220a2005200a20054b1b220a4100480d060240024020060d00200a102d21090c010b20092006200a103121090b2009450d052001200a36023c20012009360238200a21060b20012005360240200920086a200b3700002007200341286a2203470d000b0b02400240200620056b4120490d00200128023821030c010b200541206a22032005490d04200641017422082003200820034b1b22084100480d040240024020060d002008102d21030c010b200128023820062008103121030b2003450d032001200836023c200120033602380b200320056a220341086a200041106a220841086a290000370000200341106a200841106a290000370000200341186a200841186a2900003700002001200541206a360240200320082900003700000c010b2003450d01200142818080801037023c20012003360238200341023a00002000280204210420034101410510312203450d0120014285808080d00037023c20012003360238200320043600010b200141246a200141386a41086a2802003600002001200129033837001c200141c4006a200141206a290000370000200141cc006a2001290208370200200141d4006a200141086a41086a290200370200200141c28289aa04360039200141023a00382001200129001937003d200141386a108a04024020020d00200041086a280200450d002004102f0b200141e0006a24000f0b1036000b1038000b880301027f024020002d0000417a6a2201410c4b0d00024002400240024002400240024020010e0d00070701070207030704050706000b200041086a2d00004101470d06200041146a280200450d06200041106a280200102f0c060b200041046a2d00000d052000410c6a280200450d05200041086a280200102f0c050b200041046a2802000d042000410c6a280200450d04200041086a280200102f0c040b200041086a2d00004107470d03200041306a280200450d032000412c6a280200102f0c030b200041046a2d00004102490d020240200041106a2802002201450d00200141d0006c2102200041086a28020041c0006a210103400240200141046a280200450d002001280200102f0b200141d0006a2101200241b07f6a22020d000b0b2000410c6a280200450d022000280208102f0c020b200041086a280200450d01200041046a280200102f0c010b200041086a2d00004106470d00200041306a280200450d002000412c6a280200102f0b02402000418c016a280200450d00200028028801102f0b0bbe0402017f097e230041c0016b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102201450d00200328021421022003200341106a41086a2802003602ac01200320013602a801200341e0006a200341a8016a108505420121040240024020032903604201520d0020034100360228200342013703202003410b3602b4012003200341086a3602b0012003200341206a3602bc01200341f4006a410136020020034201370264200341b885c7003602602003200341b0016a360270200341bc016a41d8dbc100200341e0006a103c1a2003350228422086200335022084100802402003280224450d002003280220102f0b420021040c010b200341206a41386a200341e0006a41c0006a2903002205370300200341206a41306a200341e0006a41386a2903002206370300200341206a41286a200341e0006a41306a2903002207370300200341206a41206a200341e0006a41286a2903002208370300200341206a41186a200341e0006a41206a2903002209370300200341206a41106a200341e0006a41186a290300220a370300200341206a41086a200341e0006a41106a290300220b37030020032003290368220c370320200041c0006a2005370300200041386a2006370300200041306a2007370300200041286a2008370300200041206a2009370300200041186a200a370300200041106a200b3703002000200c3703080b200020043703002002450d012001102f0c010b200042003703000b200341c0016a24000b910805017f017e047f017e027f230041e0006b2201240042002102200141386a41186a22034200370300200141386a41106a22044200370300200141386a41086a2205420037030020014200370338418de6c300ad4280808080e000841001220629000021072005200641086a290000370300200120073703382006102f41bae6c300ad4280808080e00084100122062900002107200141286a41086a2208200641086a290000370300200120073703282006102f200420012903282207370300200141086a41086a2005290300370300200141086a41106a2007370300200141086a41186a200829030037030020012001290338370308200141386a200141086a10f40202400240200128023822080d004104210841002106410021090c010b200129023c2202422088a721062002a721090b200141386a41206a200041206a2802003602002003200041186a2902003703002004200041106a2902003703002005200041086a2902003703002001200029020037033802400240024020062009470d00024020062002a7470d00200641016a22002006490d03200641017422052000200520004b1bad42247e2207422088a70d032007a722004100480d030240024020060d002000102d21080c010b2008200641246c2000103121080b2008450d02200242808080807083200041246ead8421020b2002422088a721060b2008200641246c22096a22002001290338370200200041206a200141386a41206a280200360200200041186a200141386a41186a2204290300370200200041106a200141386a41106a2205290300370200200041086a200141386a41086a220029030037020020044200370300200542003703002000420037030020014200370338418de6c300ad4280808080e000841001220429000021072000200441086a290000370300200120073703382004102f41bae6c300ad4280808080e00084100122042900002107200141286a41086a2203200441086a290000370300200120073703282004102f200520012903282207370300200141086a41086a2000290300370300200141086a41106a2007370300200141086a41186a2003290300370300200120012903383703082001412036023c2001200141086a3602382008200641016a2200200141386a10f502024020002006490d00200941246a21002008210603400240024020062d0000220541044b0d0002400240024020050e050400010204040b2006410c6a280200450d03200641086a280200102f0c030b2006410c6a280200450d02200641086a280200102f0c020b2006410c6a280200450d01200641086a280200102f0c010b200641086a280200450d00200641046a280200102f0b200641246a21062000415c6a22000d000b0b02402002a7450d002008102f0b200141e0006a24000f0b1036000b1038000b13002000410a360204200041ccebc3003602000b34002000418de6c30036020420004100360200200041146a410e360200200041106a41acf6c300360200200041086a42063702000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241003600000b6301027f230041206b22022400200241003602082002420837030002404104102d22030d001036000b20024204370214200220033602104100200241106a1069200041086a200228021836020020002002290310370200200210f403200241206a24000bda0101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102d2206450d0020062002290300370000200641186a2003290300370000200641106a2004290300370000200641086a20052903003700004120102d2203450d0020032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002006102f200042a0808080800437020420002003360200200241206a24000f0b1036000b2b01017f02404101102d22020d001036000b200042818080801037020420002002360200200241003a00000bae0101017f02404104102d2202450d002002410036000020024104410810312202450d00200241003a000420024108411510312202450d00200242003700052002410d6a420037000020024115412a10312202450d00200242003700152002411d6a42003700002002412a41d40010312202450d002002420037003520024200370025200042d4808080d008370204200020023602002002413d6a42003700002002412d6a42003700000f0b1036000b8c1e0a047f017e017f017e047f017e017f017e067f017e230041e0016b2201240020014198016a41186a2202420037030020014198016a41106a2203420037030020014198016a41086a220442003703002001420037039801418de6c300ad4280808080e000842205100122062900002107200141c8006a41086a2208200641086a290000370300200120073703482006102f20042008290300370300200120012903483703980141bc80c400ad4280808080e00184100122092900002107200141b8016a41086a2206200941086a290000370300200120073703b8012009102f200320012903b8012207370300200141f8006a41086a22092004290300370300200141f8006a41106a220a2007370300200141f8006a41186a220b20062903003703002001200129039801370378200141f8006aad220c428080808080048422071005200242003703002003420037030020044200370300200142003703980120051001220d290000210e2008200d41086a2900003703002001200e370348200d102f20042008290300370300200120012903483703980141d480c400ad4280808080b002841001220d290000210e2006200d41086a2900003703002001200e3703b801200d102f200320012903b801220e37030020092004290300370300200a200e370300200b2006290300370300200120012903980137037820071005200242003703002003420037030020044200370300200142003703980120051001220d290000210e2008200d41086a2900003703002001200e370348200d102f20042008290300370300200120012903483703980141f880c400ad42808080808002841001220d290000210e2006200d41086a2900003703002001200e3703b801200d102f200320012903b801220e37030020092004290300370300200a200e370300200b2006290300370300200120012903980137037820071005200242003703002003420037030020044200370300200142003703980120051001220d290000210e2008200d41086a2900003703002001200e370348200d102f200420082903003703002001200129034837039801419ce6c300ad4280808080e000841001220d290000210e2006200d41086a2900003703002001200e3703b801200d102f200320012903b801220e37030020092004290300370300200a200e370300200b200629030037030020012001290398013703782001200141f8006a41201095012001280204210f0240200128020022104101470d00200710050b200242003703002003420037030020044200370300200142003703980120051001220d29000021052008200d41086a29000037030020012005370348200d102f20042008290300370300200120012903483703980141a2e6c300ad4280808080a001841001220829000021052006200841086a290000370300200120053703b8012008102f200320012903b801370000200341086a200629030037000020092004290300370300200a2003290300370300200b20022903003703002001200129039801370378200141b8016a200141f8006a412010ad02024002400240024020012d00b80122040d00200141b0016a200141d1016a290000370300200141a8016a200141c9016a290000370300200141a0016a200141c1016a290000370300200120012900b901370398010c010b2007100520014198016a41186a2208200141d1016a29000037030020014198016a41106a2206200141c9016a29000037030020014198016a41086a2202200141c1016a290000370300200120012900b9013703980120044101460d010b200141206a4200370300200141186a4200370300200141106a4200370300200142003703080c010b200141086a41186a2008290300370300200141086a41106a2006290300370300200141086a41086a200229030037030020012001290398013703080b20014198016a41186a2208420037030020014198016a41106a2206420037030020014198016a41086a220442003703002001420037039801418de6c300ad4280808080e00084220e100122092900002105200141c8006a41086a2202200941086a290000370300200120053703482009102f20042002290300370300200120012903483703980141bae6c300ad4280808080e000841001220a2900002105200141b8016a41086a2209200a41086a290000370300200120053703b801200a102f200320012903b801370000200341086a22112009290300370000200141f8006a41086a22122004290300370300200141f8006a41106a22132006290300370300200141f8006a41186a221420082903003703002001200129039801370378200141b8016a200141f8006a10f4020240024020012802b801220a0d004104210a420021050c010b2007100520012902bc0121050b200f410020101b210b2008420037030020064200370300200442003703002001420037039801200e1001220d290000210e2002200d41086a2900003703002001200e370348200d102f20042002290300370300200120012903483703980141ace6c300ad4280808080e0018410012202290000210e2009200241086a2900003703002001200e3703b8012002102f200320012903b801370000201120092903003700002012200429030037030020132006290300370300201420082903003703002001200129039801370378200141b8016a200141f8006a412010ad02024002400240024020012d00b80122030d00200141b0016a200141d1016a290000370300200141a8016a200141c9016a290000370300200141a0016a200141c1016a290000370300200120012900b901370398010c010b2007100520014198016a41186a2204200141d1016a29000037030020014198016a41106a2208200141c9016a29000037030020014198016a41086a2206200141c1016a290000370300200120012900b9013703980120034101460d010b200141c0006a4200370300200141386a4200370300200141306a4200370300200142003703280c010b200141286a41186a2004290300370300200141286a41106a2008290300370300200141286a41086a200629030037030020012001290398013703280b02400240200b41fb01490d00200b41857e6a2204450d00418de6c300ad4280808080e00084100122032900002107200141c8006a41086a2208200341086a290000370300200120073703482003102f4193e6c300ad4280808080900184100122032900002107200141b8016a41086a2206200341086a290000370300200120073703b8012003102f20012004360278200c4280808080c00084100322032900002107200341086a290000210e200341106a290000210c20014198016a41186a2204200341186a29000037030020014198016a41106a2202200c37030020014198016a41086a2209200e37030020012007370398012003102f41c000102d2203450d0120032001290348370000200320012903b8013700102003200129039801370020200341086a2008290300370000200341186a2006290300370000200341286a2009290300370000200341306a2002290300370000200341386a20042903003700002003ad428080808080088410052003102f0b410121020240101b2207422088a72206450d002007a721020b41002103200141003a00d8012002210402400240024002400240034020062003460d01200141b8016a20036a20042d00003a00002001200341016a22083a00d801200441016a21042008210320084120470d000b200141c8006a41086a200141b8016a41086a290300370300200141c8006a41106a200141b8016a41106a290300370300200141c8006a41186a200141b8016a41186a290300370300200120012903b80137034802402006450d002002102f0b4120102d2203450d0520032001290308370000200341186a2208200141086a41186a290300370000200341106a2206200141086a41106a290300370000200341086a2202200141086a41086a2903003700004120102d2204450d0520042003290000370000200441186a2008290000370000200441106a2006290000370000200441086a20022900003700002003102f200141e8006a2004ad4280808080800484101c10732004102f20012802682208450d04200141f0006a2802002106200128026c210941002103200141003a00d801034020062003460d02200141b8016a20036a200820036a2d00003a00002001200341016a22043a00d8012004210320044120470d000b200141f8006a41086a200141b8016a41086a22042903002207370300200141f8006a41106a200141b8016a41106a2206290300220e370300200141f8006a41186a200141b8016a41186a2202290300220c370300200120012903b8012215370378200420073703002006200e3703002002200c370300200120153703b80120014198016a41026a220d200141f5006a41026a2d00003a0000200120012f00753b01980120054220882207a722032005a7470d030240200341016a220f2003490d002007a74101742210200f200f2010491bad42247e2207422088a70d002007a7220f41004e0d030b1038000b0240200341ff0171450d00200141003a00d8010b41a18ec400412c200141b8016a41a0ebc30041d08ec400103e000b0240200341ff0171450d00200141003a00d8010b41a18ec400412c200141b8016a41a0ebc30041e08ec400103e000b0240024020030d00200f102d210a0c010b200a200341246c200f1031210a0b200a450d0220054220882207a72103200f41246ead21050b200a200341246c6a220341003a0000200320012903b801370001200341096a2004290300370000200341116a2006290300370000200341196a2002290300370000200320012f0198013b0021200341236a200d2d00003a00002007422086200542ffffffff0f83844280808080107c21052009450d002008102f0b200020012903083700102000200b36020020002001290348370030200041286a200141086a41186a290300370000200041206a200141086a41106a290300370000200041186a200141086a41086a290300370000200041386a200141c8006a41086a290300370000200041c0006a200141c8006a41106a290300370000200041c8006a200141c8006a41186a290300370000200041086a20053702002000200a360204200041e8006a200141286a41186a290300370000200041e0006a200141286a41106a290300370000200041d8006a200141286a41086a29030037000020002001290328370050200141e0016a24000f0b1036000bbc0703037f047e037f23002202210320024180036b41607122022400200141186a22042900002105200420022903f80137000020012900102106200120022903f00137001020012900082107200120022903e801370008200241003a00e00120012900002108200120022903e0013700002002200537039801200220063703900120022007370388012002200837038001200141206a2d00002104200241e0016a41176a22092005370000200241e0016a41106a220a200229009101370300200241e0016a41086a220b20022900890137030020022002290081013703e0010240024002402008a741ff01714101470d00200241186a41176a2009290000370000200241186a41106a200a290300370300200241186a41086a200b290300370300200220022903e001370318200220043a0037200241d0016a200241186a109404200241e0016a20022802d001220420022802d80110950420022d00ec014102470d02200241003602c802200242013703c002200241d0026a41146a4129360200200241dc026a410b360200200241103602ec02200241bd98ca003602e8022002410b3602d402200241073602f402200241ae85c7003602f0022002200241d0016a3602e0022002200241f0026a3602d8022002200241e8026a3602d0022002200241c0026a3602fc02200241386a41146a41033602002002420337023c200241b48fc4003602382002200241d0026a360248200241fc026a41d8dbc100200241386a103c1a20023502c80242208620023502c002841008024020022802c402450d0020022802c002102f0b2000410036022020022802d401450d0120022802d001102f200324000f0b200041003602200b200324000f0b20024180016a200241e0016a41d00010e8061a024020022802d401450d002004102f0b200241d0026a41086a220420024180016a41086a28020036020020022002290380013703d002200241386a2002418c016a41c20010e8061a200141206a200241f9006a2d00003a0000200141186a200241f1006a290000370000200141106a200241e9006a290000370000200141086a200241e1006a29000037000020012002290059370000200241e0016a41186a200241186a41186a2903002205370300200241e0016a41106a200241186a41106a2903002208370300200241e0016a41086a200241186a41086a2903002206370300200020022903182207370200200041086a2006370200200041106a2008370200200041186a2005370200200220073703e001200041206a20022903d002370200200041286a2004280200360200200324000bbe0303027f037e027f230041c0006b2202240041bd98ca00ad4280808080800284100122032900002104200241086a200341086a290000370300200220043703002003102f41ae85c700ad4280808080f00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200042c0808080800837020420002003360200200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c0006a24000f0b1036000be60b030a7f017e027f230041a0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102204450d00200328021421052003200341106a41086a28020036026420032004360260200341e8006a200341e0006a10980302400240024020032802682206450d00200328026c2107024020032802642201450d00200341e8006a41086a280200210820032001417f6a220936026420032003280260220a41016a220b360260200a2d0000220141014b0d004100210c02400240024002400240024020010e020100010b41002101200341003a009802034020092001460d02200341f8016a20016a200a20016a220241016a2d00003a00002003200241026a3602602003200141016a22023a0098022002210120024120470d000b200341b8016a41086a200341f8016a41086a290300220d37030020034198016a41186a200341f8016a41186a29030037030020034198016a41106a200341f8016a41106a29030037030020034198016a41086a200d3703002003200920026b2209360264200320032903f801220d3703b8012003200d370398014101210c200a20026a41016a210b0b200341f8006a41186a20034198016a41186a290300370300200341f8006a41106a20034198016a41106a290300370300200341f8006a41086a20034198016a41086a29030037030020032003290398013703782009450d0420032009417f6a22093602642003200b41016a360260200b2d0000220141014b0d044100210220010e020201020b20034100360264200141ff0171450d03200341003a0098020c030b41002101200341003a009802034020092001460d02200341f8016a20016a200b20016a220241016a2d00003a00002003200241026a3602602003200141016a22023a0098022002210120024120470d000b200341b8016a41086a200341f8016a41086a290300220d37030020034198016a41186a200341f8016a41186a29030037030020034198016a41106a200341f8016a41106a29030037030020034198016a41086a200d3703002003200920026b360264200320032903f801220d3703b8012003200d37039801410121020b200341206a41186a220120034198016a41186a290300370300200341206a41106a220920034198016a41106a290300370300200341206a41086a220a20034198016a41086a290300370300200341c0006a41086a220b200341f8006a41086a290300370300200341c0006a41106a220e200341f8006a41106a290300370300200341c0006a41186a220f200341f8006a41186a290300370300200320032903980137032020032003290378370340200c4102460d03200020083602082000200736020420002006360200200341f8016a41086a2206200b290300370300200341f8016a41106a220b200e290300370300200341f8016a41186a2207200f290300370300200341d8016a41086a2208200a290300370300200341d8016a41106a220a2009290300370300200341d8016a41186a22092001290300370300200320032903403703f801200320032903203703d801200320032f011e3b01b801200041256a20072903003700002000411d6a200b290300370000200041156a2006290300370000200020032903f80137000d2000412d6a20023a00002000412e6a20032903d801370000200041366a20082903003700002000413e6a200a290300370000200041c6006a2009290300370000200041ce006a20032f01b8013b00000c040b20034100360264200141ff0171450d00200341003a0098020b2007450d002006102f0b4102210c0b200341003602e001200342013703d8012003410b3602bc012003200341086a3602b8012003200341d8016a360298012003418c026a4101360200200342013702fc01200341b885c7003602f8012003200341b8016a3602880220034198016a41d8dbc100200341f8016a103c1a20033502e00142208620033502d80184100820032802dc01450d0020032802d801102f0b2000200c3a000c2005450d012004102f0c010b200041023a000c0b200341a0026a24000be30703037f047e037f230022022103200241a0036b41607122022400200141186a220429000021052004200229039802370000200129001021062001200229039002370010200129000821072001200229038802370008200241003a0080022001290000210820012002290380023700002002200537039801200220063703900120022007370388012002200837038001200141206a2d0000210420024180026a41176a2209200537000020024180026a41106a220a20022900910137030020024180026a41086a220b2002290089013703002002200229008101370380020240024002402008a741ff01714101470d00200241186a41176a2009290000370000200241186a41106a200a290300370300200241186a41086a200b2903003703002002200229038002370318200220043a0037200241f0016a200241186a10970420024180026a20022802f001220420022802f80110980420022d0090024102470d02200241003602e802200242013703e002200241f0026a41146a4129360200200241fc026a410b3602002002410736028c03200241eba1ca00360288032002410b3602f4022002410a360294032002418bc6c800360290032002200241f0016a36028003200220024190036a3602f802200220024188036a3602f0022002200241e0026a36029c03200241386a41146a41033602002002420337023c200241b48fc4003602382002200241f0026a3602482002419c036a41d8dbc100200241386a103c1a20023502e80242208620023502e002841008024020022802e402450d0020022802e002102f0b200041023a003020022802f401450d0120022802f001102f200324000f0b200041023a00300b200324000f0b20024180016a20024180026a41d80010e8061a024020022802f401450d002004102f0b200241f0026a41106a220420024180016a41106a280200360200200241f0026a41086a220920024180016a41086a29030037030020022002290380013703f002200241386a20024194016a41c20010e8061a200141206a200241f9006a2d00003a0000200141186a200241f1006a290000370000200141106a200241e9006a290000370000200141086a200241e1006a2900003700002001200229005937000020024180026a41186a200241186a41186a290300220537030020024180026a41106a200241186a41106a290300220837030020024180026a41086a200241186a41086a2903002206370300200020022903182207370200200041086a2006370200200041106a2008370200200041186a20053702002002200737038002200041206a20022903f002370200200041286a2009290300370200200041306a2004280200360200200324000bbe0303027f037e027f230041c0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f418bc6c800ad4280808080a00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200042c0808080800837020420002003360200200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c0006a24000f0b1036000b840e030c7f017e037f230041a0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102201450d00200328021421042003200341106a41086a28020036026c20032001360268200341f8016a200341e8006a10980302400240024020032802f8012205450d0020032802fc0121060240024002400240200328026c22074104490d00200341f8016a41086a280200210820032007417c6a220236026c20032003280268220941046a220a3602682002450d002009280000210b20032007417b6a220c36026c2003200a41016a360268200a2d0000220d41014b0d0041002102200d0e020201020b20060d020c030b410121020b200341f4006a41026a200341d8016a41026a2d00003a0000200320032f00d8013b01740240200c450d0020032007417a6a220c36026c2003200a41026a220d360268200a2d0001220a41014b0d004100210e024002400240024002400240200a0e020100010b4100210a200341003a0098022007417a6a210e4179210c0340200e200a460d02200341f8016a200a6a2009200a6a220d41066a2d00003a000020032007200c6a36026c2003200d41076a3602682003200a41016a220d3a009802200c417f6a210c200d210a200d4120470d000b200341b8016a41086a200341f8016a41086a290300220f37030020034198016a41186a200341f8016a41186a29030037030020034198016a41106a200341f8016a41106a29030037030020034198016a41086a200f370300200320032903f801220f3703b8012003200f370398012007200d6b417a6a210c2009200d6a41066a210d4101210e0b200341f8006a41186a20034198016a41186a290300370300200341f8006a41106a20034198016a41106a290300370300200341f8006a41086a20034198016a41086a2903003703002003200329039801370378200c450d042003200c417f6a36026c2003200d41016a360268200d2d0000220a41014b0d0441002107200a0e020201020b200a41ff0171450d03200341003a0098020c030b4100210a200341003a009802200c417f6a2109200c417e6a210703402009200a460d02200341f8016a200a6a200d200a6a220c41016a2d00003a00002003200c41026a3602682003200a41016a220c3a0098022003200736026c2007417f6a2107200c210a200c4120470d000b200341b8016a41086a200341f8016a41086a290300220f37030020034198016a41186a200341f8016a41186a29030037030020034198016a41106a200341f8016a41106a29030037030020034198016a41086a200f370300200320032903f801220f3703b8012003200f37039801410121070b200341206a41186a220a20034198016a41186a290300370300200341206a41106a220c20034198016a41106a290300370300200341206a41086a220d20034198016a41086a290300370300200341c0006a41086a2209200341f8006a41086a290300370300200341c0006a41106a2210200341f8006a41106a290300370300200341c0006a41186a2211200341f8006a41186a290300370300200320032903980137032020032003290378370340200341e4006a41026a2212200341f4006a41026a2d00003a0000200320032f01743b016420024102460d042000200b36020c200020083602082000200636020420002005360200200341b8016a41026a220520122d00003a0000200341f8016a41086a22062009290300370300200341f8016a41106a22092010290300370300200341f8016a41186a22082011290300370300200341d8016a41086a220b200d290300370300200341d8016a41106a220d200c290300370300200341d8016a41186a220c200a290300370300200320032f01643b01b801200320032903403703f801200320032903203703d801200320032f011e3b019801200041136a20052d00003a0000200020032f01b8013b0011200041146a200e3a0000200041156a20032903f8013700002000411d6a2006290300370000200041256a20092903003700002000412d6a2008290300370000200041356a20073a0000200041366a20032903d8013700002000413e6a200b290300370000200041c6006a200d290300370000200041ce006a200c290300370000200041d6006a20032f0198013b00000c050b200a41ff0171450d00200341003a0098020b2006450d010b2005102f0b410221020b200341003602e001200342013703d8012003410b3602bc012003200341086a3602b8012003200341d8016a360298012003418c026a4101360200200342013702fc01200341b885c7003602f8012003200341b8016a3602880220034198016a41d8dbc100200341f8016a103c1a20033502e00142208620033502d80184100820032802dc01450d0020032802d801102f0b200020023a00102004450d012001102f0c010b200041023a00100b200341a0026a24000bad0603037f047e037f230022022103200241a0026b41607122022400200141186a220429000021052004200229039801370000200129001021062001200229039001370010200129000821072001200229038801370008200241003a00800120012900002108200120022903800137000020022005370338200220063703302002200737032820022008370320200141206a2d0000210420024180016a41176a2209200537000020024180016a41106a220a200229003137030020024180016a41086a220b200229002937030020022002290021370380010240024002402008a741ff01714101470d00200241176a2009290000370000200241106a200a290300370300200241086a200b2903003703002002200229038001370300200220043a001f200241f0006a2002109a0420024180016a200228027022042002280278109b0420022d0084014102470d02200241003602e801200242013703e001200241f0016a41146a4129360200200241fc016a410b3602002002410736028c02200241eba1ca00360288022002410b3602f4012002410a36029402200241a5c6c800360290022002200241f0006a36028002200220024190026a3602f801200220024188026a3602f0012002200241e0016a36029c02200241206a41146a410336020020024203370224200241b48fc4003602202002200241f0016a3602302002419c026a41d8dbc100200241206a103c1a20023502e80142208620023502e001841008024020022802e401450d0020022802e001102f0b200041003602002002280274450d012002280270102f200324000f0b200041003602000b200324000f0b20024180016a4104722109200228028001210a02402002280274450d002004102f0b200241206a200941c20010e8061a200141206a200241e1006a2d00003a0000200141186a200241d9006a290000370000200141106a200241d1006a290000370000200141086a200241c9006a29000037000020012002290041370000200020022903003700042000410c6a200241086a290300370000200041146a200241106a2903003700002000411c6a200241186a29030037000020004101360200200041246a200a360200200324000bbe0303027f037e027f230041c0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41a5c6c800ad4280808080a00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200042c0808080800837020420002003360200200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241c0006a24000f0b1036000bbd0b03097f017e027f23004190026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102204450d00200328021421052003200341186a280200360264200320043602602003200341e0006a10e6014102210602400240024020032802000d0020032802642201450d002003280204210720032001417f6a220836026420032003280260220941016a220a36026020092d0000220141014b0d004100210b02400240024002400240024020010e020100010b41002101200341003a008802034020082001460d02200341e8016a20016a200920016a220241016a2d00003a00002003200241026a3602602003200141016a22023a0088022002210120024120470d000b200341a8016a41086a200341e8016a41086a290300220c37030020034188016a41186a200341e8016a41186a29030037030020034188016a41106a200341e8016a41106a29030037030020034188016a41086a200c3703002003200820026b2208360264200320032903e801220c3703a8012003200c370388014101210b200920026a41016a210a0b200341e8006a41186a20034188016a41186a290300370300200341e8006a41106a20034188016a41106a290300370300200341e8006a41086a20034188016a41086a29030037030020032003290388013703682008450d0420032008417f6a22083602642003200a41016a360260200a2d0000220141014b0d044100210220010e020201020b20034100360264200141ff0171450d03200341003a0088020c030b41002101200341003a008802034020082001460d02200341e8016a20016a200a20016a220241016a2d00003a00002003200241026a3602602003200141016a22023a0088022002210120024120470d000b200341a8016a41086a200341e8016a41086a290300220c37030020034188016a41186a200341e8016a41186a29030037030020034188016a41106a200341e8016a41106a29030037030020034188016a41086a200c3703002003200820026b360264200320032903e801220c3703a8012003200c37038801410121020b200341206a41186a220120034188016a41186a290300370300200341206a41106a220620034188016a41106a290300370300200341206a41086a220820034188016a41086a290300370300200341c0006a41086a2209200341e8006a41086a290300370300200341c0006a41106a220a200341e8006a41106a290300370300200341c0006a41186a220d200341e8006a41186a290300370300200320032903880137032020032003290368370340200b4102470d02200b21060c010b20034100360264200141ff0171450d00200341003a0088020b200341003602d001200342013703c8012003410b3602ac012003200341086a3602a8012003200341c8016a36028801200341fc016a4101360200200342013702ec01200341b885c7003602e8012003200341a8016a3602f80120034188016a41d8dbc100200341e8016a103c1a20033502d00142208620033502c80184100820032802cc01450d0120032802c801102f0c010b200341e8016a41186a220e200d290300370300200341e8016a41106a220d200a290300370300200341e8016a41086a220a2009290300370300200341c8016a41086a22092008290300370300200341c8016a41106a22082006290300370300200341c8016a41186a22062001290300370300200320032903403703e801200320032903203703c801200320032f011e3b01a80120002007360200200020032903e8013700052000410d6a200a290300370000200041156a200d2903003700002000411d6a200e290300370000200041256a20023a0000200041266a20032903c8013700002000412e6a2009290300370000200041366a20082903003700002000413e6a2006290300370000200041c6006a20032f01a8013b0000200b21060b200020063a00042005450d012004102f0c010b200041023a00040b20034190026a24000bd20201057f230041206b22032400024002400240200241046a2204417f4c0d000240024020040d00410121050c010b2004102d2205450d020b200341003602102003200436020c200320053602082002200341086a106902400240200328020c2206200328021022056b2002490d00200328020821040c010b200520026a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d002007102d21040c010b200328020820062007103121040b2004450d022003200736020c20032004360208200721060b200420056a2001200210e8061a2003200520026a2202ad4220862004ad84100622052900003703002005102f200341146a200420026a360200200341003a0018200320043602102003200341086a36020c200320033602082000200341086a106c02402006450d002004102f0b200341206a24000f0b103d000b1036000b1038000bde0102037f017e230041206b220324000240024020024105744104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020022003106902402002450d002002410574210203402003200141106a4108108201200129030021062003200141086a290300370318200320063703102003200341106a41101082012003200141186a2d00003a00102003200341106a4101108201200141206a2101200241606a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000b1300200041023602042000418491c4003602000b34002000419c9eca0036020420004100360200200041146a4107360200200041106a41b898c400360200200041086a42073702000b130020004101360204200041c0a5c4003602000bfa0101057f230041106b22022400024002404111102d2203450d002002421137020420022003360200410d200210690240024020022802042204200228020822036b410d490d002003410d6a2105200228020021040c010b2003410d6a22052003490d02200441017422062005200620054b1b22064100480d020240024020040d002006102d21040c010b200228020020042006103121040b2004450d0120022006360204200220043602000b20022005360208200420036a220341002900e7ea43370000200341056a41002900ecea4337000020002002290300370200200041086a2002280208360200200241106a24000f0b1036000b1038000ba30f07047f017e047f017e037f027e017f230041f0006b22012400200141c0006a41186a4200370300200141c0006a41106a22024200370300200141c0006a41086a2203420037030020014200370340419c9eca00ad4280808080f000841001220429000021052003200441086a290000370300200120053703402004102f41a5c6c800ad4280808080a00184100122042900002105200141306a41086a2206200441086a290000370300200120053703302004102f200220012903302205370300200141106a41086a2003290300370300200141106a41106a2005370300200141106a41186a200629030037030020012001290340370310200141c0006a200141106a412010aa0220012802402203410120031b21074102210802400240024002402001290244420020031b2205422088a72203450d002003410574210241002104200721030240034020002003460d01200420032000412010ea0622064100476a21042006450d01200341206a2103200241606a22020d000c020b0b200141c0006a41186a4200370300200141c0006a41106a22094200370300200141c0006a41086a2200420037030020014200370340419c9eca00ad4280808080f0008410012202290000210a200141306a41086a2203200241086a2900003703002001200a3703302002102f200020032903003703002001200129033037034041bc9eca00ad4280808080a0028410012202290000210a2003200241086a2900003703002001200a3703302002102f20092001290330220a370300200141106a41086a2000290300370300200141106a41106a200a370300200141106a41186a200329030037030020012001290340370310200141c0006a200141106a10fe0320012802402200410420001b210b4100210302400240024002402001290244420020001b220a422088a7220c41014b0d00200c0e020201020b200c2100034020032000410176220220036a22062004200b20064102746a280200491b2103200020026b220041014b0d000b0b4100210802402004200b20034102746a2802002200470d00410021060c020b2003200420004b6a21030b200141c0006a41186a22084200370300200141c0006a41106a220d4200370300200141c0006a41086a2202420037030020014200370340419c9eca00ad4280808080f0008410012206290000210e200141306a41086a2200200641086a2900003703002001200e3703302006102f200220002903003703002001200129033037034041a5c6c800ad4280808080a0018410012206290000210e2000200641086a2900003703002001200e3703302006102f20092001290330370000200941086a2000290300370000200141106a41086a2002290300370300200141106a41106a200d290300370300200141106a41186a200829030037030020012001290340370310200141306a200141106aad428080808080048410021073024002400240024020012802302202450d00200128023421062001200028020036024420012002360240200141086a200141c0006a10e6012001280208450d01410021000c020b2001420037024420014101360240200141c0006a10f10321000c020b200128020c21000b2006450d002002102f0b20002000418094ebdc036e22024180ec94a37c6c6aad4280fd87d1007e220f428094ebdc0380210e2003200c4b0d020240200c200aa7470d00200c41016a2200200c490d05200c4101742206200020002006491b220041ffffffff03712000470d05200041027422004100480d0502400240200c0d002000102d210b0c010b200b200c41027420001031210b0b200b450d042000410276ad210a0b200b20034102746a220041046a2000200c20036b41027410e9061a20002004360200200a42ffffffff0f83210a41012106200c41016a220c20024180fd87d1006c200ea76a200f200e4280ec94a37c7e7c4280cab5ee01566a4b21080b200141c0006a41186a220d4200370300200141c0006a41106a22104200370300200141c0006a41086a2200420037030020014200370340419c9eca00ad4280808080f0008410012202290000210e200141306a41086a2203200241086a2900003703002001200e3703302002102f200020032903003703002001200129033037034041bc9eca00ad4280808080a0028410012202290000210e2003200241086a2900003703002001200e3703302002102f20092001290330370000200941086a2003290300370000200141106a41086a2000290300370300200141106a41106a2010290300370300200141106a41186a200d2903003703002001200129034037031002400240200b0d00200141106aad428080808080048410050c010b200141203602442001200141106a360240200b200c200141c0006a10a304200aa7450d00200b102f0b2006450d00200141106a41086a2004ad37030020014102360210200141c0006a200141106a1096022001413b6a200141c0006a41086a28020036000020012001290340370033200141cc006a200141376a290000370000200141c6a4b9da04360041200141023a004020012001290030370045200141c0006a108a042001410136024020012004360244200141c0006a1087040b02402005a7450d002007102f0b200141f0006a240020080f0b419ae3c300411e41f8b4ca001039000b1036000b1038000b940201057f230041106b220324000240024002402001410274220441046a2205417f4c0d000240024020050d00410121060c010b2005102d2206450d020b2003410036020820032005360204200320063602002001200310690240024020032802042206200328020822016b2004490d00200328020021050c010b200120046a22052001490d03200641017422072005200720054b1b22074100480d030240024020060d002007102d21050c010b200328020020062007103121050b2005450d022003200736020420032005360200200721060b200520016a2000200410e8061a2002290200200120046aad4220862005ad84100402402006450d002005102f0b200341106a24000f0b103d000b1036000b1038000bb50f04047f017e037f047e230041f0056b22022400200241286a200110e6010240024002400240024020022802280d0020012802042203450d02200128020022042d0000210520012003417f6a3602042001200441016a360200024002400240200541ff00714104470d0020054118744118754100480d01420221060c020b200042033703680c060b20024180046a2001109b0320022d0080044102460d04200241d8036a41206a20024180046a41206a280200360200200241d8036a41186a20024180046a41186a290300370300200241d8036a41106a20024180046a41106a290300370300200241d8036a41086a20024180046a41086a29030037030020022002290380043703d80320012802042205450d04200128020022042d0000210320012005417f6a3602042001200441016a360200200341024b0d04024002400240024002400240024020030e03000102000b41002103200241003a00e0012005417f6a2107417e21080240034020072003460d01200241a0016a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00e0012008417f6a210820092103200941c000470d000b200241b0056a41386a200241a0016a41386a290300220a370300200241b0056a41306a200241a0016a41306a2903002206370300200241b0056a41286a200241a0016a41286a290300220b370300200241b0056a41206a200241a0016a41206a290300220c370300200241b0056a41186a200241a0016a41186a290300220d370300200241e8046a41086a200241a0016a41086a290300370300200241e8046a41106a200241a0016a41106a290300370300200241e8046a41186a200d370300200241e8046a41206a200c370300200241e8046a41286a200b370300200241e8046a41306a2006370300200241e8046a41386a200a370300200220022903a0013703e8042009417f7320056a2105200420096a41016a2104410021030c030b200341ff0171450d0a200241003a00e0010c0a0b41002103200241003a00e0012005417f6a2107417e21080240034020072003460d01200241a0016a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00e0012008417f6a210820092103200941c000470d000b200241b0056a41386a200241a0016a41386a290300220a370300200241b0056a41306a200241a0016a41306a2903002206370300200241b0056a41286a200241a0016a41286a290300220b370300200241b0056a41206a200241a0016a41206a290300220c370300200241b0056a41186a200241a0016a41186a290300220d370300200241e8046a41086a200241a0016a41086a290300370300200241e8046a41106a200241a0016a41106a290300370300200241e8046a41186a200d370300200241e8046a41206a200c370300200241e8046a41286a200b370300200241e8046a41306a2006370300200241e8046a41386a200a370300200220022903a0013703e8042009417f7320056a210541012103200420096a41016a21040c020b200341ff0171450d09200241003a00e0010c090b41002103200241003a00e1012005417f6a2107417e2108034020072003460d02200241a0016a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00e1012008417f6a210820092103200941c100470d000b200241e8046a200241a0016a41c10010e8061a2009417f7320056a2105200420096a41016a2104410221030b200241a7046a200241e8046a41c10010e8061a2005450d072004310000210b20012005417f6a22083602042001200441016a360200200b50450d01420021060c020b200341ff0171450d06200241003a00e1010c060b2008450d052004310001210c20012005417e6a3602042001200441026a3602004202200b420f8386220a4204540d0542012106200c420886200b84420488200a420c88220b4201200b4201561b7e220b200a5a0d050b200241206a200110e60120022802200d0420022802242105200241086a2001109c032002290308a70d04200241086a41106a290300210d2002290310210c200241f8006a41206a200241d8036a41206a280200360200200241f8006a41186a200241d8036a41186a290300370300200241f8006a41106a200241d8036a41106a290300370300200241f8006a41086a200241d8036a41086a290300370300200220022903d803370378200241376a200241a7046a41c10010e8061a200220022f01d6033b01340b200241a0016a200110b30220022802a001411b460d0120002002290378370300200020033a0024200041206a200241f8006a41206a280200360200200041186a200241f8006a41186a290300370300200041106a200241f8006a41106a290300370300200041086a200241f8006a41086a290300370300200041256a200241376a41c10010e8061a200020022f01343b016620004188016a200d37030020004180016a200c37030020004190016a2005360200200041f8006a200b3703002000200a3703702000200637036820004198016a200241a0016a41b00210e8061a0c040b200042033703680c030b200042033703680c020b200042033703680c010b200042033703680b200241f0056a24000ba71006067f017e017f027e027f0c7e230041f0026b2203240020022802102104200228020c2105200228020821062002280204210720022802002108418de6c300ad4280808080e00084100122022900002109200341386a41086a200241086a290000370300200320093703382002102f41f0e8c600ad4280808080f00084100122022900002109200341f0006a41086a200241086a290000370300200320093703702002102f0240024002404120102d2202450d0020022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002002ad42808080808004841003220a2900002109200a41086a290000210b200a41106a290000210c200341f0016a41186a220d200a41186a290000370300200341f0016a41106a220e200c370300200341f0016a41086a200b370300200320093703f001200a102f2002102f41c000102d2202450d002002200329033837000020022003290370370010200220032903f001370020200241086a200341386a41086a290300370000200241186a200341f0006a41086a290300370000200241286a200341f0016a41086a290300370000200241306a200e290300370000200241386a200d290300370000200341f0006a200210f6022003290370210f4200211020034200370370200341b8016a280200210d20032d00bc01210e02400240200f4201510d00200341306a4200370300200341286a4200370300200341206a4200370300200341186a4200370300200341106a4200370300200341086a420037030020034200370300420021114200210b42002109420021120c010b200341f0006a41386a290300210c200341f0006a41306a2903002113200341f0006a41206a2903002111200341f0006a41186a2903002110200341f0006a41c0006a290300211220032903800121092003290378210b200341206a200341f0006a41286a290300370300200341286a2013370300200341306a200c370300200341106a2010370300200320113703182003200b370300200320093703080b0240200b200829030022147d2213200b562009200841086a29030022157d200b201454ad7d220c200956200c2009511b450d004198b5c600ad4280808080b00284210941838c0c21010c020b0240200b20107c2216428080e983b1de16544100200920117c22172016201054ad7c501b0d00201320107c221042ffffe883b1de1656200c20117c2010201354ad7c22104200522010501b0d0020072d00004101460d0041fdb4c600ad4280808080900184210941838c1421010c020b02400240201420158450450d0042002110420021110c010b20052d0000210a200341f0016a2006280200108d0202400240200a4101470d00200341a8026a290300211020032903a00221110c010b20034198026a29030021102003290390022111200a410171450d002010200341a8026a2903002214201120032903a002221556201020145620102014511b220a1b211020112015200a1b21110b024020112013562010200c562010200c511b450d0041abb5c600ad4280808080d00284210941838c0421010c030b200841086a2903002111200829030021100b200320133703002003200c37030820042802002108200341386a41186a200341106a220a41086a2903002214370300200341386a41206a2204200a41106a290300370300200341e0006a2207200a41186a290300370300200341e8006a2205200a41206a2903003703002003200c370340200320133703382003200a2903002215370348427f20162016200b54220a2017200aad7c220b200954200b2009511b220a1b427f200b200a1b84211602400240427f201320157c22092009201354220a200c20147c200aad7c2209200c542009200c511b220a1b220b428080e983b1de16544100427f2009200a1b2209501b0d00200341386a41106a29030021092005290300210b20072903002114200429030021152003290340211720032903382118420121192003290350211a0c010b420021190240200b200984500d00200b2009109a01200341a8026a2009370300200341a0026a200b370300200341f0016a41086a41013a0000200341f9016a200829000037000020034181026a200841086a29000037000020034189026a200841106a29000037000020034191026a200841186a290000370000200341033a00f00141c8e1ca004100200341f0016a108c010b0b201650210820034198016a2015370300200341a0016a201437030020034180016a2017370300200341a8016a200b37030020034188016a20093703002003201a37039001200320123703b001200320183703784100210a2003200e4100200f42015122041b3a00bc012003200d410020041b3602b80120032019420151220dad37037002400240200d0d002002ad428080808080088410054101210a0c010b200341c0003602f401200320023602f001200341f8006a200341f0016a1090030b2008ad21092002102f024002400240200f4201510d00200a0d004103210a200341f0016a21020c010b200f420152200a410173720d014104210a200341f0006a21020b200241046a200a3a0000200241003a0000200241056a20012900003700002002410d6a200141086a290000370000200241156a200141106a2900003700002002411d6a200141186a29000037000041c8e1ca0041002002108c010b200041286a2011370300200041206a2010370300200041186a200c370300200041106a2013370300200041086a2009370300410021020c020b1036000b2002102f200041086a200937020020002001360204410121020b20002002360200200341f0026a24000bfe0507017f017e027f017e017f017e057f230041e0006b2203240020012902002104200341306a41186a22054200370300200341306a41106a22064200370300200341306a41086a2201420037030020034200370330418de6c300ad4280808080e0008422071001220829000021092001200841086a290000370300200320093703302008102f41f880c400ad4280808080800284100122082900002109200341d0006a41086a220a200841086a290000370300200320093703502008102f200620032903502209370300200341106a41086a220b2001290300370300200341106a41106a220c2009370300200341106a41186a220d200a29030037030020032003290330370310200341086a200341106a4120109501024002400240417f200328020c410020032802081b220820026a220220022008491b4280808080f28ba80942808080c0f588fe062004422088a7220e41ff017122081b22092009428094ebdc038022094280ec94a37c7e7c4280cab5ee01562009a76a4b0d002005420037030020064200370300200142003703002003420037033020071001220229000021092001200241086a290000370300200320093703302002102f41d480c400ad4280808080b00284100122022900002109200a200241086a290000370300200320093703502002102f200620032903502209370300200b2001290300370300200c2009370300200d200a290300370300200320032903303703102003200341106a4120109501417f2003280204410020032802001b2206418094ebdc034180afd0e50220081b22012004a7220820012008491b6a220820082006491b20014b0d01200041003a0000200041306a41013a0000200041286a4200370200200041206a4280808080c000370300200041186a4204370300200041106a427f370300200041086a427f200442ffffffff0f83200e41ff01714101461b3703000c020b200041800c3b0001200041013a0000200041036a41003a00000c010b200041800c3b0001200041013a0000200041036a41003a00000b200341e0006a24000b130020004107360204200041dca9c4003602000b13002000410436020420004184b1c4003602000bed2b0c027f047e047f017e047f017e017f027e087f017e047f017e230041c0046b220124000240024020004180e101700d00200141d8026a41f4c7c40010b402200141c0036a200141d8026a108d0220014200200141c0036a41086a2202290300220320012903c0032204428080e983b1de1654ad7d2205200442808097fccea1697c22062004562005200356200442ffffe883b1de16561b22071b22043703880120014200200620071b220337038001200141c0036a41186a22082004370300200141c0036a41106a22092003370300200241013a00002001410c3a00c00341c8e1ca004100200141c0036a108c01200141003a009701200142003703a0012001420037039801200842003703002009420037030020024200370300200142003703c0034180a3ca00ad42808080808001842206100122072900002104200141a8016a41086a220a200741086a290000370300200120043703a8012007102f2002200a290300370300200120012903a8013703c0034195a3ca00ad4280808080900184220b100122072900002104200a200741086a290000370300200120043703a8012007102f200920012903a8012204370300200141d8026a41086a220c2002290300370300200141d8026a41106a220d2004370300200141d8026a41186a220e200a290300370300200120012903c0033703d802200141c0036a200141d8026a10fe0320012802c0032207410420071b210f024020012902c403420020071b2210422088a72211450d00200141c0036aad4280808080c000842112200141d8026aad4280808080c000842113200141c9036a2114200141d8026a41c0006a2115200141f8026a2116200f21174100211841002119024003402017280200211a2006100122072900002104200141b8026a41086a221b200741086a290000370300200120043703b8022007102f41e2dec700ad4280808080900184221c100122072900002104200141c8026a41086a221d200741086a290000370300200120043703c8022007102f2001201a3602d80220131003220741086a2900002104200741106a29000021032007290000210520014188026a41186a221e200741186a29000037030020014188026a41106a221f200337030020014188026a41086a2220200437030020012005370388022007102f41c000102d2207450d04200720012903b802370000200720012903c8023700102007200129038802370020200741086a201b290300370000200741186a201d290300370000200741286a2020290300370000200741306a201f290300370000200741386a201e290300370000200141c0036a200710aa0420012903c0032104200141d8026a200241e00010e8061a024002400240024020044201520d00200141a8016a200141d8026a41e00010e8061a2007102f200141d8026a200141a8016a41e00010e8061a0240200129038001220520012903d802222154220720014180016a41086a2903002204200c29030022035420042003511b0d002001200520217d370380012001200420037d2007ad7d370388012006100122072900002104201b200741086a290000370300200120043703b8022007102f201c100122072900002104201d200741086a290000370300200120043703c8022007102f2001201a3602c00320121003220741086a2900002104200741106a290000210320072900002105201e200741186a290000370300201f20033703002020200437030020012005370388022007102f41c000102d2207450d09200720012903b802370000200720012903c8023700102007200129038802370020200741086a201b290300370000200741186a201d290300370000200741286a2020290300370000200741306a201f290300370000200741386a201e2903003700002007ad428080808080088410052007102f20012903e80221042001200e29030022033703d002200120043703c80202402004200384500d00200120163602b80220014188026a2016200141c8026a200141b8026a1096012001290388024201520d002001290390022104200141c0036a41386a201f29030037030020142016290000370000201441086a201641086a290000370000201441106a201641106a290000370000201441186a201641186a290000370000200120043703f003200141003a00c803200141033a00c00341c8e1ca004100200141c0036a108c010b20012903d80221042001200c29030022033703d002200120043703c80202400240200420038450450d004200211c4200212142002105420021030c010b200120153602b80220014188026a2015200141c8026a200141b8026a108f02024002402001290388024201510d0020014188026a41286a290300210320012903a80221052001290390024201520d012001290398022104200141c0036a41386a201e29030037030020142015290000370000201441086a201541086a290000370000201441106a201541106a290000370000201441186a201541186a290000370000200120043703f003200141003a00c803200141033a00c00341c8e1ca004100200141c0036a108c010c010b201f290300210320012903900221050b200c290300212120012903d802211c0b20014198016a41086a2207427f2007290300220420037c200129039801220320057c22052003542207ad7c22032007200320045420032004511b22071b3703002001427f200520071b37039801200141c0036a41386a202137030020142015290000370000201441086a201541086a290000370000201441106a201541106a290000370000201441186a201541186a2900003700002001201c3703f003200141023a00c8032001410c3a00c0032001201a3602ec0341c8e1ca004100200141c0036a108c01201841016a21180c030b200141013a00970120180d01410021180c020b2007102f201841016a21180c010b201920186b220720114f0d01201720184102746b2207280200211f200720172802003602002017201f3602000b201741046a21172011201941016a2219460d020c010b0b4188bbca0020072011103b000b2018417f6a20114f0d00201042ffffffff0f832110201120186b21110b200842003703002009420037030020024200370300200142003703c0032006100122072900002104200a200741086a290000370300200120043703a8012007102f2002200a290300370300200120012903a8013703c003200b100122072900002104200a200741086a290000370300200120043703a8012007102f200920012903a801370000200941086a200a290300370000200c2002290300370300200d2009290300370300200e2008290300370300200120012903c0033703d80202400240200f0d00200141d8026aad428080808080048410050c010b200141203602c4032001200141d8026a3602c003200f2011200141c0036a10a3042010a7450d00200f102f0b024020012d0097010d004200211c200141f0006a200129038001220420014180016a41086a2207290300220342c0843d420010ee06200141e0006a20012903702205200141f0006a41086a290300220642c0fb42427f10ed06200141d0006a2005200642a0c21e420010ed06200720032003200141d0006a41086a29030020012903502205200420012903607c220642a0c21e7e2006420188220642c0fb427e7c42a0c21e562006a76aad7c2206200554ad7c22052006200456200520035620052003511b22171b22057d20042004200620171b220354ad7d3703002001200420037d3703800102400240200320058450450d00420021130c010b20014188026a41186a221b420037030020014188026a41106a2217420037030020014188026a41086a22074200370300200142003703880241e7a2ca00ad428080808080018422041001221e2900002106200141b8026a41086a221f201e41086a290000370300200120063703b802201e102f2007201f290300370300200120012903b8023703880241ecb5c600ad4280808080d0018422061001221a290000211c200141c8026a41086a221e201a41086a2900003703002001201c3703c802201a102f201720012903c802221c370300200141c0036a41086a221d2007290300370300200141c0036a41106a2220201c370300200141c0036a41186a2218201e29030037030020012001290388023703c003200141386a200141c0036a4120109c01200141386a41106a290300211c200129034021132001280238211a201b42003703002017420037030020074200370300200142003703880220041001221b2900002104201f201b41086a290000370300200120043703b802201b102f2007201f290300370300200120012903b8023703880220061001221f2900002104201e201f41086a290000370300200120043703c802201f102f201720012903c8022204370300201d2007290300370300202020043703002018201e29030037030020012001290388023703c00320014200201c4200201a1b220420057d20134200201a1b2206200354ad7d221c200620037d2213200656201c200456201c2004511b22071b3703e00220014200201320071b3703d802200141c0036aad4280808080800484200141d8026aad428080808080028410042004200520071b21132006200320071b211c0b20014198016a41086a2207427f2007290300220420137c2001290398012206201c7c221c2006542207ad7c22062007200620045420062004511b22071b3703002001427f201c20071b37039801200141d8036a2005370300200141d0036a2003370300200141c0036a41086a41043a00002001410c3a00c00341c8e1ca004100200141c0036a108c010b200141a8016a41f4c7c40010b402200141a0016a2903002103200129039801210441002107200141003a00bf03200141023a00be03200120033703900220012004370388022001200141a8016a3602b80202400240200420038450450d0042002105420021060c010b2001200141a8016a3602c8022001200141c8026a3602d0032001200141be036a3602cc032001200141b8026a3602c8032001200141bf036a3602c403200120014188026a3602c003200141d8026a200141a8016a200141c0036a10a50441012107024020012802d8024101470d004200210620012903e00221050c010b20014180036a2903002106200141f8026a29030021054100210720012903e0024201520d00200141d8026a41106a290300211c20012802c8022117200141f8036a200141d8026a41186a290300370300200141f0036a201c37030041002107200141c0036a41086a41003a0000200141c9036a2017290000370000200141d1036a201741086a290000370000200141d9036a201741106a290000370000200141e1036a201741186a290000370000200141033a00c00341c8e1ca004100200141c0036a108c010b0240024020070d0020014188026a41186a221a420037030020014188026a41106a2207420037030020014188026a41086a22174200370300200142003703880241e7a2ca00ad428080808080018422121001221e290000211c200141b8026a41086a221f201e41086a2900003703002001201c3703b802201e102f2017201f290300370300200120012903b8023703880241ecb5c600ad4280808080d0018422101001221b290000211c200141c8026a41086a221e201b41086a2900003703002001201c3703c802201b102f200720012903c802221c370300200141c0036a41086a221b2017290300370300200141c0036a41106a221d201c370300200141c0036a41186a2220201e29030037030020012001290388023703c003200141086a200141c0036a4120109c01200320067d2004200554ad7d200620037d2005200454ad7d20052004582006200358200620035122181b22191b210b200420057d200520047d20191b2121200141086a41106a2903004200200128020822191b211c2001290310420020191b2113024002402005200456200620035620181b0d00201a4200370300200742003703002017420037030020014200370388022012100122182900002104201f201841086a290000370300200120043703b8022018102f2017201f290300370300200120012903b8023703880220101001221f2900002104201e201f41086a290000370300200120043703c802201f102f200720012903c802370000200741086a201e290300370000201b2017290300370300201d20072903003703002020201a29030037030020012001290388023703c0032001427f201c200b7c201320217c22032013542207ad7c220420072004201c542004201c511b22071b3703e0022001427f200320071b3703d802200141d8026a21070c010b201a4200370300200742003703002017420037030020014200370388022012100122182900002104201f201841086a290000370300200120043703b8022018102f2017201f290300370300200120012903b8023703880220101001221f2900002104201e201f41086a290000370300200120043703c802201f102f200720012903c802370000200741086a201e290300370000201b2017290300370300201d20072903003703002020201a29030037030020012001290388023703c00320014200201c200b7d2013202154ad7d2204201320217d22032013562004201c562004201c511b22071b3703e00220014200200320071b3703d802200141d8026a21070b200141c0036aad42808080808004842007ad428080808080028410040c010b419ad8c400ad4280808080a009841008200141c0036a41186a221a4200370300200141c0036a41106a221f4200370300200141c0036a41086a22174200370300200142003703c00341e7a2ca00ad428080808080018422051001221e290000210620014188026a41086a2207201e41086a2900003703002001200637038802201e102f2017200729030037030020012001290388023703c00341ecb5c600ad4280808080d0018422061001221e290000211c2007201e41086a2900003703002001201c37038802201e102f201f200129038802221c370300200141d8026a41086a221b2017290300370300200141d8026a41106a221d201c370300200141d8026a41186a22202007290300370300200120012903c0033703d802200141206a200141d8026a4120109c01200141206a41106a290300211c200129032821132001280220211e201a4200370300201f420037030020174200370300200142003703c00320051001221a29000021052007201a41086a2900003703002001200537038802201a102f2017200729030037030020012001290388023703c00320061001221a29000021052007201a41086a2900003703002001200537038802201a102f201f2001290388022205370300201b2017290300370300201d200537030020202007290300370300200120012903c0033703d8022001427f201c4200201e1b220520037c20134200201e1b220320047c22062003542207ad7c22042007200420055420042005511b22071b3703c8032001427f200620071b3703c003200141d8026aad4280808080800484200141c0036aad428080808080028410040b2001290380012104200141d8036a20014180016a41086a290300370300200141d0036a2004370300200141c0036a41086a41053a00002001410c3a00c00341c8e1ca004100200141c0036a108c010b200010ab04200141c0046a24000f0b1036000be90804077f027e077f027e230041e0016b22022400200241c00036020420022001360200200241086a2001ad4280808080800884100210730240024020022802082203450d00200241106a2802002104200228020c210541002101200241003a00d801200441706a21060240024002400240034020042001460d01200241b8016a20016a200320016a2d00003a00002002200141016a22073a00d8012006417f6a21062007210120074120470d000b200241d8006a41086a200241b8016a41086a290300370300200241d8006a41106a200241b8016a41106a290300370300200241d8006a41186a200241b8016a41186a290300370300200220022903b801370358200420076b22084110490d02200320076a22042900002109200441086a290000210a41002101200241003a00d801200841706a2108034020082001460d02200241b8016a20016a200420016a41106a2d00003a00002002200141016a22073a00d8012007210120074120470d000b200241f8006a41086a220b200241b8016a41086a2201290300370300200241f8006a41106a220c200241b8016a41106a2208290300370300200241f8006a41186a220d200241b8016a41186a220e290300370300200220022903b801370378200620076b410f4d0d02200241386a41086a2206200241d8006a41086a290300370300200241386a41106a220f200241d8006a41106a290300370300200241386a41186a2210200241d8006a41186a290300370300200241186a41086a2211200b290300370300200241186a41106a220b200c290300370300200241186a41186a220c200d2903003703002002200229035837033820022002290378370318200420076a220741106a2900002112200741186a2900002113200120062903003703002008200f290300370300200e201029030037030020024198016a41086a2207201129030037030020024198016a41106a2206200b29030037030020024198016a41186a2204200c290300370300200220022903383703b8012002200229031837039801200041206a2013370300200041186a2012370300200041106a200a37030020002009370308200041286a20022903b801370300200041306a2001290300370300200041386a2008290300370300200041c0006a200e290300370300200041c8006a200229039801370300200041d0006a2007290300370300200041d8006a2006290300370300200041e0006a2004290300370300420121090c030b200141ff0171450d01200241003a00d8010c010b200141ff0171450d00200241003a00d8010b200241003602a00120024201370398012002410b36027c20022002360278200220024198016a360258200241cc016a4101360200200242013702bc01200241b885c7003602b8012002200241f8006a3602c801200241d8006a41d8dbc100200241b8016a103c1a20023502a0014220862002350298018410080240200228029c01450d00200228029801102f0b420021090b200020093703002005450d012003102f0c010b200042003703000b200241e0016a24000bb5670a047f017e017f027e077f017e037f017e017f027e230041f0026b22012400200141d0006a41186a4200370300200141d0006a41106a22024200370300200141d0006a41086a220342003703002001420037035041b89bca00ad4280808080f00184100122042900002105200141f0016a41086a2206200441086a290000370300200120053703f0012004102f20032006290300370300200120012903f00137035041cabec600ad4280808080d001841001220429000021052006200441086a290000370300200120053703f0012004102f200220012903f0012205370300200141d0026a41086a2003290300370300200141d0026a41106a2005370300200141d0026a41186a2006290300370300200120012903503703d002200141203602d4012001200141d0026a3602d001200141f0016a200141d0026aad220742808080808004842208100210730240024020012802f0012203450d0020012802f40121092001200628020022063602dc01200120033602d8010240024020064104490d002001200341046a3602d80120012006417c6a22043602dc0120044104490d002003280000210a2001200641786a3602dc012001200341086a3602d8012003280004210b200141d0006a200141d8016a10ee032001280250220c450d002001290254210541002106200141003a00e00102400240024020012802dc01220d450d002001200d417f6a220e3602dc01200120012802d801220f41016a3602d801200f2d00004101460d010b0c010b200e4104490d002001200d417b6a3602dc012001200f41056a3602d801200f2800012104410121060b200120043602c802200120053702bc022001200c3602b8022001200b3602b4022001200a3602b0020c010b200141003602980220014201370390022001410b3602e4012001200141d0016a3602e001200120014190026a3602ec01200141e4006a410136020020014201370254200141b885c7003602502001200141e0016a360260200141ec016a41d8dbc100200141d0006a103c1a2001350298024220862001350290028410080240200128029402450d00200128029002102f0b410221060b200120063602c4022009450d012003102f0c010b41022106200141023602c4020b200141d0006a41106a2203200141b0026a41106a2209280200360200200141d0006a41086a220a200141b0026a41086a220b290300370300200120012903b002370350024002400240024002400240024002400240024020064102460d0020014190026a41106a2003280200220336020020014190026a41086a200a29030022103703002001200129035022053703900220092003360200200b2010370300200141c8026a2004360200200120053703b002200120063602c40202402005a722032000470d000240024020064101460d0020012802b4022106200141d0006a200141b0026a41086a10f303200141e0026a2006360200200141d0026a410c6a200141d0006a41086a2206280200360200200141003602d002200120012903503702d402200141d0006a200141d0026a109602200141fb016a2006280200360000200120012903503700f301200141d0006a410c6a200141f7016a290000370000200141c6a4b9da04360051200141023a0050200120012900f001370055200141d0006a108a04200141d0026a41086a280200450d0120012802d402102f0c010b20012802b4022106200141d0006a200141b0026a41086a10f303200141e4026a2006360200200141d0026a41086a2001290350370300200141e0026a200141d0006a41086a2206280200360200200120043602d402200141013602d002200141d0006a200141d0026a109602200141fb016a2006280200360000200120012903503700f301200141d0006a410c6a200141f7016a290000370000200141c6a4b9da04360051200141023a0050200120012900f001370055200141d0006a108a04200141d0026a410c6a280200450d0020012802d802102f0b20012802b00221030b024020012802b40220036a2000470d00200141c0026a28020041286c4105722206417f4c0d022006102d2203450d06200141003602582001200636025420012003360250200141013a00e001200341013a00002001410136025820012802b802210620012802c0022203200141d0006a10690240024020030d00200128025821032001280254210a200128025021090c010b2006200341286c6a210c2001280254210a20012802582103034002400240200a20036b4120490d00200341206a2104200128025021090c010b200341206a22042003490d0d200a41017422092004200920044b1b220b4100480d0d02400240200a0d00200b102d21090c010b2001280250200a200b103121090b2009450d092001200b36025420012009360250200b210a0b200920036a220341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002001200436025820032006290000370000200641206a290300210502400240200a20046b4108490d00200441086a21030c010b200441086a22032004490d0d200a410174220b2003200b20034b1b220b4100480d0d02400240200a0d00200b102d21090c010b2009200a200b103121090b2009450d092001200b36025420012009360250200b210a0b20012003360258200920046a2005370000200c200641286a2206470d000b0b200141b8026a210441c7b4c600ad4280808080c002842003ad4220862009ad8410040240200a450d002009102f0b200141d0006a41086a22062004290000370300200141d0006a41106a2209200441086a280000360200200141003602542001410b3a005041c8e1ca004100200141d0006a108c01200141d0006a41186a220a420037030020094200370300200642003703002001420037035041b89bca00ad4280808080f00184100122042900002105200141f0016a41086a2203200441086a290000370300200120053703f0012004102f20062003290300370300200120012903f00137035041cabec600ad4280808080d001841001220429000021052003200441086a290000370300200120053703f0012004102f200220012903f001370000200241086a2003290300370000200141d0026a41086a2006290300370300200141d0026a41106a2009290300370300200141d0026a41186a200a290300370300200120012903503703d002200810050c010b200141bc026a280200450d0020012802b802102f0b200141d0006a41186a22094200370300200141d0006a41106a220a4200370300200141d0006a41086a220342003703002001420037035041b89bca00ad4280808080f00184100122042900002105200141f0016a41086a2206200441086a290000370300200120053703f0012004102f20032006290300370300200120012903f00137035041d7bec600ad4280808080d000841001220429000021052006200441086a290000370300200120053703f0012004102f200220012903f001370000200241086a2006290300370000200141d0026a41086a2003290300370300200141d0026a41106a200a290300370300200141d0026a41186a2009290300370300200120012903503703d002200141203602f4012001200141d0026a3602f00120014190026a2008100210732001280290022206450d0320014190026a41086a2802002104200128029402210941002103200141003a00e0010240024002402004450d0020062d0000220a41034b0d00024002400240200a0e0405000102050b2004417f6a4108490d0220062900012105410121030c040b410221030c020b2004417f6a4108490d0020062900012105410321030c020b200141003602b802200142013703b0022001410b3602e4012001200141f0016a3602e0012001200141b0026a3602d801200141e4006a410136020020014201370254200141b885c7003602502001200141e0016a360260200141d8016a41d8dbc100200141d0006a103c1a20013502b80242208620013502b002841008024020012802b402450d0020012802b002102f0b410421030b0b02402009450d002006102f0b2003417f6a220641024b0d0320060e03020301020b103d000b2005422088a7210602402005a722032000470d00200141043602d002200120063602d402200141d0006a200141d0026a109602200141fb016a200141d8006a280200360000200120012903503700f301200141dc006a200141f7016a290000370000200141c6a4b9da04360051200141023a0050200120012900f001370055200141d0006a108a040b200620036a2000470d01200141003602b002200141d0006a41186a22094200370300200141d0006a41106a220a4200370300200141d0006a41086a220342003703002001420037035041b89bca00ad4280808080f00184100122042900002105200141f0016a41086a2206200441086a290000370300200120053703f0012004102f20032006290300370300200120012903f00137035041d7bec600ad4280808080d000841001220429000021052006200441086a290000370300200120053703f0012004102f200220012903f001370000200241086a2006290300370000200141d0026a41086a2003290300370300200141d0026a41106a200a290300370300200141d0026a41186a2009290300370300200120012903503703d002200141d0006a200141b0026a10f2042008200135025842208620012802502206ad84100402402001280254450d002006102f0b200141023602542001410b3a005041c8e1ca004100200141d0006a108c010c010b2005422088a7210602402005a722032000470d00200141033602d002200120063602d402200141d0006a200141d0026a109602200141fb016a200141d8006a280200360000200120012903503700f301200141dc006a200141f7016a290000370000200141c6a4b9da04360051200141023a0050200120012900f001370055200141d0006a108a040b200620036a2000470d00200141023602b002200141d0006a41186a22094200370300200141d0006a41106a220a4200370300200141d0006a41086a220342003703002001420037035041b89bca00ad4280808080f00184100122042900002105200141f0016a41086a2206200441086a290000370300200120053703f0012004102f20032006290300370300200120012903f00137035041d7bec600ad4280808080d000841001220429000021052006200441086a290000370300200120053703f0012004102f200220012903f001370000200241086a2006290300370000200141d0026a41086a2003290300370300200141d0026a41106a200a290300370300200141d0026a41186a2009290300370300200120012903503703d002200141d0006a200141b0026a10f2042008200135025842208620012802502206ad84100402402001280254450d002006102f0b200141013602542001410b3a005041c8e1ca004100200141d0006a108c010b200141d0006a41186a22044200370300200141d0006a41106a220d4200370300200141d0006a41086a220342003703002001420037035041d5a2ca00ad42808080809001842205100122092900002108200141b0026a41086a2206200941086a290000370300200120083703b0022009102f20032006290300370300200120012903b00237035041a2c9c300ad4280808080e000841001220929000021082006200941086a290000370300200120083703b0022009102f200d20012903b0022208370300200141d0026a41086a220a2003290300370300200141d0026a41106a220b2008370300200141d0026a41186a220c2006290300370300200120012903503703d002200141c8006a200141d0026a4120109501200128024c210f0240200128024822024101470d002007428080808080048410050b20044200370300200d4200370300200342003703002001420037035020051001220929000021052006200941086a290000370300200120053703b0022009102f20032006290300370300200120012903b00237035041db98ca00ad4280808080b001841001220929000021052006200941086a290000370300200120053703b0022009102f200d20012903b002370000200d41086a2006290300370000200a2003290300370300200b200d290300370300200c2004290300370300200120012903503703d00202400240200141d0026a10f702220641ff01714102460d0020064101710d010b4104102d220a450d01200a4100360200200141d0006a41186a22044200370300200141d0006a41106a22094200370300200141d0006a41086a220342003703002001420037035041d5a2ca00ad428080808090018422051001220b2900002108200141b0026a41086a2206200b41086a290000370300200120083703b002200b102f20032006290300370300200120012903b00237035041f4c8c300ad4280808080b001841001220b29000021082006200b41086a290000370300200120083703b002200b102f200d20012903b002370000200d41086a220b2006290300370000200141d0026a41086a220c2003290300370300200141d0026a41106a22002009290300370300200141d0026a41186a220e2004290300370300200120012903503703d002200141203602542001200141d0026a360250200a4101200141d0006a10a304200a102f4104102d220a450d01200a41003602002004420037030020094200370300200342003703002001420037035020051001221129000021082006201141086a290000370300200120083703b0022011102f20032006290300370300200120012903b00237035041a8c9c300ad4280808080c001841001221129000021082006201141086a290000370300200120083703b0022011102f200d20012903b002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903503703d002200141203602542001200141d0026a360250200a4101200141d0006a10a304200a102f2004420037030020094200370300200342003703002001420037035020051001220a29000021082006200a41086a290000370300200120083703b002200a102f20032006290300370300200120012903b00237035041b4c9c300ad4280808080e000841001220a29000021082006200a41086a290000370300200120083703b002200a102f200d20012903b002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903503703d00220014100360250200742808080808004842208200141d0006aad4280808080c0008410042004420037030020094200370300200342003703002001420037035020051001220a29000021052006200a41086a290000370300200120053703b002200a102f20032006290300370300200120012903b00237035041db98ca00ad4280808080b001841001220a29000021052006200a41086a290000370300200120053703b002200a102f200d20012903b002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903503703d002200141013a00e0012008200141e0016aad4280808080108410040b200141d0006a41186a22044200370300200141d0006a41106a22124200370300200141d0006a41086a220642003703002001420037035041d5a2ca00ad428080808090018422051001220329000021082006200341086a290000370300200120083703502003102f41f4c8c300ad4280808080b00184100122092900002108200141b0026a41086a2203200941086a290000370300200120083703b0022009102f201220012903b0022208370300200141d0026a41086a220a2006290300370300200141d0026a41106a220b2008370300200141d0026a41186a220c2003290300370300200120012903503703d002200141d0006a200141d0026a10fe03024002402001280250220e0d004104210e41002111420021100c010b20012902542210422088a721110b2004420037030020124200370300200642003703002001420037035020051001220929000021052003200941086a290000370300200120053703b0022009102f20062003290300370300200120012903b00237035041a8c9c300ad4280808080c001841001220929000021052003200941086a290000370300200120053703b0022009102f200d20012903b002370000200d41086a2003290300370000200a2006290300370300200b2012290300370300200c2004290300370300200120012903503703d002200141d0006a200141d0026a10fe03024002402001280250220a450d002001200a3602900220012902542208422088a721040c010b4104210a200141043602900241002104420021080b0240024002400240024020020d002011417f6a220620114f0d01200620114b0d01200e20064102746a280200210f0b201141002011419c7f6a22062006201141016a4b1b2213490d012013450d03200e20134102746a21002004ad2105200e210203402002280200210b024002400240024002402005a7220c41014b0d0041002106200c0e020201020b41002106200c2103034020062003410176220420066a2209200b200a20094102746a280200491b2106200320046b220341014b0d000b0b200b200a200641027422036a2802002204460d022006200b20044b6a21060c010b410021060b2001200636025041f0c9c300412e200141d0006a41a0cac30041b0cac300103e000b20052006ad580d03200a20036a2203200341046a2006417f73200c6a41027410e9061a200842ffffffff0f83200c417f6a2204ad422086842108200241046a22022000460d042005427f7c2105200128029002210a0c000b0b41bac9c300412641e0c9c3001055000b41a6b5ca00411c41f8b4ca001039000b41b8e3c300411d41f8b4ca001039000b201042ffffffff0f8321050240201120136b2206450d0002402013450d00200e200e20134102746a200641027410e9061a2008422088a721040b20052006ad4220868421050b200128029002210b41002106024002400240024002400240200441014b0d0020040e020201020b20042103034020062003410176220920066a220a200f200b200a4102746a280200491b2106200320096b220341014b0d000b0b0240200f200b20064102746a2802002203460d002006200f20034b6a21060b20042006490d010b20042008a7470d02200441016a22032004490d07200441017422092003200920034b1b220341ffffffff03712003470d072003410274220341004e0d010c070b419ae3c300411e41f8b4ca001039000b0240024020040d002003102d210b0c010b200b200441027420031031210b0b200b450d012001200b360290022003410276ad21080b200b20064102746a220341046a2003200420066b41027410e9061a2003200f360200024020054220882210a722092005a7470d00200941016a22062009490d052010a7220a4101742203200620062003491b220641ffffffff03712006470d05200641027422064100480d050240024020090d002006102d210e0c010b200e200a41027420061031210e0b200e450d012005422088a721092006410276ad21050b200e20094102746a200f3602000240200441016a22040d0041c0cac30041c30041f8b4ca001039000b2004200441017622064d0d01200128029002220320064102746a280200210c024020044101710d0020042006417f6a22064d0d03200320064102746a280200200c6a410176210c0b200141d0006a41186a220a4200370300200141d0006a41106a220b4200370300200141d0006a41086a220342003703002001420037035041d5a2ca00ad42808080809001842210100122022900002114200141b0026a41086a2206200241086a290000370300200120143703b0022002102f20032006290300370300200120012903b00237035041f4c8c300ad4280808080b001841001220229000021142006200241086a290000370300200120143703b0022002102f200d20012903b002370000200d41086a22002006290300370000200141d0026a41086a220f2003290300370300200141d0026a41106a2211200b290300370300200141d0026a41186a2213200a290300370300200120012903503703d002200141203602542001200141d0026a360250200e200941016a2215200141d0006a10a30402402005a7450d00200e102f0b2001280290022102200a4200370300200b4200370300200342003703002001420037035020101001220929000021052006200941086a290000370300200120053703b0022009102f20032006290300370300200120012903b00237035041a8c9c300ad4280808080c001841001220929000021052006200941086a290000370300200120053703b0022009102f200d20012903b00237000020002006290300370000200f20032903003703002011200b2903003703002013200a290300370300200120012903503703d002200141203602542001200141d0026a36025020022004200141d0006a10a30402402008a7450d002002102f0b200141d0006a41186a22094200370300200141d0006a41106a22044200370300200141d0006a41086a220642003703002001420037035041d5a2ca00ad42808080809001841001220a2900002105200141b0026a41086a2203200a41086a290000370300200120053703b002200a102f20062003290300370300200120012903b00237035041b4c9c300ad4280808080e000841001220a29000021052003200a41086a290000370300200120053703b002200a102f200d20012903b002370000200d41086a2003290300370000200141d0026a41086a220a2006290300370300200141d0026a41106a220b2004290300370300200141d0026a41186a22022009290300370300200120012903503703d0022001200c36025020074280808080800484200141d0006aad22084280808080c0008410040240201541e500470d0020094200370300200442003703002006420037030020014200370350418de6c300ad4280808080e000841001220c29000021052006200c41086a29000037030020012005370350200c102f419ce6c300ad4280808080e000841001220c29000021052003200c41086a290000370300200120053703b002200c102f201220012903b002370000201241086a2003290300370000200a2006290300370300200b200429030037030020022009290300370300200120012903503703d002200141c0006a200141d0026a41201095010b2009420037030020044200370300200642003703002001420037035041eba1ca00ad4280808080f0008422101001220929000021052006200941086a290000370300200120053703502009102f41adcac800ad221442808080809001841001220929000021052003200941086a290000370300200120053703b0022009102f200420012903b0022205370300200a2006290300370300200b200537030020022003290300370300200120012903503703d002200141d0006a200141d0026a10fd0302402001290350427f7c4202540d0020042903002105200141d0006a41186a22094200370300200141d0006a41106a22034200370300200141d0006a41086a220642003703002001420037035041d5a2ca00ad42808080809001841001220429000021162006200441086a290000370300200120163703502004102f41ecb0c000ad42808080803084100122042900002116200141b0026a41086a220a200441086a290000370300200120163703b0022004102f200320012903b0022216370300200141d0026a41086a220b2006290300370300200141d0026a41106a220c2016370300200141d0026a41186a2202200a290300370300200120012903503703d002200141306a200141d0026a10e3012001290338211620012802302104200120053703c00220012016420020041b3703b802200142013703b0022009420037030020034200370300200642003703002001420037035020101001220429000021052006200441086a290000370300200120053703502004102f2014428080808090018410012204290000210520014190026a41086a2209200441086a29000037030020012005370390022004102f20032001290390022205370300200b2006290300370300200c200537030020022009290300370300200120012903503703d002200141203602542001200141d0026a360250200141b0026a200141d0006a10bb030b200141d0006a41186a220b4200370300200141d0006a41106a22094200370300200141d0006a41086a220642003703002001420037035041e7a2ca00ad4280808080800184100122042900002105200141b0026a41086a2203200441086a290000370300200120053703b0022004102f20062003290300370300200120012903b00237035041efa2ca00ad42808080809002841001220429000021052003200441086a290000370300200120053703b0022004102f200920012903b0022205370300200141d0026a41086a22042006290300370300200141d0026a41106a2005370300200141d0026a41186a2003290300370300200120012903503703d002200141206a200141d0026a10e301200129032821102001280220210c200141f0016a41186a4200370300200141f0016a41106a22024200370300200141f0016a41086a22034200370300200142003703f001418de6c300ad4280808080e000841001220a29000021052003200a41086a290000370300200120053703f001200a102f41d480c400ad4280808080b002841001220a29000021052004200a41086a290000370300200120053703d002200a102f200220012903d00222053703002006200329030037030020092005370300200b2004290300370300200120012903f001370350200141186a200141d0006a4120109501200141086a200128021c410020012802181b22064180e59af70020064180e59af7004b22031b4180e59af700200620031b6bad220542002005420010ed06200542a8c30180211420104200200c1b210542092001290308221042808090bbbad6adf00d7f20012903102010423f87521b211002400240200641ffe49af7004b0d0042ffffffffffffffffff00428080808080808080807f2005201420107d22147d22104200531b20102005427f5522062014427f554720062010427f5547711b22054280ec94a37c20054280ec94a37c551b21050c010b42ffffffffffffffffff00428080808080808080807f2005201420107c22147c22104200531b20102005427f5522062014427f554620062010427f5547711b21050b200141d0006a41186a220a4200370300200141d0006a41106a22044200370300200141d0006a41086a220342003703002001420037035041e7a2ca00ad42808080808001841001220b2900002110200141b0026a41086a2206200b41086a290000370300200120103703b002200b102f20032006290300370300200120012903b00237035041efa2ca00ad42808080809002841001220b29000021102006200b41086a290000370300200120103703b002200b102f200920012903b002370000200941086a2006290300370000200141d0026a41086a22092003290300370300200141d0026a41106a220b2004290300370300200141d0026a41186a220c200a290300370300200120012903503703d00220012005370350200742808080808004842205200842808080808001841004200a4200370300200442003703002003420037030020014200370350419487ca00ad4280808080a0018422101001220229000021142006200241086a290000370300200120143703b0022002102f20032006290300370300200120012903b00237035041da85c700ad4280808080e000841001220229000021142006200241086a290000370300200120143703b0022002102f200420012903b002221437030020092003290300370300200b2014370300200c2006290300370300200120012903503703d00220051005200a420037030020044200370300200342003703002001420037035020101001220229000021102006200241086a290000370300200120103703b0022002102f20032006290300370300200120012903b002370350419e87ca00ad4280808080c001841001220229000021102006200241086a290000370300200120103703b0022002102f200420012903b002221037030020092003290300370300200b2010370300200c2006290300370300200120012903503703d00220051005200a420037030020044200370300200342003703002001420037035041d5a2ca00ad42808080809001841001220a29000021102003200a41086a29000037030020012010370350200a102f41dea2ca00ad42808080809001841001220a29000021102006200a41086a290000370300200120103703b002200a102f200420012903b002221037030020092003290300370300200b2010370300200c2006290300370300200120012903503703d002200141d0026a10f702220641ff01714102460d03200510052006410171450d03200141d0006a41186a4200370300200141d0006a41106a22094200370300200141d0006a41086a220342003703002001420037035041aa87ca00ad4280808080c00084100122042900002105200141f0016a41086a2206200441086a290000370300200120053703f0012004102f20032006290300370300200120012903f00137035041db98ca00ad4280808080b001841001220429000021052006200441086a290000370300200120053703f0012004102f200920012903f0012205370300200141d0026a41086a2003290300370300200141d0026a41106a2005370300200141d0026a41186a2006290300370300200120012903503703d002200141d0006a200141d0026a10f304024020012d005022064102460d0020074280808080800484100520014190026a41086a200141d9006a29000037030020014190026a41106a200141e1006a29000037030020014190026a41186a200141e9006a29000037030020012001290051370390020240200641037122064103460d0020060e03010001010b200141b0026a41186a20014190026a41186a290300370300200141b0026a41106a20014190026a41106a290300370300200141b0026a41086a20014190026a41086a29030037030020012001290390023703b002200141d0006a41186a220b4200370300200141d0006a41106a220c4200370300200141d0006a41086a220442003703002001420037035041aa87ca00ad4280808080c000842205100122062900002110200141f0016a41086a2203200641086a290000370300200120103703f0012006102f20042003290300370300200120012903f00137035041f187ca00ad4280808080c001841001220629000021102003200641086a290000370300200120103703f0012006102f200920012903f001370000200941086a2003290300370000200141d0026a41086a220a2004290300370300200141d0026a41106a200c290300370300200141d0026a41186a200b290300370300200120012903503703d0022001200141d0026a41201095012001280204210b2001280200210c20051001220629000021052004200641086a290000370300200120053703502006102f41fd87ca00ad4280808080900284100122062900002105200a200641086a290000370300200120053703d0022006102f2001200b4100200c1b220c3602e001200141e0016aad22104280808080c00084100322062900002105200641086a2900002114200641106a2900002116200141f0016a41186a220b200641186a290000370300200141f0016a41106a2202201637030020032014370300200120053703f0012006102f41c000102d2206450d0120062001290350370000200620012903d002370010200620012903f001370020200641086a2004290300370000200641186a200a290300370000200641286a2003290300370000200641306a2002290300370000200641386a200b290300370000200141d0006a200641c00010860420012902542105200128025021032006102f2003410120031b2104024002402005420020031b22054220882214a72203418002490d004120102d2203450d03200320012903b002370000200341186a200141b0026a41186a290300370000200341106a200141b0026a41106a290300370000200341086a200141b0026a41086a29030037000041aa87ca00ad4280808080c000842214100122062900002116200141d0006a41086a220b200641086a290000370300200120163703502006102f41fd87ca00ad4280808080900284100122062900002116200141d0026a41086a2202200641086a290000370300200120163703d0022006102f2001200c41016a220c3602e00120104280808080c00084100322062900002110200641086a2900002116200641106a2900002117200141f0016a41186a2200200641186a290000370300200141f0016a41106a220d2017370300200141f0016a41086a220a2016370300200120103703f0012006102f41c000102d2206450d0320062001290350370000200620012903d002370010200620012903f001370020200641086a200b290300370000200641186a2002290300370000200641286a200a290300370000200641306a200d290300370000200641386a2000290300370000200141c0003602542001200636025020034101200141d0006a10f4042006102f2003102f200141d0006a41186a22034200370300200141d0006a41106a22004200370300200b4200370300200142003703502014100122062900002110200a200641086a290000370300200120103703f0012006102f200b200a290300370300200120012903f00137035041f187ca00ad4280808080c00184100122062900002110200a200641086a290000370300200120103703f0012006102f200920012903f001370000200941086a200a2903003700002002200b290300370300200141d0026a41106a2000290300370300200141d0026a41186a2003290300370300200120012903503703d0022001200c3602502007428080808080048420084280808080c0008410040c010b200141d0006a41186a220a200141b0026a41186a290300370300200141d0006a41106a220b200141b0026a41106a290300370300200141d0006a41086a2209200141b0026a41086a290300370300200120012903b002370350024020032005a7470d00200341016a22062003490d072014a722004101742202200620062002491b220641ffffff3f712006470d07200641057422064100480d070240024020030d002006102d21040c010b200420004105742006103121040b2004450d032005422088a721032006410576ad21050b200420034105746a22062001290350370000200641186a200a290300370000200641106a200b290300370000200641086a200929030037000041aa87ca00ad4280808080c000841001220629000021082009200641086a290000370300200120083703502006102f41fd87ca00ad4280808080900284100122062900002108200141d0026a41086a200641086a290000370300200120083703d0022006102f2001200c3602e00120104280808080c00084100322062900002108200641086a2900002107200641106a2900002110200141f0016a41186a200641186a290000370300200141f0016a41106a2010370300200141f0016a41086a2007370300200120083703f0012006102f41c000102d2206450d0220062001290350370000200620012903d002370010200620012903f001370020200641086a200141d0006a41086a290300370000200641186a200141d0026a41086a290300370000200641286a200141f0016a41086a290300370000200641306a20014180026a290300370000200641386a200141f0016a41186a290300370000200141c000360254200120063602502004200341016a200141d0006a10f4042006102f200542ffffffff0f8321050b2005a7450d002004102f0b200141f0026a24000f0b1036000b41c4c2ca0020062004103b000b41c4c2ca0020062004103b000b41fca5c000412b41f8b4ca001039000b1038000bb61b06057f017e077f017e287f027e230041a00d6b22032400200341106a41186a22044200370300200341106a41106a22054200370300200341106a41086a2206420037030020034200370310418de6c300ad4280808080e000841001220729000021082006200741086a290000370300200320083703102007102f419ce6c300ad4280808080e00084100122092900002108200341900d6a41086a2207200941086a290000370300200320083703900d2009102f200520032903900d2208370300200341f00c6a41086a220a2006290300370300200341f00c6a41106a220b2008370300200341f00c6a41186a220c2007290300370300200320032903103703f00c200341086a200341f00c6a4120109501200328020c210d2003280208210e2004420037030020054200370300200642003703002003420037031041dcbec600ad42808080808003841001220929000021082006200941086a290000370300200320083703102009102f41f4bec600ad4280808080e001841001220929000021082007200941086a290000370300200320083703900d2009102f200520032903900d2208370300200a2006290300370300200b2008370300200c2007290300370300200320032903103703f00c200341106a200341f00c6a412010aa0220032802102206410120061b210f024002402003290214420020061b2210422088a722050d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b200341106a410041e00c10e7061a200d417f6a41d100704130200e1b2106200241056a2111200f41206a2112200f20054105746a21134100210d4100211441002115410021164100211741002118410021194100211a4100211b4100211c4100211d4100211e4100211f410021204100212141002122410021234100212441002125410021264100212741002128410021294100212a4100212b4100212c4100212d4100212e4100212f410021304100213141002132200f21054100213341d10021340240034020332109024002402006450d00200641016a210603400240024020052013460d0020052107200541206a21050c010b20122105200f21070b2006417f6a22060d000b20070d010c030b024020052013460d0020052107200541206a21050c010b20122105200f21070b02400240024002402011417f4c0d00024002402011450d002011102d2206450d03200341003602980d200320113602940d0c010b200341003602980d200320113602940d200341013602900d4101102d2206450d02200341013602940d0b200320063602900d200341013602980d200620093a00002002200341900d6a10690240024020032802940d220e20032802980d22046b2002490d0020032802900d21060c010b200420026a22062004490d03200e41017422332006203320064b1b22334100480d0302400240200e0d002033102d21060c010b20032802900d200e2033103121060b2006450d02200320333602940d200320063602900d2033210e0b2003200420026a22333602980d200620046a2001200210e8061a4120102d2204450d0120042007290000370000200441186a2235200741186a290000370000200441106a2236200741106a290000370000200441086a2237200741086a29000037000002400240200e20336b411f4d0d00200e21380c010b203341206a22072033490d03200e41017422382007203820074b1b22384100480d0302400240200e0d002038102d21060c010b2006200e2038103121060b2006450d02200320383602940d200320063602900d0b200620336a220741086a2037290000370000200741106a2036290000370000200741186a20352900003700002003203341206a220e3602980d200720042900003700002004102f200ead4220862006ad84100322072900002108200741086a2900002139200741106a290000213a200c200741186a290000370300200b203a370300200a2039370300200320083703f00c2007102f02402038450d002006102f0b2034417f6a2134200941016a2133200341106a20094103704105746a220620032903f00c370000200641186a200c290300370000200641106a200b290300370000200641086a200a2903003700004100210703402009200941036e2204417d6c6a4102470d04200341106a20076a220641df006a2d0000220d2006411f6a2d0000220e71200d200e722006413f6a2d000071722132200641de006a2d0000220d2006411e6a2d0000220e71200d200e722006413e6a2d000071722131200641dd006a2d0000220d2006411d6a2d0000220e71200d200e722006413d6a2d000071722130200641dc006a2d0000220d2006411c6a2d0000220e71200d200e722006413c6a2d00007172212f200641db006a2d0000220d2006411b6a2d0000220e71200d200e722006413b6a2d00007172212e200641da006a2d0000220d2006411a6a2d0000220e71200d200e722006413a6a2d00007172212d200641d9006a2d0000220d200641196a2d0000220e71200d200e72200641396a2d00007172212c200641d8006a2d0000220d200641186a2d0000220e71200d200e72200641386a2d00007172212b200641d7006a2d0000220d200641176a2d0000220e71200d200e72200641376a2d00007172212a200641d6006a2d0000220d200641166a2d0000220e71200d200e72200641366a2d000071722129200641d5006a2d0000220d200641156a2d0000220e71200d200e72200641356a2d000071722128200641d4006a2d0000220d200641146a2d0000220e71200d200e72200641346a2d000071722127200641d3006a2d0000220d200641136a2d0000220e71200d200e72200641336a2d000071722126200641d2006a2d0000220d200641126a2d0000220e71200d200e72200641326a2d000071722125200641d1006a2d0000220d200641116a2d0000220e71200d200e72200641316a2d000071722124200641d0006a2d0000220d200641106a2d0000220e71200d200e72200641306a2d000071722123200641cf006a2d0000220d2006410f6a2d0000220e71200d200e722006412f6a2d000071722122200641ce006a2d0000220d2006410e6a2d0000220e71200d200e722006412e6a2d000071722121200641cd006a2d0000220d2006410d6a2d0000220e71200d200e722006412d6a2d000071722120200641cc006a2d0000220d2006410c6a2d0000220e71200d200e722006412c6a2d00007172211f200641cb006a2d0000220d2006410b6a2d0000220e71200d200e722006412b6a2d00007172211e200641ca006a2d0000220d2006410a6a2d0000220e71200d200e722006412a6a2d00007172211d200641c9006a2d0000220d200641096a2d0000220e71200d200e72200641296a2d00007172211c200641c8006a2d0000220d200641086a2d0000220e71200d200e72200641286a2d00007172211b200641c7006a2d0000220d200641076a2d0000220e71200d200e72200641276a2d00007172211a200641c6006a2d0000220d200641066a2d0000220e71200d200e72200641266a2d000071722119200641c5006a2d0000220d200641056a2d0000220e71200d200e72200641256a2d000071722118200641c4006a2d0000220d200641046a2d0000220e71200d200e72200641246a2d000071722117200641c3006a2d0000220d200641036a2d0000220e71200d200e72200641236a2d000071722116200641c2006a2d0000220d200641026a2d0000220e71200d200e72200641226a2d000071722115200641c1006a2d0000220d200641016a2d0000220e71200d200e72200641216a2d000071722114200641c0006a2d0000220d20062d0000220e71200d200e72200641206a2d00007172210d200741800c460d04200341106a20072004410574200941096e41e0006c6b6a6a220641ff006a20323a0000200641fe006a20313a0000200641fd006a20303a0000200641fc006a202f3a0000200641fb006a202e3a0000200641fa006a202d3a0000200641f9006a202c3a0000200641f8006a202b3a0000200641f7006a202a3a0000200641f6006a20293a0000200641f5006a20283a0000200641f4006a20273a0000200641f3006a20263a0000200641f2006a20253a0000200641f1006a20243a0000200641f0006a20233a0000200641ef006a20223a0000200641ee006a20213a0000200641ed006a20203a0000200641ec006a201f3a0000200641eb006a201e3a0000200641ea006a201d3a0000200641e9006a201c3a0000200641e8006a201b3a0000200641e7006a201a3a0000200641e6006a20193a0000200641e5006a20183a0000200641e4006a20173a0000200641e3006a20163a0000200641e2006a20153a0000200641e1006a20143a0000200641e0006a200d3a000020042109200741e0006a220741e00c470d000c040b0b103d000b1036000b1038000b4100210620340d000b0b200020323a001f200020313a001e200020303a001d2000202f3a001c2000202e3a001b2000202d3a001a2000202c3a00192000202b3a00182000202a3a0017200020293a0016200020283a0015200020273a0014200020263a0013200020253a0012200020243a0011200020233a0010200020223a000f200020213a000e200020203a000d2000201f3a000c2000201e3a000b2000201d3a000a2000201c3a00092000201b3a00082000201a3a0007200020193a0006200020183a0005200020173a0004200020163a0003200020153a0002200020143a00012000200d3a00000b02402010a7450d00200f102f0b200341a00d6a24000bc10e04067f017e107f047e23004190036b220224002002412036021420022001360210200241186a2001ad428080808080048410021073024002400240024020022802182203450d00200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10e60120022802080d010240200228020c2205200228022c220641e8006e2201200120054b1b2207ad42e8007e2208422088a70d002008a72201417f4c0d00024002400240024020010d00410821090c010b2001102d2209450d01200141e8006e21070b02402005450d00200241d8026a410172210a4100210b0340200241003a00f802200b41016a210c410021010240024002400240034020062001460d01200241d8026a20016a2002280228220d2d00003a00002002200d41016a3602282002200141016a220d3a00f802200d2101200d4120470d000b20024180026a41086a2201200241d8026a41086a220e29030037030020024180026a41106a220f200241d8026a41106a221029030037030020024180026a41186a2211200241d8026a41186a2212290300370300200220022903d8023703800220022006200d6b36022c200241d8026a200241286a10c30420022d00d802220d4102470d010c020b2002410036022c200141ff0171450d01200241003a00f8024102210d0c020b200241a0026a412f6a2206200a412f6a290000370000200241a0026a41286a2213200a41286a290000370300200241a0026a41206a2214200a41206a290000370300200241a0026a41186a2215200a41186a290000370300200241a0026a41106a2216200a41106a290000370300200241a0026a41086a2217200a41086a2900003703002002200a2900003703a002200228022c22184110490d00200241e0016a41086a2001290300370300200241e0016a41106a200f290300370300200241e0016a41186a2011290300370300200e20172903003703002010201629030037030020122015290300370300200241d8026a41206a2014290300370300200241d8026a41286a2013290300370300200241d8026a412f6a200629000037000020022002290380023703e001200220022903a0023703d8022002201841706a36022c20022002280228220141106a360228200141086a29000021192001290000211a0c010b4102210d0b200241a8016a412f6a2201200241d8026a412f6a290000370000200241a8016a41286a2206200241d8026a41286a290300370300200241a8016a41206a220e200241d8026a41206a290300370300200241a8016a41186a220f200241d8026a41186a290300370300200241a8016a41106a2210200241d8026a41106a290300370300200241a8016a41086a2211200241d8026a41086a29030037030020024188016a41086a2212200241e0016a41086a29030037030020024188016a41106a2213200241e0016a41106a29030037030020024188016a41186a2214200241e0016a41186a290300370300200220022903d8023703a801200220022903e001370388010240200d4102460d00200241d0006a412f6a22152001290000370000200241d0006a41286a22162006290300370300200241d0006a41206a2206200e290300370300200241d0006a41186a220e200f290300370300200241d0006a41106a220f2010290300370300200241d0006a41086a22102011290300370300200241306a41086a22112012290300370300200241306a41106a22122013290300370300200241306a41186a22132014290300370300200220022903a801370350200220022903880137033002402007200b470d00200b4101742201200c2001200c4b1bad42e8007e2208422088a70d052008a722014100480d0502400240200b0d002001102d21090c010b2009200b41e8006c2001103121090b2009450d04200141e8006e21070b2009200b41e8006c6a2201200d3a0000200141196a200e290300370000200141116a200f290300370000200141096a201029030037000020012002290350370001201529000021082016290300211b2006290300211c200141c0006a2019370000200141386a201a370000200141216a201c370000200141296a201b370000200141306a2008370000200141c8006a2002290330370000200141d0006a2011290300370000200141d8006a2012290300370000200141e0006a2013290300370000200c2005460d02200228022c2106200c210b0c010b0b2007450d052009102f0c050b2009450d042000200736020420002009360200200041086a20053602000c050b1036000b1038000b103d000b200041003602000c020b200241003602a802200242013703a0022002410b3602ac012002200241106a3602a8012002200241a0026a360250200241ec026a4101360200200242013702dc02200241b885c7003602d8022002200241a8016a3602e802200241d0006a41d8dbc100200241d8026a103c1a20023502a80242208620023502a002841008024020022802a402450d0020022802a002102f0b200041003602000b2004450d002003102f0b20024190036a24000bae1e04017f067e0f7f037e230041d0026b22032400200241c0006a2903002104200241306a2903002105200241286a2903002106200241106a2903002107200241086a29030021082002290338210920022d0000210a200341186a200241e0006a290000370300200341106a200241d8006a290000370300200341086a200241d0006a29000037030020032002290048370300200341206a41086a200241206a290300370300200320022800013602304104210b2003200241046a2800003600332003200241186a29030037032020012802002802002202280200210c0240024002402002280208220d0d004103210e200c21020c010b200d410574210f200c210202400340200341a8016a20032002221010b20420032802a801220220032802b00110b40441ff0171210e024020032802ac01450d002002102f0b0240200e4103470d00201041206a2102200f41606a220f450d020c010b0b201041206a21020c020b201041206a21024103210e0b0b4101211102400240024002400240024002400240200e41ff0171417e6a220f41014b0d00410021124100211341002114200f0e020102010b410021110b4108102d220b450d03200b2010360204200b200e3a0000200c200d4105746a210f4101211241012113034002400240200f2002470d004103210e0c010b200341a8016a2003200210b20420032802a801221020032802b00110b40441ff0171210e024020032802ac01450d002010102f0b200241206a2102200e4103460d01200241606a21100b024002400240200e41ff0171220c4102470d00201141016a21110c010b200c4103460d010b024020132012470d00201241016a220c2012490d0820124101742213200c2013200c4b1b220c41ffffffff0171200c470d08200c410374220c4100480d080240024020120d00200c102d210b0c010b200b2012410374200c1031210b0b200b450d06200c41037621130b200b20124103746a220c2010360204200c200e3a0000201241016a21120c010b0b02402012450d0020012802042012417f6a10af04220220124f0d05200b20024103746a2d000022024103470d020b201121140b410121024100210c0c010b410241012002410246220c1b2102201121140b200320023a00372001280208210f200341c0026a200128020c360200200341bc026a200341c8026a3602002003200b20124103746a22023602b4022003200b3602b002200320133602ac022003200b3602a8022003200341376a3602b8022003200341b8026a220e3602a80102400340200b2002460d012003200b41086a3602b002200b280200220241ff01714103460d010240200e2002200b28020410dc0422020d0020032802b402210220032802b002210b0c010b0b20034180016a41086a220b200241086a29000037030020034180016a41106a2213200241106a29000037030020034180016a41186a2211200241186a2900003703002003200229000037038001200f41046a21120340200341a8016a41186a220d2011290300370300200341a8016a41106a22152013290300370300200341a8016a41086a2216200b29030037030020032003290380013703a80102400240200f41086a221728020022022012280200460d00200f28020021100c010b200241016a22102002490d05200241017422182010201820104b1b221041ffffff3f712010470d05201041057422184100480d050240024020020d002018102d21100c010b200f28020020024105742018103121100b2010450d03200f2010360200201220184105763602000b201020024105746a221020032903a801370000201041186a200d290300370000201041106a2015290300370000201041086a20162903003700002017200241016a3602002003200e3602a801034020032802b002220220032802b402460d022003200241086a3602b0022002280200221041ff01714103460d02200e2010200228020410dc042202450d000b200b200241086a2900003703002013200241106a2900003703002011200241186a29000037030020032002290000370380010c000b0b024020032802ac02450d0020032802a802102f0b02400240200c0d00200341f0006a41086a200341206a41086a290300370300200320032802303602382003200328003336003b2003200329032037037041c6b5c400ad4280808080f00084100122022900002119200341a8026a41086a200241086a290000370300200320193703a8022002102f419cccc500ad4280808080b0028410012202290000211920034180016a41086a200241086a29000037030020032019370380012002102f4120102d2202450d0220022003290300370000200241186a200341186a290300370000200241106a200341106a290300370000200241086a200341086a2903003700002002ad42808080808004841003220e2900002119200e41086a290000211a200e41106a290000211b200341a8016a41186a2210200e41186a290000370300200341a8016a41106a220f201b370300200341a8016a41086a201a370300200320193703a801200e102f2002102f41c000102d2202450d02200220032903a8023700002002200329038001370010200220032903a801370020200241086a200341a8026a41086a290300370000200241186a20034180016a41086a290300370000200241286a200341a8016a41086a290300370000200241306a200f290300370000200241386a20102903003700004110102d220e450d02200e2009370000200e2004370008200e411041201031210e02400240200a41ff01714101460d00200e450d04200e41003a0010200320073703b001200320083703a801200341a8016a210f41112110412021120c010b200e450d03200e41013a001041c0002112200e412041c0001031220e450d03200e2008370018200e2003280238360011200e2003290370370028200e41206a2007370000200e41146a200328003b360000200e41306a200341f8006a2d00003a0000200320053703b001200320063703a801200341a8016a210f413121100b0240201220106b410f470d00200e20122012410174220b201041106a220c200b200c4b1b1031220e450d030b200e20106a2212200f290000370000201241086a200f41086a2900003700002002ad4280808080800884201041106aad422086200ead841004200e102f2002102f200341a8016a41086a41083a0000200341b1016a2003290300370000200341b9016a200341086a290300370000200341c1016a200341106a290300370000200341c9016a200341186a290300370000200341123a00a80141c8e1ca004100200341a8016a108c01200042003703000c010b20012802102202200228020020146a360200200128021422022002290300221920097c221a370300200241086a2202200229030020047c201a201954ad7c37030020012802002802002102200341a8016a41186a2210200341186a290300370300200341a8016a41106a220f200341106a290300370300200341a8016a41086a2212200341086a290300370300200320032903003703a80102402002280208220e200241046a280200470d00200e41016a220b200e490d04200e410174220c200b200c200b4b1b220b41ffffff3f71200b470d04200b410574220b4100480d0402400240200e0d00200b102d210e0c010b2002280200200e410574200b1031210e0b200e450d022002200e360200200241046a200b4105763602002002280208210e0b2002280200200e4105746a220e20032903a801370000200e41186a2010290300370000200e41106a200f290300370000200e41086a20122903003700002002200228020841016a360208200320032802303602482003200328003336004b200341386a41086a200341206a41086a29030037030020032003290320370338200128021828020021100240024002400240200a41ff01714101470d002003418f016a20073700002003419f016a200341386a41086a2d00003a000020032008370087012003200328004b360083012003200328024836028001200320032903383700970141c6b5c400ad4280808080f00084100122022900002107200341f0006a41086a200241086a290000370300200320073703702002102f41d8cdc500ad4280808080800184100122022900002107200341a8026a41086a200241086a290000370300200320073703a8022002102f4120102d2202450d052002200329038001370000200241186a20034180016a41186a290300370000200241106a20034180016a41106a290300370000200241086a20034180016a41086a2903003700002002ad42808080808004841003220e2900002107200e41086a2900002108200e41106a2900002119200341a8016a41186a220f200e41186a290000370300200341a8016a41106a22122019370300200341a8016a41086a2008370300200320073703a801200e102f2002102f41c000102d2202450d0520022003290370370000200220032903a802370010200220032903a801370020200241086a200341f0006a41086a290300370000200241186a200341a8026a41086a290300370000200241286a200341a8016a41086a290300370000200241306a2012290300370000200241386a200f290300370000200210dd0441ff0171220e4102470d022002102f0c010b200320083703a802200320073703b0022008200784500d002003200336027020034180016a2003200341a8026a200341f0006a1096012003290380014201520d002003290388012107200341e0016a20034180016a41106a290300370300200341d8016a2007370300200341a8016a41086a41003a0000200341b1016a2003290300370000200341b9016a200341086a290300370000200341c1016a200341106a290300370000200341c9016a200341186a290300370000200341033a00a80141c8e1ca004100200341a8016a108c010b20092107200421080c010b2002ad428080808080088410052002102f2009210720042108200e0d0020034180016a20102009200620092006542202200420055420042005511b220e1b20042005200e1b10b0044200200420057d2002ad7d2207200920067d2205200956200720045620072004511b22021b21084200200520021b21070b200320102007200810b004200041386a2004370300200041306a20093703002000410c6a2003290300370200200041146a200341086a2903003702002000411c6a200341106a290300370200200041246a200341186a29030037020020004201370300200020012802102802003602080b200341d0026a24000f0b1036000b41acd9c40020022012103b000b1038000b992209027f017e027f017e2f7f017e1e7f077e017f0240200028028002220241c000490d00200041a0026a22032903002204a7210520004198026a22062903002207a721082004422088a721092007422088a7210a41e5f0c18b06210b41eec8819903210c41b2da88cb07210d41f4ca81d906210e410a21022006280200220f21102000419c026a28020022112112200328020022132114200041a4026a28020022152116200f211720112118201321192015211a200f211b2011211c2013211d2015211e20004194026a280200221f210320004190026a280200222021062000418c026a2802002221212220002802880222232124201f2125202021262021212720232128201f21292020212a2021212b2023212c201f212d2020212e2021212f20232130200041b0026a2903002204422088a7223121322004a722332134200041ac026a2802002235ad422086200041a8026a2802002236ad84223742037c2204422088a7223821392004a7223a213b2031213c2033213d203742027c2204422088a7223e213f2004a7224021412031214220332143203742017c2204422088a7224421452004a722462147203121482033214941f4ca81d906214a41b2da88cb07214b41eec8819903214c41e5f0c18b06214d41f4ca81d906214e41b2da88cb07214f41eec8819903215041e5f0c18b06215141f4ca81d906215241e5f0c18b06215341eec8819903215441b2da88cb0721550340200c20226a220cad422086200b20246a220bad842039ad422086203bad84852204a74110772239201b6a221bad2004422088a7411077223b201c6a221cad422086842022ad4220862024ad84852204a7410c772222200b6a2224ad2004422088a7410c77220b200c6a220cad422086842039ad203bad42208684852204a7410877223b201b6a221bad2004422088a74108772239201c6a221cad422086842022ad200bad42208684852204a74107772222200d20066a220bad200e20036a220dad422086842034ad2032ad42208684852207a7411077220e201d6a221dad2007422088a74110772232201e6a221ead422086842006ad2003ad42208684852207422088a7410c772203200d6a22066a2234ad4220862007a7410c77220d200b6a220bad2006ad42208684200ead2032ad42208684852207a74108772206201d6a221dad2007422088a74108772232201e6a221ead42208684200dad2003ad42208684852207422088a74107772203200b6a220bad842039ad2006ad42208684852256a74110772206201b6a221bad2056422088a74110772239201c6a221cad422086842022ad4220862003ad84852256a7410c772203200b6a220dad2056422088a7410c77222220346a220ead422086842006ad2039ad42208684852256a74108772239201b6a221bad2056422088a74108772234201c6a221cad422086842003ad2022ad42208684852256a741077721032004422088a7410777220620246a2222ad2007a74107772224200c6a220cad42208684203bad4220862032ad84852204a74110772232201d6a221dad2004422088a7411077223b201e6a221ead422086842006ad2024ad42208684852204a7410c77220620226a220bad2004422088a7410c772222200c6a220cad422086842032ad203bad42208684852204a74108772232201d6a221dad2004422088a7410877223b201e6a221ead422086842006ad2022ad42208684852204a74107772122204c20276a2206ad422086204d20286a2224ad84203fad4220862041ad84852207a7411077223f20176a2217ad2007422088a7411077224120186a2218ad422086842027ad4220862028ad84852207a7410c77222720246a2224ad2007422088a7410c77222820066a2206ad42208684203fad2041ad42208684852207a7410877224120176a2217ad2007422088a7410877223f20186a2218ad422086842027ad2028ad42208684852207a74107772227204b20266a2228ad204a20256a224aad42208684203dad203cad42208684852257a7411077223c20196a2219ad2057422088a7411077223d201a6a221aad422086842026ad2025ad42208684852257422088a7410c772225204a6a22266a224aad4220862057a7410c77224b20286a2228ad2026ad42208684203cad203dad42208684852257a7410877222620196a2219ad2057422088a7410877223c201a6a221aad42208684204bad2025ad42208684852257422088a7410777222520286a2228ad84203fad2026ad42208684852258a7411077222620176a2217ad2058422088a7411077223d20186a2218ad422086842027ad4220862025ad84852258a7410c77222520286a224bad2058422088a7410c772227204a6a224aad422086842026ad203dad42208684852258a7410877223f20176a2217ad2058422088a7410877223d20186a2218ad422086842025ad2027ad42208684852258a741077721252007422088a7410777222620246a2224ad2057a7410777222720066a2206ad422086842041ad422086203cad84852207a7411077222820196a2219ad2007422088a7411077223c201a6a221aad422086842026ad2027ad42208684852207a7410c77222620246a224dad2007422088a7410c77222420066a224cad422086842028ad203cad42208684852207a7410877223c20196a2219ad2007422088a74108772241201a6a221aad422086842026ad2024ad42208684852207a741077721272050202b6a2206ad4220862051202c6a2224ad842045ad4220862047ad84852257a7411077222620106a2228ad2057422088a7411077221020126a2212ad42208684202bad422086202cad84852257a7410c77222b20246a2224ad2057422088a7410c77222c20066a2206ad422086842026ad2010ad42208684852257a7410877222620286a2228ad2057422088a7410877221020126a2212ad42208684202bad202cad42208684852257a7410777222b204f202a6a222cad204e20296a2245ad422086842043ad2042ad42208684852259a7411077224220146a2214ad2059422088a7411077224320166a2216ad42208684202aad2029ad42208684852259422088a7410c77222920456a222a6a2245ad4220862059a7410c772247202c6a222cad202aad422086842042ad2043ad42208684852259a7410877222a20146a2214ad2059422088a7410877224220166a2216ad422086842047ad2029ad42208684852259422088a74107772229202c6a222cad842010ad202aad4220868485225aa7411077222a20286a2228ad205a422088a7411077221020126a2212ad42208684202bad4220862029ad8485225aa7410c772229202c6a224fad205a422088a7410c77222b20456a224ead42208684202aad2010ad4220868485225aa7410877224520286a2210ad205a422088a7410877224320126a2212ad422086842029ad202bad4220868485225aa741077721292057422088a7410777222820246a2224ad2059a7410777222a20066a2206ad422086842026ad4220862042ad84852257a7411077222620146a222bad2057422088a7411077222c20166a2216ad422086842028ad202aad42208684852257a7410c77222820246a2251ad2057422088a7410c77222420066a2250ad422086842026ad202cad42208684852257a74108772242202b6a2214ad2057422088a7410877224720166a2216ad422086842028ad2024ad42208684852257a7410777212b205320306a2206ad2054202f6a2224ad422086842035ad4220862036ad84852259a7411077222620086a2228ad2059422088a7411077222a200a6a222cad42208684202fad4220862030ad84852259a7410c77222f20066a2206ad2059422088a7410c77223020246a2224ad422086842026ad202aad42208684852259a7410877222620286a2228ad2059422088a7410877222a202c6a222cad42208684202fad2030ad42208684852259a7410777222f2052202d6a2230ad4220862055202e6a2208ad842049ad2048ad4220868485225ba7411077220a20056a2205ad205b422088a7411077223520096a2209ad42208684202ead202dad4220868485225b422088a7410c77222d20306a222e6a2230ad422086205ba7410c77223620086a2208ad202ead42208684200aad2035ad4220868485225ba7410877222e20056a2205ad205b422088a7410877224820096a2209ad422086842036ad202dad4220868485225b422088a7410777222d20086a2208ad84202aad202ead4220868485225ca7411077222a20286a2228ad205c422088a7411077222e202c6a222cad42208684202fad422086202dad8485225ca7410c77222d20086a2255ad205c422088a7410c77222f20306a2252ad42208684202aad202ead4220868485225ca7410877223520286a2208ad205c422088a74108772249202c6a220aad42208684202dad202fad4220868485225ca7410777212d2059422088a7410777222820066a2206ad205ba7410777222a20246a2224ad422086842026ad4220862048ad84852259a7411077222620056a222cad2059422088a7411077222e20096a222fad422086842028ad202aad42208684852259a7410c77222820066a2253ad2059422088a7410c77220620246a2254ad422086842026ad202ead42208684852259a74108772248202c6a2205ad2059422088a74108772236202f6a2209ad422086842028ad2006ad42208684852259a7410777212f2056422088a741077721242004422088a741077721062058422088a741077721282007422088a74107772126205a422088a7410777212c2057422088a7410777212a205c422088a741077721302059422088a7410777212e2002417f6a22020d000b41002102200041003602800220002802a802215d2000203742047c22043e02a8022000203220316a3602fc012000203420336a3602f8012000203920386a3602f4012000203b203a6a3602f0012000201e20156a3602ec012000201d20136a3602e8012000201c20116a3602e4012000201b200f6a3602e00120002003201f6a3602dc012000200620206a3602d8012000202220216a3602d4012000202420236a3602d0012000200e41f4ca81d9066a3602cc012000200d41b2da88cb076a3602c8012000200c41eec88199036a3602c4012000200b41e5f0c18b066a3602c0012000203c20316a3602bc012000203d20336a3602b8012000203f203e6a3602b4012000204120406a3602b0012000201a20156a3602ac012000201920136a3602a8012000201820116a3602a40120002017200f6a3602a00120002025201f6a36029c012000202620206a360298012000202720216a360294012000202820236a360290012000204a41f4ca81d9066a36028c012000204b41b2da88cb076a360288012000204c41eec88199036a360284012000204d41e5f0c18b066a360280012000204220316a36027c2000204320336a3602782000204520446a3602742000204720466a3602702000201620156a36026c2000201420136a3602682000201220116a36026420002010200f6a36026020002029201f6a36025c2000202a20206a3602582000202b20216a3602542000202c20236a3602502000204e41f4ca81d9066a36024c2000204f41b2da88cb076a3602482000205041eec88199036a3602442000205141e5f0c18b066a3602402000200920156a36022c2000200520136a3602282000200a20116a36022420002008200f6a3602202000202d201f6a36021c2000202e20206a3602182000202f20216a3602142000203020236a3602102000205241f4ca81d9066a36020c2000205541b2da88cb076a3602082000205441eec88199036a3602042000205341e5f0c18b066a36020020002802ac022103200020044220883e02ac02200020002802b40220486a36023c200020002802b00220496a3602382000200320356a3602342000205d20366a3602300b200020024102746a28020021032000200241016a360280020240200141016a220620014f0d004180dcc400413941bcdcc4001039000b20032006700bcc0703027f037e077f230041c0006b2204240002402002200384500d0041c6b5c400ad4280808080f00084100122052900002106200441086a200541086a290000370300200420063703002005102f41f6dbc400ad4280808080f00084100122052900002106200441106a41086a200541086a290000370300200420063703102005102f0240024002400240024002404120102d2205450d0020052000290000370000200541186a200041186a290000370000200541106a200041106a290000370000200541086a200041086a2900003700002005ad4280808080800484100322002900002106200041086a2900002107200041106a2900002108200441206a41186a2209200041186a290000370300200441206a41106a220a2008370300200441206a41086a2007370300200420063703202000102f2005102f41c000102d220b450d00200b2004290300370000200b2004290310370010200b2004290320370020200b41086a200441086a290300370000200b41186a200441106a41086a290300370000200b41286a200441206a41086a290300370000200b41306a200a290300370000200b41386a2009290300370000200441206a200b10b704024002400240024002402004280220220c0d004100210d20044100360210410021054108210c4100210e0c010b20042004280224220e36021020042902242206a7210f410021050240024002402006422088a7220d41014b0d00200d0e020201020b200d2100034020052000410176220920056a220a200c200a41186c6a28020020014b1b2105200020096b220041014b0d000b0b200c200541186c6a28020022002001460d03200520002001496a2205200d4b0d060b200d200f470d01200e200d470d010b200e41016a2200200e490d05200e41017422092000200920004b1bad42187e2206422088a70d052006a722004100480d0502400240200e0d002000102d210c0c010b200c200e41186c20001031210c0b200c450d032004200041186e3602100b200c200541186c6a220041186a2000200d20056b41186c10e9061a200041106a20033703002000200237030820002001360200200c450d06200d41016a210d2004280210210f0c010b2005200d4f0d04200c200541186c6a22052005290308220620027c2202370308200541106a2205200529030020037c2002200654ad7c3703000b200441c0003602242004200b360220200c200d200441206a10b804200f450d05200c102f0c050b1036000b419ae3c300411e41f8b4ca001039000b1038000b419cc3ca002005200d103b000b200bad428080808080088410050b200b102f0b200441c0006a24000be90202047f017e230041206b2203240002400240200241e8006c4104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020022003106902402002450d00200241e8006c21064100210403402003200120046a220241c8006a41201082010240024020022d00004101460d00200341003a00102003200341106a4101108201200241086a29030021072003200241106a29030037031820032007370310200341106a21050c010b200341013a00102003200341106a41011082012003200241016a4120108201200241286a29030021072003200241306a29030037031820032007370310200341106a21050b200320054110108201200241386a29030021072003200241c0006a290300370318200320073703102003200341106a41101082012006200441e8006a2204470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000b9c0703027f017e057f230041d0006b2203240041c6b5c400ad4280808080f00084100122042900002105200341086a200441086a290000370300200320053703002004102f41d7b5c400ad4280808080d00084100122042900002105200341106a41086a200441086a290000370300200320053703102004102f024002404120102d2204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad4280808080800484100622012900003703302001102f200341c4006a200441206a360200200341003a0048200320043602402003200341306a41086a220636023c2003200341306a360238200341206a200341386a106c2004102f02400240024002402003280228220741206a2208417f4c0d0020032802202109024002402008450d002008102d2204450d062008410f4d0d012008210a0c050b4110210a4110102d21040c030b200841017422014110200141104b1b220a41004e0d010c050b103d000b20042008200a103121040b2004450d010b20042003290300370000200441086a200341086a29030037000002400240200a4170714110460d00200a21010c010b200a41017422014120200141204b1b22014100480d022004200a200110312204450d010b20042003290310370010200441186a200341106a41086a29030037000002400240200141606a2007490d002001210a0c010b2007415f4b0d022001410174220a2008200a20084b1b220a4100480d0220042001200a10312204450d010b200441206a2009200710e8061a02402003280224450d002009102f0b4120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001ad4280808080800484100622022900003703302002102f200341c4006a200141206a360200200341003a0048200320013602402003200636023c2003200341306a360238200341106a200341386a106c2001102f2003280210210702400240200a20086b20032802182201490d00200120086a2102200a21090c010b200820016a22022008490d02200a41017422092002200920024b1b22094100480d022004200a200910312204450d010b200420086a2007200110e8061a02402003280214450d002007102f0b200020023602082000200936020420002004360200200341d0006a24000f0b1036000b1038000b8b0503027f017e047f230041d0006b2202240041c6b5c400ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41ecdac400ad4280808080d00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100622012900003703302001102f200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a106c2003102f02400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000b9a0203017f017e017f230041d0006b220224002002200136020420022000360200200241086a2001ad4220862000ad8422031002107302400240200228020822010d00410321000c010b200228020c210402400240200241106a280200450d0020012d000022004103490d010b20024100360220200242013703182002410b36022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241b885c7003602382002200241286a360248200241346a41d8dbc100200241386a103c1a200235022042208620023502188410080240200228021c450d002002280218102f0b02402004450d002001102f0b410321000c010b02402004450d002001102f0b200310050b200241d0006a240020000b8a1604057f017e057f027e23004180026b22012400200141d0006a41186a22024200370300200141d0006a41106a22034200370300200141d0006a41086a220442003703002001420037035041c6b5c400ad4280808080f00084100122052900002106200141f0006a41086a2207200541086a290000370300200120063703702005102f2004200729030037030020012001290370370350419ab6c400ad4280808080c0008410012205290000210620014180016a41086a2207200541086a29000037030020012006370380012005102f20032001290380012206370300200141306a41086a2004290300370300200141306a41106a2006370300200141306a41186a20072903003703002001200129035037033020014180016a200141306a412010ad0220012d0080012107200220014180016a41196a290000370300200320014180016a41116a290000370300200420014180016a41096a2900003703002001200129008101370350410121050240024020074101460d0041002105200141003a00080c010b200141086a41096a2004290300370000200141086a41116a2003290300370000200141086a41196a2002290300370000200141013a0008200120012903503700090b20014199016a200041186a29000037000020014191016a200041106a29000037000020014189016a200041086a2900003700002001200029000037008101200141013a00800102400240024002402005450d00200141086a41017220014180016a410172412010ea06450d010b200141d0006a41186a22054200370300200141d0006a41106a22024200370300200141d0006a41086a220442003703002001420037035041c6b5c400ad4280808080f00084100122072900002106200141f0006a41086a2208200741086a290000370300200120063703702007102f20042008290300370300200120012903703703504193b6c400ad4280808080f0008410012207290000210620014180016a41086a2208200741086a29000037030020012006370380012007102f2003200129038001370000200341086a2008290300370000200141306a41086a2004290300370300200141306a41106a2002290300370300200141306a41186a20052903003703002001200129035037033020014180016a200141306a412010ad0220012d0080012108200520014180016a41196a290000370300200220014180016a41116a290000370300200420014180016a41096a2900003703002001200129008101370350410121070240024020084101460d0041002107200141003a00080c010b200141086a41096a2004290300370000200141086a41116a2002290300370000200141086a41196a2005290300370000200141013a0008200120012903503700090b20014199016a200041186a29000037000020014191016a200041106a29000037000020014189016a200041086a2900003700002001200029000037008101200141013a00800102402007450d00200141086a41017220014180016a410172412010ea06450d010b20014180016a41186a420037030020014180016a41106a2202420037030020014180016a41086a22044200370300200142003703800141c6b5c400ad4280808080f000841001220529000021062004200541086a29000037030020012006370380012005102f41ebdec700ad4280808080f00084100122052900002106200141d0006a41086a2207200541086a290000370300200120063703502005102f200220012903502206370300200141086a41086a2004290300370300200141086a41106a2006370300200141086a41186a2007290300370300200120012903800137030820014180016a200141086a412010aa022001280280012204410120041b21080240024002400240200129028401420020041b2206422088a7220941014b0d004100210420090e020201020b2009210541002104034020042005410176220220046a2207200820074105746a2000412010ea0641004a1b2104200520026b220541014b0d000b0b200820044105746a2000412010ea06450d010b2006a7450d012008102f0c010b200420094f0d01200820044105746a2205200541206a2004417f7320096a41057410e9061a200141d0006a41186a220a4200370300200141d0006a41106a220b4200370300200141d0006a41086a220442003703002001420037035041c6b5c400ad4280808080f00084220c10012205290000210d200141f0006a41086a2202200541086a2900003703002001200d3703702005102f200420022903003703002001200129037037035041ebdec700ad4280808080f0008410012205290000210d20014180016a41086a2207200541086a2900003703002001200d370380012005102f2003200129038001370000200341086a2007290300370000200141306a41086a2004290300370300200141306a41106a200b290300370300200141306a41186a200a2903003703002001200129035037033020014120360284012001200141306a3602800120082009417f6a20014180016a10aa0102402006a7450d002008102f0b200c1001220429000021062002200441086a290000370300200120063703702004102f41dfdbc400ad42808080808002841001220429000021062007200441086a29000037030020012006370380012004102f4120102d2204450d0220042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700002004ad4280808080800484100322052900002106200541086a290000210c200541106a290000210d200141d0006a41186a2207200541186a290000370300200141d0006a41106a2208200d370300200141d0006a41086a2202200c370300200120063703502005102f2004102f41c000102d2204450d0220042001290370370000200420012903800137001020042001290350370020200441086a200141f0006a41086a290300370000200441186a20014180016a41086a290300370000200441286a2002290300370000200441306a2008290300370000200441386a2007290300370000200141013a0080012004ad428080808080088420014180016aad4280808080108410042004102f41c6b5c400ad4280808080f000841001220429000021062002200441086a290000370300200120063703502004102f41efdbc400ad4280808080f00084100122042900002106200141086a41086a200441086a290000370300200120063703082004102f4120102d2204450d0220042000290000370000200441186a200041186a2207290000370000200441106a200041106a2208290000370000200441086a200041086a22032900003700002004ad4280808080800484100322052900002106200541086a290000210c200541106a290000210d20014180016a41186a2209200541186a29000037030020014180016a41106a220a200d37030020014180016a41086a2202200c37030020012006370380012005102f2004102f41c000102d2204450d0220042001290350370000200420012903083700102004200129038001370020200441086a200141d0006a41086a290300370000200441186a200141086a41086a290300370000200441286a2002290300370000200441306a200a290300370000200441386a20092903003700002004ad428080808080088410052004102f200241093a000020014180016a41096a200029000037000020014191016a200329000037000020014199016a2008290000370000200141a1016a2007290000370000200141123a00800141c8e1ca00410020014180016a108c010b20014180026a24000f0b41b8e3c300411d41f8b4ca001039000b1036000bcab4010d017f017e037f017e0a7f027e027f017e027f017e147f027e0d7f230041b0056b2200240042002101200041b0036a41186a4200370300200041b0036a41106a22024200370300200041b0036a41086a22034200370300200042003703b00341bd98ca00ad42808080808002841001220429000021052003200441086a290000370300200020053703b0032004102f418c91c700ad4280808080a00184100122042900002105200041d0026a41086a2206200441086a290000370300200020053703d0022004102f200220002903d0022205370300200041f8026a41086a2003290300370300200041f8026a41106a2005370300200041f8026a41186a2006290300370300200020002903b0033703f802200041b0036a200041f8026a412010aa020240024020002802b00322070d0041012107410021080c010b20002902b4032201422088a721080b0240024002400240200841ffffff3f712008470d0020084105742203417f4c0d00024002400240024020030d00200720084105746a2104410121092008210a0c010b2003102d2209450d04200720084105746a21042003410576220a20084f0d00200a41017422032008200320084b1b220341ffffff3f712003470d06200341057422034100480d0602400240200a0d002003102d21090c010b2009200a4105742003103121090b2009450d042003410576210a0c010b20080d004100210b0c010b200420076b210c410021030340200920036a2204200720036a2206290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a290000370000200c200341206a2203470d000b200720084105746a20076b41606a41057641016a210b0b200041b0036a41186a22064200370300200041b0036a41106a220c4200370300200041b0036a41086a22034200370300200042003703b00341bd98ca00ad42808080808002841001220429000021052003200441086a290000370300200020053703b0032004102f41ebdec700ad4280808080f00084100122042900002105200041d0026a41086a2208200441086a290000370300200020053703d0022004102f200220002903d002370000200241086a2008290300370000200041f8026a41086a2003290300370300200041f8026a41106a200c290300370300200041f8026a41186a2006290300370300200020002903b0033703f802200041b0036a200041f8026a10e404410021060240024020002902b403420020002802b00322031b2205422088a7220441306c220c0d00410121084100210d0c010b200c41306d220c41ffffff3f71200c470d04200c410574220c4100480d04200c102d2208450d02200c410576210d0b2005a7210e2003410820031b210f02402004450d00200441306c210c4100210620082103200f21040340200441086a2900002105200441106a290000211020042900002111200341186a200441186a290000370000200341106a2010370000200341086a200537000020032011370000200641016a2106200341206a2103200441306a2104200c41506a220c0d000b0b0240200e450d00200f102f0b02402001a722032001422088a7220f6b20064f0d00200f20066a2204200f490d042003410174220c2004200c20044b1b220441ffffff3f712004470d04200441057422044100480d040240024020030d002004102d21070c010b200720034105742004103121070b2007450d022001422088a7210f2004410576ad21010b2007200f4105746a2008200641057410e8061a0240200d450d002008102f0b200041b0036a41186a220c4200370300200041b0036a41106a22084200370300200041b0036a41086a22034200370300200042003703b00341bd98ca00ad42808080808002841001220429000021052003200441086a290000370300200020053703b0032004102f419691c700ad4280808080900184100122042900002105200041d0026a41086a220d200441086a290000370300200020053703d0022004102f200220002903d002370000200241086a200d290300370000200041f8026a41086a2003290300370300200041f8026a41106a2008290300370300200041f8026a41186a200c290300370300200020002903b0033703f802200041b0036a200041f8026a10e404410021080240024020002902b403420020002802b00322031b2205422088a7220441306c220c0d00410121024100210e0c010b200c41306d220c41ffffff3f71200c470d04200c410574220c4100480d04200c102d2202450d02200c410576210e0b2005a721122003410820031b210d02402004450d00200441306c210c4100210820022103200d21040340200441086a2900002105200441106a290000211020042900002111200341186a200441186a290000370000200341106a2010370000200341086a200537000020032011370000200841016a2108200341206a2103200441306a2104200c41506a220c0d000b0b200f20066a211302402012450d00200d102f0b024002402001a7220320136b2008490d00200142ffffffff0f8321140c010b201320086a22042013490d04200341017422062004200620044b1b220441ffffff3f712004470d04200441057422044100480d040240024020030d002004102d21070c010b200720034105742004103121070b2007450d022004410576ad21140b200720134105746a2002200841057410e8061a0240200e450d002002102f0b41bd98ca00ad4280808080800284100122032900002105200041f8026a41086a2206200341086a290000370300200020053703f8022003102f41a185c700ad4280808080d00184100122032900002105200041d0026a41086a2204200341086a290000370300200020053703d0022003102f200041b0036a41086a22032006290300370300200041b0036a41186a22062004290300370300200020002903f8023703b003200020002903d0023703c003200041f8026a200041b0036a108801200041b0036a20002802f802220c20002802800310ad02024020002802fc02450d00200c102f0b200041a8026a41086a20032903002205370300200041a8026a41106a200041b0036a41106a220c2903002210370300200041a8026a41186a20062903002211370300200041a8026a41206a200041b0036a41206a2d000022033a0000200020002903b00322013703a802200041d0026a41206a20033a0000200041d0026a41186a2011370300200041d0026a41106a201037030020042005370300200020013703d002200041b0036a200041d0026a1093040240024020002802d0032206450d00200041f8026a41186a2203200041b0036a41186a290300370300200041f8026a41106a200c290300370300200041f8026a41086a2204200041b0036a41086a290300370300200020002903b0033703f80220002902d4032105412c102d2215450d03201520002903f8023702002015200537022420152006360220201541186a2003290300370200201541106a200041f8026a41106a2206290300370200201541086a2004290300370200200041f8026a41206a200041d0026a41206a2d00003a00002003200041d0026a41186a2903003703002006200041d0026a41106a2903003703002004200041d0026a41086a290300370300200020002903d0023703f802200041b0036a200041f8026a109304024020002802d00322020d004101210c410121160c020b41022106412c21044101210c410121160340200041b0046a41186a200041b0036a41186a2903002205370300200041b0046a41106a200041b0036a41106a2903002210370300200041b0046a41086a200041b0036a41086a2903002211370300200020002903b00322013703b00420002902d4032117200041d0046a41186a220f2005370300200041d0046a41106a220d2010370300200041d0046a41086a220e2011370300200020013703d0040240200c2016470d00200c41016a2203200c490d0720062003200620034b1bad422c7e2205422088a70d072005a722034100480d0702400240200c0d002003102d21150c010b201520042003103121150b2015450d052003412c6e21160b201520046a220320002903d004370200200341186a200f290300370200200341106a200d290300370200200341086a200e290300370200200341246a2017370200200341206a2002360200200641026a21062004412c6a2104200c41016a210c200041b0036a200041f8026a10930420002802d00322020d000c020b0b410421154100210c410021160b200042003702f40420004190bdc6003602f004200c201320086a22046a2218ad42e0007e2205422088a70d002005a72203417f4c0d00410821134108211902402003450d002003102d2219450d02200341e0006e21180b4100210e4100211a024020044105742208450d002008410575ad42d8007e2205422088a70d042005a722034100480d042003102d2213450d02200341d8006e211a0b02402004450d00200841606a211b200041e0036a2104200041d8036a211c2013210241002106200721030340200041a8026a41186a220f200341186a220d290000370300200041a8026a41106a220e200341106a2212290000370300200041a8026a41086a221d200341086a221e290000370300200020032900003703a802200041f8026a41186a200d290000370300200041f8026a41106a2012290000370300200041f8026a41086a201e290000370300200020032900003703f802200041f0046a200041f8026a2006109a02200041b0036a41086a4200370300200041b0036a41106a4200370300200041b0036a41186a4200370300200041b0036a41206a4200370300201c4200370300200441186a200f290300370000200441106a200e290300370000200441086a201d290300370000200420002903a802370000200042003703b0032002200041b0036a41d00010e806220241d0006a41003a0000200241d8006a2102200341206a2103200641016a2106200841606a22080d000b201b41057641016a210e0b02402014500d002007102f0b02402018200c412c6c2203412c6d22044f0d00201841017422062004200620044b1bad42e0007e2205422088a70d042005a722044100480d040240024020180d002004102d21190c010b2019201841e0006c2004103121190b2019450d02200441e0006e21180b201520036a211f024002400240200c0d0041002120201521210c010b200041d0046a41106a211d20152103201921224100212002400340200041b0046a41186a2206200341186a290200370300200041b0046a41106a220c200341106a290200370300200041b0046a41086a2208200341086a290200370300200020032902003703b0042003412c6a212120032802202223450d02200341286a2802002104200341246a2802002124200041a8026a41186a22252006290300370300200041a8026a41106a2226200c290300370300200041a8026a41086a22272008290300370300200020002903b0043703a80220004198026a200041a8026a1093052004ad42c8007e2205422088a70d042005a72203417f4c0d0420004198026a41086a290300211720002903980221140240024020030d0041082107200421120c010b2003102d2207450d06200341c8006e21120b02400240024020040d004100211e0c010b202320044105746a21284100211e2023210d0340200d41086a2900002105200d41106a2900002110200d2900002111200041b0036a41186a221c200d41186a290000370300200041b0036a41106a221b2010370300200041b0036a41086a22292005370300200020113703b003200d41206a210d200041f0046a210320002802f404210202400240034002400240200328020022082f0106220f0d00410021060c010b200f4105742103200841086a2104417f21060340024020030d00200f21060c020b200641016a2106200041b0036a2004412010ea06220c450d03200341606a2103200441206a2104200c417f4a0d000b0b2002450d022002417f6a2102200820064102746a4194036a21030c000b0b200e200820064102746a41e8026a220328020022044d0d032013200441d8006c6a22042903202105200441286a2903002110200041d0046a41186a220c4200370300201d4200370300200041d0046a41086a22044200370300200042003703d00441e7a2ca00ad42808080808001841001220629000021112004200641086a290000370300200020113703d0042006102f41ecb5c600ad4280808080d00184100122062900002111200041a0056a41086a2208200641086a290000370300200020113703a0052006102f201d20002903a005370000201d41086a2008290300370000200041f8026a41086a2004290300370300200041f8026a41106a201d290300370300200041f8026a41186a200c290300370300200020002903d0043703f80220004180026a200041f8026a4120109c01200041f0016a20002903880220004180026a41106a290300427f420010ee06200e200328020022044d0d05200041e0016a2014201720002903f001420020002802800222061b221142012011420156200041f0016a41086a290300420020061b22114200522011501b22061b2011420020061b10ee062013200441d8006c6a220441286a427f2010200520002903e0017c22112005542206ad7c220120062001201054201120055a1b22061b3703002004427f201120061b370320200041d0026a41186a2204201c290300370300200041d0026a41106a2206201b290300370300200041d0026a41086a220c2029290300370300200020002903b0033703d0022003280200210802400240201e2012460d00201e21030c010b201241016a22032012490d0c201241017422022003200220034b1bad42c8007e2205422088a70d0c2005a722024100480d0c0240024020120d002002102d21070c010b2007201241c8006c2002103121070b2007450d0a20122103200241c8006e21120b2007200341c8006c6a2203420037030020032008360220200341186a4200370300200341106a4200370300200341086a4200370300200320002903d0023702242003412c6a200c290300370200200341346a20062903003702002003413c6a2004290300370200201e41016a211e0b200d2028470d000b0b02402024450d002023102f0b20004180056a41186a2206202529030037030020004180056a41106a220c202629030037030020004180056a41086a22082027290300370300200020002903a80237038005200041d0046a41186a22024200370300201d4200370300200041d0046a41086a22034200370300200042003703d00441e7a2ca00ad42808080808001841001220429000021052003200441086a290000370300200020053703d0042004102f41ecb5c600ad4280808080d00184100122042900002105200041a0056a41086a220f200441086a290000370300200020053703a0052004102f201d20002903a005370000201d41086a200f290300370000200041f8026a41086a2003290300370300200041f8026a41106a201d290300370300200041f8026a41186a2002290300370300200020002903d0043703f802200041c8016a200041f8026a4120109c01200041b8016a20002903d001200041c8016a41106a290300427f420010ee06200041a8016a2014201720002903b801420020002802c80122031b220542012005420156200041b8016a41086a290300420020031b22054200522005501b22031b2005420020031b10ee0620224200370308202220002903a80137030020224200370310202241186a4200370300202241286a4200370300202242013703202022201e3602382022201236023420222007360230202220002903800537023c202241c4006a2008290300370200202241cc006a200c290300370200202241d4006a2006290300370200202041016a2120202241e0006a2122202121032021201f470d010c040b0b41c4c2ca002004200e103b000b419cc3ca002004200e103b000b201f2021460d0003402021412c6a21030240202141246a280200450d00202141206a280200102f0b20032121201f2003470d000b0b02402016450d002015102f0b41c007102d221c450d0141f006102d222a450d01410021244114212502400240200e4114200e4114491b22260d004114212b410021150c010b201341a87f6a2123200e41d8006c21212019202041e0006c6a211b41142128200041b0036a41186a211f200041b0036a41106a2107200041b0036a41086a2116410021154100212203400240200e450d00202121042013210303400240200341d0006a2d00000d0002400240200341206a2903002210200341286a29030022118450450d0042002105427f2110427f21110c010b427f210520004198016a427f427f2010201110ee0620004198016a41086a290300211120002903980121100b2003201037030020032011370308200341106a2005370300200341186a20053703000b200341d8006a2103200441a87f6a22040d000b0b2019210c02402020450d00024003400240200c2802382203450d00200341c8006c2106200c28023041206a21030340200e200328020022044d0d0302402013200441d8006c6a22042d00500d0020042903202205200441286a290300221084500d00200041b0036a200c290310200c41186a290300200c290300200c41086a29030020052010109405200420042903002205427f2005427f20002903b80320002802b00341014622081b22117c221020102005542202200441086a220f2903002205427f200729030020081b22017c2002ad7c221020055420102005511b22081b20112001845022021b370300200f2005427f201020081b20021b3703000b200341c8006a2103200641b87f6a22060d000b0b200c41e0006a220c201b460d020c000b0b419cc3ca002004200e103b000b202241016a21222021210320232104201321060340024020030d002028212b0c030b200341a87f6a2103200441d8006a2104200641d0006a210c200641d8006a22082106200c2d00000d000b02402003450d00200441086a2903002105200441186a2903002110200441106a2903002111200429030021014100210603400240200820066a220c41d0006a2d00000d00200c41086a290300221720052001200520112010200c29030022142017200c41106a290300222c200c41186a290300222d10950541ff017141014622021b21052014200120021b2101202d201020021b2110202c201120021b2111200c200420021b21040b2003200641d8006a2206470d000b20040d002028212b0c020b200441013a005002402020450d002004410c6a211d200441306a211e201921060340200641e0006a212902402006280238220c450d0020062802302103200c41c8006c210c034002400240201d2003460d00200341246a201e412010ea060d010b200641186a22082903002101200441086a22022903002105200629031021112004290300211020042903102117200341186a200441186a220f290300370300200341106a2017370300200320054200200520017d2010201154ad7d2217201020117d2214201056201720055620172005511b220d1b20112001845022121b3703082003201042002014200d1b20121b37030020022903002105200f29030021102004290300211120062004290310370320200641286a201037030020062011370310200820053703000b200341c8006a2103200c41b87f6a220c0d000b0b202921062029201b470d000b0b201f200441c8006a2900003703002007200441c0006a2900003703002016200441386a290000370300200020042900303703b003200441286a2903002105200429032021100240024020152028460d002028212b0c010b202841016a22032028490d06202841017422042003200420034b1bad42307e2211422088a70d062011a722034100480d060240024020280d002003102d211c0c010b201c202841306c20031031211c0b201c450d0420282115200341306e222b21280b2016290300211120072903002101201f290300211720002903b0032114201c201541306c6a2203201037032020032014370300200341286a2005370300200341186a2017370300200341106a2001370300200341086a2011370300201541016a211520222026490d000b0b02402020450d002019202041e0006c6a2121201541306c211b41142125200041f8026a41186a2129200041f8026a41106a2128200041f8026a41086a2122410021242019211d03402029201d41d4006a2900003703002028201d41cc006a2900003703002022201d41c4006a2900003703002000201d29003c3703f8020240201d2802382203450d00201d280230220d200341c8006c6a211e201d41106a21074100210e410421124100210f0340200d220241246a2106200241c8006a210d4100210c201b2104201c2103024003402004450d01024020062003460d0020032006412010ea062108200c41016a210c200441506a2104200341306a210320080d010b0b418094ebdc0321030240200720021096050d00410021032002290310201d29032085200241186a290300201d41286a29030085844200520d00200041b0036a428094ebdc0342002002290300200241086a2903002007290300200741086a290300109405427f20002903b80320002802b00341014622031b2205a7417f2005428080808010544100427f200041b0036a41106a29030020031b501b1b21030b200020033602b0032000418094ebdc033602b403200041b0036a2003418094ebdc034b4102746a2802002104200041b0036a41186a22062002413c6a290000370300200041b0036a41106a220c200241346a290000370300200041b0036a41086a22082002412c6a290000370300200020022900243703b00302400240200f200e460d00200f21030c010b200e41016a2203200e490d09200e41017422022003200220034b1bad42247e2205422088a70d092005a722024100480d0902400240200e0d002002102d21120c010b2012200e41246c2002103121120b2012450d07200e2103200241246e210e0b2012200341246c6a220320002903b00337020020082903002105200c29030021102006290300211120032004360220200341186a2011370200200341106a2010370200200341086a2005370200200f41016a210f0b200d201e470d000b024002400240200f450d0002400240200f41246c22060d00410021030c010b201241206a2104410021030340417f200320042802006a220c200c2003491b2103200441246a21042006415c6a22060d000b0b02404100418094ebdc0320036b22032003418094ebdc034b1b2202200f6e2203418094ebdc032003418094ebdc03491b2208450d00201241206a2103410021040340200f2004460d032000417f2003280200220620086a220c200c2006491b22063602b0032000418094ebdc033602b4032003200041b0036a2006418094ebdc034b4102746a280200360200200341246a2103200f200441016a2204470d000b0b024020022008200f6c6b2208450d00410021030340200f2003200f7022044d0d042000417f2012200441246c6a2204280220220641016a220c200c2006491b22063602b0032000418094ebdc033602b4032004200041b0036a2006418094ebdc034b4102746a280200360220200341016a22032008490d000b0b200041b0036a41186a22042029290300370300200041b0036a41106a22062028290300370300200041b0036a41086a220c2022290300370300200020002903f8023703b003024020242025470d00202541016a22032025490d0a202541017422082003200820034b1bad422c7e2205422088a70d0a2005a722034100480d0a0240024020250d002003102d212a0c010b202a2025412c6c20031031212a0b202a450d08202521242003412c6e21250b202a2024412c6c6a220320002903b003370200200c290300210520062903002110200429030021112003200f3602282003200e36022420032012360220200341186a2011370200200341106a2010370200200341086a2005370200202441016a21240c030b200e450d022012102f0c020b41c4c2ca002004200f103b000b41c4c2ca002004200f103b000b201d41e0006a221d2021470d000b0b0240201a450d002013102f0b02402020450d00202041e0006c2104201941306a210303400240200341046a280200450d002003280200102f0b200341e0006a2103200441a07f6a22040d000b0b02402018450d002019102f0b20002802f00420002802f40420002802f80410a30202400240201c0d0041012112200041013a00b403200041093a00b00341c8e1ca004100200041b0036a108c01200041f8026a210c0c010b42002105200041b0036a41186a4200370300200041b0036a41106a222e42003703004108210c200041b0036a41086a22044200370300200042003703b00341bd98ca00ad4280808080800284100122062900002110200041d0026a41086a2203200641086a290000370300200020103703d0022006102f20042003290300370300200020002903d0023703b00341ebdec700ad4280808080f000841001220629000021102003200641086a290000370300200020103703d0022006102f202e20002903d0022210370300200041f8026a41086a2004290300370300200041f8026a41106a2010370300200041f8026a41186a2003290300370300200020002903b0033703f802200041b0036a200041f8026a10e404024020002802b0032203450d00200041f8026aad4280808080800484100520002902b40321052003210c0b41002127024002402005422088a7220341306c22040d004101212f410021300c010b200441306d220441ffffff3f712004470d05200441057422044100480d052004102d222f450d03200441057621300b2005a7210802402003450d00200341306c210641002127202f2103200c21040340200441086a2900002105200441106a290000211020042900002111200341186a200441186a290000370000200341106a2010370000200341086a200537000020032011370000202741016a2127200341206a2103200441306a2104200641506a22060d000b0b02402008450d00200c102f0b42002105200041b0036a41186a22084200370300200041b0036a41106a220242003703004108210c200041b0036a41086a22044200370300200042003703b00341bd98ca00ad4280808080800284100122062900002110200041d0026a41086a2203200641086a290000370300200020103703d0022006102f20042003290300370300200020002903d0023703b003419691c700ad42808080809001841001220629000021102003200641086a290000370300200020103703d0022006102f202e20002903d002370000202e41086a2003290300370000200041f8026a41086a2004290300370300200041f8026a41106a2002290300370300200041f8026a41186a2008290300370300200020002903b0033703f802200041b0036a200041f8026a10e404024020002802b0032203450d00200041f8026aad4280808080800484100520002902b40321052003210c0b41002119024002402005422088a7220341306c22040d0041012131410021320c010b200441306d220441ffffff3f712004470d05200441057422044100480d052004102d2231450d03200441057621320b2005a7210802402003450d00200341306c21064100211920312103200c21040340200441086a2900002105200441106a290000211020042900002111200341186a200441186a290000370000200341106a2010370000200341086a200537000020032011370000201941016a2119200341206a2103200441306a2104200641506a22060d000b0b02402008450d00200c102f0b024002400240201541306c2204450d00201c21030340200341286a2903002105200341206a2903002110200041d0046a41186a200341186a290200370300200041d0046a41106a200341106a290200370300200041d0046a41086a200341086a290200370300200020032902003703d00420102005844200520d02200341306a2103200441506a22040d000b0b410121294100211b0240202b450d00201c102f0b410021280c010b200041a8026a41086a2206200041d0046a41086a290300370300200041a8026a41106a220c200041d0046a41106a290300370300200041a8026a41186a2208200041d0046a41186a290300370300200020002903d004220537038005200020053703a8024120102d2229450d03202920002903a802370000202941186a2008290300370000202941106a200c290300370000202941086a20062903003700000240024020044130470d004101211b410121280c010b200341306a2106201c201541306c6a220841506a21024101211b4101212803402006210302400340200341286a2903002105200341206a2903002110200041d0046a41186a2204200341186a290200370300200041d0046a41106a2206200341106a290200370300200041d0046a41086a220c200341086a290200370300200020032902003703d00420102005844200520d012008200341306a2203470d000c030b0b200041f8026a41086a200c2903002205370300200041f8026a41106a20062903002210370300200041f8026a41186a20042903002211370300200020002903d00422013703f80220004180056a41186a220c201137030020004180056a41106a220f201037030020004180056a41086a220d2005370300200020013703800502402028201b470d00201b41016a2204201b490d08201b41017422062004200620044b1b220441ffffff3f712004470d08200441057422044100480d0802400240201b0d002004102d21290c010b2029201b4105742004103121290b2029450d06200441057621280b200341306a21062029201b4105746a2204200029038005370000200441186a200c290300370000200441106a200f290300370000200441086a200d290300370000201b41016a211b20022003470d000b0b202b450d00201c102f0b200042003702ac0220004190bdc6003602a8020240201b450d00201b4105742104202921030340200041f8026a41186a200341186a290000370300200041f8026a41106a200341106a290000370300200041f8026a41086a200341086a290000370300200020032900003703f802200042003703b803200042003703b003200041003602c803200042083703c003200041d0026a200041a8026a200041f8026a200041b0036a109902024020002802e0022206450d0020002802e402450d002006102f0b200341206a2103200441606a22040d000b0b02402024412c6c2203450d00202a20036a2107200041d0046a41106a211341e7a2ca00ad4280808080800184212c202a210e03400240200e28022841246c2203450d00200e280220221220036a211d034020004188016a200e10930520004188016a41086a29030021102000290388012111200041d0046a41186a2206420037030020134200370300200041d0046a41086a22034200370300200042003703d004202c1001220429000021052003200441086a290000370300200020053703d0042004102f41ecb5c600ad4280808080d00184100122042900002105200041a0056a41086a220c200441086a290000370300200020053703a0052004102f201320002903a005370000201341086a200c290300370000200041f8026a41086a2003290300370300200041f8026a41106a2013290300370300200041f8026a41186a2006290300370300200020002903d0043703f802200041f0006a200041f8026a4120109c01200041e0006a2000290378200041f0006a41106a290300427f420010ee06200041d0006a2011201020002903604200200028027022031b220542012005420156200041e0006a41086a290300420020031b22054200522005501b22031b2005420020031b10ee06200041c0006a20002903502205428094ebdc038022104200201222083502202211420010ed06200041c0006a41086a290300200029034022012011200520104280ec94a37c7e7c7e22052005428094ebdc038022054280ec94a37c7e7c4280cab5ee01562005a76aad7c2205200154ad7c2110200841246a2112200041a8026a210320002802ac02210f02400240034002400240200328020022022f0106220d0d00410021060c010b200d4105742103200241086a2104417f21060340024020030d00200d21060c020b200641016a210620082004412010ea06220c450d03200341606a2103200441206a2104200c417f4a0d000b0b200f450d02200f417f6a210f200220064102746a41c8056a21030c000b0b200041d0026a41186a2208200e41186a290000370300200041d0026a41106a220f200e41106a290000370300200041d0026a41086a220d200e41086a2900003703002000200e2900003703d002200220064105746a220441f8026a210c024020044180036a22062802002203200441fc026a280200470d00200341016a22022003490d0a2003410174221e2002201e20024b1bad42307e2211422088a70d0a2011a722024100480d0a0240024020030d002002102d21030c010b200c280200200341306c2002103121030b2003450d08200c2003360200200c41046a200241306e360200200628020021030b200d2903002111200f29030021012008290300211720002903d0022114200c280200200341306c6a2203200537032020032014370300200341286a2010370300200341186a2017370300200341106a2001370300200341086a20113703002006200628020041016a360200200441e8026a2203427f2003290300221120057c220520052011542204200341086a2203290300220520107c2004ad7c221020055420102005511b22041b3703002003427f201020041b3703000b2012201d470d000b0b200e412c6a220e2007470d000b0b41082133200041f0046a41086a200041a8026a41086a280200360200200020002903a8023703f00402400240201b0d0041002134410021260c010b201b4105742204410575ad42307e2205422088a70d052005a722034100480d052003102d2233450d03202920046a2107200341306e2134200041d0046a41106a21134100212641e7a2ca00ad428080808080018421012033210d2029210e0340200e41086a2900002105200e41106a2900002110200e2900002111200041b0036a41186a2212200e41186a290000370300200041b0036a41106a221d2010370300200041b0036a41086a221e2005370300200020113703b003200e41206a210e200041f0046a210320002802f40421020240034002400240200328020022082f0106220f0d00410021060c010b200f4105742103200841086a2104417f21060340024020030d00200f21060c020b200641016a2106200041b0036a2004412010ea06220c450d03200341606a2103200441206a2104200c417f4a0d000b0b02402002450d002002417f6a2102200820064102746a41c8056a21030c010b0b419bbbc60041da0041f8bbc6001055000b200041d0026a41186a220c2012290300370300200041d0026a41106a2202201d290300370300200041d0026a41086a220f201e290300370300200020002903b0033703d002200820064105746a220341f0026a2903002110200341e8026a2903002111200041d0046a41186a2206420037030020134200370300200041d0046a41086a22034200370300200042003703d00420011001220429000021052003200441086a290000370300200020053703d0042004102f41ecb5c600ad4280808080d00184100122042900002105200041a0056a41086a2208200441086a290000370300200020053703a0052004102f201320002903a005370000201341086a2008290300370000200041f8026a41086a2003290300370300200041f8026a41106a2013290300370300200041f8026a41186a2006290300370300200020002903d0043703f802200041286a200041f8026a4120109c01200041186a2000290330200041286a41106a290300427f420010ee06200041086a20002903184200200028022822031b220542012005420156200041186a41086a290300420020031b22054200522005501b22031b2005420020031b2011201010ed06200d41186a200c290300370300200d41106a2002290300370300200d41086a200f290300370300200d20002903d002370300200d41286a200041086a41086a290300370300200d2000290308370320202641016a2126200d41306a210d200e2007470d000b0b02402028450d002029102f0b410021230240024002402026410d2026410d491b22350d0041082112410021180c010b203541306c2203102d2212450d04024020030d00203521180c010b2033203541306c6a21064100212320122103203321040340200441086a2903002105200441106a2903002110200441186a290300211120042903002101200341286a200441286a290300370300200341206a200441206a290300370300200341186a2011370300200341106a2010370300200341086a200537030020032001370300200341306a2103202341016a21232006200441306a2204470d000b200041b0046a41186a201241186a290000370300200041b0046a41106a201241106a290000370300200041b0046a41086a201241086a290000370300200020122900003703b004024020234115490d0020234101762236ad42307e2205422088a70d042005a72203417f4c0d044108213702402003450d002003102d2237450d06200341306e21360b201241506a2138201241f07e6a21394104211e4100213a410021214100211320232122034020222102410021224101210802402002417f6a2206450d000240024002400240024002402012200641306c6a200241306c220f20126a41a07f6a412010ea064100480d002002417e6a210c2039200f6a2103410021224100210403400240200c2004470d00200221080c080b200441016a2104200341306a2003412010ea062106200341506a21032006417f4a0d000b200441016a21082004417f7320026a21060c010b2039200f6a210302400340024020064101470d00410021060c020b2006417f6a2106200341306a2003412010ea062104200341506a210320044100480d000b0b20022006490d01200220234b0d03200220066b2208410176220c450d002038200f6a21032012200641306c6a21040340200041b0036a41286a220f200441286a220d290300370300200041b0036a41206a220e200441206a221d290300370300200041b0036a41186a2207200441186a221b290300370300200041b0036a41106a2229200441106a2228290300370300200041b0036a41086a2222200441086a2215290300370300200020042903003703b003200341086a22202903002105200341106a221f2903002110200341186a22162903002111200341206a22182903002101200341286a221a290300211720042003290300370300200d2017370300201d2001370300201b20113703002028201037030020152005370300201a200f2903003703002018200e29030037030020162007290300370300201f202929030037030020202022290300370300200320002903b003370300200341506a2103200441306a2104200c417f6a220c0d000b0b024020060d00200621220c050b0240200841094d0d00200621220c050b200220234b0d01200220066b210c2012200641306c6a210f034020022006417f6a2222490d040240200220226b22084102490d002012200641306c6a22032012202241306c6a2206412010ea06417f4a0d002006290300210520062003290300370300200041b0036a41286a2207200641286a2204290300370300200041b0036a41206a221b200641206a220d290300370300200041b0036a41186a2229200641186a220e290300370300200041b0036a41106a2228200641106a221d290300370300200041b0036a41086a2215200641086a22202903003703002020200341086a290300370300201d200341106a290300370300200e200341186a290300370300200d200341206a2903003703002004200341286a290300370300200020053703b0034101211d024020084103490d00200641e0006a200041b0036a412010ea06417f4a0d0041022104200f210302400340200341286a200341d8006a290300370300200341206a200341d0006a290300370300200341186a200341c8006a290300370300200341106a200341c0006a290300370300200341086a200341386a2903003703002003200341306a220d290300370300200c2004460d01200341e0006a210e2004211d200d2103200441016a2104200e200041b0036a412010ea06417f4a0d020c000b0b2004211d0b2006201d41306c6a220320002903b003370300200341286a2007290300370300200341206a201b290300370300200341186a2029290300370300200341106a2028290300370300200341086a20152903003703000b2022450d05200f41506a210f200c41016a210c202221062008410a4f0d050c000b0b20062002104b000b20022006417f6a2222490d010b20022023104a000b20222002104b000b02402013203a470d00203a41016a2203203a490d09203a41017422042003200420034b1b220341ffffffff01712003470d09200341037422034100480d0902400240203a0d002003102d211e0c010b201e203a41037420031031211e0b201e450d072003410376213a202121130b201e20134103746a2203200836020420032022360200202141016a221321210240024020134102490d00024003400240024002400240201e2013417f6a22214103746a2203280200450d002013410374201e6a220c41746a2802002206200328020422044d0d000240201341024b0d0020132121410221132022450d080c090b201e2013417d6a22074103746a2802042203200420066a4d0d010240201341034b0d0020132121410321132022450d080c090b200c41646a280200200320066a4d0d01201321210c060b20134103490d0120032802042104201e2013417d6a22074103746a28020421030b20032004490d010b2013417e6a21070b0240024002400240024002402013200741016a22154b2220450d00201320074b221f450d01201e20074103746a221b2802042216201b2802006a2203201e20154103746a22292802002228490d02200320234b0d032012202841306c6a220e2029280204221d41306c22046a210c200341306c2106200320286b2202201d6b2203201d4f0d042037200c200341306c220410e806220d20046a210802400240201d4101480d00200341014e0d010b200c2103200d21060c060b203820066a2104200c210303402004200341506a220c200841506a22022002200c412010ea06410048220f1b2206290300370300200441286a200641286a290300370300200441206a200641206a290300370300200441186a200641186a290300370300200441106a200641106a290300370300200441086a200641086a29030037030020082002200f1b21080240200e200c2003200f1b2203490d00200d21060c070b200441506a2104200d2106200d2008490d000c060b0b41c4c2ca0020152013103b000b41c4c2ca0020072013103b000b20282003104b000b20032023104a000b2037200e200410e806220d20046a210802400240201d4101480d002002201d4a0d010b200e2103200d21060c010b201220066a210f200d2106200e210303402003200c2006200c2006412010ea0641004822021b2204290300370300200341286a200441286a290300370300200341206a200441206a290300370300200341186a200441186a290300370300200341106a200441106a290300370300200341086a200441086a2903003703002006200641306a20021b2106200341306a2103200c41306a200c20021b220c200f4f0d01200820064b0d000b0b20032006200820066b220420044130706b10e8061a0240201f450d00201b2028360200201b41046a2016201d6a3602002020450d022029202941086a20132015417f736a41037410e9061a20212113202141014d0d030c010b0b419cc3ca0020072013103b000b41b8e3c300411d41f8b4ca001039000b20220d010b0b0240203a450d00201e102f0b4101211b41002129200041b0046a211e02402036450d002037102f0b203521180c020b41002129200041b0046a211e024020234102490d002023417f6a2104202341306c20126a41506a21084101210603400240024002400240202320042203417f6a2204490d00202320046b22024102490d032012200341306c6a22032012200441306c6a220c412010ea06417f4a0d03200c2903002105200c2003290300370300200041b0036a41286a2213200c41286a220f290300370300200041b0036a41206a221d200c41206a220d290300370300200041b0036a41186a2207200c41186a220e290300370300200041b0036a41106a221b200c41106a2228290300370300200041b0036a41086a2222200c41086a22212903003703002021200341086a2903003703002028200341106a290300370300200e200341186a290300370300200d200341206a290300370300200f200341286a290300370300200020053703b0034101210320024103490d02200c41e0006a200041b0036a412010ea06417f4a0d0241002102200821030340200341286a200341d8006a290300370300200341206a200341d0006a290300370300200341186a200341c8006a290300370300200341106a200341c0006a290300370300200341086a200341386a2903003703002003200341306a220d29030037030020062002220f460d02200f417f6a2102200341e0006a210e200d2103200e200041b0036a412010ea06417f4a0d020c000b0b20042023104b000b4102200f6b21030b200c200341306c6a220320002903b003370300200341286a2013290300370300200341206a201d290300370300200341186a2007290300370300200341106a201b290300370300200341086a20222903003703000b200841506a21082006417f6a210620040d000b0b4101211b203521180c010b41012129200041b0046a211e4100211b0b024002402012202341306c6a221620126b22030d004100211a410121150c010b200341306e221a41057422034100480d052003102d2215450d030b0240024020122016470d00410021060c010b2012202341306c6a210c410021062015210320122104034020032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200641016a2106200341206a2103200c200441306a2204470d000b0b024002402033202641306c6a2033203541306c6a6b22030d0041082108410021370c010b20034100480d052003102d2208450d03200341306e21370b024002402026410d4b0d00410121134100210f20082120410021260c010b203541306c202641306c22036b210c200320336a41506a21034100210f200821040340200341086a2903002105200341106a2903002110200341186a290300211120032903002101200441286a200341286a290300370300200441206a200341206a290300370300200441186a2011370300200441106a2010370300200441086a200537030020042001370300200441306a2104200341506a2103200f41016a210f200c41306a220c0d000b200f41ffffff3f71200f470d05200f41057422034100480d052003102d2213450d0320034105762126200821202008200f41306c6a21080b0240024020202008470d004100210c0c010b4100210c2013210320202104034020032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200c41016a210c200341206a21032008200441306a2204470d000b0b200041b0036a20152006202f2027109705200041c4036a280200220241ffffff3f712002470d012002410574221d417f4c0d01200041c0036a280200212720002802bc03210d20002802b403213a20002802b00321380240024002400240201d0d00200d20024105746a21084101210e200221070c010b201d102d220e450d05200d20024105746a2108201d410576220720024f0d00200741017422032002200320024b1b220341ffffff3f712003470d07200341057422034100480d070240024020070d002003102d210e0c010b200e200741057420031031210e0b200e450d05200341057621070c010b20020d00410021030c010b200e2103200d2104034020032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200341206a21032008200441206a2204470d000b200d20024105746a200d6b41606a41057641016a21030b200e20032015200610980502402007450d00200e102f0b200041a8026a41186a2203201e41186a290000370300200041a8026a41106a2204201e41106a290000370300200041a8026a41086a2206201e41086a2900003703002000201e2900003703a80202400240201b0d00200041d0046a41186a4200370300200041d0046a41106a22064200370300200041d0046a41086a22034200370300200042003703d00441f2cbc700ad4280808080b002841001220429000021052003200441086a290000370300200020053703d0042004102f41fbd4c700ad4280808080d00084100122042900002105200041a0056a41086a220e200441086a290000370300200020053703a0052004102f200620002903a0052205370300200041d0026a41086a2003290300370300200041d0026a41106a2005370300200041d0026a41186a200e290300370300200020002903d0043703d002200041d0026aad428080808080048410050c010b200041b0036a41186a2003290300370300200041b0036a41106a2004290300370300200041b0036a41086a2006290300370300200020002903a8023703b003200041f8026a41186a4200370300200041f8026a41106a22064200370300200041f8026a41086a22034200370300200042003703f80241f2cbc700ad4280808080b002841001220429000021052003200441086a290000370300200020053703f8022004102f41fbd4c700ad4280808080d00084100122042900002105200041d0026a41086a220e200441086a290000370300200020053703d0022004102f200620002903d002220537030020004180056a41086a200329030037030020004180056a41106a200537030020004180056a41186a200e290300370300200020002903f802370380054120102d2203450d03200320002903b003370000200341186a200041b0036a41186a290300370000200341106a200041b0036a41106a290300370000200341086a200041b0036a41086a29030037000020004180056aad42808080808004842003ad428080808080048410042003102f0b0240024002400240201d0d004101210e200221210c010b201d102d220e450d05201d410576222120024f0d00202141017422032002200320024b1b220341ffffff3f712003470d07200341057422034100480d070240024020210d002003102d210e0c010b200e202141057420031031210e0b200e450d05200341057621210c010b20020d00410021030c010b2008200d6b2108410021030340200e20036a2204200d20036a2206290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a2900003700002008200341206a2203470d000b200d20024105746a200d6b41606a41057641016a21030b200041b0036a2013200c20312019109705200041c4036a2802002106200041c0036a280200210820002802bc032104024020002802b403450d0020002802b003102f0b02400240202120036b200641057422064105752202490d00200320026a211f0c010b200320026a221f2003490d0520214101742202201f2002201f4b1b220241ffffff3f712002470d05200241057422024100480d050240024020210d002002102d210e0c010b200e202141057420021031210e0b200e450d03200241057621210b200e20034105746a2004200610e8061a02402008450d002004102f0b0240200b450d002009200b4105746a211d200041b9036a211e02402029450d00200c410574211b200041e8036a21292009210c0340200c41086a2900002105200c41106a2900002110200c2900002111200041d0026a41186a2208200c41186a290000370300200041d0026a41106a22022010370300200041d0026a41086a22072005370300200020113703d002200c41206a210c201b2104201321030240024003402004450d01200041d0026a2003460d02200441606a21042003200041d0026a412010ea062106200341206a210320060d000c020b0b200042003703b00220004280809aa6eaafe3013703a8022000200041d0026a36028005200041f8026a200041d0026a200041a8026a20004180056a10bd01200041f8026a41206a29030021052000290390032110024020002903f8024201520d0020002903800321112029200041f8026a41106a290300370300201e20002903d002370000201e41086a2007290300370000201e41106a2002290300370000201e41186a2008290300370000200020113703e003200041003a00b803200041033a00b00341c8e1ca004100200041b0036a108c010b20102005109a010b200c201d470d000c020b0b200c410574212820234101462122200041e8036a2119200921020340200241086a2900002105200241106a290000211020022900002111200041d0026a41186a2207200241186a290000370300200041d0026a41106a221b2010370300200041d0026a41086a22292005370300200020113703d00241002104024020220d0041002104202321060340200041b0036a41186a20122006410176220c20046a220841306c6a220341186a290000370300200041b0036a41106a200341106a290000370300200041b0036a41086a200341086a290000370300200020032900003703b00320082004200041b0036a200041d0026a412010ea064101481b21042006200c6b220641014b0d000b0b200241206a2102200041b0036a41186a2012200441306c6a220341186a290000370300200041b0036a41106a200341106a290000370300200041b0036a41086a200341086a290000370300200020032900003703b00320282104201321030240200041b0036a200041d0026a412010ea06450d00024003402004450d01200041d0026a2003460d02200441606a21042003200041d0026a412010ea062106200341206a210320060d000c020b0b200042003703b00220004280809aa6eaafe3013703a8022000200041d0026a36028005200041f8026a200041d0026a200041a8026a20004180056a10bd01200041f8026a41206a29030021052000290390032110024020002903f8024201520d0020002903800321112019200041f8026a41106a290300370300201e20002903d002370000201e41086a2029290300370000201e41106a201b290300370000201e41186a2007290300370000200020113703e003200041003a00b803200041033a00b00341c8e1ca004100200041b0036a108c010b20102005109a010b2002201d470d000b0b0240200a450d002009102f0b0240201f450d00201f4105742104200041b9036a2106200041e8036a211d200e21030340200341086a2900002105200341106a290000211020032900002111200041d0026a41186a220c200341186a290000370300200041d0026a41106a22082010370300200041d0026a41086a22022005370300200020113703d002200042003703b00220004280809aa6eaafe3013703a8022000200041d0026a36028005200041f8026a200041d0026a200041a8026a20004180056a10bd01200041f8026a41206a29030021052000290390032110024020002903f8024201520d002000290380032111201d200041f8026a41106a290300370300200620002903d002370000200641086a2002290300370000200641106a2008290300370000200641186a200c290300370000200020113703e003200041003a00b803200041033a00b00341c8e1ca004100200041b0036a108c010b200341206a210320102005109a01200441606a22040d000b0b02402021450d00200e102f0b200041b0036a41186a22064200370300200041b0036a41106a220c4200370300200041b0036a41086a22044200370300200042003703b00341bd98ca00ad42808080808002842205100122082900002110200041d0026a41086a2203200841086a290000370300200020103703d0022008102f20042003290300370300200020002903d0023703b00341ebdec700ad4280808080f000841001220829000021102003200841086a290000370300200020103703d0022008102f202e20002903d002370000202e41086a22022003290300370000200041f8026a41086a220e2004290300370300200041f8026a41106a221d200c290300370300200041f8026a41186a221e2006290300370300200020002903b0033703f802200041203602b4032000200041f8026a3602b00320122023200041b0036a10ab0120064200370300200c420037030020044200370300200042003703b00320051001220829000021052003200841086a290000370300200020053703d0022008102f20042003290300370300200020002903d0023703b003419691c700ad42808080809001841001220829000021052003200841086a290000370300200020053703d0022008102f202e20002903d00237000020022003290300370000200e2004290300370300201d200c290300370300201e2006290300370300200020002903b0033703f802200041203602b4032000200041f8026a3602b0032020200f200041b0036a10ab012023ad42307e2205422088a70d012005a72203417f4c0d010240024020030d00410821022023210e0c010b2003102d2202450d03200341306e220e20234f0d00200e41017422032023200320234b1bad42307e2205422088a70d052005a722034100480d0502400240200e0d002003102d21020c010b2002200e41306c2003103121020b2002450d03200341306e210e0b0240024020162012470d00410021060c010b2012202341306c6a210c4100210620022103201221040340200441086a2903002105200441106a2903002110200441186a290300211120042903002101200341286a200441286a290300370300200341206a200441206a290300370300200341186a2011370300200341106a2010370300200341086a200537030020032001370300200341306a2103200641016a2106200c200441306a2204470d000b0b2006ad42307e2205422088a70d012005a72203417f4c0d010240024020030d002002200641306c6a21084108210f0c010b2003102d220f450d032002200641306c6a21080240200341306e22032006490d00200321060c010b200341017422042006200420064b1bad42307e2205422088a70d052005a722044100480d050240024020030d002004102d210f0c010b200f200341306c20041031210f0b200f450d03200441306e21060b4100210c024020082002460d004100210c200f2103200221040340200441086a2903002105200441106a2903002110200441186a290300211120042903002101200341286a200441286a290300370300200341206a200441206a290300370300200341186a2011370300200341106a2010370300200341086a200537030020032001370300200341306a2103200c41016a210c2008200441306a2204470d000b0b200041c0036a200c360200200041bc036a2006360200200041b8036a200f360200200041003a00b403200041093a00b003200020002f00f8023b00b5032000200041fa026a2d00003a00b70341c8e1ca004100200041b0036a108c010240200e450d002002102f0b02402027450d00200d102f0b0240203a450d002038102f0b02402026450d002013102f0b02402037450d002020102f0b0240201a450d002015102f0b02402018450d002012102f0b02402034450d002033102f0b20002802f804210820002802f00421030240024020002802f40422060d00200321040c010b2006210c20032104034020042802c8052104200c417f6a220c0d000b0340200320032f01064102746a41c8056a28020021032006417f6a22060d000b0b200041cc036a20032f0106360200200041c8036a4100360200200041c4036a2003360200200020083602d003200041003602c003200042003703b803200020043602b403200041003602b003200041b0036a10a20202402032450d002031102f0b02402030450d00202f102f0b02402024450d002024412c6c2104202a41206a210303400240200341046a280200450d002003280200102f0b2003412c6a2103200441546a22040d000b0b41002112200041f8026a210c2025450d00202a102f0b200041b0036a41186a22084200370300200041b0036a41106a22064200370300200041b0036a41086a22044200370300200042003703b00341bd98ca00ad42808080808002842205100122022900002110200041d0026a41086a2203200241086a290000370300200020103703d0022002102f20042003290300370300200020002903d0023703b003418c91c700ad4280808080a001841001220229000021102003200241086a290000370300200020103703d0022002102f200620002903d0022210370300200041f8026a41086a22022004290300370300200041f8026a41106a220f2010370300200041f8026a41186a220d2003290300370300200020002903b0033703f802200cad42808080808004841005200842003703002006420037030020044200370300200042003703b00320051001220e29000021102003200e41086a290000370300200020103703d002200e102f20042003290300370300200020002903d0023703b00341cd98ca00ad4280808080e0018422101001220e29000021112003200e41086a290000370300200020113703d002200e102f200620002903d002221137030020022004290300370300200f2011370300200d2003290300370300200020002903b0033703f8022000200c41201095012000280200210e20002802042113200842003703002006420037030020044200370300200042003703b00320051001220c29000021052003200c41086a290000370300200020053703d002200c102f20042003290300370300200020002903d0023703b00320101001220c29000021052003200c41086a290000370300200020053703d002200c102f200620002903d002220537030020022004290300370300200f2005370300200d2003290300370300200020002903b0033703f8022000201341016a4101200e1b3602b003200041f8026aad4280808080800484200041b0036aad4280808080c00084100402400240201c0d00200a450d042012410173450d010c040b2012450d030240202b450d00201c102f0b02402024450d002024412c6c2104202a41206a210303400240200341046a280200450d002003280200102f0b2003412c6a2103200441546a22040d000b0b02402025450d00202a102f0b200a450d030b2009102f0c020b103d000b1036000b200041b0056a24000f0b1038000bae0504067f017e067f027e230041e0006b22022400200241c00036020c20022001360208200241106a2001ad4280808080800884100210730240024002400240024020022802102203450d00200228021421042002200241186a280200360224200220033602202002200241206a10e6010240024020022802000d00200228020422052002280224220641186e2201200120054b1b2207ad42187e2208422088a70d042008a72201417f4c0d040240024020010d00410821090c010b2001102d2209450d06200141186e21070b024002402005450d004100210a4100210b4100210c034020064104490d0220022006417c6a220636022420022002280220220141046a36022020064110490d02200c41016a210d2001280000210e2002200641706a22063602242002200141146a3602202001410c6a29000021082001290004210f0240200c2007470d00200a200d200a200d4b1bad42187e2210422088a70d0a2010a722014100480d0a02400240200c0d002001102d21090c010b2009200b2001103121090b2009450d09200141186e21070b2009200b6a2201200e360200200141106a2008370300200141086a200f370300200a41026a210a200b41186a210b200d210c2005200d470d000b0b2009450d012000200736020420002009360200200041086a20053602000c020b2007450d002009102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602000b2004450d012003102f0c010b200041003602000b200241e0006a24000f0b103d000b1036000b1038000bed0302067f027e230041106b22032400024002400240200141186c4104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020012003106902400240200141186c22010d002003280208210120032802042105200328020021040c010b200020016a2106200328020421052003280208210103402000280200210702400240200520016b4104490d00200328020021040c010b200141046a22042001490d05200541017422082004200820044b1b22084100480d050240024020050d002008102d21040c010b200328020020052008103121040b2004450d042003200836020420032004360200200821050b2003200141046a2208360208200420016a2007360000200041106a2903002109200041086a290300210a02400240200520086b4110490d00200141146a21010c010b200841106a22012008490d05200541017422072001200720014b1b22074100480d050240024020050d002007102d21040c010b200420052007103121040b2004450d042003200736020420032004360200200721050b200420086a220820093700082008200a37000020032001360208200041186a22002006470d000b0b20022902002001ad4220862004ad84100402402005450d002004102f0b200341106a24000f0b103d000b1036000b1038000b130020004103360204200041ccdcc4003602000b3400200041a4e3c40036020420004100360200200041146a4101360200200041106a41a8e3c400360200200041086a42043702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102d22060d001036000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b13002000410c360204200041c0e4c4003602000b3400200041c6b5c40036020420004100360200200041146a4110360200200041106a41bcc0c500360200200041086a42073702000b130020004106360204200041f4d5c5003602000b2e01017f02404104102d22020d001036000b20004284808080c0003702042000200236020020024180ee053600000b3b01017f02404110102d22020d001036000b20024200370008200242808094f6c2d7e8d800370000200042908080808002370204200020023602000b2c01017f02404104102d22020d001036000b20004284808080c000370204200020023602002002410a3600000b3901017f02404110102d22020d001036000b200242003700082002428080d287e2bc2d370000200042908080808002370204200020023602000bcc0502077f067e230041f0006b2102024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200200541014b0d0320050e020102010b200041023a00000f0b024020064110490d00200041003a000020002002280028360001200041086a2004290001370300200041186a2002290348370300200041106a200441096a29000037030020012003416f6a3602042001200441116a360200200041046a2002412b6a280000360000200041206a200241c8006a41086a290300370300200041286a200241c8006a41106a290300370300200041306a200241c8006a41186a2903003703000f0b200041023a00000f0b41002105200241003a00682003417f6a2107417e210602400240034020072005460d01200241c8006a20056a200420056a220841016a2d00003a00002001200320066a3602042001200841026a3602002002200541016a22083a00682006417f6a21062008210520084120470d000b200241286a41186a2205200241c8006a41186a290300370300200241286a41106a2206200241c8006a41106a290300370300200241286a41086a2207200241c8006a41086a290300370300200220022903483703282008417f7320036a4110490d01200241086a41086a20072903002209370300200241086a41106a2006290300220a370300200241086a41186a2005290300220b370300200420086a220541016a290000210c200541096a290000210d2001200320086b416f6a3602042001200541116a36020020022002290328220e370308200041013a00002000200e370001200041096a2009370000200041116a200a370000200041196a200b370000200041306a200d370300200041286a200c370300200041216a2002280001360000200041246a200241046a2800003600000f0b200541ff0171450d00200241003a00680b200041023a00000f0b200041023a00000b130020004108360204200041c4dec5003602000b340020004180a3ca0036020420004100360200200041146a4105360200200041106a4190ffc500360200200041086a42083702000b130020004108360204200041c088c6003602000b2b01017f02404101102d22020d001036000b200042818080801037020420002002360200200241143a00000b2e01017f02404104102d22020d001036000b20004284808080c0003702042000200236020020024180e1013600000b2e01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241a0c21e3600000b2e01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241d086033600000bd30101017f230041106b22022400024002400240024020002d00000e03010200010b2002200128021841c7afca00410b2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c020b2002200128021841d2afca00410c2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b2002200128021841deafca00410d2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040b200241106a240020000ba3cb01040a7f027e0d7f027e2300418081046b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402001280204220320012802082204460d00200441016a22052004490d0720032005490d06200128020020046a2d00002104200120053602082004410c4b0d0220040e0d010319181716151409100f0e08010b200241013a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a20022802e88004210420022802ec8004210120004101360200200041003a00042001450d312004102f0c310b200241d8006a2001109d0641012106200228025c210720022802584101460d08200241d8006a41004180800110e7061a41002108410021052007450d2341012106410021084100210341002109024003402001280204220a200128020822056b200720096b220441808001200441808001491b2204490d01200520046a220b2005490d05200a200b490d04200241d8006a200128020020056a200410e8061a2001200b36020802400240200820036b2004490d00200420036a21050c010b200320046a22052003490d272008410174220b2005200b20054b1b220b4100480d270240024020080d00200b102d21060c010b20062008200b103121060b2006450d30200b21080b200620036a200241d8006a200410e8061a200521032007200420096a22094b0d000c250b0b200241013a00d88004200241fc80046a4101360200200242013702ec8004200241b4afca003602e880042002412836021c2002200241186a3602f880042002200241d880046a360218200241306a200241e880046a103a2002290330210c2002280238210441052107024020080d000c2d0b2006102f0c2c0b200041123a000420004101360200200041056a20043a00000c2f0b200241d8006a200110a306024020022802584101470d00200228025c22044108762105200241d8006a41086a290300220c422088210d200241e8006a28020021030c210b200241ec006a280200210a200241e8006a2802002101200241e4006a2802002103200241e0006a280200210b200228025c2108410021044100210502400240024002400240034002402004411f4d0d00410f21040c030b20032001460d012001417f460d052003200141016a2207490d04200820016a2d0000220941ff00712004411f71742005722105200441076a2104200721012009418001710d000b024020044120490d00410d21042009410f4b0d020b200241003602382002420437033020050d02410421010c230b200241013a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241206a200241d8006a103a410521040b200241e880046a41086a200241206a41086a280200220336020020022002290320220c3703e88004200c422088a72107200ca721090c220b410120036b21064100210e0240034002400240024002400240024002400240024020032007460d00200741016a22012007490d0120032001490d020240200820076a2d0000220f41e000460d00411821100c2b0b200e41016a210e200741026a21014100210441002109024002400240034002402004411f4d0d00410f21104100210f0c2e0b200620016a4102460d012001450d0720032001490d0b200820016a417f6a2d0000220741ff00712004411f71742009722109200141016a2101200441076a21042007418001710d000b024020044120490d002007410f4d0d00410d21104100210f0c2d0b2001417f6a2104410021114101211220090d01410021130c020b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241e880046a200241d8006a103a20022802e88004210920022802ec8004210720022802f080042101410521104100210f0c2b0b410021144100210741002113034020032004460d28200120076a220f450d062003200f490d070240200820046a2c0000220f41004e0d00411921100c2b0b41062110200f41c00071450d29200f41807f72220f41ff017141fc01490d29200741016a2110024020072013470d0020142010201420104b1b22134100480d320240024020070d002013102d21120c010b201220072013103121120b2012450d3b0b200441016a2104201220076a200f417f733a0000201441026a21142010210720092010470d000b0b20124110764110742215201241087641ff0171410874221672201241ff017122127221144100210103404100210f02402011411f4d0d00410f21100c270b0240024020032004460d002004417f460d092003200441016a22074f0d01200441016a2003104a000b200241013a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210920022802ec8004210720022d00f08004210120022d00f18004210320022f01f280042104410521100c270b200820046a2d0000221041ff00712011411f71742001722101201141076a2111200721042010418001710d000b20114120490d082010410f4d0d08410d21100c250b200241013a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210920022802ec8004210720022d00f08004210120022d00f18004210320022f01f280042104410521100c290b417f2001104b000b20012003104a000b417f2001104b000b417f200f104b000b200f2003104a000b417f200441016a104b000b20012003104a000b0240200141014d0d004104211041be8eca002109412421070c1c0b024002400240024020010e020100010b0240024020032007460d00200741016a22012007490d0420032001490d06200820076a2c0000220f41004e0d01411921100c210b200241013a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210920022802ec8004210720022d00f08004210120022d00f18004210320022f01f280042104410521100c1f0b41062110200f41c00071450d1d200f41807f72220f41ff017141fb014d0d1d200f417f732111200121070c010b410421110b0240200228023822042002280234470d00200441016a22012004490d282004410174220f2001200f20014b1b220141ffffffff00712001470d28200141047422014100480d280240024020040d002001102d210f0c010b2002280230200441047420011031210f0b200f450d312002200f360230200220014104763602340b2002280230220120044104746a220f20174180807c71201141ff01714108747241e00072221736020c200f2009360208200f2013360204200f20162012722015723602002002200441016a360238200e2005460d230c010b0b417f200741016a104b000b200741016a2003104a000b200141016a2003104a000b417f200141016a104b000b200b200a104a000b2005200b104b000b20052003104a000b417f2005104b000b200241d8006a200110a306024020022802584101470d00200041013602002000200241d8006a41047222012902003702042000410c6a200141086a2902003702000c2a0b200241ec006a2802002106200241e8006a2802002104200241e4006a2802002105200241e0006a280200210b200228025c2108410021034100210102400240034002402003411f4d0d00410f21040c070b20052004460d052004417f460d012005200441016a2209490d02200820046a2d0000220741ff00712003411f71742001722101200341076a2103200921042007418001710d000b20034120490d06410d21042007410f4d0d060c050b417f200441016a104b000b200441016a2005104a000b200241d8006a200110a306024020022802584101470d00200041013602002000200241d8006a41047222012902003702042000410c6a200141086a2902003702000c290b200241ec006a2802002106200241e8006a2802002104200241e4006a2802002105200241e0006a280200210b200228025c2108410021034100210102400240034002402003411f4d0d00410f21040c0c0b20052004460d0a2004417f460d012005200441016a2209490d02200820046a2d0000220741ff00712003411f71742001722101200341076a2103200921042007418001710d000b20034120490d0b410d21042007410f4d0d0b0c0a0b417f200441016a104b000b200441016a2005104a000b20074108762101200241e8006a2802002104200241d8006a41086a290300210c0c230b200241013a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a410521040b2000200436020420004101360200200041086a20022903e88004370200200041106a200241e880046a41086a280200360200200b450d252008102f0c250b200620094621040240200b450d002008102f0b02402004450d00410b21030c200b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a200241f380046a200241386a280200360000200220022903303700eb8004200041053a0004200020022900e880043700052000410c6a200241ef80046a290000370000200041013602000c240b200241d8006a200110a3060240024020022802584101470d00200228025c22014108762109200241d8006a41086a290300220c422088210d200241e8006a28020021080c010b200241c0006a200241ec006a280200360200200241386a200241e4006a2902003703002002200229025c370330410021014100210502400240024002400240024002400240034002402001411f4d0d00410f21060c030b20022802382207200228023c2204460d01200441016a22032004490d0620072003490d05200228023020046a2d000021042002200336023c200441ff00712001411f71742005722105200141076a21012004418001710d000b024020014120490d00410d21062004410f4b0d020b200241003602502002420437034820050d02410421010c030b200241013a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241206a200241d8006a103a410521060b200241e880046a41086a200241206a41086a280200220836020020022002290320220c3703e88004200c422088a7210a200ca7210f410021090c040b410021060340200641016a21064100210141002107024002400240024002400240024002400240024002400240034002402001411f4d0d00410f21060c030b20022802382209200228023c2204460d01200441016a22032004490d0420092003490d06200228023020046a2d000021042002200336023c200441ff00712001411f71742007722107200141076a21012004418001710d000b20014120490d022004410f4d0d02410d21060c010b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241e880046a200241d8006a103a200241d880046a41086a200241e880046a41086a280200360200200220022903e88004220c3703d88004200ca7210f410521060b20022802e08004210820022802dc8004210a410021090c080b200241d8006a200241306a109506024020022802584101470d00200228025c22064108762109200228026821082002280264210a2002280260210f0c080b200228026421142002280260210e200228025c21124100210441002108034002402004411f4d0d00410f21060c080b20022802382209200228023c2203460d05200341016a22012003490d0220092001490d042002280230220b20036a2d000021032002200136023c200341ff00712004411f71742008722108200441076a21042003418001710d000b20044120490d052003410f4d0d05410d21060c060b417f2003104b000b417f2001104b000b20032009104a000b20012009104a000b200241013a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210f20022802ec8004210a20022802f080042108410521060c010b41002111200241d8006a41004180800410e7061a024020080d00410121104100210f0c030b4100211141012110410021034100210a0240024002400340200920016b2008200a6b220441808004200441808004491b2204490d01200120046a220f2001490d022009200f490d03200241d8006a200b20016a200410e8061a2002200f36023c02400240201120036b2004490d00200420036a210f0c010b200320046a220f2003490d2620114101742201200f2001200f4b1b22014100480d260240024020110d002001102d21100c010b201020112001103121100b2010450d2f200121110b201020036a200241d8006a200410e8061a20082004200a6a220a4d0d06200228023c2101200228023821092002280230210b200f21030c000b0b200241013a0020200241013602fc8004200242013702ec8004200241b4afca003602e880042002412836021c2002200241186a3602f880042002200241206a360218200241d880046a200241e880046a103a20022802d88004210f20022802dc8004210a20022802e080042108410521062011450d022010102f0c020b2001200f104b000b200f2009104a000b02402014450d0020144104742104201221010340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b41002109200e450d002012102f0b20022802482111024020022802502201450d0020112001411c6c6a210b201121070340024020072802042201450d0002402007410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741086a280200450d002007280204102f0b2007411c6a21010240200741146a280200450d002007280210102f0b200121072001200b470d000b0b200228024c450d052011102f0c050b024020022802502203200228024c470d00200341016a22012003490d1f200341017422042001200420014b1bad421c7e220c422088a70d1f200ca722014100480d1f0240024020030d002001102d21040c010b20022802482003411c6c2001103121040b2004450d282002200436024820022001411c6e36024c0b200228024822012003411c6c6a2204200741087622093b00012004201036021020042012360204200420073a0000200441036a20094110763a0000200441186a200f360200200441146a20113602002004410c6a2014360200200441086a200e3602002002200341016a36025020062005470d000b0b200228023c2002280240462104200229024c220c422088210d02402002280234450d002002280230102f0b20014108762105200da72103200ca7210b2004450d032005410874200141ff01717221012003ad422086200bad84210c410d21030c230b20032007104a000b417f2003104b000b2009410874200641ff0171722101200aad220d422086200fad84210c2002280234450d012002280230102f0c010b2005410874200141ff017172210620024103410220041b3a00d88004200241d8006a41146a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022903e88004210c20022802f08004210802402003450d0020062003411c6c6a2109200621070340024020072802042201450d0002402007410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741086a280200450d002007280204102f0b2007411c6a21010240200741146a280200450d002007280210102f0b2001210720012009470d000b0b200c422088210d4105210141002109200b450d002006102f0b20004101360200200041106a2008360200200041086a200d422086200c42ffffffff0f838437020020002009410874200141ff0171723602040c230b200241d8006a200110a3060240024020022802584101470d00200228025c220b4108762104200241d8006a41086a290300220c422088210d200241e8006a28020021060c010b200241ec006a2802002111200241e8006a2802002101200241e4006a2802002105200241e0006a280200210a200228025c2108410021044100210702400240024002400240024002400240024002400240024002400240034002402004411f4d0d00410f210b0c030b20052001460d012001417f460d062005200141016a2203490d05200820016a2d0000220941ff00712004411f71742007722107200441076a2104200321012009418001710d000b024020044120490d00410d210b2009410f4b0d020b200241003602502002420437034820070d02410421010c030b200241013a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a4105210b0b200241306a41086a200241e880046a41086a2802002206360200200220022903e88004220c370330200c422088a7210f200ca721110c0a0b200241e1006a21134100210e0340200e41016a210e4100210141002109024002400240024002400240024002400240024002400240024002400240024002400240034002402001411f4d0d00410f210b0c030b20052003460d012003417f460d052005200341016a2204490d0c200820036a2d0000220b41ff00712001411f71742009722109200141076a210120042103200b418001710d000b024020014120490d00200b410f4d0d00410d210b0c020b4100210f200241d8006a41004180800110e7061a20090d024101211020042103410021124100210b0c030b200241013a00e880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241e880046a360218200241206a200241d8006a103a4105210b200228022021110b200228022821062002280224210f0c190b410021124101211041002106410021140340200520046b200920146b220141808001200141808001491b2201490d18200420016a22032004490d0320052003490d04200241d8006a200820046a200110e8061a02400240201220066b2001490d00200120066a210b0c010b200620016a220b2006490d3420124101742204200b2004200b4b1b22044100480d340240024020120d002004102d21100c010b201020122004103121100b2010450d3d200421120b201020066a200241d8006a200110e8061a20032104200b21062009200120146a22144b0d000b0b2002200b3602402002410036023c2002200b3602382002201236023420022010360230410021014100210602400240024002400240034002402001411f4d0d00410f210b0c030b200b200f460d01200f417f460d09200b200f41016a2209490d0e2010200f6a2d000021042002200936023c200441ff00712001411f71742006722106200141076a21012009210f2004418001710d000b024020014120490d002004410f4d0d00410d210b0c020b4100210f200241003602e08004200242043703d8800420060d024104211841002119410021150c030b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241e880046a200241d8006a103a20022802e88004211120022802ec8004210f20022802f0800421064105210b0b200220063602e080042002200f3602dc8004200220113602d880040c180b4100211941042118410021150340201921162015221a41016a211541002101410021100240024002400240034002402001411f4d0d00410f21040c030b20022802382214200228023c2204460d01200441016a22092004490d0c20142009490d112002280230221220046a2d0000210b2002200936023c200b41ff00712001411f71742010722110200141076a2101200b418001710d000b024020014120490d00200b410f4d0d00410d21040c020b20142009460d06200441026a21042009417f460d0c20142004490d0d201220096a2c000021012002200436023c0240200141004e0d00411921040c130b41062104200141c00071450d11200141807f72220141ff017141fb014d0d11201a2016460d0220162119201a21160c030b200241013a00e880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241e880046a360218200241206a200241d8006a103a41052104200228022021110b200228022821062002280224210f410021010c100b201641016a22042016490d35201641017422092004200920044b1b220441ffffffff01712004470d35200441037422044100480d350240024020160d002004102d21180c010b201820164103742004103121180b2018450d3e200220183602d88004200441037621190b201820164103746a2204201741807e712001417f7341ff01717222173a00042004201036020020152006470d000b200220193602dc8004200220153602e080040b201820154103746a210b201821010340200b2001460d0f200f20012802006a2204200f492109200141086a21012004210f20090d0e0c000b0b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241e880046a200241d8006a103a20022802e88004211120022802ec8004210f20022802f080042106410521040c0b0b417f200341016a104b000b20042003104b000b20032005104a000b417f200f41016a104b000b417f2009104b000b417f2004104b000b20042014104a000b200341016a2005104a000b200f41016a200b104a000b20092014104a000b0b200220163602dc80042002201a3602e08004200141ff0171410874200472210b2016450d090c080b20022802f08004210620022802ec8004210f411c210b0c060b4101210b4100210441082110410021090340200241d8006a200241306a109606024020022802584101470d00200228026821062002280264210f20022802602111200228025c210b0c060b200241e880046a41026a2201201341026a2d00003a0000200220132f00003b01e88004200228026421142002290368210c0240024020022d006022064106470d00200b417f6a210b0c010b2006417e6a41034f0d00200b41016a220f200b4f2112200f210b20120d004115210f418e88ca0021114104210b024020064109460d000c070b0240201428020441ffffffff0371450d002014280200102f0b2014102f0c060b200241d8006a41026a220f20012d00003a0000200220022f01e880043b01580240024020092004460d00200421120c010b200441016a22012004490d25200441017422092001200920014b1b220141ffffffff00712001470d25200141047422014100480d250240024020040d002001102d21100c010b201020044104742001103121100b2010450d2e200421092001410476221221040b201020094104746a220120063a00002001200c37030820012014360204200120022f01583b0001200141036a200f2d00003a0000200941016a2109200b0d000b20022802402101200228023c210402402002280234450d002002280230102f0b024002400240024020042001470d002002280250220b200228024c470d03200b41016a2201200b490d27200b41017422042001200420014b1bad42187e220c422088a70d27200ca722014100480d27200b0d012001102d21040c020b20024103410220042001461b3a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004211120022802ec8004210f20022802f08004210602402009450d0020094104742104201021010340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b02402012450d002010102f0b4105210b2019450d0c2018102f0c0c0b2002280248200b41186c2001103121040b2004450d2d200220043602482002200141186e36024c0b20022802482201200b41186c6a2204201036020c200420153602082004201936020420042018360200200441146a2009360200200441106a20123602002002200b41016a360250200e2007470d000b0b20032011462104200229024c220c422088210d0240200a450d002008102f0b200da72103200ca7210a2004450d092003ad422086200aad84210c410c21030c280b200141016a2005104a000b417f200141016a104b000b02402009450d0020094104742103201021010340024020012d00004109470d000240200141046a2207280200220528020441ffffffff0371450d002005280200102f200728020021050b2005102f0b200141106a2101200341706a22030d000b0b2004450d002010102f20190d010c020b2019450d010b2018102f0b2002280234450d012002280230102f0c010b200241013a0020200241013602fc8004200242013702ec8004200241b4afca003602e880042002412836021c2002200241186a3602f880042002200241206a360218200241d880046a200241e880046a103a20022802d88004211120022802dc8004210f20022802e0800421064105210b2012450d002010102f0b20022802482110024020022802502201450d002010200141186c6a21092010210703400240200741046a280200450d002007280200102f0b0240200741146a2802002204450d00200728020c2101200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741186a21010240200741106a280200450d00200728020c102f0b2001210720012009470d000b0b200228024c450d002010102f0b200b4108762104200fad220d4220862011ad84210c200a450d012008102f0c010b20024103410220041b3a0030200241d8006a41146a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a20022903e88004210c20022802f08004210602402003450d002001200341186c6a21082001210903400240200941046a280200450d002009280200102f0b0240200941146a2802002203450d00200928020c2104200341047421030340024020042d00004109470d000240200441046a2207280200220528020441ffffffff0371450d002005280200102f200728020021050b2005102f0b200441106a2104200341706a22030d000b0b200941186a21040240200941106a280200450d00200928020c102f0b2004210920042008470d000b0b200c422088210d4105210b41002104200a450d002001102f0b20004101360200200041106a2006360200200041086a200d422086200c42ffffffff0f838437020020002004410874200b41ff0171723602040c220b200241d8006a200110a3060240024020022802584101470d00200228025c22014108762109200241d8006a41086a290300220c422088210d200241e8006a28020021080c010b200241f880046a200241ec006a280200360200200241f080046a200241e4006a2902003703002002200229025c3703e880044100210141002105024002400240024002400240024002400240024002400240034002402001411f4d0d00410f21060c030b20022802f08004220720022802f480042204460d01200441016a22032004490d0820072003490d0a20022802e8800420046a2d00002104200220033602f48004200441ff00712001411f71742005722105200141076a21012004418001710d000b024020014120490d00410d21062004410f4b0d020b200241003602e08004200242043703d8800420050d02410421040c030b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200241d880046a41086a200241306a41086a280200360200200220022903303703d88004410521060b200241206a41086a200241d880046a41086a2802002208360200200220022903d88004220c370320200c422088a7210a200ca7210f410021090c040b4100210b0340200b41016a210b410021094100210141002107034002402001411f4d0d00410f21060c050b20022802f08004220820022802f480042204460d03200441016a22032004490d0720082003490d0920022802e8800420046a2d00002104200220033602f48004200441ff00712001411f71742007722107200141076a21012004418001710d000b024020014120490d002004410f4d0d00410d21060c040b200241d8006a200241e880046a109506024020022802584101470d00200228025c22064108762109200228026821082002280264210a2002280260210f0c040b2002280264211120022802602114200228025c2110200241d8006a200241e880046a109706024020022802584101470d00200228025c2106200228026821082002280264210a2002280260210f02402011450d0020114104742104201021010340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200641087621092014450d042010102f0c040b410021092002280260210a200228025c2106024002402002280264220141027422030d00410421084100210f0c010b2003410275220441ffffffff03712004470d2120034100480d212003102d2208450d2a2003410276210f0b02402001450d002003417c6a21092008210120062104034020012004280200360200200141046a2101200441046a21042003417c6a22030d000b200941027641016a21090b0240200a450d002006102f0b024020022802e08004220320022802dc8004470d00200341016a22012003490d21200341017422042001200420014b1bad421c7e220c422088a70d21200ca722014100480d210240024020030d002001102d21040c010b20022802d880042003411c6c2001103121040b2004450d2a200220043602d8800420022001411c6e3602dc80040b20022802d8800422042003411c6c6a2201200741087622063b00012001200836021020012010360204200120073a0000200141036a20064110763a0000200141186a2009360200200141146a200f3602002001410c6a2011360200200141086a20143602002002200341016a3602e08004200b2005470d000b0b20022802f4800420022802f8800446210120022902dc8004220c422088210d024020022802ec8004450d0020022802e88004102f0b20044108762105200da72103200ca7210b2001450d072005410874200441ff01717221012003ad422086200bad84210c410a21030c250b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a2002280230210f2002280234210a20022802382108410521060b20022802d880042111024020022802e080042201450d0020112001411c6c6a210b201121070340024020072802042201450d0002402007410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741086a280200450d002007280204102f0b2007411c6a21010240200741146a280200450d002007280210102f0b200121072001200b470d000b0b20022802dc8004450d002011102f0b2009410874200641ff0171722101200aad220d422086200fad84210c20022802ec8004450d0520022802e88004102f0c050b417f2003104b000b417f2003104b000b20032007104a000b20032008104a000b2005410874200441ff017172210620024103410220011b3a00d88004200241d8006a41146a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a2002290330210c2002280238210802402003450d0020062003411c6c6a2109200621070340024020072802042201450d0002402007410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741086a280200450d002007280204102f0b2007411c6a21010240200741146a280200450d002007280210102f0b2001210720012009470d000b0b200c422088210d4105210141002109200b450d002006102f0b20004101360200200041106a2008360200200041086a200d422086200c42ffffffff0f838437020020002009410874200141ff0171723602040c210b200241013a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a410521040b2000200436020420004101360200200041086a20022903e88004370200200041106a200241e880046a41086a280200360200200b450d1f2008102f0c1f0b200620094621040240200b450d002008102f0b02402004450d00410921030c1a0b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a200241f380046a200241386a280200360000200220022903303700eb8004200041053a0004200020022900e880043700052000410c6a200241ef80046a290000370000200041013602000c1e0b200241d8006a200110a3060240024020022802584101470d00200228025c22034108762104200241d8006a41086a290300220c422088210d200241e8006a28020021050c010b200241f880046a200241ec006a280200360200200241f080046a200241e4006a2902003703002002200229025c3703e8800441002101410021050240024002400240024002400240024002400240024002400240024002400240024002400240034002402001411f4d0d00410f21030c120b20022802f08004220720022802f480042204460d10200441016a22032004490d0120072003490d0820022802e8800420046a2d00002104200220033602f48004200441ff00712001411f71742005722105200141076a21012004418001710d000b024020014120490d002004410f4d0d00410d21030c110b20024100360250200242043703484104210102402005450d00410021114100210f410021120340200241d8006a200241e880046a109906024020022802584101470d0020022002290264220c3703d8800420022802602108200228025c2103200ca721090c110b20022802602110200228025c211402400240024002400240024020022802f08004220320022802f480042207460d00200741016a22042007490d0920032004490d0a2002280264210e20022802e88004220920076a2d0000210a200220043602f480040240200a41034d0d00410a21040c160b200a0e0401020304010b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241306a200241d8006a103a0c120b4100210a4100210841002107034002402008411f4d0d00410f21040c150b20032004460d132004417f460d0a2003200441016a2206490d0f200920046a2d0000210b200220063602f48004200b41ff00712008411f71742007722107200841076a210820062104200b418001710d000b4100210a20084120490d03200b410f4d0d03410d21040c130b410021084100210703402008411f4b0d100240024020032004460d002004417f460d0c2003200441016a22064f0d01200441016a2003104a000b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241306a200241d8006a103a0c120b200920046a2d0000210b200220063602f48004200b41ff00712008411f71742007722107200841076a210820062104200b418001710d000b4101210a20084120490d02200b410f4d0d020c0e0b410021084100210703402008411f4b0d0f0240024020032004460d002004417f460d0c2003200441016a22064f0d01200441016a2003104a000b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241306a200241d8006a103a0c110b200920046a2d0000210b200220063602f48004200b41ff00712008411f71742007722107200841076a210820062104200b418001710d000b4102210a20084120490d01200b410f4b0d0d0c010b410021084100210703402008411f4b0d0e0240024020032004460d002004417f460d0c2003200441016a22064f0d01200441016a2003104a000b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241306a200241d8006a103a0c100b200920046a2d0000210b200220063602f48004200b41ff00712008411f71742007722107200841076a210820062104200b418001710d000b4103210a20084120490d00200b410f4b0d0c0b200220073602e080042002200a3602dc800420022902dc8004210c02400240200f2011460d00201121030c010b201141016a22042011490d28201141017422032004200320044b1bad42147e220d422088a70d28200da722044100480d280240024020110d002004102d21010c010b2001201141146c2004103121010b2001450d31200220013602482011210f200441146e220321110b2001200f41146c6a2204200c37020c2004200e3602082004201036020420042014360200200f41016a210f201241016a22122005470d000b2002200336024c2002200f3602500b20022802f4800420022802f88004462104200229024c220c422088210d024020022802ec8004450d0020022802e88004102f0b200da72103200ca721072004450d112003ad4220862007ad84210c410821030c2c0b417f2003104b000b417f2004104b000b20042003104a000b417f200441016a104b000b417f200441016a104b000b417f200441016a104b000b417f200441016a104b000b20032007104a000b200441016a2003104a000b410d21044100210a0c030b410f21044100210a0c020b200228023021082002290234210c410521044100210a0c010b200241013a00202002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241306a200241d8006a103a200228023021082002290234210c410521040b200a41087420047221032002200c3703d88004200ca721092010450d002014102f0b2002200f3602502002201136024c20022802dc800421050240200f450d00200f41146c21072001210403400240200441046a280200450d002004280200102f0b200441146a21042007416c6a22070d000b0b2011450d032001102f0c030b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021012002280234210420022802382105410521030b200220043602dc8004200220013602d88004200220053602e0800420022903d88004220c422088a72109200ca721080c010b20024103410220041b3a00d88004200241d8006a41146a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a2002290330210c2002280238210502402003450d00200341146c21032001210403400240200441046a280200450d002004280200102f0b200441146a21042003416c6a22030d000b0b200c422088210d41052103410021042007450d012001102f0c010b200341087621042009ad220d4220862008ad84210c20022802ec8004450d0020022802e88004102f0b20004101360200200041106a2005360200200041086a200d422086200c42ffffffff0f838437020020002004410874200341ff0171723602040c1d0b200241d8006a200110a3060240024020022802584101470d00200228025c22094108762104200241d8006a41086a290300220c422088210d200241e8006a28020021080c010b200241c0006a200241ec006a280200360200200241386a200241e4006a2902003703002002200229025c3703304100210141002107024002400240024002400240024002400240024002400240024002400240024002400240034002402001411f4d0d00410f21090c030b20022802382205200228023c2204460d01200441016a22032004490d0520052003490d0c2002280230220920046a2d000021042002200336023c200441ff00712001411f71742007722107200141076a21012004418001710d000b024020014120490d002004410f4d0d00410d21090c020b200241003602502002420437034820070d02410421010c030b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241e880046a200241d8006a103a20022802e88004210120022802ec8004210420022802f080042108410521090b200220043602dc8004200220013602d88004200220083602e0800420022903d88004220c422088a7210a200ca721060c0f0b2007417f6a2111410421014104211241042107410421144100210b4100210f034020052003460d05200341016a22082003490d0320052008490d04200920036a2c000021042002200836023c20044100480d0602400240024002400240200441c00071450d00200441807f72220441ff017141fb014d0d00024020052008460d00200341026a21062008417f460d0d20052006490d0e200920086a2d000021032002200636023c200341014b0d024100210520030e020504050b2002200b36024c2002200f360250200241013a0020200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241d880046a200241d8006a103a20022802d88004210620022802dc8004210a20022802e080042108410521010c020b2002200b36024c2002200f360250410621010c0e0b2002200b36024c2002200f360250410c21010b200241f880046a2008360200200241f480046a200a360200200241f080046a2006360200200220033a00ed8004200220013a00ec80040c0e0b41800221050b200241d8006a200241306a1095062002280264210a20022802602106200228025c2109024020022802584101470d002002200b36024c2002200f360250200241e8006a28020021080c0e0b02400240200f200b460d00200b2108200f210b0c010b200b41016a2201200b490d22200b41017422032001200320014b1b220141ffffffff00712001470d22200141047422034100480d2202400240200b0d002003102d21010c010b2014200b4104742003103121010b2001450d2b20022001360248200341047621082001211220012107200121140b2014200b4104746a220320104180807c712004417f7341ff017172200572221036020c2003200a3602082003200636020420032009360200200b41016a210f02402011450d002011417f6a2111200228023c210320022802382105200228023021092008210b0c010b0b2002200836024c2002200f3602500b200228023c2002280240462104200229024c220c422088210d02402002280234450d002002280230102f0b200da72103200ca721062004450d0c2003ad4220862006ad84210c410721030c260b417f2003104b000b417f2008104b000b20082005104a000b2002200b36024c2002200f360250200241013a0020200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241206a360218200241d880046a200241d8006a103a20022802d88004210620022802dc8004210a20022802e080042108410521010c050b2002200b36024c2002200f360250411921010c030b417f2006104b000b20062005104a000b20032005104a000b0b200241f880046a2008360200200241f480046a200a360200200241f080046a2006360200200220043a00ed8004200220013a00ec80040b200241013a00e8800420022802ec800421090b0240200f450d002007200f4104746a210f0340024020072802082204450d0020072802002101200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d002003280200102f200528020021030b2003102f0b200141106a2101200441706a22040d000b0b200741106a21010240200741046a280200450d002007280200102f0b200121072001200f470d000b0b200b450d012012102f0c010b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022903e88004210c20022802f08004210802402003450d00200120034104746a210b200121090340024020092802082203450d0020092802002104200341047421030340024020042d00004109470d000240200441046a2207280200220528020441ffffffff0371450d002005280200102f200728020021050b2005102f0b200441106a2104200341706a22030d000b0b200941106a21040240200941046a280200450d002009280200102f0b200421092004200b470d000b0b200c422088210d41052109410021042006450d012001102f0c010b20094108762104200aad220d4220862006ad84210c2002280234450d002002280230102f0b20004101360200200041106a2008360200200041086a200d422086200c42ffffffff0f838437020020002004410874200941ff0171723602040c1c0b200241d8006a200110a3060240024020022802584101470d00200228025c22034108762105200241d8006a41086a290300220c422088210d200241e8006a28020021040c010b200241f880046a200241ec006a280200360200200241f080046a200241e4006a290200220c3703002002200229025c220d3703e88004200da72108200ca721054100210420022802f4800421014100210302400240024002400240024003402004411f4b0d020240024020052001460d002001417f460d032005200141016a22074f0d01200141016a2005104a000b200220053602f48004200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021012002280234210320022802382104410521080c050b200820016a2d0000220941ff00712004411f71742003722103200441076a2104200721012009418001710d000b200220073602f48004024020044120490d002009410f4d0d00410d21080c030b200241003602382002420437033041042101024002402003450d0041002105410021090340200241d8006a200241e880046a109c0620022f005d20022d005f4110747221072002280264210b2002280260210620022d005c210820022802584101460d020240024020092005460d002005210a200921040c010b200541016a22042005490d1a2005410174220a2004200a20044b1bad420c7e220c422088a70d1a200ca7220a4100480d1a0240024020050d00200a102d21010c010b20012005410c6c200a103121010b2001450d232002200136023020052104200a410c6e220a21050b20012004410c6c6a220420073b000120042006360204200420083a0000200441036a20074110763a0000200441086a200b3602002003200941016a2209470d000b2002200a360234200220093602380b20022802f4800420022802f880044621042002290234210c024020022802ec8004450d0020022802e88004102f0b200ca721072004450d06200c422088a7ad4220862007ad84210c410621030c1e0b2002200536023420022009360238200241e8006a28020021042005450d042001102f0c040b417f200141016a104b000b200220013602f48004410f21080b0b200220033602dc8004200220013602d88004200220043602e0800420022903d88004220c422088a7210b200ca72106410021070b200741ffffff07712205410874200841ff0171722103200bad220d4220862006ad84210c20022802ec8004450d0120022802e88004102f0c010b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a2002290330220c422088210d2002280238210441052103410021052007450d002001102f0b20004101360200200041106a2004360200200041086a200d422086200c42ffffffff0f838437020020002005410874200341ff0171723602040c1b0b200241d8006a200110a3060240024020022802584101470d00200228025c22034108762105200241d8006a41086a290300220c422088210d200241e8006a28020021040c010b200241f880046a200241ec006a280200360200200241f080046a200241e4006a290200220c3703002002200229025c220d3703e88004200da72108200ca721034100210420022802f480042101410021070240024002400240024002400240024002400240024003402004411f4b0d010240024020032001460d002001417f460d0a2003200141016a22054f0d01200141016a2003104a000b200220033602f48004200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a2002280230210b2002280234210620022802382104410521080c040b200820016a2d0000220941ff00712004411f71742007722107200441076a2104200521012009418001710d000b200220053602f48004024020044120490d002009410f4d0d00410d21080c020b4100210a200241003602e08004200242043703d8800420070d03410421014100210b0c060b200220013602f48004410f21080b0b200220043602e08004200220063602dc80042002200b3602d88004410021030c010b410421014101210a41002109024002400240034020032005460d01200541016a22042005490d0820032004490d09200820056a2c00002103200220043602f480040240200341004e0d00411921080c030b410721080240200341c000710d000c030b200341807f7222034170470d03200241d8006a200241e880046a109c0620022f005d20022d005f41107472210320022d005c2108024020022802584101470d0020034180feff0771410876210520022802682104200228026421062002280260210b0c040b200228026421052002280260210602400240200a417f6a22042009460d002009210b200421090c010b200941016a22042009490d1b2009410174220b2004200b20044b1bad420c7e220c422088a70d1b200ca722044100480d1b0240024020090d002004102d21010c010b20012009410c6c2004103121010b2001450d24200220013602d880042004410c6e210b0b20012009410c6c6a220420033b00012004200536020820042006360204200420083a0000200441036a20034110763a00002007200a460d05200a41016a210a20022802f48004210520022802f08004210320022802e880042108200b21090c000b0b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a2002280230210b2002280234210620022802382104410521080b0b200220093602dc80042002200a417f6a3602e080042005410874200341ff01717221032009450d002001102f0b200341ffffff07712205410874200841ff01717221032006ad220d422086200bad84210c20022802ec8004450d0620022802e88004102f0c060b2002200b3602dc80042002200a3602e080040b20022802f4800420022802f88004462104024020022802ec8004450d0020022802e88004102f0b2004450d03200aad422086200bad84210c410521030c1a0b417f200141016a104b000b417f2004104b000b20042003104a000b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a2002290330220c422088210d200228023821044105210341002105200b450d002001102f0b20004101360200200041106a2004360200200041086a200d422086200c42ffffffff0f838437020020002005410874200341ff0171723602040c1a0b200241d8006a200110a3060240024020022802584101470d00200228025c22034108762105200241d8006a41086a290300220c422088210d200241e8006a28020021040c010b200241ec006a280200210f200241e8006a2802002101200241e4006a2802002103200241e0006a280200210a200228025c210841002104410021070240024002400240024002400240024002400240024002400240034002402004411f4d0d00410f21030c030b20032001460d012001417f460d0a2003200141016a2205490d0c200820016a2d0000220941ff00712004411f71742007722107200441076a2104200521012009418001710d000b024020044120490d002009410f4d0d00410d21030c020b41002111200241003602382002420437033020070d0241042101410021090c030b200241013a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a20022802e88004210520022802ec8004210720022802f080042104410521030b200220043602e08004200220073602dc8004200220053602d880040c060b4104210141002109410021110340200921102011221441016a211120052104410021094100210b03402009411f4b0d030240024020032004460d002004417f460d0b2003200441016a22054f0d01200441016a2003104a000b2002201036023420022014360238200241013a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210520022802ec8004210720022802f080042104410521030c070b200820046a2d0000220641ff00712009411f7174200b72210b200941076a2109200521042006418001710d000b024020094120490d002006410f4b0d040b0240024020142010460d0020102109201421100c010b201041016a22042010490d1a201041017422092004200920044b1b220441ffffffff03712004470d1a200441027422044100480d1a0240024020100d002004102d21010c010b200120104102742004103121010b2001450d2320022001360230200441027621090b200120104102746a200b36020020112007470d000b20022009360234200220113602380b2005200f4621040240200a450d002008102f0b2004450d082011ad4220862009ad84210c410421030c1e0b2002201036023420022014360238410f21030c010b2002201036023420022014360238410d21030b0b2010450d002001102f0b2007ad220d4220862005ad84210c41002105200a450d042008102f0c040b417f200141016a104b000b417f200441016a104b000b200141016a2003104a000b20024103410220041b3a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a20022903e88004220c422088210d20022802f08004210441052103410021052009450d002001102f0b20004101360200200041106a2004360200200041086a200d422086200c42ffffffff0f838437020020002005410874200341ff0171723602040c190b200241d8006a200110a3060240024020022802584101470d00200228025c22044108762105200241d8006a41086a290300220c422088210d200241e8006a28020021030c010b200241f880046a200241ec006a280200360200200241f080046a200241e4006a2902003703002002200229025c3703e8800441002101410021050240024002400240024002400240024002400240024002400240034002402001411f4d0d00410f21040c030b20022802f08004220720022802f480042204460d01200441016a22032004490d0620072003490d0520022802e8800420046a2d00002104200220033602f48004200441ff00712001411f71742005722105200141076a21012004418001710d000b024020014120490d002004410f4d0d00410d21040c020b200241003602e08004200242043703d8800420050d02410421010c030b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021012002280234210520022802382103410521040b200220053602dc8004200220013602d88004200220033602e0800420022903d88004220c422088a72107200ca721090c0a0b20022802dc8004210a20022802e080042106410021130340200241d8006a200241e880046a1099062002280264210720022802602110200228025c2112024020022802584101470d002002280268210320102109201221040c090b200241d8006a200241e880046a1099062002280264211720022802602114200228025c210e024020022802584101470d00200228026821032014210920172107200e21040c080b02400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802f08004220320022802f480042209460d00200941016a22012009490d0520032001490d0620022802e88004220f20096a2d00002104200220013602f48004410021110240200441034d0d004109210b410021030c1c0b20040e0401020304010b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021092002290234210d4105210b41002111410021030c1a0b41002111410021044100210b034002402004411f4d0d00410f210b0c190b0240024020032001460d002001417f460d082003200141016a22084f0d01200141016a2003104a000b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021092002290234210d4105210b410021110c1a0b200f20016a2d00002109200220083602f48004200941ff00712004411f7174200b72210b200441076a2104200821012009418001710d000b4100211120044120490d112009410f4d0d11410d210b0c170b0240024020032001460d00200941026a21042001417f460d0720032004490d08200f20016a2c00002101200220043602f4800402402001417f4a0d00411921030c100b200141c00071450d0e200141807f7222014170470d0e200241d8006a200241e880046a109c062002290360210c200228025c210b20022802584101470d01200228026821040c100b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a2002290330210c20022802382104410521030c0e0b410121110c110b200241d8006a200241e880046a109c062002290360210c200228025c210b024020022802584101460d00410221110c110b20022002280268360260200b4180808078712111200b4180807c712103200b41087621040c0e0b0240024020032001460d00200941026a21082001417f460d0720032008490d08200f20016a2c00002104200220083602f480040240200441004e0d004119210b410021030c190b200441c000710d010c0b0b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a4105210b2002290234210d20022802302109410021030c170b200441807f72220441ff017141fb014d0d090240024020032008460d00200941036a21012008417f460d0920032001490d0a200f20086a2d00002108200220013602f48004410021030240200841014d0d00410c210b41002111200821040c190b2004417f7321094103211120080e021101110b200241013a00482002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241c8006a360218200241306a200241d8006a103a200228023021092002290234210d4105210b410021030c170b410121030c0f0b417f2001104b000b20012003104a000b417f200141016a104b000b417f2004104b000b20042003104a000b417f2008104b000b20082003104a000b417f2001104b000b20012003104a000b4106210b410021030c0c0b410721030b200141ff0171410874200372210b0b20022004360260200b4180808078712111200b4180807c712103200b41087621040b2002200c370358200229025c210d200ca721090c080b0b024002402006200a460d00200a21080c010b200a41016a2201200a490d19200a41017422042001200420014b1bad42287e220d422088a70d19200da722014100480d1902400240200a0d002001102d21040c010b20022802d88004200a41286c2001103121040b2004450d22200220043602d88004200a2106200141286e2208210a0b20022802d880042201200641286c6a2204200e36020c200420073602082004201036020420042012360200200441206a200c3702002004411c6a200b3602002004411a6a20033a0000200441196a20093a0000200441186a20113a0000200441146a2017360200200441106a2014360200200641016a2106201341016a22132005470d000b200220083602dc8004200220063602e080040b20022802f4800420022802f8800446210420022902dc8004220c422088210d024020022802ec8004450d0020022802e88004102f0b200da72105200ca721072004450d072005ad4220862007ad84210c410321030c1d0b20032007104a000b417f2003104b000b0b41002103410021040b200b41ff0171200441ff0171410874722003418080fc0771722011722104200d422088a72103200da721072014450d00200e102f0b2010450d002012102f0b2002200a3602dc8004200220063602e0800420022802d88004210802402006450d00200641286c21052008210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101200541586a22050d000b0b200a450d012008102f0c010b20024103410220041b3a00d88004200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241306a200241d8006a103a2002290330210c2002280238210302402005450d00200541286c21052001210403400240200441046a280200450d002004280200102f0b0240200441106a280200450d002004410c6a280200102f0b200441286a2104200541586a22050d000b0b200c422088210d41052104410021052007450d012001102f0c010b200441087621052007ad220d4220862009ad84210c20022802ec8004450d0020022802e88004102f0b20004101360200200041106a2003360200200041086a200d422086200c42ffffffff0f838437020020002005410874200441ff0171723602040c180b0c010b0b2013450d042014102f0c040b200241013a00d880042002410136026c2002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241d880046a360218200241e880046a200241d8006a103a20022802e88004210920022802ec8004210720022802f080042101410521100c010b0b2013450d002012102f0b20014110762104200141087621030b200341ff0171410874200141ff017172210320044110742106200f41ff0171410874210a20022802302105024020022802382201450d00200141047421042005210103400240200141046a280200450d002001280200102f0b200141106a2101200441706a22040d000b0b20032006722103200a20107221042002280234450d012005102f0c010b2007200a4621042002290234220c422088210d0240200b450d002008102f0b200da72105200ca7210702402004450d002005ad4220862007ad84210c410221030c0b0b20024103410220041b3a0030200241ec006a41013602002002420137025c200241b4afca003602582002412836021c2002200241186a3602682002200241306a360218200241e880046a200241d8006a103a20022903e88004210c20022802f08004210302402005450d00200541047421052001210403400240200441046a280200450d002004280200102f0b200441106a2104200541706a22050d000b0b200c422088210d41052104410021052007450d012001102f0c010b200441087621052007ad220d4220862009ad84210c200b450d002008102f0b20004101360200200041106a2003360200200041086a200d422086200c42ffffffff0f838437020020002005410874200441ff0171723602040c0d0b200241003602e08004200220053602dc8004200220063602d88004200241d8006a200241d880046a109d064101210f200228025c2107024020022802584101460d00024020070d004100210b41002103410021090c080b200241d8006a410041800810e7061a4101210f41002109410021044100210b0240034020022802dc8004221120022802e0800422036b2007200b6b22014180082001418008491b2201490d01200320016a220a2003490d042011200a490d05200241d8006a20022802d8800420036a200110e8061a2002200a3602e0800402400240200920046b2001490d00200120046a21030c010b200420016a22032004490d042009410174220a2003200a20034b1b220a4100480d040240024020090d00200a102d210f0c010b200f2009200a1031210f0b200f450d0d200a21090b200f20046a200241d8006a200110e8061a2003210420072001200b6a220b4d0d060c000b0b200241013a0048200241fc80046a4101360200200242013702ec8004200241b4afca003602e880042002412836021c2002200241186a3602f880042002200241c8006a360218200241306a200241e880046a103a2002290330220c422088a7210320022802382104200ca721054105210741002101024020090d00200521090c060b200f102f200521090c050b20074108762101200241d8006a41086a290300220c422088a72103200241e8006a2802002104200ca721090c040b1038000b2003200a104b000b200a2011104a000b200241d8006a200f2003106620022802584101470d0141082107024020090d000c010b200f102f0b2003ad4220862009ad84210c2008450d032006102f0c030b200f410876210b0b200520022802e080042207490d03200520076b2201417f4c0d040240024020010d00410121040c010b2001102d2204450d032004200620076a200110e8061a0b2003ad422086210c2009ad210d2001ad221b422086211c02402008450d002006102f0b200c200d84210c201c201b84210d200b410874200f41ff0171722101410121030b200020033a000420004100360200200041056a20022f00153b0000200041186a200d370200200041146a20043602002000410c6a200c370200200041086a2001360200200041206a2002290200370200200041076a200241176a2d00003a0000200041286a200241086a290200370200200041306a200241106a2802003602000c040b20004101360200200041106a2004360200200041086a200c37020020002001410874200741ff0171723602040c030b1036000b20072005104b000b103d000b2002418081046a24000ba80e01077f02402001450d002000200141306c6a210203402000220341306a21000240024020032d00002201410e4b0d00024002400240024002400240024002400240024002400240024020010e0f0001020304050607080e090e0a0b0c000b200341086a280200450d0d200341046a280200102f0c0d0b0240200341086a280200450d00200341046a280200102f0b200341146a280200450d0c200341106a280200102f0c0c0b02402003410c6a2802002204450d00200341046a28020021012004410474210403400240200141046a280200450d002001280200102f0b200141106a2101200441706a22040d000b0b200341086a280200450d0b2003280204102f0c0b0b02402003410c6a2802002204450d00200341046a2802002101200441286c210403400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101200441586a22040d000b0b200341086a280200450d0a2003280204102f0c0a0b200341086a280200450d09200341046a280200102f0c090b200341086a280200450d08200341046a280200102f0c080b200341086a280200450d07200341046a280200102f0c070b02402003410c6a2802002201450d00200341046a280200220520014104746a21060340024020052802082204450d0020052802002101200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d002008280200102f200728020021080b2008102f0b200141106a2101200441706a22040d000b0b200541106a21010240200541046a280200450d002005280200102f0b2001210520012006470d000b0b200341086a280200450d062003280204102f0c060b02402003410c6a2802002204450d00200341046a2802002101200441146c210403400240200141046a280200450d002001280200102f0b200141146a21012004416c6a22040d000b0b200341086a280200450d052003280204102f0c050b02402003410c6a2802002201450d00200341046a28020022052001411c6c6a21060340024020052802042201450d0002402005410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d002008280200102f200728020021080b2008102f0b200141106a2101200441706a22040d000b0b200541086a280200450d002005280204102f0b2005411c6a21010240200541146a280200450d002005280210102f0b2001210520012006470d000b0b200341086a280200450d042003280204102f0c040b02402003410c6a2802002201450d00200341046a2802002205200141186c6a210603400240200541046a280200450d002005280200102f0b0240200541146a2802002204450d00200528020c2101200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d002008280200102f200728020021080b2008102f0b200141106a2101200441706a22040d000b0b200541186a21010240200541106a280200450d00200528020c102f0b2001210520012006470d000b0b200341086a280200450d032003280204102f0c030b02402003410c6a2802002201450d00200341046a28020022052001411c6c6a21060340024020052802042201450d0002402005410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d002008280200102f200728020021080b2008102f0b200141106a2101200441706a22040d000b0b200541086a280200450d002005280204102f0b2005411c6a21010240200541146a280200450d002005280210102f0b2001210520012006470d000b0b200341086a280200450d022003280204102f0c020b0240200341046a2802002201450d00200341086a280200450d002001102f0b0240200341146a2802002201450d0002402003411c6a2802002204450d002004410c6c21040340024020012802002208450d00200141046a280200450d002008102f0b2001410c6a2101200441746a22040d000b0b200341186a280200450d002003280214102f0b200341246a2802002205450d0102402003412c6a2802002201450d00200520014104746a210603402005220741106a2105024020072802042201450d0002402007410c6a2802002204450d002004410c6c21040340024020012802002208450d00200141046a280200450d002008102f0b2001410c6a2101200441746a22040d000b0b200741086a280200450d002007280204102f0b20052006470d000b0b200341286a280200450d012003280224102f0c010b0240200341086a280200450d00200341046a280200102f0b0240200341146a2802002201450d00200341186a280200450d002001102f0b200341246a280200450d00200341206a280200102f0b20002002470d000b0b0b994d021b7f027e230041e0026b22022400200128020841546a2103200141106a28020041306c210402400240024002400240024002400240024002400240024003402004450d01200441506a21042003412c6a2105200341306a2206210320052d00004102470d000b200241e8006a200610d60341042107200228026c2208450d01200841047422044100480d0b200228026821032004102d2207450d052008410474210641002109200721040340200341086a2802002205417f4c0d042003410c6a2d0000210a2003280200210b0240024020050d004101210c0c010b2005102d220c450d070b200c200b200510e806210b2004410d6a2003410d6a2d00003a00002004410c6a200a3a0000200441086a2005360200200441046a20053602002004200b360200200441106a2104200941016a2109200341106a2103200641706a22060d000b20070d020b410421070b41002109410021080b200128021041306c2104200128020841546a2103024003404100210b41c8e1ca002106024020040d00410021040c020b200441506a21042003412c6a2105200341306a220a210320052d00004103470d000b200241e0006a200a10d6034100210420022802602203450d0020022802642104200321060b024020040d004101210d4100210e410021034100210f410421104100210a41002111410121124100210541002113410421144100210641002115410421160c020b200441286c210c2006411c6a2104410421104100210b4100210e4101210d410021034100210f4100210a41002111410121124100210541002113410421144100210641002115410421160340024002400240024002402004417c6a2d00000e0401020300010b2004417e6a22172d000021182004417d6a22192d0000211a0240200a2011470d00200a41016a221b200a490d0e200a410174221c201b201c201b4b1b221120116a221b2011490d0e201b4100480d0e02400240200a0d00201b102d21120c010b2012201c201b103121120b2012450d08201b41017621110b2012200a4101746a221b20184101713a0001201b201a3a000020172d0000211720192d000021180240200b200e470d00200b41016a221b200b490d0e200b410174221a201b201a201b4b1b221920196a221b2019490d0e201b4100480d0e02400240200b0d00201b102d210d0c010b200d201a201b1031210d0b200d450d08201b410176210e0b200a41016a210a200d200b4101746a221b20174101713a0001201b20183a0000200b41016a210b0c030b2004280200211b02402003200f470d00200341016a220f2003490d0d20034101742217200f2017200f4b1b220f41ffffffff0371200f470d0d200f410274220f4100480d0d0240024020030d00200f102d21100c010b20102003410274200f103121100b2010450d07200f410276210f0b201020034102746a201b360200200341016a21030c020b200241b8016a41086a221b200441086a280200360200200220042902003703b801024020052013470d00200541016a22132005490d0c200541017422172013201720134b1bad420c7e221d422088a70d0c201da722134100480d0c0240024020050d002013102d21140c010b20142005410c6c2013103121140b2014450d062013410c6e21130b20142005410c6c6a221720022903b801370200201741086a201b280200360200200541016a21050c010b200241b8016a41086a221b200441086a280200360200200220042902003703b801024020062015470d00200641016a22172006490d0b200641017422182017201820174b1bad420c7e221d422088a70d0b201da722174100480d0b0240024020060d002017102d21160c010b20162006410c6c2017103121160b2016450d052017410c6e21150b20162006410c6c6a221720022903b801370200201741086a201b280200360200200641016a21060b200441286a2104200c41586a220c450d020c000b0b103d000b2001280210221941306c21172001280208210c410021040240034020172004460d01200c20046a211b200441306a22182104201b2d00004104470d000b200241d8006a200c20186a41546a10d603200228025c2204450d002002280258210c200441027421172003410174211b200341027421040340200c280200211802402003200f470d00200341016a220f2003490d09201b200f201b200f4b1b220f41ffffffff0371200f470d09200f410274220f4100480d090240024020030d00200f102d21100c010b20102004200f103121100b2010450d03200f410276210f0b200c41046a210c201020046a2018360200201b41026a211b200441046a2104200341016a21032017417c6a22170d000b2001280208210c200128021021190b200c201941306c6a2117200c21040240034020172004460d0120042d0000211b200441306a22182104201b4105470d000b200241d0006a201841546a10d6032002280254410c6c2218450d00200228025021042005410174211b2005410c6c210c0340200441086a2117024002400240200441046a2802004101470d002002201728020022193602a0022004280200221a20194b0d010b200241003602700c010b200241023602cc01200242023702bc01200241e4d7ca003602b801200241013602d402200241013602cc022002201a3602b0022002200241c8026a3602c8012002200241b0026a3602d0022002200241a0026a3602c802200241f0006a200241b8016a103a2002280270450d00200241f0006a21040c070b2004290200211d200241b8016a41086a221920172802003602002002201d3703b801024020052013470d00200541016a22132005490d09201b2013201b20134b1bad420c7e221d422088a70d09201da722134100480d090240024020050d002013102d21140c010b2014200c2013103121140b2014450d032013410c6e21130b2004410c6a21042014200c6a221720022903b801370200201741086a2019280200360200201b41026a211b200c410c6a210c200541016a2105201841746a22180d000b2001280208210c200128021021190b200c201941306c6a2117200c21040240034020172004460d0120042d0000211b200441306a22182104201b4106470d000b200241c8006a201841546a10d603200228024c221b450d0020022802482104201b410c6c21172006410174211b2006410c6c210c0340200241b8016a200410a906024020022802b801450d00200241b8016a21040c070b2004290200211d200241b8016a41086a2218200441086a2802003602002002201d3703b801024020062015470d00200641016a22152006490d09201b2015201b20154b1bad420c7e221d422088a70d09201da722154100480d090240024020060d002015102d21160c010b2016200c2015103121160b2016450d032015410c6e21150b2004410c6a21042016200c6a221920022903b801370200201941086a2018280200360200201b41026a211b200c410c6a210c200641016a2106201741746a22170d000b2001280208210c200128021021190b200c201941306c6a2117200c21040240034020172004460d0120042d0000211b200441306a22182104201b4107470d000b200241c0006a201841546a10d6032002280244221b450d0020022802402204201b4104746a211a200a410174210c200241b8016a41047221190340200241b8016a2004200d200b10aa0602400240024020022d00b8014101460d00200220022d00b901221b3a00a0020240201b2004410c6a2d00002217470d00200241003602700c030b200241023602cc01200242023702bc01200241f8d8ca003602b801200241303602d402200241303602cc02200220173a00b0022002200241c8026a3602c8012002200241a0026a3602d0022002200241b0026a3602c802200241f0006a200241b8016a103a0c010b200241f0006a41086a201941086a280200360200200220192902003703700b02402002280270450d00200241f0006a21040c080b2004410c6a2d0000211b0b2004410d6a2d000021170240200a2011470d00200a41016a2218200a490d09200c2018200c20184b1b221120116a22182011490d0920184100480d0902400240200a0d002018102d21120c010b2012200c2018103121120b2012450d03201841017621110b2012200c6a2218201b3a0000201841016a20174101713a0000200c41026a210c200a41016a210a200441106a2204201a470d000b2001280208210c200128021021190b200241a8016a2003360200200241a4016a200f3602002002419c016a200936020020024198016a200836020020024190016a200a3602002002418c016a201136020020024184016a200536020020024180016a2013360200200220103602a001200220073602940120022012360288012002201436027c200220063602782002201536027420022016360270200c201941306c6a2105200c210402400340024020052004470d004100210a0c020b20042d00002103200441306a2206210420034104470d000b200241386a200641546a10d603200228023c210a0b2002200a3602ac01200c201941306c6a2105200c210402400340024020052004470d00410021040c020b20042d00002103200441306a220621042003410c470d000b2006415c6a28020021040b200220043602b001200a2004470d0102400240024002400240024002400240200a450d00200c201941306c6a2105200c2104034020052004460d0320042d00002103200441306a2206210420034104470d000b200c201941306c6a210a200c21040340200a2004460d0220042d00002103200441306a220521042003410c470d000b200241306a200641546a10d60320022802342204450d002002280230220c20044102746a211b2005415c6a2110200541546a2114200241f1016a21184100210b03402002200b3602b4012010280200210420142802002105200242013702bc01200241fc8fca003602b801200241013602b402200241013602cc012002200241b0026a3602c8012002200241b4016a3602b002200241c8026a200241b8016a103a20022802c802210320022902cc02211d024002402004200b4d0d000240201da7450d002003102f0b2002200c28020022043602a002024002400240200228029c0120044d0d0002400240024002402005200b41186c6a22032802142213450d0020022802940120044104746a22052d000d210f20052802002117200328020c2104200328020021162005280208221221060240024020032802082209450d002009410374210a20122103201621050340200320052802006a22062003490d02200541086a210520062103200a41786a220a0d000b0b4108102d2203450d132003200fad42ff0183422886370200200241b0026a41026a2205200241c8026a41026a2d00003a0000200220022f00c8023b01b0022002200f3a00f0012002418080013602ec0120024281808080103702e401200220033602e001200242808080808080103703d801200242013703d001200220063602cc01200220093602c801200220163602c401200220123602c001200220173602bc012002200241f0006a3602b801201820022f01b0023b0000201841026a20052d00003a000020134104742105410021030340200220033602f801200220043602fc0120024180026a200241b8016a200410ac060240200228028002450d00200241a0026a41086a20024180026a41086a28020036020020022002290380023703a002200241033602c402200242033702b402200241c488ca003602b002200241313602dc02200241013602d402200241323602cc022002200241c8026a3602c0022002200241a0026a3602d8022002200241f8016a3602d0022002200241fc016a3602c80220024190026a200241b0026a103a024020022802a402450d0020022802a002102f0b20022802900222060d050b200441106a2104200341016a2103200541706a22050d000b20022802e8010d04024020022802d401450d0020022802d001102f0b20022802e401450d0920022802e001102f0c090b4120102d2206450d12200641186a41002900d4df4a370000200641106a41002900ccdf4a370000200641086a41002900c4df4a370000200641002900bcdf4a3700000c010b4120102d2206450d11200641186a41002900bb884a370000200641106a41002900b3884a370000200641086a41002900ab884a370000200641002900a3884a3700000b41202104412021030c030b200229029402211d024020022802d401450d0020022802d001102f0b201d422088211e024020022802e401450d0020022802e001102f0b201ea72103201da721040c030b41dc88ca00413041f8b4ca001039000b200241013602cc01200242023702bc0120024184dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022902cc02221d422088a7210320022802c8022106201da721040b2006450d020b200220063602b00220022003ad4220862004ad843702b4022002200241b0026a36029002200241023602cc01200242023702bc012002418490ca003602b801200241333602d402200241013602cc022002200241c8026a3602c801200220024190026a3602d0022002200241b4016a3602c802200241a0026a200241b8016a103a024020022802b402450d0020022802b002102f0b20022802a0022204450d0120022902a402211d200020043602002000201d3702040c0e0b200020033602002000201d3702040c0d0b200b41016a210b200c41046a220c201b470d000b2001280208210c200128021021190b200c201941306c6a2105200c21040240034020052004460d0120042d00002103200441306a2206210420034109470d000b2002200641546a2802002204360290020240024020022802a80120044d0d00200220022802a00120044102746a28020022043602a002200228029c0120044b0d01200241cc016a4101360200200242023702bc0120024184dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a0c0c0b200241cc016a4101360200200242023702bc01200241e0dbca003602b801200241013602b4022002200241b0026a3602c801200220024190026a3602b002200241c8026a200241b8016a103a0c0b0b20022802940120044104746a220431000d4220862004350208844280808080c000520d070b200c201941306c6a210303402003200c460d04200c2d00002104200c41306a2205210c20044108470d000b200241286a200541546a221410d6030240200228022c2203450d00200341ffffffff01712003470d0e2003410374220a4100480d0e20022802282104200a102d220c450d082004200341146c6a21062003410274417c6a210b200c2103034020042802002105200341046a200441086a28020036020020032005360200200341086a2103200441146a22042006470d000b200a4103762110200b41027641016a21040c030b4104210c41002110410021040c020b41a48fca0041c80041ec8fca001055000b41f48eca00411e41948fca001055000b200c2004200241b8016a410041202004676b10a406024020044103742204450d00200c20046a210641012105200c2104200c21030340024002402005450d00200620046b41037620054d0d03200420054103746a21040c010b20062004460d020b200220033602a0020240200341046a2802002205200441046a280200470d002003280200220a2004280200220b460d04200a200b200510ea06450d040b200441086a210441002105200341086a22032006470d000b0b200241206a201410d603024020022802242204450d00200441146c2103200228022041106a2104024003400240024002400240024002402004417c6a2802000e0400030201000b20022004280200220536029002024020022802a80120054d0d00200220022802a00120054102746a28020022053602a002200228029c0120054b0d04200241013602cc01200242023702bc0120024184dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a0c070b200241cc016a4101360200200242023702bc01200241e0dbca003602b801200241013602b4022002200241b0026a3602c801200220024190026a3602b002200241c8026a200241b8016a103a0c060b2002200428020022053602a0020240024020022802900120054d0d0020022802880120054101746a2d0001450d05200241cc016a4101360200200242023702bc01200241c4dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a0c010b200241cc016a4101360200200242023702bc01200241a4dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a0b20022802c8022104200020022902cc02370204200020043602000c090b2002200428020022053602a002200228027820054b0d02200241013602cc01200242023702bc0120024190dbca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022802c8022205450d02200020022902cc02370204200020053602000c080b2002200428020022053602a00220022802840120054b0d01200241cc016a4101360200200242023702bc01200241c0dbca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022802c8022104200020022902cc02370204200020043602000c070b201d428080808080608320022802940120054104746a220535020884200531000d42208684211d0b200441146a21042003416c6a22030d000c020b0b20022802c8022104200020022902cc02370204200020043602000c030b2010450d00200c102f0b2001280210220b41306c21042001280208220c41546a2103024003402004450d01200441506a21042003412c6a2105200341306a2206210320052d00004103470d000b200241186a200610d603200228021c2204450d0020022802182105200441286c210641002104034002400240024002400240200520046a220341186a2d00000e0401000302010b200341206a2802004101470d032003411c6a280200210a2002200341246a280200220336029002200a20034d0d03200241023602cc01200242023702bc01200241e4d7ca003602b801200241013602d402200241013602cc022002200a3602a0022002200241c8026a3602c8012002200241a0026a3602d002200220024190026a3602c802200241b0026a200241b8016a103a20022802b0022203450d03200020022902b402370204200020033602000c0c0b20022003411c6a28020022033602a002200228029c0120034b0d02200241cc016a4101360200200242023702bc0120024184dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022802c8022104200020022902cc02370204200020043602000c0b0b2003411a6a2d0000450d012003410c6a2802002104200341146a2802002103200241b8016a41146a4101360200200220033602b402200220043602b002200241043602a402200242013702bc01200241cc90ca003602b8012002200241b0026a3602a0022002200241a0026a3602c801200241c8026a200241b8016a103a200041086a200241c8026a41086a280200360200200020022903c8023702000c0a0b200241b8016a2003411c6a10a90620022802b801450d00200020022903b801370200200041086a200241b8016a41086a2802003602000c090b2006200441286a2204470d000b0b02400240024002400240200228028401220441014b0d002002280278220441014b0d01200b41306c2104200c41546a2103024003402004450d01200441506a21042003412c6a2105200341306a2206210320052d0000410d470d000b200241106a200610d603200228021022042002280214411c6c6a210502400240034020042005460d032002200428020022033602a0020240200228027820034b0d00200241013602cc01200242023702bc0120024190dbca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022802c80222030d070b200441046a2204280200450d01200241b8016a200420022802880120022802900110aa0620022d00b8014101460d02200441186a210420022d00b901450d000b4120102d2204450d0b200441186a41002900a5914a370000200441106a410029009d914a370000200441086a4100290095914a3700002004410029008d914a370000200042a08080808004370204200020043602000c0e0b4129102d2204450d0a200441286a41002d008c914a3a0000200441206a4100290084914a370000200441186a41002900fc904a370000200441106a41002900f4904a370000200441086a41002900ec904a370000200441002900e4904a370000200042a98080809005370204200020043602000c0d0b200020022902bc01370200200041086a200241c4016a2802003602000c0c0b200b41306c2104200c41546a2103024003402004450d01200441506a21042003412c6a2105200341306a2206210320052d0000410a470d000b200241086a200610d603200228020c2204450d002002280208220a2004411c6c6a210b02400240024002400340200a450d052002200a28020022043602a00220022802840120044d0d09200a280204450d01200241b8016a200a41046a20022802880120022802900110aa0620022d00b8014101460d0220022d00b9010d032002200a10af060240024020022802042204450d00200228020021032004410274210520022802a8012106034020022003280200220436029002200620044d0d07200220022802a00120044102746a28020022043602a002200228029c0120044d0d02201d428080808080608320022802940120044104746a220435020884200431000d42208684211d200341046a21032005417c6a22050d000b0b200a411c6a220a200b460d060c010b0b200241013602cc01200242023702bc0120024184dcca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a0c090b412a102d2204450d0c200441286a41002f00d5914a3b0000200441206a41002900cd914a370000200441186a41002900c5914a370000200441106a41002900bd914a370000200441086a41002900b5914a370000200441002900ad914a370000200042aa808080a005370204200020043602000c0f0b200020022902bc01370200200041086a200241c4016a2802003602000c0e0b4120102d2204450d0a200441186a41002900a5914a370000200441106a410029009d914a370000200441086a4100290095914a3700002004410029008d914a370000200042a08080808004370204200020043602000c0d0b200241cc016a4101360200200242023702bc01200241e0dbca003602b801200241013602b4022002200241b0026a3602c801200220024190026a3602b002200241c8026a200241b8016a103a0c050b2000410036020002402002280274450d002002280270102f0b0240200228028001450d00200228027c102f0b0240200228028c01450d00200228028801102f0b0240200228029c012203450d0020022802940121042003410474210303400240200441046a280200450d002004280200102f0b200441106a2104200341706a22030d000b0b0240200228029801450d00200228029401102f0b024020022802a401450d0020022802a001102f0b200e450d0d200d102f0c0d0b200241cc016a4101360200200242013702bc01200241d490ca003602b801200241013602b402200220043602a0022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a200041086a200241c8026a41086a280200360200200020022903c8023702000c0a0b200241cc016a4101360200200242013702bc01200241dc90ca003602b801200241013602b402200220043602a0022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a200041086a200241c8026a41086a280200360200200020022903c8023702000c090b200020022902cc02370204200020033602000c080b200241cc016a4101360200200242023702bc01200241c0dbca003602b801200241013602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a20022802c8022104200020022902cc02370204200020043602000c070b20022802c8022104200020022902cc02370204200020043602000c060b200241cc016a4101360200200242013702bc01200241c490ca003602b801200241343602b4022002200241b0026a3602c8012002200241a0026a3602b002200241c8026a200241b8016a103a200041086a200241c8026a41086a280200360200200020022903c8023702000b2010450d04200c102f0c040b412d102d2204450d00200441256a41002900b9904a370000200441206a41002900b4904a370000200441186a41002900ac904a370000200441106a41002900a4904a370000200441086a410029009c904a37000020044100290094904a370000200042ad808080d005370204200020043602000c030b1036000b200241cc016a4102360200200241d4026a4101360200200242023702bc01200241e48eca003602b801200241013602cc022002200241c8026a3602c8012002200241b0016a3602d0022002200241ac016a3602c802200241b0026a200241b8016a103a200041086a200241b0026a41086a280200360200200020022903b0023702000c010b20022802c8022104200020022902cc02370204200020043602000b02402002280274450d002002280270102f0b0240200228028001450d00200228027c102f0b0240200228028c01450d00200228028801102f0b0240200228029c012203450d0020022802940121042003410474210303400240200441046a280200450d002004280200102f0b200441106a2104200341706a22030d000b0b0240200228029801450d00200228029401102f0b024020022802a401450d0020022802a001102f0b200e450d01200d102f0c010b20002004290200370200200041086a200441086a2802003602000240200e450d00200d102f0b02402015450d002016102f0b02402013450d002014102f0b02402011450d002012102f0b02402009450d00200941047421032007210403400240200441046a280200450d002004280200102f0b200441106a2104200341706a22030d000b0b02402008450d002007102f0b200f450d002010102f0b200241e0026a24000f0b1038000b971401187f23004190026b2202240002400240024002400240200028020022034190bdc600460d00200028020421040c010b41002104200241286a410041d80010e7061a2002410f6a220542003700002002420037010a41ec00102d2203450d0120034100360200200320022902083702042003410b6a2005290000370000200341136a200241276a41d90010e8061a20004100360204200020033602000b200141ff017121060240024002400240034041002105024020032f01062207450d0041002105410c21080340024020072005470d00200721050c020b200320056a2109200841086a2108200541016a210502404100417f4101200941086a2d0000220920064b1b20092006461b41016a0e03000401000b0b2005417f6a21050b02402004450d002004417f6a2104200320054102746a41ec006a28020021030c010b0b2000200028020841016a360208024002400240200341066a22082f01002204410b490d0020034190bdc600460d04200241286a410041d80010e7061a200241003a001941ec00102d220a450d07200a4100360200200a410036000f200a4200370007200a20022f01183b0005200a41136a200241276a41d90010e8061a2003410e6a2d0000210b2003280248210c2003280244210d200a41086a2003410f6a20032f010641796a220410e8062106200a41146a200341cc006a200441037410e8062107200341063b0106200a20043b010620054107490d0120062005417a6a22086a2006200541796a22056a2206200441ffff037120056b10e9061a200620013a0000200720084103746a200720054103746a2204200a41066a22082f010020056b41037410e9061a200441013602000c020b200341086a2208200541016a22066a200820056a2208200420056b10e9061a200820013a0000200341146a220820064103746a200820054103746a220820032f010620056b41037410e9061a20084101360200200320032f010641016a3b01060c050b200341086a2204200541016a22066a200420056a220420082f010020056b10e9061a200420013a0000200341146a220420064103746a200420054103746a220420082f010020056b41037410e9061a200441013602000b200820082f010041016a3b01000240200328020022070d004100210e0c030b200341046a2103200241276a41016a210f200241a8016a2110200241a0016a211120024198016a211220024190016a211320024180016a41086a21144100210e034020032f0100210602400240024020072f01062203410b490d00200f410041d80010e7061a200241003a0019200220022f01183b0108200241b7016a200241276a41d90010e8061a20104200370300201142003703002012420037030020134200370300201442003703002002420037038001419c01102d2208450d08200841003602002008410036000f20084200370007200820022f01083b0005200841136a200241b7016a41d90010e8061a20084194016a20102903003702002008418c016a201129030037020020084184016a2012290300370200200841fc006a2013290300370200200841f4006a2014290300370200200820022903800137026c200741c8006a2802002115200741c4006a28020021162007410e6a2d00002117200841086a2007410f6a20072f0106220541796a220310e8062118200841146a200741cc006a200341037410e8062119200841ec006a20074188016a2005417a6a220941027410e8062101200741063b0106200820033b010602402009450d00410021032001210503402005280200220420033b010420042008360200200541046a21052009200341016a2203470d000b0b20064107490d0120182006417a6a22056a2018200641796a22036a220420082f010620036b10e9061a2004200b3a0000201920054103746a201920034103746a220420082f010620036b41037410e9061a2004200d3602002004200c360204200820082f010641016a22043b01062006410274220b20016a416c6a200120054102746a2209200441ffff0371220620056b41027410e9061a2009200a36020020062005490d022008200b6a41d4006a2105034020052802002204200341016a22033b010420042008360200200541046a210520032006490d000c030b0b200741086a2208200641016a22056a200820066a2208200320066b220410e9061a2008200b3a0000200741146a220820054103746a200820064103746a2208200441037410e9061a2008200d3602002008200c3602042007200341016a22033b01062006410274200741ec006a22086a41086a200820054102746a2208200341ffff0371220420056b41027410e9061a2008200a360200200620044f0d0620072005417f6a22034102746a41f0006a2105034020052802002208200341016a22033b010420082007360200200541046a210520032004490d000c070b0b200741086a2205200641016a22036a200520066a220520072f0106220420066b220910e9061a2005200b3a0000200741146a220520034103746a200520064103746a2205200941037410e9061a2005200d3602002005200c3602042007200441016a22053b010620064102742201200741ec006a22046a41086a200420034102746a2209200541ffff0371220420036b41027410e9061a2009200a360200200620044f0d00200720016a41f0006a2103034020032802002205200641016a22063b010420052007360200200341046a210320042006470d000b0b200e41016a210e0240200728020022050d002008210a2015210c2016210d2017210b0c040b200741046a2103200521072017210b2016210d2015210c2008210a0c000b0b200320086a42013702000c020b4195b4ca00412d41f8b4ca001039000b200241276a41016a410041d80010e7061a2002410f6a220342003700002002420037010a200220022902083703182002200329000037001f200241b7016a200241276a41d90010e8061a200241a8016a22054200370300200241a0016a2208420037030020024198016a2204420037030020024190016a2206420037030020024188016a220742003703002002420037038001419c01102d2203450d0120034100360200200320022903183702042003410b6a200229001f370000200341136a200241b7016a41d90010e8061a20034194016a20052903003702002003418c016a200829030037020020034184016a2004290300370200200341fc006a2006290300370200200341f4006a2007290300370200200320022903800137026c20032000280200220536026c2000200336020020002000280204220841016a360204200541003b0104200520033602002008200e470d0220032f01062205410a4b0d03200320054103746a220841186a200c360200200841146a200d360200200320056a41086a200b3a00002003200541016a22054102746a41ec006a200a360200200320053b0106200a20053b0104200a20033602000b20024190026a24000f0b1036000b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000bb02711067f017e017f017e017f017e027f017e017f017e017f017e017f017e157f067e027f2001410c6a28020021022001280208210302400240200141106a28020022040d0041002105410021064100210742002108410421094200210a4104210b4200210c4104210d41002101410021044104210e4200210f4104211042002111410421124200211341042114420021150c010b410021074100210641002105410021164100211741002118410021194100211a4100211b4100211c4100210102400340201d21142001211e024020032004417f6a220441306c6a22012d000022124110470d002014211d201e21010c020b200128002c211f200128002821202001280024212120012800202122200128001c2123200128001821242001280014212520012800102126200129000821082001280004210e4101210102400240024002400240024002402012417e6a2210410b4b2227450d00410121280c010b200e211d41012128410121294101212a4101210d410121094101210b0240024002400240024002400240024002400240024002400240024002400240024020100e0c000102030405061607150809000b0240201c0d00201e21012014211d200e211c2008212b0c160b0240202b422088a72201450d002001410474211d201c210103400240200141046a280200450d002001280200102f0b200141106a2101201d41706a221d0d000b0b4100210b41012101202ba7450d0f201c102f0c0f0b0240201b0d00201e21012014211d200e211b2008210f0c150b0240200f422088a72201450d00200141286c211d201b210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101201d41586a221d0d000b0b4100210941012101200fa7450d0d201b102f0c0d0b201a450d0b202ca7450d0b201a102f0c0b0b2019450d09202da7450d092019102f0c090b2018450d072011a7450d072018102f0c070b024020170d00201e21012014211d200e21172008210c0c110b0240200c422088a72201450d00201720014104746a21292017210d03400240200d280208221d450d00200d2802002101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41106a21010240200d41046a280200450d00200d280200102f0b2001210d20012029470d000b0b4101212841002101200ca7450d052017102f0c050b024020160d00201e21012014211d200e21162008210a0c100b0240200a422088a72201450d00200141146c211d2016210103400240200141046a280200450d002001280200102f0b200141146a2101201d416c6a221d0d000b0b4100212841012101200aa7450d032016102f0c030b02402007450d000240202e422088a72201450d0020072001411c6c6a21292007210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012029470d000b0b202ea7450d002007102f0b4100212941012101200e21072008212e410121280c0a0b02402006450d000240202f422088a72201450d002006200141186c6a21292006210d03400240200d41046a280200450d00200d280200102f0b0240200d41146a280200221d450d00200d28020c2101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41186a21010240200d41106a280200450d00200d28020c102f0b2001210d20012029470d000b0b202fa7450d002006102f0b4100212a41012101200e21062008212f41012128410121290c0a0b02402005450d0002402030422088a72201450d0020052001411c6c6a21292005210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012029470d000b0b2030a7450d002005102f0b4100210d41012101200e21052008213041012128410121294101212a0c0a0b2008210a200e21160c060b2008210c200e21170c050b201e21012014211d200e2118200821110c090b201e21012014211d200e21192008212d0c080b201e21012014211d200e211a2008212c0c070b2008210f200e211b41012128410121294101212a4101210d4101210b0c050b2008212b200e211c41012128410121294101212a4101210d410121090c040b410121290b4101212a0b4101210d0b410121094101210b0b2008422088a721312008a7213202400240024020270d00024002400240024002400240024002400240024020100e0c000102030405060a070a0809000b200b450d0b02402031450d002031410474211d200e210103400240200141046a280200450d002001280200102f0b200141106a2101201d41706a221d0d000b0b2032450d0b0c0a0b2009450d0a02402031450d00203141286c211d200e210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101201d41586a221d0d000b0b20320d090c0a0b41000d0920320d080c090b41000d0820320d070c080b41000d0720320d060c070b2001450d0602402031450d00200e20314104746a2110200e210d03400240200d280208221d450d00200d2802002101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41106a21010240200d41046a280200450d00200d280200102f0b2001210d20012010470d000b0b20320d050c060b2028450d0502402031450d00203141146c211d200e210103400240200141046a280200450d002001280200102f0b200141146a2101201d416c6a221d0d000b0b20320d040c050b2029450d0402402031450d00200e2031411c6c6a2110200e210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012010470d000b0b20320d030c040b202a450d0302402031450d00200e203141186c6a2110200e210d03400240200d41046a280200450d00200d280200102f0b0240200d41146a280200221d450d00200d28020c2101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41186a21010240200d41106a280200450d00200d28020c102f0b2001210d20012010470d000b0b20320d020c030b200d450d0202402031450d00200e2031411c6c6a2110200e210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012010470d000b0b20320d010c020b02402012410e4b0d00201e21012014211d0240024002400240024002400240024002400240024020120e0f0001020304040405060e070e08090a000b20320d0b0c0c0b02402032450d00200e102f0b2025450d0b2026102f0c0b0b02402031450d002031410474211d200e210103400240200141046a280200450d002001280200102f0b200141106a2101201d41706a221d0d000b0b20320d090c0a0b2031450d00203141286c211d200e210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101201d41586a221d0d000b0b20320d070c080b02402031450d00200e20314104746a2110200e210d03400240200d280208221d450d00200d2802002101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41106a21010240200d41046a280200450d00200d280200102f0b2001210d20012010470d000b0b20320d060c070b02402031450d00203141146c211d200e210103400240200141046a280200450d002001280200102f0b200141146a2101201d416c6a221d0d000b0b20320d050c060b02402031450d00200e2031411c6c6a2110200e210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012010470d000b0b20320d040c050b02402031450d00200e203141186c6a2110200e210d03400240200d41046a280200450d00200d280200102f0b0240200d41146a280200221d450d00200d28020c2101201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41186a21010240200d41106a280200450d00200d28020c102f0b2001210d20012010470d000b0b20320d030c040b02402031450d00200e2031411c6c6a2110200e210d03400240200d2802042201450d000240200d410c6a280200221d450d00201d410474211d0340024020012d00004109470d000240200141046a220b280200220928020441ffffffff0371450d002009280200102f200b28020021090b2009102f0b200141106a2101201d41706a221d0d000b0b200d41086a280200450d00200d280204102f0b200d411c6a21010240200d41146a280200450d00200d280210102f0b2001210d20012010470d000b0b20320d020c030b0240200e450d002032450d00200e102f0b02402025450d0002402023450d002023410c6c211d202521010340024020012802002209450d00200141046a280200450d002009102f0b2001410c6a2101201d41746a221d0d000b0b2024450d002025102f0b2021450d020240201f450d002021201f4104746a210e2021210d0340200d220b41106a210d0240200b2802042201450d000240200b410c6a280200221d450d00201d410c6c211d0340024020012802002209450d00200141046a280200450d002009102f0b2001410c6a2101201d41746a221d0d000b0b200b41086a280200450d00200b280204102f0b200d200e470d000b0b2020450d022021102f0c020b02402032450d00200e102f0b02402025450d002024450d002025102f0b2021450d012022102f0c010b200e102f0b201e21012014211d0b20040d000b410021040b200a420020161b2115200c420020171b21082011420020181b2113202d420020191b210a202c4200201a1b2111200f4200201b1b210c202b4200201c1b210f2016410420161b21142017410420171b21092018410420181b21122019410420191b210b201a4104201a1b2110201b4104201b1b210d201c4104201c1b210e0b4104410010cd0420004188016a200436020020004184016a20023602002000200336028001200041f8006a2030420020051b22303e020020002005410420051b360274200041ec006a202f420020061b222f3e020020002006410420061b360268200041e0006a202e420020071b222e3e020020002007410420071b36025c200041d8006a201d36020020002001360254200041d0006a20154220883e0200200041cc006a20153e020020002014360248200041c4006a20084220883e0200200041c0006a20083e02002000200936023c200041386a20134220883e0200200041346a20133e0200200020123602302000412c6a200a4220883e0200200041286a200a3e02002000200b360224200041206a20114220883e02002000411c6a20113e020020002010360218200041146a200c4220883e0200200041106a200c3e02002000200d36020c2000200f4220883e02082000200f3e02042000200e360200200041fc006a20304220883e0200200041f0006a202f4220883e0200200041e4006a202e4220883e02000bbb05010e7f230041106b22022400024002400240024020012802004101470d00200141106a2d000021032001410c6a2802002104200141086a280200210520012f0112210620012d0011210720012802042108200241086a200010d60302400240200228020c2209450d0020022802082101200941047441706a410476210a0240200741ff0171220b4104460d004100210c200341ff0171210d0340200c2109024020012d000c200d470d0020012802082004470d0002402001280200220c2008460d002004450d002004210e2008210f0340200c2d0000200f2d0000470d02200c41016a210c200f41016a210f200e417f6a220e0d000b0b20012d000d220c200b470d00200c4104470d040b200141106a2101200941016a210c2009200a470d000c020b0b4100210c200341ff0171210d0340200c2109024020012d000c200d470d0020012802082004470d0002402001280200220c2008460d002004450d002004210e2008210f0340200c2d0000200f2d0000470d02200c41016a210c200f41016a210f200e417f6a220e0d000b0b20012d000d4104460d030b200141106a2101200941016a210c2009200a470d000b0b024020002802082201200041046a280200470d00200141016a22092001490d042001410174220c2009200c20094b1b220941ffffffff00712009470d04200941047422094100480d040240024020010d002009102d21010c010b200028020020014104742009103121010b2001450d0320002001360200200041046a2009410476360200200028020821010b200028020020014104746a220120063b010e200120073a000d200120033a000c2001200436020820012005360204200120083602002000200028020841016a3602082002200010d6032002280204417f6a21090c040b2005450d032008102f0c030b200128020421090c020b1036000b1038000b200241106a240020090bec2103137f017e1a7f230041306b220224002002410436020020012802042103200128020021044101210502400240024002400240200128020822060d0041002107410121080c010b4130102d2207450d012007200636000c200720033600082007200436000420022007360200200741023a000041002108410121070b200141106a2802002109200128020c210a02400240200141146a280200220b0d002007210c0c010b2007410174220c200741016a220d200c200d4b1b220c41306c210d0240024020070d00200d102d210d0c010b2002280200200741306c200d1031210d0b200d450d012002200d360200200d200741306c6a220d41033a0000200d20022f002d3b0001200d200b36000c200d2009360008200d200a360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a2107410021050b2001411c6a280200210e2001280218210f4100211002400240200141206a28020022110d00410021120c010b02402007200c470d0041000d0341000d03200c410174220d200c41016a2213200d20134b1bad42307ea7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41043a0000200d20022f002d3b0001200d201136000c200d200e360008200d200f360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a29020037020041012112200741016a21070b200141286a28020021132001280224211402402001412c6a2802002211450d0002402007200c470d0041000d03200c410174220d200c41016a2210200d20104b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41053a0000200d20022f002d3b0001200d201136000c200d2013360008200d2014360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a29020037020041012110200741016a21070b200141346a28020021162001280230211702400240200141386a28020022110d00410021180c010b02402007200c470d0041000d03200c410174220d200c41016a2219200d20194b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41063a0000200d20022f002d3b0001200d201136000c200d2016360008200d2017360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a29020037020041012118200741016a21070b200141c0006a280200211a200128023c211b4101211902400240200141c4006a280200221c0d004101211d0c010b02402007200c470d0041000d03200c410174220d200c41016a2211200d20114b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41073a0000200d20022f002d3b0001200d201c36000c200d201a360008200d201b360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a21074100211d0b200141cc006a280200211e2001280248211f0240200141d0006a2802002220450d0002402007200c470d0041000d03200c410174220d200c41016a2211200d20114b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41083a0000200d20022f002d3b0001200d202036000c200d201e360008200d201f360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a200241046a41086a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a2107410021190b41012121024020012802544101470d00200141d8006a280200211102402007200c470d0041000d03200c410174220d200c41016a2222200d20224b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d41093a0000200d20022f002d3b0001200d2011360204200d2002290204370208200d41036a2002412f6a2d00003a0000200d41106a2002410c6a290200370200200d41186a200241046a41106a290200370200200d41206a200241046a41186a290200370200200d41286a200241046a41206a290200370200200741016a21070b200141e0006a2802002123200128025c21220240200141e4006a2802002224450d0002402007200c470d0041000d03200c410174220d200c41016a2211200d20114b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d410a3a0000200d20022f002d3b0001200d202436000c200d2023360008200d2022360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a2107410021210b200141ec006a2802002125200128026821264101211102400240200141f0006a28020022270d00410121280c010b02402007200c470d0041000d03200c410174220d200c41016a2229200d20294b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d410c3a0000200d20022f002d3b0001200d202736000c200d2025360008200d2026360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a2107410021280b200141f8006a280200212a200128027421290240200141fc006a280200222b450d0002402007200c470d0041000d03200c410174220d200c41016a2211200d20114b1bad42307e2215422088a70d032015a7220d4100480d0302400240200c0d00200d102d210c0c010b2002280200200c41306c200d1031210c0b200c450d022002200c360200200d41306e210c0b2002280200200741306c6a220d410d3a0000200d20022f002d3b0001200d202b36000c200d202a360008200d2029360004200d2002290204370210200d41036a2002412f6a2d00003a0000200d41186a2002410c6a290200370200200d41206a200241146a290200370200200d41286a200241046a41186a290200370200200741016a2107410021110b20014184016a280200212c200128028001210d02400240200c20076b20014188016a28020041306c222d41306d222e490d00200228020021010c010b2007202e6a22012007490d02200c410174222f2001202f20014b1bad42307e2215422088a70d022015a7222f4100480d0202400240200c0d00202f102d21010c010b2002280200200c41306c202f103121010b2001450d0120022001360200202f41306e210c0b2001200741306c6a200d202d10e8061a0240202c450d00200d102f0b418006102d220d450d002000200136020820004280c2cdeb16370200200041106a2007202e6a3602002000410c6a200c360200200d102f2011450d020240202b450d002029202b411c6c6a2111202921000340024020002802042201450d0002402000410c6a2802002207450d00200741047421070340024020012d00004109470d000240200141046a220d280200220c28020441ffffffff0371450d00200c280200102f200d280200210c0b200c102f0b200141106a2101200741706a22070d000b0b200041086a280200450d002000280204102f0b2000411c6a21010240200041146a280200450d002000280210102f0b2001210020012011470d000b0b202a450d022029102f0c020b1036000b1038000b02402028450d0002402027450d002026202741186c6a21112026210003400240200041046a280200450d002000280200102f0b0240200041146a2802002207450d00200028020c2101200741047421070340024020012d00004109470d000240200141046a220d280200220c28020441ffffffff0371450d00200c280200102f200d280200210c0b200c102f0b200141106a2101200741706a22070d000b0b200041186a21010240200041106a280200450d00200028020c102f0b2001210020012011470d000b0b2025450d002026102f0b02402021450d0002402024450d0020222024411c6c6a2111202221000340024020002802042201450d0002402000410c6a2802002207450d00200741047421070340024020012d00004109470d000240200141046a220d280200220c28020441ffffffff0371450d00200c280200102f200d280200210c0b200c102f0b200141106a2101200741706a22070d000b0b200041086a280200450d002000280204102f0b2000411c6a21010240200041146a280200450d002000280210102f0b2001210020012011470d000b0b2023450d002022102f0b02402019450d0002402020450d00202041146c2107201f210103400240200141046a280200450d002001280200102f0b200141146a21012007416c6a22070d000b0b201e450d00201f102f0b0240201d450d000240201c450d00201b201c4104746a2111201b21000340024020002802082207450d0020002802002101200741047421070340024020012d00004109470d000240200141046a220d280200220c28020441ffffffff0371450d00200c280200102f200d280200210c0b200c102f0b200141106a2101200741706a22070d000b0b200041106a21010240200041046a280200450d002000280200102f0b2001210020012011470d000b0b201a450d00201b102f0b02402016410047201841017371450d002017102f0b02402013410047201041017371450d002014102f0b0240200e410047201241017371450d00200f102f0b02402005450d000240200b450d00200b41286c2107200a210103400240200141046a280200450d002001280200102f0b0240200141106a280200450d002001410c6a280200102f0b200141286a2101200741586a22070d000b0b2009450d00200a102f0b02402008450d0002402006450d00200641047421072004210103400240200141046a280200450d002001280200102f0b200141106a2101200741706a22070d000b0b2003450d002004102f0b200241306a24000bf70203037f017e017f410121020240200041086a2802002203417f6a220420034f0d00200420034b0d00200028020020044104746a220329020421052003200141016aad3702042005a721042005422088a721030240024002400240200041086a28020022024101460d002002450d0120002802002002417e6a4104746a22022802042004470d002002200228020820036a360208410021020c040b410021022003450d030240200041146a2802002202200041106a280200470d00200241016a22012002490d03200241017422062001200620014b1b220141ffffffff01712001470d03200141037422014100480d030240024020020d002001102d21020c010b200028020c20024103742001103121020b2002450d022000200236020c200041106a2001410376360200200028021421020b200028020c20024103746a22022003360204200220043602002000200028021441016a36021441000f0b41c5bdca00413f4184beca001055000b1036000b1038000b20020b911302147f027e23004180026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110a5062003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00200b200b417f6a220d2000200b4103746a280200220e2000200d4103746a280200220f4922101b2211200b41016a2212200d200b20101b200020124103746a280200220b200f200e20101b220d49220f1b200b200d200f1b200020114103746a2802004922131b210b200c200c417f6a220d2000200c4103746a28020022112000200d4103746a280200221249220e1b2214200c4101722206200d200c200e1b200020064103746a280200220c20122011200e1b220d4922111b200c200d20111b200020144103746a2802004922141b210c200a200a417f6a22122000200a4103746a2802002206200020124103746a280200221549220d1b2216200a41016a22172012200a200d1b200020174103746a280200220a20152006200d1b22064922121b200a200620121b200020164103746a2802004922061b210a41024101200d1b200d20121b20066a200e6a20116a20146a20106a200f6a20136a210d0b200d2000200c4103746a280200220e2000200a4103746a280200220f4922106a2000200b4103746a280200220d200f200e20101b221149220f6a210e200d2011200f1b2000200c200a20101b220d4103746a280200490d01200b200a200c20101b200f1b210d0c020b2000200110c5060c0f0b200e41016a220e410c490d0002402001410176220b450d00200020014103746a41786a210a2000210c0340200c2902002118200c200a290200370200200a2018370200200c41086a210c200a41786a210a200b417f6a220b0d000b0b2001200d417f736a210d4101210a0c010b200e45210a0b0240200a452009724101710d002000200110c6060d0d0b2002450d02200d20014f0d01024020022802002000200d4103746a220a2802004f0d0020002108200121070c040b200029020021182000200a290200370200200a2018370200200041786a210f200041086a211120002902002218a721104100210c2001210b03400240200c200b417f6a220d4f0d002011200c4103746a210a0340200a28020020104b0d01200a41086a210a200d200c41016a220c470d000b200d210c0b200f200b4103746a210a02400340200c200b417f6a220b4f0d01200a280200210d200a41786a220e210a200d20104b0d000b2011200c4103746a220a2902002119200a200e41086a220d290200370200200d2019370200200c41016a210c0c010b0b2000201837020002402001200c41016a220a490d002000200a4103746a21002001200a6b220141154f0d010c0c0b0b200a2001104b000b41d4bbca00200d2001103b000b2007450d010b200d20074f0d012008290200211820082008200d4103746a220a290200370200200a2018370200200841086a210e20082902002219a72111410021142007417f6a2210450d02200e210a0340200a28020020114f0d03200a41086a210a2010201441016a2214470d000b201021140c020b4188bbca0041004100103b000b4198bbca00200d2007103b000b200820074103746a210c2010210b02400340200c210d200b220a20144d22060d01200a417f6a210b200d41786a220c28020020114f0d000b0b0240200a2014490d002010200a490d0241800121054100210b410021014100210c4100210f4180012109200e20144103746a2215211003400240200d20106b220a4187104b22130d00200a410376220a41807f6a200a2001200b49200f200c49220e7222001b210a02402000450d002009200a200e1b2109200a2005200e1b21050c010b200a200a41017622096b21050b0240200f200c470d00024020090d002004220c210f0c010b4100210a2004220f210c2010210e0340200c200a3a0000200c200e28020020114f6a210c200e41086a210e2009200a41016a220a470d000b0b02402001200b470d00024020050d0020044180016a220b21010c010b200d41786a210a4100210e20044180016a2201210b0340200b200e3a0000200b200a2802002011496a210b200a41786a210a2005200e41016a220e470d000b0b0240200b20016b220a200c200f6b220e200e200a4b1b2212450d002010200f2d00004103746a220a2902002118200a200d20012d0000417f734103746a290200370200024020124101460d004100210a0340200d2001200a6a220e2d0000417f734103746a2010200f200a6a41016a22002d00004103746a290200370200201020002d00004103746a200d200e41016a2d0000417f734103746a290200370200200a41026a210e200a41016a2200210a200e2012490d000b200120006a2101200f20006a210f0b200d20012d0000417f734103746a2018370200200141016a2101200f41016a210f0b200d20054103746b200d2001200b461b210d201020094103746a2010200f200c461b211020130d000b02400240200f200c4f0d00200d210a03402010200c417f6a220c2d00004103746a220b2902002118200b200a41786a220a290200370200200a2018370200200f200c490d000c020b0b2010210a2001200b4f0d000340200a2902002118200a200d200b417f6a220b2d0000417f734103746a220c290200370200200c2018370200200a41086a210a2001200b490d000b0b200820193702002007200a20156b41037620146a22014d0d032008200820014103746a220a290200370200200a2019370200200720016b220c450d04200c20012001200c4b1b210b2007410376210d200a41086a2100024002402001200c417f6a220c490d002000200c200a200310d404200821000c010b200820012002200310d404200a2102200c21010b200b200d4f2105200141154f0d010c050b0b2014200a104b000b200a2010104a000b4198bbca0020012007103b000b41a8bbca00411c41c4bbca001039000b20014102490d00200041786a21104100210e4101210b0340200b410374210c200b417f6a210a200b41016a210b02402000200c6a220d2802002000200a4103746a220f2802004f0d00200d2902002118200d200f2902003702000240200a450d00200e210c2010210a200d41706a2802002018a7220d4d0d00024002400340200a41086a200a290200370200200c4101460d01200c417f6a210c200a41786a220a280200200d4b0d000c020b0b4100210c0b2000200c4103746a210f0b200f20183702000b200e41016a210e201041086a2110200b2001470d000b0b20044180026a24000bd60402097f017e230041306b22022400200241106a2203200141246a290200370300200241086a22042001411c6a29020037030020022001290214370300200241186a41106a2205200141106a280200360200200241186a41086a2206200141086a290200370300200220012902003703182000200241186a10d1042107024002400240200041206a28020022082000411c6a280200470d00200841016a22092008490d022008410174220a2009200a20094b1b220941ffffffff03712009470d02200941027422094100480d020240024020080d002009102d21080c010b200028021820084102742009103121080b2008450d01200020083602182000411c6a2009410276360200200028022021080b200028021820084102746a20073602002000200028022041016a3602202005200329030037030020062004290300370300200220022903003703180240200041f0006a22032802002208200041ec006a280200470d00200841016a22042008490d02200841017422052004200520044b1bad42187e220b422088a70d02200ba722044100480d020240024020080d002004102d21080c010b2000280268200841186c2004103121080b2008450d0120002008360268200041ec006a200441186e360200200041f0006a28020021080b2000280268200841186c6a22082002290318370200200841106a200241186a41106a290300370200200841086a200241186a41086a29030037020020032003280200220841016a360200024020012d002c450d0020004101360254200041d8006a20083602000b200241306a24000f0b1036000b1038000b927a05077f017e217f037e147f23002203210420034180096b416071220324000240024002404110102d2205450d00200541063a00004120102d2206450d00200641063a001020064100360204200620032f00f0053b00012006412d3a0000200641036a200341f2056a2d00003a0000024020052d00004109470d0002402005280204220728020441ffffffff0371450d002007280200102f200528020421070b2007102f0b2005102f200141106a28020041306c2105200128020841546a210702400340024020050d004110102d2207450d0320074180023b010c200742828080802037020420072006360200200720032f01d0033b010e0240200128021022052001410c6a280200470d00200541016a22082005490d06200541017422092008200920084b1bad42307e220a422088a70d06200aa722084100480d060240024020050d002008102d21050c010b2001280208200541306c2008103121050b2005450d04200120053602082001410c6a200841306e360200200128021021050b2001280208200541306c6a220520032f00e0043b0001200541073a0000200542818080801037000820052007360004200520032902f005370210200541036a200341e2046a2d00003a0000200541186a200341f8056a290200370200200541206a20034180066a290200370200200541286a200341f0056a41186a2902003702002001200128021041016a220b3602104100210c0c020b200541506a21052007412c6a2108200741306a2209210720082d00004107470d000b200320032f01d0033b01f0050240200941086a22072802002205200941046a280200470d00200541016a22082005490d042005410174220d2008200d20084b1b220841ffffffff00712008470d04200841047422084100480d040240024020050d002008102d21050c010b200928020020054104742008103121050b2005450d0220092005360200200941046a2008410476360200200941086a28020021050b200928020020054104746a22054180023b010c200542828080802037020420052006360200200520032f01f0053b010e2007200728020041016a360200200341c8006a200910d603200328024c417f6a210c2001280210210b0b200b41306c21052001280208220e41546a210702400340410021082005450d01200541506a21052007412c6a2109200741306a2206210720092d00004103470d000b200641086a2802002205450d00200541286c2107200628020041186a2105410021080340200820052d0000456a2108200541286a2105200741586a22070d000b0b200b41306c2105200e41546a210702400340410021092005450d01200541506a21052007412c6a2106200741306a220d210720062d00004103470d000b200d41086a2802002205450d00200541286c2107200d28020041186a2105410021090340200920052d0000456a2109200541286a2105200741586a22070d000b0b200b41306c2105200e415c6a2107024003404100210f024020050d00410021050c020b200541506a2105200741246a2106200741306a220d210720062d00004104470d000b200d28020021050b200341003602e0040240024002400240200520096a220e0d0041042110410021110c010b0240024002402008450d00200342003703f005410021050c010b200341f0056a4100200110c80620032802f405210520032802f0054101470d00200341f8056a290300210a024020032802e0042207450d0020032802e404450d002007102f0b2003200a3702e404200320053602e00441002111410421104100210f0c010b4104102d2210450d042010200536020002400240200e4102490d000240024020084102490d00200342003703f0054100210d0c010b200341f0056a4101200110c80620032802f405210d20032802f0054101470d00200341f8056a290300210a024020032802e004450d0020032802e404450d0020032802e004102f0b2003200a3702e4042003200d3602e0040c010b410221064104210741012109410121110340200941016a2105024020092011470d0020062005200620054b1b220b41ffffffff0371200b470d0a200b410274220b4100480d0a20102007200b10312210450d08200b41027621110b201020076a200d360200024002402005200e4f0d000240200820054d0d00200342003703f0054100210d0c020b200341f0056a2005200110c80620032802f405210d20032802f0054101470d0120032903f805210a024020032802e004450d0020032802e404450d0020032802e004102f0b200941016a210f2003200a3702e4042003200d3602e0040c040b200941016a210f0c030b200641026a2106200741046a2107200521090c000b0b4101210f410121110b20032802e00421050b2005450d0020032902e404210a02402011450d002010102f0b2000200536020420004101360200200041086a200a3702000c010b20012802102205450d0120012802082212200541306c6a2113200341e0046a41146a2114200341e0076a211520034194066a2116200341a4066a2117200341b4066a2118200341c4066a2119200341d4066a211a200341e4066a211b200341f4066a211c20034184076a211d20034194076a211e200341a4076a211f200341b4076a2120200341c4076a2121200341d4076a212202400340024020122d0000410c470d00201228020c2205450d002012280204220d200541186c6a212303400240200d41146a220e2802002205450d00200d410c6a212441002109034002400240024002400240200920054f0d00410121052024280200200941047422256a22072d0000410b470d042003200741046a22073602c00220072802002207200f4f0d01201020074102746a2802002208450d042003200c3602d407200341133a00d007200341d7003a00c007200320083602b4072003412d3a00b0072003200c3602a407200341123a00a00720032007360294072003410b3a009007200341063a008007200341003a00f00620034184083b01e006200341373a00d006200320023602c4062003412d3a00c0062003200c3602b406200341123a00b0062003200c3602a406200341133a00a006200341d6003a00900620032008360284062003412d3a0080062003200c3602f405200341123a00f005200e280200222620094d0d02200e2009360200200d28020c2105200320153602f804200320243602f0042003200520256a220b41106a22063602e8042003200941016a22273602e0042003202620276b22283602e40420032005202741047422296a222a3602ec042003200341f0056a3602f404200621050240200b2d0000220841ac01460d004100210502400340200b20056a21070240200841ff01714109470d000240200741046a280200220828020441ffffffff0371450d002008280200102f0b2008102f0b2005450d012003200741206a3602e804200541106a2105200741106a2d0000220841ac01470d000b200b20056a41106a21050c010b200741106a21050b02402005202a460d0003402003200541106a22073602e80420052d0000220841ac01460d01024020084109470d000240200541046a280200220528020441ffffffff0371450d002005280200102f0b2005102f0b2007210520062007470d000b0b02400240024002402028450d0002402027200d2802142205470d00200341f0056a21052015210b0c030b2025200541047422056b2108200d28020c20056a2107200341f0056a21052015210603400240024020052006470d00410021050c010b2003200541106a3602f4040b200341d0036a200510b90620032d00d00341ac01460d04200720032903d003370300200741086a200341d0036a41086a290300370300200d200d28021441016a3602142008450d02200741106a2107200841706a210820032802f804210620032802f40421050c000b0b2024201410be060c020b20032802f804210b20032802f40421050b0240200b20056b2207450d000240024020032802f004220641046a222a280200222520266b20074104762208490d00200628020021070c010b202620086a22072026490d12202541017422262007202620074b1b220741ffffffff00712007470d12200741047422264100480d120240024020250d002026102d21070c010b200628020020254104742026103121070b2007450d1020062007360200202a20264104763602000b2007202720086a22254104746a200720296a202841047410e9061a200320253602e004202520062802082207460d00200920086a410474200741047422076b2108200628020020076a21070340024002402005200b470d00410021050c010b2003200541106a3602f4040b200341d0036a200510b90620032d00d00341ac01460d02200720032903d003370300200741086a200341d0036a41086a2903003703002006200628020841016a3602082008450d01200741106a2107200841706a210820032802f804210b20032802f40421050c000b0b200341003602d803200342083703d003200341d0036a201410be0620032802d003222820032802d8032207410474220b6a210620032802d40321292028210502402007450d000240024020032802f004222541046a222a280200220520032802e404222720032802e00422076a22266b200b4104752208490d00202528020021050c010b202620086a222b2026490d1220054101742226202b2026202b4b1b222641ffffffff00712026470d12202641047422264100480d120240024020050d002026102d21050c010b202528020020054104742026103121050b2005450d1020252005360200202a20264104763602000b2005200720086a220841047422266a200520074104746a202741047410e9061a200320083602e00420282105200820252802082207460d002025280200220520266a212a200520074104746a21082028210703400240200b0d00200621050c020b200341d0036a41026a2205200741036a2d00003a0000200320072f00013b01d003024020072d0000222741ac01470d00200741106a21050c020b200741046a2802002126200741086a290300210a200820273a0000200841086a200a370300200841046a202636020020032f01d0032127200841036a20052d00003a0000200841016a20273b00002025202528020841016a360208200b41706a210b200741106a22052107200841106a2208202a470d000b0b024020062005460d000340200541106a2107024020052d00004109470d000240200541046a2208280200220528020441ffffffff0371450d002005280200102f200828020021050b2005102f0b2007210520062007470d000b0b2029450d002028102f0b20032802e804220520032802ec042206460d0303402003200541106a22073602e8040240024020052d000022084109460d00200841ac01470d01200641706a2005460d06200541106a210503402003200541106a22073602e80420052d0000220841ac01460d07024020084109470d000240200541046a280200220528020441ffffffff0371450d002005280200102f0b2005102f0b2007210520062007470d000c070b0b0240200541046a280200220528020441ffffffff0371450d002005280200102f0b2005102f0b2007210520062007470d000c040b0b4194beca0020092005103b000b2003410136028406200342013702f405200341a4beca003602f005200341353602d4032003200341d0036a360280062003200341c0026a3602d003200341e0046a200341f0056a103a20032802e00422050d080c040b41a6b5ca00411c41f8b4ca001039000b024020032802e4042205450d00024020032802e004220620032802f004220b41086a22082802002207460d00200b280200220b20074104746a200b20064104746a200541047410e9061a0b2008200520076a3602000b024020032d00f0054109470d00024020032802f405220528020441ffffffff0371450d002005280200102f20032802f40521050b2005102f0b024020032d0080064109470d000240200341f0056a41146a280200220528020441ffffffff0371450d002005280200102f20032802840621050b2005102f0b024020032d0090064109470d0002402016280200220528020441ffffffff0371450d002005280200102f20032802940621050b2005102f0b024020032d00a0064109470d0002402017280200220528020441ffffffff0371450d002005280200102f20032802a40621050b2005102f0b024020032d00b0064109470d0002402018280200220528020441ffffffff0371450d002005280200102f20032802b40621050b2005102f0b024020032d00c0064109470d0002402019280200220528020441ffffffff0371450d002005280200102f20032802c40621050b2005102f0b024020032d00d0064109470d000240201a280200220528020441ffffffff0371450d002005280200102f20032802d40621050b2005102f0b024020032d00e0064109470d000240201b280200220528020441ffffffff0371450d002005280200102f20032802e40621050b2005102f0b024020032d00f0064109470d000240201c280200220528020441ffffffff0371450d002005280200102f20032802f40621050b2005102f0b024020032d0080074109470d000240201d280200220528020441ffffffff0371450d002005280200102f20032802840721050b2005102f0b024020032d0090074109470d000240201e280200220528020441ffffffff0371450d002005280200102f20032802940721050b2005102f0b024020032d00a0074109470d000240201f280200220528020441ffffffff0371450d002005280200102f20032802a40721050b2005102f0b024020032d00b0074109470d0002402020280200220528020441ffffffff0371450d002005280200102f20032802b40721050b2005102f0b024020032d00c0074109470d0002402021280200220528020441ffffffff0371450d002005280200102f20032802c40721050b2005102f0b024020032d00d0074109470d0002402022280200220528020441ffffffff0371450d002005280200102f20032802d40721050b2005102f0b410f21050b200520096a2209200e2802002205490d000b0b200d41186a220d2023470d000b0b201241306a22122013470d000c030b0b20032902e404210a2000200536020420004101360200200041086a200a3702002011450d002010102f0b2001280208200128021010cd042001410c6a280200450d022001280208102f0c020b200341d0006a41106a200141106a280200221e360200200341d0006a41086a200141086a290200220a37030020032001290200370350201e41306c2108200aa721094100210d4100210502400340024020082005470d000c020b200920056a2107200541306a2206210520072d00004108470d000b200341c0006a200920066a41546a10d6032003280240210d200328024421050b4100210b20054100200d1b2124201e41306c2106200d41c8e1ca00200d1b21054100210702400340024020062007470d000c020b200920076a2108200741306a220d210720082d0000410a470d000b200341386a2009200d6a41546a10d6032003280238210b200328023c21070b4100210e20074100200b1b2125201e41306c210d200b41c8e1ca00200b1b210641002107024003400240200d2007470d000c020b200920076a2108200741306a220b210720082d00004109470d000b2009200b6a41546a28020021074101210e0b2003420037026c20034190bdc600360268200341003602782003410036027420062025411c6c6a21292005202441146c6a210d200341e0046a410272221941266a2121201941206a2122201941186a2123201941106a2112201941086a2101200341e0046a41286a21134104212b41002115410021144100211b4100211a0240024002400240410041ff01710e03000102000b410021080c020b410221080c010b410121080b034002400240024002400240024002400240024002400240024002400240024002400240024002400240024020080e03000104040b0240201b41ff01710e03020300020b02400240024020032802782208450d0020182008460d002003200841046a3602780c010b034020292006460d15200341206a200610af0620032802202208450d022006411c6a21062003280224210b200320083602782008200b4102746a2118200b450d000b2003200841046a3602782008450d140b200e211620072117200828020021070c050b2006411c6a21060c120b4100211641002117200e0d030c050b02400340200d2005460d012005410c6a2108200541146a220b210520082802000d000b200b2105200e211620072117200b417c6a28020021070c030b024002400240024020032802782208450d0020182008460d002003200841046a3602780c010b034020292006460d03200341186a200610af0620032802182208450d022006411c6a2106200328021c210b200320083602782008200b4102746a2118200b450d000b2003200841046a3602782008450d020b4102211b200e211620072117200828020021070c040b2006411c6a21060b4102211b0c100b0340200d2005460d102005410c6a2108200541146a220b210520082802000d000b200b2105200e211620072117200b417c6a28020021070c010b024002400240201b41ff01710e03010200010b024002402003280278220b450d002018200b460d002003200b41046a3602780c010b034020292006460d05200341306a200610af0620032802302208450d052006411c6a21062008210b20032802342224450d000b2003200841046a3602782008450d05200820244102746a21182008210b0b200e211620072117200b28020021070c020b02400340200d2005460d012005410c6a2108200541146a220b210520082802000d000b200b2105200e211620072117200b417c6a28020021070c020b0240024020032802782208450d0020182008460d002003200841046a3602780c010b034020292006460d05200341286a200610af0620032802282208450d052006411c6a2106200328022c210b20032008360278200b450d000b2003200841046a3602782008450d042008200b4102746a21180b4102211b200e211620072117200828020021070c010b03402005200d460d032005410c6a2108200541146a220b210520082802000d000b200b2105200e211620072117200b417c6a28020021070b2003200736027c0240024002402007200f4f0d00201020074102746a2802002208450d0720142015460d012015211c201421150c020b2003410136028406200342023702f405200341a8b0ca003602f005200341013602d4032003200341d0036a360280062003200341fc006a3602d003200341e0046a200341f0056a103a20032902e404220a422088a7210520032802e0042128200aa7211d0c0b0b201541016a220b2015490d132015410174220e200b200e200b4b1b220b41ffffffff0371200b470d13200b410274220b4100480d130240024020150d00200b102d212b0c010b202b2015410274200b1031212b0b202b450d11200b410276211c0b202b20154102746a2007360200200341f0056a200328027c2226200341d0006a10c40620032802f805211d20032802f4052128024020032802f00522154101460d0020282802082207417f4c0d0c20282d000c210e0240024020070d004101210b0c010b202828020021242007102d220b450d12200b2024200710e8061a0b2003200e3a008c01200320073602880120032007360284012003200b3602800120282d000d21072003200836029c012003200328027c360298012003410036029001200320073a008d0102400240200328026822074190bdc600460d00200328026c21270c010b202142003701002022420037010020234200370100201242003701002001420037010020194200370100200341f0056a410041e00210e7061a419403102d2207450d124100212720074100360200200720032903e0043702042007410c6a200341e0046a41086a290300370200200741146a200341e0046a41106a2903003702002007411c6a200341e0046a41186a290300370200200741246a200341e0046a41206a2903003702002007412c6a2013290300370200200741346a200341f0056a41e00210e8061a2003410036026c200320073602680b201441016a211403400240024020072f0106222a0d004100210b0c010b200741146a2108202a410274210e200741086a2124417f210b03400240200e0d00202a210b0c020b20242802002125200841206a2108200b41016a210b200e417c6a210e202441046a21240240417f2025202647202520264b1b41016a0e03020001020b0b2008290200210a2008200329038001370200200841186a200329039801370200200841106a2207290200212c2007200329039001370200200841086a200329038801370200202c42ffffffff0f83420285500d06200a42808080807083500d06200aa7102f0c060b02402027450d002027417f6a21272007200b4102746a4194036a28020021070c010b0b2003200328027041016a360270200329039801210a200329039001212c200329038801212d200329038001212e0240024020072f01062208410b490d0020074190bdc600460d01202142003701002022420037010020234200370100201242003701002001420037010020194200370100200341f0056a410041e00210e7061a419403102d2208450d1320084100360200200820032903e0043702042008410c6a200341e0046a41086a222f290300370200200841146a200341e0046a41106a22302903003702002008411c6a200341e0046a41186a2231290300370200200841246a200341e0046a41206a22322903003702002008412c6a2013290300370200200841346a200341f0056a41e00210e8062124200341f0056a41086a222a200741fc016a290200370300200341f0056a41106a221f20074184026a290200370300200341f0056a41186a22202007418c026a290200370300200320072902f4013703f00520072802202133200841086a200741246a20072f010641796a220e41027410e8062125202420074194026a200e41057410e8062124200741063b01062008200e3b0106203120202903003703002030201f290300370300202f202a290300370300200320032903f0053703e00402400240200b4107490d002025200b417a6a22344102746a2025200b41796a22274102746a220b200e41ffff037120276b41027410e9061a200b2026360200202420344105746a202420274105746a220b200841066a220e2f010020276b41057410e9061a200b41186a200a370200200b202c370210200b202d370208200b202e3702000c010b200741086a220e200b41016a22244102746a200e200b4102746a2225200741066a220e2f0100200b6b41027410e9061a20252026360200200741346a222520244105746a2025200b4105746a2224200e2f0100200b6b41057410e9061a202441186a200a3702002024202c3702102024202d3702082024202e3702000b200e200e2f010041016a3b0100200341d0036a41186a22352031290300220a370300200341d0036a41106a22362030290300222c370300200341d0036a41086a2237202f290300222d370300200341b0016a41186a2238200a370300200341b0016a41106a2239202c370300200341b0016a41086a223a202d370300200320032903e004220a3703d0032003200a3703b0010240200728020022250d004100213b2008210b0c060b20072f010421264100213b2008213c0340200341c0026a41186a223d2038290300370300200341c0026a41106a223e2039290300370300200341c0026a41086a223f203a290300370300200320032903b0013703c002202641ffff0371212402400240024020252f01062207410b490d002021420037010020224200370100202342003701002012420037010020014200370100201942003701002037202f2903003703002036203029030037030020352031290300370300200341d0036a41206a22072032290300370300200341d0036a41286a22082013290300370300200320032903e0043703d003200341f0056a410041900310e7061a41c403102d220b450d17200b4100360200200b20032903d003370204200b410c6a2037290300370200200b41146a2036290300370200200b411c6a2035290300370200200b41246a2007290300370200200b412c6a2008290300370200200b41346a200341f0056a41900310e8062108202541206a280200214020202025418c026a290200370300201f20254184026a290200370300202a202541fc016a2902003703002003202541f4016a2902003703f005200b41086a202541246a20252f0106220e41796a220741027410e8062141200820254194026a200741057410e8062142200b4194036a202541b0036a200e417a6a222741027410e8062134202541063b0106200b20073b010602402027450d00410021072034210803402008280200220e20073b0104200e200b360200200841046a21082027200741016a2207470d000b0b20312020290300220a3703002030201f290300222c370300202f202a290300222d370300200320032903f005222e3703e0042020200a370300201f202c370300202a202d3703002003202e3703f005202641ffff037122084107490d0120412024417a6a220e41027422276a2041202441796a22074102746a2208200b2f010620076b41027410e9061a200820333602002042200e4105746a204220074105746a2208200b2f010620076b41057410e9061a200841186a203d290300370200200841106a203e290300370200200841086a203f290300370200200820032903c002370200200b200b2f010641016a22083b01062024410274222620346a416c6a203420276a2227200841ffff03712224200e6b41027410e9061a2027203c3602002024200e490d02200b20266a41fc026a210803402008280200220e200741016a22073b0104200e200b360200200841046a210820072024490d000c030b0b202541086a2208202441016a220b410274220e6a2008202441027422276a2208200720246b222641027410e9061a20082033360200202541346a2208200b4105746a200820244105746a2208202641057410e9061a200841186a203d290300370200200841106a203e290300370200200841086a203f290300370200200820032903c0023702002025200741016a22073b0106202720254194036a22086a41086a2008200e6a2208200741ffff0371220e200b6b41027410e9061a2008203c3602002024200e4f0d092025200b417f6a22074102746a4198036a210803402008280200220b200741016a22073b0104200b2025360200200841046a21082007200e490d000c0a0b0b202541086a2207202441016a2227410274220e6a2007202441027422266a220720252f0106223420246b224141027410e9061a20072033360200202541346a220720274105746a200720244105746a2207204141057410e9061a200741186a203d290300370200200741106a203e290300370200200741086a203f290300370200200720032903c0023702002025203441016a22073b0106202620254194036a22346a41086a2034200e6a2234200741ffff0371220e20276b41027410e9061a2034203c3602002008200e4f0d00202520266a4198036a2107034020072802002208202441016a22243b010420082025360200200741046a2107200e2024470d000b0b203b41016a213b203820202903003703002039201f290300370300203a202a290300370300200320032903f0053703b0010240202528020022070d00204021330c070b20252f010421262007212520402133200b213c0c000b0b200741086a220e200b41016a22244102746a200e200b4102746a220e2008200b6b41027410e9061a200e2026360200200741346a220820244105746a2008200b4105746a220820072f0106200b6b41057410e9061a200841186a200a3702002008202c3702102008202d3702082008202e370200200720072f010641016a3b01060c050b4195b4ca00412d41f8b4ca001039000b20032802fc052105201c21150c090b2003200b3602780b2003280260220d41306c21052003280258220b41546a210720032802682127200328026c21262003280270213802400340410021082005450d01200541506a21052007412c6a2109200741306a2206210720092d00004103470d000b200641086a2802002205450d00200541286c2107200628020041186a2105410021080340200820052d0000456a2108200541286a2105200741586a22070d000b0b200d41306c2105200b415c6a2107024003402005450d01200541506a2105200741246a2109200741306a2206210720092d00004104470d000b200628020021050c090b410021050c080b2021420037010020224200370100202342003701002012420037010020014200370100201942003701002037202f2903003703002036203029030037030020352031290300370300200341d0036a41206a22082032290300370300200341d0036a41286a220e2013290300370300200320032903e0043703d003200341f0056a410041900310e7061a41c403102d2207450d0d20074100360200200720032903d0033702042007410c6a2037290300370200200741146a20362903003702002007411c6a2035290300370200200741246a20082903003702002007412c6a200e290300370200200741346a200341f0056a41900310e806210e200720032802682208360294032003200328026c222441016a36026c200841003b0104200320073602682008200736020020202038290300370300201f2039290300370300202a203a290300370300200320032903b0013703f0052024203b470d0220072f01062208410a4b0d03200e20084105746a220e20032903f005370200200e41086a202a290300370200200e41106a201f290300370200200e41186a2020290300370200200720084102746a41086a20333602002007200841016a22084102746a4194036a200b360200200720083b0106200b20083b0104200b20073602000b02402015450d00201d450d002028102f0b201c21150b2016210e20172107201a41ff01710e03020309020b4196b3ca00413041f8b4ca001039000b41c6b3ca00412741f8b4ca001039000b410021080c070b410221080c060b2003280268200328026c200328027010bc0602402015450d00202b102f0b2009201e10cd040240200341dc006a280200450d002009102f0b2000202836020420004101360200200041086a2005ad422086201dad843702002011450d072010102f200424000f0b200341f0056a41106a220f200341d0006a41106a280200360200200341f0056a41086a200341d0006a41086a290300370300200320032903503703f005200341b0016a200341f0056a10d0042014450d01202b20144102746a2129200520086a2128200341f0056a41e0016a2114200341f0056a41d0016a2116200341f0056a41c0016a2117200341f0056a41b0016a2118200341f0056a41a0016a2119200341f0056a4190016a211a200341f0056a4180016a211b200341f0056a41f0006a211c200341f0056a41e0006a211d200341f0056a41d0006a211e200341f0056a41c0006a211f200341f0056a41306a2120200341f0056a41206a2121200341e7046a2122200341a4066a2123200341b4066a2112200341c4066a2101200341d4066a2113200341e4066a2134200341f4066a212f20034184076a213020034194076a2131200341a4076a2135200341b4076a2136200341c4076a2137200341d4076a2133202b212503402025220541046a21252005280200210d202721072026210603400240024020072f0106220e0d00410021080c010b200e4102742124417f210841002109410021050340024020242005470d00200e21080c020b200720056a210b200941206a2109200841016a2108200541046a21050240417f200b41086a280200220b200d47200b200d4b1b41016a0e03020001020b0b200720096a220e412c6a2802002107200e41306a28020021052003200c3602d407200341133a00d007200341d7003a00c007200320053602b4072003412d3a00b0072003200c3602a407200341123a00a00720032007360294072003410b3a009007200341063a008007200341003a00f00620034184083b01e006200341373a00d006200320023602c4062003412d3a00c0062003200c3602b406200341123a00b0062003200c3602a406200341133a00a006200341d6003a00900620032005360284062003412d3a0080062003200c3602f405200341123a00f005200e411c6a2224280200220d41106a220541ffffffff00712005470d0320054104742207417f4c0d030240024020070d00410821060c010b2007102d2206450d09200741047621052024280200210d0b02400240200d0d00410021080c010b41002109410021070340024020072005470d00200541016a22082005490d0d2005410174220b2008200b20084b1b220841ffffffff00712008470d0d200841047422084100480d0d0240024020050d002008102d21060c010b200620054104742008103121060b2006450d0b200841047621050b200620096a2208410f3a0000200841046a2007360200200841016a20032f01d0033b0000200841036a200341d0036a41026a2d00003a0000200941106a2109200741016a22082107200d2008470d000b0b0240200520086b410e4b0d002008410f6a22072008490d0b200541017422092007200920074b1b220741ffffffff00712007470d0b200741047422074100480d0b0240024020050d002007102d21060c010b200620054104742007103121060b2006450d09200741047621050b200341e0046a200341f0056a10bd06200620084104746a220720032903e004370300200741086a200341e0046a41086a2209290300370300200341e0046a200f10bd06200741186a2009290300370300200720032903e004370310200341e0046a202110bd06200741286a2009290300370300200741206a20032903e004370300200341e0046a202010bd06200741386a2009290300370300200741306a20032903e004370300200341e0046a201f10bd06200741c8006a2009290300370300200741c0006a20032903e004370300200341e0046a201e10bd06200741d8006a2009290300370300200741d0006a20032903e004370300200341e0046a201d10bd06200741e8006a2009290300370300200741e0006a20032903e004370300200341e0046a201c10bd06200741f8006a2009290300370300200741f0006a20032903e004370300200341e0046a201b10bd0620074188016a200929030037030020074180016a20032903e004370300200341e0046a201a10bd0620074198016a200929030037030020074190016a20032903e004370300200341e0046a201910bd06200741a8016a2009290300370300200741a0016a20032903e004370300200341e0046a201810bd06200741b8016a2009290300370300200741b0016a20032903e004370300200341e0046a201710bd06200741c8016a2009290300370300200741c0016a20032903e004370300200341e0046a201610bd06200741d8016a2009290300370300200741d0016a20032903e004370300200341e0046a201410bd06200741e8016a2009290300370300200741e0016a20032903e004370300024002402008410f6a22072005460d002005210b200721050c010b200541016a22072005490d0b200541017422092007200920074b1b220741ffffffff00712007470d0b200741047422074100480d0b0240024020050d002007102d21060c010b200620054104742007103121060b2006450d092007410476210b0b200620054104746a220541063a0000200520032900e004370001200541086a2022290000370000200341e0046a200341b0016a418c0110e8061a4110102d2207450d08200741063a0000200341d0036a200341e0046a418c0110e8061a20242802002205417f4c0d030240024020050d004101210d41014101200510e8061a2005ad212c410021050c010b200e41146a28020021092005102d220d450d09200d2009200510e80621092005102d220d450d09200d2009200510e8061a2009102f2005ad212c0b200341e0046a200341d0036a418c0110e8061a200e41216a310000212d200341d0036a200341e0046a418c0110e8061a200341e0046a200341d0036a418c0110e8061a200341c0026a200341e0046a418c0110e8061a4110102d2209450d08200841106a2108202a41807e71212a200a428080808080804083220a202c84202d422886844280808080800c84212c200941063a00002009102f200341d0036a200341c0026a418c0110e8061a200341e0046a200341d0036a418c0110e8061a024020072d00004109470d0002402007280204220928020441ffffffff0371450d002009280200102f200728020421090b2009102f0b2007102f200341c0026a200341e0046a418c0110e8061a200341e0046a200341c0026a418c0110e8061a2003202a3602fc03200320083602f8032003200b3602f403200320063602f003200341003602ec03200342043702e4032003202c3702dc03200320053602d8032003200d3602d403200341013602d003200341e0046a200341d0036a10d504200341b0016a200341e0046a418c0110e8061a200e41286a2028360200200e41246a4101360200024020032d00f0054109470d00024020032802f405220528020441ffffffff0371450d002005280200102f20032802f40521050b2005102f0b024020032d0080064109470d000240200341f0056a41146a280200220528020441ffffffff0371450d002005280200102f20032802840621050b2005102f0b024020032d0090064109470d000240200341f0056a41246a280200220528020441ffffffff0371450d002005280200102f20032802940621050b2005102f0b024020032d00a0064109470d0002402023280200220528020441ffffffff0371450d002005280200102f20032802a40621050b2005102f0b024020032d00b0064109470d0002402012280200220528020441ffffffff0371450d002005280200102f20032802b40621050b2005102f0b024020032d00c0064109470d0002402001280200220528020441ffffffff0371450d002005280200102f20032802c40621050b2005102f0b024020032d00d0064109470d0002402013280200220528020441ffffffff0371450d002005280200102f20032802d40621050b2005102f0b024020032d00e0064109470d0002402034280200220528020441ffffffff0371450d002005280200102f20032802e40621050b2005102f0b024020032d00f0064109470d000240202f280200220528020441ffffffff0371450d002005280200102f20032802f40621050b2005102f0b024020032d0080074109470d0002402030280200220528020441ffffffff0371450d002005280200102f20032802840721050b2005102f0b024020032d0090074109470d0002402031280200220528020441ffffffff0371450d002005280200102f20032802940721050b2005102f0b024020032d00a0074109470d0002402035280200220528020441ffffffff0371450d002005280200102f20032802a40721050b2005102f0b024020032d00b0074109470d0002402036280200220528020441ffffffff0371450d002005280200102f20032802b40721050b2005102f0b024020032d00c0074109470d0002402037280200220528020441ffffffff0371450d002005280200102f20032802c40721050b2005102f0b024020032d00d0074109470d0002402033280200220528020441ffffffff0371450d002005280200102f20032802d40721050b2005102f0b200a4280808080808c0184210a202841016a212820252029470d020c040b02402006450d002006417f6a2106200720084102746a4194036a28020021070c010b0b0b41b8b0ca0041800141b8b1ca001055000b103d000b02402015450d00202b102f0b200341f0056a200341b0016a418c0110e8061a200341e0046a200341f0056a10d2040240200341e0046a41106a2802002205450d0020032802e8042215200541306c6a21290340024020152d000041786a220541024b0d0002400240024020050e03000102000b201528020c2205450d0220152802042206200541146c6a212503400240200628020c0d002006280210210c202721052026210e03400240024020052f010622240d00410021070c010b200541286a210d20244102742108200541086a2109417f21070340024020080d00202421070c020b2009280200210b200d41206a210d200741016a21072008417c6a2108200941046a21090240417f200b200c47200b200c4b1b41016a0e03020001020b0b0240200d417c6a280200450d002006200d2802003602100c030b41c8b1ca0041354180b2ca001055000b200e450d01200e417f6a210e200520074102746a4194036a28020021050c000b0b200641146a22062025470d000c030b0b2015280204210e202721052026210b03400240024020052f0106220c0d00410021070c010b200541286a2106200c4102742108200541086a2109417f21070340024020080d00200c21070c020b2009280200210d200641206a2106200741016a21072008417c6a2108200941046a21090240417f200d200e47200d200e4b1b41016a0e03020001020b0b02402006417c6a280200450d00201520062802003602040c040b41c8b1ca0041354180b2ca001055000b200b450d02200b417f6a210b200520074102746a4194036a28020021050c000b0b201528020c2205450d002015280204222a2005411c6c6a210f03400240202a2802182205450d00202a280210222420054102746a212803402024222541046a21242025280200210e202721052026210b024003400240024020052f0106220c0d00410021070c010b200541286a2106200c4102742108200541086a2109417f21070340024020080d00200c21070c020b2009280200210d200641206a2106200741016a21072008417c6a2108200941046a21090240417f200d200e47200d200e4b1b41016a0e03020001020b0b02402006417c6a280200450d00202520062802003602000c030b41c8b1ca0041354180b2ca001055000b200b450d01200b417f6a210b200520074102746a4194036a28020021050c000b0b20242028470d000b0b202a411c6a222a200f470d000b0b201541306a22152029470d000b0b200341ec046a290200210a20032802e004210520032902e404212c20272026203810bc06200041106a200a370200200041086a202c37020020002005360204200041003602002011450d042010102f200424000f0b4102211a0b410121080c000b0b1036000b200424000f0b1038000b91fa0104077f017e157f017e230041e0006b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e10020103100f0e0d0c0b09070806050400020b200141286a2802002104200141246a2802002105200141206a28020021062001411c6a2802002107200141186a2802002108200141146a28020021092001410c6a290200210a200141086a280200210b200141046a280200210c0240200241046a280200200241086a280200220d460d002002280200210e0c160b200d41016a220e200d490d13200d410174220f200e200f200e4b1b220f4100480d1302400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d122002200e360200200241046a200f360200200241086a280200210d0c150b200141186a2802002110200141146a2802002111200141106a28020021122001410c6a2802002107200141086a2802002109200141046a280200210402400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d13200d410174220f200e200f200e4b1b220f4100480d1302400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d122002200e360200200241046a200f360200200241086a280200210d0b4101210f200241086a200d41016a36020041002113200e200d6a41003a0000200341146a2010360200200341106a20113602002003201236020c200320073602082003200936020420032004360200200341d0006a20032002109e06200320032900513703382003200341d0006a41086a29000037003f024020032d0050220d411f470d0041002112410121070c170b2000200d3a000020002003290338370001200041086a200329003f3700000c240b2001410c6a280200210e200141086a2802002110200141046a280200211320012d0001211102400240200241046a280200200241086a280200220d460d002002280200210f0c010b200d41016a220f200d490d12200d4101742212200f2012200f4b1b22124100480d1202400240200d0d002012102d210f0c010b2002280200200d20121031210f0b200f450d112002200f360200200241046a2012360200200241086a280200210d0b200241086a2212200d41016a360200200f200d6a20113a000002400240200241046a280200220f2012280200220d6b200e490d002002280200210f0c010b200d200e6a2211200d490d12200f410174220d2011200d20114b1b220d4100480d1202400240200f0d00200d102d210f0c010b2002280200200f200d1031210f0b200f450d112002200f360200200241046a200d360200200241086a280200210d0b200241086a200d200e6a360200200f200d6a2013200e10e8061a4100210241012107024020100d00410121120c170b2013102f410121120c160b2001410c6a2802002112200141086a2802002114200141046a280200210502400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d11200d410174220f200e200f200e4b1b220f4100480d1102400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d102002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41013a0000200520124104746a210c4100210f4100210e41002111410121102012210d03400240200e2011470d00200f200e41016a2213200f20134b1b22114100480d1202400240200f0d002011102d21100c010b2010200e2011103121100b2010450d110b2010200e6a200d41807f72200d41ff0071200d41077622131b3a0000200f41026a210f200e41016a210e2013210d20130d000b024020120d00200521090c0e0b2005210d0340200d41106a2109200d2d000d22084105460d0e200d2d000c210f200d2802082104200d280204210b200d280200210602402011200e470d00200e41016a220d200e490d12200e4101742213200d2013200d4b1b22114100480d1202400240200e0d002011102d21100c010b2010200e2011103121100b2010450d110b2010200e6a200f3a0000200e41016a210d200e410174220e41046a2107200e41026a210f2004210e0340200721120240200d2011470d00200d41016a2213200d490d13200f2013200f20134b1b22114100480d1302400240200d0d002011102d21100c010b2010200d2011103121100b2010450d120b2010200d6a200e41807f72200e41ff0071200e41077622131b3a0000201241026a2107200f41026a210f200d41016a210d2013210e20130d000b0240024020040d00200d210e0c010b4100210f0340200d200f6a210e41fc00211302400240024002402006200f6a2d00000e050200010305020b41fe0021130c020b41fd0021130c010b41ff0021130b0240200e2011470d00200e41016a2211200e490d1420122011201220114b1b22114100480d1402400240200e0d002011102d21100c010b2010200e2011103121100b2010450d130b2010200d6a200f6a20133a0000201241026a21122004200f41016a220f470d000b200d200f6a210e0b0240200b450d002006102f0b4100210d024020084104460d0002402011200e470d00200e41016a220d200e490d13200e410174220f200d200f200d4b1b22114100480d1302400240200e0d002011102d21100c010b2010200e2011103121100b2010450d120b2010200e6a41013a0000200e41016a210e200841077141ff0073210d0b02402011200e470d00200e41016a220f200e490d12200e4101742213200f2013200f4b1b22114100480d1202400240200e0d002011102d21100c010b2010200e2011103121100b2010450d110b2010200e6a200d3a0000200e41016a210e2009210d2009200c470d000c0f0b0b2001412c6a2802002114200141286a2802002115200141246a280200210c200141206a28020021162001411c6a2802002117200141186a2802002118200141146a280200210b2001410c6a290200210a200141086a2802002119200141046a280200210802400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d13200d410174220f200e200f200e4b1b220f4100480d1302400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d212002200e360200200241046a200f360200200241086a280200210d0b41012113200241086a200d41016a36020041002110200e200d6a41003a00004104102d2205450d20200541eec2b5ab063600000240024020080d00410021064100211a0c010b410121124100210d41002110200aa72211210e034002400240200d2010460d00200d21132010210d0c010b200d41016a220f200d490d15200d4101742213200f2013200f4b1b22134100480d1502400240200d0d002013102d21120c010b2012200d2013103121120b2012450d230b2012200d6a200e41807f72200e41ff0071200e410776220f1b3a0000200d41016a21102013210d200f210e200f0d000b02400240201320106b2011490d00201321090c010b201020116a220d2010490d142013410174220e200d200e200d4b1b22094100480d14024020130d002009102d22120d010c230b20122013200910312212450d220b201220106a2008201110e8061a02402019450d002008102f0b4101102d2213450d21201341003a00004101210d4101210e201020116a2207210f034002400240200d200e460d00200d21100c010b200d41016a220e200d490d15200d4101742210200e2010200e4b1b22104100480d1502400240200d0d002010102d21130c010b2013200d2010103121130b2013450d23200d210e2010210d0b2013200e6a200f41807f72200f41ff0071200f41077622111b3a0000200e41016a210e2011210f20110d000b02402010200e6b20074f0d00200e20076a220d200e490d142010410174220f200d200f200d4b1b220d4100480d140240024020100d00200d102d21130c010b20132010200d103121130b2013450d22200d21100b2013200e6a2012200710e8061a200e20076a21064101211a2009450d002012102f0b0240024002400240024002400240200b0d004101211b0c010b4100211b20034100360240200342013703382003410c6a2017360200200341086a20183602002003200b3602042003200a4220883e0200200341d0006a2003200341386a109f0620032d00502204411f470d010240024020102006460d002010210d0c010b201041016a220d2010490d192010410174220e200d200e200d4b1b220d4100480d190240024020100d00200d102d21130c010b20132010200d103121130b2013450d27201021060b201320066a41013a0000200641016a210e20032802402212210f034002400240200d200e460d00200d21100c010b200d41016a220e200d490d1a200d4101742210200e2010200e4b1b22104100480d1a02400240200d0d002010102d21130c010b2013200d2010103121130b2013450d28200d210e2010210d0b2013200e6a200f41807f72200f41ff0071200f41077622111b3a0000200e41016a210e2011210f20110d000b2003280238210d02402010200e6b20124f0d00200e20126a220f200e490d1920104101742211200f2011200f4b1b220f4100480d190240024020100d00200f102d21130c010b20132010200f103121130b2013450d27200f21100b2013200e6a200d201210e8061a0240200328023c450d00200d102f0b200e20126a21064100211b0b02400240200c0d00410021110c010b2003410036024020034201370338410121124100210f4100210d2016210e03400240200d200f470d00200f41016a2211200f490d1a200f41017422072011200720114b1b22114100480d1a02400240200f0d002011102d21120c010b2012200f2011103121120b2012450d282003201136023c200320123602382011210f0b2003200d41016a22073602402012200d6a200e41807f72200e41ff0071200e41077622111b3a00002007210d2011210e20110d000b200c20144104746a210902400240024020160d00200c21120c010b200c21122014450d00200941706a211c4100210d200c211d02400340201d211102400340201141046a28020022040d01200d41016a210d2009201141106a2211470d000c050b0b201141106a211d200d41016a211e2016417f6a2116201141086a290200210a2011280200211f200328023c210f2003280240210e034002400240200e200f460d00200328023821120c010b200f41016a2212200f490d1e200f41017422072012200720124b1b22074100480d1e02400240200f0d002007102d21120c010b2003280238200f2007103121120b2012450d2c2003200736023c200320123602382007210f0b2003200e41016a22073602402012200e6a200d41807f72200d41ff0071200d41077622121b3a00002007210e2012210d20120d000b2003200a370308200320043602042003201f360200200341d0006a2003200341386a109f06024020032d00502204411f470d002016450d02201e210d201c2011470d010c020b0b20032d0053210720032f0051211d200328025421162003290358210a0240200941706a2011460d00201141106a211203402012221141106a211202402011280204220d450d0002402011410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201141086a280200450d002011280204102f0b20122009470d000b0b2007411074210d02402015450d00200c102f0b201d200d72210941012111200328023c450d052003280238102f0c050b201141106a21120b20092012460d0003402012221141106a211202402011280204220d450d0002402011410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201141086a280200450d002011280204102f0b20122009470d000b0b02402015450d00200c102f0b0240024020102006460d002010210d0c010b201041016a220d2010490d192010410174220e200d200e200d4b1b220d4100480d190240024020100d00200d102d21130c010b20132010200d103121130b2013450d27201021060b201320066a41023a0000200641016a210e20032802402212210f034002400240200d200e460d00200d21100c010b200d41016a220e200d490d1a200d4101742210200e2010200e4b1b22104100480d1a02400240200d0d002010102d21130c010b2013200d2010103121130b2013450d28200d210e2010210d0b2013200e6a200f41807f72200f41ff0071200f41077622111b3a0000200e41016a210e2011210f20110d000b2003280238210d02402010200e6b20124f0d00200e20126a220f200e490d1920104101742211200f2011200f4b1b220f4100480d190240024020100d00200f102d21130c010b20132010200f103121130b2013450d27200f21100b2013200e6a200d201210e8061a0240200328023c450d00200d102f0b200e20126a2106410121110b0240201a200845720d002019450d002008102f0b0240200b450d00201b4101730d0002402017450d002017410c6c210e200b210d03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b2018450d00200b102f0b2011200c45720d0202402014450d00200c20144104746a2107200c211203402012221141106a211202402011280204220d450d0002402011410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201141086a280200450d002011280204102f0b20122007470d000b0b2015450d02200c102f0c020b20032f005120032d0053411074722109200341d0006a41086a290300210a200328025421160240200328023c450d002003280238102f0b410021110b0240201a200845720d002019450d002008102f0b0240200b450d00201b4101730d0002402017450d002017410c6c210e200b210d03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b2018450d00200b102f0b0240200c452011720d0002402014450d00200c20144104746a2107200c211203402012221141106a211202402011280204220d450d0002402011410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201141086a280200450d002011280204102f0b20122007470d000b0b2015450d00200c102f0b2004411f460d002009410874200472210d02402010450d002013102f0b2000200d360200200041086a200a370200200041046a20163602002005102f0c010b200341146a2006360200200341106a20103602002003201336020c20034284808080c00037020420032005360200200341d0006a20032002109e06200320032900513703382003200341d0006a41086a29000037003f20032d0050220d411f460d012000200d3a000020002003290338370001200041086a200329003f3700000b410021124101210f41012113410121074101210241012109410121044101210e41012110410121110c290b41002111410121074101211241012102410121084101210b4101210941012104410121064101210c410121134101210e4101210f410121100c1e0b2001410c6a2802002111200141086a2802002107200141046a280200211202400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d12200d410174220f200e200f200e4b1b220f4100480d1202400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d202002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a410b3a0000200341c4006a41003602002003420137023c2003200236023820122011411c6c6a210c4100210d4100210e2011210f034002400240200d200e460d00200328023c210d0c010b200d41016a2213200d490d13200d41017422102013201020134b1b22134100480d1302400240200d0d002013102d210d0c010b200328023c200d20131031210d0b200d450d21200320133602402003200d36023c0b2003200e41016a360244200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280240210d2003280244210e200f210f0c010b0b2003200c36025c20032012360258200320073602542003201236025002402011450d000240024003402012220d411c6a2112200d2802102207450d02200d410c6a2802002102200d41086a2802002109200d2802042111200d41146a290200210a200d280200210e03400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d17200d4101742213200f2013200f4b1b22134100480d1702400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d25200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b0240024020110d00410121040c010b200320023602302003200936022c200320113602282003200341286a200341386a10900620032d0000220d411f470d02410021040b200aa72106200a422088a72210210e03400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d17200d4101742213200f2013200f4b1b22134100480d1702400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d25200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b024002402003280240220e2003280244220d6b2010490d00200328023c210e0c010b200d20106a220f200d490d16200e410174220d200f200d200f4b1b220d4100480d1602400240200e0d00200d102d210e0c010b200328023c200e200d1031210e0b200e450d242003200d3602402003200e36023c2003280244210d0b2003200d20106a360244200e200d6a2007201010e8061a02402006450d002007102f0b02402004450d002011450d0002402002450d002002410474210e2011210d03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b2009450d002011102f0b2012200c470d000b200c21120c010b20032d0003411074210e20032f0001210f20032903082120200328020421130240200aa7450d002007102f0b200f200e72210e20032012360258200341d0006a10a00602402003280240450d00200328023c102f0b2000200e3b00012000200d3a0000200041036a200e4110763a0000200041086a2020370000200041046a2013360000410021114101210f41012113410121074101210241012109410121044101210e41012110410121120c290b200320123602580b200341d0006a10a00620032802402109200328023c21022003280238221041086a2113201041046a211120032802442207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d13200d4101742212200f2012200f4b1b22124100480d1302400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d212010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d12200e410174220d200f200d200f4b1b220d4100480d1202400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d202010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b41002110410121074101211241012102410121084101210b4101210941012104410121064101210c410121134101210e4101210f410121110c1d0b2001410c6a2802002112200141086a2802002107200141046a280200211302400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d0e200d410174220f200e200f200e4b1b220f4100480d0e02400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d0d2002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a410a3a0000200341246a41003602002003420137021c200320023602182013201241186c6a21054100210d4100210e2012210f034002400240200d200e460d00200328021c210d0c010b200d41016a2210200d490d0f200d41017422112010201120104b1b22104100480d0f02400240200d0d002010102d210d0c010b200328021c200d20101031210d0b200d450d0e200320103602202003200d36021c0b2003200e41016a360224200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280220210d2003280224210e200f210f0c010b0b20032005360234200320133602302003200736022c2003201336022802402012450d0020034101722102200341026a210702400340201341186a210620132802002209450d01201341146a280200210c201341106a2802002108201328020c21042013280208210f2013280204210b4100210e200341003602442003420137023c2009200f4103746a21122003200341186a3602384100210d034002400240200e200d460d00200328023c210e0c010b200e41016a220d200e490d15200e4101742213200d2013200d4b1b220d4100480d1502400240200e0d00200d102d210e0c010b200328023c200e200d1031210e0b200e450d112003200d3602402003200e36023c2003280244210d0b2003200d41016a360244200e200d6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280240210e2003280244210d200f210f0c010b0b024020122009460d002009211003402010290200220a422088a7220d41ff01714104460d01201041086a2110200d4118744118752111200aa7210e03400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d17200d4101742213200f2013200f4b1b22134100480d1702400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d25200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b0240024020032802402003280244220d460d00200328023c210e0c010b200d41016a220e200d490d16200d410174220f200e200f200e4b1b220f4100480d1602400240200d0d00200f102d210e0c010b200328023c200d200f1031210e0b200e450d242003200f3602402003200e36023c2003280244210d0b2003200d41016a360244200e200d6a2011417f73220d413f7141c00072200d2011417f4a1b3a000020102012470d000b0b0240200b450d002009102f0b2004200c410474220e6a210f2004210d024002400240200c450d00200e41706a21132004210d0340200d2d0000210e2007200d41036a2d00003a00002003200d41016a2f00003b01000240200e41ac01470d00200d41106a210d0c020b200341cc006a41026a20072d000022103a0000200320032f010022113b014c200d41046a2802002112200d41086a290300210a200220113b0000200241026a20103a00002003200e3a00002003200a37030820032012360204200341d0006a2003200341386a109806024020032d00502211411f4722100d00201341706a2113200d41106a220d200f470d010c030b0b20032d0053210920032f0051210c2003280254210b2003290358210a02402013450d004100210e03400240200d200e6a220f41106a2d00004109470d000240200f41146a2212280200220f28020441ffffffff0371450d00200f280200102f2012280200210f0b200f102f0b2013200e41106a220e470d000b0b02402008450d002004102f0b02402003280240450d00200328023c102f0b2010450d02200c200941107472210d20032006360230200341286a10a10602402003280220450d00200328021c102f0b2000200d3b0001200020113a0000200041036a200d4110763a0000200041086a200a370000200041046a200b360000410021104101210f41012113410121074101210241012109410121044101210e0c2b0b200f200d460d000340200d41106a210e0240200d2d00004109470d000240200d41046a2213280200220d28020441ffffffff0371450d00200d280200102f2013280200210d0b200d102f0b200e210d200f200e470d000b0b02402008450d002004102f0b2003280240210c200328023c21042003280238210f20032802442209210e034002400240200f41086a2211280200200f410c6a2210280200220d460d00200f28020421130c010b200d41016a2213200d490d16200d41017422122013201220134b1b22124100480d1602400240200d0d002012102d21130c010b200f280204200d2012103121130b2013450d24200f2013360204201120123602002010280200210d0b2010200d41016a3602002013200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b024002402011280200220e2010280200220d6b2009490d00200f280204210e0c010b200d20096a2213200d490d15200e410174220d2013200d20134b1b220d4100480d1502400240200e0d00200d102d210e0c010b200f280204200e200d1031210e0b200e450d23200f200e3602042011200d3602002010280200210d0b2010200d20096a360200200e200d6a2004200910e8061a200c450d002004102f0b2006211320062005470d000b200521060b200320063602300b200341286a10a10620032802202109200328021c21022003280218221041086a2113201041046a211120032802242207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d12200d4101742212200f2012200f4b1b22124100480d1202400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d202010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d11200e410174220d200f200d200f4b1b220d4100480d1102400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d1f2010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b4100210f410121074101211241012102410121084101210b4101210941012104410121064101210c410121134101210e0c1b0b2001410c6a2802002111200141086a2802002112200141046a280200210902400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d0d200d410174220f200e200f200e4b1b220f4100480d0d02400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d0c2002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41093a0000200341c4006a41003602002003420137023c2003200236023820092011411c6c6a21084100210d4100210e2011210f034002400240200d200e460d00200328023c210d0c010b200d41016a2213200d490d0e200d41017422102013201020134b1b22134100480d0e02400240200d0d002013102d210d0c010b200328023c200d20131031210d0b200d450d0d200320133602402003200d36023c0b2003200e41016a360244200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280240210d2003280244210e200f210f0c010b0b2003200836025c20032009360258200320123602542003200936025002402011450d000240024003402009220d411c6a2109200d2802102212450d02200d410c6a2802002102200d41086a2802002104200d2802042107200d41146a290200210a200d280200210e03400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d12200d4101742213200f2013200f4b1b22134100480d1202400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d11200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b0240024020070d004101210c0c010b200320023602302003200436022c200320073602282003200341286a200341386a10900620032d0000220d411f470d024100210c0b2012200a422088a7220e4102746a2111200aa7210603400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d12200d4101742213200f2013200f4b1b22134100480d1202400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d11200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b024020112012460d002012211003402010280200210e03400240024020032802402003280244220d460d00200328023c210f0c010b200d41016a220f200d490d14200d4101742213200f2013200f4b1b22134100480d1402400240200d0d002013102d210f0c010b200328023c200d20131031210f0b200f450d13200320133602402003200f36023c2003280244210d0b2003200d41016a360244200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b201041046a22102011470d000b0b02402006450d002012102f0b02402007450d00200c450d0002402002450d002002410474210e2007210d03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b2004450d002007102f0b20092008470d000b200821090c010b20032d0003411074210e20032f0001210f20032903082120200328020421130240200aa7450d002012102f0b200f200e72210e20032009360258200341d0006a10a00602402003280240450d00200328023c102f0b2000200e3b00012000200d3a0000200041036a200e4110763a0000200041086a2020370000200041046a20133600004100210e4101210f41012113410121074101210241012109410121040c250b200320093602580b200341d0006a10a00620032802402109200328023c21022003280238221041086a2113201041046a211120032802442207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d0e200d4101742212200f2012200f4b1b22124100480d0e02400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d0d2010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d0d200e410174220d200f200d200f4b1b220d4100480d0d02400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d0c2010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b4100210e410121074101211241012102410121084101210b4101210941012104410121064101210c410121130c190b200141046a280200210d02400240200241046a280200200241086a280200220e460d002002280200210f0c010b200e41016a220f200e490d0c200e4101742213200f2013200f4b1b22134100480d0c02400240200e0d002013102d210f0c010b2002280200200e20131031210f0b200f450d0b2002200f360200200241046a2013360200200241086a280200210e0b200241086a200e41016a360200200f200e6a410c3a000041012112410021134100210e03400240200e2013470d002013410174220f201341016a2210200f20104b1b220f4100480d0d0240024020130d00200f102d21120c010b20122013200f103121120b2012450d0c200f21130b2012200e6a200d41807f72200d41ff0071200d410776220f1b3a0000200e41016a210e200f210d200f0d000b200e417f6a2104200241086a2111200241046a2107200e210f03400240024020072802002011280200220d460d00200228020021100c010b200d41016a2210200d490d0d200d41017422092010200920104b1b22094100480d0d02400240200d0d002009102d21100c010b2002280200200d2009103121100b2010450d0c20022010360200200720093602002011280200210d0b2011200d41016a3602002010200d6a200f41807f72200f41ff0071200f410776220d1b3a0000200d210f200d0d000b02400240200241046a280200220f200241086a280200220d6b20044d0d002002280200210f0c010b200d200e6a2210200d490d0c200f410174220d2010200d20104b1b220d4100480d0c02400240200f0d00200d102d210f0c010b2002280200200f200d1031210f0b200f450d0b2002200f360200200241046a200d360200200241086a280200210d0b200241086a200d200e6a360200200f200d6a2012200e10e8061a410121072013450d012012102f410121120c0f0b200141046a280200210d02400240200241046a280200200241086a280200220e460d002002280200210f0c010b200e41016a220f200e490d0b200e4101742213200f2013200f4b1b22134100480d0b02400240200e0d002013102d210f0c010b2002280200200e20131031210f0b200f450d0a2002200f360200200241046a2013360200200241086a280200210e0b200241086a200e41016a360200200f200e6a41083a000041012112410021134100210e03400240200e2013470d002013410174220f201341016a2210200f20104b1b220f4100480d0c0240024020130d00200f102d21120c010b20122013200f103121120b2012450d0b200f21130b2012200e6a200d41807f72200d41ff0071200d410776220f1b3a0000200e41016a210e200f210d200f0d000b200e417f6a2104200241086a2111200241046a2107200e210f03400240024020072802002011280200220d460d00200228020021100c010b200d41016a2210200d490d0c200d41017422092010200920104b1b22094100480d0c02400240200d0d002009102d21100c010b2002280200200d2009103121100b2010450d0b20022010360200200720093602002011280200210d0b2011200d41016a3602002010200d6a200f41807f72200f41ff0071200f410776220d1b3a0000200d210f200d0d000b02400240200241046a280200220f200241086a280200220d6b20044d0d002002280200210f0c010b200d200e6a2210200d490d0b200f410174220d2010200d20104b1b220d4100480d0b02400240200f0d00200d102d210f0c010b2002280200200f200d1031210f0b200f450d0a2002200f360200200241046a200d360200200241086a280200210d0b200241086a200d200e6a360200200f200d6a2012200e10e8061a410121072013450d002012102f410121120c0e0b410121120c0d0b2001410c6a2802002112200141086a2802002105200141046a280200210b02400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d09200d410174220f200e200f200e4b1b220f4100480d0902400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d082002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41073a0000200b201241146c6a2106410021104100210d4100210f4101210e2012211303400240200d200f470d002010200d41016a220f2010200f4b1b220f4100480d0a0240024020100d00200f102d210e0c010b200e200d200f1031210e0b200e450d090b200e200d6a201341807f72201341ff0071201341077622111b3a0000201041026a2110200d41016a210d2011211320110d000b02400240024020120d00200b21070c010b200b21100340201041146a2107201028020c220c4104460d012010280204210820102802002104200d4101742111201041106a280200211320102802082209211003400240200d200f470d00200d41016a220f200d490d0d2011200f2011200f4b1b220f4100480d0d02400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d0c0b200e200d6a201041807f72201041ff0071201041077622121b3a0000201141026a2111200d41016a210d2012211020120d000b0240200f200d6b20094f0d00200d20096a2210200d490d0c200f41017422112010201120104b1b22104100480d0c02400240200f0d002010102d210e0c010b200e200f20101031210e0b200e450d0b2010210f0b200e200d6a2004200910e8061a2009200f6b200d6a211002402008450d002004102f0b024020100d00200f41016a2210200f490d0c200f41017422112010201120104b1b22104100480d0c02400240200f0d002010102d210e0c010b200e200f20101031210e0b200e450d0b2010210f0b200e20096a200d6a200c3a00002009200d6a41016a210d03400240200d200f470d00200d41016a220f200d490d0d200d4101742210200f2010200f4b1b220f4100480d0d02400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d0c0b200e200d6a201341807f72201341ff0071201341077622101b3a0000200d41016a210d2010211320100d000b2007211020072006470d000c020b0b20062007460d000340200741146a21130240200741046a280200450d002007280200102f0b2013210720062013470d000b0b02402005450d00200b102f0b200241086a2112200241046a2107200d2110034002400240200728020020122802002213460d00200228020021110c010b201341016a22112013490d0a201341017422092011200920114b1b22094100480d0a0240024020130d002009102d21110c010b200228020020132009103121110b2011450d092002201136020020072009360200201228020021130b2012201341016a360200201120136a201041807f72201041ff0071201041077622131b3a00002013211020130d000b02400240200241046a2802002210200241086a28020022136b200d490d00200228020021100c010b2013200d6a22112013490d09201041017422132011201320114b1b22134100480d090240024020100d002013102d21100c010b200228020020102013103121100b2010450d0820022010360200200241046a2013360200200241086a28020021130b200241086a2013200d6a360200201020136a200e200d10e8061a41002113410121070240200f450d00200e102f0b4101211241012102410121084101210b4101210941012104410121064101210c0c140b2001410c6a2802002104200141086a2802002106200141046a280200210902400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d08200d410174220f200e200f200e4b1b220f4100480d0802400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d072002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41063a0000200341dc006a41003602002003420137025420032002360250200920044104746a21114100210d4100210e2004210f034002400240200d200e460d002003280254210d0c010b200d41016a2213200d490d09200d41017422102013201020134b1b22134100480d0902400240200d0d002013102d210d0c010b2003280254200d20131031210d0b200d450d08200320133602582003200d3602540b2003200e41016a36025c200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280258210d200328025c210e200f210f0c010b0b20092110024002402004450d004100210f0340200341086a220d2009200f6a220e41086a2802003602002003200e2902003703000240200e410d6a2d000022104102470d00200e41106a21100c020b200341186a41086a200d280200220d36020020032003290300220a370318200e410c6a2d00002112200341286a41086a2207200d3602002003200a370328024002402003280258200328025c220d460d00200328025421130c010b200d41016a2213200d490d0b200d41017422022013200220134b1b22024100480d0b02400240200d0d002002102d21130c010b2003280254200d2002103121130b2013450d0a2003200236025820032013360254200328025c210d0b2003200d41016a36025c2013200d6a41fdf9ff77201241037441187141107376413f7141c000723a0000024002402003280258200328025c220d460d00200328025421130c010b200d41016a2213200d490d0b200d41017422122013201220134b1b22124100480d0b02400240200d0d002012102d21130c010b2003280254200d2012103121130b2013450d0a2003201236025820032013360254200328025c210d0b2003200d41016a36025c2013200d6a20104100473a0000200341386a41086a2007280200360200200320032903283703382003200341386a200341d0006a109006024020032d00002212411f470d00200f41106a210f200e41106a2011470d010c030b0b20032d0003210720032f000121022003280204210c2003290308210a0240200441047441706a200f460d00200e41106a2110034002402010280208220e450d002010280200210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041106a210d0240201041046a280200450d002010280200102f0b200d2110200d2011470d000b0b2007411074210d02402006450d002009102f0b2002200d72210d02402003280258450d002003280254102f0b2000200d3b0001200020123a0000200041036a200d4110763a0000200041086a200a370000200041046a200c360000410021044101210f410121134101210741012102410121090c1f0b20112010460d00034002402010280208220e450d002010280200210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041106a210d0240201041046a280200450d002010280200102f0b200d2110200d2011470d000b0b02402006450d002009102f0b20032802582109200328025421022003280250221041086a2113201041046a2111200328025c2207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d09200d4101742212200f2012200f4b1b22124100480d0902400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d082010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d08200e410174220d200f200d200f4b1b220d4100480d0802400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d072010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b4100210c410121074101211241012102410121084101210b4101210941012104410121060c120b2001410c6a2802002107200141086a2802002109200141046a280200211202400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d07200d410174220f200e200f200e4b1b220f4100480d0702400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d062002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41053a0000200341dc006a41003602002003420137025420032002360250410121104100210f4100210d2007210e03400240200d200f470d00200f41016a2213200f490d08200f41017422112013201120134b1b22134100480d0802400240200f0d002013102d21100c010b2010200f2013103121100b2010450d0720032013360258200320103602542013210f0b2003200d41016a221136025c2010200d6a200e41807f72200e41ff0071200e41077622131b3a00002011210d2013210e20130d000b024002402007450d002007410c6c21134100210d03402012200d6a220e41046a280200220f4102460d012003200e280200200f200e41086a280200200341d0006a109b0620032d0000220e411f470d022013200d410c6a220d470d000b0b02402009450d002012102f0b20032802582109200328025421022003280250221041086a2113201041046a2111200328025c2207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d09200d4101742212200f2012200f4b1b22124100480d0902400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d082010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d08200e410174220d200f200d200f4b1b220d4100480d0802400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d072010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b41002106410121074101211241012102410121084101210b41012109410121040c110b20032d0003411074210d20032f0001210f2003290308210a2003280204211302402009450d002012102f0b200f200d72210d02402003280258450d002003280254102f0b2000200d3b00012000200e3a0000200041036a200d4110763a0000200041086a200a370000200041046a2013360000410021094101210f4101211341012107410121020c1b0b2001410c6a2802002112200141086a2802002109200141046a280200210702400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d06200d410174220f200e200f200e4b1b220f4100480d0602400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d052002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41043a0000200341dc006a41003602002003420137025420032002360250410121104100210f4100210d2012210e03400240200d200f470d00200f41016a2213200f490d07200f41017422112013201120134b1b22134100480d0702400240200f0d002013102d21100c010b2010200f2013103121100b2010450d0620032013360258200320103602542013210f0b2003200d41016a221136025c2010200d6a200e41807f72200e41ff0071200e41077622131b3a00002011210d2013210e20130d000b024002402012450d002012410c6c21024100210e03402007200e6a220d41046a28020022134102460d01200d2802002110200d41086a2802002111024002402003280258200328025c220d460d002003280254210f0c010b200d41016a220f200d490d09200d4101742212200f2012200f4b1b22124100480d0902400240200d0d002012102d210f0c010b2003280254200d20121031210f0b200f450d08200320123602582003200f3602540b2003200d41016a36025c200f200d6a41f0003a00002003201020132011200341d0006a109b0620032d0000220d411f470d022002200e410c6a220e470d000b0b02402009450d002007102f0b20032802582109200328025421022003280250221041086a2113201041046a2111200328025c2207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d08200d4101742212200f2012200f4b1b22124100480d0802400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d072010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d07200e410174220d200f200d200f4b1b220d4100480d0702400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d062010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b41002104410121074101211241012102410121084101210b410121090c0f0b20032d0003411074210e20032f0001210f2003290308210a2003280204211302402009450d002007102f0b200f200e72210e02402003280258450d002003280254102f0b2000200e3b00012000200d3a0000200041036a200e4110763a0000200041086a200a370000200041046a2013360000410021024101210f41012113410121070c190b2001410c6a2802002112200141086a2802002104200141046a280200210902400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d05200d410174220f200e200f200e4b1b220f4100480d0502400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d042002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41033a0000200920124102746a21074100210f4100210d41002111410121102012210e03400240200d2011470d00200f200d41016a2213200f20134b1b22114100480d0602400240200f0d002011102d21100c010b2010200d2011103121100b2010450d050b2010200d6a200e41807f72200e41ff0071200e41077622131b3a0000200f41026a210f200d41016a210d2013210e20130d000b02402012450d00200921120340200d410174210f2012280200210e03400240200d2011470d00200d41016a2213200d490d08200f2013200f20134b1b22114100480d0802400240200d0d002011102d21100c010b2010200d2011103121100b2010450d070b2010200d6a200e41807f72200e41ff0071200e41077622131b3a0000200f41026a210f200d41016a210d2013210e20130d000b201241046a22122007470d000b0b02402004450d002009102f0b200241086a2112200241046a2107200d210f03400240024020072802002012280200220e460d00200228020021130c010b200e41016a2213200e490d06200e41017422092013200920134b1b22094100480d0602400240200e0d002009102d21130c010b2002280200200e2009103121130b2013450d0520022013360200200720093602002012280200210e0b2012200e41016a3602002013200e6a200f41807f72200f41ff0071200f410776220e1b3a0000200e210f200e0d000b02400240200241046a280200220f200241086a280200220e6b200d490d002002280200210f0c010b200e200d6a2213200e490d05200f410174220e2013200e20134b1b220e4100480d0502400240200f0d00200e102d210f0c010b2002280200200f200e1031210f0b200f450d042002200f360200200241046a200e360200200241086a280200210e0b200241086a200e200d6a360200200f200e6a2010200d10e8061a410021094101210702402011450d002010102f0b4101211241012102410121084101210b0c0c0b2001410c6a2802002111200141086a2802002116200141046a280200211402400240200241046a280200200241086a280200220d460d002002280200210e0c010b200d41016a220e200d490d04200d410174220f200e200f200e4b1b220f4100480d0402400240200d0d00200f102d210e0c010b2002280200200d200f1031210e0b200e450d032002200e360200200241046a200f360200200241086a280200210d0b200241086a200d41016a360200200e200d6a41023a0000200341dc006a410036020020034201370254200320023602502014201141286c6a21024100210d4100210e2011210f034002400240200d200e460d002003280254210d0c010b200d41016a2213200d490d05200d41017422102013201020134b1b22134100480d0502400240200d0d002013102d210d0c010b2003280254200d20131031210d0b200d450d04200320133602582003200d3602540b2003200e41016a36025c200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280258210d200328025c210e200f210f0c010b0b20142112024002402011450d00201141286c41586a21092014211203402012220d41286a2112200d2d0018220c4104460d01200d41196a2f0000200d411b6a2d0000411074722105200d41206a290000210a200d411c6a2800002110200d41146a2802002107200d41106a2802002108200d28020c2104200d280204210b200d2802002106200d2802082211210e0340024002402003280258200328025c220d460d002003280254210f0c010b200d41016a220f200d490d08200d4101742213200f2013200f4b1b22134100480d0802400240200d0d002013102d210f0c010b2003280254200d20131031210f0b200f450d07200320133602582003200f3602540b2003200d41016a36025c200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b024002402003280258220d200328025c220f6b2011490d00200328025421130c010b200f20116a220e200f490d07200d4101742213200e2013200e4b1b220e4100480d0702400240200d0d00200e102d21130c010b2003280254200d200e103121130b2013450d062003200e36025820032013360254200e210d0b2003200f20116a220e36025c2013200f6a2006201110e8061a0240200b450d002006102f0b2007210f034002400240200d200e460d002003280254210d0c010b200d41016a2213200d490d08200d41017422112013201120134b1b22134100480d0802400240200d0d002013102d210d0c010b2003280254200d20131031210d0b200d450d07200320133602582003200d3602540b2003200e41016a36025c200d200e6a200f41807f72200f41ff0071200f410776220f1b3a00000240200f450d002003280258210d200328025c210e200f210f0c010b0b024002402003280258220d200328025c220f6b2007490d002003280254210e0c010b200f20076a220e200f490d07200d4101742213200e2013200e4b1b22134100480d0702400240200d0d002013102d210e0c010b2003280254200d20131031210e0b200e450d06200320133602582003200e3602542013210d0b2003200f20076a221336025c200e200f6a2004200710e8061a02402008450d002004102f0b024002400240024002400240200c0e0400010203000b0240200d2013470d00200d41016a220f200d490d0c200d4101742211200f2011200f4b1b220f4100480d0c02400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d0b2003200f3602582003200e3602540b2003201341016a36025c200e20136a41003a00000340024002402003280258200328025c220d460d002003280254210e0c010b200d41016a220e200d490d0d200d410174220f200e200f200e4b1b220f4100480d0d02400240200d0d00200f102d210e0c010b2003280254200d200f1031210e0b200e450d0c2003200f3602582003200e3602540b2003200d41016a36025c200e200d6a201041807f72201041ff00712010410776220d1b3a0000200d2110200d0d000c040b0b0240200d2013470d00200d41016a220f200d490d0b200d4101742211200f2011200f4b1b220f4100480d0b02400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d0a2003200f3602582003200e3602540b2003201341016a36025c200e20136a41013a0000024002402003280258200328025c220d460d002003280254210e0c010b200d41016a220e200d490d0b200d410174220f200e200f200e4b1b220f4100480d0b02400240200d0d00200f102d210e0c010b2003280254200d200f1031210e0b200e450d0a2003200f3602582003200e3602540b2003200d41016a36025c200e200d6a41f0003a000020032010200aa7200a422088a7200341d0006a109b0620032d0000220d411f460d0220032f000120032d000341107472210e0c030b0240200d2013470d00200d41016a220f200d490d0a200d4101742211200f2011200f4b1b220f4100480d0a02400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d092003200f3602582003200e3602540b2003201341016a36025c200e20136a41023a000020032010200aa7200a422088a7200341d0006a109b0620032d0000220d411f460d0120032f000120032d000341107472210e0c020b0240200d2013470d00200d41016a220f200d490d09200d4101742210200f2010200f4b1b220f4100480d0902400240200d0d00200f102d210e0c010b200e200d200f1031210e0b200e450d082003200f3602582003200e3602540b2003201341016a36025c200e20136a41033a0000024002402003280258200328025c220d460d002003280254210e0c010b200d41016a220e200d490d09200d410174220f200e200f200e4b1b220f4100480d0902400240200d0d00200f102d210e0c010b2003280254200d200f1031210e0b200e450d082003200f3602582003200e3602540b2003200d41016a36025c200e200d6a2005417f73220d413f7141c00072200d2005411874411875417f4a1b3a0000024002402003280258200328025c220d460d002003280254210e0c010b200d41016a220e200d490d09200d410174220f200e200f200e4b1b220f4100480d0902400240200d0d00200f102d210e0c010b2003280254200d200f1031210e0b200e450d082003200f3602582003200e3602540b2003200d41016a36025c200e200d6a20054180fe03714100473a00000b200941586a210920122002470d010c030b0b2003290308210a2003280204210f024020022012460d0003400240201241046a280200450d002012280200102f0b0240201241106a280200450d002012410c6a280200102f0b201241286a2112200941586a22090d000b0b02402016450d002014102f0b02402003280258450d002003280254102f0b2000200e3b00012000200d3a0000200041036a200e4110763a0000200041086a200a370000200041046a200f360000410021074101210f410121130c180b20022012460d0003400240201241046a280200450d002012280200102f0b201241286a210d0240201241106a280200450d002012410c6a280200102f0b200d21122002200d470d000b0b02402016450d002014102f0b20032802582109200328025421022003280250221041086a2113201041046a2111200328025c2207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d05200d4101742212200f2012200f4b1b22124100480d0502400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d042010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d04200e410174220d200f200d200f4b1b220d4100480d0402400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d032010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2002200710e8061a02402009450d002002102f0b4100210b410121074101211241012102410121080c0a0b200c2009460d000340200941106a210d0240200941046a280200450d002009280200102f0b200d2109200c200d470d000b0b02402014450d002005102f0b200241086a2112200241046a2107200e210f03400240024020072802002012280200220d460d00200228020021130c010b200d41016a2213200d490d03200d41017422092013200920134b1b22094100480d0302400240200d0d002009102d21130c010b2002280200200d2009103121130b2013450d0220022013360200200720093602002012280200210d0b2012200d41016a3602002013200d6a200f41807f72200f41ff0071200f410776220d1b3a0000200d210f200d0d000b02400240200241046a280200220f200241086a280200220d6b200e490d002002280200210f0c010b200d200e6a2213200d490d02200f410174220d2013200d20134b1b220d4100480d0202400240200f0d00200d102d210f0c010b2002280200200f200d1031210f0b200f450d012002200f360200200241046a200d360200200241086a280200210d0b200241086a200d200e6a360200200f200d6a2010200e10e8061a41002108410121072011450d022010102f0c020b1036000b1038000b41012112410121020c040b200241086a200d41016a360200200e200d6a41003a0000200341dc006a41003602002003420137025420032002360250200a422088a721134100210d4100210e200aa72212210f034002400240200d200e460d002003280254210d0c010b200d41016a2210200d490d02200d41017422112010201120104b1b22104100480d0202400240200d0d002010102d210d0c010b2003280254200d20101031210d0b200d450d10200320103602582003200d3602540b2003200e41016a36025c200d200e6a200f41807f72200f41ff0071200f41077622101b3a00002003280258210d200328025c210e2010210f20100d000b02400240200d200e6b2012490d00200328025421100c010b200e20126a220f200e490d01200d4101742210200f2010200f4b1b220f4100480d0102400240200d0d00200f102d21100c010b2003280254200d200f103121100b2010450d0f2003200f36025820032010360254200f210d0b2003200e20126a220f36025c2010200e6a200c201210e8061a0240200b450d00200c102f0b034002400240200d200f460d002003280254210d0c010b200d41016a220e200d490d02200d4101742210200e2010200e4b1b220e4100480d0202400240200d0d00200e102d210d0c010b2003280254200d200e1031210d0b200d450d102003200e3602582003200d3602540b2003200f41016a36025c200d200f6a201341807f72201341ff00712013410776220e1b3a00000240200e450d002003280258210d200328025c210f200e21130c010b0b4101210202402009450d002007210e0340024002402003280258200328025c220d460d002003280254210f0c010b200d41016a220f200d490d03200d4101742213200f2013200f4b1b22134100480d0302400240200d0d002013102d210f0c010b2003280254200d20131031210f0b200f450d11200320133602582003200f3602540b2003200d41016a36025c200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b024002402003280258220e200328025c220d6b2007490d002003280254210e0c010b200d20076a220f200d490d02200e4101742213200f2013200f4b1b220f4100480d0202400240200e0d00200f102d210e0c010b2003280254200e200f1031210e0b200e450d102003200f3602582003200e3602540b2003200d20076a36025c200e200d6a2009200710e8061a410021022008450d002009102f0b200620044104746a21072004210e0340024002402003280258200328025c220d460d002003280254210f0c010b200d41016a220f200d490d02200d4101742213200f2013200f4b1b22134100480d0202400240200d0d002013102d210f0c010b2003280254200d20131031210f0b200f450d10200320133602582003200f3602540b2003200d41016a36025c200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02402004450d002006211003402010280200220f4108460d012010410c6a2802002112201041086a280200210d2010280204210e024002400240024002400240024002400240024002400240200f0e080102030405060700010b02402003280258200328025c220f460d00200328025421130c090b200f41016a2213200f490d0d200f41017422112013201120134b1b22114100480d0d02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1b20032011360258200320133602540c080b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0d200f41017422112013201120134b1b22114100480d0d02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1b20032011360258200320133602540b2003200f41016a36025c2013200f6a41003a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0e200f41017422112013201120134b1b22114100480d0e02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1c20032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d0e200e4101742213200f2013200f4b1b22134100480d0e02400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d1c200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000c090b0b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0c200f41017422112013201120134b1b22114100480d0c02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1a20032011360258200320133602540b2003200f41016a36025c2013200f6a41013a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0d200f41017422112013201120134b1b22114100480d0d02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1b20032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d0d200e4101742213200f2013200f4b1b22134100480d0d02400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d1b200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000c080b0b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0b200f41017422112013201120134b1b22114100480d0b02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1920032011360258200320133602540b2003200f41016a36025c2013200f6a41023a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0c200f41017422112013201120134b1b22114100480d0c02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1a20032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d0c200e4101742213200f2013200f4b1b22134100480d0c02400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d1a200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000c070b0b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0a200f41017422112013201120134b1b22114100480d0a02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1820032011360258200320133602540b2003200f41016a36025c2013200f6a41033a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0b200f41017422112013201120134b1b22114100480d0b02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1920032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d0b200e4101742213200f2013200f4b1b22134100480d0b02400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d19200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000b20032012200341d0006a10930620032d0000220d411f460d0620032f000120032d000341107472210e0c030b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d09200f41017422112013201120134b1b22114100480d0902400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1720032011360258200320133602540b2003200f41016a36025c2013200f6a41043a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d0a200f41017422112013201120134b1b22114100480d0a02400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1820032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d0a200e4101742213200f2013200f4b1b22134100480d0a02400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d18200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000b20032012200341d0006a10930620032d0000220d411f460d0520032f000120032d000341107472210e0c020b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d08200f41017422112013201120134b1b22114100480d0802400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1620032011360258200320133602540b2003200f41016a36025c2013200f6a41053a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d09200f41017422112013201120134b1b22114100480d0902400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1720032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d09200e4101742213200f2013200f4b1b22134100480d0902400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d17200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000b20032012200341d0006a10930620032d0000220d411f460d0420032f000120032d000341107472210e0c010b024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d07200f41017422112013201120134b1b22114100480d0702400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1520032011360258200320133602540b2003200f41016a36025c2013200f6a41063a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d08200f41017422112013201120134b1b22114100480d0802400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1620032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d08200e4101742213200f2013200f4b1b22134100480d0802400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d16200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000c030b0b2003290308210a2003280204210f02402005450d002006102f0b2003280258450d122003280254102f0c120b2003200f41016a36025c2013200f6a41073a00000340024002402003280258200328025c220f460d00200328025421130c010b200f41016a2213200f490d06200f41017422112013201120134b1b22114100480d0602400240200f0d002011102d21130c010b2003280254200f2011103121130b2013450d1420032011360258200320133602540b2003200f41016a36025c2013200f6a200e41807f72200e41ff0071200e410776220f1b3a0000200f210e200f0d000b0340024002402003280258200328025c220e460d002003280254210f0c010b200e41016a220f200e490d06200e4101742213200f2013200f4b1b22134100480d0602400240200e0d002013102d210f0c010b2003280254200e20131031210f0b200f450d14200320133602582003200f3602540b2003200e41016a36025c200f200e6a200d41807f72200d41ff0071200d410776220e1b3a0000200e210d200e0d000b0b2003411f3a00000b201041106a22102007470d000b0b02402005450d002006102f0b20032802582106200328025421042003280250221041086a2113201041046a2111200328025c2207210e03400240024020112802002013280200220d460d002010280200210f0c010b200d41016a220f200d490d02200d4101742212200f2012200f4b1b22124100480d0202400240200d0d002012102d210f0c010b2010280200200d20121031210f0b200f450d102010200f360200201120123602002013280200210d0b2013200d41016a360200200f200d6a200e41807f72200e41ff0071200e410776220d1b3a0000200d210e200d0d000b02400240201041046a280200220e201041086a280200220d6b2007490d002010280200210e0c010b200d20076a220f200d490d01200e410174220d200f200d200f4b1b220d4100480d0102400240200e0d00200d102d210e0c010b2010280200200e200d1031210e0b200e450d0f2010200e360200201041046a200d360200201041086a280200210d0b201041086a200d20076a360200200e200d6a2004200710e8061a02402006450d002004102f0b41012112410021072009450d012002450d012008450d012009102f0c010b1038000b410121020b410121080b4101210b0b410121090b410121040b410121060b4101210c0b410121130b4101210e0b4101210f0b41012110410121110b2000411f3a000020012d0000220d410f4b0d0a02400240024002400240024002400240024002400240024002400240200d0e100001020304050607081809180a0b0c0d000b2002450d17200141086a280200450d17200141046a280200102f0c170b2012450d160240200141086a280200450d00200141046a280200102f0b200141146a280200450d16200141106a280200102f0c160b2008450d1502402001410c6a280200220e450d00200141046a280200210d200e410474210e03400240200d41046a280200450d00200d280200102f0b200d41106a210d200e41706a220e0d000b0b200141086a280200450d152001280204102f0c150b200b450d1402402001410c6a280200220e450d00200141046a280200210d200e41286c210e03400240200d41046a280200450d00200d280200102f0b0240200d41106a280200450d00200d410c6a280200102f0b200d41286a210d200e41586a220e0d000b0b200141086a280200450d142001280204102f0c140b2009450d13200141086a280200450d13200141046a280200102f0c130b2004450d12200141086a280200450d12200141046a280200102f0c120b2006450d11200141086a280200450d11200141046a280200102f0c110b200c450d1002402001410c6a280200220d450d00200141046a2802002210200d4104746a2111034002402010280208220e450d002010280200210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041106a210d0240201041046a280200450d002010280200102f0b200d2110200d2011470d000b0b200141086a280200450d102001280204102f0c100b2013450d0f02402001410c6a280200220e450d00200141046a280200210d200e41146c210e03400240200d41046a280200450d00200d280200102f0b200d41146a210d200e416c6a220e0d000b0b200141086a280200450d0f2001280204102f0c0f0b200e450d0e200141046a220d10a206200141086a280200450d0e200d280200102f0c0e0b200f450d0d02402001410c6a280200220d450d00200141046a2802002210200d41186c6a211103400240201041046a280200450d002010280200102f0b0240201041146a280200220e450d00201028020c210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041186a210d0240201041106a280200450d00201028020c102f0b200d2110200d2011470d000b0b200141086a280200450d0d2001280204102f0c0d0b2010450d0c200141046a220d10a206200141086a280200450d0c200d280200102f0c0c0b2011450d0b0240200141046a280200220d450d00200141086a280200450d00200d102f0b0240200141146a280200220d450d0002402001411c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b200141186a280200450d002001280214102f0b200141246a2802002210450d0b02402001412c6a280200220d450d002010200d4104746a211103402010221341106a211002402013280204220d450d0002402013410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201341086a280200450d002013280204102f0b20102011470d000b0b200141286a280200450d0b2001280224102f0c0b0b2007450d0a0240200141086a280200450d00200141046a280200102f0b0240200141146a280200220d450d00200141186a280200450d00200d102f0b200141246a280200450d0a200141206a280200102f0c0a0b02402009450d002002450d002008450d002009102f0b2000200e3b00012000200d3a0000200041036a200e4110763a0000200041086a200a370000200041046a200f360000410121134100210f0c010b1036000b410121070b410121020b410121090b410121040b4101210e0b410121100b41012111410121120b20012d0000220d410f4b0d0002400240024002400240024002400240024002400240024002400240200d0e100001020304050607080e090e0a0b0c0d000b200141086a280200450d0d200141046a280200102f0c0d0b2013450d0c0240200141086a280200450d00200141046a280200102f0b200141146a280200450d0c200141106a280200102f0c0c0b02402001410c6a280200220e450d00200141046a280200210d200e410474210e03400240200d41046a280200450d00200d280200102f0b200d41106a210d200e41706a220e0d000b0b200141086a280200450d0b2001280204102f0c0b0b2007450d0a02402001410c6a280200220e450d00200141046a280200210d200e41286c210e03400240200d41046a280200450d00200d280200102f0b0240200d41106a280200450d00200d410c6a280200102f0b200d41286a210d200e41586a220e0d000b0b200141086a280200450d0a2001280204102f0c0a0b200141086a280200450d09200141046a280200102f0c090b2002450d08200141086a280200450d08200141046a280200102f0c080b2009450d07200141086a280200450d07200141046a280200102f0c070b2004450d0602402001410c6a280200220d450d00200141046a2802002210200d4104746a2111034002402010280208220e450d002010280200210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041106a210d0240201041046a280200450d002010280200102f0b200d2110200d2011470d000b0b200141086a280200450d062001280204102f0c060b02402001410c6a280200220e450d00200141046a280200210d200e41146c210e03400240200d41046a280200450d00200d280200102f0b200d41146a210d200e416c6a220e0d000b0b200141086a280200450d052001280204102f0c050b200e450d04200141046a220d10a206200141086a280200450d04200d280200102f0c040b2010450d0302402001410c6a280200220d450d00200141046a2802002210200d41186c6a211103400240201041046a280200450d002010280200102f0b0240201041146a280200220e450d00201028020c210d200e410474210e03400240200d2d00004109470d000240200d41046a2213280200220f28020441ffffffff0371450d00200f280200102f2013280200210f0b200f102f0b200d41106a210d200e41706a220e0d000b0b201041186a210d0240201041106a280200450d00201028020c102f0b200d2110200d2011470d000b0b200141086a280200450d032001280204102f0c030b2011450d02200141046a220d10a206200141086a280200450d02200d280200102f0c020b2012450d010240200141046a280200220d450d00200141086a280200450d00200d102f0b0240200141146a280200220d450d0002402001411c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b200141186a280200450d002001280214102f0b200141246a2802002210450d0102402001412c6a280200220d450d002010200d4104746a211103402010221341106a211002402013280204220d450d0002402013410c6a280200220e450d00200e410c6c210e03400240200d280200220f450d00200d41046a280200450d00200f102f0b200d410c6a210d200e41746a220e0d000b0b201341086a280200450d002013280204102f0b20102011470d000b0b200141286a280200450d012001280224102f0c010b200f450d000240200141086a280200450d00200141046a280200102f0b0240200141146a280200220d450d00200141186a280200450d00200d102f0b200141246a280200450d00200141206a280200102f0b200341e0006a24000b1300200041073602042000418c97c6003602000b3400200041eba1c60036020420004100360200200041146a4102360200200041106a4180a2c600360200200041086a42133702000bca09020b7f027e230041106b220224002002410036020820024201370300024002404120102d2203450d002003200029004c370000200341186a2204200041e4006a290000370000200341106a2205200041dc006a290000370000200341086a2206200041d4006a2900003700004120102d2207450d00200242a080808080043702042002200736020020072003290000370000200741086a2006290000370000200741106a2005290000370000200741186a20042900003700002003102f2007412041c00010312203450d002003200029006c370020200341286a200041f4006a290000370000200341306a200041fc006a290000370000200341386a20004184016a290000370000200242c08080808008370204200220033602000240024020002903004201510d00200341c00041800110312203450d02200341003a00402002428081808090083702042002200336020041c10021070c010b200341c00041800110312203450d01200341013a00402003200041086a2207290000370041200341e9006a200041306a2903003700002003200041286a290300370061200341c9006a200741086a290000370000200341d1006a200741106a290000370000200341d9006a200741186a29000037000020024280818080900e3702042002200336020041f10021070b0240024020002802384101460d002002200741016a360208200320076a41003a00000c010b2002200741016a360208200320076a41013a00002000413c6a28020021040240024020022802042207200228020822036b4104490d00200228020021070c010b200341046a22052003490d03200741017422062005200620054b1b22054100480d030240024020070d002005102d21070c010b200228020020072005103121070b2007450d0220022005360204200220073602000b2002200341046a360208200720036a20043600000b20002802402108200041c8006a2802002200200210690240024020000d002002280208210020022802042104200228020021070c010b2008200041306c6a210941002002280208220a6b210520022802042104410021030340200a20036a210602400240200420056a4120490d00200228020021070c010b200641206a22002006490d04200441017422072000200720004b1b22004100480d040240024020040d002000102d21070c010b200228020020042000103121070b2007450d032002200036020420022007360200200021040b2007200a6a20036a220b41186a200820036a220041186a290000370000200b41106a200041106a290000370000200b41086a200041086a2900003700002002200641206a220c360208200b2000290000370000200041286a290300210d200041206a290300210e0240200420056a41606a410f4b0d00200c41106a220b200c490d042004410174220c200b200c200b4b1b220b4100480d040240024020040d00200b102d21070c010b20072004200b103121070b2007450d032002200b36020420022007360200200b21040b2007200a6a20036a220b41286a200d370000200b41206a200e3700002002200641306a360208200541506a2105200341306a21032009200041306a470d000b200a20036a21000b20012902002000ad4220862007ad84100402402004450d002007102f0b200241106a24000f0b1036000b1038000bbd0101037f230041206b2203240002400240200241286c4104722204417f4c0d002004102d2205450d01200341003602102003200436020c200320053602082002200341086a106902402002450d002001200241286c6a21020340200341086a200141201082012003200141206a290300370318200341086a200341186a41081082012002200141286a2201470d000b0b20002003290308370200200041086a200341086a41086a280200360200200341206a24000f0b103d000b1036000bb91107027f037e037f027e017f027e047f230041d0006b220324000240024002400240024020002802002d0000200141ff0171460d002000280208210441c6b5c400ad4280808080f00084100122002900002105200341106a41086a200041086a290000370300200320053703102000102f41f6dbc400ad4280808080f00084100122002900002105200341206a41086a200041086a290000370300200320053703202000102f4120102d2200450d0120002002290000370000200041186a200241186a290000370000200041106a200241106a290000370000200041086a200241086a2900003700002000ad4280808080800484100322012900002105200141086a2900002106200141106a2900002107200341306a41186a2208200141186a290000370300200341306a41106a22092007370300200341306a41086a2006370300200320053703302001102f2000102f41c000102d2200450d01200020032903103700002000200329032037001020002003290330370020200041086a200341106a41086a290300370000200041186a200341206a41086a290300370000200041286a200341306a41086a290300370000200041306a2009290300370000200041386a2008290300370000200341306a200010b70420032902342105200328023021012000102f2001410820011b210a428080d287e2bc2d210b4200210702402005420020011b220c422088a7220d450d0002400240200d41186c22000d0042002107428080d287e2bc2d210b410021010c010b200a20006a210842002106428080d287e2bc2d210541002101200a21000240034002402005200041086a290300220e7d220b2005562006200041106a290300220f7d2005200e54ad7d220720065620072006511b450d00200041086a200e20057d370300200041106a200f20067d200e200554ad7d3703004200210b420021070c020b200141016a2101200b2105200721062008200041186a2200470d000b0b2001200d4b0d040b41c6b5c400ad4280808080f00084100122002900002105200341106a41086a200041086a290000370300200320053703102000102f41f6dbc400ad4280808080f00084100122002900002105200341206a41086a200041086a290000370300200320053703202000102f4120102d2200450d0220002002290000370000200041186a200241186a290000370000200041106a200241106a290000370000200041086a200241086a2900003700002000ad4280808080800484100322082900002105200841086a2900002106200841106a290000210e200341306a41186a2209200841186a290000370300200341306a41106a2210200e370300200341306a41086a2006370300200320053703302008102f2000102f41c000102d2211450d02201120032903103700002011200329032037001020112003290330370020201141086a200341106a41086a290300370000201141186a200341206a41086a290300370000201141286a200341306a41086a290300370000201141306a2010290300370000201141386a2009290300370000200d20016b220841186c4104722200417f4c0d042000102d2209450d022003410036023820032000360234200320093602302008200341306a1069024002402001200d470d002003280238210020032802342108200328023021010c010b200a200141186c6a2109200a200d41186c6a21124100200328023822006b210d20032802342108034020092802002110024002402008200d6a4104490d00200328023021010c010b200041046a22012000490d08200841017422132001201320014b1b22134100480d080240024020080d002013102d21010c010b200328023020082013103121010b2001450d052003201336023420032001360230201321080b2003200041046a2213360238200120006a2010360000200941106a2903002105200941086a290300210602402008200d6a417c6a410f4b0d00201341106a22102013490d08200841017422132010201320104b1b22104100480d080240024020080d002010102d21010c010b200120082010103121010b2001450d052003201036023420032001360230201021080b200120006a2210410c6a2005370000201041046a20063700002003200041146a2200360238200d416c6a210d200941186a22092012470d000b0b2011ad42808080808008842000ad4220862001ad84100402402008450d002001102f0b2011102f0b0240200ca7450d00200a102f0b41c6b5c400ad4280808080f00084100122002900002105200341106a41086a200041086a290000370300200320053703102000102f41efdbc400ad4280808080f00084100122002900002105200341206a41086a200041086a290000370300200320053703202000102f4120102d2200450d0120002002290000370000200041186a200241186a290000370000200041106a200241106a290000370000200041086a200241086a2900003700002000ad4280808080800484100322012900002105200141086a2900002106200141106a290000210e200341306a41186a2208200141186a290000370300200341306a41106a2209200e370300200341306a41086a2006370300200320053703302001102f2000102f41c000102d2200450d01428080d287e2bc2d200b7d210542002007200b428080d287e2bc2d56ad7c7d2106200020032903103700002000200329032037001020002003290330370020200041086a200341106a41086a290300370000200041186a200341206a41086a290300370000200041286a200341306a41086a290300370000200041306a2009290300370000200041386a2008290300370000200341086a200041c0001095012003200328020c41016a410120032802081b22013602302000ad4280808080800884200341306aad4280808080c0008410042000102f02402001410a490d00200210b5040b2004200520042903007c2207370300200441086a2200200620002903007c2007200554ad7c370300410021020b200341d0006a240020020f0b1036000b2001200d104b000b103d000b1038000b950201047f230041d0006b22012400200141c00036020420012000360200200141086a2000ad42808080808008841002107302400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0020022d0000220441014b0d0041002100024020040e020200020b410121000c010b20014100360220200142013703182001410b36022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141b885c7003602382001200141286a360248200141346a41d8dbc100200141386a103c1a200135022042208620013502188410080240200128021c450d002001280218102f0b410221000b2003450d002002102f0b200141d0006a240020000b8b0503027f017e047f230041d0006b220224004180a3ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41a084c600ad4280808080f00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100622012900003703302001102f200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a106c2003102f02400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000b8b0503027f017e047f230041d0006b220224004180a3ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41c883c600ad4280808080c00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100622012900003703302001102f200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a106c2003102f02400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000b9f1005097f037e027f037e037f230041f0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad8410021073024002400240024020032802102204450d00200328021421052003200341186a28020022063602a401200320043602a00141002107200341003a00e8022004210220062101024002400240024002400340200721082001450d01200341c8026a20086a20022d00003a000020032001417f6a22013602a4012003200241016a22023602a0012003200841016a22073a00e80220074120470d000b200341a8016a41086a200341c8026a41086a290300370300200341a8016a41106a200341c8026a41106a290300370300200341a8016a41186a200341c8026a41186a290300370300200320032903c8023703a80141002107200341003a00e802200620086b417e6a2108034020012007460d02200341c8026a20076a200220076a22062d00003a00002003200641016a3602a0012003200741016a22063a00e802200320083602a4012008417f6a21082006210720064120470d000b200341c8016a41086a200341c8026a41086a290300370300200341c8016a41106a200341c8026a41106a290300370300200341c8016a41186a200341c8026a41186a290300370300200320032903c8023703c80120012006460d06200220066a22092d00002102200320083602a4012003200941016a22073602a001200241014b0d0620020e020302030b200841ff0171450d05200341003a00e8020c050b200741ff0171450d04200341003a00e8020c040b200941116a210741002102200341003a00e802200120066b416f6a21010240034020082002460d01200341c8026a20026a200920026a41016a2d00003a000020032001410f6a3602a4012003200741716a3602a0012003200241016a22063a00e8022001417f6a2101200741016a21072006210220064120470d000b200341a8026a41186a2202200341c8026a41186a290300370300200341a8026a41106a220a200341c8026a41106a290300370300200341a8026a41086a220b200341c8026a41086a290300370300200320032903c8023703a802200820066b4110490d04200920066a220841096a290000210c200841016a290000210d20034188026a41086a200b29030037030020034188026a41106a200a29030037030020034188026a41186a2002290300370300200320013602a401200320073602a001200320032903a802370388024201210e200121080c020b200241ff0171450d03200341003a00e8020c030b4200210e0b200341e8016a41186a20034188026a41186a290300370300200341e8016a41106a20034188026a41106a290300370300200341e8016a41086a20034188026a41086a29030037030020032003290388023703e8012008450d0120072d0000210120032008417f6a22023602a4012003200741016a3602a001200141014b0d01410021060240024020010e020100010b20024104490d022007280001210920032008417b6a3602a4012003200741056a3602a001410121060b200341c8026a200341a0016a10f70320032802c802450d01200341f0006a41086a2202200341c8026a41086a2201280200360200200341d0006a41086a2207200341a8016a41086a290300370300200341d0006a41106a2208200341a8016a41106a290300370300200341d0006a41186a220a200341a8016a41186a290300370300200341306a41086a220b200341c8016a41086a290300370300200341306a41106a220f200341c8016a41106a290300370300200341306a41186a2210200341c8016a41186a290300370300200320032903c802370370200320032903a801370350200320032903c80137033020034180016a41186a200341e8016a41186a290300221137030020034180016a41106a200341e8016a41106a290300221237030020034180016a41086a200341e8016a41086a290300221337030020012013370300200341c8026a41106a22142012370300200341c8026a41186a22152011370300200341206a41086a22162002280200360200200320032903e801221137038001200320113703c80220032003290370370320200341a8026a41186a2202200a290300370300200341a8026a41106a220a2008290300370300200341a8026a41086a22082007290300370300200320032903503703a80220034188026a41186a2207201029030037030020034188026a41106a2210200f29030037030020034188026a41086a220f200b2903003703002003200329033037038802200041306a200c370300200041286a200d3703002000413c6a2009360200200041386a2006360200200041206a2015290300370300200041186a2014290300370300200041106a2001290300370300200020032903c802370308200041c0006a2003290320370300200041c8006a2016280200360200200020032903a80237024c200041d4006a2008290300370200200041dc006a200a290300370200200041e4006a200229030037020020004184016a2007290300370200200041fc006a2010290300370200200041f4006a200f290300370200200020032903880237026c0c020b200042023703000c020b200341003602b002200342013703a8022003410b36028c022003200341086a360288022003200341a8026a3602e801200341dc026a4101360200200342013702cc02200341b885c7003602c802200320034188026a3602d802200341e8016a41d8dbc100200341c8026a103c1a20033502b00242208620033502a802841008024020032802ac02450d0020032802a802102f0b4202210e0b2000200e3703002005450d002004102f0b200341f0026a24000b830303047f017e027f230041d0006b22012400200141206a41186a4200370300200141206a41106a22024200370300200141206a41086a220342003703002001420037032041bd98ca00ad42808080808002841001220429000021052003200441086a290000370300200120053703202004102f41ebdec700ad4280808080f00084100122042900002105200141c0006a41086a2206200441086a290000370300200120053703402004102f200220012903402205370300200141086a2003290300370300200141106a2005370300200141186a200629030037030020012001290320370300200141206a200110e40420012802202204410820041b2107410021030240024002402001290224420020041b2205422088a7220441014b0d0020040e020201020b03402004410176220220036a220620032007200641306c6a2000412010ea064101481b2103200420026b220441014b0d000b0b2007200341306c6a2000412010ea064521030b02402005a7450d002007102f0b200141d0006a240020030b8b0503027f017e047f230041d0006b220224004180a3ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41c883c600ad4280808080c00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100622012900003703302001102f200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a106c2003102f02400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000b970404047f017e057f027e230041d0006b22012400200141206a41186a4200370300200141206a41106a22024200370300200141206a41086a220342003703002001420037032041bd98ca00ad42808080808002841001220429000021052003200441086a290000370300200120053703202004102f41ebdec700ad4280808080f00084100122042900002105200141c0006a41086a2206200441086a290000370300200120053703402004102f200220012903402205370300200141086a2003290300370300200141106a2005370300200141186a200629030037030020012001290320370300200141206a200110e40441002102024002400240024020012902244200200128022022031b2205422088a7220441306c22060d0041012107410021080c010b200641306d220641ffffff3f712006470d02200641057422064100480d022006102d2207450d01200641057621080b2005a721092003410820031b210a02402004450d00200441306c21064100210220072103200a21040340200441086a2900002105200441106a290000210b2004290000210c200341186a200441186a290000370000200341106a200b370000200341086a20053700002003200c370000200241016a2102200341206a2103200441306a2104200641506a22060d000b0b02402009450d00200a102f0b200020023602082000200836020420002007360200200141d0006a24000f0b1036000b1038000bc00201027f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024020022802102201450d00200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10f703024002402002280248450d0020002002290348370200200041086a200241c8006a41086a2802003602000c010b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602000b2003450d012001102f0c010b200041003602000b200241e0006a24000b130020004101360204200041bca4c6003602000bd71e03077f027e077f230041b0026b22052400200028020021064100210702400240024002400240024002400240024002400240200041086a280200220841014b0d0020080e020201020b20082109034020072009410176220a20076a220b2006200b41e8006c6a220b41386a290300200256200b41c0006a290300220c200356200c2003511b1b21072009200a6b220941014b0d000b0b2006200741e8006c6a220941386a290300220d200285200941c0006a290300220c20038584500d012007200d200254200c200354200c2003511b6a21070b200541b0016a41086a200441086a290300370300200541b0016a41106a200441106a290300370300200541b0016a41186a200441186a290300370300200541b0016a41206a200441206a290300370300200541b0016a41286a200441286a290300370300200541b0016a41306a200441306a290300370300200541286a41086a200141086a290000370300200541286a41106a200141106a290000370300200541286a41186a200141186a290000370300200520042903003703b0012005200129000037032820082007490d0202402008200041046a280200220b470d00200841016a22092008490d072008410174220a2009200a20094b1bad42e8007e220c422088a70d07200ca722094100480d070240024020080d002009102d21060c010b2006200841e8006c2009103121060b2006450d0420002006360200200041046a200941e8006e220b3602000b2006200741e8006c6a220941e8006a2009200820076b41e8006c10e9061a200941c0006a200337030020092002370338200941306a200541b0016a41306a290300370300200941286a200541b0016a41286a290300370300200941206a200541b0016a41206a290300370300200941186a200541b0016a41186a290300370300200941106a200541b0016a41106a290300370300200941086a200541b0016a41086a290300370300200920052903b00137030020092005290328370348200941d0006a200541286a41086a290300370300200941d8006a200541286a41106a290300370300200941e0006a200541286a41186a290300370300200041086a200841016a22093602000c010b0240024002400240024020070d002006210a0c010b20082007417f6a22094d0d012006200941e8006c6a41e8006a210a0b200a2006200841e8006c6a460d00200820074d0d06200a290338200256200a41c0006a290300220c200356200c2003511b0d01200a41e8006a2109200841e8006c20066a200a6b41987f6a210a0340200a450d01200741016a21072009290338210c200941c0006a210b200a41987f6a210a200941e8006a2109200c200256200b290300220c200356200c2003511b0d020c000b0b200541286a41186a2209200141186a290000370300200541286a41106a220a200141106a290000370300200541286a41086a220e200141086a290000370300200541b0016a41086a220f200441086a290300370300200541b0016a41106a2210200441106a290300370300200541b0016a41186a2211200441186a290300370300200541b0016a41206a2212200441206a290300370300200541b0016a41286a2213200441286a290300370300200541b0016a41306a2214200441306a29030037030020052001290000370328200520042903003703b00102402008200041046a280200220b470d00200841016a22072008490d082008410174220b2007200b20074b1bad42e8007e220c422088a70d08200ca722074100480d080240024020080d002007102d21060c010b2006200841e8006c2007103121060b2006450d0520002006360200200041046a200741e8006e220b3602000b2006200841e8006c6a22072002370338200720052903b00137030020072005290328370348200741c0006a2003370300200741306a2014290300370300200741286a2013290300370300200741206a2012290300370300200741186a2011290300370300200741106a2010290300370300200741086a200f290300370300200741d0006a200e290300370300200741d8006a200a290300370300200741e0006a20092903003703000c010b200541b0016a41086a200441086a290300370300200541b0016a41106a200441106a290300370300200541b0016a41186a200441186a290300370300200541b0016a41206a200441206a290300370300200541b0016a41286a200441286a290300370300200541b0016a41306a200441306a290300370300200541286a41086a200141086a290000370300200541286a41106a200141106a290000370300200541286a41186a200141186a290000370300200520042903003703b0012005200129000037032820082007490d0502402008200041046a280200220b470d00200841016a22092008490d072008410174220a2009200a20094b1bad42e8007e220c422088a70d07200ca722094100480d070240024020080d002009102d21060c010b2006200841e8006c2009103121060b2006450d0420002006360200200041046a200941e8006e220b3602000b2006200741e8006c6a220941e8006a2009200820076b41e8006c10e9061a200941c0006a200337030020092002370338200941306a200541b0016a41306a290300370300200941286a200541b0016a41286a290300370300200941206a200541b0016a41206a290300370300200941186a200541b0016a41186a290300370300200941106a200541b0016a41106a290300370300200941086a200541b0016a41086a290300370300200920052903b00137030020092005290328370348200941d0006a200541286a41086a290300370300200941d8006a200541286a41106a290300370300200941e0006a200541286a41186a2903003703000b200041086a200841016a22093602000b0240200941e907490d00200041086a2009417f6a22093602002006200941e8006c6a220741106a2903002103200741086a290300210c20072d0000210a20072800012101200741046a280000210e200541f8006a41186a2208200741306a290300370300200541f8006a41106a2204200741286a290300370300200541f8006a41086a2200200741206a290300370300200741186a2903002102200541b0016a41286a220f200741e0006a290300370300200541b0016a41206a2210200741d8006a29030037030020052002370378200541b0016a41186a2211200741d0006a290300370300200541b0016a41106a2212200741c8006a290300370300200541b0016a41086a2213200741c0006a2903003703002005200e36000320052001360200200520072903383703b001200a4102460d06200541d8006a41086a22072000290300370300200541d8006a41106a22012004290300370300200541d8006a41186a220e2008290300370300200541286a41086a2013290300370300200541286a41106a22132012290300370300200541286a41186a22122011290300370300200541286a41206a22112010290300370300200541286a41286a2210200f2903003703002005200528000336009b01200520052802003602980120052005290378370358200520052903b001370328200541186a2010290300370300200541106a2011290300370300200541086a20122903003703002005201329030037030020052005280298013602202005200528009b0136002320002007290300370300200420012903003703002008200e2903003703002005200529035837037802400240200a410171450d0020054198016a41086a220a200541f8006a41086a2d00003a0000200520052802203602a801200520052800233600ab01200520052903783703980141c6b5c400ad4280808080f00084100122072900002102200541d8006a41086a200741086a290000370300200520023703582007102f41d8cdc500ad4280808080800184100122072900002102200541286a41086a200741086a290000370300200520023703282007102f4120102d2207450d042007200c370007200720052802a80136000020072005290398013700172007410f6a2003370000200741036a20052800ab013600002007411f6a200a2d00003a00002007ad42808080808004841003220a2900002103200a41086a290000210c200a41106a2900002102200541b0016a41186a2208200a41186a290000370300200541b0016a41106a22042002370300200541b0016a41086a200c370300200520033703b001200a102f2007102f41c000102d2207450d042007200529035837000020072005290328370010200720052903b001370020200741086a200541d8006a41086a290300370000200741186a200541286a41086a290300370000200741286a200541b0016a41086a290300370000200741306a2004290300370000200741386a20082903003700002007ad428080808080088410052007102f0c010b2005200c37035820052003370360200c200384500d002005200536029801200541286a2005200541d8006a20054198016a10960120052903284201520d0020052903302103200541e8016a200541286a41106a290300370300200541e0016a2003370300200541b0016a41086a41003a0000200541b9016a2005290300370000200541c1016a200541086a290300370000200541c9016a200541106a290300370000200541d1016a200541186a290300370000200541033a00b00141c8e1ca004100200541b0016a108c010b200541b0016a41086a41033a0000200541b9016a2005290300370000200541c1016a200541086a290300370000200541c9016a200541106a290300370000200541d1016a200541186a290300370000200541123a00b00141c8e1ca004100200541b0016a108c010b200541b0016a41186a4200370300200541b0016a41106a22084200370300200541b0016a41086a22074200370300200542003703b00141c6b5c400ad4280808080f000841001220a29000021032007200a41086a290000370300200520033703b001200a102f41b4dac400ad4280808080c000841001220a2900002103200541f8006a41086a2204200a41086a29000037030020052003370378200a102f200820052903782203370300200541286a41086a2007290300370300200541286a41106a2003370300200541286a41186a2004290300370300200520052903b001370328200541b0016a2006200910b104200541286aad428080808080048420053502b80142208620052802b0012207ad841004024020052802b401450d002007102f0b0240200b450d002006102f0b200541b0026a24000f0b419ae3c300411e41f8b4ca001039000b1036000b41c4c2ca0020072008103b000b419ae3c300411e41f8b4ca001039000b1038000b419da5c600411341b0a5c6001055000bb00a05047f017e017f017e077f230041e0006b22022400200241306a41186a22034200370300200241306a41106a22044200370300200241306a41086a220542003703002002420037033041c6b5c400ad4280808080f0008422061001220729000021082005200741086a290000370300200220083703302007102f41ebdec700ad4280808080f00084100122092900002108200241d0006a41086a2207200941086a290000370300200220083703502009102f200420022903502208370300200241106a41086a220a2005290300370300200241106a41106a220b2008370300200241106a41186a220c200729030037030020022002290330370310200241306a200241106a412010aa02024002402002280230220d0d004101210d420021084100210e4100210f0c010b20022902342208422088a7210f2008a7210e0b2003420037030020044200370300200542003703002002420037033020061001220929000021062007200941086a290000370300200220063703502009102f200520072903003703002002200229035037033041cdb5c400ad4280808080a001841001220929000021062007200941086a290000370300200220063703502009102f200420022903502206370300200a2005290300370300200b2006370300200c200729030037030020022002290330370310200241086a200241106a412010950102400240024002400240024002400240024002400240200f200228020c410020022802081b4f0d00024002400240200f41014b0d0041002105200f0e020201020b200f210741002105034020052007410176220920056a2203200d20034105746a2001412010ea0641004a1b2105200720096b220741014b0d000b0b200d20054105746a2001412010ea062207450d022007411f7620056a21050b200241306a41186a200141186a290000370300200241306a41106a200141106a290000370300200241306a41086a200141086a29000037030020022001290000370330200f2005490d07200f200e470d04200e2008a7470d04200e41016a2207200e490d09200e41017422092007200920074b1b220741ffffff3f712007470d09200741057422074100480d09200e0d022007102d210d0c030b20004183323b0100200041086a410a360200200041046a41cdb5c400360200200041026a410f3a00002008a7450d09200d102f0c090b200e0d030c040b200d200e41057420071031210d0b200d450d042007410576ad21080b200d20054105746a220741206a2007200f20056b41057410e9061a200741186a200241306a41186a2209290300370000200741106a200241306a41106a2203290300370000200741086a200241306a41086a2205290300370000200720022903303700002009420037030020034200370300200542003703002002420037033041c6b5c400ad4280808080f00084100122012900002106200241d0006a41086a2207200141086a290000370300200220063703502001102f200520072903003703002002200229035037033041ebdec700ad4280808080f000841001220129000021062007200141086a290000370300200220063703502001102f20042002290350370000200441086a2007290300370000200241106a41086a2005290300370300200241106a41106a2003290300370300200241106a41186a200929030037030020022002290330370310200241203602342002200241106a360230200d200f41016a200241306a10aa012008a7450d010b200d102f0b200041043a00000c030b419ae3c300411e41f8b4ca001039000b1036000b1038000b200241e0006a24000b810b031d7f017e017f230041b0016b2202240041012103024020012d00000d002001411d6a2d000021042001411c6a2d000021052001411a6a2f00002106200141196a2d00002107200141186a2d00002108200141166a2f00002109200141156a2d0000210a200141146a2d0000210b200141126a2f0000210c200141116a2d0000210d200141106a2d0000210e2001410e6a2f0000210f2001410d6a2d000021102001410c6a2d000021112001410a6a2f00002112200141096a2d00002113200141086a2d00002114200141066a2f00002115200141056a2d00002116200141046a2d00002117200141026a2f0000211820012d00012103200141206a2d00002119200141216a2d0000211a2001411e6a2f0000211b20024190016a41186a221c420037030020024190016a41106a221d420037030020024190016a41086a22014200370300200242003703900141c6b5c400ad4280808080f000841001221e290000211f2001201e41086a2900003703002002201f37039001201e102f4193b6c400ad4280808080f000841001221e290000211f200241c8006a41086a2220201e41086a2900003703002002201f370348201e102f201d2002290348221f370300200241f0006a41086a2001290300370300200241f0006a41106a201f370300200241f0006a41186a20202903003703002002200229039001370370200241c8006a200241f0006a412010ad0220022d0048211e201c200241c8006a41196a290000370300201d200241c8006a41116a2900003703002001200241c8006a41096a2900003703002002200229004937039001410021010240201e4101470d00200241f0006a41186a20024190016a41186a290300370300200241f0006a41106a20024190016a41106a290300370300200241f0006a41086a20024190016a41086a2903003703002002200229039001370370410121010b200241206a201a3a00002002411f6a20193a00002002411d6a201b3b00002002411c6a20043a00002002411b6a20053a0000200241196a20063b0000200241186a20073a0000200241176a20083a0000200241156a20093b0000200241146a200a3a0000200241136a200b3a0000200241116a200c3b0000200241106a200d3a00002002410f6a200e3a00002002410d6a200f3b00002002410c6a20103a00002002410b6a20113a0000200241096a20123b0000200241086a20133a0000200220013a0021200220143a0007200220153b0005200220163a0004200220173a0003200220183b0001200220033a00002002413a6a200241f0006a41186a290300370100200241326a200241f0006a41106a2903003701002002412a6a200241f0006a41086a290300370100200241226a221d20022903703701000240200341ff01714101470d002001450d0020024101722201201d412010ea060d00200241c8006a41026a200141026a2d000022033a0000200220012f000022013b01482002410a6a2f0100211d2002410e6a2f0100211e200241126a2f01002105200241166a2f010021082002411a6a2f0100210b2002411e6a2f0100210e20022f01062111200041036a20033a0000200020013b0001200041206a201a3a00002000411e6a200e3b00002000411d6a201b3a00002000411c6a20043a00002000411a6a200b3b0000200041196a20063a0000200041186a20073a0000200041166a20083b0000200041156a20093a0000200041146a200a3a0000200041126a20053b0000200041116a200c3a0000200041106a200d3a00002000410e6a201e3b00002000410d6a200f3a00002000410c6a20103a00002000410a6a201d3b0000200041096a20123a0000200041086a20133a0000200041066a20113b0000200041056a20153a0000200041046a20163a0000410021030c010b410121030b200020033a0000200241b0016a24000b130020004108360204200041c0a5c6003602000b130020004112360204200041d8aac6003602000bd40401057f230041106b22022400200241003a000502400240024002400240024020012802002203280204220420044100472205490d00200241056a20032802002206200510e8061a2003200420056b3602042003200620056a360200024020040d00410021040c050b024020022d0005220441037122034103460d000240024020030e03070001070b200241003b0106200220043a00064101210420012802002201280204220320034100472205490d04200241066a41017220012802002204200510e80621062001200320056b3602042001200420056a360200024020030d00200620056a22044100200241066a20046b41026a10e7061a0b20022f0106220441ff014d0d0220044102762103410021040c070b20024100360208200220043a0008200241086a4101722001280200220428020020042802042205410320054103491b220310e8062106200428020422012003490d042004200120036b3602042004200428020020036a3602000240200541024b0d00200620036a22044100200241086a20046b41046a10e7061a0b2002280208220341808004492104200341027621030c060b200441034d0d010b410121040c040b2002410036020c2002410c6a20012802002204280200220120042802042203410420034104491b220510e8061a2004200320056b3602042004200120056a3602000240200341034b0d002002410c6a20056a4100410420056b10e7061a0b200228020c22034180808080044921040c030b0c020b20032001104b000b20044102762103410021040b2000200336020420002004360200200241106a24000b130020004100360204200041c8e1ca003602000bbf0202027f017e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d01200441012001104521000c020b20002903002104410021000340200220006a41ff006a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021000340200220006a41ff006a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000b20024180016a240020000f0b2003418001104b000b2003418001104b000bd50505067f017e047f017e027f23004180026b2202240002400240024002402000280200220320002802044f0d00200028020c2104200141086a2105200241a0016a4102722106024003402000200341016a360200200241186a2000280208280200220710f30220022d00184101460d0120022900192108200241086a200710e60120022802080d012007280204200228020c2203490d012003417f4c0d0302400240024020030d00410121090c010b200310332209450d0720072802042003490d0120092007280200200310e8061a2007280204220a2003490d062007200a20036b3602042007200728020020036a3602000b20022008370310024002402001280200220b4190bdc600460d002001280204210c0c010b2006410041da0010e7061a200241186a410041840110e7061a41e401102d220b450d074100210c200b4100360200200b41046a200241a0016a41dc0010e8061a200b41e0006a200241186a41840110e8061a200141003602042001200b3602000b2003ad220d422086200d84210d02400240034002400240200b2f0106220e0d004100210a0c010b200e4103742103200b41086a2107417f210a0340024020030d00200e210a0c020b200a41016a210a200241106a2007410810ea06220f450d03200341786a2103200741086a2107200f417f4a0d000b0b0240200c450d00200c417f6a210c200b200a4102746a41e4016a280200210b0c010b0b2002200837022c200220053602282002200a360224200220013602202002200b36021c200241003602182002200d3702a401200220093602a001200241186a200241a0016a109b020c010b200b200a410c6c6a220341e4006a2207280200210a2007200d370200200341e0006a22072802002103200720093602002003450d00200a450d002003102f0b200028020022032000280204490d010c030b0b2009102f0b200441013a00000b20024180026a24000f0b103d000b2003200a104b000b1036000b810605027f027e017f027e027f230041a0016b220224002000280200210002400240024002400240024002400240200128020022034110710d00200041086a29030021042000290300210520034120710d0220054290ce005441002004501b450d012005a72103412721000c060b200041086a2903002105200029030021044180012100024003402000450d01200241206a20006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020044204882005423c8684220420054204882205844200520d000b0b20004181014f0d022001410141bc8ac0004102200241206a20006a41800120006b104821000c060b41272100200241186a21060340200241106a200520044290ce00420010ee062002200229031022072006290300220842f0b17f427f10ed06200241206a20006a2203417c6a200520022903007ca7220941ffff037141e4006e220a41017441e684c0006a2f00003b00002003417e6a200a419c7f6c20096a41ffff037141017441e684c0006a2f00003b0000200542ffc1d72f56210320044200522109200450210a2000417c6a2100200721052008210420032009200a1b0d000c040b0b4180012100024003402000450d01200241206a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b0b20004181014f0d012001410141bc8ac0004102200241206a20006a41800120006b104821000c040b2000418001104b000b2000418001104b000b2007a721030b02400240200341e3004a0d00200321090c010b200241206a2000417e6a22006a2003200341ffff037141e4006e2209419c7f6c6a41ffff037141017441e684c0006a2f00003b00000b024002402009410a480d00200241206a2000417e6a22006a200941017441e684c0006a2f00003b00000c010b200241206a2000417f6a22006a200941306a3a00000b2001410141c8e1ca004100200241206a20006a412720006b104821000b200241a0016a240020000bdd0604017f017e017f057e230041c0016b220624000240200341ff0171450d00200641d0006a2001ad42004280c8afa025420010ed06200641c0006a2002418094ebdc032002418094ebdc03491bad420042e807420010ed0620064190016a41186a420037030020064190016a41106a2201420037030020064190016a41086a22024200370300200642003703900141e7a2ca00ad42808080808001841001220329000021072002200341086a29000037030020062007370390012003102f41efa2ca00ad4280808080900284100122032900002107200641b0016a41086a2208200341086a290000370300200620073703b0012003102f200120062903b0012207370300200641f0006a41086a2002290300370300200641f0006a41106a2007370300200641f0006a41186a20082903003703002006200629039001370370200641c0006a41086a290300200641d0006a41086a2903007c2006290340220920062903507c2207200954ad7c2109200641e0006a200641f0006a10e3010240024020062802600d00410021024200210a0c010b2006290368220a4200552102200a427f550d00428080808080808080807f4200200a7d200a428080808080808080807f511b210a0b200641206a20072009428094ebdc03420010ee06200641106a2006290320220b200641206a41086a290300220c4280ec94a37c427f10ed06200641306a20072009200a428094ebdc0380220d420010ed062006200a200d4280ec94a37c7e7ca72203360290012006418094ebdc03360294012006200b200c20064190016a2003418094ebdc034b4102746a350200220a420010ed06427f200641306a41086a290300200641086a2903007c2006290330220c20062903007c220b200c54ad7c200b200a200720062903107c7e220a200a428094ebdc0380220a4280ec94a37c7e7c4280cab5ee0156200aa76aad7c220a200b54ad7c220b20097c200a20077c220c200a54ad7c42002009200b7d2007200a54ad7d220b2007200a7d220a200756200b200956200b2009511b22031b20021b200c4200200a20031b20021b22094280a094a58d1d7c2207200954ad7c220920057c200720047c22042007542202ad7c22072002200720095420072009511b22021b2105427f200420021b21040b2000200437030020002005370308200641c0016a24000b810603087f017e047f23004180086b22022400200241b8046a200110f6030240024020022802bc042203450d00200241c4046a280200210420022802c004210520022802b8042106200241106a200241c8046a41e00010e8061a200241086a200110e601024002400240024020022802080d00200228020c2207200128020441c8036e2208200820074b1b2209ad42c8037e220a422088a70d01200aa72208417f4c0d010240024020080d004108210b0c010b2008102d220b450d03200841c8036e21090b024002402007450d004100210c410021084100210d0340200241b8046a200110a40420022903a0054203510d02200d41016a210e200241f0006a200241b8046a41c80310e8061a0240200d2009470d00200c200e200c200e4b1bad42c8037e220a422088a70d07200aa722094100480d0702400240200d0d002009102d210b0c010b200b200820091031210b0b200b450d06200941c8036e21090b200b20086a200241f0006a41c80310e8061a200c41026a210c200841c8036a2108200e210d2007200e470d000b0b200b450d01200241b8046a200241106a41e00010e8061a2000410c6a2004360200200020053602082000200336020420002006360200200041106a200241b8046a41e00010e8061a200041f8006a2007360200200041f4006a2009360200200041f0006a200b3602000c060b0240200d450d00200b4198016a210e0340200e108d01200e41c8036a210e200841b87c6a22080d000b0b2009450d00200b102f0b2000410036020402402004450d00200441246c210e2003210803400240024020082d0000220d41044b0d00024002400240200d0e050400010204040b2008410c6a280200450d03200841086a280200102f0c030b2008410c6a280200450d02200841086a280200102f0c020b2008410c6a280200450d01200841086a280200102f0c010b200841086a280200450d00200841046a280200102f0b200841246a2108200e415c6a220e0d000b0b2005450d042003102f0c040b103d000b1036000b1038000b200041003602040b20024180086a24000b8c0201037f024002400240024002400240024020012802000e0400010203000b410121024101102d2201450d05200141003a0000410121030c040b4101102d2202450d04200241013a00002001280204210320024101410510312202450d042002200336000120012802082104410a210320024105410a10312201450d04200120043600050c020b410121024101102d2201450d03200141023a0000410121030c020b4101102d2202450d02200241033a00002001280204210320024101410510312202450d022002200336000120012802082104410a210320024105410a10312201450d02200120043600050b410921020b2000200236020820002003360204200020013602000f0b1036000bd60402067f047e230041f0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024020022802102203450d002002280214210402400240200241186a2802002205450d0020032d0000220641014b0d004100210102400240024020060e020100010b41002101200241003a0068200341016a21072005417f6a2106034020062001460d02200241c8006a20016a200720016a2d00003a00002002200141016a22053a00682005210120054120470d000b200241206a41186a200241c8006a41186a290300370300200241206a41106a200241c8006a41106a290300370300200241206a41086a200241c8006a41086a29030037030020022002290348370320410121010b200241c8006a41186a200241206a41186a2903002208370300200241c8006a41106a200241206a41106a2903002209370300200241c8006a41086a200241206a41086a290300220a37030020022002290320220b370348200041196a2008370000200041116a2009370000200041096a200a3700002000200b3700010c020b200141ff0171450d00200241003a00680b20024100360228200242013703202002410b3602442002200241086a3602402002200241206a36026c200241dc006a41013602002002420137024c200241b885c7003602482002200241c0006a360258200241ec006a41d8dbc100200241c8006a103c1a2002350228422086200235022084100802402002280224450d002002280220102f0b410221010b200020013a00002004450d012003102f0c010b200041023a00000b200241f0006a24000b830301067f230041106b2203240002400240024020014105744104722204417f4c0d002004102d2205450d012003410036020820032004360204200320053602002001200310690240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210420032802082101034002400240200420016b4120490d00200141206a2105200421060c010b200141206a22052001490d05200441017422062005200620054b1b22064100480d050240024020040d002006102d21070c010b200720042006103121070b2007450d040b200720016a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002006210420052101200041206a2100200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100402402006450d002007102f0b200341106a24000f0b103d000b1036000b1038000b9b0304017f017e017f027e230041d0006b22042400200341086a290300210520032802042106024002400240024002400240024020032802000e06000102030504000b2006ad21050c040b2004200129034842002006ad420010ed06427f210720042903084200520d04200429030021050c030b200441106a200129035042002006ad420010ed06427f210720042903184200520d03200429031021050c020b200441206a200129031842002006ad420010ed06427f210720042903284200520d02200429032021050c010b200441306a200129032842002006ad420010ed06200441c0006a20012903204200200542ffffffff0f83420010ed06427f210720042903484200520d0120042903384200520d012004290340220520042903307c22082005540d01200820012903307c22052008540d010b200521070b200042002000290308220520077d220720072005561b37030841002103024020072005580d0002402002280200450d0020022802042203450d00200241086a280200450d002003102f0b20024201370200410121030b200441d0006a240020030be304020b7f017e230041106b22052400024002400240200128020041016a220641004c0d0020012006360200200141046a2106200141086a2802002107024002400240034002400240200628020022082f010622090d004100210a0c010b2009410574210620084198036a210b200841086a210c417f210a0340024020060d002009210a0c020b2002200c412010ea06220d450d03200641606a2106200b41e0006a210b200a41016a210a200c41206a210c200d417f4a0d000b0b2007450d022007417f6a21072008200a4102746a41880b6a21060c000b0b200b41046a2802002109200b21060240024003404100210e4100210a0240200628020022072f0106220f450d00200f4105742106200741f0026a210d200741086a210c417f210a0340024020060d00200f210a0c020b2004200c412010ea062208450d03200641606a2106200d410c6a210d200a41016a210a200c41206a210c2008417f4a0d000b0b2009450d022009417f6a21092007200a4102746a41ec036a21060c000b0b02400240200d41786a280200220a0d0041002106420021100c010b200d280200220c417f4c0d0502400240200c0d00410121060c010b200c102d2206450d070b2006200a200c10e8061a200cad21100b201042208620108421104101210e0b02400240200b412d6a2d0000450d0020064100200e1b21060c010b200e450d010b20002010370204200020063602000c010b20002001280210200220032004200141146a28020028020c1106000b20012001280200417f6a360200200541106a24000f0b41c6c4ca004118200541086a41cc90c70041f0c4ca00103e000b103d000b1036000b9203020a7f037e230041206b220324000240200128020041016a220441004c0d0020012004360200200141046a2105200141086a2802002106024002400240034002400240200528020022072f010622080d00410021090c010b20084105742105200741c5036a210a200741086a210b417f21090340024020050d00200821090c020b2002200b412010ea06220c450d03200541606a2105200a41e0006a210a200941016a2109200b41206a210b200c417f4a0d000b0b2006450d022006417f6a2106200720094102746a41880b6a21050c000b0b200a41436a2205290300210d200a41bb7f6a290300210e200541086a290300210f0240200a2d00000d00200ea721054201210e2005450d010c020b200e4202520d010b200320012802102002200141146a280200280214110300200341106a290300210f200128020021042003290308210d2003290300210e0b20012004417f6a360200200041106a200f3703002000200d3703082000200e370300200341206a24000f0b41c6c4ca004118200341186a41cc90c70041f0c4ca00103e000b290020004101360204200041086a200128020420012802006b41a0016e2201360200200020013602000bf40101047f230041d0006b21020240200128020022032001280204470d00200041003602000f0b2001200341a0016a3602002002200341c2006a29000037012a2002200341ca006a290000370132200241106a220120022903303703002002200341d2006a29000037013a200241186a220420022903383703002002200341da006a2800003601422002200341de006a2f00003b0146200241206a220520022903403703002002200341c0006a2f00003b01282002200229032837030820002003360200200020022903083700042000410c6a2001290300370000200041146a20042903003700002000411c6a20052903003700000bf30801087f230041f0006b2103024002402001280200220420012802042205460d00200241016a210603402001200441a0016a2202360200200341003a0068200441c0006a2d00002107200341013a0068200320073a0048200441c1006a2d00002107200341023a0068200320073a0049200441c2006a2d00002107200341033a0068200320073a004a200441c3006a2d00002107200341043a0068200320073a004b200441c4006a2d00002107200341053a0068200320073a004c200441c5006a2d00002107200341063a0068200320073a004d200441c6006a2d00002107200341073a0068200320073a004e2003200441c7006a2d00003a004f200341083a0068200441c8006a2d00002107200341093a0068200320073a0050200441c9006a2d000021072003410a3a0068200320073a0051200441ca006a2d000021072003410b3a0068200320073a0052200441cb006a2d000021072003410c3a0068200320073a0053200441cc006a2d000021072003410d3a0068200320073a0054200441cd006a2d000021072003410e3a0068200320073a0055200441ce006a2d000021072003410f3a0068200320073a00562003200441cf006a2d00003a0057200341103a0068200441d0006a2d00002107200341113a0068200320073a0058200441d1006a2d00002107200341123a0068200320073a0059200441d2006a2d00002107200341133a0068200320073a005a200441d3006a2d00002107200341143a0068200320073a005b200441d4006a2d00002107200341153a0068200320073a005c200441d5006a2d00002107200341163a0068200320073a005d200441d6006a2d00002107200341173a0068200320073a005e2003200441d7006a2d00003a005f200341183a0068200441d8006a2d00002107200341193a0068200320073a0060200441d9006a2d000021072003411a3a0068200320073a0061200441da006a2d000021072003411b3a0068200320073a0062200441db006a2d000021072003411c3a0068200320073a0063200441dc006a2d000021072003411d3a0068200320073a0064200441dd006a2d000021072003411e3a0068200320073a0065200441de006a2d000021072003411f3a0068200320073a0066200441df006a2d00002107200341203a0068200320073a0067200341286a41086a22072003290350370300200341286a41106a22082003290358370300200341286a41186a2209200329036037030020032003290348370328200341086a41086a220a2007290300370300200341086a41106a22072008290300370300200341086a41186a2208200929030037030020032003290328370308200341c8006a41186a2008290300370300200341c8006a41106a2007290300370300200341c8006a41086a200a290300370300200320032903083703482006417f6a2206450d022002210420052002470d000b0b200041003602000f0b20002004360200200020032903483702042000410c6a200341d0006a290300370200200041146a200341d8006a2903003702002000411c6a200341e0006a2903003702000b13002000410136020420004184c6c6003602000b3400200041b89bca0036020420004100360200200041146a4107360200200041106a41f8c6c600360200200041086a420f3702000b2c01017f02404108102d22020d001036000b20004288808080800137020420002002360200200242003700000b2201017f230041106b22022400200241003602002000200210f204200241106a24000bed0303027f037e027f230041c0006b2202240041e7a2ca00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41f9b5c600ad4280808080d00084100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241206a200341c00010ca030240024020022802202201450d0020002002290224370204200020013602000c010b20004100360208200042083702000b2003102f200241c0006a24000f0b1036000bd2190e027f017e017f027e037f017e027f047e027f017e017f017e017f047e230041d0046b22032400418de6c300ad4280808080e00084100122042900002105200341d8006a41086a200441086a290000370300200320053703582004102f41f0e8c600ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004102f02404120102d2204450d0020042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341d0036a41186a2209200641186a290000370300200341d0036a41106a220a2008370300200341d0036a41086a2007370300200320053703d0032006102f2004102f41c000102d220b450d00200b2003290358370000200b2003290308370010200b20032903d003370020200b41086a200341d8006a41086a2204290300370000200b41186a200341086a41086a290300370000200b41286a200341d0036a41086a290300370000200b41306a200a290300370000200b41386a2009290300370000200341086a200b10f6022003290308210c4200210520034200370308200341d0006a280200210d20032d0054210e02400240200c4201510d00200341d8006a41386a4200370300200341d8006a41306a4200370300200341d8006a41286a4200370300200341d8006a41206a4200370300200341f0006a4200370300200341e8006a42003703002004420037030020034200370358420021074200210f420021100c010b200341086a41386a2903002108200341086a41306a2903002111200341086a41206a2903002107200341086a41186a2903002105200341086a41c0006a2903002112200329031821102003290310210f200341d8006a41206a200341086a41286a290300370300200341d8006a41286a2011370300200341d8006a41306a2008370300200341e8006a20053703002003200737037020032012370390012003200f370358200320103703600b4200210820034190016a22134200370300200341d8006a41306a4200370300200341d8006a41286a2214420037030020034200370378201020077c200f20057c2215200f542216ad7c2117200341d8006a41106a211802402002450d002002410574210942002108420021124200211942002111200121040340024002400240200441186a220a2d00002206417f6a41ff017141014b0d0020142011200441086a290300220520192004290300220756201120055620112005511b22061b221137030020032019200720061b2219370378200a2d000022064102460d010b200641ff01710d01200441086a2903002105200429030021070b2013200820052012200756200820055620082005511b22061b220837030020032012200720061b2212370388010b200441206a2104200941606a22090d000b0b201720105121042017201054210620034198016a41186a201841086a290300220537030020034198016a41206a220a201841106a29030037030020034198016a41286a201841186a29030037030020034198016a41306a201841206a2903003703002003201829030022073703a8012003200f37039801200320103703a00102400240427f200f20077c22072007200f542209201020057c2009ad7c220520105420052010511b22091b2207428080e983b1de16544100427f200520091b2211501b0d00200341a8016a2903002107200341c8016a2903002111200341c0016a2903002112200a290300211920032903a001211a200329039801211b4201210520032903b001211c0c010b4200210502402007201184500d0020072011109a0120034188046a201137030020034180046a2007370300200341d0036a41086a41013a0000200341d9036a2000290000370000200341e1036a200041086a290000370000200341e9036a200041106a290000370000200341f1036a200041186a290000370000200341033a00d00341c8e1ca004100200341d0036a108c010b0b2016200620041b2104200341306a2019370300200341386a2012370300200341186a201a370300200341c0006a2011370300200341206a20073703002003201c370328200320083703482003201b3703102003200e4100200c42015122061b3a00542003200d410020061b360250200320054201512206ad3703080240024020060d00200bad428080808080088410050c010b200341c0003602d4032003200b3602d003200341106a200341d0036a1090030b427f201720041b2107427f201520041b2108200b102f20054201522104024002400240200c4201510d0020040d0041032106200341d0026a21040c010b200c4201522004410173720d0141042106200341d0016a21040b200441046a20063a0000200441003a0000200441056a20002900003700002004410d6a200041086a290000370000200441156a200041106a2900003700002004411d6a200041186a29000037000041c8e1ca0041002004108c010b024020082007844200520d0020034188046a201037030020034180046a200f370300200341d0036a41086a41003a0000200341d9036a2000290000370000200341e1036a200041086a290000370000200341e9036a200041106a290000370000200341f1036a200041186a290000370000200341033a00d00341c8e1ca004100200341d0036a108c010b41e7a2ca00ad4280808080800184100122042900002105200341d0016a41086a200441086a290000370300200320053703d0012004102f41f9b5c600ad4280808080d00084100122042900002105200341d0026a41086a200441086a290000370300200320053703d0022004102f4120102d2204450d0020042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341d0036a41186a2209200641186a290000370300200341d0036a41106a220a2008370300200341d0036a41086a2007370300200320053703d0032006102f2004102f41c000102d2204450d00200420032903d001370000200420032903d002370010200420032903d003370020200441086a200341d0016a41086a2206290300370000200441186a200341d0026a41086a220b290300370000200441286a200341d0036a41086a290300370000200441306a200a290300370000200441386a20092903003700002003200441c00041c8e1ca004100410010b501200328020021092004102f41e7a2ca00ad42808080808001841001220429000021052006200441086a290000370300200320053703d0012004102f41f9b5c600ad4280808080d00084100122042900002105200b200441086a290000370300200320053703d0022004102f4120102d2104024002402002450d002004450d0220042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341d0036a41186a220a200641186a290000370300200341d0036a41106a220b2008370300200341d0036a41086a22132007370300200320053703d0032006102f2004102f41c000102d2204450d02200420032903d001370000200420032903d002370010200420032903d003370020200441086a200341d0016a41086a290300370000200441186a200341d0026a41086a290300370000200441286a2013290300370000200441306a200b290300370000200441386a200a290300370000200341d0036a20012002109d042004ad428080808080088420033502d80342208620032802d0032206ad841004024020032802d403450d002006102f0b2004102f20094101460d01200010d0020c010b2004450d0120042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a2900003700002004ad4280808080800484100322062900002105200641086a2900002107200641106a2900002108200341d0036a41186a220a200641186a290000370300200341d0036a41106a220b2008370300200341d0036a41086a22132007370300200320053703d0032006102f2004102f41c000102d2204450d01200420032903d001370000200420032903d002370010200420032903d003370020200441086a200341d0016a41086a290300370000200441186a200341d0026a41086a290300370000200441286a2013290300370000200441306a200b290300370000200441386a200a2903003700002004ad428080808080088410052004102f20094101470d00200010ca020b200341d0046a24000f0b1036000b1300200041043602042000419cd2c6003602000b3400200041e7a2ca0036020420004100360200200041146a4104360200200041106a41ece5c600360200200041086a42083702000b830101017f02404110102d2202450d00200242003700082002420037000020024110412010312202450d0020024200370010200241186a42003700002002412041c00010312202450d002002420037003020024200370020200042c0808080800837020420002002360200200241386a4200370000200241286a42003700000f0b1036000b130020004101360204200041acedc6003602000ba50205017e027f027e017f047e420121020240200128020422034110490d002001280200220441086a2900002105200429000021062001200441106a3602002001200341706a220736020420074110490d00200441186a2900002108200429001021092001200341606a22073602042001200441206a36020020074110490d00200441286a290000210a2004290020210b2001200341506a22073602042001200441306a3602002007410f4d0d0020002006370308200041386a2004290030370300200041306a200a370300200041286a200b370300200041206a2008370300200041186a2009370300200041106a2005370300200041c0006a200441386a2900003703002001200341406a3602042001200441c0006a360200420021020b200020023703000b3400200041ed9bca0036020420004100360200200041146a4103360200200041106a41b4eec600360200200041086a42083702000b3400200041e7a2ca0036020420004100360200200041146a4101360200200041106a41c0f6c600360200200041086a42083702000b130020004102360204200041b4f7c6003602000b3400200041dcbec60036020420004100360200200041146a4101360200200041106a41f8f9c600360200200041086a42183702000bac0707017f047e037f017e057f047e017f23004180026b22022400200241c0006a2001109c030240024002400240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a2001109c032002290328a70d02200241286a41106a290300210520022903302106200241206a200110e60120022802200d0320022802242207200128020441306e2208200820074b1b2209ad42307e220a422088a7450d010c050b200041003602200c030b200aa72208417f4c0d0302400240024020080d004108210b0c010b2008102d220b450d01200841306e21090b02402007450d004100210c0340200241003a00f801200c220d41016a210c2001280204417f6a21084100210e024002400240024003402008417f460d01200241d8016a200e6a2001280200220f2d00003a0000200120083602042001200f41016a3602002002200e41016a220f3a00f8012008417f6a2108200f210e200f4120470d000b200241b8016a41186a2208200241d8016a41186a290300370300200241b8016a41106a220e200241d8016a41106a290300370300200241b8016a41086a220f200241d8016a41086a290300370300200220022903d8013703b801200241086a2001109c032002290308a70d01200241086a41106a290300210a20022903102110200241f8006a41086a200f2903002211370300200241f8006a41106a200e2903002212370300200241f8006a41186a20082903002213370300200241d8006a41086a220e2011370300200241d8006a41106a220f2012370300200241d8006a41186a22142013370300200220022903b8012211370378200220113703582009200d470d030240200d4101742208200c2008200c4b1bad42307e2211422088a70d002011a7220841004e0d030b1038000b200e41ff0171450d00200241003a00f8010b200241f8006a41086a20024198016a41086a2903003703002009450d06200b102f0c060b02400240200d0d002008102d210b0c010b200b200d41306c20081031210b0b200b450d03200841306e21090b200b200d41306c6a2208200a3703082008201037030020082002290358370310200841186a200e290300370300200841206a200f290300370300200841286a2014290300370300200c2007470d000b0b200b450d0220002004370300200020093602242000200b3602202000200637031020002003370308200041286a2007360200200041186a20053703000c030b1036000b200041003602200c010b200041003602200b20024180026a24000f0b103d000b130020004104360204200041bcfcc6003602000b130020004108360204200041a480c7003602000bcb0102037f037e230041206b2205240002400240024020030d00200041003602000c010b2003280208220641164d0d01200328020021072004ad4280808080800484100322032900002108200341086a2900002109200341106a290000210a200541186a200341186a290000370300200541106a200a370300200541086a2009370300200520083703002003102f20002006ad4220862007ad84200641696aad422086200741176aad8441012005ad4280808080800484101010730b200541206a24000f0b41172006104b000baf0201027f23004190016b220324002003200210e8010240024020032d000022024102460d00200341e0006a200341286a290300370300200341e8006a200341306a290300370300200341d8006a41186a200341386a290300370300200341d8006a41206a200341c0006a290300370300200341d8006a41286a200341c8006a290300370300200341d8006a41306a200341d0006a2802003602002003200341206a29030037035802402002450d00200041003a00000c020b2003411c6a2802002102200341186a28020021042000200329026c370001200041013a0000200041196a20034184016a290200370000200041116a200341fc006a290200370000200041096a200341d8006a411c6a2902003700002002450d012004102f0c010b200041003a00000b20034190016a24000b870102017f037e230041e0006b22032400200341086a200210e8010240024020032d000822024102470d00420021040c010b2002410173ad2104200341186a2903002105200341106a290300210620020d00200341246a280200450d00200341206a280200102f0b2000200637030820002004370300200041106a2005370300200341e0006a24000bd70303027f037e027f230041d0006b2202240041aa97ca00ad4280808080800184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f41cbcec100ad4280808080e00184100122032900002104200241206a41086a200341086a290000370300200220043703202003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241306a41186a2207200141186a290000370300200241306a41106a22082006370300200241306a41086a2005370300200220043703302001102f2003102f41c000102d2203450d00200320022903103700002003200229032037001020032002290330370020200341086a200241106a41086a290300370000200341186a200241206a41086a290300370000200341286a200241306a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241086a200341c00041c8e1ca004100410010b501200228020821012003102f200241d0006a240020014101460f0b1036000b3a02017f017e230041c0006b2203240020032002108d02200329030021042000200341086a29030037030820002004370300200341c0006a24000bd10903067f017e057f230041f0016b220224000240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a220541014b0d0320050e020102010b200041023a00000c030b0240024020064104490d002004280001210720012003417b6a22053602042001200441056a360200024020054108490d00200429000521082001200341736a36020420012004410d6a36020041002105200241003a00b001410d20036b2109200341726a210602400340200920056a450d0120024190016a20056a200420056a220a410d6a2d00003a0000200120063602042001200a410e6a3602002002200541016a220a3a00b0012006417f6a2106200a2105200a4120470d000b200241f0006a41186a20024190016a41186a290300370300200241f0006a41106a20024190016a41106a290300370300200241f0006a41086a20024190016a41086a290300370300200220022903900137037041002105200241003a00d0012004200a6a2109200a20036b410d6a210a0340200a20056a450d0420024190016a20056a200920056a2204410d6a2d00003a00002001200636020420012004410e6a3602002002200541016a22043a00d0012006417f6a210620042105200441c000470d000b200241106a41386a220120024190016a41386a290300370300200241106a41306a220520024190016a41306a290300370300200241106a41286a220620024190016a41286a290300370300200241106a41206a220420024190016a41206a290300370300200241106a41186a220a20024190016a41186a290300370300200241106a41106a220320024190016a41106a290300370300200241106a41086a220920024190016a41086a290300370300200241d0006a41086a220b200241f0006a41086a290300370300200241d0006a41106a220c200241f0006a41106a290300370300200241d0006a41186a220d200241f0006a41186a290300370300200220022903900137031020022002290370370350200041003a000020002002290350370001200041096a200b290300370000200041116a200c290300370000200041196a200d290300370000200041216a2002290310370000200041296a2009290300370000200041316a2003290300370000200041396a200a290300370000200041c1006a2004290300370000200041c9006a2006290300370000200041d1006a2005290300370000200041d9006a2001290300370000200041e3006a2002410f6a2d00003a0000200041e1006a20022f000d3b0000200041e8006a2008370300200041e4006a20073602000c060b0240200541ff0171450d00200241003a00b0010b200041023a00000c050b200041023a00000c040b200041023a00000c030b0240200541ff0171450d00200241003a00d0010b200041023a00000c020b024020064104490d002004280001210620012003417b6a22053602042001200441056a36020020054108490d00200041013a0000200020022f00103b0001200429000521082001200341736a36020420012004410d6a360200200041086a2008370300200041046a2006360200200041036a200241126a2d00003a0000200041106a20024190016a41e00010e8061a0c020b200041023a00000c010b200041023a00000b200241f0016a24000bf90303027f037e027f230041e0006b2202240041bd98ca00ad4280808080800284100122032900002104200241206a41086a200341086a290000370300200220043703202003102f41ce89c700ad4280808080f00084100122032900002104200241306a41086a200341086a290000370300200220043703302003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241c0006a41186a2207200141186a290000370300200241c0006a41106a22082006370300200241c0006a41086a2005370300200220043703402001102f2003102f41c000102d2203450d00200320022903203700002003200229033037001020032002290340370020200341086a200241206a41086a290300370000200341186a200241306a41086a290300370000200341286a200241c0006a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241086a200341c000109c01200241086a41106a290300210420022903102105200228020821012003102f20002004420020011b37030820002005420020011b370300200241e0006a24000f0b1036000ba62c07017f017e017f027e017f027e197f23004190036b2207240002400240024002402001200284500d002003200484500d004201210820074198016a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220520064200200c1b220610ee0620074188016a200729039801220d20074198016a41086a290300220e2005200610ed062002200420091b21022001200320091b2104200a20072903880185200b20074188016a41086a290300858450450d01200d210a200e210b420021060c020b20004100360200200041106a4200370300200041086a42003703000c020b200741f8006a200420022005200610ee06200741e8006a20072903782201200741f8006a41086a29030022032005200610ed064200200620042007290368852002200741e8006a41086a29030085845022091b21064201200520091b21082003200220091b21022001200420091b21040b200741386a200b42002004420010ed06200741c8006a20024200200a420010ed06200741d8006a200a42002004420010ed06024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729034042005272200729035042005272200741d8006a41086a2903002201200729033820072903487c7c2203200154724101470d004110102d2209450d0d2009200a3e020c2009200a4220883e02082009200b3e02042009200b4220883e020020074284808080c0003702ac02200720093602a802200741a8026a10ca06200741a8016a41086a20072802b002360200200720072903a8023703a8014110102d2209450d0d200920043e020c200920044220883e0208200920023e0204200920024220883e020020074284808080c0003702ac02200720093602a802200741a8026a10ca06200741b8016a41086a20072802b002360200200720072903a8023703b8014110102d2209450d0d20092008a7220f36020c200920084220883e0208200920063e0204200920064220883e020020074284808080c0003702ac02200720093602a802200741a8026a10ca06200741c8016a41086a20072802b002360200200720072903a8023703c80120074180036a41086a200741b8016a41086a280200360200200720072903b80137038003200741a8026a41086a200741a8016a41086a280200360200200720072903a8013703a802200741d8016a200741a8026a20074180036a10cc060240200728028403450d00200728028003102f0b200741d8016a10ca0620072802d00122104101460d0120072802dc01211120072802d80121122010450d0a20072802c801220c280200450d0a024020072802e0012213450d002012280200450d0b201320104d0d0b200720103602e401201320106b221441016a22154101201541014b1b221641ffffffff03712016470d0320164102742209417f4c0d030240024020090d0041042117201621180c010b200910332217450d0f200941027621180b201041ffffffff03712010470d0320104102742209417f4c0d030240024020090d00410421192010211a0c010b200910332219450d0f2009410276211a0b410221094101210f200c280200220c67221b211c0240200c41ffffffff034b0d0041022109201b210c4101210f034020094101200c4101711b200f6c210f200c41034b211d200920096c2109200c410176221c210c201d0d000b0b2007201336028803200720113602840320072012360280034104102d220c450d0e200c20094101201c4101461b200f6c220f36020020074281808080103702ac022007200c3602a802200741e8016a20074180036a200741a8026a10cc06200c102f20074180036a200741c8016a10cf064104102d2209450d0e2009200f36020020074281808080103702ac02200720093602a802200741f8016a20074180036a200741a8026a10cc062009102f0240024020072802e40120156a220920072802f001220c4d0d00024002402009200c6b22090d004104210f4100211d410021090c010b200941ffffffff03712009470d022009410274221d4100480d02201d102d220f450d11200f4100200941027410e7061a201d410276211d0b20072802e801211c0240201d20096b200c4f0d002009200c6a22122009490d02201d41017422112012201120124b1b221241ffffffff03712012470d02201241027422124100480d0202400240201d0d002012102d210f0c010b200f201d41027420121031210f0b200f450d112012410276211d0b200f20094102746a201c200c41027410e8061a2009200c6a2109024020072802ec01450d00201c102f0b200720093602f0012007201d3602ec012007200f3602e8010b200741f8016a10ca060240024002400240024002400240024002400240034020072014221e36028402024020072802f001220920072802e401220c201e6a220f417f736a221d2009490d0041c4c2ca00201d2009103b000b0240024002400240024002400240024002400240024002400240024020092009200f6b220f4d0d0020072802800222092009200c6b220c4d0d0120072802f801200c4102746a35020022024200510d02201e201e4100476b211420072802e8012209201d4102746a35020021012009200f4102746a3502002104200741003602880220072004200142208684200280220137039002200741003602980220072004200120027e7d42ffffffff0f833703a002200720074184026a3602bc022007200741e8016a3602b8022007200741e4016a3602b4022007200741f8016a3602b002200720074198026a3602ac02200720074188026a3602a802200741a8026a10cd061a034020072802980241016a41004c0d04024020072903a00242ffffffff0f560d00200741a8026a10cd060d010b0b2007290390022102200728028402210920072802e401210c200741003a0088032007200c20096a3602840320072009360280032007200741e8016a36028c03200741c0026a20074180036a10d006200741f0026a200741f8016a10cf064108102d2209450d2820092002a7221f360204200920024220883e02002007428280808020370284032007200936028003200741d0026a200741f0026a20074180036a10cc062009102f20072802c802222020072802d8022221202020214b1b22124101201241014b1b220c41ffffffff0371200c470d1d200c410274220f417f4c0d1d20072802c402212220072802c002212302400240200f0d0041042124200c21250c010b200f10332224450d29200f41027621250b2012450d062021417f6a221520214b211320072802d00221262020417f6a222720204b0d04200c417f6a21092024200f6a417c6a211c4100210f4200210203404100211d024020202027200f6b22114d0d004100211d201120274b0d00202320114102746a280200211d0b201dad21044100211d024020130d0020212015200f6b22114d0d00201120154b0d00202620114102746a280200211d0b024002402004201dad22037d22012004560d00200120027d220a2001560d00200a42ffffffff0f832104420021020c010b20044280808080108420027d20037d2104420121020b200c20094d0d09201c20043e0200201c417c6a211c2009417f6a2109200f41016a220f2012490d000c060b0b41c4c2ca00200f2009103b000b41c4c2ca00200c2009103b000b4190c4ca00411941acc3ca001039000b41c6c4ca00411820074180036a41e0c4ca0041f0c4ca00103e000b200c417f6a21092024200f6a417c6a211d4100211c4200210203404100210f024020130d004100210f20212015201c6b22114d0d004100210f201120154b0d00202620114102746a280200210f0b024002404200200fad22017d22044200520d00200420027d22032004560d00200342ffffffff0f832104420021020c010b428080808010200220017c7d2104420121020b200c20094d0d04201d20043e0200201d417c6a211d2009417f6a2109201c41016a221c2012490d000b0b41012111200250450d010b410021110b02402022450d002023102f0b20072802e401221d200728028402220f6a2213201d490d05200f20134f0d01200f417f7321090340200c200c200f6a20096a221c4d0d03200920072802f00122126a220f20094f0d0420072802e801200f4102746a2024201c4102746a2802003602002009417f6a2109200728028402210f201d417f6a221d0d000c050b0b419cc3ca002009200c103b000b201d450d020c030b41c4c2ca0020212020202120204b1b22074101200741014b1b200f6a20096a200c103b000b419cc3ca00200f2012103b000b200c200c2013417f7322096a200f6a220f4d0d0220072802f001220c20096a2209200c4f0d0320072802e80120094102746a2024200f4102746a280200360200200728028402210f0b2016200f417f736a220920164f0d03201720094102746a201f36020002402011450d002016200728028402417f736a220920164f0d05201720094102746a22092009280200417f6a360200200728028402210920072802e401210c200741003a0088032007200c20096a3602840320072009360280032007200741e8016a36028c03200741e0026a20074180036a10d00620074180036a200741f8016a10cf06200741f0026a20074180036a200741e0026a10cb06024020072802e401220920072802840222126a220c2009490d00024002402012200c4f0d00200c417f73210920072802f002211120072802f802210f2012211d0340200f200f201d6a20096a221d4d0d0a200920072802f00122136a221c20094f0d0b20072802e801201c4102746a2011201d4102746a280200360200200941016a2109200728028402211d2012200c417f6a220c490d000c020b0b20090d0120072802f802210f2012211d0b201d2012417f7322096a220c200f6a221d200c4f0d0920072802f001220c20096a2209200c4f0d0a20072802e80120094102746a20072802f002201d4102746a2802003602000b024020072802f402450d0020072802f002102f0b20072802e402450d0020072802e002102f0b02402025450d002024102f0b024020072802d402450d0020072802d002102f0b201e0d000b0240201b450d004101210920072802e401220c4101460d134100200c6b2112201b411f7121114100201b6b411f712113201041027420196a417c6a210c417f210903400240200920072802f001221d6a220f2009490d0041c4c2ca00200f201d103b000b201d200f417f6a221c4d0d0a201020096a221d20104f0d0b200c20072802e801221d201c4102746a280200201374201d200f4102746a28020020117672360200200c417c6a210c20122009417f6a2209460d130c000b0b4100210920072802f001211020072802ec01210f20072802e801211d201a450d132019102f0c130b41c4c2ca00200f200c103b000b419cc3ca002009200c103b000b419cc3ca0020092016103b000b41c4c2ca0020092016103b000b41c4c2ca00201d200f103b000b419cc3ca00201c2013103b000b41c4c2ca00201d200f103b000b419cc3ca002009200c103b000b41c4c2ca00200f417f6a201d103b000b419cc3ca00201d2010103b000b1038000b41c4c2ca0041004100103b000b200741286a200729035820032008200610ee0620004100360200200041106a200741286a41086a290300370300200041086a20072903283703000c0e0b200741a8026a41086a200741d8016a41086a280200221c360200200720072903d8013703a802201c4101201c41014b1b221d41ffffffff0371201d470d00201d4102742209417f4c0d000240024020090d0041042115201d21270c010b200910332215450d0c200941027621270b201c450d02201c417f6a21122015201d201c6b22114102746a210c200f4101200f41014b1bad2102420021044100210920072802a802210f0340201d201120096a22134d0d02200c2004422086200f35020084220420028022013e020020122009460d03200c41046a210c200f41046a210f2004200120027e7d2104201c200941016a22094b0d000b41c4c2ca002009201c103b000b103d000b419cc3ca002013201d103b000b2007201d360288032007202736028403200720153602800320072802ac02450d0720072802a802102f0c070b20072802e40121090b20072802f001220c200c20096b220f4d0d012010201020096b22094d0d02201920094102746a20072802e801200f4102746a280200201b411f717636020041012109201a210f2019211d0b024020072802fc01450d0020072802f801102f0b2009450d0320072802ec01450d0320072802e801102f0c030b41c4c2ca00200f200c103b000b419cc3ca0020092010103b000b4100211702402011450d002012102f0b0b4104102d2209450d01200941003602004104102d220c450d01200c41003602004101211c0240024020170d00200921174101211841012116200c211d4101210f410121100c010b2009102f200c102f0b20072016360290022007201836028c022007201736028802200720103602b0022007200f3602ac022007201d3602a802200741a8026a10ca06420021020240024020072802b00222094105744180014d0d00421d21040c010b4100211c024020090d00420021040c010b20072802a802220c200941027422096a417c6a220f280200211d0240200c200f470d00201dad21040c010b200c41786a210f201dad2104200741206a211d4120210c420021020340200741186a200f20096a3502004200200c41e0007110eb06201d29030020027c2007290318220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b024020072802ac02450d0020072802a802102f0b201c0d020240200420084201882006423f8684562002200642018822045620022004511b450d0020074198026a41086a20074188026a41086a2802003602002007200729038802370398024110102d2209450d0220094280808080103702082009420037020020074284808080c0003702ac02200720093602a802200741a8026a10ca0620074180036a41086a20072802b002360200200720072903a8023703800320074188026a20074198026a20074180036a10cb06200728028403450d00200728028003102f0b20074180036a41086a20074188026a41086a2802003602002007200729038802370380030b20074180036a10ca06200741a8026a41086a220920074180036a41086a28020036020020072007290380033703a802200741a8026a10ca064200210202400240200928020022094105744180014d0d00421d21044101211c0c010b4100211c024020090d00420021040c010b20072802a802220c200941027422096a417c6a220f280200211d0240200c200f470d00201dad21040c010b200c41786a210f201dad2104200741106a211d4120210c420021020340200741086a200f20096a3502004200200c41e0007110eb06201d29030020027c2007290308220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b024020072802ac02450d0020072802a802102f0b02400240201c450d00200041c4c6ca00360204200041086a4119360200410121090c010b200041106a2002370300200041086a2004370300410021090b2000200936020020072802cc01450d0220072802c801102f0c020b1036000b200720043e02ac02200741a9c4ca003602a80241f4c5ca00412f200741a8026a41a4c6ca0041b4c6ca00103e000b20074190036a24000bd30201037f230041d0006b220824000240024002402002200685200320078584500d00200220038450450d01410121090c020b417f20002004852001200585844200522000200454200120055420012005511b1b21090c010b0240200620078450450d0041ff0121090c010b200841206a2000200110d106200841306a2006200710d106200841c0006a41086a2209200841206a41086a220a280200360200200820082903203703402008200841c0006a200841306a10cc0602402008280234450d002008280230102f0b200841206a2004200510d106200841306a2002200310d1062009200a28020036020020082008290320370340200841106a200841c0006a200841306a10cc0602402008280234450d002008280230102f0b2008200841106a10ce06210902402008280214450d002008280210102f0b2008280204450d002008280200102f0b200841d0006a240020090beb0203017f047e017f230041d0006b2202240002400240200029031022032001290310220485200041186a2903002205200141186a29030022068584500d00200241206a2000290300200041086a29030010d106200241306a2004200610d106200241c0006a41086a2200200241206a41086a2207280200360200200220022903203703402002200241c0006a200241306a10cc0602402002280234450d002002280230102f0b200241206a2001290300200141086a29030010d106200241306a2003200510d1062000200728020036020020022002290320370340200241106a200241c0006a200241306a10cc0602402002280234450d002002280230102f0b2002200241106a10ce06210002402002280214450d002002280210102f0b200041ff0171210002402002280204450d002002280200102f0b20004521000c010b2000290300200129030085200041086a290300200141086a29030085845021000b200241d0006a240020000b930901157f230041206b220524002003410020041b21062001410020021b2107200341206a200320041b2108200141206a200120021b2109200120024105746a210a200320044105746a210b4100210c4100210d4101210e4100210f410021104101211102400340200c4101742112200c4105742113024003402012211420132104200c2102200d2115200e2116200821032006210102400340024020010d004100210620070d022000201636020c2000200f3602082000201036020420002011360200200041146a2002360200200041106a2015360200200541206a24000f0b024020070d00200541186a2203200641186a290000370300200541106a2202200641106a290000370300200541086a2207200641086a290000370300200520062900003703000240200c200d470d00200c41016a2201200c490d07200c41017422042001200420014b1b220141ffffff3f712001470d07200141057422014100480d0702400240200c0d002001102d210e0c010b200e200c41057420011031210e0b200e450d052001410576210d0b200e200c4105746a22012005290300370000200141186a2003290300370000200141106a2002290300370000200141086a200729030037000041002107410020082008200b4622011b2106201241026a2112201341206a2113200c41016a210c2008200841206a20011b21080c030b0240024020012007460d0020012007412010ea0622170d010b2003200341206a2003200b4622011b2108410020092009200a4622041b21074100200320011b21062002210c2015210d2016210e2009200941206a20041b21090c050b02402017417f4c0d00200121060c020b200541186a2217200141186a290000370300200541106a2218200141106a290000370300200541086a2219200141086a29000037030020052001290000370300024020022015470d00200241016a22012002490d0620142001201420014b1b220141ffffff3f712001470d06200141057422014100480d060240024020020d002001102d21160c010b201620042001103121160b2016450d04200141057621150b201620046a22012005290300370000200141186a2017290300370000200141106a2018290300370000200141086a2019290300370000410020032003200b4622171b2101201441026a2114200441206a2104200241016a21022003200341206a20171b21030c000b0b0b200541186a2204200741186a290000370300200541106a2214200741106a290000370300200541086a2217200741086a290000370300200520072900003703000240200f2010470d00200f41016a2201200f490d03200f41017422072001200720014b1b220141ffffff3f712001470d03200141057422014100480d0302400240200f0d002001102d21110c010b2011200f4105742001103121110b2011450d01200141057621100b2011200f4105746a22012005290300370000200141186a2004290300370000200141106a2014290300370000200141086a2017290300370000410020092009200a4622011b2107200f41016a210f2002210c2015210d2016210e2009200941206a20011b2109200321080c010b0b1036000b1038000bb512080a7f027e047f017e047f027e027f057e23002204210520044180016b416071220424000240024002400240024002400240200141ffffff3f712001470d0020014105742206417f4c0d00024020060d00200020014105746a210741012108200121090c030b2006102d2208450d05200020014105746a21072006410576220920014f0d02200941017422062001200620014b1b220641ffffff3f712006470d01200641057422064100480d010240024020090d002006102d21080c010b200820094105742006103121080b2008450d05200641057621090c030b103d000b1038000b20010d00410021060c010b200720006b210a410021060340200820066a2207200020066a220b290000370000200741186a200b41186a290000370000200741106a200b41106a290000370000200741086a200b41086a290000370000200a200641206a2206470d000b200020014105746a20006b41606a41057641016a21060b20042006360208200420093602042004200836020020082006410041202006676b10e003200441206a41186a220a4200370300200441206a41106a220c4200370300200441206a41086a220d42003703002004420037032041f2cbc700ad4280808080b00284220e10012206290000210f200d200641086a2900003703002004200f3703202006102f41e2dec700ad428080808090018410012206290000210f200441c8006a41086a2200200641086a2900003703002004200f3703482006102f200c2004290348220f370300200441e0006a41086a2210200d290300370300200441e0006a41106a2211200f370300200441e0006a41186a2212200029030037030020042004290320370360200441206a200441e0006a412010aa0220042802202206410120061b21132004290224420020061b2214422088a72206450d0120064105742115200441e0006a410c722116200441206a410c6a2101200441206a4114722117200441206a4108722118201321070340200a200741186a290000370300200c200741106a290000370300200d200741086a29000037030020042007290000370320200e10012206290000210f200441106a41086a2208200641086a2900003703002004200f3703102006102f41f2dec700ad4280808080e0008410012206290000210f2000200641086a2900003703002004200f3703482006102f4120102d2206450d0120062004290320370000200641186a200a290300370000200641106a200c290300370000200641086a200d2903003700002006ad42808080808004841003220b290000210f200b41086a2900002119200b41106a290000211a2012200b41186a2900003703002011201a370300201020193703002004200f370360200b102f2006102f41c000102d2206450d01200620042903103700002006200429034837001020062004290360370020200641086a2008290300370000200641186a2000290300370000200641286a2010290300370000200641306a2011290300370000200641386a2012290300370000200441206a200610a1052000200141086a290200370300200441c8006a41106a2209200141106a280200360200200420012902003703482004280240211b02402004280228220b450d002004290320210f20162004290348370200201641086a2000290300370200201641106a20092802003602002004200f370360201b211c0b2004200b360268200441003602282004290378211a20042004290338221d3703782004290370211e20042004290330221f370370200429036021202004200429032022193703602004290368210f2004200429032822213703682021a7210b02400240200fa722090d002021210f201f211e201d211a0c010b200420203703202004200f3703282004201e3703302004201a37033820042009201ea74105746a360254200420093602502004200f422088a736024c2004200936024820042004360258200441106a200441c8006a10f803201841086a2008280200360200201820042903103702002004201e422088a72209201a422088a74105746a360254200420093602502004201aa736024c2004200936024820042004360258200441106a200441c8006a10f803201741086a2008280200360200201720042903103702002004290328210f200429032021192004290338211a2004290330211e0240200b450d00201da7210802402021422088a7450d00200b102f0b2008450d00201f422088a7102f0b200420193703602004200f3703682004201e3703702004201a370378200fa7210b201b211c0b2004200f3703282004201e370330200a201a370300200420193703202004201c360240200fa7210802400240200b0d002006ad428080808080088410050c010b200441c00036024c20042006360248200441206a200441c8006a10b7050b02402008450d00201aa7210b0240200f422088a7450d002008102f0b200b450d00201e422088a7102f0b200741206a21072006102f201541606a22150d000c020b0b1036000b02402014a7450d002013102f0b200441e0006a41186a220a4200370300200441e0006a41106a22074200370300200441e0006a41086a220642003703002004420037036041f2cbc700ad4280808080b00284220f100122002900002119200441106a41086a220b200041086a290000370300200420193703102000102f2006200b2903003703002004200429031037036041ebdec700ad4280808080f00084100122082900002119200441c8006a41086a2200200841086a290000370300200420193703482008102f200720042903482219370300200441206a41086a22012006290300370300200441206a41106a22092019370300200441206a41186a221c200029030037030020042004290360370320200441203602642004200441206a36026020022003200441e0006a10ad01200a4200370300200742003703002006420037030020044200370360200f10012208290000210f200b200841086a2900003703002004200f3703102008102f2006200b2903003703002004200429031037036041fbd4c700ad4280808080d000841001220b290000210f2000200b41086a2900003703002004200f370348200b102f20072004290348220f370300200120062903003703002009200f370300201c200029030037030020042004290360370320200441206aad4280808080800484100502402004280204450d002004280200102f0b200524000bab0704067f017e087f037e230041a0016b220224002002412036021420022001360210200241186a2001ad42808080808004841002107302400240024002400240024020022802182203450d00200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10e60120022802080d03200228020c2205200228022c220641286e2201200120054b1b2207ad42287e2208422088a70d012008a72201417f4c0d010240024020010d00410821090c010b2001102d2209450d03200141286e21070b02402005450d004100210a0340200241003a009801200a220b41016a210a410021010240024002400240034020062001460d01200241f8006a20016a2002280228220c2d00003a00002002200c41016a3602282002200141016a220d3a009801200d2101200d4120470d000b200241d8006a41086a220e200241f8006a41086a290300370300200241d8006a41106a220f200241f8006a41106a290300370300200241d8006a41186a2210200241f8006a41186a2903003703002002200229037837035820022006200d6b220136022c20014108490d01200241386a41086a220d200e290300370300200241386a41106a220e200f290300370300200241386a41186a220f2010290300370300200220022903583703382002200c41096a3602282002200141786a220636022c200c29000121082007200b470d030240200b4101742201200a2001200a4b1bad42287e2211422088a70d002011a7220141004e0d030b1038000b2002410036022c200141ff0171450d00200241003a0098010b2007450d072009102f0c070b02400240200b0d002001102d21090c010b2009200b41286c2001103121090b2009450d05200141286e21070b2009200b41286c6a22012002290338370300200d2903002111200e2903002112200f290300211320012008370320200141186a2013370300200141106a2012370300200141086a2011370300200a2005470d000b0b2009450d032000200736020420002009360200200041086a20053602000c040b200041003602000c040b103d000b1036000b20024100360260200242013703582002410b36023c2002200241106a3602382002200241d8006a3602342002418c016a41013602002002420137027c200241b885c7003602782002200241386a36028801200241346a41d8dbc100200241f8006a103c1a200235026042208620023502588410080240200228025c450d002002280258102f0b200041003602000b2004450d002003102f0b200241a0016a24000bd00a06067f017e097f017e037f037e230041b0016b22022400200241c00036020c20022001360208200241106a2001ad428080808080088410021073024002400240024002400240024020022802102203450d00200228021421042002200241186a280200360224200220033602202002200241206a10e60120022802000d04200228020422052002280224220641d8006e2201200120054b1b2207ad42d8007e2208422088a70d012008a72201417f4c0d010240024020010d00410821090c010b2001102d2209450d03200141d8006e21070b02402005450d004100210a4100210b0340200241003a00a801200b41016a210c4100210102400240024002400240034020062001460d0120024188016a20016a2002280220220d2d00003a00002002200d41016a3602202002200141016a220e3a00a801200e2101200e4120470d000b200241e8006a41086a220f20024188016a41086a290300370300200241e8006a41106a221020024188016a41106a290300370300200241e8006a41186a221120024188016a41186a290300370300200220022903880137036820022006200e6b220136022420014110490d032002200d41116a3602202002200141706a360224200d41096a2900002108200d290001211220024188016a200241206a10f703200228028801220e450d032002280290012113200228028c01210d20024188016a200241206a10980320022802880122060d01200d0d020c030b20024100360224200141ff0171450d02200241003a00a8010c020b200228028c01211420022802242201410f4b0d0202402014450d002006102f0b200d450d010b200e102f0b0240200b450d00200941306a210103400240200141746a280200450d00200141706a280200102f0b02402001280200450d002001417c6a280200102f0b200141d8006a2101200a41a87f6a220a0d000b0b2007450d072009102f0c070b2002280290012115200241c8006a41086a200f2903002216370300200241c8006a41106a20102903002217370300200241c8006a41186a20112903002218370300200241286a41086a220f2016370300200241286a41106a22102017370300200241286a41186a221120183703002002200229036822163703482002200141706a36022420022002280220220141106a36022020022016370328200141086a29000021162001290000211702402007200b470d00200b4101742201200c2001200c4b1bad42d8007e2218422088a70d062018a722014100480d0602400240200b0d002001102d21090c010b2009200b41d8006c2001103121090b2009450d05200141d8006e21070b2009200b41d8006c6a2201201737031020012008370308200120123703002001200636022c2001200e360220200141186a2016370300200141346a2015360200200141306a2014360200200141286a2013360200200141246a200d36020020012002290328370338200141c0006a200f290300370300200141c8006a2010290300370300200141d0006a2011290300370300200c2005460d01200a41d8006a210a20022802242106200c210b0c000b0b2009450d042000200736020420002009360200200041086a20053602000c050b200041003602000c050b103d000b1036000b1038000b20024100360270200242013703682002410b36024c2002200241086a3602482002200241e8006a3602282002419c016a41013602002002420137028c01200241b885c700360288012002200241c8006a36029801200241286a41d8dbc10020024188016a103c1a200235027042208620023502688410080240200228026c450d002002280268102f0b200041003602000b2004450d002003102f0b200241b0016a24000bae0403047f027e057f230041e0006b22022400200241c00036020c20022001360208200241106a2001ad428080808080088410021073024002400240024020022802102201450d00200228021421032002200241186a280200220436022420022001360220024020044104490d002002200141046a36022020022004417c6a220536022420054110490d002001280000210520022004416c6a3602242002200141146a3602202001410c6a290000210620012900042107200241c8006a200241206a10980320022802482204450d00200228024c21082002280224220941024f0d022008450d002004102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602140c020b200041003602140c020b200241d0006a280200210a200241386a41046a200241286a41046a2f0100220b3b010020022002280128220c36023820022009417e6a36022420022002280220220941026a36022020092f000021092000200637030820002007370300200041206a20093b01002000411c6a200a3602002000200836021820002004360214200020053602102000200c360122200041266a200b3b01000b2003450d002001102f0b200241e0006a24000bda04010a7f230041e0006b22022400200241c00036020c20022001360208200241106a2001ad428080808080088410021073024002400240024020022802102201450d00200228021421032002200241186a2802002204360224200220013602200240024020044104490d002002200141046a36022020022004417c6a220536022420054104490d00200128000021062002200141086a3602202002200441786a220536022420054104490d00200128000421052002200441746a36022420022001410c6a360220200128000821072002200241206a10e60120022802000d0020022802242208200228020422094102742204490d002004417f4c0d040240024020040d004101210a0c010b20041033220a450d06200a2002280220220b200410e8061a2002200820046b3602242002200b20046a3602200b200a450d000240024002402004450d00200a4103710d02200941ffffffff037122040d01200a102f0b4104210a410021040b41000d01200a450d01200020043602102000200a36020c200020073602082000200536020420002006360200200041146a20043602000c020b200a102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b2000410036020c0b2003450d012001102f0c010b2000410036020c0b200241e0006a24000f0b103d000b1036000b9205010c7f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100210730240024002400240024020022802102203450d00200228021421042002200241186a280200360224200220033602202002200241206a10e6010240024020022802000d0020022802042205200228022422064103762201200120054b1b22074103742201417f4c0d040240024020070d00410421080c010b2001102d2208450d060b024002402005450d00410021094100210a4100210b03402002410036024820064104490d0220022006417c6a220636022420022002280220220141046a3602202001280000210c2002410036024820064104490d02200b41016a210d20022006417c6a22063602242002200141086a360220200128000421010240200b2007470d002009200d2009200d4b1b220741ffffffff01712007470d0a200741037422074100480d0a02400240200b0d002007102d21080c010b2008200a2007103121080b2008450d09200741037621070b2008200a6a220b200c360200200b41046a2001360200200941026a2109200a41086a210a200d210b2005200d470d000b0b2008450d012000200736020420002008360200200041086a20053602000c020b2007450d002008102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602000b2004450d012003102f0c010b200041003602000b200241e0006a24000f0b103d000b1036000b1038000b9e0302037f037e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100210730240024020032802102201450d00200328021421042003200341186a2802002202360224200320013602200240024020024104490d002003200141046a36022020032002417c6a220536022420054110490d002001280000210520032002416c6a3602242003200141146a3602202001410c6a290000210620012900042107200341c8006a200341206a10980320032802482202450d00200329024c210820002006370308200020073703002000200837031820002002360214200020053602100c010b20034100360230200342013703282003410b36023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341b885c7003602482003200341386a360258200341c4006a41d8dbc100200341c8006a103c1a200335023042208620033502288410080240200328022c450d002003280228102f0b200041003602140b2004450d012001102f0c010b200041003602140b200341e0006a24000baa06020f7f047e230041a0016b22022400200241c00036020c20022001360208200241106a2001ad428080808080088410021073024002400240024020022802102203450d00200228021421042002200241186a28020022013602242002200336022020014104490d0120022001417c6a3602242002200341046a360220200328000021052002200241206a10e60120022802000d01200228020421062002420037022c20024190bdc60036022802402006450d0020022802242107410021080340200241003a009801200841016a210841002101024002400240034020072001460d01200241f8006a20016a200228022022092d00003a00002002200941016a3602202002200141016a220a3a009801200a2101200a4120470d000b200241d8006a41186a220b200241f8006a41186a220c290300370300200241d8006a41106a220d200241f8006a41106a220e290300370300200241d8006a41086a220f200241f8006a41086a2210290300370300200220022903783703582007200a6b220141034b0d02200220013602240c010b20024100360224200141ff0171450d00200241003a0098010b2002280228200229022c2211a72011422088a710a3020c040b200241386a41086a200f2903002211370300200241386a41106a200d2903002212370300200241386a41186a200b29030022133703002002200229035822143703382002200941056a3602202009280001210a200c2013370300200e20123703002010201137030020022014370378200241286a200241f8006a200a10ed012001417c6a210720082006470d000b20022001417c6a3602240b20022802282201450d012000200229022c37020820002001360204200020053602000c020b200041003602040c020b20024100360260200242013703582002410b36023c2002200241086a3602382002200241d8006a3602282002418c016a41013602002002420137027c200241b885c7003602782002200241386a36028801200241286a41d8dbc100200241f8006a103c1a200235026042208620023502588410080240200228025c450d002002280258102f0b200041003602040b2004450d002003102f0b200241a0016a24000bd90704057f047e067f037e230041c0016b22022400200241c00036023420022001360230200241386a2001ad4280808080800884100210730240024020022802382203450d00200228023c21042002200241c0006a280200220536026c2002200336026841002101200241003a00b801024002400240024002400240034020052001460d0120024198016a20016a200320016a22062d00003a00002002200641016a3602682002200141016a22063a00b8012006210120064120470d000b200241f8006a41086a20024198016a41086a290300370300200241f8006a41106a20024198016a41106a290300370300200241f8006a41186a20024198016a41186a29030037030020022002290398013703782002200520066b36026c200241186a200241e8006a109c032002290318a70d04200241186a41106a2903002107200229032021082002200241e8006a109c032002290300a70d04200241106a29030021092002290308210a20024198016a200241e8006a10c3032002280298012206450d04200228029c012105200228026c220b450d03200241a0016a280200210c2002200b417f6a220d36026c20022002280268220e41016a360268200e2d0000220f41014b0d0341002101200f0e020201020b2002410036026c200141ff0171450d03200241003a00b8010c030b200d4104490d012002200b417b6a36026c2002200e41056a360268200e2800012110410121010b200241c8006a41186a200241f8006a41186a2903002211370300200241c8006a41106a200241f8006a41106a2903002212370300200241c8006a41086a200241f8006a41086a290300221337030020024198016a41086a220b201337030020024198016a41106a220e201237030020024198016a41186a220f2011370300200220022903782211370348200041186a20093703002000200a37031020002007370308200020083703002000200c3602282000200536022420002006360220200220113703980120002010360230200041346a2002290398013702002000413c6a200b290300370200200041c4006a200e290300370200200041cc006a200f2903003702000c020b2005450d002006102f0b2002410036028001200242013703782002410b36024c2002200241306a3602482002200241f8006a360274200241ac016a41013602002002420137029c01200241b885c700360298012002200241c8006a3602a801200241f4006a41d8dbc10020024198016a103c1a20023502800142208620023502788410080240200228027c450d002002280278102f0b410221010b2000200136022c2004450d012003102f0c010b2000410236022c0b200241c0016a24000bb704010b7f230041e0006b22022400200241c00036020c20022001360208200241106a2001ad428080808080088410021073024002400240024020022802102201450d00200228021421032002200241186a280200220436022420022001360220024020044104490d002002200141046a36022020022004417c6a220536022420054104490d00200128000021062002200441786a3602242002200141086a36022020012800042107200241c8006a200241206a10980320022802482204450d00200241c8006a41086a2802002108200228024c2105200241c8006a200241206a109803024020022802482209450d00200228024c210a2002280224220b41044f0d03200a450d002009102f0b2005450d002004102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b200041003602080c020b200041003602080c020b200241d0006a280200210c2000200536020c200020043602082000200736020420002006360200200041206a200228022022042800003602002000411c6a200c360200200041186a200a360200200041146a2009360200200041106a20083602002002200b417c6a3602242002200441046a3602200b2003450d002001102f0b200241e0006a24000be80203017f017e027f23004190056b22022400200241c0003602b402200220013602b002200241b8026a2001ad42808080808008842203100210730240024020022802b80222010d00411b21010c010b20022802bc0221042002200241c0026a2802003602fc04200220013602f804200241c8026a200241f8046a10b3020240024020022802c8022205411b460d002002200241c8026a41047241ac0210e8061a0c010b20024100360208200242013703002002410b360284052002200241b0026a360280052002200236028c05200241dc026a4101360200200242013702cc02200241b885c7003602c802200220024180056a3602d8022002418c056a41d8dbc100200241c8026a103c1a200235020842208620023502008410082002280204450d002002280200102f0b02402004450d002001102f0b411b21012005411b460d0020031005200521010b20002001360200200041046a200241ac0210e8061a20024190056a24000bf11a04027f027e087f067e230041800c6b22082400200728024021090240024020020d00200941d8006a290300210a0c010b02402001290310220b200141186a290300220a8450450d004200210a0c010b200841206a200941a0016a290300200941a8016a290300200b200a10ee062008290320427f200841286a290300501b210a0b200142002001290308220b200a7d220a200a200b561b37030802400240200a200b580d00200041003a0000200041086a4122360200200041046a41ea93c7003602000c010b0240024002400240024002400240200728021841016a220c41004c0d002007200c360218200741206a280200210d2007411c6a220e21010240024002400340024002402001280200220f2f010622100d00410021020c010b20104105742101200f41c5036a2111200f41086a2109417f21020340024020010d00201021020c020b20032009412010ea062212450d03200141606a2101201141e0006a2111200241016a2102200941206a21092012417f4a0d000b0b200d450d02200d417f6a210d200f20024102746a41880b6a21010c000b0b2011310000201141a37f6a290300220b200b5022011ba7450d004200201141ab7f6a220941086a29030020011b210b4200200929030020011b210a0c010b200841106a200741286a28020020032007412c6a28020028021c110300200841186a290300210b2007280218210c2008290310210a0b2007200c417f6a22133602180240200a20057d2214200a56200b20067d200a200554ad7d220a200b56200a200b511b4101470d00200041003a0000200041086a411d360200200041046a418c94c7003602000c080b200c41004c0d012007200c3602182007280220210d200e21010240024002400340024002402001280200220f2f010622100d00410021020c010b20104105742101200f41c5036a2111200f41086a2109417f21020340024020010d00201021020c020b20042009412010ea062212450d03200141606a2101201141e0006a2111200241016a2102200941206a21092012417f4a0d000b0b200d450d02200d417f6a210d200f20024102746a41880b6a21010c000b0b2011310000201141a37f6a290300220b200b5022011ba7450d004200201141ab7f6a220941086a29030020011b210b4200200929030020011b21150c010b2008200741286a28020020042007412c6a28020028021c1103002007280218417f6a2113200841086a290300210b200829030021150b2007201336021802402015200b844200520d00200728024022012903800120055820014188016a290300221620065820162006511b0d00200041003a0000200041086a411f360200200041046a41a994c7003602000c080b02402005200684500d0020084180016a2003108d0220082903a001201456200841a8016a2903002216200a562016200a511b0d030b0240201520057c22162015542201200b20067c2001ad7c2215200b542015200b511b450d00200041003a0000200041086a412d360200200041046a41c894c7003602000c080b024020032004460d0020032004412010ea06450d0020072802180d042007417f360218200841e0006a41186a200341186a290000370300200841e0006a41106a200341106a290000370300200841e0006a41086a200341086a2900003703002008200329000037036002400240200728021c220f4190bdc600460d002007280220210d0c010b4100210d200841a0096a410041e00210e7061a20084180016a410041a00810e7061a41880b102d220f450d06200f41003b0106200f4100360200200f41086a200841a0096a41e00210e8061a200f41e8026a20084180016a41a00810e8061a200741003602202007200f36021c0b02400240034002400240200f2f010622100d00410021020c010b20104105742101200f41e8026a2111200f41086a2109417f21020340024020010d00201021020c020b200841e0006a2009412010ea062212450d03200141606a2101201141e0006a2111200241016a2102200941206a21092012417f4a0d000b0b0240200d450d00200d417f6a210d200f20024102746a41880b6a280200210f0c010b0b200841c0006a41186a200841e0006a41186a290300220b370300200841c0006a41106a200841e0006a41106a2903002217370300200841c0006a41086a200841e0006a41086a2903002218370300200820082903602219370340200841bc096a2018370200200841a0096a41246a2017370200200841cc096a200b3702002008200741246a3602b009200820023602ac092008200e3602a8092008200f3602a409200841003602a009200820193702b409200841b4016a4200370200200841bc016a41003a000020084190bdc6003602b00120084200370398012008420037038001200841003a00dd01200841a0096a20084180016a10970221110c010b20084198016a420037030020084194016a4190bdc600360200200841003602a0012008410036029001200842003703880120084190bdc60036028401200841003602800120084180016a1090020b201141106a200a370300201120143703082011420137030020072007280218220141016a2209360218200920014f0d062007417f360218200841e0006a41186a200441186a290000370300200841e0006a41106a200441106a290000370300200841e0006a41086a200441086a2900003703002008200429000037036002400240200728021c220f4190bdc600460d002007280220210d0c010b4100210d200841a0096a410041e00210e7061a20084180016a410041a00810e7061a41880b102d220f450d06200f41003b0106200f4100360200200f41086a200841a0096a41e00210e8061a200f41e8026a20084180016a41a00810e8061a200741003602202007200f36021c0b02400240034002400240200f2f010622100d00410021020c010b20104105742101200f41e8026a2111200f41086a2109417f21020340024020010d00201021020c020b200841e0006a2009412010ea062212450d03200141606a2101201141e0006a2111200241016a2102200941206a21092012417f4a0d000b0b0240200d450d00200d417f6a210d200f20024102746a41880b6a280200210f0c010b0b200841c0006a41186a200841e0006a41186a290300220b370300200841c0006a41106a200841e0006a41106a290300220a370300200841c0006a41086a200841e0006a41086a2903002214370300200820082903602217370340200841bc096a2014370200200841a0096a41246a200a370200200841cc096a200b3702002008200741246a3602b009200820023602ac092008200e3602a8092008200f3602a409200841003602a009200820173702b409200841b4016a4200370200200841bc016a41003a000020084190bdc6003602b00120084200370398012008420037038001200841003a00dd01200841a0096a20084180016a10970221110c010b20084198016a420037030020084194016a4190bdc600360200200841003602a0012008410036029001200842003703880120084190bdc60036028401200841003602800120084180016a1090020b201141106a201537030020112016370308201142013703002007200728021841016a360218200841a0096a41086a2209200341086a290000370300200841a0096a41106a2202200341106a290000370300200841a0096a41186a2211200341186a290000370300200841e0006a41086a2212200441086a290000370300200841e0006a41106a220f200441106a290000370300200841e0006a41186a220d200441186a290000370300200820032900003703a0092008200429000037036002402007413c6a2802002201200741386a280200470d00200141016a22032001490d08200141017422042003200420034b1bad42d8027e220b422088a70d08200ba722034100480d080240024020010d002003102d21010c010b2007280234200141d8026c2003103121010b2001450d0620072001360234200741386a200341d8026e360200200728023c21010b2007280234200141d8026c6a220141003a0000200120082f003d3b00012001420037000820014101360004200120082903a00937001120012008290360370031200141036a2008413f6a2d00003a0000200141106a41003a0000200141196a2009290300370000200141216a2002290300370000200141296a2011290300370000200141396a2012290300370000200141c1006a200f290300370000200141c9006a200d29030037000020012005370358200141e0006a2006370300200141d4006a200841366a41036a2800003600002001200828003636005120012008290340370368200141f0006a200841c0006a41086a290300370300200141f8006a200841c0006a41106a29030037030020014180016a200841c0006a41186a29030037030020014188016a20084180016a41d00110e8061a2007200728023c41016a36023c0b200041043a00000c070b41c6c4ca00411820084180016a41cc90c70041f0c4ca00103e000b41c6c4ca00411820084180016a41cc90c70041f0c4ca00103e000b200041830c3b0100200041086a4115360200200041046a41abb5c600360200200041026a41013a00000c040b41c3c5ca00411020084180016a41dc90c70041e4c5ca00103e000b1036000b41c3c5ca00411020084180016a41dc90c70041e4c5ca00103e000b1038000b200841800c6a24000b9f2107087f017e057f057e147f047e017f230041f00c6b220224000240024020002802000d002000417f360200200128020821032001280200210402400240200128020422050d00200421010c010b2005210620042101034020012802880b21012006417f6a22060d000b0340200420042f01064102746a41880b6a28020021042005417f6a22050d000b0b2002411c6a20042f010636020041002105200241186a4100360200200241146a2004360200200220033602202002410036021020024200370308200220013602042002410036020002402003450d0020022003417f6a22073602200240024020012f0106450d004100210420012108410021090c010b4100210441002109034002400240024020014190bdc600460d00200128020022080d012009ad210a410021080c020b41edb3ca00412841f8b4ca001039000b200441016a210420013301044220862009ad84210a0b2001102f200aa7210920082101200a422088a7220520082f01064f0d000b0b200241d00c6a41186a2206200820054105746a220141206a290000370300200241d00c6a41106a2203200141186a290000370300200241d00c6a41086a220b200141106a2900003703002002200141086a2900003703d00c2008200541e0006c6a220141a4036a2d0000210c200141a0036a280200210d2001419c036a280200210e20014198036a280200210f20014190036a290300211020014188036a290300211120014180036a2903002112200141f8026a2903002113200141f0026a2903002114200141e8026a290300210a200241d0016a41186a2215200141bd036a290000370300200241d0016a41106a2216200141b5036a290000370300200241d0016a41086a2217200141ad036a2900003703002002200141a5036a2900003703d001200541016a2118200141c6036a2f01002119200141c5036a2d0000211a02402004450d00200820184102746a41880b6a2802002108410021182004417f6a2201450d00034020082802880b21082001417f6a22010d000b0b200241f0096a41186a2006290300370300200241f0096a41106a2003290300370300200241f0096a41086a200b29030037030020024188016a41086a201729030037030020024188016a41106a201629030037030020024188016a41186a2015290300370300200220022903d00c3703f009200220022903d001370388012002201836020c200220093602082002200836020420024100360200200a4202510d002000410c6a211b200041046a211c200241d0016a41206a210b200241840a6a211d2002418d026a211e200241d0016a41286a211f0340200241c8006a41186a2201200241f0096a41186a2216290300370300200241c8006a41106a2204200241f0096a41106a2217290300370300200241c8006a41086a2205200241f0096a41086a2220290300370300200241286a41086a220620024188016a41086a2221290300370300200241286a41106a220320024188016a41106a2222290300370300200241286a41186a221520024188016a41186a2223290300370300200220022903f0093703482002200229038801370328200241e8006a41186a22242015290300370300200241e8006a41106a22252003290300370300200241e8006a41086a2226200629030037030020022002290328370368202320012903003703002022200429030037030020212005290300370300200220022903483703880102400240201c28020022034190bdc600460d00200028020821270c010b200241f0096a410041e00210e7061a200241d0016a410041a00810e7061a41880b102d2203450d0441002127200341003b010620034100360200200341086a200241f0096a41e00210e8061a200341e8026a200241d0016a41a00810e8061a20004100360208200020033602040b0240024003400240024020032f010622280d00410021040c010b20284105742115417f210441002101410021050340024020152001470d00202821040c020b20024188016a200320016a41086a412010ea062206450d03200141206a2101200541e0006a2105200441016a21042006417f4a0d000b0b02402027450d002027417f6a2127200320044102746a41880b6a28020021030c010b0b200241d00c6a41186a20232903002229370300200241d00c6a41106a2022290300222a370300200241d00c6a41086a2021290300222b3703002002200229038801222c3703d00c201d202c370200201d41086a202b370200201d41106a202a370200201d41186a20293702002002201b3602800a200220043602fc092002201c3602f809200220033602f409200241003602f009201f2010370300200241d0016a41106a2013370300200220113703f001200220143703d8012002200c3a008c022002200d360288022002200e360284022002200f36028002200220123703e8012002200a3703d001201e2002290368370000201e41086a2026290300370000201e41106a2025290300370000201e41186a2024290300370000200220193b01ae022002201a3a00ad02200241f0096a200241d0016a1097021a0c010b200320056a21030240201a4101710d00200341e8026a22012001290300200a200a5022011b370300200341f0026a22042004290300201420011b370300200341f8026a22042004290300201320011b370300201620242903003703002017202529030037030020202026290300370300200220022903683703f009200341a4036a22042d00002105200241d0016a41186a2228200341bd036a2206290000370300200241d0016a41106a221a200341b5036a2215290000370300200241d0016a41086a2224200341ad036a22272900003703002002200341a5036a22252900003703d0012021200241f0096a200241d0016a200c41ff0171410146220c1b220141086a2900003703002022200141106a2900003703002023200141186a2900003703002002200129000037038801200441012005200c1b3a0000202520022903880137000020272021290300370000201520222903003700002006202329030037000020034188036a2201201120012903002012a722011b37030020034190036a22042010200429030020011b37030020034180036a22042012200429030020011b37030002400240200e0d00200f21010c010b200e2104200f2101034020012802ec0321012004417f6a22040d000b0340200f200f2f01064102746a41ec036a280200210f200e417f6a220e0d000b0b200f2f010621042002200d3602a801200220043602a401200241003602a0012002200f36029c01200241003602980120024200370390012002200136028c0120024100360288010240200d450d0020034198036a210c410021064100210503402002200d417f6a220d3602a80102400240200620012f01064f0d0041002103200121040c010b41002103034002400240024020014190bdc600460d00200128020022040d012005ad210a410021040c020b41edb3ca00412841f8b4ca001039000b200341016a210320013301044220862005ad84210a0b2001102f200aa7210520042101200a422088a7220620042f01064f0d000b0b200241d00c6a41186a2215200420064105746a220141206a290000370300200241d00c6a41106a220f200141186a290000370300200241d00c6a41086a220e200141106a2900003703002002200141086a2900003703d00c200241b0016a41086a222720042006410c6c6a220141f0026a2802003602002002200141e8026a2902003703b001200641016a21060240024020030d00200421010c010b200420064102746a41ec036a2802002101410021062003417f6a2204450d00034020012802ec0321012004417f6a22040d000b0b200b20022903b001370200200b41086a220420272802003602002020200e2903003703002017200f29030037030020162015290300370300200241f0096a41206a2203200b290300370300200241f0096a41286a2227201f280200360200200220022903d00c3703f009200220063602940120022005360290012002200136028c012002410036028801201f2027280200360200200b200329030037030020282016290300370300201a201729030037030020242020290300370300200220022903f0093703d00120152016290300370300200f2017290300370300200e2020290300370300200220022903f0093703d00c200241c0016a41086a20042802003602002002200b2902003703c001200241b0016a200c200241d00c6a200241c0016a109802024020022802b001450d0020022802b4012204450d0020022802b801450d002004102f0b200d0d000b0b20024188016a1090020c010b200341a0036a2215280200212720034198036a22282802002101024002402003419c036a222d28020022050d00200121040c010b2005210620012104034020042802ec0321042006417f6a22060d000b0340200120012f01064102746a41ec036a28020021012005417f6a22050d000b0b200220273602f001200241003602e801200241003602e001200242003703d801200220043602d401200241003602d001200220013602e401200220012f01063602ec01200241d0016a109002200341e8026a200a37030020034190036a201037030020034188036a2011370300200341f8026a2013370300200341f0026a201437030020034180036a2012370300200341a4036a200c3a00002015200d3602002028200f360200202d200e360200200341a5036a2002290368370000200341ad036a2026290300370000200341b5036a2025290300370000200341bd036a2024290300370000200341c6036a20193b0100200341c5036a201a3a00000b2007450d0120022007417f6a22073602204100210402400240201820082f01064f0d00200821010c010b41002104034002400240024020084190bdc600460d00200828020022010d012009ad210a410021010c020b41edb3ca00412841f8b4ca001039000b200441016a210420083301044220862009ad84210a0b2008102f200aa7210920012108200a422088a7221820012f01064f0d000b0b200241d00c6a41186a2206200120184105746a220541206a290000370300200241d00c6a41106a2203200541186a290000370300200241d00c6a41086a2215200541106a2900003703002002200541086a2900003703d00c2001201841e0006c6a220541a4036a2d0000210c200541a0036a280200210d2005419c036a280200210e20054198036a280200210f20054190036a290300211020054188036a290300211120054180036a2903002112200541f8026a2903002113200541f0026a2903002114200541e8026a290300210a200241d0016a41186a2227200541bd036a290000370300200241d0016a41106a2228200541b5036a290000370300200241d0016a41086a2224200541ad036a2900003703002002200541a5036a2900003703d001201841016a2118200541c6036a2f01002119200541c5036a2d0000211a0240024020040d00200121080c010b200120184102746a41880b6a2802002108410021182004417f6a2201450d00034020082802880b21082001417f6a22010d000b0b201620062903003703002017200329030037030020202015290300370300202120242903003703002022202829030037030020232027290300370300200220022903d00c3703f009200220022903d001370388012002201836020c200220093602082002200836020420024100360200200a4202520d000b0b2002108a022000200028020041016a360200200241f00c6a24000f0b41c3c5ca004110200241d0016a41dc90c70041e4c5ca00103e000b1036000bc50101057f230041306b220124002000410c6a28020021022000280204210302400240200041086a28020022040d00200321000c010b2004210520032100034020002802880b21002005417f6a22050d000b0340200320032f01064102746a41880b6a28020021032004417f6a22040d000b0b200141246a20032f0106360200200141206a41003602002001411c6a20033602002001200236022820014100360218200142003703102001200036020c20014100360208200141086a108a02200141306a24000be104010a7f230041c0006b220324000240200128020041016a220441004c0d0020012004360200200141046a2105200141086a28020021060240024002400240034002400240200528020022072f010622080d00410021090c010b20084105742105200741c5036a210a200741086a210b417f21090340024020050d00200821090c020b2002200b412010ea06220c450d03200541606a2105200a41e0006a210a200941016a2109200b41206a210b200c417f4a0d000b0b2006450d022006417f6a2106200720094102746a41880b6a21050c000b0b02400240200a2d00000d00200a415f6a2d0000210b200341206a41186a2209200a41606a220541186a290000370300200341206a41106a220a200541106a290000370300200341206a41086a220c200541086a2900003703002003200529000037032041022105200b4101470d01200341186a2009290300370300200341106a200a290300370300200341086a200c29030037030020032003290320370300410121050c010b200a415f6a2d00002105200341186a200a41606a220b41186a290000370300200341106a200b41106a290000370300200341086a200b41086a2900003703002003200b2900003703000b200541ff01714102470d010b200020012802102002200141146a280200280210110300200128020021040c010b200020053a000020002003290300370001200041096a200341086a290300370000200041116a200341106a290300370000200041196a200341186a2903003700000b20012004417f6a360200200341c0006a24000f0b41c6c4ca004118200341206a41cc90c70041f0c4ca00103e000bcd02010a7f230041106b220224000240200028020041016a220341004c0d0020002003360200200041046a2104200041086a28020021050240024002400240034002400240200428020022062f010622070d00410021080c010b20074105742104200641a4036a2109200641086a210a417f21080340024020040d00200721080c020b2001200a412010ea06220b450d03200441606a2104200941e0006a2109200841016a2108200a41206a210a200b417f4a0d000b0b2005450d022005417f6a2105200620084102746a41880b6a21040c000b0b20092d000022044101410220044101461b200941216a2d00001b22044102470d010b20002802102001200041146a2802002802181101002104200028020021030c010b200441004721040b20002003417f6a360200200241106a240020040f0b41c6c4ca004118200241086a41cc90c70041f0c4ca00103e000bff02020a7f027e230041206b220324000240200128020041016a220441004c0d0020012004360200200141046a2105200141086a2802002106024002400240034002400240200528020022072f010622080d00410021090c010b20084105742105200741c5036a210a200741086a210b417f21090340024020050d00200821090c020b2002200b412010ea06220c450d03200541606a2105200a41e0006a210a200941016a2109200b41206a210b200c417f4a0d000b0b2006450d022006417f6a2106200720094102746a41880b6a21050c000b0b200a310000200a41a37f6a290300220d200d5022051ba7450d004200200a41ab7f6a220b41086a29030020051b210d4200200b29030020051b210e0c010b200341086a20012802102002200141146a28020028021c110300200341106a290300210d200128020021042003290308210e0b20012004417f6a3602002000200d3703082000200e370300200341206a24000f0b41c6c4ca004118200341186a41cc90c70041f0c4ca00103e000b1300200041013602042000419096c7003602000b34002000419487ca0036020420004100360200200041146a4103360200200041106a419097c700360200200041086a420a3702000b130020004106360204200041ec9ac7003602000b3400200041bd98ca0036020420004100360200200041146a4106360200200041106a41f8b3c700360200200041086a42103702000b13002000410536020420004180bdc7003602000b2e01017f02404104102d22020d001036000b20004284808080c0003702042000200236020020024180a70c3600000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241073600000b2c01017f02404104102d22020d001036000b20004284808080c000370204200020023602002002410d3600000b3a01017f02404110102d22020d001036000b2002420037000820024280809aa6eaafe301370000200042908080808002370204200020023602000b130020004107360204200041b0c0c7003602000bd70303027f037e027f230041d0006b2201240041bd98ca00ad4280808080800284100122022900002103200141106a41086a200241086a290000370300200120033703102002102f41ce89c700ad4280808080f00084100122022900002103200141206a41086a200241086a290000370300200120033703202002102f02404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141306a41186a2206200041186a290000370300200141306a41106a22072005370300200141306a41086a2004370300200120033703302000102f2002102f41c000102d2202450d00200220012903103700002002200129032037001020022001290330370020200241086a200141106a41086a290300370000200241186a200141206a41086a290300370000200241286a200141306a41086a290300370000200241306a2007290300370000200241386a2006290300370000200141086a200241c00041c8e1ca004100410010b501200128020821002002102f200141d0006a240020004101460f0b1036000b9f1705027f017e017f027e047f230041a0046b2202240041bd98ca00ad4280808080800284100122032900002104200241d0006a41086a200341086a290000370300200220043703502003102f41ae85c700ad4280808080f0008410012203290000210420024190036a41086a200341086a29000037030020022004370390032003102f02404120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322052900002104200541086a2900002106200541106a2900002107200241e0016a41186a2208200541186a290000370300200241e0016a41106a22092007370300200241e0016a41086a2006370300200220043703e0012005102f2003102f41c000102d2203450d00200320022903503700002003200229039003370010200320022903e001370020200341086a200241d0006a41086a290300370000200341186a20024190036a41086a290300370000200341286a200241e0016a41086a290300370000200341306a2009290300370000200341386a2008290300370000200241e0016a200341c000109504024020022d00ec0122054102460d002003ad428080808080088410050b20022902e401210420022802e00121082002410c6a200241ed016a41c30010e8061a200241d0006a2002410c6a41c30010e8061a0240024020054102470d002003102f0c010b200220053a00980120024198016a410172200241d0006a41c10010e806210a200241ba016a21090240024020022d00b901220b4101460d00200241003602e0020c010b200241e0026a20091094040b0240024002400240024020054101460d00200241003602f0020c010b200241f0026a200a10940420022802f0020d010b0240200b4101460d0041bd98ca00ad4280808080800284100122052900002106200241f0036a41086a2209200541086a290000370300200220063703f0032005102f41a185c700ad4280808080d0018410012205290000210620024190036a41086a220b200541086a29000037030020022006370390032005102f200241e0016a41086a2009290300370300200241f8016a200b290300370300200220022903f0033703e00120022002290390033703f00120024190036a200241e0016a1088012002350298034220862002280290032205ad841005200228029403450d022005102f0c020b41bd98ca00ad4280808080800284100122052900002106200241f0036a41086a220b200541086a290000370300200220063703f0032005102f41a185c700ad4280808080d0018410012205290000210620024190036a41086a220a200541086a29000037030020022006370390032005102f200241e0016a41086a200b290300370300200241e0016a41186a200a290300370300200220022903f0033703e00120022002290390033703f00120024190036a200241e0016a108801200228029003210b20023502980321064120102d2205450d0420052009290000370000200541186a200941186a290000370000200541106a200941106a290000370000200541086a200941086a2900003700002006422086200bad842005ad428080808080048410042005102f200228029403450d01200b102f0c010b20024180036a41086a200241f0026a41086a2802002205360200200220022903f00222063703800320024190036a2006a7220b20051095040240024020022d009c034102460d00200241e0016a20024190036a41d00010e8061a200241ad026a200241b9016a220941206a2d00003a0000200241a5026a200941186a2900003700002002419d026a200941106a29000037000020024195026a200941086a2900003700002002418d026a2009290000370000200220053602f4032002200b3602f003200241e0016a200241f0036a10ef0320022802e401450d0120022802e001102f0c010b200241003602e803200242013703e003200241f0036a41146a4129360200200241fc036a410b3602002002411036028c04200241bd98ca00360288042002410b3602f4032002410736029404200241ae85c70036029004200220024180036a36028004200220024190046a3602f803200220024188046a3602f0032002200241e0036a36029c04200241e0016a41146a4103360200200242033702e4012002419090c4003602e0012002200241f0036a3602f0012002419c046a41d8dbc100200241e0016a103c1a20023502e80342208620023502e00384100820022802e403450d0020022802e003102f0b0240200228028403450d00200228028003102f0b410121090c010b410021090b0240024020022802e00222050d004100210b0c010b20024180036a41086a200241e0026a41086a280200220b360200200220022903e00222063703800320024190036a2006a7220a200b1095040240024020022d009c034102460d00200241e0016a20024190036a41d00010e8061a2002418c026a200241b8016a2d00003a000020024184026a200241b0016a290300370200200241fc016a200241a8016a290300370200200241f4016a20024198016a41086a29030037020020022002290398013702ec012002200b3602f4032002200a3602f003200241e0016a200241f0036a10ef0320022802e401450d0120022802e001102f0c010b200241003602e803200242013703e003200241f0036a41146a4129360200200241fc036a410b3602002002411036028c04200241bd98ca00360288042002410b3602f4032002410736029404200241ae85c70036029004200220024180036a36028004200220024190046a3602f803200220024188046a3602f0032002200241e0036a36029c04200241e0016a41146a4103360200200242033702e401200241b48fc4003602e0012002200241f0036a3602f0012002419c046a41d8dbc100200241e0016a103c1a20023502e80342208620023502e00384100820022802e403450d0020022802e003102f0b0240200228028403450d00200228028003102f0b4101210b0b0240200920022802f002220a45720d0020022802f402450d00200a102f0b0240200b200545720d0020022802e402450d002005102f0b2003102f2008450d002004a7450d002008102f0b41bd98ca00ad4280808080800284100122032900002104200241d0006a41086a200341086a290000370300200220043703502003102f41ce89c700ad4280808080f0008410012203290000210420024190036a41086a200341086a29000037030020022004370390032003102f4120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322052900002104200541086a2900002106200541106a2900002107200241e0016a41186a2208200541186a290000370300200241e0016a41106a22092007370300200241e0016a41086a2006370300200220043703e0012005102f2003102f41c000102d2203450d00200320022903503700002003200229039003370010200320022903e001370020200341086a200241d0006a41086a290300370000200341186a20024190036a41086a290300370000200341286a200241e0016a41086a290300370000200341306a2009290300370000200341386a20082903003700002003ad428080808080088410052003102f200242f0d0c9abc6add9b1f4003703002002200010b10102402001450d00200242003703582002428080e983b1de163703502002200036020c20024190036a2000200241d0006a2002410c6a1096012002290390034201520d00200229039803210420024198026a20024190036a41106a29030037030020024190026a2004370300200241e0016a41086a41003a0000200241e9016a2000290000370000200241f1016a200041086a290000370000200241f9016a200041106a29000037000020024181026a200041186a290000370000200241033a00e00141c8e1ca004100200241e0016a108c010b200241a0046a24000f0b1036000b9d1606017f017e037f017e067f097e230041c0016b2202240042002103200241a0016a41186a4200370300200241a0016a41106a22044200370300200241a0016a41086a22054200370300200242003703a00141bd98ca00ad42808080808002841001220629000021072005200641086a290000370300200220073703a0012006102f41ebdec700ad4280808080f00084100122062900002107200241e0006a41086a2208200641086a290000370300200220073703602006102f20042002290360220737030020024180016a41086a200529030037030020024180016a41106a200737030020024180016a41186a2008290300370300200220022903a00137038001200241c0006a20024180016a10e404024002400240200228024022090d00410821090c010b4100210502400240200229024422034220882207a7220a41014b0d00200a0e020201020b200a210603402006410176220820056a220b20052009200b41306c6a2001412010ea064101481b2105200620086b220641014b0d000b0b2009200541306c6a2001412010ea060d000240024002400240024002402005200a4f0d002009200541306c6a2206200641306a200a2005417f736a41306c10e9061a200241a0016a41186a220c4200370300200241a0016a41106a220d4200370300200241a0016a41086a220a4200370300200242003703a00141bd98ca00ad4280808080800284220e10012205290000210f200a200541086a2900003703002002200f3703a0012005102f419691c700ad4280808080900184221010012206290000210f200241e0006a41086a2205200641086a2900003703002002200f3703602006102f20042002290360370000200441086a200529030037000020024180016a41086a2206200a29030037030020024180016a41106a200d29030037030020024180016a41186a200c290300370300200220022903a00137038001200742ffffffff0f7c210f200241a0016a20024180016a10e40420022802a0012208410820081b210b0240024020022902a401420020081b2207422088221150450d00420021120c010b200c200b201142ffffffff0f7c2211a741306c6a220841186a290300370300200d200841106a290300370300200a200841086a290300370300200220082903003703a0012011422086200742ffffffff0f83842107200841286a290300211320082903202114420121120b200342ffffffff0f832115200f4220862111200241e0006a41186a4200370300200241e0006a41106a220442003703002005420037030020024200370360200e10012208290000210e2006200841086a2900003703002002200e370380012008102f200520062903003703002002200229038001370360201010012208290000210e2006200841086a2900003703002002200e370380012008102f2004200229038001220e370300200241c0006a41086a2005290300370300200241c0006a41106a200e370300200241c0006a41186a20062903003703002002200229036037034002400240200b0d00200241c0006aad428080808080048410050c010b20024120360284012002200241c0006a36028001200b2007422088a720024180016a10ab012007a7450d00200b102f0b20152011842107200241186a200241a0016a41186a290300220e370300200241106a200241a0016a41106a2903002210370300200241086a200241a0016a41086a2903002215370300200220022903a0012216370300200241206a41186a2205200e370300200241206a41106a22062010370300200241206a41086a22082015370300200220163703204100210c0240201250450d004100210a0c040b20024180016a41186a200529030037030020024180016a41106a200629030037030020024180016a41086a2008290300370300200220022903203703800141002105024002400240200fa7220a41014b0d00200a0e020201020b200a210603402006410176220820056a220b20052009200b41306c6a20024180016a412010ea064101481b2105200620086b220641014b0d000b0b2009200541306c6a20024180016a412010ea062206450d022006411f7620056a21050b200241c0006a41186a20024180016a41186a290300220f370300200241c0006a41106a20024180016a41106a290300220e370300200241c0006a41086a20024180016a41086a290300221037030020022002290380012212370340200241e0006a41186a200f370300200241e0006a41106a200e370300200241e0006a41086a201037030020022012370360200241a0016a41186a200f370300200241a0016a41106a200e370300200241a0016a41086a2010370300200220123703a0012005200a4b0d020240200a2003a7470d00200a41016a2206200a490d06200a41017422082006200820064b1bad42307e2207422088a70d062007a722064100480d0602400240200a0d002006102d21090c010b2009200a41306c2006103121090b2009450d052011200641306ead8421070b2009200541306c6a220641306a2006200a20056b41306c10e9061a200641286a201337030020062014370320200641186a200241a0016a41186a290300370300200641106a200241a0016a41106a290300370300200641086a200241a0016a41086a290300370300200620022903a001370300200742ffffffff0f832003428080808070838421074101210a0c030b41b8e3c300411d41f8b4ca001039000b200241c0006a41186a20024180016a41186a290300370300200241c0006a41106a20024180016a41106a290300370300200241c0006a41086a20024180016a41086a29030037030020022002290380013703404100210a0c010b419ae3c300411e41f8b4ca001039000b200241e0006a41186a220b4200370300200241e0006a41106a220d4200370300200241e0006a41086a220642003703002002420037036041bd98ca00ad428080808080028410012208290000210320024180016a41086a2205200841086a29000037030020022003370380012008102f20062005290300370300200220022903800137036041ebdec700ad4280808080f000841001220829000021032005200841086a29000037030020022003370380012008102f2004200229038001370000200441086a2005290300370000200241c0006a41086a2006290300370300200241c0006a41106a200d290300370300200241c0006a41186a200b29030037030020022002290360370340200241203602a4012002200241c0006a3602a00120092007422088a72205200241a0016a10ab0102400240200541306c22060d00410121040c010b200641306d220641ffffff3f712006470d02200641057422064100480d022006102d2204450d012006410576210c0b2007a7210d0240024020050d00410021080c010b200541306c210b4100210820042105200921060340200641086a2900002103200641106a29000021072006290000210f200541186a200641186a290000370000200541106a2007370000200541086a20033700002005200f370000200841016a2108200541206a2105200641306a2106200b41506a220b0d000b0b0240200d450d002009102f0b200241a0016a41186a200141186a290000370300200241a0016a41106a200141106a290000370300200241a0016a41086a200141086a290000370300200220012900003703a001200241a0016a4101200420081098052000200a3a0001200041003a0000200041026a200229018001370100200041086a20024186016a290100370100200c450d032004102f0c030b1036000b1038000b200041013a00002000410c6a4109360200200041086a41d1d5c700360200200041066a410d3a0000200041046a41831a3b01002003a7450d002009102f0b200241c0016a24000b13002000410e36020420004184c4c7003602000bcf0601087f230041106b22022400200241003602082002420137030020002802002103024002404104102d2204450d0020024284808080c00037020420022004360200200420033600002000280204210320044104410810312204450d00200242888080808001370204200420033600042002200436020020002802082104200041106a28020022032002106902402003450d00200341057421052002280204210620022802082103034002400240200620036b4120490d00200341206a2107200228020021080c010b200341206a22072003490d04200641017422082007200820074b1b22094100480d040240024020060d002009102d21080c010b200228020020062009103121080b2008450d032002200936020420022008360200200921060b200820036a220341086a200441086a290000370000200341106a200441106a290000370000200341186a200441186a290000370000200220073602082003200429000037000020072103200441206a2104200541606a22050d000b0b200028021421042000411c6a2802002203200210690240024020030d0020022802042108200228020821030c010b200341057421054100200228020822036b210620022802042108034002400240200820066a4120490d00200228020021070c010b200341206a22072003490d04200841017422092007200920074b1b22094100480d040240024020080d002009102d21070c010b200228020020082009103121070b2007450d032002200936020420022007360200200921080b200720036a220741086a200441086a290000370000200741106a200441106a290000370000200741186a200441186a2900003700002002200341206a220336020820072004290000370000200641606a2106200441206a2104200541606a22050d000b0b2000280220210702400240200820036b4104490d00200228020021040c010b200341046a22042003490d02200841017422062004200620044b1b22064100480d020240024020080d002006102d21040c010b200228020020082006103121040b2004450d012002200636020420022004360200200621080b200420036a20073600002001290200200341046aad4220862004ad84100402402008450d002004102f0b200241106a24000f0b1036000b1038000b1300200041093602042000418cdfc7003602000b3400200041e796c80036020420004100360200200041146a4103360200200041106a41f096c800360200200041086a42083702000b130020004105360204200041a49dc8003602000b3400200041dfcbc70036020420004100360200200041146a4106360200200041106a41dcafc800360200200041086a42133702000b3400200041f2cbc70036020420004100360200200041146a4106360200200041106a41dcafc800360200200041086a42133702000bcf0601087f230041106b22022400200241003602082002420137030020002802002103024002404104102d2204450d0020024284808080c00037020420022004360200200420033600002000280204210320044104410810312204450d00200242888080808001370204200420033600042002200436020020002802082104200041106a28020022032002106902402003450d00200341057421052002280204210620022802082103034002400240200620036b4120490d00200341206a2107200228020021080c010b200341206a22072003490d04200641017422082007200820074b1b22094100480d040240024020060d002009102d21080c010b200228020020062009103121080b2008450d032002200936020420022008360200200921060b200820036a220341086a200441086a290000370000200341106a200441106a290000370000200341186a200441186a290000370000200220073602082003200429000037000020072103200441206a2104200541606a22050d000b0b200028021421042000411c6a2802002203200210690240024020030d0020022802042108200228020821030c010b200341057421054100200228020822036b210620022802042108034002400240200820066a4120490d00200228020021070c010b200341206a22072003490d04200841017422092007200920074b1b22094100480d040240024020080d002009102d21070c010b200228020020082009103121070b2007450d032002200936020420022007360200200921080b200720036a220741086a200441086a290000370000200741106a200441106a290000370000200741186a200441186a2900003700002002200341206a220336020820072004290000370000200641606a2106200441206a2104200541606a22050d000b0b2000280220210702400240200820036b4104490d00200228020021040c010b200341046a22042003490d02200841017422062004200620044b1b22064100480d020240024020080d002006102d21040c010b200228020020082006103121040b2004450d012002200636020420022004360200200621080b200420036a20073600002001290200200341046aad4220862004ad84100402402008450d002004102f0b200241106a24000f0b1036000b1038000bdd0303037f027e047f230041106b22022400200241003602082002420137030020002802102103024002404104102d2204450d0020024284808080c0003702042002200436020020042003360000200041086a29030021052000290300210620044104411410312204450d00200420063700042004410c6a200537000020024294808080c00237020420022004360200200028021421042000411c6a2802002200200210690240024020000d002002280208210720022802042108200228020021090c010b2000410574210a200228020021092002280204210320022802082100034002400240200320006b4120490d00200041206a2107200321080c010b200041206a22072000490d04200341017422082007200820074b1b22084100480d040240024020030d002008102d21090c010b200920032008103121090b2009450d030b200920006a22002004290000370000200041186a200441186a290000370000200041106a200441106a290000370000200041086a200441086a2900003700002008210320072100200441206a2104200a41606a220a0d000b2002200836020420022007360208200220093602000b20012902002007ad4220862009ad84100402402008450d002009102f0b200241106a24000f0b1036000b1038000bdb0403027f037e027f230041e0006b2202240041e796c800ad4280808080800184100122032900002104200241306a41086a200341086a290000370300200220043703302003102f41d49ac800ad4280808080d00084100122032900002104200241086a41086a200341086a290000370300200220043703082003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241c0006a41186a2207200141186a290000370300200241c0006a41106a22082006370300200241c0006a41086a2005370300200220043703402001102f2003102f41c000102d2203450d00200320022903303700002003200229030837001020032002290340370020200341086a200241306a41086a290300370000200341186a200241086a41086a290300370000200341286a200241c0006a41086a2201290300370000200341306a2008290300370000200341386a2007290300370000200241086a200341c00010ad022001200241086a41096a2900003703002008200241086a41116a2900003703002007200241086a41196a290000370300200220022900093703400240024020022d00084101460d00200041003a00000c010b200041013a000020002002290340370001200041096a2001290300370000200041116a200241d0006a290300370000200041196a200241d8006a2903003700000b2003102f200241e0006a24000f0b1036000b8b0503027f017e047f230041d0006b2202240041e796c800ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003102f41d899c800ad4280808080800284100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad4280808080800484100622012900003703302001102f200241c4006a200341206a360200200241003a0048200220033602402002200241306a41086a36023c2002200241306a360238200241206a200241386a106c2003102f02400240024002402002280228220541206a2201417f4c0d0020022802202106024002402001450d002001102d2203450d062001410f4d0d01200121070c050b411021074110102d21030c030b200141017422084110200841104b1b220741004e0d010c050b103d000b200320012007103121030b2003450d010b20032002290300370000200341086a200241086a2903003700000240024020074170714110460d00200721080c010b200741017422084120200841204b1b22084100480d0220032007200810312203450d010b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821070c010b2005415f4b0d02200841017422072001200720014b1b22074100480d0220032008200710312203450d010b200341206a2006200510e8061a20002001360208200020073602042000200336020002402002280224450d002006102f0b200241d0006a24000f0b1036000b1038000bc60403027f037e047f230041d0006b2202240041e796c800ad4280808080800184100122032900002104200241286a41086a200341086a290000370300200220043703282003102f41f898c800ad4280808080b00184100122032900002104200241386a41086a200341086a290000370300200220043703382003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241186a2207200141186a290000370300200241106a22082006370300200241086a2005370300200220043703002001102f2003102f41c000102d2203450d00200320022903283700002003200229033837001020032002290300370020200341086a200241286a41086a2201290300370000200341186a200241386a41086a2209290300370000200341286a200241086a220a290300370000200341306a2008290300370000200341386a200729030037000020022003109b052009200a290300370300200241386a41106a20082802003602002001200241206a2903003703002002200229030037033820022002290318370328024020022802142208450d002000200229033837030020002002290328370318200041106a200241386a41106a280200360200200041086a2009290300370300200041206a20012903003703000b200020083602142003102f200241d0006a24000f0b1036000b860401057f230041d0006b22032400200341206a200110c005024002404120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001ad4280808080800484100622022900003703482002102f2003410c6a200141206a360200200341003a0010200320013602082003200341c8006a41086a3602042003200341c8006a360200200341306a2003106c2001102f200328023021040240024020032802242205200328022822026b20032802382206490d00200328022021010c010b200220066a22012002490d02200541017422072001200720014b1b22074100480d020240024020050d002007102d21010c010b200328022020052007103121010b2001450d012003200736022420032001360220200721050b2003200220066a2207360228200120026a2004200610e8061a02402003280234450d002004102f0b200320012007109e05200341306a41106a2206200341106a280200360200200341306a41086a2204200341086a29030037030020032003290300370330024020032802142202450d002000200329033037030020002003290318370318200041086a2004290300370300200041106a20062802003602000b2000200236021402402005450d002001102f0b200341d0006a24000f0b1036000b1038000b130020004110360204200041acb4c8003602000ba20403027f037e027f230041d0006b2202240041dfcbc700ad4280808080b00284100122032900002104200241286a41086a200341086a290000370300200220043703282003102f41f2dec700ad4280808080e00084100122032900002104200241386a41086a200341086a290000370300200220043703382003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241186a2207200141186a290000370300200241106a22082006370300200241086a2005370300200220043703002001102f2003102f41c000102d2203450d00200320022903283700002003200229033837001020032002290300370020200341086a200241286a41086a290300370000200341186a200241386a41086a2201290300370000200341286a200241086a290300370000200341306a2008290300370000200341386a20072903003700002002200310a1052001200241146a290200370300200241386a41106a2002411c6a2902003703002002200229020c370338024020022802082207450d00200020022903003702002000200229033837020c200041146a20012903003702002000411c6a200241c8006a2903003702000b200020073602082003102f200241d0006a24000f0b1036000ba81509017f017e027f027e057f027e017f017e087f230041b0076b2204240002400240024002400240024020000d0041dfcbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f0abc800ad4280808080a00184100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0220002003290000370000200041186a200341186a2201290000370000200041106a200341106a2206290000370000200041086a200341086a2900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a220a200741186a29000037030020044180056a41106a220b200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d02200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a290300370000200041186a200441c0026a41086a290300370000200041286a20044180056a41086a290300370000200041306a200b290300370000200041386a200a2903003700002000ad428080808080088410052000102f200441dd026a200341086a290000370000200441e5026a2006290000370000200441ed026a2001290000370000200441033a00d402200441083a00d002200420032900003700d50241c8e1ca004100200441d0026a108c010c010b200441e5026a200341106a2207290000370000200441ed026a200341186a2206290000370000200441083a00d002200441dd026a200341086a220a290000370000200441023a00d402200420032900003700d50241c8e1ca004100200441d0026a108c0141dfcbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f0abc800ad4280808080a00184100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0120002003290000370000200041186a2006290000370000200041106a2007290000370000200041086a200a2900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a200741186a29000037030020044180056a41106a200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d01200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a290300370000200041186a200441c0026a41086a290300370000200041286a20044180056a41086a220a290300370000200041306a20044180056a41106a290300370000200041386a20044180056a41186a290300370000200441d0026a200010a20520042802d002210620044180056a200441d0026a410472220b41ac0210e8061a02402006411b470d002000102f0c010b200420044180056a41ac0210e80621072000102f20022802042100200720063602d002200b200741ac0210e8061a2007418c056a2001360200200a2000360200200741003a008405200741023a008005200741c0026a200741d0026a20074180056a108b01200741f5026a20072d00c0024104463a0000200741dd026a200341086a290000370000200741e5026a200341106a290000370000200741ed026a200341186a290000370000200741043a00d402200741083a00d002200720032900003700d50241c8e1ca004100200741d0026a108c010b41dfcbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f2dec700ad4280808080e00084100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0020002003290000370000200041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a2900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a2201200741186a29000037030020044180056a41106a2206200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d00200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a220c290300370000200041186a200441c0026a41086a220d290300370000200041286a20044180056a41086a220e290300370000200041306a2006290300370000200041386a20012903003700002000ad428080808080088410052000102f200441d0026a41186a4200370300200441d0026a41106a22074200370300200441d0026a41086a220b4200370300200442003703d00241dfcbc700ad4280808080b00284220f100122002900002105200b200041086a290000370300200420053703d0022000102f41e2dec700ad42808080809001842210100122002900002105200441086a220a200041086a290000370300200420053703002000102f200720042903002205370300200e200b290300370300200620053703002001200a290300370300200420042903d00237038005200441d0026a20044180056a412010aa0220042802d0022200410120001b211120042902d402420020001b2212422088a72206450d03410021072011210041002101034002400240024020032000460d0020002003412010ea06450d0020070d01410021070c020b200741016a21070c010b200120076b220a20064f0d03200441d0026a41186a2213200020074105746b220a41186a2214290000370300200441d0026a41106a2215200a41106a2216290000370300200b200a41086a22172900003703002004200a2900003703d002200041086a22182900002105200041106a22192900002108200041186a221a2900002109200a2000290000370000201420093700002016200837000020172005370000201a2013290300370000201920152903003700002018200b290300370000200020042903d0023700000b200041206a21002006200141016a2201460d030c000b0b1036000b4188bbca00200a2006103b000b2007417f6a20064f0d00200620076bad422086201242ffffffff0f838421120b20044180056a41186a420037030020044180056a41106a22074200370300200e42003703002004420037038005200f100122002900002105200c200041086a290000370300200420053703b0022000102f200e200c290300370300200420042903b002370380052010100122002900002105200d200041086a290000370300200420053703c0022000102f200720042903c0022205370300200b200e290300370300200441d0026a41106a2005370300200441d0026a41186a200d29030037030020042004290380053703d0020240024020110d00200441d0026aad428080808080048410050c010b20044120360284052004200441d0026a3602800520112012422088a720044180056a1083012012a7450d002011102f0b02402002410c6a280200450d002002280208102f0b0240200241186a280200450d002002280214102f0b200441b0076a24000ba20403027f037e027f230041d0006b2202240041f2cbc700ad4280808080b00284100122032900002104200241286a41086a200341086a290000370300200220043703282003102f41f2dec700ad4280808080e00084100122032900002104200241386a41086a200341086a290000370300200220043703382003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241186a2207200141186a290000370300200241106a22082006370300200241086a2005370300200220043703002001102f2003102f41c000102d2203450d00200320022903283700002003200229033837001020032002290300370020200341086a200241286a41086a290300370000200341186a200241386a41086a2201290300370000200341286a200241086a290300370000200341306a2008290300370000200341386a20072903003700002002200310a1052001200241146a290200370300200241386a41106a2002411c6a2902003703002002200229020c370338024020022802082207450d00200020022903003702002000200229033837020c200041146a20012903003702002000411c6a200241c8006a2903003702000b200020073602082003102f200241d0006a24000f0b1036000ba81509017f017e027f027e057f027e017f017e087f230041b0076b2204240002400240024002400240024020000d0041f2cbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f0abc800ad4280808080a00184100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0220002003290000370000200041186a200341186a2201290000370000200041106a200341106a2206290000370000200041086a200341086a2900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a220a200741186a29000037030020044180056a41106a220b200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d02200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a290300370000200041186a200441c0026a41086a290300370000200041286a20044180056a41086a290300370000200041306a200b290300370000200041386a200a2903003700002000ad428080808080088410052000102f200441dd026a200341086a290000370000200441e5026a2006290000370000200441ed026a2001290000370000200441033a00d402200441073a00d002200420032900003700d50241c8e1ca004100200441d0026a108c010c010b200441dd026a200341086a2207290000370000200441e5026a200341106a2206290000370000200441ed026a200341186a220a290000370000200441023a00d402200441073a00d002200420032900003700d50241c8e1ca004100200441d0026a108c0141f2cbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f0abc800ad4280808080a00184100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0120002003290000370000200041186a200a290000370000200041106a2006290000370000200041086a20072900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a200741186a29000037030020044180056a41106a200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d01200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a290300370000200041186a200441c0026a41086a290300370000200041286a20044180056a41086a220a290300370000200041306a20044180056a41106a290300370000200041386a20044180056a41186a290300370000200441d0026a200010a20520042802d002210620044180056a200441d0026a410472220b41ac0210e8061a02402006411b470d002000102f0c010b200420044180056a41ac0210e80621072000102f20022802042100200720063602d002200b200741ac0210e8061a2007418c056a2001360200200a2000360200200741003a008405200741013a008005200741c0026a200741d0026a20074180056a108b01200741f5026a20072d00c0024104463a0000200741dd026a200341086a290000370000200741e5026a200341106a290000370000200741ed026a200341186a290000370000200741043a00d402200741073a00d002200720032900003700d50241c8e1ca004100200741d0026a108c010b41f2cbc700ad4280808080b00284100122002900002105200441b0026a41086a200041086a290000370300200420053703b0022000102f41f2dec700ad4280808080e00084100122002900002105200441c0026a41086a200041086a290000370300200420053703c0022000102f4120102d2200450d0020002003290000370000200041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a2900003700002000ad4280808080800484100322072900002105200741086a2900002108200741106a290000210920044180056a41186a2201200741186a29000037030020044180056a41106a2206200937030020044180056a41086a200837030020042005370380052007102f2000102f41c000102d2200450d00200020042903b002370000200020042903c0023700102000200429038005370020200041086a200441b0026a41086a220c290300370000200041186a200441c0026a41086a220d290300370000200041286a20044180056a41086a220e290300370000200041306a2006290300370000200041386a20012903003700002000ad428080808080088410052000102f200441d0026a41186a4200370300200441d0026a41106a22074200370300200441d0026a41086a220b4200370300200442003703d00241f2cbc700ad4280808080b00284220f100122002900002105200b200041086a290000370300200420053703d0022000102f41e2dec700ad42808080809001842210100122002900002105200441086a220a200041086a290000370300200420053703002000102f200720042903002205370300200e200b290300370300200620053703002001200a290300370300200420042903d00237038005200441d0026a20044180056a412010aa0220042802d0022200410120001b211120042902d402420020001b2212422088a72206450d03410021072011210041002101034002400240024020032000460d0020002003412010ea06450d0020070d01410021070c020b200741016a21070c010b200120076b220a20064f0d03200441d0026a41186a2213200020074105746b220a41186a2214290000370300200441d0026a41106a2215200a41106a2216290000370300200b200a41086a22172900003703002004200a2900003703d002200041086a22182900002105200041106a22192900002108200041186a221a2900002109200a2000290000370000201420093700002016200837000020172005370000201a2013290300370000201920152903003700002018200b290300370000200020042903d0023700000b200041206a21002006200141016a2201460d030c000b0b1036000b4188bbca00200a2006103b000b2007417f6a20064f0d00200620076bad422086201242ffffffff0f838421120b20044180056a41186a420037030020044180056a41106a22074200370300200e42003703002004420037038005200f100122002900002105200c200041086a290000370300200420053703b0022000102f200e200c290300370300200420042903b002370380052010100122002900002105200d200041086a290000370300200420053703c0022000102f200720042903c0022205370300200b200e290300370300200441d0026a41106a2005370300200441d0026a41186a200d29030037030020042004290380053703d0020240024020110d00200441d0026aad428080808080048410050c010b20044120360284052004200441d0026a3602800520112012422088a720044180056a1083012012a7450d002011102f0b02402002410c6a280200450d002002280208102f0b0240200241186a280200450d002002280214102f0b200441b0076a24000b130020004107360204200041dcbec8003602000bdb0901097f230041e0006b22022400200241386a4100280288a943360200200241306a4100290280a943370300200241286a41002902f8a843370300200241206a41002902f0a843370300200241186a41002902e8a843370300200241106a41002902e0a843370300200241086a41002902d8a843370300200241002902d0a8433703002002410036024820024201370340200241d0006a200210ca0520022802502103024002400240024020022802442204200228024822056b20022802582206490d00410121040c010b200520066a22072005490d02200441017422082007200820074b1b22074100480d020240024020040d002007102d21040c010b410120042007103121040b2004450d0120022007360244200220043602400b2002200520066a360248200420056a2003200610e8061a02402002280254450d002003102f0b200241d0006a200241106a10ca05200228025021080240024020022802442205200228024822036b20022802582207490d00200521060c010b200320076a22062003490d02200541017422092006200920064b1b22064100480d020240024020050d002006102d21040c010b200420052006103121040b2004450d0120022006360244200220043602400b2002200320076a2205360248200420036a2008200710e8061a02402002280254450d002008102f0b02400240200620056b4104490d00200541046a21030c010b200541046a22032005490d02200641017422072003200720034b1b22074100480d020240024020060d002007102d21040c010b200420062007103121040b2004450d0120022007360244200220043602400b20022003360248200420056a410a3600000240024020022802442204200228024822056b4104490d00200228024021040c010b200541046a22062005490d02200441017422032006200320064b1b22064100480d020240024020040d002006102d21040c010b200228024020042006103121040b2004450d0120022006360244200220043602400b2002200541046a360248200420056a41e701360000024020022802442206200228024822056b41034b0d00200541046a22032005490d02200641017422072003200720034b1b22034100480d020240024020060d002003102d21040c010b200420062003103121040b2004450d0120022003360244200220043602400b2002200541046a360248200420056a4100360000200241306a2802002107410c200241c0006a106920074190016a21092002280244210620022802482103034002400240200620036b4108490d00200341086a2104200228024021050c010b200341086a22042003490d03200641017422052004200520044b1b22084100480d030240024020060d002008102d21050c010b200228024020062008103121050b2005450d022002200836024420022005360240200821060b20022004360248200520036a2007290000370000200741086a28020021080240200620046b41034b0d00200441046a22032004490d032006410174220a2003200a20034b1b22034100480d030240024020060d002003102d21050c010b200520062003103121050b2005450d022002200336024420022005360240200321060b2002200441046a2203360248200520046a20083600002007410c6a22072009470d000b200241e0006a24002003ad4220862005ad840f0b1036000b1038000bf90301067f20012802042102024002400240024020012802004101470d002001410c6a280200220141046a2203417f4c0d01024002400240024002400240024002402003450d002003102d2204450d0a200141c000490d04200141808001490d052001418080808004490d06200441033a00002003417f6a41034d0d01200321050c030b410121034101102d2204450d09200441033a0000410521050c010b200341017422064105200641054b1b22054100480d090b20042003200510312204450d070b20042001360001410521060c030b200420014102743a000041012106200321050c020b02400240200341014d0d00200321050c010b20042003200341017422064102200641024b1b220510312204450d050b41022106200420014102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d0520042003200510312204450d040b20042001410274410272360000410421060b02400240200520066b2001490d00200521030c010b200620016a22032006490d04200541017422072003200720034b1b22034100480d0420042005200310312204450d030b200420066a2002200110e8061a2000200620016a36020820002003360204200020043602000f0b20002002200141086a28020010d4050f0b103d000b1036000b1038000be11b04027f017e087f017e230041a00e6b22022400024002402001450d00200220003602300c010b200241c8e1ca003602300b20022001360234200241c00a6a200241306a10f10402400240024020022802c40a450d00200241386a200241c00a6a41fc0010e8061a200241b8016a200241386a41fc0010e8061a200241b8016a10b903024020022802b8012201450d00200241c00a6a2001417f6a10fa02200241c00a6a200241c8016a412010ea060d0002400240200241b0026a28020022010d004104210341002101410021000c010b024002402001ad420c7e2204422088a70d002004a722054100480d0020022802a80221002005102d22030d011036000b1038000b200141c8036c210620014103742107200321010340200220003602e806200241c00a6a200241e8066a10a903200141086a200241c00a6a41086a280200360200200120022903c00a3702002001410c6a2101200041c8036a2100200641b87c6a22060d000b2005410c6e2101200741786a41037641016a21000b200220003602f006200220013602ec06200220033602e806200241c00a6a200241e8066a10cc05024020024188026a2201200241c00a6a412010ea06450d0041cccbca00ad4280808080e0018410082001ad42808080808004841020200241c00a6aad428080808080048410200b02402001200241c00a6a412010ea060d00200241ac026a280200210720022802a802210520022802b0022106200241b8026a200241b8016a41f00010e8061a2005200641c8036c6a210020022802b8022108200521010240024002402006450d00200241e8066a41f0006a2103200521010240034020024180066a200141e80010e8061a200141e8006a2903002104200241a8036a200141f0006a41d80210e8061a20044203510d01200241e8066a20024180066a41e80010e8061a200220043703d0072003200241a8036a41d80210e8061a2002200241e8066a3602b00a200241c00a6a200241b00a6a10a90320022802c80a2106024020022802c40a450d0020022802c00a102f0b200241c00a6a200241e8066a41c80310e8061a200241003602880e200241b00a6a200241c00a6a2006200241880e6a10d00320022d00b00a4101460d04200141c8036a22012000470d000c030b0b200141c8036a21010b20002001460d00034020014198016a108d012000200141c8036a2201470d000b0b02402007450d002005102f0b200241206a4180e5c3004110109501200228022421050240200228022022074101470d004180e5c300ad428080808080028410050b200241c00a6a41186a22094200370300200241c00a6a41106a22004200370300200241c00a6a41086a22014200370300200242003703c00a418de6c300ad4280808080e000841001220629000021042001200641086a290000370300200220043703c00a2006102f41bc80c400ad4280808080e00184100122032900002104200241a8036a41086a2206200341086a290000370300200220043703a8032003102f200020022903a8032204370300200241e8066a41086a220a2001290300370300200241e8066a41106a220b2004370300200241e8066a41186a220c2006290300370300200220022903c00a3703e80620022005410020071b3602c00a200241e8066aad42808080808004842204200241c00a6aad4280808080c000841004200942003703002000420037030020014200370300200242003703c00a41aa97ca00ad428080808080018410012203290000210d2001200341086a2900003703002002200d3703c00a2003102f41b297ca00ad428080808080018410012203290000210d2006200341086a2900003703002002200d3703a8032003102f200020022903a803220d370300200a2001290300370300200b200d370300200c2006290300370300200220022903c00a3703e80620041005200810a904200241c00a6a109204200241186a200241b8026a410472220110d6032002200228021c22003602980e200241106a200241c00a6a410472220610d60320022002280214220336029c0e20002003470d05200241086a200110d603200228020821052002200610d60320022802042201200228020c2200200020014b1b2209450d042002280200210741002106418d85c700ad4280808080c002842104410021030340024002400240024002400240024002400240200520066a22012d00002208200720066a22002d0000470d0002400240024002400240024020080e06000102030405000b20052007460d0d200141016a200041016a412010ea060d050c060b024020052007460d00200141016a280000200041016a280000470d050b200141106a2802002208200041106a280200470d04200141086a280200220a200041086a280200220b460d0a200a200b200810ea060d040c0a0b024020052007460d00200141016a280000200041016a280000470d040b200141106a2802002208200041106a280200470d03200141086a280200220a200041086a280200220b460d08200a200b200810ea060d030c080b024020052007460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a280200220a200041086a280200220b460d06200a200b200810ea060d020c060b200141046a2802002208200041046a280200470d012008450d04200141086a280200200041086a280200470d012001410c6a2802002000410c6a280200470d010c040b2001410c6a28020022082000410c6a280200470d00200141046a280200220a200041046a280200220b460d02200a200b200810ea06450d020b20041008200241e8066a200110ea0220023502f00642208620022802e8062208ad841020024020022802ec06450d002008102f0b200241e8066a200010ea0220023502f00642208620022802e8062208ad841020024020022802ec06450d002008102f0b20012d000020002d00002208470d06024020080e06000605040302000b20052007460d070b200141016a200041016a412010ea060d050c060b2001410c6a28020022082000410c6a280200470d04200141046a2802002201200041046a2802002200460d0520012000200810ea060d040c050b200141046a2802002208200041046a280200470d032008450d04200141086a280200200041086a280200470d032001410c6a2802002000410c6a280200460d040c030b024020052007460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a2802002201200041086a2802002200460d0320012000200810ea060d020c030b024020052007460d00200141016a280000200041016a280000470d020b200141106a2802002208200041106a280200470d01200141086a2802002201200041086a2802002200460d0220012000200810ea060d010c020b024020052007460d00200141016a280000200041016a280000470d010b200141106a2802002208200041106a280200470d00200141086a2802002201200041086a2802002200460d0120012000200810ea06450d010b418cd1c300412741f8b4ca001039000b200641246a2106200341016a22032009490d000c050b0b200241286a20022f00b10a20022d00b30a4110747210d5032002280228200228022c41f8b4ca001039000b41e0d0c300412441f8b4ca001039000b41c4d0c300411c41f8b4ca001039000b200241b4036a4104360200200241fc066a4102360200200242023702ec06200241b8c2c8003602e806200241043602ac03200241b0c2c8003602a803200241003602bc01200241c8e1ca003602b8012002200241a8036a3602f8062002200241b8016a3602b003200241e8066a41c8c2c8001043000b0240200241b8026a41306a2201200241c00a6a41306a2200412010ea06450d0041cccbca00ad4280808080e0018410082001ad428080808080048410202000ad428080808080048410200b024020012000412010ea06450d0041b3d1c300412841f8b4ca001039000b0240200241c00a6a410c6a2802002200450d0020022802c40a2101200041246c210003400240024020012d0000220641044b0d0002400240024020060e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012000415c6a22000d000b0b0240200241c80a6a280200450d0020022802c40a102f0b0240200241b8026a410c6a2802002200450d0020022802bc022101200041246c210003400240024020012d0000220641044b0d0002400240024020060e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012000415c6a22000d000b0b0240200241c0026a280200450d0020022802bc02102f0b200241a00e6a240042010f0b200241a8036a41146a4109360200200241b4036a410a36020020024180066a41146a41033602002002200241980e6a3602880e20022002419c0e6a3602b00a200241e8066a41146a41003602002002420337028406200241b4e0ca00360280062002410a3602ac03200241c8e1ca003602f806200242013702ec0620024184d1c3003602e8062002200241a8036a360290062002200241e8066a3602b8032002200241b00a6a3602b0032002200241880e6a3602a80320024180066a41e8d8c9001043000bc504020b7f037e230041206b2202240002400240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d00410121060c010b2004102d2206450d020b2002410036020820022004360204200220063602002003200210690240024020030d002002280208210720022802042108200228020021090c010b20052003410c6c6a210a2005210603402006280200210b200641086a28020022042002106902400240200228020422082002280208220c6b2004490d00200228020021090c010b200c20046a2209200c490d05200841017422072009200720094b1b22074100480d050240024020080d002007102d21090c010b200228020020082007103121090b2009450d042002200736020420022009360200200721080b2002200c20046a22073602082009200c6a200b200410e8061a2006410c6a2206200a470d000b0b2007ad4220862009ad8410242204290000210d200441086a290000210e200441106a290000210f200241186a2206200441186a290000370300200241106a220c200f370300200241086a220b200e3703002002200d3703002004102f200041186a2006290300370000200041106a200c290300370000200041086a200b2903003700002000200229030037000002402008450d002009102f0b02402003450d002003410c6c21062005210403400240200441046a280200450d002004280200102f0b2004410c6a2104200641746a22060d000b0b0240200141046a280200450d002005102f0b200241206a24000f0b103d000b1036000b1038000ba60301027f23004180026b22022400024002402001450d00200220003602000c010b200241c8e1ca003602000b20022001360204200241f8006a200210f6030240200228027c450d00200241086a200241f8006a41f00010e8061a200241086a10b9030240200241086a410c6a2802002200450d00200228020c2101200041246c210003400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012000415c6a22000d000b0b0240200241106a280200450d00200228020c102f0b20024180026a240042010f0b200241f4016a41043602002002411c6a41023602002002420237020c200241b8c2c800360208200241043602ec01200241c8c3c8003602e801200241003602fc01200241c8e1ca003602f8012002200241e8016a3602182002200241f8016a3602f001200241086a41c8c2c8001043000ba10202077f017e230041206b22022400200210a0030240024002402002280208220341046a2204417f4c0d00200228020021050240024020040d00410121060c010b2004102d2206450d020b2002410036021820022004360214200220063602102003200241106a10690240024020022802142206200228021822046b2003490d00200228021021060c010b200420036a22072004490d03200641017422082007200820074b1b22074100480d030240024020060d002007102d21060c010b200228021020062007103121060b2006450d0220022007360214200220063602100b200620046a2005200310e8061a200420036aad4220862006ad84210902402002280204450d002005102f0b200241206a240020090f0b103d000b1036000b1038000beb0602057f027e230041900b6b22022400024002402001450d00200220003602000c010b200241c8e1ca003602000b20022001360204200241b8076a200210a40402400240024020022903a0084203510d00200241186a200241b8076a41c80310e8061a200241e0036a200241186a41c80310e8061a2002200241e0036a3602b807200241a8076a200241b8076a10a90320022802b0072101200241b8076a200241e0036a41c80310e8061a200241880b6a20022802b007360200200220022903a8073703800b200241086a200241b8076a2001200241800b6a10d0034101410220022d000822034101461b2200102d2201450d01200241003602c007200220003602bc07200220013602b8070240024020034101470d00200141013a0000200241013602c007200241086a410172200241b8076a10a1030c010b200141003a0000200241023602c007024020022d000c22034104460d0041012104200141013a00010240024002400240024020030e0400010203000b410021040b200220043a00e003410221030c020b41022103200241023a00e003410221040c010b200241033a00e0034104210020014102410410312201450d04200141033a000220024284808080303702bc07200220013602b807200220022d000d22043a00e003024041010d0041000d0641034101742200410341016a2203200020034b1b22004100480d060240024041030d002000102d21010c010b200141032000103121010b2001450d05200220003602bc07200220013602b8070b2002410341016a22033602c007200141036a20043a0000200220022d000e22043a00e0030b024020002003470d0041000d0520004101742205200041016a2206200520064b1b22054100480d050240024020000d002005102d21010c010b200120002005103121010b2001450d04200220053602bc07200220013602b8070b2002200341016a3602c007200120036a20043a00000c010b200141003a00010b20023502c007210720023502b8072108200241900b6a240020082007422086840f0b200241246a4104360200200241f4036a4102360200200242023702e403200241b8c2c8003602e0032002410436021c200241e0c3c8003602182002410036020c200241c8e1ca003602082002200241186a3602f0032002200241086a360220200241e0036a41c8c2c8001043000b1036000b1038000ba21607067f017e017f027e067f017e067f23004180026b22022400200241186a4180e5c3004110109501200228021c21030240200228021822044101470d004180e5c300ad428080808080028410050b200241b0016a41186a22054200370300200241b0016a41106a22064200370300200241b0016a41086a22074200370300200242003703b001418de6c300ad4280808080e00084220810012209290000210a2007200941086a2900003703002002200a3703b0012009102f41bc80c400ad4280808080e00184220a10012209290000210b200241f0016a41086a220c200941086a2900003703002002200b3703f0012009102f200620022903f001220b37030020024190016a41086a220d200729030037030020024190016a41106a2209200b37030020024190016a41186a220e200c290300370300200220022903b001370390014100210f20022003410020041b36022020024190016aad4280808080800484220b200241206aad4280808080c000841004200241206a41186a22104200370300200241206a41106a22044200370300200241206a41086a221142003703002002420037032020081001220329000021122011200341086a290000370300200220123703202003102f419ce6c300ad4280808080e000841001220329000021122007200341086a290000370300200220123703b0012003102f200420022903b0012212370300200241d0016a41086a22132011290300370300200241d0016a41106a2012370300200241d0016a41186a22142007290300370300200220022903203703d001200241106a200241d0016a41201095012002280214210420022802102115200542003703002006420037030020074200370300200242003703b00141aa97ca00ad42808080808001841001220329000021122007200341086a290000370300200220123703b0012003102f41b297ca00ad4280808080800184100122032900002112200c200341086a290000370300200220123703f0012003102f200620022903f0012212370300200d200729030037030020092012370300200e200c290300370300200220022903b00137039001200b10052004410020151b10a904200542003703002006420037030020074200370300200242003703b0012008100122032900002112200c200341086a290000370300200220123703f0012003102f2007200c290300370300200220022903f0013703b001200a10012203290000210a200c200341086a2900003703002002200a3703f0012003102f200620022903f001220a370300200d20072903003703002009200a370300200e200c290300370300200220022903b00137039001200241086a20024190016a41201095010240024002400240200228020c410020022802081b22160d0041042117410021160c010b2016ad420c7e220a422088a70d01200aa722094100480d012009102d2217450d022009410c6e210f41002109201721030340200241d0016a200910d203200241206a20022802d001221520022802d8012218109302024020022802202204450d002018ad4220862015ad8410050b200941016a21092002290224420020041b210a2004410120041b2104024020022802d401450d002015102f0b20032004360200200341046a200a3702002003410c6a210320162009470d000b0b200220163602282002200f36022420022017360220200241d0016a200241206a10cc0520102014290300370300200241206a41106a2203200241d0016a41106a29030037030020112013290300370300200220022903d00137032020054200370300200241b0016a41106a2204420037030020074200370300200242003703b001200810012209290000210a200c200941086a2900003703002002200a3703f0012009102f2007200c290300370300200220022903f0013703b00141ace6c300ad4280808080e0018410012209290000210a200c200941086a2900003703002002200a3703f0012009102f200620022903f001370000200641086a200c290300370000200d200729030037030020024190016a41106a2004290300370300200e2005290300370300200220022903b001370390014120102d2209450d0120092002290320370000200941186a200241206a41186a2204290300370000200941106a2003290300370000200941086a200241206a41086a290300370000200b2009ad428080808080048410042009102f200241206a109204200241003602b801200242013703b0014120102d2209450d0120092002290330370000200941186a200241c8006a290300370000200941106a2215200241206a41206a290300370000200941086a20042903003700004120102d2203450d01200242a080808080043702b401200220033602b00120032009290000370000200341086a200941086a290000370000200341106a2015290000370000200341186a200941186a2900003700002009102f200241206a200241b0016a1095024120102d2209450d0120092002290350370000200941186a200241e8006a290300370000200941106a200241e0006a290300370000200941086a200241d8006a2903003700000240024020022802b401221520022802b80122186b4120490d00201841206a210320022802b00121040c010b201841206a22032018490d01201541017422042003200420034b1b22164100480d010240024020150d002016102d21040c010b20022802b00120152016103121040b2004450d02200220163602b401200220043602b001201621150b200420186a221841086a200941086a290000370000201841106a200941106a290000370000201841186a200941186a290000370000200220033602b801201820092900003700002009102f4120102d2209450d0120092002290370370000200941186a20024188016a290300370000200941106a20024180016a290300370000200941086a200241f8006a2903003700000240201520036b411f4b0d00200341206a22182003490d01201541017422162018201620184b1b22184100480d010240024020150d002018102d21040c010b200420152018103121040b2004450d02200220183602b401200220043602b0010b200420036a220441086a200941086a290000370000200441106a200941106a290000370000200441186a200941186a2900003700002002200341206a3602b801200420092900003700002009102f2002280224210d2002412c6a2802002205200241b0016a10690240024020050d0020022802b801210320022802b00121040c010b200541246c210c20022802b401211620022802b8012109200d21150340200241d0016a201510ea0220022802d001210702400240201620096b20022802d8012218490d00200920186a210320022802b00121040c010b200920186a22032009490d03201641017422042003200420034b1b22064100480d030240024020160d002006102d21040c010b20022802b00120162006103121040b2004450d04200220063602b401200220043602b001200621160b200220033602b801200420096a2007201810e8061a024020022802d401450d002007102f0b201541246a211520032109200c415c6a220c0d000b0b2003ad422086210a2004ad210802402005450d00200541246c2103200d210903400240024020092d0000220441044b0d0002400240024020040e050400010204040b2009410c6a280200450d03200941086a280200102f0c030b2009410c6a280200450d02200941086a280200102f0c020b2009410c6a280200450d01200941086a280200102f0c010b200941086a280200450d00200941046a280200102f0b200941246a21092003415c6a22030d000b0b200a200884210a0240200241286a280200450d00200d102f0b20024180026a2400200a0f0b1038000b1036000bcc2507017f017e017f017e0e7f027e087f23004180056b22022400024002402001450d00200220003602200c010b200241c8e1ca003602200b20022001360224200241186a200241206a10e601024020022802180d00200228021c21012002200241206a3602e802200241003a00e004200242003702d40320024190bdc6003602d0032002200136023c200241003602382002200241e0046a3602442002200241e8026a360240200241386a200241d0036a10ee0420022802d003210120022902d4032103024020022d00e004450d0020012003a72003422088a710e4010c010b2001450d002002200337022c20022001360228200241386a200241286a10d205024002400240024002400240024020022802384101460d00200241386a41086a22012903002103200241386a41186a4200370300200241386a41106a22044200370300200142003703002002420037033841d5a2ca00ad42808080809001841001220029000021052001200041086a290000370300200220053703382000102f41ecb0c000ad42808080803084100122002900002105200241e8026a41086a2206200041086a290000370300200220053703e8022000102f200420022903e8022205370300200241d0036a41086a2001290300370300200241d0036a41106a2005370300200241d0036a41186a2006290300370300200220022903383703d003200241086a200241d0036a10e301200229031021052002280208210141c803102d2207450d042007200241d0036a41e80010e806220842023703682008410336029801200820022903e802370370200841f8006a200629030037030020084180016a200241e8026a41106a29030037030020084188016a200241e8026a41186a29030037030020084190016a20024188036a29030037030020082003200542dc0b7c42dc0b20011b220520032005561b3703a001200841a8016a200241386a41a00210e8061a200241286a2101200228022c21090240024003404100210a4100210602402001280200220b2f0106220c450d00200c4103742101200b41e8006a2104200b41086a2100417f21060340024020010d00200c21060c020b41feb2c0002000410810ea06220d450d03200141786a21012004410c6a2104200641016a2106200041086a2100200d417f4a0d000b0b024020090d0042002103420021050c030b2009417f6a2109200b20064102746a41e4016a21010c000b0b200441786a2802002101200220042802003602d403200220013602d003200241386a200241d0036a109a032002280238220a450d03200241c0006a3502004220862103200235023c21050b200a4104200a1b210e20052003844200200a1b2203a7210f02402003422088a7220b450d00200241d8026a10f80220022802d802210d20022802dc02211002400240024020022802e002220c450d00200d200c41c4006c22016a2104200141bc7f6a2106200d2101034020012d00002100200241386a200141016a41c30010e8061a20004102460d01200241d0036a41186a200241386a41186a290000370300200241d0036a41106a200241386a41106a290000370300200241d0036a41086a200241386a41086a290000370300200220022900383703d00320004101460d02200641bc7f6a2106200141c4006a22012004470d000b0b410021114101210902402010450d00200d102f0b410021120c010b200241e8026a41086a2200200241d0036a41086a290300370300200241e8026a41106a220a200241d0036a41106a290300370300200241e8026a41186a2213200241d0036a41186a290300370300200220022903d00322033703c004200220033703e8024120102d2209450d06200920022903e802370000200941186a2013290300370000200941106a200a290300370000200941086a20002903003700000240024020060d0041012112410121110c010b200141c4006a2100200c41c4006c200d6a41bc7f6a21134101211241012111034020002101034020012d00002100200241386a200141016a41c30010e8061a20004102460d02200241d0036a41186a2206200241386a41186a290000370300200241d0036a41106a220c200241386a41106a290000370300200241d0036a41086a220a200241386a41086a290000370300200220022900383703d003024020004101460d00200141c4006a22012004470d010c030b0b200241e8026a41086a200a2903002203370300200241e8026a41106a200c2903002205370300200241e8026a41186a20062903002214370300200220022903d00322153703e802200241c0046a41186a220c2014370300200241c0046a41106a220a2005370300200241c0046a41086a22162003370300200220153703c004024020112012470d00201241016a22002012490d0b201241017422062000200620004b1b220041ffffff3f712000470d0b200041057422004100480d0b0240024020120d002000102d21090c010b200920124105742000103121090b2009450d09200041057621110b200141c4006a2100200920124105746a220620022903c004370000200641186a200c290300370000200641106a200a290300370000200641086a2016290300370000201241016a211220132001470d000b0b2010450d00200d102f0b200e200b41f0006c6a2116200241d0036a41106a2117200241386a41106a210d200241d0036a41086a21184200210541042119200e210403402004280204210b20042802002106200241386a200441086a41e80010e8061a200441f0006a21040240200b0d00201121060c040b200241e8026a200241386a41e80010e8061a2002200b3602d403200220063602d0032018200241e8026a41e80010e8061a200241386a41186a221a4200370300200d4200370300200241386a41086a220c420037030020024200370338418de6c300ad4280808080e00084100122012900002103200c200141086a290000370300200220033703382001102f419ce6c300ad4280808080e00084100122012900002103200241c0046a41086a2200200141086a290000370300200220033703c0042001102f200d20022903c004370000200d41086a2000290300370000200241e0046a41086a221b200c290300370300200241e0046a41106a221c200d290300370300200241e0046a41186a221d201a290300370300200220022903383703e0042002200241e0046a41201095012002280200210120022802042100200241e0046a200241d0036a10f902024002402006417f6a220a2000410020011b22014f0d00200241386a200a10fa02200241386a2017412010ea060d00200641002001417b6a2200200020014b1b490d0020124105742110200241e0046a20096b21134100210102400340024020102001470d004100210a0c020b4101210a20132001460d01200920016a2100200141206a21012000200241e0046a412010ea060d000b0b200241386a200610fa02200241386a200241e0046a412010ea062101200a0d002001450d00200241e0046a200241d0036a10f902200241386a200241d0036a41f00010e8061a0240024020054220882203a722012005a7460d00200121000c010b200141016a22062001490d0b2003a72200410174220b20062006200b491bad42f0007e2203422088a70d0b2003a722064100480d0b0240024020010d002006102d21190c010b2019200141f0006c2006103121190b2019450d09200641f0006ead21050b2019200041f0006c6a200241386a41f00010e8061a201a201d290300370300200d201c290300370300200c201b290300370300200220022903e0043703380240024020122011460d0020112106201221110c010b201141016a22012011490d0b201141017422062001200620014b1b220141ffffff3f712001470d0b200141057422014100480d0b0240024020110d002001102d21090c010b200920114105742001103121090b2009450d09200141057621060b200542ffffffff0f83200041016a2200ad422086842105200920114105746a22012002290338370000200141186a201a290300370000200141106a200d290300370000200141086a200c2903003700002000410a460d05201141016a2112200621110c010b024020022802dc032201450d00200141246c2100200b210103400240024020012d0000220641044b0d0002400240024020060e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012000415c6a22000d000b0b20022802d803450d00200b102f0b20042016470d000b20112106201621040c020b4101210c200f450d03200e102f0c030b200241d8036a200241c4006a2902003703002002200229023c3703d003418aeec0004128200241d0036a41b4eec00041c4eec000103e000b024020162004460d000340200441046a2200109701200441f0006a21010240200441086a280200450d002000280200102f0b2001210420162001470d000b0b0240200f450d00200e102f0b02402006450d002009102f0b0240200542ffffffff0f560d004101210c2005a7450d022019102f0c020b2019450d00200841c80341900710312207450d02200741c8036a200241d0036a41e80010e8061a200742023703b004200720053703e804200720193602e404200741043602e004200720022903e8023703b804200741c0046a200241f0026a290300370300200741c8046a200241f8026a290300370300200741d0046a20024180036a290300370300200741d8046a20024188036a290300370300200741f0046a200241386a41a00210e8061a4102210c0c010b4101210c0b200241286a2101200228022c210b02400240024002400340024002402001280200220d2f010622090d00410021060c010b20094103742101200d41086a2100417f21060340024020010d00200921060c020b200641016a210641a9b4c0002000410810ea062204450d03200141786a2101200041086a21002004417f4a0d000b0b200b450d02200b417f6a210b200d20064102746a41e4016a21010c000b0b200d41e0006a2006410c6c6a22012802084104490d002001280200280000210d200241d0036a41186a4200370300200241d0036a41106a22064200370300200241d0036a41086a22014200370300200242003703d00341d5a2ca00ad42808080809001841001220029000021032001200041086a290000370300200220033703d0032000102f41f4c8c300ad4280808080b00184100122002900002103200241c0046a41086a2204200041086a290000370300200220033703c0042000102f200620022903c0042203370300200241e8026a41086a2001290300370300200241e8026a41106a2003370300200241e8026a41186a2004290300370300200220022903d0033703e802200241386a200241e8026a10fe0320022802382201410420011b2106410021000240200229023c420020011b2203422088a72201417f6a220420014b0d00200420014f0d00200620044102746a2201450d002001280200200d4721000b02402003a7450d002006102f0b20000d010b200c21100c010b2007200c41c8036c2201200c4101742200200c41016a2210200020104b1b41c8036c10312207450d01200720016a200241d0036a41e80010e80622014202370368200120022903e802370370200141f8006a200241f0026a29030037030020014180016a200241f8026a29030037030020014188016a20024180036a29030037030020014190016a20024188036a2903003703002001419c016a200d3602002001410e36029801200141a8016a200241386a41a00210e8061a0b2002280228200228022c200228023010e401201041c8036c220c4104722201417f4c0d012001102d2200450d00200241003602d803200220013602d403200220003602d0032010200241d0036a106920022802d403210b20022802d8032101200721060340200220063602e802200241386a200241e8026a10a9032002280238210902400240200b20016b2002280240220d490d002001200d6a210020022802d00321040c010b2001200d6a22002001490d04200b41017422042000200420004b1b220a4100480d0402400240200b0d00200a102d21040c010b20022802d003200b200a103121040b2004450d022002200a3602d403200220043602d003200a210b0b200220003602d803200420016a2009200d10e8061a0240200228023c450d002009102f0b200641c8036a210620002101200c41b87c6a220c0d000b201041c8036c210620074198016a21012000ad4220862004ad84210303402001108d01200141c8036a2101200641b87c6a22060d000b2007102f20024180056a240020030f0b1036000b103d000b1038000b200241dc036a4104360200200241cc006a41023602002002420237023c200241b8c2c800360238200241043602d403200241f8c3c8003602d003200241003602ec02200241c8e1ca003602e8022002200241d0036a3602482002200241e8026a3602d803200241386a41c8c2c8001043000b920201067f200128020421020240024002400240034002400240200128020022032f010622040d00410021050c010b20044103742101200341086a2106417f21050340024020010d00200421050c020b200541016a210541fca1ca002006410810ea062207450d03200141786a2101200641086a21062007417f4a0d000b0b2002450d022002417f6a2102200320054102746a41e4016a21010c000b0b200341e0006a2005410c6c6a22012802084108490d01200041086a2001280200290000370300200041003602000f0b200041003602042000410c6a4128360200200041086a4184a2ca003602000c010b200041003602042000410c6a4129360200200041086a41aca2ca003602000b200041013602000beb2107077f017e0d7f047e017f017e027f230041d0026b22022400024002402001450d00200220003602180c010b200241c8e1ca003602180b2002200136021c200241e8006a200241186a10f104024002400240024002400240024002400240200228026c2203450d00200241e0016a2802002104200241dc016a2802002105200241d8016a2802002106200241e8006a410c6a280200210720022802702108200241106a200241186a10e60120022802100d08200228021421012002200241186a360240200241003a0030200242003702f40120024190bdc6003602f0012002200136026c200241003602682002200241306a3602742002200241c0006a360270200241e8006a200241f0016a10ee0420022802f001210120022902f4012109024020022d0030450d0020012009a72009422088a710e4010c090b2001450d0820022009370224200220013602204101210a200241013b013c200242003702344190bdc600210b20024190bdc600360230024020040d004100210c4100210d4100210e0c040b2006200441c8036c6a210b200241306a41086a210f200241c0006a4104722110200241f0016a4102722111200241e8006a41106a210e200621120340201241e8006a2903004202520d0202400240024002400240201228029801220c410347220d0d0020122903a0012109200241206a21012002280224211302400240024002400240034002400240200128020022142f010622150d00410021160c010b20154103742101201441086a2100417f21160340024020010d00201521160c020b201641016a211641b3c7ca002000410810ea06220a450d03200141786a2101200041086a2100200a417f4a0d000b0b2013450d022013417f6a2113201420164102746a41e4016a21010c000b0b0240201441e0006a2016410c6c6a220128020841074b0d00201742808080807083422984210941bbc7ca0021130c020b200942b8178020012802002900002217510d034131211541cbdbc90021130c020b201742808080807083421c84210941e4c7ca0021130b2009a721150b0240024020022d003d450d004131210141c6efc00021000c010b20022802302002280234200228023810e4012002420037023420024190bdc600360230200242e2c289abb68edbb7f40037034041002116200241f0016a410272410041da0010e7061a200241e8006a410041840110e7061a41e401102d2214450d0c20144100360200201441046a200241f0016a41dc0010e8061a201441e0006a200241e8006a41840110e8061a20024100360234200220143602300240024020142f01062212450d0020124103742101201441086a2100417f21160340024020010d00201221160c020b200241c0006a2000410810ea06220a450d02200141786a2101201641016a2116200041086a2100200a417f4a0d000b0b200242e2c289abb68edbb7f40037027c2002200f360278200220163602742002201436026c4100210a200241003602682002200241306a360270200241f0016a2013201510d405200241e8006a200241f0016a109b0220024180023b013c4101210c0c0b0b412d21014199efc00021000b2002200136026c2002200036026841f7efc0004122200241e8006a419cf0c00041acf0c000103e000b200d0d0020122903a0012118200241e8006a200241206a10d20502400240024020022802684101460d0020022903702109200241e8006a41186a22164200370300200e4200370300200241e8006a41086a220142003703002002420037036841d5a2ca00ad42808080809001841001220029000021192001200041086a290000370300200220193703682000102f41ecb0c000ad42808080803084100122002900002119200241c0006a41086a220a200041086a290000370300200220193703402000102f200e2002290340370000200e41086a200a290300370000200241f0016a41086a2001290300370300200241f0016a41106a200e290300370300200241f0016a41186a2016290300370300200220022903683703f0012002200241f0016a10e30102402018200942b0ea017c560d004100210c2018200229030842dc0b7c42dc0b20022802001b2209540d020c030b201a42808080807083211a41bcf0c000ad4280808080d0048421094101210c4100211b0c010b20022903702109200228026c211b4101210c201c42808080807083200235027884221c211a0b2002201a3703502002201b3602442002200c3602402002200937034802400240024020022d003d450d004131210141c6efc00021000c010b024002400240200c450d0020022802302002280234200228023810e4012002420037023420024190bdc600360230200242f4d2b59bc7ae98b8303703580c010b20022802302114200242f4d2b59bc7ae98b83037035820144190bdc600460d00200228023421130c010b2011410041da0010e7061a200241e8006a410041840110e7061a41e401102d2214450d0e4100211320144100360200201441046a200241f0016a41dc0010e8061a201441e0006a200241e8006a41840110e8061a20024100360234200220143602300b2009422088a7211d2009a7211e024003400240024020142f010622150d00410021160c010b20154103742101201441086a2100417f21160340024020010d00201521160c020b200241d8006a2000410810ea06220a450d03200141786a2101201641016a2116200041086a2100200a417f4a0d000b0b02402013450d002013417f6a2113201420164102746a41e4016a28020021140c010b0b200242f4d2b59bc7ae98b83037027c2002200f360278200220163602742002201436026c200241003602682002200241306a3602704101102d210102400240200c0d002001450d10200141003a000020014101410910312201450d102001200937000141092116410921000c010b2001450d0f200141013a0000200241f0016a201010ca0520022802f00121140240024020022802f801220a0d0041012116200a41016a21000c010b200a41016a2200200a490d1120004102200041024b1b22164100480d1120014101201610312201450d100b200141016a2014200a10e8061a20022802f401450d002014102f0b200220003602f801200220163602f401200220013602f001200241e8006a200241f0016a109b022002200c3a003d200241003a003c200c0d02200c450d03201b450d03201d450d03201e102f0c030b412d21014199efc00021000b200220003602682002200136026c41f7efc0004122200241e8006a419cf0c00041acf0c000103e000b2002280238210d2002280234210e2002280230210b201b450d02201d450d02201e102f0c020b201228029801210c0b200c4104470d03201241a4016a280200410b490d032002410d3602482002419387c70036024420024100360240024020022d003d450d004131210141c6efc00021000c030b20022802302002280234200228023810e4012002420037023420024190bdc600360230200242f5dc8de3d6ec9c9830370358200241f0016a410272410041da0010e7061a200241e8006a410041840110e7061a41e401102d2214450d0920144100360200201441046a200241f0016a41dc0010e8061a201441e0006a200241e8006a41840110e8061a200241003602342002201436023041002116024020142f01062213450d0020134103742101201441086a2100417f21160340024020010d00201321160c020b200241d8006a2000410810ea06220a450d03200141786a2101201641016a2116200041086a2100200a417f4a0d000b0b200242f5dc8de3d6ec9c983037027c2002200f360278200220163602742002201436026c200241003602682002200241306a3602704101102d2201450d09200141003a0000200241f0016a200241c0006a10ca0520022802f001210a0240024020022802f80122000d0041012114200041016a21160c010b200041016a22162000490d0b20164102201641024b1b22144100480d0b20014101201410312201450d0a0b4101210c200141016a200a200010e8061a024020022802f401450d00200a102f0b200220163602602002201436025c20022001360258200241e8006a200241d8006a109b0220024180023b013c2002280230210b2002280234210e2002280238210d0b4100210a0c070b412d21014199efc00021000b200220003602682002200136026c41f7efc0004122200241e8006a419cf0c00041acf0c000103e000b201241c8036a2212200b470d000c020b0b200241cc006a410436020020024184026a4102360200200242023702f401200241b8c2c8003602f0012002410436024420024194c4c80036024020024100360234200241c8e1ca003602302002200241c0006a360280022002200241306a360248200241f0016a41c8c2c8001043000b20022d003d210c20022d003c210a0b2002280238210d2002280234210e2002280230210b0b20022802202002280224200228022810e40102402007450d00200741246c21002003210103400240024020012d0000221641044b0d0002400240024020160e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012000415c6a22000d000b0b02402008450d002003102f0b02402004450d00200441c8036c210020064198016a210103402001108d01200141c8036a2101200041b87c6a22000d000b0b02402005450d002006102f0b20024100360270200242013703684101102d2201450d00200242818080801037026c200220013602682001200a3a000020014101410210312201450d00200242828080802037026c200220013602682001200c3a0001200d200241e8006a1069200b21010240200e450d00200e2100200b2101034020012802e40121012000417f6a22000d000b0b200d450d0241002114200d2115034002400240201420012f0106490d004100210a024003400240200128020022000d0041002116410021000c020b200a41016a210a20012f0104211620002101201620002f01064f0d000b0b201641016a21140240200a0d00200021010c020b200020144102746a41e4016a280200210141002114200a417f6a220a450d01034020012802e4012101200a417f6a220a0d000c020b0b2001210020142116201441016a21140b02400240200228026c22132002280270220a6b4108490d00200228026821130c010b200a41086a2212200a490d032013410174220c2012200c20124b1b22124100480d030240024020130d002012102d21130c010b200228026820132012103121130b2013450d022002201236026c200220133602680b2002200a41086a3602702013200a6a200020164103746a41086a290000370000200041e0006a2016410c6c6a2200280200211320002802082200200241e8006a106902400240200228026c220a200228027022166b2000490d002002280268210a0c010b201620006a22122016490d03200a410174220c2012200c20124b1b22124100480d0302400240200a0d002012102d210a0c010b2002280268200a20121031210a0b200a450d022002201236026c2002200a3602680b2002201620006a2212360270200a20166a2013200010e8061a2015417f6a22150d000c040b0b1036000b1038000b200228027021122002280268210a0b200b200e200d10e401200241d0026a24002012ad422086200aad840f0b200241f0016a410c6a4104360200200241fc006a41023602002002420237026c200241b8c2c800360268200241043602f40120024194c4c8003602f00120024100360244200241c8e1ca003602402002200241f0016a3602782002200241c0006a3602f801200241e8006a41c8c2c8001043000bcd0301057f024002400240200241046a2203417f4c0d00024002400240024002400240024002402003450d002003102d2204450d09200241c000490d04200241808001490d052002418080808004490d06200441033a00002003417f6a41034d0d01200321050c030b410121034101102d2204450d08200441033a0000410521050c010b200341017422064105200641054b1b22054100480d080b20042003200510312204450d060b20042002360001410521060c030b200420024102743a000041012106200321050c020b02400240200341014d0d00200321050c010b20042003200341017422064102200641024b1b220510312204450d040b41022106200420024102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d0420042003200510312204450d030b20042002410274410272360000410421060b02400240200520066b2002490d00200521030c010b200620026a22032006490d03200541017422072003200720034b1b22034100480d0320042005200310312204450d020b200420066a2001200210e8061a2000200620026a36020820002003360204200020043602000f0b103d000b1036000b1038000bb90101067f230041206b22022400200241c8e1ca00410010ac0402404120102d2203450d0020032002290300370000200341186a2204200241186a290300370000200341106a2205200241106a290300370000200341086a2206200241086a2903003700004120102d2207450d0020072003290000370000200741186a2004290000370000200741106a2005290000370000200741086a20062900003700002003102f200241206a24002007ad42808080808004840f0b1036000b8f3e05037f017e067f057e067f230041f0116b22022400024002402001450d00200220003602100c010b200241c8e1ca003602100b20022001360214200241e80a6a200241106a10a4040240024002400240024002400240024020022903d00b4203510d00200241d0006a200241e80a6a41c80310e8061a20024198046a200241d0006a41c80310e8061a200220024198046a3602e007200241e80a6a200241e0076a10a90320022802f00a2103024020022802ec0a450d0020022802e80a102f0b200241e80a6a20024198046a41c80310e8061a200241e0076a200241e80a6a10d10341012100024020022d00e0074101460d00200241e80a6a200241e0076a41086a220141800310e8061a200241b00e6a200241b80b6a220410f10220022903b00e210502400240024020022903880b4202520d00200241186a41206a22014200370300200241186a41186a22004280808080c000370300200241013a0040200242043703282002427f37032020024200370318200241e0076a41206a22064200370300200241e0076a41186a22074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241a00f6a200241186a200241e0076a10d705200241186a41286a2208200241a00f6a41286a2903003703002001200241a00f6a41206a2903003703002000200241a00f6a41186a290300370300200241186a41106a2209200241a00f6a41106a290300370300200241186a41086a220a200241a00f6a41086a290300370300200220022903a00f3703182006420037030020074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241d00f6a200241186a200241e0076a10d7052008200241d00f6a41286a2903003703002001200241d00f6a41206a2903003703002000200241d00f6a41186a2903003703002009200241d00f6a41106a290300370300200a200241d00f6a41086a290300370300200220022903d00f3703182006420037030020074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e00720024180106a200241186a200241e0076a10d705200820024180106a41286a290300370300200120024180106a41206a290300370300200020024180106a41186a290300370300200920024180106a41106a290300370300200a20024180106a41086a29030037030020022002290380103703182006420037030020074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241b0106a200241186a200241e0076a10d705200241c0116a41286a200241b0106a41286a290300370300200241c0116a41206a220b200241b0106a41206a290300370300200241c0116a41186a220a200241b0106a41186a290300370300200241c0116a41106a200241b0106a41106a290300370300200241c0116a41086a200241b0106a41086a290300370300200220022903b0103703c0112002200537039011200241e0076a20024190116a200310a604024020022d00e0074101470d0020022d00e307210620022f00e107210720022802d01121030240200a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241d4116a280200450d002003102f0b20022802dc1121030240200241e4116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241e0116a280200450d002003102f0b4101450d02200720064110747221010c080b200820024190086a2903003703002001200241e0076a41286a2903003703002000200629030037030020092007290300370300200241186a41086a2203200241e0076a41106a290300370300200220022903e807370318200241e0106a200241c0116a200241186a10d7052008200241e0106a41286a2903003703002001200241e0106a41206a2903003703002000200241e0106a41186a2903003703002009200241e0106a41106a2903003703002003200241e0106a41086a290300370300200220022903e0103703182006420037030020074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e00720024190116a200241186a200241e0076a10d705200820024190116a41286a290300370300200120024190116a41206a290300370300200020024190116a41186a290300370300200920024190116a41106a290300370300200320024190116a41086a29030037030020022002290390113703182006420037030020074280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241c0116a200241186a200241e0076a10d705200241fc0e6a200241c0116a41086a290300370200200220022903c0113702f40e41000d07200241d4116a2802002108200a2802002101200b2802002109200241e4116a280200210320022802d011210620022802dc11210720022903e81121050c020b200241186a41206a22064200370300200241186a41186a22074280808080c000370300200241013a004020024204370328427f210c2002427f37032020024200370318200241e0076a41206a22084200370300200241e0076a41186a22004280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241c00e6a200241186a200241e0076a10d705200241186a41286a2209200241c00e6a41286a2903003703002006200241c00e6a41206a2903003703002007200241c00e6a41186a290300370300200241186a41106a220a200241c00e6a41106a290300370300200241186a41086a220b200241c00e6a41086a290300370300200220022903c00e3703182008420037030020004280808080c000370300200241013a008808200242043703f0072002427f3703e807200242003703e007200241f00e6a200241186a200241e0076a10d7052009200241f00e6a41286a2903003703002006200241f00e6a41206a2903003703002007200241f00e6a41186a290300370300200a200241f00e6a41106a290300370300200b200241f00e6a41086a290300370300200220022903f00e37031820004200370300200241e0076a41106a2207420037030020014200370300200242003703e007418de6c300ad4280808080e00084220d10012206290000210e2001200641086a2900003703002002200e3703e0072006102f419ce6c300ad4280808080e0008410012206290000210e20024190116a41086a2209200641086a2900003703002002200e370390112006102f2007200229039011220e370300200241c0116a41086a2001290300370300200241c0116a41106a200e370300200241c0116a41186a2009290300370300200220022903e0073703c011200241086a200241c0116a4120109501200228020c410020022802081bad210e024020022903880b4201520d0020022903900b220c4200510d05200e200241980b6a290300220f200f200e541b2210200c7c2010200f7d200c827d210c0b2008420037030020004280808080c000370300200241013a008808200242043703f007200242003703e00720024200200c200e7d220e200e200c561b3703e807200241a00f6a200241186a200241e0076a10d70520024190116a41286a200241a00f6a41286a29030037030020024190116a41206a200241a00f6a41206a29030037030020024190116a41186a200241a00f6a41186a29030037030020024190116a41106a200241a00f6a41106a29030037030020024190116a41086a200241a00f6a41086a290300370300200220022903a00f3703901120022802b00b2106200d10012201290000210c200241e0106a41086a200141086a2900003703002002200c3703e0102001102f41f0e8c600ad4280808080f0008410012201290000210c200241186a41086a200141086a2900003703002002200c3703182001102f4120102d2201450d09200120022903e80a370000200141186a200241e80a6a41186a290300370000200141106a200241e80a6a41106a290300370000200141086a200241e80a6a41086a2903003700002001ad428080808080048410032200290000210c200041086a290000210e200041106a290000210d200241e0076a41186a2207200041186a290000370300200241e0076a41106a2208200d370300200241e0076a41086a200e3703002002200c3703e0072000102f2001102f41c000102d2201450d09200120022903e01037000020012002290318370010200120022903e007370020200141086a200241e0106a41086a290300370000200141186a200241186a41086a290300370000200141286a200241e0076a41086a290300370000200141306a2008290300370000200141386a2007290300370000200241e0076a200110f602200241a8086a280200210020022903e007210c2001102f024002400240024020004100200c4201511b220720064b0d00410c102d2200450d0d4104102d2201450d0d20014104412010312201450d0d200120022903e80a370000200141186a200241e80a6a41186a290300370000200141106a200241e80a6a41106a290300370000200141086a200241e80a6a41086a2903003700002001412041c00010312201450d0d20012006360020200042c0808080c004370204200020013602000240024020072006490d0041002101410421070c010b410c102d2207450d0e4104102d2201450d0e20014104412010312201450d0e200120022903e80a370000200141186a200241e80a6a41186a290300370000200141106a200241e80a6a41106a290300370000200141086a200241e80a6a41086a2903003700002001412041c00010312201450d0e20012006417f6a360020200742c0808080c00437020420072001360200410121010b200241c0116a41206a2206428180808010370300200241c0116a41186a22082001360200200241d4116a2001360200200220022800b0103602b80e2002200241b3106a2800003600bb0e200241ec116a20022800bb0e360000200220003602dc11200220073602d0112002427f3703c8112002200542ffffffff0f833703c011200220022802b80e3600e911200241013a00e811200241d00f6a20024190116a200241c0116a10d70520024190116a41286a2200200241d00f6a41286a29030037030020024190116a41206a2207200241d00f6a41206a29030037030020024190116a41186a2201200241d00f6a41186a29030037030020024190116a41106a2209200241d00f6a41106a29030037030020024190116a41086a220a200241d00f6a41086a290300370300200220022903d00f3703901120022005370318200241e0076a200241186a200310a60420022d00e0074101460d01200241c0116a41286a20024190086a220b2903003703002006200241e0076a41286a2903003703002008200241e0076a41206a290300370300200241c0116a41106a200241e0076a41186a290300370300200241c0116a41086a200241e0076a41106a290300370300200220022903e8073703c01120024180106a20024190116a200241c0116a10d705200020024180106a41286a290300370300200720024180106a41206a290300370300200120024180106a41186a290300370300200920024180106a41106a290300370300200a20024180106a41086a29030037030020022002290380103703901120022005370318200241e0076a20022903a00b200241a80b6a290300200241e80a6a200241186a200310d40320022d00e0074101460d02200241c0116a41286a2201200b290300370300200241c0116a41206a2200200241e0076a41286a2203290300370300200241c0116a41186a2206200241e0076a41206a2207290300370300200241c0116a41106a2208200241e0076a41186a2209290300370300200241c0116a41086a220a200241e0076a41106a220b290300370300200220022903e8073703c011200241b0106a20024190116a200241c0116a10d70520024190116a41286a200241b0106a41286a29030037030020024190116a41206a200241b0106a41206a29030037030020024190116a41186a2211200241b0106a41186a29030037030020024190116a41106a200241b0106a41106a29030037030020024190116a41086a200241b0106a41086a290300370300200220022903b01037039011200241e0076a200410e20120022d00e0074101460d032001200241e0076a41306a290300370300200020032903003703002006200729030037030020082009290300370300200a200b290300370300200220022903e8073703c011200241e0106a20024190116a200241c0116a10d705200241186a41086a20022903e010370300200241186a41106a200241e0106a41086a290300370300200241186a41186a200241e0106a41106a290300370300200241186a41206a200241e0106a41186a290300370300200241186a41286a200241e0106a41206a290300370300200241186a41306a200241e0106a41286a290300370300200241003a00180c0b0b200220022800b0103602b80e2002200241b3106a2800003600bb0e200241003a001b20024180063b0019200241013a001820022802a01121030240200241a8116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241a4116a280200450d002003102f0b20022802ac1121030240200241b4116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b200241b0116a280200450d0a2003102f0c0a0b200220022d00e3073a001b200220022f00e1073b0019200241013a001820022802a0112103024020012802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241a4116a280200450d002003102f0b20022802ac1121030240200241b4116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b200241b0116a280200450d092003102f0c090b200220022d00e3073a001b200220022f00e1073b0019200241013a001820022802a01121030240200241a8116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241a4116a280200450d002003102f0b20022802ac1121030240200241b4116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b200241b0116a280200450d082003102f0c080b200220022d00e3073a001b200220022f00e1073b0019200241013a001820022802a0112103024020112802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241a4116a280200450d002003102f0b20022802ac1121030240200241b4116a2802002201450d002001410c6c21002003210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b200241b0116a280200450d072003102f0c070b0b200241c80e6a200241fc0e6a290200370300200220022902f40e3703c00e0240024020022802b80b4113460d00200241003a00e307418102210020024181023b00e107200241013a00e0070c010b200241e0076a200241bc0b6a10a20320022d00e0074101470d0420022f00e10720022d00e3074110747221000b200241013a0018200220003b0019200220004110763a001b02402001450d002001410c6c21002006210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b02402008450d002006102f0b02402003450d002003410c6c21002007210103400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b2009450d052007102f0c050b200220022d00e3073a001b200220022f00e1073b0019200241013a00180c050b200241dc006a4104360200200241ac046a41023602002002420237029c04200241b8c2c8003602980420024104360254200241acc4c800360250200241003602e407200241c8e1ca003602e0072002200241d0006a3602a8042002200241e0076a36025820024198046a41c8c2c8001043000b41d0caca00411941eccaca001039000b200241e0106a41286a2200200241e0076a41306a290300370300200241e0106a41206a220a200241e0076a41286a220b290300370300200241e0106a41186a2211200241e0076a41206a2212290300370300200241e0106a41106a2213200241e0076a41186a2214290300370300200241e0106a41086a2215200241e0076a41106a2216290300370300200220022903e8073703e010200241c0116a41086a200241c00e6a41086a290300370300200241e4116a2003360200200241c0116a41206a2009360200200241c0116a41186a2001360200200241d4116a2008360200200220022903c00e3703c011200220053703e811200220073602dc11200220063602d011200b20002903003703002012200a2903003703002014201129030037030020162013290300370300200241e0076a41086a2015290300370300200220022903e0103703e00720024190116a200241c0116a200241e0076a10d705200241186a41086a200229039011370300200241186a41106a20024190116a41086a290300370300200241186a41186a20024190116a41106a290300370300200241186a41206a20024190116a41186a290300370300200241186a41286a20024190116a41206a290300370300200241186a41306a20024190116a41286a290300370300200241003a00180c010b200241013a0018200220013b0019200220014110763a001b0b2004108e0120022d001821000b4101102d2201450d00200242013702ec0a200220013602e80a02400240200041ff01714101470d00200241013602f00a200141013a0000200241186a410172200241e80a6a10a10320022802f00a210020022802e80a21010c010b200241013602f00a200141003a0000200241206a2903002105024020022802ec0a2200417f6a41074b0d00200041017422034109200341094b1b22034100480d0320012000200310312201450d02200220033602ec0a200220013602e80a0b200241093602f00a20012005370001200241306a2802002100200241386a2802002201200241e80a6a106902402001450d0020002001410c6c6a2109034020002802002107200041086a2802002201200241e80a6a10690240024020022802ec0a220620022802f00a22036b2001490d0020022802e80a21060c010b200320016a22082003490d05200641017422042008200420084b1b22084100480d050240024020060d002008102d21060c010b20022802e80a20062008103121060b2006450d04200220083602ec0a200220063602e80a0b2002200320016a3602f00a200620036a2007200110e8061a2000410c6a22002009470d000b0b2002413c6a2802002100200241c4006a2802002201200241e80a6a10690240024020010d0020022802ec0a210620022802f00a21090c010b20002001410c6c6a2104034020002802002108200041086a2802002201200241e80a6a10690240024020022802ec0a220620022802f00a22036b2001490d0020022802e80a21070c010b200320016a22072003490d05200641017422092007200920074b1b22094100480d050240024020060d002009102d21070c010b20022802e80a20062009103121070b2007450d04200220093602ec0a200220073602e80a200921060b2002200320016a22093602f00a200720036a2008200110e8061a2000410c6a22002004470d000b0b200241286a290300210502400240200620096b4108490d0020022802e80a21010c010b200941086a22012009490d03200641017422002001200020014b1b22004100480d030240024020060d002000102d21010c010b20022802e80a20062000103121010b2001450d02200220003602ec0a200220013602e80a200021060b2002200941086a3602f00a200120096a2005370000200241c8006a2d000021070240200620022802f00a2203470d00200641016a22002006490d03200641017422082000200820004b1b22004100480d030240024020060d002000102d21010c010b200120062000103121010b2001450d02200220003602ec0a200220013602e80a0b2002200341016a22003602f00a200120036a20073a00000b2000ad4220862001ad842105024020022d00180d000240200241386a2802002200450d00200241306a28020021012000410c6c210003400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b0240200241346a280200450d002002280230102f0b0240200241c4006a2802002200450d002002413c6a28020021012000410c6c210003400240200141046a280200450d002001280200102f0b2001410c6a2101200041746a22000d000b0b200241c0006a280200450d00200228023c102f0b200241f0116a240020050f0b1036000b1038000bc80505017f027e077f017e017f230041206b220324002002290300210420012903002105200141106a210620022802102107024002400240024002400240200141146a2802002208200141186a28020022096b200241186a280200220a490d00200628020021080c010b2009200a6a220b2009490d022008410174220c200b200c200b4b1bad420c7e220d422088a70d02200da7220b4100480d020240024020080d00200b102d21080c010b20062802002008410c6c200b103121080b2008450d0120012008360210200141146a200b410c6e3602000b20082009410c6c6a2007200a410c6c10e8061a200141186a2009200a6a36020020024100360218200341086a200641086a280200360200200320062902003703002001411c6a2106200228021c210b02400240200141206a2802002208200141246a28020022096b200241246a280200220a490d00200628020021080c010b2009200a6a220c2009490d022008410174220e200c200e200c4b1bad420c7e220d422088a70d02200da7220c4100480d020240024020080d00200c102d21080c010b20062802002008410c6c200c103121080b2008450d012001200836021c200141206a200c410c6e3602000b427f200520047c220420042005541b210520082009410c6c6a200b200a410c6c10e8061a200141246a2009200a6a36020020024100360224200341106a41086a200641086a28020036020020032006290200370310200229030822042001290308220d200d2004561b210420012d0028450d024101210120022d0028450d020c030b1036000b1038000b410021010b20002005370300200020032903003702102000200329031037021c200020013a002820002004370308200041186a200341086a280200360200200041246a200341106a41086a2802003602000240200241146a280200450d002007102f0b0240200241206a280200450d00200b102f0b200341206a24000b9d3008057f027e077f017e037f017e137f017e230022022103200241a0046b41607122042400024002402001450d00200420003602380c010b200441c8e1ca003602380b2004200136023c200441b0026a200441386a10f6030240024002400240024002400240024020042802b402450d00200441c0006a200441b0026a41f00010e8061a200441b0016a200441c0006a10ba032004280240200441d0006a20044190016a200441b0016a410010ce03410041002802a8e24a2201410120011b3602a8e24a0240200141014b0d000240024020010e020001000b410041b4a5c0003602b0e24a410041c8e1ca003602ace24a410041023602a8e24a0c010b034041002802a8e24a4101460d000b0b2004410020042802402201417f6a2202200220014b1b22053602bc0110214101470d01200441b0026a41186a22064200370300200441b0026a41106a22024200370300200441b0026a41086a22014200370300200442003703b00241d39bca00ad428080808080018422071001220029000021082001200041086a290000370300200420083703b0022000102f41bdc5c300ad4280808080e00184100122092900002108200441e8016a41086a2200200941086a290000370300200420083703e8012009102f200220042903e8012208370300200441c0036a41086a220a2001290300370300200441c0036a41106a220b2008370300200441c0036a41186a220c2000290300370300200420042903b0023703c003200441306a200441c0036a412010950102402004280234410020042802301b220920054d0d0041002100200441c0036a21010c060b200642003703002002420037030020014200370300200442003703b002419c9eca00ad4280808080f000841001220929000021082001200941086a290000370300200420083703b0022009102f41a39eca00ad4280808080c001841001220929000021082000200941086a290000370300200420083703e8012009102f200220042903e8012208370300200a2001290300370300200b2008370300200c2000290300370300200420042903b0023703c003200441286a200441c0036a4120109501200428022c210d2004280228210e200642003703002002420037030020014200370300200442003703b00220071001220929000021082001200941086a290000370300200420083703b0022009102f419087ca00ad4280808080c000841001220929000021082000200941086a290000370300200420083703e8012009102f200220042903e8012208370300200a2001290300370300200b2008370300200c2000290300370300200420042903b0023703c003200441b0026a200441c0036a108d0320042802b002210f20042902b4022110200441b0026a41e9dabdf30610d90520042802b002210920042802b402210b024002400240024020042802b80222010d004101211141002112410021130c010b2001410574220a410575220241ffffff3f712002470d0a200a4100480d0a200a102d2211450d012009200a6a210c20014105742106410021010340200920016a22022900002108200241086a2900002107200241106a2900002114201120016a220041186a200241186a290000370000200041106a2014370000200041086a2007370000200020083700002006200141206a2201470d000b200a4105762112200c20096b41606a41057641016a21130b0240200b450d002009102f0b20134115490d054101450d0120134104744160712201417f4c0d012001102d2215450d00201141606a2116201141a07f6a211720014105762118410421194100211a4100211b4100211c2013211d0340201d210a4100211d410121060240200a417f6a2200450d00024002400240024002400240201120004105746a200a410574220b20116a41406a412010ea064100480d00200a417e6a21092017200b6a21014100211d410021020340024020092002470d00200a21060c080b200241016a2102200141206a2001412010ea062100200141606a21012000417f4a0d000b200241016a21062002417f73200a6a21000c010b2017200b6a210102400340024020004101470d00410021000c020b2000417f6a2100200141206a2001412010ea062102200141606a210120024100480d000b0b200a2000490d01200a20134b0d03200a20006b22064101762209450d002016200b6a2101201120004105746a21020340200441b0026a41186a220b200241186a220c290000370300200441b0026a41106a221e200241106a221f290000370300200441b0026a41086a2220200241086a2221290000370300200420022900003703b002200141086a22222900002108200141106a22232900002107200141186a221d290000211420022001290000370000200c2014370000201f200737000020212008370000201d200b2903003700002023201e29030037000020222020290300370000200120042903b002370000200141606a2101200241206a21022009417f6a22090d000b0b024020000d002000211d0c050b0240200641094d0d002000211d0c050b200a20134b0d01200a20006b2109201120004105746a210b0340200a2000417f6a221d490d040240200a201d6b22064102490d00201120004105746a22012011201d4105746a2200412010ea06417f4a0d00200441b0026a41186a2220200041186a2202290000370300200441b0026a41106a2221200041106a220c290000370300200441b0026a41086a2222200041086a221e290000370300200420002900003703b00220002001290000370000201e200141086a290000370000200c200141106a2900003700002002200141186a2900003700004101211f024020064103490d00200041c0006a200441b0026a412010ea06417f4a0d0041022102200b210102400340200141186a200141386a290000370000200141106a200141306a290000370000200141086a200141286a2900003700002001200141206a220c29000037000020092002460d01200141c0006a211e2002211f200c2101200241016a2102201e200441b0026a412010ea06417f4a0d020c000b0b2002211f0b2000201f4105746a220120042903b002370000200141186a2020290300370000200141106a2021290300370000200141086a20222903003700000b201d450d05200b41606a210b200941016a2109201d21002006410a4f0d050c000b0b2000200a104b000b200a2000417f6a221d490d010b200a2013104a000b201d200a104b000b0240201c201a470d00201a41016a2201201a490d0b201a41017422022001200220014b1b220141ffffffff01712001470d0b200141037422014100480d0b02400240201a0d002001102d21190c010b2019201a4103742001103121190b2019450d022001410376211a201b211c0b2019201c4103746a220120063602042001201d360200201b41016a221c211b0240201c4102490d000240034002400240024002402019201c417f6a221b4103746a2201280200450d00201c41037420196a220941746a2802002200200128020422024d0d000240201c41024b0d00201c211b4102211c201d450d0d0c080b2019201c417d6a22204103746a2802042201200220006a4d0d010240201c41034b0d00201c211b4103211c201d450d0d0c080b200941646a280200200120006a4d0d01201c211b0c060b201c4103490d01200128020421022019201c417d6a22204103746a28020421010b20012002490d010b201c417e6a21200b024002400240024002400240201c202041016a22244b2225450d00201c20204b2226450d01201920204103746a2221280204222720212802006a2201201920244103746a22222802002223490d02200120134b0d03201120234105746a221e2022280204221f41057422026a210920014105742100200120236b220a201f6b2201201f4f0d04201520092001410574220210e806220c20026a210602400240201f4101480d00200141014e0d010b20092101200c21020c060b201620006a21002009210103402000200141606a2209200641606a220a200a2009412010ea06410048220b1b2202290000370000200041186a200241186a290000370000200041106a200241106a290000370000200041086a200241086a2900003700002006200a200b1b21060240201e20092001200b1b2201490d00200c21020c070b200041606a2100200c2102200c2006490d000c060b0b41c4c2ca002024201c103b000b41c4c2ca002020201c103b000b20232001104b000b20012013104a000b2015201e200210e806220c20026a210602400240201f4101480d00200a201f4a0d010b201e2101200c21020c010b201120006a210b200c2102201e2101034020012009200220092002412010ea06410048220a1b2200290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a2900003700002002200241206a200a1b2102200141206a2101200941206a2009200a1b2209200b4f0d01200620024b0d000b0b20012002200620026b41607110e8061a02402026450d0020212023360200202141046a2027201f6a3602002025450d022022202241086a201c2024417f736a41037410e9061a201b211c201b41014d0d030c010b0b419cc3ca002020201c103b000b41b8e3c300411d41f8b4ca001039000b201d450d050c000b0b1036000b103d000b200441cc036a4104360200200441d4006a410236020020044202370244200441b8c2c800360240200441043602c403200441c8c4c8003602c003200441003602ec01200441c8e1ca003602e8012004200441c0036a3602502004200441e8016a3602c803200441c0006a41c8c2c8001043000b41002802a4e24a4105490d042004412e3602c4032004200441bc016a3602c00341002802b0e24a210141002802ace24a210241002802a8e24a2100200441f0026a41e502360200200441e8026a42c580808010370300200441e4026a4188ccc300360200200441dc026a4210370200200441d8026a41f8cbc300360200200441d0026a4201370300200441c0026a4202370300200441b0026a41086a4108360200200441cc026a200441c0036a360200200441e0cbc3003602bc02200441f0cbc3003602b402200441053602b002200241cca5c000200041024622001b200441b0026a200141e4a5c00020001b2802101102000c040b0240201a450d002019102f0b2018450d012015102f0c010b20134102490d0020112013417f6a22024105746a21064101210003400240024002400240201320022201417f6a2202490d00201320026b220a4102490d03201120014105746a2201201120024105746a2209412010ea06417f4a0d03200441b0026a41186a221c200941186a220b290000370300200441b0026a41106a221f200941106a220c290000370300200441b0026a41086a2219200941086a221e290000370300200420092900003703b00220092001290000370000201e200141086a290000370000200c200141106a290000370000200b200141186a29000037000041012101200a4103490d02200941c0006a200441b0026a412010ea06417f4a0d024100210a200621010340200141186a200141386a290000370000200141106a200141306a290000370000200141086a200141286a2900003700002001200141206a220c2900003700002000200a220b460d02200b417f6a210a200141c0006a211e200c2101201e200441b0026a412010ea06417f4a0d020c000b0b20022013104b000b4102200b6b21010b200920014105746a220120042903b002370000200141186a201c290300370000200141106a201f290300370000200141086a20192903003700000b200641606a21062000417f6a210020020d000b0b200420053602dc032004200d4100200e1b22013602d803200420133602d403200420123602d003200420113602cc03200441003602c803200420053602cc02200420013602c802200420133602c402200420123602c002200420113602bc02200441003602b8022004200f4101200f1b22003602b002200420003602c0032004200020104200200f1b2208422088a74105746a22013602b402200420013602c4032008a72109200441c0036a21010b20044190026a41086a2206200141086a29020037030020044190026a41106a220a200141106a29020037030020044190026a41186a220b200141186a290200370300200441e8016a41086a220c200441b0026a41086a221e290200370300200441e8016a41106a221c200441b0026a41106a221f290200370300200441e8016a41186a2219200441b0026a41186a2202290200370300200441e8016a41206a2220200441b0026a41206a22212802003602002004200129020037039002200420042902b0023703e801200441c0016a41206a2201200441c0036a41206a280200360200200441c0016a41186a2222200441c0036a41186a290200370300200441c0016a41106a2223200441c0036a41106a290200370300200441c0016a41086a221d200441c0036a41086a290200370300200420042902c0033703c001200420093602b402200420003602b002201e200429039002370300201f20062903003703002002200a2903003703002021200b290300370300200441003602d802200441dc026a20042903e801370200200441e4026a200c290300370200200441ec026a201c290300370200200441f4026a2019290300370200200441fc026a20202802003602002004410036028003200441a4036a20012802003602002004419c036a202229030037020020044194036a20232903003702002004418c036a201d29030037020020044184036a20042903c00137020020044180036a211e200441d8026a2106200441e0026a210a200441e8026a210b200441f0026a210c4100210103400240024002400240024002402001450d00200441206a200610a403200428022022014108460d00200428022421090c010b20022903002107200220042903d803370300200441003602c00320042903c0022114200420042903d0033703c00220042903b8022110200420042903c8033703b80220042903b0022108200420042903c00322283703b00202402008a72201450d0020042903d0022128024020042802d8022200450d00024020042802dc02450d002000102f0b20042802f002450d0020042802ec02102f0b200a2010370300200b2014370300200c2007370300200420083703d802200420283703f8020c060b200428028003450d01200441186a201e10a403200428021c2109200428021821010b200141796a220041014b0d02024020000e020400040b20042802b00221010c010b2028a721010b02402001450d00024020042802b402450d002001102f0b200441c8026a280200450d00200441c4026a280200102f0b024020042802d8022201450d00024020042802dc02450d002001102f0b20042802f002450d0020042802ec02102f0b2004280280032201450d03024020044184036a280200450d002001102f0b20044198036a280200450d0320044194036a280200102f0c030b200420013602a803200420093602ac0341002802a4e24a4104490d00200441363602bc032004412e3602b4032004200441a8036a3602b8032004200441bc016a3602b00341002802b0e24a210141002802ace24a210041002802a8e24a2109200441dc0236028004200442c5808080103703f80320044188ccc3003602f403200442103702ec03200441f8cbc3003602e803200442023703e003200442023703d003200441d0cbc3003602cc03200441083602c803200441f0cbc3003602c403200441043602c003200141e4a5c000200941024622091b28021021012004200441b0036a3602dc03200041cca5c00020091b200441c0036a20011102000b20042802d80221010c000b0b20042802b0012109024020042802b8012201450d00200141246c21022009210103400240024020012d0000220041044b0d0002400240024020000e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012002415c6a22020d000b0b024020042802b401450d002009102f0b0240200441c0006a410c6a2802002202450d0020042802442101200241246c210203400240024020012d0000220041044b0d0002400240024020000e050400010204040b2001410c6a280200450d03200141086a280200102f0c030b2001410c6a280200450d02200141086a280200102f0c020b2001410c6a280200450d01200141086a280200102f0c010b200141086a280200450d00200141046a280200102f0b200141246a21012002415c6a22020d000b0b0240200441c8006a280200450d002004280244102f0b2003240042010f0b1038000bb20503017f017e0b7f230041e0006b220224002002200136020c024002400240024002402002410c6a102a2203422088a722010d0020004100360208200042013702000c010b2002200136021420022003a722043602102002200241106a10e60120022802000d0320022802042205200228021422064105762201200120054b1b22014105742207417f4c0d010240024020010d00410121080c010b2007102d2208450d030b2001ad2103024002402005450d004100210903402006210a200241003a0058200941016a2109410021010240024002400340200a2001460d01200241386a20016a200228021022072d00003a00002002200741016a3602102002200141016a22073a00582007210120074120470d000b200241186a41186a220b200241386a41186a290300370300200241186a41106a220c200241386a41106a290300370300200241186a41086a220d200241386a41086a290300370300200220022903383703182003a72003422088a72201470d020240200141016a22062001490d002001410174220e20062006200e491b220641ffffff3f712006470d002006410574220641004e0d020b1038000b200241003602140240200141ff0171450d00200241003a00580b2003a7450d082008102f0c080b0240024020010d002006102d21080c010b200820014105742006103121080b2008450d062003428080808070832006410576ad8421030b200a20076b2106200820014105746a22012002290318370000200141186a200b290300370000200141106a200c290300370000200141086a200d29030037000020034280808080107c210320092005470d000b2002200a20076b3602140c010b2008450d040b20002003370204200020083602002004102f0b200241e0006a24000f0b103d000b1036000b41f4c8ca00412e200241386a41e4c8ca004180c8ca00103e000bac0604067f017e027f047e230041e0006b220224002002411436020c200241c7b4c600360208200241106a41c7b4c600ad4280808080c00284100210730240024020022802102203450d00200228021421042002200241186a2802002205360224200220033602200240024002402005450d0020022005417f6a3602242002200341016a36022020032d00002105200241c8006a200241206a10ee0320022802482206450d00200228024c2107200541ff01714101460d012007450d002006102f0b20024100360230200242013703282002410b36023c2002200241086a3602382002200241286a36024441012105200241dc006a41013602002002420137024c200241b885c7003602482002200241386a360258200241c4006a41d8dbc100200241c8006a103c1a200235023042208620023502288410080240200228022c450d002002280228102f0b410221070c010b200241d0006a3502004220862007ad84210841012107410021050b02402004450d002003102f0b20050d0020074101460d010240024002400240024020062802082203ad42287e2208422088a70d002008a72204417f4c0d0020062802002107024020040d002007200341286c6a210941082106200321050c020b024002402004102d2206450d002007200341286c6a2109200441286e220520034f0d032005410174220a2003200a20034b1b220a41286c22034100480d0102400240200441274b0d002003102d21060c010b2006200541286c2003103121060b20060d040b1036000b1038000b103d000b2003450d012005210a0b200920076b210942002108410021040340200720046a2203290300210b200341086a290300210c200341106a290300210d200341186a290300210e200620046a220541206a200341206a290300370300200541186a200e370300200541106a200d370300200541086a200c3703002005200b37030020084280808080107c21082009200441286a2204470d000b200a21050c010b420021080b20082005ad8421080c010b42002108410821060b200241c8006a20062008422088a710db042002350250422086200235024884210b02402008a7450d002006102f0b200241e0006a2400200b0ba30e05047f017e017f017e047f23004190016b22022400200241c8006a41186a22034200370300200241c8006a41106a22044200370300200241c8006a41086a220542003703002002420037034841aa87ca00ad4280808080c000842206100122072900002108200241286a41086a2209200741086a290000370300200220083703282007102f200520092903003703002002200229032837034841b887ca00ad4280808080b001841001220729000021082009200741086a290000370300200220083703282007102f200420022903282208370300200241f0006a41086a220a2005290300370300200241f0006a41106a220b2008370300200241f0006a41186a220c200929030037030020022002290348370370200241c8006a200241f0006a10990520022802482107200229024c21082003420037030020044200370300200542003703002002420037034820061001220329000021062009200341086a290000370300200220063703282003102f200520092903003703002002200229032837034841d987ca00ad4280808080a001841001220329000021062009200341086a290000370300200220063703282003102f200420022903282206370300200a2005290300370300200b2006370300200c200929030037030020022002290348370370200241c8006a200241f0006a10850420022d00482105200c200241e1006a290000370300200b200241d9006a290000370300200a200241d1006a290000370300200220022900493703700240024020054101460d00200241286a41186a4200370300200241286a41106a420037030020094200370300200242003703280c010b200241286a41186a200c290300370300200241286a41106a200b2903003703002009200a290300370300200220022903703703280b200241086a41086a200241286a41086a290300370300200241086a41106a200241286a41106a290300370300200241086a41186a200241286a41186a290300370300200220022903283703082002410036025020024201370348024002404108102d2209450d0020024288808080800137024c20022009360248200942b81737000020094108411010312209450d0020024290808080800237024c200942c8013700082002200936024802404110200228025022056b41074b0d00200541086a22042005490d024110410174220a2004200a20044b1b22044100480d020240024041100d002004102d21090c010b200941102004103121090b2009450d012002200436024c200220093602480b2002200541086a360250200920056a42013700000240200228024c2204200228025022056b41074b0d00200541086a220a2005490d022004410174220b200a200b200a4b1b220a4100480d020240024020040d00200a102d21090c010b20092004200a103121090b2009450d012002200a36024c200220093602480b2007410820071b21032002200541086a360250200920056a42043700002008420020071b2208422088a72209200241c8006a1069200228024c21042002280250210a02402009450d002003200941286c6a210c200321090340024002402004200a6b4120490d00200a41206a2105200228024821070c010b200a41206a2205200a490d04200441017422072005200720054b1b220b4100480d040240024020040d00200b102d21070c010b20022802482004200b103121070b2007450d032002200b36024c20022007360248200b21040b2007200a6a220a41186a200941186a290000370000200a41106a200941106a290000370000200a41086a200941086a29000037000020022005360250200a2009290000370000200941206a29030021060240200420056b41074b0d00200541086a220a2005490d042004410174220b200a200b200a4b1b220a4100480d040240024020040d00200a102d21070c010b20072004200a103121070b2007450d032002200a36024c20022007360248200a21040b2002200541086a220a360250200720056a2006370000200c200941286a2209470d000b0b024002402004200a6b4120490d00200228024821090c010b200a41206a2209200a490d02200441017422052009200520094b1b22054100480d020240024020040d002005102d21090c010b200228024820042005103121090b2009450d012002200536024c20022009360248200521040b2009200a6a220541086a200241086a41086a290300370000200541106a200241086a41106a290300370000200541186a200241086a41186a2903003700002002200a41206a220736025020052002290308370000024020042007470d00200441016a22052004490d022004410174220b2005200b20054b1b22054100480d020240024020040d002005102d21090c010b200920042005103121090b2009450d012002200536024c200220093602480b200920076a41013a0000200a41216aad4220862009ad84210602402008a7450d002003102f0b20024190016a240020060f0b1036000b1038000b2b02017e017f10fc03210202404108102d22030d001036000b200320023700002003ad42808080808001840bfb0a04047f017e0a7f017e230041a0016b22022400200241f8006a41186a4200370300200241f8006a41106a22034200370300200241f8006a41086a220442003703002002420037037841fe86ca00ad4280808080a002841001220529000021062004200541086a290000370300200220063703782005102f419087ca00ad4280808080c00084100122052900002106200241d8006a41086a2207200541086a290000370300200220063703582005102f200320022903582206370300200241086a41086a2004290300370300200241086a41106a2006370300200241086a41186a2007290300370300200220022903783703082002412036022c2002200241086a360228200241306a200241086aad42808080808004841002107302400240024002400240200228023022080d00410021070c010b200228023421092002200241306a41086a280200360244200220083602402002200241c0006a10e6010240024020022802000d002002280204220a2002280244220441057622052005200a4b1b220b4105742205417f4c0d0302400240200b0d00410121070c010b2005102d2207450d050b02400240200a450d004100210c034020042103200241003a009801200c220d41016a210c41002104024002400240034020032004460d01200241f8006a20046a200228024022052d00003a00002002200541016a3602402002200441016a22053a0098012005210420054120470d000b200241d8006a41186a220e200241f8006a41186a290300370300200241d8006a41106a220f200241f8006a41106a290300370300200241d8006a41086a2210200241f8006a41086a29030037030020022002290378370358200b200d470d02200d4101742204200c2004200c4b1b220441ffffff3f712004470d0b2004410574220441004e0d010c0b0b200241003602440240200441ff0171450d00200241003a0098010b200b0d040c050b02400240200d0d002004102d21070c010b2007200d4105742004103121070b2007450d082004410576210b0b200320056b21042007200d4105746a220d2002290358370000200d41186a200e290300370000200d41106a200f290300370000200d41086a2010290300370000200c200a470d000b2002200320056b3602440b200aad422086200bad84210620070d020c010b2007102f0b4100210720024100360260200242013703582002410b36024c2002200241286a3602482002200241d8006a3602542002418c016a41013602002002420137027c200241b885c7003602782002200241c8006a36028801200241d4006a41d8dbc100200241f8006a103c1a20023502604220862002350258841008200228025c450d002002280258102f0b2009450d002008102f0b2006420020071b2206422088a72204410574220c4104722205417f4c0d002005102d2203450d012007410120071b210b20024100360280012002200536027c200220033602782004200241f8006a10690240024020040d002002280280012105200228027821090c010b410020022802800122056b210720022802782109200228027c2103200b2104034002400240200320076a411f4d0d00200321080c010b200541206a22082005490d052003410174220a2008200a20084b1b22084100480d050240024020030d002008102d21090c010b200920032008103121090b2009450d040b200920056a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a290000370000200741606a2107200541206a210520082103200441206a2104200c41606a220c0d000b2002200836027c2002200536028001200220093602780b2005ad4220862009ad84211102402006a7450d00200b102f0b200241a0016a240020110f0b103d000b1036000b1038000bbe0605037f027e017f027e027f230041b0016b2202240041002103200241003a0040200041c8e1ca0020011b2104024002400240034020012003460d01200241206a20036a200420036a2d00003a00002002200341016a22003a00402000210320004120470d000b200241186a200241206a41186a22012903002205370300200241106a200241206a41106a22042903002206370300200241086a200241206a41086a22072903002208370300200220022903202209370300200241f0006a41186a22002005370300200241f0006a41106a220a2006370300200241f0006a41086a220b200837030020022009370370418de6c300ad4280808080e0008410012203290000210520024190016a41086a200341086a29000037030020022005370390012003102f41f0e8c600ad4280808080f00084100122032900002105200241a0016a41086a200341086a290000370300200220053703a0012003102f4120102d22030d010c020b0240200341ff0171450d00200241003a00400b200241346a4102360200200241fc006a410436020020024202370224200241b8c2c80036022020024104360274200241e0c4c80036027020024100360204200241c8e1ca003602002002200241f0006a36023020022002360278200241206a41c8c2c8001043000b20032002290370370000200341186a2000290300370000200341106a200a290300370000200341086a200b2903003700002003ad4280808080800484100322002900002105200041086a2900002106200041106a29000021082001200041186a2900003703002004200837030020072006370300200220053703202000102f2003102f41c000102d2203450d002003200229039001370000200320022903a00137001020032002290320370020200341086a20024190016a41086a290300370000200341186a200241a0016a41086a290300370000200341286a200241206a41086a290300370000200341306a200241306a290300370000200341386a200241206a41186a290300370000200241206a200310f602200241e8006a2802002100200229032021052003102f4104102d2203450d0020032000410020054201511b360000200241b0016a24002003ad4280808080c000840f0b1036000bf30e03057f047e017f230041d0016b22022400024020010d0041c8e1ca0021000b200220003602102002200136021441002103200241003a00782001417f6a2104024002400240024002400240034020012003460d01200241d8006a20036a200020036a22052d00003a00002002200541016a3602102002200341016a22053a0078200220043602142004417f6a21042005210320054120470d000b200241186a41086a200241d8006a41086a290300370300200241186a41106a200241d8006a41106a290300370300200241186a41186a200241d8006a41186a2903003703002002200229035837031841002103200241003a0078200120056b2106200020056a2100417f2101034020062003460d02200241d8006a20036a200020036a22052d00003a00002002200420036b3602142002200541016a3602102002200341016a22053a00782001417f6a21012005210320054120470d000b200241386a41086a200241d8006a41086a290300370300200241386a41106a200241d8006a41106a290300370300200241386a41186a200241d8006a41186a29030037030020022002290358370338200420056b220441016a4110490d022002200020056a220341106a3602102002200441716a220536021420054108490d0320032900002107200341086a29000021082002200441696a3602142002200341186a360210200341106a2900002109200241086a200241106a10e60120022802080d0520022802142205200228020c22034f0d040c050b0240200341ff0171450d00200241003a00780b200241ec006a4102360200200241ac016a41043602002002420237025c200241b8c2c800360258200241043602a401200241f8c4c8003602a0012002410036023c200241c8e1ca003602382002200241a0016a3602682002200241386a3602a801200241d8006a41c8c2c8001043000b0240200341ff0171450d00200241003a00780b200241ec006a4102360200200241ac016a41043602002002420237025c200241b8c2c800360258200241043602a401200241f8c4c8003602a0012002410036023c200241c8e1ca003602382002200241a0016a3602682002200241386a3602a801200241d8006a41c8c2c8001043000b200241ac016a4104360200200241ec006a41023602002002420237025c200241b8c2c800360258200241043602a401200241f8c4c8003602a0012002410036028401200241c8e1ca00360280012002200241a0016a360268200220024180016a3602a801200241d8006a41c8c2c8001043000b200241ac016a4104360200200241ec006a41023602002002420237025c200241b8c2c800360258200241043602a401200241f8c4c8003602a0012002410036028401200241c8e1ca00360280012002200241a0016a360268200220024180016a3602a801200241d8006a41c8c2c8001043000b0240024002402003417f4c0d000240024020030d00410121040c010b200310332204450d03200420022802102201200310e8061a2002200520036b3602142002200120036a3602100b2004450d03200241a0016a41186a200241186a41186a290300370300200241a0016a41106a200241186a41106a290300370300200241a0016a41086a200241186a41086a290300370300200220022903183703a001200241d8006a41186a200241386a41186a290300370300200241d8006a41106a200241386a41106a290300370300200241d8006a41086a200241386a41086a2903003703002002200229033837035820022003ad220a422086200a843702c401200220043602c00120024180016a200241a0016a200241d8006a200720082009200241c0016a108302024002402002280280014101460d002002418c016a280200210520024180016a41086a280200210020024180016a41106a2d0000210120022802840121040c010b41002104024020024194016a280200450d0020024190016a280200102f0b0b20024100360260200242013703584101102d2103024002402004450d002003450d04200341003a0000200242818080801037025c2002200336025820034101410210312203450d04200320013a0001200242828080802037025c200220033602582005200241d8006a106902400240200228025c2203200228026022016b2005490d00200228025821030c010b200120056a22062001490d042003410174220b2006200b20064b1b22064100480d040240024020030d002006102d21030c010b200228025820032006103121030b2003450d052002200636025c200220033602580b2002200120056a2206360260200320016a2004200510e8061a2006ad42208621070c010b2003450d03200341013a0000200242818080801037025c2002200336025842808080801021070b20072003ad84210702402000450d002004450d002004102f0b200241d0016a240020070f0b103d000b1038000b1036000b200241ac016a4104360200200241ec006a41023602002002420237025c200241b8c2c800360258200241043602a401200241f8c4c8003602a0012002410036028401200241c8e1ca00360280012002200241a0016a360268200220024180016a3602a801200241d8006a41c8c2c8001043000bb51003067f037e017f230041f0016b2202240041002103200241003a00a801200041c8e1ca0020011b2104024002400240024002400240024002400240034020012003460d0120024188016a20036a200420036a2d00003a00002002200341016a22003a00a8012000210320004120470d000b200241086a41086a20024188016a41086a290300370300200241086a41106a20024188016a41106a290300370300200241086a41186a20024188016a41186a290300370300200220022903880137030841002103200241003a00a801200420006a2104200120006b2101034020012003460d0220024188016a20036a200420036a2d00003a00002002200341016a22003a00a8012000210320004120470d000b200241286a41086a220320024188016a41086a290300370300200241286a41106a220020024188016a41106a290300370300200241286a41186a220120024188016a41186a22052903003703002002200229038801370328200241e8006a41186a200241086a41186a290300370300200241e8006a41106a200241086a41106a290300370300200241e8006a41086a200241086a41086a29030037030020022002290308370368200241c8006a41186a2001290300370300200241c8006a41106a2000290300370300200241c8006a41086a20032903003703002002200229032837034820024188016a200241e8006a10e80120022d00880122034102460d03410121062003450d02410121030c040b0240200341ff0171450d00200241003a00a8010b2002419c016a4102360200200241f4006a41043602002002420237028c01200241b8c2c800360288012002410436026c20024180c5c8003602682002410036024c200241c8e1ca003602482002200241e8006a360298012002200241c8006a36027020024188016a41c8c2c8001043000b0240200341ff0171450d00200241003a00a8010b2002419c016a4102360200200241f4006a41043602002002420237028c01200241b8c2c800360288012002410436026c20024180c5c8003602682002410036024c200241c8e1ca003602482002200241e8006a360298012002200241c8006a36027020024188016a41c8c2c8001043000b41012103200241b4016a2802004102460d01200241a8016a280200220141164d0d02200241a4016a280200210720052802002100200241c8006aad4280808080800484100322032900002108200341086a2900002109200341106a290000210a20024188016a41186a200341186a29000037030020024188016a41106a200a37030020024188016a41086a200937030020022008370388012003102f200241e0016a2001ad4220862000ad84200141696aad422086200041176aad84410120024188016aad428080808080048410101073200241e0016a41086a280200210120022802e001210420022802e401210b41002103024020070d000c020b2000102f0c010b41012103410021060b41012100024002400240024020030d00200141066a410220041b2200417f4c0d052000450d010b2000102d2205450d054100210720024100360290012002200036028c0120022005360288012003450d012002410136029001200541013a0000200228028c01210120022802900121000240200641ff01714101460d000240024020012000460d0020022802880121010c010b200041016a22012000490d08200041017422052001200520014b1b22054100480d080240024020000d002005102d21010c010b20022802880120002005103121010b2001450d072002200536028c01200220013602880120022802900121000b2002200041016a36029001200120006a41003a00000c030b0240024020012000460d0020022802880121010c010b200041016a22012000490d07200041017422052001200520014b1b22054100480d070240024020000d002005102d21010c010b20022802880120002005103121010b2001450d062002200536028c01200220013602880120022802900121000b2002200041016a36029001200120006a41013a00000c020b200241003602900120024201370388014101102d2205450d042002410136028c01200220053602880120022802900121070b2002200741016a36029001200520076a41003a0000200228028c0121052002280290012100024020040d000240024020052000460d0020022802880121010c010b200041016a22012000490d06200041017422052001200520014b1b22054100480d060240024020000d002005102d21010c010b20022802880120002005103121010b2001450d052002200536028c01200220013602880120022802900121000b2002200041016a36029001200120006a41003a00000c010b0240024020052000460d0020022802880121050c010b200041016a22052000490d05200041017422072005200720054b1b22074100480d050240024020000d002007102d21050c010b20022802880120002007103121050b2005450d042002200736028c01200220053602880120022802900121000b2002200041016a36029001200520006a41013a0000200120024188016a106902400240200228028c01220520022802900122006b2001490d0020022802880121050c010b200020016a22072000490d05200541017422002007200020074b1b22004100480d050240024020050d002000102d21050c010b20022802880120052000103121050b2005450d042002200036028c01200220053602880120022802900121000b2002200020016a36029001200520006a2004200110e8061a0b200235029001422086200235028801842108024020030d002004450d00200b450d002004102f0b200241f0016a240020080f0b41172001104b000b103d000b1036000b1038000ba00f04047f057e027f037e230041e0036b2202240041002103200241003a00b802200041c8e1ca0020011b2104024002400240024002400240034020012003460d0120024198026a20036a200420036a2d00003a00002002200341016a22003a00b8022000210320004120470d000b200241e8006a41186a20024198026a41186a22052903002206370300200241e8006a41106a20024198026a41106a22042903002207370300200241e8006a41086a20024198026a41086a220329030022083703002002200229039802220937036820024188016a41186a200637030020024188016a41106a200737030020024188016a41086a20083703002002200937038801200241a8016a20024188016a10e8014101210020022d00a801417f6a41ff01714102490d05200241a8016a41106a2903002109200241a8016a41086a2201290300210a200241cc016a280200210b200241d0016a280200210c420021062005420037030020044200370300200342003703002002420037039802418de6c300ad4280808080e000841001220029000021072003200041086a29000037030020022007370398022000102f419ce6c300ad4280808080e00084100122002900002107200241c0036a41086a2205200041086a290000370300200220073703c0032000102f200420022903c0032207370300200241f0026a41086a2003290300370300200241f0026a41106a2007370300200241f0026a41186a200529030037030020022002290398023703f002200241e0006a200241f0026a412010950141002002280264410020022802601b2203200c6b2200200020034b1b2204450d0420024198026a20024188016a108d0242002106200241d0006a200229039802220820024198026a41086a290300220d428080a8ec85afd1b101420010ee064200200bad22072002290350220e7d220f200f2007564200200241d0006a41086a2903002007200e54ad7c7d22074200522007501b22001b220e4200200720001b220784500d04420121062008428080d287e2bc2d544100200d501b0d04200241c0006a2004ad4200200e200710ed06200241306a2002290340200241c0006a41086a290300428080e983b1de16420010ed062008428080aef89dc3527c2206200a200a2006562009200d2006200854ad7c427f7c22065620092006511b22001b22072002290330220a2007200a542006200920001b2207200241306a41086a29030022095420072009511b22001b22062007200920001b220784500d0120024198026a20024188016a108d0220022903b802220a4200200820067d22092009200856200d20077d2008200654ad7d2208200d562008200d511b22041b220e58200241c0026a29030022094200200820041b220858200920085122041bad210d200a200e56200920085620041b0d032000450d020c030b0240200341ff0171450d00200241003a00b8020b200241ac026a4102360200200241b4016a41043602002002420237029c02200241b8c2c80036029802200241043602ac0120024194c5c8003602a801200241003602f402200241c8e1ca003602f0022002200241a8016a3602a8022002200241f0026a3602b00120024198026a41c8c2c8001043000b4201210d20000d010b20022006370380022002200737038802420321060c010b20024190026a200737030020022006370388022002200d37038002420221060b200241f0026a200141d00010e8061a200241c0036a41106a20024180026a41086a290300370300200241c0036a41186a20024180026a41106a290300370300200220063703c00320022002290380023703c80320024198026a20024188016a200241f0026a2003200241c0036a109f024101210141012100024020022d009802417f6a41ff01714102490d0020024198026a41106a290300210720024198026a41086a2903002109200241b4026a280200210420024198026a41186a280200210c200241bc026a3502002106200241f0026a20024188016a108d02200241206a20022903f0022208200241f0026a41086a290300220d428080a8ec85afd1b101420010ee06200241106a420020062002290320220a7d220e200e2006564200200241206a41086a2903002006200a54ad7c7d22064200522006501b22001b220a4200200620001b2206428080e983b1de16420010ed060240200a200684500d0002402008428080d287e2bc2d544100200d501b0d0020022008428080aef89dc3527c2206200920092006562007200d2006200854ad7c427f7c22065620072006511b22001b2006200720001b2002290310200241106a41086a29030010ee0620022903002206a7417f2006428080808010544100200241086a290300501b1b210002402004450d00200c102f0b200020036a210c41002101410021000c030b4196a7c400419b0141b4a8c4001055000b410021002004450d00200c102f0b0b02404101102d2203450d000240024002402000450d00200341013a000020034101410210312203450d03200341013a00010c010b200341003a000020034101410210312103024020014101460d002003450d03200341003a000120034102410610312203450d032003200c3600024280808080e00021060c020b2003450d02200341013a00010b42808080802021060b200241e0036a240020062003ad840f0b1036000bb00402027f027e230041c0076b22022400024002402001450d00200220003602100c010b200241c8e1ca003602100b20022001360214200241f8036a200241106a10a40402400240024020022903e0044203510d00200241186a200241f8036a41c80310e8061a200228021422014104490d0120022802102200280000210320022001417c6a3602142002200041046a360210200241f8036a200241186a41c80310e8061a200241e0036a20024190056a220110f1022002200320022903e0032204a722002004422888a74200420010f004200241086a29030021042002290300210520022d00e40321032001108e014104102d2201450d022001200036000020014104410810312201450d02200120033a000420014108411510312201450d02200120053700052001410d6a2004370000200241c0076a24002001ad4280808080d002840f0b200241ec036a41043602002002412c6a41023602002002420237021c200241b8c2c800360218200241043602e403200241acc5c8003602e003200241003602f403200241c8e1ca003602f0032002200241e0036a3602282002200241f0036a3602e803200241186a41c8c2c8001043000b200241ec036a41043602002002418c046a4102360200200242023702fc03200241b8c2c8003602f803200241043602e403200241acc5c8003602e003200241003602f403200241c8e1ca003602f0032002200241e0036a360288042002200241f0036a3602e803200241f8036a41c8c2c8001043000b1036000bb11305037f017e027f037e037f230041a0026b220224000240024020010d002002200136020c200241c8e1ca003602080c010b20022001417f6a36020c2002200041016a36020820002d0000220041014b0d00410021010240024002400240024020000e020100010b2002200241086a10e60120022802000d04200228020c220320022802042200490d042000417f4c0d010240024020000d00410121010c010b200010332201450d03200120022802082204200010e8061a2002200320006b36020c2002200420006a3602080b2001450d042000ad220542208620058421050b0240024020010d00410021040c010b2005422088a72200417f4c0d01024020000d00410121040c010b2000102d2204450d0220042001200010e8061a0b200241f0016a41086a2000360200200220003602f401200220043602f001200241e7e485f3063602d001200241106a200241f0016a10f40120022802142106200241d0016a200235021842208620022802102207ad84102222032900002108200341086a2900002109200341106a290000210a200241106a41186a220b200341186a290000370300200241106a41106a220c200a370300200241106a41086a220d2009370300200220083703102003102f20024190016a41186a200b29030037030020024190016a41106a200c29030037030020024190016a41086a200d290300370300200220022903103703900102402006450d002007102f0b02402004450d002000450d002004102f0b0240024020010d00410021040c010b2005422088a72200417f4c0d01024020000d00410121040c010b2000102d2204450d0220042001200010e8061a0b200241f0016a41086a2000360200200220003602f401200220043602f001200241e2c289ab063602d001200241106a200241f0016a10f40120022802142106200241d0016a200235021842208620022802102207ad84102322032900002108200341086a2900002109200341106a290000210a200241106a41186a220b200341186a290000370300200241106a41106a220c200a370300200241106a41086a220d2009370300200220083703102003102f200241b0016a41186a200b290300370300200241b0016a41106a200c290300370300200241b0016a41086a200d290300370300200220022903103703b00102402006450d002007102f0b02402004450d002000450d002004102f0b0240024020010d00410021040c010b2005422088a72200417f4c0d01024020000d00410121040c010b2000102d2204450d0220042001200010e8061a0b200241f0016a41086a2000360200200220003602f401200220043602f001200241e9dabdf30636029002200241106a200241f0016a10f4012002280214210620024190026a200235021842208620022802102207ad84102322032900002108200341086a2900002109200341106a290000210a200241106a41186a220b200341186a290000370300200241106a41106a220c200a370300200241106a41086a220d2009370300200220083703102003102f200241d0016a41186a200b290300370300200241d0016a41106a200c290300370300200241d0016a41086a200d290300370300200220022903103703d00102402006450d002007102f0b02402004450d002000450d002004102f0b0240024020010d00410021040c010b2005422088a72200417f4c0d01024020000d00410121040c010b2000102d2204450d0220042001200010e8061a0b20024190026a41086a200036020020022000360294022002200436029002200241e1ea91cb0636029c02200241106a20024190026a10f401200228021421062002419c026a200235021842208620022802102207ad84102322032900002108200341086a2900002109200341106a290000210a200241106a41186a220b200341186a290000370300200241106a41106a220c200a370300200241106a41086a220d2009370300200220083703102003102f200241f0016a41186a200b290300370300200241f0016a41106a200c290300370300200241f0016a41086a200d290300370300200220022903103703f00102402006450d002007102f0b02402004450d002000450d002004102f0b200241106a41086a220320024190016a41086a290300370300200241106a41106a220420024190016a41106a290300370300200241106a41186a220620024190016a41186a290300370300200241386a200241b0016a41086a290300370300200241c0006a200241b0016a41106a290300370300200241c8006a200241b0016a41186a2903003703002002200229039001370310200220022903b001370330200241e8006a200241d0016a41186a290300370300200241e0006a200241d0016a41106a290300370300200241d8006a200241d0016a41086a290300370300200241f8006a200241f0016a41086a29030037030020024180016a200241f0016a41106a29030037030020024188016a200241f0016a41186a290300370300200220022903d001370350200220022903f0013703704120102d2200450d0120002002290310370000200041186a2006290300370000200041106a2004290300370000200041086a20032903003700002000412041c00010312200450d012000200241106a41206a2203290000370020200041386a200341186a290000370000200041306a200341106a290000370000200041286a200341086a290000370000200041c00041800110312200450d012000200241106a41c0006a22032900003700402000200241f0006a2204290000370060200041d8006a200341186a290000370000200041d0006a200341106a290000370000200041c8006a200341086a290000370000200041e8006a200441086a290000370000200041f0006a200441106a290000370000200041f8006a200441186a29000037000002402001450d002005a7450d002001102f0b418401102d2201450d01200242840137021420022001360210418001200241106a10690240024020022802142201200228021822036b418001490d0020034180016a2104200228021021010c010b20034180016a22042003490d03200141017422062004200620044b1b22064100480d030240024020010d002006102d21010c010b200228021020012006103121010b2001450d0220022006360214200220013602100b200120036a200041800110e8061a2000102f200241a0026a24002004ad4220862001ad840f0b103d000b1036000b1038000b200241fc016a4104360200200241246a410236020020024202370214200241b8c2c800360210200241043602f401200241c0c5c8003602f001200241003602d401200241c8e1ca003602d0012002200241f0016a3602202002200241d0016a3602f801200241106a41c8c2c8001043000b890803037f017e057f230041b0026b22022400024002402001450d00200220003602080c010b200241c8e1ca003602080b2002200136020c2002200241086a10e60102400240024020022802000d00200228020c220320022802042201490d0002402001417f4c0d000240024020010d00410121000c010b200110332200450d03200020022802082204200110e8061a2002200320016b36020c2002200420016a3602080b2000450d0120022001ad220542208620058422054220883e02ac02200220003602a802200241a0016a200241a8026a10ee020240024020022d00a0014101470d00200241003602100c010b200241206a200241a0016a41017241800110e8061a200241a0016a200241206a41800110e8061a200241106a200241a0016a10ed020b02402005a7450d002000102f0b02400240200228021022060d00410121000c010b200241186a2802004104744105722200417f4c0d010b2000102d2201450d02200241013602a801200220003602a401200220013602a0010240024020060d00200141003a00002001ad4280808080108421050c010b200141013a0000200241106a41086a2802002201200241a0016a10690240024020010d0020023502a80142208620023502a0018421050c010b200620014104746a210720062103034020032802002108200341086a2802002209200241a0016a10690240024020022802a401220020022802a801220a6b2009490d0020022802a00121010c010b200a20096a2201200a490d07200041017422042001200420014b1b22044100480d070240024020000d002004102d21010c010b20022802a00120002004103121010b2001450d06200220043602a401200220013602a001200421000b2002200a20096a22043602a8012001200a6a2008200910e8061a0240200020046b41034b0d00200441046a22092004490d072000410174220a2009200a20094b1b22094100480d070240024020000d002009102d21010c010b200120002009103121010b2001450d06200220093602a401200220013602a0010b2002200441046a22003602a801200120046a2003410c6a280000360000200341106a22032007470d000b2000ad4220862001ad8421052006450d010b0240200241186a2802002201450d00200141047421002006210103400240200141046a280200450d002001280200102f0b200141106a2101200041706a22000d000b0b2002280214450d002006102f0b200241b0026a240020050f0b103d000b2002412c6a4104360200200241b4016a4102360200200242023702a401200241b8c2c8003602a00120024104360224200241e0c5c80036022020024100360214200241c8e1ca003602102002200241206a3602b0012002200241106a360228200241a0016a41c8c2c8001043000b1036000b1038000b02000ba20405027f017e027f027e027f230041d0006b2203240041eba1ca00ad4280808080f00084100122042900002105200341086a41086a2206200441086a290000370300200320053703082004102f4183cbc800ad4280808080b00284100122042900002105200341186a41086a2207200441086a290000370300200320053703182004102f2003200136024c200341cc006aad4280808080c00084100322042900002105200441086a2900002108200441106a2900002109200341286a41186a2201200441186a290000370300200341286a41106a220a2009370300200341286a41086a220b2008370300200320053703282004102f024041c000102d2204450d00200420032903083700002004200329031837001020042003290328370020200441086a2006290300370000200441186a2007290300370000200441286a200b290300370000200441306a200a290300370000200441386a20012903003700004120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a2900003700002001ad4280808080800484100122022900002105200341286a41086a2206200241086a290000370300200320053703282002102f2001102f200441c00041800110312204450d0020042003290328370040200441c8006a200629030037000020004280818080800a37020420002004360200200341d0006a24000f0b1036000ba20405027f017e027f027e027f230041d0006b2203240041eba1ca00ad4280808080f00084100122042900002105200341086a41086a2206200441086a290000370300200320053703082004102f4196cbc800ad4280808080b00284100122042900002105200341186a41086a2207200441086a290000370300200320053703182004102f2003200136024c200341cc006aad4280808080c00084100322042900002105200441086a2900002108200441106a2900002109200341286a41186a2201200441186a290000370300200341286a41106a220a2009370300200341286a41086a220b2008370300200320053703282004102f024041c000102d2204450d00200420032903083700002004200329031837001020042003290328370020200441086a2006290300370000200441186a2007290300370000200441286a200b290300370000200441306a200a290300370000200441386a20012903003700004120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a2900003700002001ad4280808080800484100122022900002105200341286a41086a2206200241086a290000370300200320053703282002102f2001102f200441c00041800110312204450d0020042003290328370040200441c8006a200629030037000020004280818080800a37020420002004360200200341d0006a24000f0b1036000bbe1203027f037e047f230041e0036b2201240041eba1ca00ad4280808080f00084100122022900002103200141d0006a41086a200241086a290000370300200120033703502002102f41a5c6c800ad4280808080a0018410012202290000210320014190026a41086a200241086a29000037030020012003370390022002102f024002400240024002404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002103200041086a2900002104200041106a2900002105200141d8026a41186a2206200041186a290000370300200141d8026a41106a22072005370300200141d8026a41086a2004370300200120033703d8022000102f2002102f41c000102d2202450d00200220012903503700002002200129039002370010200220012903d802370020200241086a200141d0006a41086a290300370000200241186a20014190026a41086a290300370000200241286a200141d8026a41086a290300370000200241306a2007290300370000200241386a2006290300370000200141d8026a200241c000109b04024020012d00dc02220041024622060d002002ad428080808080088410050b2001410d6a200141d8026a41057241c30010e8061a200141d0006a2001410d6a41c30010e8061a20060d04200120003a00980120014198016a410172200141d0006a41c10010e8062108200141ba016a21060240024020012d00b90122074101460d00200141003602e0010c010b200141e0016a2006109a040b02400240024020004101460d00200141003602f0010c010b200141f0016a2008109a0420012802f0010d010b024020074101460d0041eba1ca00ad4280808080f00084100122002900002103200141b0036a41086a2206200041086a290000370300200120033703b0032000102f4195c6c800ad428080808080028410012200290000210320014190026a41086a2207200041086a29000037030020012003370390022000102f200141d8026a41086a2006290300370300200141f0026a2007290300370300200120012903b0033703d80220012001290390023703e80220014190026a200141d8026a1088012001350298024220862001280290022200ad841005200128029402450d042000102f0c040b41eba1ca00ad4280808080f00084100122002900002103200141b0036a41086a2207200041086a290000370300200120033703b0032000102f4195c6c800ad428080808080028410012200290000210320014190026a41086a2208200041086a29000037030020012003370390022000102f200141d8026a41086a2007290300370300200141d8026a41186a2008290300370300200120012903b0033703d80220012001290390023703e80220014190026a200141d8026a108801200128029002210720013502980221034120102d2200450d0120002006290000370000200041186a200641186a290000370000200041106a200641106a290000370000200041086a200641086a29000037000020034220862007ad842000ad428080808080048410042000102f200128029402450d032007102f0c030b20014180026a41086a200141f0016a41086a2802002200360200200120012903f00122033703800220014190026a2003a722072000109b04024020012d0094024102470d00200141003602a803200142013703a003200141b0036a41146a4129360200200141bc036a410b360200200141073602cc03200141eba1ca003602c8032001410b3602b4032001410a3602d403200141a5c6c8003602d003200120014180026a3602c0032001200141d0036a3602b8032001200141c8036a3602b0032001200141a0036a3602dc03200141d8026a41146a4103360200200142033702dc022001419090c4003602d8022001200141b0036a3602e802200141dc036a41d8dbc100200141d8026a103c1a20013502a80342208620013502a00384100820012802a403450d0220012802a003102f0c020b200141d8026a20014190026a41c80010e8061a2001419d036a200141b9016a220641206a2d00003a000020014195036a200641186a2900003700002001418d036a200641106a29000037000020014185036a200641086a290000370000200141fd026a2006290000370000200141003602b803200142013703b003200141d8026a200141b0036a109502200141d8026a410472200141b0036a10ce0220012802b40321062000ad4220862007ad8420013502b80342208620012802b0032200ad8410042006450d012000102f0c010b1036000b0240200128028402450d00200128028002102f0b410121060c010b410021060b0240024020012802e00122000d00410021070c010b20014180026a41086a200141e0016a41086a2802002207360200200120012903e00122033703800220014190026a2003a722082007109b040240024020012d0094024102470d00200141003602a803200142013703a003200141b0036a41146a4129360200200141bc036a410b360200200141073602cc03200141eba1ca003602c8032001410b3602b4032001410a3602d403200141a5c6c8003602d003200120014180026a3602c0032001200141d0036a3602b8032001200141c8036a3602b0032001200141a0036a3602dc03200141d8026a41146a4103360200200142033702dc02200141b48fc4003602d8022001200141b0036a3602e802200141dc036a41d8dbc100200141d8026a103c1a20013502a80342208620013502a00384100820012802a403450d0120012802a003102f0c010b200141d8026a20014190026a41c80010e8061a200141fc026a200141b8016a2d00003a0000200141f4026a200141b0016a290300370200200141ec026a200141a8016a290300370200200141e4026a20014198016a41086a29030037020020012001290398013702dc02200141003602b803200142013703b003200141d8026a200141b0036a109502200141d8026a410472200141b0036a10ce0220012802b40321092007ad4220862008ad8420013502b80342208620012802b0032207ad8410042009450d002007102f0b0240200128028402450d00200128028002102f0b410121070b0240200620012802f001220845720d0020012802f401450d002008102f0b2007200045720d0020012802e401450d002000102f0b2002102f200141e0036a24000bf11105027f017e027f037e047f230041f0036b2201240041eba1ca00ad4280808080f0008410012202290000210320014180026a41086a200241086a29000037030020012003370380022002102f418bc6c800ad4280808080a0018410012202290008210320022800042104200228000021052002102f024002400240024002404120102d2202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a2900003700002002ad4280808080800484100322002900002106200041086a2900002107200041106a2900002108200141d8026a41186a2209200041186a290000370300200141d8026a41106a220a2008370300200141d8026a41086a2007370300200120063703d8022000102f2002102f41c000102d2202450d002002200129038002370000200220033700182002200436001420022005360010200220012903d802370020200241086a20014180026a41086a290300370000200241286a200141d8026a41086a290300370000200241306a200a290300370000200241386a2009290300370000200141d8026a200241c000109804024020012d00e802220041024622040d002002ad428080808080088410050b20012802dc02210520012802d80221092001200141ec026a41c40010e806220141c4006a200141c40010e8061a024020040d0020014188016a200141c4006a41c20010e8061a200141aa016a21040240024020012d00a901220a4101460d00200141003602d0010c010b200141d0016a20041097040b02400240024020012d0088014101460d00200141003602e0010c010b200141e0016a20014188016a41017210970420012802e0010d010b0240200a4101460d0041eba1ca00ad4280808080f00084100122042900002103200141c0036a41086a220a200441086a290000370300200120033703c0032004102f41fbc5c800ad428080808080028410012204290000210320014180026a41086a220b200441086a29000037030020012003370380022004102f200141d8026a41086a200a290300370300200141f0026a200b290300370300200120012903c0033703d80220012001290380023703e80220014180026a200141d8026a1088012001350288024220862001280280022204ad841005200128028402450d052004102f0c050b41eba1ca00ad4280808080f000841001220a2900002103200141c0036a41086a220b200a41086a290000370300200120033703c003200a102f41fbc5c800ad42808080808002841001220a290000210320014180026a41086a220c200a41086a2900003703002001200337038002200a102f200141d8026a41086a200b290300370300200141d8026a41186a200c290300370300200120012903c0033703d80220012001290380023703e80220014180026a200141d8026a108801200128028002210b20013502880221034120102d220a450d02200a2004290000370000200a41186a200441186a290000370000200a41106a200441106a290000370000200a41086a200441086a2900003700002003422086200bad84200aad42808080808004841004200a102f200128028402450d04200b102f0c040b200141f0016a41086a200141e0016a41086a2802002204360200200120012903e00122033703f00120014180026a2003a7220b2004109804024020012d0090024102460d00200141d8026a20014180026a41d80010e8061a200141ad036a200141a9016a220a41206a2d00003a0000200141a5036a200a41186a2900003700002001419d036a200a41106a29000037000020014195036a200a41086a2900003700002001418d036a200a290000370000200120043602c4032001200b3602c003200141d8026a200141c0036a10ea0520012802dc02450d0320012802d802102f0c030b200141003602b803200142013703b003200141c0036a41146a4129360200200141cc036a410b360200200141073602dc03200141eba1ca003602d8032001410b3602c4032001410a3602e4032001418bc6c8003602e0032001200141f0016a3602d0032001200141e0036a3602c8032001200141d8036a3602c0032001200141b0036a3602ec03200141d8026a41146a4103360200200142033702dc022001419090c4003602d8022001200141c0036a3602e802200141ec036a41d8dbc100200141d8026a103c1a20013502b80342208620013502b00384100820012802b403450d0220012802b003102f0c020b0c040b1036000b024020012802f401450d0020012802f001102f0b4101210a0c010b4100210a0b0240024020012802d00122040d004100210b0c010b200141f0016a41086a200141d0016a41086a280200220b360200200120012903d00122033703f00120014180026a2003a7220c200b1098040240024020012d0090024102460d00200141d8026a20014180026a41d80010e8061a2001418c036a200141a8016a2d00003a000020014184036a200141a0016a290300370200200141fc026a20014198016a290300370200200141f4026a20014188016a41086a29030037020020012001290388013702ec022001200b3602c4032001200c3602c003200141d8026a200141c0036a10ea0520012802dc02450d0120012802d802102f0c010b200141003602b803200142013703b003200141c0036a41146a4129360200200141cc036a410b360200200141073602dc03200141eba1ca003602d8032001410b3602c4032001410a3602e4032001418bc6c8003602e0032001200141f0016a3602d0032001200141e0036a3602c8032001200141d8036a3602c0032001200141b0036a3602ec03200141d8026a41146a4103360200200142033702dc02200141b48fc4003602d8022001200141c0036a3602e802200141ec036a41d8dbc100200141d8026a103c1a20013502b80342208620013502b00384100820012802b403450d0020012802b003102f0b024020012802f401450d0020012802f001102f0b4101210b0b0240200a20012802e001220c45720d0020012802e401450d00200c102f0b0240200b200445720d0020012802d401450d002004102f0b20054521040b2002102f024020004102460d0020044101710d002009102f0b200141f0036a24000b800501087f230041106b220224002002410036020820024201370300200028020021032000280208220420021069024002400240024020040d0020022802042105200228020821060c010b200441057421072002280204210520022802082104034002400240200520046b4120490d00200441206a2106200228020021080c010b200441206a22062004490d04200541017422082006200820064b1b22094100480d040240024020050d002009102d21080c010b200228020020052009103121080b2008450d032002200936020420022008360200200921050b200820046a220441086a200341086a290000370000200441106a200341106a290000370000200441186a200341186a290000370000200220063602082004200329000037000020062104200341206a2103200741606a22070d000b0b200028020c210702400240200520066b4104490d00200641046a2103200228020021040c010b200641046a22032006490d02200541017422042003200420034b1b22084100480d020240024020050d002008102d21040c010b200228020020052008103121040b2004450d012002200836020420022004360200200821050b20022003360208200420066a200736000020002d00102106024020052003470d00200341016a22052003490d02200341017422082005200820054b1b22054100480d020240024020030d002005102d21040c010b200420032005103121040b2004450d0120022005360204200220043602000b2002200341016a360208200420036a20063a0000200041146a200210ce02200228020421032001290200200235020842208620022802002204ad84100402402003450d002004102f0b200241106a24000f0b1036000b1038000b860403027f037e037f230041c0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41a9cbc800ad4280808080d00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f02404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322012900002104200141086a2900002105200141106a2900002106200241206a41186a2207200141186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202001102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a2201290300370000200341286a200241206a41086a2209290300370000200341306a2008290300370000200341386a2007290300370000200241206a2003109c0520012009280200360200200220022903203703100240200228022c2207450d002000200229031037020020002002290330370210200041086a20012802003602000b2000200736020c2003102f200241c0006a24000f0b1036000b960603027f037e047f230041c0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003102f41a9cbc800ad4280808080d00184100122032900002104200241106a41086a200341086a290000370300200220043703102003102f024002404120102d2203450d0020032000290000370000200341186a200041186a290000370000200341106a200041106a290000370000200341086a200041086a2900003700002003ad4280808080800484100322002900002104200041086a2900002105200041106a2900002106200241206a41186a2207200041186a290000370300200241206a41106a22082006370300200241206a41086a2005370300200220043703202000102f2003102f41c000102d2203450d00200320022903003700002003200229031037001020032002290320370020200341086a200241086a290300370000200341186a200241106a41086a290300370000200341286a200241206a41086a290300370000200341306a2008290300370000200341386a20072903003700002002410036022820024201370320200128020021074104102d2200450d002000200736000020024284808080c000370224200220003602202001280204210720004104410810312200450d0020002007360004200242888080808001370224200220003602202001280208210720004108411010312200450d00200020073600082002410c3602282002411036022420022000360220200128020c2109200141146a2802002201200241206a10690240024020022802242207200228022822006b20014102742208490d00200228022021010c010b200020086a22012000490d022007410174220a2001200a20014b1b220a4100480d020240024020070d00200a102d21010c010b20022802202007200a103121010b2001450d012002200a36022420022001360220200a21070b200120006a2009200810e8061a2003ad4280808080800884200020086aad4220862001ad84100402402007450d002001102f0b2003102f200241c0006a24000f0b1036000b1038000be80302027f037e230041c0006b2201240041eba1ca00ad4280808080f00084100122022900002103200141086a200241086a290000370300200120033703002002102f41b6cbc800ad4280808080900184100122022900002103200141106a41086a200241086a290000370300200120033703102002102f02404104102d2202450d0020024104412010312202450d0020022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200028022021002002412041c00010312202450d00200220003600202002ad4280808080c00484100322002900002103200041086a2900002104200041106a2900002105200141206a41186a200041186a290000370300200141206a41106a2005370300200141206a41086a2004370300200120033703202000102f2002102f41c000102d2200450d00200020012903003700002000200129031037001020002001290320370020200041086a200141086a290300370000200041186a200141106a41086a290300370000200041286a200141206a41086a290300370000200041306a200141306a290300370000200041386a200141206a41186a2903003700002000ad428080808080088410052000102f200141c0006a24000f0b1036000bab0b05027f027e027f047e037f230041d0006b22012400200141286a200010bd03200135023042208620012802282202ad8410130240200128022c450d002002102f0b200141286a200010c003200135023042208620012802282202ad8410130240200128022c450d002002102f0b200141286a200010c203200135023042208620012802282202ad8410130240200128022c450d002002102f0b41eba1ca00ad4280808080f000842203100122022900002104200141086a41086a2205200241086a290000370300200120043703082002102f4197cfc800ad4280808080b00284100122022900002104200141186a41086a2206200241086a290000370300200120043703182002102f2001200036024c200141cc006aad22044280808080c000842207100322022900002108200241086a2900002109200241106a290000210a200141286a41186a220b200241186a290000370300200141286a41106a220c200a370300200141286a41086a220d2009370300200120083703282002102f024041c000102d2202450d00200220012903083700002002200129031837001020022001290328370020200241086a2005290300370000200241186a2006290300370000200241286a200d290300370000200241306a200c290300370000200241386a200b2903003700002002ad428080808080088410052002102f20031001220229000021032005200241086a290000370300200120033703082002102f41e5cac800ad42808080808002841001220229000021032006200241086a290000370300200120033703182002102f2001200036024c2007100322022900002103200241086a2900002107200241106a2900002108200b200241186a290000370300200c2008370300200d2007370300200120033703282002102f41c000102d2202450d00200220012903083700002002200129031837001020022001290328370020200241086a200141086a41086a2205290300370000200241186a200141186a41086a2206290300370000200241286a200141286a41086a220b290300370000200241306a200141286a41106a220c290300370000200241386a200141286a41186a220d2903003700002002ad428080808080088410052002102f41eba1ca00ad4280808080f0008422031001220229000021072005200241086a290000370300200120073703082002102f41f5cac800ad4280808080e001841001220229000021072006200241086a290000370300200120073703182002102f2001200036024c20044280808080c000842204100322022900002107200241086a2900002108200241106a2900002109200d200241186a290000370300200c2009370300200b2008370300200120073703282002102f41c000102d2202450d00200220012903083700002002200129031837001020022001290328370020200241086a2005290300370000200241186a2006290300370000200241286a200b290300370000200241306a200c290300370000200241386a200d2903003700002002ad428080808080088410052002102f20031001220229000021032005200241086a290000370300200120033703082002102f41dca0ca00ad4280808080d002841001220229000021032006200241086a290000370300200120033703182002102f2001200036024c2004100322022900002103200241086a2900002104200241106a2900002107200d200241186a290000370300200c2007370300200b2004370300200120033703282002102f41c000102d2202450d00200220012903083700002002200129031837001020022001290328370020200241086a200141086a41086a290300370000200241186a200141186a41086a290300370000200241286a200141286a41086a290300370000200241306a200141386a290300370000200241386a200141286a41186a2903003700002002ad428080808080088410052002102f200141d0006a24000f0b1036000b8a0504017f027e037f027e230041c0016b220224002002200110b50302400240024020022d00004101460d0042002103420021040c010b20024180016a41186a2205200241196a29000037030020024180016a41106a2206200241116a29000037030020024180016a41086a2207200241096a290000370300200220022900013703800141eba1ca00ad4280808080f00084100122012900002103200241a0016a41086a200141086a290000370300200220033703a0012001102f41a7cac800ad4280808080e00084100122012900002103200241b0016a41086a200141086a290000370300200220033703b0012001102f4120102d2201450d012001200229038001370000200141186a2005290300370000200141106a2006290300370000200141086a20072903003700002001ad4280808080800484100322052900002103200541086a2900002104200541106a2900002108200241286a41186a200541186a290000370300200241286a41106a2008370300200241286a41086a2004370300200220033703282005102f2001102f41c000102d2201450d01200120022903a001370000200120022903b00137001020012002290328370020200141086a200241a0016a41086a290300370000200141186a200241b0016a41086a290300370000200141286a200241286a41086a290300370000200141306a200241386a290300370000200141386a200241286a41186a2205290300370000200241286a200110a0052005290300210820022903382109200228024c210620022802482107200228025421052001102f420021034200210420054102460d0002402006450d002007102f0b20092103200821040b2000200337030020002004370308200241c0016a24000f0b1036000be20603027f017e057f230041d0006b2203240041eba1ca00ad4280808080f00084100122042900002105200341086a200441086a290000370300200320053703002004102f41b6cac800ad4280808080b00184100122042900002105200341106a41086a200441086a290000370300200320053703102004102f2003200136022c20032003412c6aad4280808080c00084100622042900003703302004102f200341c4006a200341306a360200200341003a00482003200341306a41086a220636023c20032003412c6a3602402003200341306a360238200341206a200341386a106c0240024002400240024002402003280228220741206a2208417f4c0d0020032802202109024002402008450d002008102d2204450d062008410f4d0d012008210a0c050b4110210a4110102d21040c030b200841017422014110200141104b1b220a41004e0d010c050b103d000b20042008200a103121040b2004450d010b20042003290300370000200441086a200341086a29030037000002400240200a4170714110460d00200a21010c010b200a41017422014120200141204b1b22014100480d022004200a200110312204450d010b20042003290310370010200441186a200341106a41086a29030037000002400240200141606a2007490d002001210a0c010b2007415f4b0d022001410174220a2008200a20084b1b220a4100480d0220042001200a10312204450d010b200441206a2009200710e8061a02402003280224450d002009102f0b4120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001ad4280808080800484100622022900003703302002102f200341c4006a200141206a360200200341003a0048200320013602402003200636023c2003200341306a360238200341106a200341386a106c2001102f2003280210210702400240200a20086b20032802182201490d00200120086a2102200a21090c010b200820016a22022008490d02200a41017422092002200920024b1b22094100480d022004200a200910312204450d010b200420086a2007200110e8061a02402003280214450d002007102f0b200020023602082000200936020420002004360200200341d0006a24000f0b1036000b1038000be20603027f017e057f230041d0006b2203240041eba1ca00ad4280808080f00084100122042900002105200341086a200441086a290000370300200320053703002004102f41c1cac800ad4280808080a00284100122042900002105200341106a41086a200441086a290000370300200320053703102004102f2003200136022c20032003412c6aad4280808080c00084100622042900003703302004102f200341c4006a200341306a360200200341003a00482003200341306a41086a220636023c20032003412c6a3602402003200341306a360238200341206a200341386a106c0240024002400240024002402003280228220741206a2208417f4c0d0020032802202109024002402008450d002008102d2204450d062008410f4d0d012008210a0c050b4110210a4110102d21040c030b200841017422014110200141104b1b220a41004e0d010c050b103d000b20042008200a103121040b2004450d010b20042003290300370000200441086a200341086a29030037000002400240200a4170714110460d00200a21010c010b200a41017422014120200141204b1b22014100480d022004200a200110312204450d010b20042003290310370010200441186a200341106a41086a29030037000002400240200141606a2007490d002001210a0c010b2007415f4b0d022001410174220a2008200a20084b1b220a4100480d0220042001200a10312204450d010b200441206a2009200710e8061a02402003280224450d002009102f0b4120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001ad4280808080800484100622022900003703302002102f200341c4006a200141206a360200200341003a0048200320013602402003200636023c2003200341306a360238200341106a200341386a106c2001102f2003280210210702400240200a20086b20032802182201490d00200120086a2102200a21090c010b200820016a22022008490d02200a41017422092002200920024b1b22094100480d022004200a200910312204450d010b200420086a2007200110e8061a02402003280214450d002007102f0b200020023602082000200936020420002004360200200341d0006a24000f0b1036000b1038000be20603027f017e057f230041d0006b2203240041eba1ca00ad4280808080f00084100122042900002105200341086a200441086a290000370300200320053703002004102f41d3cac800ad4280808080a00284100122042900002105200341106a41086a200441086a290000370300200320053703102004102f2003200136022c20032003412c6aad4280808080c00084100622042900003703302004102f200341c4006a200341306a360200200341003a00482003200341306a41086a220636023c20032003412c6a3602402003200341306a360238200341206a200341386a106c0240024002400240024002402003280228220741206a2208417f4c0d0020032802202109024002402008450d002008102d2204450d062008410f4d0d012008210a0c050b4110210a4110102d21040c030b200841017422014110200141104b1b220a41004e0d010c050b103d000b20042008200a103121040b2004450d010b20042003290300370000200441086a200341086a29030037000002400240200a4170714110460d00200a21010c010b200a41017422014120200141204b1b22014100480d022004200a200110312204450d010b20042003290310370010200441186a200341106a41086a29030037000002400240200141606a2007490d002001210a0c010b2007415f4b0d022001410174220a2008200a20084b1b220a4100480d0220042001200a10312204450d010b200441206a2009200710e8061a02402003280224450d002009102f0b4120102d2201450d0020012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a29000037000020032001ad4280808080800484100622022900003703302002102f200341c4006a200141206a360200200341003a0048200320013602402003200636023c2003200341306a360238200341106a200341386a106c2001102f2003280210210702400240200a20086b20032802182201490d00200120086a2102200a21090c010b200820016a22022008490d02200a41017422092002200920024b1b22094100480d022004200a200910312204450d010b200420086a2007200110e8061a02402003280214450d002007102f0b200020023602082000200936020420002004360200200341d0006a24000f0b1036000b1038000bc60501067f230041106b220224002002410036020820024201370300024002404120102d2203450d00200242a080808080043702042002200336020020032000290034370000200341086a2000413c6a290000370000200341106a200041c4006a290000370000200341186a200041cc006a2900003700002002200036020c2002410c6a200210c2022002200041106a36020c2002410c6a200210c20220002802202103200041286a28020022042002106902402004450d002003200441186c6a210403402002200336020c2002410c6a200210c202200341106a20021095022004200341186a2203470d000b0b02400240200028022c4101460d00024002402002280204220420022802082205460d00200228020021030c010b200541016a22032005490d04200541017422042003200420034b1b22044100480d040240024020050d002004102d21030c010b200228020020052004103121030b2003450d0320022004360204200220033602000b2002200541016a2200360208200320056a41003a00000c010b024002402002280204220420022802082205460d00200228020021030c010b200541016a22032005490d03200541017422042003200420034b1b22044100480d030240024020050d002004102d21030c010b200228020020052004103121030b2003450d0220022004360204200220033602000b2002200541016a2206360208200320056a41013a00002000280230210702400240200420066b4104490d00200541056a21000c010b200641046a22002006490d03200441017422052000200520004b1b22054100480d030240024020040d002005102d21030c010b200320042005103121030b2003450d022002200536020420022003360200200521040b20022000360208200320066a20073600000b20012902002000ad4220862003ad84100402402004450d002003102f0b200241106a24000f0b1036000b1038000b130020004115360204200041f0cfc8003602000bab0407047f017e017f017e017f017e037f230041d0006b22002400200041206a41186a22014200370300200041206a41106a22024200370300200041206a41086a220342003703002000420037032041eba1ca00ad4280808080f000842204100122052900002106200041c0006a41086a2207200541086a290000370300200020063703402005102f200320072903003703002000200029034037032041f1a0ca00ad428080808080018422081001220529000021062007200541086a290000370300200020063703402005102f200220002903402206370300200041086a22092003290300370300200041106a220a2006370300200041186a220b200729030037030020002000290320370300024002400240410020001081042205200541ff01714104461b41ff0171417f6a220541024b0d0020050e03010001010b2001420037030020024200370300200342003703002000420037032020041001220529000021062007200541086a290000370300200020063703402005102f200320072903003703002000200029034037032020081001220529000021062007200541086a290000370300200020063703402005102f20022000290340370000200241086a200729030037000020092003290300370300200a2002290300370300200b2001290300370300200020002903203703004101102d2207450d01200741013a00002000ad42808080808004842007ad4280808080108410042007102f0b200041d0006a24000f0b1036000b3400200041eba1ca0036020420004100360200200041146a411d360200200041106a41d495c900360200200041086a42073702000b5301017f02404110102d2202450d00200242003700082002420037000020024110412010312202450d0020024200370010200042a0808080800437020420002002360200200241186a42003700000f0b1036000b4b01027f230041106b2202240002404101102d22030d001036000b200341003a0000200041086a4101360200200241013602042002200336020020002002290300370200200241106a24000b9a0302047f017e230041206b2203240002400240200241d8006c4104722204417f4c0d002004102d2205450d0120034100360208200320043602042003200536020020022003106902402002450d002001200241d8006c6a210603402003200141386a4120108201200129030021072003200141086a290300370318200320073703102003200341106a411010820120012802202102200128022822042003106902402004450d002002200441306c6a21040340200320024120108201200241206a29030021072003200241286a290300370318200320073703102003200341106a41101082012004200241306a2202470d000b0b200141d8006a2105200128022c2102200141346a28020022042003106902402004450d00200441057421040340200320024120108201200241206a2102200441606a22040d000b0b200129031021072003200141186a290300370318200320073703102003200341106a41101082012005210120052006470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b103d000b1036000b3301017f02404110102d22020d001036000b2002420037000820024200370000200042908080808002370204200020023602000b7b01027f230041106b22022400200241003602082002420137030002404104102d22030d001036000b2003410036000020024284808080c000370204200220033602004190bdc60041004100200210e501200041086a2002280208360200200020022903003702004190bdc6004100410010a302200241106a24000be30101047f230041106b220224002002410036020c02404101102d2203450d000240024002400240200228020c220441c000490d00200441808001490d012004418080808004490d02200341033a0000200228020c21044105210520034101410510312203450d04200320043600010c030b200320044102743a0000410121050c020b4102210520034101410210312203450d02200320044102744101723b00000c010b4104210520034101410410312203450d01200320044102744102723600000b200020053602082000200536020420002003360200200241106a24000f0b1036000bd40301077f230041c0006b22022400200241186a4200370300200241106a22034200370300200241086a4200370300200241286a22044100360200200242003703002002420837032020024100360238200242013703302002200236023c2002413c6a200241306a10c2022002200336023c2002413c6a200241306a10c2022002280220210320042802002204200241306a10690240024002402004450d00200441306c210503400240024020022802342206200228023822046b4120490d00200441206a2107200228023021060c010b200441206a22072004490d04200641017422082007200820074b1b22084100480d040240024020060d002008102d21060c010b200228023020062008103121060b2006450d0320022008360234200220063602300b200620046a220441086a200341186a290000370000200441106a200341206a290000370000200441186a200341286a290000370000200220073602382004200341106a2900003700002002200336023c2002413c6a200241306a10c202200341306a2103200541506a22050d000b0b20002002290330370200200041086a200241306a41086a28020036020002402002280224450d002002280220102f0b200241c0006a24000f0b1036000b1038000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241043600000b2d01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241d4003600000b130020004102360204200041accfc9003602000b2d01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241a0053600000b2c01017f02404104102d22020d001036000b20004284808080c00037020420002002360200200241063600000bb21307027f017e057f017e027f017e027f23004190016b2202240041eba1ca00ad4280808080f00084100122032900002104200241c8006a41086a200341086a290000370300200220043703482003102f41a1cac800ad4280808080e0008410012203290000210420024180016a41086a200341086a29000037030020022004370380012003102f02400240024002400240024002404120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322052d00002106200241ef006a2207200541186a290000370000200241d8006a41106a2208200541116a290000370300200241d8006a41086a200541096a290000370300200220052900013703582005102f2003102f41c000102d2203450d00200320022903483700002003200229038001370010200320063a002020032002290358370021200341086a200241c8006a41086a290300370000200341186a20024180016a41086a290300370000200341296a200241d8006a41086a2209290300370000200341316a2008290300370000200341386a2007290000370000200241d8006a200341c00010ad02024020022d00582207450d002003ad428080808080088410050b200241286a41176a2205200241f1006a290000370000200241286a41106a2206200241ea006a290100370300200241286a41086a200241e2006a29010022043703002002200229015a220a37032820022d00592108200241d8006a41176a220b2005290000370000200241d8006a41106a220c2006290300370300200920043703002002200a37035820074101470d01200241086a41176a2207200b290000370000200241086a41106a2209200c290300370300200241086a41086a220b200241d8006a41086a220c290300370300200220022903583703082003102f2005200729000037000020062009290300370300200241286a41086a2205200b2903003703002002200229030837032841eba1ca00ad4280808080f00084100122032900002104200241c8006a41086a200341086a290000370300200220043703482003102f41a7cac800ad4280808080e0008410012203290000210420024180016a41086a200341086a29000037030020022004370380012003102f4120102d2203450d00200320083a000020032002290328370001200341096a2005290300370000200341116a200241286a41106a290300370000200341186a200241286a41176a2900003700002003ad4280808080800484100322052d00002106200241d8006a41176a2207200541186a290000370000200241d8006a41106a2208200541116a290000370300200c200541096a290000370300200220052900013703582005102f2003102f41c000102d2203450d00200320022903483700002003200229038001370010200320063a002020032002290358370021200341086a200241c8006a41086a2205290300370000200341186a20024180016a41086a2206290300370000200341296a200241d8006a41086a2209290300370000200341316a2008290300370000200341386a20072900003700002003ad428080808080088410052003102f41eba1ca00ad4280808080f000841001220329000021042005200341086a290000370300200220043703482003102f41c8abc900ad4280808080d000841001220329000021042006200341086a29000037030020022004370380012003102f4120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322052d00002106200241ef006a2207200541186a290000370000200241d8006a41106a2208200541116a2900003703002009200541096a290000370300200220052900013703582005102f2003102f41c000102d2203450d00200320022903483700002003200229038001370010200320063a002020032002290358370021200341086a200241c8006a41086a290300370000200341186a20024180016a41086a2205290300370000200341296a200241d8006a41086a2206290300370000200341316a2008290300370000200341386a20072900003700002003ad428080808080088410052003102f200110e805200110e90541eba1ca00ad4280808080f000841001220329000021042005200341086a29000037030020022004370380012003102f41a9cbc800ad4280808080d00184100122032900002104200241086a41086a200341086a290000370300200220043703082003102f4120102d2203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100322052900002104200541086a290000210a200541106a290000210d200241d8006a41186a2207200541186a290000370300200241d8006a41106a2208200d3703002006200a370300200220043703582005102f2003102f41c000102d2203450d0020032002290380013700002003200229030837001020032002290358370020200341086a20024180016a41086a290300370000200341186a200241086a41086a290300370000200341286a200241d8006a41086a290300370000200341306a2008290300370000200341386a2007290300370000200241d8006a2003109c0502402002280264220e450d002003ad428080808080088410050b200229036821042002280258210b2003102f200e450d05200e2004422088a74102746a210c2004a7210f200b2108200e2106410021070240410041ff01710e03030400030b410021030c040b1036000b2003102f200041086a4108360200200041046a41d6c7c800360200200041026a41013a000020004183103b01000c040b410121030c010b410221030b0340024002400240024002400240024020030e03000102020b2006200c460d03200641046a2106410221032008417f6a220521080c020b41002103024020074102460d0041022107200b21050c020b2006200c460d02200641046a2106410221072008417f6a22052108410221030c010b200741024721094101210341022107200b21052009450d010b200241d8006a41186a200141186a290000370300200241d8006a41106a200141106a290000370300200241d8006a41086a200141086a2900003703002002200536027820022001290000370358200241d8006a10ed050240200341ff01710e03000203000b410121030c030b200f450d03200e102f0c030b410221030c010b410021030c000b0b200110ca02200041043a00000b20024190016a24000baf0305027f017e027f027e027f230041e0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241186a41086a2205200341086a290000370300200220043703182003102f4197cfc800ad4280808080b00284100122032900002104200241286a41086a2206200341086a290000370300200220043703282003102f2002200136025c200241dc006aad4280808080c00084100322032900002104200341086a2900002107200341106a2900002108200241386a41186a2201200341186a290000370300200241386a41106a22092008370300200241386a41086a220a2007370300200220043703382003102f024041c000102d22030d001036000b200320022903183700002003200229032837001020032002290338370020200341086a2005290300370000200341186a2006290300370000200341286a200a290300370000200341306a2009290300370000200341386a20012903003700002002200341c000109c01200241106a290300210720022903002104200229030821082003102f200041106a2007370300200020083703082000200442002004a71b370300200241e0006a24000bc70305027f017e027f027e027f230041d0006b2202240041eba1ca00ad4280808080f00084100122032900002104200241086a41086a2205200341086a290000370300200220043703082003102f41e5cac800ad4280808080800284100122032900002104200241186a41086a2206200341086a290000370300200220043703182003102f2002200136024c200241cc006aad4280808080c00084100322032900002104200341086a2900002107200341106a2900002108200241286a41186a2201200341186a290000370300200241286a41106a22092008370300200241286a41086a220a2007370300200220043703282003102f024041c000102d2203450d00200320022903083700002003200229031837001020032002290328370020200341086a2005290300370000200341186a2006290300370000200341286a200a290300370000200341306a2009290300370000200341386a2001290300370000200241286a2003109f0502400240200228022c2201450d0020002001360204200041086a2002290330370200200228022821010c010b20004190bdc600360204200041086a4200370200410021010b200020013602002003102f200241d0006a24000f0b1036000b871505027f017e017f027e0e7f23004190046b2204240041eba1ca00ad4280808080f00084100122052900002106200441f0016a41086a200541086a290000370300200420063703f0012005102f41c8abc900ad4280808080d0008410012205290000210620044190036a41086a200541086a29000037030020042006370390032005102f024002400240024002404120102d2205450d0020052001290000370000200541186a200141186a290000370000200541106a200141106a290000370000200541086a200141086a2900003700002005ad4280808080800484100322072900002106200741086a2900002108200741106a2900002109200441d0016a41186a220a200741186a290000370300200441d0016a41106a220b2009370300200441d0016a41086a2008370300200420063703d0012007102f2005102f41c000102d2205450d00200520042903f0013700002005200429039003370010200520042903d001370020200541086a200441f0016a41086a290300370000200541186a20044190036a41086a290300370000200541286a200441d0016a41086a290300370000200541306a200b290300370000200541386a200a290300370000200441c0003602e402200420053602e00220044180016a2005ad42808080808008841002107302402004280280012207450d00200428028401210b0240024020044180016a41086a280200450d0020072d0000220a4103490d010b200441003602f801200442013703f0012004410b3602342004200441e0026a3602302004200441f0016a360208200441a4036a41013602002004420137029403200441b885c700360290032004200441306a3602a003200441086a41d8dbc10020044190036a103c1a20043502f80142208620043502f001841008024020042802f401450d0020042802f001102f0b4103210a0b0240200b450d002007102f0b200a4103470d020b2005102f0c020b1036000b2005102f02400240200a0e03020001020b2004200237038001200420033703880102400240200220038450450d004200210342002106420021020c010b20042001360230200441f0016a200120044180016a200441306a10a002024020042802f0014101470d004200210620042903f8012103420121020c010b20044198026a290300210620044190026a29030021034200210220042903f8014201520d00200441f0016a41106a2903002108200441c8036a200441f0016a41186a290300370300200441c0036a200837030020044190036a41086a41003a000020044199036a2001290000370000200441a1036a200141086a290000370000200441a9036a200141106a290000370000200441b1036a200141186a290000370000200441033a00900341c8e1ca00410020044190036a108c010b200242018521020c030b20044180016a200110b50320042d0080014101470d01200441c8006a20044199016a290000370300200441c0006a20044191016a290000370300200441386a20044189016a2900003703002004200429008101370330200420023703e002200420033703e80202400240200220038450450d004200210242002103420021060c010b2004200441306a360208200441f0016a200441306a200441e0026a200441086a10a002024020042802f0014101470d004200210620042903f8012103420121020c010b20044198026a290300210620044190026a29030021034200210220042903f8014201520d00200441f0016a41106a2903002108200441c8036a200441f0016a41186a290300370300200441c0036a200837030020044190036a41086a41003a000020044199036a2004290330370000200441a1036a200441306a41086a290300370000200441a9036a200441306a41106a290300370000200441b1036a200441306a41186a290300370000200441033a00900341c8e1ca00410020044190036a108c010b200242018521020c020b20044180016a200110b50320042d0080014101470d00200441e0026a41186a20044199016a2205290000370300200441e0026a41106a20044191016a2207290000370300200441e0026a41086a20044189016a220a29000037030020042004290081013703e00220044190036a200441e0026a108103200441d0016a41186a220b2005290000370300200441d0016a41106a22052007290000370300200441d0016a41086a2207200a29000037030020042004290081013703d00120042802bc03220c4102460d00200441f0016a41186a220a200b290300370300200441f0016a41106a220d2005290300370300200441f0016a41086a220e2007290300370300200441f0016a41286a220f20044190036a41086a290300370300200441f0016a41306a221020044190036a41106a290300370300200441f0016a41386a221120044190036a41186a290300370300200441f0016a41c0006a221220044190036a41206a290300370300200441f0016a41c8006a221320044190036a41286a280200360200200420042903d0013703f001200420042903900337039002200441086a41206a221420044190036a41d0006a290300370300200441086a41186a221520044190036a41c8006a290300370300200441086a41106a221620044190036a41c0006a290300370300200441086a41086a221720044190036a41386a290300370300200420042903c003370308200441306a200441f0016a41cc0010e8061a20044180016a200441306a41cc0010e8061a200b200441306a41186a2903003703002005200441306a41106a2903003703002007200441306a41086a290300370300200420042903303703d001200f20044180016a41c8006a280200360200200441f0016a41206a20044180016a41c0006a290300370300200a20044180016a41386a290300370300200d20044180016a41306a290300370300200e20044180016a41286a290300370300200420042903a0013703f0012004200c36029c0220102004290308370300201120172903003703002012201629030037030020132015290300370300200441f0016a41d0006a2014290300370300200a2903002106200d200d290300220820027c2209370300200a200620037c2009200854ad7c370300200e2903002106200420042903f001220820027c22093703f001200e200620037c2009200854ad7c370300200420033703d002200420023703c80202400240200220038450450d004200210242002103420021060c010b200420013602dc02200441e0026a2001200441c8026a200441dc026a10a002024020042802e0024101470d004200210620042903e8022103420121020c010b20044188036a290300210620044180036a29030021034200210220042903e8024201520d00200441e0026a41106a2903002108200441c8036a200441e0026a41186a290300370300200441c0036a200837030020044190036a41086a41003a000020044199036a2001290000370000200441a1036a200141086a290000370000200441a9036a200141106a290000370000200441b1036a200141186a290000370000200441033a00900341c8e1ca00410020044190036a108c010b200441d0016a200441f0016a10b603024020044194026a280200450d00200428029002102f0b200242018521020c010b420021020b2000200337030820002002370300200041106a200637030020044190046a24000b13002000410d360204200041c4d1c9003602000b3400200041aa87ca0036020420004100360200200041146a4109360200200041106a4188ddc900360200200041086a42043702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120102d22060d001036000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b130020004102360204200041f8eec9003602000b2d01017f02404108102d22020d001036000b20004288808080800137020420002002360200200242b8173700000b2d01017f02404108102d22020d001036000b20004288808080800137020420002002360200200242c8013700000b130020004104360204200041c8f5c9003602000b34002000419bd9c90036020420004100360200200041146a4101360200200041106a41d085ca00360200200041086a42073702000b100020002802002000280204200110640bbe04020d7f017e230041c0006b22032400200128020822044104742105200128020421062001280200220721010240024002402004450d00200341306a410172210841002104200341306a41026a2109200341206a410172220a41076a210b03402009200720046a220141036a2d00003a00002003200141016a2f00003b0130024020012d0000220c41ac01470d00200141106a21010c020b2003410c6a41026a20092d0000220d3a0000200320032f0130220e3b010c200141046a280200210f200141086a29030021102008200e3b0000200841026a200d3a00002003200c3a0030200320103703382003200f360234200341206a200341306a20021091062003200a2900003703102003200b290000370017024020032d0020220c411f470d002005200441106a2204470d010c030b0b2000200c3a000020002003290310370001200041086a20032900173700000240200541706a2004460d00200141146a2101200520046b41706a2104034002402001417c6a2d00004109470d0002402001280200220928020441ffffffff0371450d002009280200102f200128020021090b2009102f0b200141106a2101200441706a22040d000b0b2006450d022007102f0c020b200720056a22092001460d000340200141106a2104024020012d00004109470d000240200141046a2208280200220128020441ffffffff0371450d002001280200102f200828020021010b2001102f0b2004210120092004470d000b0b02402006450d002007102f0b2000411f3a00000b200341c0006a24000bb4c10202097f017e230041106b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000eac01000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab01000b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dae01200441017422062005200620054b1b22064100480dae010240024020040d002006102d21050c010b200228020420042006103121050b2005450dad0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41003a00000cab010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dad01200441017422062005200620054b1b22064100480dad010240024020040d002006102d21050c010b200228020420042006103121050b2005450dac0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41013a00000caa010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dac01200441017422082005200820054b1b22084100480dac010240024020040d002008102d21050c010b200628020020042008103121050b2005450dab0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41023a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490dac01200441017422082005200820054b1b22084100480dac010240024020040d002008102d21050c010b200628020020042008103121050b2005450dab0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca9010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d002008102d21050c010b200628020020042008103121050b2005450daa0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41033a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d002008102d21050c010b200628020020042008103121050b2005450daa0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca8010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d002008102d21050c010b200628020020042008103121050b2005450da90120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41043a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d002008102d21050c010b200628020020042008103121050b2005450da90120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca7010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da901200441017422062005200620054b1b22064100480da9010240024020040d002006102d21050c010b200228020420042006103121050b2005450da80120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41053a00000ca6010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da801200441017422062005200620054b1b22064100480da8010240024020040d002006102d21050c010b200228020420042006103121050b2005450da70120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a410b3a00000ca5010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da701200441017422072006200720064b1b22074100480da7010240024020040d002007102d21060c010b200928020020042007103121060b2006450da60120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a410c3a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da8012004410174220a2006200a20064b1b220a4100480da8010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da701200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca5010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d002007102d21060c010b200928020020042007103121060b2006450da50120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a410d3a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da7012004410174220a2006200a20064b1b220a4100480da7010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da601200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca4010b0b200241046a210902400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da501200441017422062005200620054b1b22064100480da5010240024020040d002006102d21050c010b200928020020042006103121050b2005450da40120022005360204200241086a20063602002002410c6a28020021040b2002410c6a2207200441016a360200200520046a410e3a0000200320012802042204280204220520042802002204200420054102746a20021092062003210420032d0000411f470dab0120012802042802082105200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da6012004410174220a2006200a20064b1b220a4100480da6010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da501200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca3010b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da401200441017422062005200620054b1b22064100480da4010240024020040d002006102d21050c010b200228020420042006103121050b2005450da30120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a410f3a00000ca1010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da301200441017422072006200720064b1b22074100480da3010240024020040d002007102d21060c010b200928020020042007103121060b2006450da20120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41103a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da4012004410174220a2006200a20064b1b220a4100480da4010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da301200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca1010b0b200241046a2109200141046a280200210520012d0001210b02400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d002007102d21060c010b200928020020042007103121060b2006450da10120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41113a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da3012004410174220a2006200a20064b1b220a4100480da3010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da201200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b02400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da201200441017422062005200620054b1b22064100480da2010240024020040d002006102d21050c010b200928020020042006103121050b2005450da10120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a200b3a00000c9f010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da101200441017422062005200620054b1b22064100480da1010240024020040d002006102d21050c010b200228020420042006103121050b2005450da00120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a411a3a00000c9e010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da001200441017422062005200620054b1b22064100480da0010240024020040d002006102d21050c010b200228020420042006103121050b2005450d9f0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a411b3a00000c9d010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9f01200441017422072006200720064b1b22074100480d9f010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9e0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41203a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da0012004410174220a2006200a20064b1b220a4100480da0010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9f01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9d010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9d0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41213a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9f012004410174220a2006200a20064b1b220a4100480d9f010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9e01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9c010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9c0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41223a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9e012004410174220a2006200a20064b1b220a4100480d9e010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9d01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9b010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9b0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41233a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9d012004410174220a2006200a20064b1b220a4100480d9d010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9c01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9a010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9a0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41243a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9c012004410174220a2006200a20064b1b220a4100480d9c010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9b01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c99010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9a01200441017422082007200820074b1b22084100480d9a010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d990120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41283a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d9b012004410174220b2007200b20074b1b220b4100480d9b010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9a01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9b01200441017422092006200920064b1b22094100480d9b010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d9a012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c98010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d980120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41293a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d9a012004410174220b2007200b20074b1b220b4100480d9a010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9901200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9a01200441017422092006200920064b1b22094100480d9a010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d99012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c97010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d970120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412a3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d99012004410174220b2007200b20074b1b220b4100480d99010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9801200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9901200441017422092006200920064b1b22094100480d99010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d98012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c96010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d960120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412b3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d98012004410174220b2007200b20074b1b220b4100480d98010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9701200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9801200441017422092006200920064b1b22094100480d98010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d97012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c95010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d950120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412c3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d97012004410174220b2007200b20074b1b220b4100480d97010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9601200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9701200441017422092006200920064b1b22094100480d97010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d96012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c94010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d940120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412d3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d96012004410174220b2007200b20074b1b220b4100480d96010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9501200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9601200441017422092005200920054b1b22094100480d96010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d95012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c93010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d930120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412e3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d95012004410174220b2007200b20074b1b220b4100480d95010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9401200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9501200441017422092005200920054b1b22094100480d95010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d94012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c92010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d920120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412f3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d94012004410174220b2007200b20074b1b220b4100480d94010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9301200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9401200441017422092006200920064b1b22094100480d94010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d93012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c91010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d910120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41303a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d93012004410174220b2007200b20074b1b220b4100480d93010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9201200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9301200441017422092006200920064b1b22094100480d93010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d92012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c90010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d900120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41313a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d92012004410174220b2007200b20074b1b220b4100480d92010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9101200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9201200441017422092005200920054b1b22094100480d92010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d91012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c8f010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8f0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41323a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d91012004410174220b2007200b20074b1b220b4100480d91010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9001200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9101200441017422092005200920054b1b22094100480d91010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d90012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c8e010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8e0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41333a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d90012004410174220b2007200b20074b1b220b4100480d90010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8f01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9001200441017422092006200920064b1b22094100480d90010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8f012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8d010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8d0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41343a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8f012004410174220b2007200b20074b1b220b4100480d8f010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8e01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8f01200441017422092006200920064b1b22094100480d8f010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8e012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8c010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8c0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41353a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8f012004410174220b2007200b20074b1b220b4100480d8f010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8d01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8f01200441017422092006200920064b1b22094100480d8f010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d90012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8b010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8e0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41363a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8e012004410174220b2007200b20074b1b220b4100480d8e010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8f01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8e01200441017422092006200920064b1b22094100480d8e010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8f012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8a010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8d0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41373a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8d012004410174220b2007200b20074b1b220b4100480d8d010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8e01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8d01200441017422092005200920054b1b22094100480d8d010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8e012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c89010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8c0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41383a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8c012004410174220b2007200b20074b1b220b4100480d8c010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8d01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8c01200441017422092006200920064b1b22094100480d8c010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8d012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c88010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8b0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41393a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8b012004410174220b2007200b20074b1b220b4100480d8b010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8c01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8b01200441017422092005200920054b1b22094100480d8b010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8c012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c87010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8a0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413a3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8a012004410174220b2007200b20074b1b220b4100480d8a010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8b01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8a01200441017422092005200920054b1b22094100480d8a010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8b012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c86010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d890120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413b3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d89012004410174220b2007200b20074b1b220b4100480d89010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8a01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8901200441017422092006200920064b1b22094100480d89010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8a012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c85010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d880120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413c3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d88012004410174220b2007200b20074b1b220b4100480d88010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8901200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8801200441017422092006200920064b1b22094100480d88010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d89012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c84010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d870120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413d3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d87012004410174220b2007200b20074b1b220b4100480d87010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8801200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8701200441017422092006200920064b1b22094100480d87010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d88012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c83010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d860120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413e3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d86012004410174220b2007200b20074b1b220b4100480d86010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8701200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8601200441017422092006200920064b1b22094100480d86010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d87012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c82010b0b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8401200441017422082005200820054b1b22084100480d84010240024020040d002008102d21050c010b200628020020042008103121050b2005450d850120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a413f3a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490d8401200441017422082005200820054b1b22084100480d84010240024020040d002008102d21050c010b200628020020042008103121050b2005450d850120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a20073a00000c80010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d002008102d21050c010b200628020020042008103121050b2005450d840120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41c0003a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d002008102d21050c010b200628020020042008103121050b2005450d840120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a20073a00000c7f0b200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8201200441017422072005200720054b1b22074100480d82010240024020040d002007102d21050c010b200228020420042007103121050b2005450d830120022005360204200241086a20073602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c1003a00002003200620021093062003210420032d0000411f470d87010c7e0b200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8101200441017422062005200620054b1b22064100480d81010240024020040d002006102d21050c010b200228020420042006103121050b2005450d820120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c2003a00002003200c20021094062003210420032d0000411f470d86010c7d0b200241046a2106200141046a280200210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8001200441017422082005200820054b1b22084100480d80010240024020040d002008102d21050c010b200628020020042008103121050b2005450d810120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41c3003a000002400240200241086a2802002205200828020022046b4104490d00200628020021050c010b200441046a22082004490d8001200541017422042008200420084b1b22044100480d80010240024020050d002004102d21050c010b200628020020052004103121050b2005450d810120022005360204200241086a20043602002002410c6a28020021040b2002410c6a200441046a360200200520046a20073600000c7c0b200241046a2106200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d7f200441017422072005200720054b1b22074100480d7f0240024020040d002007102d21050c010b200628020020042007103121050b2005450d800120022005360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200520046a41c4003a000002400240200241086a2802002205200728020022046b4108490d00200628020021050c010b200441086a22072004490d7f200541017422042007200420074b1b22044100480d7f0240024020050d002004102d21050c010b200628020020052004103121050b2005450d800120022005360204200241086a20043602002002410c6a28020021040b2002410c6a200441086a360200200520046a200c3700000c7b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7e200441017422062005200620054b1b22064100480d7e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c5003a00000c7a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7d200441017422062005200620054b1b22064100480d7d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c6003a00000c790b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7c200441017422062005200620054b1b22064100480d7c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c7003a00000c780b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7b200441017422062005200620054b1b22064100480d7b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c8003a00000c770b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7a200441017422062005200620054b1b22064100480d7a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c9003a00000c760b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d79200441017422062005200620054b1b22064100480d790240024020040d002006102d21050c010b200228020420042006103121050b2005450d7a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ca003a00000c750b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d78200441017422062005200620054b1b22064100480d780240024020040d002006102d21050c010b200228020420042006103121050b2005450d7920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cb003a00000c740b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d77200441017422062005200620054b1b22064100480d770240024020040d002006102d21050c010b200228020420042006103121050b2005450d7820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cc003a00000c730b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d76200441017422062005200620054b1b22064100480d760240024020040d002006102d21050c010b200228020420042006103121050b2005450d7720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cd003a00000c720b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d75200441017422062005200620054b1b22064100480d750240024020040d002006102d21050c010b200228020420042006103121050b2005450d7620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ce003a00000c710b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d74200441017422062005200620054b1b22064100480d740240024020040d002006102d21050c010b200228020420042006103121050b2005450d7520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cf003a00000c700b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d73200441017422062005200620054b1b22064100480d730240024020040d002006102d21050c010b200228020420042006103121050b2005450d7420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d0003a00000c6f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d72200441017422062005200620054b1b22064100480d720240024020040d002006102d21050c010b200228020420042006103121050b2005450d7320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d1003a00000c6e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d71200441017422062005200620054b1b22064100480d710240024020040d002006102d21050c010b200228020420042006103121050b2005450d7220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d2003a00000c6d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d70200441017422062005200620054b1b22064100480d700240024020040d002006102d21050c010b200228020420042006103121050b2005450d7120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d3003a00000c6c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6f200441017422062005200620054b1b22064100480d6f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d4003a00000c6b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6e200441017422062005200620054b1b22064100480d6e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d5003a00000c6a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6d200441017422062005200620054b1b22064100480d6d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d6003a00000c690b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6c200441017422062005200620054b1b22064100480d6c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d7003a00000c680b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6b200441017422062005200620054b1b22064100480d6b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d8003a00000c670b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6a200441017422062005200620054b1b22064100480d6a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d9003a00000c660b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d69200441017422062005200620054b1b22064100480d690240024020040d002006102d21050c010b200228020420042006103121050b2005450d6a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41da003a00000c650b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d68200441017422062005200620054b1b22064100480d680240024020040d002006102d21050c010b200228020420042006103121050b2005450d6920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41db003a00000c640b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d67200441017422062005200620054b1b22064100480d670240024020040d002006102d21050c010b200228020420042006103121050b2005450d6820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41dc003a00000c630b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d66200441017422062005200620054b1b22064100480d660240024020040d002006102d21050c010b200228020420042006103121050b2005450d6720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41dd003a00000c620b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d65200441017422062005200620054b1b22064100480d650240024020040d002006102d21050c010b200228020420042006103121050b2005450d6620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41de003a00000c610b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d64200441017422062005200620054b1b22064100480d640240024020040d002006102d21050c010b200228020420042006103121050b2005450d6520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41df003a00000c600b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d63200441017422062005200620054b1b22064100480d630240024020040d002006102d21050c010b200228020420042006103121050b2005450d6420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e0003a00000c5f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d62200441017422062005200620054b1b22064100480d620240024020040d002006102d21050c010b200228020420042006103121050b2005450d6320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e1003a00000c5e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d61200441017422062005200620054b1b22064100480d610240024020040d002006102d21050c010b200228020420042006103121050b2005450d6220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e2003a00000c5d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d60200441017422062005200620054b1b22064100480d600240024020040d002006102d21050c010b200228020420042006103121050b2005450d6120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e3003a00000c5c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5f200441017422062005200620054b1b22064100480d5f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e4003a00000c5b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5e200441017422062005200620054b1b22064100480d5e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e5003a00000c5a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5d200441017422062005200620054b1b22064100480d5d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e6003a00000c590b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e7003a00000c580b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e8003a00000c570b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e9003a00000c560b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ea003a00000c550b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5a200441017422062005200620054b1b22064100480d5a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41eb003a00000c540b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d59200441017422062005200620054b1b22064100480d590240024020040d002006102d21050c010b200228020420042006103121050b2005450d5a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ec003a00000c530b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d58200441017422062005200620054b1b22064100480d580240024020040d002006102d21050c010b200228020420042006103121050b2005450d5920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ed003a00000c520b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d57200441017422062005200620054b1b22064100480d570240024020040d002006102d21050c010b200228020420042006103121050b2005450d5820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ee003a00000c510b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d56200441017422062005200620054b1b22064100480d560240024020040d002006102d21050c010b200228020420042006103121050b2005450d5720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ef003a00000c500b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d55200441017422062005200620054b1b22064100480d550240024020040d002006102d21050c010b200228020420042006103121050b2005450d5620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f0003a00000c4f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d54200441017422062005200620054b1b22064100480d540240024020040d002006102d21050c010b200228020420042006103121050b2005450d5520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f1003a00000c4e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d53200441017422062005200620054b1b22064100480d530240024020040d002006102d21050c010b200228020420042006103121050b2005450d5420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f2003a00000c4d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d52200441017422062005200620054b1b22064100480d520240024020040d002006102d21050c010b200228020420042006103121050b2005450d5320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f3003a00000c4c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d51200441017422062005200620054b1b22064100480d510240024020040d002006102d21050c010b200228020420042006103121050b2005450d5220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f4003a00000c4b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d50200441017422062005200620054b1b22064100480d500240024020040d002006102d21050c010b200228020420042006103121050b2005450d5120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f5003a00000c4a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4f200441017422062005200620054b1b22064100480d4f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f6003a00000c490b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4e200441017422062005200620054b1b22064100480d4e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f7003a00000c480b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4d200441017422062005200620054b1b22064100480d4d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f8003a00000c470b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4c200441017422062005200620054b1b22064100480d4c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f9003a00000c460b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4b200441017422062005200620054b1b22064100480d4b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fa003a00000c450b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4a200441017422062005200620054b1b22064100480d4a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fb003a00000c440b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d49200441017422062005200620054b1b22064100480d490240024020040d002006102d21050c010b200228020420042006103121050b2005450d4a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fc003a00000c430b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d48200441017422062005200620054b1b22064100480d480240024020040d002006102d21050c010b200228020420042006103121050b2005450d4920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fd003a00000c420b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d47200441017422062005200620054b1b22064100480d470240024020040d002006102d21050c010b200228020420042006103121050b2005450d4820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fe003a00000c410b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d46200441017422062005200620054b1b22064100480d460240024020040d002006102d21050c010b200228020420042006103121050b2005450d4720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ff003a00000c400b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d45200441017422062005200620054b1b22064100480d450240024020040d002006102d21050c010b200228020420042006103121050b2005450d4620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4180013a00000c3f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d44200441017422062005200620054b1b22064100480d440240024020040d002006102d21050c010b200228020420042006103121050b2005450d4520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4181013a00000c3e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d43200441017422062005200620054b1b22064100480d430240024020040d002006102d21050c010b200228020420042006103121050b2005450d4420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4182013a00000c3d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d42200441017422062005200620054b1b22064100480d420240024020040d002006102d21050c010b200228020420042006103121050b2005450d4320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4183013a00000c3c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d41200441017422062005200620054b1b22064100480d410240024020040d002006102d21050c010b200228020420042006103121050b2005450d4220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4184013a00000c3b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d40200441017422062005200620054b1b22064100480d400240024020040d002006102d21050c010b200228020420042006103121050b2005450d4120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4185013a00000c3a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3f200441017422062005200620054b1b22064100480d3f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4186013a00000c390b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3e200441017422062005200620054b1b22064100480d3e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4187013a00000c380b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4188013a00000c370b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4189013a00000c360b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418a013a00000c350b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3a200441017422062005200620054b1b22064100480d3a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418b013a00000c340b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d39200441017422062005200620054b1b22064100480d390240024020040d002006102d21050c010b200228020420042006103121050b2005450d3a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418c013a00000c330b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d38200441017422062005200620054b1b22064100480d380240024020040d002006102d21050c010b200228020420042006103121050b2005450d3920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418d013a00000c320b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d37200441017422062005200620054b1b22064100480d370240024020040d002006102d21050c010b200228020420042006103121050b2005450d3820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418e013a00000c310b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d36200441017422062005200620054b1b22064100480d360240024020040d002006102d21050c010b200228020420042006103121050b2005450d3720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418f013a00000c300b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d35200441017422062005200620054b1b22064100480d350240024020040d002006102d21050c010b200228020420042006103121050b2005450d3620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4190013a00000c2f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d34200441017422062005200620054b1b22064100480d340240024020040d002006102d21050c010b200228020420042006103121050b2005450d3520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4191013a00000c2e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d33200441017422062005200620054b1b22064100480d330240024020040d002006102d21050c010b200228020420042006103121050b2005450d3420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4192013a00000c2d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d32200441017422062005200620054b1b22064100480d320240024020040d002006102d21050c010b200228020420042006103121050b2005450d3320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4193013a00000c2c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d31200441017422062005200620054b1b22064100480d310240024020040d002006102d21050c010b200228020420042006103121050b2005450d3220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4194013a00000c2b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d30200441017422062005200620054b1b22064100480d300240024020040d002006102d21050c010b200228020420042006103121050b2005450d3120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4195013a00000c2a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2f200441017422062005200620054b1b22064100480d2f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4196013a00000c290b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2e200441017422062005200620054b1b22064100480d2e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4197013a00000c280b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2d200441017422062005200620054b1b22064100480d2d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4198013a00000c270b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2c200441017422062005200620054b1b22064100480d2c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4199013a00000c260b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2b200441017422062005200620054b1b22064100480d2b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419a013a00000c250b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2a200441017422062005200620054b1b22064100480d2a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419b013a00000c240b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d29200441017422062005200620054b1b22064100480d290240024020040d002006102d21050c010b200228020420042006103121050b2005450d2a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419c013a00000c230b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d28200441017422062005200620054b1b22064100480d280240024020040d002006102d21050c010b200228020420042006103121050b2005450d2920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419d013a00000c220b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d27200441017422062005200620054b1b22064100480d270240024020040d002006102d21050c010b200228020420042006103121050b2005450d2820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419e013a00000c210b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d26200441017422062005200620054b1b22064100480d260240024020040d002006102d21050c010b200228020420042006103121050b2005450d2720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419f013a00000c200b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d25200441017422062005200620054b1b22064100480d250240024020040d002006102d21050c010b200228020420042006103121050b2005450d2620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a0013a00000c1f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d24200441017422062005200620054b1b22064100480d240240024020040d002006102d21050c010b200228020420042006103121050b2005450d2520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a1013a00000c1e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d23200441017422062005200620054b1b22064100480d230240024020040d002006102d21050c010b200228020420042006103121050b2005450d2420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a2013a00000c1d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d22200441017422062005200620054b1b22064100480d220240024020040d002006102d21050c010b200228020420042006103121050b2005450d2320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a3013a00000c1c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d21200441017422062005200620054b1b22064100480d210240024020040d002006102d21050c010b200228020420042006103121050b2005450d2220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a4013a00000c1b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d20200441017422062005200620054b1b22064100480d200240024020040d002006102d21050c010b200228020420042006103121050b2005450d2120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a5013a00000c1a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1f200441017422062005200620054b1b22064100480d1f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a6013a00000c190b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1e200441017422062005200620054b1b22064100480d1e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a7013a00000c180b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1d200441017422062005200620054b1b22064100480d1d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a8013a00000c170b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1c200441017422062005200620054b1b22064100480d1c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a9013a00000c160b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1b200441017422062005200620054b1b22064100480d1b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41aa013a00000c150b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1a200441017422062005200620054b1b22064100480d1a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ab013a00000c140b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d19200441017422062005200620054b1b22064100480d190240024020040d002006102d21050c010b200228020420042006103121050b2005450d1a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ac013a00000c130b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d18200441017422062005200620054b1b22064100480d180240024020040d002006102d21050c010b200228020420042006103121050b2005450d1920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ad013a00000c120b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d17200441017422062005200620054b1b22064100480d170240024020040d002006102d21050c010b200228020420042006103121050b2005450d1820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ae013a00000c110b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d16200441017422062005200620054b1b22064100480d160240024020040d002006102d21050c010b200228020420042006103121050b2005450d1720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41af013a00000c100b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d15200441017422062005200620054b1b22064100480d150240024020040d002006102d21050c010b200228020420042006103121050b2005450d1620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b0013a00000c0f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d002006102d21050c010b200228020420042006103121050b2005450d1520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b1013a00000c0e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d002006102d21050c010b200228020420042006103121050b2005450d1420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b2013a00000c0d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d002006102d21050c010b200228020420042006103121050b2005450d1320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b3013a00000c0c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d002006102d21050c010b200228020420042006103121050b2005450d1220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b4013a00000c0b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d002006102d21050c010b200228020420042006103121050b2005450d1220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b5013a00000c0a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d002006102d21050c010b200228020420042006103121050b2005450d1120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b6013a00000c090b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d11200441017422062005200620054b1b22064100480d110240024020040d002006102d21050c010b200228020420042006103121050b2005450d1020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b7013a00000c080b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d10200441017422062005200620054b1b22064100480d100240024020040d002006102d21050c010b200228020420042006103121050b2005450d0f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b8013a00000c070b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0f200441017422062005200620054b1b22064100480d0f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b9013a00000c060b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0e200441017422062005200620054b1b22064100480d0e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ba013a00000c050b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0d200441017422062005200620054b1b22064100480d0d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bb013a00000c040b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0c200441017422062005200620054b1b22064100480d0c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bc013a00000c030b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0b200441017422062005200620054b1b22064100480d0b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bd013a00000c020b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0a200441017422062005200620054b1b22064100480d0a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41be013a00000c010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d09200441017422062005200620054b1b22064100480d090240024020040d002006102d21050c010b200228020420042006103121050b2005450d0820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bf013a00000b2000411f3a000020012d00004109470d090240200141046a280200220228020441ffffffff0371450d002002280200102f200128020421020b2002102f0c090b1036000b1038000b1038000b1036000b1038000b1036000b1036000b1038000b20002004290200370200200041086a200441086a29020037020020012d00004109470d000240200141046a280200220228020441ffffffff0371450d002002280200102f200128020421020b2002102f0b200341106a24000ba80301057f2004410c6a2105200441086a210602400240034002400240200628020020052802002207460d00200428020421080c010b200741016a22082007490d03200741017422092008200920084b1b22094100480d030240024020070d002009102d21080c010b200428020420072009103121080b2008450d022004200836020420062009360200200528020021070b2005200741016a360200200820076a200141807f72200141ff0071200141077622071b3a00002007210120070d000b024020022003460d002004410c6a2105200441086a2106034020022802002101034002400240200628020020052802002207460d00200428020421080c010b200741016a22082007490d05200741017422092008200920084b1b22094100480d050240024020070d002009102d21080c010b200428020420072009103121080b2008450d042004200836020420062009360200200528020021070b2005200741016a360200200820076a200141807f72200141ff0071200141077622071b3a00002007210120070d000b200241046a22022003470d000b0b2000411f3a00000f0b1036000b1038000ba40301067f02400240024020014107752203200141c00071220472452003417f4720044572734101470d002002410c6a2105200241086a2106034002400240200628020020052802002204460d00200228020421070c010b200441016a22072004490d04200441017422082007200820074b1b22084100480d040240024020040d002008102d21070c010b200228020420042008103121070b2007450d032002200736020420062008360200200528020021040b2005200441016a360200200720046a200141807f723a0000200341c000712104200321012003410775220721032007200472452007417f4720044572470d000b0b02400240200241086a2802002002410c6a2802002204460d00200228020421030c010b200441016a22032004490d02200441017422072003200720034b1b22074100480d020240024020040d002007102d21030c010b200228020420042007103121030b2003450d0120022003360204200241086a20073602002002410c6a28020021040b2002410c6a200441016a360200200320046a200141ff00713a00002000411f3a00000f0b1036000b1038000ba80302017e067f02400240024020014207872203502001a7220441c00071452205712003427f52200572734101470d002002410c6a2106200241086a2107034002400240200728020020062802002205460d00200228020421080c010b200541016a22082005490d04200541017422092008200920084b1b22094100480d040240024020050d002009102d21080c010b200228020420052009103121080b2008450d032002200836020420072009360200200628020021050b2006200541016a360200200820056a200441807f723a00002003a72104200342078722012103200150200441c00071452205712001427f52200572470d000b0b02400240200241086a2802002002410c6a2802002205460d00200228020421080c010b200541016a22082005490d02200541017422062008200620084b1b22064100480d020240024020050d002006102d21080c010b200228020420052006103121080b2008450d0120022008360204200241086a20063602002002410c6a28020021050b2002410c6a200541016a360200200820056a200441ff00713a00002000411f3a00000f0b1036000b1038000be403010a7f230041306b22022400200241216a220341076a210441002105410021064100210741002108410821090240024002400340200241186a2001109606024020022802184101470d002000200229021c370204200041013602002000410c6a200241186a410c6a29020037020002402007450d00200921070340024020072d00004109470d000240200741046a220a280200220528020441ffffffff0371450d002005280200102f200a28020021050b2005102f0b200741106a2107200641706a22060d000b0b2008450d042009102f0c040b200220032900003703082002200429000037000f20022d0020210a2002200229000f37001f200220022903083703180240024020072008470d00200741016a220b2007490d032005200b2005200b4b1b220b41ffffffff0071200b470d03200b410474220b4100480d030240024020070d00200b102d21090c010b20092006200b103121090b2009450d01200b41047621080b200920066a220b200a3a0000200b41016a2002290318370000200b41086a200229001f370000200541026a2105200641106a2106200741016a2107200a41ff01714106460d030c010b0b1036000b1038000b20002009360204200041003602002000410c6a2007360200200041086a20083602000b200241306a24000ba8b501020b7f017e230041f0006b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802082203200128020c2204460d00200441016a22052004490dad0120032005490dae012001280200220620046a2d000021072001410c6a22082005360200200741bf014b0d0120070ec001b502b502020304b502010101010105060708090a0b01010101010101010c0d010101010e0f101112010101131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01b5020b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a103a200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000cb6020b2000410b3a000420004101360200200041056a20073a00000cb5020b024002400240024002400240024020032005460d00200441026a21092005417f460db30120032009490db401200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410221070cba020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a103a200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb8020b4101210a410221070cb5020b4102210a410221070cb4020b4103210a0b410221070cb2020b024002400240024002400240024020032005460d00200441026a21092005417f460db40120032009490db501200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410321070cb9020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a103a200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb7020b4101210a410321070cb4020b4102210a410321070cb3020b4103210a0b410321070cb1020b024002400240024002400240024020032005460d00200441026a21092005417f460db50120032009490db601200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410421070cb8020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a103a200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb6020b4101210a410421070cb3020b4102210a410421070cb2020b4103210a0b410421070cb0020b410621070caf020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db1012003200541016a2207490df601200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410721070cb0020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cb0020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db1012003200541016a2207490df601200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410821070caf020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000caf020b200241d8006a2001109706410421042002280258220a4101460da201200241e0006a280200210b41002106200228025c210c410021070240200241e4006a28020022054102742209450d002009410275220341ffffffff03712003470daf0120094100480daf012009102d2204450dae02200941027621070b02402005450d00200541027421032009417c6a210620042109200c2105034020092005280200360200200941046a2109200541046a21052003417c6a22030d000b200641027641016a21060b0240200b450d00200c102f0b20022d005c4105470dab02200a450dab0220022802640da3010cab020b410a21070cab020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410b21070cac020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cac020b410021014100210902400240024002400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db3012003200541016a2204490df701200620056a2d0000210720082004360200200741ff00712001411f71742009722109200141076a2101200421052007418001710d000b024020014120490d00410d21012007410f4b0d020b20032004460d03200441016a22012004490db301200320014f0d0220012003104a000b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cae020b200620046a2d000021052008200136020020050d01410c21074100210a0cab020b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a103a200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000cac020b200041163a000420004101360200200041056a20053a00000cab020b410d21070ca8020b410e21070ca7020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df201200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410f21070ca8020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca8020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df201200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411021070ca7020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca7020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df201200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411121070ca6020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca6020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df201200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411221070ca5020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca5020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df201200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411321070ca4020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca4020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db10120032001490df401200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db2012003200141016a2207490df501200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411421070ca5020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca5020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca3020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db20120032001490df501200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db3012003200141016a2207490df601200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411521070ca4020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca4020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca2020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db30120032001490df601200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db4012003200141016a2207490df701200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411621070ca3020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca3020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca1020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db40120032001490df701200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db5012003200141016a2207490df801200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411721070ca2020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca2020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca0020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db50120032001490df801200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db6012003200141016a2207490df901200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411821070ca1020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca1020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9f020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db60120032001490df901200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db7012003200141016a2207490dfa01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411921070ca0020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca0020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9e020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db70120032001490dfa01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db8012003200141016a2207490dfb01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411a21070c9f020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9f020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9d020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db80120032001490dfb01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db9012003200141016a2207490dfc01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411b21070c9e020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9e020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9c020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db90120032001490dfc01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dba012003200141016a2207490dfd01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411c21070c9d020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9d020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9b020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dba0120032001490dfd01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbb012003200141016a2207490dfe01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411d21070c9c020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c9c020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9a020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbb0120032001490dfe01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbc012003200141016a2207490dff01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411e21070c9b020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c9b020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c99020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbc0120032001490dff01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbd012003200141016a2207490d8002200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d411f21070c9a020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c9a020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c98020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbd0120032001490d8002200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbe012003200141016a2207490d8102200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b41202107024020054120490d00410d21012004410f4b0d040b200aad210d0c99020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c99020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c97020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbe0120032001490d8102200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbf012003200141016a2207490d8202200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412121070c98020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c98020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c96020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbf0120032001490d8202200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc0012003200141016a2207490d8302200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412221070c97020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c97020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c95020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc00120032001490d8302200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc1012003200141016a2207490d8402200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412321070c96020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c96020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c94020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc10120032001490d8402200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc2012003200141016a2207490d8502200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412421070c95020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c95020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c93020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc20120032001490d8502200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc3012003200141016a2207490d8602200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412521070c94020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c94020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c92020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc30120032001490d8602200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc4012003200141016a2207490d8702200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412621070c93020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c93020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c91020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc40120032001490d8702200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc5012003200141016a2207490d8802200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412721070c92020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c92020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c90020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc50120032001490d8802200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc6012003200141016a2207490d8902200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412821070c91020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c91020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8f020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc60120032001490d8902200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc7012003200141016a2207490d8a02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412921070c90020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c90020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8e020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc70120032001490d8a02200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc8012003200141016a2207490d8b02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210d412a21070c8f020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c8f020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8d020b0240024020032005460d00200441026a21012005417f460dc50120032001490dc601200620056a2d000021092008200136020020090d01412b21074100210a0c8c020b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a103a200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000c8d020b200041153a000420004101360200200041056a20093a00000c8c020b0240024020032005460d00200441026a21012005417f460dc60120032001490dc701200620056a2d000021092008200136020020090d01412c21074100210a0c8b020b200241013a0048200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a103a200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000c8c020b200041153a000420004101360200200041056a20093a00000c8b020b4100210141002109024002400340410d210a2001411f4b0d0220032005460d012005417f460dc8012003200541016a2207490d8702200620056a2c0000210420082007360200200441ff00712001411f71742009722109200141076a21012007210520044100480d000b200441c00071210502402001411f4b0d0020050dc9010b02400240024020014120490d0020050d010b200441ff01714108490d0120014120490d0120050d010c030b20044180017241ff017141f801490d020b412d21070c8a020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a4105210a0b2000200a36020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8a020b4200210d4100210102400340410e21072001413f4b0d860220032005460d012005417f460dc8012003200541016a2209490dc901200620056a2d0000210420082009360200200441ff0071220aad2001413f71ad86200d84210d200141076a21012009210520044118744118752209417f4c0d000b200941c0007121050240024002402001413f4b0d0020050d010b02400240200141c000490d0020050d010b200141c000490d022009450d020c88020b200a41ff00470d87020c010b200d428080808080808080807f427f2001413f712201ad862001413f461b84210d0b412e21070c88020b200241013a0008200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241086a360238200241286a200241d8006a103a2002290328210d20022802302101410521070c85020b0240200320056b4104490d00200441056a21012005417b4b0dc80120032001490dc901200620056a280000210920082001360200412f21070c87020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a20004281808080d000370300200041086a2002290328370200200041106a200241286a41086a2802003602000c88020b0240200320056b4108490d00200441096a2101200541774b0dc90120032001490dca01200620056a290000210d20082001360200413021070c86020b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a2002290328210d200041106a2002280230360200200041086a200d37020020004281808080d0003703000c87020b413121070c84020b413221070c83020b413321070c82020b413421070c81020b413521070c80020b413621070cff010b413721070cfe010b413821070cfd010b413921070cfc010b413a21070cfb010b413b21070cfa010b413c21070cf9010b413d21070cf8010b413e21070cf7010b413f21070cf6010b41c00021070cf5010b41c10021070cf4010b41c20021070cf3010b41c30021070cf2010b41c40021070cf1010b41c50021070cf0010b41c60021070cef010b41c70021070cee010b41c80021070ced010b41c90021070cec010b41ca0021070ceb010b41cb0021070cea010b41cc0021070ce9010b41cd0021070ce8010b41ce0021070ce7010b41cf0021070ce6010b41d00021070ce5010b41d10021070ce4010b41d20021070ce3010b41d30021070ce2010b41d40021070ce1010b41d50021070ce0010b41d60021070cdf010b41d70021070cde010b41d80021070cdd010b41d90021070cdc010b41da0021070cdb010b41db0021070cda010b41dc0021070cd9010b41dd0021070cd8010b41de0021070cd7010b41df0021070cd6010b41e00021070cd5010b41e10021070cd4010b41e20021070cd3010b41e30021070cd2010b41e40021070cd1010b41e50021070cd0010b41e60021070ccf010b41e70021070cce010b41e80021070ccd010b41e90021070ccc010b41ea0021070ccb010b41eb0021070cca010b41ec0021070cc9010b41ed0021070cc8010b41ee0021070cc7010b41ef0021070cc6010b41f00021070cc5010b41f10021070cc4010b41f20021070cc3010b41f30021070cc2010b41f40021070cc1010b41f50021070cc0010b41f60021070cbf010b41f70021070cbe010b41f80021070cbd010b41f90021070cbc010b41fa0021070cbb010b41fb0021070cba010b41fc0021070cb9010b41fd0021070cb8010b41fe0021070cb7010b41ff0021070cb6010b41800121070cb5010b41810121070cb4010b41820121070cb3010b41830121070cb2010b41840121070cb1010b41850121070cb0010b41860121070caf010b41870121070cae010b41880121070cad010b41890121070cac010b418a0121070cab010b418b0121070caa010b418c0121070ca9010b418d0121070ca8010b418e0121070ca7010b418f0121070ca6010b41900121070ca5010b41910121070ca4010b41920121070ca3010b41930121070ca2010b41940121070ca1010b41950121070ca0010b41960121070c9f010b41970121070c9e010b41980121070c9d010b41990121070c9c010b419a0121070c9b010b419b0121070c9a010b419c0121070c99010b419d0121070c98010b419e0121070c97010b419f0121070c96010b41a00121070c95010b41a10121070c94010b41a20121070c93010b41a30121070c92010b41a40121070c91010b41a50121070c90010b41a60121070c8f010b41a70121070c8e010b41a80121070c8d010b41a90121070c8c010b41aa0121070c8b010b41ab0121070c8a010b200041013602002000200241d8006a41047222012902003702042000410c6a200141086a2902003702000c8b010b2002280260102f0c87010b417f2005104b000b20052003104a000b417f2009104b000b20092003104a000b417f2009104b000b20092003104a000b417f2009104b000b20092003104a000b417f200541016a104b000b417f200541016a104b000b1038000b417f200541016a104b000b417f200541016a104b000b417f2001104b000b417f200541016a104b000b417f200541016a104b000b417f200541016a104b000b417f200541016a104b000b417f200541016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b417f200141016a104b000b417f2001104b000b20012003104a000b417f2001104b000b20012003104a000b417f200541016a104b000b2009417f2001411f7174722109412d21070c410b417f200541016a104b000b200541016a2003104a000b20052001104b000b20012003104a000b20052001104b000b20012003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b200541016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b20012003104a000b200141016a2003104a000b200541016a2003104a000b0b200020073a0004200020022f00183b000520004101360200200041106a2001360200200041086a200d370200200041076a2002411a6a2d00003a00000c030b0240024002400240024002400240024020072006470d002004210a0c010b20072006490d01024020060d004104210a2007450d012004102f0c010b2004200741027420064102741031220a450d080b4100210941002104034002402009411f4d0d00410f21010c060b20012802082207200128020c2205460d04200541016a22032005490d0220072003490d03200128020020056a2d0000210520082003360200200541ff00712009411f71742004722104200941076a21092005418001710d000b20094120490d05410d21012005410f4d0d050c040b41ebafca00412441f8b4ca001039000b417f2003104b000b20032007104a000b200241013a0018200241ec006a41013602002002420137025c200241b4afca003602582002412836023c2002200241386a3602682002200241186a360238200241286a200241d8006a103a410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a280200360200200641ffffffff0371450d03200a102f0c030b410c102d2209450d0120092004360208200920063602042009200a360200410921070b20004100360200200041106a200d3703002000410c6a2009360200200041096a200a3a0000200041086a20073a00000c010b1036000b200241f0006a24000bd607020c7f017e230041d0006b220224004100210341002104024002400240024002400240024002400240034002402003411f4d0d00410f21030c090b20012802082205200128020c2206460d07200641016a22072006490d0120052007490d04200128020020066a2d000021062001200736020c200641ff00712003411f71742004722104200341076a21032006418001710d000b024020034120490d00410d21032006410f4b0d080b20024100360210200242043703082004450d05410421084100210341002109024002400240024003402003210a2009220b41016a2109410021034100210503402003411f4b0d02024002402001280208220c200128020c2206460d00200641016a22072006490d09200c20074f0d012007200c104a000b2002200a36020c2002200b360210200241013a0027200241cc006a41013602002002420137023c200241b4afca003602382002412836021c2002200241186a3602482002200241276a360218200241286a200241386a103a20022802282103200228022c2106200228023021074100210d410521010c060b200128020020066a2d000021062001200736020c200641ff00712003411f71742005722105200341076a21032006418001710d000b024020034120490d002006410f4b0d030b024002400240200b200a460d00200a2103200b210a0c010b200a41016a2203200a490d01200a41017422062003200620034b1b220341ffffffff03712003470d01200341027422034100480d0102400240200a0d002003102d21080c010b2008200a4102742003103121080b2008450d0920022008360208200341027621030b2005410876210d2008200a4102746a200536020020092004460d0a0c010b0b1038000b2002200a36020c2002200b360210410f21010c010b2002200a36020c2002200b360210410d21010b0b20004101360200200041106a20073602002000410c6a2006360200200041086a20033602002000200d410874200172360204200a450d082008102f0c080b417f2007104b000b417f2007104b000b1036000b20072005104a000b2002200336020c200220093602100b20002002290308370204200041003602002000410c6a200241106a2802003602000c020b200241013a0027200241cc006a41013602002002420137023c200241b4afca003602382002412836021c2002200241186a3602482002200241276a360218200241286a200241386a103a410521030b200241086a41086a200241286a41086a280200220136020020022002290328220e37030820002003360204200041086a200e370200200041106a2001360200200041013602000b200241d0006a24000bb4c10202097f017e230041106b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000eac01000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab01000b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dae01200441017422062005200620054b1b22064100480dae010240024020040d002006102d21050c010b200228020420042006103121050b2005450dad0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41003a00000cab010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dad01200441017422062005200620054b1b22064100480dad010240024020040d002006102d21050c010b200228020420042006103121050b2005450dac0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41013a00000caa010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dac01200441017422082005200820054b1b22084100480dac010240024020040d002008102d21050c010b200628020020042008103121050b2005450dab0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41023a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490dac01200441017422082005200820054b1b22084100480dac010240024020040d002008102d21050c010b200628020020042008103121050b2005450dab0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca9010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d002008102d21050c010b200628020020042008103121050b2005450daa0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41033a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d002008102d21050c010b200628020020042008103121050b2005450daa0120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca8010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d002008102d21050c010b200628020020042008103121050b2005450da90120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41043a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d002008102d21050c010b200628020020042008103121050b2005450da90120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00000ca7010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da901200441017422062005200620054b1b22064100480da9010240024020040d002006102d21050c010b200228020420042006103121050b2005450da80120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41053a00000ca6010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da801200441017422062005200620054b1b22064100480da8010240024020040d002006102d21050c010b200228020420042006103121050b2005450da70120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a410b3a00000ca5010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da701200441017422072006200720064b1b22074100480da7010240024020040d002007102d21060c010b200928020020042007103121060b2006450da60120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a410c3a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da8012004410174220a2006200a20064b1b220a4100480da8010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da701200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca5010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d002007102d21060c010b200928020020042007103121060b2006450da50120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a410d3a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da7012004410174220a2006200a20064b1b220a4100480da7010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da601200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca4010b0b200241046a210902400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da501200441017422062005200620054b1b22064100480da5010240024020040d002006102d21050c010b200928020020042006103121050b2005450da40120022005360204200241086a20063602002002410c6a28020021040b2002410c6a2207200441016a360200200520046a410e3a0000200320012802042204280204220520042802002204200420054102746a20021092062003210420032d0000411f470dab0120012802042802082105200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da6012004410174220a2006200a20064b1b220a4100480da6010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da501200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca3010b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da401200441017422062005200620054b1b22064100480da4010240024020040d002006102d21050c010b200228020420042006103121050b2005450da30120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a410f3a00000ca1010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da301200441017422072006200720064b1b22074100480da3010240024020040d002007102d21060c010b200928020020042007103121060b2006450da20120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41103a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da4012004410174220a2006200a20064b1b220a4100480da4010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da301200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000ca1010b0b200241046a2109200141046a280200210520012d0001210b02400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d002007102d21060c010b200928020020042007103121060b2006450da10120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41113a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da3012004410174220a2006200a20064b1b220a4100480da3010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450da201200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b02400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da201200441017422062005200620054b1b22064100480da2010240024020040d002006102d21050c010b200928020020042006103121050b2005450da10120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a200b3a00000c9f010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da101200441017422062005200620054b1b22064100480da1010240024020040d002006102d21050c010b200228020420042006103121050b2005450da00120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a411a3a00000c9e010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da001200441017422062005200620054b1b22064100480da0010240024020040d002006102d21050c010b200228020420042006103121050b2005450d9f0120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a411b3a00000c9d010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9f01200441017422072006200720064b1b22074100480d9f010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9e0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41203a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490da0012004410174220a2006200a20064b1b220a4100480da0010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9f01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9d010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9d0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41213a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9f012004410174220a2006200a20064b1b220a4100480d9f010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9e01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9c010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9c0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41223a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9e012004410174220a2006200a20064b1b220a4100480d9e010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9d01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9b010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9b0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41233a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9d012004410174220a2006200a20064b1b220a4100480d9d010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9c01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c9a010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d002007102d21060c010b200928020020042007103121060b2006450d9a0120022006360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200620046a41243a0000200241086a2108034002400240200828020020072802002204460d00200928020021060c010b200441016a22062004490d9c012004410174220a2006200a20064b1b220a4100480d9c010240024020040d00200a102d21060c010b20092802002004200a103121060b2006450d9b01200220063602042008200a360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c99010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9a01200441017422082007200820074b1b22084100480d9a010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d990120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41283a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d9b012004410174220b2007200b20074b1b220b4100480d9b010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9a01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9b01200441017422092006200920064b1b22094100480d9b010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d9a012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c98010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d980120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41293a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d9a012004410174220b2007200b20074b1b220b4100480d9a010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9901200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9a01200441017422092006200920064b1b22094100480d9a010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d99012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c97010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d970120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412a3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d99012004410174220b2007200b20074b1b220b4100480d99010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9801200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9901200441017422092006200920064b1b22094100480d99010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d98012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c96010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d960120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412b3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d98012004410174220b2007200b20074b1b220b4100480d98010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9701200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9801200441017422092006200920064b1b22094100480d98010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d97012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c95010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d950120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412c3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d97012004410174220b2007200b20074b1b220b4100480d97010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9601200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9701200441017422092006200920064b1b22094100480d97010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d96012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c94010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d940120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412d3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d96012004410174220b2007200b20074b1b220b4100480d96010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9501200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9601200441017422092005200920054b1b22094100480d96010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d95012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c93010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d930120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412e3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d95012004410174220b2007200b20074b1b220b4100480d95010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9401200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9501200441017422092005200920054b1b22094100480d95010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d94012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c92010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d920120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a412f3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d94012004410174220b2007200b20074b1b220b4100480d94010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9301200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9401200441017422092006200920064b1b22094100480d94010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d93012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c91010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d910120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41303a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d93012004410174220b2007200b20074b1b220b4100480d93010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9201200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9301200441017422092006200920064b1b22094100480d93010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d92012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c90010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d900120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41313a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d92012004410174220b2007200b20074b1b220b4100480d92010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9101200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9201200441017422092005200920054b1b22094100480d92010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d91012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c8f010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8f0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41323a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d91012004410174220b2007200b20074b1b220b4100480d91010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d9001200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d9101200441017422092005200920054b1b22094100480d91010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d90012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c8e010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8e0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41333a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d90012004410174220b2007200b20074b1b220b4100480d90010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8f01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d9001200441017422092006200920064b1b22094100480d90010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8f012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8d010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8d0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41343a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8f012004410174220b2007200b20074b1b220b4100480d8f010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8e01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8f01200441017422092006200920064b1b22094100480d8f010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8e012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8c010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8c0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41353a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8f012004410174220b2007200b20074b1b220b4100480d8f010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8d01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8f01200441017422092006200920064b1b22094100480d8f010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d90012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8b010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8e0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41363a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8e012004410174220b2007200b20074b1b220b4100480d8e010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8f01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8e01200441017422092006200920064b1b22094100480d8e010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8f012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c8a010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8d0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41373a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8d012004410174220b2007200b20074b1b220b4100480d8d010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8e01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8d01200441017422092005200920054b1b22094100480d8d010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8e012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c89010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8c0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41383a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8c012004410174220b2007200b20074b1b220b4100480d8c010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8d01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8c01200441017422092006200920064b1b22094100480d8c010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8d012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c88010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8b0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a41393a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8b012004410174220b2007200b20074b1b220b4100480d8b010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8c01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8b01200441017422092005200920054b1b22094100480d8b010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8c012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c87010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d8a0120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413a3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d8a012004410174220b2007200b20074b1b220b4100480d8a010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8b01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200541807f72200541ff0071200541077622041b3a00002004210520040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021050c010b200441016a22052004490d8a01200441017422092005200920054b1b22094100480d8a010240024020040d002009102d21050c010b200a28020020042009103121050b2005450d8b012002200536020420082009360200200728020021040b2007200441016a360200200520046a200641807f72200641ff0071200641077622041b3a00002004210620040d000c86010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d890120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413b3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d89012004410174220b2007200b20074b1b220b4100480d89010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8a01200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8901200441017422092006200920064b1b22094100480d89010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d8a012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c85010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d880120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413c3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d88012004410174220b2007200b20074b1b220b4100480d88010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8901200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8801200441017422092006200920064b1b22094100480d88010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d89012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c84010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d870120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413d3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d87012004410174220b2007200b20074b1b220b4100480d87010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8801200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8701200441017422092006200920064b1b22094100480d87010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d88012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c83010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d002008102d21070c010b200a28020020042008103121070b2007450d860120022007360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200720046a413e3a0000200241086a2109034002400240200928020020082802002204460d00200a28020021070c010b200441016a22072004490d86012004410174220b2007200b20074b1b220b4100480d86010240024020040d00200b102d21070c010b200a2802002004200b103121070b2007450d8701200220073602042009200b360200200828020021040b2008200441016a360200200720046a200641807f72200641ff0071200641077622041b3a00002004210620040d000b2002410c6a2107200241086a2108034002400240200828020020072802002204460d00200a28020021060c010b200441016a22062004490d8601200441017422092006200920064b1b22094100480d86010240024020040d002009102d21060c010b200a28020020042009103121060b2006450d87012002200636020420082009360200200728020021040b2007200441016a360200200620046a200541807f72200541ff0071200541077622041b3a00002004210520040d000c82010b0b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8401200441017422082005200820054b1b22084100480d84010240024020040d002008102d21050c010b200628020020042008103121050b2005450d850120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a413f3a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490d8401200441017422082005200820054b1b22084100480d84010240024020040d002008102d21050c010b200628020020042008103121050b2005450d850120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a20073a00000c80010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d002008102d21050c010b200628020020042008103121050b2005450d840120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41c0003a000002400240200241086a28020020082802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d002008102d21050c010b200628020020042008103121050b2005450d840120022005360204200241086a20083602002002410c6a28020021040b2002410c6a200441016a360200200520046a20073a00000c7f0b200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8201200441017422072005200720054b1b22074100480d82010240024020040d002007102d21050c010b200228020420042007103121050b2005450d830120022005360204200241086a20073602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c1003a00002003200620021093062003210420032d0000411f470d87010c7e0b200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8101200441017422062005200620054b1b22064100480d81010240024020040d002006102d21050c010b200228020420042006103121050b2005450d820120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c2003a00002003200c20021094062003210420032d0000411f470d86010c7d0b200241046a2106200141046a280200210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8001200441017422082005200820054b1b22084100480d80010240024020040d002008102d21050c010b200628020020042008103121050b2005450d810120022005360204200241086a20083602002002410c6a28020021040b2002410c6a2208200441016a360200200520046a41c3003a000002400240200241086a2802002205200828020022046b4104490d00200628020021050c010b200441046a22082004490d8001200541017422042008200420084b1b22044100480d80010240024020050d002004102d21050c010b200628020020052004103121050b2005450d810120022005360204200241086a20043602002002410c6a28020021040b2002410c6a200441046a360200200520046a20073600000c7c0b200241046a2106200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d7f200441017422072005200720054b1b22074100480d7f0240024020040d002007102d21050c010b200628020020042007103121050b2005450d800120022005360204200241086a20073602002002410c6a28020021040b2002410c6a2207200441016a360200200520046a41c4003a000002400240200241086a2802002205200728020022046b4108490d00200628020021050c010b200441086a22072004490d7f200541017422042007200420074b1b22044100480d7f0240024020050d002004102d21050c010b200628020020052004103121050b2005450d800120022005360204200241086a20043602002002410c6a28020021040b2002410c6a200441086a360200200520046a200c3700000c7b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7e200441017422062005200620054b1b22064100480d7e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c5003a00000c7a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7d200441017422062005200620054b1b22064100480d7d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c6003a00000c790b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7c200441017422062005200620054b1b22064100480d7c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c7003a00000c780b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7b200441017422062005200620054b1b22064100480d7b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c8003a00000c770b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7a200441017422062005200620054b1b22064100480d7a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41c9003a00000c760b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d79200441017422062005200620054b1b22064100480d790240024020040d002006102d21050c010b200228020420042006103121050b2005450d7a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ca003a00000c750b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d78200441017422062005200620054b1b22064100480d780240024020040d002006102d21050c010b200228020420042006103121050b2005450d7920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cb003a00000c740b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d77200441017422062005200620054b1b22064100480d770240024020040d002006102d21050c010b200228020420042006103121050b2005450d7820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cc003a00000c730b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d76200441017422062005200620054b1b22064100480d760240024020040d002006102d21050c010b200228020420042006103121050b2005450d7720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cd003a00000c720b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d75200441017422062005200620054b1b22064100480d750240024020040d002006102d21050c010b200228020420042006103121050b2005450d7620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ce003a00000c710b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d74200441017422062005200620054b1b22064100480d740240024020040d002006102d21050c010b200228020420042006103121050b2005450d7520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41cf003a00000c700b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d73200441017422062005200620054b1b22064100480d730240024020040d002006102d21050c010b200228020420042006103121050b2005450d7420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d0003a00000c6f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d72200441017422062005200620054b1b22064100480d720240024020040d002006102d21050c010b200228020420042006103121050b2005450d7320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d1003a00000c6e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d71200441017422062005200620054b1b22064100480d710240024020040d002006102d21050c010b200228020420042006103121050b2005450d7220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d2003a00000c6d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d70200441017422062005200620054b1b22064100480d700240024020040d002006102d21050c010b200228020420042006103121050b2005450d7120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d3003a00000c6c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6f200441017422062005200620054b1b22064100480d6f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d7020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d4003a00000c6b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6e200441017422062005200620054b1b22064100480d6e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d5003a00000c6a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6d200441017422062005200620054b1b22064100480d6d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d6003a00000c690b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6c200441017422062005200620054b1b22064100480d6c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d7003a00000c680b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6b200441017422062005200620054b1b22064100480d6b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d8003a00000c670b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6a200441017422062005200620054b1b22064100480d6a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41d9003a00000c660b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d69200441017422062005200620054b1b22064100480d690240024020040d002006102d21050c010b200228020420042006103121050b2005450d6a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41da003a00000c650b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d68200441017422062005200620054b1b22064100480d680240024020040d002006102d21050c010b200228020420042006103121050b2005450d6920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41db003a00000c640b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d67200441017422062005200620054b1b22064100480d670240024020040d002006102d21050c010b200228020420042006103121050b2005450d6820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41dc003a00000c630b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d66200441017422062005200620054b1b22064100480d660240024020040d002006102d21050c010b200228020420042006103121050b2005450d6720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41dd003a00000c620b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d65200441017422062005200620054b1b22064100480d650240024020040d002006102d21050c010b200228020420042006103121050b2005450d6620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41de003a00000c610b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d64200441017422062005200620054b1b22064100480d640240024020040d002006102d21050c010b200228020420042006103121050b2005450d6520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41df003a00000c600b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d63200441017422062005200620054b1b22064100480d630240024020040d002006102d21050c010b200228020420042006103121050b2005450d6420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e0003a00000c5f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d62200441017422062005200620054b1b22064100480d620240024020040d002006102d21050c010b200228020420042006103121050b2005450d6320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e1003a00000c5e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d61200441017422062005200620054b1b22064100480d610240024020040d002006102d21050c010b200228020420042006103121050b2005450d6220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e2003a00000c5d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d60200441017422062005200620054b1b22064100480d600240024020040d002006102d21050c010b200228020420042006103121050b2005450d6120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e3003a00000c5c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5f200441017422062005200620054b1b22064100480d5f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d6020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e4003a00000c5b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5e200441017422062005200620054b1b22064100480d5e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e5003a00000c5a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5d200441017422062005200620054b1b22064100480d5d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e6003a00000c590b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e7003a00000c580b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e8003a00000c570b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41e9003a00000c560b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ea003a00000c550b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5a200441017422062005200620054b1b22064100480d5a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41eb003a00000c540b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d59200441017422062005200620054b1b22064100480d590240024020040d002006102d21050c010b200228020420042006103121050b2005450d5a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ec003a00000c530b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d58200441017422062005200620054b1b22064100480d580240024020040d002006102d21050c010b200228020420042006103121050b2005450d5920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ed003a00000c520b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d57200441017422062005200620054b1b22064100480d570240024020040d002006102d21050c010b200228020420042006103121050b2005450d5820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ee003a00000c510b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d56200441017422062005200620054b1b22064100480d560240024020040d002006102d21050c010b200228020420042006103121050b2005450d5720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ef003a00000c500b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d55200441017422062005200620054b1b22064100480d550240024020040d002006102d21050c010b200228020420042006103121050b2005450d5620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f0003a00000c4f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d54200441017422062005200620054b1b22064100480d540240024020040d002006102d21050c010b200228020420042006103121050b2005450d5520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f1003a00000c4e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d53200441017422062005200620054b1b22064100480d530240024020040d002006102d21050c010b200228020420042006103121050b2005450d5420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f2003a00000c4d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d52200441017422062005200620054b1b22064100480d520240024020040d002006102d21050c010b200228020420042006103121050b2005450d5320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f3003a00000c4c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d51200441017422062005200620054b1b22064100480d510240024020040d002006102d21050c010b200228020420042006103121050b2005450d5220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f4003a00000c4b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d50200441017422062005200620054b1b22064100480d500240024020040d002006102d21050c010b200228020420042006103121050b2005450d5120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f5003a00000c4a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4f200441017422062005200620054b1b22064100480d4f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d5020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f6003a00000c490b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4e200441017422062005200620054b1b22064100480d4e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f7003a00000c480b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4d200441017422062005200620054b1b22064100480d4d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f8003a00000c470b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4c200441017422062005200620054b1b22064100480d4c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41f9003a00000c460b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4b200441017422062005200620054b1b22064100480d4b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fa003a00000c450b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4a200441017422062005200620054b1b22064100480d4a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fb003a00000c440b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d49200441017422062005200620054b1b22064100480d490240024020040d002006102d21050c010b200228020420042006103121050b2005450d4a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fc003a00000c430b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d48200441017422062005200620054b1b22064100480d480240024020040d002006102d21050c010b200228020420042006103121050b2005450d4920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fd003a00000c420b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d47200441017422062005200620054b1b22064100480d470240024020040d002006102d21050c010b200228020420042006103121050b2005450d4820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41fe003a00000c410b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d46200441017422062005200620054b1b22064100480d460240024020040d002006102d21050c010b200228020420042006103121050b2005450d4720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ff003a00000c400b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d45200441017422062005200620054b1b22064100480d450240024020040d002006102d21050c010b200228020420042006103121050b2005450d4620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4180013a00000c3f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d44200441017422062005200620054b1b22064100480d440240024020040d002006102d21050c010b200228020420042006103121050b2005450d4520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4181013a00000c3e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d43200441017422062005200620054b1b22064100480d430240024020040d002006102d21050c010b200228020420042006103121050b2005450d4420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4182013a00000c3d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d42200441017422062005200620054b1b22064100480d420240024020040d002006102d21050c010b200228020420042006103121050b2005450d4320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4183013a00000c3c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d41200441017422062005200620054b1b22064100480d410240024020040d002006102d21050c010b200228020420042006103121050b2005450d4220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4184013a00000c3b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d40200441017422062005200620054b1b22064100480d400240024020040d002006102d21050c010b200228020420042006103121050b2005450d4120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4185013a00000c3a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3f200441017422062005200620054b1b22064100480d3f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d4020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4186013a00000c390b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3e200441017422062005200620054b1b22064100480d3e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4187013a00000c380b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4188013a00000c370b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4189013a00000c360b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418a013a00000c350b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3a200441017422062005200620054b1b22064100480d3a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418b013a00000c340b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d39200441017422062005200620054b1b22064100480d390240024020040d002006102d21050c010b200228020420042006103121050b2005450d3a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418c013a00000c330b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d38200441017422062005200620054b1b22064100480d380240024020040d002006102d21050c010b200228020420042006103121050b2005450d3920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418d013a00000c320b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d37200441017422062005200620054b1b22064100480d370240024020040d002006102d21050c010b200228020420042006103121050b2005450d3820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418e013a00000c310b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d36200441017422062005200620054b1b22064100480d360240024020040d002006102d21050c010b200228020420042006103121050b2005450d3720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a418f013a00000c300b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d35200441017422062005200620054b1b22064100480d350240024020040d002006102d21050c010b200228020420042006103121050b2005450d3620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4190013a00000c2f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d34200441017422062005200620054b1b22064100480d340240024020040d002006102d21050c010b200228020420042006103121050b2005450d3520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4191013a00000c2e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d33200441017422062005200620054b1b22064100480d330240024020040d002006102d21050c010b200228020420042006103121050b2005450d3420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4192013a00000c2d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d32200441017422062005200620054b1b22064100480d320240024020040d002006102d21050c010b200228020420042006103121050b2005450d3320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4193013a00000c2c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d31200441017422062005200620054b1b22064100480d310240024020040d002006102d21050c010b200228020420042006103121050b2005450d3220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4194013a00000c2b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d30200441017422062005200620054b1b22064100480d300240024020040d002006102d21050c010b200228020420042006103121050b2005450d3120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4195013a00000c2a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2f200441017422062005200620054b1b22064100480d2f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d3020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4196013a00000c290b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2e200441017422062005200620054b1b22064100480d2e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4197013a00000c280b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2d200441017422062005200620054b1b22064100480d2d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4198013a00000c270b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2c200441017422062005200620054b1b22064100480d2c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a4199013a00000c260b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2b200441017422062005200620054b1b22064100480d2b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419a013a00000c250b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2a200441017422062005200620054b1b22064100480d2a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419b013a00000c240b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d29200441017422062005200620054b1b22064100480d290240024020040d002006102d21050c010b200228020420042006103121050b2005450d2a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419c013a00000c230b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d28200441017422062005200620054b1b22064100480d280240024020040d002006102d21050c010b200228020420042006103121050b2005450d2920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419d013a00000c220b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d27200441017422062005200620054b1b22064100480d270240024020040d002006102d21050c010b200228020420042006103121050b2005450d2820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419e013a00000c210b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d26200441017422062005200620054b1b22064100480d260240024020040d002006102d21050c010b200228020420042006103121050b2005450d2720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a419f013a00000c200b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d25200441017422062005200620054b1b22064100480d250240024020040d002006102d21050c010b200228020420042006103121050b2005450d2620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a0013a00000c1f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d24200441017422062005200620054b1b22064100480d240240024020040d002006102d21050c010b200228020420042006103121050b2005450d2520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a1013a00000c1e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d23200441017422062005200620054b1b22064100480d230240024020040d002006102d21050c010b200228020420042006103121050b2005450d2420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a2013a00000c1d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d22200441017422062005200620054b1b22064100480d220240024020040d002006102d21050c010b200228020420042006103121050b2005450d2320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a3013a00000c1c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d21200441017422062005200620054b1b22064100480d210240024020040d002006102d21050c010b200228020420042006103121050b2005450d2220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a4013a00000c1b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d20200441017422062005200620054b1b22064100480d200240024020040d002006102d21050c010b200228020420042006103121050b2005450d2120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a5013a00000c1a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1f200441017422062005200620054b1b22064100480d1f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d2020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a6013a00000c190b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1e200441017422062005200620054b1b22064100480d1e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a7013a00000c180b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1d200441017422062005200620054b1b22064100480d1d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a8013a00000c170b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1c200441017422062005200620054b1b22064100480d1c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41a9013a00000c160b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1b200441017422062005200620054b1b22064100480d1b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41aa013a00000c150b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1a200441017422062005200620054b1b22064100480d1a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d1b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ab013a00000c140b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d19200441017422062005200620054b1b22064100480d190240024020040d002006102d21050c010b200228020420042006103121050b2005450d1a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ac013a00000c130b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d18200441017422062005200620054b1b22064100480d180240024020040d002006102d21050c010b200228020420042006103121050b2005450d1920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ad013a00000c120b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d17200441017422062005200620054b1b22064100480d170240024020040d002006102d21050c010b200228020420042006103121050b2005450d1820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ae013a00000c110b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d16200441017422062005200620054b1b22064100480d160240024020040d002006102d21050c010b200228020420042006103121050b2005450d1720022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41af013a00000c100b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d15200441017422062005200620054b1b22064100480d150240024020040d002006102d21050c010b200228020420042006103121050b2005450d1620022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b0013a00000c0f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d002006102d21050c010b200228020420042006103121050b2005450d1520022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b1013a00000c0e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d002006102d21050c010b200228020420042006103121050b2005450d1420022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b2013a00000c0d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d002006102d21050c010b200228020420042006103121050b2005450d1320022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b3013a00000c0c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d002006102d21050c010b200228020420042006103121050b2005450d1220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b4013a00000c0b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d002006102d21050c010b200228020420042006103121050b2005450d1220022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b5013a00000c0a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d002006102d21050c010b200228020420042006103121050b2005450d1120022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b6013a00000c090b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d11200441017422062005200620054b1b22064100480d110240024020040d002006102d21050c010b200228020420042006103121050b2005450d1020022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b7013a00000c080b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d10200441017422062005200620054b1b22064100480d100240024020040d002006102d21050c010b200228020420042006103121050b2005450d0f20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b8013a00000c070b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0f200441017422062005200620054b1b22064100480d0f0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0e20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41b9013a00000c060b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0e200441017422062005200620054b1b22064100480d0e0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0d20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41ba013a00000c050b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0d200441017422062005200620054b1b22064100480d0d0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0c20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bb013a00000c040b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0c200441017422062005200620054b1b22064100480d0c0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0b20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bc013a00000c030b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0b200441017422062005200620054b1b22064100480d0b0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0a20022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bd013a00000c020b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0a200441017422062005200620054b1b22064100480d0a0240024020040d002006102d21050c010b200228020420042006103121050b2005450d0920022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41be013a00000c010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d09200441017422062005200620054b1b22064100480d090240024020040d002006102d21050c010b200228020420042006103121050b2005450d0820022005360204200241086a20063602002002410c6a28020021040b2002410c6a200441016a360200200520046a41bf013a00000b2000411f3a000020012d00004109470d090240200141046a280200220228020441ffffffff0371450d002002280200102f200128020421020b2002102f0c090b1036000b1038000b1038000b1036000b1038000b1036000b1036000b1038000b20002004290200370200200041086a200441086a29020037020020012d00004109470d000240200141046a280200220228020441ffffffff0371450d002002280200102f200128020421020b2002102f0b200341106a24000b8007010b7f230041d0086b22022400410021034100210402400240024002400240024002400240024002400240034002402003411f4d0d00410f21030c030b20012802082205200128020c2206460d01200641016a22072006490d0420052007490d092001280200220820066a2d000021062001200736020c200641ff00712003411f71742004722104200341076a21032006418001710d000b024020034120490d00410d21032006410f4b0d020b20040d022000428080808010370200200041086a42003702000c0a0b200241013a0089082002411c6a41013602002002420137020c200241b4afca003602082002412836029c08200220024198086a360218200220024189086a36029808200241b8086a200241086a103a410521030b2000200336020420004101360200200041086a20022903b808370200200041106a200241b8086a41086a2802003602000c080b200241086a410041800810e7061a410121094100210a410021064100210b02400340200520076b2004200b6b22034180082003418008491b2203490d01200720036a220c2007490d032005200c490d04200241086a200820076a200310e8061a2001200c36020c02400240200a20066b2003490d00200320066a210c0c010b200620036a220c2006490d07200a4101742207200c2007200c4b1b22074100480d0702400240200a0d002007102d21090c010b2009200a2007103121090b2009450d062007210a0b200920066a200241086a200310e8061a20042003200b6a220b4d0d08200128020c21072001280208210520012802002108200c21060c000b0b200241013a00a708200241cc086a4101360200200242013702bc08200241b4afca003602b8082002412836029c08200220024198086a3602c8082002200241a7086a36029808200241a8086a200241b8086a103a20024194086a200241b0086a280200360000200220022903a80837008c08200041053a000420002002290089083700052000410c6a20024190086a29000037000020004101360200200a450d072009102f0c070b417f2007104b000b2007200c104b000b200c2005104a000b1036000b1038000b20072005104a000b200241086a2009200c1066024020022802084101470d000240200a450d002009102f0b200041083a0004200041013602000c010b200020093602042000410c6a200c360200200041086a200a360200200041003602000b200241d0086a24000b15002001200028020022002802002000280208104c0bb30401067f200441046a21050240024002400240200441086a2802002004410c6a2802002206460d00200528020021070c010b200641016a22072006490d02200641017422082007200820074b1b22084100480d020240024020060d002008102d21070c010b200528020020062008103121070b2007450d0120042007360204200441086a20083602002004410c6a28020021060b2004410c6a2208200641016a360200200720066a20024101463a0000200441086a2109034002400240200928020020082802002206460d00200528020021070c010b200641016a22072006490d032006410174220a2007200a20074b1b220a4100480d030240024020060d00200a102d21070c010b20052802002006200a103121070b2007450d02200420073602042009200a360200200828020021060b2008200641016a360200200720066a200141807f72200141ff0071200141077622061b3a00002006210120060d000b024020024101470d002004410c6a2107200441086a2108034002400240200828020020072802002206460d00200528020021010c010b200641016a22012006490d04200641017422092001200920014b1b22094100480d040240024020060d002009102d21010c010b200528020020062009103121010b2001450d032004200136020420082009360200200728020021060b2007200641016a360200200120066a200341807f72200341ff0071200341077622061b3a00002006210320060d000b0b2000411f3a00000f0b1036000b1038000baa07010a7f230041d0006b220224000240024002400240024002400240024002400240024020012802082203200128020c2204460d00200441016a22052004490d0220032005490d032001280200220620046a2d000021072001200536020c20074102490d01200041173a000420004101360200200041056a20073a00000c0a0b200241013a001f200241cc006a41013602002002420137023c200241b4afca00360238200241283602342002200241306a36024820022002411f6a360230200241206a200241386a103a2002411b6a200241286a28020036000020022002290320370013200220022900103703002002200241176a290000370007200041053a0004200020022903003700052000410c6a2002290007370000200041013602000c090b410120036b2108200441026a21044100210541002109034002402005411f4d0d00410f21050c090b200820046a4102460d072004450d0320032004490d05200620046a417f6a2d0000210a2001200436020c200a41ff00712005411f71742009722109200441016a2104200541076a2105200a418001710d000b024020054120490d00410d2105200a410f4b0d080b410021050240024002402007410171450d002004417f6a2104410021054100210b034002402005411f4d0d00410f21040c040b20032004460d022004417f460d072003200441016a2208490d09200620046a2d0000210a2001200836020c200a41ff00712005411f7174200b72210b200541076a210520082104200a418001710d000b024020054120490d00410d2104200a410f4b0d030b410121050b20002009360204200041003602002000410c6a200b360200200041086a20053602000c0a0b200241013a0000200241cc006a41013602002002420137023c200241b4afca00360238200241283602342002200241306a36024820022002360230200241106a200241386a103a410521040b2000200436020420004101360200200041086a2002290310370200200041106a200241106a41086a2802003602000c080b417f2005104b000b20052003104a000b417f2004104b000b417f200441016a104b000b20042003104a000b200441016a2003104a000b200241013a0000200241cc006a41013602002002420137023c200241b4afca00360238200241283602342002200241306a36024820022002360230200241106a200241386a103a410521050b2000200536020420004101360200200041086a2002290310370200200041106a200241106a41086a2802003602000b200241d0006a24000bee0201067f230041c0006b2202240041002103410021040240024003400240024002402003411f4b0d002001280204220520012802082206460d01200641016a22072006490d04200520074f0d0220072005104a000b200041013602002000410f3a00040c040b200241013a000f200241346a410136020020024201370224200241b4afca003602202002412836023c2002200241386a36023020022002410f6a360238200241106a200241206a103a2002410b6a200241186a28020036000020022002290310370003200041053a0004200020022900003700052000410c6a200241076a290000370000200041013602000c030b200128020020066a2d0000210620012007360208200641ff00712003411f71742004722104200341076a21032006418001710d000b0240024020034120490d002006410f4b0d010b20004100360200200020043602040c020b200041013602002000410d3a00040c010b417f2007104b000b200241c0006a24000ba806010a7f2001280204210320012802002104410021054101210641002107200128020822082109024002400340024020072005470d002005410174220a200541016a220b200a200b4b1b220a4100480d030240024020050d00200a102d21060c010b20062005200a103121060b2006450d02200a21050b200620076a200941807f72200941ff00712009410776220a1b3a0000200741016a2107200a2109200a0d000b0240200520076b20084f0d00200720086a22092007490d022005410174220a2009200a20094b1b22094100480d020240024020050d002009102d21060c010b200620052009103121060b2006450d01200921050b200620076a2004200810e8061a02402003450d002004102f0b200128020c210302400240200520086b20076b200141146a2802002209490d00200820096a20076a21042005210c0c010b200820076a220a20096a2204200a490d022005410174220a2004200a20044b1b220c4100480d020240024020050d00200c102d21060c010b20062005200c103121060b2006450d010b200620086a20076a2003200910e8061a200241086a210a200241046a210b20042109034002400240200b280200200a2802002207460d00200228020021050c010b200741016a22052007490d03200741017422082005200820054b1b22084100480d030240024020070d002008102d21050c010b200228020020072008103121050b2005450d0220022005360200200b2008360200200a28020021070b200a200741016a360200200520076a200941807f72200941ff0071200941077622071b3a00002007210920070d000b02400240200241046a2802002209200241086a28020022076b2004490d00200228020021090c010b200720046a22052007490d02200941017422072005200720054b1b22074100480d020240024020090d002007102d21090c010b200228020020092007103121090b2009450d0120022009360200200241046a2007360200200241086a28020021070b200241086a200720046a360200200920076a2006200410e8061a0240200c450d002006102f0b2000411f3a00000240200141106a280200450d002003102f0b0f0b1036000b1038000bd707030e7f017e017f200241086a2103200241046a210420012802002205210602400240024002400240034002400240200428020020032802002207460d00200228020021080c010b200741016a22082007490d03200741017422092008200920084b1b22094100480d030240024020070d002009102d21080c010b200228020020072009103121080b2008450d022002200836020020042009360200200328020021070b2003200741016a360200200820076a200641807f72200641ff0071200641077622071b3a00002007210620070d000b2001280204220a2001410c6a2802002206410c6c6a210b200141086a280200210c200a21072006450d03200a21072005450d03200b41746a210d200241086a210841002107200a210e0340200e2103024003402003280200220f0d01200741016a2107200b2003410c6a2203470d000c070b0b2003410c6a210e200741016a21102005417f6a2105200341046a2902002111034002400240200241046a220428020020082802002206460d00200228020021090c010b200641016a22092006490d04200641017422012009200120094b1b22014100480d040240024020060d002001102d21090c010b200228020020062001103121090b2009450d032002200936020020042001360200200828020021060b2008200641016a360200200920066a200741807f72200741ff0071200741077622061b3a00002006210720060d000b2011422088a722122106034002400240200428020020082802002207460d00200228020021090c010b200741016a22092007490d04200741017422012009200120094b1b22014100480d040240024020070d002001102d21090c010b200228020020072001103121090b2009450d032002200936020020042001360200200828020021070b2008200741016a360200200920076a200641807f72200641ff0071200641077622071b3a00002007210620070d000b0240024020042802002206200828020022076b2012490d00200228020021060c010b200720126a22092007490d03200641017422072009200720094b1b22074100480d030240024020060d002007102d21060c010b200228020020062007103121060b2006450d022002200636020020042007360200200828020021070b2008200720126a360200200620076a200f201210e8061a02402011a7450d00200f102f0b200d2003460d032010210720050d000c030b0b1036000b1038000b2003410c6a21070b200b2007460d00034020072206410c6a2107024020062802002202450d00200641046a280200450d002002102f0b200b2007470d000b0b0240200c450d00200a102f0b2000411f3a00000bed0101067f2000410c6a280200200028020822016b2202411c6d210302402002450d0020012003411c6c6a21040340024020012802042202450d0002402001410c6a2802002203450d00200341047421030340024020022d00004109470d000240200241046a2205280200220628020441ffffffff0371450d002006280200102f200528020021060b2006102f0b200241106a2102200341706a22030d000b0b200141086a280200450d002001280204102f0b2001411c6a21020240200141146a280200450d002001280210102f0b2002210120022004470d000b0b02402000280204450d002000280200102f0b0bea0101067f2000410c6a280200200028020822016b220241186d210302402002450d002001200341186c6a210403400240200141046a280200450d002001280200102f0b0240200141146a2802002203450d00200128020c2102200341047421030340024020022d00004109470d000240200241046a2205280200220628020441ffffffff0371450d002006280200102f200528020021060b2006102f0b200241106a2102200341706a22030d000b0b200141186a21020240200141106a280200450d00200128020c102f0b2002210120022004470d000b0b02402000280204450d002000280200102f0b0bce0101057f024020002802082201450d00200028020022022001411c6c6a21030340024020022802042200450d0002402002410c6a2802002201450d00200141047421010340024020002d00004109470d000240200041046a2204280200220528020441ffffffff0371450d002005280200102f200428020021050b2005102f0b200041106a2100200141706a22010d000b0b200241086a280200450d002002280204102f0b2002411c6a21000240200241146a280200450d002002280210102f0b2000210220002003470d000b0b0bed04010b7f230041c080016b2202240020022001109d06410121030240024020022802004101460d0020022802042104200241004180800110e706210541002106410021070240024002400240024002402004450d004100210841002106410121034100210903402001280204220a200128020822076b200420096b220b41808001200b41808001491b220b490d022007200b6a220c2007490d03200a200c490d042005200128020020076a200b10e806210a2001200c36020802400240200620086b200b490d00200b20086a21070c010b2008200b6a22072008490d072006410174220c2007200c20074b1b220c4100480d070240024020060d00200c102d21030c010b20032006200c103121030b2003450d06200c21060b200320086a200a200b10e8061a200721082004200b20096a22094b0d000b0b2000200336020420004100360200200041146a2007360200200041106a41003602002000410c6a2007360200200041086a20063602000c060b200541013a008f8001200541b480016a4101360200200542013702a48001200541b4afca003602a08001200541283602bc80012005200541b880016a3602b0800120052005418f80016a3602b880012005419080016a200541a080016a103a2005418b80016a2005419880016a2802003600002005200529039080013700838001200041053a00042000200529008080013700052000410c6a2005418780016a290000370000200041013602002006450d052003102f0c050b2007200c104b000b200c200a104a000b1036000b1038000b20002002290204370204200041013602002000410c6a2002410c6a2902003702000b200241c080016a24000b801f03127f017e037f23004180026b220524000240024020014115490d00410121064101210702400240034020012108200021092006200771410173210a024002400240034002400240024002402004450d00024020064101710d002000200110a5062004417f6a21040b2001410276220741036c210b2007410174210c4100210d20014132490d03200741016a210e200020074103746a220f28020020002007417f6a220d4103746a2210280200201041046a2802002210200f41046a280200220f200f20104b1b10ea062211450d01417f410120114100481b21100c020b2000200110a6060c0b0b417f200f201047200f2010491b21100b2007200d2010417f4622101b210f024002402000200e4103746a22112802002000200d200720101b22124103746a2207280200200741046a2802002207201141046a280200220d200d20074b1b10ea062211450d00417f410120114100481b21070c010b417f200d200747200d2007491b21070b4102410120101b20102007417f4622071b210d024002402000200e201220071b22114103746a22102802002000200f4103746a2207280200200741046a2802002207201041046a2802002210201020074b1b10ea06220e450d00417f4101200e4100481b21100c010b417f201020074720102007491b21100b200c4101722107200d2010417f4622126a2113024002402000200c4103746a220d2802002000200c417f6a22104103746a220e280200200e41046a280200220e200d41046a280200220d200d200e4b1b10ea062214450d00417f410120144100481b210e0c010b417f200d200e47200d200e491b210e0b200c2010200e417f46220e1b210d2013200e6a211302400240200020074103746a221428020020002010200c200e1b220e4103746a220c280200200c41046a280200220c201441046a28020022102010200c4b1b10ea062214450d00417f410120144100481b210c0c010b417f2010200c472010200c491b210c0b2013200c417f46220c6a21100240024020002007200e200c1b22134103746a220c2802002000200d4103746a2207280200200741046a2802002207200c41046a280200220c200c20074b1b10ea06220e450d00417f4101200e4100481b210c0c010b417f200c200747200c2007491b210c0b200b41016a21072010200c417f4622146a2115024002402000200b4103746a220e2802002000200b417f6a220c4103746a2210280200201041046a2802002210200e41046a280200220e200e20104b1b10ea062216450d00417f410120164100481b21100c010b417f200e201047200e2010491b21100b200b200c2010417f4622101b210e201520106a211502400240200020074103746a22162802002000200c200b20101b22104103746a220c280200200c41046a280200220c201641046a280200220b200b200c4b1b10ea062216450d00417f410120164100481b210c0c010b417f200b200c47200b200c491b210c0b2015200c417f46220c6a211502400240200020072010200c1b220b4103746a220c2802002000200e4103746a2207280200200741046a2802002207200c41046a280200220c200c20074b1b10ea062210450d00417f410120104100481b21100c010b417f200c200747200c2007491b21100b200f201120121b2107200d201320141b210c200e200b2010417f4622101b210b201520106a210d0b024002402000200c4103746a220e280200200020074103746a2210280200201041046a2802002210200e41046a280200220e200e20104b1b10ea06220f450d00417f4101200f4100481b21100c010b417f200e201047200e2010491b21100b200c20072010417f46220e1b2110200d200e6a210d024002402000200b4103746a220f28020020002007200c200e1b220e4103746a2207280200200741046a2802002207200f41046a280200220c200c20074b1b10ea06220f450d00417f4101200f4100481b21070c010b417f200c200747200c2007491b21070b200d2007417f46220c6a2107024002400240024002402000200b200e200c1b220d4103746a220b280200200020104103746a220c280200200c41046a280200220c200b41046a280200220b200b200c4b1b10ea06220e450d00200e4100480d010c020b200b200c4f0d010b200741016a2207410c490d0102402001410176220b450d00200020014103746a41786a21072000210c0340200c2902002117200c200729020037020020072017370200200c41086a210c200741786a2107200b417f6a220b0d000b0b20012010417f736a2110410121070c020b200d21100b20074521070b0240200745200a724101710d002000200110a7060d090b2003450d010240201020014f0d00024002402003280200200020104103746a2207280200200741046a280200220c200341046a280200220b200b200c4b1b10ea06220e450d00200e41004e0d010c050b200b200c490d040b200029020021172000200729020037020020072017370200200041786a21122000410c6a2113200041086a2114200028020421072000280200210d4100210b2001210e0340024002400240200b200e417f6a22114f0d002013200b4103746a210c034002400240200d200c417c6a280200200c28020022102007200720104b1b10ea06220f450d00200f4100480d030c010b20072010490d020b200c41086a210c2011200b41016a220b470d000c020b0b0240200b20114f0d002012200e4103746a210c2011210e034002400240200d200c280200200c41046a28020022102007200720104b1b10ea06220f450d00200f4100480d010c050b200720104f0d040b200c41786a210c200b200e417f6a220e490d000b0b200b21110b200020073602042000200d36020002402001201141016a2207490d00200020074103746a2100200120076b220141154f0d040c0b0b20072001104b000b2014200b4103746a221029020021172010200c290200370200200c2017370200200b41016a210b0c000b0b0b41d4bbca0020102001103b000b20080d014188bbca0041004100103b000b20002109200121080b201020084f0d02200929020021172009200920104103746a2207290200370200200720173702002009280204210c200928020021124100210e410021184100211902402008417f6a220d450d002009410c6a21074100211803400240024002402007417c6a2802002012200c2007280200220b200b200c4b1b10ea062210450d00201041004e0d010c020b200b200c490d010b200d21190240200d20184d0d00200920084103746a41786a2107200d211903400240024020072802002012200c200741046a280200220b200b200c4b1b10ea062210450d00201041004e0d010c030b200b200c490d020b200741786a21072019417f6a221920184b0d000b0b0240024020192018490d00200d2019490d010c040b20182019104b000b2019200d104a000b200741086a2107200d201841016a2218470d000b200d2118200d21190b200941086a220720194103746a210d41800121144100211141002110410021014180012106200720184103746a221a210003400240200d20006b22074187104b220a0d002007410376220741807f6a20072011200e492001201049220b72220f1b21070240200f450d0020062007200b1b210620072014200b1b21140c010b2007200741017622066b21140b024020012010470d00024020060d002005221021010c010b41002107200521102000210b0340201020073a0000200741016a210702400240200b2802002012200c200b41046a280200220f200f200c4b1b10ea062201450d00417f410120014100481b210f0c010b417f200f200c47200f200c491b210f0b200b41086a210b2010200f417f476a211020062007470d000b200521010b02402011200e470d00024020140d0020054180016a220e21110c010b200d41786a21074100210b20054180016a210e0340200e200b3a0000200b41016a210b0240024020072802002012200c200741046a280200220f200f200c4b1b10ea062211450d00417f410120114100481b210f0c010b417f200f200c47200f200c491b210f0b200741786a2107200e200f417f466a210e2014200b470d000b20054180016a21110b0240200e20116b2207201020016b220b200b20074b1b2213450d00200020012d00004103746a22072802042115200728020021162007200d20112d0000417f734103746a290200370200024020134101460d00410021070340200d201120076a220b2d0000417f734103746a2000200120076a41016a220f2d00004103746a2902003702002000200f2d00004103746a200d200b41016a2d0000417f734103746a290200370200200741026a210b200741016a220f2107200b2013490d000b2011200f6a21112001200f6a21010b200d20112d0000417f734103746a2207201536020420072016360200201141016a2111200141016a21010b200d20144103746b200d2011200e461b210d200020064103746a200020012010461b2100200a0d000b02400240200120104f0d00200d2107034020002010417f6a22102d00004103746a220b2902002117200b200741786a22072902003702002007201737020020012010490d000c020b0b200021072011200e4f0d000340200729020021172007200d200e417f6a220e2d0000417f734103746a220b290200370200200b2017370200200741086a21072011200e490d000b0b2009200c36020420092012360200024020082007201a6b41037620186a22014d0d00200929020021172009200920014103746a220729020037020020072017370200200820016b220c450d02200c20012001200c4b1b210b20084103762110200741086a2100024002402001200c417f6a220c490d002000200c20022007200410a406200921000c010b2009200120022003200410a40620072103200c21010b200b20104f2106201920184d2107200141154f0d010c040b0b4198bbca0020012008103b000b41a8bbca00411c41c4bbca001039000b4198bbca0020102008103b000b20014102490d00200041786a2111410021124101210f0340200f4103742107200f417f6a210c200f41016a210f024002400240200020076a2210280200220d2000200c4103746a2207280200200741046a280200220e201041046a280200220b200b200e4b1b10ea062213450d0020134100480d010c020b200b200e4f0d010b201020072902003702000240200c450d002012210c201121070240034002400240200d2007280200200741046a2802002210200b200b20104b1b10ea06220e450d00200e41004e0d030c010b200b20104f0d020b200741086a2007290200370200200741786a2107200c41016a2210200c49210e2010210c200e450d000b0b200741086a21070b2007200d3602002007200b3602040b2012417f6a2112201141086a2111200f2001470d000b0b20054180026a24000bf50202057f017e02400240024020014108490d00200141017641feffffff07712202417f6a220320014f0d022001410d74200173220441117620047322044105742004732205417f2001417f6a677622067122044100200120042001491b6b220420014f0d01200020034103746a220329020021072003200020044103746a220429020037020020042007370200024020022001490d00200221030c030b2005410d7420057322044111762004732204410574200473220520067122044100200120042001491b6b220420014f0d01200020024103746a220329020021072003200020044103746a2204290200370200200420073702002002410172220320014f0d022005410d742005732204411176200473220441057420047320067122044100200120042001491b6b220420014f0d01200020034103746a220129020021072001200020044103746a2200290200370200200020073702000b0f0b4198bbca0020042001103b000b4188bbca0020032001103b000bb20102037f017e024020014101762202450d00200020012002417f6a10a8062002417e6a210203402002417f460d0120002001200210a8062002417f6a21020c000b0b0240024020014102490d00200141037420006a41786a21022001210303402003417f6a220420014f0d0220002902002105200020022902003702002002200537020020002004410010a806200241786a210220042103200441014b0d000b0b0f0b4198bbca002003417f6a2001103b000b8f06050a7f017e017f017e037f200041686a2102200041786a210320014132492104410121054100210602400240024003400240024020052001490d00410021070c010b200320054103746a210841012107034002400240200841086a22092802002008280200200841046a280200220a2008410c6a28020022082008200a4b1b10ea06220b450d00200b4100480d030c010b2008200a490d020b4101210a200541016a220520014921072009210820012005470d000c030b0b2005200146210a20040d0120052001460d012005417f6a220820014f0d032007410171450d02200020084103746a2208290200210c200820002005410374220d6a2209290200220e3702002009200c370200024020054102490d0002400240200ea7220f20002005417e6a22074103746a220b280200200b41046a2802002210200841046a280200220a200a20104b1b10ea062211450d0020114100480d010c020b200a20104f0d010b2008200b29020037020002402007450d002002200d6a21080240034002400240200f2008280200200841046a280200220b200a200a200b4b1b10ea062210450d00201041004e0d030c010b200a200b4f0d020b200841086a2008290200370200200841786a21082007417f6a22070d000b0b200841086a210b0b200b200f360200200b200a3602040b200641016a21060240200120056b220f4102490d000240024020092802082009280200220d200941046a280200220b2009410c6a28020022082008200b4b1b10ea06220a450d00200a4100480d010c020b2008200b4f0d010b200941086a2111200920092902083702000240200f4103490d004103210a41022107034002400240200920074103746a2208280200200d200b200841046a28020022072007200b4b1b10ea062210450d00201041004e0d030c010b2007200b4f0d020b200841786a20082902003702000240200a200f4f0d00200a2107200a41016a210a200821110c010b0b200821110b2011200d3602002011200b3602040b20064105470d000b4100210a0b200a0f0b4198bbca0020052001103b000b4188bbca0020082001103b000bb60202057f017e03402002410174220341017221040240024002400240200341026a220320014f0d00200420014f0d0102400240200020044103746a2205280200200020034103746a2206280200200641046a2802002206200541046a2802002205200520064b1b10ea062207450d00417f410120074100481b21060c010b417f200520064720052006491b21060b200320042006417f461b21040b0240200420014f0d00200220014f0d020240200020024103746a2202280200200020044103746a2203280200200341046a2802002206200241046a2802002205200520064b1b10ea062207450d00200741004e0d010c040b20052006490d030b0f0b41b0bcca0020042001103b000b41c0bcca0020022001103b000b200229020021082002200329020037020020032008370200200421020c000b0b8d0302037f017e230041c0006b22022400200141086a28020021032001280204210420022001280200220136020002400240024002402001418080044b0d002004450d022002200336020402400240200120034b0d002003418080044d0d042002413c6a41013602002002420237022c200241f4d7ca003602282002410136020c200241d0d7ca003602082002200241086a360238200241186a200241286a103a200241186a21010c010b2002413c6a4102360200200241246a41013602002002420237022c200241e4d7ca003602282002410136021c2002200241186a360238200220023602202002200241046a360218200241086a200241286a103a200241086a21010b20012902042105200128020021010c010b2002413c6a41013602002002420237022c200241d4d7ca003602282002410136020c200241d0d7ca003602082002200241086a360238200241186a200241286a103a20022802182101200229021c21050b2001450d0020002005370204200020013602000c010b200041003602000b200241c0006a24000be00501037f230041f0006b2204240002400240024020012802084102460d00412e102d2201450d01200041013a0000200141266a41002900e8d94a370000200141206a41002900e2d94a370000200141186a41002900dad94a370000200141106a41002900d2d94a370000200141086a41002900cad94a370000200141002900c2d94a370000200041086a42ae808080e005370200200041046a20013602000c020b0240024002400240024002400240200128020022052d0000416e6a2201411e4b0d004100210620010e1f03000000000000000000000000000000000000000000000000000006040102030b4120102d2201450d06200041013a0000200141186a4100290088da4a370000200141106a4100290080da4a370000200141086a41002900f8d94a370000200141002900f0d94a370000200041086a42a08080808004370200200041046a20013602000c070b410221060c040b410321060c030b20042005280204220136020c0240024020012003490d004190daca002105200441e8006a2103200441d0006a2101200441c0006a21020c010b200220014101746a22012d0001450d0241a0daca002105200441386a2103200441206a2101200441106a21020b20034101360204200141146a410136020020012003360210200142023702042001200536020020032004410c6a36020020022001103a200041013a00002000410c6a200241086a280200360200200041046a20022902003702000c040b410121060c010b20012d000021060b0240200541106a2d00004106470d00200041003a0000200020063a00010c020b4129102d2201450d00200041013a0000200141286a41002d00d8da4a3a0000200141206a41002900d0da4a370000200141186a41002900c8da4a370000200141106a41002900c0da4a370000200141086a41002900b8da4a370000200141002900b0da4a370000200041086a42a98080809005370200200041046a20013602000c010b1036000b200441f0006a24000b8f0201017f230041106b220224000240024002400240024020002d00000e0401020300010b200220012802184198afca0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c030b20022001280218419bafca0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c020b20022001280218419eafca0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b2002200128021841a1afca0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040b200241106a240020000be2bd0205047f017e047f017e017f230041f0006b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000eac0101ca0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa0100010b200341d8006a200141186a2204200141286a410110d706024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490dc801200241017422062005200620054b1b22054100480dc8010240024020020d002005102d21020c010b200428020020022005103121020b2002450dc701200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000ccb010b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450dca012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dca010cc9010b200328025c2201450dc901200341e0006a29030021070cc8010b02400240200141306a2802002202417f6a220420024f0d00200420024d0d010b4118102d2201450dc4012003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c20032000360258418fd1ca00413b200341d8006a41ccd1ca0041dcd1ca00103e000b02400240200128022820044103746a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d0020012802182108200221010c010b200220096a220a2002490dc6012008410174220b200a200b200a4b1b220a4100480dc6010240024020080d00200a102d21080c010b20012802182008200a103121080b2008450dc501200120083602182001411c6a200a360200200141206a28020021010b200820016a210a0240024020094102490d00200a410420042002417f736a220210e7061a2008200220016a22016a210a0c010b2009450d010b200a41043a0000200141016a21010b20062001360200200541013a00060cc8010b0240200141306a2802002204200141346a22052802004f0d0020023100012107200141206a350200210c024020042001412c6a280200470d00200441016a22022004490dc501200441017422052002200520024b1b220241ffffffff01712002470dc501200241037422024100480dc5010240024020040d002002102d21040c010b200128022820044103742002103121040b2004450dc401200120043602282001412c6a2002410376360200200141306a28020021040b200128022820044103746a2007422886200c84370200200141306a2201200128020041016a3602000cc8010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dc7012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dc70120002007370204200020013602000cc8010b0240200141306a2802002204200141346a22052802004f0d0020023100012107200141206a350200210c024020042001412c6a280200470d00200441016a22022004490dc401200441017422052002200520024b1b220241ffffffff01712002470dc401200241037422024100480dc4010240024020040d002002102d21040c010b200128022820044103742002103121040b2004450dc301200120043602282001412c6a2002410376360200200141306a28020021040b200128022820044103746a2007422886200c8442808080803084370200200141306a2201200128020041016a3602000cc7010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dc6012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dc60120002007370204200020013602000cc7010b20023100012107200341d8006a200141186a200141286a2204410010d70620032d00584101460da6010240200141306a2802002202200141346a22052802004f0d00200141206a350200210c024020022001412c6a280200470d00200241016a22052002490dc301200241017422062005200620054b1b220541ffffffff01712005470dc301200541037422054100480dc3010240024020020d002005102d21020c010b200428020020024103742005103121020b2002450dc201200120023602282001412c6a2005410376360200200141306a28020021020b200128022820024103746a2007422886200c8442808080801084370200200141306a2201200128020041016a3602000cc6010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dc5012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dc50120002007370204200020013602000cc6010b02400240200141306a2802002202417f6a220420024f0d00200420024d0d010b4118102d2201450dc0012003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c2003200036025841ecd1ca004134200341d8006a41ccd1ca0041a0d2ca00103e000b02400240200141286a220228020020044103746a22042d00044101470d0020043100052107200341d8006a200141186a200210da062003280258450d0120002003290358370200200041086a200341d8006a41086a2802003602000cc7010b411a102d2201450dc001200141186a41002f00c8d24a3b0000200141106a41002900c0d24a370000200141086a41002900b8d24a370000200141002900b0d24a3700002000429a808080a003370204200020013602000cc6010b0240200141306a2802002204200141346a22052802004f0d00200141206a350200210c024020042001412c6a280200470d00200441016a22052004490dc201200441017422062005200620054b1b220541ffffffff01712005470dc201200541037422054100480dc2010240024020040d002005102d21020c010b200228020020044103742005103121020b2002450dc101200120023602282001412c6a2005410376360200200141306a28020021040b200128022820044103746a2007422886200c8442808080802084370200200141306a2201200128020041016a3602000cc5010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dc4012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dc40120002007370204200020013602000cc5010b02400240200141306a2802002202417f6a220420024f0d00200420024d0d010b4118102d2201450dbf012003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c2003200036025841ecd1ca004134200341d8006a41ccd1ca0041a0d2ca00103e000b200141286a220628020020044103746a22042d00052105024020042d00044101470d00200541ff01714104470da6010b02400240024002400240024020024101460d00200341d8006a200141186a2202200610da0620032802580d01200541ff01714104460dc901200141206a2802002204200141246a22062802004f0d0520042001411c6a280200470d04200441016a22062004490dc501200441017422082006200820064b1b22064100480dc50120040d022006102d21020c030b024020012d003822024104460d00200341d8006a200141186a2006200210db062003280258450d0020002003290358370200200041086a200341d8006a41086a2802003602000cca010b200341d8006a200141186a200610da062003280258450dc80120002003290358370200200041086a200341d8006a41086a2802003602000cc9010b20002003290358370200200041086a200341d8006a41086a2802003602000cc8010b200228020020042006103121020b2002450dc001200120023602182001411c6a2006360200200141206a28020021040b200128021820046a20053a0000200141206a2201200128020041016a3602000cc4010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200636020020032003360268200341106a200341d8006a103a20032802102202450dc3012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450dc30120002007370204200020013602000cc4010b2003200241046a280200220236024802400240200141306a280200220420024d0d0020042002417f736a220220044f0da701200141286a220428020020024103746a22022d00044103460d0120022d0005220241ff01714104460d01200341d8006a200141186a2004200210db0620032802582202450d01200329025c21070cc2010b200341ec006a220241023602002003411c6a41013602002003420237025c200341acddca0036025820034101360214200320043602002003200341106a360268200320033602182003200341c8006a360210200341386a200341d8006a103a200328023821042003200329023c37023c20032004360238200241013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102102200329021421070240200328023c450d002003280238102f0b20020dc1010b024002400240200141306a2802002202417f6a220420024f0d00200420024b0d00200128022820044103746a22052802002204200141206a220628020022024b0d01200421010c020b4118102d2201450dbf012003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c20032000360258418fd1ca00413b200341d8006a41ccd1ca0041dcd1ca00103e000b024002402001411c6a280200220820026b200420026b2209490d0020012802182108200221010c010b200220096a220a2002490dc0012008410174220b200a200b200a4b1b220a4100480dc0010240024020080d00200a102d21080c010b20012802182008200a103121080b2008450dbf01200120083602182001411c6a200a360200200141206a28020021010b200820016a210a0240024020094102490d00200a410420042002417f736a220210e7061a2008200220016a22016a210a0c010b2009450d010b200a41043a0000200141016a21010b20062001360200200541013a00060cc2010b200241046a2802002102200341d8006a200141186a2205200141286a2204410010d70602400240024020032d00584101460d00200141306a2802002101200320023602480240200120024d0d0020012002417f736a220220014f0db001200428020020024103746a22012d00044103460dc50120012d0005220141ff01714104460dc501200341d8006a20052004200110db0620032802582201450dc501200329025c21070c030b200341ec006a220241023602002003411c6a41013602002003420237025c200341acddca0036025820034101360214200320013602002003200341106a360268200320033602182003200341c8006a360210200341386a200341d8006a103a200328023821012003200329023c37023c20032001360238200241013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a2003280210210120032902142107200328023c450d012003280238102f0c010b200341e0006a2903002107200328025c21010b2001450dc2010b20002007370204200020013602000cc2010b200241046a2802002202280204210620022802002104200320022802082205360248200141306a280200220220054d0db90120022005417f736a220520024f0da4014104210a0240200141286a220d280200220820054103746a22052d00044103460d0020052d0005210a0b2003200a3a00302006450db301200a41ff0171220b4104460db201200641027421060340200320042802002205360248200220054d0db50120022005417f736a220520024f0dbe01200820054103746a22052d00044103460db60120052d000522094104460db601200b2009470db601200441046a21042006417c6a22060d000cb4010b0b024020012d003822024104460d00200341d8006a200141186a200141286a200210db062003280258450d0020002003290358370200200041086a200341d8006a41086a2802003602000cc1010b02400240200141306a2802002202417f6a220420024f0d00200420024d0d010b4118102d2201450dbb012003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c20032000360258418fd1ca00413b200341d8006a41ccd1ca0041dcd1ca00103e000b02400240200128022820044103746a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d0020012802182108200221010c010b200220096a220a2002490dbd012008410174220b200a200b200a4b1b220a4100480dbd010240024020080d00200a102d21080c010b20012802182008200a103121080b2008450dbc01200120083602182001411c6a200a360200200141206a28020021010b200820016a210a0240024020094102490d00200a410420042002417f736a220210e7061a2008200220016a22016a210a0c010b2009450d010b200a41043a0000200141016a21010b20062001360200200541013a00060cbf010b200128020021042003200241046a2802002202360254024002400240024002400240024002400240200441386a28020020024d0d002003200428023020024102746a2802002202360200024002402004412c6a28020020024d0d002003411c6a200428022420024104746a22042d000d22083a0000200341186a2004280208220236020020042802002104410021050c010b41012105200341ec006a41013602002003420237025c20034184dcca003602582003410136024c2003200341c8006a36026820032003360248200341386a200341d8006a103a200341186a200329023c22073703002007422088a72108200328023821042007a721020b200320053602102003200436021420050d0102402002450d002004417f6a2104200141286a2105200141186a21060340200341d8006a20062005200420026a2d000010d70620032d00584101460d082002417f6a22020d000b0b200841ff01714104460dc701200141206a2802002202200141246a22042802004f0d0520022001411c6a280200470d04200241016a22042002490dc301200241017422052004200520044b1b22044100480dc30120020d022004102d21020c030b200341ec006a41013602002003420237025c200341e0dbca00360258200341013602342003200341306a3602682003200341d4006a360230200341386a200341d8006a103a200341186a200329023c370300200341013602102003200328023822043602140b200341186a21010c050b200128021820022004103121020b2002450dbe01200120023602182001411c6a2004360200200141206a28020021020b200128021820026a20083a0000200141206a2201200128020041016a3602000cc2010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450dc1012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102104200329021421070240200328023c450d002003280238102f0b20040d020cc1010b200341e0006a2101200328025c21040b2004450dbf01200129020021070b20002007370204200020043602000cbf010b200241046a28020021062001280200210220034100360238200241146a280200450da201200341d8006a200141186a2204200141286a2205410010d70620032d00584101460da30120012802002208412c6a28020021022003200636023802400240024002400240200220064d0d00200828022420064104746a22062d000d2108024020062802082202450d002006280200417f6a21060340200341d8006a20042005200620026a2d000010d70620032d00584101460dab012002417f6a22020d000b0b200841ff01714104460dc201200141206a2802002202200141246a22052802004f0d0420022001411c6a280200470d03200241016a22052002490dbe01200241017422062005200620054b1b22054100480dbe0120020d012005102d21020c020b200341ec006a41013602002003420237025c20034184dcca0036025820034101360204200320033602682003200341386a360200200341106a200341d8006a103a0cb1010b200428020020022005103121020b2002450dba01200120023602182001411c6a2005360200200141206a28020021020b200128021820026a20083a0000200141206a2201200128020041016a3602000cbe010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dbd012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a2003280210210120032902142107200328023c450dae012003280238102f0cae010b200341d8006a200141186a200141286a410410d70620032d00584101470dbc01200328025c2201450dbc012000200341e0006a290300370204200020013602000cbd010b200341d8006a200141186a2204200141286a2205410010d706200341d8006a21020240024020032d00584101460d00200341d8006a20042005410410d706200341d8006a210220032d00584101460d00200341d8006a2004200520032d0059220610d706200341d8006a210220032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490dbb01200241017422082005200820054b1b22054100480dbb010240024020020d002005102d21020c010b200428020020022005103121020b2002450dba01200120023602182001411c6a2005360200200141206a28020021020b200128021820026a20063a0000200141206a2201200128020041016a3602000cbe010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450dbd012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010cbd010b200241046a2802002201450dbc01200241086a29020021070b20002007370204200020013602000cbc010b200341d8006a200141046a200241046a28020010dc060240024020032d00584101460d000240200141206a2802002202200141246a22042802004f0d0020032d00592104024020022001411c6a280200470d00200241016a22052002490dba01200241017422062005200620054b1b22054100480dba010240024020020d002005102d21020c010b200128021820022005103121020b2002450db901200120023602182001411c6a2005360200200141206a28020021020b200128021820026a20043a0000200141206a2201200128020041016a3602000cbd010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450dbc012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010cbc010b200328025c2201450dbb01200341e0006a29030021070b20002007370204200020013602000cbb010b2003200241046a2802002202360200200341d8006a200141046a200210dc060240024020032d00584101460d00200320032d005922023a0030200341d8006a200141186a200141286a410410d7060240024020032d00584101460d00200320032d005922013a004820014104460dbd01200241ff01712001460dbd01200341106a41146a41373602002003411c6a4130360200200341d8006a41146a41033602002003420337025c200341ecd2ca00360258200341013602142003200341106a3602682003200341c8006a3602202003200341306a36021820032003360210200341386a200341d8006a103a0c010b200341c0006a200341e4006a2802003602002003200329025c3703380b200329023c2107200328023821010c010b2003200328025c22013602382003200341e0006a290300220737023c0b2001450db90120002007370204200020013602000cba010b200341d8006a200141046a200241046a28020010dc060240024020032d00584101460d00200341d8006a200141186a200141286a20032d005910db0620032802582201450dba01200329025c21070c010b200328025c2201450db901200341e0006a29030021070b20002007370204200020013602000cb9010b200128020021042003200241046a280200220236023802400240200441206a28020020024d0d000240200141206a2802002205200141246a22062802004f0d00200428021820024101746a2d00002102024020052001411c6a280200470d00200541016a22042005490db701200541017422062004200620044b1b22044100480db7010240024020050d002004102d21050c010b200128021820052004103121050b2005450db601200120053602182001411c6a2004360200200141206a28020021050b200128021820056a20023a0000200141206a2201200128020041016a3602000cba010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200636020020032003360268200341106a200341d8006a103a20032802102202450db9012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010cb9010b200341ec006a41013602002003420237025c200341a4dcca003602582003410136024c2003200341c8006a3602682003200341386a360248200341106a200341d8006a103a20032802102201450db801200329021421070b20002007370204200020013602000cb8010b2003200241046a28020022023602282001280200210420032002360254200441206a28020020024d0d9e010240200428021820024101746a22022d00010d00200341ec006a41013602002003420237025c200341b4dcca0036025820034101360204200320033602682003200341d4006a360200200341106a200341d8006a103a0ca5010b200320022d000022023a002f200341d8006a200141186a200141286a410410d70620032d00584101470da201200341c0006a200341e4006a2802003602002003200329025c3703380ca3010b200341d8006a2001200241046a2802004104410010de062003280258450db50120002003290358370200200041086a200341d8006a41086a2802003602000cb6010b200341d8006a2001200241046a2802004108410110de062003280258450db40120002003290358370200200041086a200341d8006a41086a2802003602000cb5010b200341d8006a2001200241046a2802004104410210de062003280258450db30120002003290358370200200041086a200341d8006a41086a2802003602000cb4010b200341d8006a2001200241046a2802004108410310de062003280258450db20120002003290358370200200041086a200341d8006a41086a2802003602000cb3010b200341d8006a2001200241046a2802004101410010de062003280258450db10120002003290358370200200041086a200341d8006a41086a2802003602000cb2010b200341d8006a2001200241046a2802004101410010de062003280258450db00120002003290358370200200041086a200341d8006a41086a2802003602000cb1010b200341d8006a2001200241046a2802004102410010de062003280258450daf0120002003290358370200200041086a200341d8006a41086a2802003602000cb0010b200341d8006a2001200241046a2802004102410010de062003280258450dae0120002003290358370200200041086a200341d8006a41086a2802003602000caf010b200341d8006a2001200241046a2802004101410110de062003280258450dad0120002003290358370200200041086a200341d8006a41086a2802003602000cae010b200341d8006a2001200241046a2802004101410110de062003280258450dac0120002003290358370200200041086a200341d8006a41086a2802003602000cad010b200341d8006a2001200241046a2802004102410110de062003280258450dab0120002003290358370200200041086a200341d8006a41086a2802003602000cac010b200341d8006a2001200241046a2802004102410110de062003280258450daa0120002003290358370200200041086a200341d8006a41086a2802003602000cab010b200341d8006a2001200241046a2802004104410110de062003280258450da90120002003290358370200200041086a200341d8006a41086a2802003602000caa010b200341d8006a2001200241046a2802004104410110de062003280258450da80120002003290358370200200041086a200341d8006a41086a2802003602000ca9010b200341d8006a2001200241046a2802004104410010df062003280258450da70120002003290358370200200041086a200341d8006a41086a2802003602000ca8010b200341d8006a2001200241046a2802004108410110df062003280258450da60120002003290358370200200041086a200341d8006a41086a2802003602000ca7010b200341d8006a2001200241046a2802004104410210df062003280258450da50120002003290358370200200041086a200341d8006a41086a2802003602000ca6010b200341d8006a2001200241046a2802004108410310df062003280258450da40120002003290358370200200041086a200341d8006a41086a2802003602000ca5010b200341d8006a2001200241046a2802004101410010df062003280258450da30120002003290358370200200041086a200341d8006a41086a2802003602000ca4010b200341d8006a2001200241046a2802004102410010df062003280258450da20120002003290358370200200041086a200341d8006a41086a2802003602000ca3010b200341d8006a2001200241046a2802004101410110df062003280258450da10120002003290358370200200041086a200341d8006a41086a2802003602000ca2010b200341d8006a2001200241046a2802004102410110df062003280258450da00120002003290358370200200041086a200341d8006a41086a2802003602000ca1010b200341d8006a2001200241046a2802004104410110df062003280258450d9f0120002003290358370200200041086a200341d8006a41086a2802003602000ca0010b20012802002102200341003602380240024020022802080d00200341ec006a41013602002003420237025c20034190dbca0036025820034101360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102202450d00200329021421070c010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9d01200241017422052004200520044b1b22044100480d9d010240024020020d002004102d21020c010b200128021820022004103121020b2002450d9c01200120023602182001411c6a2004360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000ca0010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450d9f012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102102200329021421070240200328023c450d002003280238102f0b2002450d9f010b20002007370204200020023602000c9f010b20012802002102200341003602380240024020022802080d00200341ec006a41013602002003420237025c20034190dbca0036025820034101360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102202450d00200329021421070c010b200341d8006a200141186a2204200141286a410010d706024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d9d01200241017422062005200620054b1b22054100480d9d010240024020020d002005102d21020c010b200428020020022005103121020b2002450d9c01200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000ca0010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200536020020032003360268200341106a200341d8006a103a20032802102202450d9f012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102102200329021421070240200328023c450d002003280238102f0b20020d010c9f010b200328025c2202450d9e01200341e0006a29030021070b20002007370204200020023602000c9e010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9a01200241017422052004200520044b1b22044100480d9a010240024020020d002004102d21020c010b200128021820022004103121020b2002450d9901200120023602182001411c6a2004360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c9d010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450d9c012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450d9c0120002007370204200020013602000c9d010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9901200241017422052004200520044b1b22044100480d99010240024020020d002004102d21020c010b200128021820022004103121020b2002450d9801200120023602182001411c6a2004360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c9c010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450d9b012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450d9b0120002007370204200020013602000c9c010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9801200241017422052004200520044b1b22044100480d98010240024020020d002004102d21020c010b200128021820022004103121020b2002450d9701200120023602182001411c6a2004360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c9b010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450d9a012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450d9a0120002007370204200020013602000c9b010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9701200241017422052004200520044b1b22044100480d97010240024020020d002004102d21020c010b200128021820022004103121020b2002450d9601200120023602182001411c6a2004360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c9a010b200341ec006a220141013602002003420137025c200341fcdeca00360258200341013602042003200436020020032003360268200341106a200341d8006a103a20032802102202450d99012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b2001450d990120002007370204200020013602000c9a010b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d9801200241017422062005200620054b1b22054100480d98010240024020020d002005102d21020c010b200428020020022005103121020b2002450d9701200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c9b010b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d9a012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c9a010b200328025c2201450d9901200341e0006a29030021070b20002007370204200020013602000c99010b200341d8006a2001410010e0062003280258450d970120002003290358370200200041086a200341d8006a41086a2802003602000c98010b200341d8006a2001410010e0062003280258450d960120002003290358370200200041086a200341d8006a41086a2802003602000c97010b200341d8006a2001410010e0062003280258450d950120002003290358370200200041086a200341d8006a41086a2802003602000c96010b200341d8006a2001410010e0062003280258450d940120002003290358370200200041086a200341d8006a41086a2802003602000c95010b200341d8006a2001410010e0062003280258450d930120002003290358370200200041086a200341d8006a41086a2802003602000c94010b200341d8006a2001410010e0062003280258450d920120002003290358370200200041086a200341d8006a41086a2802003602000c93010b200341d8006a2001410010e0062003280258450d910120002003290358370200200041086a200341d8006a41086a2802003602000c92010b200341d8006a2001410010e0062003280258450d900120002003290358370200200041086a200341d8006a41086a2802003602000c91010b200341d8006a2001410010e0062003280258450d8f0120002003290358370200200041086a200341d8006a41086a2802003602000c90010b200341d8006a2001410010e0062003280258450d8e0120002003290358370200200041086a200341d8006a41086a2802003602000c8f010b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d8d01200241017422062005200620054b1b22054100480d8d010240024020020d002005102d21020c010b200428020020022005103121020b2002450d8c01200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c90010b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d8f012003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c8f010b200328025c2201450d8e01200341e0006a29030021070b20002007370204200020013602000c8e010b200341d8006a2001410110e0062003280258450d8c0120002003290358370200200041086a200341d8006a41086a2802003602000c8d010b200341d8006a2001410110e0062003280258450d8b0120002003290358370200200041086a200341d8006a41086a2802003602000c8c010b200341d8006a2001410110e0062003280258450d8a0120002003290358370200200041086a200341d8006a41086a2802003602000c8b010b200341d8006a2001410110e0062003280258450d890120002003290358370200200041086a200341d8006a41086a2802003602000c8a010b200341d8006a2001410110e0062003280258450d880120002003290358370200200041086a200341d8006a41086a2802003602000c89010b200341d8006a2001410110e0062003280258450d870120002003290358370200200041086a200341d8006a41086a2802003602000c88010b200341d8006a2001410110e0062003280258450d860120002003290358370200200041086a200341d8006a41086a2802003602000c87010b200341d8006a2001410110e0062003280258450d850120002003290358370200200041086a200341d8006a41086a2802003602000c86010b200341d8006a2001410110e0062003280258450d840120002003290358370200200041086a200341d8006a41086a2802003602000c85010b200341d8006a2001410110e0062003280258450d830120002003290358370200200041086a200341d8006a41086a2802003602000c84010b200341d8006a2001410210e0062003280258450d820120002003290358370200200041086a200341d8006a41086a2802003602000c83010b200341d8006a2001410210e0062003280258450d810120002003290358370200200041086a200341d8006a41086a2802003602000c82010b200341d8006a2001410210e0062003280258450d800120002003290358370200200041086a200341d8006a41086a2802003602000c81010b200341d8006a2001410210e0062003280258450d7f20002003290358370200200041086a200341d8006a41086a2802003602000c80010b200341d8006a2001410210e0062003280258450d7e20002003290358370200200041086a200341d8006a41086a2802003602000c7f0b200341d8006a2001410210e0062003280258450d7d20002003290358370200200041086a200341d8006a41086a2802003602000c7e0b200341d8006a2001410310e0062003280258450d7c20002003290358370200200041086a200341d8006a41086a2802003602000c7d0b200341d8006a2001410310e0062003280258450d7b20002003290358370200200041086a200341d8006a41086a2802003602000c7c0b200341d8006a2001410310e0062003280258450d7a20002003290358370200200041086a200341d8006a41086a2802003602000c7b0b200341d8006a2001410310e0062003280258450d7920002003290358370200200041086a200341d8006a41086a2802003602000c7a0b200341d8006a2001410310e0062003280258450d7820002003290358370200200041086a200341d8006a41086a2802003602000c790b200341d8006a2001410310e0062003280258450d7720002003290358370200200041086a200341d8006a41086a2802003602000c780b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d76200241017422062005200620054b1b22054100480d760240024020020d002005102d21020c010b200428020020022005103121020b2002450d75200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c790b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d782003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c780b200328025c2201450d77200341e0006a29030021070b20002007370204200020013602000c770b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d75200241017422062005200620054b1b22054100480d750240024020020d002005102d21020c010b200428020020022005103121020b2002450d74200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c780b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d772003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c770b200328025c2201450d76200341e0006a29030021070b20002007370204200020013602000c760b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d74200241017422062005200620054b1b22054100480d740240024020020d002005102d21020c010b200428020020022005103121020b2002450d73200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c770b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d762003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c760b200328025c2201450d75200341e0006a29030021070b20002007370204200020013602000c750b200341d8006a2001410010e1062003280258450d7320002003290358370200200041086a200341d8006a41086a2802003602000c740b200341d8006a2001410010e1062003280258450d7220002003290358370200200041086a200341d8006a41086a2802003602000c730b200341d8006a2001410010e1062003280258450d7120002003290358370200200041086a200341d8006a41086a2802003602000c720b200341d8006a2001410010e1062003280258450d7020002003290358370200200041086a200341d8006a41086a2802003602000c710b200341d8006a2001410010e1062003280258450d6f20002003290358370200200041086a200341d8006a41086a2802003602000c700b200341d8006a2001410010e1062003280258450d6e20002003290358370200200041086a200341d8006a41086a2802003602000c6f0b200341d8006a2001410010e1062003280258450d6d20002003290358370200200041086a200341d8006a41086a2802003602000c6e0b200341d8006a2001410010e1062003280258450d6c20002003290358370200200041086a200341d8006a41086a2802003602000c6d0b200341d8006a2001410010e1062003280258450d6b20002003290358370200200041086a200341d8006a41086a2802003602000c6c0b200341d8006a2001410010e1062003280258450d6a20002003290358370200200041086a200341d8006a41086a2802003602000c6b0b200341d8006a2001410010e1062003280258450d6920002003290358370200200041086a200341d8006a41086a2802003602000c6a0b200341d8006a2001410010e1062003280258450d6820002003290358370200200041086a200341d8006a41086a2802003602000c690b200341d8006a2001410010e1062003280258450d6720002003290358370200200041086a200341d8006a41086a2802003602000c680b200341d8006a2001410010e1062003280258450d6620002003290358370200200041086a200341d8006a41086a2802003602000c670b200341d8006a2001410010e1062003280258450d6520002003290358370200200041086a200341d8006a41086a2802003602000c660b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d64200241017422062005200620054b1b22054100480d640240024020020d002005102d21020c010b200428020020022005103121020b2002450d63200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c670b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d662003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c660b200328025c2201450d65200341e0006a29030021070b20002007370204200020013602000c650b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d63200241017422062005200620054b1b22054100480d630240024020020d002005102d21020c010b200428020020022005103121020b2002450d62200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c660b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d652003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c650b200328025c2201450d64200341e0006a29030021070b20002007370204200020013602000c640b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d62200241017422062005200620054b1b22054100480d620240024020020d002005102d21020c010b200428020020022005103121020b2002450d61200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c650b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d642003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c640b200328025c2201450d63200341e0006a29030021070b20002007370204200020013602000c630b200341d8006a2001410110e1062003280258450d6120002003290358370200200041086a200341d8006a41086a2802003602000c620b200341d8006a2001410110e1062003280258450d6020002003290358370200200041086a200341d8006a41086a2802003602000c610b200341d8006a2001410110e1062003280258450d5f20002003290358370200200041086a200341d8006a41086a2802003602000c600b200341d8006a2001410110e1062003280258450d5e20002003290358370200200041086a200341d8006a41086a2802003602000c5f0b200341d8006a2001410110e1062003280258450d5d20002003290358370200200041086a200341d8006a41086a2802003602000c5e0b200341d8006a2001410110e1062003280258450d5c20002003290358370200200041086a200341d8006a41086a2802003602000c5d0b200341d8006a2001410110e1062003280258450d5b20002003290358370200200041086a200341d8006a41086a2802003602000c5c0b200341d8006a2001410110e1062003280258450d5a20002003290358370200200041086a200341d8006a41086a2802003602000c5b0b200341d8006a2001410110e1062003280258450d5920002003290358370200200041086a200341d8006a41086a2802003602000c5a0b200341d8006a2001410110e1062003280258450d5820002003290358370200200041086a200341d8006a41086a2802003602000c590b200341d8006a2001410110e1062003280258450d5720002003290358370200200041086a200341d8006a41086a2802003602000c580b200341d8006a2001410110e1062003280258450d5620002003290358370200200041086a200341d8006a41086a2802003602000c570b200341d8006a2001410110e1062003280258450d5520002003290358370200200041086a200341d8006a41086a2802003602000c560b200341d8006a2001410110e1062003280258450d5420002003290358370200200041086a200341d8006a41086a2802003602000c550b200341d8006a2001410110e1062003280258450d5320002003290358370200200041086a200341d8006a41086a2802003602000c540b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d52200241017422062005200620054b1b22054100480d520240024020020d002005102d21020c010b200428020020022005103121020b2002450d51200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c550b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d542003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c540b200328025c2201450d53200341e0006a29030021070b20002007370204200020013602000c530b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d51200241017422062005200620054b1b22054100480d510240024020020d002005102d21020c010b200428020020022005103121020b2002450d50200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c540b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d532003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c530b200328025c2201450d52200341e0006a29030021070b20002007370204200020013602000c520b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d50200241017422062005200620054b1b22054100480d500240024020020d002005102d21020c010b200428020020022005103121020b2002450d4f200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c530b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d522003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c520b200328025c2201450d51200341e0006a29030021070b20002007370204200020013602000c510b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d4f200241017422062005200620054b1b22054100480d4f0240024020020d002005102d21020c010b200428020020022005103121020b2002450d4e200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c520b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d512003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c510b200328025c2201450d50200341e0006a29030021070b20002007370204200020013602000c500b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d4e200241017422062005200620054b1b22054100480d4e0240024020020d002005102d21020c010b200428020020022005103121020b2002450d4d200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c510b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d502003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c500b200328025c2201450d4f200341e0006a29030021070b20002007370204200020013602000c4f0b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d4d200241017422062005200620054b1b22054100480d4d0240024020020d002005102d21020c010b200428020020022005103121020b2002450d4c200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c500b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d4f2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c4f0b200328025c2201450d4e200341e0006a29030021070b20002007370204200020013602000c4e0b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d4c200241017422062005200620054b1b22054100480d4c0240024020020d002005102d21020c010b200428020020022005103121020b2002450d4b200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c4f0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d4e2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c4e0b200328025c2201450d4d200341e0006a29030021070b20002007370204200020013602000c4d0b200341d8006a2001410210e1062003280258450d4b20002003290358370200200041086a200341d8006a41086a2802003602000c4c0b200341d8006a2001410210e1062003280258450d4a20002003290358370200200041086a200341d8006a41086a2802003602000c4b0b200341d8006a2001410210e1062003280258450d4920002003290358370200200041086a200341d8006a41086a2802003602000c4a0b200341d8006a2001410210e1062003280258450d4820002003290358370200200041086a200341d8006a41086a2802003602000c490b200341d8006a2001410210e1062003280258450d4720002003290358370200200041086a200341d8006a41086a2802003602000c480b200341d8006a2001410210e1062003280258450d4620002003290358370200200041086a200341d8006a41086a2802003602000c470b200341d8006a2001410210e1062003280258450d4520002003290358370200200041086a200341d8006a41086a2802003602000c460b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d44200241017422062005200620054b1b22054100480d440240024020020d002005102d21020c010b200428020020022005103121020b2002450d43200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c470b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d462003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c460b200328025c2201450d45200341e0006a29030021070b20002007370204200020013602000c450b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d43200241017422062005200620054b1b22054100480d430240024020020d002005102d21020c010b200428020020022005103121020b2002450d42200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c460b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d452003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c450b200328025c2201450d44200341e0006a29030021070b20002007370204200020013602000c440b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d42200241017422062005200620054b1b22054100480d420240024020020d002005102d21020c010b200428020020022005103121020b2002450d41200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c450b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d442003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c440b200328025c2201450d43200341e0006a29030021070b20002007370204200020013602000c430b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d41200241017422062005200620054b1b22054100480d410240024020020d002005102d21020c010b200428020020022005103121020b2002450d40200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c440b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d432003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c430b200328025c2201450d42200341e0006a29030021070b20002007370204200020013602000c420b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d40200241017422062005200620054b1b22054100480d400240024020020d002005102d21020c010b200428020020022005103121020b2002450d3f200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c430b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d422003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c420b200328025c2201450d41200341e0006a29030021070b20002007370204200020013602000c410b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d3f200241017422062005200620054b1b22054100480d3f0240024020020d002005102d21020c010b200428020020022005103121020b2002450d3e200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c420b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d412003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c410b200328025c2201450d40200341e0006a29030021070b20002007370204200020013602000c400b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d3e200241017422062005200620054b1b22054100480d3e0240024020020d002005102d21020c010b200428020020022005103121020b2002450d3d200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c410b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d402003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c400b200328025c2201450d3f200341e0006a29030021070b20002007370204200020013602000c3f0b200341d8006a2001410310e1062003280258450d3d20002003290358370200200041086a200341d8006a41086a2802003602000c3e0b200341d8006a2001410310e1062003280258450d3c20002003290358370200200041086a200341d8006a41086a2802003602000c3d0b200341d8006a2001410310e1062003280258450d3b20002003290358370200200041086a200341d8006a41086a2802003602000c3c0b200341d8006a2001410310e1062003280258450d3a20002003290358370200200041086a200341d8006a41086a2802003602000c3b0b200341d8006a2001410310e1062003280258450d3920002003290358370200200041086a200341d8006a41086a2802003602000c3a0b200341d8006a2001410310e1062003280258450d3820002003290358370200200041086a200341d8006a41086a2802003602000c390b200341d8006a2001410310e1062003280258450d3720002003290358370200200041086a200341d8006a41086a2802003602000c380b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d36200241017422062005200620054b1b22054100480d360240024020020d002005102d21020c010b200428020020022005103121020b2002450d35200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c390b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d382003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c380b200328025c2201450d37200341e0006a29030021070b20002007370204200020013602000c370b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d35200241017422062005200620054b1b22054100480d350240024020020d002005102d21020c010b200428020020022005103121020b2002450d34200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c380b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d372003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c370b200328025c2201450d36200341e0006a29030021070b20002007370204200020013602000c360b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d34200241017422062005200620054b1b22054100480d340240024020020d002005102d21020c010b200428020020022005103121020b2002450d33200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c370b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d362003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c360b200328025c2201450d35200341e0006a29030021070b20002007370204200020013602000c350b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d33200241017422062005200620054b1b22054100480d330240024020020d002005102d21020c010b200428020020022005103121020b2002450d32200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c360b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d352003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c350b200328025c2201450d34200341e0006a29030021070b20002007370204200020013602000c340b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d32200241017422062005200620054b1b22054100480d320240024020020d002005102d21020c010b200428020020022005103121020b2002450d31200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c350b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d342003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c340b200328025c2201450d33200341e0006a29030021070b20002007370204200020013602000c330b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d31200241017422062005200620054b1b22054100480d310240024020020d002005102d21020c010b200428020020022005103121020b2002450d30200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c340b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d332003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c330b200328025c2201450d32200341e0006a29030021070b20002007370204200020013602000c320b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d30200241017422062005200620054b1b22054100480d300240024020020d002005102d21020c010b200428020020022005103121020b2002450d2f200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c330b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d322003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c320b200328025c2201450d31200341e0006a29030021070b20002007370204200020013602000c310b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2f200241017422062005200620054b1b22054100480d2f0240024020020d002005102d21020c010b200428020020022005103121020b2002450d2e200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c320b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d312003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c310b200328025c2201450d30200341e0006a29030021070b20002007370204200020013602000c300b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2e200241017422062005200620054b1b22054100480d2e0240024020020d002005102d21020c010b200428020020022005103121020b2002450d2d200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c310b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d302003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c300b200328025c2201450d2f200341e0006a29030021070b20002007370204200020013602000c2f0b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2d200241017422062005200620054b1b22054100480d2d0240024020020d002005102d21020c010b200428020020022005103121020b2002450d2c200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c300b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2f2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2f0b200328025c2201450d2e200341e0006a29030021070b20002007370204200020013602000c2e0b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2c200241017422062005200620054b1b22054100480d2c0240024020020d002005102d21020c010b200428020020022005103121020b2002450d2b200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c2f0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2e2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2e0b200328025c2201450d2d200341e0006a29030021070b20002007370204200020013602000c2d0b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2b200241017422062005200620054b1b22054100480d2b0240024020020d002005102d21020c010b200428020020022005103121020b2002450d2a200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2e0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2d2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2d0b200328025c2201450d2c200341e0006a29030021070b20002007370204200020013602000c2c0b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d2a200241017422062005200620054b1b22054100480d2a0240024020020d002005102d21020c010b200428020020022005103121020b2002450d29200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2d0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2c2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2c0b200328025c2201450d2b200341e0006a29030021070b20002007370204200020013602000c2b0b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d29200241017422062005200620054b1b22054100480d290240024020020d002005102d21020c010b200428020020022005103121020b2002450d28200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2c0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2b2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2b0b200328025c2201450d2a200341e0006a29030021070b20002007370204200020013602000c2a0b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d28200241017422062005200620054b1b22054100480d280240024020020d002005102d21020c010b200428020020022005103121020b2002450d27200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2b0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d2a2003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c2a0b200328025c2201450d29200341e0006a29030021070b20002007370204200020013602000c290b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d27200241017422062005200620054b1b22054100480d270240024020020d002005102d21020c010b200428020020022005103121020b2002450d26200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2a0b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d292003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c290b200328025c2201450d28200341e0006a29030021070b20002007370204200020013602000c280b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d26200241017422062005200620054b1b22054100480d260240024020020d002005102d21020c010b200428020020022005103121020b2002450d25200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c290b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d282003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c280b200328025c2201450d27200341e0006a29030021070b20002007370204200020013602000c270b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d25200241017422062005200620054b1b22054100480d250240024020020d002005102d21020c010b200428020020022005103121020b2002450d24200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c280b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d272003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c270b200328025c2201450d26200341e0006a29030021070b20002007370204200020013602000c260b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d24200241017422062005200620054b1b22054100480d240240024020020d002005102d21020c010b200428020020022005103121020b2002450d23200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c270b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d262003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c260b200328025c2201450d25200341e0006a29030021070b20002007370204200020013602000c250b200341d8006a200141186a2204200141286a410110d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d23200241017422062005200620054b1b22054100480d230240024020020d002005102d21020c010b200428020020022005103121020b2002450d22200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c260b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d252003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c250b200328025c2201450d24200341e0006a29030021070b20002007370204200020013602000c240b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d22200241017422062005200620054b1b22054100480d220240024020020d002005102d21020c010b200428020020022005103121020b2002450d21200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c250b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d242003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c240b200328025c2201450d23200341e0006a29030021070b20002007370204200020013602000c230b200341d8006a200141186a2204200141286a410210d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d21200241017422062005200620054b1b22054100480d210240024020020d002005102d21020c010b200428020020022005103121020b2002450d20200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c240b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d232003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c230b200328025c2201450d22200341e0006a29030021070b20002007370204200020013602000c220b200341d8006a200141186a2204200141286a410310d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d20200241017422062005200620054b1b22054100480d200240024020020d002005102d21020c010b200428020020022005103121020b2002450d1f200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c230b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d222003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c220b200328025c2201450d21200341e0006a29030021070b20002007370204200020013602000c210b200341d8006a200141186a2204200141286a410010d7060240024020032d00584101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d0d200241017422062005200620054b1b22054100480d0d0240024020020d002005102d21020c010b200428020020022005103121020b2002450d0c200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c220b200341ec006a220141013602002003420137025c200341fcdeca003602582003410136023c200320053602382003200341386a360268200341106a200341d8006a103a20032802102202450d212003200329021437023c20032002360238200141013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102101200329021421070240200328023c450d002003280238102f0b20010d010c210b200328025c2201450d20200341e0006a29030021070b20002007370204200020013602000c200b2000200329025c370200200041086a200341e4006a2802003602000c1f0b200341ec006a41013602002003420237025c200341ccd2ca003602582003413836023c2003200441056a3602382003200341386a360268200341106a200341d8006a103a200041086a200341106a41086a280200360200200020032903103702000c1e0b41eeddca00411d418cdeca001055000b41eeddca00411d418cdeca001055000b200341d8006a41146a41013602002003420237025c200341c0dbca0036025820034101360204200320033602682003200341386a360200200341106a200341d8006a103a0c0a0b200341e0006a2903002107200328025c21010c0a0b200341e0006a2903002107200328025c21010c090b200341ec006a41013602002003420237025c200341a4dcca003602582003410136024c2003200341c8006a3602682003200341d4006a360248200341106a200341d8006a103a0c050b1036000b1038000b41eeddca00411d418cdeca001055000b200320032d005922013a00002001200241ff0171460d1320014104460d13200341106a41146a41373602002003411c6a4137360200200341d8006a41146a41033602002003420337025c20034184d3ca00360258200341013602142003200341106a3602682003200336022020032003412f6a3602182003200341286a360210200341386a200341d8006a103a0b200329023c2107200328023821010c010b2003280210210120032003290214220737023c200320013602380b2001450d1020002007370204200020013602000c110b20032802102101200329021421070b2001450d0e20002007370204200020013602000c0f0b200641027421060340200320042802002205360248200220054d0d0220022005417f736a220520024f0d0b0240200820054103746a22052d00044103460d0020052d00054104470d040b200441046a21042006417c6a22060d000b4104210a0b200341d8006a200141186a2202200d410010d70620032d00584101460d02200a41ff01714104470d030c040b200341ec006a220441023602002003411c6a41013602002003420237025c200341acddca0036025820034101360214200320023602002003200341106a360268200320033602182003200341c8006a360210200341386a200341d8006a103a200328023821022003200329023c37023c20032002360238200441013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102102200329021421070240200328023c450d002003280238102f0b20032007370204200320023602000c050b2003411c6a4138360200200341ec006a41023602002003420237025c200341dcd2ca003602582003200541056a360218200341383602142003200341106a3602682003200341306a3602102003200341d8006a103a0c040b200341086a200341e4006a2802003602002003200329025c3703000c030b200341d8006a2002200d200a10db062003280258450d00200341086a200341d8006a41086a280200360200200320032903583703000c020b200341003602000c010b200341ec006a220441023602002003411c6a41013602002003420237025c200341acddca0036025820034101360214200320023602002003200341106a360268200320033602182003200341c8006a360210200341386a200341d8006a103a200328023821022003200329023c37023c20032002360238200441013602002003420137025c200341c0d7ca0036025820034131360204200320033602682003200341386a360200200341106a200341d8006a103a20032802102102200329021421070240200328023c450d002003280238102f0b20032007370204200320023602000b0240200328020022020d0002400240200141306a2802002202417f6a220420024f0d00200420024d0d010b4118102d2201450d022003421837025c20032001360258200341d8006a4100411810d80620032003280260220141186a3602602001200328025822006a41184192ddca00411810d9062003200329025c37025c20032000360258418fd1ca00413b200341d8006a41ccd1ca0041dcd1ca00103e000b02400240200128022820044103746a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d0020012802182108200221010c010b200220096a220a2002490d042008410174220b200a200b200a4b1b220a4100480d040240024020080d00200a102d21080c010b20012802182008200a103121080b2008450d03200120083602182001411c6a200a360200200141206a28020021010b200820016a210a0240024020094102490d00200a410420042002417f736a220210e7061a2008200220016a22016a210a0c010b2009450d010b200a41043a0000200141016a21010b20062001360200200541013a00060c060b20002003290204370204200020023602000c060b1036000b1038000b41eeddca00411d418cdeca001055000b20002007370204200020023602000c020b20002007370204200020013602000c010b200041003602000b200341f0006a24000b6401017f230041206b2202240020024139360204200220003602002001411c6a2802002100200128021821012002411c6a41013602002002420137020c2002419cdfca003602082002200236021820012000200241086a103c2101200241206a240020010b0c002000280200200110b1060b19002000200141186a280200360204200020012802103602000bcf05010a7f200141096a2d0000210220012d000821032001280204210420012802002105024002400240024002400240024002400240024020012d000a22060e03010002010b200341ff017141014621070c020b200341ff01714101462201200420056b6a220720014f0d01410021084100210141002107410121090240410041ff01710e03030400030b410021060c040b200420056b21070b0240024020070d00410121090c010b20074100480d042007102d2209450d050b4100210102400240200341ff01710d00200921080c010b20092108200641014b0d00200920023a0000200941016a2108410121010b200641024b0d05024020060e03000600000b20052004460d05200120056b21010340200820052d00003a0000200841016a21082004200541016a2205470d000b200420016a21010c050b410121060c010b410221060b0340024002400240024020060e03000102020b20052004460d0620052d0000210a41022106200541016a21052002210b200a21020c020b200341017121064100210302402006450d00410021064100210b0c020b20052004460d0520052d0000210241022106200541016a21054100210b0c010b410121062003410171210a410021034100210b200a450d040b024020012007470d00024002400240024020060e03010200010b200420056b21070c020b417f200341ff01714101462207200420056b6a220a200a2007491b21070c010b200341ff017141014621070b2001417f200741016a220a200a2007491b6a22072001490d0220082007200820074b1b22074100480d020240024020010d002007102d21090c010b200920012007103121090b2009450d030b200920016a20023a0000200841026a2108200141016a2101200b2102024002400240200641ff01710e03000102000b410121060c020b410221060c010b410021060c000b0b1038000b1036000b2000200136020820002007360204200020093602000bc76501037f230041206b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00000eac010102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab0100010b2002200128021841d7a3ca0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000cab010b2002200128021841e8a3ca00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000caa010b2002200128021841f3a3ca0041032001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca9010b2002200128021841f6a3ca0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41fca3ca00106121000ca8010b20022001280218418ca4ca0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41fca3ca00106121000ca7010b200220012802184190a4ca0041022001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41fca3ca00106121000ca6010b200220012802184192a4ca0041042001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca5010b200220012802184196a4ca0041032001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca4010b200220012802184199a4ca0041022001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000ca3010b20022001280218419ba4ca0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000ca2010b20022001280218419fa4ca0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a8a4ca00106121000ca1010b2002200128021841b8a4ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca0010b2002200128021841bea4ca0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c9f010b2002200128021841c2a4ca00410c2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041016a36020c20012002410c6a41d0a4ca00106121000c9e010b2002200128021841e0a4ca0041042001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c9d010b2002200128021841e4a4ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c9c010b2002200128021841eaa4ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c9b010b2002200128021841f2a4ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c9a010b2002200128021841faa4ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c99010b200220012802184182a5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c98010b20022001280218418ba5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c97010b200220012802184194a5ca0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c96010b20022001280218419ba5ca0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c95010b2002200128021841a2a5ca0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c94010b2002200128021841a9a5ca0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c93010b2002200128021841b0a5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c92010b2002200128021841b9a5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c91010b2002200128021841c2a5ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c90010b2002200128021841cca5ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8f010b2002200128021841d6a5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8e010b2002200128021841dfa5ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8d010b2002200128021841e8a5ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8c010b2002200128021841f2a5ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8b010b2002200128021841fca5ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c8a010b200220012802184186a6ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c89010b200220012802184190a6ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c88010b200220012802184198a6ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c87010b2002200128021841a0a6ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c86010b2002200128021841a8a6ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c85010b2002200128021841b0a6ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c84010b2002200128021841b9a6ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c83010b2002200128021841c3a6ca0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c82010b2002200128021841cca6ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c81010b2002200128021841d6a6ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121012002200041086a36020c20012002410c6a41a0a3ca00106121000c80010b2002200128021841e0a6ca00410d2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41d0a4ca00106121000c7f0b2002200128021841eda6ca00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41d0a4ca00106121000c7e0b2002200128021841f7a6ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4180a7ca00106121000c7d0b200220012802184190a7ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041086a36020c200241106a2002410c6a4198a7ca00106121000c7c0b2002200128021841a8a7ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0a3ca00106121000c7b0b2002200128021841b0a7ca0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041086a36020c200241106a2002410c6a41b8a7ca00106121000c7a0b2002200128021841c8a7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c790b2002200128021841cea7ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c780b2002200128021841d3a7ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c770b2002200128021841d8a7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c760b2002200128021841dea7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c750b2002200128021841e4a7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c740b2002200128021841eaa7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c730b2002200128021841f0a7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c720b2002200128021841f6a7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c710b2002200128021841fca7ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c700b200220012802184182a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6f0b200220012802184188a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6e0b20022001280218418ea8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6d0b200220012802184193a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6c0b200220012802184198a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6b0b20022001280218419ea8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6a0b2002200128021841a4a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c690b2002200128021841aaa8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c680b2002200128021841b0a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c670b2002200128021841b6a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c660b2002200128021841bca8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c650b2002200128021841c2a8ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c640b2002200128021841c8a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c630b2002200128021841cda8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c620b2002200128021841d2a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c610b2002200128021841d7a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c600b2002200128021841dca8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5f0b2002200128021841e1a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5e0b2002200128021841e6a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5d0b2002200128021841eba8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5c0b2002200128021841f0a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5b0b2002200128021841f5a8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5a0b2002200128021841faa8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c590b2002200128021841ffa8ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c580b200220012802184184a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c570b20022001280218418aa9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c560b200220012802184190a9ca0041092001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c550b200220012802184199a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c540b20022001280218419fa9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c530b2002200128021841a5a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c520b2002200128021841aba9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c510b2002200128021841b2a9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c500b2002200128021841b9a9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4f0b2002200128021841c0a9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4e0b2002200128021841c7a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4d0b2002200128021841cda9ca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4c0b2002200128021841d2a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4b0b2002200128021841d8a9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4a0b2002200128021841dea9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c490b2002200128021841e5a9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c480b2002200128021841eca9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c470b2002200128021841f3a9ca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c460b2002200128021841faa9ca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c450b200220012802184180aaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c440b200220012802184186aaca0041092001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c430b20022001280218418faaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c420b200220012802184195aaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c410b20022001280218419baaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c400b2002200128021841a1aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3f0b2002200128021841a8aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3e0b2002200128021841afaaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3d0b2002200128021841b6aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3c0b2002200128021841bdaaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3b0b2002200128021841c3aaca0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3a0b2002200128021841c8aaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c390b2002200128021841ceaaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c380b2002200128021841d4aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c370b2002200128021841dbaaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c360b2002200128021841e2aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c350b2002200128021841e9aaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c340b2002200128021841f0aaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c330b2002200128021841f6aaca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c320b2002200128021841fcaaca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c310b200220012802184183abca0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c300b20022001280218418babca0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2f0b200220012802184193abca00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2e0b20022001280218419dabca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2d0b2002200128021841a4abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2c0b2002200128021841aaabca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2b0b2002200128021841b0abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2a0b2002200128021841b6abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c290b2002200128021841bcabca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c280b2002200128021841c2abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c270b2002200128021841c8abca00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c260b2002200128021841d3abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c250b2002200128021841d9abca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c240b2002200128021841dfabca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c230b2002200128021841e6abca0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c220b2002200128021841eeabca0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c210b2002200128021841f6abca00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c200b200220012802184180acca0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1f0b200220012802184187acca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1e0b20022001280218418dacca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1d0b200220012802184193acca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1c0b200220012802184199acca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1b0b20022001280218419facca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1a0b2002200128021841a5acca0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c190b2002200128021841abacca00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c180b2002200128021841b6acca00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c170b2002200128021841c0acca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c160b2002200128021841ccacca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c150b2002200128021841d8acca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c140b2002200128021841e4acca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c130b2002200128021841f0acca00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c120b2002200128021841fdacca00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c110b20022001280218418aadca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c100b200220012802184196adca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0f0b2002200128021841a2adca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0e0b2002200128021841aeadca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0d0b2002200128021841baadca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0c0b2002200128021841c8adca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0b0b2002200128021841d6adca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0a0b2002200128021841e4adca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c090b2002200128021841f2adca00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c080b2002200128021841feadca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c070b20022001280218418caeca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c060b20022001280218419aaeca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c050b2002200128021841a8aeca00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c040b2002200128021841b6aeca00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c030b2002200128021841c3aeca0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c020b2002200128021841d4aeca0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c010b2002200128021841e5aeca0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000b20002d00082101024020002802042203450d00200141ff0171210441012101024020040d00024020034101470d0020002d0009450d00200028020022042d00004104710d004101210120042802184196a5c00041012004411c6a28020028020c1100000d010b2000280200220128021841e4d3ca0041012001411c6a28020028020c11000021010b200020013a00080b200241206a2400200141ff01714100470bc50201037f230041206b2202240002400240200028020022002d00004104470d002002200128021841a4afca0041082001411c6a28020028020c11000022003a001820022001360210200241003a0019200241003602140c010b2002200128021841acafca0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200036020c200241106a2002410c6a4188afca001061210120022d0018210020022802142203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d004101210020042802184196a5c00041012004411c6a28020028020c1100000d010b2001280200220028021841e4d3ca0041012000411c6a28020028020c11000021000b200120003a00080b200241206a2400200041ff01714100470bc00201037f230041206b220224000240024020002d00004104470d002002200128021841a4afca0041082001411c6a28020028020c11000022003a001820022001360210200241003a0019200241003602140c010b2002200128021841acafca0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200036020c200241106a2002410c6a4188afca001061210120022d0018210020022802142203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d004101210020042802184196a5c00041012004411c6a28020028020c1100000d010b2001280200220028021841e4d3ca0041012000411c6a28020028020c11000021000b200120003a00080b200241206a2400200041ff01714100470bc00201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d0020002d0000210420034120710d012004ad42ff018341012001104521000c020b20002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000b20024180016a240020000f0b2004418001104b000b2004418001104b000bcd0203027f017e017f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210020034120710d012000ac22042004423f8722047c2004852000417f73411f762001104521000c020b20002802002103410021000340200220006a41ff006a2003410f712205413072200541d7006a2005410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021030340200220036a41ff006a2000410f712205413072200541376a2005410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141bc8ac0004102200220036a4180016a410020036b104821000b20024180016a240020000f0b2003418001104b000b2000418001104b000bcd0202027f027e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d0120042004423f8722057c2005852004427f552001104521000c020b20002903002104410021000340200220006a41ff006a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000c010b410021000340200220006a41ff006a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141bc8ac0004102200220006a4180016a410020006b104821000b20024180016a240020000f0b2003418001104b000b2003418001104b000b8a0201027f230041106b2202240020002802002802002100200128021841b0a3ca00410b2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200036020c200241bba3ca0041052002410c6a41c0a3ca00105b21012002200041086a36020c200141d0a3ca0041072002410c6a41a0a3ca00105b1a20022d00042101024020022d0005450d00200141ff0171210041012101024020000d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d0020034190a5c0004102200011000021010c010b20034192a5c0004101200011000021010b200220013a00040b200241106a2400200141ff01714100470bcc0101047f230041106b220224002000280200220041046a2802002103200028020021004101210420012802184199a5c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d002003410274210103402002200036020c20022002410c6a41f8aeca0010621a200041046a21002001417c6a22010d000b20022d000421050b0240200541ff01710d00200228020022002802184198a5c00041012000411c6a28020028020c11000021040b200241106a240020040b8c0902047f017e230041106b2202240002400240024020010d00200041ac013a00000c010b024002400240024020012d00002203414f6a41fb004f0d000c010b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e312c2c0001022c2c0304052c06072c2c08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292c0b20012d00012104410221030c2b0b20012d00012104410321030c2a0b20012d00012104410421030c290b200141046a2802002105410721030c270b200141046a2802002105410821030c260b200141046a2802002101410c102d2205450d28200241086a2001280200200141046a28020010ba06200229030821062005200128020836020820052006370200410921030c250b200141046a2802002105410b21030c240b200141046a280200210520012d00012104410c21030c240b200141046a2802002105410f21030c220b200141046a2802002105411021030c210b200141046a2802002105411121030c200b200141046a2802002105411221030c1f0b200141046a2802002105411321030c1e0b200141046a280200210520013502082106411421030c1d0b200141046a280200210520013502082106411521030c1c0b200141046a280200210520013502082106411621030c1b0b200141046a280200210520013502082106411721030c1a0b200141046a280200210520013502082106411821030c190b200141046a280200210520013502082106411921030c180b200141046a280200210520013502082106411a21030c170b200141046a280200210520013502082106411b21030c160b200141046a280200210520013502082106411c21030c150b200141046a280200210520013502082106411d21030c140b200141046a280200210520013502082106411e21030c130b200141046a280200210520013502082106411f21030c120b200141046a280200210520013502082106412021030c110b200141046a280200210520013502082106412121030c100b200141046a280200210520013502082106412221030c0f0b200141046a280200210520013502082106412321030c0e0b200141046a280200210520013502082106412421030c0d0b200141046a280200210520013502082106412521030c0c0b200141046a280200210520013502082106412621030c0b0b200141046a280200210520013502082106412721030c0a0b200141046a280200210520013502082106412821030c090b200141046a280200210520013502082106412921030c080b200141046a280200210520013502082106412a21030c070b20012d00012104412b21030c070b20012d00012104412c21030c060b200141046a2802002105412d21030c040b20012903082106412e21030c020b200141046a2802002105412f21030c020b20012903082106413021030b0b0b200020043a0001200020033a0000200041086a2006370300200041046a20053602000b200241106a24000f0b1036000ba20201037f0240024002400240200241ffffffff03712002470d0020024102742203417f4c0d000240024020030d0041042104200221030c010b2003102d2204450d022003410276220320024f0d00200341017422052002200520024b1b220541ffffffff03712005470d03200541027422054100480d030240024020030d002005102d21040c010b200420034102742005103121040b2004450d02200541027621030b200420012002410274220510e80621010240024020032002470d00200121040c010b20032002490d04024020020d0041002102410421042003450d012001102f0c010b20012003410274200510312204450d020b20002002360204200020043602000f0b103d000b1036000b1038000b41ebafca00412441f8b4ca001039000bba0201037f230041106b220224000240024020002802000d00200220012802184193b0ca0041042001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b20022001280218418fb0ca0041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a4198b0ca001061210120022d0008210020022802042203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d004101210020042802184196a5c00041012004411c6a28020028020c1100000d010b2001280200220028021841e4d3ca0041012000411c6a28020028020c11000021000b200120003a00080b200241106a2400200041ff01714100470b880301067f02402001450d00034020002802940321002001417f6a22010d000b0b02402002450d0041002103034002400240200320002f01064f0d0041002104200021010c010b41002104034002400240024020004190bdc600460d00200028020022010d0141002103410021010c020b41edb3ca00412841f8b4ca001039000b200441016a210420002f010421030b2000102f20012100200320012f01064f0d000b0b200341016a2105200120034105746a220041c4006a2802002106200041386a2802002107200041346a28020021080240024020040d0020012100200521030c010b200120054102746a4194036a2802002100410021032004417f6a2201450d00034020002802940321002001417f6a22010d000b0b20064102460d012002417f6a210202402007450d002008102f0b20020d000b0b0240024020004190bdc600460d00200028020021012000102f2001450d00034020014190bdc600460d02200128020021002001102f2000210120000d000b0b0f0b41edb3ca00412841f8b4ca001039000bab0902027f017e230041106b220224000240024020012d00002203414f6a41fb00490d0002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e312a2a0001022a2a0304052a06072a2a08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a0b200020012d00013a0001410221030c290b200020012d00013a0001410321030c280b200020012d00013a0001410421030c270b200041046a200141046a280200360200410721030c260b200041046a200141046a280200360200410821030c250b200141046a2802002103410c102d2201450d25200241086a2003280200200341046a28020010ba06200229030821042001200328020836020820012004370200200041046a2001360200410921030c240b200041046a200141046a280200360200410b21030c230b200020012d00013a0001200041046a200141046a280200360200410c21030c220b200041046a200141046a280200360200410f21030c210b200041046a200141046a280200360200411021030c200b200041046a200141046a280200360200411121030c1f0b200041046a200141046a280200360200411221030c1e0b200041046a200141046a280200360200411321030c1d0b200041046a200141046a290200370200411421030c1c0b200041046a200141046a290200370200411521030c1b0b200041046a200141046a290200370200411621030c1a0b200041046a200141046a290200370200411721030c190b200041046a200141046a290200370200411821030c180b200041046a200141046a290200370200411921030c170b200041046a200141046a290200370200411a21030c160b200041046a200141046a290200370200411b21030c150b200041046a200141046a290200370200411c21030c140b200041046a200141046a290200370200411d21030c130b200041046a200141046a290200370200411e21030c120b200041046a200141046a290200370200411f21030c110b200041046a200141046a290200370200412021030c100b200041046a200141046a290200370200412121030c0f0b200041046a200141046a290200370200412221030c0e0b200041046a200141046a290200370200412321030c0d0b200041046a200141046a290200370200412421030c0c0b200041046a200141046a290200370200412521030c0b0b200041046a200141046a290200370200412621030c0a0b200041046a200141046a290200370200412721030c090b200041046a200141046a290200370200412821030c080b200041046a200141046a290200370200412921030c070b200041046a200141046a290200370200412a21030c060b200020012d00013a0001412b21030c050b200020012d00013a0001412c21030c040b200041046a200141046a280200360200412d21030c030b200041086a200141086a290300370300412e21030c020b200041046a200141046a280200360200412f21030c010b200041086a200141086a290300370300413021030b200020033a0000200241106a24000f0b1036000b8c0301067f230041106b220224000240024002400240200041046a2802002203200041086a28020022046b20012802042205200128020022066b4104762207490d00200028020021030c010b200420076a22062004490d02200341017422052006200520064b1b220641ffffffff00712006470d02200641047422064100480d020240024020030d002006102d21030c010b200028020020034104742006103121030b2003450d0120002003360200200041046a2006410476360200200041086a280200210420012802042105200128020021060b0240024020062005470d00410021060c010b2001200641106a3602000b2002200610b906024020022d000041ac01460d00200320044104746a2106034020062002290300370300200641086a200241086a29030037030002400240200128020022052001280204470d00410021050c010b2001200541106a3602000b200441016a2104200641106a21062002200510b90620022d000041ac01470d000b0b200041086a2004360200200241106a24000f0b1036000b1038000bcc0201027f230041106b2202240020002802002802002100200128021841c2b5ca0041052001411c6a28020028020c1100002103200241003a0005200220033a00042002200136020020022000410c6a36020c200241c7b5ca00410e2002410c6a41d8b5ca00105b21012002200036020c200141e8b5ca0041092002410c6a41f4b5ca00105b21012002200041046a36020c20014184b6ca00410c2002410c6a41f4b5ca00105b21012002200041086a36020c20014190b6ca00410c2002410c6a41f4b5ca00105b1a20022d00042100024020022d0005450d00200041ff0171210141012100024020010d0020022802002200411c6a28020028020c210120002802182103024020002d00004104710d0020034190a5c0004102200111000021000c010b20034192a5c0004101200111000021000b200220003a00040b200241106a2400200041ff01714100470bdd60010c7f230041a0016b22032400200320013602242002280208220441546a2105200241106a280200220641306c21010240024002400240024002400240024003402001450d01200141506a21012005412c6a2107200541306a2208210520072d00004104470d000b200641306c2101200441546a210503402001450d02200141506a21012005412c6a2107200541306a2209210520072d0000410c470d000b200641306c2101200441546a210503402001450d04200141506a21012005412c6a2107200541306a2204210520072d00004102470d000b024041002802a4e24a4105490d00200341013602442003200341246a36024041002802b0e24a210141002802ace24a210541002802a8e24a210720034198016a41980136020020034190016a42ed808080103703002003418c016a41bcb8ca0036020020034184016a422537020020034180016a41b3b9ca00360200200341f8006a4201370300200341e8006a4201370300200341e0006a410a360200200341f4006a200341c0006a360200200341d0b6ca00360264200341a9b9ca0036025c20034105360258200541cca5c000200741024622071b200341d8006a200141e4a5c00020071b2802101102000b200341186a200810d603200328021c200328022422014d0d04200328021820014102746a2201450d04200341106a200410d60302402003280214200128020022014d0d00200328021020014104746a22010d060b4125102d2201450d072001411d6a41002900f5b64a370000200141186a41002900f0b64a370000200141106a41002900e8b64a370000200141086a41002900e0b64a370000200141002900d8b64a370000200041086a42a5808080d00437020020002001360204200041013602000c060b4113102d22010d010c060b410f102d2201450d05200141076a41002900b6b64a370000200141002900afb64a370000200041086a428f808080f00137020020002001360204200041013602000c040b2001410f6a41002800abb64a360000200141086a41002900a4b64a3700002001410029009cb64a370000200041086a4293808080b00237020020002001360204200041013602000c030b410f102d2201450d03200141076a41002900c5b64a370000200141002900beb64a370000200041086a428f808080f00137020020002001360204200041013602000c020b4125102d2201450d022001411d6a41002900f5b64a370000200141186a41002900f0b64a370000200141106a41002900e8b64a370000200141086a41002900e0b64a370000200141002900d8b64a370000200041086a42a5808080d00437020020002001360204200041013602000c010b0240200941086a280200200328022422054b0d004127102d2201450d022001411f6a41002900a7b74a370000200141186a41002900a0b74a370000200141106a4100290098b74a370000200141086a4100290090b74a37000020014100290088b74a370000200041086a42a7808080f00437020020002001360204200041013602000c010b20092802002109200341286a41086a420037030020034280808080c00037032820012d000d2107410021012003410036024820032007410447220a3602442003200a360240200341003a004c02400240024002400240024041002802a4e24a41044b0d00200341d8006a41086a200341c0006a41086a29030037030020032003290340370358200341286a410472210b200341d8006a21070c010b2003413a3602542003200341c0006a36025041002802b0e24a210141002802ace24a210741002802a8e24a210820034198016a41cb0036020020034190016a42ed808080103703002003418c016a41bcb8ca0036020020034184016a422537020020034180016a41b3b9ca00360200200341f8006a4201370300200341e8006a4201370300200341d8006a41086a2206410a360200200341f4006a200341d0006a36020020034180b7ca00360264200341a9b9ca0036025c20034105360258200741cca5c000200841024622081b200341d8006a200141e4a5c00020081b28021011020020032802342108200328023021012006200341c0006a41086a29030037030020032003290340370358200341286a410472210b200341d8006a210720082001470d010b200141016a22082001490d01200141017422062008200620084b1b220841ffffffff00712008470d01200841047422084100480d010240024020010d002008102d21010c010b200b28020020014104742008103121010b2001450d05200b200136020020032008410476360230200328023421080b200b28020020084104746a22012007290200370200200141086a200741086a2902003702002003200328023441016a360234410021072009200541186c6a2201280214450d022009200541186c6a410c6a2109200141146a2108200341d8006a410472210c410021074100210103400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200328022820074d0d00200341d8006a200341286a410010c20620032802584101460d0120072003280228200328025c2d000c1b21070b2001200828020022054f0d1d2003200928020020014104746a220536023c024041002802a4e24a4105490d002003413236024420032003413c6a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341c90136029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca003602800120034201370378200342013703682003419cdfca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328023c21050b20052d000022060eac01033201010132020405060708090a0b0c0d0e0f10111111111111111111111111111112121212121212121213141515151516171717171717171717171617171717171717171717171717171717171717171717181818191919191919191919191919191919181818191919191919191919191919191919181818181818181919191919191918181818181818191919191919191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a030b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c340b20052d000121052003200328022836024820032005410447220536024020032006410347200571360244200341003a004c024041002802a4e24a4105490d002003413a3602542003200341c0006a36025041002802b0e24a210541002802ace24a210641002802a8e24a210d200341cb0036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca0036028001200342013703782003420137036820034180b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341d0006a360274200641cca5c000200d1b200341d8006a20051102000b200341d8006a41086a2206200341c0006a41086a290300370300200320032903403703580240200328023422052003280230470d00200541016a220d2005490d332005410174220e200d200e200d4b1b220d41ffffffff0071200d470d33200d410474220d4100480d330240024020050d00200d102d21050c010b200b2802002005410474200d103121050b2005450d37200b20053602002003200d410476360230200328023421050b200b28020020054104746a22052003290358370200200541086a20062903003702002003200328023441016a3602340c300b41002105024041002802a4e24a4105490d00024020032802342206417f6a220d20064b0d00200b280200200d4104746a4100200d2006491b21050b2003413b360254200320053602402003200341c0006a36025041002802b0e24a210541002802ace24a210641002802a8e24a210d200341d30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341b0b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341d0006a360274200641cca5c000200d1b200341d8006a20051102000b024020032802342205450d0020032005417f6a2205360234200b28020020054104746a22052d000c4102470d1a0b4117102d2201450d352001410f6a41002900c7b74a370000200141086a41002900c0b74a370000200141002900b8b74a370000200041086a4297808080f00237020020002001360204200041013602000c320b024041002802a4e24a4105490d0041002802b0e24a210541002802ace24a210641002802a8e24a210d200341c10036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca003602800120034200370378200341c8e1ca0036027420034201370368200341d0b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200641cca5c000200d410246220d1b200341d8006a200541e4a5c000200d1b2802101102000b024020032802342205417f6a220620054f0d00200620054d0d180b4117102d2201450d342001410f6a41002900c7b74a370000200141086a41002900c0b74a370000200141002900b8b74a370000200041086a4297808080f00237020020002001360204200041013602000c310b200341d8006a200341286a200541046a28020010c20620032802584101460d19200341d8006a200341286a200328025c28020410c306024020032802580d00024041002802a4e24a4105490d0041002802b0e24a210541002802ace24a210641002802a8e24a210d200341c10036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca003602800120034200370378200341c8e1ca0036027420034201370368200341d0b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200641cca5c000200d410246220d1b200341d8006a200541e4a5c000200d1b2802101102000b0240024020032802342205417f6a220620054f0d00200620054d0d010b4117102d2201450d352001410f6a41002900c7b74a370000200141086a41002900c0b74a370000200141002900b8b74a370000200041086a4297808080f00237020020002001360204200041013602000c320b200b28020020064104746a41013a000c0c2e0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c300b200341d8006a200341286a200541046a28020010c20620032802584101460d19200341d8006a200341286a200328025c280204220510c30620032802580d1a200341d8006a200341286a410110c30620032802580d1b20032005360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c2d0b410e102d2201450d32200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c2f0b200341d8006a200341286a200541046a28020028020810c20620032802584101460d1b200328025c280204210d2005280204220628020441027421052006280200210602400340024020050d00200341d8006a200341286a200d10c30620032802580d20024041002802a4e24a4105490d0041002802b0e24a210541002802ace24a210641002802a8e24a210d200341c10036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca003602800120034200370378200341c8e1ca0036027420034201370368200341d0b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200641cca5c000200d410246220d1b200341d8006a200541e4a5c000200d1b2802101102000b20032802342205417f6a220620054f0d02200620054b0d02200b28020020064104746a41013a000c0c2e0b200341d8006a200341286a200628020010c20620032802584101460d1e2005417c6a2105200641046a2106200328025c280204200d460d000b4127102d2201450d322001411f6a410029008db84a370000200141186a4100290086b84a370000200141106a41002900feb74a370000200141086a41002900f6b74a370000200141002900eeb74a370000200041086a42a7808080f00437020020002001360204200041013602000c2f0b4117102d2201450d312001410f6a41002900c7b74a370000200141086a41002900c0b74a370000200141002900b8b74a370000200041086a4297808080f00237020020002001360204200041013602000c2e0b200341d8006a200341286a200a10c306024020032802580d00024041002802a4e24a4105490d0041002802b0e24a210541002802ace24a210641002802a8e24a210d200341c10036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca003602800120034200370378200341c8e1ca0036027420034201370368200341d0b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200641cca5c000200d410246220d1b200341d8006a200541e4a5c000200d1b2802101102000b0240024020032802342205417f6a220620054f0d00200620054d0d010b4117102d2201450d322001410f6a41002900c7b74a370000200141086a41002900c0b74a370000200141002900b8b74a370000200041086a4297808080f00237020020002001360204200041013602000c2f0b200b28020020064104746a41013a000c0c2b0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c2d0b200341d8006a200541046a280200200210c40620032802584101460d1c200341d8006a200341286a200328025c220528020810c30620032802580d1d200320052d000d4104472205360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c2a0b410e102d2201450d2f200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c2c0b200341086a200410d60302400240200328020c200541046a28020022054d0d002003280208220620054104746a220d450d00200341d8006a200341286a200620054104746a28020810c30620032802580d1f2003200d2d000d4104472205360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b2003280228220620056a22052006490d01200320053602280c2a0b410e102d2201450d2f200141066a410029009bb84a37000020014100290095b84a370000200041086a428e808080e00137020020002001360204200041013602000c2c0b410e102d2201450d2e200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c2b0b200341d8006a200341286a410110c3062003280258450d2720002003290358370204200041013602002000410c6a200341e0006a2802003602000c2a0b200341d8006a200341286a410210c30620032802580d1c41012105200341d8006a200341286a410110c30620032802580d1d20034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c270b410e102d2201450d2c200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c290b4101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c260b410e102d2201450d2b200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c280b200341d8006a200341286a410110c3062003280258450d2420002003290358370204200041013602002000410c6a200341e0006a2802003602000c270b41012105200341d8006a200341286a410110c30620032802580d1b20034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c240b410e102d2201450d29200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c260b4101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c230b410e102d2201450d28200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c250b200341d8006a200341286a410110c3062003280258450d2120002003290358370204200041013602002000410c6a200341e0006a2802003602000c240b41012105200341d8006a200341286a410110c30620032802580d1920034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c210b410e102d2201450d26200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c230b200341d8006a200341286a410210c3062003280258450d1f20002003290358370204200041013602002000410c6a200341e0006a2802003602000c220b4101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1f0b410e102d2201450d24200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c210b41012105200341d8006a200341286a410110c30620032802580d1720034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1e0b410e102d2201450d23200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c200b4101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1d0b410e102d2201450d22200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1f0b41012105200341d8006a200341286a410110c30620032802580d1620034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1c0b410e102d2201450d21200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1e0b200341d8006a200341286a410210c30620032802580d164101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1b0b410e102d2201450d20200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1d0b41012105200341d8006a200341286a410110c30620032802580d1620034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c1a0b410e102d2201450d1f200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1c0b200341d8006a200341286a410210c30620032802580d164101210520034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c190b410e102d2201450d1e200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1b0b41012105200341d8006a200341286a410110c30620032802580d1620034101360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c180b410e102d2201450d1d200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c1a0b200b28020020064104746a41013a000c0c160b20052802002106200320052802082205360240024041002802a4e24a4105490d00200341013602542003200341c0006a36025041002802b0e24a210541002802ace24a210d41002802a8e24a210e200341db0036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341a4b8ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200e410246220e1b28021021052003200341d0006a360274200d41cca5c000200e1b200341d8006a2005110200200328024021050b2003200536022820032006360250024041002802a4e24a4105490d00200341013602442003200341d0006a36024041002802b0e24a210541002802ace24a210641002802a8e24a210d200341e30036029801200342ed8080801037039001200341bcb8ca0036028c012003422537028401200341b3b9ca00360280012003420137037820034201370368200341d8b7ca003602642003410a360260200341a9b9ca0036025c20034105360258200541e4a5c000200d410246220d1b28021021052003200341c0006a360274200641cca5c000200d1b200341d8006a200511020020032802282105200328025021060b0240200520066a22062005490d00200320063602280c160b410e102d2201450d1b200141066a41002900e6b74a370000200141002900e0b74a370000200041086a428e808080e00137020020002001360204200041013602000c180b41acb8ca0020012005103b000b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c160b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c150b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c140b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c130b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c120b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c110b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c100b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c0f0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0e0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0d0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0c0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0b0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0a0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c090b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c080b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c070b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c060b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c050b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c040b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c030b200141016a22012008280200490d000c030b0b1038000b2003280230450d01200b280200102f0c010b20004100360200200020073602042003280230450d00200b280200102f0b200341a0016a24000f0b1036000bc20201027f230041106b22022400200128021841c2b5ca0041052001411c6a28020028020c1100002103200241003a0005200220033a00042002200136020020022000410c6a36020c200241c7b5ca00410e2002410c6a41d8b5ca00105b21012002200036020c200141e8b5ca0041092002410c6a41f4b5ca00105b21012002200041046a36020c20014184b6ca00410c2002410c6a41f4b5ca00105b21012002200041086a36020c20014190b6ca00410c2002410c6a41f4b5ca00105b1a20022d00042100024020022d0005450d00200041ff0171210141012100024020010d0020022802002200411c6a28020028020c210120002802182103024020002d00004104710d0020034190a5c0004102200111000021000c010b20034192a5c0004101200111000021000b200220003a00040b200241106a2400200041ff01714100470b900201027f024002400240024002402001410c6a2802002203417f6a220420034d0d004116102d22010d010c040b200420026b220220044d0d02411b102d2201450d0320002001360204200141176a41002800ecba4a360000200141106a41002900e5ba4a370000200141086a41002900ddba4a370000200141002900d5ba4a370000200041086a429b808080b0033702000c010b200020013602042001410e6a41002900cdba4a370000200141086a41002900c7ba4a370000200141002900bfba4a370000200041086a4296808080e0023702000b200041013602000f0b0240200320024d0d002000200128020420024104746a360204200041003602000f0b41c4c2ca0020022003103b000b1036000bd00401037f230041e0006b220324002003200236020c024041002802a4e24a4105490d002003410136021420032003410c6a36021041002802b0e24a210241002802ace24a210441002802a8e24a2105200341d8006a41ef00360200200341d0006a42ed80808010370300200341cc006a41bcb8ca00360200200341c4006a4225370200200341c0006a41b3b9ca00360200200341386a4201370300200341286a4201370300200341206a410a360200200341346a200341106a360200200341e8b9ca00360224200341a9b9ca0036021c20034105360218200441cca5c000200541024622051b200341186a200241e4a5c00020051b280210110200200328020c21020b02400240024002400240024002402002450d00200341186a2001410010c20620032802184101460d0120012802002202200328021c2204280208460d022002200328020c6b220420024d0d03410f102d22020d040c060b200041003602000c040b2000200341186a4104722202290200370200200041086a200241086a2802003602000c030b024020042d000c0d004125102d2202450d04200042a5808080d004370204200020023602002002411d6a410029008dba4a370000200241186a4100290088ba4a370000200241106a4100290080ba4a370000200241086a41002900f8b94a370000200241002900f0b94a3700000c030b200041003602000c020b20004100360200200120043602000c010b2000428f808080f00137020420002002360200200241076a410029009cba4a37000020024100290095ba4a3700000b200341e0006a24000f0b1036000bb507010b7f230041e0006b22032400200320013602202002280208220441546a2105200241106a280200220641306c210202400340024020020d00410021070c020b200241506a21022005412c6a2107200541306a2208210520072d00004102470d000b200341186a200810d60320032802182107200328021c21020b2002410020071b2109200641306c2102200441546a2105200741c8e1ca0020071b210a02400340024020020d004100210b0c020b200241506a21022005412c6a2107200541306a2208210520072d00004104470d000b200341106a200810d6032003280210210b2003280214210c0b200641306c2102200441546a2105200b41c8e1ca00200b1b210d02400240024002400240024002400240024003402002450d01200241506a21022005412c6a2107200541306a2208210520072d00004103470d000b200841086a2802002202450d00200241286c2107200828020041186a2102410021050340200520022d0000456a2105200241286a2102200741586a22070d000b200520014d0d01200641306c2102200441546a210503402002450d07200241506a21022005412c6a2107200541306a2208210520072d00004103470d000b200341086a200810d603200328020c220b41286c210520032802082204210703402005450d08200541586a2105200741186a2108200741286a2202210720082d00000d000b20010d02200241586a21020c030b410021050b0240200c4100200b1b200120056b22024d0d00200d20024102746a22020d030b200341dc006a41013602002003420237024c200341e0c1ca003602482003410136022c2003200341286a3602582003200341206a360228200341386a200341c8006a103a200341386a21020c030b2004200b41286c6a210803402001417f6a2101034020082002460d06200241186a2105200241286a2207210220052d00000d000b2007210220010d000b200741586a21020b2002411c6a21020b2003200228020022023602240240200920024d0d00200a20024104746a2202450d0020002002360204410021020c040b200341dc006a4102360200200341c4006a41013602002003420337024c200341f0c1ca003602482003410136023c2003200341386a3602582003200341206a3602402003200341246a360238200341286a200341c8006a103a200341286a21020b20022802002105200041086a200229020437020020002005360204410121020c020b41adc0ca0041c20041f0c0ca001055000b4180c1ca0041dd0041f0c0ca001055000b20002002360200200341e0006a24000bd50302047f017e024020014101762202450d0003402002417f6a2202210302400240024003402003410174220441017221050240200441026a220420014f0d00200520014f0d0220042005200020054103746a280200200020044103746a280200491b21050b200520014f0d03200320014f0d02200020034103746a2203280200200020054103746a22042802004f0d03200329020021062003200429020037020020042006370200200521030c000b0b41b0bcca0020052001103b000b41c0bcca0020032001103b000b20020d000b0b0240024020014102490d002001210403402004417f6a220420014f0d02200029020021062000200020044103746a2205290200370200200520063702004100210302400240024003402003410174220241017221050240200241026a220220044f0d00200520044f0d0220022005200020054103746a280200200020024103746a280200491b21050b200520044f0d03200320044f0d02200020034103746a2203280200200020054103746a22022802004f0d03200329020021062003200229020037020020022006370200200521030c000b0b41b0bcca0020052004103b000b41c0bcca0020032004103b000b200441014b0d000b0b0f0b4198bbca0020042001103b000bea04050a7f017e017f017e027f200041686a21022001417f6a2103200041086a2104410021052001413249210641012107024003400240024020072001490d00410021080c010b410121082000200741037422096a220a280200220b200a41786a280200490d00200420096a210803404101210a20032007460d03200741016a21072008280200220a200b4f2109200841086a2108200a210b20090d000b200720014921080b2007200146210a20060d0120072001460d010240024002400240024002402007417f6a220b20014f0d002008450d012000200b4103746a220b290200210c200b20002007410374220d6a2208290200220e3702002008200c37020020074102490d0520002007417e6a220a4103746a220f280200200ea722094d0d05200b200f290200370200200a450d0420002007417d6a220a4103746a28020020094d0d042002200d6a210b0340200b41086a200b290200370200200a450d03200a417f6a210a200b41786a220b28020020094b0d000b200a41016a210b0c030b4188bbca00200b2001103b000b4198bbca0020072001103b000b4100210b0b2000200b4103746a210f0b200f200e3702000b200541016a21050240200120076b220a4102490d00200828020820082802004f0d002008290200210c20082008290208370200200841086a210f0240200a4103490d002008280210200ca722104f0d00200841106a21094103210b4102210d0340200d41037420086a220f41786a2009290200370200200b200a4f0d01200b4103742109200b210d200b41016a210b200820096a22092802002010490d000b0b200f200c3702000b20054105470d000b4100210a0b200a0b2600024020002802002d00000d00200141c5a4c0004105104c0f0b200141caa4c0004104104c0bc60501087f230041106b220324002002280208220441546a2105200241106a280200220641306c210702400340410021082007450d01200741506a21072005412c6a2109200541306a220a210520092d00004103470d000b200a41086a2802002207450d00200741286c2105200a28020041186a2107410021080340200820072d0000456a2108200741286a2107200541586a22050d000b0b024002400240024002400240200120086b220a20014b0d00200641306c2107200441546a210503402007450d02200741506a21072005412c6a2108200541306a2209210520082d0000410c470d000b200941086a280200200a4b0d03411e102d2207450d052000200736020420004101360200200741166a41002900a5c04a370000200741106a410029009fc04a370000200741086a4100290097c04a3700002007410029008fc04a370000200041086a429e808080e0033702000c040b412c102d22070d010c040b412c102d2207450d032000200736020420004101360200200741286a410028008bc04a360000200741206a4100290083c04a370000200741186a41002900fbbf4a370000200741106a41002900f3bf4a370000200741086a41002900ebbf4a370000200741002900e3bf4a370000200041086a42ac808080c0053702000c020b2000200736020420004101360200200741286a41002800dfbf4a360000200741206a41002900d7bf4a370000200741186a41002900cfbf4a370000200741106a41002900c7bf4a370000200741086a41002900bfbf4a370000200741002900b7bf4a370000200041086a42ac808080c0053702000c010b2009280200200a41186c6a28020821072003200a200210c006024020032802004101470d0020002003290204370204200041013602002000410c6a2003410c6a2802003602000c010b20032802042105200041003602002000200520076a3602040b200341106a24000f0b1036000b100020002802003502004101200110450b890301087f02400240024002400240200041086a2802002201450d00410020014102746b2102417f210320002802002204210503402002450d01200341016a2103200241046a210220052802002106200541046a21052006450d000b4100200641004741016a41017122056b2003460d002001200520036a2207490d012001200641004741016a4101716b20036b220541ffffffff03712005470d0220054102742208417f4c0d02200521034104210102402008450d002008102d2201450d042008410276220320054f0d00200341017422082005200820054b1b220841ffffffff03712008470d05200841027422084100480d050240024020030d002008102d21010c010b200120034102742008103121010b2001450d04200841027621030b2001200420074102746a4104200641004741016a41017141027420026a6b10e80621020240200041046a280200450d002000280200102f0b20002002360200200041086a2005360200200041046a20033602000b0f0b20072001104b000b103d000b1036000b1038000bc60403077f017e097f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742206417f4c0d000240024020060d0041042108200721090c010b200610332208450d02200641027621090b024020050d004200210a0c040b2004417f6a220b20044b210c2002280200210d2003417f6a220e20034b0d022001280200210f20082007417f6a22064102746a2110410021024200210a03404100211102402003200e20026b22124d0d00410021112012200e4b0d00200f20124102746a28020021110b410021120240200c0d002004200b20026b22134d0d002013200b4b0d00200d20134102746a28020021120b200720064d0d052010200a2011ad7c2012ad7c220a3e02002010417c6a21102006417f6a2106200a422088210a200241016a22022005490d000c040b0b103d000b1036000b20082007417f6a22064102746a2111410021104200210a0340410021020240200c0d00410021022004200b20106b22124d0d00410021022012200b4b0d00200d20124102746a28020021020b200720064d0d022011200a2002ad7c220a3e02002011417c6a21112006417f6a2106200a422088210a201041016a22102005490d000b0b024020072005417f736a220620074f0d00200020073602082000200936020420002008360200200820064102746a200a3e02000240200141046a280200450d002001280200102f0b0f0b419cc3ca0020062007103b000b419cc3ca0020062007103b000bc604030e7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742205417f4c0d0002400240024020050d0041042107200621080c010b200510332207450d01200541027621080b2004450d022001280200210902400240024020030d0020092004417f6a22054102746a210320072006417f6a22024102746a210a0340200420054d0d0302402003280200450d00200620024d0d03200a41003602000b2003417c6a2103200a417c6a210a2002417f6a21022005417f6a2205417f470d000c060b0b200641027420076a417c6a210b200341027420022802006a417c6a210c4100210d2006210e03402004200d417f736a220520044f0d020240200920054102746a220f2802002210450d0042002111417f2105200b2102200c210a024003402006200e20056a22124d0d012002200a3502002010ad7e20117c20023502007c22113e0200201142208821110240200320056a0d002006200d20036a417f736a220220064f0d05200720024102746a20113e02000c030b2002417c6a2102200a417c6a210a200f280200211020032005417f6a22056a22122003490d000b41c4c2ca0020122003103b000b41c4c2ca0020122006103b000b200b417c6a210b200e417f6a210e200d41016a220d2004460d050c000b0b419cc3ca0020022006103b000b41c4c2ca0020052004103b000b1036000b103d000b2000200636020820002008360204200020073602000240200141046a280200450d002001280200102f0b0bca0302097f017e230041106b2201240002400240024002400240024002402000280200220228020041016a41004c0d002000280204220328020041016a41004c0d012000280208220441086a28020022054101200028020c22062802006b22076a220820054f0d02200720002802142802006b22052000280210220741086a28020022006a220920054f0d03024002402002290308220a42ffffffff0f560d0041002100200a200428020020084102746a3502007e2003290308422086200728020020094102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020062802006b22024d0d0620032802000d07200428020020024102746a350200210a200341003602002003200a20032903087c370308410121000b200141106a240020000f0b41c6c4ca004118200141086a41e0c4ca0041f0c4ca00103e000b41c6c4ca004118200141086a41e0c4ca0041f0c4ca00103e000b41c4c2ca0020082005103b000b41c4c2ca0020092000103b000b41c3c5ca004110200141086a41d4c5ca0041e4c5ca00103e000b41c4c2ca0020022000103b000b41c3c5ca004110200141086a41d4c5ca0041e4c5ca00103e000b9e0301087f200028020822024102742103410021042000280200220521000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410121072004417f73200641004741016a4101716a21080c010b41002107410020046b21080b200128020822094102742103410021042001280200220121000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410021032004417f73200641004741016a4101716a21000c010b410020046b2100410121030b024020070d00410020034101736b0f0b4101210402400240024020030d0020022008490d0120092000490d02417f200220086b2203200920006b22064720032006491b22040d0020062003200320064b1b2107200120004102746a2103200520084102746a2100417f210103400240200141016a22012007490d0041000f0b2003280200210420002802002106200341046a2103200041046a2100417f200620044720062004491b2204450d000b0b20040f0b20082002104b000b20002009104b000bbc0101067f0240024002402001280208220241ffffffff03712002470d0020024102742203417f4c0d00200128020021040240024020030d002002410274210541042101200221060c010b2003102d2201450d02200241027421052003410276220620024f0d00200341017622062002200620024b1b220641027422074100480d0320012003200710312201450d020b20012004200510e80621032000200236020820002006360204200020033602000f0b103d000b1036000b1038000ba505010b7f024002400240024002400240024002402001280204220220012802002203490d0020012d000841ff01710d00200128000c210441002105024002404100200220036b2206200620024b1b220741016a220120074f0d00200441086a2106410021084100210741002101410021054104210903402006280200220a2002417f736a220b200a4f0d07200320024f210a200220032002496b21022004280200200b4102746a280200210b024020012005470d002001417f41004100417f4100200220036b2205200520024b1b220541016a220c200c2005491b200a1b20022003491b220541016a220c200c2005491b6a22052001490d0320082005200820054b1b220541ffffffff03712005470d03200541027422054100480d030240024020010d002005102d21090c010b200920072005103121090b2009450d09200541027621050b200920076a200b360200200841026a2108200741046a2107200141016a21012002200349200a72450d000c060b0b0240024020010d00410421090c010b200141ffffffff03712001470d01200141027422014100480d012001102d2209450d07200141027621050b200220034d0d022002417f732101200441086a210a2009210703402001200a280200220b6a220820014f0d082007200428020020084102746a280200360200200141016a2101200741046a210720032002417f6a2202490d000b200641016a21010c030b1038000b4104210941002101410021050c020b4100210120022003470d0141012101200921070b200441086a28020022022003417f736a220320024f0d042007200428020020034102746a2802003602000b2000200136020820002005360204200020093602000f0b41c4c2ca00200b200a103b000b1036000b41c4c2ca002008200b103b000b41c4c2ca0020032002103b000b7301027f230041106b2203240002404110102d22040d001036000b200420013e020c200420014220883e0208200420023e0204200420024220883e020020034284808080c00037020420032004360200200310ca06200041086a200328020836020020002003290300370200200341106a24000b1c00200128021841ffcbca00410f2001411c6a28020028020c1100000bb00301047f230041c0006b22022400200028020021034101210002402001280218418ca4c000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11070042e4aec285979ba58811520d012002200036020c2002413436021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c20024198a4c0003602282002200241106a36023820042005200241286a103c0d020c010b2002200036020c2002410836021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c20024198a4c0003602282002200241106a36023820042005200241286a103c0d010b200328020c2100200241106a41146a4101360200200241106a410c6a410136020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241a8a4c0003602282002200241106a36023820002001200241286a103c21000b200241c0006a240020000b21002000417f6a41ff01712002ad4220862001ad842004ad4220862003ad8410000b1c00200128021841ffcbca00410f2001411c6a28020028020c1100000b1c00200128021841ffcbca00410f2001411c6a28020028020c1100000ba70601037f230041d0006b22042400200420033a000f024002400240024020022802082205417f6a220620054f0d00200620054d0d010b4118102d2202450d012004421837023420042002360230200441306a4100411810d80620042004280238220241186a3602382002200428023022056a41184192ddca00411810d906200420042902343702342004200536023041ecd1ca004134200441306a41ccd1ca0041a0d2ca00103e000b200141086a2802002105200228020020064103746a220628020021020240024020062d0006450d0020052002460d010b02400240200520024d0d00200141086a2005417f6a2202360200200128020020026a2d00002205417c6a220241014b0d01024020020e020300030b4118102d2202450d03200241106a41002900a2dd4a370000200241086a410029009add4a37000020024100290092dd4a37000020044298808080800337022420042002360220200441c4006a410136020020044201370234200441c0d7ca003602302004413136024c2004200441c8006a3602402004200441206a360248200441106a200441306a103a02402004280224450d002004280220102f0b200041013a0000200041046a20042903103702002000410c6a200441106a41086a2802003602000c040b412b102d2202450d02200041013a0000200241276a41002800fcd64a360000200241206a41002900f5d64a370000200241186a41002900edd64a370000200241106a41002900e5d64a370000200241086a41002900ddd64a370000200241002900d5d64a370000200041086a42ab808080b005370200200041046a20023602000c030b02400240200341ff017122024104460d0020052002470d010b200041003a0000200020053a00010c030b200420053a0048200441c4006a4102360200200441206a410c6a41373602002004420237023420044180d7ca00360230200441373602242004200441206a3602402004200441c8006a36022820042004410f6a360220200441106a200441306a103a2000410c6a200441186a280200360200200041046a2004290310370200200041013a00000c020b20004180083b01000c010b1036000b200441d0006a24000b7d01017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d01200341017422012002200120024b1b22014100480d010240024020030d002001102d21020c010b200028020020032001103121020b2002450d0220002002360200200041046a20013602000b0f0b1038000b1036000bea0101017f230041e0006b22042400200420013602082004200336020c024020012003470d0020002002200110e8061a200441e0006a24000f0b200441286a41146a4109360200200441346a410a360200200441106a41146a41033602002004200441086a36024020042004410c6a360244200441c8006a41146a410036020020044203370214200441b4e0ca003602102004410a36022c200441c8e1ca003602582004420137024c20044188e1ca003602482004200441286a3602202004200441c8006a3602382004200441c4006a3602302004200441c0006a360228200441106a41c8e1ca001043000bef0502047f017e230041d0006b2203240002400240024002400240200241086a2802002204417f6a220520044f0d00200520044d0d010b4118102d2202450d01200241106a41002900a2dd4a370000200241086a410029009add4a37000020024100290092dd4a37000020034298808080800337021420032002360210200341cc006a41013602002003420137023c200341c0d7ca00360238200341313602342003200341306a3602482003200341106a360230200341206a200341386a103a200041086a200341206a41086a280200360200200020032903203702002003280214450d032003280210102f0c030b0240024002402002280200220620054103746a2d000522054104460d00200341386a20012002200510d706024020032d00384101470d002000200329023c370200200041086a200341c4006a2802003602000c060b200241086a2802002204450d01200228020021060b200241086a2004417f6a2202360200200620024103746a290200220742808080808080c0ff0083428080808080808001520d010b4118102d2202450d01200241106a41002900a2dd4a370000200241086a410029009add4a37000020024100290092dd4a37000020034298808080800337021420032002360210200341cc006a41013602002003420137023c200341c0d7ca00360238200341313602342003200341306a3602482003200341106a360230200341206a200341386a103a200041086a200341206a41086a280200360200200020032903203702002003280214450d032003280210102f0c030b200141086a28020021022003200737030820022007a7470d01200041003602000c020b1036000b200341cc006a41023602002003412c6a41013602002003420237023c200341c4d5ca0036023820034101360224200320023602302003200341206a3602482003200341086a3602282003200341306a360220200341106a200341386a103a200041086a200341106a41086a280200360200200020032903103702000b200341d0006a24000be30302037f017e230041c0006b22042400200441286a20012002200310d7060240024002400240024020042d00284101460d0002400240200141086a2802002202200128020c4f0d0002402002200141046a280200470d00200241016a22052002490d06200241017422062005200620054b1b22054100480d060240024020020d002005102d21020c010b200128020020022005103121020b2002450d0520012002360200200141046a2005360200200141086a28020021020b200128020020026a20033a0000200141086a2201200128020041016a3602000c010b2004413c6a220341013602002004420137022c200441fcdeca003602282004410136021420042001410c6a3602102004200441106a360238200441186a200441286a103a20042802182201450d002004200429021c37020420042001360200200341013602002004420137022c200441c0d7ca00360228200441313602142004200441106a36023820042004360210200441186a200441286a103a20042802182101200429021c210702402004280204450d002004280200102f0b20010d020b200041003602000c040b2000200429022c370200200041086a200441346a2802003602000c030b20002007370204200020013602000c020b1036000b1038000b200441c0006a24000ba80301057f230041c0006b2203240020032002360200024002402001280204220420024b0d002001280208417c6a21052001410c6a280200410374210102400340024020010d00200320043602042003412c6a4102360200200341306a410c6a41013602002003420337021c200341dcdfca00360218200341013602342003200341306a3602282003200341046a36023820032003360230200341086a200341186a103a2000410c6a200341106a280200360200200041046a2003290308370200200041013a00000c040b2004200541046a2802006a22062004490d01200141786a2101200541086a2105200420024b21072006210420070d0020062104200620024d0d000b20052d00002104200041003a0000200020043a00010c020b02404120102d2204450d00200041013a0000200441186a41002900d4df4a370000200441106a41002900ccdf4a370000200441086a41002900c4df4a370000200441002900bcdf4a370000200041086a42a08080808004370200200041046a20043602000c020b1036000b200041003a00002000200128020020026a2d00003a00010b200341c0006a24000bbd0201037f230041106b220224000240024020002d00004104470d002002200128021841b8d4ca0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b20022001280218419dd4ca0041082001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41a8d4ca001061210120022d0008210020022802042203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d004101210020042802184196a5c00041012004411c6a28020028020c1100000d010b2001280200220028021841e4d3ca0041012000411c6a28020028020c11000021000b200120003a00080b200241106a2400200041ff01714100470b860602037f017e230041d0006b22052400200520023602082005200336020c024002400240417f41012002411f71742002411f4b1b20034b0d00200541386a200141186a2203200141286a410010d70620052d00384101470d012000200529023c370200200041086a200541c4006a2802003602000c020b200541cc006a41023602002005411c6a41013602002005420337023c2005419cd3ca00360238200541013602142005200541106a36024820052005410c6a3602182005200541086a360210200541206a200541386a103a200041086a200541206a41086a280200360200200020052903203702000c010b20012802002102200541003602200240024020022802080d00200541cc006a41013602002005420237023c20054190dbca00360238200541013602342005200541306a3602482005200541206a360230200541106a200541386a103a200528021022020d010b02400240024002400240200141206a2802002202200141246a22062802004f0d00024020022001411c6a280200470d00200241016a22062002490d05200241017422072006200720064b1b22064100480d050240024020020d002006102d21020c010b200328020020022006103121020b2002450d04200120023602182001411c6a2006360200200141206a28020021020b200128021820026a20043a0000200141206a2202200228020041016a3602000c010b200541cc006a220241013602002005420137023c200541fcdeca0036023820054101360234200520063602302005200541306a360248200541106a200541386a103a20052802102201450d002005200529021437022420052001360220200241013602002005420137023c200541c0d7ca00360238200541313602342005200541306a3602482005200541206a360230200541106a200541386a103a200528021021022005290214210802402005280224450d002005280220102f0b20020d010b200041003602000c040b20002008370204200020023602000c030b1036000b1038000b20002005290214370204200020023602000b200541d0006a24000bb00301017f230041d0006b22052400200520023602082005200336020c02400240024002400240417f41012002411f71742002411f4b1b20034b0d002001280200210220054100360234024020022802080d00200541cc006a41013602002005420237023c20054190dbca00360238200541013602142005200541106a3602482005200541346a360210200541206a200541386a103a200528022022020d020b200541386a200141186a2202200141286a2203200410d70620052d00384101460d02200541386a20022003410010d70620052d00384101460d03200041003602000c040b200541cc006a41023602002005412c6a41013602002005420337023c2005419cd3ca00360238200541013602242005200541206a36024820052005410c6a3602282005200541086a360220200541106a200541386a103a200041086a200541106a41086a280200360200200020052903103702000c030b20002005290224370204200020023602000c020b2000200529023c370200200041086a200541c4006a2802003602000c010b2000200529023c370200200041086a200541c4006a2802003602000b200541d0006a24000ba60402047f017e230041c0006b22032400200341286a200141186a2204200141286a2205200210d70602400240024020032d00284101460d00200341286a20042005200210d70620032d00284101470d012000200329022c370200200041086a200341346a2802003602000c020b2000200329022c370200200041086a200341346a2802003602000c010b02400240024002400240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d05200241017422062005200620054b1b22054100480d050240024020020d002005102d21020c010b200428020020022005103121020b2002450d04200120023602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c010b2003413c6a220141013602002003420137022c200341fcdeca0036022820034101360214200320053602102003200341106a360238200341186a200341286a103a20032802182202450d002003200329021c37020420032002360200200141013602002003420137022c200341c0d7ca00360228200341313602142003200341106a36023820032003360210200341186a200341286a103a20032802182101200329021c210702402003280204450d002003280200102f0b20010d010b200041003602000c030b20002007370204200020013602000c020b1036000b1038000b200341c0006a24000ba60402057f017e230041c0006b22032400200341286a200141186a2204200141286a2205200210d70602400240024020032d00284101460d00200341286a20042005200210d70620032d00284101470d012000200329022c370200200041086a200341346a2802003602000c020b2000200329022c370200200041086a200341346a2802003602000c010b02400240024002400240200141206a2802002205200141246a22062802004f0d00024020052001411c6a280200470d00200541016a22062005490d05200541017422072006200720064b1b22064100480d050240024020050d002006102d21040c010b200428020020052006103121040b2004450d04200120043602182001411c6a2006360200200141206a28020021050b200128021820056a20023a0000200141206a2201200128020041016a3602000c010b2003413c6a220141013602002003420137022c200341fcdeca0036022820034101360214200320063602102003200341106a360238200341186a200341286a103a20032802182202450d002003200329021c37020420032002360200200141013602002003420137022c200341c0d7ca00360228200341313602142003200341106a36023820032003360210200341186a200341286a103a20032802182101200329021c210802402003280204450d002003280200102f0b20010d010b200041003602000c030b20002008370204200020013602000c020b1036000b1038000b200341c0006a24000b17000240200041046a280200450d002000280200102f0b0b0c002000280200200110ab060b1500200028020022002802002000280208200110640b1000200120002802002000280208104c0bfb0101027f230041106b220224002002200128021841a4dfca0041052001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41acdfca0010611a20022d00082101024020022802042203450d00200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d004101210120002802184196a5c00041012000411c6a28020028020c1100000d010b2002280200220128021841e4d3ca0041012001411c6a28020028020c11000021010b200220013a00080b200241106a2400200141ff01714100470b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b3601017f02402002450d00200021030340200320012d00003a0000200341016a2103200141016a21012002417f6a22020d000b0b20000b7101017f0240024020012000490d002002450d01200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000c020b0b2002450d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030b5701017e02400240200341c000710d002003450d012001410020036b413f71ad8820022003413f71ad220486842102200120048621010c010b20012003413f71ad862102420021010b20002001370300200020023703080b5701017e02400240200341c000710d002003450d0120012003413f71ad2204882002410020036b413f71ad86842101200220048821020c010b20022003413f71ad882101420021020b20002001370300200020023703080b7501027e200020034220882205200142208822067e200320027e7c200420017e7c200342ffffffff0f832203200142ffffffff0f8322017e2204422088200320067e7c22034220887c200342ffffffff0f83200520017e7c22034220887c37030820002003422086200442ffffffff0f83843703000b3e01017f230041106b2205240020052001200220032004410010f006200529030021012000200541086a29030037030820002001370300200541106a24000b4c01017f230041206b22052400200542003703182005420037031020052001200220032004200541106a10f006200529031021012000200529031837030820002001370300200541206a24000be20502037f067e230041306b2206240002400240024002400240024002400240024002402002500d002003500d012004500d02200479a7200279a76b2207413f4b0d0341ff0020076b2108200741016a21070c080b02402004500d0020050d040c060b024002402005450d0020034200510d0620054200370308200520012003823703000c010b20034200510d050b200120038021010c060b2004500d030240024002402001500d0020047b4201510d01200479a7200279a76b2207413e4b0d0241ff0020076b2108200741016a21070c090b02402005450d0020054200370300200520022004823703080b200220048021010c070b02402005450d002005200137030020052004427f7c2002833703080b200220047a423f838821010c060b2005450d040c020b024020037b4201510d0041bf7f200379a7200279a76b22076b2108200741c1006a21070c060b02402005450d002005420037030820052003427f7c2001833703000b20034201510d06200641206a2001200220037aa710ec06200641286a2903002102200629032021010c060b2005450d020b2005200137030020052002370308420021010c020b00000b420021010b420021020c010b200620012002200841ff007110eb06200641106a20012002200741ff007110ec06200641086a2903002102200641106a41086a2903002109200629030021012006290310210a0240024020070d004200210b4200210c0c010b4200210c4200210d03402009420186200a423f8884220b200b427f8520047c200a4201862002423f8884220a427f85220b20037c200b54ad7c423f87220b2004837d200a200b200383220e54ad7d2109200a200e7d210a420020024201862001423f8884842102200d2001420186842101200b420183220b210d2007417f6a22070d000b0b02402005450d002005200a370300200520093703080b200c20024201862001423f8884842102200b20014201868421010b2000200137030020002002370308200641306a24000b0bcce20a0300418080c0000ba1e20a6361706163697479206f766572666c6f770000002400100017000000f0020000050000007372632f6c6962616c6c6f632f7261775f7665632e727300cb0010004600000058010000130000003c00000004000000040000003d0000003e0000003f0000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f72003c000000000000000100000040000000b8001000130000003b020000050000007372632f6c6962616c6c6f632f666d742e72732f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f666d742f6d6f642e727301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000202020202020202020202020202020202020202020202020202020202020303030303030303030303030303030304040404040000000000000000000000000000340210002000000054021000120000003c000000000000000100000041000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e646578206973203030303130323033303430353036303730383039313031313132313331343135313631373138313932303231323232333234323532363237323832393330333133323333333433353336333733383339343034313432343334343435343634373438343935303531353235333534353535363537353835393630363136323633363436353636363736383639373037313732373337343735373637373738373938303831383238333834383538363837383838393930393139323933393439353936393739383939000068031000060000006e031000220000005003100018000000b30a0000050000007372632f6c6962636f72652f736c6963652f6d6f642e7273696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820b003100016000000c60310000d0000005003100018000000b90a000005000000736c69636520696e64657820737461727473206174202062757420656e6473206174205b2e2e2e5dba0410000b000000ca11100016000000f904100001000000a4041000160000009208000009000000a81110000e000000b611100004000000ba11100010000000f904100001000000a404100016000000960800000500000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c756500a404100016000000a70800000e000000ba0410000b000000c504100026000000eb04100008000000f304100006000000f904100001000000a404100016000000a9080000050000007372632f6c6962636f72652f7374722f6d6f642e72736279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f6620606000003a051000020000002405100016000000460400002400000024051000160000003c040000110000007372632f6c6962636f72652f666d742f6d6f642e72732e2e3078040f151b190312171100000e160000000000000000000000000000000000000000000000000000000006130000000000000000000000000000000000000002070a00080c1d1c181a00000000000000000000000000000000000005010000000000000000000000000000000000000010000000000b00090014000d00000000000000000000000000000000000000000000000000000000000f12000000000000000000000000001f0000000000000000000000000000004946661d0000000000000000000000008a3e000000000000000000000000004b530000000000000000000000006723420000000000000000000000003d0000000000230000000000000000007500002d000000000000000000000000824e3c0000000000000000000000006300000025005a000000000000008136000003000000000000000000002f000000000000000010000000000013000800000000000000000000000000430072008900000000000000000000070000007d05183f003787094064000021000000000000000000000000000a0000410000000000000000000000000c0030005c00000019777100604735442e0000743911652c515e7f500000003431000000530000000000003a00000000381a00885f2b6b695d4f5d84802a68143b0017000000000000000000000000005500005700000083000000000000000059000000000000266e1b1600000000006d4a1c000000000000000000002400007c0052007b06150000000048000000007e2876276c2900225b0e610d567062048520780200007a1e7901540033000000867358004d456f0b6a0000326c4c0000898a00008a8a8a3e0000000000000000000000280c10001a000000380000000f000000280c10001a000000390000001000000000000000000000000000000001000000000000000d000000000000001c000000000000004000000000000000b600000000000000bf00000000000000f803000000000000f007000000000000ff070000000000000010000000000000001e0000000000000038000000000000003f000000000000807f0000000000000080000000000000c0ff01000000000080ff030000000000008007000000000000007f000000000001208000000000000000a3000000000000fc7f030000000000000006000000000000ff070000000000008009000000000000000e0000000080007e0e00000000642000200000000040fe0f2000000000010000300000000000000040000000005c00004000000000000000600000000000845c8000000000000000c000000000000000e00000000000000000010000000000f00c01000000443060000c000000c13d60000c0000001e2080000c0000001e20c0000c000000fe21fe000c00000000000000200000000000000060000000440800006000000000000000f000000060000000000200007ffffff9db07000000000080f8070000000000e0bc0f00000000000020210000030000003c3b0000e70f0000003c00000000c09f9f3d00000000c0fbef3e000000000000c03f00000000000000f000000000000000fc0000100000f8feff0000ffff0000ffff0000ffffffffffff000000f8ffff0000010000000000c0ff01000000ffffffff0100000000000000030000000000008003000000000040a30300000000000000080000000c0000000c000400000000f80f00000000000000180000001c0000001c00000000c301001e000000000000001f0001008000c01f1f000700000080ef1f00ffffffffff1f20008639020000002300020000000030400000000000007e66000000fcfffffc6d000000000000007f00000000000028bf000000000000f0cf00000000030000a0020000f7fffd2110030300000000007806000000000080ff06000000000000c007000000000000f207000000008701040e0600000000000010081000000000001007000000000000140f0000000000f017000000000000f21fdfe0fffeffffff1f00000000000000200000000000f80f20070000000000c833000000000000b03f000000000080f73f04000000000000401e2080000c000040000000000080d340020000000000005003000000000000580000000000e0fd66fe0700000000f879030000000000c07f000000000000fe7f000000000000ff7f00000000000000807f0000000000008030000000ffff03806ef000000000008702000000000000900000407fe51ff89f000000000000f9a5000000000000f8a70000000000803cb00000000000007eb40000000000007fbf0000feffffffffbf11000000000000c00000000000009dc102000000000000d000000000a0c307f8ffffffffffff7ff8fffffffffffffffbbe2100000c0000fc00000000000000ff02000000000000ff000002000000ffff0000f8fffbffffff00000000ffffffffffffffffffffffff7372632f6c6962636f72652f756e69636f64652f6d6f642e727300010305050606030706080809110a1c0b190c140d120e0d0f0410031212130916011705180219031a071c021d011f1620032b042c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff09ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f0040d1145496465808184b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596972f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab351e1580e003190801042f043404070301070607110a500f1207550802041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a061f414c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b030740c80d61a0c0580ff0580b605240c9bc60ad23010848d033709815c1480b80880c73035040a06380846080c06740b1e035a0459098083181c0a16094808808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d0088111000200000001a000000280000000006010103010402080809020a050b02100111041205131114021502170219041c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f906fa020c273b3e4e4f8f9e9e9f060709363d3e56f3d0d104141836375657bd35cecfe01287898e9e040d0e11122931343a4546494a4e4f64655a5cb6b71b1ca8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d00c72a3a4cbcc6e6f5e227b0503042d036504012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a81261f808128082a808617094e041e0f430e19070a0647092709750b3f412a063b050a0651060105100305808b602048080a80a65e22450b0a060d1339070a362c041080c03c64530c0180a0451b4808531d398107460a1d03474937030e080a0639070a81361980c7320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140041c97f80882f3a50d811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a0d035d033d391d0d2c040907020e06809a83d60a0d030b05740c59070c140c0438080a0628081e527703310380a60c14040305030d06856a7372632f6c6962636f72652f756e69636f64652f7072696e7461626c652e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f662060426f72726f774572726f72426f72726f774d75744572726f72000000c8b0120000000000b92112000200000070616e69636b65642061742041121000010000004212100003000000c8b0120000000000401210000100000040121000010000003a27272c2066616c73657472756520202020207b202c20207b0a00003c0000000c000000040000004200000043000000440000002c0a00003c0000000400000004000000450000004600000047000000207d7d28280a2c0a5d5b00003c000000040000000400000048000000490000004a0000003c00000000000000010000004b0000004c0000004d0000003c00000000000000010000004e0000004f0000004d0000003c00000000000000010000004e0000004f0000004d00000054696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b556e657870656374656454696d65706f696e7457726f6e6754696d65706f696e744e6f54696d65706f696e7453656e646572496e5369676e61746f726965735369676e61746f726965734f75744f664f72646572546f6f4d616e795369676e61746f72696573546f6f4665775369676e61746f726965734e6f417070726f76616c734e6565646564416c7265616479417070726f766564626174636861735f73756261735f6d756c7469617070726f76655f61735f6d756c746963616e63656c5f61735f6d756c746900000000f814100010000000000000000815100002000000000000000000000018151000020000000000000000000000281510000e00000000000000c8b0120000000000000000000000000038151000010000000000000000000000401510000b0000000000000080e811000200000000000000000000004c1510000200000000000000000000005c15100010000000000000006c15100003000000000000000000000084151000020000000000000000000000941510001000000000000000a4151000040000000000000000000000c4151000020000000000000000000000d415100011000000000000006c151000030000000000000000000000e815100002000000000000004261746368496e7465727275707465648472120003000000f2a512000d000000031810005600000059181000130000004261746368436f6d706c657465640000d0171000330000004e65774d756c7469736967005e17100052000000b0171000200000004d756c7469736967417070726f76616cc26d120009000000e416100016000000c26d1200090000000817100056000000ba1610002a0000004d756c74697369674578656375746564c26d120009000000e416100016000000c26d120009000000fa1610000e0000006f1610004b000000ba1610002a0000004d756c746973696743616e63656c6c6564000000f81510004c000000441610002b0000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e20466972737420706172616d20697320746865206163636f756e7420746861742069732063616e63656c6c696e672c20746869726420697320746865206d756c7469736967206163636f756e742e2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c20746869726420697320746865206d756c7469736967206163636f756e742e54696d65706f696e743c426c6f636b4e756d6265723e4469737061746368526573756c742041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e20466972737420706172616d20697320746865206163636f756e7420746861742069732041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c207365636f6e6420697320746865206d756c7469736967206163636f756e742e204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e4e6f7773657443757272656e74456c656374656443757272656e744572615374617274536c6f745374616b655374616b65727300b018100048000000bb0100002d0000002f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f6f70732f61726974682e72730000000000000000617474656d707420746f20646976696465206279207a65726f0000003c0000000800000004000000500000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e7273756e636c6573303071202f2028712f246d617829203c202832202a20246d6178292e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b2071656400002c19100052000000880000002d0000002c191000520000008f0000002d0000002c191000520000009a000000210000004661696c656420746f20636f6e7665727466696e616c6e756d00000000000000be1310000500000000000000101b1000010000000000000000000000281b1000120000000000000000000000c31310000600000000000000b81b1000020000000000000000000000e81b1000070000000000000000000000c91310000800000000000000201c1000040000000000000000000000801c1000290000000000000000000000d11310001000000000000000c81d1000040000000000000000000000281e1000200000000000000000000000e11310000f00000000000000281f1000040000000000000000000000881f1000160000000000000000000000402c10000500000000000000452c100017000000002a100020000000c8b0120000000000202a10003b000000c8b01200000000005b2a10001f000000c8b01200000000007a2a10003c000000c8b01200000000002a7f12000b000000b62a100029000000857f12000d000000927f12000c000000c8b0120000000000df2a100056000000352b10004d000000822b100056000000d82b1000540000002c2c100014000000000000001f8212000500000000000000e60812000300000000000000fb8512000400000000000000500b120017000000c829100038000000c8b01200000000007881120034000000c8b01200000000002a7f12000b000000e90a120025000000927f12000c00000000000000dd0812000900000000000000e608120003000000000000007d2310001100000000000000e03c120011000000000000005a2710000f00000000000000692710002100000000000000fb8512000400000000000000500b120017000000b9231000560000000f2410003f000000c8b01200000000008a2710002d000000c8b01200000000004e24100054000000a224100058000000fa2410000e000000c8b01200000000007881120034000000c8b0120000000000c0201000560000001621100051000000672110001c00000008251000570000005f25100055000000b425100036000000b727100023000000c8b0120000000000da271000480000002228100047000000c8b01200000000006928100057000000c0281000560000001629100038000000c8b01200000000002a7f12000b0000004e2910001500000038221000340000006c22100050000000bc2210005200000063291000490000000e2310003000000038261000360000006e2610003f000000857f12000d000000ac2910001c000000ad2610004c000000f9261000240000001d2710003d000000927f12000c00000000000000dd0812000900000000000000e608120003000000000000007d2310001100000000000000e03c120011000000000000005a2710000f00000000000000692710002100000000000000b023100009000000000000001472120008000000b9231000560000000f2410003f000000c8b01200000000004e24100054000000a224100058000000fa2410000e000000c8b01200000000007881120034000000c8b0120000000000c0201000560000001621100051000000672110001c00000008251000570000005f25100055000000b425100036000000fa21100034000000c8b0120000000000ea2510004e000000c8b01200000000002a7f12000b0000002e2210000a00000038221000340000006c22100050000000bc221000520000000e2310003000000038261000360000006e2610003f000000857f12000d000000ad2610004c000000f9261000240000001d2710003d000000927f12000c00000000000000dd0812000900000000000000e608120003000000000000007d2310001100000000000000e03c120011000000000000008e2310000900000000000000972310001900000000000000b02310000900000000000000147212000800000038201000560000008e20100032000000c8b01200000000007881120034000000c8b0120000000000c0201000560000001621100051000000672110001c0000008321100058000000db2110001f000000fa21100034000000c8b01200000000002a7f12000b0000002e2210000a00000038221000340000006c22100050000000bc221000520000000e23100030000000857f12000d0000003e23100022000000602310001d000000927f12000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20604f285329602e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e6f746865725f7369676e61746f7269657374696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e63616c6c5f6861736820526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604d756c74697369674465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604d756c74697369674465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604d756c74697369674465706f73697442617365202b207468726573686f6c64202a204d756c74697369674465706f736974466163746f72602e6d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e2049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e2053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e2053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c206578656375746520756e74696c20746865206669727374206f6e65206661696c7320616e64207468656e2073746f702e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e202d205468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e20546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c542061732054726169743e3a3a43616c6c3e00000000b42c1000090000000205020000000000138212000c00000000000000147212000800000000000000bd2c10003400000000000000c8b01200f42c10000000000000000000042d10000100000000000000000000004d756c7469736967734d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000003c0000000000000001000000510000000c2d1000250000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e557067726164696e67206163636f756e742062616c616e6365732e2e2e4672656542616c616e6365526573657276656442616c616e63654163636f756e744e6f6e6365000000006f1810000300000000000000a02d1000010000000000000000000000b82d10000900000000000000000000003a2f100003000000000000003d2f100012000000002e100016000000c8b0120000000000162e1000560000006c2e100036000000c8b0120000000000a22e100051000000f32e100011000000c8b0120000000000042f10003600000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e6e6f77436f6d706163743c543a3a4d6f6d656e743e00000000006c181000030000000000000000000000297812000900000000000000000000000000000000000000000000000000000000000000c8b0120000301000000000000000000010301000010000000000000001000000000000005e91120009000000000000000000000000ee11000400000000000000000000000000000000000000000000000000000000000000c8b01200183010000000000000000000283010000100000000000000010000003c0000000000000001000000520000005d301000240000003c000000000000000100000051000000303010002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000bc3010000d00000000000000297812000900000000000000c8b01200cc3010000000000000000000dc30100004000000000000004d696e696d756d506572696f640000003c000000000000000100000053000000fc3010005a000000563110005a000000b031100059000000093210001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e6d6f646c70792f7574696c697375626154696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b54696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b730000000000aae611000d0000000000000004341000010000000000000000000000af1310000f000000000000000c3410000100000000000000000000009e1310001100000000000000143410000100000000000000000000008d13100011000000000000001c3410000100000000000000000000007b1310001200000000000000243410000100000000000000000000006613100015000000000000002c34100001000000000000000000000053131000130000000000000034341000010000000000000000000000843a100008000000000000003c341000010000000000000000000000886c1200080000000000000044341000010000000000000000000000481310000b000000000000004c3410000100000000000000000000003a1310000e00000000000000543410000100000000000000000000002713100013000000000000005c3410000100000000000000ed3610001d000000c13610002c00000099361000280000006e3610002b000000423610002c000000fe35100044000000ba351000440000008235100038000000363510004c000000ee34100048000000a23410004c000000643410003e00000020412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c6420697320746f6f206c6f7720287a65726f292e4765747320616e64206465636f6465732074696d657374616d7020696e686572656e7420646174610000540000001000000004000000550000005437100045000000cc0000001f0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f74696d657374616d702f7372632f6c69622e7273496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473214e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f72215468657265206973206f6e6c79206f6e6520666174616c206572726f723b207165640000003c0000000800000004000000560000005821120046000000670200000100000054696d657374616d7020746f6f2066617220696e2066757475726520746f20616363657074416d6f756e744c6f774e6f7456657374696e6776657374766573745f6f746865727665737465645f7472616e7366657200000000000000ec3810000e000000000000004c261200020000000000000000000000fc3810000200000000000000000000000c39100010000000000000005ce811000100000000000000000000001c391000010000000000000056657374696e675570646174656400006f39100056000000c53910004600000056657374696e67436f6d706c65746564243910004b00000020416e206163636f756e742028676976656e2920686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d65644e6f74466f756e64546f6f4d616e795375624163636f756e74736164645f7265676973747261727365745f6964656e746974797365745f73756273636c6561725f6964656e74697479726571756573745f6a756467656d656e7463616e63656c5f726571756573747365745f6665657365745f6163636f756e745f69647365745f6669656c647370726f766964655f6a756467656d656e746b696c6c5f6964656e7469747953757065724f6600000000643c10000b000000000000005ce81100010000000000000000000000703c1000010000000000000000000000783c10000f000000000000004c261200020000000000000000000000883c1000010000000000000000000000903c10000e000000000000004c261200020000000000000000000000a03c1000010000000000000000000000a83c10001200000000000000bc3c1000020000000000000000000000cc3c1000010000000000000000000000d43c10001400000000000000bc3c1000020000000000000000000000e83c1000010000000000000000000000413a10000e00000000000000bc3c1000020000000000000000000000f03c1000010000000000000000000000f83c10000e00000000000000083d1000010000000000000000000000103d100001000000000000004964656e7469747953657400143e10003c0000004964656e74697479436c656172656400e03d1000340000004964656e746974794b696c6c65640000ae3d1000320000004a756467656d656e745265717565737465640000c26d1200090000002f3d10000e000000863d1000280000004a756467656d656e74556e726571756573746564633d1000230000003d3d100026000000526567697374726172416464656400002f3d10000e000000183d100017000000204120726567697374726172207761732061646465642e526567697374726172496e6465782041206a756467656d656e742077617320676976656e2062792061207265676973747261722e2041206a756467656d656e74207265717565737420776173207265747261637465642e2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e2041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e2041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e456e636f756e7465726564206572726f7220696e206d6967726174696f6e206f66205374616b696e673a3a4c6564676572206d61702e546865206e756d626572206f662072656d6f766564206b65792f76616c75652069733a00000000000000743810000400000000000000c8b01200000000000000000000000000303f10000d0000000000000000000000783810000a0000000000000054cf1100010000000000000000000000983f1000100000000000000000000000823810000f0000000000000018401000020000000000000000000000484010000e000000000000007f4310002f000000c8b0120000000000ae43100058000000bd4210001a000000c8b0120000000000d742100035000000c8b01200000000002a7f12000b000000357f12000a000000284310001e0000004643100039000000857f12000d000000927f12000c000000394210002f000000c8b01200000000007881120034000000c8b01200000000006842100055000000bd4210001a000000c8b0120000000000d742100035000000c8b01200000000002a7f12000b000000357f12000a0000000c4310001c000000284310001e0000004643100039000000857f12000d000000927f12000c00000000000000ffd711000600000000000000203f12002300000000000000a477100008000000000000001042100029000000b84010001b000000c8b01200000000007881120034000000c8b0120000000000d3401000450000001841100040000000584110003d000000c8b01200000000009541100018000000c8b01200000000002a7f12000b000000ad41100046000000f34110001d000000927f12000c00000020437265617465206120766573746564207472616e736665722e20202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d20437265617465732061206e65772073746f7261676520656e7472792c206275742069732070726f7465637465642062792061206d696e696d756d207472616e7366657209202020616d6f756e74206e656564656420746f20737563636565642e56657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e6465722074686973206d6f64756c652e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e202d20557020746f206f6e65206163636f756e74206c6f6f6b75702e202d204f6e652062616c616e63652d6c6f636b206f7065726174696f6e2e202d204f6e652073746f7261676520726561642028636f64656320604f283129602920616e6420757020746f206f6e652072656d6f76616c2e20556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c000000000000ade21000070000000101000000000000138212000c00000000000000104210002900000000000000000000000000000000000000c8b01200604410000000000000000000704410000100000000000000000000003c000000000000000100000051000000784410003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e000000000000e84410001100000000000000845712000c00000000000000c8b01200fc44100000000000000000000c45100001000000000000004d696e5665737465645472616e736665720000003c000000000000000100000057000000144510004700000020546865206d696e696d756d20616d6f756e7420746f206265207472616e7366657272656420746f206372656174652061206e65772076657374696e67207363686564756c652e00000000009e3a10000d0000000000000068f31100010000000000000000000000404710000d0000000000000000000000ab3a10000c00000000000000a8471000010000000000000000000000c0471000120000000000000000000000b73a100008000000000000005048100001000000000000000000000068481000100000000000000000000000bf3a10000e00000000000000c8b01200000000000000000000000000e84810000f0000000000000000000000cd3a100011000000000000006049100002000000000000000000000090491000170000000000000000000000de3a10000e00000000000000484a1000010000000000000000000000604a1000110000000000000000000000ec3a10000700000000000000e84a1000020000000000000000000000184b10000c0000000000000000000000f33a10000e00000000000000784b1000020000000000000000000000a84b10000c0000000000000000000000013b10000a00000000000000084c1000020000000000000000000000384c10000c00000000000000000000000b3b10001100000000000000984c1000030000000000000000000000e04c10001300000000000000000000001c3b10000d0000000000000054cf1100010000000000000000000000784d10001300000000000000175c10001f000000c8b0120000000000365c100047000000c8b01200000000007d5c10002b000000c8b0120000000000a85c100026000000c8b01200000000002a7f12000b000000ce5c100039000000af7d110027000000857f12000d000000927f12000c00000000000000075c100004000000000000000b5c10000c0000006a5a10004b000000c8b0120000000000b55a1000560000000b5b100015000000c8b0120000000000f6571000590000004f5810000a000000c8b0120000000000205b100024000000c8b0120000000000445b100023000000c8b01200000000002a7f12000b000000675b100057000000c559100022000000be5b100049000000857f12000d000000927f12000c000000000000004d5a10000400000000000000515a1000190000009d58100024000000c8b0120000000000c158100056000000175910004c000000c8b0120000000000f6571000590000004f5810000a000000c8b01200000000006359100027000000c8b01200000000002a7f12000b0000008a5910003b000000c559100022000000e759100050000000375a100016000000927f12000c0000006c5710004e000000c8b0120000000000ba5710003c000000c8b0120000000000f6571000590000004f5810000a000000c8b01200000000005958100027000000c8b01200000000002a7f12000b00000013501000120000002550100021000000805810001d000000857f12000d000000927f12000c000000000000005c52100009000000000000006552100017000000000000006557100007000000000000008147120015000000b155100026000000c8b0120000000000d7551000560000002d56100007000000c8b0120000000000ad5410004e000000fb54100015000000c8b012000000000034561000480000007c56100056000000c8b0120000000000d25610000d000000df561000290000000857100004000000c8b01200000000000c5710002a000000c8b01200000000002a7f12000b000000d75110000e0000002550100021000000365710002f000000857f12000d000000927f12000c000000000000005c52100009000000000000002f3d10000e000000535410001b000000c8b01200000000006e5410003f000000c8b0120000000000ad5410004e000000fb54100015000000c8b01200000000001055100052000000c8b0120000000000625510002c000000c8b01200000000002a7f12000b000000d75110000e00000025501000210000008e55100023000000857f12000d000000927f12000c000000000000001f82120005000000000000006552100017000000000000005054100003000000000000008147120015000000f353100047000000c8b01200000000009250100056000000be52100029000000c8b0120000000000e75210003e0000003a54100016000000c8b01200000000002a7f12000b000000695310000a000000735310001f000000927f12000c000000000000001f8212000500000000000000655210001700000000000000108212000300000000000000138212000c000000a653100030000000c8b01200000000009250100056000000be52100029000000c8b0120000000000e75210003e000000d65310001d000000c8b01200000000002a7f12000b000000695310000a000000735310001f000000927f12000c000000000000001f8212000500000000000000655210001700000000000000925310000600000000000000985310000e000000935210002b000000c8b01200000000009250100056000000be52100029000000c8b0120000000000e75210003e0000002553100044000000c8b01200000000002a7f12000b000000695310000a000000735310001f000000927f12000c000000000000005c5210000900000000000000655210001700000000000000ffd711000600000000000000203f120023000000000000000e46110009000000000000007c52100017000000635010002f000000c8b01200000000009250100056000000e85010002d000000c8b01200000000001551100049000000794f100056000000cf4f10001e0000005e51100053000000c8b0120000000000b151100026000000c8b01200000000002a7f12000b000000d75110000e000000e55110002200000007521000260000002d5210002f000000857f12000d000000927f12000c000000104e100051000000c8b0120000000000614e100059000000ba4e1000520000000c4f100021000000c8b01200000000002d4f10004c000000c8b0120000000000794f100056000000cf4f10001e000000c8b0120000000000ed4f100026000000c8b01200000000002a7f12000b00000013501000120000002550100021000000465010001d000000857f12000d000000927f12000c0000002052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e2050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e7265675f696e646578436f6d706163743c526567697374726172496e6465783e4a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d20604f285229602e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e6669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e20536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e6665652043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e20526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a72656769737472617273287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e6d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e7420616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d206053202b2032602073746f726167652064656c6574696f6e732e2053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e746974792773207375622d6163636f756e74732e202d20604f285329602077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f73742074776f2062616c616e6365206f7065726174696f6e732e202d204174206d6f7374204f2832202a2053202b2031292073746f72616765206d75746174696f6e733b20636f64656320636f6d706c657869747920604f2831202a2053202b2053202a20312960293b2020206f6e652073746f726167652d6578697374732e737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b2052296020776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605265676973747261724f726967696e60206f722060526f6f74602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e0000000000685e10000a0000000101000000000000138212000c00000000000000725e10001a00000000000000000000000000000000000000c8b012008c5e100000000000000000009c5e100001000000000000000000000000000000293b1000070000000101000000000000138212000c00000000000000a45e10001400000000000000000000000000000000000000c8b01200b85e10000000000000000000c85e100002000000000000000000000000000000d85e1000060000000101000000000000138212000c0000000000000008be10002100000000000000000000000000000000000000c8b01200e05e10000000000000000000f05e100003000000000000000100000000000000085f10000a0000000000000000000000125f10003600000000000000000000000000000000000000000000000000000000000000c8b01200485f10000000000000000000585f10000400000000000000010000004964656e746974794f66526567697374726174696f6e3c42616c616e63654f663c543e3e3c000000000000000100000051000000606110004800000028543a3a4163636f756e7449642c2044617461293c000000000000000100000051000000b4601000580000000c61100054000000537562734f6600003c0000000000000001000000580000003f6010002e000000c8b01200000000006d60100047000000526567697374726172735665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e3c000000000000000100000059000000785f100053000000cb5f10002a000000c8b0120000000000f55f10004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e7573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e003c0000000c000000040000005a0000000062100043000000f80000000d0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f76657374696e672f7372632f6c69622e7273657865632e7072656661625f6d6f64756c652e696e697469616c2063616e27742062652067726561746572207468616e20657865632e7072656661625f6d6f64756c652e6d6178696d756d3b0a09090909090974687573204d656d6f72793a3a6e6577206d757374206e6f74206661696c3b0a09090909090971656400000000006a3810000a0000000000000014631000010000000000000000000000669a110017000000000000001c631000010000000000000000000000613810000900000000000000246310000100000000000000c5631000220000006e631000570000002c6310004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e00000000008c3a1000120000000000000038651000010000000000000000000000843a10000800000000000000406510000100000000000000000000007c3a1000080000000000000048651000010000000000000000000000723a10000a0000000000000050651000010000000000000000000000683a10000a00000000000000586510000100000000000000000000005e3a10000a00000000000000606510000100000000000000000000004f3a10000f0000000000000068651000010000000000000000000000413a10000e0000000000000070651000010000000000000000000000313a1000100000000000000078651000010000000000000000000000253a10000c0000000000000080651000010000000000000000000000183a10000d00000000000000886510000100000000000000000000000b3a10000d0000000000000090651000010000000000000071661000180000005c6610001500000047661000150000003a6610000d0000002a6610001000000017661000130000000566100012000000f465100011000000e165100013000000cb65100016000000b465100017000000986510001c00000020546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e436865636b426c6f636b4761734c696d6974496e76616c6964436f6e74726163744f726967696e496e76616c6964546f6d6273746f6e65496e76616c696444657374696e6174696f6e436f6e7472616374496e76616c6964536f75726365436f6e7472616374496e76616c6964537572636861726765436c61696d496e76616c69645363686564756c6556657273696f6e7570646174655f7363686564756c657075745f636f6465696e7374616e7469617465636c61696d5f737572636861726765436f6e7472616374496e666f4f66476173507269636500000000000000049c110008000000000000000c9c1100030000000000000000000000c4681000010000000000000000000000cc6810000c0000000000000080e81100020000000000000000000000d8681000010000000000000000000000e068100007000000000000005c1f1100020000000000000000000000e86810000600000000000000000000001869100008000000000000002069100005000000000000000000000048691000090000000000000000000000906910000a00000000000000b0ec11000100000000000000000000009c691000010000000000000000000000a46910000f00000000000000ec1f1100010000000000000000000000b4691000010000000000000000000000bc6910000a000000000000005c1f1100020000000000000000000000c8691000020000000000000000000000d86910001100000000000000ec691000020000000000000000000000fc69100001000000000000007b6d10005a000000496e7374616e746961746564446d10003700000045766963746564007b6c100039000000c8b01200000000003e6b100009000000c8b0120000000000b46c100043000000f76c10004d000000526573746f726564c26d120009000000c26d12000900000065ed110004000000902712000700000000ee1100040000000f6b10002f000000c8b01200000000003e6b100009000000c8b0120000000000476b10003d000000846b10003b000000bf6b10003a000000f96b1000460000003f6c10003c000000436f646553746f7265640000e16a10002e0000005363686564756c655570646174656400b16a100030000000446973706174636865640000466a10004e000000946a10001d000000436f6e7472616374457865637574696f6e000000c26d12000900000070a3110007000000046a10004200000020416e206576656e74206465706f73697465642075706f6e20657865637574696f6e206f66206120636f6e74726163742066726f6d20746865206163636f756e742e20412063616c6c2077617320646973706174636865642066726f6d2074686520676976656e206163636f756e742e2054686520626f6f6c207369676e616c73207768657468657220697420776173207375636365737366756c20657865637574696f6e206f72206e6f742e20547269676765726564207768656e207468652063757272656e74207363686564756c6520697320757064617465642e20436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e20526573746f726174696f6e20666f72206120636f6e747261637420686173206265656e20696e697469617465642e202320506172616d73202d2060646f6e6f72603a20604163636f756e744964603a204163636f756e74204944206f662074686520726573746f72696e6720636f6e7472616374202d206064657374603a20604163636f756e744964603a204163636f756e74204944206f662074686520726573746f72656420636f6e7472616374202d2060636f64655f68617368603a206048617368603a20436f64652068617368206f662074686520726573746f72656420636f6e7472616374202d206072656e745f616c6c6f77616e63653a206042616c616e6365603a2052656e7420616c6c6f77616e6365206f662074686520726573746f72656420636f6e7472616374202d206073756363657373603a2060626f6f6c603a20547275652069662074686520726573746f726174696f6e20776173207375636365737366756c20436f6e747261637420686173206265656e206576696374656420616e64206973206e6f7720696e20746f6d6273746f6e652073746174652e202d2060636f6e7472616374603a20604163636f756e744964603a20546865206163636f756e74204944206f6620746865206576696374656420636f6e74726163742e202d2060746f6d6273746f6e65603a2060626f6f6c603a205472756520696620746865206576696374656420636f6e7472616374206c65667420626568696e64206120746f6d6273746f6e652e20436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e205472616e736665722068617070656e6564206066726f6d6020746f2060746f60207769746820676976656e206076616c7565602061732070617274206f662061206063616c6c60206f722060696e7374616e7469617465602e0000003c000000040000000400000048000000490000005b0000003c000000000000000100000040000000086e10001c00000056617269616e74206973206e6576657220636f6e737472756374656473657269616c697a656420617267732073686f756c642062652070726f7669646564206279207468652072756e74696d653b0a090909636f72726563746c792073657269616c697a656420646174612073686f756c6420626520646573657269616c697a61626c653b0a09090971656410a8120053000000ba0000001000000064656661756c743a000000001a6710000f00000000000000886f1000010000000000000000000000a06f1000030000000000000000000000296710000800000000000000b86f1000020000000000000000000000e86f1000020000000000000000000000fb8512000400000000000000f86f100004000000000000000000000058701000070000000000000000000000316710000b0000000000000090701000040000000000000000000000f07010000a00000000000000000000003c6710000f000000000000004071100002000000000000000000000070711000050000000000000000000000a47710000800000000000000ac77100008000000347710002d000000c8b0120000000000617710004300000000000000e67410000900000000000000ef7410000c0000000000000077fa1000040000000000000070a3110007000000a876100057000000ff76100035000000000000001dad11000400000000000000203f120023000000000000007c4712000500000000000000814712001500000000000000e67410000900000000000000ef7410000c000000000000000f751000040000000000000070a31100070000001375100042000000c8b0120000000000557510004a0000009f7510002c000000cb751000460000001176100052000000637610004500000000000000dd7410000900000000000000814712001500000000000000e67410000900000000000000ef7410000c00000000000000fb7410000900000000000000047510000b000000000000000f751000040000000000000070a3110007000000bc7210006f000000c8b01200000000002b73100026000000c8b01200000000005173100050000000a173100041000000e27310005b0000003d74100057000000947410002a000000be7410001f000000000000001dad11000400000000000000138212000c00000000000000b27210000a00000000000000c815120014000000987110005c000000f471100045000000c8b0120000000000397210004e000000877210002b00000020416c6c6f777320626c6f636b2070726f64756365727320746f20636c61696d206120736d616c6c2072657761726420666f72206576696374696e67206120636f6e74726163742e204966206120626c6f636b2070726f6475636572206661696c7320746f20646f20736f2c206120726567756c61722075736572732077696c6c20626520616c6c6f77656420746f20636c61696d20746865207265776172642e20496620636f6e7472616374206973206e6f742065766963746564206173206120726573756c74206f6620746869732063616c6c2c206e6f20616374696f6e73206172652074616b656e20616e64207468652073656e646572206973206e6f7420656c696769626c6520666f7220746865207265776172642e6175785f73656e64657220496e7374616e7469617465732061206e657720636f6e74726163742066726f6d207468652060636f646568617368602067656e65726174656420627920607075745f636f6465602c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e20496e7374616e74696174696f6e20697320657865637574656420617320666f6c6c6f77733a202d205468652064657374696e6174696f6e206164647265737320697320636f6d7075746564206261736564206f6e207468652073656e64657220616e642068617368206f662074686520636f64652e202d2054686520736d6172742d636f6e7472616374206163636f756e7420697320637265617465642061742074686520636f6d707574656420616464726573732e202d20546865206063746f725f636f64656020697320657865637574656420696e2074686520636f6e74657874206f6620746865206e65776c792d63726561746564206163636f756e742e204275666665722072657475726e656420202061667465722074686520657865637574696f6e206973207361766564206173207468652060636f646560206f6620746865206163636f756e742e205468617420636f64652077696c6c20626520696e766f6b656420202075706f6e20616e792063616c6c2072656365697665642062792074686973206163636f756e742e202d2054686520636f6e747261637420697320696e697469616c697a65642e656e646f776d656e746761735f6c696d6974436f6d706163743c4761733e636f64655f68617368436f6465486173683c543e64617461204d616b657320612063616c6c20746f20616e206163636f756e742c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e202a20496620746865206163636f756e74206973206120736d6172742d636f6e7472616374206163636f756e742c20746865206173736f63696174656420636f64652077696c6c20626520657865637574656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e202a20496620746865206163636f756e74206973206120726567756c6172206163636f756e742c20616e792076616c75652077696c6c206265207472616e736665727265642e202a204966206e6f206163636f756e742065786973747320616e64207468652063616c6c2076616c7565206973206e6f74206c657373207468616e20606578697374656e7469616c5f6465706f736974602c206120726567756c6172206163636f756e742077696c6c206265206372656174656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e2053746f7265732074686520676976656e2062696e617279205761736d20636f646520696e746f2074686520636861696e27732073746f7261676520616e642072657475726e73206974732060636f646568617368602e20596f752063616e20696e7374616e746961746520636f6e747261637473206f6e6c7920776974682073746f72656420636f64652e205570646174657320746865207363686564756c6520666f72206d65746572696e6720636f6e7472616374732e20546865207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652073746f726564207363686564756c652e7363686564756c655363686564756c6500000000b28b12000800000000000000000000001c7a10000300000000000000000000000000000000000000000000000000000000000000c8b01200907a10000000000000000000207a100001000000000000000100000000000000ba8b12000f0000000000000000000000ac7710000800000000000000000000000000000000000000000000000000000000000000c8b01200287a10000000000000000000387a100001000000000000000100000000000000407a10000c0000000101000000000000047510000b0000000000000070a311000700000000000000000000000000000000000000c8b012004c7a100000000000000000005c7a100001000000000000000000000000000000647a10000b0000000101000000000000047510000b000000000000006f7a10001600000000000000000000000000000000000000c8b01200b87a10000000000000000000887a100001000000000000000000000000000000c98b12000e0000000000000000000000a07112000300000000000000000000000000000000000000000000000000000000000000c8b01200907a10000000000000000000a07a1000010000000000000001000000000000004b6710000e0000000101000000000000138212000c00000000000000a87a10000f00000000000000000000000000000000000000c8b01200b87a10000000000000000000c87a10000100000000000000000000000000000059671000080000000000000000000000845712000c00000000000000000000000000000000000000000000000000000000000000c8b01200d07a10000000000000000000e07a1000010000000000000001000000476173001c7c1000200000003c00000000000000010000005c000000f77b1000250000005072697374696e65436f64653c00000000000000010000005d0000009e7b100059000000436f646553746f726167657761736d3a3a5072656661625761736d4d6f64756c65000000457b1000590000003c000000000000000100000052000000307b100015000000436f6e7472616374496e666f3c543e003c000000000000000100000051000000067b10002a0000003c00000000000000010000005e000000e87a10001e00000020546865207072696365206f66206f6e6520756e6974206f66206761732e2054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e20546865207375627472696520636f756e7465722e2041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420696e737472756d656e746564207761736d20636f64652c20726561647920666f7220657865637574696f6e2e2041206d617070696e672066726f6d20616e206f726967696e616c20636f6465206861736820746f20746865206f726967696e616c20636f64652c20756e746f756368656420627920696e737472756d656e746174696f6e2e2043757272656e7420636f7374207363686564756c6520666f7220636f6e7472616374732e20476173207370656e7420736f2066617220696e207468697320626c6f636b2e000000004c7f10001300000000000000f50812000e00000000000000c8b01200607f10000000000000000000707f1000040000000000000000000000907f10001000000000000000845712000c00000000000000c8b01200e87f10000000000000000000a07f1000010000000000000000000000a87f10001100000000000000847212000300000000000000c8b01200bc7f10000000000000000000cc7f1000020000000000000000000000dc7f10000b00000000000000845712000c00000000000000c8b01200e87f10000000000000000000f87f1000010000000000000000000000008010001100000000000000845712000c00000000000000c8b01200148010000000000000000000248010000700000000000000000000005c8010000f00000000000000845712000c00000000000000c8b012006c80100000000000000000007c80100002000000000000000000000024bc11001200000000000000845712000c00000000000000c8b01200a8801000000000000000000048bc110001000000000000000000000050bc11001200000000000000845712000c00000000000000c8b012008c801000000000000000000074bc11000100000000000000000000009c8010000b00000000000000845712000c00000000000000c8b01200a88010000000000000000000b8801000020000000000000000000000c88010000b000000000000001c7a10000300000000000000c8b01200f88010000000000000000000d4801000020000000000000000000000e480100012000000000000001c7a10000300000000000000c8b01200f8801000000000000000000008811000020000000000000000000000188110000800000000000000847212000300000000000000c8b0120020811000000000000000000030811000020000000000000000000000408110000c00000000000000847212000300000000000000c8b012004c81100000000000000000005c811000010000000000000000000000648110000d000000000000001c7a10000300000000000000c8b012007481100000000000000000008481100002000000000000005369676e6564436c61696d48616e6469636170003c00000000000000010000005f0000006f86100038000000c8b0120000000000a786100043000000ea8610001a000000546f6d6273746f6e654465706f7369743a8610003500000053746f7261676553697a654f66667365740000003c000000000000000100000060000000bc85100055000000118610002900000052656e7442797465466565003c0000000000000001000000610000006f8510004d00000052656e744465706f7369744f66667365740000003c000000000000000100000062000000f7831000410000003884100016000000c8b01200000000004e8410005a000000a884100056000000fe84100053000000518510001e000000537572636861726765526577617264003c000000000000000100000063000000a483100039000000dd8310001a0000003c000000000000000100000064000000436f6e7472616374466565003c0000000000000001000000650000004d831000500000009d8310000700000043616c6c4261736546656500f8821000470000003f8310000e000000496e7374616e74696174654261736546656500003c000000000000000100000066000000a28210004e000000f0821000080000004d617844657074683c000000000000000100000067000000488210004c000000948210000e0000004d617856616c756553697a653c000000000000000100000068000000fa8110004e000000426c6f636b4761734c696d69740000003c0000000000000001000000690000009481100049000000dd8110001d00000020546865206d6178696d756d20616d6f756e74206f6620676173207468617420636f756c6420626520657870656e6465642070657220626c6f636b2e204120726561736f6e61626c652064656661756c742076616c75652069732031305f3030305f3030302e20546865206d6178696d756d2073697a65206f6620612073746f726167652076616c756520696e2062797465732e204120726561736f6e61626c652064656661756c74206973203136204b69422e20546865206d6178696d756d206e657374696e67206c6576656c206f6620612063616c6c2f696e7374616e746961746520737461636b2e204120726561736f6e61626c652064656661756c742076616c7565206973203130302e20546865206261736520666565206368617267656420666f7220696e7374616e74696174696e67206120636f6e74726163742e204120726561736f6e61626c652064656661756c742076616c7565206973203137352e20546865206261736520666565206368617267656420666f722063616c6c696e6720696e746f206120636f6e74726163742e204120726561736f6e61626c652064656661756c742076616c7565206973203133352e205468652066656520726571756972656420746f20696e7374616e7469617465206120636f6e747261637420696e7374616e63652e204120726561736f6e61626c652064656661756c742076616c75652069732032312e205265776172642074686174206973207265636569766564206279207468652070617274792077686f736520746f75636820686173206c656420746f2072656d6f76616c206f66206120636f6e74726163742e2054686520616d6f756e74206f662066756e6473206120636f6e74726163742073686f756c64206465706f73697420696e206f7264657220746f206f66667365742074686520636f7374206f66206f6e6520627974652e204c6574277320737570706f736520746865206465706f73697420697320312c303030204255202862616c616e636520756e697473292f6279746520616e64207468652072656e7420697320312042552f627974652f6461792c207468656e206120636f6e7472616374207769746820312c3030302c3030302042552074686174207573657320312c303030206279746573206f662073746f7261676520776f756c6420706179206e6f2072656e742e20427574206966207468652062616c616e6365207265647563656420746f203530302c30303020425520616e64207468652073746f7261676520737461796564207468652073616d6520617420312c3030302c207468656e20697420776f756c6420706179203530302042552f6461792e205072696365206f6620612062797465206f662073746f7261676520706572206f6e6520626c6f636b20696e74657276616c2e2053686f756c642062652067726561746572207468616e20302e2053697a65206f66206120636f6e7472616374206174207468652074696d65206f6620696e7374616e74696174696f6e2e205468697320697320612073696d706c652077617920746f20656e73757265207468617420656d70747920636f6e747261637473206576656e7475616c6c7920676574732064656c657465642e20546865206d696e696d756d20616d6f756e7420726571756972656420746f2067656e6572617465206120746f6d6273746f6e652e204e756d626572206f6620626c6f636b2064656c617920616e2065787472696e73696320636c61696d20737572636861726765206861732e205768656e20636c61696d207375726368617267652069732063616c6c656420627920616e2065787472696e736963207468652072656e7420697320636865636b656420666f722063757272656e745f626c6f636b202d2064656c6179636f6465206973206e6f7420666f756e647072697374696e6520636f6465206973206e6f7420666f756e647468657265206973206e6f7420656e6f7567682067617320666f722073746f72696e672074686520636f6465000000000004671000160000000000000004881000010000000000000000000000ef66100015000000000000000c881000010000000000000000000000da661000150000000000000014881000010000000000000000000000c06610001a000000000000001c881000010000000000000000000000b06610001000000000000000248810000100000000000000000000009b66100015000000000000002c88100001000000000000003889100041000000e388100055000000ac881000370000007b881000310000006388100018000000348810002f00000020416e206f726967696e20547269654964207772697474656e20696e207468652063757272656e7420626c6f636b2e20546f6d6273746f6e657320646f6e2774206d617463682e2043616e6e6f7420726573746f726520746f206e6f6e6578697374696e67206f7220616c69766520636f6e74726163742e2043616e6e6f7420726573746f72652066726f6d206e6f6e6578697374696e67206f7220746f6d6273746f6e6520636f6e74726163742e20416e206f726967696e206d757374206265207369676e6564206f7220696e686572656e7420616e6420617578696c696172792073656e646572206f6e6c792070726f7669646564206f6e20696e686572656e742e2041206e6577207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652063757272656e74206f6e652e486561644f6644656c65676174696f6e7344656c65676174696f6e734e6f7441637469766557726f6e674f70656e4e6f744f70656e4e6f74457870697265644e6f744c6f636b65644e6f6e6557616974696e67507265696d616765496e76616c69645265666572656e64756d496e76616c6964507265696d6167654d697373696e67496d6d696e656e744561726c794e6f74496d6d696e656e744475706c6963617465507265696d6167654e6f7444656c65676174656457726f6e6750726f7879416c72656164795665746f65644e6f50726f706f73616c496e76616c6964486173684e6f7453696d706c654d616a6f7269747950726f706f73616c426c61636b6c6973746564416c726561647943616e63656c6564426164496e6465784e6f7450726f787956616c75654c6f777365636f6e6470726f78795f766f7465656d657267656e63795f63616e63656c65787465726e616c5f70726f706f736565787465726e616c5f70726f706f73655f6d616a6f7269747965787465726e616c5f70726f706f73655f64656661756c74666173745f747261636b7665746f5f65787465726e616c63616e63656c5f7265666572656e64756d63616e63656c5f71756575656461637469766174655f70726f7879636c6f73655f70726f7879646561637469766174655f70726f787964656c6567617465756e64656c6567617465636c6561725f7075626c69635f70726f706f73616c736e6f74655f707265696d6167656e6f74655f696d6d696e656e745f707265696d616765726561705f707265696d616765756e6c6f636b6f70656e5f70726f78795265666572656e64756d496e666f4f66566f74654f660000000030ec11000800000000000000d08e1000020000000000000000000000e08e1000010000000000000000000000e88e10000600000000000000f08e1000030000000000000000000000088f1000010000000000000000000000108f10000e00000000000000c8b01200000000000000000000000000208f1000010000000000000000000000288f10000700000000000000308f1000020000000000000000000000408f1000010000000000000000000000488f10000600000000000000508f1000010000000000000000000000588f1000010000000000000000000000608f10000900000000000000508f10000100000000000000000000006c8f1000010000000000000000000000748f10000900000000000000508f1000010000000000000000000000808f1000010000000000000000000000d4ec11000800000000000000888f1000020000000000000000000000988f1000010000000000000000000000a08f1000090000000000000080e81100020000000000000000000000ac8f1000010000000000000000000000b48f10000b000000000000005ce81100010000000000000000000000c08f1000010000000000000000000000c88f10000600000000000000d08f1000030000000000000000000000e88f1000010000000000000000000000f08f10000d000000000000000027110003000000000000000000000000901000010000000000000000000000089010000c000000000000000027110003000000000000000000000014901000010000000000000000000000cc8910000f000000000000001c9010000200000000000000000000002c901000010000000000000000000000ec8910000f000000000000001c901000020000000000000000000000349010000100000000000000000000003c9010000e000000000000004c9010000400000000000000000000006c9010000100000000000000000000007490100008000000000000005ce811000100000000000000000000007c9010000100000000000000d3931000090000009027120007000000dc931000300000005461626c65640000d3931000090000009027120007000000a42111000e0000009c9310003700000045787465726e616c5461626c65640000769310002600000053746172746564008c9110000f000000699310000d000000519310001800000050617373656400008c9110000f000000259310002c0000004e6f74506173736564000000f99210002c00000043616e63656c6c6564000000d8921000210000008c9110000f00000000ee110004000000bb9210001d00000044656c6567617465640000008392100038000000556e64656c65676174656400499210003a0000005665746f65640000c26d12000900000065ed1100040000003e9210000b0000001892100026000000507265696d6167654e6f746564000000e091100038000000507265696d616765557365649b9110004500000065ed1100040000008c9110000f00000049911000430000000691100043000000507265696d616765526561706564000065ed110004000000c26d1200090000009027120007000000c26d120009000000af90100057000000556e6c6f636b6564849010002b00000020416e206163636f756e7420686173206265656e20756e6c6f636b6564207375636365737366756c6c792e2041207265676973746572656420707265696d616765207761732072656d6f76656420616e6420746865206465706f73697420636f6c6c6563746564206279207468652072656170657220286c617374206974656d292e20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d61676520776173206d697373696e672e20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d6167652077617320696e76616c69642e5265666572656e64756d496e64657820412070726f706f73616c20707265696d616765207761732072656d6f76656420616e6420757365642028746865206465706f736974207761732072657475726e6564292e20412070726f706f73616c277320707265696d61676520776173206e6f7465642c20616e6420746865206465706f7369742074616b656e2e20416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e426c6f636b4e756d62657220416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e20416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e20412070726f706f73616c20686173206265656e20656e61637465642e2041207265666572656e64756d20686173206265656e2063616e63656c6c65642e20412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e20412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e2041207265666572656e64756d2068617320626567756e2e566f74655468726573686f6c6420416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e2041207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e50726f70496e6465782041206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e44697370617463685175657565507265696d61676573566f74657273466f725075626c696350726f70734465706f7369744f664e65787445787465726e616c0000000000ecea1100070000000000000040981000020000000000000000000000709810000e0000000000000000000000a78a10000600000000000000e0981000010000000000000000000000f89810000b0000000000000000000000f3ea1100040000000000000050991000020000000000000000000000809910000c0000000000000000000000ad8a10000a0000000000000050991000020000000000000000000000e09910000c0000000000000000000000b78a10001000000000000000409a1000010000000000000000000000589a10000a0000000000000000000000c78a10001000000000000000a89a1000010000000000000000000000c09a10000b0000000000000000000000d78a10001900000000000000a89a1000010000000000000000000000189b10000e0000000000000000000000f08a10001800000000000000a89a1000010000000000000000000000889b10000e0000000000000000000000088b10000a00000000000000f89b1000030000000000000000000000409c1000130000000000000000000000128b10000d00000000000000a89a1000010000000000000000000000d89c10000e00000000000000000000001f8b10001100000000000000489d1000010000000000000000000000609d1000090000000000000000000000308b10000d00000000000000a89d1000010000000000000000000000c09d10000900000000000000000000003d8b10000e00000000000000089e1000010000000000000000000000209e10000b00000000000000000000004b8b10000b00000000000000c8b01200000000000000000000000000789e1000090000000000000000000000568b10001000000000000000089e1000010000000000000000000000c09e10000d0000000000000000000000668b10000800000000000000289f1000020000000000000000000000589f10000f00000000000000000000006e8b10000a00000000000000c8b01200000000000000000000000000d09f10000d0000000000000000000000788b10001600000000000000c8b0120000000000000000000000000038a010000800000000000000000000008e8b10000d0000000000000078a0100001000000000000000000000090a010000d00000000000000000000009b8b1000160000000000000078a01000010000000000000000000000f8a010000c0000000000000000000000b18b10000d00000000000000a89a100001000000000000000000000058a110000f0000000000000000000000be8b10000600000000000000d0a11000010000000000000000000000e8a110000b0000000000000000000000c48b10000a00000000000000d0a1100001000000000000000000000040a210000d0000000000000000000000d2af10000d000000000000008113120007000000000000007c4712000500000000000000814712001500000053b6100028000000c8b01200000000007bb6100046000000c1b6100021000000c8b0120000000000e2b610003600000018b7100046000000c8b01200000000005eb7100012000000c8b01200000000002a7f12000b000000357f12000a00000070b7100020000000927f12000c0000000000000079131200080000000000000041b61000120000005ab510002e000000c8b012000000000088b5100041000000c9b5100045000000c8b01200000000000eb6100033000000c8b01200000000002a7f12000b000000357f12000a0000006247120010000000927f12000c000000000000001bac1000090000000000000024ac10001800000000000000f3ea11000400000000000000bc1f110004000000a6b410004d000000f3b410002f000000c8b0120000000000aea3100033000000c8b012000000000022b510003800000065b4100022000000c8b01200000000002a7f12000b000000357f12000a00000087b410001f000000927f12000c00000096b3100054000000eab310003d000000c8b0120000000000aea3100033000000c8b012000000000027b410003e00000065b4100022000000c8b01200000000002a7f12000b000000357f12000a00000087b410001f000000927f12000c000000000000001bac100009000000000000008c9110000f0000008cb210005400000045b210000c000000c8b0120000000000e0b210003f000000c8b01200000000001fb3100035000000c8b01200000000002a7f12000b00000054b3100042000000927f12000c00000000000000d2af10000d000000000000008113120007000000f9b110004c00000045b210000c000000c8b012000000000051b210003b000000c8b01200000000009fb0100036000000c8b01200000000002a7f12000b000000357f12000a0000004531110011000000927f12000c0000004fb1100056000000a5b1100018000000c8b0120000000000bdb110003c000000a2ac1000010000009fb0100036000000c8b0120000000000d5b010005300000028b1100027000000c8b01200000000002a7f12000b000000357f12000a0000004531110011000000927f12000c000000f1af10005200000043b0100021000000c8b012000000000064b010003b000000c8b01200000000009fb0100036000000c8b0120000000000d5b010005300000028b1100027000000c8b01200000000002a7f12000b000000357f12000a0000004531110011000000927f12000c00000000000000d2af10000d00000000000000811312000700000000000000dfaf10000d00000000000000f50812000e00000000000000ecaf10000500000000000000f50812000e00000064ad100054000000b8ad10005900000011ae10003b000000c8b01200000000004cae100035000000c8b012000000000081ae10003e000000bfae10005800000017af1000260000003daf10005500000092af10002f000000c8b0120000000000c1af100011000000c8b01200000000002a7f12000b000000977e1100100000004531110011000000650b110016000000927f12000c0000003cac10002f000000c8b01200000000006bac100037000000a2ac100001000000a3ac10004c000000c8b0120000000000efac100010000000c8b01200000000002a7f12000b000000ffac100012000000977e11001000000011ad10004200000053ad100011000000927f12000c000000000000001bac1000090000000000000024ac100018000000d0ab100015000000c8b01200000000009ca7100031000000c8b0120000000000e5ab100036000000c8b01200000000002a7f12000b000000357f12000a000000927f12000c00000000000000cbab100005000000000000008c9110000f00000071ab100028000000c8b01200000000009ca7100031000000c8b012000000000099ab100032000000c8b01200000000002a7f12000b0000004531110011000000927f12000c000000000000006cab10000500000000000000138212000c000000ceaa100041000000c8b01200000000000fab100025000000c8b0120000000000aea3100033000000c8b012000000000034ab100038000000c8b01200000000002a7f12000b000000650b110016000000927f12000c00000080aa100026000000c8b0120000000000a6aa100028000000c8b0120000000000aea3100033000000c8b01200000000002a7f12000b000000977e110010000000927f12000c000000b1a910004b000000c8b0120000000000fca9100022000000c8b01200000000001eaa100028000000c8b0120000000000aea3100033000000c8b012000000000046aa10003a000000c8b01200000000002a7f12000b000000977e110010000000927f12000c000000000000009ba910000200000000000000138212000c000000000000009da910000a00000000000000a7a910000a000000b5a810000f000000c8b0120000000000c4a810003f000000c8b0120000000000aea3100033000000c8b012000000000003a910003600000039a91000460000007fa9100009000000c8b012000000000088a9100013000000c8b01200000000002a7f12000b000000650b110016000000927f12000c000000cda7100011000000c8b0120000000000dea710004200000020a810004200000062a810003e000000c8b0120000000000aea3100033000000c8b0120000000000a0a8100015000000c8b01200000000002a7f12000b000000bc48120008000000927f12000c0000007fa710001d000000c8b01200000000009ca7100031000000c8b01200000000002a7f12000b000000357f12000a000000977e110010000000927f12000c000000000000006fa71000100000000000000070a311000700000078a6100058000000d0a6100049000000c8b0120000000000aea3100033000000c8b012000000000000a6100032000000c8b012000000000032a6100017000000c8b01200000000002a7f12000b00000019a71000420000005ba7100014000000927f12000c00000082a5100051000000d3a510002d000000c8b0120000000000aea3100033000000c8b012000000000000a6100032000000c8b012000000000032a6100017000000c8b01200000000002a7f12000b00000049a610002f000000927f12000c00000022a410003d000000c8b0120000000000aea3100033000000c8b01200000000005fa4100034000000c8b012000000000093a4100054000000e7a41000570000003ea510002c000000c8b01200000000006aa5100018000000c8b01200000000002a7f12000b000000977e110010000000927f12000c00000000000000ffd711000600000000000000138212000c00000085a3100029000000c8b0120000000000aea3100033000000c8b0120000000000e1a310002f000000c8b012000000000010a4100012000000c8b01200000000002a7f12000b000000357f12000a000000927f12000c000000a8a2100010000000c8b0120000000000b8a2100037000000c8b0120000000000efa2100019000000c8b012000000000008a310003b000000c8b012000000000043a3100042000000c8b01200000000002a7f12000b000000650b110016000000927f12000c000000204265636f6d6520612070726f78792e2054686973206d7573742062652063616c6c6564207072696f7220746f2061206c61746572206061637469766174655f70726f7879602e204f726967696e206d7573742062652061205369676e65642e202d2060746172676574603a20546865206163636f756e742077686f736520766f7465732077696c6c206c617465722062652070726f786965642e2060636c6f73655f70726f787960206d7573742062652063616c6c6564206265666f726520746865206163636f756e742063616e2062652064657374726f7965642e20556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e202d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e20456d6974732060556e6c6f636b6564602e2052656d6f766520616e20657870697265642070726f706f73616c20707265696d61676520616e6420636f6c6c65637420746865206465706f7369742e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f6620612070726f706f73616c2e20546869732077696c6c206f6e6c7920776f726b2061667465722060566f74696e67506572696f646020626c6f636b732066726f6d207468652074696d6520746861742074686520707265696d61676520776173206e6f7465642c2069662069742773207468652073616d65206163636f756e7420646f696e672069742e2049662069742773206120646966666572656e74206163636f756e742c207468656e206974276c6c206f6e6c7920776f726b20616e206164646974696f6e616c2060456e6163746d656e74506572696f6460206c617465722e20456d6974732060507265696d616765526561706564602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e2054686973207265717569726573207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652e204e6f206465706f736974206973206e65656465642e202d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e20456d6974732060507265696d6167654e6f746564602e202d20446570656e64656e74206f6e207468652073697a65206f662060656e636f6465645f70726f706f73616c602e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e205468697320646f65736e27742072657175697265207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652062757420646f657320726571756972652061206465706f7369742c2072657475726e6564206f6e636520656e61637465642e202d20446570656e64656e74206f6e207468652073697a65206f662060656e636f6465645f70726f706f73616c60206275742070726f7465637465642062792061202020207265717569726564206465706f7369742e656e636f6465645f70726f706f73616c20436c6561727320616c6c207075626c69632070726f706f73616c732e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e20556e64656c656761746520766f74652e204d7573742062652073656e742066726f6d20616e206163636f756e742074686174206861732063616c6c65642064656c65676174652070726576696f75736c792e2054686520746f6b656e732077696c6c20626520726564756365642066726f6d20616e20696e646566696e697465206c6f636b20746f20746865206d6178696d756d20706f737369626c65206163636f7264696e6720746f2074686520636f6e76696374696f6e206f6620746865207072696f722064656c65676174696f6e2e20456d6974732060556e64656c656761746564602e2044656c656761746520766f74652e2043757272656e6379206973206c6f636b656420696e646566696e6974656c7920666f72206173206c6f6e6720617320697427732064656c6567617465642e202d2060746f603a20546865206163636f756e7420746f206d616b6520612064656c6567617465206f66207468652073656e6465722e202d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c656761746564202020766f7465732e20456d697473206044656c656761746564602e746f636f6e76696374696f6e436f6e76696374696f6e2044656163746976617465207468652070726f78792c20627574206c65617665206f70656e20746f2074686973206163636f756e742e2043616c6c6564206279207468652073746173682e205468652070726f7879206d75737420616c7265616479206265206163746976652e204e4f54453a205573656420746f2062652063616c6c6564206072656d6f76655f70726f7879602e202d206070726f7879603a20546865206163636f756e7420746861742077696c6c2062652064656163746976617465642061732070726f78792e20436c656172207468652070726f78792e2043616c6c6564206279207468652070726f78792e204e4f54453a205573656420746f2062652063616c6c6564206072657369676e5f70726f7879602e205370656369667920612070726f7879207468617420697320616c7265616479206f70656e20746f2075732e2043616c6c6564206279207468652073746173682e204e4f54453a205573656420746f2062652063616c6c656420607365745f70726f7879602e202d206070726f7879603a20546865206163636f756e7420746861742077696c6c206265206163746976617465642061732070726f78792e70726f78792043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e202d20607768696368603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e77686963682052656d6f76652061207265666572656e64756d2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e7265665f696e646578436f6d706163743c5265666572656e64756d496e6465783e205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e20202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e20456d69747320605665746f6564602e202d2054776f20444220656e74726965732e202d20506572666f726d7320612062696e61727920736561726368206f6e20606578697374696e675f7665746f657273602077686963682073686f756c64206e6f7420202062652076657279206c617267652e205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c656420696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e6520627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e20546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f20202060456d657267656e6379566f74696e67506572696f646020696620746f6f206c6f772e202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e20456d697473206053746172746564602e70726f706f73616c5f68617368766f74696e675f706572696f6464656c6179205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e20556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6520546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e202d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e202d20446570656e6473206f6e2073697a65206f662073746f72616765207665632060566f74657273466f726020666f722074686973207265666572656e64756d2e20566f746520696e2061207265666572656e64756d206f6e20626568616c66206f6620612073746173682e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2070726f787920766f746520666f722e202d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e20566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e205369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e202d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e436f6d706163743c50726f70496e6465783e2050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e202d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e20456d697473206050726f706f736564602e202d2054776f204442206368616e6765732c206f6e6520444220656e7472792e00000000f48b12000f0000000000000000000000d39310000900000000000000000000000000000000000000000000000000000000000000c8b012004cbe1000000000000000000068bd1000010000000000000001000000000000002b9410000b000000000000000000000070bd10002700000000000000000000000000000000000000000000000000000000000000c8b0120098bd10000000000000000000a8bd10000100000000000000010000000000000019941000090000000101000000000000811312000700000000000000b0bd10003500000000000000000000000000000000000000c8b01200e8bd10000000000000000000f8bd10000200000000000000000000000000000036941000090000000101000000000000d3931000090000000000000008be10002100000000000000000000000000000000000000c8b012002cbe100000000000000000003cbe100001000000000000000000000000000000038c12000f00000000000000000000008c9110000f00000000000000000000000000000000000000000000000000000000000000c8b012004cbe1000000000000000000044be1000010000000000000001000000000000001b8c12000d00000000000000000000008c9110000f00000000000000000000000000000000000000000000000000000000000000c8b012004cbe100000000000000000005cbe100002000000000000000100000000000000ce8b10001000000001010000000000008c9110000f000000000000006cbe10002700000000000000000000000000000000000000c8b0120000c01000000000000000000094be1000010000000000000000000000000000000c9410000d00000000000000000000009cbe10002f00000000000000000000000000000000000000000000000000000000000000c8b01200ccbe10000000000000000000dcbe100001000000000000000100000000000000229410000900000001010000000000008c9110000f00000000000000e03c12001100000000000000000000000000000000000000c8b01200e4be10000000000000000000f4be100001000000000000000100000000000000de8b1000060000000101000000000000fcbe10001f00000000000000bc1f11000400000000000000000000000000000000000000c8b012001cbf100000000000000000002cbf100004000000000000000100000000000000540d1200050000000101000000000000138212000c000000000000004cbf10001800000000000000000000000000000000000000c8b0120064bf1000000000000000000074bf1000020000000000000000000000000000008a8910000b0000000101010000000000138212000c0000000000000084bf10001a00000000000000000000000000000000000000c8b01200a0bf10000000000000000000b0bf100001000000000000000100000000000000f99a1100050000000101000000000000138212000c00000000000000f50812000e00000000000000000000000000000000000000c8b01200b8bf10000000000000000000c8bf100002000000000000000000000000000000288c120015000000000000000000000000ee11000400000000000000000000000000000000000000000000000000000000000000c8b012008cc010000000000000000000d8bf1000020000000000000001000000000000003f9410000c0000000000000000000000e8bf10001800000000000000000000000000000000000000000000000000000000000000c8b0120000c01000000000000000000010c010000400000000000000000000000000000030c0100009000000010100000000000081131200070000000000000039c010002300000000000000000000000000000000000000c8b012005cc0100000000000000000006cc01000020000000000000000000000000000007cc010000d000000010100000000000081131200070000000000000000ee11000400000000000000000000000000000000000000c8b012008cc0100000000000000000009cc01000010000000000000001000000e4c710003d0000005665633c2850726f70496e6465782c20543a3a486173682c20543a3a4163636f756e744964293e003c0000000000000001000000590000009cc7100048000000285665633c75383e2c20543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d626572290000003c00000000000000010000006a0000000bc710005800000063c71000390000002842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e290000003c00000000000000010000006a000000eac61000210000009ec610004c0000003c00000000000000010000006b0000001ec610004900000067c61000370000005265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a486173683e00f1c510002d0000005665633c28543a3a426c6f636b4e756d6265722c20543a3a486173682c205265666572656e64756d496e646578293e003c000000000000000100000059000000a1c51000500000003c00000000000000010000005900000078c5100029000000285265666572656e64756d496e6465782c20543a3a4163636f756e74496429003c00000000000000010000005100000033c41000580000008bc4100053000000dec410005700000035c510004300000050726f787953746174653c543a3a4163636f756e7449643e3c000000000000000100000051000000c5c310004c00000011c410002200000028543a3a4163636f756e7449642c20436f6e76696374696f6e2900003c00000000000000010000006c00000075c31000500000003c000000000000000100000051000000cac210005700000021c31000540000006ac2100056000000c0c210000a00000028543a3a486173682c20566f74655468726573686f6c64293c0000000000000001000000510000007cc1100056000000d2c110005500000027c210002900000050c210001a000000426c61636b6c69737428543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e293c00000000000000010000006a000000eec010005400000042c110003a00000043616e63656c6c6174696f6e730000003c000000000000000100000051000000a4c010004a000000205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e2041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d6265722028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e20546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e20546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743a202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f72202d20605075626c696350726f70736020697320656d7074792e205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c69632070726f706f73616c2e204163636f756e747320666f7220776869636820746865726520617265206c6f636b7320696e20616374696f6e207768696368206d61792062652072656d6f76656420617420736f6d6520706f696e7420696e20746865206675747572652e205468652076616c75652069732074686520626c6f636b206e756d62657220617420776869636820746865206c6f636b206578706972657320616e64206d61792062652072656d6f7665642e2047657420746865206163636f756e742028616e64206c6f636b20706572696f64732920746f20776869636820616e6f74686572206163636f756e742069732064656c65676174696e6720766f74652e2057686f2069732061626c6520746f20766f746520666f722077686f6d2e2056616c7565206973207468652066756e642d686f6c64696e67206163636f756e742c206b65792069732074686520766f74652d7472616e73616374696f6e2d73656e64696e67206163636f756e742e204765742074686520766f746520696e206120676976656e207265666572656e64756d206f66206120706172746963756c617220766f7465722e2054686520726573756c74206973206d65616e696e6766756c206f6e6c792069662060766f746572735f666f726020696e636c756465732074686520766f746572207768656e2063616c6c6564207769746820746865207265666572656e64756d2028796f75276c6c20676574207468652064656661756c742060566f7465602076616c7565206f7468657277697365292e20496620796f7520646f6e27742077616e7420746f20636865636b2060766f746572735f666f72602c207468656e20796f752063616e20616c736f20636865636b20666f722073696d706c65206578697374656e636520776974682060566f74654f663a3a636f6e7461696e735f6b6579602066697273742e204765742074686520766f7465727320666f72207468652063757272656e742070726f706f73616c2e205175657565206f66207375636365737366756c207265666572656e646120746f20626520646973706174636865642e2053746f726564206f72646572656420627920626c6f636b206e756d6265722e20496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e20546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746f20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e20546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e2054686f73652077686f2068617665206c6f636b65642061206465706f7369742e204d6170206f662068617368657320746f207468652070726f706f73616c20707265696d6167652c20616c6f6e6720776974682077686f207265676973746572656420697420616e64207468656972206465706f7369742e2054686520626c6f636b206e756d6265722069732074686520626c6f636b20617420776869636820697420776173206465706f73697465642e20546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c277320686173682e20546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e00000000000000acc910000f00000000000000f50812000e00000000000000c8b01200bcc910000000000000000000ccc91000050000000000000000000000f4c910000c00000000000000f50812000e00000000000000c8b0120084ca1000000000000000000000ca100001000000000000000000000008ca10000c00000000000000f50812000e00000000000000c8b0120084ca1000000000000000000014ca10000100000000000000000000001cca10000e00000000000000845712000c00000000000000c8b012002cca100000000000000000003cca100001000000000000000000000044ca10001500000000000000f50812000e00000000000000c8b012005cca100000000000000000006cca100001000000000000000000000074ca10000d00000000000000f50812000e00000000000000c8b0120084ca1000000000000000000094ca10000100000000000000000000009cca10001300000000000000845712000c00000000000000c8b01200b0ca10000000000000000000c0ca10000100000000000000456e6163746d656e74506572696f64003c00000000000000010000006d00000059cc10005c000000c8b0120000000000b5cc10004c00000001cd10005a0000005bcd1000270000004c61756e6368506572696f6420cc100039000000566f74696e67506572696f64f2cb10002e0000004d696e696d756d4465706f73697400003c000000000000000100000057000000a5cb10004d000000456d657267656e6379566f74696e67506572696f640000003c00000000000000010000006e0000006acb10003b000000436f6f6c6f6666506572696f640000003c00000000000000010000006f00000012cb100058000000507265696d616765427974654465706f736974003c000000000000000100000065000000c8ca10004a0000002054686520616d6f756e74206f662062616c616e63652074686174206d757374206265206465706f7369746564207065722062797465206f6620707265696d6167652073746f7265642e20506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e20546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e20486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e20486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e20546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e2049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e73757265207468617420766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e0000000000009f8a1000080000000000000078d01000010000000000000000000000b1ea11000f0000000000000080d01000010000000000000000000000978a1000080000000000000088d010000100000000000000000000008f8a1000080000000000000090d01000010000000000000000000000808a10000f0000000000000098d01000010000000000000000000000c0ea11001100000000000000a0d010000100000000000000000000006d8a10001300000000000000a8d010000100000000000000000000005c8a10001100000000000000b0d01000010000000000000000000000518a10000b00000000000000b8d01000010000000000000000000000478a10000a00000000000000c0d010000100000000000000000000003a8a10000d00000000000000c8d0100001000000000000000000000005e611000c00000000000000d0d01000010000000000000000000000308a10000a00000000000000d8d01000010000000000000000000000248a10000c00000000000000e0d01000010000000000000000000000138a10001100000000000000e8d01000010000000000000000000000088a10000b00000000000000f0d01000010000000000000000000000038a10000500000000000000f8d01000010000000000000000000000fb891000080000000000000000d11000010000000000000000000000ec8910000f0000000000000008d11000010000000000000000000000db891000110000000000000010d11000010000000000000000000000cc8910000f0000000000000018d11000010000000000000000000000c18910000b0000000000000020d11000010000000000000000000000b8891000090000000000000028d11000010000000000000000000000ae8910000a0000000000000030d11000010000000000000000000000a7891000070000000000000038d110000100000000000000000000009e891000090000000000000040d1100001000000000000000000000095891000090000000000000048d1100001000000000000003fd410000e00000027d41000180000001bd410000c0000000dd410000e000000e7d3100026000000d1d3100016000000b6d310001b0000008bd310002b0000007ed310000d00000069d310001500000042d310002700000032d310001000000026d310000c00000018d310000e00000001d3100017000000f4d210000d000000ead210000a000000e1d2100009000000ced2100013000000acd21000220000009bd210001100000086d21000150000005dd210002900000021d210003c000000e2d110003f00000094d110004e00000050d110004400000020412070726f78792d64652d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206e6f74206163746976652e20412070726f78792d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206f70656e20746f20616e6f74686572206163636f756e742e20412070726f78792d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206e6f74206f70656e2e20546865206c6f636b206f6e20746865206163636f756e7420746f20626520756e6c6f636b656420686173206e6f742079657420657870697265642e2054686520746172676574206163636f756e7420646f6573206e6f7420686176652061206c6f636b2e204e6f2070726f706f73616c732077616974696e6720496e76616c696420707265696d61676520566f746520676976656e20666f7220696e76616c6964207265666572656e64756d20507265696d616765206e6f7420666f756e6420496d6d696e656e7420546f6f206561726c79204e6f7420696d6d696e656e7420507265696d61676520616c7265616479206e6f746564204e6f742064656c6567617465642057726f6e672070726f787920416c726561647920612070726f7879204964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365204e6f2065787465726e616c2070726f706f73616c20496e76616c69642068617368204e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792050726f706f73616c207374696c6c20626c61636b6c69737465642050726f706f73616c20616c7265616479206d6164652043616e6e6f742063616e63656c207468652073616d652070726f706f73616c20747769636520556e6b6e6f776e20696e646578204e6f7420612070726f78792050726f706f73616c20646f6573206e6f742065786973742056616c756520746f6f206c6f77000000000000008cd4100004000000000000000000000090d410000e000000000000000a000000e70000000000000000000000a0d410000c000000000000006e6f64657375627374726174652d6e6f64650000df6acb689907609b0200000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1501000000f78b278be53f454c02000000ed99c5acb25eedf502000000cbca25e39f14238701000000687ad44ad37f03c201000000bc9d89904f5b923f0100000068b66ba122c93fa70100000037c8bb1350a9a2a801000000ab3c0572291feb8b010000006772616e62616265696d6f6e617564690000000040787d010065cd1d00e1f505d85aae1ec0542205b0508f1f38e4750488467020d853e903603c5121d0bf760338323222a8591903402013236039cd02480ef423a82a8f0268f8d42470955c02b8dab525c05a3302d8c4962648bd1102e0b27727a855f601e8a05828e8fedf0180773929c0cacd01586d1a2af8f1be019053fb2a50d8b201d00edc2be0fca80138edbc2c48f2a001e06d9d2d80669a01c80d7e2e500f9501c0575e2f08b6900140323f30e0278d0148202031b0418a0108a3ff3120e8870120bedf32f0fb85013856c03398698401f0fda03478218301b8d87f35d8178201d8c26036183d8101b8223e37508d800188d21c38c8fc7f0168b5f93898877f01a829d139d8297f0120d6ab3ab8db7e0168ae803b389d7e0100ca9a3b68957e01000000000df31000060000000000000070000000000000000000000000000000000000000000000000000000000000007100000000000000000000000000000072000000000000000000000000000000730000000000000000000000000000007400000000000000000000000000000038e210000700000000000000750000000000000000000000000000000000000000000000000000000000000076000000000000000000000000000000770000000000000000000000000000007300000000000000000000000000000078000000000000000000000000000000aa8312000400000000000000790000000000000000000000000000000000000000000000000000000000000073000000000000000000000002000000000000000000000000000000000000007a000000000000000000000000000000730000000000000000000000000000005591120009000000000000007b000000000000000000000000000000000000000000000000000000000000007c000000000000000000000002000000000000000000000000000000000000007d00000000000000000000000000000073000000000000000000000000000000948312000a000000000000007e000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000020000000000000000000000000000000000000073000000000000000000000000000000800000000000000000000000000000009b6c120007000000000000008100000000000000000000000000000000000000000000000000000000000000820000000000000000000000000000008300000000000000000000000000000073000000000000000000000000000000730000000000000000000000000000006791120008000000000000008400000000000000000000000000000000000000000000000000000000000000850000000000000000000000000000008600000000000000000000000000000087000000000000000000000000000000880000000000000000000000000000003fe210001200000000000000890000000000000000000000000000000000000000000000000000000200000000000000000000000000000002000000000000000000000000000000000000008a00000000000000000000000000000073000000000000000000000000000000eb90120007000000000000008b000000000000000000000000000000000000000000000000000000000000008c0000000000000000000000000000008d0000000000000000000000000000008e0000000000000000000000000000008f0000000000000000000000000000001c8f12000700000000000000900000000000000000000000000000000000000000000000000000000000000091000000000000000000000000000000920000000000000000000000000000009300000000000000000000000000000094000000000000000000000000000000128c1200090000000000000095000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000097000000000000000000000000000000980000000000000000000000000000009900000000000000000000000000000051e2100007000000000000009a000000000000000000000000000000000000000000000000000000000000009b0000000000000000000000000000009c000000000000000000000000000000730000000000000000000000000000009d00000000000000000000000000000058e2100012000000000000009e000000000000000000000000000000000000000000000000000000000000009b0000000000000000000000000000009c000000000000000000000000000000730000000000000000000000000000009d0000000000000000000000000000006ae2100009000000000000009f00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000a1000000000000000000000000000000a2000000000000000000000000000000a300000000000000000000000000000073e210001300000000000000a400000000000000000000000000000000000000000000000000000000000000a5000000000000000000000000000000a6000000000000000000000000000000730000000000000000000000000000007300000000000000000000000000000086e210000f000000020000000000000000000000000000000000000000000000000000000000000000000000a700000000000000000000000200000000000000000000000000000000000000a8000000000000000000000000000000a900000000000000000000000000000095e210000700000000000000aa00000000000000000000000000000000000000000000000000000000000000ab000000000000000000000000000000ac00000000000000000000000000000073000000000000000000000000000000ad000000000000000000000000000000809112000800000000000000ae00000000000000000000000000000000000000000000000000000000000000af000000000000000000000000000000b0000000000000000000000000000000b1000000000000000000000000000000b20000000000000000000000000000009ce210000900000000000000b300000000000000000000000000000000000000000000000000000000000000b4000000000000000000000000000000b5000000000000000000000000000000b6000000000000000000000000000000b7000000000000000000000000000000a43111000400000000000000b800000000000000000000000000000000000000000000000000000000000000b9000000000000000000000000000000ba00000000000000000000000000000073000000000000000000000000000000bb000000000000000000000000000000d38d12000800000000000000bc00000000000000000000000000000000000000000000000000000000000000bd000000000000000000000000000000be00000000000000000000000000000073000000000000000000000000000000bf0000000000000000000000000000007e8312001200000002000000000000000000000000000000000000000000000000000000000000000000000073000000000000000000000002000000000000000000000000000000000000007300000000000000000000000000000073000000000000000000000000000000ed8d12000800000000000000c00000000000000000000000000000000000000000000000000000000000000073000000000000000000000000000000c100000000000000000000000000000073000000000000000000000000000000730000000000000000000000000000005c9f11001800000000000000c20000000000000000000000000000000000000000000000000000000000000073000000000000000000000002000000000000000000000000000000000000007300000000000000000000000000000073000000000000000000000000000000a5e210000800000000000000c300000000000000000000000000000000000000000000000000000000000000c4000000000000000000000000000000c500000000000000000000000000000073000000000000000000000000000000c6000000000000000000000000000000c61a11000700000000000000c700000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000c9000000000000000000000000000000ca000000000000000000000000000000cb000000000000000000000000000000670b12000800000000000000cc00000000000000000000000000000000000000000000000000000000000000cd000000000000000000000000000000ce00000000000000000000000000000073000000000000000000000000000000cf000000000000000000000000000000ade210000700000000000000d000000000000000000000000000000000000000000000000000000000000000d1000000000000000000000000000000d2000000000000000000000000000000d3000000000000000000000000000000d400000000000000000000005574696c6974795472616e73616374696f6e5061796d656e74436f756e63696c546563686e6963616c436f6d6d6974746565456c656374696f6e73546563686e6963616c4d656d6265727368697046696e616c697479547261636b65724772616e647061436f6e7472616374734964656e7469747956657374696e676865617274626561744865617274626561744166746572000000000050e31000110000000000000064e310000100000000000000000000006ce3100001000000000000000000000074e310000700000000000000c8b012000000000000000000000000007ce3100001000000000000000000000084e310000b0000000000000090e3100001000000000000000000000098e310000100000000000000486561727462656174526563656976656400000069e410000b00000039e4100030000000416c6c476f6f640004e4100035000000536f6d654f66666c696e6500ece3100018000000a0e310004c0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e63652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460417574686f726974794964526563656e7448696e747366696e616c5f68696e74000000b4e2100009000000417574686f726564426c6f636b735570646174654f72646572656448696e74734d656469616e616c77617973206174206c65617374206f6e6520726563656e742073616d706c653b2071656483e510004c0000006d0000002b000000726563656e7420616e64206f72646572656420636f6e7461696e207468652073616d65206974656d733b2071656400003c00000004000000040000002e00000083e510004c000000780000001b0000007072756e696e672064696374617465642062792077696e646f775f73697a6520776869636820697320616c776179732073617475726174656420617420313b207165642f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f66696e616c6974792d747261636b65722f7372632f6c69622e7273004de6100016000000b9211200020000004de610001600000063e6100012000000696d6f6e6c696e6570616c6c65745f696d5f6f6e6c696e652f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e7273536b697070696e6720686561727462656174206174202e204e6f7420612076616c696461746f722e00000087e710001c00000059e710002e00000027e710001a00000041e71000180000000be710000a00000015e7100012000000f3e6100018000000dde6100016000000c0e610001d0000004661696c656420746f206665746368206e6574776f726b2073746174654661696c656420746f2061637175697265206c6f636b4661696c656420746f207369676e20686561727462656174417574686f726974792020697320616c7265616479206f6e6c696e6548656172746265617420616c72656164792073656e74206174202e2057616974696e6720666f7220696e636c7573696f6e2e546f6f206561726c7920746f2073656e64206865617274626561742c206e657874206578706563746564206174204661696c656420746f207375626d6974207472616e73616374696f6e7061726974792f696d2d6f6e6c696e652d6865617274626561742f0000e0e7100008000000e8e710002000000008e810000b0000009d841200030000005b696e6465783a205d205265706f7274696e6720696d2d6f6e6c696e6520617420626c6f636b3a20202873657373696f6e3a2000c8b0120000000000c8b01200000000003c0000000400000004000000d50000003c0000000400000004000000d5000000506172656e7420686173682073686f756c642062652076616c69642e5472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642edbe8100032000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e53746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642e4e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e00000000000000b4e2100009000000000000003ce91000020000000000000000000000c8b01200000000000000000000000000b4e2100009000000000000006ce91000190000000000000085e910000a000000000000008fe910002f0000004865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e6174757265000000000000bde210000e0000000000000000000000f50812000e00000000000000000000000000000000000000000000000000000000000000c8b01200a8eb1000000000000000000020eb1000060000000000000001000000000000009083120004000000000000000000000050eb10001300000000000000000000000000000000000000000000000000000000000000c8b0120064eb1000000000000000000074eb100001000000000000000100000000000000db8d1200120000000201010000000000179012000c000000000000007ceb1000090000000000000070a311000700000000000000c8b0120088eb1000000000000000000098eb10000200000000000000000000000000000094e410000e0000000201010000000000179012000c000000000000006c0f11000e00000000000000847212000300000000000000c8b01200a8eb10000000000000000000b8eb1000020000000000000001000000cfec10004c000000c8b01200000000001bed1000440000005fed10003400000093ed100040000000d3ed10004e0000005665633c543a3a417574686f7269747949643e003c0000000000000001000000590000009bec10003400000041757468496e6465780000003c0000000000000001000000510000003fec10003900000078ec1000230000003c00000000000000010000006b000000c8eb1000450000000dec10003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e2063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e000000000000007fe410000a0000000000000050ee100001000000000000000000000068ee1000020000000000000000000000d0ee10000400000000000000d4ee10001700000078ee10003d000000b5ee10001b0000002048696e7420746861742074686520617574686f72206f66207468697320626c6f636b207468696e6b732074686520626573742066696e616c697a656420626c6f636b2069732074686520676976656e206e756d6265722e68696e74436f6d706163743c543a3a426c6f636b4e756d6265723e00000000005cef10000a00000000000000f50812000e00000000000000c8b0120068ef1000000000000000000078ef100001000000000000000000000080ef10000d00000000000000f50812000e00000000000000c8b0120090ef10000000000000000000a0ef1000010000000000000057696e646f7753697a6500003c0000000000000001000000d6000000efef1000460000005265706f72744c6174656e63790000003c0000000000000001000000d7000000a8ef100047000000205468652064656c617920616674657220776869636820706f696e74207468696e6773206265636f6d6520737573706963696f75732e2044656661756c7420697320313030302e20546865206e756d626572206f6620726563656e742073616d706c657320746f206b6565702066726f6d207468697320636861696e2e2044656661756c74206973203130312e0000000100000001000000000000000000000000000000010000004475706c696361746564486561727462656174496e76616c69644b65790000000000000063f010000a00000000000000a8f0100001000000000000000000000050f010001300000000000000b0f010000100000000000000cef0100019000000b8f0100016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e416c72656164795570646174656442616448696e7400000000e7f010000e0000000000000034f11000010000000000000000000000f5f0100007000000000000003cf11000010000000000000068f110003200000044f11000240000002046696e616c697a6564206865696768742061626f766520626c6f636b206e756d6265722046696e616c2068696e74206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b617373657274696f6e206661696c65643a20696e646578203c3d206c656e617373657274696f6e206661696c65643a20696e646578203c206c656e4e6f6e5a65726f526566436f756e744e6f6e44656661756c74436f6d706f736974654661696c6564546f4578747261637452756e74696d6556657273696f6e537065634f72496d706c56657273696f6e4e656564546f496e637265617365496d706c56657273696f6e4e6f74416c6c6f776564546f44656372656173655370656356657273696f6e4e6f74416c6c6f776564546f4465637265617365496e76616c6964537065634e616d653a65787472696e7369635f696e64657866696c6c5f626c6f636b72656d61726b7365745f686561705f70616765737365745f636f64657365745f636f64655f776974686f75745f636865636b737365745f6368616e6765735f747269655f636f6e6669677365745f73746f726167656b696c6c5f73746f726167656b696c6c5f7072656669787375696369646553797374656d426c6f636b486173684e756d626572506172656e744861736845787472696e73696373526f6f74446967657374000000001cf4100010000000000000002cf4100001000000000000000000000034f410000100000000000000000000003cf410000f000000000000004cf410000200000000000000000000005cf4100001000000000000000000000064f410000b00000000000000c8b0120000000000000000000000000070f4100001000000000000000000000078f410000a000000000000005ce8110001000000000000000000000084f410000100000000000000000000008cf410000d000000000000005ce811000100000000000000000000009cf41000010000000000000045787472696e7369635375636365737300f510000c0000000cf510002500000045787472696e7369634661696c656400f2a512000d00000000f510000c000000ebf4100015000000436f64655570646174656400d6f41000150000004e65774163636f756e740000bbf410001b0000004b696c6c65644163636f756e74000000a4f410001700000020416e206163636f756e7420776173207265617065642e2041206e6577206163636f756e742077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e4e6f4b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f663a73657373696f6e3a6b6579737365745f6b65797370757267655f6b6579734e6578744b65797300003c0000000400000004000000d80000003c0000000000000001000000400000005175657565644b6579734576656e74734576656e74546f70696373000000000090f210000a0000000000000084f710000100000000000000000000009cf710000100000000000000000000009af210000600000000000000a4f71000010000000000000000000000bcf71000010000000000000000000000a0f210000e00000000000000c4f71000010000000000000000000000dcf71000010000000000000000000000aef210000800000000000000e4f71000010000000000000000000000fcf71000010000000000000000000000b6f210001700000000000000e4f7100001000000000000000000000004f81000010000000000000000000000cdf2100017000000000000000cf8100001000000000000000000000024f81000010000000000000000000000e4f210000b000000000000002cf8100001000000000000000000000044f81000010000000000000000000000eff210000c000000000000004cf8100001000000000000000000000064f81000010000000000000000000000fbf210000b000000000000006cf8100001000000000000000000000084f8100001000000000000000000000006f310000700000000000000c8b012000000000000000000000000008cf8100002000000000000000000000023fb100006000000000000001858120007000000e1fa10004200000000000000dafa1000070000000000000070a3110007000000bffa10001b00000000000000bafa10000500000000000000a0711200030000007bfa10003f0000000000000077fa1000040000000000000070a31100070000005dfa10001a00000016fa10004700000000000000e3f910001300000000000000f6f9100020000000bbf910002800000000000000a9f910000500000000000000aef910000d0000008ef910001b0000000000000082f91000040000000000000086f910000800000064f910001e000000000000005ef910000600000000000000003211000300000019f91000450000009cf8100059000000f5f8100024000000204b696c6c207468652073656e64696e67206163636f756e742c20617373756d696e6720746865726520617265206e6f207265666572656e636573206f75747374616e64696e6720616e642074686520636f6d706f73697465206461746120697320657175616c20746f206974732064656661756c742076616c75652e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e707265666978204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e6b6579735665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e6974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e6368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e2053657420746865206e65772072756e74696d6520636f64652e636f64652053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e7061676573204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f0000000000000070b41100070000000101000000000000138212000c00000000000000fcff10002500000000000000000000000000000000000000c8b0120024001100000000000000000034001100010000000000000001000000000000003c0011000e0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b012008800110000000000000000004c0011000100000000000000000000000000000054001100130000000000000000000000670011000600000000000000000000000000000000000000000000000000000000000000c8b01200880011000000000000000000700011000100000000000000000000000000000078001100100000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b01200880011000000000000000000980011000100000000000000000000000000000013f31000090000000101000000000000f50812000e00000000000000811312000700000000000000000000000000000000000000c8b01200e00011000000000000000000a000110001000000000000000100000000000000a80011000d000000010500000000000084721200030000000000000070a311000700000000000000000000000000000000000000c8b01200b80011000000000000000000c8001100010000000000000001000000000000001cf31000060000000000000000000000f50812000e00000000000000000000000000000000000000000000000000000000000000c8b01200cc0e11000000000000000000d00011000100000000000000010000000000000022f310000a0000000000000000000000811312000700000000000000000000000000000000000000000000000000000000000000c8b01200e00011000000000000000000d8001100010000000000000001000000000000002cf310000e0000000000000000000000811312000700000000000000000000000000000000000000000000000000000000000000c8b01200e00011000000000000000000f0001100010000000000000001000000000000003af31000060000000000000000000000f80011000b00000000000000000000000000000000000000000000000000000000000000c8b012000401110000000000000000001401110001000000000000000100000000000000baf510000600000000000000000000001c0111002300000000000000000000000000000000000000000000000000000000000000c8b012004001110000000000000000005001110001000000000000000100000000000000580111000a0000000000000000000000620111000a00000000000000000000000000000000000000000000000000000000000000c8b01200cc0e110000000000000000006c01110001000000000000000100000000000000c0f510000b0000000101000000000000811312000700000000000000740111002100000000000000000000000000000000000000c8b01200980111000000000000000000a80111000a000000000000000100000000000000f80111000f000000000000000000000000ee11000400000000000000000000000000000000000000000000000000000000000000c8b01200e40e11000000000000000000080211000100000000000000010000004163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e0000003c0000000000000001000000d9000000e70611003a00000045787472696e736963436f756e740000b90611002e000000416c6c45787472696e736963735765696768745765696768740000007406110045000000416c6c45787472696e736963734c656e3c0000000000000001000000510000002406110050000000fe0511002600000045787472696e736963446174610000003c000000000000000100000059000000af0511004f0000006d05110042000000510511001c0000003c0000000000000001000000da0000000c051100450000004469676573744f663c543e003c000000000000000100000059000000d00411003c0000005665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e003c0000000000000001000000db000000a8041100280000004576656e74436f756e744576656e74496e6465787a0411002e0000005665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e0000003c00000000000000010000005900000048021100490000009102110025000000c8b0120000000000b6021100540000000a031100510000005b03110039000000c8b01200000000009403110053000000e7031100530000003a0411004000000052756e74696d655570677261646564001002110038000000204120626f6f6c20746f20747261636b206966207468652072756e74696d6520776173207570677261646564206c61737420626c6f636b2e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2077656967687420666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b207165640000007007110042000000510300001c000000700711004200000059030000110000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f73797374656d2f7372632f6c69622e72730000cc07110023000000c8b0120000000000ef0711001e0000004552524f523a20436f727275707465642073746174653a206c696e6b6564206d6170203a206e6578742076616c756520646f65736e277420657869737420617420000000cc07110023000000c8b012000000000028081100220000003a2070726576696f75732076616c756520646f65736e2774206578697374206174200000cc07110023000000c8b0120000000000640811001e0000003a20686561642076616c756520646f65736e27742065786973742061742000000000000074f510000800000000000000dc0811000200000000000000000000000c0911000c00000000000000000000007cf510000a00000000000000c8b012000000000000000000000000006c0911000a000000000000000000000082f910000400000000000000290c11000700000000000000300c1100050000000000000070a3110007000000c10a11003a000000fb0a110048000000ef09110031000000c8b0120000000000200a110035000000c8b01200000000002a7f12000b000000430b110022000000650b1100160000007b0b110059000000d40b110055000000927f12000c000000bc09110033000000ef09110031000000c8b0120000000000200a110035000000c8b01200000000002a7f12000b000000550a11001f000000740a11001c000000900a110031000000927f12000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d204f284e2920696e206e756d626572206f66206b65792074797065732e202d2052656d6f766573204e202b203120444220656e74726965732e202d20526564756365732073797374656d206163636f756e742072656673206279206f6e65206f6e20737563636573732e2053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d204f286c6f67206e2920696e206e756d626572206f66206163636f756e74732e202d204f6e6520657874726120444220656e7472792e202d20496e637265617365732073797374656d206163636f756e742072656673206279206f6e65206f6e20737563636573732069666620746865726520776572652070726576696f75736c79206e6f206b657973207365742e202020496e207468697320636173652c2070757267655f6b6579732077696c6c206e65656420746f2062652063616c6c6564206265666f726520746865206163636f756e742063616e2062652072656d6f7665642e543a3a4b65797370726f6f6600000000000000252312000a0000000000000000000000a00e11001300000000000000000000000000000000000000000000000000000000000000c8b01200b40e11000000000000000000c40e110001000000000000000100000000000000238f12000c0000000000000000000000179012000c00000000000000000000000000000000000000000000000000000000000000c8b01200cc0e11000000000000000000dc0e1100010000000000000001000000000000002f8f12000d000000000000000000000000ee11000400000000000000000000000000000000000000000000000000000000000000c8b01200e40e11000000000000000000f40e110002000000000000000100000000000000b0f510000a0000000000000000000000040f11001e00000000000000000000000000000000000000000000000000000000000000c8b01200240f11000000000000000000340f1100020000000000000001000000000000003c8f1200120000000000000000000000083c12000800000000000000000000000000000000000000000000000000000000000000c8b01200440f11000000000000000000540f11000300000000000000010000000000000086f5100008000000020501000000000070a3110007000000000000006c0f11000e00000000000000290c11000700000000000000c8b012007c0f110000000000000000008c0f110004000000000000000000000000000000ac0f110008000000020501000000000070a311000700000000000000b40f110014000000000000006c0f11000e00000000000000c8b01200c80f11000000000000000000d80f11000400000000000000000000005665633c543a3a56616c696461746f7249643e003c0000000000000001000000590000009f1211001f0000003c00000000000000010000006b000000811211001e0000003c0000000000000001000000510000000a1211004e00000058121100290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e00003c000000000000000100000059000000831111004f000000d2111100380000003c0000000000000001000000590000001611110020000000c8b0120000000000361111004d000000543a3a56616c696461746f72496400003c000000000000000100000051000000ef10110027000000c8b0120000000000411011005600000097101100580000004b65794f776e6572284b65795479706549642c205665633c75383e293c000000000000000100000051000000f80f110049000000c8b01200000000004110110056000000971011005800000020546865206f776e6572206f662061206b65792e20546865207365636f6e64206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206669727374206b657920697320616c77617973206044454455505f4b45595f5052454649586020746f206861766520616c6c20746865206461746120696e207468652073616d65206272616e6368206f662074686520747269652e20486176696e6720616c6c206461746120696e207468652073616d65206272616e63682073686f756c642070726576656e7420736c6f77696e6720646f776e206f7468657220717565726965732e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e000000000000f81211001000000000000000081311000500000000000000c8b0120010131100000000000000000020131100020000000000000044454455505f4b45595f505245464958265b75385d0000003c0000000000000001000000dc0000003013110059000000891311000d0000002055736564206173206669727374206b657920666f7220604e6578744b6579736020616e6420604b65794f776e65726020746f2070757420616c6c20746865206461746120696e746f207468652073616d65206272616e6368206f662074686520747269652e74686520636f6e74726163742065786973747320616e6420696e2074686520616c6976652073746174653b0a090974686520757064617465642062616c616e6365206d7573742062652067726561746572207468616e2073756273697374656e6365206465706f7369743b0a0909746869732066756e6374696f6e20646f65736e27742072657475726e20604e6f6e65603b0a09097165640a0909000000441411004600000074010000170000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f636f6e7472616374732f7372632f72656e742e7273436865636b56657273696f6e436865636b47656e65736973436865636b457261436865636b4e6f6e6365436865636b5765696768743a6865617070616765733a636f64653a6368616e6765735f74726965000000000071f210000f00000000000000a015110002000000000000000000000052f210001f00000000000000b015110002000000000000000000000033f210001f00000000000000c015110002000000000000000000000014f210001f00000000000000d0151100020000000000000000000000f7f110001d00000000000000e0151100030000000000000000000000e4f110001300000000000000f8151100010000000000000000000000d5f110000f000000000000000016110001000000000000003f18110045000000d917110015000000ee17110051000000d9171100150000008717110052000000d917110015000000151711004d0000006217110025000000961611003c000000c8b0120000000000d2161100430000005616110040000000081611004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e206f722074686520696d706c656d656e746174696f6e2076657273696f6e206e65656420746f20696e637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e2054686520696d706c656d656e746174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d65000000005bf510000c00000000000000f418110001000000000000000000000044f510001700000000000000fc18110001000000000000000000000037f510000d000000000000000419110001000000000000000000000031f5100006000000000000000c1911000100000000000000801911001900000058191100280000003e1911001a000000141911002a000000204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e526571756972655375646f7375646f7365745f6b65797375646f5f61730000000000003c1a11000500000000000000441a11000100000000000000000000004c1a1100010000000000000000000000541a11000a000000000000005ce81100010000000000000000000000601a1100010000000000000000000000681a11000a00000000000000441a11000100000000000000000000004c1a11000100000000000000537564696400000000ee110004000000ae1a1100180000004b65794368616e6765640000721a11003c0000005375646f4173446f6e6520546865207375646f6572206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e2041207375646f206a75737420746f6f6b20706c6163652e536f63696574794d61784d656d62657273566f7465734e6f74486561644e6f74466f756e6465724e6f7443616e646964617465416c726561647943616e646964617465416c7265616479426964466f756e646572486561644e6f74566f756368696e67416c7265616479566f756368696e67496e73756666696369656e74506f74416c7265616479466f756e6465644e6f5061796f75744e6f7453757370656e64656453757370656e646564416c72656164794d656d626572426164506f736974696f6e626964756e626964766f756368746970756e766f756368646566656e6465725f766f74657061796f7574666f756e64756e666f756e646a756467655f73757370656e6465645f6d656d6265726a756467655f73757370656e6465645f63616e6469646174657365745f6d61785f6d656d62657273000000000000941e110007000000000000005ce811000100000000000000000000009c1e1100010000000000000000000000a41e110003000000000000004c261200020000000000000000000000a81e1100020000000000000000000000b81e11000500000000000000c01e1100030000000000000000000000d81e1100020000000000000000000000e81e110009000000000000005ce81100010000000000000000000000f41e1100010000000000000000000000fc1e110005000000000000005ce81100010000000000000000000000041f11000100000000000000000000000c1f110007000000000000005ce81100010000000000000000000000141f11000100000000000000000000001c1f11000800000000000000241f1100020000000000000000000000341f1100020000000000000000000000441f110018000000000000005c1f11000200000000000000000000006c1f1100010000000000000000000000741f110012000000000000005ce81100010000000000000000000000881f1100010000000000000000000000901f11000f000000000000005ce81100010000000000000000000000a01f1100010000000000000000000000a81f11000a000000000000005ce81100010000000000000000000000b41f1100010000000000000000000000bc1f110004000000000000002cc61100030000000000000000000000c01f1100010000000000000000000000c81f11000c000000000000005c1f1100020000000000000000000000d41f1100010000000000000000000000dc1f11000d00000000000000ec1f1100010000000000000000000000f41f1100010000000000000000000000fc1f110009000000000000005ce81100010000000000000000000000082011000100000000000000466f756e64656400592311002e00000042696400f2221100580000004a2311000f000000566f756368000000c26d1200090000009027120007000000c26d1200090000005e22110058000000b62211003c0000004175746f556e6269640000001c22110042000000556e626964000000f02111002c000000556e766f75636800b22111003e000000496e647563746564c26d120009000000a42111000e0000003121110056000000872111001d00000053757370656e6465644d656d6265724a756467656d656e74c26d12000900000000ee1100040000000e2111002300000043616e64696461746553757370656e6465640000ef2011001f0000004d656d62657253757370656e64656400d32011001c0000004368616c6c656e6765640000b62011001d000000566f74658620110030000000446566656e646572566f74654a2011003c0000004e65774d61784d656d6265727300000084721200030000002620110024000000556e666f756e646564000000102011001600000020536f636965747920697320756e666f756e6465642e2041206e6577206d6178206d656d62657220636f756e7420686173206265656e20736574204120766f746520686173206265656e20706c6163656420666f72206120646566656e64696e67206d656d6265722028766f7465722c20766f746529204120766f746520686173206265656e20706c61636564202863616e6469646174652c20766f7465722c20766f7465292041206d656d62657220686173206265656e206368616c6c656e6765642041206d656d62657220686173206265656e2073757370656e64656420412063616e64696461746520686173206265656e2073757370656e64656420412073757370656e646564206d656d62657220686173206265656e206a756467656420412067726f7570206f662063616e646964617465732068617665206265656e20696e6475637465642e205468652062617463682773207072696d617279206973207468652066697273742076616c75652c2074686520626174636820696e2066756c6c20697320746865207365636f6e642e5665633c4163636f756e7449643e20412063616e646964617465207761732064726f70706564202862792072657175657374206f662077686f20766f756368656420666f72207468656d292e20412063616e646964617465207761732064726f70706564202862792074686569722072657175657374292e20412063616e646964617465207761732064726f70706564202864756520746f20616e20657863657373206f66206269647320696e207468652073797374656d292e2041206d656d6265727368697020626964206a7573742068617070656e656420627920766f756368696e672e2054686520676976656e206163636f756e74206973207468652063616e646964617465277320494420616e64207468656972206f6666657220697320746865207365636f6e642e2054686520766f756368696e67207061727479206973207468652074686972642e2041206d656d6265727368697020626964206a7573742068617070656e65642e2054686520676976656e206163636f756e74206973207468652063616e646964617465277320494420616e64207468656972206f6666657220697320746865207365636f6e642e2054686520736f636965747920697320666f756e6465642062792074686520676976656e206964656e746974792e5072656d61747572655374696c6c4f70656e4e6f7446696e646572556e6b6e6f776e546970416c72656164794b6e6f776e526561736f6e546f6f426967496e76616c696450726f706f73616c496e646578496e73756666696369656e7450726f706f7365727342616c616e636570792f747273727970726f706f73655f7370656e6472656a6563745f70726f706f73616c617070726f76655f70726f706f73616c7265706f72745f617765736f6d65726574726163745f7469707469705f6e6577636c6f73655f7469700000000000000030ec1100080000000000000038261100010000000000000000000000402611000100000000000000000000004826110008000000000000005026110001000000000000000000000058261100010000000000000000000000602611000700000000000000682611000300000000000000000000008026110001000000000000000000000088261100080000000000000090261100020000000000000000000000a0261100010000000000000000000000a8261100050000000000000050261100010000000000000000000000b0261100010000000000000000000000b8261100080000000000000050261100010000000000000000000000c0261100010000000000000000000000589c1100070000000000000050261100010000000000000000000000c8261100010000000000000000000000d02611000600000000000000b0ec1100010000000000000000000000d8261100010000000000000000000000e02611000a00000000000000b0ec1100010000000000000000000000ec261100010000000000000000000000f426110009000000000000000027110003000000000000000000000018271100010000000000000000000000202711000c00000000000000b0ec11000100000000000000000000002c271100010000000000000055ef11000d000000ee2811000e0000005370656e64696e679027120007000000b42811003a000000417761726465640055ef11000d0000009027120007000000c26d120009000000942811002000000052656a656374656455ef11000d0000009027120007000000672811002d0000004275726e740000004428110023000000526f6c6c6f766572f82711004c000000d8271100200000004e65775469700000b227110026000000546970436c6f73696e6700007b27110037000000546970436c6f73656400000065ed110004000000c26d1200090000009027120007000000592711002200000054697052657472616374656434271100250000002041207469702073756767657374696f6e20686173206265656e207265747261637465642e2041207469702073756767657374696f6e20686173206265656e20636c6f7365642e2041207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e2041206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e20536f6d652066756e64732068617665206265656e206465706f73697465642e205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e20536f6d652066756e64732068617665206265656e20616c6c6f63617465642e205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e204e65772070726f706f73616c2e6164645f6d656d626572737761705f6d656d62657272657365745f6d656d626572736368616e67655f6b65797365745f7072696d65636c6561725f7072696d6500000000442a11000b00000000000000c8b01200000000000000000000000000502a1100010000000000000000000000582a11000d00000000000000c8b01200000000000000000000000000682a1100010000000000000000000000702a11000e00000000000000c8b01200000000000000000000000000802a1100010000000000000000000000882a11000c00000000000000c8b01200000000000000000000000000942a1100010000000000000000000000541a11000a00000000000000c8b012000000000000000000000000009c2a1100010000000000000000000000a42a11000500000000000000ac2a1100010000000000000000000000b42a110001000000000000004d656d626572416464656400e12b1100390000004d656d62657252656d6f766564000000a62b11003b0000004d656d626572735377617070656400006f2b1100370000004d656d626572735265736574292b110046000000072b11002200000044756d6d79000000d82a11002f000000bc2a11001c000000205068616e746f6d206d656d6265722c206e6576657220757365642e73705f7374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e204f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e20546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e496e636f6e73697374656e74207374617465202d20636f756c646e277420736574746c6520696d62616c616e636520666f722066756e6473207370656e74206279207472656173757279506f74736f63696574795f726f746174696f6e000000000000000000617474656d707420746f20646976696465206279207a65726f0000009c2d1100430000002d0600001d0000009c2d110043000000810400000f00000070792f736f6369657061796f757473652e31206f662066696e616c206974656d203d3d20746f74616c5f617070726f76616c733b20776f72737420636173652066696e642077696c6c20616c776179732072657475726e2074686174206974656d3b2071656400009c2d110043000000780500001f00000042696473657869746564206966206d656d6265727320656d7074793b207165649c2d110043000000970500001f000000446566656e646572446566656e646572566f746573736f63696574795f6368616c6c656e676500009c2d1100430000000e0600001e0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f736f63696574792f7372632f6c69622e727353757370656e6465644d656d62657273537472696b65735061796f757473000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f0000009c2d110043000000880400000500000000000000a41911000400000000000000d02e1100010000000000000000000000e82e11000a0000000000000000000000a81911000700000000000000382f1100010000000000000000000000502f1100090000000000000000000000af1911000700000000000000982f1100020000000000000000000000c82f11000b0000000000000000000000fb8512000400000000000000500b120017000000563111004e000000c8b01200000000007881120034000000c8b01200000000002a7f12000b000000bc4812000800000085301100190000009e30110018000000b630110032000000927f12000c00000000000000108212000300000000000000203f120023000000e83011005d000000c8b01200000000007881120034000000c8b01200000000002a7f12000b000000bc4812000800000085301100190000004531110011000000927f12000c0000000000000097d211000300000000000000203f12002300000000000000fb8512000400000000000000500b12001700000020301100540000007430110011000000c8b01200000000007881120034000000c8b01200000000002a7f12000b000000bc4812000800000085301100190000009e30110018000000b630110032000000927f12000c0000002041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d206120676976656e206163636f756e742e202d204c696d697465642073746f726167652072656164732e202d204f6e6520444220777269746520286576656e74292e202d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e2041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e202d204f6e65204442206368616e67652e2041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e5375646f0000000000321100030000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200043211000000000000000000143211000100000000000000010000004b6579003c0000000000000001000000dd0000001c321100210000002054686520604163636f756e74496460206f6620746865207375646f206b65792e000000000000008a1b1100030000000000000050341100010000000000000000000000683411002100000000000000000000008d1b110005000000000000007035110001000000000000000000000088351100130000000000000000000000921b1100050000000000000020361100030000000000000000000000683611002c00000000000000000000009a1b1100070000000000000070351100010000000000000000000000c8371100110000000000000000000000f3ea110004000000000000005038110002000000000000000000000080381100130000000000000000000000a11b11000d000000000000001839110001000000000000000000000030391100100000000000000000000000ae1b11000600000000000000c8b01200000000000000000000000000b0391100140000000000000000000000b41b11000500000000000000503a1100030000000000000000000000983a1100130000000000000000000000b91b11000700000000000000c8b01200000000000000000000000000303b11000d0000000000000000000000c01b11001600000000000000983b1100020000000000000000000000c83b11001b0000000000000000000000d61b11001900000000000000a03c1100020000000000000000000000d03c1100280000000000000000000000ef1b11000f00000000000000103e1100010000000000000000000000283e11000e00000000000000000000007c47120005000000000000006a5c11000f000000b45e110038000000c8b0120000000000ec5e11004e0000003a5f11003c000000c8b01200000000007881120034000000c8b012000000000007f811000c000000765f110056000000c8b01200000000002a7f12000b000000cc5f1100550000002758110011000000ac5811003b000000e7581100380000001f59110037000000565911003d00000038581100320000009359110012000000e859110060000000485a110040000000885a110017000000cf5a11004b0000001a5b1100310000004b5b11001e000000695b110027000000905b110048000000d85b11000a000000216011001a000000fa5b11003f000000c8b0120000000000395c110031000000927f12000c00000000000000b15e110003000000000000008472120003000000795c110036000000af5c110040000000ef5c110021000000c8b0120000000000105d11003f000000c8b01200000000004f5d110041000000c8b012000000000007f811000c000000905d110046000000c8b01200000000002a7f12000b000000d65d11002c000000025e110043000000455e110051000000857f12000d000000c8b0120000000000965e11001b000000927f12000c0000000000000097d211000300000000000000138212000c000000000000007c47120005000000000000006a5c11000f00000000000000971b110003000000000000006a5c11000f000000b954110051000000c8b01200000000000a551100550000005f55110057000000b655110050000000c8b012000000000006561100560000005c56110054000000c8b01200000000003b50110041000000c8b012000000000007f811000c000000b056110033000000e35611005400000037571100190000005057110052000000a257110045000000c8b01200000000002a7f12000b000000e757110040000000275811001100000038581100320000006a58110042000000ac5811003b000000e7581100380000001f59110037000000565911003d0000009359110012000000a559110043000000e859110060000000485a110040000000885a1100170000009f5a110030000000cf5a11004b0000001a5b1100310000004b5b11001e000000695b110027000000905b110048000000d85b11000a000000e25b110018000000fa5b11003f000000c8b0120000000000395c110031000000927f12000c000000e65211004b0000003153110025000000c8b0120000000000565311004a000000c8b012000000000007f811000c000000a05311004b000000c8b01200000000002a7f12000b000000eb531100150000000054110042000000425411003b0000007d54110025000000857f12000d000000c8b0120000000000a254110017000000927f12000c00000000000000dd5211000900000000000000203f1200230000000000000016141200070000000000000000ee1100040000009051110022000000c8b01200000000003b50110041000000c8b012000000000007f811000c000000b2511100430000007c5011003d000000f551110036000000c8b01200000000002a7f12000b0000002b5211002f000000fc501100470000005a52110016000000705211004b000000435111002f000000857f12000d000000c8b0120000000000bb52110022000000927f12000c0000000000000016141200070000000000000000ee1100040000001850110023000000c8b01200000000003b50110041000000c8b012000000000007f811000c0000007c5011003d000000b950110029000000c8b01200000000002a7f12000b000000e25011001a000000fc50110047000000435111002f000000857f12000d000000c8b0120000000000725111001e000000927f12000c000000204d110051000000c8b0120000000000714d11005a000000c8b0120000000000cb4d110048000000134e11001e000000c8b0120000000000314e110045000000764e110013000000c8b01200000000002a7f12000b000000894e110047000000d04e110049000000194f110039000000524f1100390000008b4f110023000000ae4f110044000000c8b0120000000000f24f110026000000927f12000c00000000000000094d11000700000000000000138212000c00000000000000104d11000b000000000000008472120003000000000000001b4d1100050000000000000070a3110007000000f04a110013000000c8b0120000000000034b11003c0000003f4b110046000000c8b0120000000000854b110047000000c8b012000000000007f811000c000000cc4b110046000000124c110045000000574c11003d000000c8b01200000000002a7f12000b000000944c110038000000cc4c11003d000000857f12000d000000c8b0120000000000a83f110017000000927f12000c000000e049110023000000c8b0120000000000034a1100570000005a4a110056000000b04a110008000000c8b01200000000002a7f12000b000000b84a11001a000000d24a11001e000000857f12000d000000c8b0120000000000a83f110017000000927f12000c0000000000000097d211000300000000000000138212000c00000000000000d9491100070000000000000000ee110004000000204611004b000000c8b01200000000006b46110056000000c146110033000000c8b0120000000000f4461100520000004647110040000000c8b01200000000009841110050000000c8b012000000000007f811000c000000864711002d000000b34711004d0000000048110049000000c8b01200000000002a7f12000b0000004948110029000000724811003e000000b04811005c0000000c4911003e0000004a491100510000007d451100350000009b4911001c000000c94511001f000000c8b0120000000000b749110022000000927f12000c0000000000000097d211000300000000000000138212000c000000000000000e46110009000000000000001746110009000000c23f11004d000000c8b01200000000000f40110057000000664011001d000000c8b01200000000008340110055000000d840110044000000c8b01200000000001c411100570000007341110025000000c8b01200000000009841110050000000c8b012000000000007f811000c000000e8411100300000001842110031000000c8b01200000000002a7f12000b000000494211003d000000864211003c000000c242110032000000f44211001000000004431100450000004943110037000000804311003a000000ba4311002d000000e7431100280000000f4411002c0000003b441100530000008e4411000f0000009d44110037000000d44411004b0000001f4511000e0000002d451100500000007d45110035000000b245110017000000c94511001f000000c8b0120000000000e845110026000000927f12000c00000000000000bf3f110003000000000000008472120003000000983e110047000000df3e11002d000000c8b01200000000000c3f110037000000c8b012000000000007f811000c000000433f110039000000c8b01200000000002a7f12000b0000007c3f11002c000000857f12000d000000c8b0120000000000a83f110017000000927f12000c00000020416c6c6f777320726f6f74206f726967696e20746f206368616e676520746865206d6178696d756d206e756d626572206f66206d656d6265727320696e20736f63696574792e204d6178206d656d6265727368697020636f756e74206d7573742062652067726561746572207468616e20312e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d205f524f4f545f2e202d20606d617860202d20546865206d6178696d756d206e756d626572206f66206d656d6265727320666f722074686520736f63696574792e202d204f6e652073746f7261676520777269746520746f2075706461746520746865206d61782e204f28312920546f74616c20436f6d706c65786974793a204f2831296d617820416c6c6f772073757370656e646564206a756467656d656e74206f726967696e20746f206d616b65206a756467656d656e74206f6e20612073757370656e6465642063616e6469646174652e20496620746865206a756467656d656e742069732060417070726f7665602c20776520616464207468656d20746f20736f63696574792061732061206d656d62657220776974682074686520617070726f707269617465207061796d656e7420666f72206a6f696e696e6720736f63696574792e20496620746865206a756467656d656e74206973206052656a656374602c2077652065697468657220736c61736820746865206465706f736974206f6620746865206269642c20676976696e67206974206261636b20746f2074686520736f63696574792074726561737572792c206f722077652062616e2074686520766f75636865722066726f6d20766f756368696e6720616761696e2e20496620746865206a756467656d656e7420697320605265626964602c20776520707574207468652063616e646964617465206261636b20696e207468652062696420706f6f6c20616e64206c6574207468656d20676f207468726f7567682074686520696e64756374696f6e2070726f6365737320616761696e2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d20746865205f53757370656e73696f6e4a756467656d656e744f726967696e5f2e202d206077686f60202d205468652073757370656e6465642063616e64696461746520746f206265206a75646765642e202d20606a756467656d656e7460202d2060417070726f7665602c206052656a656374602c206f7220605265626964602e204b65793a204220286c656e206f662062696473292c204d20286c656e206f66206d656d62657273292c2058202862616c616e636520616374696f6e29202d204f6e652073746f72616765207265616420746f20636865636b206077686f6020697320612073757370656e6465642063616e6469646174652e202d204f6e652073746f726167652072656d6f76616c206f66207468652073757370656e6465642063616e6469646174652e202d20417070726f7665204c6f67696320092d204f6e652073746f72616765207265616420746f206765742074686520617661696c61626c6520706f7420746f2070617920757365727320776974682e204f28312920092d204f6e652073746f7261676520777269746520746f207570646174652074686520617661696c61626c6520706f742e204f28312920092d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f28312920092d204f6e652073746f72616765207265616420746f2067657420616c6c206d656d626572732e204f284d2920092d20557020746f206f6e6520756e726573657276652063757272656e637920616374696f6e2e20092d20557020746f2074776f206e65772073746f726167652077726974657320746f207061796f7574732e20092d20557020746f206f6e652073746f726167652077726974652077697468204f286c6f67204d292062696e6172792073656172636820746f206164642061206d656d62657220746f20736f63696574792e202d2052656a656374204c6f67696320092d20557020746f206f6e6520726570617472696174652072657365727665642063757272656e637920616374696f6e2e204f28582920092d20557020746f206f6e652073746f7261676520777269746520746f2062616e2074686520766f756368696e67206d656d6265722066726f6d20766f756368696e6720616761696e2e202d205265626964204c6f67696320092d2053746f72616765206d75746174652077697468204f286c6f672042292062696e6172792073656172636820746f20706c616365207468652075736572206261636b20696e746f20626964732e202d20557020746f206f6e65206164646974696f6e616c206576656e7420696620756e766f7563682074616b657320706c6163652e202d204f6e652073746f726167652072656d6f76616c2e202d204f6e65206576656e7420666f7220746865206a756467656d656e742e20546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b2042202b2058296a756467656d656e744a756467656d656e7420416c6c6f772073757370656e73696f6e206a756467656d656e74206f726967696e20746f206d616b65206a756467656d656e74206f6e20612073757370656e646564206d656d6265722e20496620612073757370656e646564206d656d62657220697320666f72676976656e2c2077652073696d706c7920616464207468656d206261636b2061732061206d656d6265722c206e6f7420616666656374696e6720616e79206f6620746865206578697374696e672073746f72616765206974656d7320666f722074686174206d656d6265722e20496620612073757370656e646564206d656d6265722069732072656a65637465642c2072656d6f766520616c6c206173736f6369617465642073746f72616765206974656d732c20696e636c7564696e67207468656972207061796f7574732c20616e642072656d6f766520616e7920766f7563686564206269647320746865792063757272656e746c7920686176652e202d206077686f60202d205468652073757370656e646564206d656d62657220746f206265206a75646765642e202d2060666f726769766560202d204120626f6f6c65616e20726570726573656e74696e672077686574686572207468652073757370656e73696f6e206a756467656d656e74206f726967696e202020202020202020202020202020666f726769766573202860747275656029206f722072656a6563747320286066616c7365602920612073757370656e646564206d656d6265722e204b65793a204220286c656e206f662062696473292c204d20286c656e206f66206d656d6265727329202d204f6e652073746f72616765207265616420746f20636865636b206077686f6020697320612073757370656e646564206d656d6265722e204f283129202d20557020746f206f6e652073746f72616765207772697465204f284d292077697468204f286c6f67204d292062696e6172792073656172636820746f206164642061206d656d626572206261636b20746f20736f63696574792e202d20557020746f20332073746f726167652072656d6f76616c73204f28312920746f20636c65616e20757020612072656d6f766564206d656d6265722e202d20557020746f206f6e652073746f72616765207772697465204f2842292077697468204f2842292073656172636820746f2072656d6f766520766f7563686564206269642066726f6d20626964732e202d204f6e652073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b204229666f726769766520416e6e756c2074686520666f756e64696e67206f662074686520736f63696574792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642c20616e6420746865207369676e696e67206163636f756e74206d75737420626520626f7468207468652060466f756e6465726020616e6420746865206048656164602e205468697320696d706c6965732074686174206974206d6179206f6e6c7920626520646f6e65207768656e207468657265206973206f6e65206d656d6265722e202d2054776f2073746f72616765207265616473204f2831292e202d20466f75722073746f726167652072656d6f76616c73204f2831292e20466f756e642074686520736f63696574792e205468697320697320646f6e65206173206120646973637265746520616374696f6e20696e206f7264657220746f20616c6c6f7720666f7220746865206d6f64756c6520746f20626520696e636c7564656420696e746f20612072756e6e696e6720636861696e20616e642063616e206f6e6c7920626520646f6e65206f6e63652e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d20746865205f466f756e6465725365744f726967696e5f2e202d2060666f756e64657260202d20546865206669727374206d656d62657220616e642068656164206f6620746865206e65776c7920666f756e64656420736f63696574792e202d20606d61785f6d656d6265727360202d2054686520696e697469616c206d6178206e756d626572206f66206d656d6265727320666f722074686520736f63696574792e202d206072756c657360202d205468652072756c6573206f66207468697320736f636965747920636f6e6365726e696e67206d656d626572736869702e202d2054776f2073746f72616765206d75746174657320746f207365742060486561646020616e642060466f756e646572602e204f283129202d204f6e652073746f7261676520777269746520746f2061646420746865206669727374206d656d62657220746f20736f63696574792e204f283129666f756e6465726d61785f6d656d6265727372756c6573205472616e7366657220746865206669727374206d617475726564207061796f757420666f72207468652073656e64657220616e642072656d6f76652069742066726f6d20746865207265636f7264732e204e4f54453a20546869732065787472696e736963206e6565647320746f2062652063616c6c6564206d756c7469706c652074696d657320746f20636c61696d206d756c7469706c65206d617475726564207061796f7574732e205061796d656e743a20546865206d656d6265722077696c6c20726563656976652061207061796d656e7420657175616c20746f207468656972206669727374206d617475726564207061796f757420746f20746865697220667265652062616c616e63652e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206d656d6265722077697468207061796f7574732072656d61696e696e672e204b65793a204d20286c656e206f66206d656d62657273292c205020286e756d626572206f66207061796f75747320666f72206120706172746963756c6172206d656d62657229202d204f6e652073746f726167652072656164204f284d2920616e64204f286c6f67204d292073656172636820746f20636865636b207369676e65722069732061206d656d6265722e202d204f6e652073746f726167652072656164204f28502920746f2067657420616c6c207061796f75747320666f722061206d656d6265722e202d204f6e652073746f726167652072656164204f28312920746f20676574207468652063757272656e7420626c6f636b206e756d6265722e202d204f6e652063757272656e6379207472616e736665722063616c6c2e204f285829202d204f6e652073746f72616765207772697465206f722072656d6f76616c20746f2075706461746520746865206d656d6265722773207061796f7574732e204f28502920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b2050202b2058292041732061206d656d6265722c20766f7465206f6e2074686520646566656e6465722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206d656d6265722e202d2060617070726f7665603a204120626f6f6c65616e2077686963682073617973206966207468652063616e6469646174652073686f756c6420626520617070726f766564202860747275656029206f722072656a656374656420286066616c736560292e202d204b65793a204d20286c656e206f66206d656d6265727329202d204f6e652073746f726167652072656164204f284d2920616e64204f286c6f67204d292073656172636820746f20636865636b20757365722069732061206d656d6265722e202d204f6e652073746f7261676520777269746520746f2061646420766f746520746f20766f7465732e204f28312920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d292041732061206d656d6265722c20766f7465206f6e20612063616e6469646174652e202d206063616e646964617465603a205468652063616e646964617465207468617420746865206d656d62657220776f756c64206c696b6520746f20626964206f6e2e2020202020202020202020202020617070726f766564202860747275656029206f722072656a656374656420286066616c736560292e204b65793a204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d6265727329202d204f6e65206163636f756e74206c6f6f6b75702e202d204f6e652073746f726167652072656164204f28432920616e64204f2843292073656172636820746f20636865636b2074686174207573657220697320612063616e6469646174652e20546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b20432963616e646964617465204173206120766f756368696e67206d656d6265722c20756e766f7563682061206269642e2054686973206f6e6c7920776f726b73207768696c6520766f75636865642075736572206973206f6e6c792061206269646465722028616e64206e6f7420612063616e646964617465292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206120766f756368696e67206d656d6265722e202d2060706f73603a20506f736974696f6e20696e207468652060426964736020766563746f72206f6620746865206269642077686f2073686f756c6420626520756e766f75636865642e204b65793a204220286c656e206f66206269647329202d204f6e652073746f726167652072656164204f28312920746f20636865636b20746865207369676e6572206973206120766f756368696e67206d656d6265722e202d204f6e652073746f72616765206d757461746520746f20726574726965766520616e64207570646174652074686520626964732e204f284229202d204f6e6520766f756368696e672073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f2842292041732061206d656d6265722c20766f75636820666f7220736f6d656f6e6520746f206a6f696e20736f636965747920627920706c6163696e67206120626964206f6e20746865697220626568616c662e205468657265206973206e6f206465706f73697420726571756972656420746f20766f75636820666f722061206e6577206269642c206275742061206d656d6265722063616e206f6e6c7920766f75636820666f72206f6e652062696420617420612074696d652e2049662074686520626964206265636f6d657320612073757370656e6465642063616e64696461746520616e6420756c74696d6174656c792072656a6563746564206279207468652073757370656e73696f6e206a756467656d656e74206f726967696e2c20746865206d656d6265722077696c6c2062652062616e6e65642066726f6d20766f756368696e6720616761696e2e204173206120766f756368696e67206d656d6265722c20796f752063616e20636c61696d206120746970206966207468652063616e6469646174652069732061636365707465642e2054686973207469702077696c6c2062652070616964206173206120706f7274696f6e206f66207468652072657761726420746865206d656d6265722077696c6c207265636569766520666f72206a6f696e696e672074686520736f63696574792e202d206077686f603a2054686520757365722077686f20796f7520776f756c64206c696b6520746f20766f75636820666f722e202d206076616c7565603a2054686520746f74616c2072657761726420746f2062652070616964206265747765656e20796f7520616e64207468652063616e6469646174652069662074686579206265636f6d652061206d656d62657220696e2074686520736f63696574792e202d2060746970603a20596f757220637574206f662074686520746f74616c206076616c756560207061796f7574207768656e207468652063616e64696461746520697320696e64756374656420696e746f2074686520736f63696574792e2054697073206c6172676572207468616e206076616c7565602077696c6c206265207361747572617465642075706f6e207061796f75742e204b65793a204220286c656e206f662062696473292c204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d6265727329202d2053746f726167652052656164733a20092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c206d656d626572732e204f284d2920092d204f6e652073746f72616765207265616420746f20636865636b206d656d626572206973206e6f7420616c726561647920766f756368696e672e204f28312920092d204f6e652073746f72616765207265616420746f20636865636b20666f722073757370656e6465642063616e6469646174652e204f28312920092d204f6e652073746f72616765207265616420746f20636865636b20666f722073757370656e646564206d656d6265722e204f28312920092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c2063757272656e7420626964732e204f28422920092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c2063757272656e742063616e646964617465732e204f284329202d2053746f72616765205772697465733a20092d204f6e652073746f7261676520777269746520746f20696e7365727420766f756368696e672073746174757320746f20746865206d656d6265722e204f28312920092d204f6e652073746f72616765206d757461746520746f206164642061206e65772062696420746f2074686520766563746f72204f2842292028544f444f3a20706f737369626c65206f7074696d697a6174696f6e20772f20726561642920092d20557020746f206f6e652073746f726167652072656d6f76616c206966206269642e6c656e2829203e204d41585f4249445f434f554e542e204f283129202d204e6f7461626c6520436f6d7075746174696f6e3a20092d204f286c6f67204d292073656172636820746f20636865636b2073656e6465722069732061206d656d6265722e20092d204f2842202b2043202b206c6f67204d292073656172636820746f20636865636b2075736572206973206e6f7420616c726561647920612070617274206f6620736f63696574792e20092d204f286c6f672042292073656172636820746f20696e7365727420746865206e65772062696420736f727465642e202d2045787465726e616c204d6f64756c65204f7065726174696f6e733a20092d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e204f28582920092d20557020746f206f6e652062616c616e636520756e72657365727665206f7065726174696f6e20696620626964732e6c656e2829203e204d41585f4249445f434f554e542e202d204576656e74733a20092d204f6e65206576656e7420666f7220766f7563682e20092d20557020746f206f6e65206576656e7420666f72204175746f556e626964206966206269642e6c656e2829203e204d41585f4249445f434f554e542e20546f74616c20436f6d706c65786974793a204f284d202b2042202b2043202b206c6f674d202b206c6f6742202b20582942616c616e63654f663c542c20493e2041206269646465722063616e2072656d6f76652074686569722062696420666f7220656e74727920696e746f20736f63696574792e20427920646f696e6720736f2c20746865792077696c6c20686176652074686569722063616e646964617465206465706f7369742072657475726e6564206f7220746865792077696c6c20756e766f75636820746865697220766f75636865722e205061796d656e743a2054686520626964206465706f73697420697320756e7265736572766564206966207468652075736572206d6164652061206269642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206269646465722e202d2060706f73603a20506f736974696f6e20696e207468652060426964736020766563746f72206f6620746865206269642077686f2077616e747320746f20756e6269642e204b65793a204220286c656e206f662062696473292c2058202862616c616e636520756e7265736572766529202d204f6e652073746f72616765207265616420616e6420777269746520746f20726574726965766520616e64207570646174652074686520626964732e204f284229202d20456974686572206f6e6520756e726573657276652062616c616e636520616374696f6e204f285829206f72206f6e6520766f756368696e672073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f2842202b205829706f7320412075736572206f757473696465206f662074686520736f63696574792063616e206d616b6520612062696420666f7220656e7472792e205061796d656e743a206043616e6469646174654465706f736974602077696c6c20626520726573657276656420666f72206d616b696e672061206269642e2049742069732072657475726e6564207768656e2074686520626964206265636f6d65732061206d656d6265722c206f7220696620746865206269642063616c6c732060756e626964602e202d206076616c7565603a2041206f6e652074696d65207061796d656e74207468652062696420776f756c64206c696b6520746f2072656365697665207768656e206a6f696e696e672074686520736f63696574792e204b65793a204220286c656e206f662062696473292c204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d62657273292c2058202862616c616e636520726573657276652920092d204f6e65206576656e7420666f72206e6577206269642e0000000000131b1100070000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200c89111000000000000000000bc65110001000000000000000000000000000000c4651100050000000000000000000000811312000700000000000000000000000000000000000000000000000000000000000000c8b01200cc6511000000000000000000dc651100020000000000000000000000000000008cc811000a0000000000000000000000ec6511002700000000000000000000000000000000000000000000000000000000000000c8b01200c0661100000000000000000014661100010000000000000001000000000000001c661100130000000101000000000000138212000c000000000000002f6611003900000000000000000000000000000000000000c8b012006866110000000000000000007866110001000000000000000000000000000000642c11000300000000000000000000006a5c11000f00000000000000000000000000000000000000000000000000000000000000c8b0120080661100000000000000000090661100010000000000000001000000000000001a1b1100040000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200c8911100000000000000000098661100010000000000000000000000000000006bef1100070000000000000000000000e03c12001100000000000000000000000000000000000000000000000000000000000000c8b01200b09111000000000000000000a066110001000000000000000100000000000000df2d1100100000000101000000000000138212000c0000000000000000ee11000400000000000000000000000000000000000000c8b01200a86611000000000000000000b866110001000000000000000100000000000000342d1100040000000000000000000000ec6511002700000000000000000000000000000000000000000000000000000000000000c8b01200c06611000000000000000000d066110001000000000000000100000000000000d8661100080000000101000000000000138212000c00000000000000e06611000e00000000000000000000000000000000000000c8b01200f066110000000000000000000067110001000000000000000000000000000000f62d1100070000000101000000000000138212000c00000000000000086711002600000000000000000000000000000000000000c8b012003067110000000000000000004067110001000000000000000100000000000000ef2d1100070000000101000000000000138212000c00000000000000486711000b00000000000000000000000000000000000000c8b012004881110000000000000000005467110001000000000000000100000000000000d71a1100050000000205050000000000138212000c00000000000000138212000c00000000000000bc1f11000400000000000000c8b012006c67110000000000000000005c67110001000000000000000000000000000000642d1100080000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200c8911100000000000000000064671100010000000000000000000000000000006c2d11000d0000000105000000000000138212000c00000000000000bc1f11000400000000000000000000000000000000000000c8b012006c67110000000000000000007c67110001000000000000000000000000000000cd1a11000a0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b0120048811100000000000000000084671100010000000000000001000000e26a11001200000052756c65730000003c000000000000000100000051000000796a110054000000cd6a1100150000005665633c4269643c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e3e002b6a11004e00000053757370656e64656443616e646964617465732842616c616e63654f663c542c20493e2c204269644b696e643c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e293c0000000000000001000000510000000a6a1100210000003c0000000000000001000000de000000ba69110050000000806911003a0000005b691100250000003c0000000000000001000000510000003d6911001e0000003c000000000000000100000059000000036911003a000000566f756368696e67566f756368696e6753746174757300003c000000000000000100000051000000ca681100390000005665633c28543a3a426c6f636b4e756d6265722c2042616c616e63654f663c542c20493e293e00003c0000000000000001000000590000007768110053000000537472696b65436f756e740040681100370000000c68110034000000db671100310000003c000000000000000100000051000000c3671100180000008c6711003700000020546865206d6178206e756d626572206f66206d656d6265727320666f722074686520736f6369657479206174206f6e652074696d652e20566f74657320666f722074686520646566656e6465722e2054686520646566656e64696e67206d656d6265722063757272656e746c79206265696e67206368616c6c656e6765642e20446f75626c65206d61702066726f6d2043616e646964617465202d3e20566f746572202d3e20284d617962652920566f74652e20546865206f6e676f696e67206e756d626572206f66206c6f73696e6720766f746573206361737420627920746865206d656d6265722e2050656e64696e67207061796f7574733b206f72646572656420627920626c6f636b206e756d6265722c20776974682074686520616d6f756e7420746861742073686f756c642062652070616964206f75742e204d656d626572732063757272656e746c7920766f756368696e67206f722062616e6e65642066726f6d20766f756368696e6720616761696e205468652063757272656e7420626964732c2073746f726564206f726465726564206279207468652076616c7565206f6620746865206269642e2054686520736574206f662073757370656e646564206d656d626572732e205468652063757272656e7420736574206f66206d656d626572732c206f7264657265642e20546865206d6f7374207072696d6172792066726f6d20746865206d6f737420726563656e746c7920617070726f766564206d656d626572732e20416d6f756e74206f66206f7572206163636f756e742062616c616e63652074686174206973207370656369666963616c6c7920666f7220746865206e65787420726f756e642773206269642873292e2054686520736574206f662073757370656e6465642063616e646964617465732e205468652063757272656e7420736574206f662063616e646964617465733b206269646465727320746861742061726520617474656d7074696e6720746f206265636f6d65206d656d626572732e20412068617368206f66207468652072756c6573206f66207468697320736f636965747920636f6e6365726e696e67206d656d626572736869702e2043616e206f6e6c7920626520736574206f6e636520616e64206f6e6c792062792074686520666f756e6465722e20546865206669727374206d656d6265722e00000000446c110010000000000000006a5c11000f00000000000000c8b01200546c11000000000000000000646c11000100000000000000000000006c6c110012000000000000006a5c11000f00000000000000c8b01200806c11000000000000000000906c1100020000000000000000000000a06c11000a00000000000000847212000300000000000000c8b01200ac6c11000000000000000000bc6c1100020000000000000000000000cc6c11000b000000000000006a5c11000f00000000000000c8b01200d86c11000000000000000000e86c1100010000000000000000000000f06c11000e00000000000000f50812000e00000000000000c8b01200006d11000000000000000000106d1100010000000000000000000000186d11000f00000000000000f50812000e00000000000000c8b01200286d11000000000000000000386d1100010000000000000043616e6469646174654465706f7369743c0000000000000001000000df000000036f11003f00000057726f6e6753696465446564756374696f6e00003c0000000000000001000000e00000007e6e110055000000d36e1100300000004d6178537472696b657300003c0000000000000001000000e1000000036e11005d000000606e11001e000000506572696f645370656e64003c0000000000000001000000e2000000b86d11004b000000526f746174696f6e506572696f6400003c0000000000000001000000e3000000746d1100440000004368616c6c656e6765506572696f64003c0000000000000001000000e4000000406d11003400000020546865206e756d626572206f6620626c6f636b73206265747765656e206d656d62657273686970206368616c6c656e6765732e20546865206e756d626572206f6620626c6f636b73206265747765656e2063616e6469646174652f6d656d6265727368697020726f746174696f6e20706572696f64732e2054686520616d6f756e74206f6620696e63656e7469766520706169642077697468696e206561636820706572696f642e20446f65736e277420696e636c75646520566f7465725469702e20546865206e756d626572206f662074696d65732061206d656d626572206d617920766f7465207468652077726f6e672077617920286f72206e6f7420617420616c6c2c207768656e207468657920617265206120736b657074696329206265666f72652074686579206265636f6d652073757370656e6465642e2054686520616d6f756e74206f662074686520756e70616964207265776172642074686174206765747320646564756374656420696e207468652063617365207468617420656974686572206120736b657074696320646f65736e277420766f7465206f7220736f6d656f6e6520766f74657320696e207468652077726f6e67207761792e20546865206d696e696d756d20616d6f756e74206f662061206465706f73697420726571756972656420666f7220612062696420746f206265206d6164652e000000000000fc2311000d00000000000000a4701100020000000000000000000000d4701100090000000000000000000000092411000f000000000000001c711100010000000000000000000000347111000700000000000000000000001824110010000000000000001c7111000100000000000000000000006c711100080000000000000000000000282411000e00000000000000ac711100020000000000000000000000dc711100130000000000000000000000362411000b00000000000000747211000100000000000000000000008c721100130000000000000000000000412411000700000000000000247311000300000000000000000000006c731100130000000000000000000000971b11000300000000000000047411000200000000000000000000003474110013000000000000000000000048241100090000000000000074721100010000000000000000000000cc7411000e00000000000000000000007c4712000500000000000000814712001500000000000000847f11000b00000000000000203f120023000000b27e11004b000000fd7e11004d0000004a7f110015000000c8b01200000000002a7f12000b000000bc4812000800000085301100190000005f7f110025000000927f12000c00000000000000a77e11000b000000000000008813120016000000587e11003f000000c8b01200000000002a7f12000b000000bc481200080000008530110019000000977e110010000000927f12000c000000d67d1100570000002d7e11002b000000c8b01200000000002a7f12000b000000bc4812000800000085301100190000004531110011000000927f12000c00000000000000ed7a1100060000000000000070a31100070000000000000097d211000300000000000000138212000c000000a77c110057000000c8b01200000000007881120034000000c8b0120000000000fe7c110055000000537d110035000000c8b012000000000041791100580000009979110017000000b07911003b000000c8b0120000000000eb7911001e000000c8b01200000000002a7f12000b000000887d1100270000005d7c110019000000af7d110027000000857f12000d000000927f12000c00000000000000f778110004000000000000008113120007000000f37a110055000000c8b0120000000000487b110038000000c8b0120000000000807b110054000000d47b110051000000257c110014000000c8b01200000000009a75110059000000f375110058000000c8b0120000000000397c110024000000c8b01200000000002a7f12000b0000004b761100090000005d7c110019000000767c110031000000857f12000d000000927f12000c00000000000000ed7a1100060000000000000070a31100070000000000000097d211000300000000000000138212000c00000000000000fb7811000900000000000000845712000c000000047911003d000000c8b0120000000000dc76110055000000317711001d000000c8b012000000000041791100580000009979110017000000b07911003b000000b4771100540000000878110036000000c8b0120000000000eb7911001e000000c8b01200000000002a7f12000b000000097a110050000000597a110051000000aa7a110043000000857f12000d000000927f12000c00000000000000f77811000400000000000000811312000700000000000000fb7811000900000000000000845712000c000000af7611002d000000c8b0120000000000dc76110055000000317711001d000000c8b01200000000009a751100590000004e77110058000000a67711000e000000b4771100540000000878110036000000c8b01200000000003e78110059000000977811000d000000c8b01200000000002a7f12000b0000004b76110009000000a478110040000000e478110013000000927f12000c0000003c75110018000000c8b01200000000007881120034000000c8b01200000000005475110046000000c8b01200000000009a75110059000000f375110058000000c8b01200000000002a7f12000b0000004b7611000900000054761100390000008d76110022000000927f12000c00000020436c6f736520616e64207061796f75742061207469702e2054686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e202d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65642020206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e202d20604f28542960202d204f6e652073746f726167652072657472696576616c2028636f64656320604f285429602920616e642074776f2072656d6f76616c732e202d20557020746f2074687265652062616c616e6365206f7065726174696f6e732e204465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061206d656d626572206f662074686520605469707065727360207365742e2020206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172792020206163636f756e742049442e202d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e2074697020202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e20456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f642068617320737461727465642e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28542960292c206f6e652073746f72616765207265616420604f283129602e202d20557020746f206f6e65206576656e742e686173687469705f76616c7565204769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e202d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626520202061205554462d382d656e636f6465642055524c2e202d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e20456d69747320604e657754697060206966207375636365737366756c2e202d20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e206054602069732020206e61747572616c6c79206361707065642061732061206d656d62657273686970207365742c20605260206973206c696d69746564207468726f756768207472616e73616374696f6e2d73697a652e202d2054776f2073746f7261676520696e73657274696f6e732028636f6465637320604f285229602c20604f28542960292c206f6e65207265616420604f283129602e726561736f6e20526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e204966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e74696669656420627920606861736860206d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f74207468726f75676820607469705f6e657760292e20456d697473206054697052657472616374656460206966207375636365737366756c2e202d204f6e652062616c616e6365206f7065726174696f6e2e202d2054776f2073746f726167652072656d6f76616c7320286f6e6520726561642c20636f64656320604f28542960292e205265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e205061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c20617320605469705265706f72744465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e202d20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e20417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e2052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e202d204f6e6520444220636c6561722e70726f706f73616c5f69642050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e202d204f6e65204442206368616e67652c206f6e6520657874726120444220656e7472792e62656e65666963696172790000000000889112000d000000000000000000000055ef11000d00000000000000000000000000000000000000000000000000000000000000c8b01200488111000000000000000000588111000100000000000000010000000000000062ef110009000000010100000000000055ef11000d00000000000000608111002400000000000000000000000000000000000000c8b012008481110000000000000000009481110001000000000000000000000000000000959112000900000000000000000000009c8111001200000000000000000000000000000000000000000000000000000000000000c8b01200b08111000000000000000000c081110001000000000000000100000000000000c8811100040000000105000000000000811312000700000000000000cc8111003c00000000000000000000000000000000000000c8b01200c8911100000000000000000008821100030000000000000000000000000000002082110007000000010500000000000081131200070000000000000070a311000700000000000000000000000000000000000000c8b01200288211000000000000000000388211000200000000000000000000003c00000000000000010000006b000000148411002900000050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3c000000000000000100000051000000f58311001f0000005665633c50726f706f73616c496e6465783e00003c000000000000000100000059000000b78311003e000000546970734f70656e5469703c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722c20543a3a486173683ef282110056000000488311004f0000009783110020000000526561736f6e73003c00000000000000010000005d00000048821100520000009a821100580000002053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e20696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e2054697073207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e2054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c72656164792067756172616e7465656420746f20626520612073656375726520686173682e2050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e2050726f706f73616c7320746861742068617665206265656e206d6164652e204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e00000000000000008611000c000000000000000c8611000700000000000000c8b0120014861100000000000000000024861100020000000000000000000000348611001300000000000000845712000c00000000000000c8b01200e4861100000000000000000048861100010000000000000000000000508611000b00000000000000f50812000e00000000000000c8b012008c86110000000000000000005c8611000100000000000000000000006486110004000000000000000c8611000700000000000000c8b0120068861100000000000000000078861100010000000000000000000000808611000c00000000000000f50812000e00000000000000c8b012008c86110000000000000000009c861100010000000000000000000000a48611000d00000000000000b18611000700000000000000c8b01200b88611000000000000000000c8861100010000000000000000000000d08611001400000000000000845712000c00000000000000c8b01200e48611000000000000000000f4861100010000000000000000000000fc8611001700000000000000845712000c00000000000000c8b0120014871100000000000000000024871100010000000000000050726f706f73616c426f6e645065726d696c6c003c0000000000000001000000e5000000f8881100550000004d8911004400000050726f706f73616c426f6e644d696e696d756d00a6881100520000005370656e64506572696f640084881100220000004275726e3c0000000000000001000000e60000004088110044000000546970436f756e74646f776e3c0000000000000001000000e7000000ef8711005100000054697046696e6465727346656550657263656e743c0000000000000001000000e8000000a38711004c0000005469705265706f72744465706f736974426173653c0000000000000001000000610000006e871100350000005469705265706f72744465706f73697450657242797465003c0000000000000001000000650000002c871100420000002054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e2e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e2054686520616d6f756e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e2054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e2050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e20506572696f64206265747765656e2073756363657373697665207370656e64732e204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e20416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e6d656d6f727976616c69646174696f6e3a20696d706f727420656e74727920706f696e747320746f2061206e6f6e2d6578697374656e74207479706543616e6e6f7420696d706f727420676c6f62616c736d6f64756c6520696d706f7274732061206e6f6e2d6578697374656e742066756e6374696f6e6d6f64756c6520696d706f72747320606578745f7072696e746c6e60206275742064656275672066656174757265732064697361626c656443616e6e6f7420696d706f7274207461626c65736d6f64756c652068617320696d706f7274732066726f6d2061206e6f6e2d27656e7627206e616d6573706163654d656d6f727920696d706f7274206d757374206861766520746865206669656c64206e616d6520276d656d6f7279274d756c7469706c65206d656d6f727920696d706f72747320646566696e65644d6178696d756d206e756d626572206f662070616765732073686f756c6420626520616c77617973206465636c617265642e52657175657374656420696e697469616c206e756d626572206f662070616765732073686f756c64206e6f74206578636565642074686520726571756573746564206d6178696d756d4d6178696d756d206e756d626572206f662070616765732073686f756c64206e6f74206578636565642074686520636f6e66696775726564206d6178696d756d2e0000000000fc2811000a00000000000000c08c1100010000000000000000000000d88c1100030000000000000000000000c1c411000d00000000000000c08c1100010000000000000000000000f08c1100030000000000000000000000062911000b00000000000000088d1100020000000000000000000000388d1100050000000000000000000000112911000d00000000000000608d1100010000000000000000000000788d11000400000000000000000000001e2911000a00000000000000988d1100010000000000000000000000b08d1100050000000000000000000000282911000900000000000000c08c1100010000000000000000000000d88d1100010000000000000000000000312911000b00000000000000c8b01200000000000000000000000000e08d110001000000000000000000000097d211000300000000000000138212000c0000009f9011001f000000c8b0120000000000be9011002d0000004b90110024000000c8b01200000000006f9011003000000000000000429011000600000000000000138212000c00000000000000489011000300000000000000138212000c000000a08f110030000000c8b0120000000000d08f11002e000000c8b0120000000000fe8f11004400000000000000998f11000700000000000000e03c120011000000f98e1100560000004f8f11001b000000c8b01200000000006a8f11002f00000000000000108212000300000000000000138212000c0000003e8e110036000000c8b0120000000000748e11003d000000c8b0120000000000b18e1100480000000e8e110030000000e88d1100260000002052656d6f766520746865207072696d65206d656d626572206966206974206578697374732e2053657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e2053776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e204d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e205072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64207061737320606d656d6265727360207072652d736f727465642e204d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e6d656d626572732053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e204d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e205072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e72656d6f76656164642052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e204164642061206d656d626572206077686f6020746f20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e496e7374616e6365314d656d626572736869700000000000006bef1100070000000000000000000000e03c12001100000000000000000000000000000000000000000000000000000000000000c8b01200b09111000000000000000000c0911100010000000000000001000000000000007bea1100050000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200c89111000000000000000000d89111000100000000000000000000003c00000000000000010000005900000009921100320000003c000000000000000100000051000000e091110029000000205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e0000000000991911000b0000000000000058921100010000000000000060921100200000002053656e646572206d75737420626520746865205375646f206163636f756e74696e636f7272656374206964656e746974796e6f7420766f7563686564622e6c656e2829203e20313030303b207165649c2d110043000000bc0400003100000000000000d82311001c00000000000000a0931100010000000000000000000000c42311001400000000000000a8931100010000000000000000000000b82311000c00000000000000b0931100010000000000000000000000ac2311000c00000000000000b8931100010000000000000000000000a22311000a00000000000000c0931100010000000000000000000000992311000900000000000000c8931100010000000000000000000000902311000900000000000000d0931100010000000000000000000000872311000900000000000000d89311000100000000000000399511001f0000001e9511001b000000fc94110022000000d994110023000000c09411001900000078941100480000002d9411004b000000e09311004d00000020546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e20546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e20546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e2054686520746970206861736820697320756e6b6e6f776e2e20546865207469702077617320616c726561647920666f756e642f737461727465642e2054686520726561736f6e20676976656e206973206a75737420746f6f206269672e204e6f2070726f706f73616c206174207468617420696e6465782e2050726f706f73657227732062616c616e636520697320746f6f206c6f772e000000007f1b11000b0000000000000050971100010000000000000000000000d1ea1100090000000000000058971100010000000000000000000000721b11000d0000000000000060971100010000000000000000000000691b11000900000000000000689711000100000000000000000000005d1b11000c0000000000000070971100010000000000000000000000551b1100080000000000000078971100010000000000000000000000471b11000e0000000000000080971100010000000000000000000000381b11000f0000000000000088971100010000000000000000000000291b11000f00000000000000909711000100000000000000000000001e1b11000b00000000000000989711000100000000000000000000001a1b11000400000000000000a0971100010000000000000000000000131b11000700000000000000a8971100010000000000000000000000091b11000a00000000000000b0971100010000000000000000000000f91a11001000000000000000b8971100010000000000000000000000ed1a11000c00000000000000c0971100010000000000000000000000cd1a11000a00000000000000c8971100010000000000000000000000e31a11000a00000000000000d0971100010000000000000000000000dc1a11000700000000000000d89711000100000000000000ce99110024000000b8991100160000009e9911001a0000008b991100130000007499110017000000619911001300000048991100190000002199110027000000e79811003a000000cf98110018000000aa981100250000008f9811001b000000729811001d000000559811001d0000003c981100190000001b98110021000000fc9711001f000000e09711001c000000205468652063616c6c6572206973206e6f742074686520686561642e205468652063616c6c6572206973206e6f742074686520666f756e6465722e20546f6f206d616e79206d656d6265727320696e2074686520736f63696574792e2055736572206973206e6f7420612063616e6469646174652e205573657220697320616c726561647920612063616e6469646174652e20557365722068617320616c7265616479206d6164652061206269642e2043616e6e6f742072656d6f76652074686520666f756e6465722e2043616e6e6f742072656d6f7665207468652068656164206f662074686520636861696e2e204d656d626572206973206e6f7420766f756368696e672e204d656d62657220697320616c726561647920766f756368696e67206f722062616e6e65642066726f6d20766f756368696e6720616761696e2e204e6f7420656e6f75676820696e20706f7420746f206163636570742063616e6469646174652e20536f636965747920616c726561647920666f756e6465642e204e6f7468696e6720746f207061796f75742e2055736572206973206e6f742073757370656e6465642e20557365722069732073757370656e6465642e205573657220697320616c72656164792061206d656d6265722e2055736572206973206e6f742061206d656d6265722e20416e20696e636f727265637420706f736974696f6e207761732070726f76696465642e4368617267655472616e73616374696f6e5061796d656e74546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65647265706f72745f6d69736265686176696f723a6772616e6470615f617574686f726974696573446561644163636f756e744578697374696e6756657374696e675363686564756c654b656570416c6976654578697374656e7469616c4465706f736974496e73756666696369656e7442616c616e63654c69717569646974795265737472696374696f6e7356657374696e6742616c616e63657365745f62616c616e63657472616e736665725f6b6565705f616c697665546f74616c49737375616e63654c6f636b73000000000000dc9b110007000000000000004c261200020000000000000000000000e49b1100010000000000000000000000ec9b110008000000000000004c261200020000000000000000000000f49b1100020000000000000000000000049c110008000000000000000c9c1100030000000000000000000000249c11000100000000000000000000002c9c11000a00000000000000389c1100030000000000000000000000509c1100010000000000000000000000589c110007000000000000004c261200020000000000000000000000609c11000100000000000000456e646f77656400659d11002f000000447573744c6f7374f69c110050000000469d11001f0000005472616e73666572c26d120009000000c26d1200090000009027120007000000d09c11002600000042616c616e63655365740000c26d120009000000902712000700000090271200070000009f9c1100310000004465706f73697400689c11003700000020536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20412062616c616e6365207761732073657420627920726f6f74202877686f2c20667265652c207265736572766564292e205472616e7366657220737563636565646564202866726f6d2c20746f2c2076616c7565292e20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e5265706f727473656e74697265206e65775f7365742077617320676976656e20746f206275696c645f737570706f72745f6d61703b20656e20656e747279206d757374206265206372656174656420666f722065616368206974656d3b20716564000000089e11004e000000a9020000230000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f656c656374696f6e732d70687261676d656e2f7372632f6c69622e727350726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b20716564000000000000000000000000a09e11003d000000736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b2071656400000000000000000000000000000000000000009f11004a00000033000000120000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f72756e74696d652f7372632f63757276652e727350656e64696e674368616e6765537461746552616e646f6d6e657373436f6c6c656374697665466c697052616e646f6d4d6174657269616c707265636f6e646974696f6e3a20616c6c20696d706f7274732073686f756c6420626520636865636b656420616761696e737420746865207369676e617475726573206f6620636f72726573706f6e64696e670a09090909090966756e6374696f6e7320646566696e65642062792060646566696e655f656e762160206d6163726f206279207468652075736572206f6620746865206d6163726f3b0a0909090909097369676e617475726573206f662074686573652066756e6374696f6e7320646566696e6564206279206024706172616d73603b0a09090909090963616c6c7320616c77617973206d616465207769746820617267756d656e7473207479706573206f662077686963682061726520646566696e65642062792074686520636f72726573706f6e64696e6720696d706f7274733b0a09090909090974687573207479706573206f6620617267756d656e74732073686f756c6420626520657175616c20746f2074797065206c69737420696e206024706172616d736020616e640a0909090909096c656e677468206f6620617267756d656e74206c69737420616e642024706172616d732073686f756c6420626520657175616c3b0a0909090909097468757320746869732063616e206e6576657220626520604e6f6e65603b0a0909090909097165643b0a090909090909000088a111005500000046000000110000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f636f6e7472616374732f7372632f7761736d2f656e765f6465662f6d6163726f732e72735374616c6c65643c0000000800000004000000e9000000ea0000000000000000000000eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e657874466f72636564000000000000359a1100120000000000000030a3110001000000000000000000000048a3110001000000000000000000000069a31100070000000000000070a311000700000050a3110019000000205265706f727420736f6d65206d69736265686176696f722e5f7265706f72745665633c75383e0000000000b88312000b00000000000000000000009f8d12000d00000000000000000000000000000000000000000000000000000000000000c8b01200e0a511000000000000000000f0a5110004000000000000000100000000000000579f110005000000000000000000000010a611001b00000000000000000000000000000000000000000000000000000000000000c8b012002ca6110000000000000000003ca61100010000000000000001000000000000004a9f11000d000000000000000000000044a611002300000000000000000000000000000000000000000000000000000000000000c8b0120080b81100000000000000000068a6110001000000000000000000000000000000f8a211000a0000000000000000000000f50812000e00000000000000000000000000000000000000000000000000000000000000c8b01200d8a61100000000000000000070a6110001000000000000000000000000000000dda1110007000000000000000000000078a611002000000000000000000000000000000000000000000000000000000000000000c8b0120098a611000000000000000000a8a6110001000000000000000000000000000000ac8d12000c0000000000000000000000b0a611000500000000000000000000000000000000000000000000000000000000000000c8b01200b8a611000000000000000000c8a6110002000000000000000100000000000000c78d12000c0000000101000000000000b0a611000500000000000000179012000c00000000000000000000000000000000000000c8b01200d8a611000000000000000000e8a611000100000000000000000000003c00000000000000010000005900000090a811000b000000c8b01200000000009ba8110058000000f3a811002600000053746f72656453746174653c543a3a426c6f636b4e756d6265723e003c0000000000000001000000ec0000006ca811002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e003ba81100310000000ca811002f00000028543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d626572293c000000000000000100000051000000e8a711002400000053657449640000003c00000000000000010000005200000060a7110057000000b7a71100310000003c000000000000000100000051000000f0a61100700000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e20444550524543415445442054686973207573656420746f2073746f7265207468652063757272656e7420617574686f72697479207365742c20776869636820686173206265656e206d6967726174656420746f207468652077656c6c2d6b6e6f776e204752414e4450415f415554484f5249544945535f4b455920756e686173686564206b65792e00000000000000a76c12000800000000000000cca91100020000000000000000000000fca91100180000000000000000000000ce9a11000b00000000000000bcaa110003000000000000000000000004ab11000d0000000000000000000000b36c12000e000000000000006cab1100030000000000000000000000b4ab1100020000000000000000000000d99a11001300000000000000cca91100020000000000000000000000c4ab11000600000000000000000000001dad11000400000000000000203f120023000000000000007c471200050000000000000021ad110013000000caae110036000000c8b012000000000000af11004200000042af1100480000008aaf110045000000cfaf11002d000000c8b0120000000000fcaf110046000000c8b01200000000002a7f12000b00000042b011004c0000008eb0110033000000c1b011005a000000c8b01200000000001bb1110013000000c8b01200000000002eb111005400000082b111004b000000cdb111003500000002b21100580000005ab2110052000000acb211003e000000c8b0120000000000927f12000c0000000000000097d211000300000000000000203f12002300000000000000b6ae1100080000000000000021ad11001300000000000000beae11000c0000000000000021ad11001300000034ad110025000000c8b012000000000059ad110048000000a1ad110042000000e3ad11004600000029ae110040000000c8b012000000000069ae11002d000000c8b01200000000002a7f12000b00000096ae110020000000b337120031000000927f12000c0000000000000017ad11000600000000000000203f120023000000000000001dad11000400000000000000203f120023000000000000007c471200050000000000000021ad110013000000b8ac1100540000000cad11000b000000f4ab11005400000048ac110010000000c8b012000000000058ac11002f000000c8b012000000000087ac1100310000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e736665722045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e736f7572636564657374436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e6e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e000000000000ec9a11000d00000000000000000000004cb411000a00000000000000000000000000000000000000000000000000000000000000c8b0120058b41100000000000000000068b411000100000000000000010000000000000070b41100070000000101000000000000138212000c0000000000000077b411001700000000000000000000000000000000000000c8b0120090b411000000000000000000a0b4110006000000000000000100000000000000f99a1100050000000101000000000000138212000c00000000000000d0b411001c00000000000000000000000000000000000000c8b01200ecb411000000000000000000fcb4110002000000000000000100000000000000ac9012000e0000000000000000000000145a12000800000000000000000000000000000000000000000000000000000000000000c8b012000cb5110000000000000000002c5a1200030000000000000001000000543a3a42616c616e636500003c0000000000000001000000de00000084b61100260000004163636f756e744163636f756e74446174613c543a3a42616c616e63653e00003c0000000000000001000000ed00000093b511001b000000c8b0120000000000aeb511005600000004b6110030000000c8b012000000000034b61100500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e3c0000000000000001000000590000001cb511002e0000004ab51100490000003c00000000000000010000005100000020416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054484953204d4159204e4556455220424520494e204558495354454e434520414e4420594554204841564520412060746f74616c28292e69735f7a65726f2829602e2049662074686520746f74616c2069732065766572207a65726f2c207468656e2074686520656e747279202a4d5553542a2062652072656d6f7665642e204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e000000000000869a110012000000000000004cb411000a00000000000000c8b01200e4b611000000000000000000f4b6110001000000000000003c000000000000000100000061000000fcb611003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e00000000000000949d11000700000001010000000000003cb811000d0000000000000049b811003400000000000000000000000000000000000000c8b0120080b81100000000000000000090b811000100000000000000000000000000000098b81100160000000201010000000000ff8e12000400000000000000038f12000e00000000000000aeb811001200000000000000c8b0120050bd11000000000000000000c0b8110001000000000000000100000000000000f58d1200120000000101000000000000ff8e1200040000000000000070a311000700000000000000000000000000000000000000c8b01200c8b811000000000000000000d8b811000600000000000000010000005265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e0000003c00000000000000010000005100000071ba110052000000436f6e63757272656e745265706f727473496e6465785665633c5265706f727449644f663c543e3e27ba11004a0000003c00000000000000010000005900000008b9110044000000c8b01200000000004cb911002f000000c8b01200000000007bb9110052000000cdb911005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e72616e206f7574206f662067617320647572696e6720636f6e747261637420657865637574696f6e72657475726e2074797065206572726f7276616c69646174696f6e206572726f72636f6e7472616374207472617070656420647572696e6720657865637574696f6e000000696d2d6f6e6c696e653a6f66666c696e000000006f91120011000000000000000000000098bb11000a00000000000000000000000000000000000000000000000000000000000000c8b01200a4bb11000000000000000000c8b012000000000000000000010000004d756c7469706c69657200003c0000000000000001000000520000000000000024bc11001200000000000000845712000c00000000000000c8b0120038bc1100000000000000000048bc110001000000000000000000000050bc11001200000000000000845712000c00000000000000c8b0120064bc1100000000000000000074bc110001000000000000005472616e73616374696f6e4261736546656500003c000000000000000100000065000000bfbc1100370000005472616e73616374696f6e4279746546656500003c0000000000000001000000640000007cbc110043000000205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b2074686520626173652e000000000000749f11000e0000000000000000000000dc1512000c00000000000000000000000000000000000000000000000000000000000000c8b0120050bd1100000000000000000060bd11000300000000000000010000003c00000000000000010000005900000078bd110058000000d0bd11005800000028be11001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e000000000000002a9a11000b00000000000000acbe11000200000000000000000000001e9a11000c00000000000000bcbe1100020000000000000000000000119a11000d00000000000000ccbe11000100000000000000000000000a9a11000700000000000000d4be11000100000000000000b5bf110042000000f7bf11002a00000047bf1100450000008cbf1100290000000cbf11003b000000dcbe1100300000002043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e00000000000000c09a11000e0000000000000004c11100010000000000000000000000ab9a110015000000000000000cc1110001000000000000000000000011e61100080000000000000014c11100010000000000000000000000989a110013000000000000001cc11100010000000000000000000000869a1100120000000000000024c111000100000000000000000000007d9a110009000000000000002cc11100010000000000000000000000669a1100170000000000000034c111000100000000000000000000005b9a11000b000000000000003cc11100010000000000000066c211002700000034c211003200000017c211001d000000f9c111001e000000bec111003b0000009ac111002400000067c111003300000044c11100230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c75654469676573744974656d206e6f7420657175616c486561644f66566f7465734f66566f7465734f66000000c0c211001a0000004552524f523a20436f7272757074656420737461746520617420417574686f726f766572666c6f77206d756c7469706c79696e6720676173206c696d6974206279207072696365003c0000000000000001000000ee000000ef000000f0000000f1000000f2000000f3000000636f6e74726163742073756273797374656d20726573756c74696e6720696e20706f73697469766520696d62616c616e6365214f6c64556e636c65556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e747365745f756e636c6573496e76616c69644f726967696e496e73756666696369656e7443616e64696461746546756e647352756e6e65725375626d69744d656d6265725375626d69744475706c69636174656443616e6469646174655265706f727453656c664d7573744265566f746572556e61626c65546f506179426f6e644c6f7742616c616e63654d6178696d756d566f7465734578636565646564546f6f4d616e79566f7465734e6f566f746573556e61626c65546f566f746572656d6f76655f766f7465727265706f72745f646566756e63745f766f7465727375626d69745f63616e64696461637972656e6f756e63655f63616e64696461637972656d6f76655f6d656d6265725374616b654f6600000000000000b4c511000700000000000000bcc51100010000000000000000000000c4c51100020000000000000000000000d4c511000900000000000000c8b01200000000000000000000000000e0c51100010000000000000000000000e8c511000c000000000000005ce81100010000000000000000000000f4c5110002000000000000000000000004c611000f000000000000005ce8110001000000000000000000000014c611000100000000000000000000001cc611000d000000000000002cc6110003000000000000000000000044c6110002000000000000004e65775465726d0031c81100190000008bc7110055000000e0c7110051000000456d7074795465726d00000055c71100360000004d656d6265724b69636b6564f7c611005100000048c711000d0000004d656d62657252656e6f756e63656400cfc6110028000000566f7465725265706f72746564000000c26d120009000000c26d12000900000000ee11000400000054c6110058000000acc6110023000000204120766f7465722028666972737420656c656d656e742920776173207265706f72746564202862797420746865207365636f6e6420656c656d656e742920776974682074686520746865207265706f7274206265696e67207375636365737366756c206f72206e6f742028746869726420656c656d656e74292e2041206d656d626572206861732072656e6f756e6365642074686569722063616e6469646163792e2041206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f742060456d7074795465726d602e204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e2041206e6577207465726d2077697468206e6577206d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e6469646174657320657869737465642c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e5665633c284163636f756e7449642c2042616c616e6365293e00003c0000000000000001000000f40000003c0000000000000001000000f500000076616c75652073697a652065786365656473206d6178696d756d556e636c657343616e6469646174657352756e6e657273557072656163686564206d6178696d756d2064657074682c2063616e6e6f74206d616b6520612063616c6c6e6f7420656e6f7567682067617320746f2070617920626173652063616c6c2066656500f60000001800000004000000f7000000f8000000f9000000fa000000fb000000fc00000061206e657374656420657865637574696f6e20636f6e74657874206d7573742068617665206120706172656e743b207165640000a4c91100460000009801000026000000636f6e74726163742063616e6e6f742062652064657374726f79656420647572696e672072656375727369766520657865637574696f6e636f6e747261637420686173206265656e20657669637465642f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f636f6e7472616374732f7372632f657865632e72736e6f7420656e6f7567682067617320746f20706179207472616e736665722066656562616c616e636520746f6f206c6f7720746f2073656e642076616c756576616c756520746f6f206c6f7720746f20637265617465206163636f756e7464657374696e6174696f6e2062616c616e636520746f6f206869676820746f20726563656976652076616c756572656163686564206d6178696d756d2064657074682c2063616e6e6f7420696e7374616e7469617465416c69766520636f6e7472616374206f7220746f6d6273746f6e6520616c726561647920657869737473696e73756666696369656e742072656d61696e696e672062616c616e63656e6f7420656e6f7567682067617320746f20706179206261736520696e7374616e74696174652066656500000000c2c311000a000000000000003ccb110001000000000000000000000054cb110001000000000000000000000075cb11000a000000000000007fcb11000e0000005ccb1100190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e0000000000000086c8110006000000000000000000000098cc11003a00000000000000000000000000000000000000000000000000000000000000c8b01200d4cc11000000000000000000e4cc110001000000000000000100000000000000dac21100060000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b01200eccc11000000000000000000fccc1100010000000000000000000000000000009e8312000c000000000000000000000000ee11000400000000000000000000000000000000000000000000000000000000000000c8b0120004cd1100000000000000000014cd11000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e00003c00000000000000010000005900000064cd1100070000003c0000000000000001000000510000004bcd1100190000003c0000000000000001000000510000001ccd11002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c65730000000000f3ea1100040000000000000074ce1100020000000000000000000000a4ce11000f00000000000000000000007fc411000c00000000000000c8b012000000000000000000000000001ccf11000700000000000000000000008bc41100140000000000000054cf11000100000000000000000000006ccf11000d00000000000000000000009fc411001000000000000000c8b01200000000000000000000000000d4cf11000d0000000000000000000000afc411001200000000000000c8b012000000000000000000000000003cd01100090000000000000000000000c1c411000d0000000000000084d011000100000000000000000000009cd011000d0000000000000000000000f3d911000500000000000000e03c120011000000000000007c4712000500000000000000814712001500000059d8110041000000c8b01200000000009ad8110014000000aed8110012000000c0d811002b000000c8b0120000000000ebd811005700000042d911005700000099d9110028000000c8b01200000000002a7f12000b0000005fd211000b0000004dd811000c000000c1d9110032000000927f12000c00000005d8110048000000c8b01200000000002a7f12000b0000005fd211000b0000004dd811000c00000046d611000d000000927f12000c00000000000000ffd711000600000000000000203f12002300000053d6110057000000aad611005700000001d7110017000000c8b012000000000018d71100220000003ad71100530000008dd711002d000000c8b01200000000002a7f12000b0000005fd211000b000000bad711004500000046d611000d000000927f12000c00000004d511001e000000c8b012000000000022d51100190000003bd511003b00000076d511004b000000c1d511005500000016d611000d000000c8b01200000000002a7f12000b0000005fd211000b00000023d611002300000046d611000d000000927f12000c0000009ad2110054000000eed2110010000000fed21100500000004ed311003d0000008bd3110056000000e1d311002100000002d411005300000055d4110056000000abd41100590000000000000097d211000300000000000000203f12002300000004d11100570000005bd1110020000000c8b01200000000007bd1110056000000d1d111003d000000c8b01200000000000ed2110051000000c8b01200000000002a7f12000b0000005fd211000b0000006ad211001600000080d2110017000000927f12000c0000002052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f6620746865206f7574676f696e67206d656d62657220697320736c61736865642e20496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20726f756e6420697320737461727465642e204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e20232323232053746174652052656164733a204f28646f5f70687261676d656e29205772697465733a204f28646f5f70687261676d656e2977686f2052656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c206f7574636f6d65732065786973743a202d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c2074686520626f6e64206973202020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e202d20606f726967696e6020697320612063757272656e742072756e6e65722075702e20496e207468697320636173652c2074686520626f6e6420697320756e72657365727665642c2072657475726e656420616e642020206f726967696e2069732072656d6f76656420617320612072756e6e65722e202d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c2074686520626f6e6420697320756e726573657276656420616e64206f726967696e20697320202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e20202053696d696c617220746f205b6072656d6f76655f766f746572605d2c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865792061726520696d6d6564696174656c7920757365642e205375626d6974206f6e6573656c6620666f722063616e6469646163792e20412063616e6469646174652077696c6c206569746865723a2020202d204c6f73652061742074686520656e64206f6620746865207465726d20616e6420666f7266656974207468656972206465706f7369742e2020202d2057696e20616e64206265636f6d652061206d656d6265722e204d656d626572732077696c6c206576656e7475616c6c7920676574207468656972207374617368206261636b2e2020202d204265636f6d6520612072756e6e65722d75702e2052756e6e6572732d75707320617265207265736572766564206d656d6265727320696e2063617365206f6e65206765747320666f72636566756c6c79202020202072656d6f7665642e2052656164733a204f284c6f674e2920476976656e204e2063616e646964617465732e205772697465733a204f283129205265706f727420607461726765746020666f72206265696e6720616e20646566756e637420766f7465722e20496e2063617365206f6620612076616c6964207265706f72742c20746865207265706f727465722069732072657761726465642062792074686520626f6e6420616d6f756e74206f662060746172676574602e204f74686572776973652c20746865207265706f7274657220697473656c662069732072656d6f76656420616e6420746865697220626f6e6420697320736c61736865642e204120646566756e637420766f74657220697320646566696e656420746f2062653a2020202d206120766f7465722077686f73652063757272656e74207375626d697474656420766f7465732061726520616c6c20696e76616c69642e20692e652e20616c6c206f66207468656d20617265206e6f20202020206c6f6e67657220612063616e646964617465206e6f7220616e20616374697665206d656d6265722e2052656164733a204f284e4c6f674d2920676976656e204d2063757272656e742063616e6469646174657320616e64204e20766f74657320666f722060746172676574602e7461726765742052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e732074686520626f6e642e2052656164733a204f28312920566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e205468652060766f746573602073686f756c643a2020202d206e6f7420626520656d7074792e2020202d206265206c657373207468616e20746865206e756d626572206f662063616e646964617465732e2055706f6e20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e64206120626f6e6420616d6f756e742069732072657365727665642e2049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f206e6f7420706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636b20616e64206b65657020736f6d6520666f722066757274686572207472616e73616374696f6e732e205772697465733a204f28562920676976656e2060566020766f7465732e205620697320626f756e6465642062792031362e766f746573000000006bef110007000000000000000000000008dc11002100000000000000000000000000000000000000000000000000000000000000c8b0120034dc110000000000000000002cdc11000100000000000000010000000000000096c8110009000000000000000000000008dc11002100000000000000000000000000000000000000000000000000000000000000c8b0120034dc1100000000000000000044dc1100010000000000000001000000000000004d8c12000e0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b012004cdc110000000000000000005cdc110001000000000000000100000000000000aec21100070000000101010000000000138212000c00000000000000e03c12001100000000000000000000000000000000000000c8b0120084dc1100000000000000000064dc110001000000000000000100000000000000cec41100070000000101000000000000138212000c00000000000000845712000c00000000000000000000000000000000000000c8b012006cdc110000000000000000007cdc1100010000000000000001000000000000008cc811000a0000000000000000000000e03c12001100000000000000000000000000000000000000000000000000000000000000c8b0120084dc1100000000000000000094dc11000200000000000000010000005665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e00000044de11003c0000003c000000000000000100000059000000f2dd1100520000003c00000000000000010000006b000000a2dd11005000000062dd1100400000003c0000000000000001000000de00000049dd1100190000003c000000000000000100000059000000a4dc110059000000fddc11004c000000205468652070726573656e742063616e646964617465206c6973742e20536f72746564206261736564206f6e206163636f756e742d69642e20412063757272656e74206d656d626572206f7220612072756e6e65722063616e206e6576657220656e746572207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e204c6f636b6564207374616b65206f66206120766f7465722e20566f746573206f66206120706172746963756c617220766f7465722c20776974682074686520726f756e6420696e646578206f662074686520766f7465732e2054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e205468652063757272656e742072756e6e6572735f75702e20536f72746564206261736564206f6e206c6f7720746f2068696768206d657269742028776f72736520746f20626573742072756e6e6572292e205468652063757272656e7420656c6563746564206d656d626572736869702e20536f72746564206261736564206f6e206163636f756e742069642e0000000098df11000d00000000000000845712000c00000000000000c8b01200a8df11000000000000000000c8b01200000000000000000000000000b8df11000a00000000000000845712000c00000000000000c8b01200c4df11000000000000000000c8b01200000000000000000000000000d4df11000e00000000000000847212000300000000000000c8b01200e4df11000000000000000000c8b01200000000000000000000000000f4df11001000000000000000847212000300000000000000c8b0120004e011000000000000000000c8b0120000000000000000000000000014e011000c00000000000000f50812000e00000000000000c8b0120020e011000000000000000000c8b01200000000000000000043616e646964616379426f6e640000003c0000000000000001000000df000000566f74696e67426f6e6400003c000000000000000100000061000000446573697265644d656d6265727300003c0000000000000001000000fd0000004465736972656452756e6e65727355703c0000000000000001000000fe0000005465726d4475726174696f6e3c0000000000000001000000e400000000000000b0c311001200000000000000f4e01100010000000000000000000000a0c311001000000000000000fce0110001000000000000000000000093c311000d0000000000000004e1110001000000000000000000000087c311000c000000000000000ce111000100000000000000000000007bc311000c0000000000000014e1110001000000000000000000000067c3110014000000000000001ce111000100000000000000000000005fc31100080000000000000024e111000100000000000000e1e1110023000000c0e1110021000000afe111001100000099e111001600000079e11100200000005ae111001f0000002ce111002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e0000000073c411000c000000000000008ce311000100000000000000000000006cc41100070000000000000094e3110001000000000000000000000060c411000c000000000000009ce311000100000000000000000000004cc411001400000000000000a4e3110001000000000000000000000042c411000a00000000000000ace3110001000000000000000000000033c411000f00000000000000b4e3110001000000000000000000000028c411000b00000000000000bce311000100000000000000000000001ec411000a00000000000000c4e311000100000000000000000000000bc411001300000000000000cce31100010000000000000000000000ffc311000c00000000000000d4e31100010000000000000000000000f3c311000c00000000000000dce31100010000000000000000000000d9c311001a00000000000000e4e31100010000000000000000000000ccc311000d00000000000000ece31100010000000000000000000000d1ea11000900000000000000f4e311000100000000000000aee511003100000088e511002600000066e51100220000003fe51100270000000de5110032000000eee411001f000000dde4110011000000c9e4110014000000a8e411002100000085e411002300000062e41100230000003ce41100260000000ae4110032000000fce311000e000000204e6f742061206d656d6265722e204f726967696e206973206e6f7420612063616e6469646174652c206d656d626572206f7220612072756e6e65722075702e2043616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e2052756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e204d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e204475706c6963617465642063616e646964617465207375626d697373696f6e2e2043616e6e6f74207265706f72742073656c662e204d757374206265206120766f7465722e20566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2043616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e2043616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e2043616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e204d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e2043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e496e7374616e636532436f6c6c656374697665496e7374616e636531436f6c6c656374697665416c726561647950726f78794f766572666c6f775374696c6c4163746976655468726573686f6c64416c7265616479566f756368656444656c6179506572696f644e6f74467269656e644e6f7453746172746564416c726561647953746172746564416c72656164795265636f76657261626c654e6f745265636f76657261626c654e6f74536f727465644d6178467269656e64734e6f74456e6f756768467269656e64735a65726f5468726573686f6c644e6f74416c6c6f77656461735f7265636f76657265647365745f7265636f76657265646372656174655f7265636f76657279696e6974696174655f7265636f76657279766f7563685f7265636f76657279636c61696d5f7265636f76657279636c6f73655f7265636f7665727972656d6f76655f7265636f7665727963616e63656c5f7265636f766572656400000000004ce811000f000000000000005ce8110001000000000000000000000064e811000100000000000000000000006ce81100110000000000000080e8110002000000000000000000000090e8110001000000000000000000000098e811000f00000000000000a8e81100030000000000000000000000c0e81100010000000000000000000000c8e811000e0000000000000080e81100020000000000000000000000d8e81100010000000000000000000000e0e81100100000000000000080e81100020000000000000000000000f0e81100010000000000000000000000f8e811000f000000000000005ce8110001000000000000000000000008e9110001000000000000005265636f766572794372656174656400c26d12000900000049ea1100320000005265636f76657279496e69746961746564000000c26d120009000000c26d12000900000008ea1100410000005265636f76657279566f756368656400c26d120009000000c26d120009000000c26d120009000000b8e91100500000005265636f76657279436c6f73656400007ae911003e0000004163636f756e745265636f766572656443e91100370000005265636f7665727952656d6f7665640010e91100330000002041207265636f766572792070726f6365737320686173206265656e2072656d6f76656420666f7220616e206163636f756e74204163636f756e745f3120686173206265656e207375636365737366756c6c79207265636f7665726564206279206163636f756e745f322041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20636c6f7365642041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20766f756368656420666f72206279206163636f756e745f332041207265636f766572792070726f6365737320686173206265656e20696e6974696174656420666f72206163636f756e745f31206279206163636f756e745f322041207265636f766572792070726f6365737320686173206265656e2073657420757020666f7220616e206163636f756e745072696d65546f6f4561726c79416c7265616479496e697469616c697a65644475706c6963617465566f746557726f6e67496e64657850726f706f73616c4d697373696e674475706c696361746550726f706f73616c4e6f744d656d6265727365745f6d656d626572736578656375746570726f706f7365766f7465636c6f73650000000030ec1100080000000000000038ec110004000000000000000000000058ec110002000000000000000000000068ec1100050000000000000070ec110005000000000000000000000098ec1100020000000000000000000000a8ec11000800000000000000b0ec1100010000000000000000000000b8ec1100010000000000000000000000c0ec11000b00000000000000b0ec1100010000000000000000000000ccec1100010000000000000000000000d4ec11000800000000000000dcec1100020000000000000000000000ecec1100010000000000000000000000f4ec11000e00000000000000dcec110002000000000000000000000004ed11000100000000000000000000000ced1100060000000000000014ed11000300000000000000000000002ced1100010000000000000050726f706f736564c26d12000900000055ef11000d00000065ed11000400000069ed11000b000000f2ee11005300000045ef110010000000566f746564000000c26d12000900000065ed11000400000000ee11000400000069ed11000b00000069ed11000b0000006aee110042000000acee110046000000417070726f76656465ed11000400000039ee110031000000446973617070726f7665640004ee110035000000457865637574656465ed11000400000000ee110004000000bfed1100410000004d656d6265724578656375746564000074ed11004b000000436c6f736564000065ed11000400000069ed11000b00000069ed11000b00000034ed11003100000020412070726f706f73616c2077617320636c6f73656420616674657220697473206475726174696f6e207761732075702e486173684d656d626572436f756e7420412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e2041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e626f6f6c2041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e6720612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e2041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292e50726f706f73616c496e64657850726f706f73616c734d656d62657273566f74696e67486973746f726963616c53657373696f6e73000000000000c1e611000c0000000000000018f1110002000000000000000000000048f111000d0000000000000000000000cde611000d00000000000000b0f11100020000000000000000000000e0f111000d0000000000000000000000dae611000f0000000000000048f2110003000000000000000000000090f211001b0000000000000000000000e9e61100110000000000000068f3110001000000000000000000000080f31100160000000000000000000000fae611000e00000000000000b0f1110002000000000000000000000030f4110019000000000000000000000008e711000e0000000000000068f31100010000000000000000000000f8f4110014000000000000000000000016e711000e0000000000000098f51100010000000000000000000000b0f5110014000000000000000000000024e711000f00000000000000c8b0120000000000000000000000000050f6110015000000000000000000000033e71100100000000000000068f31100010000000000000000000000f8f611000b0000000000000000000000250512000700000000000000138212000c00000000000000fb8512000400000000000000500b120017000000370a120029000000c8b012000000000088f7110045000000cdf711003a000000c8b012000000000007f811000c000000600a120049000000a90a120040000000c8b01200000000002a7f12000b000000e90a1200250000000e0b120042000000927f12000c00000000000000330a12000400000000000000138212000c00000000000000b3fd11000700000000000000138212000c00000003091200470000004a0912001d000000c8b01200000000006709120032000000c8b012000000000007f811000c000000990912002e000000c709120047000000c8b01200000000002a7f12000b0000000e0a120019000000270a12000c000000927f12000c00000000000000d60812000700000000000000e03c12001100000000000000dd0812000900000000000000e60812000300000000000000e90812000c00000000000000f50812000e0000002c05120057000000c8b0120000000000830512004c000000cf05120052000000210612002f000000c8b01200000000007881120034000000c8b012000000000007f811000c00000050061200490000009906120035000000ce0612004c0000001a071200470000006107120025000000860712004f000000d50712003a000000c8b01200000000002a7f12000b0000000f0812001a000000290812004b000000740812003b000000e304120027000000af08120027000000857f12000d000000c8b012000000000078fb11001b000000927f12000c00000000000000250512000700000000000000138212000c000000d30212003b000000c8b01200000000000e0312004700000055031200490000009e0312002e000000c8b01200000000007881120034000000c8b012000000000007f811000c000000cc031200450000001104120040000000c8b01200000000002a7f12000b000000510412003e0000008f04120054000000e30412002700000002001200390000000a0512001b000000857f12000d000000c8b012000000000078fb11001b000000927f12000c0000007d0012004a000000c70012001a000000c8b0120000000000e10012004a0000002b0112001d000000c8b012000000000007f811000c00000048011200350000007d01120044000000c101120015000000c8b0120000000000d6011200490000001f02120009000000c8b01200000000002a7f12000b00000034ff11003f00000073ff110047000000baff110048000000280212003b00000063021200470000003b00120027000000857f12000d000000c8b0120000000000aa02120029000000927f12000c000000bafd11003d000000c8b0120000000000f7fd11004b00000042fe11004700000089fe11004c000000c8b012000000000007f811000c000000d5fe11004b00000020ff110014000000c8b01200000000002a7f12000b00000034ff11003f00000073ff110047000000baff11004800000002001200390000003b00120027000000857f12000d000000c8b0120000000000620012001b000000927f12000c00000000000000b3fd11000700000000000000138212000c00000093fb110045000000d8fb11001a000000c8b0120000000000f2fb1100480000003afc11003e000000c8b012000000000027fa11004100000078fc11003c000000c8b012000000000007f811000c000000b4fc110044000000c8b01200000000002a7f12000b000000f8fc11002100000019fd11004f00000068fd110030000000857f12000d000000c8b012000000000098fd11001b000000927f12000c0000009df8110057000000c8b0120000000000f4f811004500000039f9110042000000c8b01200000000007bf9110049000000c4f9110026000000eaf911003d000000c8b012000000000027fa11004100000068fa110039000000c8b01200000000002a7f12000b000000a1fa110018000000b9fa11004a00000003fb11004e00000051fb110027000000857f12000d000000c8b012000000000078fb11001b000000927f12000c00000050f7110038000000c8b012000000000088f7110045000000cdf711003a000000c8b012000000000007f811000c00000013f8110046000000c8b01200000000002a7f12000b00000059f8110044000000927f12000c0000002043616e63656c20746865206162696c69747920746f20757365206061735f7265636f76657265646020666f7220606163636f756e74602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746f2062652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e20506172616d65746572733a202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f75206172652061626c6520746f2063616c6c206f6e2d626568616c662d6f662e202d204f6e652073746f72616765206d75746174696f6e20746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f2831292052656d6f766520746865207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205265636f7665726564206163636f756e747320617265207374696c6c2061636365737369626c652e204e4f54453a205468652075736572206d757374206d616b65207375726520746f2063616c6c2060636c6f73655f7265636f7665727960206f6e20616c6c20616374697665207265636f7665727920617474656d707473206265666f72652063616c6c696e6720746869732066756e6374696f6e20656c73652069742077696c6c206661696c2e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e20746865207265636f76657261626c65206163636f756e742077696c6c20756e72657365727665207468656972207265636f7665727920636f6e66696775726174696f6e206465706f7369742e202860436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732920546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061207265636f76657261626c65206163636f756e742028692e652e206861732061207265636f7665727920636f6e66696775726174696f6e292e204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f206765742074686520707265666978206974657261746f7220666f7220616374697665207265636f7665726965732e204f283129202d204f6e652073746f7261676520726561642f72656d6f766520746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652062616c616e63652063616c6c20746f20756e72657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2846202b2058292041732074686520636f6e74726f6c6c6572206f662061207265636f76657261626c65206163636f756e742c20636c6f736520616e20616374697665207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e2c20746865207265636f76657261626c65206163636f756e742077696c6c207265636569766520746865207265636f76657279206465706f73697420605265636f766572794465706f7369746020706c616365642062792074686520726573637565722e207265636f76657261626c65206163636f756e74207769746820616e20616374697665207265636f766572792070726f6365737320666f722069742e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f207265736375652074686973207265636f76657261626c65206163636f756e742e204b65793a205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f7261676520726561642f72656d6f766520746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652062616c616e63652063616c6c20746f20726570617472696174652072657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2856202b2058297265736375657220416c6c6f772061207375636365737366756c207265736375657220746f20636c61696d207468656972207265636f7665726564206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061202272657363756572222077686f20686173207375636365737366756c6c7920636f6d706c6574656420746865206163636f756e74207265636f766572792070726f636573733a20636f6c6c656374656420607468726573686f6c6460206f72206d6f726520766f75636865732c20776169746564206064656c61795f706572696f646020626c6f636b732073696e636520696e6974696174696f6e2e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f20636c61696d20686173206265656e207375636365737366756c6c792020207265636f766572656420627920796f752e204b65793a204620286c656e206f6620667269656e647320696e20636f6e666967292c205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f72616765207265616420746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652073746f72616765207265616420746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f283129202d204f6e652073746f726167652077726974652e204f2831292c20436f646563204f2856292e20546f74616c20436f6d706c65786974793a204f2846202b20562920416c6c6f7720612022667269656e6422206f662061207265636f76657261626c65206163636f756e7420746f20766f75636820666f7220616e20616374697665207265636f766572792070726f6365737320666f722074686174206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520612022667269656e642220666f7220746865207265636f76657261626c65206163636f756e742e202d20606c6f7374603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f2072657363756520746865206c6f7374206163636f756e74207468617420796f7520202077616e7420746f20766f75636820666f722e2054686520636f6d62696e6174696f6e206f662074686573652074776f20706172616d6574657273206d75737420706f696e7420746f20616e20616374697665207265636f766572792070726f636573732e202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c6572206973206120667269656e642e204f286c6f674629202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c657220686173206e6f7420616c726561647920766f75636865642e204f286c6f67562920546f74616c20436f6d706c65786974793a204f2846202b206c6f6746202b2056202b206c6f67562920496e697469617465207468652070726f6365737320666f72207265636f766572696e672061207265636f76657261626c65206163636f756e742e205061796d656e743a20605265636f766572794465706f736974602062616c616e63652077696c6c20626520726573657276656420666f7220696e6974696174696e6720746865207265636f766572792070726f636573732e2054686973206465706f7369742077696c6c20616c7761797320626520726570617472696174656420746f20746865206163636f756e7420747279696e6720746f206265207265636f76657265642e205365652060636c6f73655f7265636f76657279602e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e2054686973206163636f756e742020206e6565647320746f206265207265636f76657261626c652028692e652e20686176652061207265636f7665727920636f6e66696775726174696f6e292e202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973207265636f76657261626c652e204f284629202d204f6e652073746f72616765207265616420746f20636865636b20746861742074686973207265636f766572792070726f63657373206861736e277420616c726561647920737461727465642e204f283129202d204f6e652063757272656e63792072657365727665206f7065726174696f6e2e204f285829202d204f6e652073746f726167652077726974652e204f2831292e6163636f756e74204372656174652061207265636f7665727920636f6e66696775726174696f6e20666f7220796f7572206163636f756e742e2054686973206d616b657320796f7572206163636f756e74207265636f76657261626c652e205061796d656e743a2060436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732062616c616e63652077696c6c20626520726573657276656420666f722073746f72696e6720746865207265636f7665727920636f6e66696775726174696f6e2e2054686973206465706f7369742069732072657475726e656420696e2066756c6c207768656e2074686520757365722063616c6c73206072656d6f76655f7265636f76657279602e202d2060667269656e6473603a2041206c697374206f6620667269656e647320796f7520747275737420746f20766f75636820666f72207265636f7665727920617474656d7074732e20202053686f756c64206265206f72646572656420616e6420636f6e7461696e206e6f206475706c69636174652076616c7565732e202d20607468726573686f6c64603a20546865206e756d626572206f6620667269656e64732074686174206d75737420766f75636820666f722061207265636f7665727920617474656d70742020206265666f726520746865206163636f756e742063616e206265207265636f76657265642e2053686f756c64206265206c657373207468616e206f7220657175616c20746f202020746865206c656e677468206f6620746865206c697374206f6620667269656e64732e202d206064656c61795f706572696f64603a20546865206e756d626572206f6620626c6f636b732061667465722061207265636f7665727920617474656d707420697320696e697469616c697a656420202074686174206e6565647320746f2070617373206265666f726520746865206163636f756e742063616e206265207265636f76657265642e202d204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973206e6f7420616c7265616479207265636f76657261626c652e204f2831292e202d204120636865636b20746861742074686520667269656e6473206c69737420697320736f7274656420616e6420756e697175652e204f284629202d204f6e652073746f726167652077726974652e204f2831292e20436f646563204f2846292e667269656e64737468726573686f6c6475313664656c61795f706572696f64543a3a426c6f636b4e756d62657220416c6c6f7720524f4f5420746f2062797061737320746865207265636f766572792070726f6365737320616e642073657420616e20612072657363756572206163636f756e7420666f722061206c6f7374206163636f756e74206469726563746c792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f524f4f545f2e202d20606c6f7374603a2054686520226c6f7374206163636f756e742220746f206265207265636f76657265642e202d206072657363756572603a20546865202272657363756572206163636f756e74222077686963682063616e2063616c6c20617320746865206c6f7374206163636f756e742e202d204f6e652073746f72616765207772697465204f283129202d204f6e65206576656e746c6f73742053656e6420612063616c6c207468726f7567682061207265636f7665726564206163636f756e742e202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f752077616e7420746f206d616b6520612063616c6c206f6e2d626568616c662d6f662e202d206063616c6c603a205468652063616c6c20796f752077616e7420746f206d616b65207769746820746865207265636f7665726564206163636f756e742e202d2054686520776569676874206f6620746865206063616c6c60202b2031302c3030302e202d204f6e652073746f72616765206c6f6f6b757020746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f283129426f783c3c542061732054726169743e3a3a43616c6c3e5265636f766572790000000000780c12000b0000000101000000000000138212000c00000000000000830c12003a00000000000000000000000000000000000000c8b01200c00c12000000000000000000d00c120001000000000000000000000000000000d80c1200100000000205050000000000138212000c00000000000000138212000c00000000000000e80c12003a00000000000000c8b01200240d12000000000000000000340d120004000000000000000000000000000000540d1200050000000101000000000000138212000c00000000000000138212000c00000000000000000000000000000000000000c8b012001c1a120000000000000000005c0d12000300000000000000000000005265636f76657261626c655265636f76657279436f6e6669673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000003c000000000000000100000051000000600e1200420000004163746976655265636f7665726965734163746976655265636f766572793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e00003c000000000000000100000051000000d60d12001a000000c8b0120000000000f00d120045000000350e12002b00000050726f7879000000740d120024000000c8b0120000000000980d12003e00000020546865206c697374206f6620616c6c6f7765642070726f7879206163636f756e74732e204d61702066726f6d2074686520757365722077686f2063616e2061636365737320697420746f20746865207265636f7665726564206163636f756e742e20416374697665207265636f7665727920617474656d7074732e204669727374206163636f756e7420697320746865206163636f756e7420746f206265207265636f76657265642c20616e6420746865207365636f6e64206163636f756e7420697320746865207573657220747279696e6720746f207265636f76657220746865206163636f756e742e2054686520736574206f66207265636f76657261626c65206163636f756e747320616e64207468656972207265636f7665727920636f6e66696775726174696f6e2e000000000000daea11000b00000000000000800f1200020000000000000000000000b00f1200060000000000000000000000e5ea11000700000000000000e00f1200010000000000000000000000f80f1200030000000000000000000000ecea110007000000000000001010120002000000000000000000000040101200040000000000000000000000f3ea1100040000000000000060101200030000000000000000000000a8101200040000000000000000000000f7ea11000500000000000000c8101200020000000000000000000000f81012000d0000000000000000000000b81512000b00000000000000e03c12001100000000000000c31512000500000000000000c8151200140000000915120021000000c8b01200000000002a1512003f0000006915120039000000c8b0120000000000a21512001600000000000000791312000800000000000000831412001e000000a11412003d000000c8b0120000000000de1412002b00000000000000dd08120009000000000000006f1412001400000000000000791312000800000000000000831412001e0000002a7f12000b0000001d14120024000000411412002e000000927f12000c000000000000007913120008000000000000008113120007000000000000001f821200050000000000000088131200160000000000000016141200070000000000000000ee1100040000002a7f12000b0000009e13120023000000c113120055000000927f12000c000000000000007913120008000000000000008113120007000000000000001f821200050000000000000088131200160000006011120054000000b411120026000000c8b0120000000000da111200570000003112120019000000c8b01200000000004a121200250000006f121200200000008f12120043000000d21212002c000000fe1212001e0000001c131200270000004313120036000000204d61792062652063616c6c656420627920616e79207369676e6564206163636f756e742061667465722074686520766f74696e67206475726174696f6e2068617320656e64656420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e2041627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e7320756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e202d2074686520776569676874206f66206070726f706f73616c6020707265696d6167652e202d20757020746f207468726565206576656e7473206465706f73697465642e202d206f6e6520726561642c2074776f2072656d6f76616c732c206f6e65206d75746174696f6e2e2028706c7573207468726565207374617469632072656164732e29202d20636f6d7075746174696f6e20616e6420692f6f20604f2850202b204c202b204d29602077686572653a2020202d20604d60206973206e756d626572206f66206d656d626572732c2020202d20605060206973206e756d626572206f66206163746976652070726f706f73616c732c2020202d20604c602069732074686520656e636f646564206c656e677468206f66206070726f706f73616c6020707265696d6167652e70726f706f73616c543a3a48617368436f6d706163743c50726f706f73616c496e6465783e202d20426f756e6465642073746f72616765207265616420616e64207772697465732e202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e617070726f7665202d20426f756e6465642073746f7261676520726561647320616e64207772697465732e202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e436f6d706163743c4d656d626572436f756e743e426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e20446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e205365742074686520636f6c6c6563746976652773206d656d626572736869702e202d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e64202d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e20526571756972657320726f6f74206f726967696e2e6e65775f6d656d626572737072696d654f7074696f6e3c543a3a4163636f756e7449643e5665633c543a3a486173683eb81712002400000050726f706f73616c4f663c542061732054726169743c493e3e3a3a50726f706f73616c008517120033000000566f7465733c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e00581712002d0000004617120012000000f81612004e0000006816120057000000bf1612003900000020546865206d656d6265722077686f2070726f7669646573207468652064656661756c7420766f746520666f7220616e79206f74686572206d656d62657273207468617420646f206e6f7420766f7465206265666f7265207468652074696d656f75742e204966204e6f6e652c207468656e206e6f206d656d6265722068617320746861742070726976696c6567652e205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e2050726f706f73616c7320736f206661722e20566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e2054686520686173686573206f6620746865206163746976652070726f706f73616c732e0000000062ef1100090000000000000000000000dc1512000c00000000000000000000000000000000000000000000000000000000000000c8b01200ec1912000000000000000000e815120001000000000000000100000000000000f01512000a0000000101000000000000811312000700000000000000fa1512001900000000000000000000000000000000000000c8b012001c1a12000000000000000000141612000100000000000000000000000000000072ef11000600000001010000000000008113120007000000000000001c1612002300000000000000000000000000000000000000c8b012001c1a120000000000000000004016120001000000000000000000000000000000889112000d0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b01200fc191200000000000000000048161200010000000000000001000000000000006bef1100070000000000000000000000e03c12001100000000000000000000000000000000000000000000000000000000000000c8b012000c1a1200000000000000000050161200010000000000000001000000000000007bea1100050000000000000000000000138212000c00000000000000000000000000000000000000000000000000000000000000c8b012001c1a12000000000000000000581612000200000000000000000000003c0000000000000001000000590000003c00000000000000010000006b0000003c0000000000000001000000590000003c00000000000000010000005100000000000000b7e611000a00000000000000ec1b1200010000000000000000000000aae611000d00000000000000f41b12000100000000000000000000009ae611001000000000000000fc1b120001000000000000000000000090e611000a00000000000000041c120001000000000000000000000087e6110009000000000000000c1c120001000000000000000000000079e611000e00000000000000141c120001000000000000000000000067e6110012000000000000001c1c120001000000000000000000000059e611000e00000000000000241c12000100000000000000000000004fe611000a000000000000002c1c120001000000000000000000000046e611000900000000000000341c12000100000000000000000000003be611000b000000000000003c1c12000100000000000000000000002de611000e00000000000000441c120001000000000000000000000024e6110009000000000000004c1c120001000000000000000000000019e611000b00000000000000541c120001000000000000000000000011e6110008000000000000005c1c120001000000000000000000000005e611000c000000000000001c1c120001000000000000001f1f12003d000000fb1e120024000000c61e1200350000009b1e12002b000000681e120033000000401e120028000000141e12002c000000dc1d120038000000a81d1200340000007d1d12002b000000361d120047000000061d120030000000cb1c12003b0000008b1c120040000000641c1200270000002054686572652077617320616e206f766572666c6f7720696e20612063616c63756c6174696f6e20546865726520617265207374696c6c20616374697665207265636f7665727920617474656d7074732074686174206e65656420746f20626520636c6f73656420546865207468726573686f6c6420666f72207265636f766572696e672074686973206163636f756e7420686173206e6f74206265656e206d6574205468697320757365722068617320616c726561647920766f756368656420666f722074686973207265636f766572792054686520667269656e64206d757374207761697420756e74696c207468652064656c617920706572696f6420746f20766f75636820666f722074686973207265636f766572792054686973206163636f756e74206973206e6f74206120667269656e642077686f2063616e20766f7563682041207265636f766572792070726f6365737320686173206e6f74207374617274656420666f72207468697320726573637565722041207265636f766572792070726f636573732068617320616c7265616479207374617274656420666f722074686973206163636f756e742054686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f766572792054686973206163636f756e74206973206e6f742073657420757020666f72207265636f7665727920467269656e6473206c697374206d75737420626520736f7274656420616e642066726565206f66206475706c69636174657320467269656e6473206c697374206d757374206265206c657373207468616e206d617820667269656e647320467269656e6473206c697374206d7573742062652067726561746572207468616e207a65726f20616e64207468726573686f6c64205468726573686f6c64206d7573742062652067726561746572207468616e207a65726f2055736572206973206e6f7420616c6c6f77656420746f206d616b6520612063616c6c206f6e20626568616c66206f662074686973206163636f756e7400000000d1ea1100090000000000000020201200010000000000000000000000c0ea1100110000000000000028201200010000000000000000000000b1ea11000f0000000000000030201200010000000000000000000000a7ea11000a00000000000000382012000100000000000000000000009aea11000d000000000000004020120001000000000000000000000088ea110012000000000000004820120001000000000000000000000080ea110008000000000000005020120001000000000000001521120018000000f520120020000000e120120014000000d020120011000000b920120017000000982012002100000058201200400000002054686520636c6f73652063616c6c206973206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e204d656d626572732061726520616c726561647920696e697469616c697a656421204475706c696361746520766f74652069676e6f726564204d69736d61746368656420696e6465782050726f706f73616c206d757374206578697374204475706c69636174652070726f706f73616c73206e6f7420616c6c6f776564204163636f756e74206973206e6f742061206d656d626572000000bb2112000d0000009e2112001b000000b9211200020000005821120046000000a9020000010000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f62696e2f6e6f64652f72756e74696d652f7372632f6c69622e727342616420696e70757420646174612070726f766964656420746f203a20657865637574655f626c6f636bd021120010000000696e697469616c697a655f626c6f636be82112000f0000006170706c795f65787472696e736963000022120013000000696e686572656e745f65787472696e73696373001c2212000f000000636865636b5f696e686572656e747300342212001400000076616c69646174655f7472616e73616374696f6e502212000f0000006f6666636861696e5f776f726b657200682212000d0000006163636f756e745f6e6f6e6365000000fb85120004000000882212000b0000006765745f73746f72616765009c2212000f00000072656e745f70726f6a656374696f6e00b42212000a00000071756572795f696e666f0000c82212001500000067656e65726174655f73657373696f6e5f6b657973000000e8221200130000006465636f64655f73657373696f6e5f6b657973486561644f664e6f6d696e61746f72734e6f6d696e61746f7273486561644f6656616c696461746f727356616c696461746f7273496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c65725761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e626f6e64626f6e645f6578747261756e626f6e6477697468647261775f756e626f6e64656476616c69646174656e6f6d696e6174656368696c6c7365745f70617965657365745f636f6e74726f6c6c65727365745f76616c696461746f725f636f756e74666f7263655f6e6f5f65726173666f7263655f6e65775f6572617365745f696e76756c6e657261626c6573666f7263655f756e7374616b65666f7263655f6e65775f6572615f616c7761797363616e63656c5f64656665727265645f736c6173687061796f75745f6e6f6d696e61746f727061796f75745f76616c696461746f727265626f6e647365745f686973746f72795f6465707468726561705f7374617368426f6e6465644c6564676572416374697665457261457261735374616b657273457261735374616b657273436c69707065644572617356616c696461746f72507265667345726173526577617264506f696e747345726173546f74616c5374616b6556616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e457261536c617368696e675370616e735370616e536c61736800000000004426120006000000000000004c2612000200000000000000000000005c2612000100000000000000000000006426120005000000000000004c2612000200000000000000000000006c261200010000000000000000000000742612001a00000000000000888f12000100000000000000000000009026120002000000000000005265776172640000c26d1200090000009027120007000000422712004e000000536c617368000000f9261200490000004f6c64536c617368696e675265706f72744469736361726465640000a026120047000000e72612001200000020416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e204163636f756e74496420697320636f6e74726f6c6c6572206163636f756e742e42616c616e63654572617356616c696461746f725265776172644572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f657261556e6170706c696564536c6173686573000000001b24120004000000000000008c2b1200030000000000000000000000d42b12000f00000000000000000000001f2412000a000000000000004c2c1200010000000000000000000000642c12000e0000000000000000000000292412000600000000000000d42c1200010000000000000000000000ec2c12001800000000000000000000002f2412001100000000000000c8b01200000000000000000000000000ac2d12001000000000000000000000004024120008000000000000002c2e1200010000000000000000000000442e12000b00000000000000000000004824120008000000000000009c2e1200010000000000000000000000b42e12000b0000000000000000000000502412000500000000000000c8b012000000000000000000000000000c2f12000b0000000000000000000000552412000900000000000000642f12000100000000000000000000007c2f12000b00000000000000000000005e2412000e00000000000000d42f1200010000000000000000000000ec2f12000b00000000000000000000006c2412001300000000000000443012000100000000000000000000005c3012000100000000000000000000007f2412000d00000000000000c8b01200000000000000000000000000643012000500000000000000000000008c2412000d00000000000000c8b012000000000000000000000000008c301200060000000000000000000000992412001100000000000000bc301200010000000000000000000000d4301200010000000000000000000000aa2412000d00000000000000dc301200010000000000000000000000f4301200010000000000000000000000b72412001400000000000000c8b01200000000000000000000000000fc301200050000000000000000000000cb24120015000000000000002431120002000000000000000000000054311200070000000000000000000000e024120010000000000000008c311200020000000000000000000000bc311200170000000000000000000000f02412001000000000000000743212000100000000000000000000008c3212000f0000000000000000000000002512000600000000000000d42c120001000000000000000000000004331200060000000000000000000000062512001100000000000000343312000100000000000000000000004c331200030000000000000000000000172512000a00000000000000dc30120001000000000000000000000064331200070000000000000000000000163f12000a00000000000000203f120023000000000000007c4712000500000000000000814712001500000000000000c63f12000500000000000000cb3f120011000000d2481200590000002b49120021000000c8b01200000000004c4912004c000000c8b01200000000009849120049000000c8b01200000000002a7f12000b000000e149120035000000bc48120008000000164a12001a000000c8b0120000000000304a12005b0000008b4a120049000000927f12000c00000000000000c44812000e0000000000000081471200150000009647120059000000ef4712000d000000c8b0120000000000fc471200540000005048120059000000a948120013000000c8b01200000000002f3e120055000000c8b01200000000002a7f12000b000000843e12003a000000bc481200080000006247120010000000927f12000c000000000000007c471200050000000000000081471200150000008f43120055000000e4431200400000002444120049000000c8b01200000000006d44120052000000bf44120030000000c8b0120000000000ef4412004f0000003e4512004f0000008d4512003f000000c8b0120000000000713f120055000000c8b0120000000000cc45120026000000c8b01200000000002a7f12000b000000f245120050000000be3e12002600000042461200590000009b4612005c000000f7461200540000004b471200170000006247120010000000724712000a000000884112004b000000c8b0120000000000d34112004d0000002042120013000000c8b0120000000000713f120055000000c8b0120000000000334212001b000000c8b01200000000002a7f12000b0000004e42120055000000a342120051000000f44212003d000000314312005e000000e43e120032000000927f12000c000000000000007541120005000000000000007a4112000e0000003b4112003a000000c8b0120000000000f83d120037000000c8b0120000000000713f120055000000c8b01200000000002a7f12000b000000843e12003a000000be3e120026000000e43e120032000000927f12000c000000000000000c411200070000000000000013411200280000002340120044000000c8b0120000000000f83d120037000000c8b0120000000000713f120055000000c8b01200000000002a7f12000b0000006740120049000000b040120026000000d640120036000000927f12000c000000dc3f120032000000c8b0120000000000f83d120037000000c8b0120000000000713f120055000000c8b01200000000002a7f12000b000000843e12003a0000000e40120015000000e43e120032000000927f12000c00000000000000c63f12000500000000000000cb3f120011000000433f12002e000000c8b0120000000000f83d120037000000c8b0120000000000713f120055000000c8b01200000000002a7f12000b000000843e12003a000000be3e120026000000e43e120032000000927f12000c00000000000000163f12000a00000000000000203f120023000000d43d120024000000c8b0120000000000f83d120037000000c8b01200000000002f3e120055000000c8b01200000000002a7f12000b000000843e12003a000000be3e120026000000e43e120032000000927f12000c00000000000000108212000300000000000000c83d12000c000000a83d1200200000007c3d12002c000000c8b01200000000002a7f12000b0000006c3d120010000000927f12000c000000f13c120053000000443d120028000000c8b01200000000002a7f12000b0000006c3d120010000000927f12000c00000000000000163b12000a00000000000000e03c120011000000ad3c12003300000000000000a83c12000500000000000000138212000c000000653c120043000000103c120041000000c8b01200000000002a7f12000b000000513c120014000000927f12000c00000000000000e43712000300000000000000e73712000800000000000000fb3b12000d00000000000000083c120008000000383b120051000000893b12001c000000a53b120041000000c8b01200000000002a7f12000b000000e63b120015000000927f12000c00000000000000e43712000300000000000000e73712000800000000000000163b12000a00000000000000203b120018000000ef37120029000000c8b0120000000000183812003f0000003f36120059000000983612004c0000005738120056000000ad38120048000000f538120028000000c8b0120000000000e4361200570000003b3712000e000000c8b01200000000004937120051000000c8b01200000000002a7f12000b0000001d3912005700000074391200270000009b3912004e000000e939120037000000203a120050000000703a120052000000c23a120054000000927f12000c00000000000000e43712000300000000000000e737120008000000d735120029000000c8b0120000000000003612003f0000003f36120059000000983612004c000000c8b0120000000000e4361200570000003b3712000e000000c8b01200000000004937120051000000c8b01200000000002a7f12000b0000009a37120019000000b337120031000000927f12000c0000002635120038000000c8b01200000000002a7f12000b0000005e3512003c0000009a3512003d000000927f12000c000000000000000435120011000000000000001535120011000000d634120019000000c8b0120000000000ef341200150000009c3312004e000000ea331200580000004234120030000000c8b01200000000007234120024000000c8b012000000000096341200400000002052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e6365206973207a65726f2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c6566742e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e2053657420686973746f72795f64657074682076616c75652e204f726967696e206d75737420626520726f6f742e6e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e202d2054696d6520636f6d706c65786974793a204f2831292e20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e204d616b65206f6e652076616c696461746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f66207468652076616c696461746f7220746f20706179206f75742e202d206065726160206d6179206e6f74206265206c6f776572207468616e206f6e6520666f6c6c6f77696e6720746865206d6f737420726563656e746c792070616964206572612e204966206974206973206869676865722c2020207468656e20697420696e6469636174657320616e20696e737472756374696f6e20746f20736b697020746865207061796f7574206f6620616c6c2070726576696f757320657261732e205741524e494e473a206f6e636520616e2065726120697320706179656420666f7220612076616c696461746f7220737563682076616c696461746f722063616e277420636c61696d20746865207061796f7574206f662070726576696f7573206572612e205741524e494e473a20496e636f727265637420617267756d656e747320686572652063616e20726573756c7420696e206c6f7373206f66207061796f75742e2042652076657279206361726566756c2e202d2054696d6520636f6d706c65786974793a204f2831292e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e657261457261496e646578204d616b65206f6e65206e6f6d696e61746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f6620746865206e6f6d696e61746f7220746f20706179206f75742e202d206076616c696461746f72736020697320746865206c697374206f6620616c6c2076616c696461746f72732074686174206077686f6020686164206578706f7375726520746f20647572696e672060657261602e202020496620697420697320696e636f6d706c6574652c207468656e206c657373207468616e207468652066756c6c207265776172642077696c6c2062652070616964206f75742e2020204974206d757374206e6f742065786365656420604d41585f4e4f4d494e4154494f4e53602e202d204e756d626572206f662073746f726167652072656164206f6620604f2876616c696461746f727329603b206076616c696461746f7273602069732074686520617267756d656e74206f66207468652063616c6c2c202020616e6420697320626f756e64656420627920604d41585f4e4f4d494e4154494f4e53602e202d20456163682073746f72616765207265616420697320604f284e29602073697a6520616e64206465636f646520636f6d706c65786974793b20604e602069732074686520206d6178696d756d2020206e6f6d696e6174696f6e7320746861742063616e20626520676976656e20746f20612073696e676c652076616c696461746f722e202d20436f6d7075746174696f6e20636f6d706c65786974793a20604f284d41585f4e4f4d494e4154494f4e53202a206c6f674e29603b20604d41585f4e4f4d494e4154494f4e5360206973207468652020206d6178696d756d206e756d626572206f662076616c696461746f72732074686174206d6179206265206e6f6d696e6174656420627920612073696e676c65206e6f6d696e61746f722c206974206973202020626f756e646564206f6e6c792065636f6e6f6d6963616c6c792028616c6c206e6f6d696e61746f72732061726520726571756972656420746f20706c6163652061206d696e696d756d207374616b65292e76616c696461746f72735665633c28543a3a4163636f756e7449642c20753332293e2043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279206569746865722074686520726f6f74206f726967696e206f72207468652060543a3a536c61736843616e63656c4f726967696e602e2070617373696e67207468652065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e202d204f6e652073746f726167652077726974652e736c6173685f696e64696365735665633c7533323e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e202d204f6e652073746f7261676520777269746520466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e737461736820536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e5665633c543a3a4163636f756e7449643e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e20466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e2054686520696465616c206e756d626572206f662076616c696461746f72732e436f6d706163743c7533323e202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e636f6e74726f6c6c65723c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f75726365202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e706179656552657761726444657374696e6174696f6e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e202d20436f6e7461696e73206f6e6520726561642e204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f66206074617267657473602c2077686963682069732063617070656420617420604d41585f4e4f4d494e4154494f4e53602e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e746172676574735665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e202d204f6e6520444220656e7472792e203c2f7765696768743e76616c7565436f6d706163743c42616c616e63654f663c543e3e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e202d204f2831292e6d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e00000000239012000c0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b01200cc5412000000000000000000dc541200070000000000000001000000000000002f9012000e0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b0120014551200000000000000000024551200010000000000000001000000000000003d901200150000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b012002c55120000000000000000003c55120001000000000000000100000000000000445512000d0000000000000000000000e03c12001100000000000000000000000000000000000000000000000000000000000000c8b01200545512000000000000000000645512000300000000000000010000000000000021251200060000000101000000000000138212000c00000000000000138212000c00000000000000000000000000000000000000c8b01200b055120000000000000000007c5512000100000000000000000000000000000027251200060000000101000000000000138212000c00000000000000845512002900000000000000000000000000000000000000c8b01200b05512000000000000000000c055120001000000000000000000000000000000c8551200050000000101000000000000138212000c00000000000000cb3f12001100000000000000000000000000000000000000c8b01200d05512000000000000000000e055120001000000000000000100000000000000252312000a0000000101010000000000138212000c000000000000007a4112000e00000000000000000000000000000000000000c8b012004c5712000000000000000000e8551200010000000000000001000000000000000b2312000a0000000101010000000000138212000c00000000000000f05512001900000000000000000000000000000000000000c8b012000c56120000000000000000001c56120001000000000000000000000000000000529012000a0000000000000000000000e73712000800000000000000000000000000000000000000000000000000000000000000c8b01200fc591200000000000000000024561200040000000000000000000000000000002d251200090000000000000000000000445612001a00000000000000000000000000000000000000000000000000000000000000c8b0120060561200000000000000000070561200040000000000000000000000000000005c901200150000000101000000000000e73712000800000000000000179012000c00000000000000000000000000000000000000c8b01200fc59120000000000000000009056120001000000000000000000000000000000362512000b0000000205050000000000e73712000800000000000000138212000c00000000000000985612002400000000000000c8b01200ec5612000000000000000000bc5612000600000000000000010000000000000041251200120000000205050000000000e73712000800000000000000138212000c00000000000000985612002400000000000000c8b01200ec5612000000000000000000fc5612000a00000000000000010000000000000053251200120000000205050000000000e73712000800000000000000138212000c000000000000007a4112000e00000000000000c8b012004c57120000000000000000005c5712000500000000000000010000000000000097271200130000000101000000000000e73712000800000000000000845712000c00000000000000000000000000000000000000c8b012004c5912000000000000000000905712000300000000000000000000000000000065251200100000000101000000000000e73712000800000000000000a85712001d00000000000000000000000000000000000000c8b01200c85712000000000000000000d857120002000000000000000100000000000000752512000e0000000101000000000000e73712000800000000000000845712000c00000000000000000000000000000000000000c8b012005c5812000000000000000000e85712000200000000000000010000000000000071901200080000000000000000000000f85712000700000000000000000000000000000000000000000000000000000000000000c8b01200005812000000000000000000105812000100000000000000010000000000000079901200130000000000000000000000185812000700000000000000000000000000000000000000000000000000000000000000c8b01200205812000000000000000000305812000300000000000000010000000000000048581200130000000000000000000000845712000c00000000000000000000000000000000000000000000000000000000000000c8b012005c58120000000000000000006c58120002000000000000000100000000000000e0271200100000000101000000000000e737120008000000000000007c5812002f00000000000000000000000000000000000000c8b01200ac5812000000000000000000bc581200010000000000000001000000000000008c9012000a0000000000000000000000c45812001d00000000000000000000000000000000000000000000000000000000000000c8b01200e45812000000000000000000f45812000400000000000000010000000000000083251200130000000201030000000000e73712000800000000000000138212000c00000000000000145912001700000000000000c8b012002c59120000000000000000003c5912000200000000000000000000000000000096251200130000000201030000000000e73712000800000000000000138212000c00000000000000845712000c00000000000000c8b012004c59120000000000000000005c59120001000000000000000000000000000000a92512000d0000000101000000000000138212000c00000000000000645912001700000000000000000000000000000000000000c8b012007c59120000000000000000008c59120001000000000000000000000000000000b6251200090000000101000000000000945912002300000000000000b75912002200000000000000000000000000000000000000c8b01200dc5912000000000000000000ec5912000200000000000000010000000000000096901200160000000000000000000000e73712000800000000000000000000000000000000000000000000000000000000000000c8b01200fc59120000000000000000000c5a120001000000000000000000000000000000ac9012000e0000000000000000000000145a12000800000000000000000000000000000000000000000000000000000000000000c8b012001c5a120000000000000000002c5a12000300000000000000010000003c0000000000000001000000ff0000008b66120022000000c8b0120000000000ad6612004c000000c8b0120000000000f9661200420000003b6712002b00000066671200440000003c00000000000000010000006b000000616612002a0000003c0000000000000001000000000100001166120050000000496e76756c6e657261626c65730000003c0000000000000001000000590000003d651200560000009365120053000000e66512002b000000fd641200400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e0000003c000000000000000100000051000000ac6412005100000050617965650000003c000000000000000100000051000000736412003900000022641200510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e0000003c000000000000000100000051000000c9631200590000003d63120017000000c8b01200000000005463120055000000a963120020000000416374697665457261496e666f3c4d6f6d656e744f663c543e3e00003c0000000000000001000000510000008e62120036000000c8b0120000000000c46212002e000000f26212004b000000436212004b0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3ecd6112001e000000c8b0120000000000eb61120058000000c8b0120000000000646012002a0000007d611200500000003c0000000000000001000000010100008e60120026000000c8b0120000000000b4601200550000000961120037000000406112003d000000c8b01200000000000d60120057000000c8b0120000000000646012002a0000007d611200500000003c000000000000000100000002010000c85f120045000000c8b01200000000000d60120057000000c8b0120000000000646012002a00000042616c616e63654f663c543e3e5f120042000000c8b0120000000000805f120048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e0000003c000000000000000100000003010000ca5e12002b000000f55e120049000000485e12003b000000835e120047000000466f7263696e67003c000000000000000100000051000000015e12004700000050657262696c6c003c00000000000000010000006b0000008a5d12003e000000c8b0120000000000c85d12003900000043616e63656c6564536c6173685061796f7574003c0000000000000001000000de0000000a5d1200450000004f5d12003b0000005665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e003c000000000000000100000059000000d95c1200310000005665633c28457261496e6465782c2053657373696f6e496e646578293e0000003c0000000000000001000000590000002f5c120049000000c8b0120000000000785c120032000000aa5c12002f0000002850657262696c6c2c2042616c616e63654f663c543e29003c000000000000000100000051000000c25b120051000000135c12001c0000003c0000000000000001000000510000006a5b120058000000736c617368696e673a3a536c617368696e675370616e73003c00000000000000010000006a000000475b12002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e0000003c000000000000000100000004010000ca5a12004f000000195b12002e0000003c0000000000000001000000510000008b5a12003f00000052656c65617365733c000000000000000100000051000000445a12001f000000c8b0120000000000635a1200280000002053746f726167652076657273696f6e206f66207468652070616c6c65742e20546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e205472756520696620746865206e6578742073657373696f6e206368616e67652077696c6c2062652061206e657720657261207265676172646c657373206f6620696e6465782e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c61726c7920746f2060457261735374616b65727360207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f7365642069732072656475636520746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f444550544860206572617320546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e20546865206163746976652065726120697320746865206572612063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f206053657373696f6e496e746572666163653a3a76616c696461746f7273602e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f772073657373696f6e206d6f64756c6520717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f662065726120746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d204d757374206265206d6f7265207468616e20746865206e756d626572206f66206572612064656c617965642062792073657373696f6e206f74686572776973652e20692e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20692e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e0000000000001c6812000e00000000000000179012000c00000000000000c8b012002c68120000000000000000003c681200010000000000000000000000446812000f00000000000000e73712000800000000000000c8b0120054681200000000000000000064681200010000000000000053657373696f6e7350657245726100003c000000000000000100000005010000a56812001c000000426f6e64696e674475726174696f6e003c0000000000000001000000060100006c68120039000000204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e00000000000000de2312000d00000000000000306a1200010000000000000000000000d62312000800000000000000386a1200010000000000000000000000c92312000d00000000000000406a1200010000000000000000000000bc2312000d00000000000000486a1200010000000000000000000000b02312000c00000000000000506a1200010000000000000000000000a22312000e00000000000000586a1200010000000000000000000000912312001100000000000000606a1200010000000000000000000000802312001100000000000000686a1200010000000000000000000000742312000c00000000000000706a1200010000000000000000000000672312000d00000000000000786a12000100000000000000000000005b2312000c00000000000000806a1200010000000000000000000000492312001200000000000000886a12000100000000000000000000002f2312001a00000000000000906a120001000000000000001a6c12001a000000056c120015000000ec6b120019000000ce6b12001e000000b56b120019000000a46b120011000000826b1200220000004f6b1200330000002a6b120025000000016b120029000000ce6a120033000000b76a120017000000986a12001f00000020496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e3c6c12002a000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a200000889a12001e00000005000000320000004e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e6564496e6469636573636c61696d7472616e7366657266726565666f7263655f7472616e736665724163636f756e747300000000000000246d12000d00000000000000346d1200020000000000000000000000446d12000100000000000000000000004c6d12000a00000000000000586d1200010000000000000000000000606d12000100000000000000496e64657841737369676e6564000000c26d120009000000986d12000c000000a46d12001e000000496e64657846726565640000986d12000c000000686d1200300000002041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e4163636f756e74496e6465782041206163636f756e7420696e646578207761732061737369676e65642e4163636f756e74496474696d657374616d702073657420696e20626c6f636b20646f65736e2774206d6174636820736c6f7420696e207365616c046e1200230000005f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e00386e12002e000000666e12000d0000004552524f523a2072657475726e6564206e6578745f6b657920686173206e6f2076616c75653a0a6b6579206973200a6e6578745f6b6579206973204e657874456e756d536574456e756d53657400000000000000ae8312000a0000000000000000000000a07112000300000000000000000000000000000000000000000000000000000000000000c8b01200fc7112000000000000000000a471120001000000000000000100000000000000b88312000b0000000000000000000000ac7112002700000000000000000000000000000000000000000000000000000000000000c8b01200d47112000000000000000000e471120001000000000000000100000000000000c38312000b0000000000000000000000a07112000300000000000000000000000000000000000000000000000000000000000000c8b01200fc7112000000000000000000ec71120002000000000000000100000000000000ce8312000b0000000000000000000000a07112000300000000000000000000000000000000000000000000000000000000000000c8b01200fc71120000000000000000000c72120001000000000000000100000000000000d98312000a0000000000000000000000147212000800000000000000000000000000000000000000000000000000000000000000c8b012006c72120000000000000000001c7212000a000000000000000100000000000000e38312000e0000000000000000000000147212000800000000000000000000000000000000000000000000000000000000000000c8b012006c72120000000000000000007c72120001000000000000000100000000000000f18312000c0000000000000000000000847212000300000000000000000000000000000000000000000000000000000000000000c8b012008872120000000000000000009872120009000000000000000100000000000000fd831200110000000101000000000000847212000300000000000000e07212000d00000000000000000000000000000000000000c8b01200f07212000000000000000000c8b01200000000000000000001000000000000005b8c12000b0000000000000000000000007312000800000000000000000000000000000000000000000000000000000000000000c8b01200087312000000000000000000187312000200000000000000000000007536340063771200150000005665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e003c000000000000000100000059000000487712001b000000e67612003e00000024771200240000003c000000000000000100000052000000d1761200150000005b75383b2033325d0b7512002e000000c8b0120000000000397512000b000000c8b01200000000004475120041000000857512003e000000c37512004500000008761200450000004d761200410000008e761200430000003c000000000000000100000007010000f474120017000000753332003c00000000000000010000006b000000af7312001f000000c8b0120000000000ce7312003d0000000b741200400000004b74120025000000c8b0120000000000707412003b000000ab74120042000000ed741200070000005665633c5b75383b2033325d3e0000003c0000000000000001000000590000004d617962655672663c000000000000000100000051000000287312004000000068731200470000002054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f63682072616e646f6d6e6573732e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e00000000e87712000d00000000000000a07112000300000000000000c8b01200f8771200000000000000000008781200020000000000000000000000187812001100000000000000297812000900000000000000c8b0120034781200000000000000000044781200050000000000000045706f63684475726174696f6e0000003c0000000000000001000000080100009c79120043000000df7912003f0000004578706563746564426c6f636b54696d65543a3a4d6f6d656e7400003c0000000000000001000000090100006c78120041000000ad78120044000000f1781200410000003279120042000000747912002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e20546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746f2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e65706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b2071656400887a1200400000004f0100001b000000887a12004000000057010000200000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f6672616d652f626162652f7372632f6c69622e727300000000a26c12000500000000000000787b1200010000000000000000000000907b1200100000000000000000000000a76c12000800000000000000107c1200020000000000000000000000407c1200100000000000000000000000af6c12000400000000000000787b1200010000000000000000000000c07c1200100000000000000000000000b36c12000e00000000000000107c1200020000000000000000000000407d12001000000000000000000000001f8212000500000000000000248212000f0000003382120027000000c8b01200000000005a82120038000000c8b01200000000007881120034000000c8b0120000000000928212003d000000c8b0120000000000057f120025000000c8b01200000000002a7f12000b000000357f12000a0000003f7f120027000000d880120019000000857f12000d000000927f12000c00000000000000108212000300000000000000138212000c000000000000001f8212000500000000000000248212000f000000f180120058000000498112002f000000c8b01200000000007881120034000000c8b0120000000000ac8112004a000000ad7e120058000000c8b0120000000000057f120025000000c8b01200000000002a7f12000b000000357f12000a0000003f7f120027000000f68112001a000000857f12000d000000927f12000c0000009e7f120026000000c8b0120000000000c47f120058000000c8b01200000000001c80120056000000c8b01200000000007280120044000000c8b0120000000000b680120022000000c8b01200000000002a7f12000b000000357f12000a0000003f7f120027000000d880120019000000857f12000d000000927f12000c000000c07d120056000000167e12003b000000c8b0120000000000517e120032000000c8b0120000000000837e12002a000000ad7e120058000000c8b0120000000000057f120025000000c8b01200000000002a7f12000b000000357f12000a0000003f7f120027000000667f12001f000000857f12000d000000927f12000c00000020466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e2023203c7765696768743e202d20604f283129602e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e202d204f6e65206576656e742e2023203c2f7765696768743e204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e6e6577543a3a4163636f756e744964696e646578543a3a4163636f756e74496e6465782041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e0000000000c16c1200080000000102000000000000248212000f00000000000000288312001c00000000000000000000000000000000000000c8b012004483120000000000000000005483120001000000000000000000000028543a3a4163636f756e7449642c2042616c616e63654f663c543e293c0000000000000001000000510000005c8312002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e417574686f72697479446973636f766572794b657973417574686f7273686970446964536574556e636c65734261626545706f6368496e646578417574686f72697469657347656e65736973536c6f7443757272656e74536c6f7452616e646f6d6e6573734e65787452616e646f6d6e6573735365676d656e74496e646578556e646572436f6e737472756374696f6e746f6f206d616e7920696e737472756374696f6e734e6f6e2d656d7074792066756e6374696f6e20626f6479206578706563746564008c8412000f0000009b841200020000009d84120003000000617373657274696f6e206661696c65643a20636f6e746578742e6672616d655f737461636b2e69735f656d7074792829417420696e737472756374696f6e202840293a2043616e2774206465636f6465207761736d20636f64654d6f64756c65206973206e6f742076616c69646d6f64756c65206465636c6172657320696e7465726e616c206d656d6f72796d756c7469706c65207461626c6573206465636c617265647461626c652065786365656473206d6178696d756d2073697a6520616c6c6f776564757365206f6620666c6f6174696e6720706f696e74207479706520696e2066756e6374696f6e20747970657320697320666f7262696464656e757365206f6620666c6f6174696e6720706f696e74207479706520696e206c6f63616c7320697320666f7262696464656e757365206f6620666c6f6174696e6720706f696e74207479706520696e20676c6f62616c7320697320666f7262696464656e67617320696e737472756d656e746174696f6e206661696c6564737461636b2068656967687420696e737472756d656e746174696f6e206661696c656463616c6c6465706c6f796465706c6f792066756e6374696f6e2069736e2774206578706f72746564756e6b6e6f776e206578706f72743a20657870656374696e67206f6e6c79206465706c6f7920616e642063616c6c2066756e6374696f6e7366756e6374696f6e206861732061206e6f6e2d6578697374656e7420747970656578706f72742072656665727320746f206e6f6e2d6578697374656e742066756e6374696f6e657870656374656420612066756e6374696f6e656e74727920706f696e7420706f696e747320746f20616e20696d706f727465642066756e6374696f6e656e74727920706f696e74206861732077726f6e67207369676e617475726563616c6c2066756e6374696f6e2069736e2774206578706f727465646572726f722073657269616c697a696e6720696e737472756d656e746564206d6f64756c6552657475726e207479706573206c656e6774682073686f756c642062652030206f7220310000ec8912001e0000000a8a12001f00000066756e6374696f6e5f73656374696f6e5f6c656e20213d20303b2071656400008f8912005d000000d10000002000000066756e6374696f6e5f73656374696f6e5f6c656e20213d20303b2066756e6374696f6e5f73656374696f6e5f6c656e203d3d20636f64655f73656374696f6e5f6c656e3b207165648f8912005d000000d40000001c000000758912001a000000508912000a0000005a8912001b00000073746172742066756e6374696f6e20657870656374656420746f20686176652074797065205b5d202d3e205b5d0000003f891200110000001f89120020000000ff88120020000000d78812002800000070617373697665206d656d6f7279207365676d656e747320617265206e6f7420737570706f727465647365676d656e74206f66667365742073686f756c642072657475726e204933327061737369766520656c656d656e74207365676d656e747320617265206e6f7420737570706f72746564746f6f206d616e79206d656d6f727920726567696f6e7320696e20696e6465782073706163653a20746f6f206d616e79207461626c657320696e20696e6465782073706163653a20747279696e6720746f20696d706f7274206d757461626c6520676c6f62616c206475706c6963617465206578706f72742046756e6374696f6e20232072656164696e672f76616c69646174696f6e206572726f723a204d697373696e6720626f647920666f722066756e6374696f6e202f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f6c69622e72736c656e677468206f662066756e6374696f6e2073656374696f6e206973202c207768696c65206c656e206f6620636f64652073656374696f6e206973206578745f7365745f73746f726167656578745f6765745f73746f726167656578745f63616c6c6578745f696e7374616e74696174656578745f72657475726e6578745f63616c6c65726578745f616464726573736578745f6761735f70726963656578745f6761735f6c6566746578745f62616c616e63656578745f76616c75655f7472616e736665727265646578745f72616e646f6d6578745f6e6f776578745f6d696e696d756d5f62616c616e63656578745f746f6d6273746f6e655f6465706f7369746578745f64697370617463685f63616c6c6578745f726573746f72655f746f6578745f736372617463685f73697a656578745f736372617463685f726561646578745f736372617463685f77726974656578745f6465706f7369745f6576656e746578745f7365745f72656e745f616c6c6f77616e63656578745f72656e745f616c6c6f77616e63656578745f7072696e746c6e6578745f626c6f636b5f6e756d6265726578745f6765745f72756e74696d655f73746f72616765436f6e74726163744761735370656e7443757272656e745363686564756c654163636f756e74436f756e74657200000000000100000002000000040000000800000010000000200000005075626c696350726f70436f756e745265666572656e64756d436f756e7444656d6f63726163794c6f77657374556e62616b65644c6173745461626c656457617345787465726e616c50687261676d656e456c656374696f6e456c656374696f6e526f756e6473496e697469616c697a6564000000000000ec8c12000e00000000000000fc8c1200010000000000000000000000048d12000100000000000000000000000c8d12000600000000000000c8b01200000000000000000000000000148d12000100000000000000000000001c8d12000700000000000000c8b01200000000000000000000000000248d120001000000000000004e6577417574686f72697469657300009f8d12000d0000007b8d1200240000005061757365640000548d120027000000526573756d6564002c8d1200280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e417574686f726974794c69737443757272656e7453657449644772616e64706146696e616c697479536574496453657373696f6e496d4f6e6c696e655265636569766564486561727462656174734f6666656e6365735265706f72747342794b696e64496e6465780000000000348e120007000000000000003c8e12000200000000000000000000004c8e120002000000000000004f6666656e636500ff8e120004000000038f12000e0000005c8e120055000000b18e12004e00000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e4b696e644f706171756554696d65536c6f7453746f72656452616e676553657373696f6e43757272656e74496e6465785175657565644368616e67656444697361626c656456616c696461746f72730000000000007c8f12000a00000000000000888f1200010000000000000000000000908f120002000000000000004e657753657373696f6e0000179012000c000000a08f120055000000f58f120022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e53657373696f6e496e646578486973746f7279446570746856616c696461746f72436f756e744d696e696d756d56616c696461746f72436f756e7443757272656e7445726145726173537461727453657373696f6e496e646578466f726365457261536c6173685265776172644672616374696f6e426f6e646564457261734561726c69657374556e6170706c696564536c61736853746f7261676556657273696f6e43757272656e74457261537461727453657373696f6e496e64657843757272656e74457261506f696e74734561726e65645374616b696e674973557067726164656474696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e54696d657374616d7044696455706461746542616c616e6365734e6578744665654d756c7469706c696572547265617375727950726f706f73616c436f756e74417070726f76616c7300003c00000004000000040000000a00000042725461626c65446174617461626c653c00000004000000040000000a01000064656661756c744636345265696e74657270726574493634556e726561636861626c654e6f70426c6f636b003c00000004000000040000000b0100004c6f6f704966456c7365456e6442724272496642725461626c6500003c00000004000000040000000c01000052657475726e43616c6c43616c6c496e64697265637400003c0000000400000004000000d800000044726f7053656c6563744765744c6f63616c5365744c6f63616c5465654c6f63616c476574476c6f62616c536574476c6f62616c4933324c6f61644936344c6f61644633324c6f61644636344c6f61644933324c6f616438534933324c6f616438554933324c6f61643136534933324c6f61643136554936344c6f616438534936344c6f616438554936344c6f61643136534936344c6f61643136554936344c6f61643332534936344c6f616433325549333253746f726549363453746f726546333253746f726546363453746f726549333253746f72653849333253746f7265313649363453746f72653849363453746f7265313649363453746f7265333243757272656e744d656d6f727947726f774d656d6f7279493332436f6e7374003c00000004000000040000000d010000493634436f6e73743c00000004000000040000000e010000463332436f6e7374463634436f6e73743c00000004000000040000002b00000049333245717a49333245714933324e654933324c74534933324c74554933324774534933324774554933324c65534933324c655549333247655349333247655549363445717a49363445714936344e654936344c74534936344c74554936344774534936344774554936344c65534936344c655549363447655349363447655546333245714633324e654633324c7446333247744633324c65463332476546363445714636344e654636344c7446363447744636344c654636344765493332436c7a49333243747a493332506f70636e744933324164644933325375624933324d756c493332446976534933324469765549333252656d5349333252656d55493332416e644933324f72493332586f7249333253686c4933325368725349333253687255493332526f746c493332526f7472493634436c7a49363443747a493634506f70636e744936344164644936345375624936344d756c493634446976534936344469765549363452656d5349363452656d55493634416e644936344f72493634586f7249363453686c4936345368725349363453687255493634526f746c493634526f74724633324162734633324e65674633324365696c463332466c6f6f724633325472756e634633324e656172657374463332537172744633324164644633325375624633324d756c4633324469764633324d696e4633324d6178463332436f70797369676e4636344162734636344e65674636344365696c463634466c6f6f724636345472756e634636344e656172657374463634537172744636344164644636345375624636344d756c4636344469764636344d696e4636344d6178463634436f70797369676e493332577261704936344933325472756e63534633324933325472756e63554633324933325472756e63534636344933325472756e6355463634493634457874656e6453493332493634457874656e64554933324936345472756e63534633324936345472756e63554633324936345472756e63534636344936345472756e6355463634463332436f6e7665727453493332463332436f6e7665727455493332463332436f6e7665727453493634463332436f6e766572745549363446333244656d6f7465463634463634436f6e7665727453493332463634436f6e7665727455493332463634436f6e7665727453493634463634436f6e766572745549363446363450726f6d6f74654633324933325265696e746572707265744633324936345265696e746572707265744636344633325265696e7465727072657449333200003c00000004000000040000000a0000003c00000004000000040000000f0100004636344933324936344633324e6f526573756c7456616c7565000000bc9712000b000000492f4f204572726f723a20496e76616c696444617461547261696c696e6744617461556e6578706563746564456f66547269656420746f20736872696e6b20746f2061206c6172676572206361706163697479536f6d654e6f6e65003c00000004000000040000001001000078991200120000008a9912000c0000006066756e635f696478602073686f756c6420636f6d652066726f6d20606e6565645f7468756e6b73603b0a09090909606e6565645f7468756e6b736020697320706f70756c617465642077697468207468652073616d65206974656d73207468617420696e20607265706c6163656d656e745f6d6170603b0a09090909716564109912006800000050000000190000004174207468697320706f696e7420616e20696e646578206d7573742062652061737369676e656420746f2065616368207468756e6b0000001099120068000000890000001d0000002f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f7468756e6b2e727366756e6374696f6e207769746820696478202069736e277420666f756e64617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d2031617373657274696f6e206661696c65643a2073656c662e6c656e2829203c204341504143495459617373657274696f6e206661696c65643a202173656c662e69735f7368617265645f726f6f742829617373657274696f6e206661696c65643a202173656c662e6e6f64652e69735f7368617265645f726f6f742829617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d203100889a12001e00000002000000020000003c3a3a636f72653a3a6d6163726f733a3a70616e6963206d6163726f733e617373657274696f6e206661696c65643a20656e64203c3d206c656e4672616d6569735f706f6c796d6f72706869630000003c000000040000000400000011010000656e645f61726974790000003c00000004000000040000000a0000006272616e63685f617269747973746172745f6865696768744e6f2066756e6374696f6e2073656374696f6e4e6f20636f64652073656374696f6e4e6f20747970652073656374696f6e0000007c9d12000a00000046756e6374696f6e206973206e6f7420666f756e6420696e2066756e632073656374696f6e000000709d12000c00000046756e6374696f6e20626f647920666f722074686520696e6465782069736e277420666f756e6400349d12000b000000737461636b206d757374206265206e6f6e2d656d70747900299d12000b000000df9c120006000000737461636b206f766572666c6f774172697479206f6620616c6c206a756d702d74617267657473206d75737420626520657175616c54797065206e6f7420666f756e6400d89c1200070000003c9c12006d000000c8000000170000002f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f6d61785f6865696768742e72736d61785f686569676874707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768747472756e633a20707573683a20000000249d120005000000747279696e6720746f20706f70206d6f72652076616c756573207468616e20707573686564737461636b20756e646572666c6f77706f703a20756e726561636861626c65706f705f6672616d653a20636f6e74726f6c20737461636b20697320656d707479636f6e74726f6c20737461636b206f75742d6f662d626f756e6473707573685f6672616d653a2066756e635f6964783a20000054a11200480000000e0200002300000054a11200480000000f02000023000000617373657274696f6e206661696c65643a206d6964203c3d206c656ed8b01200490000000a00000009000000e49d1200490000008e0200001d0000002f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f736c6963652f736f72742e7273000000e49d120049000000a100000030000000e49d120049000000a400000030000000656e766761730000689e12005d000000120100001c0000002f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f6761732f6d6f642e72736c6173745f696e6465782069732067726561746572207468616e20303b206c6173745f696e64657820697320737461636b2073697a65202d20313b20716564689e12005d000000a600000026000000519f12006600000010010000200000002c9f12002500000043616c6c20746f2066756e6374696f6e2074686174206f75742d6f662d626f756e64733a202f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f6d6f642e7273546869732073686f756c64206265206120696e646578206f66206120646566696e65642066756e6374696f6e44756520746f2076616c69646174696f6e20636f64652073656374696f6e2073686f756c642065786973747346756e6374696f6e20626f6479206973206f7574206f6620626f756e647366756e6374696f6e20696d706f727420636f756e74206973206e6f74207a65726f3b20696d706f72742073656374696f6e206d757374206578697374733b2071656400519f120066000000590100000900000066756e635f696478206973206c657373207468616e2066756e6374696f6e20696d706f72747320636f756e743b0a090909096e74682066756e6374696f6e20696d706f7274206d7573742062652060536f6d65603b0a09090909716564000000f0ad12001200000035a112000f00000008a112000a00000012a112001400000026a112000f0000005369676e61747572652020287370656369666965642062792066756e6320292069736e277420646566696e6564206973206e6f7420646566696e656454a1120048000000280b00000a0000002f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f736c6963652f6d6f642e727354a11200480000002e0b00000e000000bca112004f000000440000000d0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e72730000000000617474656d707420746f20646976696465206279207a65726f63616e6e6f74206669742061206e756d62657220696e746f2075313238616c7265616479206d757461626c7920626f72726f77656400003c0000000000000001000000f400000080a21200430000001e030000090000002f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f63656c6c2e7273616c726561647920626f72726f776564003c0000000000000001000000f500000080a21200430000006e0300000900000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b20716564003c0000000800000004000000500000005da3120056000000680000001b000000726573756c742063616e6e6f742066697420696e20753132382f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727362616265736c6f74436f756c64206e6f74206465636f64652072657175657374656420696e686572656e742074797065214241424520696e686572656e742064617461206e6f7420666f756e6410a4120054000000cd0000000d0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e72733c000000000000000100000040000000486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b207165640000b4a412005600000008010000090000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e727300003c00000000000000010000004000000072756e74696d6552756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e670000000000000000000000617474656d707420746f20646976696465206279207a65726f0000007ca51200500000005f0000002b0000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e727348617368206e6f7420657175616c426164206f726967696e43616e206e6f74206c6f6f6b757044697370617463684572726f723c7761736d3a73747269707065643e5472616e73616374696f6e20776f756c642065786861757374732074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f72696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f646500000010a81200530000005a000000120000002f686f6d652f616e6472652f576f726b62656e63682f706172697479746563682f7375627374726174652f7072696d6974697665732f73616e64626f782f7372632f2e2e2f776974686f75745f7374642e72730010a812005300000068000000120000004475706c69636174655265706f72744f6666656e63654572726f726d616b655f746f705f6672616d655f706f6c796d6f72706869632069732063616c6c6564207769746820656d707479206672616d6520737461636b0000120100000c0000000400000013010000f7aa12005e0000004204000011000000746869732066756e6374696f6e2063616e27742062652063616c6c6564207769746820656d707479206672616d6520737461636bf7aa12005e000000b2040000050000004d6973706c6163656420656c736520696e737472756374696f6e000077aa120047000000beaa1200050000003baa12003700000072aa12000500000006aa120017000000fda9120009000000aeac120014000000e5a9120018000000fda9120009000000aeac120014000000b4a912001d000000d1a9120013000000e4a9120001000000546f6f206c61726765206d656d6f727920616c69676e6d656e7420325e20286578706563746564206174206d6f73742029547279696e6720746f2075706461746520676c6f62616c20206f66207479706520547279696e6720746f20757064617465206c6f63616c2053706563696669630000003c00000004000000040000000f010000416e794c6162656c7320696e2062725f7461626c6520706f696e747320746f20626c6f636b206f6620646966666572656e742074797065733a2020616e6420496620626c6f636b20776974686f757420656c736520726571756972656420746f2068617665204e6f526573756c7420626c6f636b20747970652e204275742069742068617320207479706500d4aa120018000000ecaa12000b000000556e657870656374656420737461636b20686569676874202c206578706563746564202f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f66756e632e7273547279696e6720746f2061636365737320706172656e74206672616d6520737461636b2076616c7565732e90ab120017000000a7ab12001600000045787065637465642076616c7565206f66207479706520206f6e20746f70206f6620737461636b2e20476f7420000000c8ab120007000000537461636b3a20000000010052ac12002400000028ac1200060000002eac12000e0000003cac12001600000004ac12002400000028ac1200060000006d6178696d756d206d656d6f72792073697a65206d757374206265206174206d6f7374202070616765736d6178696d756d206c696d697420206973206c657373207468616e206d696e696d756d20696e697469616c206d656d6f72792073697a65206d757374206265206174206d6f737420000088ac120026000000aeac120014000000547279696e6720746f20696e697469616c697a65207661726961626c65206f6620747970652020776974682076616c7565206f66207479706520496e69742065787072657373696f6e2073686f756c6420616c776179732062652077697468206c656e67746820324e6f6e20636f6e7374616e74206f70636f646520696e20696e6974206578707259ad1200070000006bad12002200000059ad12000700000060ad12000b00000045787072657373696f6e20646f65736e277420656e647320776974682060656e6460206f70636f6465476c6f62616c20206973206d757461626c6520646f65736e277420657869737473206f72206e6f742079657420646566696e6564000000a0ad120010000000b0ad12000f0000004d656d6f727920617420696e6465782020646f65736e27742065786973747300d0ad12000f000000b0ad12000f0000005461626c6520617420696e6465782000f0ad120012000000b0ad12000f00000046756e6374696f6e20617420696e64657820000014ae12000e000000b0ad12000f0000005479706520617420696e64657820000082ae120010000000b0ad12000f00000054ae12001000000074ae12000e00000054ae12001000000064ae120010000000457870656374656420676c6f62616c2020746f20626520696d6d757461626c6520746f206265206d757461626c65476c6f62616c20617420696e646578206e6f6e2d656d70747920737461636b2065787065637465640000bcae120020000000dcae120012000000747279696e6720746f206765742076616c756520617420706f736974696f6e20206f6e20737461636b206f662073697a6520636865636b656420636f75706c65206f66206c696e65732061626f7665001caf12005f0000004b0000000c0000002f686f6d652f616e6472652f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f737461636b2e72730084af120015000000657863656564656420737461636b206c696d697420000000c8b01200000000004572726f720000003c0000000400000004000000140100004c6f63616c732072616e6765206e6f7420696e2033322d6269742072616e6765f4af12002200000016b01200150000002bb0120007000000547279696e6720746f20616363657373206c6f63616c207769746820696e64657820207768656e20746865726520617265206f6e6c7920206c6f63616c7300004cb012002d00000079b012000c00000085b0120003000000617373657274696f6e206661696c65643a2060286c656674203d3d20726967687429600a20206c6566743a2060602c0a2072696768743a2060603a2090b012003400000064657374696e6174696f6e20616e6420736f7572636520736c69636573206861766520646966666572656e74206c656e6774687300000000d8b0120049000000120000000d0000002f72757374632f373563663431616662343638313532363131323132323731626165303236393438636433626134362f7372632f6c6962636f72652f6d6163726f732f6d6f642e72730041a4e2ca000b0800000000000000000041ace2ca000b08cc121000cc12100000f2c404046e616d6501e9c404f10600196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31011e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f3102196578745f73746f726167655f6765745f76657273696f6e5f3103206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f3104196578745f73746f726167655f7365745f76657273696f6e5f31051b6578745f73746f726167655f636c6561725f76657273696f6e5f31061d6578745f68617368696e675f74776f785f36345f76657273696f6e5f3107206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31081d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f3109206578745f73616e64626f785f6d656d6f72795f6e65775f76657273696f6e5f310a256578745f73616e64626f785f6d656d6f72795f74656172646f776e5f76657273696f6e5f310b216578745f73616e64626f785f696e7374616e74696174655f76657273696f6e5f310c1c6578745f73616e64626f785f696e766f6b655f76657273696f6e5f310d276578745f73616e64626f785f696e7374616e63655f74656172646f776e5f76657273696f6e5f310e206578745f73746f726167655f6368696c645f726f6f745f76657273696f6e5f310f1f6578745f73746f726167655f6368696c645f7365745f76657273696f6e5f31101f6578745f73746f726167655f6368696c645f6765745f76657273696f6e5f3111216578745f73746f726167655f6368696c645f636c6561725f76657273696f6e5f3112226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f3113226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3114236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f3115286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f3116346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f3117286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31181e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31191c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f311a236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f311b1a6578745f73746f726167655f726f6f745f76657273696f6e5f311c226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f311d286578745f73746f726167655f6368696c645f73746f726167655f6b696c6c5f76657273696f6e5f311e206578745f73616e64626f785f6d656d6f72795f6765745f76657273696f6e5f311f206578745f73616e64626f785f6d656d6f72795f7365745f76657273696f6e5f31201c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f3121236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f3122256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f3123256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31242a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f3125296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f3126246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31271e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31281c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31291a6578745f73746f726167655f726561645f76657273696f6e5f312a286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f312b216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f312c376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f312d0c5f5f727573745f616c6c6f632e0a5f5f72675f616c6c6f632f0e5f5f727573745f6465616c6c6f63300c5f5f72675f6465616c6c6f63310e5f5f727573745f7265616c6c6f63320c5f5f72675f7265616c6c6f6333135f5f727573745f616c6c6f635f7a65726f656434115f5f72675f616c6c6f635f7a65726f65643509686173685f746573743633616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68393863633632326233333565336231383708727573745f6f6f6d3834616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68393266393538663031366165396534303929636f72653a3a70616e69636b696e673a3a70616e69633a3a68373766616436613063346238343866633a25616c6c6f633a3a666d743a3a666f726d61743a3a68363732663232663234366533383334373b36636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68636431353737666636356361353266333c23636f72653a3a666d743a3a77726974653a3a68633335393734306635326363326164363d48616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a7b7b636c6f737572657d7d3a3a68303233313133306636316466393435303e33636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a68333630623065356662623963666665633f3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6836663863346338626263383935333233403b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6839653438653033343234353036333435413a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68653030326533356637393162303633354239636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6864643862366261353261353436373866432d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a6831333338646430613363363164376664444e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a6861313066393132373130663165326561452f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68353639313534323039373433303839314611727573745f626567696e5f756e77696e6447313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68343037333235646131643963636165624835636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68323834343736336162386631306563654943636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68383763663261376232366534656335384a34636f72653a3a736c6963653a3a736c6963655f696e6465785f6c656e5f6661696c3a3a68653436373831333337323763623431374b36636f72653a3a736c6963653a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68643861366261623162346633313438384c2c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a68333361366338623734343139326330314d2e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a68623839616531653339656361343530354e323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68623939393638303239646133613138344f4a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683561393164656261646135386437353550323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68366563306131623562303730333438635145636f72653a3a636861723a3a6d6574686f64733a3a3c696d706c20636861723e3a3a6573636170655f64656275675f6578743a3a68383034383633316465336536373833665249636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a683166353865633261653138373133376453453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683137376363363338653065323863623354483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838326437643263323466373735373638552e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a683738353666646133626263333636383456303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686639303533386264313738613763376357323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683439623434633834353630373163363358323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683231336530316139336632343132356459533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68646237313735633237633365313235655a2e636f72653a3a736c6963653a3a6d656d6368723a3a6d656d6368723a3a68373066373266326162393430373865325b3a636f72653a3a666d743a3a6275696c646572733a3a44656275675374727563743a3a6669656c643a3a68306435376133613939323933306233615c2f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a68333432366263386131623034653464615d2e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a68343936633231613562393662333161325e3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68303039303634333334616237343464665f3b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6833343638386131613664333462326163603a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68613132306366623537383439663936346139636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68393439613634303135356633373735646237636f72653a3a666d743a3a6275696c646572733a3a44656275675365743a3a656e7472793a3a683166643632636337623839363433373463443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683238303438363465333036346131306664313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863643237666231643033333034356361658001636f72653a3a7374723a3a7472616974733a3a3c696d706c20636f72653a3a736c6963653a3a536c696365496e6465783c7374723e20666f7220636f72653a3a6f70733a3a72616e67653a3a52616e67653c7573697a653e3e3a3a696e6465783a3a7b7b636c6f737572657d7d3a3a68303433663863393439626236353431616627636f72653a3a7374723a3a66726f6d5f757466383a3a6834646334653364346237656265386433673e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683130386535373466383838353564316468693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6834316562646630616533643333366637696c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68336663333934616335346230356234356a693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68316337346263393630653733653136636b483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68343931613463666566343639623533396c513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a68306364313866656265353166303365646d3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68343737316336343830343137363934316e3b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68333534343436653634396539323631666f3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6833393233353063636566316536346564704d3c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a683564623261396535313563343135303671493c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a686138653037336533326438323339333872486672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a686176655f73746f726167655f76616c75653a3a6833366531343164663733373465636366737c3c73705f72756e74696d655f696e746572666163653a3a706173735f62793a3a436f6465633c543e2061732073705f72756e74696d655f696e746572666163653a3a706173735f62793a3a506173734279496d706c3c543e3e3a3a66726f6d5f6666695f76616c75653a3a686134373561363161363032613162653174383c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a683966343464666637613833316338383975343c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a683865363439313661383933393933353476363c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a666c7573683a3a686162393438313737346264643530633377fa01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a683263336231373539363764303637366678fe01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a496e7465726e616c3e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a6830383638633039313065353563356334793c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68383733376431643362656334333562387a3e70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68303765653961626364383630366163317b3e70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68363637636631366136643734363830637c4070616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68386661363063306661343163633362617d4970616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68383961353433353831363936353865367e9b013c70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68646163393737393237643333613666367f84017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202850302c2051302c205230293e3a3a656e636f64655f746f3a3a68333461383963663132343165623365358001437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a683235393634646337663630303237376481013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68303139373762303532373164626634308201543c616c6c6f633a3a7665633a3a5665633c75383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4f75747075743e3a3a77726974653a3a68363739653065373035366365356366658301437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68363834626235623635363163663064318401437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a683862393339613337343030663964393985013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a686336356132393564363835663262616386014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a683065333563363139633931303433333387012b616c6c6f633a3a736c6963653a3a6d657267655f736f72743a3a6832313534326138626135366265366434880133616c6c6f633a3a736c6963653a3a3c696d706c205b545d3e3a3a636f6e6361743a3a68313933313032346664316364636637628901483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68313733383833323765613463636431658a015a3c70616c6c65745f7574696c6974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68666535393232353336363265616638658b01553c6e6f64655f72756e74696d653a3a43616c6c2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68643536616431303261373838643238308c01416672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6576656e745f696e64657865643a3a68613965313735633163316362313863668d012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68613464643335613231313331613565348e012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68613464643335613231313331613565348f014670616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a68633065356663353064303262346463399001437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a686561393132663633623339303266343391016e6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206e6f64655f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a68336138663861356164613466383134359201706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68376161666364616433613232636436379301386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68616463353738383431373232323436639401b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a68666364303961373765366364336237669501386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68666536363833666630313930656235389601b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a68363330633432313765646234363636339701463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a683466623865363364393563646466666698015f3c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a686466613364366631353063346536303499012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68366235346132656262326639353864659a01456672616d655f737570706f72743a3a7472616974733a3a4f6e556e62616c616e6365643a3a6f6e5f756e62616c616e6365643a3a68623532313131643833326533396266389b01743c70616c6c65745f62616c616e6365733a3a696d62616c616e6365733a3a4e65676174697665496d62616c616e63653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a54727944726f703e3a3a7472795f64726f703a3a68383737356336383865653434396134639c01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68306634356636333266666437643063349d01456672616d655f737570706f72743a3a7472616974733a3a5369676e6564496d62616c616e63653c422c503e3a3a6d657267653a3a68393662623738383763616438333232619e013c70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68313132303839386430396431623861389f013e70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832653235316535656332656263376634a0014770616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836363239396433636663663135363163a1013d70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839383738623733653563336336636136a2013f70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835316465343034333663323630303530a3016b3c70616c6c65745f6964656e746974793a3a5f5f47657442797465537472756374537562734f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865393530656566386363623564353037a4012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6839353738373230303738626262323435a501820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6830343064616363386165313530303933a6017c70616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a656e636f64655f746f3a3a6836666635353535373339306331376563a701573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6863393165613464303563316365653461a801573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831326333353561613466613863353634a901573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837636133383066353032393432656232aa01437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6834343765376131653638326162346635ab01437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6834373339663661376137643761383736ac01437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6837396366366664396334383433623737ad014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6831333131353531323962323761626339ae013970616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a7570646174655f6c6f636b3a3a6862616433633764356566626538333837af01303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833626532653661366430373033386663b0018d013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7365745f6c6f636b3a3a6864323937343037326339613966383632b10190013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a72656d6f76655f6c6f636b3a3a6838656161316666663131333030376336b2015b3c70616c6c65745f6964656e746974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6861323235323539636461353338626634b301386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839626231376662613334616432383034b401386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839333431653764653064373838343462b5014373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a6862313536376130356164373062636539b601386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836656165383638396261623039636436b701776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a72656d6f76653a3a6864613336353438356637663663623735b801437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830656637383365646363343165646235b901756672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a74616b653a3a6832313031613265643539323864366135ba013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6864616166396438626630616361623862bb015a3c70616c6c65745f696e64696365733a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a5374617469634c6f6f6b75703e3a3a6c6f6f6b75703a3a6837313364343638613163643335353866bc019a013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a726570617472696174655f72657365727665643a3a6830356366666465303732373331396430bd01b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6830626634393562316139623631363136be01456672616d655f737570706f72743a3a7472616974733a3a4f6e556e62616c616e6365643a3a6f6e5f756e62616c616e6365643a3a6839336464313066356239626436316532bf015d3c70616c6c65745f636f6e7472616374733a3a7761736d3a3a5761736d566d2061732070616c6c65745f636f6e7472616374733a3a657865633a3a566d3c543e3e3a3a657865637574653a3a6830616231303436396539613265633436c0016a3c70616c6c65745f636f6e7472616374733a3a7761736d3a3a5761736d566d2061732070616c6c65745f636f6e7472616374733a3a657865633a3a566d3c543e3e3a3a657865637574653a3a7b7b636c6f737572657d7d3a3a6834366233336639333361666331623763c10181013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6761733a3a6837386632636636346164646431343361c2018d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7365745f73746f726167653a3a6865636636323032383332323662373832c3018d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6765745f73746f726167653a3a6861316636323737613331313130393663c40186013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f63616c6c3a3a6835663230636636663165333839393563c5018d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f696e7374616e74696174653a3a6864326532663539636465306138353130c60188013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72657475726e3a3a6832396461353161396162646234303561c70188013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f63616c6c65723a3a6864656633663032383134636361353231c80189013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f616464726573733a3a6838363865653237653462343861353831c9018b013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6761735f70726963653a3a6838316537663035313265643362373466ca018a013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6761735f6c6566743a3a6830323362363536383233336135643562cb0189013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f62616c616e63653a3a6833373533346361366335393763656365cc0193013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f76616c75655f7472616e736665727265643a3a6839643532393035373536616536656334cd0188013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72616e646f6d3a3a6835323963343639616539633636613265ce0185013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6e6f773a3a6864303339646232663361373133333062cf0191013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6d696e696d756d5f62616c616e63653a3a6833383066663563313534633435326139d00193013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f746f6d6273746f6e655f6465706f7369743a3a6831373233646136613864666162336265d1018f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f64697370617463685f63616c6c3a3a6864656237366538396137353465393239d2018c013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f726573746f72655f746f3a3a6835333538653031613762356330323661d3018e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f73697a653a3a6832326366363133306331333139393665d4018e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f726561643a3a6864623333366664343434653230626561d5018f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f77726974653a3a6831393062363833343835346334613038d6018f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6465706f7369745f6576656e743a3a6863626133613366323965316631636331d70194013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7365745f72656e745f616c6c6f77616e63653a3a6832373836383431393861646365373234d80190013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72656e745f616c6c6f77616e63653a3a6863306338613638333737383764643965d90189013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7072696e746c6e3a3a6837353265393162333164363565656363da018e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f626c6f636b5f6e756d6265723a3a6836616438613932323135336566613130db0195013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6765745f72756e74696d655f73746f726167653a3a6865356330316164393839303662636531dc013273705f73616e64626f783a3a696d703a3a64697370617463685f7468756e6b3a3a6832636535326261616330666564666539dd017673705f7761736d5f696e746572666163653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7761736d5f696e746572666163653a3a56616c75653e3a3a6465636f64653a3a6839313739656230363031656533383836de015f3c70616c6c65745f76657374696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830646439393530393564373262353463df01603c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833663566636439386265313137303437e0013a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6833653531353264366636393366323138e101763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6866393163313136663435613438343064e2016d3c70616c6c65745f636f6e7472616374733a3a436865636b426c6f636b4761734c696d69743c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a6862663066343538646438323534633637e301386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833353631386263323061643263613533e401613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6864393066656662656632323737333362e501723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6863353262383862393764653164663663e6016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833616161343464303637643966393839e7017973705f7761736d5f696e746572666163653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f7761736d5f696e746572666163653a3a56616c75653e3a3a656e636f64655f746f3a3a6834643861343162616434623230643364e801746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6835343864373232376232643037633430e901776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6830303337653433303935393165346337ea01a40170616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6e7472616374733a3a526177416c697665436f6e7472616374496e666f3c436f6465486173682c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6861316130663965323139306439396462eb01776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6862343962393235313735323264323630ec01776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a72656d6f76653a3a6836336536666330643963316533366634ed0148616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6837363937636365653339363865616236ee014b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6835613966376333393662653462643339ef0196013c70616c6c65745f636f6e7472616374733a3a54726965496446726f6d506172656e74436f756e7465723c543e2061732070616c6c65745f636f6e7472616374733a3a54726965496447656e657261746f723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a747269655f69643a3a6832636363666634323635323632633537f0013e70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6831666364396535623831306162613631f1014070616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836396132326261376438663336313562f2016e3c70616c6c65745f636f6e7472616374733a3a5f5f4765744279746553747275637447617350726963653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832313933383630343736616536643161f301723c70616c6c65745f636f6e7472616374733a3a5f5f476574427974655374727563745072697374696e65436f64653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866303165636637666430633738653561f4013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6836326263326333363362626461396362f501753c70616c6c65745f636f6e7472616374733a3a5f5f4765744279746553747275637443757272656e745363686564756c653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861316162373937613336646662393538f6017a70616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6e7472616374733a3a5363686564756c653e3a3a656e636f64655f746f3a3a6839316533333465313534386462636435f7014970616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6835356134613666383464343536393137f8019b013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b4761734c696d697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862306333613464356264316163336364f9019a013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617856616c756553697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865353538393163646262356665653137fa0196013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178446570746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835646538346138626334653730653631fb0199013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a43616c6c4261736546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862356364303861386132383430306465fc0199013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a436f6e747261637446656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839356632376435306234633563396539fd01a0013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834396539323330633263653965326439fe019d013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53757263686172676552657761726444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836346431373063663439663765613561ff019f013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a52656e744465706f7369744f666673657444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837653566646530393834663365336436800299013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a52656e744279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683539613039636661343265373338653181029f013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53746f7261676553697a654f666673657444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68313962353564306261353461323862388202a1013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5369676e6564436c61696d48616e646963617044656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683361383937616664656433323233313283023970616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a626172655f63616c6c3a3a686336636332643061363433326236653084023170616c6c65745f636f6e7472616374733a3a6761733a3a6275795f6761733a3a68653765383535386530336633616466638502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686434323039623536316261396662643586024870616c6c65745f636f6e7472616374733a3a657865633a3a457865637574696f6e436f6e746578743c542c562c4c3e3a3a63616c6c3a3a68303237613963386439393335653930378702783c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6d6d69743a3a683330303963313230356230303237323588023b70616c6c65745f636f6e7472616374733a3a6761733a3a726566756e645f756e757365645f6761733a3a686534666639326335613434343135343189023a70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a726573746f72655f746f3a3a68393833393634383630336662373065338a02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a68613863343435373161346665336464338b0268636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a68343961363066366433323062313937668c02437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68363363303464386163333238383865618d02a4013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a6765743a3a68313135643639326232623562306536378e0291013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6d616b655f667265655f62616c616e63655f62653a3a68303036633065343463626462386335378f02b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a68373837313763663034356638646639379002613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a683161376130343432613333343435353791027770616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6e7472616374733a3a5363686564756c653e3a3a6465636f64653a3a686637373162646261633963646636356692023b70616c6c65745f636f6e7472616374733a3a7761736d3a3a636f64655f63616368653a3a6c6f61643a3a68386436643935613931356135356361669302386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686131613839643738396639386366663994024470616c6c65745f636f6e7472616374733a3a7761736d3a3a707265706172653a3a707265706172655f636f6e74726163743a3a683963346466376637656264333336306595026f3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a686534306530336162653065363761633196023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683537373764663566376362613233326197024b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6835356638373935633738353034613239980248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6830313365376231616330616238396664990248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a68316538663462633234356236613936309a0248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a68326666653366663463656230306334349b024b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a68353635363837323631353035383561619c025c3c70616c6c65745f636f6e7472616374733a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68613531393237346630613339326339359d02437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68353631376562306538303763376661619e024f70616c6c65745f636f6e7472616374733a3a657865633a3a457865637574696f6e436f6e746578743c542c562c4c3e3a3a696e7374616e74696174653a3a68663939323535613062626434333264369f023870616c6c65745f636f6e7472616374733a3a72656e743a3a656e6163745f766572646963743a3a6833663932353133653465303634383231a002b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6837376362363235323563613138313361a102613c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866373932333238663439646534353835a202613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6831373930336362376239393933666237a302613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6834613032316234663762396331353035a4023f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f65787465726e616c3a3a6864636435383264653630313266353739a502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836613264393532346438653338623938a6024170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a696e6a6563745f7265666572656e64756d3a3a6837656665363237353866636565663161a7023d70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f7075626c69633a3a6861653531363131363131663531343739a8023a70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6465706f7369745f6f663a3a6864343737613236653738633964366530a9023a70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a766f746572735f666f723a3a6861313564373563666162636439623538aa02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832343333626537383965646237643264ab023770616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a766f74655f6f663a3a6865313532363036346565353538313837ac023f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a64656c6567617465645f766f7465733a3a6838663066383063616638376130373630ad02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834636163346139323662373065653130ae0285013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a456e756d657261746f723c4b2c562c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6832663561306362623432353032326630af024070616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a636c6561725f7265666572656e64756d3a3a6862353335303165396538633865373162b0024470616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a69735f6163746976655f7265666572656e64756d3a3a6836393530613263613866663866366263b1023e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a656e6163745f70726f706f73616c3a3a6830333739393831663836626535663631b202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831316664313364366633643966326666b3026b6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206e6f64655f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6835623764626236663631316161646532b4024873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6863636231373236653862303264366236b502446672616d655f737570706f72743a3a7472616974733a3a43757272656e63793a3a7265736f6c76655f6372656174696e673a3a6861346566313663366462636431646335b602696672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a4b6579466f726d61743a3a73746f726167655f6c696e6b65645f6d61705f66696e616c5f6b65793a3a6861383738393835613830353365383963b7023e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837623835393735313135623264346164b8023f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7265666572656e64756d5f696e666f3a3a6839333538333539646364333663323833b9024070616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6830396363356161386362633238366630ba02713c70616c6c65745f64656d6f63726163793a3a5f5f4765744279746553747275637444656c65676174696f6e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833383038366163643261363561356466bb02713c70616c6c65745f64656d6f63726163793a3a5f5f476574427974655374727563745075626c696350726f70733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833663430353665376564636663623331bc024970616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831633066343861616332363266616361bd029a013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c61756e6368506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863396563396332356233636634626563be02a3013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a456d657267656e6379566f74696e67506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864613834666262353431366439313939bf029c013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864373463363933613134633834636266c0029d013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a456e6163746d656e74506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862313932333663386663313563663464c1027970616c6c65745f64656d6f63726163793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a43616c6c3c543e3e3a3a656e636f64655f746f3a3a6839316362646638646466653163326563c202723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6830396337336132333262623137633637c3025c3c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6836393037383137373764306533313833c402497061726974795f7363616c655f636f6465633a3a656e636f64655f617070656e643a3a657874726163745f6c656e6774685f646174613a3a6861323737633931663966633832343536c502703c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6836373132303034303161363232316536c6023770616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a646f5f766f74653a3a6838306564663337383637623230633734c702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861613032313139336661353466313466c802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864666563643863613434303466653366c902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831663364373439653865393736373433ca02336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465635f7265663a3a6866623736663362613165303766633035cb02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866373062353963393134653466366664cc02403c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835376438666264666661356536313336cd02cc016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a456e636f64654c696b654c696e6b6167653c504b65792c4e4b65792c4b65793e3e3a3a656e636f64655f746f3a3a6831623735616532313532353064303065ce02b8016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a4c696e6b6167653c4b65793e3e3a3a656e636f64655f746f3a3a6830663661353638316331663339346166cf02776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6833653830653835353338653637393234d002336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e635f7265663a3a6836646332373763313136386261333231d102303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831323538623636633732623036643265d20290013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a657874656e645f6c6f636b3a3a6833643665336338646436656636303639d302613c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837633139316333333337663637653031d402466e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a6865623931306334346537323036373461d502486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7574696c6974793a3a6836363863623035333837373130383430d602486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a6836643166363239306366636639393733d702496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a6832616664353261663736316465366137d802486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a6833303138613065373830313333323064d902486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a6864646437393836396561336166633536da024a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f64656d6f63726163793a3a6838333037376431393062653939376239db02556e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6c6c6563746976655f496e7374616e6365313a3a6865313232383762356362376564343737dc02536e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e735f70687261676d656e3a3a6863303834306631623039353333626464dd02556e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d656d626572736869705f496e7374616e6365313a3a6839376663336538323662343138396665de02486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a6834656130353731613762343664373239df02496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f74726561737572793a3a6830373363306637653237663761663665e0024a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6e7472616374733a3a6839353032663465633532356235343834e102456e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7375646f3a3a6836663862323963636236643033656432e2024a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a6837306461633661323161326663343233e302496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a6837653935663965313737343138396465e402496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6964656e746974793a3a6864323566616461376531383665623030e502486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f736f63696574793a3a6864353132313661373839333164396230e602496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7265636f766572793a3a6866626139646162636665633364396464e702486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f76657374696e673a3a6861363262353761313065343930346632e8023f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6838343038363961353863306238633831e902713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6865663737323932393138336431383266ea026f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6831313834343738393863386135316431eb027d3c70616c6c65745f696e64696365733a3a616464726573733a3a416464726573733c4163636f756e7449642c4163636f756e74496e6465783e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6866373564666366356336376563393039ec027d70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a656e636f64655f746f3a3a6830336137386332646162616262353639ed02426e6f64655f72756e74696d653a3a53657373696f6e4b6579733a3a696e746f5f7261775f7075626c69635f6b6579733a3a6865363666373333336261333361656138ee02726e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206e6f64655f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a6866383733633364623931393465663334ef026f6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206e6f64655f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a6836626563363563353439336235386430f0028e0170616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6c6c6563746976653a3a5261774576656e743c486173682c4163636f756e7449642c493e3e3a3a656e636f64655f746f3a3a6865303133366466313030306239663335f102653c6e6f64655f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6834643231363136623235343830393733f20285013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7472616e736665723a3a6838613464363664643134303736633435f302483c5b543b20385d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6862313130666166363137363031643033f402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836363337366131376538323362356639f502437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6838363233323763633465313534353935f602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839623530666537326538663164333134f702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835333763326636653234643430373466f802766672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a76616c75653a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f7261676556616c75653c543e20666f7220473e3a3a6765743a3a6839363766366165353436323166386432f902437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6834653330353461386138396466613831fa02366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a626c6f636b5f686173683a3a6832343433373138633535643534383837fb023770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a6830346631366664353137633465323134fc023b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6833363239333634383232366539633037fd023f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6838373535346134356237343833666139fe025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831636464336665313164376232616363ff02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686464373839356134636236346362323380035a3c70616c6c65745f7374616b696e673a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a686539373436323161663739613036626581033470616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6c65646765723a3a68623765613233396435313531636631338203706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68353538323037653965363563333261378303386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363332383862316439316339383966358403706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a683835376436303732653465333161626485035f3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a686332656361626135373066333935643186035f3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68336364396433343333353132646130348703653c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6838613562626239613433653037616562880399013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a683334633463386337383039346134376189038d013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a68663237303363366332376662323132358a034b6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a7365745f6d656d626572735f736f727465643a3a68616163356163383434656339636335638b035b3c70616c6c65745f74726561737572793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68653062373261643462393733306435648c03563c73705f72756e74696d653a3a44697370617463684572726f722061732073705f72756e74696d653a3a7472616974733a3a5072696e7461626c653e3a3a7072696e743a3a68633066373138633935356130643634378d03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68303264623332613236646134313439648e035b3c70616c6c65745f7265636f766572793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68613935396666393732666665386434658f035c3c70616c6c65745f736f63696574793a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683332353566313531643664303961346390034a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a683963333434653630633631653562336191033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683035353864643065373561356432613292032f636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68613464643335613231313331613565342e31393693032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a686462303138343034393838663262343594032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a686130623962343764626266346632373395032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683030366334333662383333643465313396032b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68353434316663386636616165373266369703543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68366636323035663034376166636165629803543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683366323637663033373665616234663499036b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68376362326332663830623762623961359a03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68386165376366653737663163373662649b037a3c70616c6c65745f696e64696365733a3a616464726573733a3a416464726573733c4163636f756e7449642c4163636f756e74496e6465783e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68613363643430363432386437373633329c036c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a68393066663333616465356538656439379d037a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a68363861393935633264643030666335659e036c70616c6c65745f7375646f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7375646f3a3a43616c6c3c543e3e3a3a6465636f64653a3a68313635623762323539656631626237349f037470616c6c65745f7265636f766572793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7265636f766572793a3a43616c6c3c543e3e3a3a6465636f64653a3a6862626431623264323936633537373263a0039b063c6e6f64655f72756e74696d653a3a52756e74696d652061732073705f6170693a3a72756e74696d655f6465636c5f666f725f4d657461646174613a3a4d657461646174613c73705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a426c6f636b3c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c7533322c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e2c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c3c70616c6c65745f696e64696365733a3a4d6f64756c653c6e6f64655f72756e74696d653a3a52756e74696d653e2061732073705f72756e74696d653a3a7472616974733a3a5374617469634c6f6f6b75703e3a3a536f757263652c6e6f64655f72756e74696d653a3a43616c6c2c73705f72756e74696d653a3a4d756c74695369676e61747572652c286672616d655f73797374656d3a3a436865636b56657273696f6e3c6e6f64655f72756e74696d653a3a52756e74696d653e2c206672616d655f73797374656d3a3a436865636b47656e657369733c6e6f64655f72756e74696d653a3a52756e74696d653e2c206672616d655f73797374656d3a3a436865636b4572613c6e6f64655f72756e74696d653a3a52756e74696d653e2c206672616d655f73797374656d3a3a436865636b4e6f6e63653c6e6f64655f72756e74696d653a3a52756e74696d653e2c206672616d655f73797374656d3a3a436865636b5765696768743c6e6f64655f72756e74696d653a3a52756e74696d653e2c2070616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c6e6f64655f72756e74696d653a3a52756e74696d653e2c2070616c6c65745f636f6e7472616374733a3a436865636b426c6f636b4761734c696d69743c6e6f64655f72756e74696d653a3a52756e74696d653e293e3e3e3e3a3a6d657461646174613a3a6839316236333832656330386563373266a103aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a6864373562303334313263386431613964a2036b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6837623336343161326139316430653263a3033d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6836356138323233393863633765333436a403633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6863333836373734376630383533333761a5034d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6835386163656333386634646635653633a6034a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6862313662346664653430613036303833a703473c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831613936633561383337333835663638a80347636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207533323e3a3a666d743a3a6834383834303938396633316662393031a9033e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6861666233356534386630336131633465aa035273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6866643232643034323535663638396634ab03583c70616c6c65745f696d5f6f6e6c696e653a3a4f6666636861696e4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862353663383330653462646339643934ac03383c285431302c205431312920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862363365393836373462613837326431ad03303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838343338373437393439393761346636ae0396013c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732070616c6c65745f73657373696f6e3a3a4f6e6553657373696f6e48616e646c65723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6f6e5f6265666f72655f73657373696f6e5f656e64696e673a3a6835326264663665323061663230616233af03d3023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a54726169743e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a6864336563323230643131303961653731b003443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6837316233383732353337356534613433b103706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866313464336431333934636663663461b20368636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6833613439393630306633646462633366b303f4013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a54726169743e3a3a56616c696461746f7249642c203c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a54726169743e3a3a46756c6c4964656e74696669636174696f6e293e3e3a3a6f6e5f6f6666656e63653a3a6865323661336162313866616434366362b4033570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6835316433626631383463363062666264b5033470616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a626f6e6465643a3a6836383731343534656366306135396566b6033b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7570646174655f6c65646765723a3a6836363232636237373934613763323731b7034970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a6864333736336438623638363764626463b8035e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a6830383866303961623436356330353464b903726672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a696e697469616c697a655f626c6f636b3a3a6838643534356164393831393863336636ba03746672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a657874726163745f7072655f6469676573743a3a6865333534653561626234386137663365bb03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830376536373730333530373833656436bc03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861326437366139663161623532383733bd03716672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b6579313a3a6865373436346265383633313432373532be034a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6835346434363165306161633464373939bf032d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6861613633323434613665653438656434c003716672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b6579313a3a6838383536616163313135363263636137c103386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830656362303838376238633237393736c203716672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b6579313a3a6864636135303635303264633961666634c303543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6865396565343764623562313863356563c403437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6839346666363633626539396531633266c5037a3c6672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a53746f726167654974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6831373562343535613262623832323030c603476672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a7075745f73746f726167655f76616c75653a3a6833306138306533636233303166313264c703476672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a7075745f73746f726167655f76616c75653a3a6865373532383032313863616533303938c803476672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a6765745f73746f726167655f76616c75653a3a6833366530623033306631633562393836c9037a3c6672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a53746f726167654974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835383261616133646632616264346238ca03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833663862646362333164663162646663cb037a3c6672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a53746f726167654974657261746f723c543e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839376666626631653130386564646461cc03486672616d655f737570706f72743a3a73746f726167653a3a6d6967726174696f6e3a3a74616b655f73746f726167655f76616c75653a3a6861376363353162666564653361656135cd034b6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a72656769737465725f65787472615f7765696768745f756e636865636b65643a3a6861373334663833333132613335386634ce03366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e697469616c697a653a3a6861366633623938363765326336326339cf03733c285475706c65456c656d656e74302c205475706c65456c656d656e7431292061732073705f72756e74696d653a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6830363934306464326139363764343331d0037a6672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65733e3a3a6170706c795f65787472696e7369635f776974685f6c656e3a3a6861623933646434343165633861376231d1039f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a6838356661333738313536613735323032d2035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865656334656163333836303065663964d303406672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6835363737346566346462643931396133d4037d3c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c543e2061732073705f72756e74696d653a3a7472616974733a3a5369676e6564457874656e73696f6e3e3a3a76616c69646174653a3a6861613565313635386566313133336263d503363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6861366631653164373332623438343138d603467061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a436f646553656374696f6e3a3a626f646965733a3a6830613263616439623032326331373162d7033e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836353063333436636663323066366539d8034070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863666562343031626262393331366338d9034570616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863373533353930333435623035626436da035070616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6862633538306330326534653434616137db03a2013c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5265706f72744c6174656e637944656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832323938306530353931623165643666dc039f013c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a57696e646f7753697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831363063393361316436313534623165dd0334636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6831323438383566306438653036623037de032e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6863663161613466313036646532353033df033c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6836613661393737383033306439363061e0032d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6862363037313061353363363061616630e10334636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6837646333626436363865626561376462e2032e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6831373930643832323038393461373038e3033c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6835323737626231363136323834363632e4032d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6864303138386633353034386432333663e50334636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6838356538663638636139653863616532e6032e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6839616630646135613731666561663835e7033c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6866616464313535383135636538663934e803573c49642061732073705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3c543e3e3a3a696e746f5f7375625f6163636f756e743a3a6831336533616531303362303733353130e903553c73705f72756e74696d653a3a4d756c74695369676e61747572652061732073705f72756e74696d653a3a7472616974733a3a5665726966793e3a3a7665726966793a3a6838343238646263656161303237353965ea036073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6832393038643332346433613331366539eb03613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6838313830643536343735383630663934ec03683c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866633135656635383130353232346135ed037d7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c205230293e3a3a6465636f64653a3a6861393832396435663965303637306637ee03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831643130383766386135353334333433ef03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6838633538323632396537656530386639f003303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835343266353666663539323633666630f103393c54206173206672616d655f737570706f72743a3a7472616974733a3a4c656e3e3a3a6c656e3a3a6863343463386439663762623033383161f2032d616c6c6f633a3a7665633a3a5665633c543e3a3a726573697a653a3a6830336532313730326130343162613935f303443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831636232396664353236653137643163f403463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6838343634333533643836646563633965f503543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832653338333466336137313262363366f603723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833383166383730333239313664353538f703543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6839383337376237656362663436333239f803513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6836336236343538336535646333613337f903513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6839306462366562313630333038353364fa03733c285475706c65456c656d656e74302c205475706c65456c656d656e7431292061732073705f72756e74696d653a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6832363161613066376437646137356437fb033870616c6c65745f626162653a3a4d6f64756c653c543e3a3a646f5f696e697469616c697a653a3a6863613262366666333064623965643466fc033e70616c6c65745f626162653a3a4d6f64756c653c543e3a3a63757272656e745f65706f63685f73746172743a3a6866613161653966323663373761316164fd03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863613461346432316630373239303065fe03386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836356537383964666166633936376462ff033770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a686235313437356561346234313636313780043570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a68346439386131373866643831353638648104386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68356636323535626532306433353463328204776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a68343237323961343932343232653131398304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686562326636626634356364326134633884043d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a68353962323530333063386232366634648504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68393035386161303733373865386330328604386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683665636135313764646237323539383987043c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6465706f7369745f636f6e73656e7375733a3a686339643233333135643832333236363888042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68633031303439663033633938346435378904386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68333631636530366634366330633564628a04376672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a68396266343464313637373665613037338b043a6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68343638646531353062656435303435368c043c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68306636363562636531666639316539628d04703c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637443757272656e74496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68366438636264323339366535626135318e04683c6672616d655f73797374656d3a3a5f5f476574427974655374727563744576656e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68656439376363303933656438623464348f04703c6672616d655f73797374656d3a3a5f5f4765744279746553747275637445787472696e73696373526f6f743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68623663366163613935306233363138649004703c6672616d655f73797374656d3a3a5f5f4765744279746553747275637445787472696e736963436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68613438336337326433633963303161669104693c6672616d655f73797374656d3a3a5f5f476574427974655374727563744163636f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68653130663639666536356336383931629204346672616d655f73797374656d3a3a4d6f64756c653c543e3a3a66696e616c697a653a3a6861333061323831663063363435393834930485013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a456e756d657261746f723c4b2c562c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68306666316438326133653164336666669404696672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a4b6579466f726d61743a3a73746f726167655f6c696e6b65645f6d61705f66696e616c5f6b65793a3a68313638333738373563336632353635329504386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836366135613838613330376563316639960485013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a456e756d657261746f723c4b2c562c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68316531666161306332363733663661649704696672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a4b6579466f726d61743a3a73746f726167655f6c696e6b65645f6d61705f66696e616c5f6b65793a3a68646632333331346336336337356264649804386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832616162306362303164613465313131990485013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a456e756d657261746f723c4b2c562c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a68353662643439663662646438316338629a04696672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a4b6579466f726d61743a3a73746f726167655f6c696e6b65645f6d61705f66696e616c5f6b65793a3a68336665643063333931666639616463309b04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68623865633930613264313361366462389c044a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68383033323135663636663530346563399d043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68636433653434303562366362373966619e043c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68666539616263656334653932356361309f043e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6837353435313161666338396166353565a0044770616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861386132383637626637343931323961a1049c013c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a44454455505f4b45595f50524546495844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863303466636434366265346264653334a2043570616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a64697361626c653a3a6861393934323761663135663236636630a304437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836613966336232366434363130353439a4049c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831623035623364306138373866306436a504b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6834396135396639353464376461383039a6043c6672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a646f5f76616c69646174653a3a6833376639363263363262376330636138a7045d3c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6865323231363936613636653762653964a8045f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831376638636666393031313164333963a9046f3c285475706c65456c656d656e74302c205475706c65456c656d656e7431292061732073705f72756e74696d653a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6863613639353039343261363066343466aa04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839316338643937666233323264316236ab046f3c285475706c65456c656d656e74302c205475706c65456c656d656e7431292061732073705f72756e74696d653a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6864643264313938386262343036356462ac0490013c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a52616e646f6d6e6573733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a486173683e3e3a3a72616e646f6d3a3a6838623438303031316563393832363031ad04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837303666303832313061366661346232ae0468636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6835643665346535376531643836336432af042d70616c6c65745f736f63696574793a3a7069636b5f7573697a653a3a6861313339316563613731346431383831b0043b70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a62756d705f7061796f75743a3a6866633931313461663334373965353863b1043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6832393232356239643265636531343138b204706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6838646365626133336331326432353035b3045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833303031616338376665366430373930b404396672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a74616b653a3a6861316631303063663633313131663031b5043e70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a73757370656e645f6d656d6265723a3a6861643435633639366330383266376632b6044470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f70687261676d656e3a3a6864326531616662306631333233323064b704386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835303934643436346164333364663064b804437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6831353630366539353939653834636139b9043970616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6838366131353032633764646633323136ba043b70616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6834383830663966626337376666383039bb04643c70616c6c65745f7375646f3a3a5f5f476574427974655374727563744b65793c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835343631316264623365356261313939bc043e70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6830653464393031396339343066613561bd044070616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6839306430626637386333373938383831be044970616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863316661323230366563336363666333bf049e013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a526f746174696f6e506572696f6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865653837383138393735633434396362c0049b013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a506572696f645370656e6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831643836656139396431643038663938c1049a013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178537472696b657344656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835613765373830373334383936646237c204a2013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a57726f6e6753696465446564756374696f6e44656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839636439633864373135623130643239c304850170616c6c65745f736f63696574793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f736f63696574793a3a4269644b696e643c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a6865336265323830653333616261393437c4043d70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6864393733613163613237313631343730c5043f70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836386531663064643431333037653066c6044870616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836336666666561313538363835353462c7049a013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a54697046696e6465727346656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833653438623263353930393862646537c80498013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5370656e64506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865613434626261396639616231326631c90491013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4275726e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862613436613435363034653231323365ca0499013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f706f73616c426f6e6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834363330343133336437623531356461cb04443c7061726974795f7761736d3a3a696f3a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6865386662346165393338366663353734cc046f3c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6865613766356338653866623764383163cd042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6861323931376539633633386130386339ce04347761736d695f76616c69646174696f6e3a3a76616c69646174655f6d6f64756c653a3a6830346136386562343466626635623738cf0448616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6836326231383837323861393963303830d0043c7061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a66726f6d5f6d6f64756c653a3a6830363635613134666339343330393763d104537061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c654275696c6465723c463e3a3a7265736f6c76655f747970655f7265663a3a6831353837383863343566666539616566d204a9017061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c7061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c6553636166666f6c643e20666f72207061726974795f7761736d3a3a656c656d656e74733a3a6d6f64756c653a3a4d6f64756c653e3a3a66726f6d3a3a6866633639656565353635653932393835d30444707761736d5f7574696c733a3a6761733a3a436f756e7465723a3a66696e616c697a655f6d6574657265645f626c6f636b3a3a6864393833643833313031623561386535d4042d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6836653865663132366235363563383365d504507061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c654275696c6465723c463e3a3a707573685f66756e6374696f6e3a3a6833613061326634636332643634366162d6043c707761736d5f7574696c733a3a737461636b5f6865696768743a3a696e6a6563745f6c696d697465723a3a6838376435353561613436373461636566d7046b3c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6832666634636163653661323937613735d8044170616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6835396635303536356536363838363265d9044370616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6866363434663835393434633133666264da04437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6866613564656438353362333739643039db043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866353161666334303938653136326266dc0468636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6836363761326132656265393764626563dd04386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839363136643362343035313534396432de045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838313730643033303963376132316231df045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863363432616562643938356665613835e004386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865653036386531326530656662613531e1044270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a69735f6d656d6265723a3a6862333265636133396534633833323662e2045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863643264376161656233653035393038e30493013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a436f6e7461696e733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a736f727465645f6d656d626572733a3a6833653137623636316633633638396637e404386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830333630326465666238326134613937e5045c3c70616c6c65745f7375646f3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861613566363966396431353163326334e6043770616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a7075745f6269643a3a6838646135313434343439393330333865e7043a70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6164645f6d656d6265723a3a6831643836363035623636326362333433e8044273705f72756e74696d653a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6865336566396636393138336531666138e904603c70616c6c65745f74726561737572793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6830383030323039656462386234643037ea04613c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6834633234623361636236353433656330eb046b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6863326231633262353665333432646565ec04753c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a47657443616c6c4e616d653e3a3a6765745f63616c6c5f6e616d65733a3a6830663033343935353264336430373266ed04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861363534353137616431643466366439ee046f3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6832303535373938336535363336666432ef04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837616433376333343363333139306132f0045770616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c543e3a3a636f6d707574655f6665653a3a6835353838323765623762393839306338f1049a0173705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a426c6f636b3c4865616465722c45787472696e7369633e3e3a3a6465636f64653a3a6837666434643136643933633039303332f2043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6863633339343936333437353237626438f304386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838666634303138633539633336363138f404437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6837653635376634323630373866633838f5043e70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a6368617267655f6761733a3a6835636235653339653134326336333430f60481013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f73746f726167653a3a6864646637313161353264313466656634f70488013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f72656e745f616c6c6f77616e63653a3a6834373866323737663365313565353562f804683c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6831393862383136373563353665363465f904633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6831633565346165666436616430306532fa043e636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723a3a6e74683a3a6835653166333639636633343632643666fb043c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6833386537396134666339616339633663fc043e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865623239663365613962333135363232fd04703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835343461383439373366353635336631fe04693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839303031613235613937653730346239ff043670616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6c6f636b733a3a683661383831386135366164663734356180053d70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a7570646174655f6c6f636b733a3a686661326236663361643636623031646181053f70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683763303365636264336266326636333382054170616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a686137343937323234356435616263353483056e3c70616c6c65745f62616c616e6365733a3a5f5f476574427974655374727563744163636f756e743c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683365373331643964366139633630383184054a70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68643164383438613237643638333834668505810170616c6c65745f62616c616e6365733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f62616c616e6365733a3a4163636f756e74446174613c42616c616e63653e3e3a3a6465636f64653a3a686433373830383365633664643432633286053f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683463656635333165303731383437363287054a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683861613530356138396232616636303488055370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a683466343362653265353561363035303189055170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68653238363064396334396633323466328a05860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a68306563383736383235343234303034648b055f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68313662616463373865643862303665638c05623c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68616436656630653262396237393434348d057d3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f73746f726167653a3a68386661623331356636396364613634628e057f3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f636f64655f686173683a3a68313866316333323538323034353836618f0584013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f72656e745f616c6c6f77616e63653a3a6836383561636664373462303935396561900581013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6e74726163745f6578697374733a3a683130663464383939386565386261396391057d3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f62616c616e63653a3a686339353433303035303436396661363392058f0173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5261775072654469676573743e3a3a6465636f64653a3a683433343637626438333338313430633293054870616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6c6f636b65645f7374616b655f6f663a3a683934386136303064666263303835646694054673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a68653631313936646137623839666437619505533c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68633963383932646362363831653661379605583c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a5061727469616c45713e3a3a65713a3a686639336562373839616435663637363897054d6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a636f6d707574655f6d656d626572735f646966663a3a6837383561376662303830653366383434980599013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a68383765393962646332376666323464379905386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68306633666161633962383864336137629a05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68336437663239373464306564653539619b05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363830316233623632613032336261369c05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363965366462386532663261343465369d05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68373637326165343964363764316230359e05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68393830373164366634353933363063309f05386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861623239303139633132336163353831a005386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863633436633435306364396335393665a105386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865303165313338323063653961623664a205396672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a74616b653a3a6837313965363362643131366664613332a3053370616c6c65745f636f6e7472616374733a3a657865633a3a7472616e736665723a3a6837333832353661386633626335356637a4057c3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6d6d69743a3a6838353332666135353064323134323264a5052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6831623561373034363062313439316663a60583013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f636f64655f686173683a3a6863613437396433636665613038376566a70585013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6e74726163745f6578697374733a3a6835313835613262393338336462626262a80581013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f62616c616e63653a3a6837313563313464643635666162663062a9053f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6835333336366266333631333437353565aa054170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6834623930396261316464363765323731ab054770616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6836646230323662366462303235303437ac054970616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6831656439613037336536333766343934ad055270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863623237333933363766346432313339ae05a3013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5465726d4475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835373462386439623034303230303162af05a7013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465736972656452756e6e657273557044656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830373063623034333434623464636132b005a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446573697265644d656d6265727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834626366393965653732316437336666b105a4013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a43616e646964616379426f6e6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837636230336665386231343330326264b205623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835343031623966656263393935626235b3054170616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a69735f766f7465723a3a6863333235343861353633636232383861b4054870616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f72656d6f76655f766f7465723a3a6862393334343233333065303163316563b5055270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a72656d6f76655f616e645f7265706c6163655f6d656d6265723a3a6833373866363734663932633637613865b6056a3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6862336262393462656635356661363835b7054a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6861386637633236313234333339663137b8053d70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863396239353532393632323035623638b9053f70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863333038366633656138393132333763ba054170616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6836613765336134386339386161623464bb054370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6831386266323565356163366262366334bc054370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6866656261383436646564666539623663bd05437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6833633735346639393531303431613832be054a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6834316336613465656363326665666637bf053470616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a70726f78793a3a6861636536313331306431366664333862c005716672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b6579313a3a6865373030636435633866663261316130c1053e70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a7265636f766572795f636f6e6669673a3a6839373334336330666230326134393062c2053e70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a6163746976655f7265636f766572793a3a6834636635353038353536663431343433c305603c70616c6c65745f7265636f766572793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6861333866323563646363346264633333c4053970616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a766f74696e673a3a6837626435393033386663633830356136c5054470616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a66696e616c697a655f70726f706f73616c3a3a6835306531366361656334306335393065c6053970616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a766f74696e673a3a6865656531616135306233306265366530c7054470616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a66696e616c697a655f70726f706f73616c3a3a6833333632633934666533333763343831c805643c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833613764323036333266363938356466c9050c436f72655f76657273696f6eca056b3c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e67206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6864333032633964306561306431383862cb0512436f72655f657865637574655f626c6f636bcc055373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6862643564616338353534313232356637cd0515436f72655f696e697469616c697a655f626c6f636bce05114d657461646174615f6d65746164617461cf051c426c6f636b4275696c6465725f6170706c795f65787472696e736963d0051b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bd10520426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373d2053a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a6861396365383836326639306365343634d3051c426c6f636b4275696c6465725f636865636b5f696e686572656e7473d405453c737472206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6838313935666665383031663034386566d50518426c6f636b4275696c6465725f72616e646f6d5f73656564d6052b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ed7055373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6832356238666565616136386534636161d805214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572d9055173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6834653530383333303662393361363064da051e4772616e6470614170695f6772616e6470615f617574686f726974696573db0515426162654170695f636f6e66696775726174696f6edc051b426162654170695f63757272656e745f65706f63685f7374617274dd0521417574686f72697479446973636f766572794170695f617574686f726974696573de051d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365df0511436f6e7472616374734170695f63616c6ce00518436f6e7472616374734170695f6765745f73746f72616765e1051c436f6e7472616374734170695f72656e745f70726f6a656374696f6ee205205472616e73616374696f6e5061796d656e744170695f71756572795f696e666fe3052153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973e4051f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973e5052b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6830313736373263396538616631356164e605706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6830653132393735616562386233613132e705706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866626432336665616564303431636330e80584016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654c696e6b65644d61703c4b2c563e20666f7220473e3a3a72656d6f76653a3a6830643063663665343463396331323934e90584016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6c696e6b65645f6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654c696e6b65644d61703c4b2c563e20666f7220473e3a3a72656d6f76653a3a6862653765396437613938373463303765ea05437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836343331333363393866626466616133eb05746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6862633031353834653137653335363231ec05776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6837306265643137393435353365346632ed05776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a72656d6f76653a3a6837393330383366626435303234323336ee054370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6832373165376534656134623334663161ef054270616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f663a3a6864383730643031366234303234623564f005706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6830333264616666373033653431373966f105706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6837663966356432653339313661396431f205706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6831653739663162303265643232346131f3054a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6830393537366430316537343936653564f4053c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6839376664303633306330613561353961f5053c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a656e737572655f6e65775f6572613a3a6862663338663335383132373464616163f6053e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863616232343063353334633838333334f7056d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861653065386638373765396166653766f805713c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374536c617368696e675370616e733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835373862663431393538656134313666f9053c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6837333162653966323536663166393831fa05723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838363065346631663034333330353966fb05743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834376337396338306136616332323830fc05763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863666561396562663164313263613234fd05763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834313038373633376436333539353365fe05793c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744d696e696d756d56616c696461746f72436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865653061666161633364656636643161ff05703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683963323230623330353866306236326480064770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a683933356163313261393466366635626581069b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686664663862663638346461313832353982069a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686537376438613934366365353637333483063870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a68663134376436346362313737346337358406746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a68656232383238353266663232626437358506746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a686434336266393732383535313235333486063970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a683664383361333239383364303339653587065f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a686236346236623762623135383236643088063b70616c6c65745f626162653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683231646533646464303836356230396289066b3c70616c6c65745f626162653a3a5f5f4765744279746553747275637452616e646f6d6e6573733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643539376235396262336430303031618a064470616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68396333396137353465333966376165628b069a013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68336165316533626238626536303232368c0696013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68326166346134383338336436666435338d063c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68303738613638343039386132633938308e063e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68633936386334626136376566383963648f06303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68306462313537363964633162333434639006683c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e697445787072206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a683766326332376562356339363136653891066b3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a683964666665656538623835303261633092067d3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a436f756e7465644c6973745772697465723c492c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a683238363963336233663636616637386693066f3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a566172496e743332206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a683336333666363435323464643363623794066f3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a566172496e743634206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a683931643330363634386361636464656195066c3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e697445787072206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a683761336665623262333963346339353196066f3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a68333730323366313566643065386539399706793c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a436f756e7465644c6973743c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a683462303564393031366130333936643698066b3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6862663262343837383763343234623366990686017061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a3c696d706c207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a6520666f7220616c6c6f633a3a737472696e673a3a537472696e673e3a3a646573657269616c697a653a3a68366233313539396532313063633765659a06323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68383164393037643233303337353334389b06783c7061726974795f7761736d3a3a656c656d656e74733a3a696d706f72745f656e7472793a3a526573697a61626c654c696d697473206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a68316238623235616632643561306463339c067c3c7061726974795f7761736d3a3a656c656d656e74733a3a696d706f72745f656e7472793a3a526573697a61626c654c696d697473206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a68306631333864613330396264356565659d06743c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a56617255696e743332206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a68623332323431376664353831393535639e06713c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a437573746f6d53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a68626137353136313761393562653237349f06713c7061726974795f7761736d3a3a656c656d656e74733a3a696e6465785f6d61703a3a496e6465784d61703c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6838616530376530333537376366623832a0064b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6835336665646534366339396461396333a1064b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6836316334323261373262393666373061a206463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6863363736656361306662353932623131a306457061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e5265616465723a3a6e65773a3a6864346431393633336631313935363965a4062d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6837306231356566393130353565666630a50634636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6837653038393363343938343730373562a6062e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6832303661383365613461653862316463a7063c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6838303034393639663534353637316232a8063b636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a7b7b636c6f737572657d7d3a3a6866633630353832303238353365323161a906397761736d695f76616c69646174696f6e3a3a76616c69646174655f6d656d6f72795f747970653a3a6865656437623930326631383838326332aa06347761736d695f76616c69646174696f6e3a3a657870725f636f6e73745f747970653a3a6832653838346361613933363839613732ab06553c7061726974795f7761736d3a3a656c656d656e74733a3a74797065733a3a56616c75655479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836633862656664316131653936643761ac064a7761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a737465703a3a6833643563366363393965343162303734ad06473c7761736d695f76616c69646174696f6e3a3a4572726f7220617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6862343038313364306532343233643935ae06303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861373137636136333337356237313230af06457061726974795f7761736d3a3a656c656d656e74733a3a7365676d656e743a3a446174615365676d656e743a3a76616c75653a3a6837303734316631313732623664306539b006513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6834323430623238313131303831303562b106553c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836663133636237663332313730343139b206303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832386465373265383333393463313632b306553c7061726974795f7761736d3a3a656c656d656e74733a3a74797065733a3a426c6f636b5479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6865376235633238643737326432316461b406303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832376436653531613936663361373939b506303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861663033323733366163393232366563b606303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862366466313239313134323638363564b706303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835613131623766643365356531626535b806303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862356135363864386435636465393938b90633636f72653a3a6f7074696f6e3a3a4f7074696f6e3c26543e3a3a636c6f6e65643a3a6863653437396230643866326537396430ba06483c616c6c6f633a3a626f7865643a3a426f783c5b545d3e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836373334656639343534303938643534bb06453c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838643430616163386465346337333231bc06613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6837363264613865633632636634396237bd06593c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831663838643533646661373565306531be06533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6831343363643033623936373635396637bf06303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6836393630636132353635643063346434c00641707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a636f6d707574653a3a6834353063306263363138336434633535c1065a3c707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a4672616d6520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832363061336434303134326434333236c20646707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a537461636b3a3a6672616d653a3a6837653461643836656461383931373664c3064b707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a537461636b3a3a706f705f76616c7565733a3a6834326363656238383163373963613966c4063f707761736d5f7574696c733a3a737461636b5f6865696768743a3a7265736f6c76655f66756e635f747970653a3a6836353737303063373533333862326265c5062e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6830306533646436316634396566376632c6063c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6866333135633931666164376262663739c706303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838353436633439376236623032643462c80640707761736d5f7574696c733a3a737461636b5f6865696768743a3a636f6d707574655f737461636b5f636f73743a3a6833303861666362393934343234306632c906323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6864623065393638333831373838343031ca063a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6863623664303365333064396432643464cb063773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6830373963386164613333633838613732cc063773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6836656162346130363334383336316265cd064473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6863353835623639343338346161386430ce064b3c73705f61726974686d657469633a3a62696775696e743a3a42696755696e7420617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a6862343363313732333832366430336337cf06443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6833333533343866363161643932636139d006513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6861316533393533646463643739643539d1063d73705f61726974686d657469633a3a68656c706572735f3132386269743a3a746f5f6269675f75696e743a3a6862636462613735396230373335663539d206413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862313731333133313063636331623433d306323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6831303464643534316437356430326234d4064273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a6865356430363361643834626138653534d506573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839313334336531613631353464613961d606473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834376166343262636666646462633835d706347761736d695f76616c69646174696f6e3a3a66756e633a3a706f705f76616c75653a3a6836303837393039376166613930353730d80637616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862353162653534303338653337386263d9063b636f72653a3a736c6963653a3a3c696d706c205b545d3e3a3a636f70795f66726f6d5f736c6963653a3a6835363036313665666265393566353261da06347761736d695f76616c69646174696f6e3a3a66756e633a3a706f705f6c6162656c3a3a6864323165346265393364353964306466db06347761736d695f76616c69646174696f6e3a3a66756e633a3a7465655f76616c75653a3a6835383866623135353464623734363834dc06407761736d695f76616c69646174696f6e3a3a7574696c3a3a4c6f63616c733a3a747970655f6f665f6c6f63616c3a3a6866623763313263363733356663316532dd06543c7761736d695f76616c69646174696f6e3a3a66756e633a3a537461636b56616c75655479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834393861636561383235383936633437de06537761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f6c6f61643a3a6865623166653561353537616566316637df06547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f73746f72653a3a6866343130303539353132313935323733e006547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f72656c6f703a3a6835303633393733663730373930356533e106547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f62696e6f703a3a6834356362613431303962333266363736e2062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6835323133323761366331623330333634e306303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837313764633066383539633630303834e406303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862306135333064326237356661633439e506453c616c6c6f633a3a737472696e673a3a537472696e6720617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6861646530363532663932613936653433e6064c3c7761736d695f76616c69646174696f6e3a3a737461636b3a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832333432363936303939633862393637e706066d656d736574e806066d656d637079e906076d656d6d6f7665ea060462636d70eb06095f5f6173686c746933ec06095f5f6c736872746933ed06085f5f6d756c746933ee06095f5f75646976746933ef06095f5f756d6f64746933f0060c5f5f756469766d6f6474693400550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e34332e302d6e696768746c79202837356366343161666220323032302d30332d303429", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9bed2903186223711a06d85784e730efd547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195082c7c7fe191a6e68696d6f6e80482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169037441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe707441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x66bc1e5d275da50b72b15de072a2468a5ad414919ca9054d2695767cf650012f", "0x492a52699edf49c972c21db794cfcf57ba7fb8745735dc3be2a2c61a72c39e78": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedcaf7dad0317324aecae8744b87fc95f2f3": "0x00", - "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", - "0x11f3ba2e1cdd6d62f2ff9b5589e7ff81ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", - "0x34b9dcaacddd89d5a94929dccb7131534a9d2f70e9ee596bc867d128cd9ec759": "0x00ca9a3b000000000000000000000000", + "0x4342193e496fab7ec59d615ed0dc5530d2d505c0e6f76fd7ce0796ebe187401c": "0x0000000020a107000000000020a107000000000020a107000000000020a107000000000020a107000000000020a107000000000020a1070000000000e0f7050400000000e024370500000000e0f705040000000020a107000000000020a107000000000080f0fa020000000000e1f50500000000040000000000010010000000004000000020000000", "0x5f3e4907f716ac89b6347d15ececedca5579297f4dfb9609e7e4c2ebab9ce40a": "0x109c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d1268655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0x8985776095addd4789fccbce8ca77b23ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0x047374616b696e67200000c16ff2862300000000000000000002", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9895bb514540b8e8932c5863ecb0da1513485b5c2e55041c1ac3bc875e4338763": "0x00000000000000a0dec5adc9353600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b6579731143fa96e07eb73af3db3a1b057d18899f864e6fc5d2f905f9296ca641565564": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797320733fcc641421fafd1fd2f3b4d938bf25bc3fe2f74d34c47239b2c2217446bb": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b6579732c1312343dce08149336968907c27cc602536aaf7a2b105d6fa07058a3803d31": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b657973d1ae046d940202772415992434f839d8c546542e3055143c430f7eec87f7cb69": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b657973dc4036f96ca26a30da6d8637ca1431896c1069bf172c419e98dc08109e7b23b5": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", - "0x426e15054d267946093858132eb537f195999521c6c89cd80b677e53ce20f98c": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0xc8dc79e36b29395413399edaec3e20fcca7205fb19776ed8ddb25d6f427ec40e", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9894f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690379091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9854352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x00", + "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff0550982b4def25cfda6ef3a00000000": "0x00000000", "0x5f3e4907f716ac89b6347d15ececedcac29a0310e1bb45d20cace77ccb62c97d": "0x00e1f505", - "0xf2794c22e353e9a839f12faab03a911b7f17cdfbfa73331856cca0acddd7842e": "0x00000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc67f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x047374616b696e67200000c16ff2862300000000000000000002", - "0x26aa394eea5630e07c48ae0c9558cef70a98fdbe9ce6c55837576c60c7af3850": "0x07000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", - "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x00", - "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca138e71612491192d68deab7e6f563fe1": "0x08000000", "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x00401eae822458363600000000000000", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e169037f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x000168655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde7800", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797399a2fc4b1339e668345bac7e1aadd1a834b90939a4ea40b64f30433a1d475817": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b657973be035f25cd43adc80f1dcf505f5ffd158d1592ab3719f354a256a4c3b7571934": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", - "0xf2794c22e353e9a839f12faab03a911bbdcb0c5143a8617ed38ae3810dd45bc6": "0x00000000", - "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x1000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f43780100000000000000482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a0100000000000000482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e01000000000000006e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91060100000000000000", - "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc694f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x047374616b696e67200000c16ff2862300000000000000000002", - "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x047374616b696e67200000c16ff2862300000000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797301dd273832961ca94116fd224019ea1370c0e3d27bebb1041b35651146d17832": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797397dddc7aba561f16ac00da4bae75ab812aa7b81418bebdab74425f0d6aa31cee": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", - "0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39fe6329cc0b39e09343a73657373696f6e3a6b6579737f325c981c2b001f5fe8c51cc7b89e50ebb1f60feb7ab3fa3bc79d6ab71d45cb": "0x9becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe96993326e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f91066e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106", - "0x2371e21684d2fae99bcb4d579242f74a8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a0411da6d1f761ddf9bdb4c9d6e5303ebd41f61858d0a5647a1a7bfe089bf921be9": "0xd8ff03bfc91b8e000000000000000000", - "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x1000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e6e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b657973890f14b1fcdd7ae841d324d5212f9d95f6c10c64f34dcb0b5f8b8687e6be854e": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc42e1b161d81ab54d65f3f57de68292fa3b62e6a3fa2a951dee23c0f8766303861": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d120f0000c16ff286230f0000c16ff286230000", - "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690394f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x000001547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b6579739b9b11e996dcc26adf561753356c27f768521a8eced25b7311744e61cb1ebfbc": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", - "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7094f72a73893fbd00b11fcce65a014cc5b9ff5066ec15aa6be068b4cabfe67fdb": "0x66bc1e5d275da50b72b15de072a2468a5ad414919ca9054d2695767cf650012f", + "0x11f3ba2e1cdd6d62f2ff9b5589e7ff81ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", "0x5f3e4907f716ac89b6347d15ececedcaac0a2cbf8e355f5ea6cb2de8727bfb0c": "0x54000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39fe6329cc0b39e09343a73657373696f6e3a6b657973e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x5633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce440482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da96b1ab1274bcbe3a4176e17eb2917654904f19b3261911ec3f7a30a473a04dcc8": "0x000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509fe6329cc0b39e09343a73657373696f6e3a6b65797340944475c781bbdc9726766a78b1964888e039600b1c865c62586ab8f98c171e": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb39fe6329cc0b39e09343a73657373696f6e3a6b657973711590f60a214f6f06502eb29dd14f55aa04e72e2fa12c098ba4fa5a00c57fa9": "0x7932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb379091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x5633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce440482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a", + "0x3a636f6465": "0x0061736d01000000018e033760037f7f7f017f60027f7f017f60027f7f0060017f0060037f7f7f0060057f7f7f7f7f0060047f7f7f7f0060017f017e60037f7e7e0060017e017f60027e7e0060017e017e60017e006000006000017f60027f7e017e60047f7e7e7e017f60027e7e017e60037e7e7e0060037f7e7f017f60047f7e7e7f017f60067f7e7e7f7f7f017f60047f7f7f7f017f6000017e60037e7e7f017e60017f017f60027f7e017f60027f7f017e60037f7f7e017e60037e7f7f017f60067f7f7f7f7f7f017f60077f7f7f7f7f7f7f017f60057f7f7f7f7f017f60027f7e0060047f7f7e7e0060057f7e7e7f7f0060057f7f7f7e7e0060067f7f7f7f7f7f0060057f7f7e7e7f0060047e7e7e7e017f60067f7f7f7e7e7f0060077f7e7e7e7e7e7e0060067f7f7e7f7e7e0060077f7f7f7e7e7f7f0060077f7f7f7f7e7e7f0060087e7e7e7e7e7e7e7e017f60047f7f7f7f017e60067f7f7f7f7e7e0060057f7e7e7e7e0060087f7f7f7f7f7e7e7f0060077f7f7e7e7f7f7f0060027e7f0060037f7e7f0060067f7e7e7e7e7f0060047f7e7e7f0002cd103403656e76066d656d6f727902001403656e76196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31000803656e761e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f31000903656e76196578745f73746f726167655f7365745f76657273696f6e5f31000a03656e761d6578745f68617368696e675f74776f785f36345f76657273696f6e5f31000903656e76206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f31000903656e76196578745f73746f726167655f6765745f76657273696f6e5f31000b03656e761d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31000c03656e761b6578745f73746f726167655f636c6561725f76657273696f6e5f31000c03656e76226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f31000c03656e76206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f31000903656e761c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f31000c03656e76276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f31000d03656e76286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f31000e03656e76236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f31000e03656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f31000f03656e76346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f31001003656e76276578745f64656661756c745f6368696c645f73746f726167655f6765745f76657273696f6e5f31001103656e76306578745f64656661756c745f6368696c645f73746f726167655f73746f726167655f6b696c6c5f76657273696f6e5f31000c03656e76276578745f64656661756c745f6368696c645f73746f726167655f7365745f76657273696f6e5f31001203656e76296578745f64656661756c745f6368696c645f73746f726167655f636c6561725f76657273696f6e5f31000a03656e76226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f31000e03656e76236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f32001303656e76286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f31000803656e76206578745f73616e64626f785f6d656d6f72795f6e65775f76657273696f6e5f31000103656e76256578745f73616e64626f785f6d656d6f72795f74656172646f776e5f76657273696f6e5f31000303656e76216578745f73616e64626f785f696e7374616e74696174655f76657273696f6e5f31001403656e761c6578745f73616e64626f785f696e766f6b655f76657273696f6e5f31001503656e76276578745f73616e64626f785f696e7374616e63655f74656172646f776e5f76657273696f6e5f31000303656e76206578745f73616e64626f785f6d656d6f72795f6765745f76657273696f6e5f31001603656e76206578745f73616e64626f785f6d656d6f72795f7365745f76657273696f6e5f31001603656e761e6578745f68617368696e675f736861325f3235365f76657273696f6e5f31000903656e76206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f31000903656e76236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f31001303656e76286578745f64656661756c745f6368696c645f73746f726167655f726f6f745f76657273696f6e5f31000b03656e761c6578745f73746f726167655f617070656e645f76657273696f6e5f31000a03656e761a6578745f73746f726167655f726f6f745f76657273696f6e5f31001703656e76226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f31000b03656e76226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31000b03656e761c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31000c03656e761e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31000b03656e762a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f31000903656e76246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f31001703656e76296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f31000b03656e761a6578745f73746f726167655f726561645f76657273696f6e5f31001803656e761e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f31001903656e761c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f31000303656e76256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f31001a03656e76376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f31001b03656e76256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f31001a03656e76286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f31000703656e76216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31001c03f407f20719190303000019191b0d0d0d04040204000d0d0500010102010202020204011d0303071e1604040005010101191f01010104010100062001010001010000010003040102020402040200010104010201010203040404040404040404040404040402040404040404040404040404040404040404040402040302020401020304040202020202020202040202020403210202020102070205220502040206040404040404040302040202042308020202030d1903020202040202020202020102030202020202040306022002020401192402040402020425020203020426020220022722010403060604020303030d020202020506060402030102030106020404040402020402030302190202020402040402020202040204040402020401040404020204020402020202040404020404010228020319220204020228060303020303030202030202020206250103020604020204030419190402020303290303040404040402020202020202020202020202020d02020204040402020403031b021b0203020202060d0303020202011b021b031b02021b021b02020202021b041b041b020204042a04021b020502010201020d1b021b1b1b1b021b2b022c1b02041b05051b1b04041b02020d020203040504010406020203020302020405040104020202030302292d01052700030303030202020202020202022206020402040402020303010403050101010d020302020402040c02020407021d21030303030303030302040202010102030001012e02020602020602020402020202060402040202030303020303030202020203020202020302020204020602020202022f020202063002250d06060606060606060606060606060606060606060606060606060606060606060606163132060303020102020202020403030303030303030303030303030303030303030303030303030303030302020202020202020202020202020216040202020203040202020d0406040404040406020404040202020202040303030202020302020202020402030302040306030206040122040402030204070202020303020303030202020203030302020202020200020202020202032602020303023002330504020204030302020203030203060202010206020204040203030303020201020604000406020201030302020203030303030203020202040302020602020206020304040504340202020102040201050202030303040202060102040101050202040403030303020202010402010101010101010101040201020104010401040403010204010304041901010201010501010604060401050504040204060301010130353035300d300b1111111108300303303030111108303035303000000000363636360407017001a902a9020619037f01418080c0000b7f00419cb5cc000b7f00419cb5cc000b07e8051a195f5f696e6469726563745f66756e6374696f6e5f7461626c65010009686173685f74657374003b0c436f72655f76657273696f6e00b30312436f72655f657865637574655f626c6f636b00b50315436f72655f696e697469616c697a655f626c6f636b00c303114d657461646174615f6d6574616461746100c5031c426c6f636b4275696c6465725f6170706c795f65787472696e73696300c7031b426c6f636b4275696c6465725f66696e616c697a655f626c6f636b00ca0320426c6f636b4275696c6465725f696e686572656e745f65787472696e7369637300cc031c426c6f636b4275696c6465725f636865636b5f696e686572656e747300d20318426c6f636b4275696c6465725f72616e646f6d5f7365656400d4032b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6e00d603214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b657200de031e4772616e6470614170695f6772616e6470615f617574686f72697469657300e70315426162654170695f636f6e66696775726174696f6e00e9031b426162654170695f63757272656e745f65706f63685f737461727400ea0321417574686f72697479446973636f766572794170695f617574686f72697469657300eb031d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e636500ec0311436f6e7472616374734170695f63616c6c00ee0318436f6e7472616374734170695f6765745f73746f7261676500f2031c436f6e7472616374734170695f72656e745f70726f6a656374696f6e00f503205472616e73616374696f6e5061796d656e744170695f71756572795f696e666f00f8032153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b65797300f9031f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b65797300fc030a5f5f646174615f656e6403010b5f5f686561705f62617365030209be04010041010ba8024b51655cee075d5e8201c60171dd04c203e203e403bd04be049c059d059e059f05a005a105a205a305a405a505a605a705a805a905aa05ab05ac05ad05ae05af05b005b105b205b305b405b505b605b705b805b905ba05bb05bc05bd05e304dc04c505aa07b907bc07bd07ae0766e507f607d2078008dc07de07544748497555676a6b6c6d6e7c7d7e80018101850183018401f001eb06ef018105e8019a06ee01ed01ec01eb01e901e701f501f40162f302f702a904ee05fd02fc02fb02fa0263e6068c048f048e04a804a704a604a504b804f007bf04d804eb07e004e104e204fe04ff048605fa04850584058305e706f10799069806cc059d06a90693039203cd058907b2038b048d04d604d504d704fb06fa06880799049804ce05f202f102cf05f4028803d005d105e601e301d205f3019f02ea06e906d305f906fd04fc04d4058205c30591078f07d505a1079007f602f502d605f9029003a606a506d705d805d905da05e506e406db05f806c606c506dc05c706d906dd05de05df05e005e105bc06bb06e205d506d404d204e305df04fb04e4059307a204a104e505a404b704bf06be06e605c006da068e078d07e7059807f804f704e805f904c2058705e905f005ef05ed05ec05eb05ea05f205f105f505f405f605d4079c069b06a206a106a0069f069e06bd06c406c306c206c106cc06cb06ca06c906c80684048504870486048304f003e206e106e306e806ec06910492049404930490049504ed07ce07d107cf07d307d507d007e207d807fe078108ff070a9ca066f2070600200010340b06002000102c0b0600200010360b06002000102d0b0a0020002001200210380b2801017f02402002102c2203450d002003200020022001200120024b1b109d081a2000102d0b20030b06002000103a0b1c01017f02402000102c2201450d00200141002000109f081a0b20010bff0202017f037e230041206b220224002001ad42adfed5e4d485fda8d8007e42b9e0007c210302400240024002400240200141084b0d00200141014b0d0120010d02420021040c030b0240200141104b0d00200241106a2000290000200385420042adfed5e4d485fda8d8004200108408200241186a29030020022903107c200120006a41786a2900008521040c040b200120006a41786a2900002105200321040340200029000020048542adfed5e4d485fda8d8007e42178942adfed5e4d485fda8d8007e2003852103200041086a2100200442cf829ebbefefde82147c2104200141786a220141084b0d000b200320058521040c030b0240200141034b0d00200120006a417e6a33000042108620003300008420038521040c030b200120006a417c6a35000042208620003500008420038521040c020b200031000021040b200420038521040b20022004420042adfed5e4d485fda8d8004200108408200241086a290300210420022903002103200241206a2400200420037c42c300850b0500103d000b2400410041d09bcc00ad4280808080f0008441d79bcc00ad4280808080a00484100000000b1100418080c0004111419480c000103f000b4701017f230041206b22032400200341146a4100360200200341b0b4cc00360210200342013702042003200136021c200320003602182003200341186a36020020032002104c000bdd0101047f0240024002400240200041046a2802002203200041086a28020022046b200220016b2202490d00200028020021050c010b200420026a22052004490d01200341017422062005200620054b1b22064100480d010240024002402003450d00200028020022050d010b024020060d00410121050c020b2006103322050d010c040b024020032006460d00200520032006103721050b2005450d03200041086a28020021040b20002005360200200041046a20063602000b200520046a20012002109d081a200041086a200420026a3602000f0b103e000b103c000b8b0301067f230041306b2202240020012802002103024002402001280204220441037422050d00410021060c010b200341046a2107410021060340200728020020066a2106200741086a2107200541786a22050d000b0b024002400240024002400240200141146a2802000d00200621070c010b024020040d004100410041bc80c0001042000b024002402006410f4b0d00200341046a280200450d010b200620066a220720064f0d010b4100210741012105200241086a21060c010b2007417f4c0d01200241086a2106024020070d0041002107410121050c010b200710332205450d020b20024100360210200220053602082002200736020c2002200241086a360214200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318200241146a41cc80c000200241186a10430d0220002006290200370200200041086a200641086a280200360200200241306a24000f0b1044000b1045000b41e480c0004133200241186a419881c00041a881c0001046000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341c886c000360208200341013602242003200341206a360218200320033602282003200341046a360220200341086a2002104c000bba06010a7f230041306b22032400200341246a2001360200200341033a002820034280808080800437030820032000360220410021042003410036021820034100360210024002400240024020022802082205450d0020022802002106200228020422072002410c6a2802002208200820074b1b2209450d01200241146a280200210a2002280210210b41012108200020062802002006280204200128020c1100000d03200541106a2102200641086a2100410121040240024003402003200241746a28020036020c20032002410c6a2d00003a00282003200241786a280200360208200241086a28020021084100210541002101024002400240200241046a2802000e03010002010b2008200a4f0d032008410374210c41002101200b200c6a220c2802044102470d01200c28020028020021080b410121010b2003200836021420032001360210200228020021080240024002402002417c6a2802000e03010002010b2008200a4f0d0420084103742101200b20016a22012802044102470d01200128020028020021080b410121050b2003200836021c200320053602180240200241706a2802002208200a4f0d00200b20084103746a2208280200200341086a20082802041101000d06200420094f0d05200041046a210120002802002105200241206a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d010c070b0b2008200a41a08bc0001042000b2008200a41908bc0001042000b2008200a41908bc0001042000b2002280200210620022802042207200241146a2802002208200820074b1b220a450d002002280210210241012108200020062802002006280204200128020c1100000d02200641086a21004101210403402002280200200341086a200241046a2802001101000d022004200a4f0d01200041046a210120002802002105200241086a2102200041086a210041012108200441016a2104200328022020052001280200200328022428020c110000450d000c030b0b0240200720044d0d00410121082003280220200620044103746a22022802002002280204200328022428020c1100000d020b410021080c010b410121080b200341306a240020080b0500103e000b0500103c000b7e01017f230041c0006b220524002005200136020c2005200036020820052003360214200520023602102005412c6a41023602002005413c6a41033602002005420237021c200541cc92c800360218200541043602342005200541306a3602282005200541106a3602382005200541086a360230200541186a2004104c000b120020002802002001200120026a104041000bcb0301047f230041106b22022400200028020021000240024002400240024002402001418001490d002002410036020c2001418010490d012002410c6a210302402001418080044f0d0020022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c050b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010c040b0240024020002802082203200041046a280200460d00200028020021040c010b200341016a22042003490d02200341017422052004200520044b1b22054100480d020240024002402003450d00200028020022040d010b024020050d00410121040c020b2005103322040d010c050b024020032005460d00200420032005103721040b2004450d04200028020821030b20002004360200200041046a20053602000b200420036a20013a00002000200028020841016a3602080c040b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010c020b103e000b103c000b20002003200320016a10400b200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41cc80c000200241086a10432101200241206a240020010b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c2002419482c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41ac82c000104c000b0d0020003502004101200110520b3401017f230041106b220224002002200136020c20022000360208200241d886c000360204200241b0b4cc0036020020021053000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241fc82c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a419483c000104c000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c200241d083c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41e883c000104c000b6f01017f230041306b2202240020022001360204200220003602002002411c6a41023602002002412c6a41013602002002420337020c2002418c84c000360208200241013602242002200241206a3602182002200241046a36022820022002360220200241086a41a484c000104c000bc40101037f0240024002402002417f4c0d000240024020020d0041002103410121040c010b20022103200210332204450d020b0240024020032002490d00200321050c010b02400240200341017422052002200520024b1b22054100480d00024002402003450d0020040d010b2005103322040d030c060b20032005470d01200321050c020b103e000b20042003200510372204450d030b200420012002109d0821032000200236020820002005360204200020033602000f0b1044000b1045000b103c000b0d0020002802001a037f0c000b0bd40203027f017e037f230041306b22032400412721040240024020004290ce005a0d00200021050c010b412721040340200341096a20046a2206417c6a200020004290ce0080220542f0b17f7e7ca7220741ffff037141e4006e2208410174419a87c0006a2f00003b00002006417e6a2008419c7f6c20076a41ffff0371410174419a87c0006a2f00003b00002004417c6a2104200042ffc1d72f5621062005210020060d000b0b02402005a7220641e3004c0d00200341096a2004417e6a22046a2005a7220741ffff037141e4006e2206419c7f6c20076a41ffff0371410174419a87c0006a2f00003b00000b024002402006410a480d00200341096a2004417e6a22046a2006410174419a87c0006a2f00003b00000c010b200341096a2004417f6a22046a200641306a3a00000b2002200141b0b4cc004100200341096a20046a412720046b10562104200341306a240020040b6f01017f230041c0006b220124002001200036020c200141346a41013602002001420137022420014188b2cc003602202001410536023c2001200141386a36023020012001410c6a360238200141106a200141206a1041410141d09bcc0041072001280210200128021810ef0700000b02000b0d0042a98089cda5ebd0e9ae7f0b830601067f024002402001450d00412b418080c4002000280200220641017122011b2107200120056a21080c010b200541016a210820002802002106412d21070b0240024020064104710d00410021020c010b4100210902402003450d002003210a200221010340200920012d000041c00171418001466a2109200141016a2101200a417f6a220a0d000b0b200820036a20096b21080b410121010240024020002802084101460d00200020072002200310570d012000280218200420052000411c6a28020028020c11000021010c010b02402000410c6a280200220920084b0d00200020072002200310570d012000280218200420052000411c6a28020028020c1100000f0b0240024020064108710d0041002101200920086b22092108024002400240410120002d0020220a200a4103461b0e0402010001020b20094101762101200941016a41017621080c010b41002108200921010b200141016a210103402001417f6a2201450d0220002802182000280204200028021c280210110100450d000b41010f0b200028020421062000413036020420002d0020210b41012101200041013a0020200020072002200310570d0141002101200920086b220a2103024002400240410120002d0020220920094103461b0e0402010001020b200a4101762101200a41016a41017621030c010b41002103200a21010b200141016a2101024003402001417f6a2201450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210a41012101200028021820042005200028021c28020c1100000d01200341016a2109200028021c210320002802182102024003402009417f6a2209450d01410121012002200a20032802101101000d030c000b0b2000200b3a00202000200636020441000f0b2000280204210a41012101200020072002200310570d00200028021820042005200028021c28020c1100000d00200841016a2109200028021c210320002802182100034002402009417f6a22090d0041000f0b410121012000200a2003280210110100450d000b0b20010b5401017f024002402001418080c400460d0041012104200028021820012000411c6a2802002802101101000d010b024020020d0041000f0b2000280218200220032000411c6a28020028020c11000021040b20040b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c200341e488c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a2002104c000b6c01017f230041306b2203240020032001360204200320003602002003411c6a41023602002003412c6a41013602002003420237020c2003419c89c000360208200341013602242003200341206a3602182003200341046a36022820032003360220200341086a2002104c000b9307010c7f200041106a28020021030240024002400240200041086a28020022044101460d0020034101460d012000280218200120022000411c6a28020028020c11000021030c030b20034101470d010b0240024020020d00410021020c010b200120026a2105200041146a28020041016a21064100210720012103200121080340200341016a210902400240024020032c0000220a417f4a0d000240024020092005470d004100210b200521030c010b20032d0001413f71210b200341026a220921030b200a411f71210c0240200a41ff0171220a41df014b0d00200b200c41067472210a0c020b0240024020032005470d004100210d2005210e0c010b20032d0000413f71210d200341016a2209210e0b200d200b41067472210b0240200a41f0014f0d00200b200c410c7472210a0c020b02400240200e2005470d004100210a200921030c010b200e41016a2103200e2d0000413f71210a0b200b410674200c411274418080f0007172200a72220a418080c400470d020c040b200a41ff0171210a0b200921030b02402006417f6a2206450d00200720086b20036a21072003210820052003470d010c020b0b200a418080c400460d00024002402007450d0020072002460d0041002103200720024f0d01200120076a2c00004140480d010b200121030b2007200220031b21022003200120031b21010b20044101460d002000280218200120022000411c6a28020028020c1100000f0b4100210902402002450d002002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b0240200220096b200028020c2206490d002000280218200120022000411c6a28020028020c1100000f0b410021074100210902402002450d00410021092002210a200121030340200920032d000041c00171418001466a2109200341016a2103200a417f6a220a0d000b0b200920026b20066a2209210a024002400240410020002d0020220320034103461b0e0402010001020b20094101762107200941016a410176210a0c010b4100210a200921070b200741016a2103024003402003417f6a2203450d0120002802182000280204200028021c280210110100450d000b41010f0b2000280204210941012103200028021820012002200028021c28020c1100000d00200a41016a2103200028021c210a20002802182100034002402003417f6a22030d0041000f0b20002009200a280210110100450d000b41010f0b20030bc80801067f230041f0006b220524002005200336020c20052002360208410121062001210702402001418102490d00410020016b2108418002210903400240200920014f0d00200020096a2c000041bf7f4c0d0041002106200921070c020b2009417f6a21074100210620094101460d01200820096a210a20072109200a4101470d000b0b200520073602142005200036021020054100410520061b36021c200541b0b4cc0041e089c00020061b3602180240024002400240200220014b22090d00200320014b0d00200220034b0d01024002402002450d0020012002460d00200120024d0d01200020026a2c00004140480d010b200321020b200520023602202002450d0220022001460d02200141016a210a03400240200220014f0d00200020026a2c000041404e0d040b2002417f6a210920024101460d04200a2002462107200921022007450d000c040b0b20052002200320091b360228200541306a41146a4103360200200541c8006a41146a4104360200200541d4006a410436020020054203370234200541e889c0003602302005410136024c2005200541c8006a3602402005200541186a3602582005200541106a3602502005200541286a360248200541306a2004104c000b200541e4006a4104360200200541c8006a41146a4104360200200541d4006a4101360200200541306a41146a410436020020054204370234200541808ac0003602302005410136024c2005200541c8006a3602402005200541186a3602602005200541106a36025820052005410c6a3602502005200541086a360248200541306a2004104c000b200221090b024020092001460d00410121070240024002400240200020096a220a2c00002202417f4a0d0041002106200020016a220721010240200a41016a2007460d00200a41026a2101200a2d0001413f7121060b2002411f71210a200241ff017141df014b0d012006200a4106747221010c020b2005200241ff0171360224200541286a21020c020b4100210020072108024020012007460d00200141016a210820012d0000413f7121000b200020064106747221010240200241ff017141f0014f0d002001200a410c747221010c010b41002102024020082007460d0020082d0000413f7121020b2001410674200a411274418080f00071722002722201418080c400460d020b2005200136022441012107200541286a21022001418001490d00410221072001418010490d0041034104200141808004491b21070b200520093602282005200720096a36022c200541306a41146a4105360200200541ec006a4104360200200541e4006a4104360200200541c8006a41146a4106360200200541d4006a410736020020054205370234200541a08ac000360230200520023602582005410136024c2005200541c8006a3602402005200541186a3602682005200541106a3602602005200541246a3602502005200541206a360248200541306a2004104c000b41958dcc00412b2004103f000b1000200120002802002000280204105a0b800101037f230041206b22022400024002402000280200200110610d002001411c6a2802002103200128021821042002411c6a4100360200200241b0b4cc003602182002420137020c200241888bc00036020820042003200241086a1043450d010b200241206a240041010f0b2000280204200110612101200241206a240020010bdd0502047f017e410121020240200128021841272001411c6a2802002802101101000d0041022103024002400240024002402000280200220041776a2204411e4d0d00200041dc00470d010c020b41f40021050240024020040e1f05010202000202020202020202020202020202020202020202030202020203050b41f20021050c040b41ee0021050c030b0240024002402000105f0d00024002400240200041808004490d00200041808008490d0120004190fc476a4190fc0b490d02200041b5d9736a41b5db2b490d02200041e28b746a41e20b490d022000419fa8746a419f18490d02200041dee2746a410e490d02200041feffff0071419ef00a460d02200041a2b2756a4122490d02200041cb91756a410a4b0d050c020b200041f08bc000412941c28cc00041a20241e48ec00041b5021060450d010c040b2000419991c000412641e591c00041af01419493c00041a30310600d030b200041017267410276410773ad4280808080d0008421060c010b200041017267410276410773ad4280808080d0008421060b410321030c020b410121030c010b0b200021050b03402003210441dc002100410121024101210302400240024002400240024020040e0402010500020b02400240024002402006422088a741ff01710e06050302010006050b200642ffffffff8f608342808080803084210641f50021000c060b200642ffffffff8f608342808080802084210641fb0021000c050b20052006a72204410274411c7176410f712203413072200341d7006a2003410a491b210002402004450d002006427f7c42ffffffff0f832006428080808070838421060c050b200642ffffffff8f60834280808080108421060c040b200642ffffffff8f6083210641fd0021000c030b41002103200521000c030b20012802184127200128021c2802101101000f0b200642ffffffff8f60834280808080c0008421060b410321030b20012802182000200128021c280210110100450d000b0b20020b9d0301057f0240024002404100410f200041a49a04491b2201200141086a2201200141027441f896c0006a280200410b742000410b7422014b1b2202200241046a2202200241027441f896c0006a280200410b7420014b1b2202200241026a2202200241027441f896c0006a280200410b7420014b1b2202200241016a2202200241027441f896c0006a280200410b7420014b1b220241027441f896c0006a280200410b74220320014620032001496a20026a2201411e4b0d002001410274210241b105210302402001411e460d00200241fc96c0006a2204450d00200428020041157621030b4100210402402001417f6a220520014b0d002005411f4f0d03200541027441f896c0006a28020041ffffff007121040b02402003200241f896c0006a280200411576220141016a460d00200020046b21022003417f6a2103410021000340200141b0054b0d0320002001418498c0006a2d00006a220020024b0d012003200141016a2201470d000b0b20014101710f0b2001411f41b89dc0001042000b200141b10541c89dc0001042000b2005411f41f497c0001042000bea0201067f200120024101746a210720004180fe0371410876210841002109200041ff0171210a0240024002400340200141026a210b200920012d000122026a210c024020012d000022012008460d00200120084b0d03200c2109200b2101200b2007470d010c030b0240200c2009490d00200c20044b0d02200320096a2101024003402002450d012002417f6a210220012d00002109200141016a21012009200a470d000b410021020c050b200c2109200b2101200b2007470d010c030b0b2009200c41b896c0001059000b200c200441b896c0001058000b200041ffff03712109200520066a210c4101210202400340200541016a210a0240024020052d00002201411874411875220b4100480d00200a21050c010b200a200c460d02200b41ff007141087420052d0001722101200541026a21050b200920016b22094100480d02200241017321022005200c470d000c020b0b41958dcc00412b41c896c000103f000b20024101710bab0201037f23004180016b2202240002400240024002400240200128020022034110710d0020034120710d012000ad41012001105221000c020b410021030340200220036a41ff006a2000410f712204413072200441d7006a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141d88bc0004102200220036a4180016a410020036b105621000c010b410021030340200220036a41ff006a2000410f712204413072200441376a2004410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141d88bc0004102200220036a4180016a410020036b105621000b20024180016a240020000f0b200041800141c88bc0001059000b200041800141c88bc0001059000b1c00200128021841c99ec000410b2001411c6a28020028020c1100000b1c00200128021841d49ec000410e2001411c6a28020028020c1100000b5b01017f230041306b220324002003200136020c20032000360208200341246a41013602002003420137021420034188b2cc003602102003410436022c2003200341286a3602202003200341086a360228200341106a2002104c000b140020002802002001200028020428020c1101000b15002001200028020022002802002000280204105a0bb10401077f230041306b220324000240024020020d00410021040c010b200341286a210502400240024002400340024020002802082d0000450d00200028020041a69fc0004104200028020428020c1100000d050b2003410a3602282003428a808080103703202003200236021c200341003602182003200236021420032001360210200341086a410a200120021068024002400240024020032802084101470d00200328020c210403402003200420032802186a41016a2204360218024002402004200328022422064f0d00200328021421070c010b200328021422072004490d00200641054f0d072003280210200420066b22086a22092005460d0420092005200610a008450d040b200328021c22092004490d0220072009490d0220032006200341106a6a41176a2d0000200328021020046a200920046b10682003280204210420032802004101460d000b0b2003200328021c3602180b200028020841003a0000200221040c010b200028020841013a0000200841016a21040b2000280204210920002802002106024020044520022004467222070d00200220044d0d03200120046a2c000041bf7f4c0d030b200620012004200928020c1100000d04024020070d00200220044d0d04200120046a2c000041bf7f4c0d040b200120046a2101200220046b22020d000b410021040c040b2006410441ac9fc0001058000b200120024100200441bc9fc000105b000b200120022004200241d089c000105b000b410121040b200341306a240020040bf80201067f410021040240024020024103712205450d00410420056b2205450d0020032005200520034b1b210441002105200141ff01712106034020042005460d01200220056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050c010b200141ff017121060240024020034108490d002004200341786a22084b0d00200641818284086c210502400340200220046a220741046a2802002005732209417f73200941fffdfb776a7120072802002005732207417f73200741fffdfb776a7172418081828478710d01200441086a220420084d0d000b0b200420034b0d010b200220046a2109200320046b210241002103410021050240034020022005460d01200920056a2107200541016a210520072d000022072006470d000b410121032007200141ff01714641016a41017120056a417f6a21050b200520046a21050c010b2004200341e89fc0001059000b20002005360204200020033602000bbb0302047f027e230041c0006b2205240041012106024020002d00040d0020002d000521070240200028020022082d00004104710d004101210620082802184196a0c0004193a0c000200741ff017122071b4102410320071b2008411c6a28020028020c1100000d014101210620002802002208280218200120022008411c6a28020028020c1100000d01410121062000280200220828021841dc92c80041022008411c6a28020028020c1100000d0120032000280200200428020c11010021060c010b0240200741ff01710d004101210620082802184198a0c00041032008411c6a28020028020c1100000d01200028020021080b41012106200541013a0017200541346a419ca0c000360200200520082902183703082005200541176a360210200829020821092008290210210a200520082d00203a00382005200a37032820052009370320200520082902003703182005200541086a360230200541086a2001200210670d00200541086a41dc92c800410210670d002003200541186a200428020c1101000d00200528023041b4a0c0004102200528023428020c11000021060b200041013a0005200020063a0004200541c0006a240020000b8b0201027f230041106b220224002002410036020c02400240024002402001418001490d002001418010490d012002410c6a21032001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c2002410c6a2103410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c2002410c6a2103410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002003200110672101200241106a240020010b6001017f230041206b2202240020022000360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41b8a0c000200241086a10432101200241206a240020010b0d0020002802002001200210670b0b0020002802002001106a0b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41b8a0c000200241086a10432101200241206a240020010bd30202047f027e230041c0006b2203240041012104024020002d00080d00200028020421050240200028020022062d00004104710d004101210420062802184196a0c00041d3a0c00020051b4102410120051b2006411c6a28020028020c1100000d0120012000280200200228020c11010021040c010b024020050d0041012104200628021841d4a0c00041022006411c6a28020028020c1100000d01200028020021060b41012104200341013a0017200341346a419ca0c000360200200320062902183703082003200341176a3602102006290208210720062902102108200320062d00203a00382003200837032820032007370320200320062902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041b4a0c0004102200328023428020c11000021040b200020043a00082000200028020441016a360204200341c0006a240020000bd40202037f027e230041c0006b2203240041012104024020002d00040d0020002d000521040240200028020022052d00004104710d000240200441ff0171450d004101210420052802184196a0c00041022005411c6a28020028020c1100000d02200028020021050b20012005200228020c11010021040c010b0240200441ff01710d0041012104200528021841d7a0c00041012005411c6a28020028020c1100000d01200028020021050b41012104200341013a0017200341346a419ca0c000360200200320052902183703082003200341176a3602102005290208210620052902102107200320052d00203a00382003200737032820032006370320200320052902003703182003200341086a3602302001200341186a200228020c1101000d00200328023041b4a0c0004102200328023428020c11000021040b200041013a0005200020043a0004200341c0006a240020000b6401027f230041206b220224002001411c6a280200210320012802182101200241086a41106a200041106a290200370300200241086a41086a200041086a2902003703002002200029020037030820012003200241086a10432100200241206a240020000bd70a020c7f017e230041206b220324004101210402400240200228021841222002411c6a2802002802101101000d000240024020010d00410021050c010b200020016a21064100210520002107410021080240034020072109200741016a210a02400240024020072c0000220b417f4a0d0002400240200a2006470d004100210c200621070c010b20072d0001413f71210c200741026a220a21070b200b411f7121040240200b41ff0171220b41df014b0d00200c200441067472210c0c020b0240024020072006470d004100210d2006210e0c010b20072d0000413f71210d200741016a220a210e0b200d200c41067472210c0240200b41f0014f0d00200c2004410c7472210c0c020b02400240200e2006470d004100210b200a21070c010b200e41016a2107200e2d0000413f71210b0b200c4106742004411274418080f0007172200b72220c418080c400470d020c040b200b41ff0171210c0b200a21070b4102210a024002400240024002400240200c41776a220b411e4d0d00200c41dc00470d010c020b41f400210e02400240200b0e1f05010202000202020202020202020202020202020202020202030202020203050b41f200210e0c040b41ee00210e0c030b0240200c105f0d0002400240200c41808004490d00200c41808008490d01200c4190fc476a4190fc0b490d02200c41b5d9736a41b5db2b490d02200c41e28b746a41e20b490d02200c419fa8746a419f18490d02200c41dee2746a410e490d02200c41feffff0071419ef00a460d02200c41a2b2756a4122490d02200c41cb91756a410a4d0d020c060b200c41f08bc000412941c28cc00041a20241e48ec00041b5021060450d010c050b200c419991c000412641e591c00041af01419493c00041a30310600d040b200c41017267410276410773ad4280808080d00084210f4103210a0c010b0b200c210e0b2003200136020420032000360200200320053602082003200836020c0240024020082005490d0002402005450d0020052001460d00200520014f0d01200020056a2c000041bf7f4c0d010b02402008450d0020082001460d00200820014f0d01200020086a2c000041bf7f4c0d010b2002280218200020056a200820056b200228021c28020c110000450d01410121040c060b20032003410c6a3602182003200341086a36021420032003360210200341106a1073000b0340200a210b4101210441dc0021054101210a024002400240024002400240200b0e0402010500020b0240024002400240200f422088a741ff01710e06050302010006050b200f42ffffffff8f608342808080803084210f4103210a41f50021050c070b200f42ffffffff8f608342808080802084210f4103210a41fb0021050c060b200e200fa7220b410274411c7176410f71220a413072200a41d7006a200a410a491b21050240200b450d00200f427f7c42ffffffff0f83200f4280808080708384210f0c050b200f42ffffffff8f608342808080801084210f0c040b200f42ffffffff8f6083210f4103210a41fd0021050c040b4100210a200e21050c030b4101210a0240200c418001490d004102210a200c418010490d0041034104200c41808004491b210a0b200a20086a21050c040b200f42ffffffff8f60834280808080c00084210f0b4103210a0b20022802182005200228021c280210110100450d000c050b0b200820096b20076a210820062007470d000b0b2005450d0020052001460d00200520014f0d02200020056a2c000041bf7f4c0d020b410121042002280218200020056a200120056b200228021c28020c1100000d0020022802184122200228021c28021011010021040b200341206a240020040f0b200020012005200141d089c000105b000b2b01017f2000280200220128020020012802042000280204280200200028020828020041dca0c000105b000bee0704057f017e017f017e02400240024002402002450d00410020016b410020014103711b2103200241796a4100200241074b1b210441002105034002400240200120056a2d000022064118744118752207417f4a0d004280808080802021080240200641c884c0006a2d0000417e6a220941024d0d00428080808010210a0c070b0240024002400240024020090e03000102000b200541016a22062002490d024200210a0c090b4200210a200541016a220920024f0d08200120096a2d0000210902400240200641a07e6a2206410d4b0d000240024020060e0e0002020202020202020202020201000b200941e0017141a001460d02428080808010210a0c0c0b02402009411874411875417f4c0d00428080808010210a0c0c0b200941ff017141a001490d01428080808010210a0c0b0b02402007411f6a41ff0171410b4b0d0002402009411874411875417f4c0d00428080808010210a0c0c0b200941ff017141c001490d01428080808010210a0c0b0b0240200941ff017141bf014d0d00428080808010210a0c0b0b0240200741fe017141ee01460d00428080808010210a0c0b0b2009411874411875417f4c0d00428080808010210a0c0a0b42002108200541026a220620024f0d09200120066a2d000041c00171418001460d020c070b4200210a200541016a220920024f0d07200120096a2d0000210902400240200641907e6a220641044b0d000240024020060e050002020201000b200941f0006a41ff01714130490d02428080808010210a0c0b0b02402009411874411875417f4c0d00428080808010210a0c0b0b200941ff0171419001490d01428080808010210a0c0a0b0240200941ff017141bf014d0d00428080808010210a0c0a0b02402007410f6a41ff017141024d0d00428080808010210a0c0a0b2009411874411875417f4c0d00428080808010210a0c090b200541026a220620024f0d07200120066a2d000041c00171418001470d0642002108200541036a220620024f0d08200120066a2d000041c00171418001460d01428080808080e0002108428080808010210a0c080b428080808010210a200120066a2d000041c00171418001470d070b200641016a21050c010b0240200320056b4103710d000240200520044f0d000340200120056a220641046a280200200628020072418081828478710d01200541086a22052004490d000b0b200520024f0d010340200120056a2c00004100480d022002200541016a2205470d000c040b0b200541016a21050b20052002490d000b0b20002001360204200041086a2002360200200041003602000f0b428080808080c0002108428080808010210a0c010b420021080b2000200a2005ad84200884370204200041013602000b1c0020012802184190b2cc0041052001411c6a28020028020c1100000bb30101037f200028020421020240024020002802004101470d002000410c6a28020022002001107720004103742200450d01200220006a2103034020022802002100200241046a2802002204200110772001200020041078200241086a22022003470d000c020b0b200041086a28020022002001107720004103742200450d00200220006a2103034020022802002100200241046a2802002204200110772001200020041078200241086a22022003470d000b0b0bab0101017f230041106b220224000240024002400240200041c000490d00200041808001490d012000418080808004490d02200241033a00032001200241036a41011078200220003602042001200241046a410410780c030b200220004102743a00032001200241036a410110780c020b200220004102744101723b010a20012002410a6a410210780c010b2002200041027441027236020c20012002410c6a410410780b200241106a24000bcd0101047f0240024002400240200041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422062005200620054b1b22064100480d010240024020030d00024020060d00410121050c020b2006103322050d010c040b2000280200210520032006460d0020052003200610372205450d03200041086a28020021040b20002005360200200041046a20063602000b200520046a20012002109d081a200041086a200420026a3602000f0b103e000b103c000bff0101037f200028020421020240024020002802004101470d002000410c6a2802002200200110772000450d01200041186c2103200241146a21000340200041706a2802002102200041746a28020022042001107720012002200410782000417c6a280200210220002802002204200110772001200220041078200041186a2100200341686a22030d000c020b0b200041086a2802002200200110772000450d00200041186c2103200241146a21000340200041706a2802002102200041746a28020022042001107720012002200410782000417c6a280200210220002802002204200110772001200220041078200041186a2100200341686a22030d000b0b0ba90701057f230041206b2203240020012002107702402001450d00200141d8006c2104410021050340200020056a220141046a2802002106200141086a28020022072002107720022006200710782003200141d4006a2d00003a000d20022003410d6a4101107802402001410c6a2d0000220641024b0d0002400240024020060e03000102000b200341003a000e20022003410e6a41011078200141146a2802002106200141186a28020022072002107720022006200710780c020b200341013a000e20022003410e6a4101107802402001410d6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110780b200141146a2802002106200141186a2802002207200210772002200620071078200141206a2802002106200141246a280200220720021077200220062007107820032001410e6a2d00003a000e20022003410e6a410110780c010b200341023a000e20022003410e6a4101107802402001410d6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110780b200141146a2802002106200141186a2802002207200210772002200620071078200141206a2802002106200141246a28020022072002107720022006200710782001412c6a2802002106200141306a28020022072002107720022006200710782001410e6a2d0000220641064b0d000240024002400240024002400240024020060e0700010203040506000b200341003a000f0c060b200341013a000f0c050b200341023a000f0c040b200341033a000f0c030b200341043a000f0c020b200341053a000f0c010b200341063a000f0b20022003410f6a410110780b02400240200141346a2802004101470d00200141386a2802002106200141c0006a28020022072002107720022006200710780c010b200341106a200141386a2802002001413c6a28020028020c11020020032802102106200328021822072002107720022006200710782003280214450d00200610350b200141c4006a200210762004200541d8006a2205470d000b0b200341206a24000b8605010e7f2001410c6a2802002102200128020821032001280204210402400240024002400240024002400240200128020022050d0020030d010c060b200420056b2101024020030d00200121060c020b2001200220036b6a220620014f0d010240024020042005460d00200541016a21070c010b20022003460d064100210720032105200341016a21030b4100210841002106410121090340200420076b210a2008410174210b20022003220c6b210d410021010340200720016a210e20052d000021030240200820016a22052006470d002005417f417f2004200e6b2206200d6a220f200f2006491b200d200e1b220641016a220f200f2006491b6a22062005490d06200b2006200b20064b1b22064100480d06024020050d00024020060d00410121090c020b2006103322090d010c080b20052006460d0020092005200610372209450d070b200920086a20016a20033a00000240200e450d00200a2001460d00200b41026a210b200141016a2101200e21050c010b0b200c2002460d03200541016a2108200c41016a210341002107200c21050c000b0b200220036b21060b0240024020060d00410121090c010b20064100480d02200610332209450d030b4100210b0240024020050d00200921010c010b024020042005470d00200921010c010b200921012005210e03402001200e2d00003a0000200141016a21012004200e41016a220e470d000b200420056b210b0b2003450d0420022003460d042003210e03402001200e2d00003a0000200141016a21012002200e41016a220e470d000b2002200b20036b6a210b0c040b200541016a210b0c030b103e000b103c000b410121094100210b410021060b2000200b36020820002006360204200020093602000bd40101037f02400240024002402000280200220041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004103322050d010c040b2000280200210520032004460d0020052003200410372205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a20012002109d081a200041086a200420026a36020041000f0b103e000b103c000bbf0301047f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b0240024002400240200041046a2802002203200041086a28020022046b2001490d00200028020021050c010b200420016a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004103322050d010c040b2000280200210520032004460d0020052003200410372205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a2002410c6a2001109d081a200041086a200420016a360200200241106a240041000f0b103e000b103c000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41e4a1c000200241086a10432101200241206a240020010bcd0101037f0240024002400240200041046a2802002203200041086a28020022046b2002490d00200028020021050c010b200420026a22052004490d01200341017422042005200420054b1b22044100480d010240024020030d00024020040d00410121050c020b2004103322050d010c040b2000280200210520032004460d0020052003200410372205450d030b20002005360200200041046a2004360200200041086a28020021040b200520046a20012002109d081a200041086a200420026a3602000f0b103e000b103c000b040041010bb60101017f230041c0006b2202240020024100360210200242013703082002410836021c20022001410c6a3602202002200241206a3602182002200241086a3602242002413c6a41013602002002420137022c20024188b2cc003602282002200241186a360238200241246a41e4a1c000200241286a10431a20012d0000417f6a41ff0171200141046a290200200235021042208620023502088410000240200228020c450d00200228020810350b200241c0006a24000b6901037f230041206b220224002001411c6a280200210320012802182104200241086a41106a2000280200220141106a290200370300200241086a41086a200141086a2902003703002002200129020037030820042003200241086a10432101200241206a240020010b040041000b02000b02000bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff03712001470d00200141027422014100480d00024020030d0020010d02410421020c040b20002802002102200341027422032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014102763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad420c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003410c6c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a2001410c6e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42307e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341306c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141306e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42307e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341306c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141306e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410121020c040b20002802002102200341057422032001460d03024020030d0020010d02410121020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014105763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42387e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341386c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141386e3602000b0bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff00712001470d00200141047422014100480d00024020030d0020010d02410421020c040b20002802002102200341047422032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014104763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42247e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341246c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141246e3602000b0bb40101027f0240200041046a280200220320016b20024f0d000240024002400240200120026a22042001490d00200341017422022004200220044b1b220420046a22012004490d0020014100480d00024020030d0020010d02410221030c040b2000280200210320022001460d03024020020d0020010d02410221030c040b20032002200110372203450d020c030b103e000b2001103322030d010b103c000b20002003360200200041046a20014101763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42287e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341286c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141286e3602000b0bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff01712001470d00200141037422014100480d00024020030d0020010d02410421020c040b20002802002102200341037422032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014103763602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410421020c040b20002802002102200341057422032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014105763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42b0027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341b0026c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141b0026e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42f0007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341f0006c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141f0006e3602000b0bba0101027f0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1b220241ffffff1f712002470d00200241067422024100480d00024020010d0020020d02410821030c040b20002802002103200141067422012002460d03024020010d0020020d02410821030c040b20032001200210372203450d020c030b103e000b2002103322030d010b103c000b20002003360200200041046a20024106763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d8027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d8026c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141d8026e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42e8007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341e8006c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141e8006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42187e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341186c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141186e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad422c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003412c6c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a2001412c6e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42147e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341146c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141146e3602000b0bc00101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffffff00712001470d00200141047422014100480d00024020030d0020010d02410821020c040b20002802002102200341047422032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014104763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d8007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d8006c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141d8006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42187e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341186c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141186e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42287e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341286c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141286e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42227e2204422088a70d002004a722014100480d00024020030d0020010d02410221020c040b20002802002102200341226c22032001460d03024020030d0020010d02410221020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141226e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c4007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341c4006c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141c4006e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42a0017e2204422088a70d002004a722014100480d00024020030d0020010d02410121020c040b20002802002102200341a0016c22032001460d03024020030d0020010d02410121020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141a0016e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff3f712001470d00200141057422014100480d00024020030d0020010d02410821020c040b20002802002102200341057422032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014105763602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42387e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341386c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141386e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d0007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d0006c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141d0006e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42e0007e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341e0006c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141e0006e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42347e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341346c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141346e3602000b0bbf0101017f0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1b220141ffffff1f712001470d00200141067422014100480d00024020030d0020010d02410421020c040b20002802002102200341067422032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a20014106763602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42d0027e2204422088a70d002004a722014100480d00024020030d0020010d02410821020c040b20002802002102200341d0026c22032001460d03024020030d0020010d02410821020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141d0026e3602000b0bc10102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad42c8007e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b20002802002102200341c8006c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a200141c8006e3602000b0bbc0102027f017e0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1bad42c8037e2204422088a70d002004a722024100480d00024020010d0020020d02410821030c040b20002802002103200141c8036c22012002460d03024020010d0020020d02410821030c040b20032001200210372203450d020c030b103e000b2002103322030d010b103c000b20002003360200200041046a200241c8036e3602000b0bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad423c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003413c6c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a2001413c6e3602000b0b800b04047f017e127f037e230041d0036b22012400200141f0006a41186a4200370300200141f0006a41106a22024200370300200141f0006a41086a220342003703002001420037037041f7edcb00ad4280808080f000841001220429000021052003200441086a290000370300200120053703702004103541eeedcb00ad4280808080900184100122042900002105200141206a41086a2206200441086a2900003703002001200537032020041035200220012903202205370300200141c0006a41086a22042003290300370300200141c0006a41106a2005370300200141c0006a41186a200629030037030020012001290370370340200141f0006a200141c0006a10ac0102400240024020012903704202510d002000280208210320002802042107200028020021082001200228020010ad01200141f0006a200128020022092001280208220a10ae012004200141f0006a410c6a290200370300200120012902743703400240024020012802704101460d00200141106a410c6a4100360200200142003703100c010b200141106a41086a200141c0006a41086a290300370300200120012903403703100b02402003450d002008200341246c6a210b20014184016a210c2001411c6a210d200141106a410472210e200141e8006a210f200141c0006a41206a211020082111034020112802202112200141206a41186a2213201141186a290000370300200141206a41106a2214201141106a290000370300200141206a41086a2215201141086a290000370300200120112900003703200240024020012802142206450d00200128021821160c010b200141f0006a410041e002109f081a200f410036020020104200370300200141c0006a41186a22004200370300200141c0006a41106a22034200370300200141c0006a41086a220442003703002001420037034041940310332206450d0541002116200641003b010620064100360200200641086a200141f0006a41e002109d081a20064190036a200f28020036020020064188036a201029030037020020064180036a2000290300370200200641f8026a2003290300370200200641f0026a2004290300370200200620012903403702e80220014100360218200120063602140b201141246a2111024002400340200641086a210320062f01062217410574210041002104024003402000450d01200141206a2003412010a0082202450d03200041606a2100200441016a2104200341206a21032002417f4a0d000b2004417f6a21170b02402016450d002016417f6a2116200620174102746a4194036a28020021060c010b0b200141c0006a41186a20132903002205370300200141c0006a41106a20142903002218370300200141c0006a41086a2015290300221937030020012001290320221a370340200c201a370200200c41086a2019370200200c41106a2018370200200c41186a20053702002001200d360280012001201736027c2001200e3602782001200636027420014100360270200141f0006a410010af0121000c010b200620044102746a41e8026a21000b2000200028020020126a3602002001200128021020126a3602102011200b470d000b0b02402007450d00200741246c450d00200810350b200141fc006a200141106a41086a290300370200200120012903102205370274200141013602702001410036024820014201370340410410332200450d0220002005a73600002001200036024020014284808080c000370244200141f0006a41086a2200200141c0006a10b00120012802442103200aad4220862009ad84200135024842208620012802402204ad84100202402003450d00200410350b200010b1012001280204450d01200910350c010b200041046a2802002203450d00200341246c450d00200028020010350b200141d0036a24000f0b103c000bd60202057f027e230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822010d00200042023703000c010b200228020c210302400240200241106a28020022044104490d0020044104460d0020012d0004220541014b0d0020012800002106420021070240024020050e020100010b2004417b6a4108490d0120012900052108420121070b20002008370308200041106a20063602000c010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b420221070b200020073703002003450d00200110350b200241d0006a24000bfc0403027f017e057f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541ccb5c000ad4280808080800284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bcd0b030e7f047e087f230041a0046b220324002003200236021420032001360210200341186a2002ad4220862001ad84100510c20102400240200328021822040d00200041003602000c010b200328021c21052003200341206a280200220136022c2003200436022802400240024020014104490d0020032001417c6a36022c2003200441046a36022820042800002106200341086a200341286a10c40120032802080d00200328020c21072003410036024820034100360240200341c0006a41086a210802400240024002402007450d00200341d4016a2109200328022c210a200341b8016a210b4100210c034041002101200341003a00e001200c41016a210c024002400340200a2001460d01200341c0016a20016a2003280228220d2d00003a00002003200d41016a3602282003200141016a22023a00e0012002210120024120470d000b20034190016a41086a220e200341c0016a41086a29030037030020034190016a41106a220f200341c0016a41106a29030037030020034190016a41186a2210200341c0016a41186a290300370300200320032903c001370390012003200a20026b220136022c200141044f0d010c050b2003410036022c200141ff0171450d04200341003a00e001410021010c050b200341d0006a41086a200e2903002211370300200341d0006a41106a200f2903002212370300200341d0006a41186a20102903002213370300200320032903900122143703502003200d41056a36022820032001417c6a220a36022c200d2800012115200341f0006a41186a22162013370300200341f0006a41106a22172012370300200341f0006a41086a22182011370300200320143703700240024020032802402219450d002003280244211a0c010b200341c0016a410041e002109f081a200b410036020020034190016a41206a2201420037030020104200370300200f4200370300200e4200370300200342003703900141940310332219450d034100211a201941003b010620194100360200201941086a200341c0016a41e002109d081a20194190036a200b28020036020020194188036a200129030037020020194180036a2010290300370200201941f8026a200f290300370200201941f0026a200e29030037020020192003290390013702e80220034100360244200320193602400b024002400340201941086a210220192f0106221b41057421014100210d024003402001450d01200341f0006a2002412010a008221c450d03200141606a2101200d41016a210d200241206a2102201c417f4a0d000b200d417f6a211b0b0240201a450d00201a417f6a211a2019201b4102746a4194036a28020021190c010b0b201020162903002211370300200f20172903002212370300200e201829030022133703002003200329037022143703900120092014370200200941086a2013370200200941106a2012370200200941186a2011370200200320083602d0012003201b3602cc01200320193602c401200341003602c0012003200341c0006a3602c801200341c0016a201510af011a0c010b2019200d4102746a41e8026a20153602000b200c2007470d000b0b410121010c020b103c000b410021010b200341306a41086a20082802002202360200200320032903402211370330200341c0016a41086a2002360200200320113703c00120010d01200341c0016a10b1010b4100210120034100360298012003420137039001200341093602742003200341106a360270200320034190016a360250200341d4016a4101360200200342013702c401200341c888c2003602c0012003200341f0006a3602d001200341d0006a41e88ac500200341c0016a10431a200335029801422086200335029001841006200328029401450d0120032802900110350c010b20034190016a41086a200341c0016a41086a2802002201360200200320032903c00122113703900120002006360204200041086a2011370200200041106a2001360200410121010b200020013602002005450d00200410350b200341a0046a24000bed0701087f23004190046b2202240020002802102203200328020041016a360200200241086a2203200041086a29020037030020022000290200370300200241306a41186a2000412c6a290000370300200241306a41106a200041246a290000370300200241306a41086a2000411c6a29000037030020022000290014370330200241d0006a2002200241306a200110fe0202400240024020022d00504101470d002003200241d9006a290000370300200241106a200241e1006a290000370300200241186a200241e9006a29000037030020022002290051370300200241d0006a412c6a280200210120024188016a280200210420024184016a280200210320024180016a2802002105200228028c012106200241f8006a28020022002802002207450d0120002f01042108200241f4006a2802002109200241d0006a410172210003402002200841ffff037136022c20022001360228200220073602242002200941016a360220200241306a41186a200241186a2201290300370300200241306a41106a200241106a2207290300370300200241306a41086a200241086a220829030037030020022002290300370330200241d0006a200241206a200241306a20052003200410ff0220022d00504101470d032008200041086a2900003703002007200041106a2900003703002001200041186a29000037030020022000290000370300200228027c2101200228028801210420022802840121032002280280012105200228027822082802002207450d0220082f01042108200228027421090c000b0b200241d0006a41086a280200200241d0006a41106a2802004102746a41e8026a21060c010b200241d0006a410272410041be03109f081a02400240024041c40310332200450d0020004100360200200041046a200241d0006a41c003109d081a200020012802002207360294032001200036020020012001280204220841016a360204200741003b010420072000360200200241d0006a41186a200241186a290300370300200241d0006a41106a200241106a290300370300200241d0006a41086a200241086a2903003703002002200229030037035020082004470d0120002f01062201410a4b0d02200020014105746a220441206a200241d0006a41186a290300370000200441186a200241d0006a41106a290300370000200441106a200241d0006a41086a290300370000200441086a2002290350370000200020014102746a41e8026a20053602002000200141016a22014102746a4194036a2003360200200020013b0106200320013b0104200320003602000c030b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b20024190046a240020060bef0403057f027e027f230041c0006b22022400200041086a28020022032001107702400240024020002802002204450d00024020002802042205450d002005210020042106034020062802940321062000417f6a22000d000b200421000340200020002f01064102746a4194036a28020021002005417f6a22050d000b200241186a2105200621040c020b200241186a2105200421000c010b410021042002410036021c200241186a21050c010b2002200036021c200241246a20002f010636020020024100360220200241003602180b200241086a41086a200541086a2902002207370300200220052902002208370308200241306a2007370300200242003703202002200436021c20024100360218200220083703282002200336023802402003450d00034020022003417f6a360238200241186a410020041b2206280200210020062802082109024002400240200628020c2205200628020422032f01064f0d00200321040c010b0240034020032802002204450d01200041016a210020032f0104210520042103200520042f0106490d020c000b0b2009ad2107410021040c010b2005ad4220862009ad8421070b2007422088a7220941016a21052007a7210a0240024020000d00200421030c010b200420054102746a4194036a2802002103410021052000417f6a2200450d00034020032802940321032000417f6a22000d000b0b2006200536020c2006200a36020820062003360204200641003602002001200420094105746a41086a412010782002200420094102746a41e8026a28020036023c20012002413c6a4104107820022802382203450d01200228021c21040c000b0b200241c0006a24000bb50201047f024020002802002201450d0020002802082102024020002802042200450d00034020012802940321012000417f6a22000d000b0b02402002450d004100210303400240024002402001450d002002417f6a2102200320012f0106490d0141002104034002400240200128020022000d0041002103410021000c010b200441016a210420012f010421030b2001103520002101200320002f01064f0d000b200341016a2103024020040d00200021010c030b200020034102746a4194036a2802002101410021032004417f6a2200450d02034020012802940321012000417f6a22000d000c030b0b41958dcc00412b41c08dcc00103f000b200341016a21030b20020d000b0b2001450d0020012802002100200110352000450d00034020002802002101200010352001210020010d000b0b0ba20703027f017e067f230041e0006b2203240041f7edcb00ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541d6a9c000ad4280808080b00284100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a22012003413c6a3602002003200341c8006a41086a22063602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b0240024002400240412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2202417f4c0d01200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d012002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21010c010b2007415f4b0d03200b41017422012006200120064b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2007109d081a02400240200120066b2008490d002001210b0c010b20022006490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420066a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000ba20703027f017e067f230041e0006b2203240041f7edcb00ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541e9a9c000ad4280808080b00284100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a22012003413c6a3602002003200341c8006a41086a22063602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b0240024002400240412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2202417f4c0d01200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d012002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21010c010b2007415f4b0d03200b41017422012006200120064b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2007109d081a02400240200120066b2008490d002001210b0c010b20022006490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420066a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541c0a9c000ad4280808080e00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541f393ca00ad4280808080a00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bda0503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a29000037030020022004370308200310354189aac000ad4280808080900184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240410410332203450d0020034104412010372203450d0320032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a290000370000200128022021052003412041c00010372201450d032001200536002020022001ad4280808080c004841003220329000037033820031035200241cc006a200141246a360200200220013602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200110352002280230220641206a2203417f4c0d01200228022821070240024020030d0041002105410121010c010b200310332201450d01200321050b024002402005410f4d0d00200521080c010b200541017422084110200841104b1b22084100480d03024020050d002008103322010d010c050b20052008460d0020012005200810372201450d040b20012002290308370000200141086a200241086a41086a2903003700000240024020084170714110460d00200821050c010b200841017422054120200541204b1b22054100480d0320082005460d0020012008200510372201450d040b20012002290318370010200141186a200241186a41086a29030037000002400240200541606a2006490d00200521080c010b2006415f4b0d03200541017422082003200820034b1b22084100480d0320052008460d0020012005200810372201450d040b200141206a20072006109d081a2000200336020820002008360204200020013602000240200228022c450d00200710350b200241d0006a24000f0b1045000b1044000b103e000b103c000bc20503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003103541c6a9c000ad4280808080e00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bfc0403027f017e057f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541feedcb00ad4280808080d00284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bb10503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541cca9c000ad4280808080a00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541fca9c000ad4280808080d00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b890603027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241186a41086a200341086a290000370300200220043703182003103541fca9c000ad4280808080d00184100122032900002104200241286a41086a200341086a2900003703002002200437032820031035200128020021010240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad428080808080048410032201290000370348200110352002410c6a200341206a360200200220033602082002200241c8006a41086a3602042002200241c8006a360200200241386a2002107b200310352002280240220541206a2201417f4c0d01200228023821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290318370000200341086a200241186a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290328370010200341186a200241286a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a0240200228023c450d00200610350b20022003200110bc01200241286a41086a2207200241086a280200360200200220022903003703280240200228020c2201450d002000200229032837020020002002290310370210200041086a20072802003602000b2000200136020c02402008450d00200310350b200241d0006a24000f0b1045000b1044000b103e000b103c000ba20503067f017e027f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d002000410036020c0c010b200328021421042003200341186a2802002202360224200320013602200240024020024104490d002003200141046a36022020032002417c6a220536022420054104490d00200128000021062003200141086a3602202003200241786a220536022420054104490d00200128000421052003200241746a36022420032001410c6a360220200128000821072003200341206a10c40120032802000d002003280224220820032802044102742202490d0002400240024002402002417f4c0d000240024020020d00420021094101210a0c010b20021039220a450d02200a2003280220220b2002109d081a2003200820026b3602242003200b20026a3602202002ad21090b200a450d04024020092002ad422086842209422088a722020d002009a721020c030b0240200a2002724103710d002009a722024103710d0020024102762208450d032009422288a7210b0c040b2009a7450d04200a10350c040b1044000b1045000b4100210b02402002450d00200a10350b410021084104210a0b41000d00200a450d00200020083602102000200a36020c200020073602082000200536020420002006360200200041146a200b3602000c010b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b2000410036020c0b2004450d00200110350b200341e0006a24000bfc0403027f017e057f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541efb5c000ad4280808080e00184100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bfc0403027f017e057f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541dcb5c000ad4280808080b00284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000b9b540f047f017e017f017e027f017e067f027e017f017e037f017e087f047e047f230041c0046b22022400200241d0006a41186a22034200370300200241d0006a41106a22044200370300200241d0006a41086a220542003703002002420037035041f7edcb00ad4280808080f000842206100122072900002108200241e0026a41086a2209200741086a290000370300200220083703e0022007103520052009290300370300200220022903e00237035041e4edcb00ad4280808080a0018422081001220a290000210b200241b0036a41086a2207200a41086a2900003703002002200b3703b003200a1035200420022903b003220b37030020024190046a41086a220c200529030037030020024190046a41106a220d200b37030020024190046a41186a220e20072903003703002002200229035037039004200241286a20024190046a412010c0012002280228210f200228022c21102003420037030020044200370300200542003703002002420037035020061001220a290000210b2009200a41086a2900003703002002200b3703e002200a103520052009290300370300200220022903e00237035020081001220a29000021082007200a41086a290000370300200220083703b003200a1035200420022903b0032208370300200c2005290300370300200d2008370300200e20072903003703002002200229035037039004410121054100210a2002201041016a4100200f1b221136025020024190046aad42808080808004842212200241d0006aad22134280808080c00084100220061001220329000021062009200341086a290000370300200220063703e0022003103541feedcb00ad4280808080d002841001220929000021062007200941086a290000370300200220063703b00320091035200220113602f0032002200241f0036aad4280808080c00084100322092900003703900420091035200241dc006a200241f4036a3602002002200c3602542002200241f0036a360258200220024190046a36025020024190026a200241d0006a107b024002400240024002400240024002400240024002400240024002400240200228029802220341206a220c417f4c0d00200228029002210d0240200c450d00200c10332205450d07200c210a0b02400240200a410f4d0d00200a21070c010b200a41017422094110200941104b1b22074100480d0b0240200a0d002007103322050d010c100b200a2007460d002005200a200710372205450d0f0b200520022903e002370000200541086a200241e0026a41086a2903003700000240024020074170714110460d00200721090c010b200741017422094120200941204b1b22094100480d0b20072009460d0020052007200910372205450d0f0b200520022903b003370010200541186a200241b0036a41086a29030037000002400240200941606a2003490d00200921070c010b200341206a22072003490d0b2009410174220a2007200a20074b1b22074100480d0b20092007460d0020052009200710372205450d0f0b200541206a200d2003109d081a0240200228029402450d00200d10350b20022001360250200cad4220862005ad8420134280808080c00084100202402007450d00200510350b200241d0006a41186a220a4200370300200241d0006a41106a22144200370300200241d0006a41086a220542003703002002420037035041f7edcb00ad4280808080f000842206100122072900002108200241e0026a41086a2209200741086a290000370300200220083703e0022007103520052009290300370300200220022903e00237035041b5edcb00ad4280808080c001841001220c2900002108200241b0036a41086a2207200c41086a290000370300200220083703b003200c1035200420022903b003370000200441086a200729030037000020024190046a41086a200529030037030020024190046a41106a201429030037030020024190046a41186a200a2903003703002002200229035037039004200241206a20024190046a412010c00102402011200228022441016a41d50020022802201b6b220c20114b0d00200c10c1010b200a420037030020144200370300200542003703002002420037035020061001220a29000021062009200a41086a290000370300200220063703e002200a103520052009290300370300200220022903e00237035041b3b6c000ad4280808080d001841001220929000021062007200941086a290000370300200220063703b00320091035201420022903b0032206370300200241306a41086a2005290300370300200241306a41106a2006370300200241306a41186a200729030037030020022002290350370330200241203602d4012002200241306a3602d001200241d8016a200241306aad42808080808004842215100510c20120022802d8012216450d0520022802dc0121172002200241d8016a41086a2802003602ec01200220163602e801200241d0006a200241e8016a10c30120022802502218450d03200241d0006a41086a35020021192002280254211a200241186a200241e8016a10c40120022802180d01200228021c221b20022802ec01220741d0006e22052005201b4b1bad42d0007e2206422088a70d002006a72205417f4c0d000240024020050d004108211c0c010b20051033221c450d070b4100210a200241003602f8012002201c3602f0012002200541d0006e221d3602f4010240201b450d00200241b4046a211e200241d0006a41206a211f4100210a4100210c02400340200241003a00d003200c41016a210c41002105024002400240034020072005460d01200241b0036a20056a20022802e80122092d00003a00002002200941016a3602e8012002200541016a22093a00d0032009210520094120470d000b200241f0036a41086a2205200241b0036a41086a2203290300370300200241f0036a41106a220d200241b0036a41106a2201290300370300200241f0036a41186a220e200241b0036a41186a220f290300370300200220022903b0033703f0032002200720096b3602ec0120024190046a200241e8016a10c50120022802b00422090d01410021090c020b200241003602ec010240200541ff0171450d00200241003a00d0030b410021090c010b201f200229039004370300200241d0006a41186a2207200e290300370300200241d0006a41106a220e200d290300370300200241d0006a41086a220d2005290300370300201f41086a20024190046a41086a290300370300201f41106a20024190046a41106a290300370300201f41186a20024190046a41186a290300370300200241a0036a41086a201e41086a280200360200200220022903f0033703502002201e2902003703a003200241b0036a41386a200241d0006a41386a290300370300200241b0036a41306a200241d0006a41306a290300370300200241b0036a41286a200241d0006a41286a290300370300200241b0036a41206a201f290300370300200f20072903003703002001200e2903003703002003200d290300370300200220022903503703b0030b200241e0026a41386a2205200241b0036a41386a290300370300200241e0026a41306a2207200241b0036a41306a290300370300200241e0026a41286a2203200241b0036a41286a290300370300200241e0026a41206a220d200241b0036a41206a290300370300200241e0026a41186a2201200241b0036a41186a290300370300200241e0026a41106a220e200241b0036a41106a290300370300200241e0026a41086a220f200241b0036a41086a290300370300200241d0026a41086a2210200241a0036a41086a280200360200200220022903b0033703e002200220022903a0033703d00202402009450d0020024190026a41386a2220200529030037030020024190026a41306a2221200729030037030020024190026a41286a2207200329030037030020024190026a41206a2203200d29030037030020024190026a41186a220d200129030037030020024190026a41106a2201200e29030037030020024190026a41086a220e200f29030037030020024180026a41086a220f2010280200360200200220022903e00237039002200220022903d002370380020240200a20022802f401470d00200241f0016a200a410110a30120022802f001211c20022802f801210a0b201c200a41d0006c6a220520022903900237030020012903002106200d29030021082003290300210b200729030021222021290300212320202903002124200e290300212520052009360240200541086a20253703002005200229038002370244200541cc006a200f280200360200200541386a2024370300200541306a2023370300200541286a2022370300200541206a200b370300200541186a2008370300200541106a20063703002002200a41016a220a3602f801200c201b460d0220022802ec0121070c010b0b0240200a450d00200a41d0006c2109201c41c4006a21050340024020052802002207450d00200741306c450d002005417c6a28020010350b200541d0006a2105200941b07f6a22090d000b0b20022802f4012205450d03200541d0006c450d03201c10350c030b20022802f401211d0b201c450d010240024020022802ec012205450d0020022005417f6a3602ec01200220022802e801220541016a3602e80120052d000022264103490d010b0240200a450d00200a41d0006c2109201c41c4006a21050340024020052802002207450d00200741306c450d002005417c6a28020010350b200541d0006a2105200941b07f6a22090d000b0b0240201d450d00201d41d0006c450d00201c10350b201a41ffffff3f71450d040c030b2019422086201aad8421240c040b1044000b201a41ffffff3f71450d010b201810350b200241003602b803200242013703b003200241093602e4022002200241d0016a3602e0022002200241b0036a36029002200241e4006a410136020020024201370254200241c888c2003602502002200241e0026a36026020024190026a41e88ac500200241d0006a10431a20023502b80342208620023502b003841006024020022802b403450d0020022802b00310350b410321260b02402017450d00201610350b20264103460d00201510070c040b200241003602d802200242083703d002200241003602a803200242013703a00341f7edcb00ad4280808080f00084100122052900002106200241e0026a41086a2209200541086a290000370300200220063703e0022005103541f393ca00ad4280808080a00184100122052900002106200241b0036a41086a2207200541086a290000370300200220063703b00320051035412010332205450d00200520022903e002370000200520022903b003370010200541086a2009290300370000200541186a220a2007290300370000412010332209450d0020092005290000370000200941186a200a290000370000200941106a200541106a290000370000200941086a200541086a290000370000200241306a41026a220a200241d0006a41026a2d00003a0000200220022f00503b0130200241f0036a41106a42a0808080800437030041002107200241003a008804200220053602fc03200242a080808080043702f403200220093602f0032002418b046a200a2d00003a0000200220022f01303b008904200241d0006a200241f0036a10c701024020022802504101470d00200241d0006a410472210a410121164108211b4100210c0340200241b0036a41206a200a41206a280200360200200241b0036a41186a2205200a41186a2902002206370300200241b0036a41106a2209200a41106a2902002208370300200241b0036a41086a2220200a41086a290200220b3703002002200a29020022223703b00320024190026a41186a220e200637030020024190026a41106a220f200837030020024190026a41086a2210200b3703002002202237039002200241d0006a41186a22032005290300370300200241d0006a41106a220d2009290300370300200241d0006a41086a22012020290300370300200220022903b00337035020024190026a10c8012106412010332209450d0a2009200229039002370000200941186a200e290300370000200941106a200f290300370000200941086a2010290300370000200241e0026a41086a20012903002208370300200241e0026a41106a200d290300220b370300200241e0026a41186a200329030022223703002002200229035022233703e00220024190046a41186a2220202237030020024190046a41106a2221200b37030020024190046a41086a221f200837030020022023370390040240200c20022802d402470d00200241d0026a200c4101108b0120022802d002211b20022802d802210c0b201b200c41386c6a22052006370300201f2903002106202129030021082020290300210b20022903900421222005412c6a4281808080103702002005200936022820052022370308200541206a200b370300200541186a2008370300200541106a20063703002002200c41016a220c3602d8022003200e290300370300200d200f2903003703002001201029030037030020022002290390023703500240200720022802a403470d00200241a0036a20074101108a0120022802a003211620022802a80321070b201620074105746a22052002290350370000200541186a2003290300370000200541106a200d290300370000200541086a20012903003700002002200741016a22073602a803200241d0006a200241f0036a10c70120022802504101460d000b0b024020022802f403450d0020022802f00310350b0240200228028004450d0020022802fc0310350b41f7edcb00ad4280808080f00084100122052900002106200241e0026a41086a2209200541086a290000370300200220063703e0022005103541cca9c000ad4280808080a00184100122052900002106200241b0036a41086a2207200541086a290000370300200220063703b00320051035412010332205450d00200520022903e002370000200520022903b003370010200541086a2009290300370000200541186a220a2007290300370000412010332209450d0020092005290000370000200941186a200a290000370000200941106a200541106a290000370000200941086a200541086a29000037000020024190026a41026a220a200241d0006a41026a2d00003a0000200220022f00503b019002200241d0006a41106a220742a080808080043703002002200536025c200242a0808080800437025420022009360250200241003a0068200241eb006a200a2d00003a0000200220022f0190023b0069200241d0026a200241d0006a10c901200241d0006a41186a220a420037030020074200370300200241d0006a41086a220542003703002002420037035041f7edcb00ad4280808080f000842206100122092900002108200241e0026a41086a220c200941086a290000370300200220083703e002200910352005200c290300370300200220022903e00237035041c1edcb00ad4280808080e00184100122032900002108200241b0036a41086a2209200341086a290000370300200220083703b00320031035201420022903b003370000201441086a220d2009290300370000200241306a41086a22012005290300370300200241306a41106a220e2007290300370300200241306a41186a220f200a29030037030020022002290350370330200241106a200241306a412010c0012002280214211020022802102120200a42003703002007420037030020054200370300200242003703502006100122032900002106200c200341086a290000370300200220063703e002200310352005200c290300370300200220022903e00237035041cfedcb00ad4280808080d002841001220c29000021062009200c41086a290000370300200220063703b003200c1035201420022903b003370000200d200929030037000020012005290300370300200e2007290300370300200f200a29030037030020022002290350370330200241086a200241306a412010c001200228020c21072002280208210a2009200241a0036a41086a280200360200200220022903a0033703b0032005200241d0026a41086a280200360200200220022903d00237035020024190046a2010410020201b20074104200a1b22054101200541014b1b200241b0036a200241d0006a10ca01024020022802900422170d00410321260c040b200241a4046a280200210c20024190046a41106a28020021162002419c046a280200211f20024190046a41086a2802002105200228029404211b2002410036025820024201370350200241d0006a4100200541306c220741306e108a012002280258210a0240024020070d00200228025021180c010b20022802502218200a4105746a210520172109034020052009290000370000200541186a200941186a290000370000200541106a200941106a290000370000200541086a200941086a290000370000200a41016a210a200541206a2105200941306a2109200741506a22070d000b0b20023502542108200241003602f803200242043703f003200241f0036a4100200c412c6c2205412c6d109801201f20056a210d20022802f803210320022802f00321210240200c0d00201f21050c020b200241b0036a410c6a212020212003412c6c6a2109200241b0036a410472210720024190026a41206a210120024190026a41186a210e20024190026a41106a210f20024190026a41086a2110201f210503402005280200210c2001200541246a290200370300200e2005411c6a290200370300200f200541146a29020037030020102005410c6a2902003703002002200541046a290200370390020240200c0d002005412c6a21050c030b2007200229039002370200200741086a2010290300370200200741106a200f290300370200200741186a200e290300370200200741206a20012903003702002002200c3602b003202010c8012106200241d0006a41286a200241b0036a41286a280200360200200241d0006a41206a200241b0036a41206a290300370300200241d0006a41186a200241b0036a41186a290300370300200241d0006a41106a200241b0036a41106a290300370300200241d0006a41086a200241b0036a41086a290300370300200220022903b003370350200241e0026a200241d0006a2006420010cb01200941286a200241e0026a41286a280200360200200941206a200241e0026a41206a290300370200200941186a200241e0026a41186a290300370200200941106a200241e0026a41106a290300370200200941086a200241e0026a41086a290300370200200920022903e002370200200341016a21032009412c6a21092005412c6a2205200d470d000b200220033602f8030c020b1045000b200220033602f8032005200d460d00034020052209412c6a21050240200941046a2802002207450d00200741246c450d00200928020010350b200d2005470d000b0b02402016450d002016412c6c450d00201f10350b20022802f403210d200241d0006a2018200a2021200310cc01024002402002280250220c0d00410021054100210c410021010c010b2002280258210102400240200228025422090d00200c21050c010b20092105200c2107034020072802c80521072005417f6a22050d000b200c21050340200520052f01064102746a41c8056a28020021052009417f6a22090d000b2007210c0b20052f010621090b200241ec006a2009360200200241e8006a4100360200200241e4006a20053602002002200136027020024100360260200242003703582002200c36025420024100360250200aad21062002200241306a360274200241b0036a200241d0006a10cd0120022802b003211c20022802b403211d20022802b803210a02402003450d002003412c6c21092021210503400240200541046a2802002207450d00200741306c450d00200528020010350b2005412c6a2105200941546a22090d000b0b200642208621060240200d450d00200d412c6c450d00202110350b2006200884212441002126201b450d00201b41306c450d00201710350b200241d0006a41186a22094200370300200241d0006a41106a22074200370300200241d0006a41086a220542003703002002420037035041f7edcb00ad4280808080f0008422081001220c2900002106200241e0026a41086a2203200c41086a290000370300200220063703e002200c103520052003290300370300200220022903e00237035041ceeecb00ad4280808080b001841001220c2900002106200241b0036a41086a220d200c41086a290000370300200220063703b003200c1035201420022903b003370000201441086a200d290300370000200241306a41086a2005290300370300200241306a41106a2007290300370300200241306a41186a200929030037030020022002290350370330201510074100210c20264103460d032009420037030020074200370300200542003703002002420037035020081001220c29000021062003200c41086a290000370300200220063703e002200c103520052003290300370300200220022903e00237035041b6aac000ad42808080809002841001220c2900002106200d200c41086a290000370300200220063703b003200c1035200420022903b003370000200441086a200d29030037000020024190046a41086a200529030037030020024190046a41106a200729030037030020024190046a41186a20092903003703002002200229035037039004410110332205450d04200541003a000020122005ad4280808080108410022005103542002108200241d0006a41186a22274200370300200241d0006a41106a22284200370300200241d0006a41086a221a42003703002002420037035041f7edcb00ad4280808080f00084220610012205290000210b200241e0026a41086a2229200541086a2900003703002002200b3703e00220051035201a2029290300370300200220022903e0023703504192aac000ad4280808080a0028410012205290000210b200241b0036a41086a220e200541086a2900003703002002200b3703b00320051035200420022903b003370000200441086a2209200e29030037000020024190046a41086a2221201a29030037030020024190046a41106a221f202829030037030020024190046a41186a221620272903003703002002200229035037039004201210072027420037030020284200370300201a42003703002002420037035020061001220529000021062029200541086a290000370300200220063703e00220051035201a2029290300370300200220022903e00237035041a4aac000ad4280808080a00284100122052900002106200e200541086a290000370300200220063703b00320051035200420022903b0033700002009200e2903003700002021201a290300370300201f202829030037030020162027290300370300200220022903503703900420121007201c200a41d0006c6a21200240200a0d00201c210d420021060c020b200241e0026a41106a211b20024190026a41106a210f200241b4026a2104200241d0006a41206a21014200210842002106201c210d0340200241b0036a41386a220a200d220541386a290300370300200241b0036a41306a220c200541306a290300370300200241b0036a41286a2203200541286a290300370300200241b0036a41206a2210200541206a290300370300200241b0036a41186a2209200541186a290300370300200241b0036a41106a2207200541106a290300370300200e200541086a2903003703002005290300210b200241d0026a41086a2214200541cc006a2802003602002002200b3703b0032002200541c4006a2902003703d002200541d0006a210d200541c0006a2802002205450d02200241d0006a41386a200a290300370300200241d0006a41306a200c290300370300200241d0006a41286a2003290300370300200120102903003703002027200929030037030020282007290300370300201a200e290300370300200220022903b003370350200241f0036a41186a2009290300370300200241f0036a41106a2007290300370300200241f0036a41086a200e290300370300200220022903b0033703f00320024190026a41186a2217200141186a290300370300200f200141106a29030037030020024190026a41086a221e200141086a290300220b370300200220053602b00220022001290300222237039002200420022903d002370200200441086a201428020036020020024190046a2011200241f0036a10ce0120023502980421232002280290042110200241003602e802200242013703e002200220024190026a360230200241306a200241e0026a10cf012002200f360230200241306a200241e0026a10cf0120022802b002210520022802b8022209200241e0026a107702402009450d00200941306c210c03400240024020022802e402220a20022802e80222096b4120490d0020022802e00221070c010b200941206a22072009490d04200a41017422032007200320074b1b22034100480d0402400240200a0d00024020030d00410121070c020b200310332207450d0a0c010b20022802e0022107200a2003460d002007200a200310372207450d090b200220033602e402200220073602e0020b200720096a2207200541106a290000370000200741186a200541286a290000370000200741106a200541206a290000370000200741086a200541186a2900003700002002200941206a3602e80220022005360230200241306a200241e0026a10cf01200541306a2105200c41506a220c0d000b0b20022802e402210520234220862010ad8420023502e80242208620022802e0022209ad84100202402005450d00200910350b0240200228029404450d00201010350b20162017290300370300201f200f2903003703002021201e29030037030020022002290390023703900420022802bc02210720022802b402210a20022802b0022109024020022802b802220541c100490d0020092005410041202005676b10d00141c00021050b200241e0026a41186a2016290300370300201b201f2903003703002029202129030037030020022002290390043703e0022002200736028c0320022005360288032002200a360284032002200936028003200241a0036a2011200241f0036a10d10120023502a803212320022802a003211020024100360238200242013703302002200241e0026a3602800220024180026a200241306a10cf012002201b3602800220024180026a200241306a10cf0120022802800321052002280288032209200241306a107702402009450d00200941306c210c0340024002402002280234220a200228023822096b4120490d00200228023021070c010b200941206a22072009490d04200a41017422032007200320074b1b22034100480d0402400240200a0d00024020030d00410121070c020b200310332207450d0a0c010b20022802302107200a2003460d002007200a200310372207450d090b20022003360234200220073602300b200720096a2207200541106a290000370000200741186a200541286a290000370000200741106a200541206a290000370000200741086a200541186a2900003700002002200941206a360238200220053602800220024180026a200241306a10cf01200541306a2105200c41506a220c0d000b0b2006200b7c200820227c220b2008542205ad7c21082002280234210920234220862010ad84200235023842208620022802302207ad84100202402009450d00200710350b2008200651210920082006542107024020022802a403450d00201010350b2005200720091b210502402002280284032209450d00200941306c450d0020022802800310350b427f200820051b2106427f200b20051b2108200d2020470d000c030b0b103e000b2020200d460d000340200d220541d0006a210d0240200541c4006a2802002209450d00200941306c450d00200541c0006a28020010350b2020200d470d000b0b0240201d450d00201d41d0006c450d00201c10350b200241b0036a201110bd0120022802b003210520023502b803210b2002200637035820022008370350200b4220862005ad84201342808080808002841002024020022802b403450d00200510350b02402024422088a7410574220a450d00200241b0036aad210b201821050340200241d0006a200510b501200220022802502207200228025810d2012002280204410020022802001b210902402002280254450d00200710350b200241d0006a2011200510d3012002350258210620022802502107200241003a00b5030240024002400240200941c000490d00200941808001490d012009418080808004490d02200241053a00b503200241033a00b003200220093600b1034280808080d00021080c030b200241013a00b503200220094102743a00b00342808080801021080c020b200241023a00b503200220094102744101723b01b00342808080802021080c010b200241043a00b503200220094102744102723602b0034280808080c00021080b20064220862007ad842008200b841002024020022d00b503450d00200241003a00b5030b02402002280254450d00200710350b200541206a2105200a41606a220a0d000b0b200241d9006a20263a0000200241d8006a41043a0000200241043a005041b0b4cc004100200241d0006a10d4012018210c0b200020243702042000200c360200200241c0046a24000f0b103c000b8f0201037f230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822040d00410021010c010b200328020c210502400240200341106a2802004104490d0020042800002102410121010c010b4100210120034100360220200342013703182003410936022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341c888c2003602382003200341286a360248200341346a41e88ac500200341386a10431a200335022042208620033502188410060240200328021c450d00200328021810350b0b2005450d00200410350b2000200236020420002001360200200341d0006a24000bd71704027f017e077f017e230041d0006b2201240041f7edcb00ad4280808080f00084100122022900002103200141086a41086a200241086a290000370300200120033703082002103541e4b6c000ad4280808080b00184100122022900002103200141186a41086a200241086a2900003703002001200337031820021035200120003602342001200141346aad22034280808080c000841003220229000037033820021035200141cc006a200141386a3602002001200141386a41086a22043602442001200141346a3602482001200141386a360240200141286a200141c0006a107b02400240024002402001280230220541206a2206417f4c0d00200128022821070240024020060d0041002108410121020c010b200610332202450d02200621080b024002402008410f4d0d00200821090c010b200841017422094110200941104b1b22094100480d03024020080d002009103322020d010c050b20082009460d0020022008200910372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020094170714110460d00200921080c010b200941017422084120200841204b1b22084100480d0320092008460d0020022009200810372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200841606a2005490d00200821090c010b200541206a22092005490d032008410174220a2009200a20094b1b22094100480d0320082009460d0020022008200910372202450d040b200241206a20072005109d081a0240200128022c450d00200710350b2006ad4220862002ad84100802402009450d00200210350b41f7edcb00ad4280808080f0008410012202290000210b200141086a41086a200241086a2900003703002001200b3703082002103541d2b6c000ad4280808080a0028410012202290000210b200141186a41086a200241086a2900003703002001200b3703182002103520012000360234200120034280808080c000841003220229000037033820021035200141cc006a200141386a360200200120043602442001200141346a3602482001200141386a360240200141286a200141c0006a107b2001280230220541206a2208417f4c0d00200128022821070240024020080d0041002109410121020c010b200810332202450d02200821090b024002402009410f4d0d00200921060c010b200941017422064110200641104b1b22064100480d03024020090d00200610332202450d050c010b20092006460d0020022009200610372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020064170714110460d00200621090c010b200641017422094120200941204b1b22094100480d0320062009460d0020022006200910372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200941606a2005490d00200921060c010b2005415f4b0d03200941017422062008200620084b1b22064100480d0320092006460d0020022009200610372202450d040b200241206a20072005109d081a0240200128022c450d00200710350b2008ad4220862002ad84100802402006450d00200210350b41f7edcb00ad4280808080f0008410012202290000210b200141086a41086a200241086a2900003703002001200b3703082002103541c0b6c000ad4280808080a0028410012202290000210b200141186a41086a200241086a2900003703002001200b3703182002103520012000360234200120034280808080c000841003220229000037033820021035200141cc006a200141386a360200200120043602442001200141346a3602482001200141386a360240200141286a200141c0006a107b2001280230220541206a2208417f4c0d00200128022821070240024020080d0041002109410121020c010b200810332202450d02200821090b024002402009410f4d0d00200921060c010b200941017422064110200641104b1b22064100480d03024020090d00200610332202450d050c010b20092006460d0020022009200610372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020064170714110460d00200621090c010b200641017422094120200941204b1b22094100480d0320062009460d0020022006200910372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200941606a2005490d00200921060c010b2005415f4b0d03200941017422062008200620084b1b22064100480d0320092006460d0020022009200610372202450d040b200241206a20072005109d081a0240200128022c450d00200710350b2008ad4220862002ad84100802402006450d00200210350b41f7edcb00ad4280808080f0008410012202290000210b200141086a41086a200241086a2900003703002001200b3703082002103541dcb5c000ad4280808080b0028410012202290000210b200141186a41086a200241086a2900003703002001200b3703182002103520012000360234200120034280808080c000841003220229000037033820021035200141cc006a200141386a360200200120043602442001200141346a3602482001200141386a360240200141286a200141c0006a107b2001280230220541206a2208417f4c0d00200128022821070240024020080d0041002109410121020c010b200810332202450d02200821090b024002402009410f4d0d00200921060c010b200941017422064110200641104b1b22064100480d03024020090d00200610332202450d050c010b20092006460d0020022009200610372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020064170714110460d00200621090c010b200641017422094120200941204b1b22094100480d0320062009460d0020022006200910372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200941606a2005490d00200921060c010b2005415f4b0d03200941017422062008200620084b1b22064100480d0320092006460d0020022009200610372202450d040b200241206a20072005109d081a0240200128022c450d00200710350b2008ad4220862002ad84100702402006450d00200210350b200141c0006a200010ad01200135024842208620012802402202ad84100702402001280244450d00200210350b41f7edcb00ad4280808080f0008410012202290000210b200141086a41086a200241086a2900003703002001200b3703082002103541efb5c000ad4280808080e0018410012202290000210b200141186a41086a200241086a2900003703002001200b3703182002103520012000360234200120034280808080c000841003220229000037033820021035200141cc006a200141386a360200200120043602442001200141346a3602482001200141386a360240200141286a200141c0006a107b2001280230220641206a2208417f4c0d00200128022821050240024020080d0041002104410121020c010b200810332202450d02200821040b024002402004410f4d0d00200421090c010b200441017422094110200941104b1b22094100480d03024020040d00200910332202450d050c010b20042009460d0020022004200910372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020094170714110460d00200921040c010b200941017422044120200441204b1b22044100480d0320092004460d0020022009200410372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200441606a2006490d00200421090c010b2006415f4b0d03200441017422092008200920084b1b22094100480d0320042009460d0020022004200910372202450d040b200241206a20052006109d081a0240200128022c450d00200510350b2008ad4220862002ad84100702402009450d00200210350b200141c0006a200010b801200135024842208620012802402202ad84100702402001280244450d00200210350b200141d0006a24000f0b1044000b1045000b103e000b103c000bb10201067f230041206b22022400024002402001422088a722030d00410121040c010b2001a721040b200220033602142002200436021002402003450d0020042d0000210520022003417f6a3602142002200441016a360210200541014b0d0041002106024002400240024020050e020100010b200241086a200241106a10c40120022802080d0320022802142205200228020c2203490d032003417f4c0d010240024020030d0042002101410121060c010b200310392206450d032006200228021022072003109d081a2002200520036b3602142002200720036a3602102003ad21010b2006450d0320012003ad4220868421010b200020013702042000200636020020041035200241206a24000f0b1044000b1045000b41b89acc00412e200241186a41c09bcc0041e89acc001046000ba20401097f230041e0006b220224002002200110c40102400240024002402002280200450d00200041003602000c010b2002280204220320012802044105762204200420034b1b22044105742205417f4c0d010240024020040d00410121060c010b200510332206450d030b41002107200241003602102002200436020c20022006360208024002402003450d0041002108034041002105200241003a0058200841016a21082001280204417f6a210403402004417f460d03200241386a20056a200128020022092d00003a0000200120043602042001200941016a3602002002200541016a22093a00582004417f6a21042009210520094120470d000b200241186a41186a2205200241386a41186a290300370300200241186a41106a2209200241386a41106a290300370300200241186a41086a220a200241386a41086a2903003703002002200229033837031802402007200228020c470d00200241086a20074101108a0120022802082106200228021021070b200620074105746a22042002290318370000200441186a2005290300370000200441106a2009290300370000200441086a200a2903003700002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b0240200541ff0171450d00200241003a00580b20004100360200200228020c41ffffff3f71450d00200610350b200241e0006a24000f0b1044000b1045000bcf0201067f0240024020012802042202450d00200128020022032d0000210420012002417f6a2205360204410121062001200341016a3602000240200441037122074103460d0002400240024020070e03000102000b20044102762107410021060c040b41012106024020050d000c040b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d03200141fcff03714102762107410021060c030b20054103490d01200341036a2d0000210620032f0001210720012002417c6a3602042001200341046a3602002007200641107472410874200472220141808004492106200141027621070c020b0240200441034d0d000c020b20054104490d012003280001210720012002417b6a3602042001200341056a36020020074180808080044921060c010b410121060b20002007360204200020063602000b990707017f047e027f017e057f047e017f23004190026b22022400200241c0006a200110f60102400240024002400240024002402002290340a70d00200241c0006a41106a290300210320022903482104200241286a200110f6012002290328a70d03200241286a41106a290300210520022903302106200241206a200110c40120022802200d0220022802242207200128020441306e2208200820074b1bad42307e2209422088a7450d010c060b200041003602200c040b2009a72208417f4c0d040240024020080d004108210a0c010b20081033220a450d030b4100210b200241003602602002200a3602582002200841306e36025c0240024002402007450d004100210c03404100210d200241003a008802200c41016a210c2001280204417f6a210803402008417f460d03200241e8016a200d6a2001280200220e2d00003a0000200120083602042001200e41016a3602002002200d41016a220e3a0088022008417f6a2108200e210d200e4120470d000b200241c8016a41186a2208200241e8016a41186a290300370300200241c8016a41106a220d200241e8016a41106a290300370300200241c8016a41086a220e200241e8016a41086a290300370300200220022903e8013703c801200241086a200110f6012002290308a70d03200241086a41106a29030021092002290310210f20024188016a41086a200e290300221037030020024188016a41106a200d290300221137030020024188016a41186a20082903002212370300200241e8006a41086a220d2010370300200241e8006a41106a220e2011370300200241e8006a41186a22132012370300200220022903c801221037038801200220103703680240200b200228025c470d00200241d8006a200b41011088012002280258210a2002280260210b0b200a200b41306c6a220820093703082008200f37030020082002290368370310200841186a200d290300370300200841206a200e290300370300200841286a20132903003703002002200b41016a220b360260200c2007470d000b0b200a450d02200229025c210920002004370300200020093702242000200a3602202000200637031020002003370308200041186a20053703000c050b200d41ff0171450d00200241003a0088020b20024188016a41086a200241a8016a41086a290300370300200228025c2201450d00200141306c450d00200a10350b200041003602200c020b200041003602200c010b1045000b20024190026a24000f0b1044000bbd0101047f230041106b22022400200028020421032000280200210041012104200128021841d9a0c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41accfc70010701a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d002002280200220028021841d8a0c00041012000411c6a28020028020c11000021040b200241106a240020040b8a0604057f017e047f037e230041f0006b22022400200241286a200141146a350200422086200135020c84102710c2010240024020022802282203450d00200141086a2104200141106a210503400240024020042802002206200229022c2207422088a722084b0d00200128020022092003460d0120092003200610a008450d010b2007a7450d02200310350c020b02402005280200450d00200128020c10350b2001200336020c2005200737020020022003200810d201024002402002280200450d002002280204210a024020012d0018450d002001350214422086200135020c8410070b2001280214220820042802002203490d0102400240200820036b22084108490d00200841786a2106200128020c20036a41086a21090c010b410021060240410028028cb54c0d0041b0b4cc0021090c010b410021064100280298b54c21034100280294b54c21084100280290b54c210b200241e500360268200242b48080801037036020024187a1c00036025c20024213370254200241f4a0c0003602502002420037034841b0b4cc002109200241b0b4cc0036024420024201370338200241eca0c00036023420024113360230200241f4a0c00036022c20024101360228200841aca2c000200b410246220b1b200241286a200341c4a2c000200b1b2802101102000b41002103200241003a00480240034020062003460d01200241286a20036a200920036a2d00003a00002002200341016a22083a00482008210320084120470d000b200241086a41186a200241286a41186a2903002207370300200241086a41106a200241286a41106a290300220c370300200241086a41086a200241286a41086a290300220d37030020022002290328220e3703082000411c6a2007370000200041146a200c3700002000410c6a200d3700002000200e370004200041246a200a360200200041013602000c050b200341ff0171450d00200241003a00480b200241286a2001350214422086200135020c84102710c201200228022822030d010c020b0b2003200841889aca001059000b200041003602000b200241f0006a24000bda0b04047f017e027f027e23004190026b2201240020014180026a200010b401200141d8006a200128028002220020012802880210d501200141e0016a41086a2202200141e1006a290000370300200141e0016a41106a2203200141e9006a290000370300200141e0016a41186a2204200141f1006a290000370300200120012900593703e0010240024002400240024002400240024020012d00584101470d00200141386a41186a2004290300370300200141386a41106a2003290300370300200141386a41086a2002290300370300200120012903e0013703380240200128028402450d00200010350b200141d8006a41186a2202200141386a41186a290300370300200141d8006a41106a2203200141386a41106a290300370300200141d8006a41086a2204200141386a41086a2903003703002001200129033837035841f7edcb00ad4280808080f00084100122002900002105200141b0016a41086a200041086a290000370300200120053703b0012000103541c6a9c000ad4280808080e00084100122002900002105200141c0016a41086a200041086a290000370300200120053703c00120001035412010332200450d0420002001290358370000200041186a2002290300370000200041106a2003290300370000200041086a20042903003700002000ad428080808080048410042202290000210520014180026a41086a200241086a290000370300200120053703800220021035200141ec016a200041206a360200200120003602e801200120014180026a41106a3602e401200120014180026a3602e001200141d0016a200141e0016a107b2000103520012802d801220641206a2202417f4c0d0520012802d00121070240024020020d0041002103410121000c010b200210332200450d05200221030b024002402003410f4d0d00200321040c010b200341017422044110200441104b1b22044100480d07024020030d002004103322000d010c090b20032004460d0020002003200410372200450d080b200020012903b001370000200041086a200141b0016a41086a2903003700000240024020044170714110460d00200421030c010b200441017422034120200341204b1b22034100480d0720042003460d0020002004200310372200450d080b200020012903c001370010200041186a200141c0016a41086a29030037000002400240200341606a2006490d00200321040c010b2006415f4b0d07200341017422042002200420024b1b22044100480d0720032004460d0020002003200410372200450d080b200041206a20072006109d081a024020012802d401450d00200710350b200141d8006a2000200210d60120012802782203450d01200141f0006a290300210820014188016a280200210620014184016a280200210720012903682109200128027c210202402004450d00200010350b02402002450d00200241186c450d00200310350b200641ffffffff0371450d03200710350c030b200128028402450d01200010350c010b2004450d00200010350b42002109420021080b200141d8006a41186a4200370300200141d8006a41106a22034200370300200141d8006a41086a220042003703002001420037035841b6fdc600ad42808080808001841001220229000021052000200241086a290000370300200120053703582002103541e489c200ad4280808080d00184100122022900002105200141386a41086a2204200241086a2900003703002001200537033820021035200320012903382205370300200141e0016a41086a2000290300370300200141e0016a41106a2005370300200141e0016a41186a2004290300370300200120012903583703e001200141206a200141e0016a412010d701200141106a2001290328200141206a41106a290300427f420010980820012009200820012903104200200128022022001b220542012005420156200141106a41086a290300420020001b22054200522005501b22001b2005420020001b1098082001290300210520014190026a240020050f0b1045000b1044000b103e000b103c000be80808097f017e0c7f017e017f017e017f037e230041f0016b22022400200241086a41186a200141186a280200360200200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241e8006a200241086a10c905024020022d0098014102460d00200041046a21030340200241a0016a41286a200241e8006a41286a280200360200200241a0016a41206a200241e8006a41206a2201290300370300200241a0016a41186a2204200241e8006a41186a2205290300370300200241a0016a41106a2206200241e8006a41106a2207290300370300200241a0016a41086a2208200241e8006a41086a2209290300370300200220022903683703a0012001280200210a0240200229028c01220b422088a7220c450d00200228029401210d4100210e200a21014100210f024002400340200220013602cc01200241d0016a200241cc016a10bb01024002400240024020022802dc012210450d0020022802d8012111024020022802e00141ffffffff0371450d00201010350b2011200d4b0d010b200e0d014100210e0c020b200e41016a210e0c010b200f200e6b2210200c4f0d02200241d0016a41186a22112001200e4105746b221041186a2212290000370300200241d0016a41106a2213201041106a2214290000370300200241d0016a41086a2215201041086a2216290000370300200220102900003703d001200141086a22172900002118200141106a2219290000211a200141186a221b290000211c201020012900003700002012201c3700002014201a37000020162018370000201b20112903003700002019201329030037000020172015290300370000200120022903d0013700000b200141206a2101200c200f41016a220f460d020c000b0b2010200c41f485cc001042000b200e417f6a200c4f0d00200b42ffffffff0f83200c200e6bad42208684210b0b200241c8006a41186a22012004290300370300200241c8006a41106a220e2006290300370300200241c8006a41086a220f2008290300370300200220022903a001370348200a450d01200520012903003703002007200e2903003703002009200f29030037030020022002290348370368200241e8006a10c8012118200241286a41186a2001290300221a370300200241286a41106a200e290300221c370300200241286a41086a200f290300221d37030020022002290348221e3703282005201a3703002007201c3703002009201d3703002002201e3703680240200041086a220f280200220e2003280200470d002000200e4101108b010b2000280200200e41386c6a22012002290368370308200120183703002001200a360228200141106a2009290300370300200141186a2007290300370300200141206a20052903003703002001412c6a200b370200200f200e41016a360200200241e8006a200241086a10c90520022d0098014102470d000b0b0240200228020c450d00200228020810350b0240200241186a280200450d00200228021410350b200241f0016a24000bab2104027f017e107f077e23004190026b2205240020054100360238200541003602300240024002400240200441086a280200200341086a28020022066aad42e0007e2207422088a70d002007a72208417f4c0d0041082109024002402008450d00200810332209450d010b20054100360248200520093602402005200841e0006e3602442003280204210a2003280200210b2005410036029801200542083703900120054190016a410020064105742209410575109b01200528029801210c02402006450d00200941606a410576210d200528029001200c41d8006c6a210e200541f0016a2108200541e8016a210f41002106200b21030340200541a0016a41186a2210200341186a2211290000370300200541a0016a41106a2212200341106a2213290000370300200541a0016a41086a2214200341086a2215290000370300200520032900003703a001200541e0006a41186a2011290000370300200541e0006a41106a2013290000370300200541e0006a41086a201529000037030020052003290000370360200541306a200541e0006a2006108403200541c0016a41086a4200370300200541c0016a41106a4200370300200541c0016a41186a4200370300200541c0016a41206a4200370300200f4200370300200841186a2010290300370000200841106a2012290300370000200841086a2014290300370000200820052903a001370000200542003703c001200e200541c0016a41d000109d08220e41d0006a41003a0000200e41d8006a210e200341206a2103200641016a2106200941606a22090d000b200c200d6a41016a210c0b2005200c360298010240200a41ffffff3f71450d00200b10350b200541d0006a41086a20054190016a41086a2802002203360200200520052903900137035020032002490d032004280204210620042802002103200541c0006a2005280248200441086a28020041386c220941386d10a4012005280240210e20052802482108200541d4016a200541d0006a3602002005200320096a3602cc01200520033602c801200520063602c401200520033602c0012005200541306a3602d001200541e0006a41086a20083602002005200541c8006a3602642005200e200841e0006c6a360260200541c0016a200541e0006a109a042001ad42307e2207422088a70d012007a72208417f4c0d01200528025821030240024020080d00410821040c010b200810332204450d010b20054100360218200520043602102005200841306e3602142001412c6c2208417f4c0d010240024020080d00410421160c010b200810332216450d010b4100210b2005410036022820052001360224200520163602202003200120032001491b2217450d024100210b200541c0016a41186a210a200541c0016a41106a210f200541c0016a41086a210d4100210203402005280250210602402003450d00200341d8006c21082006210303400240200341d0006a2d00000d0002400240200341206a2903002218200341286a29030022198450450d0042002107427f2118427f21190c010b427f21072005427f427f20182019109808200541086a2903002119200529030021180b2003201837030020032019370308200341106a2007370300200341186a20073703000b200341d8006a2103200841a87f6a22080d000b0b0240024020052802482203450d0020052802402209200341e0006c6a21120340024020092802382203450d00200341c8006c2106200928023041206a210303402005280258220e200328020022084d0d0402402005280250200841d8006c6a22082d00500d0020082903202207200841286a290300221884500d00200541c0016a2009290310200941186a2903002009290300200941086a29030020072018109b04200820082903002207427f2007427f20052903c80120052802c001410146220e1b22197c221820182007542210200841086a22112903002207427f200f290300200e1b221a7c2010ad7c221820075420182007511b220e1b2019201a845022101b37030020112007427f2018200e1b20101b3703000b200341c8006a2103200641b87f6a22060d000b0b200941e0006a22092012470d000b200528025021060b200241016a2102200528025841d8006c2103200641a87f6a210803402003450d05200341a87f6a2103200841d8006a2108200641d0006a2109200641d8006a220e210620092d00000d000b02402003450d00200841086a2903002107200841186a2903002118200841106a29030021192008290300211a4100210603400240200e20066a220941d0006a2d00000d00200941086a290300221b2007201a2007201920182009290300221c201b200941106a290300221d200941186a290300221e109c0441ff017141014622101b2107201c201a20101b211a201e201820101b2118201d201920101b21192009200820101b21080b2003200641d8006a2206470d000b2008450d050b200841013a0050024020052802482203450d0020052802402206200341e0006c6a21012008410c6a2114200841306a21150340200641e0006a210c024020062802382209450d0020062802302103200941c8006c210903400240024020142003460d00200341246a2015412010a0080d010b200641186a220e290300211a200841086a2210290300210720062903102119200829030021182008290310211b200341186a200841186a2211290300370300200341106a201b3703002003200742002007201a7d2018201954ad7d221b201820197d221c201856201b200756201b2007511b22121b2019201a845022131b370308200320184200201c20121b20131b37030020102903002107201129030021182008290300211920062008290310370320200641286a201837030020062019370310200e20073703000b200341c8006a2103200941b87f6a22090d000b0b200c2106200c2001470d000b0b200a200841c8006a290000370300200f200841c0006a290000370300200d200841386a290000370300200520082900303703c001200841286a2903002107200829032021180240200b2005280214470d00200541106a200b4101108801200528021021042005280218210b0b2004200b41306c6a220320052903c001370300200d2903002119200f290300211a200a290300211b20032018370320200341286a2007370300200341186a201b370300200341106a201a370300200341086a20193703002005200b41016a220b360218200220174f0d04200528025821030c010b0b2008200e41f4c4c8001042000b1045000b1044000b024020052802482203450d0020052802402214200341e0006c6a2102200b41306c210c200541ec006a220b41186a210a200b41106a210d200b41086a2117410021010340200b201429003c370000200a201441d4006a290000370000200d201441cc006a2900003700002017201441c4006a2900003700002005410036026820054204370360024020142802382203450d0020142802302212200341c8006c6a2115201441106a210f410021114104211303402012221041246a2106201041c8006a211241002109200c210820042103024003402008450d01024020062003460d0020032006412010a008210e200941016a2109200841506a2108200341306a2103200e0d010b0b418094ebdc0321080240200f2010109d040d004100210302402010290310201429032085201041186a290300201441286a29030085844200520d00200541c0016a428094ebdc0342002010290300201041086a290300200f290300200f41086a290300109b04427f20052903c80120052802c00141014622031b221842ffffffff0f56427f200541c0016a41106a29030020031b22074200522007501b0d012018a7220341ff93ebdc034b0d010b200321080b200541c0016a41186a22062010413c6a290000370300200541c0016a41106a2209201041346a290000370300200541c0016a41086a220e2010412c6a290000370300200520102900243703c001024020112005280264470d00200541e0006a20114101108d0120052802602113200528026821110b2013201141246c6a220320052903c001370200200e2903002107200929030021182006290300211920032008360220200341186a2019370200200341106a2018370200200341086a20073702002005201141016a22113602680b20122015470d000b024002402011450d0002400240201141246c22060d00410021030c010b201341206a2108410021030340417f200320082802006a220920092003491b2103200841246a21082006415c6a22060d000b0b02404100418094ebdc0320036b22032003418094ebdc034b1b221020116e2203418094ebdc032003418094ebdc03491b220e450d00201341206a210341002108034020112008460d032005417f20032802002206200e6a220920092006491b22063602c0012005418094ebdc033602c4012003200541c0016a2006418094ebdc034b4102746a280200360200200341246a21032011200841016a2208470d000b0b02402010200e20116c6b220e450d004100210303402005417f2013200320117041246c6a2208280220220641016a220920092006491b22063602c0012005418094ebdc033602c4012008200541c0016a2006418094ebdc034b4102746a280200360220200341016a2203200e490d000b0b200541c0016a41286a2208200541e0006a41286a280200360200200541c0016a41206a2206200541e0006a41206a290300370300200541c0016a41186a2209200541e0006a41186a290300370300200541c0016a41106a220e200541e0006a41106a290300370300200541c0016a41086a2210200541e0006a41086a290300370300200520052903603703c001024020012005280224470d00200541206a2001410110980120052802202116200528022821010b20162001412c6c6a220320052903c001370200200341286a2008280200360200200341206a2006290300370200200341186a2009290300370200200341106a200e290300370200200341086a20102903003702002005200141016a22013602280c020b20052802642203450d01200341246c450d01201310350c010b200820114184c5c8001042000b201441e0006a22142002470d000b0b200541c0016a41086a2203200541106a41086a280200360200200541d4016a200541206a41086a28020036020020002005290310370200200520052903203702cc01200041086a2003290300370200200041106a200541c0016a41106a290300370200024020052802542203450d00200341d8006c450d00200528025010350b024020052802482203450d00200341e0006c2108200528024041346a21030340024020032802002206450d00200641c8006c450d002003417c6a28020010350b200341e0006a2103200841a07f6a22080d000b0b024020052802442203450d00200341e0006c450d00200528024010350b200541306a10b1010c010b20004100360200024020052802542203450d00200341d8006c450d00200528025010350b024020052802482203450d00200341e0006c2108200528024041346a21030340024020032802002206450d00200641c8006c450d002003417c6a28020010350b200341e0006a2103200841a07f6a22080d000b0b024020052802442203450d00200341e0006c450d00200528024010350b200541306a10b101200428020021060240200441086a2802002203450d00200341386c21082006412c6a210303400240200328020041ffffff3f71450d002003417c6a28020010350b200341386a2103200841486a22080d000b0b200441046a2802002203450d00200341386c450d00200610350b20054190026a24000be80b08077f017e017f037e027f037e027f037e230041d0016b22042400200128020421052001280200210602400240024020012802082207450d00200741246c2108410021090340200620096a220741206a280200210a200441b0016a41186a200741186a290000370300200441b0016a41106a200741106a290000370300200441b0016a41086a200741086a290000370300200420072900003703b001200a0d022008200941246a2209470d000b0b4200210b4108210c4100210902402005450d00200541246c450d00200610354200210b0b4200210d410021070c010b200441306a20022003428094ebdc034200109808200441206a2004290330220e200441306a41086a290300220f4280ec94a37c427f108408200441106a200e200f200aad220d4200108408200441d0006a41086a220a200441b0016a41086a290300370300200441d0006a41106a2210200441b0016a41106a290300370300200441d0006a41186a2211200441b0016a41186a290300370300200420042903b001220b3703702004200b370350200d200429032020027c22127e220d428094ebdc0380210b20042903102113200441106a41086a29030021140240024041301033220c450d00200c2013200ba7417f200d428080808080c0b2cd3b541b200d200b4280ec94a37c7e7c4280cab5ee01566aad7c220b370320200c2004290350370300200c41286a2014200b201354ad7c220d370300200c41186a2011290300370300200c41106a2010290300370300200c41086a200a29030037030020044281808080103702442004200c36024002402008415c6a2009470d00410121090c020b200741c4006a210a200820096b41b87f6a2108410121090340200a2802002115200441b0016a41186a2210200a41606a220741186a290000370300200441b0016a41106a2211200741106a290000370300200441b0016a41086a2216200741086a290000370300200420072900003703b0010240024020150d002008450d040c010b2004200e200f2015ad22134200108408200441f0006a41086a20162903002214370300200441f0006a41106a20112903002217370300200441f0006a41186a20102903002218370300200420042903b0012219370370201020183703002011201737030020162014370300200420193703b001200b20042903002214201320127e2213428094ebdc03802217a7417f2013428080808080c0b2cd3b541b201320174280ec94a37c7e7c4280cab5ee01566aad7c22137c2217200b542207200d200441086a2903002013201454ad7c22147c2007ad7c220b200d54200b200d511b2107024020092004280244470d00200441c0006a200941011088012004280240210c0b427f200b20071b210d427f201720071b210b200c200941306c6a220720042903b00137030020162903002117201129030021182010290300211920072013370320200741286a2014370300200741186a2019370300200741106a2018370300200741086a20173703002004200941016a22093602482008450d030b2008415c6a2108200a41246a210a0c000b0b1045000b02402005450d00200541246c450d00200610350b200428024421070b024002402002200b7d22142002562003200d7d2002200b54ad7d221320035620132003511b4101470d00200b20027d2213200b56200d20037d200b200254ad7d220b200d56200b200d511b0d012009450d01200941306c200c6a41706a220a4200200a290300220d20137d22142014200d56200a41086a220a2903002214200b7d200d201354ad7d220d201456200d2014511b22081b370300200a4200200d20081b3703000c010b2009450d00200941306c200c6a41706a220a427f200a290300220d20147c220b200b200d542208200a41086a220a290300220d20137c2008ad7c220b200d54200b200d511b22081b370300200a427f200b20081b3703000b20002009360208200020073602042000200c3602002000200129020c37020c200041146a200141146a2902003702002000411c6a2001411c6a290200370200200041246a200141246a290200370200200441d0016a24000ba028030f7f047e1b7f230022052106200541e00b6b41607122072400200741003602182007410036021002400240024002402002450d00200120024105746a2108200741e0056a41027221094100210a034020074200370348200742003703402007410036025820074208370350200741a8026a41186a220b200141186a290000370300200741a8026a41106a220c200141106a290000370300200741a8026a41086a220d200141086a290000370300200720012900003703a80202400240200a450d002007280214210e0c010b200741e0056a410041e002109f081a200741f8026a410041e002109f081a41c8051033220a450d054100210e200a41003b0106200a4100360200200a41086a200741e0056a41e002109d081a200a41e8026a200741f8026a41e002109d081a200741003602142007200a3602100b200141206a21010240024002400240024002400340200a41066a210f200a2f01062210410574210241002111200a41086a22122105024003402002450d01200741a8026a2005412010a0082213450d03200241606a2102201141016a2111200541206a21052013417f4a0d000b2011417f6a21100b0240200e450d00200e417f6a210e200a20104102746a41c8056a280200210a0c010b0b200741f0006a41186a2202200b290300370300200741f0006a41106a200c2903002214370300200741f0006a41086a200d2903002215370300200720072903a80222163703702007200728021841016a360218200c2014370300200d2015370300200b2002290300370300200720163703a80220072903582114200729035021152007290348211620072903402117200f2f01002205410b490d01200741e0056a410041e002109f081a200741f8026a410041e002109f081a41c80510332218450d0a201841003b010620184100360200201841086a200741e0056a41e002109d082105201841e8026a200741f8026a41e002109d082111200741e0056a41086a2219200a41b0046a290300370300200741e0056a41106a221a200a41b8046a290300370300200741e0056a41186a221b200a41c0046a2903003703002007200a41db016a2900003703e0022007200a41e0016a2900003700e5022007200a41a8046a2903003703e0052007200a41c8016a2f00003b01f4022007200a41ca016a2d00003a00f602200a41cb016a280000211c200a41cf016a280000211d200a41d3016a280000211e200a41d7016a280000211f2005200a41e8016a200a2f010641796a22024105742213109d0821052011200a41c8046a2013109d082111200a41063b0106201820023b0106200720072f01f4023b01dc02200720072d00f6023a00de02200720072903e0023703c802200720072900e5023700cd02200741f8026a41186a2220201b290300370300200741f8026a41106a2221201a290300370300200741f8026a41086a22222019290300370300200720072903e0053703f8020240024020104107490d002005201041057441c07e6a220e6a2005201041796a221341057422106a2205200241ffff037120136b410574109e081a200541186a200b290300370000200541106a200c290300370000200541086a200d290300370000200520072903a8023700002011200e6a201120106a2202201841066a220f2f010020136b410574109e081a200241186a20143703002002201537031020022016370308200220173703000c010b20122010410574220541206a22116a201220056a2202200f2f010020106b410574109e081a200241186a200b290300370000200241106a200c290300370000200241086a200d290300370000200220072903a802370000200a41e8026a220220116a200220056a2202200f2f010020106b410574109e081a200241186a20143703002002201537031020022016370308200220173703000b200f200f2f010041016a3b010020074190026a41026a220220072d00de023a0000200741d8016a41086a22232022290300370300200741d8016a41106a22242021290300370300200741d8016a41186a22252020290300370300200720072f01dc023b019002200720072903c8023703c801200720072900cd023700cd01200720072903f8023703d801200741a4016a41026a222620022d00003a0000200720072f0190023b01a401200720072900cd0137009501200720072903c80137039001200741a8016a41186a22272025290300370300200741a8016a41106a22282024290300370300200741a8016a41086a22292023290300370300200720072903d8013703a8010240200a280200220e0d004100212a200741106a21020c040b200a2f0104210f4100212a0340200741a4026a41026a222b20262d00003a0000200720072f01a4013b01a402200720072903900137039002200720072900950137009502200b2027290300370300200c2028290300370300200d2029290300370300200720072903a8013703a80241000d03200f41ffff0371210a024002400240200e2f01062202410b490d002009410041f205109f081a41f80510332213450d0e20134100360200201341046a200741e0056a41f405109d081a2007200e2f00c8013b01f4022007200e41ca016a2d00003a00f6022007200e41db016a2900003703e0022007200e41e0016a2900003700e502200e41cb016a280000212c200e41cf016a280000212d200e41d3016a280000212e200e41d7016a280000212f201b200e41c0046a290300370300201a200e41b8046a2903003703002019200e41b0046a2903003703002007200e2903a8043703e005201341086a200e41e8016a200e2f0106220241796a22054105742211109d082130201341e8026a200e41c8046a2011109d082131201341c8056a200e41e4056a2002417a6a2210410274109d082112200e41063b0106201320053b010602402010450d00410021022012210503402005280200221120023b010420112013360200200541046a21052010200241016a2202470d000b0b2020201b2903003703002021201a29030037030020222019290300370300200720072903e0053703f802200720072f01f4023b01dc02200720072d00f6023a00de02200720072903e0023703c802200720072900e5023700cd02200741dc056a41026a221020072d00de023a0000200720072f01dc023b01dc05200720072903c8023703c801200720072900cd023700cd01201b2020290300370300201a202129030037030020192022290300370300200720072903f8023703e005200f41ffff037122054107490d012030200a417a6a2211410574220f6a2030200a41796a220241057422326a220520132f010620026b410574109e081a200541186a2007290095023700002005201f36000f2005201e36000b2005201d3600072005201c360003200541026a202b2d00003a0000200520072f01a4023b000020052007290390023700132031200f6a203120326a220520132f0106220f20026b410574109e081a200541186a200b290300370300200541106a200c290300370300200541086a200d290300370300200520072903a8023703002013200f41016a22053b0106200a410274221c20126a416c6a201220114102746a220f200541ffff0371220a20116b410274109e081a200f2018360200200a2011490d022013201c6a41b0056a2105034020052802002211200241016a22023b010420112013360200200541046a21052002200a490d000c030b0b200e41086a2205200a41016a221141057422136a2005200a41057422106a22052002200a6b410574220f109e081a2005201f36000f2005201e36000b2005201d3600072005201c360003200541026a202b2d00003a0000200520072f01a4023b00002005200729039002370013200541186a200729009502370000200e41e8026a220520136a200520106a2205200f109e081a200541186a200b290300370300200541106a200c290300370300200541086a200d290300370300200520072903a802370300200e200241016a22023b0106200a410274200e41c8056a22056a41086a200520114102746a2205200241ffff037120116b410274109e081a20052018360200200a200e2f010622024f0d07201820113b01042018200e360200201120024f0d072002417f6a2113200e2011417f6a22024102746a41d0056a2105034020052802002211200241026a3b01042011200e360200200541046a21052013200241016a2202470d000c080b0b200e41086a2202200a41016a2211410574220f6a2002200a41057422126a2202200e2f01062230200a6b4105742231109e081a2002201f36000f2002201e36000b2002201d3600072002201c360003200241026a202b2d00003a0000200220072f01a4023b00002002200729039002370013200241186a200729009502370000200e41e8026a2202200f6a200220126a22022031109e081a200241186a200b290300370300200241106a200c290300370300200241086a200d290300370300200220072903a802370300200e203041016a22023b0106200a4102742212200e41c8056a220f6a41086a200f20114102746a220f200241ffff037120116b410274109e081a200f20183602002005200e2f010622114f0d00200e20126a41cc056a2102034020022802002205200a41016a220a3b01042005200e360200200241046a21022011200a470d000b0b202a41016a212a2007418c026a41026a220220102d00003a0000202320192903003703002024201a2903003703002025201b290300370300200720072f01dc053b018c02200720072903c8013703f801200720072900cd013700fd01200720072903e0053703d801202620022d00003a0000200720072f018c023b01a401200720072900fd0137009501200720072903f80137039001202720252903003703002028202429030037030020292023290300370300200720072903d8013703a8010240200e28020022020d00200741106a2102202c211c202f211f202e211e202d211d201321180c050b200e2f0104210f202c211c202f211f202e211e202d211d2002210e201321180c000b0b200a20114105746a22024180036a2205290300211520052007290358370300200241f8026a2205290300211420052007290350370300200241f0026a2205290300211620052007290348370300200241e8026a2202290300211720022007290340370300200720153703f805200720143703f005200720163703e805200720173703e0052014a72202450d0420072802f4052205450d04200541306c450d04200210350c040b20122010410574221141206a22136a201220116a2202200520106b410574109e081a200241186a200b290300370000200241106a200c290300370000200241086a200d290300370000200220072903a802370000200a41e8026a220220136a200220116a2202200a2f010620106b410574109e081a200241186a2014370300200220153703102002201637030820022017370300200a200a2f010641016a3b0106200741003602f0050c030b41d684cc00413541c086cc00103f000b2009410041f205109f081a41f80510332205450d0620054100360200200541046a200741e0056a41f405109d081a2005200228020022113602c8052002200536020020022002280204221341016a360204201141003b010420112005360200200741a8026a41026a220a20262d00003a0000200720072f01a4013b01a80220072007290390013703f80220072007290095013700fd02201b2027290300370300201a202829030037030020192029290300370300200720072903a8013703e0052013202a470d0520052f01062211410a4b0d04200520114105746a2202410a6a200a2d00003a0000200241086a20072f01a8023b0000200241176a201f360000200241136a201e3600002002410f6a201d3600002002410b6a201c3600002002411b6a20072903f802370000200241206a20072900fd02370000200241e8026a20072903e005370300200241f0026a2019290300370300200241f8026a201a29030037030020024180036a201b2903003703002005201141016a22024102746a41c8056a2018360200200520023b0106201820023b0104201820053602000b200741003602f0050b20012008460d012007280210210a0c000b0b0240024020040d004100210b0c010b20032004412c6c6a210d4100210b034020032202412c6a21030240200228020841306c2205450d002002280200220a20056a210c2002410c6a21120340200a41306a210f0240024002402007280210220e450d00200728021421010340200e41086a2105200e2f01062210410574210241002111024003402002450d01200a2005412010a0082213450d04200241606a2102201141016a2111200541206a21052013417f4a0d000b2011417f6a21100b2001450d012001417f6a2101200e20104102746a41c8056a280200210e0c000b0b417f200b41016a22022002200b491b210b0c010b200e20114105746a220241e8026a2205427f20052903002214200a2903207c221520152014542205200241f0026a22112903002214200a41286a22132903007c2005ad7c221520145420152014511b22051b3703002011427f201520051b37030020122900002114200741e0056a41086a220e201241086a290000370300200741e0056a41106a2201201241106a290000370300200741e0056a41186a2210201241186a290000370300200720143703e00520132903002114200a2903202115200241f8026a2113024020024180036a22052802002211200241fc026a280200470d00201320114101108801200528020021110b2013280200201141306c6a220220072903e00537030020022015370320200241186a2010290300370300200241106a2001290300370300200241086a200e290300370300200241286a20143703002005200528020041016a3602000b200f210a200f200c470d000b0b2003200d470d000b0b200020072903103702002000200b36020c200041086a200741106a41086a280200360200200624000f0b41af84cc00412741c086cc00103f000b41ff83cc00413041c086cc00103f000b103c000be91105077f017e047f017e097f230041a0026b2202240002400240024002400240024002400240024020012802202203450d0020012003417f6a220436022020012802042203450d02200128020821052001280200210602402001410c6a280200220720032f0106490d00034002400240200328020022080d002005ad2109410021080c010b200641016a210620033301044220862005ad8421090b200310352009a72105200821032009422088a7220720082f01064f0d000b200821030b20024190016a41186a220a200320074105746a220841206a29000037030020024190016a41106a220b200841186a29000037030020024190016a41086a220c200841106a2900003703002002200841086a29000037039001200241f0016a41086a220d20084184036a2802003602002002200841fc026a2902003703f001200741016a2107200841f0026a2903002109200841e8026a290300210e200841f8026a280200210f02402006450d00200320074102746a41c8056a2802002103410021072006417f6a2208450d00034020032802c80521032008417f6a22080d000b0b200241186a41186a200a290300370300200241186a41106a200b290300370300200241186a41086a200c29030037030020024190026a41086a200d2802003602002002200229039001370318200220022903f001370390022001200736020c200120053602082001200336020420014100360200200f0d010b20024180016a41003602000c060b200241b8016a2009370300200241c0016a200f360200200241c4016a20022903900237020020024190016a41186a200241186a41186a29030037030020024190016a41106a200241186a41106a29030037030020024190016a41086a200241186a41086a290300370300200241cc016a20024190026a41086a2802003602002002200e3703b0012002200229031837039001200241c0006a200141246a20024190016a10860220024180016a280200450d0520024190016a200241c0006a41d000109d081a417f200441016a220320032004491bad42d0007e2209422088a70d012009a72203417f4c0d01200310332210450d02201020024190016a41d000109d082108200241013602102002200341d0006e36020c20022008360208200241186a41206a200141206a2902002209370300200241186a41186a200141186a290200370300200241186a41106a200141106a290200370300200241186a41086a200141086a29020037030020022001290200370318024002402009a72203450d0020022003417f6a220f360238200228021c2203450d0520022802202105200228021821070240200241246a280200220620032f0106490d00034002400240200328020022080d002005ad2109410021080c010b200741016a210720033301044220862005ad8421090b200310352009a72105200821032009422088a7220620082f01064f0d000b200821030b20024190016a41186a2201200320064105746a220841206a29000037030020024190016a41106a220b200841186a29000037030020024190016a41086a220c200841106a2900003703002002200841086a2900003703900120024190026a41086a220d20084184036a2802003602002002200841fc026a29020037039002200641016a2106200841f0026a2903002109200841e8026a290300210e200841f8026a280200210a02402007450d00200320064102746a41c8056a2802002103410021062007417f6a2208450d00034020032802c80521032008417f6a22080d000b0b200241f0016a41186a2001290300370300200241f0016a41106a200b290300370300200241f0016a41086a200c290300370300200241e0016a41086a200d28020036020020022002290390013703f00120022002290390023703e00120022006360224200220053602202002200336021c20024100360218200a450d002002413c6a2111200241c4016a2104200241b8016a2112410121010340200420022903e0013702002012200937030020024190016a41186a220b200241f0016a41186a221329030037030020024190016a41106a220c200241f0016a41106a221429030037030020024190016a41086a220d200241f0016a41086a2215290300370300200441086a200241e0016a41086a22162802003602002002200e3703b001200220022903f001370390012002200a3602c001200241c0006a201120024190016a108602200228028001450d0220024190016a200241c0006a41d000109d081a02402001200228020c470d00200241086a2001417f200f41016a22082008200f491b10a301200228020821100b2010200141d0006c6a20024190016a41d000109d081a2002200141016a2201360210200f450d012002200f417f6a220f3602382003450d07410021070240200620032f0106490d00034002400240200328020022080d002005ad2109410021080c010b200741016a210720033301044220862005ad8421090b200310352009a72105200821032009422088a7220620082f01064f0d000b200821030b200b200320064105746a220841206a290000370300200c200841186a290000370300200d200841106a2900003703002002200841086a29000037039001200841f8026a280200210a20024190026a41086a221720084184036a2802003602002002200841fc026a29020037039002200641016a2106200841f0026a2903002109200841e8026a290300210e02402007450d00200320064102746a41c8056a2802002103410021062007417f6a2208450d00034020032802c80521032008417f6a22080d000b0b2013200b2903003703002014200c2903003703002015200d2903003703002016201728020036020020022002290390013703f00120022002290390023703e00120022006360224200220053602202002200336021c20024100360218200a0d000b0b20024100360280010b200241186a109e02200041086a200241086a41086a280200360200200020022903083702000c060b41958dcc00412b41c08dcc00103f000b1044000b1045000b41958dcc00412b41c08dcc00103f000b41958dcc00412b41c08dcc00103f000b20004100360208200042083702002001109e020b200241a0026a24000ba20703027f017e067f230041e0006b2203240041f7edcb00ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541e4b6c000ad4280808080b00184100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a22012003413c6a3602002003200341c8006a41086a22063602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b0240024002400240412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2202417f4c0d01200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d012002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21010c010b2007415f4b0d03200b41017422012006200120064b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2007109d081a02400240200120066b2008490d002001210b0c010b20022006490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420066a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000ba50403017f027e027f230041e0006b220224000240024020002802002200290300220342c000544100200041086a29030022045022051b0d0002400240024020034280800154410020051b0d00200342808080800454410020051b0d01411020047920037942c0007c20044200521ba741037622056b4104490d022002413320054102746b3a00482001200241c8006a41011078200029030021032002200041086a290300220437030820022003370300200541706a21000340200220033c00482001200241c8006a410110782003420888200442388684210320044208882104200041016a22052000492106200521002006450d000b20022003370300200220043703082003200484500d04200241286a41146a410a360200200241346a410b360200200241106a41146a410336020020022002360240200241d0caca00360244200241c8006a41146a410036020020024203370214200241a0b3cc003602102002410b36022c200241b0b4cc003602582002420137024c20024188caca003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41b0b4cc00104c000b20022003a74102744101723b01482001200241c8006a410210780c030b20022003a74102744102723602482001200241c8006a410410780c020b41c6c9ca00413641c086cc00103f000b20022003a74102743a00482001200241c8006a410110780b200241e0006a24000bf12c080a7f017e017f047e147f017e017f017e230041d0026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d00200020011085072003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00410241012000200a41306c6a220d290300220e200d41506a220f290300221056200d41086a2903002211200f41086a29030022125620112012511b220f1b200f200d41306a29030022132010200e200f1b221056200d41386a290300220e20122011200f1b221156200e2011511b22141b2013201020141b2000200a200a417f6a2215200f1b221641306c6a220d29030056200e201120141b2211200d41086a29030022125620112012511b22176a2000200c41306c6a220d290300220e200d41506a2218290300221056200d41086a2903002211201841086a29030022125620112012511b22186a2000200c410172221941306c6a220d29030022132010200e20181b221056200d41086a290300220e2012201120181b221156200e2011511b221a6a20132010201a1b2000200c200c417f6a221b20181b221c41306c6a220d29030056200e2011201a1b2211200d41086a29030022125620112012511b221d6a2000200b41306c6a220d290300220e200d41506a221e290300221056200d41086a2903002211201e41086a29030022125620112012511b221e6a200d41306a29030022132010200e201e1b221056200d41386a290300220e20122011201e1b221156200e2011511b221f6a20132010201f1b2000200b200b417f6a2220201e1b222141306c6a220d29030056200e2011201f1b2211200d41086a29030022125620112012511b22066a210d2021200b41016a2020200b201e1b201f1b20061b210b201c2019201b200c20181b201a1b201d1b210c2016200a41016a2015200a200f1b20141b20171b210a0b200d2000200c41306c6a220f290300220e2000200a41306c6a2218290300221056200f41086a2903002211201841086a29030022125620112012511b220f6a2000200b41306c6a220d29030022132010200e200f1b221056200d41086a290300220e20122011200f1b221156200e2011511b220d6a211820132010200d1b2000200c200a200f1b222141306c6a221e29030058200e2011200d1b2211201e41086a29030022125820112012511b450d01200b200a200c200f1b200d1b21210c020b200020011086070c0f0b201841016a2218410c490d0002402001410176220b450d002000200141306c6a41506a210a2000210c0340200441a0026a41286a220f200c41286a220d290300370300200441a0026a41206a2218200c41206a221e290300370300200441a0026a41186a2214200c41186a221a290300370300200441a0026a41106a221f200c41106a2215290300370300200441a0026a41086a2216200c41086a22172903003703002004200c2903003703a002200a41086a22192903002111200a41106a221b2903002112200a41186a221c290300210e200a41206a221d2903002110200a41286a22202903002113200c200a290300370300200d2013370300201e2010370300201a200e37030020152012370300201720113703002020200f290300370300201d2018290300370300201c2014290300370300201b201f29030037030020192016290300370300200a20042903a002370300200c41306a210c200a41506a210a200b417f6a220b0d000b0b20012021417f736a21214101210a0c010b201845210a0b0240200a452009724101710d00200020011087070d0d0b2002450d02202120014f0d01024020022903002000202141306c6a220a29030056200241086a2903002211200a41086a220c29030022125620112012511b450d0020002108200121070c040b200441a0026a41286a221a200041286a2218290300370300200441a0026a41206a221f200041206a221e290300370300200441a0026a41186a2215200041186a2214290300370300200441a0026a41106a2216200041106a220b290300370300200441a0026a41086a2217200041086a220f290300370300200420002903003703a002200c2903002111200a41106a220d2903002112200a41186a2219290300210e200a41206a221b2903002110200a41286a221c29030021132000200a29030037030020182013370300201e20103703002014200e370300200b2012370300200f2011370300201c201a290300370300201b201f29030037030020192015290300370300200d2016290300370300200c2017290300370300200a20042903a002370300200f29030021112000290300210e200441186a221c2018290300370300200441106a221d201e290300370300200441086a222020142903003703002004200b290300370300200041506a2119200041306a211b4100210c2001210b03400240200c200b417f6a220f4f0d00201b200c41306c6a210a0340200e200a290300582011200a41086a29030022125820112012511b450d01200a41306a210a200f200c41016a220c470d000b200f210c0b2019200b41306c6a210a02400340200c200b417f6a220b4f0d01200a2903002112200a41086a210f200a41506a220d210a200e2012562011200f29030022125620112012511b0d000b201a201b200c41306c6a220a41286a220f290300370300201f200a41206a22212903003703002015200a41186a22062903003703002016200a41106a22222903003703002017200a41086a22232903003703002004200a2903003703a002200d41386a22242903002112200d41c0006a22252903002110200d41c8006a22262903002113200d41d0006a22272903002128200d41d8006a2229290300212a200a200d41306a220d290300370300200f202a370300202120283703002006201337030020222010370300202320123703002029201a2903003703002027201f290300370300202620152903003703002025201629030037030020242017290300370300200d20042903a002370300200c41016a210c0c010b0b2000200e370300200020113703082000200429030037031020142020290300370300201e201d2903003703002018201c29030037030002402001200c41016a220a490d002000200a41306c6a21002001200a6b220141154f0d010c0c0b0b200a200141e485cc001059000b2021200141d086cc001042000b2007450d010b202120074f0d01200441a0026a41286a2217200841286a2222290300370300200441a0026a41206a2219200841206a2223290300370300200441a0026a41186a221b200841186a2224290300370300200441a0026a41106a221c200841106a2225290300370300200441a0026a41086a221d200841086a2226290300370300200420082903003703a0022008202141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a0023703002026290300211120082903002112200441186a22272022290300370300200441106a22292023290300370300200441086a2205202429030037030020042025290300370300200841306a2101410021212007417f6a220f450d022001210a0340200a290300201256200a41086a290300220e201156200e2011511b450d03200a41306a210a200f202141016a2221470d000b200f21210c020b4100410041f485cc001042000b20212007418486cc001042000b2008200741306c6a210a200f210b02400340200a2100200b220c20214d22060d01200c417f6a210b200041506a220a290300201258200a41086a290300220e201158200e2011511b0d000b0b0240200c2021490d00200f200c490d0241800121154100210d4100211a4100210f4100211441800121162001202141306c6a220921010340200020016b220a41306e210c0240200a41afe0004b22200d00200c41807f6a200c201a200d492014200f49220b7222181b210a02402018450d002016200a200b1b2116200a2015200b1b21150c010b200a200a41017622166b21150b02402014200f470d00024020160d00200441206a220f21140c010b4100210c200441206a2214210f2001210a0340200f200c3a0000200f410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b41027441c4cfca006a2802006a210f200a41306a210a2016200c41016a220c470d000b0b0240201a200d470d00024020150d00200441a0016a220d211a0c010b200041506a210a4100210c200441a0016a221a210d0340200d200c3a0000200d410041014102200a2903002210201285200a41086a290300220e20118584501b2010201254200e201154200e2011511b1b41027441d0cfca006a2802006a210d200a41506a210a2015200c41016a220c470d000b0b0240200d201a6b220a200f20146b220c200c200a4b1b221f450d002017200120142d000041306c6a220a41286a2903003703002019200a41206a290300370300201b200a41186a290300370300201c200a41106a290300370300201d200a41086a2903003703002004200a2903003703a002200120142d000041306c6a220a2000201a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703000240201f4101460d004100210b03402000201a200b6a22182d0000417f7341306c6a220a20012014200b6a41016a221e2d000041306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a2903003703002001201e2d000041306c6a220a2000201841016a2d0000417f7341306c6a220c290300370300200a41286a200c41286a290300370300200a41206a200c41206a290300370300200a41186a200c41186a290300370300200a41106a200c41106a290300370300200a41086a200c41086a290300370300200b41026a210a200b41016a220c210b200a201f490d000b201a200c6a211a2014200c6a21140b2000201a2d0000417f7341306c6a220a20042903a002370300200a41286a2017290300370300200a41206a2019290300370300200a41186a201b290300370300200a41106a201c290300370300200a41086a201d290300370300201a41016a211a201441016a21140b2001201641306c6a20012014200f461b21012000410020156b41306c6a2000201a200d461b210020200d000b024002402014200f4f0d002000210a034020172001200f417f6a220f2d000041306c6a220c41286a220b2903003703002019200c41206a220d290300370300201b200c41186a2200290300370300201c200c41106a2218290300370300201d200c41086a221e2903003703002004200c2903003703a002200a41506a220a41086a221a290300210e200a41106a221f2903002110200a41186a22152903002113200a41206a22162903002128200a41286a2220290300212a200c200a290300370300200b202a370300200d20283703002000201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c290300370300201a201d290300370300200a20042903a0023703002014200f490d000c020b0b2001210a201a200d4f0d000340200d417f6a220d2d0000210c2017200a41286a220b2903003703002019200a41206a220f290300370300201b200a41186a2201290300370300201c200a41106a2218290300370300201d200a41086a221e2903003703002004200a2903003703a0022000200c417f7341306c6a220c41086a2214290300210e200c41106a221f2903002110200c41186a22152903002113200c41206a22162903002128200c41286a2220290300212a200a200c290300370300200b202a370300200f20283703002001201337030020182010370300201e200e37030020202017290300370300201620192903003703002015201b290300370300201f201c2903003703002014201d290300370300200c20042903a002370300200a41306a210a201a200d490d000b0b2008201137030820082012370300200820042903003703102024200529030037030020232029290300370300202220272903003703002007200a20096b41306e20216a22014d0d032017202229030037030020192023290300370300201b2024290300370300201c2025290300370300201d2026290300370300200420082903003703a0022008200141306c6a220a41086a220c2903002111200a41106a220b2903002112200a41186a220f290300210e200a41206a220d2903002110200a41286a220029030021132008200a29030037030020222013370300202320103703002024200e370300202520123703002026201137030020002017290300370300200d2019290300370300200f201b290300370300200b201c290300370300200c201d290300370300200a20042903a002370300200720016b220c450d04200c20012001200c4b1b210b2007410376210f200a41306a2100024002402001200c417f6a220c490d002000200c200a200310d001200821000c010b200820012002200310d001200a2102200c21010b200b200f4f2105200141154f0d010c050b0b2021200c419486cc001059000b200c200f419486cc001058000b20012007418486cc001042000b41a486cc00411c41c086cc00103f000b20014102490d00200041a07f6a210d410021184101210c0340200c41016a210f02402000200c41306c6a220b290300220e200b41506a220a29030058200b41086a221e2903002211200a41086a221429030022125820112012511b0d00200441186a221a200b41286a221f290300370300200441106a2215200b41206a2216290300370300200441086a2217200b41186a22192903003703002004200b290310370300200b200a290300370300201e2014290300370300200b41106a200a41106a2903003703002019200a41186a2903003703002016200a41206a290300370300201f200a41286a2903003703002000200c417f6a221e41306c6a211402400240201e0d004100211e0c010b2018210c200d210a200e200b41a07f6a220b290300582011200b41086a29030022125820112012511b0d00024002400340200a4188016a200a41d8006a290300370300200a4180016a200a41d0006a290300370300200a41f8006a200a41c8006a290300370300200a41f0006a200a41c0006a290300370300200a41e8006a200a41386a290300370300200a41e0006a200a41306a290300370300200c4101460d01200a2903002112200a41086a210b200c417f6a210c200a41506a210a200e2012562011200b29030022125620112012511b0d000c020b0b4100210c0b2000200c41306c6a2114200c211e0b2014200e370300201420113703082000201e41306c6a220a41286a201a290300370300200a41206a2015290300370300200a41186a2017290300370300200a20042903003703100b201841016a2118200d41306a210d200f210c200f2001470d000b0b200441d0026a24000ba20703027f017e067f230041e0006b2203240041f7edcb00ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541d2b6c000ad4280808080a00284100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a22012003413c6a3602002003200341c8006a41086a22063602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b0240024002400240412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2202417f4c0d01200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d012002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21010c010b2007415f4b0d03200b41017422012006200120064b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2007109d081a02400240200120066b2008490d002001210b0c010b20022006490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420066a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000bac0201037f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00410021020c010b200328021421042003200341186a280200360224200320013602202003200341206a10c4010240024020032802000d0020032802042105410121020c010b4100210220034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b0b2004450d00200110350b2000200536020420002002360200200341e0006a24000ba20703027f017e067f230041e0006b2203240041f7edcb00ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541c0b6c000ad4280808080a00284100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a22012003413c6a3602002003200341c8006a41086a22063602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b0240024002400240412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2202417f4c0d01200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d012002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21010c010b2007415f4b0d03200b41017422012006200120064b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2007109d081a02400240200120066b2008490d002001210b0c010b20022006490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420066a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000bf52a07047f017e047f027e017f027e057f230041c0026b22032400200341c8016a41186a4200370300200341c8016a41106a22044200370300200341c8016a41086a22054200370300200342003703c80141d1c4c700ad4280808080e00084100122062900002107200341e8016a41086a2208200641086a290000370300200320073703e8012006103520052008290300370300200320032903e8013703c80141e7c4c700ad4280808080e00084100122062900002107200341a0026a41086a2208200641086a290000370300200320073703a00220061035200420032903a0022207370300200341a8016a41086a2005290300370300200341a8016a41106a2007370300200341a8016a41186a2008290300370300200320032903c8013703a801200341086a200341a8016a412010c001024002400240024002402003280208450d00200328020c2209450d00200341c8016a41186a220a4200370300200341c8016a41106a220b4200370300200341c8016a41086a22054200370300200342003703c80141d1c4c700ad4280808080e00084100122062900002107200341e8016a41086a2208200641086a290000370300200320073703e8012006103520052008290300370300200320032903e8013703c8014188f2c700ad4280808080e00184100122062900002107200341a0026a41086a2208200641086a290000370300200320073703a00220061035200420032903a002370000200441086a2008290300370000200341a8016a41086a2005290300370300200341a8016a41106a200b290300370300200341a8016a41186a200a290300370300200320032903c8013703a8012003412036028c022003200341a8016a36028802200341a0026a200341a8016aad220c4280808080800484220d100510c2010240024020032802a00222060d00410321050c010b20032802a402210b02400240024020082802002208450d0020062d0000220e41024b0d004101210502400240200e0e03000401000b2008417f6a4104490d012006280001210a410021050c030b410221050c010b200341003602d001200342013703c801200341093602ec01200320034188026a3602e8012003200341c8016a3602f801200341246a410136020020034201370214200341c888c2003602102003200341e8016a360220200341f8016a41e88ac500200341106a10431a20033502d00142208620033502c801841006024020032802cc01450d0020032802c80110350b410321050b0b200b450d00200610350b200341003602d001200342013703c801200341c8016a41002001108a014102200520054103461b210b20032802d001210602402001450d0020032802c80120064105746a210520062001410574220841606a4105766a210e20002106034020052006290000370000200541086a200641086a290000370000200541106a200641106a290000370000200541186a200641186a290000370000200541206a2105200641206a2106200841606a22080d000b200e41016a21060b200341a8016a41086a2208200636020020034194016a200a360200200320032903c8013703a8012003200b36029001200341106a2002418001109d081a200341a0016a2008280200360200200320032903a80137039801200341c8016a41186a22064200370300200341c8016a41106a22024200370300200341c8016a41086a22054200370300200342003703c80141d1c4c700ad4280808080e00084220f1001220a2900002107200341e8016a41086a220b200a41086a290000370300200320073703e801200a10352005200b290300370300200320032903e8013703c8014198f0c700ad4280808080a0018422101001220a2900002107200341a0026a41086a220e200a41086a290000370300200320073703a002200a1035200420032903a002370000200441086a220a200e29030037000020082005290300370300200341a8016a41106a22112002290300370300200341a8016a41186a22122006290300370300200320032903c8013703a8012003200341a8016a412010c00102402003280204410020032802001b221341016a221420134f0d00200341106a21060c040b200642003703002002420037030020054200370300200342003703c801200f100122152900002107200b201541086a290000370300200320073703e801201510352005200b290300370300200320032903e8013703c80120101001220b2900002107200e200b41086a290000370300200320073703a002200b1035200420032903a002370000200a200e290300370000200820052903003703002011200229030037030020122006290300370300200320032903c8013703a801200320143602c801200d200341c8016aad4280808080c000841002200341003602d001200342013703c801024002400240200328029001220541024b0d0002400240024020050e03000102000b410110332205450d07200341013602cc01200320053602c801200541003a0000200341013602d00120032802940121020240024020032802cc012208417f6a4104490d004101210520032802c80121060c010b41012105200841017422064105200641054b1b220a4100480d0420032802c801210602402008200a460d0020062008200a10372206450d0920032802d00121050b2003200a3602cc01200320063602c8010b200620056a20023600002003200541046a3602d0010c020b410110332205450d06200341013602cc01200320053602c801200541013a0000200341013602d0010c010b410110332205450d05200341013602cc01200320053602c801200541023a0000200341013602d0010b200341106a200341c8016a1082062003280298012106200341a0016a2802002205200341c8016a107702402005450d002005410574210b0340412010332205450d0320052006290000370000200541186a220e200641186a290000370000200541106a2211200641106a290000370000200541086a2212200641086a2900003700000240024020032802cc01220a20032802d00122086b4120490d0020032802c80121020c010b200841206a22022008490d03200a41017422142002201420024b1b22144100480d0302400240200a0d00024020140d00410121020c020b2014103322020d010c090b20032802c8012102200a2014460d002002200a201410372202450d0820032802d00121080b200320143602cc01200320023602c8010b200641206a2106200220086a22022005290000370000200241186a200e290000370000200241106a2011290000370000200241086a20122900003700002003200841206a3602d00120051035200b41606a220b0d000b0b20032802cc01210220032802c801210820033502d0012107200341c8016a41186a220a4200370300200341c8016a41106a220b4200370300200341c8016a41086a22054200370300200342003703c80141d1c4c700ad4280808080e0008410012206290000210d200341e8016a41086a220e200641086a2900003703002003200d3703e801200610352005200e290300370300200320032903e8013703c80141cccfc700ad4280808080e0008410012206290000210d200341a0026a41086a220e200641086a2900003703002003200d3703a00220061035200420032903a002370000200441086a200e290300370000200341a8016a41086a2005290300370300200341a8016a41106a200b290300370300200341a8016a41186a200a290300370300200320032903c8013703a801200c428080808080048420074220862008ad84102202402002450d00200810350b2001450d0320014105742112200341a8016a41106a210441d1c4c700ad4280808080e00084210c41d2cfc700ad4280808080b00184210d0340200c100122052900002107200341e8016a41086a220e200541086a290000370300200320073703e80120051035200d100122052900002107200341a0026a41086a2211200541086a290000370300200320073703a00220051035412010332205450d0220052000290000370000200541186a200041186a290000370000200541106a200041106a290000370000200541086a200041086a2900003700002005ad4280808080800484100422062900002107200341a8016a41086a2214200641086a290000370300200320073703a801200610352003200541206a3602d401200320053602d001200320043602cc012003200341a8016a3602c80120034188026a200341c8016a107b2005103502400240024002400240024002400240200328029002220a41206a2206417f4c0d00200328028802210b0240024020060d0041002108410121050c010b200610332205450d0b200621080b024002402008410f4d0d00200821020c010b200841017422024110200241104b1b22024100480d0a024020080d00200210332205450d0f0c010b20082002460d0020052008200210372205450d0e0b200520032903e801370000200541086a200e2903003700000240024020024170714110460d00200221080c010b200241017422084120200841204b1b22084100480d0a20022008460d0020052002200810372205450d0e0b200520032903a002370010200541186a201129030037000002400240200841606a200a490d00200821020c010b200a415f4b0d0a200841017422022006200220064b1b22024100480d0a20082002460d0020052008200210372205450d0e0b200541206a200b200a109d081a0240200328028c02450d00200b10350b200341a8016a2006ad4220862005ad842207100510c2010240024020032802a801450d00200341f8016a41086a2014280200360200200320032903a8013703f8010c010b410410332206450d0b200342043702cc01200320063602c8014100200341c8016a1077200341f8016a41086a20032802d001360200200320032903c8013703f8010b20034188026a41086a200341f8016a41086a2802002206360200200320032903f80137038802024002400240024002402006450d00200341c8016a2003280288022006410110f10420032802c8014101460d0420032802cc01210b20032802d401220820032802d001220a460d0320062008200a6b6a220641046a220e417f4c0d05200e0d014100210e410121110c020b410120034188026a107702400240200328028c02220a20032802900222066b4104490d0020032802880221080c010b200641046a22082006490d0e200a410174220b2008200b20084b1b220b4100480d0e02400240200a0d000240200b0d00410121080c020b200b10332208450d140c010b2003280288022108200a200b460d002008200a200b10372208450d1320032802900221060b2003200b36028c0220032008360288020b200820066a20093600002003200641046a22063602900202400240200328028c02220a20066b4104490d0020032802880221080c010b200641046a22082006490d0e200a410174220b2008200b20084b1b220b4100480d0e02400240200a0d000240200b0d00410121080c020b200b10332208450d140c010b2003280288022108200a200b460d002008200a200b10372208450d1320032802900221060b2003200b36028c0220032008360288020b200820066a2013360000200641046a21080c090b200e10332211450d0d0b200320113602e8012003200e3602ec01200320063602f0012003200341e8016a3602c801200b200341c8016a200810f20420062008490d0320032802f001220b2006490d04200328029002220b200a490d0520032802e801210e20032802880221112003200620086b2206360298022003200b200a6b220b36029c022006200b470d06200e20086a2011200a6a2006109d081a0240024020032802ec01220a20032802f00122066b4104490d0020032802e80121080c010b200641046a22082006490d0c200a410174220b2008200b20084b1b220b4100480d0c02400240200a0d000240200b0d00410121080c020b200b10332208450d120c010b20032802e8012108200a200b460d002008200a200b10372208450d1120032802f00121060b2003200b3602ec01200320083602e8010b200820066a20093600002003200641046a22063602f0010240024020032802ec01220a20066b4104490d0020032802e80121080c010b200641046a22082006490d0c200a410174220b2008200b20084b1b220b4100480d0c02400240200a0d000240200b0d00410121080c020b200b10332208450d120c010b20032802e8012108200a200b460d002008200a200b10372208450d1120032802f00121060b2003200b3602ec01200320083602e8010b200820066a2013360000200641046a210820032802e801210620032802ec01210a200328028c02450d0820032802880210350c080b200320034188026a3602c801200b200341c8016a200a10f20402400240200328028c02220a20032802900222066b4104490d0020032802880221080c010b200641046a22082006490d0b200a410174220b2008200b20084b1b220b4100480d0b02400240200a0d000240200b0d00410121080c020b200b10332208450d110c010b2003280288022108200a200b460d002008200a200b10372208450d1020032802900221060b2003200b36028c0220032008360288020b200820066a20093600002003200641046a22063602900202400240200328028c02220a20066b4104490d0020032802880221080c010b200641046a22082006490d0b200a410174220b2008200b20084b1b220b4100480d0b02400240200a0d000240200b0d00410121080c020b200b10332208450d110c010b2003280288022108200a200b460d002008200a200b10372208450d1020032802900221060b2003200b36028c0220032008360288020b200820066a2013360000200641046a21080c060b200328028c02450d0720032802880210350c070b1044000b2008200641e88cc5001059000b2006200b41e88cc5001058000b200a200b41f88cc5001059000b200341a8016a41146a410a360200200341b4016a410c360200200341a0026a41146a4103360200200320034198026a3602b80220032003419c026a3602bc02200341c8016a41146a4100360200200342033702a402200341a0b3cc003602a0022003410c3602ac01200341b0b4cc003602d801200342013702cc01200341f4b3cc003602c8012003200341a8016a3602b0022003200341c8016a3602b8012003200341bc026a3602b0012003200341b8026a3602a801200341a0026a41b0b4cc00104c000b2003200836029002200328028c02210a20032802880221060b2006450d0020072008ad4220862006ad8410020240200a450d00200610350b02402002450d00200510350b200041206a2100201241606a22120d010c050b0b200341106a21062002450d05200510350c050b103e000b1045000b20021097060c030b200341106a1097062003419c016a28020041ffffff3f71450d0220032802980110350c020b103c000b20061097062003419c016a28020041ffffff3f71450d0020032802980110350b200341c0026a24000bd50302047f047e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022040d00200041003a00000c010b200341186a28020021052003280214210641002101200341003a006802400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341206a41186a200341c8006a41186a2903002207370300200341206a41106a200341c8006a41106a2903002208370300200341206a41086a200341c8006a41086a290300220937030020032003290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200341003a00680b410021012003410036022820034201370320200341093602442003200341086a3602402003200341206a36026c200341dc006a41013602002003420137024c200341c888c2003602482003200341c0006a360258200341ec006a41e88ac500200341c8006a10431a200335022842208620033502208410062003280224450d00200328022010350b200020013a00002006450d00200410350b200341f0006a24000b970b06047f057e027f017e027f027e230041f0016b220324002003200236026420032001360260200341e8006a2002ad4220862001ad84100510c201024002400240200328026822040d00200041003602200c010b200328026c21052003200341f0006a280200220636029c01200320043602980141002101200341003a00e8010240024002400240034020062001460d01200341c8016a20016a200420016a22022d00003a00002003200241016a360298012003200141016a22023a00e8012002210120024120470d000b200341a8016a41086a200341c8016a41086a290300370300200341a8016a41106a200341c8016a41106a290300370300200341a8016a41186a200341c8016a41186a290300370300200320032903c8013703a8012003200620026b36029c01200341c8006a20034198016a10f6012003290348a70d02200341c8006a41106a290300210720032903502108200341306a20034198016a10f6012003290330a70d02200341306a41106a29030021092003290338210a200341286a20034198016a10c40120032802280d02200328022c2206200328029c0141186e2201200120064b1bad42187e220b422088a7450d010c050b2003410036029c01200141ff0171450d01200341003a00e8010c010b200ba72202417f4c0d03024002400240024002400240024020020d004108210c0c010b20021033220c450d010b41002101200341003602d0012003200c3602c8012003200241186e22023602cc0102400240024002402006450d0041002101200341206a210d0340200341106a20034198016a10f6012003290310a70d02200d290300210b2003290318210e200341086a20034198016a10c40120032802080d02200328020c210f0240200120032802cc01470d00200341c8016a20014101109c0120032802c801210c20032802d00121010b200c200141186c6a2202200f3602102002200b3703082002200e3703002003200141016a22013602d0012006417f6a22060d000b20032802cc0121020b200c450d08200320034198016a10c40120032802000d06200328029c01220d20032802044102742206490d062006417f4c0d0b20060d014200210b4101210f0c020b20032802cc012201450d07200141186c0d060c070b20061039220f450d01200f20032802980122102006109d081a2003200d20066b36029c012003201020066a360298012006ad210b0b200f450d030240200b2006ad42208684220b422088a722060d00200ba721060c020b0240200f2006724103710d00200ba722064103710d002006410276220d450d02200b422288a721100c030b200ba7450d03200f10350c030b1045000b4100211002402006450d00200f10350b4100210d4104210f0b41000d00200f450d00200341f8006a41186a200341a8016a41186a290300220b370300200341f8006a41106a200341a8016a41106a290300220e370300200341f8006a41086a200341a8016a41086a2903002211370300200320032903a8012212370378200041186a20093703002000200a3703102000200737030820002008370300200041346a2010360200200041306a200d3602002000412c6a200f360200200041286a2001360200200020023602242000200c360220200041386a2012370300200041c0006a2011370300200041c8006a200e370300200041d0006a200b3703000c030b2002450d01200241186c450d010b200c10350b200341003602b001200342013703a8012003410936027c2003200341e0006a3602782003200341a8016a3602a401200341dc016a4101360200200342013702cc01200341c888c2003602c8012003200341f8006a3602d801200341a4016a41e88ac500200341c8016a10431a20033502b00142208620033502a801841006024020032802ac01450d0020032802a80110350b200041003602200b2005450d00200410350b200341f0016a24000f0b1044000ba80202017f037e230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822010d00420021040c010b200328020c210202400240200341086a41086a2802004110490d00200141086a290000210520012900002106420121040c010b20034100360220200342013703182003410936022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341c888c2003602382003200341286a360248200341346a41e88ac500200341386a10431a200335022042208620033502188410060240200328021c450d00200328021810350b420021040b2002450d00200110350b2000200637030820002004370300200041106a2005370300200341d0006a24000b9f4014047f017e017f017e017f017e057f017e087f017e037f017e017f017e077f027e037f017e037f067e230041e0036b22012400200141e0026a41186a22024200370300200141e0026a41106a22034200370300200141e0026a41086a22044200370300200142003703e00241f7edcb00ad4280808080f000842205100122062900002107200141d0006a41086a2208200641086a290000370300200120073703502006103520042008290300370300200120012903503703e00241eeedcb00ad428080808090018422071001220629000021092008200641086a2900003703002001200937035020061035200320012903502209370300200141a8016a41086a220a2004290300370300200141a8016a41106a220b2009370300200141a8016a41186a220c2008290300370300200120012903e0023703a801200141e0026a200141a8016a10ac012003280200210d20012903e0022109200242003703002003420037030020044200370300200142003703e00220051001220629000021052008200641086a290000370300200120053703502006103520042008290300370300200120012903503703e00220071001220629000021052008200641086a2900003703002001200537035020061035200320012903502205370300200a2004290300370300200b2005370300200c2008290300370300200120012903e0023703a80102400240410410332208450d0020084100200d41016a20094202511b220e36000020084104410810372208450d0041002102200841003a0004200141a8016aad220f42808080808004842008ad4280808080d00084100220081035200141e0026a41186a220a4200370300200141e0026a41106a220b4200370300200141e0026a41086a22044200370300200142003703e00241f7edcb00ad4280808080f00084100122062900002105200141d0006a41086a2208200641086a290000370300200120053703502006103520042008290300370300200120012903503703e00241aeeecb00ad4280808080a001841001220629000021052008200641086a290000370300200120053703502006103520032001290350370000200341086a2008290300370000200141a8016a41086a2004290300370300200141a8016a41106a200b290300370300200141a8016a41186a200a290300370300200120012903e0023703a801200141a0026a200141a8016a10d90102400240024020012802a00222100d00200141003602900120014204370388010c010b20012902a402210520012010360288012001200537028c012005422088a722082005a72202470d010b20014188016a20024101109001200128028801211020012802900121080b201020084103746a220420003602042004200e3602002001200841016a2211360290010240024002400240200e41a1054f0d00201121120c010b024020110d004100211220014100360290010c010b200e41e07a6a2104200841ffffffff017141016a2106410021132010210802400340200828020020044f0d01200841086a21082006201341016a2213470d000b0b0240024020112013490d004100211220014100360290012013450d0120134103742114200141a0026aad4280808080c000842105200141a4026a2115200141d0006a41086a21162010210c0340200c280200210d41f7edcb00ad4280808080f00084220710012208290000210920014180026a41086a2200200841086a29000037030020012009370380022008103541d6a9c000ad4280808080b0028410012208290000210920014190026a41086a220a200841086a2900003703002001200937039002200810352001200d3602a002200120051003220829000037035020081035200120153602ec02200120163602e4022001200141a0026a3602e8022001200141d0006a3602e002200141a8016a200141e0026a107b20012802b001220b41206a2204417f4c0d0720012802a80121170240024020040d0041002106410121080c010b200410332208450d06200421060b024002402006410f4d0d00200621020c010b200641017422024110200241104b1b22024100480d05024020060d002002103322080d010c080b20062002460d0020082006200210372208450d070b2008200129038002370000200841086a20002903003700000240024020024170714110460d00200221060c010b200241017422064120200641204b1b22064100480d0520022006460d0020082002200610372208450d070b2008200129039002370010200841186a200a29030037000002400240200641606a200b490d00200621020c010b2004200b490d05200641017422022004200220044b1b22024100480d0520062002460d0020082006200210372208450d070b200841206a2017200b109d081a024020012802ac01450d00201710350b2004ad4220862008ad84100802402002450d00200810350b20071001220829000021072000200841086a29000037030020012007370380022008103541e9a9c000ad4280808080b00284100122082900002107200a200841086a2900003703002001200737039002200810352001200d3602a002200120051003220829000037035020081035200120153602ec02200120163602e4022001200141a0026a3602e8022001200141d0006a3602e002200141a8016a200141e0026a107b20012802b001220b41206a2204417f4c0d0720012802a801210d0240024020040d0041002106410121080c010b200410332208450d06200421060b024002402006410f4d0d00200621020c010b200641017422024110200241104b1b22024100480d05024020060d00200210332208450d080c010b20062002460d0020082006200210372208450d070b2008200129038002370000200841086a20002903003700000240024020024170714110460d00200221060c010b200241017422064120200641204b1b22064100480d0520022006460d0020082002200610372208450d070b2008200129039002370010200841186a200a29030037000002400240200641606a200b490d00200621020c010b200b415f4b0d05200641017422022004200220044b1b22024100480d0520062002460d0020082006200210372208450d070b200841206a200d200b109d081a024020012802ac01450d00200d10350b2004ad4220862008ad84100802402002450d00200810350b200c41086a210c201441786a22140d000c020b0b20132011104f000b201120136b2214450d0002402013450d002010201020134103746a2014410374109e081a0b200120143602900120102802042112200141e0026a41186a4200370300200141e0026a41106a22134200370300200141e0026a41086a22084200370300200142003703e00241a3edcb00ad4280808080f0008410012204290000210520014180026a41086a2206200441086a2900003703002001200537038002200410352008200629030037030020012001290380023703e00241aaedcb00ad4280808080b0018410012204290000210520014190026a41086a2206200441086a29000037030020012005370390022004103520132001290390022205370300200141a0026a41086a2008290300370300200141a0026a41106a2005370300200141a0026a41186a2006290300370300200120012903e0023703a002200141e0026a200141a0026a412010da014101210820012902e40221180240024020012802e00222044101460d00200441014621080c010b2018422088a722112012201220114b1b22172018a72200490d000240201720004d0d00200141a0026aad4280808080c000842107200141a4026a2115200141d0006a41086a211641a3edcb00ad4280808080f0008421090340200910012208290000210520014180026a41086a220c200841086a2900003703002001200537038002200810354196eaca00ad4280808080a0028410012208290000210520014190026a41086a220d200841086a290000370300200120053703900220081035200120003602a002200120071003220829000037035020081035200120153602ec02200120163602e4022001200141a0026a3602e8022001200141d0006a3602e002200141a8016a200141e0026a107b20012802b001220a41206a2204417f4c0d0720012802a801210b0240024020040d0041002106410121080c010b200410332208450d06200421060b024002402006410f4d0d00200621020c010b200641017422024110200241104b1b22024100480d05024020060d00200210332208450d080c010b20062002460d0020082006200210372208450d070b2008200129038002370000200841086a200c2903003700000240024020024170714110460d00200221060c010b200241017422064120200641204b1b22064100480d0520022006460d0020082002200610372208450d070b2008200129039002370010200841186a200d29030037000002400240200641606a200a490d00200621020c010b200a415f4b0d05200641017422022004200220044b1b22024100480d0520062002460d0020082006200210372208450d070b200841206a200b200a109d081a024020012802ac01450d00200b10350b200041016a21002004ad4220862008ad84100702402002450d00200810350b20172000470d000b0b201220114921082018428080808070832017ad8421180b200120183702ac01200120083602a8010240024020080d00200141e0026a41186a22064200370300200141e0026a41106a22024200370300200141e0026a41086a22084200370300200142003703e00241a3edcb00ad4280808080f0008410012204290000210520014180026a41086a2200200441086a2900003703002001200537038002200410352008200029030037030020012001290380023703e00241aaedcb00ad4280808080b0018410012204290000210520014190026a41086a2200200441086a2900003703002001200537039002200410352013200129039002370000201341086a2000290300370000200141a0026a41086a2008290300370300200141a0026a41106a2002290300370300200141a0026a41186a2006290300370300200120012903e0023703a002200141a0026aad428080808080048410070c010b200141e0026a41186a22064200370300200141e0026a41106a22024200370300200141e0026a41086a22084200370300200142003703e00241a3edcb00ad4280808080f0008410012204290000210520014180026a41086a2200200441086a2900003703002001200537038002200410352008200029030037030020012001290380023703e00241aaedcb00ad4280808080b0018410012204290000210520014190026a41086a2200200441086a2900003703002001200537039002200410352013200129039002370000201341086a2000290300370000200141a0026a41086a2008290300370300200141a0026a41106a2002290300370300200141a0026a41186a2006290300370300200120012903e0023703a002200141203602e4022001200141a0026a3602e002200141a8016a410472200141e0026a10db010b201421120b200128028c012115200141e0026a41186a22024200370300200141e0026a41106a22004200370300200141e0026a41086a22044200370300200142003703e00241f7edcb00ad4280808080f00084100122062900002105200141d0006a41086a2208200641086a290000370300200120053703502006103520042008290300370300200120012903503703e00241aeeecb00ad4280808080a001841001220629000021052008200641086a290000370300200120053703502006103520032001290350370000200341086a2008290300370000200141a8016a41086a2004290300370300200141a8016a41106a2000290300370300200141a8016a41186a2002290300370300200120012903e0023703a8010240024020100d00200f428080808080048410070c010b20124103744104722208417f4c0d04200810332204450d02200141003602e802200120083602e402200120043602e0022012200141e0026a10770240024020120d0020012802e802210820012802e00221020c010b201020124103746a2114410020012802e802220b6b210020012802e4022104410021080340200b20086a210a201020086a220c280200210d02400240200420006a4104490d0020012802e0022102200421060c010b200a41046a2206200a490d04200441017422022006200220064b1b22064100480d040240024020040d00024020060d00410121020c020b200610332202450d080c010b20012802e002210220042006460d0020022004200610372202450d070b200120063602e402200120023602e0020b2002200b6a20086a200d3600002001200a41046a22043602e802200c41046a280200210d02400240200620006a417c6a41034d0d00200621040c010b200441046a22172004490d04200641017422042017200420174b1b22044100480d040240024020060d00024020040d00410121020c020b200410332202450d080c010b20062004460d0020022006200410372202450d070b200120043602e402200120023602e0020b2002200b6a20086a41046a200d3600002001200a41086a3602e802200041786a2100200841086a2108200c41086a2014470d000b200b20086a21080b20012802e4022104200f42808080808004842008ad4220862002ad84100202402004450d00200210350b201541ffffffff0171450d00201010350b200141e0026a41186a22194200370300200141e0026a41106a221a4200370300200141e0026a41086a221b4200370300200142003703e00241f7edcb00ad4280808080f00084221c100122082900002105200141d0006a41086a221d200841086a2900003703002001200537035020081035201b201d290300370300200120012903503703e00241b8eecb00ad4280808080e00284221e100122082900002105201d200841086a290000370300200120053703502008103520032001290350370000200341086a221f201d290300370000200141a8016a41086a2220201b290300370300200141a8016a41106a2221201a290300370300200141a8016a41186a22222019290300370300200120012903e0023703a801200141c8006a200141a8016a412010c001200128024c21230240200128024822244101470d00024020234100200e41d87e6a22082008200e4b1b22254f0d00200141e0026aad42808080808002842126200141a0026aad42808080808004842127200141e0026a41106a210a200141e0016a2128200141a8016a41246a2100200141e0026a41286a2114202321290340200141a8016a202910dc01200141e0026a20012802a801220820012802b001220410dd010240024020012802e002222a0d004200212b4108212a0c010b2004ad4220862008ad84100720012902e402212b0b024020012802ac01450d00200810350b202a202b422088a7220841d8006c6a2117202a210202402008450d000340200141a8016a41186a2208200241186a290300370300200141a8016a41106a2204200241106a290300370300200141a8016a41086a2206200241086a2903003703002002280220210c20022903002105200141e0026a41206a2210200241c4006a2902003703002014200241cc006a290200370300200141e0026a41306a2215200241d4006a280200360200200141e0026a41086a220b2002412c6a290200370300200a200241346a290200370300200141e0026a41186a220d2002413c6a290200370300200120053703a8012001200241246a2902003703e002200241d8006a2102200c450d0120014188016a41186a2216200829030037030020014188016a41106a2213200429030037030020014188016a41086a220e2006290300370300200141d0006a41086a2212200b290300370300200141d0006a41106a2211200a290300370300200141d0006a41186a222c200d290300370300200141d0006a41206a222d2010290300370300200141d0006a41286a22102014290300370300200141d0006a41306a222e2015280200360200200120012903a80137038801200120012903e00237035020082016290300370300200420132903003703002006200e29030037030020002001290350370200200041086a2012290300370200200041106a2011290300370200200041186a202c290300370200200041206a202d290300370200200041286a2010290300370200200041306a202e28020036020020012001290388013703a8012001200c3602c801200142003703c802200142003703c002200120082903003703d802200120042903003703d002202820012903a8012006290300200141d0026a200141c0026a10de01024020012802d0012208450d00200841306c2104200c210803402008200841206a290300200841286a290300200141d0026a200141c0026a10de01200841306a2108200441506a22040d000b0b200141c0026a41086a290300212f20012903c002213020012802d4012110024002400240024020012903d0022207200141d0026a41086a290300220584500d0020012802dc012208450d00200141386a203020072030200754202f200554202f2005511b22041b2231202f200520041b22322008ad420010980820084105742104200141386a41086a29030021092001290338213320312105203221072010210803402008203320052005203356200720095620072009511b22061b22182009200720061b223410df01200720347d2005201854ad7d2107200520187d2105200841206a2108200441606a22040d000b427f203020317d220920057c220520052009542208202f20327d2030203154ad7d220520077c2008ad7c220720055420072005511b22081b2205427f200720081b2207844200520d01200d4200370300200a4200370300200b4200370300200142003703e00241b6fdc600ad4280808080800184220510012204290000210720014180026a41086a2208200441086a290000370300200120073703800220041035200b200829030037030020012001290380023703e00241e489c200ad4280808080d00184220710012206290000210920014190026a41086a2204200641086a290000370300200120093703900220061035200a200129039002370000200a41086a22162004290300370000200141a0026a41086a2213200b290300370300200141a0026a41106a220e200a290300370300200141a0026a41186a2212200d290300370300200120012903e0023703a002200141206a200141a0026a412010d701200141206a41106a29030021092001290328211820012802202106200d4200370300200a4200370300200b4200370300200142003703e00220051001221529000021052008201541086a290000370300200120053703800220151035200b200829030037030020012001290380023703e00220071001220829000021052004200841086a290000370300200120053703900220081035200a200129039002370000201620042903003700002013200b290300370300200e200a2903003703002012200d290300370300200120012903e0023703a00220012009420020061b3703e80220012018420020061b3703e0022027202610020c030b2030202f844200520d01200d4200370300200a4200370300200b4200370300200142003703e00241b6fdc600ad4280808080800184220510012204290000210720014180026a41086a2208200441086a290000370300200120073703800220041035200b200829030037030020012001290380023703e00241e489c200ad4280808080d00184220710012206290000210920014190026a41086a2204200641086a290000370300200120093703900220061035200a200129039002370000200a41086a22162004290300370000200141a0026a41086a2213200b290300370300200141a0026a41106a220e200a290300370300200141a0026a41186a2212200d290300370300200120012903e0023703a002200141086a200141a0026a412010d701200141086a41106a29030021092001290310211820012802082106200d4200370300200a4200370300200b4200370300200142003703e00220051001221529000021052008201541086a290000370300200120053703800220151035200b200829030037030020012001290380023703e00220071001220829000021052004200841086a290000370300200120053703900220081035200a200129039002370000201620042903003700002013200b290300370300200e200a2903003703002012200d290300370300200120012903e0023703a00220012009420020061b3703e80220012018420020061b3703e0022027202610020c020b200142f0f2bda1a7ee9cb9f9003703a002200141e0026a200141a0026a10e001200141e0026a2005200710df01200d2007370300200120053703f002200141063a00e8022001410c3a00e00241b0b4cc004100200141e0026a10d4010c010b200142f0f2bda1a7ee9cb9f9003703a002200141e0026a200141a0026a10e001200141e0026a2030202f10df01200d202f370300200120303703f002200141063a00e8022001410c3a00e00241b0b4cc004100200141e0026a10d4010b024020012802cc012208450d00200841306c450d00200c10350b024020012802d80141ffffff3f71450d00201010350b20022017470d000b201721020b202ba72104024020172002460d0003400240200241246a2802002208450d00200841306c450d00200241206a28020010350b200241d8006a21080240200241306a28020041ffffff3f71450d002002412c6a28020010350b2008210220172008470d000b0b202941016a212902402004450d00200441d8006c450d00202a10350b20292025470d000b0b20232025202320254b1b21230b20194200370300201a4200370300201b4200370300200142003703e002201c100122082900002105201d200841086a2900003703002001200537035020081035201b201d290300370300200120012903503703e002201e100122082900002105201d200841086a290000370300200120053703502008103520032001290350370000201f201d2903003700002020201b2903003703002021201a29030037030020222019290300370300200120012903e0023703a8010240024020240d00200f428080808080048410070c010b200120233602e002200f4280808080800484200141e0026aad4280808080c0008410020b200141e0036a24000f0b103e000b1045000b103c000b1044000bed0401097f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c2010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c4010240024020022802000d0020022802042205200228022422064103762201200120054b1b22014103742207417f4c0d030240024020010d00410421080c010b200710332208450d050b200241003602502002200136024c200220083602480240024002402005450d004100210103402002410036022820064104490d0320022002280220220741046a36022020072800002109200241003602282006417c6a4104490d022002200741086a3602202007280004210702402001200228024c470d00200241c8006a2001410110900120022802482108200228025021010b200641786a2106200820014103746a220a2007360204200a20093602002002200141016a22013602502005417f6a22050d000b200220063602240b2008450d022000200229024c370204200020083602000c030b2006417c6a21060b20022006360224200228024c41ffffffff0171450d00200810350b20024100360230200242013703282002410936023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b200041003602000b2004450d00200310350b200241e0006a24000f0b1044000b1045000bbb0201037f230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822010d00200041003602000c010b200341106a2802002102200328020c2104200341003602380240024020024104490d0020012800002105200341003602382002417c714104460d00200041086a200128000436020020002005360204410121020c010b20034100360220200342013703182003410936022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341c888c2003602382003200341286a360248200341346a41e88ac500200341386a10431a200335022042208620033502188410060240200328021c450d00200328021810350b410021020b200020023602002004450d00200110350b200341d0006a24000b3c01017f02404108103322020d001045000b200220002802003600002002200028020436000420012902002002ad42808080808001841002200210350bfc0403027f017e057f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541efb6c000ad4280808080800284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000b800b06057f017e077f017e037f037e230041e0016b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c2010240024002400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10c40102400240024020032802000d00200328020422062003280224220741d8006e2201200120064b1bad42d8007e2208422088a70d042008a72201417f4c0d040240024020010d00410821090c010b200110332209450d060b4100210a20034100360230200320093602282003200141d8006e36022c02402006450d004100210b034041002101200341003a00d801200b41016a210b02400240024002400240034020072001460d01200341b8016a20016a2003280220220c2d00003a00002003200c41016a3602202003200141016a22023a00d8012002210120024120470d000b20034198016a41086a220d200341b8016a41086a29030037030020034198016a41106a220e200341b8016a41106a29030037030020034198016a41186a220f200341b8016a41186a290300370300200320032903b801370398012003200720026b220136022420014110490d032003200c41116a3602202003200141706a360224200c41096a2900002108200c2900012110200341b8016a200341206a10aa0220032802b801220c450d0320032802c001211120032802bc012102200341b8016a200341206a10c30120032802b80122070d012002450d03200241306c0d020c030b20034100360224200141ff0171450d02200341003a00d8010c020b20032802bc01211220032802242201410f4b0d020240201241ffffff3f71450d00200710350b2002450d01200241306c450d010b200c10350b200341d8006a41086a200341f8006a41086a2903003703000240200a450d00200a41d8006c2102200941306a210103400240200141746a280200220c450d00200c41306c450d00200141706a28020010350b0240200128020041ffffff3f71450d002001417c6a28020010350b200141d8006a2101200241a87f6a22020d000b0b200328022c2201450d03200141d8006c450d03200910350c030b20032802c0012113200341d8006a41086a200d2903002214370300200341d8006a41106a200e2903002215370300200341d8006a41186a200f2903002216370300200341386a41186a220d2016370300200341386a41106a220e2015370300200341386a41086a220f20143703002003200141706a36022420032003280220220141106a3602202003200329039801221437035820032014370338200141086a2900002114200129000021150240200a200328022c470d00200341286a200a4101109b01200328022821092003280230210a0b2009200a41d8006c6a2201201537031020012008370308200120103703002001200c360220200141186a2014370300200141346a2013360200200141306a20123602002001412c6a2007360200200141286a2011360200200141246a2002360200200141386a2003290338370200200141c0006a200f290300370200200141c8006a200e290300370200200141d0006a200d2903003702002003200a41016a220a360230200b2006460d01200328022421070c000b0b20090d010b200341003602a00120034201370398012003410936027c2003200341086a360278200320034198016a360258200341cc016a4101360200200342013702bc01200341c888c2003602b8012003200341f8006a3602c801200341d8006a41e88ac500200341b8016a10431a20033502a0014220862003350298018410060240200328029c01450d0020032802980110350b200041003602000c010b2000200329022c370204200020093602000b2005450d00200410350b200341e0016a24000f0b1044000b1045000b8d22020f7f137e23004190066b22052400200541386a200010b401200541e0046a20052802382206200528024010d501200541e0036a41086a2207200541e9046a290000370300200541e0036a41106a2208200541f1046a290000370300200541e0036a41186a2209200541f9046a290000370300200520052900e1043703e0034100210a024020052d00e0044101470d00200541e0026a41186a2009290300370300200541e0026a41106a2008290300370300200541e0026a41086a2007290300370300200520052903e0033703e0024101210a0b0240200528023c450d00200610350b02400240200a450d00200541186a41186a200541e0026a41186a2206290300370300200541186a41106a200541e0026a41106a2207290300370300200541186a41086a200541e0026a41086a2208290300370300200520052903e002370318200541f0016a200541186a10b701200541e0046a20052802f001220920052802f80110d601200541a0016a41086a220b200541e0046a41086a290300370300200541a0016a41106a220c200541e0046a41106a290300370300200541a0016a41186a220d200541e0046a41186a290300370300200541e0036a41086a220e2005418c056a290200370300200541e0036a41106a220f20054194056a290200370300200541e0036a41186a22102005419c056a290200370300200541e0036a41206a2211200541a4056a290200370300200541e0036a41286a2212200541ac056a290200370300200541e0036a41306a2213200541b4056a280200360200200520052903e0043703a00120052005290284053703e0030240200528028005220a450d00200541a8026a41186a200d290300370300200541a8026a41106a200c290300370300200541a8026a41086a200b2903003703002008200e2903003703002007200f29030037030020062010290300370300200541e0026a41206a2011290300370300200541e0026a41286a2012290300370300200541e0026a41306a2013280200360200200520052903a0013703a802200520052903e0033703e0020b024020052802f401450d00200910350b200a450d00200541dc006a20052903e002370200200541386a41186a2206200541a8026a41186a290300370300200541386a41106a2207200541a8026a41106a290300370300200541386a41086a2208200541a8026a41086a290300370300200541e4006a200541e0026a41086a290300370200200541ec006a200541e0026a41106a290300370200200541f4006a200541e0026a41186a290300370200200541fc006a20054180036a29030037020020054184016a200541e0026a41286a2903003702002005418c016a20054190036a280200360200200520052903a8023703382005200a36025820082903002114200529033821150240024020072903002216200120162001542006290300221720025420172002511b22071b22182017200220071b22198450450d002015211a2014211b0c010b2006201720197d2016201854ad7d221c3703002005201620187d221a37034802400240201a428080e983b1de1656201c420052201c501b450d0020182116201921170c010b200541d0006a420037030020054200370348201c20027c201a20017c2201201a54ad7c21020b20054200201420177d2015201654ad7d2218201520167d221c201556201820145620182014511b22061b221b37034020054200201c20061b221a370338200220177d2001201654ad7d2102200120167d21010b02400240200541386a41286a28020022060d004100210a410021060c010b200641186c21084100210603400240200a2903002216200120012016562002200a41086a220929030022175620022017511b22071b22182017200220071b221984500d00200a201620187d221a370300200a201720197d2016201854ad7d221c37030802400240201a428080e983b1de1656201c420052201c501b450d002001211c20182116201921170c010b200a4200370308200a42003703002002201c7c2001201a7c221c200154ad7c21020b200541386a41086a220742002007290300220120177d20052903382218201654ad7d2219201820167d221a201856201920015620192001511b22071b221b37030020054200201a20071b221a370338200220177d201c201654ad7d2102201c20167d210120092903002117200a29030021160b024020162017844200520d00200a41186a210a200641016a2106200841686a22080d010b0b2005280260220a2006490d020b200541003602600240200a20066b220a450d0002402006450d00200528025822072007200641186c6a200a41186c109e081a0b2005200a3602600b024042002015201a7d221620162015562014201b7d2015201a54ad7d221620145620162014511b220a1b220242002016200a1b220184500d0020054190016a2000108e02200541a0016a20052802900122062005280298012208108f0220052903a001211b200542003703a001200541e8016a280200210920052d00ec01210b02400240201b4201510d004200211c200541f0016a41306a4200370300200541f0016a41286a4200370300200541f0016a41206a4200370300200541f0016a41186a420037030020054180026a4200370300200541f8016a4200370300200542003703f0014200211942002117420021164200211d0c010b200541d8016a2903002118200541a0016a41306a290300211a200541a0016a41206a2903002119200541a0016a41186a290300211c200541e0016a290300211d20052903b001211620052903a8012117200541f0016a41206a200541a0016a41286a290300370300200541f0016a41286a201a370300200541f0016a41306a201837030020054180026a201c3703002005201937038802200520173703f001200520163703f8010b20052017200220172017200256201620015620162001511b220a1b221a7d22143703f0012005201620012016200a1b221e7d2017201a54ad7d22183703f801201620197c211f2017201c7c2220201754220cad2121200541f0016a41106a210a024002402002201a7d22152001201e7d2002201a54ad7d22228450450d004200211c420021222002211e200121230c010b20054188026a201920222019201c201556201920225620192022511b22071b22237d201c2015201c20071b221754ad7d3703002005201c20177d37038002202220237d2015201754ad7d21222023201e7c2017201a7c221e201754ad7c2123201520177d211c0b201f20217c2117200541a8026a41186a200a41086a2903002219370300200541a8026a41206a2207200a41106a290300370300200541d0026a220d200a41186a290300370300200541d8026a220e200a41206a2903003703002005200a290300221a3703b802200520143703a802200520183703b00202400240427f2014201a7c221a201a201454220a201820197c200aad7c221920185420192018511b220a1b221a428080e983b1de16544100427f2019200a1b2215501b0d00200541b8026a290300211a200e2903002115200d290300211f2007290300212120052903b002212420052903a80221254201211920052903c00221260c010b02400240201a20158450450d00420021190c010b42002119200541e0046a41186a220f4200370300200541e0046a41106a220d4200370300200541e0046a41086a22074200370300200542003703e00441b6fdc600ad4280808080800184221f1001220e290000212120054180066a41086a220a200e41086a2900003703002005202137038006200e10352007200a29030037030020052005290380063703e00441e489c200ad4280808080d0018422211001220e2900002124200a200e41086a2900003703002005202437038006200e1035200d2005290380062224370300200541e0056a41086a22102007290300370300200541e0056a41106a22112024370300200541e0056a41186a2212200a290300370300200520052903e0043703e0052005200541e0056a412010d701200541106a2903002124200529030821252005280200210e200f4200370300200d420037030020074200370300200542003703e004201f1001220f290000211f200a200f41086a2900003703002005201f37038006200f10352007200a29030037030020052005290380063703e00420211001220f290000211f200a200f41086a2900003703002005201f37038006200f1035200d200529038006221f370300201020072903003703002011201f3703002012200a290300370300200520052903e0043703e0052005420020244200200e1b221f20157d20254200200e1b2221201a54ad7d22242021201a7d22252021562024201f562024201f511b220a1b3703e804200542002025200a1b3703e004200541e0056aad4280808080800484200541e0046aad4280808080800284100220054198056a201537030020054190056a201a370300200741013a0000200541e9046a2000290000370000200541f1046a200041086a290000370000200541f9046a200041106a29000037000020054181056a200041186a290000370000200541033a00e00441b0b4cc004100200541e0046a10d4010b0b2017201651210a20172016542107200541c8016a2021370300200541d0016a201f370300200541b0016a2024370300200541d8016a2015370300200541b8016a201a370300200520263703c0012005201d3703e001200520253703a8012005200b4100201b420151220d1b3a00ec01200520094100200d1b3602e801200520194201512209ad3703a0010240024020090d002008ad4220862006ad8410070c010b200520083602e404200520063602e004200541a8016a200541e0046a10e7020b200c2007200a1b210a0240200528029401450d00200610350b427f2017200a1b2116427f2020200a1b21172019420152210a024002400240201b4201510d00200a0d0041032106200541e0036a210a0c010b201b420152200a410173720d0141042106200541e0026a210a0b200a41086a20063a0000200a41003a0000200a41096a2000290000370000200a41116a200041086a290000370000200a41196a200041106a290000370000200a41216a200041186a29000037000041b0b4cc004100200a10d4010b024020172016844200520d0020054198056a201837030020054190056a2014370300200541e0046a41086a41003a0000200541e9046a2000290000370000200541f1046a200041086a290000370000200541f9046a200041106a29000037000020054181056a200041186a290000370000200541033a00e00441b0b4cc004100200541e0046a10d4010b2004427f20042903002216201e7c22172017201654220a200441086a2206290300221620237c200aad7c221720165420172016511b220a1b3703002006427f2017200a1b3703000240201c202284500d002003420020032903002216201c7d22172017201656200341086a220a290300221720227d2016201c54ad7d221620175620162017511b22061b370300200a4200201620061b3703000b200542f3e885db96cddbb3203703e002200541e0026a200541386a41386a2005290338200541386a41086a290300411f109002200541e0046a200541186a10b70120052802e004210a200520052802e8043602e4032005200a3602e003200541386a200541e0036a10e101024020052802e404450d00200a10350b200541e0046a41386a200137030020054190056a2002370300200541e0046a41086a41023a0000200541e9046a2000290000370000200541f1046a200041086a290000370000200541f9046a200041106a29000037000020054181056a200041186a290000370000200541043a00e00441b0b4cc004100200541e0046a10d4010b0240200528025c220a450d00200a41186c450d00200528025810350b200541e8006a28020041ffffffff0371450d00200528026410350b20054190066a24000f0b2006200a104f000bbf0908017f037e037f017e017f017e047f037e230041e0016b22032400200320023703582003200137035002400240200120028450450d0042002104420021050c010b2003200036021c200341206a2000200341d0006a2003411c6a10b002024020032903204201520d00200341306a2903002105200329032821040c010b200341c8006a2903002105200341c0006a290300210420032903284201520d00200341206a41106a290300210620034198016a200341206a41186a29030037030020034190016a2006370300200341e0006a41086a41003a0000200341e9006a2000290000370000200341f1006a200041086a290000370000200341f9006a200041106a29000037000020034181016a200041186a290000370000200341033a006041b0b4cc004100200341e0006a10d4010b200341e0006a41186a22074200370300200341e0006a41106a22084200370300200341e0006a41086a220942003703002003420037036041b6fdc600ad4280808080800184220a1001220b2900002106200341d0006a41086a2200200b41086a29000037030020032006370350200b1035200920002903003703002003200329035037036041e489c200ad4280808080d00184220c1001220b29000021062000200b41086a29000037030020032006370350200b1035200820032903502206370300200341206a41086a220d2009290300370300200341206a41106a220e2006370300200341206a41186a220f2000290300370300200320032903603703202003200341206a412010d701200220057d2001200454ad7d200520027d2004200154ad7d200420015820052002582005200251220b1b22101b2111200120047d200420017d20101b2112200341106a2903004200200328020022101b21062003290308420020101b21130240024020042001562005200256200b1b0d0020074200370300200842003703002009420037030020034200370360200a1001220b29000021012000200b41086a29000037030020032001370350200b10352009200029030037030020032003290350370360200c1001220b29000021012000200b41086a29000037030020032001370350200b103520082003290350370000200841086a2000290300370000200d2009290300370300200e2008290300370300200f20072903003703002003200329036037032020034200200620117d2013201254ad7d2201201320127d2202201356200120065620012006511b22001b37036820034200200220001b370360200341e0006a21000c010b20074200370300200842003703002009420037030020034200370360200a1001220b29000021012000200b41086a29000037030020032001370350200b10352009200029030037030020032003290350370360200c1001220b29000021012000200b41086a29000037030020032001370350200b103520082003290350370000200841086a2000290300370000200d2009290300370300200e2008290300370300200f2007290300370300200320032903603703202003427f200620117c201320127c22022013542200ad7c22012000200120065420012006511b22001b3703682003427f200220001b370360200341e0006a21000b200341206aad42808080808004842000ad42808080808002841002200341e0016a24000bdd0201067f230041d0006b22022400024002400240410410332203450d00200341edde91e306360000410c210420034104410c10372205450d0120052001290000370004200241003a004820052101410021060340200241003a0008200241086a200120044100472203109d081a024020040d00200241003a00080b20042003490d03200241286a20066a20022d00083a00002002200641016a22073a0048200420036b2104200120036a21012007210620074120470d000b200241086a41186a2204200241286a41186a290300370300200241086a41106a2203200241286a41106a290300370300200241086a41086a2201200241286a41086a2903003703002002200229032837030820051035200041186a2004290300370000200041106a2003290300370000200041086a200129030037000020002002290308370000200241d0006a24000f0b1045000b103c000b2003200441b89dcc001059000bd80301067f230041106b2202240020024100360208200242013703000240412010332203450d0020032000290038370000200341086a200041c0006a290000370000200341106a200041c8006a290000370000200341186a200041d0006a29000037000020022003360200200242a080808080043702042002200036020c2002410c6a200210cf012002200041106a36020c2002410c6a200210cf0120002802202103200041286a28020022042002107702402004450d002003200441186c6a210403402002200336020c2002410c6a200210cf01200341106a200210e2012004200341186a2203470d000b0b200028022c2105200041346a28020022032002107702400240024020022802042206200228020822046b20034102742200490d0020022802002103200621070c010b200420006a22032004490d01200641017422072003200720034b1b22074100480d010240024020060d00024020070d00410121030c020b2007103322030d010c040b2002280200210320062007460d0020032006200710372203450d030b20022007360204200220033602000b200320046a20052000109d081a2001290200200420006aad4220862003ad84100202402007450d00200310350b200241106a24000f0b103e000b103c000bb30101027f230041106b2202240002400240024002402000280200220341c000490d00200341808001490d012003418080808004490d02200241033a00032001200241036a41011078200220002802003602042001200241046a410410780c030b200220034102743a00032001200241036a410110780c020b200220034102744101723b010a20012002410a6a410210780c010b2002200341027441027236020c20012002410c6a410410780b200241106a24000b13002000411836020420004180b7c0003602000bab0407047f017e017f017e017f017e037f230041d0006b22002400200041206a41186a22014200370300200041206a41106a22024200370300200041206a41086a220342003703002000420037032041f7edcb00ad4280808080f000842204100122052900002106200041c0006a41086a2207200541086a290000370300200020063703402005103520032007290300370300200020002903403703204193eecb00ad428080808080018422081001220529000021062007200541086a2900003703002000200637034020051035200220002903402206370300200041086a22092003290300370300200041106a220a2006370300200041186a220b2007290300370300200020002903203703000240024002404100200010e5012205200541ff01714104461b41ff0171417f6a220541024b0d0020050e03010001010b2001420037030020024200370300200342003703002000420037032020041001220529000021062007200541086a2900003703002000200637034020051035200320072903003703002000200029034037032020081001220529000021062007200541086a290000370300200020063703402005103520022000290340370000200241086a200729030037000020092003290300370300200a2002290300370300200b200129030037030020002000290320370300410110332207450d01200741013a00002000ad42808080808004842007ad428080808010841002200710350b200041d0006a24000f0b103c000b810201037f230041d0006b220124002001412036020420012000360200200141086a2000ad4280808080800484100510c20102400240200128020822020d00410421000c010b200128020c210302400240200141106a280200450d0020022d000022004104490d010b20014100360220200142013703182001410936022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141c888c2003602382001200141286a360248200141346a41e88ac500200141386a10431a200135022042208620013502188410060240200128021c450d00200128021810350b410421000b2003450d00200210350b200141d0006a240020000b3400200041f7edcb0036020420004100360200200041146a4124360200200041106a41bcaac100360200200041086a42073702000b2b01017f02404101103322020d00103c000b200042818080801037020420002002360200200241023a00000b2b01017f02404101103322020d00103c000b200042818080801037020420002002360200200241003a00000b5301017f0240411010332202450d00200242003700082002420037000020024110412010372202450d0020024200370010200042a0808080800437020420002002360200200241186a42003700000f0b103c000b940302047f017e230041206b2203240002400240200241d8006c4104722204417f4c0d00200410332205450d0120034100360208200320043602042003200536020020022003107702402002450d002001200241d8006c6a210603402003200141386a41201078200129030021072003200141086a290300370318200320073703102003200341106a4110107820012802202102200128022822042003107702402004450d002002200441306c6a210403402003200241201078200241206a29030021072003200241286a290300370318200320073703102003200341106a411010782004200241306a2202470d000b0b200141d8006a2105200128022c2102200141346a28020022042003107702402004450d002004410574210403402003200241201078200241206a2102200441606a22040d000b0b200129031021072003200141186a290300370318200320073703102003200341106a411010782005210120052006470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1044000b1045000b3301017f02404110103322020d001045000b2002420037000820024200370000200042908080808002370204200020023602000b860101027f230041206b220224002002410c6a410036020020024200370300200241003602182002420137031002404104103322030d00103c000b200341003600002002200336021020024284808080c00037021420024104722203200241106a10b001200041086a200228021836020020002002290310370200200310b101200241206a24000be90101047f230041106b220224002002410036020c02400240410110332203450d000240024002400240200228020c220441c000490d00200441808001490d012004418080808004490d02200341033a0000200228020c21044105210520034101410510372203450d05200320043600010c030b200320044102743a0000410121050c020b4102210520034101410210372203450d03200320044102744101723b00000c010b4104210520034101410410372203450d02200320044102744102723600000b200020053602082000200536020420002003360200200241106a24000f0b1045000b103c000bf60301087f230041c0006b22022400200241186a4200370300200241106a22034200370300200241086a4200370300200241286a22044100360200200242003703002002420837032020024100360238200242013703302002200236023c2002413c6a200241306a10cf012002200336023c2002413c6a200241306a10cf012002280220210320042802002204200241306a10770240024002402004450d00200441306c210503400240024020022802342206200228023822046b4120490d00200441206a2107200228023021080c010b200441206a22072004490d03200641017422082007200820074b1b22094100480d030240024020060d00024020090d00410121080c020b2009103322080d010c060b2002280230210820062009460d0020082006200910372208450d050b20022009360234200220083602300b200820046a2204200341106a290000370000200441186a200341286a290000370000200441106a200341206a290000370000200441086a200341186a290000370000200220073602382002200336023c2002413c6a200241306a10cf01200341306a2103200541506a22050d000b0b20002002290330370200200041086a200241306a41086a280200360200024020022802242203450d00200341306c450d00200228022010350b200241c0006a24000f0b103e000b103c000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241043600000b2d01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241d4003600000b820b06057f017e017f017e047f0a7e23004190016b22022400200241386a41186a2203420037030041102104200241386a41106a22054200370300200241386a41086a220642003703002002420037033841f7edcb00ad4280808080f000842207100122082900002109200241d8006a41086a220a200841086a29000037030020022009370358200810352006200a2903003703002002200229035837033841b6aac000ad4280808080900284100122082900002109200a200841086a2900003703002002200937035820081035200520022903582209370300200241186a41086a220b2006290300370300200241186a41106a2009370300200241186a41186a220c200a29030037030020022002290338370318200241106a200241186a10f20102402002280210417d71450d002003420037030041102104200241386a41106a220d420037030020064200370300200242003703382007100122082900002109200a200841086a29000037030020022009370358200810352006200a2903003703002002200229035837033841e4edcb00ad4280808080a00184100122082900002109200a200841086a290000370300200220093703582008103520052002290358370000200541086a200a290300370000200b2006290300370300200241186a41106a200d290300370300200c200329030037030020022002290338370318200241086a200241186a412010c001024020022802084101470d00200228020c2001470d010b42002109200241386a41186a22044200370300200241386a41106a22034200370300200241386a41086a220642003703002002420037033841f7edcb00ad4280808080f00084100122082900002107200241d8006a41086a220a200841086a29000037030020022007370358200810352006200a2903003703002002200229035837033841ceeecb00ad4280808080b00184100122082900002107200a200841086a290000370300200220073703582008103520052002290358370000200541086a200a290300370000200241186a41086a2006290300370300200241186a41106a2003290300370300200241186a41186a2004290300370300200220022903383703182002412036026c2002200241186a360268200241f0006a200241186aad4280808080800484100510c201024002402002280270220a0d000c010b20022802742106024002400240200241f0006a41086a28020022054110490d00200541707122054110460d0020054120470d010b200241003602602002420137035820024109360284012002200241e8006a360280012002200241d8006a36028c01200241cc006a41013602002002420137023c200241c888c200360238200220024180016a3602482002418c016a41e88ac500200241386a10431a200235026042208620023502588410060240200228025c450d00200228025810350b420021090c010b200a41086a290000210e200a290000210f200a41286a2900002107200a41186a2900002110200a2900202111200a2900102112420121090b2006450d00200a10350b0240024002402009500d00200041286a2903002109200041186a2903002113200041086a290300211420002903202115200029031021162000290300211741031033220a450d01200a417f20152011852009200785844200522015201154200920075420092007511b22081b3a0002200a417f20162012852013201085844200522016201254201320105420132010511b1b22053a0001200a417f2017200f852014200e85844200522017200f542014200e542014200e511b1b22063a0000200641014b0d020240024020060e020001000b200541014b0d03024020050e020001000b200a1035411121042008450d040c010b200a10350b411d21040c020b103c000b200a1035411121040b20024190016a240020040bb40201067f230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822030d00410221010c010b200228020c210402400240200241106a2802002205450d0020032d0000220641014b0d0041002101024020060e020200020b2005417f6a4104490d0020032800012107410121010c010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b410221010b2004450d00200310350b2000200736020420002001360200200241d0006a24000b130020004102360204200041f0f0c1003602000b2d01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241a0053600000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241063600000bde0506067f017e017f017e017f017e230041206b220224000240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200024002400240200541037122074103460d0002400240024020070e03000102000b2005410276ad21080c040b410121072006450d0220042d0001210620012003417e6a3602042001200441026a3602002006410874200572220141ffff0371418002490d02200141fcff0371410276ad21080c030b4101210720064103490d01200441036a2d0000210620042f0001210920012003417c6a3602042001200441046a3602002009200641107472410874200572220141808004490d012001410276ad21080c020b024020054102762209410c4b0d0002400240024020090e0d00030303010303030303030302000b20064104490d052004350001210820012003417b6a3602042001200441056a36020020084280808080045421074200210a0c060b20064108490d04200429000121082001200341776a3602042001200441096a3602002008428080808080808080015421074200210a0c050b20064110490d03200441096a290000210a2004290001210820012003416f6a3602042001200441116a360200200a428080808080808080015421070c040b200941046a220641104b0d022003417e6a2103200441026a21044100210541012107200241186a210b420021084200210a03402003417f460d01200241106a2004417f6a3100004200200541037441f8007110a30820012003360204200120043602002003417f6a2103200441016a2104200b290300200a84210a20022903102008842108200541016a220541ff01712006490d000b2002427f427f41e80020094103746b41f8007110a4082008200229030058200a200241086a290300220c58200a200c511b21070c030b0c020b4200210a410021070c010b410121070b20002008370308200041106a200a37030020002007ad370300200241206a24000bd53901037f230041106b2202240020002802002103200028020822042001107702402004450d00200320044103746a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a41021078200341086a22032004470d000b0b200028020c2103200041146a28020022042001107702402004450d0020032004410c6c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a410210782003410c6a22032004470d000b0b20002802182103200041206a28020022042001107702402004450d00200320044104746a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a41021078200341106a22032004470d000b0b200028022421032000412c6a28020022042001107702402004450d002003200441146c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a41021078200341146a22032004470d000b0b20002802302103200041386a28020022042001107702402004450d002003200441186c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a41021078200341186a22032004470d000b0b200028023c2103200041c4006a28020022042001107702402004450d0020032004411c6c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a410210782003411c6a22032004470d000b0b20002802482103200041d0006a28020022042001107702402004450d00200320044105746a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a41021078200341206a22032004470d000b0b20002802542103200041dc006a28020022042001107702402004450d002003200441246c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a41021078200341246a22032004470d000b0b20002802602103200041e8006a28020022042001107702402004450d002003200441286c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a41021078200341286a22032004470d000b0b200028026c2103200041f4006a28020022042001107702402004450d0020032004412c6c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a410210782003412c6a22032004470d000b0b2000280278210320004180016a28020022042001107702402004450d002003200441306c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a41021078200341306a22032004470d000b0b20002802840121032000418c016a28020022042001107702402004450d002003200441346c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a4102107820022003412e6a2f01003b010c20012002410c6a410210782002200341306a2f01003b010c20012002410c6a41021078200341346a22032004470d000b0b200028029001210320004198016a28020022042001107702402004450d002003200441386c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a4102107820022003412e6a2f01003b010c20012002410c6a410210782002200341306a2f01003b010c20012002410c6a410210782002200341326a2f01003b010c20012002410c6a410210782002200341346a2f01003b010c20012002410c6a41021078200341386a22032004470d000b0b200028029c012103200041a4016a28020022042001107702402004450d0020032004413c6c6a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a4102107820022003412e6a2f01003b010c20012002410c6a410210782002200341306a2f01003b010c20012002410c6a410210782002200341326a2f01003b010c20012002410c6a410210782002200341346a2f01003b010c20012002410c6a410210782002200341366a2f01003b010c20012002410c6a410210782002200341386a2f01003b010c20012002410c6a410210782003413c6a22032004470d000b0b20002802a8012103200041b0016a28020022042001107702402004450d00200320044106746a210403402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a4102107820022003412e6a2f01003b010c20012002410c6a410210782002200341306a2f01003b010c20012002410c6a410210782002200341326a2f01003b010c20012002410c6a410210782002200341346a2f01003b010c20012002410c6a410210782002200341366a2f01003b010c20012002410c6a410210782002200341386a2f01003b010c20012002410c6a4102107820022003413a6a2f01003b010c20012002410c6a4102107820022003413c6a2f01003b010c20012002410c6a41021078200341c0006a22032004470d000b0b20002802b4012103200041bc016a28020022002001107702402000450d002003200041c4006c6a210003402002200328020036020c20012002410c6a410410782002200341046a2f01003b010c20012002410c6a410210782002200341066a2f01003b010c20012002410c6a410210782002200341086a2f01003b010c20012002410c6a4102107820022003410a6a2f01003b010c20012002410c6a4102107820022003410c6a2f01003b010c20012002410c6a4102107820022003410e6a2f01003b010c20012002410c6a410210782002200341106a2f01003b010c20012002410c6a410210782002200341126a2f01003b010c20012002410c6a410210782002200341146a2f01003b010c20012002410c6a410210782002200341166a2f01003b010c20012002410c6a410210782002200341186a2f01003b010c20012002410c6a4102107820022003411a6a2f01003b010c20012002410c6a4102107820022003411c6a2f01003b010c20012002410c6a4102107820022003411e6a2f01003b010c20012002410c6a410210782002200341206a2f01003b010c20012002410c6a410210782002200341226a2f01003b010c20012002410c6a410210782002200341246a2f01003b010c20012002410c6a410210782002200341266a2f01003b010c20012002410c6a410210782002200341286a2f01003b010c20012002410c6a4102107820022003412a6a2f01003b010c20012002410c6a4102107820022003412c6a2f01003b010c20012002410c6a4102107820022003412e6a2f01003b010c20012002410c6a410210782002200341306a2f01003b010c20012002410c6a410210782002200341326a2f01003b010c20012002410c6a410210782002200341346a2f01003b010c20012002410c6a410210782002200341366a2f01003b010c20012002410c6a410210782002200341386a2f01003b010c20012002410c6a4102107820022003413a6a2f01003b010c20012002410c6a4102107820022003413c6a2f01003b010c20012002410c6a4102107820022003413e6a2f01003b010c20012002410c6a410210782002200341c0006a2f01003b010c20012002410c6a41021078200341c4006a22032000470d000b0b200241106a24000bd2ae0109097f017e067f037e217f027e0b7f017e047f23004190046b22022400200241f8006a200110c4010240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802780d00200228027c220320012802044103762204200420034b1b22054103742204417f4c0d020240024020050d00410421060c010b200410332206450d040b41002104200241003602980320022005360294032002200636029003024002402003450d00410021040340200128020422054104490d0220012802002207280000210820012005417c6a22093602042001200741046a220736020020094102490d0220072f0000210920012005417a6a3602042001200741026a36020002402004200228029403470d0020024190036a20044101109001200228029003210620022802980321040b200620044103746a220520093b0104200520083602002002200441016a2204360298032003417f6a22030d000b20022802940321050b2006450d01200241f0006a200110c4012002280270450d020c180b20022802940341ffffffff0171450d00200610350b200041003602000c180b2002280274220a2001280204410c6e22072007200a4b1bad420c7e220b422088a70d00200ba72203417f4c0d000240024020030d004104210c0c010b20031033220c450d020b4100210720024100360298032002200c3602900320022003410c6e220d36029403024002400240200a450d00410021070340200128020422034104490d0220012802002209280000210e20012003417c6a220d3602042001200941046a2208360200200d4102490d0220082f0000210f20012003417a6a220d3602042001200841026a360200200d4102490d0220092f0006210d2001200341786a22083602042001200941086a220936020020084102490d0220092f000021082001200341766a3602042001200941026a36020002402007200228029403470d0020024190036a20074101108701200228029003210c20022802980321070b200c2007410c6c6a220320083b01082003200f3b01042003200e360200200341066a200d3b01002002200741016a220736029803200a417f6a220a0d000b200228029403210d0b200c450d17200241e8006a200110c4012002280268450d010c160b2002280294032201450d162001410c6c450d16200c10350c160b4104210f200228026c220e200128020441047622032003200e4b1b22034104742209417f4c0d0002402003450d0020091033220f450d020b41002108200241003602980320022003360294032002200f36029003024002400240200e450d00410021080340200128020422034104490d0220012802002209280000211020012003417c6a22113602042001200941046a220a36020020114102490d02200a330000210b20012003417a6a22113602042001200a41026a36020020114102490d02200933000621122001200341786a22113602042001200941086a220a36020020114102490d02200a33000021132001200341766a22113602042001200a41026a36020020114102490d02200933000a21142001200341746a220a36020420012009410c6a2209360200200a4102490d0220092f0000210a2001200341726a3602042001200941026a3602002014423086201342208684201242108684200b84210b02402008200228029403470d0020024190036a20084101108c01200228029003210f20022802980321080b200f20084104746a2203200a3b010c2003200b370204200320103602002002200841016a220836029803200e417f6a220e0d000b20022802940321030b200f450d16200241e0006a200110c4012002280260450d010c150b20022802940341ffffffff0071450d15200f10350c150b20022802642210200128020441146e2209200920104b1bad42147e220b422088a70d00200ba72209417f4c0d000240024020090d00410421150c010b200910332215450d020b4100210e200241003602980320022015360290032002200941146e2211360294030240024002402010450d004100210e0340200128020422094104490d022001280200220a280000211620012009417c6a22173602042001200a41046a221136020020174102490d0220112f0000211820012009417a6a22173602042001201141026a36020020174102490d02200a2f000621192001200941786a22173602042001200a41086a221136020020174102490d0220112f0000211a2001200941766a22173602042001201141026a36020020174102490d02200a2f000a211b2001200941746a22173602042001200a410c6a221136020020174102490d0220112f0000211c2001200941726a22173602042001201141026a36020020174102490d02200a2f000e21172001200941706a22113602042001200a41106a220a36020020114102490d02200a2f0000211120012009416e6a3602042001200a41026a3602000240200e200228029403470d0020024190036a200e41011099012002280290032115200228029803210e0b2015200e41146c6a220920113b0110200920183b0104200920163602002009410e6a20173b01002009410c6a201c3b01002009410a6a201b3b0100200941086a201a3b0100200941066a20193b01002002200e41016a220e360298032010417f6a22100d000b20022802940321110b2015450d15200241d8006a200110c4012002280258450d010c140b2002280294032201450d14200141146c450d14201510350c140b200228025c2217200128020441186e2209200920174b1bad42187e220b422088a70d00200ba72209417f4c0d000240024020090d00410421180c010b200910332218450d020b41002110200241003602980320022018360290032002200941186e2216360294030240024002402017450d00410021100340200128020422094104490d022001280200220a280000211a20012009417c6a22193602042001200a41046a221636020020194102490d0220162f0000211b20012009417a6a22193602042001201641026a36020020194102490d02200a2f0006211c2001200941786a22193602042001200a41086a221636020020194102490d0220162f0000211d2001200941766a22193602042001201641026a36020020194102490d02200a2f000a211e2001200941746a22193602042001200a410c6a221636020020194102490d0220162f0000211f2001200941726a22193602042001201641026a36020020194102490d02200a2f000e21202001200941706a22193602042001200a41106a221636020020194102490d0220162f0000212120012009416e6a22193602042001201641026a36020020194102490d02200a2f0012211920012009416c6a22163602042001200a41146a220a36020020164102490d02200a2f0000211620012009416a6a3602042001200a41026a36020002402010200228029403470d0020024190036a20104101109701200228029003211820022802980321100b2018201041186c6a220920163b01142009201b3b01042009201a360200200941126a20193b0100200941106a20213b01002009410e6a20203b01002009410c6a201f3b01002009410a6a201e3b0100200941086a201d3b0100200941066a201c3b01002002201041016a2210360298032017417f6a22170d000b20022802940321160b2018450d14200241d0006a200110c4012002280250450d010c130b2002280294032201450d13200141186c450d13201810350c130b200228025422192001280204411c6e2209200920194b1bad421c7e220b422088a70d00200ba72209417f4c0d000240024020090d004104211b0c010b20091033221b450d020b4100211720024100360298032002201b3602900320022009411c6e221a360294030240024002402019450d00410021170340200128020422094104490d022001280200220a280000211d20012009417c6a221c3602042001200a41046a221a360200201c4102490d02201a2f0000211e20012009417a6a221c3602042001201a41026a360200201c4102490d02200a2f0006211f2001200941786a221c3602042001200a41086a221a360200201c4102490d02201a2f000021202001200941766a221c3602042001201a41026a360200201c4102490d02200a2f000a21212001200941746a221c3602042001200a410c6a221a360200201c4102490d02201a2f000021222001200941726a221c3602042001201a41026a360200201c4102490d02200a2f000e21232001200941706a221c3602042001200a41106a221a360200201c4102490d02201a2f0000212420012009416e6a221c3602042001201a41026a360200201c4102490d02200a2f0012212520012009416c6a221c3602042001200a41146a221a360200201c4102490d02201a2f0000212620012009416a6a221c3602042001201a41026a360200201c4102490d02200a2f0016211c2001200941686a221a3602042001200a41186a220a360200201a4102490d02200a2f0000211a2001200941666a3602042001200a41026a36020002402017200228029403470d0020024190036a2017410110f901200228029003211b20022802980321170b201b2017411c6c6a2209201a3b01182009201e3b01042009201d360200200941166a201c3b0100200941146a20263b0100200941126a20253b0100200941106a20243b01002009410e6a20233b01002009410c6a20223b01002009410a6a20213b0100200941086a20203b0100200941066a201f3b01002002201741016a2217360298032019417f6a22190d000b200228029403211a0b201b450d13200241c8006a200110c4012002280248450d010c120b2002280294032201450d122001411c6c450d12201b10350c120b200228024c221c200128020441057622092009201c4b1b2209410574220a417f4c0d000240024020090d004104211e0c010b200a1033221e450d020b41002119200241003602980320022009360294032002201e36029003024002400240201c450d00410021190340200128020422094104490d022001280200220a280000212020012009417c6a221f3602042001200a41046a221d360200201f4102490d02201d2f0000212120012009417a6a221f3602042001201d41026a360200201f4102490d02200a2f000621222001200941786a221f3602042001200a41086a221d360200201f4102490d02201d2f000021232001200941766a221f3602042001201d41026a360200201f4102490d02200a2f000a21242001200941746a221f3602042001200a410c6a221d360200201f4102490d02201d2f000021252001200941726a221f3602042001201d41026a360200201f4102490d02200a2f000e21262001200941706a221f3602042001200a41106a221d360200201f4102490d02201d2f0000212720012009416e6a221f3602042001201d41026a360200201f4102490d02200a2f0012212820012009416c6a221f3602042001200a41146a221d360200201f4102490d02201d2f0000212920012009416a6a221f3602042001201d41026a360200201f4102490d02200a2f0016212a2001200941686a221f3602042001200a41186a221d360200201f4102490d02201d2f0000212b2001200941666a221f3602042001201d41026a360200201f4102490d02200a2f001a211f2001200941646a221d3602042001200a411c6a220a360200201d4102490d02200a2f0000211d2001200941626a3602042001200a41026a36020002402019200228029403470d0020024190036a20194101109101200228029003211e20022802980321190b201e20194105746a2209201d3b011c200920213b0104200920203602002009411a6a201f3b0100200941186a202b3b0100200941166a202a3b0100200941146a20293b0100200941126a20283b0100200941106a20273b01002009410e6a20263b01002009410c6a20253b01002009410a6a20243b0100200941086a20233b0100200941066a20223b01002002201941016a221936029803201c417f6a221c0d000b20022802940321090b201e450d12200241c0006a200110c4012002280240450d010c110b20022802940341ffffff3f71450d11201e10350c110b2002280244221f200128020441246e220a200a201f4b1bad42247e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421210c010b200a10332221450d020b4100211d200241003602980320022021360290032002200a41246e222036029403024002400240201f450d004100211d03402001280204220a4104490d022001280200221c28000021232001200a417c6a22223602042001201c41046a222036020020224102490d0220202f000021242001200a417a6a22223602042001202041026a36020020224102490d02201c2f000621252001200a41786a22223602042001201c41086a222036020020224102490d0220202f000021262001200a41766a22223602042001202041026a36020020224102490d02201c2f000a21272001200a41746a22223602042001201c410c6a222036020020224102490d0220202f000021282001200a41726a22223602042001202041026a36020020224102490d02201c2f000e21292001200a41706a22223602042001201c41106a222036020020224102490d0220202f0000212a2001200a416e6a22223602042001202041026a36020020224102490d02201c2f0012212b2001200a416c6a22223602042001201c41146a222036020020224102490d0220202f0000212c2001200a416a6a22223602042001202041026a36020020224102490d02201c2f0016212d2001200a41686a22223602042001201c41186a222036020020224102490d0220202f0000212e2001200a41666a22223602042001202041026a36020020224102490d02201c2f001a212f2001200a41646a22223602042001201c411c6a222036020020224102490d0220202f000021302001200a41626a22223602042001202041026a36020020224102490d02201c2f001e21222001200a41606a22203602042001201c41206a221c36020020204102490d02201c2f000021202001200a415e6a3602042001201c41026a3602000240201d200228029403470d0020024190036a201d4101108d012002280290032121200228029803211d0b2021201d41246c6a220a20203b0120200a20243b0104200a2023360200200a411e6a20223b0100200a411c6a20303b0100200a411a6a202f3b0100200a41186a202e3b0100200a41166a202d3b0100200a41146a202c3b0100200a41126a202b3b0100200a41106a202a3b0100200a410e6a20293b0100200a410c6a20283b0100200a410a6a20273b0100200a41086a20263b0100200a41066a20253b01002002201d41016a221d36029803201f417f6a221f0d000b20022802940321200b2021450d11200241386a200110c4012002280238450d010c100b2002280294032201450d10200141246c450d10202110350c100b200228023c2222200128020441286e220a200a20224b1bad42287e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421230c010b200a10332223450d020b4100211f200241003602980320022023360290032002200a41286e2224360294030240024002402022450d004100211f03402001280204220a4104490d022001280200221c28000021262001200a417c6a22253602042001201c41046a222436020020254102490d0220242f000021272001200a417a6a22253602042001202441026a36020020254102490d02201c2f000621282001200a41786a22253602042001201c41086a222436020020254102490d0220242f000021292001200a41766a22253602042001202441026a36020020254102490d02201c2f000a212a2001200a41746a22253602042001201c410c6a222436020020254102490d0220242f0000212b2001200a41726a22253602042001202441026a36020020254102490d02201c2f000e212c2001200a41706a22253602042001201c41106a222436020020254102490d0220242f0000212d2001200a416e6a22253602042001202441026a36020020254102490d02201c2f0012212e2001200a416c6a22253602042001201c41146a222436020020254102490d0220242f0000212f2001200a416a6a22253602042001202441026a36020020254102490d02201c2f001621302001200a41686a22253602042001201c41186a222436020020254102490d0220242f000021312001200a41666a22253602042001202441026a36020020254102490d02201c2f001a21322001200a41646a22253602042001201c411c6a222436020020254102490d0220242f000021332001200a41626a22253602042001202441026a36020020254102490d02201c2f001e21342001200a41606a22253602042001201c41206a222436020020254102490d0220242f000021352001200a415e6a22253602042001202441026a36020020254102490d02201c2f002221252001200a415c6a22243602042001201c41246a221c36020020244102490d02201c2f000021242001200a415a6a3602042001201c41026a3602000240201f200228029403470d0020024190036a201f4101109d012002280290032123200228029803211f0b2023201f41286c6a220a20243b0124200a20273b0104200a2026360200200a41226a20253b0100200a41206a20353b0100200a411e6a20343b0100200a411c6a20333b0100200a411a6a20323b0100200a41186a20313b0100200a41166a20303b0100200a41146a202f3b0100200a41126a202e3b0100200a41106a202d3b0100200a410e6a202c3b0100200a410c6a202b3b0100200a410a6a202a3b0100200a41086a20293b0100200a41066a20283b01002002201f41016a221f360298032022417f6a22220d000b20022802940321240b2023450d10200241306a200110c4012002280230450d010c0f0b2002280294032201450d0f200141286c450d0f202310350c0f0b200228023422252001280204412c6e220a200a20254b1bad422c7e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421260c010b200a10332226450d020b41002122200241003602880120022026360280012002200a412c6e22273602840102402025450d004100212203402001280204220a4104490d0e2001280200221c280000212b2001200a417c6a22283602042001201c41046a2227360200200241003a00b403200241003b01d00320284102490d0e20272f000021292001200a417a6a22283602042001202741026a360200200241003b01d00320284102490d0e201c2f000621282001200a41786a222a3602042001201c41086a2227360200200220293b019003200241013a00b403200220283b019203200241003b01d003202a4102490d0d20272f000021292001200a41766a22283602042001202741026a360200200241003b01d003202841014d0d0d201c2f000a21282001200a41746a222a3602042001201c410c6a2227360200200220293b019403200220283b019603200241023a00b403200241003b01d003202a4102490d0d20272f000021292001200a41726a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f000e21282001200a41706a222a3602042001201c41106a2227360200200220293b019803200241033a00b403200220283b019a03200241003b01d003202a4102490d0d20272f000021292001200a416e6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001221282001200a416c6a222a3602042001201c41146a2227360200200220293b019c03200241043a00b403200220283b019e03200241003b01d003202a4102490d0d20272f000021292001200a416a6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001621282001200a41686a222a3602042001201c41186a2227360200200220293b01a003200241053a00b403200220283b01a203200241003b01d003202a4102490d0d20272f000021292001200a41666a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001a21282001200a41646a222a3602042001201c411c6a2227360200200220293b01a403200241063a00b403200220283b01a603200241003b01d003202a4102490d0d20272f000021292001200a41626a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f001e21282001200a41606a222a3602042001201c41206a2227360200200220293b01a803200241073a00b403200220283b01aa03200241003b01d003202a4102490d0d20272f000021292001200a415e6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f002221282001200a415c6a222a3602042001201c41246a2227360200200220293b01ac03200241083a00b403200220283b01ae03200241003b01d003202a4102490d0d20272f000021292001200a415a6a22283602042001202741026a360200200241003b01d00320284102490d0d201c2f002621272001200a41586a22283602042001201c41286a221c360200200220293b01b003200241093a00b403200220273b01b203200241d0036a41206a20022802b0032227360200200241d0036a41186a20024190036a41186a290300220b370300200241d0036a41106a20024190036a41106a2903002212370300200241d0036a41086a20024190036a41086a2903002213370300200220022903900322143703d003200241d0026a41206a22292027360200200241d0026a41186a2227200b370300200241d0026a41106a222a2012370300200241d0026a41086a222c2013370300200220143703d00220284102490d0e201c2f000021282001200a41566a3602042001201c41026a36020020024190026a41106a202a290300220b370300200241d0016a41086a202c2903002212370300200241d0016a41106a200b370300200241d0016a41186a20272903002213370300200241d0016a41206a2029280200220a360200200220022903d00222143703d00120024190016a41206a221c200a36020020024190016a41186a2227201337030020024190016a41106a2229200b37030020024190016a41086a222a2012370300200220143703900102402022200228028401470d0020024180016a20224101109801200228028001212620022802880121220b20262022412c6c6a220a202b360200200a200229039001370204201c280200211c2027290300210b20292903002112202a2903002113200a20283b0128200a410c6a2013370200200a41146a2012370200200a411c6a200b370200200a41246a201c3602002002202241016a2222360288012025417f6a22250d000b20022802840121270b2026450d0d200241286a200110c40120022802280d0a200228022c2228200128020441306e220a200a20284b1bad42307e220b422088a70d00200ba7220a417f4c0d0002400240200a0d00410421290c010b200a10332229450d020b41002125200241003602880120022029360280012002200a41306e222a3602840102402028450d004100212503402001280204220a4104490d0b2001280200221c280000212e2001200a417c6a222b3602042001201c41046a222a360200200241003a00b803200241003b01d003202b4102490d0b202a2f0000212c2001200a417a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0b201c2f0006212b2001200a41786a222d3602042001201c41086a222a3602002002202c3b019003200241013a00b8032002202b3b019203200241003b01d003202d4102490d0a202a2f0000212c2001200a41766a222b3602042001202a41026a360200200241003b01d003202b41014d0d0a201c2f000a212b2001200a41746a222d3602042001201c410c6a222a3602002002202c3b0194032002202b3b019603200241023a00b803200241003b01d003202d4102490d0a202a2f0000212c2001200a41726a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f000e212b2001200a41706a222d3602042001201c41106a222a3602002002202c3b019803200241033a00b8032002202b3b019a03200241003b01d003202d4102490d0a202a2f0000212c2001200a416e6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0012212b2001200a416c6a222d3602042001201c41146a222a3602002002202c3b019c03200241043a00b8032002202b3b019e03200241003b01d003202d4102490d0a202a2f0000212c2001200a416a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0016212b2001200a41686a222d3602042001201c41186a222a3602002002202c3b01a003200241053a00b8032002202b3b01a203200241003b01d003202d4102490d0a202a2f0000212c2001200a41666a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f001a212b2001200a41646a222d3602042001201c411c6a222a3602002002202c3b01a403200241063a00b8032002202b3b01a603200241003b01d003202d4102490d0a202a2f0000212c2001200a41626a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f001e212b2001200a41606a222d3602042001201c41206a222a3602002002202c3b01a803200241073a00b8032002202b3b01aa03200241003b01d003202d4102490d0a202a2f0000212c2001200a415e6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0022212b2001200a415c6a222d3602042001201c41246a222a3602002002202c3b01ac03200241083a00b8032002202b3b01ae03200241003b01d003202d4102490d0a202a2f0000212c2001200a415a6a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f0026212b2001200a41586a222d3602042001201c41286a222a3602002002202c3b01b003200241093a00b8032002202b3b01b203200241003b01d003202d4102490d0a202a2f0000212c2001200a41566a222b3602042001202a41026a360200200241003b01d003202b4102490d0a201c2f002a212a2001200a41546a222b3602042001201c412c6a221c3602002002202c3b01b4032002410a3a00b8032002202a3b01b603200241d0036a41206a20024190036a41206a290300220b370300200241d0036a41186a20024190036a41186a2903002212370300200241d0036a41106a20024190036a41106a2903002213370300200241d0036a41086a20024190036a41086a2903002214370300200220022903900322363703d003200241d0026a41206a222a200b370300200241d0026a41186a222c2012370300200241d0026a41106a222d2013370300200241d0026a41086a222f2014370300200220363703d002202b4102490d0b201c2f0000212b2001200a41526a3602042001201c41026a36020020024190026a41106a202d290300220b370300200241d0016a41086a202f2903002212370300200241d0016a41106a200b370300200241d0016a41186a202c2903002213370300200241d0016a41206a202a2903002214370300200220022903d00222363703d00120024190016a41206a221c201437030020024190016a41186a222a201337030020024190016a41106a222c200b37030020024190016a41086a222d2012370300200220363703900102402025200228028401470d0020024180016a20254101108901200228028001212920022802880121250b2029202541306c6a220a202e360200200a200229039001370204201c290300210b202a2903002112202c2903002113202d2903002114200a202b3b012c200a410c6a2014370200200a41146a2013370200200a411c6a2012370200200a41246a200b3702002002202541016a2225360288012028417f6a22280d000b200228028401212a0b2029450d0a200241206a200110c40120022802200d072002280224222b200128020441346e220a200a202b4b1bad42347e220b422088a70d00200ba7220a417f4c0d0002400240200a0d004104212c0c010b200a1033222c450d020b4100212820024100360288012002202c360280012002200a41346e222d360284010240202b450d004100212803402001280204220a4104490d082001280200221c28000021312001200a417c6a222e3602042001201c41046a222d360200200241003a00bc03200241003b01d003202e4102490d08202d2f0000212f2001200a417a6a222e3602042001202d41026a360200200241003b01d003202e4102490d08201c2f0006212e2001200a41786a22303602042001201c41086a222d3602002002202f3b019003200241013a00bc032002202e3b019203200241003b01d00320304102490d07202d2f0000212f2001200a41766a222e3602042001202d41026a360200200241003b01d003202e41014d0d07201c2f000a212e2001200a41746a22303602042001201c410c6a222d3602002002202f3b0194032002202e3b019603200241023a00bc03200241003b01d00320304102490d07202d2f0000212f2001200a41726a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f000e212e2001200a41706a22303602042001201c41106a222d3602002002202f3b019803200241033a00bc032002202e3b019a03200241003b01d00320304102490d07202d2f0000212f2001200a416e6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0012212e2001200a416c6a22303602042001201c41146a222d3602002002202f3b019c03200241043a00bc032002202e3b019e03200241003b01d00320304102490d07202d2f0000212f2001200a416a6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0016212e2001200a41686a22303602042001201c41186a222d3602002002202f3b01a003200241053a00bc032002202e3b01a203200241003b01d00320304102490d07202d2f0000212f2001200a41666a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f001a212e2001200a41646a22303602042001201c411c6a222d3602002002202f3b01a403200241063a00bc032002202e3b01a603200241003b01d00320304102490d07202d2f0000212f2001200a41626a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f001e212e2001200a41606a22303602042001201c41206a222d3602002002202f3b01a803200241073a00bc032002202e3b01aa03200241003b01d00320304102490d07202d2f0000212f2001200a415e6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0022212e2001200a415c6a22303602042001201c41246a222d3602002002202f3b01ac03200241083a00bc032002202e3b01ae03200241003b01d00320304102490d07202d2f0000212f2001200a415a6a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f0026212e2001200a41586a22303602042001201c41286a222d3602002002202f3b01b003200241093a00bc032002202e3b01b203200241003b01d00320304102490d07202d2f0000212f2001200a41566a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f002a212e2001200a41546a22303602042001201c412c6a222d3602002002202f3b01b4032002410a3a00bc032002202e3b01b603200241003b01d00320304102490d07202d2f0000212f2001200a41526a222e3602042001202d41026a360200200241003b01d003202e4102490d07201c2f002e212d2001200a41506a222e3602042001201c41306a221c3602002002202f3b01b8032002410b3a00bc032002202d3b01ba03200241d0036a41286a20022802b803222d360200200241d0036a41206a20024190036a41206a290300220b370300200241d0036a41186a20024190036a41186a2903002212370300200241d0036a41106a20024190036a41106a2903002213370300200241d0036a41086a20024190036a41086a2903002214370300200220022903900322363703d003200241d0026a41286a222f202d360200200241d0026a41206a222d200b370300200241d0026a41186a22302012370300200241d0026a41106a22322013370300200241d0026a41086a22332014370300200220363703d002202e4102490d08201c2f0000212e2001200a414e6a3602042001201c41026a36020020024190026a41106a2032290300220b37030020024190026a41186a20302903002212370300200241d0016a41086a220a2033290300370300200241d0016a41106a221c200b370300200241d0016a41186a22302012370300200241d0016a41206a2232202d290300370300200241d0016a41286a222d202f280200360200200220022903d0023703d00120024190016a41286a222f202d28020036020020024190016a41206a222d203229030037030020024190016a41186a2232203029030037030020024190016a41106a2230201c29030037030020024190016a41086a221c200a290300370300200220022903d0013703900102402028200228028401470d0020024180016a2028410110a501200228028001212c20022802880121280b202c202841346c6a220a2031360200200a200229039001370204202f280200212f202d290300210b2032290300211220302903002113201c2903002114200a202e3b0130200a410c6a2014370200200a41146a2013370200200a411c6a2012370200200a41246a200b370200200a412c6a202f3602002002202841016a222836028801202b417f6a222b0d000b200228028401212d0b202c450d07200241186a200110c40120022802180d04200228021c222e200128020441386e220a200a202e4b1bad42387e220b422088a70d00200ba7220a417f4c0d0002400240200a0d004104212f0c010b200a1033222f450d020b4100212b20024100360288012002202f360280012002200a41386e2234360284010240202e450d004100212b03402001280204220a4104490d052001280200221c28000021342001200a417c6a22313602042001201c41046a2230360200200241003a00c003200241003b01d00320314102490d0520302f000021322001200a417a6a22313602042001203041026a360200200241003b01d00320314102490d05201c2f000621312001200a41786a22333602042001201c41086a2230360200200220323b019003200241013a00c003200220313b019203200241003b01d00320334102490d0420302f000021322001200a41766a22313602042001203041026a360200200241003b01d003203141014d0d04201c2f000a21312001200a41746a22333602042001201c410c6a2230360200200220323b019403200220313b019603200241023a00c003200241003b01d00320334102490d0420302f000021322001200a41726a22313602042001203041026a360200200241003b01d00320314102490d04201c2f000e21312001200a41706a22333602042001201c41106a2230360200200220323b019803200241033a00c003200220313b019a03200241003b01d00320334102490d0420302f000021322001200a416e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001221312001200a416c6a22333602042001201c41146a2230360200200220323b019c03200241043a00c003200220313b019e03200241003b01d00320334102490d0420302f000021322001200a416a6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001621312001200a41686a22333602042001201c41186a2230360200200220323b01a003200241053a00c003200220313b01a203200241003b01d00320334102490d0420302f000021322001200a41666a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001a21312001200a41646a22333602042001201c411c6a2230360200200220323b01a403200241063a00c003200220313b01a603200241003b01d00320334102490d0420302f000021322001200a41626a22313602042001203041026a360200200241003b01d00320314102490d04201c2f001e21312001200a41606a22333602042001201c41206a2230360200200220323b01a803200241073a00c003200220313b01aa03200241003b01d00320334102490d0420302f000021322001200a415e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002221312001200a415c6a22333602042001201c41246a2230360200200220323b01ac03200241083a00c003200220313b01ae03200241003b01d00320334102490d0420302f000021322001200a415a6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002621312001200a41586a22333602042001201c41286a2230360200200220323b01b003200241093a00c003200220313b01b203200241003b01d00320334102490d0420302f000021322001200a41566a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002a21312001200a41546a22333602042001201c412c6a2230360200200220323b01b4032002410a3a00c003200220313b01b603200241003b01d00320334102490d0420302f000021322001200a41526a22313602042001203041026a360200200241003b01d00320314102490d04201c2f002e21312001200a41506a22333602042001201c41306a2230360200200220323b01b8032002410b3a00c003200220313b01ba03200241003b01d00320334102490d0420302f000021322001200a414e6a22313602042001203041026a360200200241003b01d00320314102490d04201c2f003221302001200a414c6a22313602042001201c41346a221c360200200220323b01bc032002410c3a00c003200220303b01be03200241d0036a41286a20024190036a41286a290300220b370300200241d0036a41206a20024190036a41206a2903002212370300200241d0036a41186a20024190036a41186a2903002213370300200241d0036a41106a20024190036a41106a2903002214370300200241d0036a41086a20024190036a41086a2903002236370300200220022903900322373703d003200241d0026a41286a2230200b370300200241d0026a41206a22322012370300200241d0026a41186a22332013370300200241d0026a41106a22352014370300200241d0026a41086a22382036370300200220373703d00220314102490d05201c2f000021312001200a414a6a3602042001201c41026a36020020024190026a41106a2035290300220b37030020024190026a41186a20332903002212370300200241d0016a41086a220a2038290300370300200241d0016a41106a221c200b370300200241d0016a41186a22332012370300200241d0016a41206a22352032290300370300200241d0016a41286a22322030290300370300200220022903d0023703d00120024190016a41286a2230203229030037030020024190016a41206a2232203529030037030020024190016a41186a2235203329030037030020024190016a41106a2233201c29030037030020024190016a41086a221c200a290300370300200220022903d001370390010240202b200228028401470d0020024180016a202b410110a201200228028001212f200228028801212b0b202f202b41386c6a220a2034360200200a2002290390013702042030290300210b203229030021122035290300211320332903002114201c2903002136200a20313b0134200a410c6a2036370200200a41146a2014370200200a411c6a2013370200200a41246a2012370200200a412c6a200b3702002002202b41016a222b36028801202e417f6a222e0d000b20022802840121340b202f450d04200241106a200110c401024002400240024002400240024020022802100d00200228021422392001280204413c6e220a200a20394b1bad423c7e220b422088a70d07200ba7220a417f4c0d0702400240200a0d004104213a0c010b200a1033223a450d090b4100213b20024100360288012002203a360280012002200a413c6e2235360284010240024002402039450d004100213b4100213c0340200128020422354104490d03203c41016a213c417c211c20012802002238280000213d20012035417c6a3602042001203841046a3602004100210a200241003a00c403410021310340200241003b01d0032035201c6a222e4102490d032038200a6a223041046a2f000021322001202e417e6a222e3602042001203041066a2230360200200241003b01d003202e4102490d0320024190036a200a6a223320323b0100203341026a20302f00003b01002001202e417e6a3602042001203041026a3602002002203141016a22313a00c403201c417c6a211c200a41046a220a4134470d000b200241d0036a41306a222e20024190036a41306a280200360200200241d0036a41286a223020024190036a41286a290300370300200241d0036a41206a223220024190036a41206a290300370300200241d0036a41186a223320024190036a41186a290300370300200241d0036a41106a223e20024190036a41106a290300370300200241d0036a41086a223f20024190036a41086a29030037030020022002290390033703d003203141ff0171410d490d03200241d0026a41306a2231202e280200360200200241d0026a41286a222e2030290300370300200241d0026a41206a22302032290300370300200241d0026a41186a22322033290300370300200241d0026a41106a2233203e290300370300200241d0026a41086a223e203f290300370300200220022903d0033703d0022035201c6a41014d0d032038200a6a221c41046a2f0000213820012035200a6b417a6a3602042001201c41066a36020020024190026a41086a203e290300220b37030020024190026a41106a2033290300221237030020024190026a41186a2032290300221337030020024190026a41206a2030290300221437030020024190026a41286a202e290300223637030020024190026a41306a2031280200220a360200200220022903d002223737039002200241d0016a41306a221c200a360200200241d0016a41286a220a2036370300200241d0016a41206a222e2014370300200241d0016a41186a22302013370300200241d0016a41106a22312012370300200241d0016a41086a2232200b370300200220373703d00120024190016a41306a2233201c28020036020020024190016a41286a221c200a29030037030020024190016a41206a2235202e29030037030020024190016a41186a222e203029030037030020024190016a41106a2230203129030037030020024190016a41086a22312032290300370300200220022903d001370390010240203b200228028401470d0020024180016a203b410110aa01200228028001213a200228028801213b0b203a203b413c6c6a220a203d360200200a20022903900137020420332802002132201c290300210b20352903002112202e29030021132030290300211420312903002136200a20383b0138200a410c6a2036370200200a41146a2014370200200a411c6a2013370200200a41246a2012370200200a412c6a200b370200200a41346a20323602002002203b41016a223b36028801203c2039470d000b20022802840121350b203a450d02200241086a200110c40120022802080d05200228020c223d2001280204410676220a200a203d4b1b221c410674220a417f4c0d09201c0d034104213c0c040b203141ff0171450d00200241003a00c4030b200241d0016a41306a20024190026a41306a280200360200200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d002001413c6c450d00203a10350b2000410036020002402034450d00203441386c450d00202f10350b0240202d450d00202d41346c450d00202c10350b0240202a450d00202a41306c450d00202910350b02402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d1c0c1d0b200a1033223c450d060b4100213e20024100360288012002201c360284012002203c36028001024002400240203d450d004100213e4100213f0340200128020422384104490d03203f41016a213f417c211c20012802002239280000214020012038417c6a3602042001203941046a3602004100210a200241003a00c803410021310340200241003b01d0032038201c6a222e4102490d032039200a6a223041046a2f000021322001202e417e6a222e3602042001203041066a2230360200200241003b01d003202e4102490d0320024190036a200a6a223320323b0100203341026a20302f00003b01002001202e417e6a3602042001203041026a3602002002203141016a22313a00c803201c417c6a211c200a41046a220a4138470d000b200241d0036a41306a222e20024190036a41306a290300370300200241d0036a41286a223020024190036a41286a290300370300200241d0036a41206a223220024190036a41206a290300370300200241d0036a41186a223320024190036a41186a290300370300200241d0036a41106a224120024190036a41106a290300370300200241d0036a41086a224220024190036a41086a29030037030020022002290390033703d003203141ff0171410e490d03200241d0026a41306a2231202e290300370300200241d0026a41286a222e2030290300370300200241d0026a41206a22302032290300370300200241d0026a41186a22322033290300370300200241d0026a41106a22332041290300370300200241d0026a41086a22412042290300370300200220022903d0033703d0022038201c6a41014d0d032039200a6a221c41046a2f0000213920012038200a6b417a6a3602042001201c41066a36020020024190026a41086a2041290300220b37030020024190026a41106a2033290300221237030020024190026a41186a2032290300221337030020024190026a41206a2030290300221437030020024190026a41286a202e290300223637030020024190026a41306a20312903002237370300200220022903d002224337039002200241d0016a41306a220a2037370300200241d0016a41286a221c2036370300200241d0016a41206a222e2014370300200241d0016a41186a22302013370300200241d0016a41106a22312012370300200241d0016a41086a2232200b370300200220433703d00120024190016a41306a2233200a29030037030020024190016a41286a2238201c29030037030020024190016a41206a221c202e29030037030020024190016a41186a222e203029030037030020024190016a41106a2230203129030037030020024190016a41086a22312032290300370300200220022903d001370390010240203e200228028401470d0020024180016a203e410110a601200228028001213c200228028801213e0b203c203e4106746a220a2040360200200a2002290390013702042033290300210b20382903002112201c2903002113202e29030021142030290300213620312903002137200a20393b013c200a410c6a2037370200200a41146a2036370200200a411c6a2014370200200a41246a2013370200200a412c6a2012370200200a41346a200b3702002002203e41016a223e36028801203f203d470d000b200228028401211c0b203c450d022002200110c40120022802000d0520022802042240200128020441c4006e220a200a20404b1bad42c4007e220b422088a70d06200ba7220a417f4c0d06200a0d034104213f0c040b203141ff0171450d00200241003a00c8030b200241d0016a41306a20024190026a41306a290300370300200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a29030037030020022802840141ffffff1f71450d00203c10350b2000410036020002402035450d002035413c6c450d00203a10350b02402034450d00203441386c450d00202f10350b0240202d450d00202d41346c450d00202c10350b0240202a450d00202a41306c450d00202910350b02402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d190c1a0b200a1033223f450d030b20024100360288012002203f360280012002200a41c4006e360284010240024002402040450d0041002142410021410340200128020422394104490d03204141016a2141417c212e2001280200223d280000214420012039417c6a3602042001203d41046a3602004100210a200241003a00cc03410021320340200241003b01d0032039202e6a22304102490d03203d200a6a223141046a2f0000213320012030417e6a22303602042001203141066a2231360200200241003b01d00320304102490d0320024190036a200a6a223820333b0100203841026a20312f00003b010020012030417e6a3602042001203141026a3602002002203241016a22323a00cc03202e417c6a212e200a41046a220a413c470d000b200241d0036a41386a223020024190036a41386a280200360200200241d0036a41306a223120024190036a41306a290300370300200241d0036a41286a223320024190036a41286a290300370300200241d0036a41206a223820024190036a41206a290300370300200241d0036a41186a224520024190036a41186a290300370300200241d0036a41106a224620024190036a41106a290300370300200241d0036a41086a224720024190036a41086a29030037030020022002290390033703d003203241ff0171410f490d03200241d0026a41386a22322030280200360200200241d0026a41306a22302031290300370300200241d0026a41286a22312033290300370300200241d0026a41206a22332038290300370300200241d0026a41186a22382045290300370300200241d0026a41106a22452046290300370300200241d0026a41086a22462047290300370300200220022903d0033703d0022039202e6a41014d0d03203d200a6a222e41046a2f0000213d20012039200a6b417a6a3602042001202e41066a36020020024190026a41086a220a204629030037030020024190026a41106a222e204529030037030020024190026a41186a2239203829030037030020024190026a41206a2238203329030037030020024190026a41286a2233203129030037030020024190026a41306a2231203029030037030020024190026a41386a22302032280200360200200220022903d00237039002200241d0016a41086a200a290300220b370300200241d0016a41106a202e2903002212370300200241d0016a41186a20392903002213370300200241d0016a41206a20382903002214370300200241d0016a41286a20332903002236370300200241d0016a41306a20312903002237370300200241d0016a41386a2030280200220a36020020024190016a41086a222e200b37030020024190016a41106a2230201237030020024190016a41186a2231201337030020024190016a41206a2232201437030020024190016a41286a2233203637030020024190016a41306a2238203737030020024190016a41386a2239200a3602002002200229039002220b3703d0012002200b3703900102402042200228028401470d0020024180016a20424101109f01200228028001213f20022802880121420b203f204241c4006c6a220a2044360200200a200229039001370204203928020021392038290300210b20332903002112203229030021132031290300211420302903002136202e2903002137200a203d3b0140200a410c6a2037370200200a41146a2036370200200a411c6a2014370200200a41246a2013370200200a412c6a2012370200200a41346a200b370200200a413c6a20393602002002204241016a22423602880120412040470d000b0b203f450d02200229028401210b2000200536020420002006360200200041b8016a200b370200200041b4016a203f360200200041b0016a203e360200200041ac016a201c360200200041a8016a203c360200200041a4016a203b360200200041a0016a20353602002000419c016a203a36020020004198016a202b36020020004194016a203436020020004190016a202f3602002000418c016a202836020020004188016a202d36020020004184016a202c36020020004180016a2025360200200041fc006a202a360200200041f8006a2029360200200041f4006a2022360200200041f0006a2027360200200041ec006a2026360200200041e8006a201f360200200041e4006a2024360200200041e0006a2023360200200041dc006a201d360200200041d8006a2020360200200041d4006a2021360200200041d0006a2019360200200041cc006a2009360200200041c8006a201e360200200041c4006a2017360200200041c0006a201a3602002000413c6a201b360200200041386a2010360200200041346a2016360200200041306a20183602002000412c6a200e360200200041286a2011360200200041246a2015360200200041206a20083602002000411c6a2003360200200041186a200f360200200041146a2007360200200041106a200d3602002000410c6a200c360200200041086a20043602000c1a0b203241ff0171450d00200241003a00cc030b200241d0016a41386a20024190026a41386a280200360200200241d0016a41306a20024190026a41306a290300370300200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141c4006c450d00203f10350b200041003602000240201c41ffffff1f71450d00203c10350b02402035450d002035413c6c450d00203a10350b02402034450d00203441386c450d00202f10350b0240202d450d00202d41346c450d00202c10350b0240202a450d00202a41306c450d00202910350b02402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff0171450d170c160b1044000b1045000b200241003a00c0030b200241d0016a41286a20024190026a41286a290300370300200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141386c450d00202f10350b200041003602000240202d450d00202d41346c450d00202c10350b0240202a450d00202a41306c450d00202910350b02402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d110c120b200241003a00bc030b200241d0016a41286a20024190026a41286a280200360200200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141346c450d00202c10350b200041003602000240202a450d00202a41306c450d00202910350b02402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d0e0c0f0b200241003a00b8030b200241d0016a41206a20024190026a41206a290300370300200241d0016a41186a20024190026a41186a2903003703002002280284012201450d00200141306c450d00202910350b2000410036020002402027450d002027412c6c450d00202610350b02402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d0b0c0c0b200241003a00b4030b200241d0016a41206a20024190026a41206a280200360200200241d0016a41186a20024190026a41186a2903003703002002280284012201450d002001412c6c450d00202610350b2000410036020002402024450d00202441286c450d00202310350b02402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d080c090b2000410036020002402020450d00202041246c450d00202110350b0240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d070c080b200041003602000240200941ffffff3f71450d00201e10350b0240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d060c070b200041003602000240201a450d00201a411c6c450d00201b10350b02402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d050c060b2000410036020002402016450d00201641186c450d00201810350b02402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d040c050b2000410036020002402011450d00201141146c450d00201510350b0240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d030c040b200041003602000240200341ffffffff0071450d00200f10350b0240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d020c030b200041003602000240200d450d00200d410c6c450d00200c10350b200541ffffffff01710d010c020b20004100360200200541ffffffff0171450d010b200610350b20024190046a24000bbe0102017f017e0240200041046a280200220320016b20024f0d000240024002400240200120026a22022001490d00200341017422012002200120024b1bad421c7e2204422088a70d002004a722014100480d00024020030d0020010d02410421020c040b200028020021022003411c6c22032001460d03024020030d0020010d02410421020c040b20022003200110372202450d020c030b103e000b2001103322020d010b103c000b20002002360200200041046a2001411c6e3602000b0bf70301017f0240200041046a28020041ffffffff0171450d00200028020010350b0240200041106a2802002201450d002001410c6c450d00200028020c10350b02402000411c6a28020041ffffffff0071450d00200028021810350b0240200041286a2802002201450d00200141146c450d00200028022410350b0240200041346a2802002201450d00200141186c450d00200028023010350b0240200041c0006a2802002201450d002001411c6c450d00200028023c10350b0240200041cc006a28020041ffffff3f71450d00200028024810350b0240200041d8006a2802002201450d00200141246c450d00200028025410350b0240200041e4006a2802002201450d00200141286c450d00200028026010350b0240200041f0006a2802002201450d002001412c6c450d00200028026c10350b0240200041fc006a2802002201450d00200141306c450d00200028027810350b024020004188016a2802002201450d00200141346c450d0020002802840110350b024020004194016a2802002201450d00200141386c450d0020002802900110350b0240200041a0016a2802002201450d002001413c6c450d00200028029c0110350b0240200041ac016a28020041ffffff1f71450d0020002802a80110350b0240200041b8016a2802002201450d00200141c4006c450d0020002802b40110350b0be49301032a7f047e247f23004180026b22042400200441b8016a4200370300200441b0016a22054280808080c000370300200441a0016a420037030020044198016a22064280808080c00037030020044188016a420037030020044180016a22074280808080c000370300200441f0006a4200370300200441e8006a22084280808080c000370300200441d8006a4200370300200441d0006a22094280808080c000370300200441c0006a4200370300200441386a220a4280808080c000370300200441286a4200370300200441206a220b4280808080c000370300200441106a4200370300200442043703a8012004420437039001200442043703782004420437036020044204370348200442043703302004420437031820044280808080c000370308200442043703002001280200220c2001280208220d412c6c220e6a210f20012802042110200c2101024002400240200d450d00200441bc016a2111200441b4016a2112200441a8016a2113200441a4016a21142004419c016a211520044190016a21162004418c016a211720044184016a2118200441f8006a2119200441f4006a211a200441ec006a211b200441e0006a211c200441dc006a211d200441d4006a211e200441c8006a211f200441c4006a21202004413c6a2121200441306a21222004412c6a2123200441246a2124200441186a2125200441146a21262004410c6a2127200441086a2128200e41546a210d200441e0016a41086a2129200441e0016a41106a212a200441e0016a41186a212b200c210e0340200e280208212c200e280204212d2029200e41146a290200370300202a200e411c6a290200370300202b200e41246a2902003703002004200e29020c3703e001200e412c6a2101200e280200220e450d01200441c0016a41186a202b290300222e370300200441c0016a41106a202a290300222f370300200441c0016a41086a20292903002230370300200420042903e00122313703c001202b202e370300202a202f37030020292030370300200420313703e001024002400240202c41104d0d00410121320c010b024002400240024002400240024002400240024002400240024002400240024002400240202c0e11000102030405060708090a0b0c0d0e0f10000b0240202d450d00202d41226c450d00200e10350b2001200f460d150c120b4102213220022802082233450d102002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c120b0b20032802082234450d102003280200212c203441057421354100213402400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c120b0b2034418080044f0d1002402004280208222c2004280204470d002004202c41011090012004280208212c0b2004280200202c4103746a222c20343b0104202c20333602002028212c0c0f0b4102213220022802082233450d0f2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c110b0b2003280208222c450d0f41002135202c4105742237213620032802002234212c02400340200e202c460d012035202c200e412010a00822384100476a21352038450d01202c41206a212c203641606a22360d000c110b0b203541ffff034b0d0f200e41226a2136200e2f012021394100212c0240034020362034460d01202c20342036412010a00822384100476a212c2038450d01203441206a2134203741606a22370d000c110b0b202c41ffff034b0d0f0240200428021422322004280210470d00202720324101108701200428021421320b200428020c2032410c6c6a2232202c3b0108203220353b010420322033360200203241066a20393b01002026212c0c0e0b4102213220022802082233450d0e2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c100b0b2003280208222c450d0e41002134202c410574223a213520032802002238212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c100b0b203441ffff034b0d0e200e41226a2136200e2f0120213b41002135203a21372038212c024003402036202c460d012035202c2036412010a00822394100476a21352039450d01202c41206a212c203741606a22370d000c100b0b203541ffff034b0d0e200e41c4006a2136200e41c2006a2f010021394100212c0240034020362038460d01202c20382036412010a00822374100476a212c2037450d01203841206a2138203a41606a223a0d000c100b0b202c41ffff034b0d0e024020042802202232200428021c470d00202520324101108c01200428022021320b200428021820324104746a2232202c3b010c203220343b0104203220333602002032410a6a20393b0100203241086a20353b0100203241066a203b3b0100200b212c0c0d0b4102213220022802082233450d0d2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0f0b0b2003280208222c450d0d41002134202c410574223b213520032802002237212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0f0b0b203441ffff034b0d0d200e41226a2136200e2f0120213c41002135203b21382037212c024003402036202c460d012035202c2036412010a00822394100476a21352039450d01202c41206a212c203841606a22380d000c0f0b0b203541ffff034b0d0d200e41c4006a2138200e41c2006a2f0100213d41002136203b21392037212c024003402038202c460d012036202c2038412010a008223a4100476a2136203a450d01202c41206a212c203941606a22390d000c0f0b0b203641ffff034b0d0d200e41e6006a2138200e41e4006a2f0100213a4100212c0240034020382037460d01202c20372038412010a00822394100476a212c2039450d01203741206a2137203b41606a223b0d000c0f0b0b202c41ffff034b0d0d0240200428022c22322004280228470d00202420324101109901200428022c21320b2004280224203241146c6a2232202c3b0110203220343b0104203220333602002032410e6a203a3b01002032410c6a20363b01002032410a6a203d3b0100203241086a20353b0100203241066a203c3b01002023212c0c0c0b4102213220022802082233450d0c2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0e0b0b2003280208222c450d0c41002134202c410574223b213520032802002239212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0e0b0b203441ffff034b0d0c200e41226a2136200e2f0120213d41002135203b21382039212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c0e0b0b203541ffff034b0d0c200e41c4006a2138200e41c2006a2f0100213e41002136203b21372039212c024003402038202c460d012036202c2038412010a008223a4100476a2136203a450d01202c41206a212c203741606a22370d000c0e0b0b203641ffff034b0d0c200e41e6006a2137200e41e4006a2f0100213f41002138203b213a2039212c024003402037202c460d012038202c2037412010a008223c4100476a2138203c450d01202c41206a212c203a41606a223a0d000c0e0b0b203841ffff034b0d0c200e4188016a2137200e4186016a2f0100213c4100212c0240034020372039460d01202c20392037412010a008223a4100476a212c203a450d01203941206a2139203b41606a223b0d000c0e0b0b202c41ffff034b0d0c0240200428023822322004280234470d00202220324101109701200428023821320b2004280230203241186c6a2232202c3b0114203220343b010420322033360200203241126a203c3b0100203241106a20383b01002032410e6a203f3b01002032410c6a20363b01002032410a6a203e3b0100203241086a20353b0100203241066a203d3b0100200a212c0c0b0b4102213220022802082233450d0b2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0d0b0b2003280208222c450d0b41002134202c410574223c21352003280200223a212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0d0b0b203441ffff034b0d0b200e41226a2136200e2f0120213e41002135203c2138203a212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c0d0b0b203541ffff034b0d0b200e41c4006a2138200e41c2006a2f0100213f41002136203c2137203a212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c0d0b0b203641ffff034b0d0b200e41e6006a2137200e41e4006a2f0100214041002138203c2139203a212c024003402037202c460d012038202c2037412010a008223b4100476a2138203b450d01202c41206a212c203941606a22390d000c0d0b0b203841ffff034b0d0b200e4188016a2139200e4186016a2f0100214141002137203c213b203a212c024003402039202c460d012037202c2039412010a008223d4100476a2137203d450d01202c41206a212c203b41606a223b0d000c0d0b0b203741ffff034b0d0b200e41aa016a2139200e41a8016a2f0100213d4100212c024003402039203a460d01202c203a2039412010a008223b4100476a212c203b450d01203a41206a213a203c41606a223c0d000c0d0b0b202c41ffff034b0d0b0240200428024422322004280240470d0020212032410110f901200428024421320b200428023c2032411c6c6a2232202c3b0118203220343b010420322033360200203241166a203d3b0100203241146a20373b0100203241126a20413b0100203241106a20383b01002032410e6a20403b01002032410c6a20363b01002032410a6a203f3b0100203241086a20353b0100203241066a203e3b01002020212c0c0a0b4102213220022802082233450d0a2002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0c0b0b2003280208222c450d0a41002134202c410574223c21352003280200223a212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0c0b0b203441ffff034b0d0a200e41226a2136200e2f0120213f41002135203c2138203a212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c0c0b0b203541ffff034b0d0a200e41c4006a2138200e41c2006a2f0100214041002136203c2137203a212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c0c0b0b203641ffff034b0d0a200e41e6006a2137200e41e4006a2f0100214141002138203c2139203a212c024003402037202c460d012038202c2037412010a008223b4100476a2138203b450d01202c41206a212c203941606a22390d000c0c0b0b203841ffff034b0d0a200e4188016a2139200e4186016a2f0100214241002137203c213b203a212c024003402039202c460d012037202c2039412010a008223d4100476a2137203d450d01202c41206a212c203b41606a223b0d000c0c0b0b203741ffff034b0d0a200e41aa016a213b200e41a8016a2f0100214341002139203c213d203a212c02400340203b202c460d012039202c203b412010a008223e4100476a2139203e450d01202c41206a212c203d41606a223d0d000c0c0b0b203941ffff034b0d0a200e41cc016a213b200e41ca016a2f0100213e4100212c02400340203b203a460d01202c203a203b412010a008223d4100476a212c203d450d01203a41206a213a203c41606a223c0d000c0c0b0b202c41ffff034b0d0a024020042802502232200428024c470d00201f20324101109101200428025021320b200428024820324105746a2232202c3b011c203220343b0104203220333602002032411a6a203e3b0100203241186a20393b0100203241166a20433b0100203241146a20373b0100203241126a20423b0100203241106a20383b01002032410e6a20413b01002032410c6a20363b01002032410a6a20403b0100203241086a20353b0100203241066a203f3b01002009212c0c090b4102213220022802082233450d092002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0b0b0b2003280208222c450d0941002134202c410574223d21352003280200223b212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0b0b0b203441ffff034b0d09200e41226a2136200e2f0120214041002135203d2138203b212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c0b0b0b203541ffff034b0d09200e41c4006a2138200e41c2006a2f0100214141002136203d2137203b212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c0b0b0b203641ffff034b0d09200e41e6006a2137200e41e4006a2f0100214241002138203d2139203b212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a22390d000c0b0b0b203841ffff034b0d09200e4188016a2139200e4186016a2f0100214341002137203d213a203b212c024003402039202c460d012037202c2039412010a008223c4100476a2137203c450d01202c41206a212c203a41606a223a0d000c0b0b0b203741ffff034b0d09200e41aa016a213a200e41a8016a2f0100214441002139203d213c203b212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203c41606a223c0d000c0b0b0b203941ffff034b0d09200e41cc016a213c200e41ca016a2f010021454100213a203d213e203b212c02400340203c202c460d01203a202c203c412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c0b0b0b203a41ffff034b0d09200e41ee016a213c200e41ec016a2f0100213f4100212c02400340203c203b460d01202c203b203c412010a008223e4100476a212c203e450d01203b41206a213b203d41606a223d0d000c0b0b0b202c41ffff034b0d090240200428025c22322004280258470d00201e20324101108d01200428025c21320b2004280254203241246c6a2232202c3b0120203220343b0104203220333602002032411e6a203f3b01002032411c6a203a3b01002032411a6a20453b0100203241186a20393b0100203241166a20443b0100203241146a20373b0100203241126a20433b0100203241106a20383b01002032410e6a20423b01002032410c6a20363b01002032410a6a20413b0100203241086a20353b0100203241066a20403b0100201d212c0c080b4102213220022802082233450d082002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c0a0b0b2003280208222c450d0841002134202c410574223d21352003280200223b212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c0a0b0b203441ffff034b0d08200e41226a2136200e2f0120214141002135203d2138203b212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c0a0b0b203541ffff034b0d08200e41c4006a2138200e41c2006a2f0100214241002136203d2137203b212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c0a0b0b203641ffff034b0d08200e41e6006a2137200e41e4006a2f0100214341002138203d2139203b212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a22390d000c0a0b0b203841ffff034b0d08200e4188016a2139200e4186016a2f0100214441002137203d213a203b212c024003402039202c460d012037202c2039412010a008223c4100476a2137203c450d01202c41206a212c203a41606a223a0d000c0a0b0b203741ffff034b0d08200e41aa016a213a200e41a8016a2f0100214541002139203d213c203b212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203c41606a223c0d000c0a0b0b203941ffff034b0d08200e41cc016a213c200e41ca016a2f010021464100213a203d213e203b212c02400340203c202c460d01203a202c203c412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c0a0b0b203a41ffff034b0d08200e41ee016a213e200e41ec016a2f010021474100213c203d213f203b212c02400340203e202c460d01203c202c203e412010a00822404100476a213c2040450d01202c41206a212c203f41606a223f0d000c0a0b0b203c41ffff034b0d08200e4190026a213e200e418e026a2f010021404100212c02400340203e203b460d01202c203b203e412010a008223f4100476a212c203f450d01203b41206a213b203d41606a223d0d000c0a0b0b202c41ffff034b0d080240200428026822322004280264470d00201c20324101109d01200428026821320b2004280260203241286c6a2232202c3b0124203220343b010420322033360200203241226a20403b0100203241206a203c3b01002032411e6a20473b01002032411c6a203a3b01002032411a6a20463b0100203241186a20393b0100203241166a20453b0100203241146a20373b0100203241126a20443b0100203241106a20383b01002032410e6a20433b01002032410c6a20363b01002032410a6a20423b0100203241086a20353b0100203241066a20413b01002008212c0c070b4102213220022802082233450d072002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c090b0b2003280208222c450d0741002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c090b0b203441ffff034b0d07200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c090b0b203541ffff034b0d07200e41c4006a2138200e41c2006a2f0100214341002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c090b0b203641ffff034b0d07200e41e6006a2137200e41e4006a2f0100214441002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a22390d000c090b0b203841ffff034b0d07200e4188016a2139200e4186016a2f0100214541002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a0d000c090b0b203741ffff034b0d07200e41aa016a213a200e41a8016a2f0100214641002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b0d000c090b0b203941ffff034b0d07200e41cc016a213b200e41ca016a2f010021474100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c090b0b203a41ffff034b0d07200e41ee016a213e200e41ec016a2f010021484100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f0d000c090b0b203b41ffff034b0d07200e4190026a213f200e418e026a2f010021494100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a22400d000c090b0b203e41ffff034b0d07200e41b2026a213f200e41b0026a2f010021414100212c02400340203f203c460d01202c203c203f412010a00822404100476a212c2040450d01203c41206a213c203d41606a223d0d000c090b0b202c41ffff034b0d070240200428027422322004280270470d00201b20324101109801200428027421320b200428026c2032412c6c6a2232202c3b0128203220343b010420322033360200203241266a20413b0100203241246a203e3b0100203241226a20493b0100203241206a203b3b01002032411e6a20483b01002032411c6a203a3b01002032411a6a20473b0100203241186a20393b0100203241166a20463b0100203241146a20373b0100203241126a20453b0100203241106a20383b01002032410e6a20443b01002032410c6a20363b01002032410a6a20433b0100203241086a20353b0100203241066a20423b0100201a212c0c060b4102213220022802082233450d062002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a22340d000c080b0b2003280208222c450d0641002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a22350d000c080b0b203441ffff034b0d06200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a22380d000c080b0b203541ffff034b0d06200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a22370d000c080b0b203641ffff034b0d06200e41e6006a2137200e41e4006a2f0100214541002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a22390d000c080b0b203841ffff034b0d06200e4188016a2139200e4186016a2f0100214641002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a0d000c080b0b203741ffff034b0d06200e41aa016a213a200e41a8016a2f0100214741002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b0d000c080b0b203941ffff034b0d06200e41cc016a213b200e41ca016a2f010021484100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e0d000c080b0b203a41ffff034b0d06200e41ee016a213e200e41ec016a2f010021494100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f0d000c080b0b203b41ffff034b0d06200e4190026a213f200e418e026a2f0100214a4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a22400d000c080b0b203e41ffff034b0d06200e41b2026a2140200e41b0026a2f0100214b4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d080c000b0b203f41ffff034b0d06200e41d4026a2140200e41d2026a2f010021434100212c024003402040203c460d01202c203c2040412010a00822414100476a212c2041450d01203c41206a213c203d41606a223d450d080c000b0b202c41ffff034b0d0602402004280280012232200428027c470d0020192032410110890120042802800121320b2004280278203241306c6a2232202c3b012c203220343b0104203220333602002032412a6a20433b0100203241286a203f3b0100203241266a204b3b0100203241246a203e3b0100203241226a204a3b0100203241206a203b3b01002032411e6a20493b01002032411c6a203a3b01002032411a6a20483b0100203241186a20393b0100203241166a20473b0100203241146a20373b0100203241126a20463b0100203241106a20383b01002032410e6a20453b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002007212c0c050b4102213220022802082233450d052002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a2234450d070c000b0b2003280208222c450d0541002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a2235450d070c000b0b203441ffff034b0d05200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a2238450d070c000b0b203541ffff034b0d05200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a2237450d070c000b0b203641ffff034b0d05200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a2239450d070c000b0b203841ffff034b0d05200e4188016a2139200e4186016a2f0100214741002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a450d070c000b0b203741ffff034b0d05200e41aa016a213a200e41a8016a2f0100214841002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b450d070c000b0b203941ffff034b0d05200e41cc016a213b200e41ca016a2f010021494100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e450d070c000b0b203a41ffff034b0d05200e41ee016a213e200e41ec016a2f0100214a4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f450d070c000b0b203b41ffff034b0d05200e4190026a213f200e418e026a2f0100214b4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a2240450d070c000b0b203e41ffff034b0d05200e41b2026a2140200e41b0026a2f0100214c4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d070c000b0b203f41ffff034b0d05200e41d4026a2141200e41d2026a2f0100214d41002140203d2143203c212c024003402041202c460d012040202c2041412010a00822454100476a21402045450d01202c41206a212c204341606a2243450d070c000b0b204041ffff034b0d05200e41f6026a2141200e41f4026a2f010021454100212c024003402041203c460d01202c203c2041412010a00822434100476a212c2043450d01203c41206a213c203d41606a223d450d070c000b0b202c41ffff034b0d050240200428028c012232200428028801470d0020182032410110a501200428028c0121320b200428028401203241346c6a2232202c3b0130203220343b0104203220333602002032412e6a20453b01002032412c6a20403b01002032412a6a204d3b0100203241286a203f3b0100203241266a204c3b0100203241246a203e3b0100203241226a204b3b0100203241206a203b3b01002032411e6a204a3b01002032411c6a203a3b01002032411a6a20493b0100203241186a20393b0100203241166a20483b0100203241146a20373b0100203241126a20473b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002017212c0c040b4102213220022802082233450d042002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a2234450d060c000b0b2003280208222c450d0441002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a2235450d060c000b0b203441ffff034b0d04200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a2238450d060c000b0b203541ffff034b0d04200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a2237450d060c000b0b203641ffff034b0d04200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a2239450d060c000b0b203841ffff034b0d04200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a450d060c000b0b203741ffff034b0d04200e41aa016a213a200e41a8016a2f0100214941002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b450d060c000b0b203941ffff034b0d04200e41cc016a213b200e41ca016a2f0100214a4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e450d060c000b0b203a41ffff034b0d04200e41ee016a213e200e41ec016a2f0100214b4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f450d060c000b0b203b41ffff034b0d04200e4190026a213f200e418e026a2f0100214c4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a2240450d060c000b0b203e41ffff034b0d04200e41b2026a2140200e41b0026a2f0100214d4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d060c000b0b203f41ffff034b0d04200e41d4026a2141200e41d2026a2f0100214e41002140203d2143203c212c024003402041202c460d012040202c2041412010a00822454100476a21402045450d01202c41206a212c204341606a2243450d060c000b0b204041ffff034b0d04200e41f6026a2143200e41f4026a2f0100214f41002141203d2145203c212c024003402043202c460d012041202c2043412010a00822474100476a21412047450d01202c41206a212c204541606a2245450d060c000b0b204141ffff034b0d04200e4198036a2143200e4196036a2f010021474100212c024003402043203c460d01202c203c2043412010a00822454100476a212c2045450d01203c41206a213c203d41606a223d450d060c000b0b202c41ffff034b0d0402402004280298012232200428029401470d0020162032410110a20120042802980121320b200428029001203241386c6a2232202c3b0134203220343b010420322033360200203241326a20473b0100203241306a20413b01002032412e6a204f3b01002032412c6a20403b01002032412a6a204e3b0100203241286a203f3b0100203241266a204d3b0100203241246a203e3b0100203241226a204c3b0100203241206a203b3b01002032411e6a204b3b01002032411c6a203a3b01002032411a6a204a3b0100203241186a20393b0100203241166a20493b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002006212c0c030b4102213220022802082233450d032002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a2234450d050c000b0b2003280208222c450d0341002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a2235450d050c000b0b203441ffff034b0d03200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a2238450d050c000b0b203541ffff034b0d03200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a2237450d050c000b0b203641ffff034b0d03200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a2239450d050c000b0b203841ffff034b0d03200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a450d050c000b0b203741ffff034b0d03200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b450d050c000b0b203941ffff034b0d03200e41cc016a213b200e41ca016a2f0100214b4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e450d050c000b0b203a41ffff034b0d03200e41ee016a213e200e41ec016a2f0100214c4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f450d050c000b0b203b41ffff034b0d03200e4190026a213f200e418e026a2f0100214d4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a2240450d050c000b0b203e41ffff034b0d03200e41b2026a2140200e41b0026a2f0100214e4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d050c000b0b203f41ffff034b0d03200e41d4026a2141200e41d2026a2f0100214f41002140203d2143203c212c024003402041202c460d012040202c2041412010a00822454100476a21402045450d01202c41206a212c204341606a2243450d050c000b0b204041ffff034b0d03200e41f6026a2143200e41f4026a2f0100215041002141203d2145203c212c024003402043202c460d012041202c2043412010a00822474100476a21412047450d01202c41206a212c204541606a2245450d050c000b0b204141ffff034b0d03200e4198036a2145200e4196036a2f0100215141002143203d2147203c212c024003402045202c460d012043202c2045412010a00822494100476a21432049450d01202c41206a212c204741606a2247450d050c000b0b204341ffff034b0d03200e41ba036a2145200e41b8036a2f010021494100212c024003402045203c460d01202c203c2045412010a00822474100476a212c2047450d01203c41206a213c203d41606a223d450d050c000b0b202c41ffff034b0d03024020042802a401223220042802a001470d0020152032410110aa0120042802a40121320b200428029c012032413c6c6a2232202c3b0138203220343b010420322033360200203241366a20493b0100203241346a20433b0100203241326a20513b0100203241306a20413b01002032412e6a20503b01002032412c6a20403b01002032412a6a204f3b0100203241286a203f3b0100203241266a204e3b0100203241246a203e3b0100203241226a204d3b0100203241206a203b3b01002032411e6a204c3b01002032411c6a203a3b01002032411a6a204b3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002014212c0c020b4102213220022802082233450d022002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a2234450d040c000b0b2003280208222c450d0241002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a2235450d040c000b0b203441ffff034b0d02200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a2238450d040c000b0b203541ffff034b0d02200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a2237450d040c000b0b203641ffff034b0d02200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a2239450d040c000b0b203841ffff034b0d02200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a450d040c000b0b203741ffff034b0d02200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b450d040c000b0b203941ffff034b0d02200e41cc016a213b200e41ca016a2f0100214c4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e450d040c000b0b203a41ffff034b0d02200e41ee016a213e200e41ec016a2f0100214d4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f450d040c000b0b203b41ffff034b0d02200e4190026a213f200e418e026a2f0100214e4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a2240450d040c000b0b203e41ffff034b0d02200e41b2026a2140200e41b0026a2f0100214f4100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d040c000b0b203f41ffff034b0d02200e41d4026a2141200e41d2026a2f0100215041002140203d2143203c212c024003402041202c460d012040202c2041412010a00822454100476a21402045450d01202c41206a212c204341606a2243450d040c000b0b204041ffff034b0d02200e41f6026a2143200e41f4026a2f0100215141002141203d2145203c212c024003402043202c460d012041202c2043412010a00822474100476a21412047450d01202c41206a212c204541606a2245450d040c000b0b204141ffff034b0d02200e4198036a2145200e4196036a2f0100215241002143203d2147203c212c024003402045202c460d012043202c2045412010a00822494100476a21432049450d01202c41206a212c204741606a2247450d040c000b0b204341ffff034b0d02200e41ba036a2147200e41b8036a2f0100215341002145203d2149203c212c024003402047202c460d012045202c2047412010a008224b4100476a2145204b450d01202c41206a212c204941606a2249450d040c000b0b204541ffff034b0d02200e41dc036a2147200e41da036a2f0100214b4100212c024003402047203c460d01202c203c2047412010a00822494100476a212c2049450d01203c41206a213c203d41606a223d450d040c000b0b202c41ffff034b0d02024020042802b001223220042802ac01470d0020132032410110a60120042802b00121320b20042802a80120324106746a2232202c3b013c203220343b0104203220333602002032413a6a204b3b0100203241386a20453b0100203241366a20533b0100203241346a20433b0100203241326a20523b0100203241306a20413b01002032412e6a20513b01002032412c6a20403b01002032412a6a20503b0100203241286a203f3b0100203241266a204f3b0100203241246a203e3b0100203241226a204e3b0100203241206a203b3b01002032411e6a204d3b01002032411c6a203a3b01002032411a6a204c3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002005212c0c010b4102213220022802082233450d012002280200212c203341057421344100213302400340200441e0016a202c460d012033202c200441e0016a412010a00822354100476a21332035450d01202c41206a212c203441606a2234450d030c000b0b2003280208222c450d0141002134202c410574223d21352003280200223c212c02400340200e202c460d012034202c200e412010a00822364100476a21342036450d01202c41206a212c203541606a2235450d030c000b0b203441ffff034b0d01200e41226a2136200e2f0120214241002135203d2138203c212c024003402036202c460d012035202c2036412010a00822374100476a21352037450d01202c41206a212c203841606a2238450d030c000b0b203541ffff034b0d01200e41c4006a2138200e41c2006a2f0100214441002136203d2137203c212c024003402038202c460d012036202c2038412010a00822394100476a21362039450d01202c41206a212c203741606a2237450d030c000b0b203641ffff034b0d01200e41e6006a2137200e41e4006a2f0100214641002138203d2139203c212c024003402037202c460d012038202c2037412010a008223a4100476a2138203a450d01202c41206a212c203941606a2239450d030c000b0b203841ffff034b0d01200e4188016a2139200e4186016a2f0100214841002137203d213a203c212c024003402039202c460d012037202c2039412010a008223b4100476a2137203b450d01202c41206a212c203a41606a223a450d030c000b0b203741ffff034b0d01200e41aa016a213a200e41a8016a2f0100214a41002139203d213b203c212c02400340203a202c460d012039202c203a412010a008223e4100476a2139203e450d01202c41206a212c203b41606a223b450d030c000b0b203941ffff034b0d01200e41cc016a213b200e41ca016a2f0100214c4100213a203d213e203c212c02400340203b202c460d01203a202c203b412010a008223f4100476a213a203f450d01202c41206a212c203e41606a223e450d030c000b0b203a41ffff034b0d01200e41ee016a213e200e41ec016a2f0100214e4100213b203d213f203c212c02400340203e202c460d01203b202c203e412010a00822404100476a213b2040450d01202c41206a212c203f41606a223f450d030c000b0b203b41ffff034b0d01200e4190026a213f200e418e026a2f0100214f4100213e203d2140203c212c02400340203f202c460d01203e202c203f412010a00822414100476a213e2041450d01202c41206a212c204041606a2240450d030c000b0b203e41ffff034b0d01200e41b2026a2140200e41b0026a2f010021504100213f203d2141203c212c024003402040202c460d01203f202c2040412010a00822434100476a213f2043450d01202c41206a212c204141606a2241450d030c000b0b203f41ffff034b0d01200e41d4026a2141200e41d2026a2f0100215141002140203d2143203c212c024003402041202c460d012040202c2041412010a00822454100476a21402045450d01202c41206a212c204341606a2243450d030c000b0b204041ffff034b0d01200e41f6026a2143200e41f4026a2f0100215241002141203d2145203c212c024003402043202c460d012041202c2043412010a00822474100476a21412047450d01202c41206a212c204541606a2245450d030c000b0b204141ffff034b0d01200e4198036a2145200e4196036a2f0100215341002143203d2147203c212c024003402045202c460d012043202c2045412010a00822494100476a21432049450d01202c41206a212c204741606a2247450d030c000b0b204341ffff034b0d01200e41ba036a2147200e41b8036a2f0100215441002145203d2149203c212c024003402047202c460d012045202c2047412010a008224b4100476a2145204b450d01202c41206a212c204941606a2249450d030c000b0b204541ffff034b0d01200e41dc036a2149200e41da036a2f0100215541002147203d214b203c212c024003402049202c460d012047202c2049412010a008224d4100476a2147204d450d01202c41206a212c204b41606a224b450d030c000b0b204741ffff034b0d01200e41fe036a2149200e41fc036a2f0100214d4100212c024003402049203c460d01202c203c2049412010a008224b4100476a212c204b450d01203c41206a213c203d41606a223d450d030c000b0b202c41ffff034b0d01024020042802bc01223220042802b801470d00201220324101109f0120042802bc0121320b20042802b401203241c4006c6a2232202c3b0140203220343b0104203220333602002032413e6a204d3b01002032413c6a20473b01002032413a6a20553b0100203241386a20453b0100203241366a20543b0100203241346a20433b0100203241326a20533b0100203241306a20413b01002032412e6a20523b01002032412c6a20403b01002032412a6a20513b0100203241286a203f3b0100203241266a20503b0100203241246a203e3b0100203241226a204f3b0100203241206a203b3b01002032411e6a204e3b01002032411c6a203a3b01002032411a6a204c3b0100203241186a20393b0100203241166a204a3b0100203241146a20373b0100203241126a20483b0100203241106a20383b01002032410e6a20463b01002032410c6a20363b01002032410a6a20443b0100203241086a20353b0100203241066a20423b01002011212c0b202c202c28020041016a3602000240202d450d00202d41226c450d00200e10350b2001200f460d040c010b200041013a0000200020323a00010240202d450d00202d41226c450d00200e10350b0240200f2001460d0003400240200141046a280200220e450d00200e41226c450d00200128020010350b2001412c6a2101200d41546a220d0d000b0b02402010450d002010412c6c450d00200c10350b200410fa010c040b200d41546a210d2001210e0c000b0b200f2001460d0003402001220d412c6a21010240200d41046a280200220e450d00200e41226c450d00200d28020010350b200f2001470d000b0b02402010450d002010412c6c450d00200c10350b200041046a200441c001109d081a200041003a00000b20044180026a24000bdb0401097f230041c0016b2202240020024188016a200110b701200241306a200228028801220320022802900110d60120024198016a41086a2204200241ec006a29020037030020024198016a41106a2205200241f4006a29020037030020024198016a41186a2206200241fc006a29020037030020024198016a41206a220720024184016a2802003602002002200241e4006a290200370398010240024020022802502208450d00200241e0006a2802002109200241dc006a280200210a20022802542101200241086a41206a2007280200360200200241086a41186a2006290300370300200241086a41106a2005290300370300200241086a41086a200429030037030020022002290398013703080240200228028c01450d00200310350b200241306a41106a200241086a41106a290300370300200241306a41086a200241086a41086a290300370300200241306a41186a200241086a41186a290300370300200241306a41206a200241086a41206a28020036020020024198016a41086a2002413c6a29020037030020024198016a41106a200241c4006a29020037030020024198016a41186a200241cc006a29020037030020022002290308370330200220022902343703980102402001450d00200141186c450d00200810350b0240200941ffffffff0371450d00200a10350b2000200229039801370001200041196a200241b0016a290300370000200041116a200241a8016a290300370000200041096a200241a0016a290300370000410121010c010b0240200228028c01450d00200310350b410021010b200020013a0000200241c0016a24000bea4711047f017e017f017e0c7f017e017f017e067f027e027f037e017f017e047f017e017f23004180046b22052400200541f8026a41186a22064200370300200541f8026a41106a22074200370300200541f8026a41086a22084200370300200542003703f80241f7edcb00ad4280808080f0008422091001220a290000210b200541a8026a41086a220c200a41086a2900003703002005200b3703a802200a10352008200c290300370300200520052903a8023703f80241b6aac000ad42808080809002841001220a290000210b200541b8026a41086a220d200a41086a2900003703002005200b3703b802200a1035200720052903b802220b370300200541b8036a41086a220a2008290300370300200541b8036a41106a220e200b370300200541b8036a41186a220f200d290300370300200520052903f8023703b803200541e0016a200541b8036a10f20141012110024020052802e001417d710d00200642003703002007420037030020084200370300200542003703f802200910012210290000210b200c201041086a2900003703002005200b3703a802201010352008200c290300370300200520052903a8023703f802419beecb00ad4280808080b002841001220c290000210b200d200c41086a2900003703002005200b3703b802200c1035200720052903b802370000200741086a200d290300370000200a2008290300370300200e2007290300370300200f2006290300370300200520052903f8023703b803200541203602bc022005200541b8036a3602b802200541e8016a200541b8036aad42808080808004842209100510c201410021100240024020052802e80122080d00410021110c010b20052802ec01210a02400240200541f0016a2802004104490d00410121112008280000220f418194ebdc03490d010b4100211120054100360290022005420137038802200541093602e4032005200541b8026a3602e003200520054188026a3602a8022005418c036a4101360200200542013702fc02200541c888c2003602f8022005200541e0036a36028803200541a8026a41e88ac500200541f8026a10431a200535029002422086200535028802841006200528028c02450d0020052802880210350b200a450d00200810350b200541f8026a41186a220d4200370300200541f8026a41106a220c4200370300200541f8026a41086a22084200370300200542003703f80241f7edcb00ad4280808080f000841001220a290000210b200541a8026a41086a2206200a41086a2900003703002005200b3703a802200a103520082006290300370300200520052903a8023703f80241eeedcb00ad42808080809001841001220a290000210b200541b8026a41086a2206200a41086a2900003703002005200b3703b802200a1035200720052903b802370000200741086a2006290300370000200541b8036a41086a2008290300370300200541b8036a41106a200c290300370300200541b8036a41186a200d290300370300200520052903f8023703b803200541f8026a200541b8036a10ac0120052903f8024202510d00200541f8026a200c280200221210b801200541d8016a20052802f802220a20052802800310c00120052802dc01210c20052802d8012108024020052802fc02450d00200a10350b02400240024020080d0041fdb5c000ad4280808080e0068410064100201241e07a6a2208200820124b1b2113201221140c010b4100201241e07a6a2208200820124b1b21130240200c20044b0d00201221140c010b200541f8026a41186a220c4200370300200541f8026a41106a220d4200370300200541f8026a41086a22084200370300200542003703f80241f7edcb00ad4280808080f000841001220a290000210b200541a8026a41086a2206200a41086a2900003703002005200b3703a802200a103520082006290300370300200520052903a8023703f80241aeeecb00ad4280808080a001841001220a290000210b200541b8026a41086a2206200a41086a2900003703002005200b3703b802200a1035200720052903b802370000200741086a2006290300370000200541b8036a41086a2008290300370300200541b8036a41106a200d290300370300200541b8036a41186a200c290300370300200520052903f8023703b803200541f8026a200541b8036a10d90120052802f8022208410420081b220d20052902fc02420020081b220b422088a741037422086a210a03402008450d02200841786a2108200a417c6a210c200a41786a210a200c28020020044b0d000b200d20086a2802002114200b42ffffffff0183500d00200d10350b200541f8026a41186a22154200370300200541f8026a41106a22164200370300200541f8026a41086a22174200370300200542003703f80241f7edcb00ad4280808080f00084221810012208290000210b200541a8026a41086a2219200841086a2900003703002005200b3703a8022008103520172019290300370300200520052903a8023703f80241b8eecb00ad4280808080e00284220b10012208290000211a200541b8026a41086a221b200841086a2900003703002005201a3703b80220081035200720052903b802370000200741086a221c201b290300370000200541b8036a41086a220e2017290300370300200541b8036a41106a221d2016290300370300200541b8036a41186a221e2015290300370300200520052903f8023703b803200541d0016a200541b8036a412010c00120052802d401210a20052802d001210c201542003703002016420037030020174200370300200542003703f802201810012208290000211a2019200841086a2900003703002005201a3703a8022008103520172019290300370300200520052903a8023703f802200b10012208290000210b201b200841086a2900003703002005200b3703b80220081035200720052903b802370000201c201b290300370000200e2017290300370300201d2016290300370300201e2015290300370300200520052903f8023703b8032005200a2012200c4101461b3602f8022009200541f8026aad220b4280808080c00084100220032001200120034b1b221f450d01200f410020111b2120200541a8036aad4280808080c000842121200b42808080808002842122200541a8036a41046a2123200541e0036a41086a2111200021034100212402400240024002400340201542003703002016420037030020174200370300200542003703f802201810012208290000210b2019200841086a2900003703002005200b3703a8022008103520172019290300370300200520052903a8023703f8024194c4c100ad4280808080d0018410012208290000210b201b200841086a2900003703002005200b3703b80220081035200720052903b802370000201c201b290300370000200e2017290300370300201d2016290300370300201e2015290300370300200520052903f8023703b803200541f8026a200541b8036a10fe0120052902fc02420020052802f80222081b220b422088a7410574210a2024220c41016a21242002200c4102746a21042000200c41e0006c6a210f2008410120081b22102108024003400240200a0d004100210d0c020b4101210d20032008460d012008200f412010a008210c200a41606a210a200841206a2108200c0d000b0b0240200b42ffffff3f83500d00201010350b0240200d0d0020042802002108200542003703b002200542003703a802200541c0016a200f290320220b200f41286a290300428094ebdc034200109808200541a0016a200f2903302209200f41386a290300428094ebdc034200109808200541b0016a20052903c001221a200541c0016a41086a29030022254280ec94a37c427f108408200541f0006a201a20252008ad2226420010840820054190016a20052903a001221a200541a0016a41086a29030022254280ec94a37c427f10840820054180016a201a202520264200108408200542003703c002200542003703b802202620092005290390017c7e221a428094ebdc0380212502400240200529037042002026200b20052903b0017c7e220b428094ebdc03802209a7417f200b428080808080c0b2cd3b541b200b20094280ec94a37c7e7c4280cab5ee01566a220aad7d85200541f0006a41086a2903004200200a410047ad7d8584500d00200529038001210920054180016a41086a2903002127200541e8016a2014200f10b20120052802e801210a200520052802f001220c3602f4032005200a3602f00320054188026a200cad422086200aad84100510c20102400240200528028802220c0d004200210b0c010b200528028c0221100240024020052802900222044104490d00200c280000220d418094ebdc034b0d004201210b2004417c6a410f4b0d010b200541003602c003200542013703b803200541093602e4032005200541f0036a3602e0032005200541b8036a3602a8032005410136028c03200542013702fc02200541c888c2003602f8022005200541e0036a36028803200541a8036a41e88ac500200541f8026a10431a20053502c00342208620053502b803841006024020052802bc03450d0020052802b80310350b4200210b2028210d0b02402010450d00200c10350b200d21280b024020052802ec01450d00200a10350b200820284100200b4200521b22064d0d02200541f8026a2014200f10b201200535028003212920052802f802210c41101033220a0d010c070b200542003703f001200542003703e80120054200370390022005420037038802200541f0036a200f10ba01200541b8036a20052802f003220a20052802f80310bc012011200e280200360200200520052903b8033703e003024020052802c4032208450d00200541a8036a41086a2011280200360200200520052903e0033703a80320052903c803210b0b024020052802f403450d00200a10350b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b803200541f0036a200f10ba0120052802f0032108200520052802f8033602e403200520083602e003200541b8036a200541e0036a10ff01024020052802f403450d00200810350b2011200e280200360200200520052903b8033703e00320052903c803210b410421080c010b2011200541a8036a41086a280200360200200520052903a8033703e0030b201720052903e003370200201741086a2011280200360200200541003a00a4032005200f3602fc02200520133602f802200520203602a0032005200b370390032005200836028c03200520054188026a36029c032005200541e8016a36029803200541b8036a200541f8026a2014108002024020052802c0034102460d0020052802b803200528028003470d002017201210810221082005410120052d00a40320081b22083a00a403200541b8036a200f10b50120053502c00342208620052802b803220aad841007024020052802bc03450d00200a10350b200541b8036a200f10b90120053502c00342208620052802b803220aad841007024020052802bc03450d00200a10350b0240200f10820241ff0171220a4102460d00200a410171450d0010e4010b200841ff0171450d00200528029403220f41027421084101210d200528028c03210a200528028003210120052802f80221042005280284032206210c02400340024020080d00200520062004200620044b1b360284030c020b200d417f6a210d2008417c6a2108200c20044b2110200c200a2802006b210c200a41046a210a20100d000b200f21080240200f2010200d6b220a490d002005200a36029403200a21080b200520062004200620044b1b3602840341000d002001200f6b220a200120086b4f0d00200f20086b210c20052802fc0221080340201e200841186a290000370300201d200841106a290000370300200e200841086a290000370300200520082900003703b8032005200a3602d803200541f0036a200541b8036a10b60120053502f80342208620052802f003220dad841007024020052802f403450d00200d10350b200a41016a210a200c417f6a220c0d000b0b200541b8036a20052802fc0210ba0120052802b8032108200520052802c0033602f403200520083602f0032017200541f0036a10ff0120052802bc03450d00200810350b20052802900341ffffffff0371450d01200528028c0310350c010b200a2008360000200a4110412010372208450d04200820092025a7417f201a428080808080c0b2cd3b541b201a20254280ec94a37c7e7c4280cab5ee01566aad7c220b3700042008410c6a2027200b200954ad7c221a3700002029422086200cad842008ad4280808080c00284100220081035024020052802fc02450d00200c10350b20054188026a200f10ba01200541b8036a200528028802220a20052802900210bc012011200e280200360200200520052903b8033703e003024020052802c4032208450d00200541e8016a41086a2011280200360200200520052903e0033703e80120052903c80321090b0240200528028c02450d00200a10350b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b80320054188026a200f10ba01200528028802210820052005280290023602f403200520083602f003200541b8036a200541f0036a10ff010240200528028c02450d00200810350b200541f0036a41086a200e280200360200200520052903b8033703f00320052903c8032109410421080c010b200541f0036a41086a200541e8016a41086a280200360200200520052903e8013703f0030b201720052903f003370200201741086a222a200541f0036a41086a280200360200200541003a00a4032005200f3602fc02200520133602f802200520203602a00320052009370390032005200836028c032005200541b8026a36029c032005200541a8026a36029803200541e8006a200541f8026a2014200b201a10830202400240024020052802684101470d00200528026c200528028003460d010b20052d00a40321080c010b2017201210810221082005410120052d00a40320081b22083a00a403200541b8036a200f10b50120053502c00342208620052802b803220aad841007024020052802bc03450d00200a10350b200541b8036a200f10b90120053502c00342208620052802b803220aad841007024020052802bc03450d00200a10350b200f10820241ff0171220a4102460d00200a410171450d0010e4010b0240200841ff0171450d00200528029403222b41027421084101210d200528028c03210a200528028003212c20052802f80221042005280284032201210c02400340024020080d00200520012004200120044b1b360284030c020b200d417f6a210d2008417c6a2108200c20044b2110200c200a2802006b210c200a41046a210a20100d000b202b21080240202b2010200d6b220a490d002005200a36029403200a21080b200520012004200120044b1b3602840341000d00202c202b6b220a202c20086b4f0d00202b20086b210c20052802fc0221080340201e200841186a290000370300201d200841106a290000370300200e200841086a290000370300200520082900003703b8032005200a3602d80320054188026a200541b8036a10b601200535029002422086200528028802220dad8410070240200528028c02450d00200d10350b200a41016a210a200c417f6a220c0d000b0b200541b8036a20052802fc0210ba0120052802b8032108200520052802c00336028c022005200836028802201720054188026a10ff0120052802bc03450d00200810350b024020052802900341ffffffff0371450d00200528028c0310350b200541003602d002200542083703c802200542003703f001200542003703e801200541c8026a4100200f41c8006a220828020010880102400240200828020022080d004200210920052802c802210d4200211a0c010b200f2802402201200841306c6a212d2006ad2127034020054200370390022005420037038802200541c0006a2001290300221a200141086a290300428094ebdc034200109808200541306a2005290340220b200541c0006a41086a29030022094280ec94a37c427f108408200541206a200b200920274200108408200541106a200b200920264200108408200541f8026a2014200141106a220610b301200541d0006a20052802f802220a20052802800310d7014200200541106a41086a290300200529031022092026201a20052903307c221a7e220b428094ebdc03802225a7417f200b428080808080c0b2cd3b541b200b20254280ec94a37c7e7c4280cab5ee01566aad7c220b200954ad7c2209200541206a41086a290300200529032022252027201a7e221a428094ebdc03802229a7417f201a428080808080c0b2cd3b541b201a20294280ec94a37c7e7c4280cab5ee01566aad7c221a202554ad7c7d200b201a54ad7d2225200b201a7d221a200b56202520095620252009511b22081b21094200201a20081b210b200541d0006a41106a290300211a2005290358212520052802502108024020052802fc02450d00200a10350b200541b8036a2014200610b30120052802b803210a20053502c003212920052025420020081b2225200b7c220b3703f8022005201a420020081b20097c200b202554ad7c2209370380032029422086200aad8420221002024020052802bc03450d00200a10350b200541f0036a200610ba01200541b8036a20052802f003220a20052802f80310bc012011200e280200360200200520052903b8033703e003024020052802c4032208450d00200541a8036a41086a2011280200360200200520052903e0033703a80320052903c803212e0b024020052802f403450d00200a10350b0240024020080d00200542003703c80320054280808080c0003703c003200520133602bc03200541003602b803200541f0036a200610ba0120052802f0032108200520052802f8033602e403200520083602e003200541b8036a200541e0036a10ff01024020052802f403450d00200810350b2011200e280200360200200520052903b8033703e00320052903c803211a410421080c010b2011200541a8036a41086a280200360200200520052903a8033703e003202e211a0b201720052903e003370200202a2011280200360200200541003a00a403200520063602fc02200520133602f802200520203602a0032005201a370390032005200836028c03200520054188026a36029c032005200541e8016a36029803200541086a200541f8026a2014200b20091083020240024020052802084101470d00200528020c200528028003470d002017201210810221082005410120052d00a40320081b22083a00a4030c010b20052d00a40321080b0240200841ff0171450d00200528029403222c41027421084101210d200528028c03210a200528028003212f20052802f8022104200528028403222b210c02400340024020080d002005202b2004202b20044b1b360284030c020b200d417f6a210d2008417c6a2108200c20044b2110200c200a2802006b210c200a41046a210a20100d000b202c21080240202c2010200d6b220a490d002005200a36029403200a21080b2005202b2004202b20044b1b3602840341000d00202f202c6b220a202f20086b4f0d00202c20086b210c20052802fc0221080340201e200841186a290000370300201d200841106a290000370300200e200841086a290000370300200520082900003703b8032005200a3602d803200541f0036a200541b8036a10b60120053502f80342208620052802f003220dad841007024020052802f403450d00200d10350b200a41016a210a200c417f6a220c0d000b0b200541b8036a20052802fc0210ba0120052802b8032108200520052802c0033602f403200520083602f0032017200541f0036a10ff0120052802bc03450d00200810350b024020052802900341ffffffff0371450d00200528028c0310350b200141306a2101200641086a290000210b200629000021092015200641186a2900003703002016200641106a2900003703002017200b370300200520093703f80220054188026a41086a290300210b2005290388022109024020052802d002220a20052802cc02470d00200541c8026a200a410110880120052802d002210a0b20052802c802220d200a41306c6a22082009370320200820052903f802370300200841286a200b370300200841086a2017290300370300200841106a2016290300370300200841186a20152903003703002005200a41016a3602d0022001202d470d000b200541e8016a41086a290300211a20052903e80121090b2019290300212520052903a802210b200541e8016a41086a2208200f41086a290300370300200541e8016a41106a220a200f41106a290300370300200541e8016a41186a220c200f41186a2903003703002005200f2903003703e801200d450d00201b290300212620052903b802212720052902cc02212920054188026a41186a2204200c29030037030020054188026a41106a2201200a29030037030020054188026a41086a222b2008290300370300200520052903e80137038802200f280258221041ffffff3f712010470d022010410574220c417f4c0d02200f280250210802400240200c0d004101210a0c010b200c1033220a450d060b20054100360280032005200a3602f8022005200c4105763602fc02200541f8026a41002010108a0120052802800321060240024020100d0020052802f802212c0c010b20052802f802222c20064105746a210a0340200a2008290000370000200a41186a200841186a290000370000200a41106a200841106a290000370000200a41086a200841086a290000370000200a41206a210a200841206a2108200c41606a220c0d000b201041057441606a41057620066a41016a21060b20052802fc02212f201e2004290300370300201d2001290300370300200e202b29030037030020052005290388023703b803201810012208290000212e2019200841086a2900003703002005202e3703a8022008103541efb6c000ad428080808080028410012208290000212e201b200841086a2900003703002005202e3703b80220081035200520123602a80320052021100322082900003703e003200810352005202336028403200520113602fc022005200541a8036a360280032005200541e0036a3602f802200541f0036a200541f8026a107b20052802f803220441206a220a417f4c0d0220052802f003210f02400240200a0d0041002108410121100c010b200a10332210450d06200a21080b024002402008410f4d0d002008210c0c010b2008410174220c4110200c41104b1b220c4100480d04024020080d00200c103322100d010c060b2008200c460d0020102008200c10372210450d050b201020052903a802370000201041086a201929030037000002400240200c4170714110460d00200c21080c010b200c41017422084120200841204b1b22084100480d04200c2008460d002010200c200810372210450d050b201020052903b802370010201041186a201b29030037000002400240200841606a2004490d00200821010c010b2004415f4b0d042008410174220c200a200c200a4b1b22014100480d0420082001460d0020102008200110372210450d050b200b20097c2209200b542108201041206a200f2004109d081a024020052802f403450d00200f10350b2025201a7c210b2008ad211a200541f8026a2010200a10dd010240024020052802f80222040d004100210f200541003602c002200542083703b802410821044100210c0c010b200520052902fc0222253702bc02200520043602b8022025422088a7210c2025a7210f0b200b201a7c210b2015201e2903003703002016201d2903003703002017200e290300370300200520052903b8033703f8020240200c200f470d00200541b8026a200c4101109b0120052802bc02210f20052802b802210420052802c002210c0b2004200c41d8006c222b6a2208200937031020082026370308200820273703002008202c36022c2008200d360220200841186a200b370300200841346a2006360200200841306a202f360200200841246a2029370200200820052903f802370338200841c0006a2017290300370300200841c8006a2016290300370300200841d0006a20152903003703002005200c41016a22083602c0020240024020040d00200aad4220862010ad8410070c010b200541f8026a2004200810ea01200aad4220862010ad8420053502800342208620052802f802220aad841002024020052802fc02450d00200a10350b02402008450d00200441306a2108202b41d8006a210a03400240200841746a280200220c450d00200c41306c450d00200841706a28020010350b0240200828020041ffffff3f71450d002008417c6a28020010350b200841d8006a2108200a41a87f6a220a0d000b0b200f450d00200f41d8006c450d00200410350b2001450d00201010350b200341e0006a21032024201f490d000b410021100c050b1044000b103e000b103c000b1045000b41002110200b42ffffffff0183500d00200d10350b20054180046a240020100bbf0201027f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10c3010240024020022802480d0020024100360230200242013703282002410936023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d00200110350b200241e0006a24000b8f0301067f230041106b220224002002410036020820024201370300200028020021030240410410332204450d002004200336000020024284808080c000370204200220043602002000280204210320044104410810372204450d0020042003360004200242888080808001370204200220043602002000280208210320044108411010372204450d002004200336000820024290808080c00137020420022004360200200028020c2105200041146a28020022002002107702400240024020022802042206200228020822046b20004102742203490d0020022802002100200621070c010b200420036a22002004490d01200641017422072000200720004b1b22074100480d010240024020060d00024020070d00410121000c020b2007103322000d010c040b2002280200210020062007460d0020002006200710372200450d030b20022007360204200220003602000b200020046a20052003109d081a2001290200200420036aad4220862000ad84100202402007450d00200010350b200241106a24000f0b103e000b103c000bbd0101057f2001280208210302402001410c6a280200220420024b0d002000410036020820002004ad4220862003ad843702000f0b024002402001411c6a2802002205450d00200141146a2802002101200541027421062003417f6a2103034002402004200128020022076b220520024b0d00200420024b0d030b200141046a21012003417f6a2103200521042006417c6a22060d000b0b200041023602080f0b2000200736020c2000410136020820002005ad4220862003ad843702000ba00201067f410021020240200141016a2203200028020422044d0d000240200041146a22052802002201200041106a280200470d000240024002400240200141016a22022001490d00200141017422062002200620024b1b220241ffffffff03712002470d00200241027422024100480d00024020010d0020020d02410421060c040b200028020c2106200141027422072002460d03024020070d0020020d02410421060c040b20062007200210372206450d020c030b103e000b2002103322060d010b103c000b2000200636020c200041106a20024102763602000b200028020c220241046a20022001410274109e081a2002200320046b36020020002003360204410121022005200141016a3602002000200028020041016a3602000b20020bd20f07047f017e047f017e047f017e017f23004190016b22012400200141386a41186a4200370300200141386a41106a22024200370300200141386a41086a220342003703002001420037033841a3edcb00ad4280808080f000841001220429000021052003200441086a290000370300200120053703382004103541f393ca00ad4280808080a00184100122042900002105200141286a41086a2206200441086a2900003703002001200537032820041035200220012903282205370300200141e8006a41086a2003290300370300200141e8006a41106a2005370300200141e8006a41186a200629030037030020012001290338370368200141386a200141e8006a10fe0120012802382203410120031b21074102210802400240200129023c420020031b2205422088a72203450d002003410574210241002104200721030240034020002003460d01200420032000412010a00822064100476a21042006450d01200341206a2103200241606a22020d000c020b0b200141386a41186a4200370300200141386a41106a22094200370300200141386a41086a220042003703002001420037033841a3edcb00ad4280808080f0008410012202290000210a200141286a41086a2203200241086a2900003703002001200a37032820021035200020032903003703002001200129032837033841beebcb00ad4280808080a0028410012202290000210a2003200241086a2900003703002001200a3703282002103520092001290328220a370300200141e8006a41086a2000290300370300200141e8006a41106a200a370300200141e8006a41186a200329030037030020012001290338370368200141186a200141e8006a10c5020240024002402001280218220b0d004100210c20014100360210200142043703084104210b4100210d410021030c010b200129021c210a2001200b3602082001200a37020c200aa7210d4100210302400240200a422088a7220c41014b0d00200c0e020201020b200c2100034020032000410176220220036a22062004200b20064102746a280200491b2103200020026b220041014b0d000b0b4100210802402004200b20034102746a2802002200470d00410021060c020b2003200420004b6a21030b200141386a41186a22084200370300200141386a41106a220e4200370300200141386a41086a220242003703002001420037033841a3edcb00ad4280808080f0008410012206290000210a200141286a41086a2200200641086a2900003703002001200a37032820061035200220002903003703002001200129032837033841f393ca00ad4280808080a0018410012206290000210a2000200641086a2900003703002001200a3703282006103520092001290328370000200941086a2000290300370000200141e8006a41086a2002290300370300200141e8006a41106a200e290300370300200141e8006a41186a200829030037030020012001290338370368200141286a200141e8006aad4280808080800484100510c201024002400240024020012802282202450d00200128022c21062001200028020036023c200120023602382001200141386a10c4012001280200450d01410021000c020b2001420037023c20014101360238200141386a108a0321000c020b200128020421000b2006450d00200210350b20002000418094ebdc036e22024180ec94a37c6c6aad4280fd87d1007e220f428094ebdc0380210a200c2003490d0220024180fd87d1006c200f200a4280ec94a37c7e7c4280cab5ee015672200aa76a21020240200c200d470d00200141086a200d4101108601200128020c210d2001280208210b0b200b20034102746a220041046a2000200c20036b410274109e081a20002004360200410121062001200c41016a220c360210200c20024b21080b200141386a41186a220e4200370300200141386a41106a22104200370300200141386a41086a220042003703002001420037033841a3edcb00ad4280808080f0008410012202290000210a200141286a41086a2203200241086a2900003703002001200a37032820021035200020032903003703002001200129032837033841beebcb00ad4280808080a0028410012202290000210a2003200241086a2900003703002001200a3703282002103520092001290328370000200941086a2003290300370000200141e8006a41086a2000290300370300200141e8006a41106a2010290300370300200141e8006a41186a200e2903003703002001200129033837036802400240200b0d00200141e8006aad428080808080048410070c010b2001412036023c2001200141e8006a360238200b200c200141386a109503200d41ffffffff0371450d00200b10350b2006450d00200141e8006a41086a22032004ad37030020014102360268200141386a200141e8006a108805200141336a2200200141386a41086a2802003600002001200129033837002b200141386a410c6a2001412f6a2202290000370000200141c6a4b9da04360039200141023a00382001200129002837003d200141386a108204200141013602382001200436023c200141e8006a200141386a108104200020032802003600002001200129036837002b200141e8006a410c6a2002290000370000200141c28289aa04360069200141023a00682001200129002837006d200141e8006a1082040b0240200542ffffff3f83500d00200710350b20014190016a240020080f0b2003200c104d000b9a0d04047f017e027f067e230041d0026b22052400200541c8016a2001200210800202400240024002400240024020052802d0014102460d0020052802c8012106200541c8016a41086a2001280204220741086a290000370300200541c8016a41106a200741106a290000370300200541c8016a41186a200741186a290000370300200520063602e801200520072900003703c801200541f0016a200541c8016a10b60120052802f0012108200520052802f801220736028402200520083602800220054188026a2007ad4220862008ad84100510c2010240024020052802880222070d00420021090c010b200528028c02210a02400240024020054188026a41086a280200220b4110490d00200b4170714110470d010b200541003602a0022005420137039802200541093602ac02200520054180026a3602a802200520054198026a3602b402200541cc026a4101360200200542013702bc02200541c888c2003602b8022005200541a8026a3602c802200541b4026a41e88ac500200541b8026a10431a20053502a0024220862005350298028410060240200528029c02450d0020052802980210350b420021090c010b200741186a290000210c200741086a290000210d2007290010210e2007290000210f420121090b200a450d00200710350b200d4200200942005222071b210d200f420020071b210f024020052802f401450d00200810350b200c420020071b210c200e420020071b210e200f200354200d200454200d2004511b0d01200f200385200d2004858450450d03200541b8016a20032004428094ebdc034200109808200541a8016a20052903b801220d200541b8016a41086a290300220f4280ec94a37c427f10840820054198016a200d200f20013502282209420010840820054188016a4200200529039801220f200920052903a80120037c7e220d428094ebdc03802209a7417f200d428080808080c0b2cd3b541b200d20094280ec94a37c7e7c4280cab5ee01566aad7c220d200e7d22092009200d5620054198016a41086a290300200d200f54ad7c220f200c7d200d200e54ad7d220d200f56200d200f511b22021b220f4200200d20021b428094ebdc034200109808200541f8006a200529038801220d20054188016a41086a29030022094280ec94a37c427f108408200541e8006a200d20094280cab5ee014200108408200541e8006a41086a29030020052903682209200f20052903787c220d420188220fa7417f200d4280cab5ee017e220d428080808080c0b2cd3b541b200d200f4280ec94a37c7e7c4280cab5ee01566aad7c220d200954ad7c210f410021020c020b410021010c040b200541c8006a20032004428094ebdc034200109808200541d8006a20032004428094ebdc034200108608200541386a2005290348200541c8006a41086a290300200135022822094200108408200541286a420020052903382210200920052903587e2209428094ebdc03802211a7417f2009428080808080c0b2cd3b541b200920114280ec94a37c7e7c4280cab5ee01566aad7c2209200e7d22112011200956200541386a41086a2903002009201054ad7c2210200c7d2009200e54ad7d220920105620092010511b22071b22104200200920071b428094ebdc034200109808200541186a20052903282209200541286a41086a29030022114280ec94a37c427f108408200541086a200920114280cab5ee014200108408200128022422072003200f7d220920072903007c2211370300200741086a22072004200d7d2003200f54ad7d20072903007c2011200954ad7c370300200141106a2207200728020022072002200720024b1b360200200541086a41086a2903002005290308220f201020052903187c220d4201882209a7417f200d4280cab5ee017e220d428080808080c0b2cd3b541b200d20094280ec94a37c7e7c4280cab5ee01566aad7c220d200f54ad7c210f410121020b02400240200d200f84500d002001280220220220022903002209200d7c2210370300200241086a22022002290300200f7c2010200954ad7c370300200c200f7c200e200d7c220d200e54ad7c210c200d210e0c010b2002450d010b200141013a002c200541b8026a200541c8016a10b60120053502c002210d20052802b8022102411010332201450d01200120033700002001200437000820014110412010372201450d012001200e370010200141186a200c370000200d4220862002ad842001ad428080808080048410022001103520052802bc02450d00200210350b410121010c010b103c000b2000200636020420002001360200200541d0026a24000be70403057f017e037f23004180016b22022400200241206a41186a22034200370300200241206a41106a22044200370300200241206a41086a220542003703002002420037032041f7edcb00ad4280808080f000841001220629000021072005200641086a290000370300200220073703202006103541eeedcb00ad4280808080900184100122062900002107200241086a2208200641086a2900003703002002200737030020061035200420022903002207370300200241e0006a41086a22062005290300370300200241e0006a41106a22092007370300200241e0006a41186a220a200829030037030020022002290320370360200241206a200241e0006a10ac010240024020022903204202520d00200041003602200c010b200241d0006a2004280200200110ce01200241206a200228025022082002280258108502200a2003290300370300200920042903003703002006200529030037030020022002290320370360200241cc006a280200210402400240200228024022050d0042002107200241186a4200370300200241106a420037030041082105200241086a4200370300200242003703000c010b200241086a200241e0006a41086a290300370300200241106a200241e0006a41106a290300370300200241186a200241e0006a41186a29030037030020022002290360370300200229024421070b02402002280254450d00200810350b2000200229030037030020002007370224200020053602202000412c6a2004360200200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a2903003703000b20024180016a24000b860301017f230041f0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822010d00200041003602200c010b200328020c21022003200341086a41086a28020036024c20032001360248200341186a200341c8006a10c5010240024020032802380d00200341003602582003420137035020034109360264200320033602602003200341d0006a36026c2003412c6a41013602002003420137021c200341c888c2003602182003200341e0006a360228200341ec006a41e88ac500200341186a10431a2003350258422086200335025084100602402003280254450d00200328025010350b200041003602200c010b20002003290318370300200041286a200341186a41286a290300370300200041206a200341186a41206a290300370300200041186a200341186a41186a290300370300200041106a200341186a41106a290300370300200041086a200341186a41086a2903003703000b2002450d00200110350b200341f0006a24000bc00908057f047e027f027e067f017e037f017e230041e0016b22032400200241386a2802002104200241346a2802002105200241306a2802002106200341c0006a41186a200241186a290000370300200341c0006a41106a200241106a290000370300200341c0006a41086a200241086a290000370300200320022900003703404100210720034100360268200342083703600240024020040d0042002108420021094200210a4200210b0c010b200441306c210c200341b0016a41106a21044108210d42002108420021094200210a4200210b200621020340200241286a290300210e200241206a290300210f200341f0006a41186a2210200241186a290300370300200341f0006a41106a2211200241106a290300370300200341f0006a41086a2212200241086a29030037030020032002290300370370200341b0016a41186a2213420037030020044200370300200341b0016a41086a22144200370300200342003703b00141b6fdc600ad42808080808001841001221529000021162014201541086a290000370300200320163703b0012015103541e489c200ad4280808080d00184100122152900002116200341d0016a41086a2217201541086a290000370300200320163703d00120151035200420032903d001370000200441086a201729030037000020034190016a41086a2215201429030037030020034190016a41106a2217200429030037030020034190016a41186a22182013290300370300200320032903b00137039001200341286a20034190016a412010d701200341186a2003290330200341286a41106a290300427f4200109808200341086a20032903184200200328022822191b221642012016420156200341186a41086a290300420020191b22164200522016501b22191b2016420020191b200f200e1084082018201029030037030020172011290300370300201520122903003703002003200329037037039001200341086a41086a29030021162003290308210e0240024020034190016a200341c0006a412010a008450d0020132018290300370300200420172903003703002014201529030037030020032003290390013703b001024020072003280264470d00200341e0006a200741011088012003280260210d200328026821070b200d200741306c6a221520163703082015200e370300201520032903b001370310201541186a2014290300370300201541206a2004290300370300201541286a20132903003703002003200741016a22073602680c010b427f200920167c2008200e7c221a2008542214ad7c220f2014200f200954200f2009511b22141b2109427f201a20141b21080b200241306a2102427f200b20167c200a200e7c2216200a542214ad7c220a2014200a200b54200a200b511b22141b210b427f201620141b210a200c41506a220c0d000b0b02402005450d00200541306c450d00200610350b2000200a37032020002003290340370000200041386a2009370300200041306a2008370300200041286a200b370300200041c0006a2003290360370200200041186a200341c0006a41186a290300370000200041106a200341c0006a41106a290300370000200041086a200341c0006a41086a290300370000200041c8006a200341e0006a41086a280200360200200341e0016a24000ba21904047f017e047f037e230041d0016b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a220341174b0d0020030e180102030405060708090a0b0c0d0e0f101112131415161718010b41cfa2cc00412841c086cc00103f000b4101210302400240200141046a2d00004101470d00200141086a28020021040c010b200241c2016a200141076a2d00003a0000200241086a200141146a290000370300200241106a2001411c6a290000370300200241186a200141246a2d00003a00002002200141056a2f00003b01c00120022001410c6a290000370300200141086a2800002104410021030b200041286a2001290328370300200041046a20033a0000200041056a20022f01c0013b0000200041086a20043602002000410c6a2002290300370200200041306a200141306a290300370300200041076a200241c2016a2d00003a0000200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a28020036020020012d00012101200041013a0000200020013a00010c170b200041023a0000200041106a200141106a290300370300200041086a200141086a2903003703000c160b200041033a0000200041106a200141106a290300370300200041086a200141086a2903003703000c150b200041043a00000c140b200041053a0000200041046a200141046a2802003602000c130b2001410c6a2802002205ad42247e2206422088a70d132006a72204417f4c0d13200141046a28020021030240024020040d00410421010c010b200410332201450d150b200241003602c801200220013602c0012002200441246e3602c401200241c0016a41002005108d0120022802c801210402402005450d00200541246c210520022802c001200441246c6a2101200241ce016a210703400240024020032d00004101470d00200341046a2802002108410121090c010b2007200341036a2d00003a0000200341046a2800002108200341016a2f00002109200241086a200341106a290000370300200241106a200341186a290000370300200241186a200341206a2d00003a0000200220093b01cc012002200341086a290000370300410021090b200341246a2103200120093a0000200141046a2008360200200141016a20022f01cc013b0000200141036a20072d00003a0000200141086a2002290300370200200141106a200241086a290300370200200141186a200241106a290300370200200141206a200241186a280200360200200141246a2101200441016a21042005415c6a22050d000b0b200241086a2004360200200220022903c00122063703002000410c6a2004360200200041046a2006370200200041063a00000c120b200041073a00000c110b200041083a0000200020012d00013a00010c100b4101210302400240200141046a2d00004101470d00200141086a28020021010c010b200241c2016a200141076a2d00003a0000200241086a200141146a290000370300200241106a2001411c6a290000370300200241186a200141246a2d00003a00002002200141056a2f00003b01c00120022001410c6a290000370300200141086a2800002101410021030b200041093a0000200041046a20033a0000200041056a20022f01c0013b0000200041086a20013602002000410c6a2002290300370200200041076a200241c2016a2d00003a0000200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a2802003602000c0f0b2000410a3a0000200041046a200141046a2802003602000c0e0b2000410b3a00000c0d0b2000410c3a00000c0c0b2001410c6a280200220741ffffff3f712007470d0c20074105742203417f4c0d0c200141046a28020021050240024020030d00410121040c010b200310332204450d0e0b41002101200241003602082002200436020020022003410576360204200241002007108a012002280208210a02402007450d00200741057421082002280200200a4105746a21090340200920016a2203200520016a2204290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002008200141206a2201470d000b200741057441606a410576200a6a41016a210a0b200241c8016a200a3602002002200229030022063703c0012000410c6a200a360200200041046a20063702002000410d3a00000c0b0b2000410e3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0a0b2000410f3a00000c090b200141106a280200220341ffffffff03712003470d0920034102742204417f4c0d09200141046a2802002105200141086a28020021084104210102402004450d00200410332201450d0b0b2002410036020820022001360200200220044102763602042002410020031086012002280200200228020822014102746a20082003410274109d081a200241c0016a41086a200120036a22013602002002200229030022063703c001200041046a2005360200200041086a2006370200200041106a2001360200200041103a00000c080b200141106a2802002203ad42247e2206422088a70d082006a72204417f4c0d08200141046a2802002108200141086a28020021010240024020040d00410421050c010b200410332205450d0a0b20024100360208200220053602002002200441246e360204200241002003108d012002280208210402402003450d00200341246c21052002280200200441246c6a21030340200141086a2902002106200141106a290200210b200141186a290200210c2001290200210d200341206a200141206a280200360200200341186a200c370200200341106a200b370200200341086a20063702002003200d370200200341246a2103200441016a2104200141246a21012005415c6a22050d000b0b200241c0016a41086a20043602002002200229030022063703c001200041046a2008360200200041086a2006370200200041106a2004360200200041113a00000c070b200041123a0000200041046a200141046a2802003602000c060b200041133a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c050b200041143a0000200041106a200141106a290300370300200041086a200141086a2903003703000c040b200041153a0000200041046a200141046a2802003602000c030b200041163a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c020b2001410c6a280200220320036a22042003490d022004417f4c0d02200141046a28020021050240024020040d00410221080c010b200410332208450d040b200241003602082002200836020020022004410176360204200241002003108e012002280200200228020822044101746a20052003410174109d081a200241c0016a41086a2205200420036a360200200220022903003703c0012002200141106a108802200041046a20022903c0013702002000410c6a200528020036020020012802d0012103200041106a200241c001109d081a200041d0016a2003360200200041173a000020004180026a200141d8016a220141286a290300370300200041f8016a200141206a290300370300200041f0016a200141186a290300370300200041e8016a200141106a290300370300200041e0016a200141086a290300370300200041d8016a20012903003703000c010b2001410c6a280200220320036a22042003490d012004417f4c0d01200141046a28020021050240024020040d00410221080c010b200410332208450d030b200241003602082002200836020020022004410176360204200241002003108e012002280200200228020822044101746a20052003410174109d081a200241c0016a41086a2205200420036a360200200220022903003703c0012002200141106a108802200041046a20022903c0013702002000410c6a200528020036020020012802d0012103200041106a200241c001109d081a200041d0016a2003360200200041183a000020004180026a200141d8016a220141286a290300370300200041f8016a200141206a290300370300200041f0016a200141186a290300370300200041e8016a200141106a290300370300200041e0016a200141086a290300370300200041d8016a20012903003703000b200241d0016a24000f0b1044000b1045000bc11702057f017e23004180026b22022400024002402001280208220341ffffffff01712003470d0020034103742204417f4c0d00200128020021050240024020040d00410421060c010b200410332206450d020b200241003602f801200220063602f001200220044103763602f401200241f0016a4100200310900120022802f00120022802f80122044103746a20052003410374109d081a200041086a200420036a360200200020022903f001370200200141146a2802002204ad420c7e2207422088a70d002007a72203417f4c0d00200128020c21064104210502402003450d00200310332205450d020b200241003602f801200220053602f00120022003410c6e3602f401200241f0016a4100200410870120022802f00120022802f8012205410c6c6a20062003109d081a200241086a200520046a360200200220022903f001370300200141206a280200220341ffffffff00712003470d0020034104742204417f4c0d00200128021821064104210502402004450d00200410332205450d020b200241003602f801200220053602f001200220044104763602f401200241f0016a41002003108c0120022802f00120022802f80122044104746a20062003410474109d081a200241186a200420036a360200200220022903f0013703102001412c6a2802002204ad42147e2207422088a70d002007a72203417f4c0d00200128022421050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341146e3602f401200241f0016a4100200410990120022802f00120022802f801220641146c6a20052003109d081a200241286a200620046a360200200220022903f001370320200141386a2802002204ad42187e2207422088a70d002007a72203417f4c0d00200128023021050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341186e3602f401200241f0016a4100200410970120022802f00120022802f801220641186c6a20052003109d081a200241386a200620046a360200200220022903f001370330200141c4006a2802002204ad421c7e2207422088a70d002007a72203417f4c0d00200128023c21050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f00120022003411c6e3602f401200241f0016a4100200410f90120022802f00120022802f8012206411c6c6a20052003109d081a200241c8006a200620046a360200200220022903f001370340200141d0006a280200220341ffffff3f712003470d0020034105742204417f4c0d00200128024821050240024020040d00410421060c010b200410332206450d020b200241003602f801200220063602f001200220044105763602f401200241f0016a4100200310910120022802f00120022802f80122044105746a20052003410574109d081a200241d8006a200420036a360200200220022903f001370350200141dc006a2802002204ad42247e2207422088a70d002007a72203417f4c0d00200128025421050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341246e3602f401200241f0016a41002004108d0120022802f00120022802f801220641246c6a20052003109d081a200241e8006a200620046a360200200220022903f001370360200141e8006a2802002204ad42287e2207422088a70d002007a72203417f4c0d00200128026021050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341286e3602f401200241f0016a41002004109d0120022802f00120022802f801220641286c6a20052003109d081a200241f8006a200620046a360200200220022903f001370370200141f4006a2802002204ad422c7e2207422088a70d002007a72203417f4c0d00200128026c21050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f00120022003412c6e3602f401200241f0016a4100200410980120022802f00120022802f8012206412c6c6a20052003109d081a20024188016a200620046a360200200220022903f0013703800120014180016a2802002204ad42307e2207422088a70d002007a72203417f4c0d00200128027821050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341306e3602f401200241f0016a4100200410890120022802f00120022802f801220641306c6a20052003109d081a20024198016a200620046a360200200220022903f001370390012001418c016a2802002204ad42347e2207422088a70d002007a72203417f4c0d0020012802840121050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341346e3602f401200241f0016a4100200410a50120022802f00120022802f801220641346c6a20052003109d081a200241a8016a200620046a360200200220022903f0013703a00120014198016a2802002204ad42387e2207422088a70d002007a72203417f4c0d0020012802900121050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f0012002200341386e3602f401200241f0016a4100200410a20120022802f00120022802f801220641386c6a20052003109d081a200241b8016a200620046a360200200220022903f0013703b001200141a4016a2802002204ad423c7e2207422088a70d002007a72203417f4c0d00200128029c0121050240024020030d00410421060c010b200310332206450d020b200241003602f801200220063602f00120022003413c6e3602f401200241f0016a4100200410aa0120022802f00120022802f8012206413c6c6a20052003109d081a200241c8016a200620046a360200200220022903f0013703c001200141b0016a280200220341ffffff1f712003470d0020034106742204417f4c0d0020012802a80121050240024020040d00410421060c010b200410332206450d020b200241003602f801200220063602f001200220044106763602f401200241f0016a4100200310a60120022802f00120022802f80122044106746a20052003410674109d081a200241d8016a200420036a360200200220022903f0013703d001200141bc016a2802002204ad42c4007e2207422088a70d002007a72203417f4c0d0020012802b40121010240024020030d00410421050c010b200310332205450d020b200241003602f801200220053602f0012002200341c4006e3602f401200241f0016a41002004109f0120022802f00120022802f801220541c4006c6a20012003109d081a200241e0016a41086a2201200520046a360200200220022903f0013703e001200041146a200241086a2802003602002000200229030037020c20002002290310370218200041206a200241106a41086a280200360200200020022903203702242000412c6a200241206a41086a28020036020020002002290330370230200041386a200241306a41086a280200360200200041c4006a200241c0006a41086a2802003602002000200229034037023c200041d0006a200241d0006a41086a28020036020020002002290350370248200041dc006a200241e0006a41086a28020036020020002002290360370254200041e8006a200241f0006a41086a28020036020020002002290370370260200041f4006a20024180016a41086a280200360200200020022903800137026c20004180016a20024190016a41086a28020036020020002002290390013702782000418c016a200241a0016a41086a280200360200200020022903a0013702840120004198016a200241b0016a41086a280200360200200020022903b00137029001200041a4016a200241c0016a41086a280200360200200020022903c00137029c01200041b0016a200241d0016a41086a280200360200200020022903d0013702a801200041bc016a2001280200360200200020022903e0013702b40120024180026a24000f0b1044000b1045000b89f0020a017f027e017f017e127f037e037f037e067f047e230041900c6b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e19000102030405061a1917161514131211100f0e0d0c0b0a0908000b200341940a6a4101360200200342013702840a200341e8d4ca003602800a200341043602f4062003419cd5ca003602f0062003200341f0066a3602900a200341800a6a41b0b4cc00104c000b200141306a2903002104200141286a290300210520012d0001210620034190076a200141246a280200360200200341f0066a41186a2001411c6a290200370300200341f0066a41106a200141146a290200370300200341f0066a41086a2001410c6a2902003703002003200141046a2902003703f0062002411a6a2901002107200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211941012101024020022d00000d0020022d000141014721010b200320073701e80b200320083a00e70b200320093a00e60b2003200a3b01e40b2003200b3a00e30b2003200c3a00e20b2003200d3b01e00b2003200e3a00df0b2003200f3a00de0b200320103b01dc0b200320113a00db0b200320123a00da0b200320133b01d80b200320143a00d70b200320153a00d60b200320163b01d40b200320173a00d30b200320183a00d20b200320193b01d00b0240024020010d00200341e0086a41186a200341d00b6a41186a290100370300200341e0086a41106a200341d00b6a41106a290100370300200341e0086a41086a200341d00b6a41086a290100370300200320032901d00b3703e008200341800a6a200341e0086a10b401200341206a20032802800a220220032802880a41b0b4cc0041004100108a0220032802202101024020032802840a450d00200210350b4103210220014101470d0141a1a6c0002101410d21084180800821090c260b41022102410021090c250b200341800a6a41206a200341f0066a41206a280200360200200341800a6a41186a200341f0066a41186a290300370300200341800a6a41106a200341f0066a41106a290300370300200341800a6a41086a200341f0066a41086a290300370300200320032903f0063703800a200341d0096a200341800a6a108b0220032d00d0094101460d05200341d0096a41086a2d00002101200341d9096a2f00002108200341db096a2d00002109200341dc096a2d0000210a200341dd096a2f0000210b200341df096a2d0000210c200341d0096a41106a2d0000210d200341e1096a2f0000210e200341e3096a2d0000210f200341e4096a2d00002110200341e5096a2f00002111200341e7096a2d00002112200341d0096a41186a2d0000211320032d00d109211420032d00d209211520032d00d309211620032d00d409211720032f00d509211820032d00d70921192003200341e9096a2900003703a009200320133a009f09200320123a009e09200320113b019c09200320103a009b092003200f3a009a092003200e3b0198092003200d3a0097092003200c3a0096092003200b3b0194092003200a3a009309200320093a009209200320083b019009200320013a008f09200320193a008e09200320183b018c09200320173a008b09200320163a008a09200320153a008909200320143a008809200341800a6a20034188096a10b701200341186a20032802800a220820032802880a41b0b4cc0041004100108a0220032802182101024020032802840a450d00200810350b024020014101470d004194a6c0002101410d21084180800c21090c250b02402005428080e983b1de165441002004501b450d0041d8a5c0002101411121084180801c21090c250b200341800a6a200341e0086a10b40120033502880a210720032802800a2101412010332202450d162002200329038809370000200241186a20034188096a41186a290300370000200241106a20034188096a41106a290300370000200241086a20034188096a41086a29030037000020074220862001ad842002ad4280808080800484100220021035024020032802840a450d00200110350b200341800a6a200341e0086a108c0220033502880a210720032802800a210102400240200641037122024103470d00410121024200211a410121080c010b024002400240024020020e03000102000b410021080c020b410121080c010b410221080b200320083a00f00b410110332202450d22200220083a000041002108428080808010211a0b20074220862001ad84201a2002ad841002024020080d00200210350b024020032802840a450d00200110350b200341e0086a108d0241f7edcb00ad4280808080f0008422071001220228000021012002290004211a200228000c21082002103541e4edcb00ad4280808080a0018410012202290000211b2002290008211c200210352003201c3701c8082003201b3701c008200320083601bc082003201a3701b408200320013601b008200341106a200341b0086a412010c0012003280214210120032802102108200710012202280000210920022900042107200228000c210a2002103541b5edcb00ad4280808080c0018410012202290000211a2002290008211b200210352003201b3701c8082003201a3701c0082003200a3601bc08200320073701b408200320093601b008200341086a200341b0086a412010c001200328020c210220032802082109200341d0096a200341e0086a108e02200341800a6a20032802d009220a20032802d809108f0241002001410020081b2208200241d40020091b6b2202200220084b1b2102200341800a6a41106a290300420020032903800a42015122011b210720032903880a420020011b211a024020032802d409450d00200a10350b200341800a6a41086a41053a0000200341890a6a20032903e008370000200341910a6a200341e0086a41086a2201290300370000200341990a6a200341e0086a41106a2209290300370000200341a10a6a200341e0086a41186a220a290300370000200341b80a6a220b20072004201a200554200720045420072004511b220c1b2207370300200341b00a6a201a2005200c1b2204370300200341043a00800a41b0b4cc004100200341800a6a10d40120012f0100210c20092f0100210d200a290300210520032f01e008210e20032d00e208210f20032d00e308211020032f01e408211120032d00e608211220032d00e708211320032d00ea08211420032d00eb08211520032f01ec08211620032d00ee08211720032d00ef08211820032d00f208211920032d00f308210620032f01f408211d20032d00f608211e20032d00f708211f200341003602d809200342043703d009200341d0096a41004100200820026b220a200a20084b1b10860120032802d80921090240200820024d0d0020032802d00920094102746a2101034020012002360200200141046a21012008200241016a2202470d000b200a20096a21090b200341b0086a41086a22022009360200200341d00a6a2005370300200341cf0a6a201f3a0000200341ce0a6a201e3a0000200341cc0a6a201d3b0100200341cb0a6a20063a0000200341ca0a6a20193a0000200341c80a6a200d3b0100200341c70a6a20183a0000200341c60a6a20173a0000200341c40a6a20163b0100200341c30a6a20153a0000200341c20a6a20143a0000200341c00a6a200c3b0100200341bf0a6a20133a0000200341be0a6a20123a0000200341bc0a6a20113b0100200341bb0a6a20103a0000200341ba0a6a200f3a0000200320032903d0093703b0082003200e3b01b80a200341800a6a41186a2007370300200341a80a6a4100360200200341b40a6a2002280200360200200320043703900a200320073703880a200320043703800a200342083703a00a200320032903b0083702ac0a200342f3e885db96cddbb3203703f00b200341f00b6a200b20042007411f109002200341d0096a20034188096a10b70120032802d0092102200320032802d8093602b408200320023602b008200341800a6a200341b0086a10e101024020032802d409450d00200210350b024020032802a40a2202450d00200241186c450d0020032802a00a10350b200341b00a6a28020041ffffffff0371450d2320032802ac0a10350c230b200141106a290300211b200141086a290300211c2002411a6a290100211a200241196a2d0000210c200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113410e21012002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241096a2d00002118200241086a2d00002119200241066a2f01002106200241056a2d0000211d200241046a2d0000211e200241026a2f0100211f20022d0001210b20022d0000210a41f7edcb00ad4280808080f0008410012202280000210820022900042107200228000c21092002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320083601b008200341286a200341b0086a10f2014103210202402003280228417d71450d0041dca2c0002108418080ec0021090c220b02400240200a41ff01710d00200b41ff01714101470d002003201a3703880c2003200c3a00870c2003200d3a00860c2003200e3b01840c2003200f3a00830c200320103a00820c200320113b01800c200320123a00ff0b200320133a00fe0b200320143b01fc0b200320153a00fb0b200320163a00fa0b200320173b01f80b200320183a00f70b200320193a00f60b200320063b01f40b2003201d3a00f30b2003201e3a00f20b2003201f3b01f00b200341f0066a200341f00b6a10b401200341800a6a20032802f006220920032802f80610d501200341990a6a2900002107200341980a6a2d0000210a200341970a6a2d0000210b200341950a6a2f0000210c200341940a6a2d0000210d200341930a6a2d0000210e200341910a6a2f0000210f200341900a6a2d000021102003418f0a6a2d000021112003418d0a6a2f000021122003418c0a6a2d000021132003418b0a6a2d00002114200341890a6a2f0000211541082101200341800a6a41086a2d0000211620032d00870a211720032f00850a211820032d00840a211920032d00830a210620032d00820a211d20032d00810a211e20032d00800a2108024020032802f406450d00200910350b200841ff01714101460d0141aea6c00021084180800421090c230b41022102410021090c220b200320073703e8092003200a3a00e7092003200b3a00e6092003200c3b01e4092003200d3a00e3092003200e3a00e2092003200f3b01e009200320103a00df09200320113a00de09200320123b01dc09200320133a00db09200320143a00da09200320153b01d809200320163a00d709200320173a00d609200320183b01d409200320193a00d309200320063a00d2092003201d3a00d1092003201e3a00d009200341d00b6a200341d0096a10b701200341800a6a20032802d00b220120032802d80b10d601200341b0086a41086a2208200341bc0a6a290200370300200341b0086a41106a2209200341c40a6a290200370300200341b0086a41186a220a200341cc0a6a290200370300200341b0086a41206a220b200341d40a6a2802003602002003200341b40a6a2902003703b0080240024020032802a00a220c450d00200341800a6a41186a2903002105200341800a6a41086a2903002104200341b00a6a2802002102200341ac0a6a280200210d200341a80a6a280200210e20032903900a211a20032903800a210720032802a40a210f20034188096a41206a200b28020036020020034188096a41186a200a29030037030020034188096a41106a200929030037030020034188096a41086a2008290300370300200320032903b00837038809024020032802d40b450d00200110350b200341e0086a41086a220120034188096a41086a290300370300200341e0086a41106a220820034188096a41106a290300370300200341e0086a41186a220920034188096a41186a290300370300200341e0086a41206a220a20034188096a41206a280200360200200341f0066a41186a2005370300200341a0076a200236020020034198076a200e36020020034194076a200f36020020032003290388093703e0082003201a37038007200320073703f0062003200d36029c072003200c36029007200320043703f806200341c4076a200a280200360200200341bc076a2009290300370200200341b4076a2008290300370200200341ac076a2001290300370200200341a4076a20032903e008370200200341b0086a200341f00b6a108e02200341800a6a20032802b008220120032802b808108f02200341800a6a41106a290300420020032903800a42015122021b210520032903880a420020021b211a024020032802b408450d0020011035200341f0066a41086a290300210420032903f00621070b201a20077d2220201a56200520047d201a200754ad7d221a200556201a2005511b0d01200341f0066a41186a2202290300212120032003290380072222201c20202020201c56201a201b56201a201b511b22011b22057c221c3703800720022021201b201a20011b221a7c201c202254ad7c3703002003200520077c22073703f0062003201a20047c2007200554ad7c22043703f806200341800a6a41386a201a370300200341b00a6a2005370300200341800a6a41086a41053a0000200341890a6a20032903f00b370000200341910a6a200341f00b6a41086a290300370000200341990a6a200341800c6a290300370000200341a10a6a200341f00b6a41186a290300370000200341043a00800a41b0b4cc004100200341800a6a10d401200342f3e885db96cddbb3203703880920034188096a200341f0066a41386a20072004411f109002200341800a6a200341d0096a10b70120032802800a2102200320032802880a3602b408200320023602b008200341f0066a200341b0086a10e101024020032802840a450d00200210350b02402003280294072202450d00200241186c450d0020032802900710350b20032802a00741ffffffff0371450d24200328029c0710350c240b024020032802d40b450d00200110350b41b6a6c0002108410d2101410021090c220b02402003280294072202450d00200241186c450d0020032802900710350b20032802a00741ffffffff0371450d22200328029c0710350c220b200141106a290300211b200141086a290300211c2002411a6a290100211a200241196a2d0000210c200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113410e21012002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241096a2d00002118200241086a2d00002119200241066a2f01002106200241056a2d0000211d200241046a2d0000211e200241026a2f0100211f20022d0001210b20022d0000210a41f7edcb00ad4280808080f0008410012202280000210820022900042107200228000c21092002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320083601b008200341386a200341b0086a10f201410321020240024002402003280238417d71450d0041dca2c0002108418090ec0021090c010b0240200a41ff01710d00200b41ff01714101470d002003201a3703e8092003200c3a00e7092003200d3a00e6092003200e3b01e4092003200f3a00e309200320103a00e209200320113b01e009200320123a00df09200320133a00de09200320143b01dc09200320153a00db09200320163a00da09200320173b01d809200320183a00d709200320193a00d609200320063b01d4092003201d3a00d3092003201e3a00d2092003201f3b01d009200341f00b6a200341d0096a10b701200341800a6a20032802f00b220b20032802f80b10d601200341b0086a41086a220c200341bc0a6a290200370300200341b0086a41106a220d200341c40a6a290200370300200341b0086a41186a220e200341cc0a6a290200370300200341b0086a41206a220f200341d40a6a2802003602002003200341b40a6a2902003703b008024020032802a00a2209450d00200341800a6a41186a2903002107200341800a6a41086a2903002105200341b00a6a280200210a200341ac0a6a2802002110200341a80a6a280200210120032903900a210420032903800a211a20032802a40a210820034188096a41206a200f28020036020020034188096a41186a200e29030037030020034188096a41106a200d29030037030020034188096a41086a200c290300370300200320032903b00837038809024020032802f40b450d00200b10350b200341e0086a41086a220b20034188096a41086a290300370300200341e0086a41106a220c20034188096a41106a290300370300200341e0086a41186a220d20034188096a41186a290300370300200341e0086a41206a220e20034188096a41206a280200360200200341f0066a41186a2007370300200341a0076a200a36020020034198076a200136020020034194076a200836020020032003290388093703e00820032004370380072003201a3703f0062003201036029c072003200936029007200320053703f806200341c4076a200e280200360200200341bc076a200d290300370200200341b4076a200c290300370200200341ac076a200b290300370200200341a4076a20032903e0083702002001411f4d0d0302402008450d00200841186c450d002009103520032802a007210a0b0240200a41ffffffff0371450d00200328029c0710350b41cca5c0002108410c21014180902021090c020b024020032802f40b450d00200b10350b41b6a6c0002108410d210141801021090c010b4102210241801021090b20004200370308200041206a20013602002000411c6a2008360200200041186a20092002723602000c240b200341f0066a41206a210202402004201c2004201c542007201b542007201b511b220a1b22052007201b200a1b221a844200510d00200341f0066a41186a42002007201a7d2004200554ad7d221b200420057d221c428080e983b1de16544100201b501b220a1b37030020034200201c200a1b3703800741f7edcb00ad4280808080f000841001220b280000210c200b290004211b200b28000c210d200b103541e4edcb00ad4280808080a001841001220b290000211c200b2900082120200b1035200320203701c8082003201c3701c0082003200d3601bc082003201b3701b4082003200c3601b008200341306a200341b0086a412010c0012007201a200a1b210720042005200a1b2104200328023441a0056a41a00520032802301b210a024020012008470d00200220084101109c01200328029807210120032802900721090b2009200141186c6a22012007370308200120043703002001200a360210200320032802980741016a36029807200342f3e885db96cddbb3203703880920034188096a200341f0066a41386a20032903f006200341f0066a41086a290300411f109002200341800a6a200341d0096a10b70120032802800a2101200320032802880a3602b408200320013602b008200341f0066a200341b0086a10e101024020032802840a450d00200110350b200341800a6a41386a2007370300200341b00a6a2004370300200341800a6a41086a41063a0000200341890a6a20032903a807370000200341910a6a200341b0076a290300370000200341990a6a200341b8076a290300370000200341a10a6a200341c0076a290300370000200341043a00800a41b0b4cc004100200341800a6a10d4010b0240200241046a2802002201450d00200141186c450d00200228020010350b20032802a00741ffffffff0371450d21200328029c0710350c210b2002411a6a290100211a200241196a2d0000210e200241186a2d0000210f200241166a2f01002110200241156a2d00002111200241146a2d00002112200241126a2f01002113200241116a2d00002114200241106a2d00002115410e21082002410e6a2f010021162002410d6a2d000021172002410c6a2d000021182002410a6a2f01002119200241096a2d0000210641082101200241086a2d0000211d200241066a2f0100211e200241056a2d0000211f200241046a2d00002123200241026a2f0100210b20022d0001210d20022d0000210c41f7edcb00ad4280808080f0008410012202280000210920022900042107200228000c210a2002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c0082003200a3601bc08200320073701b408200320093601b008200341c8006a200341b0086a10f20141032102024002402003280248417d710d000240200c41ff01710d00200d41ff01714101470d002003201a3703880c2003200e3a00870c2003200f3a00860c200320103b01840c200320113a00830c200320123a00820c200320133b01800c200320143a00ff0b200320153a00fe0b200320163b01fc0b200320173a00fb0b200320183a00fa0b200320193b01f80b200320063a00f70b2003201d3a00f60b2003201e3b01f40b2003201f3a00f30b200320233a00f20b2003200b3a00f00b2003200b4108763a00f10b200341d0096a200341f00b6a10b701200341800a6a20032802d009220220032802d80910d601200341b0086a41086a2201200341bc0a6a290200370300200341b0086a41106a2208200341c40a6a290200370300200341b0086a41186a2209200341cc0a6a290200370300200341b0086a41206a220a200341d40a6a2802003602002003200341b40a6a2902003703b00802400240024020032802a00a220b450d00200341800a6a41186a2903002107200341800a6a41086a290300211b200341b00a6a280200210c200341ac0a6a280200210d200341a80a6a280200210e20032903900a210420032903800a211c20032802a40a210f20034188096a41206a200a28020036020020034188096a41186a200929030037030020034188096a41106a200829030037030020034188096a41086a2001290300370300200320032903b00837038809024020032802d409450d00200210350b200341e0086a41086a220220034188096a41086a290300370300200341e0086a41106a220120034188096a41106a290300370300200341e0086a41186a220820034188096a41186a290300370300200341e0086a41206a220920034188096a41206a280200360200200341f0066a41186a220a2007370300200341a0076a200c36020020034198076a200e36020020034194076a200f36020020032003290388093703e00820032004370380072003201c3703f0062003200d36029c072003200b360290072003201b3703f806200341c4076a2009280200360200200341bc076a220c2008290300370200200341b4076a220d2001290300370200200341ac076a220e2002290300370200200341a4076a20032903e008370200200341d0096a41186a200341c0076a220f290300370300200341d0096a41106a200341b8076a2210290300370300200341d0096a41086a200341b0076a2211290300370300200320032903a8073703d00941f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21082002103541e4edcb00ad4280808080a001841001220229000021042002290008210520021035200320053701c808200320043701c008200320083601bc08200320073701b408200320013601b008200341c0006a200341b0086a412010c00120032802404101460d01200a2903002120200329038007212120032802980721080c020b024020032802d409450d00200210350b41b6a6c0002109410d210841032102410821014100210a4100210b0c040b20032802442109200341b0086a41086a2003419c076a220b41086a2802003602002003200b2902003703b0082003280290072112200a2903002120200341aa076a2d00002113200341ab076a2d00002114200e2f01002115200341ae076a2d00002116200341af076a2d0000211720112f01002111200341b2076a2d00002118200341b3076a2d00002119200d2f01002106200341b6076a2d0000211d200341b7076a2d0000211e20102f01002110200341ba076a2d0000211f200341bb076a2d00002123200c2f01002124200341be076a2d00002125200341bf076a2d00002126200f2903002122200329038007212120032f01a807210f200328029407210d201c2107201b2104024002400240200328029807220e450d002012200e41186c6a210a200e41186c41686a2101201c2107201b2104201221020340200241086a290300211a200229030021052009200241106a2802002208490d0242002004201a7d2007200554ad7d221a200720057d2205200756201a200456201a2004511b22081b21044200200520081b2107200141686a2101200241186a2202200a470d000b0b4108210c410021080240200d450d00200d41186c450d00201210350b410021020c010b41181033220c450d18200c2005370300200c2008360210200c201a37030820034281808080103702840a2003200c3602800a0240024020010d00410121080c010b200241186a2127200e41186c20126a41686a21284101210803402027210202400340200241086a290300211a200229030021052009200241106a2802002201490d0142002004201a7d2007200554ad7d221a200720057d2205200756201a200456201a2004511b22011b21044200200520011b2107200241186a2202200a470d000c030b0b0240200820032802840a470d00200341800a6a20084101109c0120032802800a210c0b200241186a2127200c200841186c6a220e2001360210200e201a370308200e20053703002003200841016a22083602880a20282002470d000b0b0240200d450d00200d41186c450d00201210350b20032802840a21020b200b20032903b00837020020034188076a2020370300200b41086a200341b0086a41086a2802003602002003202137038007200320073703f006200320083602980720032002360294072003200c36029007200320223703c007200320263a00bf07200320253a00be07200320243b01bc07200320233a00bb072003201f3a00ba07200320103b01b8072003201e3a00b7072003201d3a00b607200320063b01b407200320193a00b307200320183a00b207200320113b01b007200320173a00af07200320163a00ae07200320153b01ac07200320143a00ab07200320133a00aa072003200f3b01a807200320043703f8060b024002400240024020080d002021202084500d010b200342f3e885db96cddbb3203703880920034188096a200341a8076a20032903f006200341f8066a290300411f109002200341800a6a200341f00b6a10b70120032802800a2102200320032802880a3602b408200320023602b008200341f0066a200341b0086a10e10120032802840a450d01200210350c010b200341800a6a200341d0096a10910220032d00800a22024104470d01200342f3e885db96cddbb3203703d00b200341d00b6a200341d0096a1092020b0240201c20032903f006220458201b200341f0066a41086a290300220758201b2007511b0d00200341b00a6a201c20047d370300200341800a6a41086a41073a0000200341890a6a20032903d009370000200341910a6a200341d0096a41086a290300370000200341990a6a200341e0096a290300370000200341a10a6a200341e8096a290300370000200341b80a6a201b20077d201c200454ad7d370300200341043a00800a41b0b4cc004100200341800a6a10d4010b02402003280294072202450d00200241186c450d0020032802900710350b20032802a00741ffffffff0371450d24200328029c0710350c240b20032d00830a411074210120032f00810a210820032902840a210702402003280294072209450d00200941186c450d0020032802900710350b2008200172210120074220882104024020032802a00741ffffffff0371450d00200328029c0710350b2001411076210a2001410876210b2004a721082007a721090c020b410221020b41dca2c0002109411b210b4100210a0b20004200370308200041206a20083602002000411c6a2009360200200041186a200a411874200b411074418080fc07717220014108744180fe0371722002723602000c220b2002411a6a290100211a200241196a2d0000210d200241186a2d0000210e200241166a2f0100210f200241156a2d00002110200241146a2d00002111200241126a2f01002112200241116a2d00002113200241106a2d00002114410e21082002410e6a2f010021152002410d6a2d000021162002410c6a2d000021172002410a6a2f01002118200241096a2d00002119200241086a2d00002106200241066a2f0100211d200241056a2d0000211e200241046a2d0000211f200241026a2f01002123200141046a280200210b20022d0001210c20022d0000210a41f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21092002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320013601b008200341d0006a200341b0086a10f20141032102024002402003280250417d71450d0041dca2c0002101418090ec0021090c010b0240200a41ff01710d00200c41ff01714101470d002003201a3703e8092003200d3a00e7092003200e3a00e6092003200f3b01e409200320103a00e309200320113a00e209200320123b01e009200320133a00df09200320143a00de09200320153b01dc09200320163a00db09200320173a00da09200320183b01d809200320193a00d709200320063a00d6092003201d3b01d4092003201e3a00d3092003201f3a00d209200320233b01d009200341f00b6a200341d0096a10b701200341800a6a20032802f00b220a20032802f80b10d601200341b0086a41086a220c200341bc0a6a290200370300200341b0086a41106a220d200341c40a6a290200370300200341b0086a41186a220e200341cc0a6a290200370300200341b0086a41206a220f200341d40a6a2802003602002003200341b40a6a2902003703b008024020032802a00a2201450d00200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a2802002108200341ac0a6a2802002109200341a80a6a280200211020032903900a210520032903800a211a20032802a40a210220034188096a41206a200f28020036020020034188096a41186a200e29030037030020034188096a41106a200d29030037030020034188096a41086a200c290300370300200320032903b00837038809024020032802f40b450d00200a10350b200341e0086a41086a220a20034188096a41086a290300370300200341e0086a41106a220c20034188096a41106a290300370300200341e0086a41186a220d20034188096a41186a290300370300200341e0086a41206a220e20034188096a41206a280200360200200341f0066a41186a2007370300200341a0076a200836020020034198076a201036020020034194076a200236020020032003290388093703e00820032005370380072003201a3703f0062003200936029c072003200136029007200320043703f806200341c4076a200e280200360200200341bc076a200d290300370200200341b4076a200c290300370200200341ac076a200a290300370200200341a4076a20032903e008370200200341800a6a200341a8076a220a10b90120033502880a42208620032802800a220cad841007024020032802840a450d00200c10350b200341800a6a200a10b50120033502880a210720032802800a210a200341003a00b5080240024002400240200b41c000490d00200b41808001490d01200b418080808004490d02200341053a00b508200341033a00b0082003200b3600b1084280808080d00021040c030b200341013a00b5082003200b4102743a00b00842808080801021040c020b200341023a00b5082003200b4102744101723b01b00842808080802021040c010b200341043a00b5082003200b4102744102723602b0084280808080c00021040b2007422086200aad842004200341b0086aad841002024020032d00b508450d00200341003a00b5080b024020032802840a450d00200a10350b02402002450d00200241186c450d00200110350b200841ffffffff0371450d22200910350c220b024020032802f40b450d00200a10350b41b6a6c0002101410d210841801021090c010b4102210241801021090b20004200370308200041206a20083602002000411c6a2001360200200041186a20092002723602000c210b2001410c6a280200210e200141086a2802002108200141046a280200210b2002411a6a290100211a200241196a2d0000210f200241186a2d00002110200241166a2f01002111200241156a2d00002112200241146a2d00002113200241126a2f01002114200241116a2d00002115200241106a2d00002116410e21012002410e6a2f010021172002410d6a2d000021182002410c6a2d000021192002410a6a2f01002106200241096a2d0000211d200241086a2d0000211e200241066a2f0100211f200241056a2d00002123200241046a2d00002124200241026a2f0100212520022d0001210d20022d0000210c41f7edcb00ad4280808080f0008410012202280000210920022900042107200228000c210a2002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c0082003200a3601bc08200320073701b408200320093601b008200341e0006a200341b0086a10f2014103210202402003280260417d71450d0041dca2c0002109411b210a0c170b200c41ff01710d14200d41ff01714101470d142003201a3703c8092003200f3a00c709200320103a00c609200320113b01c409200320123a00c309200320133a00c209200320143b01c009200320153a00bf09200320163a00be09200320173b01bc09200320183a00bb09200320193a00ba09200320063b01b8092003201d3a00b7092003201e3a00b6092003201f3b01b409200320233a00b309200320243a00b209200320253b01b009200341d0096a200341b0096a10b701200341800a6a20032802d009220c20032802d80910d601200341b0086a41086a220d200341bc0a6a290200370300200341b0086a41106a220f200341c40a6a290200370300200341b0086a41186a2210200341cc0a6a290200370300200341b0086a41206a2211200341d40a6a2802003602002003200341b40a6a2902003703b008024002400240024020032802a00a2209450d00200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a280200210a200341ac0a6a2802002112200341a80a6a280200211320032903900a210520032903800a211a20032802a40a210120034188096a41206a201128020036020020034188096a41186a201029030037030020034188096a41106a200f29030037030020034188096a41086a200d290300370300200320032903b00837038809024020032802d409450d00200c10350b200341e0086a41086a220c20034188096a41086a290300370300200341e0086a41106a220d20034188096a41106a290300370300200341e0086a41186a220f20034188096a41186a290300370300200341e0086a41206a221020034188096a41206a280200360200200341f0066a41186a2007370300200341a0076a200a36020020034198076a2013360200200341f0066a41246a200136020020032003290388093703e00820032005370380072003201a3703f0062003201236029c072003200936029007200320043703f806200341c4076a2010280200360200200341bc076a200f290300370200200341b4076a200d290300370200200341ac076a200c290300370200200341a4076a20032903e008370200200e450d190240200e41246c2202450d00200341d0096a41086a220c200b41096a290000370300200341d0096a41106a220d200b41116a290000370300200341d0096a41186a220f200b41196a290000370300200341ef096a2210200b41206a2800003600002003200b2900013703d009200b2d000022114102470d020b4100210c0c020b024020032802d409450d00200c10350b41b6a6c0002109410d21014100210a0c190b200341800a6a41096a200c290300370000200341800a6a41116a200d290300370000200341800a6a41196a200f290300370000200341800a6a41206a2010280000360000200320113a00800a200320032903d0093700810a200341b0086a200341800a6a108b0220034188096a41086a200341b0086a41096a29000037030020034188096a41106a200341b0086a41116a29000037030020034188096a41186a200341b0086a41196a290000370300200320032900b108370388094101210c20032d00b0084101470d01200341f00b6a41086a200341e0086a41086a290300370300200341f00b6a41106a200341e0086a41106a290300370300200341f00b6a41186a200341e0086a41186a290300370300200320032903e0083703f00b0b4100210e4101210f02402008450d00200841246c450d00200b10350b410021020c190b200341d00b6a41086a220c20034188096a41086a290300370300200341d00b6a41106a220d20034188096a41106a290300370300200341d00b6a41186a221020034188096a41186a290300370300200320032903880922073703f00b200320073703d00b41201033220f450d11200f20032903d00b370000200f41186a2010290300370000200f41106a200d290300370000200f41086a200c29030037000020034281808080103702c40b2003200f3602c00b02400240200b20026a200b41246a460d00200341d0096a41086a2202200b412d6a290000370300200341d0096a41106a220c200b41356a290000370300200341d0096a41186a220d200b413d6a290000370300200341ef096a2210200b41c4006a2800003600002003200b2900253703d009200b2d002422114102460d00200341800a6a41096a2002290300370000200341800a6a41116a200c290300370000200341800a6a41196a200d290300370000200341800a6a41206a2010280000360000200320113a00800a200320032903d0093700810a200341b0086a200341800a6a108b0220034188096a41086a200341b0086a41096a29000037030020034188096a41106a200341b0086a41116a29000037030020034188096a41186a200341b0086a41196a290000370300200320032900b1083703880920032d00b0084101470d01200341f00b6a41086a200341e0086a41086a290300370300200341f00b6a41106a200341e0086a41106a290300370300200341f00b6a41186a200341e0086a41186a290300370300200320032903e0083703f00b4101210c410121020c190b4100210c410121020c180b200b41c8006a210d200341f00b6a41086a222420034188096a41086a221d2903002207370300200341d00b6a41186a221420034188096a41186a221e290300370300200341d00b6a41106a221520034188096a41106a221f290300370300200341d00b6a41086a22162007370300200320032903880922073703f00b200320073703d00b200e41246c41b87f6a2113200341b0086a4101722110200341800a6a410172210e200341d0096a411f6a210641202111410221024101210c0340200341800a6a41186a22172014290300370300200341800a6a41106a22182015290300370300200341800a6a41086a22192016290300370300200320032903d00b3703800a02402002417f6a200c470d00200341c00b6a200c4101108a0120032802c00b210f0b200f20116a220c20032903800a370000200c41186a2017290300370000200c41106a2018290300370000200c41086a2019290300370000200320023602c80b4100210c20024110460d182013450d18200341d0096a41086a2217200d41096a290000370300200341d0096a41106a2218200d41116a290000370300200341d0096a41186a2219200d41196a2900003703002006200d41206a2800003600002003200d2900013703d009200d2d000022234102460d18200e20032903d009370000200e41086a2017290300370000200e41106a2018290300370000200e41186a2019290300370000200e411f6a2006280000360000200320233a00800a200341b0086a200341800a6a108b02201d201041086a290000370300201f201041106a290000370300201e201041186a2900003703002003201029000037038809024020032d00b0084101470d00200341f00b6a41086a200341e0086a41086a290300370300200341f00b6a41106a200341e0086a41106a290300370300200341f00b6a41186a200341e0086a41186a290300370300200320032903e0083703f00b4101210c0c190b200d41246a210d2024201d29030022073703002014201e2903003703002015201f29030037030020162007370300200320032903880922073703f00b200320073703d00b201141206a2111200241016a21022013415c6a211320032802c40b210c0c000b0b41012102410021090c1e0b2001410c6a280200210a200141086a2802002108200141046a2802002109200141d0016a280200210b200341f0066a200141106a41c001109d081a200341d8086a20014180026a290300370300200341d0086a200141f8016a290300370300200341c8086a200141f0016a290300370300200341b0086a41106a200141e8016a290300370300200341b0086a41086a200141e0016a2903003703002003200141d8016a2903003703b0080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000d0020022d000141ff01714102470d002003200a360290092003200836028c092003200936028809200341800a6a200341f0066a41c001109d081a200341d0096a41286a200341b0086a41286a290300370300200341d0096a41206a200341b0086a41206a290300370300200341d0096a41186a200341b0086a41186a290300370300200341d0096a41106a200341b0086a41106a290300370300200341d0096a41086a200341b0086a41086a290300370300200320032903b0083703d00920034188096a200341800a6a4102200341d0096a200b109302220941ff0171411d460d3c41dca2c0002102410e2108418080ec0021012009411f710e1d0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d010b200341f0066a10fa012008450d1d200841ffffffff0771450d1d200910350c1d0b200341940a6a4101360200200342013702840a200341e8d4ca003602800a200341043602d409200341f0d5ca003602d0092003200341d0096a3602900a200341800a6a41b0b4cc00104c000b41b6a6c0002102410d2108410021010c1a0b41aea6c0002102410821084180800421010c190b41a1a6c0002102410d21084180800821010c180b4194a6c0002102410d21084180800c21010c170b4188a6c0002102410c21084180801021010c160b41faa5c00021024180801421010c150b41e9a5c0002102411121084180801821010c140b41d8a5c0002102411121084180801c21010c130b41cca5c0002102410c21084180802021010c120b41bfa5c0002102410d21084180802421010c110b41b3a5c0002102410c21084180802821010c100b41a1a5c0002102411221084180802c21010c0f0b4187a5c0002102411a21084180803021010c0e0b41f5a4c0002102411221084180803421010c0d0b41e7a4c00021024180803821010c0c0b41d0a4c0002102411721084180803c21010c0b0b41baa4c000210241162108418080c00021010c0a0b41a7a4c000210241132108418080c40021010c090b418fa4c000210241182108418080c80021010c080b41fca3c000210241132108418080cc0021010c070b41e8a3c000210241142108418080d00021010c060b41d2a3c000210241162108418080d40021010c050b41bba3c000210241172108418080d80021010c040b41a2a3c000210241192108418080dc0021010c030b418da3c000210241152108418080e00021010c020b41fca2c000210241112108418080e40021010c010b41eaa2c000210241122108418080e80021010b410321090c010b41022109410021010b20004200370308200041206a20083602002000411c6a2002360200200041186a2001418080fc0071200972418010723602000c1e0b2001410c6a280200210a200141086a2802002108200141046a2802002109200141d0016a280200210b200341f0066a200141106a41c001109d081a200341d8086a20014180026a290300370300200341d0086a200141f8016a290300370300200341c8086a200141f0016a290300370300200341b0086a41106a200141e8016a290300370300200341b0086a41086a200141e0016a2903003703002003200141d8016a2903003703b0080240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000d0020022d00014101470d002003200a360290092003200836028c092003200936028809200341800a6a200341f0066a41c001109d081a200341d0096a41286a200341b0086a41286a290300370300200341d0096a41206a200341b0086a41206a290300370300200341d0096a41186a200341b0086a41186a290300370300200341d0096a41106a200341b0086a41106a290300370300200341d0096a41086a200341b0086a41086a290300370300200320032903b0083703d00920034188096a200341800a6a4101200341d0096a200b109302220941ff0171411d460d3b41dca2c0002102410e2108418080ec0021012009411f710e1d0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d010b200341f0066a10fa012008450d1d200841ffffffff0771450d1d200910350c1d0b200341940a6a4101360200200342013702840a200341e8d4ca003602800a200341043602d409200341f0d5ca003602d0092003200341d0096a3602900a200341800a6a41b0b4cc00104c000b41b6a6c0002102410d2108410021010c1a0b41aea6c0002102410821084180800421010c190b41a1a6c0002102410d21084180800821010c180b4194a6c0002102410d21084180800c21010c170b4188a6c0002102410c21084180801021010c160b41faa5c00021024180801421010c150b41e9a5c0002102411121084180801821010c140b41d8a5c0002102411121084180801c21010c130b41cca5c0002102410c21084180802021010c120b41bfa5c0002102410d21084180802421010c110b41b3a5c0002102410c21084180802821010c100b41a1a5c0002102411221084180802c21010c0f0b4187a5c0002102411a21084180803021010c0e0b41f5a4c0002102411221084180803421010c0d0b41e7a4c00021024180803821010c0c0b41d0a4c0002102411721084180803c21010c0b0b41baa4c000210241162108418080c00021010c0a0b41a7a4c000210241132108418080c40021010c090b418fa4c000210241182108418080c80021010c080b41fca3c000210241132108418080cc0021010c070b41e8a3c000210241142108418080d00021010c060b41d2a3c000210241162108418080d40021010c050b41bba3c000210241172108418080d80021010c040b41a2a3c000210241192108418080dc0021010c030b418da3c000210241152108418080e00021010c020b41fca2c000210241112108418080e40021010c010b41eaa2c000210241122108418080e80021010b410321090c010b41022109410021010b20004200370308200041206a20083602002000411c6a2002360200200041186a2001418080fc0071200972418010723602000c1d0b200341f0066a41186a200141196a290000370300200341f0066a41106a200141116a290000370300200341f8066a200141096a290000370300200320012900013703f006200341d0096a200341f0066a108e02200341800a6a20032802d009220120032802d809108f02200341800a6a41106a290300420020032903800a42015122021b210720032903880a420020021b2104200341a00a6a290300420020021b2105200341800a6a41186a290300420020021b211a024020032802d409450d00200110350b024002400240427f2004201a7c221a201a2004542202200720057c2002ad7c220420075420042007511b22021b427f200420021b844200520d00200341800a6a200341f0066a10910220032d00800a22024104460d0220032f00810a20032d00830a4110747241087422094180fe037121012009418080fc077121082009418080807871210920032902840a2207422088a7210a2007a7210b0c010b41b3a5c000210b410c210a410321024180102101418080282108410021090b20004200370308200041206a200a3602002000411c6a200b360200200041186a20092008722001722002723602000c1d0b200342f3e885db96cddbb3203703b008200341b0086a200341f0066a1092020c1a0b024020022d000120022d0000410047720d00200141046a280200210841f7edcb00ad4280808080f00084221a10012202280000210120022900042107200228000c21092002103541e4edcb00ad4280808080a001841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320013601b008200341e8066a200341b0086a412010c00120032802e8064101470d1a20032802ec062101201a10012202280000210920022900042107200228000c210a2002103541b5edcb00ad4280808080c0018422041001220229000021052002290008211a200210352003201a3701c808200320053701c0082003200a3601bc08200320073701b408200320093601b008200341e0066a200341b0086a412010c00102404100200120032802e40641d40020032802e0061b6b2202200220014b1b22024100200120086b2209200920014b1b22014f0d000340200210c1012001200241016a2202470d000b0b41f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21092002103520041001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320013601b008200320083602800a200341b0086aad4280808080800484200341800a6aad4280808080c0008410020c1a0b20004200370308200041186a41023602000c1b0b200141106a2903002107200141086a290300211b2002411a6a290100211c200241196a2d0000210c200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113410e21012002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241096a2d00002118200241086a2d00002119200241066a2f01002106200241056a2d0000211d200241046a2d0000211e200241026a2f0100211f20022d0001210b20022d0000210a41f7edcb00ad4280808080f0008410012202280000210820022900042104200228000c21092002103541b6aac000ad42808080809002841001220229000021052002290008211a200210352003201a3701c808200320053701c008200320093601bc08200320043701b408200320083601b008200341d8066a200341b0086a10f201410321020240024020032802d806417d71450d0041dca2c0002108418090ec0021090c010b02400240200a41ff01710d00200b41ff01714101470d002003201c3703880c2003200c3a00870c2003200d3a00860c2003200e3b01840c2003200f3a00830c200320103a00820c200320113b01800c200320123a00ff0b200320133a00fe0b200320143b01fc0b200320153a00fb0b200320163a00fa0b200320173b01f80b200320183a00f70b200320193a00f60b200320063b01f40b2003201d3a00f30b2003201e3a00f20b2003201f3b01f00b200341f0066a200341f00b6a10b701200341800a6a20032802f006220820032802f80610d601200341b0086a41086a220a200341bc0a6a290200370300200341b0086a41106a220b200341c40a6a290200370300200341b0086a41186a220c200341cc0a6a290200370300200341b0086a41206a220d200341d40a6a2802003602002003200341b40a6a2902003703b00820032802a00a2209450d01200341800a6a41186a290300211c200341800a6a41086a2903002129200341b00a6a280200210f200341ac0a6a2802002110200341a80a6a280200210120032903900a212020032903800a212a20032802a40a210e20034188096a41206a200d28020036020020034188096a41186a200c29030037030020034188096a41106a200b29030037030020034188096a41086a200a290300370300200320032903b00837038809024020032802f406450d00200810350b200341e0086a41106a20034188096a41106a2903002204370300200341d0096a41086a220820034188096a41086a290300370300200341d0096a41106a220a2004370300200341d0096a41186a220b20034188096a41186a290300370300200341d0096a41206a220c20034188096a41206a28020036020020032003290388093703d00902402001450d00200341f0066a41206a200c280200360200200341f0066a41186a200b290300370300200341f0066a41106a200a290300370300200341f0066a41086a2008290300370300200320032903d0093703f006200141186c20096a41686a2102420021214200212202400340024020010d00410021010c020b02402002290300220420217c2205201b58200241086a290300222b20227c2005200454ad7c221a200758201a20075122081b0d0020022004201b20217d22057d3703002002202b200720227d201b202154ad7d22077d2004200554ad7d3703082007201c7c200520207c2220200554ad7c211c0c020b2001417f6a2101202b201c7c200420207c2220200454ad7c211c200241686a210220052121201a21222005201b54201a20075420081b0d000b0b200341800a6a41186a201c370300200341b00a6a200f360200200341a80a6a2001360200200341a40a6a200e360200200341b40a6a20032903f006370200200341bc0a6a200341f8066a290300370200200341c40a6a20034180076a290300370200200341cc0a6a200341f0066a41186a290300370200200341d40a6a20034190076a280200360200200320203703900a2003202a3703800a200320103602ac0a200320093602a00a200320293703880a200342f3e885db96cddbb3203703880920034188096a200341b80a6a202a2029411f109002200341f0066a200341f00b6a10b70120032802f0062102200320032802f8063602b408200320023602b008200341800a6a200341b0086a10e101024020032802f406450d00200210350b024020032802a40a2202450d00200241186c450d0020032802a00a10350b20032802b00a41ffffffff0371450d1c20032802ac0a10350c1c0b0240200e450d00200e41186c450d00200910350b0240200f41ffffffff0371450d00201010350b41bfa5c0002108410d21014180902421090c020b4102210241801021090c010b024020032802f406450d00200810350b41b6a6c0002108410d210141801021090b20004200370308200041206a20013602002000411c6a2008360200200041186a20092002723602000c1a0b200141246a280200210a20022d0001210b20022d00002109200341c8096a200141196a290000370300200341c0096a200141116a290000370300200341b8096a200141096a290000370300200320012900013703b00941f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21082002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701e80b200320043701e00b200320083601dc0b200320073701d40b200320013601d00b200341d0066a200341d00b6a10f201410321020240024002400240024002400240024002400240024020032802d006417d710d0041022102200941ff01710d00200b41ff01714101470d00200341f00b6a41186a200341b0096a41186a290300370300200341f00b6a41106a200341b0096a41106a290300370300200341f00b6a41086a200341b0096a41086a290300370300200320032903b0093703f00b41f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21082002103541e4edcb00ad4280808080a001841001220229000021042002290008210520021035200320053701e80b200320043701e00b200320083601dc0b200320073701d40b200320013601d00b200341c8066a200341d00b6a412010c00141a1a5c0002101411221084180802c210920032802c806450d0220032802cc06220b200a490d0241f7edcb00ad4280808080f00084221a10012202280000210c20022900042107200228000c210d2002103541b5edcb00ad4280808080c001841001220229000021042002290008210520021035200320053701e80b200320043701e00b2003200d3601dc0b200320073701d40b2003200c3601d00b200341c0066a200341d00b6a412010c001200a4100200b20032802c40641d40020032802c0061b6b22022002200b4b1b220b490d02201a10012202280000210c20022900042107200228000c210d2002103541eeeecb00ad4280808080a001841001220229000021042002290008210520021035200320053701e80b200320043701e00b2003200d3601dc0b200320073701d40b2003200c3601d00b200341b8066a200341d00b6a412010c001024020032802b8064101470d0020032802bc06200a4b0d030b200341800a6a200a10be01200341a0066a20032802800a220c20032802880a10d701200341b0066a290300210420032903a806210720032802a0062102024020032802840a450d00200c10350b2002450d02200341f0066a200341f00b6a10b401200341800a6a20032802f006220120032802f80610d501200341990a6a2900002105200341980a6a2d00002108200341970a6a2d00002109200341950a6a2f0000210c200341940a6a2d0000210d200341930a6a2d0000210e200341910a6a2f0000210f200341900a6a2d000021102003418f0a6a2d000021112003418d0a6a2f000021122003418c0a6a2d000021132003418b0a6a2d00002114200341890a6a2f00002115200341880a6a2d0000211620032d00870a211720032f00850a211820032d00840a211920032d00830a210620032d00820a211d20032d00810a211e20032d00800a2102024020032802f406450d00200110350b200241ff01714101470d01200320053703e809200320083a00e709200320093a00e6092003200c3b01e4092003200d3a00e3092003200e3a00e2092003200f3b01e009200320103a00df09200320113a00de09200320123b01dc09200320133a00db09200320143a00da09200320153b01d809200320163a00d709200320173a00d609200320183b01d409200320193a00d309200320063a00d2092003201d3a00d1092003201e3a00d009200341e0086a200341d0096a10b701200341800a6a20032802e008220220032802e80810d601200341b0086a41086a2208200341bc0a6a290200370300200341b0086a41106a2209200341c40a6a290200370300200341b0086a41186a220c200341cc0a6a290200370300200341b0086a41206a220d200341d40a6a2802003602002003200341b40a6a2902003703b00802400240024020032802a00a220e450d00200341800a6a41186a2903002105200341800a6a41086a290300211a200341b00a6a280200210f200341ac0a6a2802002101200341a80a6a280200211020032903900a211b20032903800a211c20032802a40a211120034188096a41206a200d28020036020020034188096a41186a200c29030037030020034188096a41106a200929030037030020034188096a41086a2008290300370300200320032903b00837038809024020032802e408450d00200210350b200341f0066a41186a2005370300200341a0076a200f36020020034198076a201036020020034194076a2011360200200341a4076a2202200329038809370200200341ac076a20034190096a290300370200200341b4076a20034198096a290300370200200341bc076a20034188096a41186a290300370200200341c4076a200341a8096a2802003602002003201b370380072003201c3703f0062003200136029c072003200e360290072003201a3703f8060240200228020022090d0041002108410021020c030b41002102410021080340024002400240200b2001280200220c4b0d0020020d01410021020c020b200241016a21020c010b200820026b220d20094f0d08200120024102746b220d280200210e200d200c3602002001200e3602000b200141046a21012009200841016a2208470d000b024002402002450d0020032802a407220c200920026b2202490d01200320023602a4072002210c0c010b20032802a407210c0b200328029c0721014100210802400240200c41014b0d0041002102200c0e020401040b200c2102034020082002410176220920086a220b200a2001200b4102746a280200491b2108200220096b220241014b0d000b0b41032102200a200120084102746a2802002209470d010c0a0b024020032802e408450d00200210350b41b6a6c0002101410d210841032102410021090c0a0b200c2008200a20094b6a2208490d05200c21020b0240200220032802a007470d002003419c076a20024101108601200328029c0721010b200120084102746a220141046a2001200220086b410274109e081a2001200a3602002003200241016a3602a407200341b0086a200a200341a8076a220c10d101200341800a6a20032802b008220220032802b8081085020240024020032802a00a22160d00420021054100211541082116410021104200211a4200211c420021200c010b200341880a6a2903002120200341980a6a290300211a200341a80a6a280200211020032903800a211c20032903900a210520032802a40a21150b024020032802b408450d00200210350b200341800a6a200341d0096a10b70120032802800a2102200320032802880a3602b408200320023602b008200341f0066a200341b0086a10e101024020032802840a450d00200210350b200341d00b6a200a10940241042102200341d00b6a41047221170240024020032802d40b220d450d0020032802d00b2111200341d00b6a41086a280200210e0340200d41086a2108200d2f0106220f4105742101410021090240024003402001450d01200c2008412010a008220b450d02200141606a2101200941016a2109200841206a2108200b417f4a0d000b2009417f6a210f0b200e450d02200e417f6a210e200d200f4102746a4194036a280200210d0c010b0b200d20094102746a41e8026a2802002201450d0020114101201141014b1b2202418094ebdc036e220820022008418094ebdc036c476a22084101200841014b1b220820024b0d0720034188066a20072004428094ebdc034200109808200341f8056a200329038806220420034188066a41086a290300221b4280ec94a37c427f108408200341e8056a2004201b2002200120022001491b20086ead428094ebdc037e200220086ead8042ffffffff0f8322214200108408200341800a6a200a200341f00b6a10d30120034198066a20032802800a220120032802880a10d201200341e8056a41086a29030020032903e80522042021200720032903f8057c7e2207428094ebdc0380221ba7417f2007428080808080c0b2cd3b541b2007201b4280ec94a37c7e7c4280cab5ee01566aad7c2207200454ad7c211b200328029c0641002003280298061b2102024020032802840a450d00200110350b200341c0056a2007201b428094ebdc034200109808200341b0056a20032903c0052204200341c0056a41086a29030022214280ec94a37c427f108408200341a0056a200420212002ad2222420010840820034190056a200720032903a00522212022200720032903b0057c7e2204428094ebdc03802222a7417f2004428080808080c0b2cd3b541b200420224280ec94a37c7e7c4280cab5ee01566aad7c22047d222b201b200341a0056a41086a2903002004202154ad7c22297d2007200454ad7d428094ebdc03420010980820034180056a200329039005222120034190056a41086a29030022224280ec94a37c427f108408200341f0046a202120222005201a201c2020109502ad22054200108408200341d0056a200c20032903f004221a20047c2207202b2003290380057c222b20057e2204428094ebdc03802205a7417f2004428080808080c0b2cd3b541b200420054280ec94a37c7e7c4280cab5ee01566aad7c2204200341f0046a41086a29030020297c2007201a54ad7c2004200754ad7c109602200341d0056a41106a290300210720032903d805210420032903d0052205a74101470d01200341b0076a2903002105200341b8076a290300211a200341c0076a290300211b20032903a8072129200341b80a6a2007370300200341b00a6a2004370300200341a10a6a201b370000200341990a6a201a370000200341910a6a2005370000200341890a6a2029370000200341800a6a41086a220241013a0000200341043a00800a41b0b4cc004100200341800a6a10d40120034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a2002200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e008200341c0046a200341e0086a412010d701200341c0046a41106a290300211b20032903c804212920032802c0042109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c2029420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020c080b201710b1012015450d08201541306c450d08201610350c080b20054201520d0620034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a200341800a6a41086a2202200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e008200341d8046a200341e0086a412010d701200341d8046a41106a290300211b20032903e004212920032802d8042109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c2029420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020c060b41dca2c0002101410e2108418080ec0021090c080b41aea6c0002101410821084180800421090b410321020c060b200d200941f485cc001042000b2008200c104d000b4190edc40041194180efc400103f000b0240201041306c2202450d00201620026a210f201641286a2102200341800a6aad4280808080800284212a200341e0086aad4280808080800484212c20034188096a41106a2101200341890a6a210b200341b80a6a2114034020034198046a20212022200241586a2208290300200841086a290300201c2020109502ad22074200108408200341a8046a200241686a220a20032903980422042007202b7e2207428094ebdc03802205a7417f2007428080808080c0b2cd3b541b200720054280ec94a37c7e7c4280cab5ee01566aad7c220720034198046a41086a2903002007200454ad7c109602200341a8046a41106a290300210720032903b004210402400240024020032903a8042205a74101470d00200241786a2900002105200a290000211a2002290000211b2003200241706a29000022293701b8082003201a3701b008200320053701c0082003201b3701c808200b201a370000200b41086a2029370000200b41106a2005370000200b41186a201b370000200320043703b00a20142007370300200341013a00880a200341043a00800a41b0b4cc004100200341800a6a10d40120034188096a41186a220c42003703002001420037030020034188096a41086a22094200370300200342003703880941b6fdc600ad428080808080018422051001220d290000211a200341800a6a41086a2208200d41086a2900003703002003201a3703800a200d103520092008290300370300200320032903800a3703880941e489c200ad4280808080d00184221a1001220d290000211b2008200d41086a2900003703002003201b3703800a200d1035200120032903800a370000200141086a22102008290300370000200341e0086a41086a22112009290300370300200341e0086a41106a22122001290300370300200341e0086a41186a2213200c29030037030020032003290388093703e008200341e8036a200341e0086a412010d701200341e8036a41106a290300211b20032903f003212920032802e803210d200c42003703002001420037030020094200370300200342003703880920051001220e29000021052008200e41086a290000370300200320053703800a200e103520092008290300370300200320032903800a37038809201a1001220e29000021052008200e41086a290000370300200320053703800a200e1035200120032903800a3700002010200829030037000020112009290300370300201220012903003703002013200c29030037030020032003290388093703e0082003427f201b4200200d1b220520077c20294200200d1b220720047c22042007542208ad7c22072008200720055420072005511b22081b3703880a2003427f200420081b3703800a0c010b20054201520d0120034188096a41186a220c42003703002001420037030020034188096a41086a22094200370300200342003703880941b6fdc600ad428080808080018422051001220d290000211a200341800a6a41086a2208200d41086a2900003703002003201a3703800a200d103520092008290300370300200320032903800a3703880941e489c200ad4280808080d00184221a1001220d290000211b2008200d41086a2900003703002003201b3703800a200d1035200120032903800a370000200141086a22102008290300370000200341e0086a41086a22112009290300370300200341e0086a41106a22122001290300370300200341e0086a41186a2213200c29030037030020032003290388093703e00820034180046a200341e0086a412010d70120034180046a41106a290300211b2003290388042129200328028004210d200c42003703002001420037030020094200370300200342003703880920051001220e29000021052008200e41086a290000370300200320053703800a200e103520092008290300370300200320032903800a37038809201a1001220e29000021052008200e41086a290000370300200320053703800a200e1035200120032903800a3700002010200829030037000020112009290300370300201220012903003703002013200c29030037030020032003290388093703e0082003427f201b4200200d1b220520077c20294200200d1b220720047c22042007542208ad7c22072008200720055420072005511b22081b3703880a2003427f200420081b3703800a0b202c202a10020b200241306a2102200a41206a200f470d000b0b201710b10102402015450d00201541306c450d00201610350b02402003280294072202450d00200241186c450d0020032802900710350b024020032802a00741ffffffff0371450d00200328029c0710350b420021070c030b02402003280294072201450d00200141186c450d0020032802900710350b41e7a4c0002101410e210841808038210920032802a00741ffffffff0371450d00200328029c0710350b4200210720024104460d010b200041206a20083602002000411c6a2001360200200041186a2009418080fc007120027241801072360200420121070b200042003703080c1a0b4102210802400240024002400240024002400240024002400240024020022d00000d0020022d00014101470d00200141046a28020021082002411a6a2901002107200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f010021012003200241096a2d00003a00d70b200320153a00d60b200320163b01d40b200320173a00d30b200320183a00d20b200320013a00d00b200320014108763a00d10b2003200f3a00df0b200320103a00de0b200320113b01dc0b200320123a00db0b200320133a00da0b200320143b01d80b200320093a00e70b2003200a3a00e60b2003200b3b01e40b2003200c3a00e30b2003200d3a00e20b2003200e3b01e00b200320073701e80b200341e8096a2007370300200341e0096a20032901e00b370300200341d0096a41086a20032901d80b370300200320032901d00b3703d00941f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c21092002103541eeeecb00ad4280808080a001841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320013601b008200341e0036a200341b0086a412010c00141a1a5c0002102411221094180802c210120032802e003450d0420032802e40320084d0d0441f7edcb00ad4280808080f000841001220a280000210b200a2900042107200a28000c210c200a103541e4edcb00ad4280808080a001841001220a2900002104200a2900082105200a1035200320053701c808200320043701c0082003200c3601bc08200320073701b4082003200b3601b008200341d8036a200341b0086a412010c00120032802d803450d0420032802dc03220b2008490d0441f7edcb00ad4280808080f000841001220a280000210c200a2900042107200a28000c210d200a103541b5edcb00ad4280808080c001841001220a2900002104200a2900082105200a1035200320053701c808200320043701c0082003200d3601bc08200320073701b4082003200c3601b008200341d0036a200341b0086a412010c0014100200b20032802d40341d40020032802d0031b6b220a200a200b4b1b220a20084b0d04200341800a6a200810be01200341b8036a20032802800a220c20032802880a10d701200341c8036a290300210420032903c003210720032802b803210b024020032802840a450d00200c10350b200b450d04200341e0086a200341d0096a10b701200341800a6a20032802e008220220032802e80810d601200341b0086a41086a2201200341bc0a6a290200370300200341b0086a41106a2209200341c40a6a290200370300200341b0086a41186a220b200341cc0a6a290200370300200341b0086a41206a220c200341d40a6a2802003602002003200341b40a6a2902003703b0080240024020032802a00a220d450d00200341800a6a41186a2903002105200341800a6a41086a290300211a200341b00a6a280200210e200341ac0a6a280200210f200341a80a6a280200211020032903900a211b20032903800a211c20032802a40a211120034188096a41206a200c28020036020020034188096a41186a200b29030037030020034188096a41106a200929030037030020034188096a41086a2001290300370300200320032903b00837038809024020032802e408450d00200210350b200341f0066a41186a2005370300200341a0076a200e36020020034198076a201036020020034194076a2011360200200341a4076a200329038809370200200341ac076a20034190096a290300370200200341b4076a20034198096a290300370200200341bc076a20034188096a41186a290300370200200341c4076a200341a8096a2802003602002003201b370380072003201c3703f0062003200f36029c072003200d360290072003201a3703f80641f7edcb00ad4280808080f0008410012202280000210120022900042105200228000c21092002103541b6aac000ad428080808090028410012202290000211a2002290008211b200210352003201b3701c8082003201a3701c008200320093601bc08200320053701b408200320013601b008200341b0036a200341b0086a10f20120032802b003417d71450d01200341800a6a200341a8076a108c0220032802800a220220032802880a10970241ff01712109024020032802840a450d00200210350b200941034b0d0141dca2c0002102418080ec00210120090e0405010105050b024020032802e408450d00200210350b41b6a6c0002102410d210941002101410321080c080b200328029c072102024020032802a407220b0d0041002101410021090c070b41002101410021090340024002400240200a2002280200220c4b0d0020010d01410021010c020b200141016a21010c010b200920016b220d200b4f0d03200220014102746b220d280200210e200d200c3602002002200e3602000b200241046a2102200b200941016a2209470d000b024002402001450d0020032802a407220c200b20016b2202490d01200320023602a4072002210c0c010b20032802a407210c0b200328029c072102410021010240200c41014b0d0041002109200c0e020703070b200c2109034020012009410176220a20016a220b20082002200b4102746a280200491b21012009200a6b220941014b0d000c030b0b410021010c060b200d200b41f485cc001042000b2008200220014102746a2802002209470d0241e7a4c00021024180803821010b02402003280294072208450d00200841186c450d0020032802900710350b024020032802a00741ffffffff0371450d00200328029c0710350b410e21090b410321080c020b200c2001200820094b6a2201490d02200c21090b0240200920032802a007470d002003419c076a20094101108601200328029c0721020b200220014102746a220241046a2002200920016b410274109e081a200220083602002003200941016a3602a407200341800a6a200341d0096a10b70120032802800a2102200320032802880a3602b408200320023602b008200341f0066a200341b0086a10e101024020032802840a450d00200210350b200341b0086a2008109402200341800a6a2008200341a8076a220a10d301200341a8036a20032802800a220220032802880a10d20120032802a803210f20032802ac032110024020032802840a450d00200210350b20034188096a2008200a10d101200341800a6a20032802880922022003280290091085020240024020032802a00a22120d0042002105410821124100210e4200211a4200211b4200211c0c010b200341880a6a290300211a200341980a6a290300211c20032903800a210520032903900a211b20032802a40a210e0b0240200328028c09450d00200210350b201b201c2005201a10950221110240024020032802b408220b0d00410021010c010b200341b0086a41086a280200210c0340200b41086a2101200b2f0106220d4105742102410021080240024003402002450d01200a2001412010a0082209450d02200241606a2102200841016a2108200141206a21012009417f4a0d000b2008417f6a210d0b0240200c0d00410021010c030b200c417f6a210c200b200d4102746a4194036a280200210b0c010b0b200b20084102746a41e8026a28020021010b20032802b00822024101200241014b1b2202418094ebdc036e220820022008418094ebdc036c476a22084101200841014b1b220820024b0d0220034180036a20072004428094ebdc034200109808200341f0026a200329038003220420034180036a41086a29030022054280ec94a37c427f1084082003418094ebdc033602840a20032011ad4100418094ebdc0320104100200f1b22096b220b200b418094ebdc034b1bad7e428094ebdc0380a7220b3602800a200341800a6a200b418094ebdc034b4102746a280200210b2003418094ebdc033602840a2003417f2009200b6a220b200b2009491b22093602800a200341800a6a2009418094ebdc034b4102746a350200211a2003418094ebdc033602840a2003201a2002200120022001491b20086ead428094ebdc037e200220086ead8042ffffffff0f837e428094ebdc0380a722023602800a200341e0026a20042005200341800a6a2002418094ebdc034b4102746a350200221a420010840820034190036a200a20032903e0022204201a200720032903f0027c7e2207428094ebdc03802205a7417f2007428080808080c0b2cd3b541b200720054280ec94a37c7e7c4280cab5ee01566aad7c2207200341e0026a41086a2903002007200454ad7c10960220034190036a41106a2903002107200329039803210402402003290390032205a74101470d0020032903d009210520032903d809211a20032903e009211b20032903e809211c200341b80a6a2007370300200341b00a6a2004370300200341a10a6a201c370000200341990a6a201b370000200341910a6a201a370000200341890a6a2005370000200341800a6a41086a220241013a0000200341043a00800a41b0b4cc004100200341800a6a10d40120034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a2002200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e008200341b0026a200341e0086a412010d701200341b0026a41106a290300211b20032903b802211c20032802b0022109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c201c420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020c040b20054201520d0320034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a200341800a6a41086a2202200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e008200341c8026a200341e0086a412010d701200341c8026a41106a290300211b20032903d002211c20032802c8022109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c201c420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020c030b200041206a20093602002000411c6a2002360200200041186a2001418080fc007120087241801072360200420121070c030b2001200c104d000b4190edc40041194180efc400103f000b200341b0086a41047221020240200e450d00200e41306c450d00201210350b200210b10102402003280294072202450d00200241186c450d0020032802900710350b024020032802a00741ffffffff0371450d00200328029c0710350b420021070b200042003703080c190b2001410c6a2802002108200141086a280200210b41022109024002400240024002400240024002400240024002400240024020022d00000d0020022d00014101470d00200141106a280200210c200141046a28020021092002411a6a2901002107200241196a2d0000210a200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d000021132002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241086a2d00002118200241066a2f01002119200241056a2d00002106200241046a2d0000211d200241026a2f010021012003200241096a2d00003a00d70b200320183a00d60b200320193b01d40b200320063a00d30b2003201d3a00d20b200320013a00d00b200320014108763a00d10b200320123a00df0b200320133a00de0b200320143b01dc0b200320153a00db0b200320163a00da0b200320173b01d80b2003200a3a00e70b2003200d3a00e60b2003200e3b01e40b2003200f3a00e30b200320103a00e20b200320113b01e00b200320073701e80b200341880c6a2007370300200341f00b6a41106a20032901e00b370300200341f00b6a41086a20032901d80b370300200320032901d00b3703f00b0240200c41104d0d004187a5c0002102411a210a410c21010c0b0b41f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c210a2002103541eeeecb00ad4280808080a001841001220229000021042002290008210520021035200320053701c808200320043701c0082003200a3601bc08200320073701b408200320013601b008200341a8026a200341b0086a412010c00141a1a5c00021024112210a410b210120032802a802450d0a200920032802ac024f0d0a41f7edcb00ad4280808080f000841001220d280000210e200d2900042107200d28000c210f200d103541e4edcb00ad4280808080a001841001220d2900002104200d2900082105200d1035200320053701c808200320043701c0082003200f3601bc08200320073701b4082003200e3601b008200341a0026a200341b0086a412010c00120032802a002450d0a200920032802a402220e4b0d0a41f7edcb00ad4280808080f000841001220d280000210f200d2900042107200d28000c2110200d103541b5edcb00ad4280808080c001841001220d2900002104200d2900082105200d1035200320053701c808200320043701c008200320103601bc08200320073701b4082003200f3601b00820034198026a200341b0086a412010c00120094100200e200328029c0241d4002003280298021b6b220d200d200e4b1b220d490d0a200341800a6a200910be0120034180026a20032802800a220f20032802880a10d70120034190026a290300211a2003290388022105200328028002210e024020032802840a450d00200f10350b200e450d0a200341d0096a200341f00b6a10b701200341800a6a20032802d009220220032802d80910d601200341b0086a41086a2201200341bc0a6a290200370300200341b0086a41106a220a200341c40a6a290200370300200341b0086a41186a220e200341cc0a6a290200370300200341b0086a41206a220f200341d40a6a2802003602002003200341b40a6a2902003703b0080240024020032802a00a2210450d00200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a2802002111200341ac0a6a2802002112200341a80a6a280200211320032903900a211b20032903800a211c20032802a40a211420034188096a41206a200f28020036020020034188096a41186a200e29030037030020034188096a41106a200a29030037030020034188096a41086a2001290300370300200320032903b00837038809024020032802d409450d00200210350b200341f0066a41186a2007370300200341a0076a201136020020034198076a201336020020034194076a2014360200200341a4076a200329038809370200200341ac076a20034190096a290300370200200341b4076a20034198096a290300370200200341bc076a20034188096a41186a290300370200200341c4076a200341a8096a2802003602002003201b370380072003201c3703f0062003201236029c072003201036029007200320043703f80641f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c210a2002103541b6aac000ad42808080809002841001220229000021042002290008211b200210352003201b3701c808200320043701c0082003200a3601bc08200320073701b408200320013601b008200341f8016a200341b0086a10f20120032802f801417d71450d01200341800a6a200341a8076a108c0220032802800a220220032802880a10970241ff0171210a024020032802840a450d00200210350b200a41034b0d0141dca2c0002102411b2101200a0e0406010106060b024020032802d409450d00200210350b41b6a6c0002102410d210a410021010c0b0b200328029c072102024020032802a407220e0d00410021014100210a0c070b410021014100210a0340024002400240200d2002280200220f4b0d0020010d01410021010c020b200141016a21010c010b200a20016b2210200e4f0d03200220014102746b221028020021112010200f360200200220113602000b200241046a2102200e200a41016a220a470d000b024002402001450d0020032802a407220f200e20016b2202490d01200320023602a4072002210f0c010b20032802a407210f0b200328029c072102410021010240200f41014b0d004100210a200f0e020704070b200f210a03402001200a410176220d20016a220e20092002200e4102746a280200491b2101200a200d6b220a41014b0d000c040b0b2008450d01200841246c450d01200b10350c0a0b2010200e41f485cc001042000b0c080b2009200220014102746a280200220a470d0141e7a4c0002102410e21010b02402003280294072209450d00200941186c450d0020032802900710350b024020032802a00741ffffffff0371450d00200328029c0710350b410e210a0c050b200f20012009200a4b6a2201490d01200f210a0b0240200a20032802a007470d002003419c076a200a4101108601200328029c0721020b200220014102746a220241046a2002200a20016b410274109e081a200220093602002003200a41016a3602a407200341800a6a200341f00b6a10b70120032802800a2102200320032802880a3602d409200320023602d009200341f0066a200341d0096a10e101024020032802840a450d00200210350b200341b0086a20091094020240200c41246c22020d00410021150c030b200b20026a2213415c6a2118200341a8076a2110200b2101410021150340200121020340200241206a2802002101200341d0096a41186a200241186a290000370300200341d0096a41106a200241106a290000370300200341d0096a41086a200241086a290000370300200320022900003703d009200341800a6a2009200341d0096a10d301200341f0016a20032802800a220a20032802880a10d20120032802f001211120032802f4012112024020032802840a450d00200a10350b20034188096a2009200341d0096a10d101200341800a6a200328028809220e2003280290091085020240024020032802a00a220c0d00420021074100210d4108210c4100210a420021040c010b200341800a6a41086a290300210420032903800a210720032802a40a210d20032802a80a210a0b0240200328028c09450d00200e10350b02400240200a20014d0d00200c200141306c6a2201450d0002402010200141106a220a460d00200a2010412010a0080d020b2001290300200141086a2903002007200410950221190240024020032802b40822140d004100210a0c010b20032802b80821160340201441086a210a20142f0106221741057421014100210e0240024003402001450d01200341d0096a200a412010a008220f450d02200141606a2101200e41016a210e200a41206a210a200f417f4a0d000b200e417f6a21170b024020160d004100210a0c030b2016417f6a2116201420174102746a4194036a28020021140c010b0b2014200e4102746a41e8026a280200210a0b20032802b00822014101200141014b1b2201418094ebdc036e220e2001200e418094ebdc036c476a220e4101200e41014b1b220e20014b0d052003418094ebdc033602840a20032001200a2001200a491b200e6ead428094ebdc037e2001200e6ead8042ffffffff0f834100418094ebdc032012410020111b6b22012001418094ebdc034b1bad7e428094ebdc0380a722013602800a200341800a6a2001418094ebdc034b4102746a35020021072003418094ebdc033602840a200320072019ad7e428094ebdc0380a722013602800a200341800a6a2001418094ebdc034b4102746a28020021012003418094ebdc033602840a2003417f201520016a220120012015491b22013602800a200341800a6a2001418094ebdc034b4102746a28020021150b0240200d450d00200d41306c450d00200c10350b200241246a210120182002460d050c020b200241246a21020240200d450d00200d41306c450d00200c10350b20132002460d040c000b0b0b2001200f104d000b4190edc40041194180efc400103f000b02402008450d00200841246c450d00200b10350b200341c8016a2005201a428094ebdc034200109808200341b8016a20032903c8012207200341c8016a41086a29030022044280ec94a37c427f108408200341a8016a200720042015ad221a4200108408200341d8016a200341f0066a41386a20032903a8012204201a200520032903b8017c7e2207428094ebdc03802205a7417f2007428080808080c0b2cd3b541b200720054280ec94a37c7e7c4280cab5ee01566aad7c2207200341a8016a41086a2903002007200454ad7c109602200341d8016a41106a290300210720032903e00121040240024020032903d8012205a74101470d0020032903f00b210520032903f80b211a20032903800c211b20032903880c211c200341800a6a41386a2007370300200341b00a6a2004370300200341a10a6a201c370000200341990a6a201b370000200341910a6a201a370000200341890a6a2005370000200341800a6a41086a220241013a0000200341043a00800a41b0b4cc004100200341800a6a10d40120034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a2002200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e008200341f8006a200341e0086a412010d701200341f8006a41106a290300211b200329038001211c20032802782109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c201c420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020c010b20054201520d0020034188096a41186a220a420037030020034188096a41106a2208420037030020034188096a41086a22014200370300200342003703880941b6fdc600ad4280808080800184220510012209290000211a200341800a6a41086a2202200941086a2900003703002003201a3703800a2009103520012002290300370300200320032903800a3703880941e489c200ad4280808080d00184221a10012209290000211b2002200941086a2900003703002003201b3703800a20091035200820032903800a221b370300200341e0086a41086a220b2001290300370300200341e0086a41106a220c201b370300200341e0086a41186a220d200229030037030020032003290388093703e00820034190016a200341e0086a412010d70120034190016a41106a290300211b200329039801211c2003280290012109200a42003703002008420037030020014200370300200342003703880920051001220a29000021052002200a41086a290000370300200320053703800a200a103520012002290300370300200320032903800a37038809201a1001220a29000021052002200a41086a290000370300200320053703800a200a1035200820032903800a2205370300200b2001290300370300200c2005370300200d200229030037030020032003290388093703e0082003427f201b420020091b220520077c201c420020091b220720047c22042007542202ad7c22072002200720055420072005511b22021b3703880a2003427f200420021b3703800a200341e0086aad4280808080800484200341800a6aad428080808080028410020b200341b0086a41047210b10102402003280294072202450d00200241186c450d0020032802900710350b024020032802a00741ffffffff0371450d00200328029c0710350b420021070c020b02402008450d00200841246c450d00200b10350b410321090b200041206a200a3602002000411c6a2002360200200041186a200141ff017141107420097241801072360200420121070b200042003703080c180b4102210a200241036a2d0000210820022f00012109200141106a280200210b2001410c6a2802002113200141086a2802002112200141046a280200211402400240024020022d0000220c417f6a220141024b0d00024020010e03000102000b200241046a2d00000d00200241086a2802004102742002410c6a28020041036c4f0d010b2009200841107472200c4100477241ff0171450d0041801021020c010b4103210a0240200b0d004188a6c0002108410c21014180901021020c010b200b41016a210120122102024003402001417f6a22014102490d01200241046a210820022802002109200241046a210220092008280200490d000b41f5a4c0002108411221014180903421020c010b200341800a6a201410dc01200341f0066a20032802800a220120032802880a10dd0120032902f406420020032802f00622021b2107024020032802840a450d00200110350b2002410820021b211102400240200b410274220b20126a417c6a2802002007422088a722024f0d0041002101417f210820122109034020012009280200220c6a22022007422088a7220d4f0d022011200241d8006c6a220228022c210f20022802202110200241306a280200210e200241246a280200210a2002200241d8006a2008200d6a200c6b41d8006c109e081a0240200a450d00200a41306c450d00201010350b0240200e41ffffff3f71450d00200f10350b200941046a210920074280808080707c2107200841016a21082001417f6a2101200b417c6a220b0d000b0240201341ffffffff0371450d00201210350b200341f0066a201410dc0120032802f006210220033502f8062104200341800a6a20112007422088a7220110ea0120044220862002ad8420033502880a42208620032802800a2208ad841002024020032802840a450d00200810350b024020032802f406450d00200210350b02402001450d00201141306a21022007422088a741d8006c210103400240200241746a2802002208450d00200841306c450d00200241706a28020010350b0240200228020041ffffff3f71450d002002417c6a28020010350b200241d8006a2102200141a87f6a22010d000b0b2007a72202450d17200241d8006c450d17201110350c170b02402002450d00200241d8006c2101201141306a210203400240200241746a2802002208450d00200841306c450d00200241706a28020010350b0240200228020041ffffff3f71450d002002417c6a28020010350b200241d8006a2102200141a87f6a22010d000b0b41e9a5c0002108411121014180901821022007a72209450d01200941d8006c450d01201110350c010b2002200d104e000b0240201341ffffffff0371450d00201210350b20004200370308200041206a20013602002000411c6a2008360200200041186a2002200a723602000c160b024020022d000120022d0000410047720d0041f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c2108200210354193eecb00ad42808080808001841001220229000021042002290008210520021035200320053701c808200320043701c008200320083601bc08200320073701b408200320013601b008200341033a00f00b410110332202450d12200220032d00f00b3a0000200341b0086aad42808080808004842002ad428080808010841002200210350c140b20004200370308200041186a41023602000c150b200341980a6a200141196a290000370300200341800a6a41106a200141116a290000370300200341880a6a200141096a290000370300200320012900013703800a4100210102400240024020022d000120022d0000410047720d00200341f0066a200341800a6a10910220032d00f00622024104460d0220032902f406210720032f00f10620032d00f3064110747241087421010c010b410221020b200042003703082000411c6a2007370200200041186a20012002723602000c150b200342f3e885db96cddbb3203703d009200341d0096a200341800a6a1092020c120b200141086a2802002108200141046a2802002109024020022d000120022d0000410047720d002001410c6a280200210141f7edcb00ad4280808080f0008410012202280000210a20022900042107200228000c210b200210354194c4c100ad4280808080d001841001220229000021042002290008210520021035200320053701c808200320043701c0082003200b3601bc08200320073701b4082003200a3601b008200341203602840a2003200341b0086a3602800a20092001200341800a6a109802200841ffffff3f71450d12200910350c120b0240200841ffffff3f71450d00200910350b20004200370308200041186a41023602000c130b024020022d000120022d0000410047720d0041f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c2108200210354193eecb00ad42808080808001841001220229000021042002290008210520021035200320053701c808200320043701c008200320083601bc08200320073701b408200320013601b008200341013a00f00b410110332202450d0f200220032d00f00b3a0000200341b0086aad42808080808004842002ad428080808010841002200210350c110b20004200370308200041186a41023602000c120b024020022d000120022d0000410047720d0041f7edcb00ad4280808080f0008410012202280000210120022900042107200228000c2108200210354193eecb00ad42808080808001841001220229000021042002290008210520021035200320053701c808200320043701c008200320083601bc08200320073701b408200320013601b008200341023a00f00b410110332202450d0e200220032d00f00b3a0000200341b0086aad42808080808004842002ad428080808010841002200210350c100b20004200370308200041186a41023602000c110b024020022d000120022d000041004772450d0020004200370308200041186a41023602000c110b200141046a280200210141f7edcb00ad4280808080f0008410012202280000210820022900042107200228000c21092002103541c1edcb00ad4280808080e001841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320083601b008200320013602800a200341b0086aad4280808080800484200341800a6aad4280808080c0008410020c0e0b200341a8096a200141246a28020036020020034188096a41186a2001411c6a29020037030020034188096a41106a200141146a29020037030020034188096a41086a2001410c6a2902003703002003200141046a290200370388092002411a6a2901002107200241196a2d00002109200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d0000211941022101200241026a2f0100210641012108024020022d00000d0020022d000141014721080b200320073701c808200320093a00c7082003200a3a00c6082003200b3b01c4082003200c3a00c3082003200d3a00c2082003200e3b01c0082003200f3a00bf08200320103a00be08200320113b01bc08200320123a00bb08200320133a00ba08200320143b01b808200320153a00b708200320163a00b608200320173b01b408200320183a00b308200320193a00b208200320063b01b0080240024002402008450d0041801021080c010b200341d00b6a41186a200341b0086a41186a290100370300200341d00b6a41106a200341b0086a41106a290100370300200341d00b6a41086a200341b0086a41086a290100370300200320032901b0083703d00b200341f0066a200341d00b6a10b401200341800a6a20032802f006220120032802f80610d50120032802f4062102024020032d00800a4101470d00200341990a6a2900002107200341800a6a41186a2d00002108200341970a6a2d00002109200341950a6a2f0000210a200341940a6a2d0000210b200341930a6a2d0000210c200341910a6a2f0000210d200341800a6a41106a2d0000210e2003418f0a6a2d0000210f2003418d0a6a2f000021102003418c0a6a2d000021112003418b0a6a2d00002112200341890a6a2f00002113200341800a6a41086a2d0000211420032d00870a211520032f00850a211620032d00840a211720032d00830a211820032d00820a211920032d00810a210602402002450d00200110350b200320073703880c200320083a00870c200320093a00860c2003200a3b01840c2003200b3a00830c2003200c3a00820c2003200d3b01800c2003200e3a00ff0b2003200f3a00fe0b200320103b01fc0b200320113a00fb0b200320123a00fa0b200320133b01f80b200320143a00f70b200320153a00f60b200320163b01f40b200320173a00f30b200320183a00f20b200320193a00f10b200320063a00f00b200341800a6a41206a20034188096a41206a280200360200200341800a6a41186a20034188096a41186a290300370300200341800a6a41106a20034188096a41106a290300370300200341800a6a41086a20034188096a41086a29030037030020032003290388093703800a200341f0066a200341800a6a108b0241012101410d2102024020032d00f0064101460d00200341f0066a41086a2d00002101200341f9066a2f00002108200341fb066a2d00002109200341fc066a2d0000210a200341f0066a410d6a2f0000210b200341ff066a2d0000210c200341f0066a41106a2d0000210d20034181076a2f0000210e20034183076a2d0000210f20034184076a2d0000211020034185076a2f0000211120034187076a2d00002112200341f0066a41186a2d0000211320032d00f106211420032d00f206211520032d00f306211620032d00f406211720032f00f506211820032d00f7062119200320034189076a2900003703f808200320133a00f708200320123a00f608200320113b01f408200320103a00f3082003200f3a00f2082003200e3b01f0082003200d3a00ef082003200c3a00ee082003200b3b01ec082003200a3a00eb08200320093a00ea08200320083b01e808200320013a00e708200320193a00e608200320183b01e408200320173a00e308200320163a00e208200320153a00e108200320143a00e008200341800a6a200341e0086a10b701200341f0006a20032802800a220120032802880a41b0b4cc0041004100108a0220032802702108024020032802840a450d00200110350b4103210120084101470d030b4194a6c00021094180900c21080c010b02402002450d00200110350b41aea6c000210941082102410321014180900421080b200041206a20023602002000411c6a2009360200200041186a2008200172360200200042003703080c100b200341e0086a200341f00b6a412010a008450d0d200341800a6a200341d00b6a10b40120033502880a210720032802800a2101412010332202450d00200220032903e008370000200241186a200341e0086a41186a290300370000200241106a200341e0086a41106a290300370000200241086a200341e0086a41086a29030037000020074220862001ad842002ad4280808080800484100220021035024020032802840a450d00200110350b200341b0096a200341f00b6a10b701200341800a6a20032802b009220120032802b809220810d601024020032802a00a2202450d002008ad4220862001ad8410070b200341f0066a41086a2208200341bc0a6a290200370300200341f0066a41106a2209200341c40a6a290200370300200341f0066a41186a220a200341cc0a6a290200370300200341f0066a41206a220b200341d40a6a2802003602002003200341b40a6a2902003703f006200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a280200210c200341ac0a6a280200210d200341a80a6a280200210e20032903900a210520032903800a211a20032802a40a210f200341b0086a41206a2210200b280200360200200341b0086a41186a220b200a290300370300200341b0086a41106a220a2009290300370300200341b0086a41086a22092008290300370300200320032903f0063703b00802402002450d00200341d0096a41206a2010280200360200200341d0096a41186a200b290300370300200341d0096a41106a200a290300370300200341d0096a41086a2009290300370300200320032903b0083703d009024020032802b409450d00200110350b200341800a6a41186a2007370300200341b00a6a200c360200200341a80a6a200e360200200341a40a6a200f360200200341b40a6a20032903d009370200200341bc0a6a200341d0096a41086a290300370200200341c40a6a200341d0096a41106a290300370200200341cc0a6a200341d0096a41186a290300370200200341d40a6a200341d0096a41206a280200360200200320053703900a200320043703880a2003201a3703800a2003200d3602ac0a200320023602a00a200341b0086a200341e0086a10b70120033502b808210720032802b008210b200341003602f806200342013703f006412010332202450d0c200220032903b80a370000200241086a200341c00a6a290300370000200241106a200341c80a6a290300370000200241186a200341d00a6a290300370000200320023602f006200342a080808080043702f4062003200341800a6a3602b009200341b0096a200341f0066a10cf012003200341800a6a41106a3602b009200341b0096a200341f0066a10cf0120032802a00a210220032802a80a2201200341f0066a107702402001450d002002200141186c6a21010340200320023602b009200341b0096a200341f0066a10cf01200241106a200341f0066a10e2012001200241186a2202470d000b0b20032802ac0a210c20032802b40a2202200341f0066a10770240024020032802f406220a20032802f80622016b20024102742208490d0020032802f0062102200a21090c010b200120086a22022001490d0c200a41017422092002200920024b1b22094100480d0c02400240200a0d00024020090d00410121020c020b200910332202450d0f0c010b20032802f0062102200a2009460d002002200a200910372202450d0e0b200320093602f406200320023602f0060b200220016a200c2008109d081a2007422086200bad84200120086aad4220862002ad84100202402009450d00200210350b024020032802b408450d00200b10350b024020032802a40a2202450d00200241186c450d0020032802a00a10350b20032802b00a41ffffffff0371450d0e20032802ac0a10350c0e0b20032802b409450d0d200110350c0d0b1045000b4182102108024020022d00000d0020022d00014101470d0020012d00012119200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100210120032002411a6a2901003703e809200320083a00e709200320093a00e6092003200a3b01e4092003200b3a00e3092003200c3a00e2092003200d3b01e0092003200e3a00df092003200f3a00de09200320103b01dc09200320113a00db09200320123a00da09200320133b01d809200320143a00d709200320153a00d609200320163b01d409200320173a00d309200320183a00d209200320013a00d009200320014108763a00d109200341f00b6a200341d0096a10b701200341800a6a20032802f00b220120032802f80b10d601200341b0086a41086a220b200341bc0a6a290200370300200341b0086a41106a220c200341c40a6a290200370300200341b0086a41186a220d200341cc0a6a290200370300200341b0086a41206a220e200341d40a6a2802003602002003200341b40a6a2902003703b008024020032802a00a2208450d00200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a2802002109200341ac0a6a280200210a200341a80a6a280200210f20032903900a210520032903800a211a20032802a40a210220034188096a41206a200e28020036020020034188096a41186a200d29030037030020034188096a41106a200c29030037030020034188096a41086a200b290300370300200320032903b00837038809024020032802f40b450d00200110350b200341e0086a41086a220120034188096a41086a290300370300200341e0086a41106a220b20034188096a41106a290300370300200341e0086a41186a220c20034188096a41186a290300370300200341e0086a41206a220d20034188096a41206a280200360200200341f0066a41186a2007370300200341a0076a200936020020034198076a200f36020020034194076a200236020020032003290388093703e00820032005370380072003201a3703f0062003200a36029c072003200836029007200320043703f806200341c4076a200d280200360200200341bc076a200c290300370200200341b4076a200b290300370200200341ac076a2001290300370200200341a4076a20032903e008370200200341800a6a200341a8076a108c0220033502880a210720032802800a210b02400240201941037122014103470d0041012101420021044101210c0c010b024002400240024020010e03000102000b4100210c0c020b4101210c0c010b4102210c0b2003200c3a00f00b410110332201450d0c2001200c3a00004100210c42808080801021040b2007422086200bad8420042001ad8410020240200c0d00200110350b024020032802840a450d00200b10350b02402002450d00200241186c450d00200810350b200941ffffffff0371450d0d200a10350c0d0b024020032802f40b450d00200110350b41831021080b20004200370308200041206a410d3602002000411c6a41b6a6c000360200200041186a20083602000c0d0b2002411a6a290100211a200241196a2d0000210c200241186a2d0000210d200241166a2f0100210e200241156a2d0000210f200241146a2d00002110200241126a2f01002111200241116a2d00002112200241106a2d00002113410e21012002410e6a2f010021142002410d6a2d000021152002410c6a2d000021162002410a6a2f01002117200241096a2d00002118200241086a2d00002119200241066a2f01002106200241056a2d0000211d200241046a2d0000211e200241026a2f0100211f20022d0001210b20022d0000210a41f7edcb00ad4280808080f0008410012202280000210820022900042107200228000c21092002103541b6aac000ad42808080809002841001220229000021042002290008210520021035200320053701c808200320043701c008200320093601bc08200320073701b408200320083601b008200341e8006a200341b0086a10f20141032102024002402003280268417d71450d0041dca2c0002108418090ec0021090c010b0240200a41ff01710d00200b41ff01714101470d002003201a3703e8092003200c3a00e7092003200d3a00e6092003200e3b01e4092003200f3a00e309200320103a00e209200320113b01e009200320123a00df09200320133a00de09200320143b01dc09200320153a00db09200320163a00da09200320173b01d809200320183a00d709200320193a00d609200320063b01d4092003201d3a00d3092003201e3a00d2092003201f3b01d009200341f00b6a200341d0096a10b701200341800a6a20032802f00b220a20032802f80b10d601200341b0086a41086a220b200341bc0a6a290200370300200341b0086a41106a220c200341c40a6a290200370300200341b0086a41186a220d200341cc0a6a290200370300200341b0086a41206a220e200341d40a6a2802003602002003200341b40a6a2902003703b008024020032802a00a2201450d00200341800a6a41186a2903002107200341800a6a41086a2903002104200341b00a6a2802002108200341ac0a6a2802002109200341a80a6a280200210f20032903900a210520032903800a211a20032802a40a210220034188096a41206a200e28020036020020034188096a41186a200d29030037030020034188096a41106a200c29030037030020034188096a41086a200b290300370300200320032903b00837038809024020032802f40b450d00200a10350b200341e0086a41086a220a20034188096a41086a290300370300200341e0086a41106a220b20034188096a41106a290300370300200341e0086a41186a220c20034188096a41186a290300370300200341e0086a41206a220d20034188096a41206a280200360200200341f0066a41186a2007370300200341a0076a200836020020034198076a200f36020020034194076a200236020020032003290388093703e00820032005370380072003201a3703f0062003200936029c072003200136029007200320043703f806200341c4076a200d280200360200200341bc076a200c290300370200200341b4076a200b290300370200200341ac076a200a290300370200200341a4076a20032903e008370200200341800a6a200341a8076a220a10b50120033502880a42208620032802800a220bad841007024020032802840a450d00200b10350b200341800a6a200a10b90120033502880a42208620032802800a220aad841007024020032802840a450d00200a10350b02402002450d00200241186c450d00200110350b200841ffffffff0371450d0d200910350c0d0b024020032802f40b450d00200a10350b41b6a6c0002108410d210141801021090c010b4102210241801021090b20004200370308200041206a20013602002000411c6a2008360200200041186a20092002723602000c0c0b410221020c010b02402001450d00200141186c450d00200910350b0240200a41ffffffff0371450d00201210350b4188a6c0002109410c21014104210a0b2008450d02200841246c450d02200b10350c020b02402008450d00200841246c450d00200b10350b20032802c40b41ffffff3f71210e0b02400240200c450d00200e450d01200f10350c010b200f0d020b02402001450d00200141186c450d00200910350b0240200a41ffffffff0371450d00201210350b410121020b20004200370308200041206a20013602002000411c6a2009360200200041186a200a41ff0171411074200272418010723602000c060b41f7edcb00ad4280808080f0008410012201280000210820012900042107200128000c21092001103541e4edcb00ad4280808080a001841001220129000021042001290008210520011035200320053701c808200320043701c008200320093601bc08200320073701b408200320083601b008200341d8006a200341b0086a412010c001200328025c211120032802582112200341800a6a200341a8076a220110b50120033502880a42208620032802800a2208ad841007024020032802840a450d00200810350b200341d0096a200110b90120033502d809210720032802d0092110200341003602880a200342013703800a2002200341800a6a10770240024020020d0020032802840a210920032802880a21010c010b2002410574210b410020032802880a22016b210a20032802800a210d20032802840a2109200f210c0340200c210202402009200a6a411f4b0d00200141206a22082001490d032009410174220c2008200c20084b1b22084100480d03024002400240024020090d00024020080d004101210d0c020b20081033210d0c030b20092008470d010b200821090c020b200d200920081037210d0b20082109200d450d040b200241206a210c200d20016a22082002290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a290000370000200a41606a210a200141206a2101200b41606a220b0d000b200320093602840a200320013602880a2003200d3602800a0b02400240200920016b4104490d0020032802800a2108200921020c010b200141046a22022001490d01200941017422082002200820024b1b22024100480d010240024020090d00024020020d00410121080c020b200210332208450d040c010b20032802800a210820092002460d0020082009200210372208450d030b200320023602840a200320083602800a0b200820016a2011410020121b3600002003200141046a22013602880a41002109200341003a00f00b0240024020022001460d00200121020c010b200241016a22012002490d01200241017422092001200920014b1b22014100480d010240024020020d0041002102024020010d00410121080c020b200110332208450d040c010b20022001460d0020082002200110372208450d030b200320013602840a200320083602800a20032d00f00b21090b200820026a20093a000020032802840a210120074220862010ad84200241016aad42208620032802800a2202ad84100202402001450d00200210350b024020032802d409450d00201010350b0240200e450d00200f10350b02402003280294072202450d00200241186c450d0020032802900710350b20032802a00741ffffffff0371450d03200328029c0710350c030b103e000b103c000b20004200370308200041206a20013602002000411c6a2008360200200041186a2009418080fc0071200272418010723602000c020b42002107200042003703080c020b200041206a20083602002000411c6a200136020020004200370308200041186a20094180801c71200272418010723602000b420121070b20002007370300200341900c6a24000b9d0102017f017e230041106b2206240002402002ad4220862001ad842004ad4220862003ad842005102b2207422088a72204450d002007a722052d0000220341014b0d00410021010240024020030e020100010b2004417f6a4104490d0120052800012102410121010b200510352000200236020420002001360200200641106a24000f0b41b89acc00412e200641086a41c09bcc0041e89acc001046000b850501067f230041c0016b22022400200241ce006a2203200141036a2d00003a0000200241306a41086a2204200141106a290200370300200241306a41106a2205200141186a290200370300200241306a41186a2206200141206a280200360200200220012f00013b014c2002200141086a290200370330200141046a280200210702400240024020012d00004101470d0020024188016a2007109604200241d0006a200228028801220120022802900110cb0220024198016a41086a200241e7006a29000037030020024198016a41106a200241ef006a29000037030020024198016a41186a200241f7006a2d00003a0000200220022f01583b01b8012002200241da006a2d00003a00ba012002200229005f37039801024020022903504201520d00200241db006a2800002107200241086a41086a20024198016a41086a290300370300200241086a41106a20024198016a41106a290300370300200241086a41186a20024198016a41186a2d00003a0000200220022d00ba013a002a200220022f01b8013b01282002200229039801370308200228028c01450d02200110350c020b0240200228028c01450d00200110350b410121010c020b200241086a41086a2004290300370300200241086a41106a2005290300370300200241086a41186a20062d00003a0000200220022f014c3b012820022002290330370308200220032d00003a002a0b200041036a20022d002a3a0000200020022f01283b0001200041046a2007360000200041086a2002290308370000200041106a200241086a41086a290300370000200041186a200241086a41106a290300370000200041206a200241086a41186a2d00003a0000410021010b200020013a0000200241c0016a24000bb10503027f017e047f230041d0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a29000037030020022004370308200310354188c5c100ad4280808080d00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bce0203027f017e037f23004180026b22012400200141086a2000108e02200141e0006a2001280208220020012802102202108f0220012903602103200141b8016a200141e8006a41c400109d081a200141b4016a41026a2204200141af016a2d00003a0000200120012f00ad013b01b4010240024020034201510d0041002105200141186a410041c400109f081a0c010b20012d00ac012105200141186a200141b8016a41c400109d081a200141146a41026a20042d00003a0000200120012f01b4013b01140b200141e8006a200141186a41c400109d082104200141af016a200141166a2d00003a0000200142013703602001417f2005411874220541808080086a220620062005491b4118763a00ac01200120012f01143b00ad01200120023602bc01200120003602b8012004200141b8016a10e7020240200128020c450d00200010350b20014180026a24000bc20503027f017e047f230041d0006b2202240041d1c4c700ad4280808080e00084100122032900002104200241086a200341086a290000370300200220043703002003103541d7c4c700ad4280808080f00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000baa0406027f017e017f037e017f037e230041d0006b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822010d00200042003703000c010b200328020c2102024002400240200341106a28020022044104490d0020044104460d002004417b6a4110490d002004416b6a4110490d002004415b6a4110490d002004414b6a410f4b0d010b20034100360220200342013703182003410936022c200320033602282003200341186a360234200341cc006a41013602002003420137023c200341c888c2003602382003200341286a360248200341346a41e88ac500200341386a10431a200335022042208620033502188410060240200328021c450d00200328021810350b420021050c010b2001280000210420012d000421062001410d6a2900002105200129000521072001411d6a290000210820012900152109200341286a41026a220a200341386a41026a2d00003a0000200320032f00383b01282001412d6a290000210b2001290025210c2001290035210d200041c0006a2001413d6a290000370300200041386a200d370300200041306a200b370300200041286a200c370300200041206a2008370300200041186a2009370300200041106a200537030020002007370308200020063a004c200041c8006a2004360200200020032f01283b004d200041cf006a200a2d00003a0000420121050b200020053703002002450d00200110350b200341d0006a24000be80e03037f017e0d7f230022052106200541e0016b41607122052400024002402002200384500d00200441ff01712207450d002000290000210841002109024020074101460d004102410120044101711b21090b20052002370300200520093a00182005200837031020052003370308200541c0016a200110eb0220052802c001210a20052802c401210b02400240024020052802c801220c450d00200a200c41057422046a210d200441606a210e200541a0016a411072210f200541a0016a4119722110200a21040340200541e8006a41106a2211200441106a290300370300200541e8006a41086a2212200441086a29030037030020052004290300370368200441186a2d000021072005200441196a28000036023820052004411c6a28000036003b20074103460d0120102005280238360000201041036a200528003b360000200520112903003703b001200520122903003703a801200520052903683703a001200520073a00b80102400240200f2000460d00200f2900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b2002a7220741ff01714103470d02200e41606a210e200441206a2204200d470d000b0b200541003602a801200542083703a001200b41ffffff3f71450d01200a10350c010b200541d0006a41106a2210200529039001370300200541d0006a41086a22112005290388013703002005200528009c0136004320052005280099013602402005200529038001370350200520052802403602482005200528004336004b41201033220f450d02200f2005290350370300200f20073a0018200f2005280248360019200f411c6a200528004b360000200f41106a2010290300370300200f41086a2011290300370300200542818080801037022c2005200f3602280240200e450d00200441206a210e200c410574200a6a41606a211320054180016a4119722114200541a0016a4110722112200541a0016a41197221104101210c0340200e21040340200541e8006a41106a220e200441106a290300370300200541e8006a41086a2211200441086a29030037030020052004290300370368200441186a2d000021072005200441196a28000036023820052004411c6a28000036003b20074103460d0220102005280238360000201041036a200528003b3600002005200e2903003703b001200520112903003703a801200520052903683703a001200520073a00b8010240024020122000460d0020122900002000290000510d00200520052903b801220237039801200520052903b00137039001200520052903a80137038801200520052903a001370380010c010b200541033a00d80120052005290318220237039801200520052903103703900120052005290308370388012005200529030037038001200520052903d001370310200520052903c801370308200520052903c001370300200520052903d80122033703182003a721090b02402002a7220741ff01714103470d00200441206a2204200d470d010c030b0b200541d0006a41106a220e200529039001370300200541d0006a41086a2211200529038801370300200520142800003602402005201441036a2800003600432005200529038001370350200520052802403602482005200528004336004b200541c0016a41086a22152011290300370300200541c0016a41106a2211200e290300370300200520052903503703c001200520052802483602a0012005200528004b3600a3010240200c200528022c470d00200541286a200c410110a1012005280228210f0b200441206a210e201529030021022011290300210320052903c0012108200f200c4105746a221120073a001820112008370300201120052802a0013600192011411c6a20052800a301360000201141106a2003370300201141086a20023703002005200c41016a220c36023020132004470d000b0b0240200b41ffffff3f71450d00200a10350b200541a0016a41086a200541286a41086a280200360200200520052903283703a0010b02400240200941ff01714103470d0020052802a801210420052802a0012107200541a0016a21050c010b200541c0016a41186a22102005290318370300200541c0016a41106a220e2005290310370300200541c0016a41086a22112005290308370300200520052903003703c001024020052802a801220420052802a401470d00200541a0016a2004410110a10120052802a80121040b20052802a001220720044105746a220020052903c001370300200041086a2011290300370300200041106a200e290300370300200041186a20102903003703002005200441016a22043602a801200541a0016a21050b20012007200410ec02200541046a28020041ffffff3f71450d00200528020010350b200624000f0b1045000bf90703057f027e037f230041a0016b22022400200241e8006a200110b401200241f8006a200228026822032002280270220410d501024020022d00782205450d002004ad4220862003ad8410070b200241086a41176a220420024191016a290000370000200241086a41106a22062002418a016a290100370300200241086a41086a20024182016a29010022073703002002200229017a220837030820022d00792109200241f8006a41176a220a2004290000370000200241f8006a41106a22042006290300370300200241f8006a41086a22062007370300200220083703780240024020054101470d00200241c8006a41176a200a290000370000200241c8006a41106a2004290300370300200241c8006a41086a2006290300370300200220022903783703480240200228026c450d00200310350b200241286a41176a2203200241c8006a41176a290000370000200241286a41106a2205200241c8006a41106a290300370300200241116a200241d0006a290300370000200241196a2005290300370000200241206a2003290000370000200220093a000820022002290348370009200241f8006a200241086a10b70120023502800142208620022802782203ad8410070240200228027c450d00200310350b200241f8006a2001108c0220023502800142208620022802782203ad8410070240200228027c450d00200310350b200241f8006a200110b50120023502800142208620022802782203ad8410070240200228027c450d00200310350b200241f8006a200110b90120023502800142208620022802782203ad8410070240200228027c450d00200310350b200241c8006a200110ba01200241f8006a200228024822032002280250220510bc010240200228028401220b450d002005ad4220862003ad8410070b2002290388012107200228027821090240200228024c450d00200310350b0240200b450d00200b2007422088a74102746a210a41002103200b21052009210602400340024002402003417e714102460d0041022103200921040c010b2005450d02200a2005460d02200541046a2105410321032006417f6a220621040b200241f8006a41186a200141186a290000370300200241f8006a41106a200141106a290000370300200241f8006a41086a200141086a290000370300200220043602980120022001290000370378200241c8006a200241f8006a10b601200235025042208620022802482204ad841007200228024c450d00200410350c000b0b200742ffffffff0383500d00200b10350b2001109902200041043a00000c010b0240200228026c450d00200310350b200041086a4108360200200041046a41aea6c000360200200041026a41013a000020004183103b01000b200241a0016a24000bac0304107f027e017f017e230041306b220224002002200110eb022002280200210302400240200228020822040d00410021040c010b200041706a210541002106200321074100210802400240034002400240024020052007460d00200741106a22092900002000290000510d0020060d01410021060c020b200641016a21060c010b200820066b220a20044f0d02200241106a41186a220b200720064105746b220a41186a220c290300370300200241106a41106a220d200a41106a220e290300370300200241106a41086a220f200a41086a22102903003703002002200a290300370310200741086a2211290300211220092903002113200741186a22142903002115200a2007290300370300200c2015370300200e2013370300201020123703002014200b2903003703002009200d2903003703002011200f290300370300200720022903103703000b200741206a21072004200841016a2208460d020c000b0b200a200441f485cc001042000b2006417f6a20044f0d002002200420066b22043602080b20012003200410ec020240200228020441ffffff3f71450d00200310350b200241306a24000bcb3e0a027f017e017f027e017f017e117f017e077f077e230041a0036b22052400200541e0006a41286a200341286a290300370300200541e0006a41206a200341206a290300370300200541e0006a41186a200341186a290300370300200541e0006a41106a200341106a290300370300200541e0006a41086a200341086a290300370300200520032903003703600240024002400240024002400240024002400240024002400240024002400240024002400240200541e0006a200410f101220441ff0171411d470d0020054180036a41086a22044200370300200542003703800341f7edcb00ad4280808080f0008410012206290000210720054190036a41086a2208200641086a290000370300200520073703900320061035200420082903003703002005200529039003370380034192aac000ad4280808080a002841001220629000021072006290008210920061035200541e0026a41086a2004290300370300200520093703f802200520073703f00220052005290380033703e002200541e0006a200541e0026aad4280808080800484220a100510c2010240024020052802602204450d00200528026421062005200541e8006a2802003602a402200520043602a002200541386a200541a0026a10c401024002402005280238450d004101210b41b0b4cc0021080c010b200528023c21084100210b0b02402006450d00200410350b41122104200b450d010c020b410021080b20054180036a41086a22064200370300200542003703800341f7edcb00ad4280808080f00084220c10012204290000210720054190036a41086a220b200441086a2900003703002005200737039003200410352006200b29030037030020052005290390033703800341c1edcb00ad4280808080e001841001220429000021072004290008210920041035200541e0026a41086a220d2006290300370300200520093703f802200520073703f00220052005290380033703e002200541306a200541e0026a412010c00141132104200041086a28020020082005280234410020052802301b220e200e20084b1b2208470d00200642003703002005420037038003200c100122042900002107200b200441086a2900003703002005200737039003200410352006200b2903003703002005200529039003370380034192aac000ad4280808080a002841001220429000021072004290008210920041035200d2006290300370300200520093703f802200520073703f00220052005290380033703e002200541e0006a200541e0026a10fe01024020052802602206450d00200520052902642207370244200520063602402000280200210f20002802042110024020080d00411d21040c050b411421042007422088a7200f2f010022004d0d04200541e8006a220b200620004105746a220441096a290000370300200541f0006a2200200441116a290000370300200541f7006a2206200441186a2900003700002005200429000137036020042d0000210441201033220e450d06200e20043a0000200e2005290360370001200e41096a200b290300370000200e41116a2000290300370000200e41186a200629000037000020054281808080103702e4022005200e3602e0024101210b411d210420084101460d032005280248200f2f010222004d0d02200541a0026a41086a2211200528024020004105746a220041096a290000370300200541a0026a41106a2212200041116a290000370300200541a0026a41176a2213200041186a290000370000200520002900013703a002200f41046a210d2008410174417c6a210820002d00002114412121064102210b410121000340200541e0006a41176a22152013290000370000200541e0006a41106a22162012290300370300200541e0006a41086a22172011290300370300200520052903a0023703600240200b417f6a2000470d00200541e0026a20004101108a0120052802e002210e0b200e20066a2200417f6a20143a000020002005290360370000200041086a2017290300370000200041106a2016290300370000200041176a20152900003700002005200b3602e8022008450d042005280248200d2f010022004d0d032011200528024020004105746a220041096a2900003703002012200041116a2900003703002013200041186a290000370000200520002900013703a0022008417e6a2108200d41026a210d200641206a2106200b41016a210b20002d0000211420052802e40221000c000b0b411221040b200110fa01200041046a28020041808080807872418080808078460d11200028020010350c110b411421040b0240201041808080807872418080808078460d00200f10350b20052802e40241ffffff3f7121110c010b410021114101210e0240201041808080807872418080808078460d00200f10350b4100210b0b02402004411d460d00410121032011450d0d0c0c0b20054180036a41086a22044200370300200542003703800341f7edcb00ad4280808080f0008410012200290000210720054190036a41086a2206200041086a2900003703002005200737039003200010352004200629030037030020052005290390033703800341a4aac000ad4280808080a002841001220029000021072000290008210920001035200541e0026a41086a2004290300370300200520093703f802200520073703f00220052005290380033703e002200541e0006a200541e0026a10fe0120052802602214450d0820052005290264220737025420052014360250200541e0006a200141c001109d081a200541a0026a200541e0006a200541d0006a200541c0006a109b022007a7211720052d00a0024101460d0620052802a4022218200541a0026a410c6a2802002219412c6c221a6a211b200541a0026a41086a221c280200211d0240201a450d00200541e0026a41086a210f41f7edcb00ad4280808080f00084210741f393ca00ad4280808080a00184211e201821120340200710012204290000210920054190036a41086a2213200441086a290000370300200520093703900320041035201e1001220429000821092004280004211f2004280000212020041035412010332204450d0220042012410c6a2200290000370000200441186a200041186a2221290000370000200441106a200041106a2222290000370000200441086a200041086a222329000037000020052004ad4280808080800484100322062900003703e002200610352005200441206a36026c200520043602682005200f3602642005200541e0026a360260200541a0026a200541e0006a107b2004103520052802a802221541206a2206417f4c0d0c20052802a00221160240024020060d0041002108410121040c010b200610332204450d03200621080b024002402008410f4d0d002008210d0c010b2008410174220d4110200d41104b1b220d4100480d04024020080d00200d103322040d010c090b2008200d460d0020042008200d10372204450d080b2004200529039003370000200441086a201329030037000002400240200d4170714110460d00200d21080c010b200d41017422084120200841204b1b22084100480d04200d2008460d002004200d200810372204450d080b200420093700182004201f3600142004202036001002400240200841606a2015490d002008210d0c010b2015415f4b0d042008410174220d2006200d20064b1b220d4100480d042008200d460d0020042008200d10372204450d080b200441206a20162015109d081a024020052802a402450d00201610350b200541286a2004200641b0b4cc0041004100108a022005280228211f0240200d450d00200410350b20071001220429000021092013200441086a29000037030020052009370390032004103541cca9c000ad4280808080a00184100122042900082109200428000421202004280000212420041035412010332204450d0220042000290000370000200441186a2021290000370000200441106a2022290000370000200441086a202329000037000020052004ad4280808080800484100322062900003703e002200610352005200441206a36026c200520043602682005200f3602642005200541e0026a360260200541a0026a200541e0006a107b2004103520052802a802221541206a2206417f4c0d0c20052802a00221160240024020060d0041002108410121040c010b200610332204450d03200621080b024002402008410f4d0d002008210d0c010b2008410174220d4110200d41104b1b220d4100480d04024020080d00200d10332204450d090c010b2008200d460d0020042008200d10372204450d080b2004200529039003370000200441086a201329030037000002400240200d4170714110460d00200d21080c010b200d41017422084120200841204b1b22084100480d04200d2008460d002004200d200810372204450d080b20042009370018200420203600142004202436001002400240200841606a2015490d002008210d0c010b2015415f4b0d042008410174220d2006200d20064b1b220d4100480d042008200d460d0020042008200d10372204450d080b200441206a20162015109d081a024020052802a402450d00201610350b200541e0006a20042006109c02024020052d0070220641024622130d0020052802602110200528026421252005290368210c0b0240200d450d00200410350b02400240024002400240201f410146220420064102472208460d002004450d010240201241086a2802004101470d000240201228020022042000460d0020042000412010a0080d010b20042f012041ffff03460d030b4119210420064102460d0b202541ffffff3f710d0a0c0b0b4116210420064102460d0a202541ffffff3f71450d0a0c090b02402008450d00024020122802082204450d002012280200220d200441226c6a2115200c422088a72116200ca7410574211303402005200d22063602a002200641226a210d20132100201021040340024020000d00411721040c0c0b024020062004460d0020042006412010a0082108200041606a2100200441206a210420080d010b0b200541e0006a200541a0026a10bb010240200528026c2204450d00200528026821000240200528027041ffffffff0371450d00200410350b200020164d0d00411821040c0b0b200d2015470d000b0b202541ffffff3f71450d030c020b4185f3c10041fd004184f4c1001064000b20130d01202541ffffff3f71450d010b201010350b2012412c6a2212201b470d000b0b200541003602e802200542043703e002200541e0026a4100201a412c6d10980120052802e002210020052802e80221042005201b36026c200520183602682005201d36026420052018360260200520054190036a360270201c20043602002005200541e0026a41086a3602a402200520002004412c6c6a3602a002200541e0006a200541a0026a109d0220052802e4022110200541e0006a200e200b20052802e002222020052802e802221f10cc012005280268210f2005280264211220052802602116411a21040240200528026c0d000240024002402016450d0002402012450d002012210420162100034020002802c80521002004417f6a22040d000b20162104201221060340200420042f01064102746a41c8056a28020021042006417f6a22060d000b200541e0006a21060c020b200541e0006a210620162100201621040c010b4100210020054100360264200541e0006a21060c010b20052004360264200541ec006a20042f010636020020054100360268200541003602600b200541e0026a41086a200641086a29020022073703002005200629020022093703e002200541e0006a41186a200737030042002126200542003703682005200036026420054100360260200520093703702005200f3602800102400240200f0d00427f21274200210c4200212842002129427f211e0c010b2005200f417f6a36028001200541e0006a410020001b220d2802002106200d28020821130240024002400240200d28020c2208200d28020422042f01064f0d00200421000c010b034020042802002200450d02200641016a210620042f0104210820002104200820002f01064f0d000b0b2008ad4220862013ad8421070c010b2013ad2107410021000b2007422088a7221341016a21082007a721150240024020060d00200021040c010b200020084102746a41c8056a2802002104410021082006417f6a2206450d00034020042802c80521042006417f6a22060d000b0b200d200836020c200d2015360208200d2004360204200d4100360200200020134105746a41e8026a2104427f2127427f211e4200212842002129420021264200210c0340200541086a200441086a29030022094200200429030022074200108408200541186a2007420020074200108408427f200c427f200541186a41086a290300222a2005290308222b202b7c7c222b20092005290310222c84202c84420052202b202a547222041b7c2026427f200529031820041b7c222a2026542204ad7c222620042026200c542026200c511b22041b210c427f202a20041b21262009201e20072027542009201e542009201e511b22041b211e2007202720041b2127200920297c200720287c2228200754ad7c21292005280280012204450d0120052004417f6a36028001200541e0006a410020052802641b220d2802002106200d2802082113024002400240200d28020c2208200d28020422042f01064f0d00200421000c010b0240034020042802002200450d01200641016a210620042f0104210820002104200820002f0106490d020c000b0b2013ad2107410021000c010b2008ad4220862013ad8421070b2007422088a7221341016a21082007a721150240024020060d00200021040c010b200020084102746a41c8056a2802002104410021082006417f6a2206450d00034020042802c80521042006417f6a22060d000b0b200d200836020c200d2015360208200d2004360204200d4100360200200020134105746a41e8026a21040c000b0b200541c8026a200c370300200541a0026a41186a2029370300200520263703c002200520283703b002200520273703a0022005201e3703a80202400240200541a0026a2003460d00200541a0026a2003413010a0080d010b0240024020160d0041002116410021034100210f0c010b0240024020120d00201621030c010b2012210320162104034020042802c80521042003417f6a22030d000b201621030340200320032f01064102746a41c8056a28020021032012417f6a22120d000b200421160b20032f010621040b200541fc006a2004360200200541e0006a41186a4100360200200541f4006a20033602002005200f3602800120054100360270200542003703682005201636026420054100360260200520054190036a36028401200541d0026a200541e0006a10cd0120052802d002211320052802d402211520052802d802211220054180036a41086a22034200370300200542003703800341f7edcb00ad4280808080f0008410012204290000210720054190036a41086a2200200441086a2900003703002005200737039003200410352003200029030037030020052005290390033703800341b3b6c000ad4280808080d001841001220429000021072004290008210920041035200541e0026a41086a2003290300370300200520093703f802200520073703f00220052005290380033703e0022005410036026820054201370360200b200541e0006a10770240200b450d00200b410574210b4100200528026822046b210120052802642106200e2103034002400240200620016a4120490d00200528026021000c010b200441206a22002004490d06200641017422082000200820004b1b22084100480d060240024020060d00024020080d00410121000c020b200810332200450d0c0c010b2005280260210020062008460d0020002006200810372200450d0b0b2005200836026420052000360260200821060b200020046a22002003290000370000200041186a200341186a290000370000200041106a200341106a290000370000200041086a200341086a2900003700002005200441206a2204360268200141606a2101200341206a2103200b41606a220b0d000b0b2012200541e0006a107702402012450d002013201241d0006c6a210d2013210b03400240024020052802642200200528026822036b4120490d00200528026021040c010b200341206a22042003490d06200041017422012004200120044b1b22014100480d060240024020000d00024020010d00410121040c020b200110332204450d0c0c010b2005280260210420002001460d0020042000200110372204450d0b0b20052001360264200520043602600b200420036a2204200b290000370000200441186a200b41186a290000370000200441106a200b41106a290000370000200441086a200b41086a2900003700002005200341206a3602682005200b41206a3602900320054190036a200541e0006a10cf012005200b41306a3602900320054190036a200541e0006a10cf01200b2802402103200b2802482204200541e0006a107702402004450d00200441306c210603400240024020052802642201200528026822046b4120490d00200528026021000c010b200441206a22002004490d08200141017422082000200820004b1b22084100480d080240024020010d00024020080d00410121000c020b200810332200450d0e0c010b2005280260210020012008460d0020002001200810372200450d0d0b20052008360264200520003602600b200020046a2200200341106a290000370000200041186a200341286a290000370000200041106a200341206a290000370000200041086a200341186a2900003700002005200441206a360268200520033602900320054190036a200541e0006a10cf01200341306a2103200641506a22060d000b0b200d200b41d0006a220b470d000b0b024002400240024002400240200241ff0171220341024b0d0020030e03010203010b2005280268210320052802642100200528026021040c040b410021010c020b410121010c010b410221010b200520013a009003024002402005280264220020052802682203460d00200528026021040c010b200341016a22042003490d05200341017422002004200020044b1b22004100480d050240024020030d0041002103024020000d00410121040c020b200010332204450d0b0c010b2005280260210420032000460d0020042003200010372204450d0a0b20052000360264200520043602600b200420036a20013a00002005200341016a22033602680b200a2003ad4220862004ad84100202402000450d00200410350b02402011450d00200e10350b02402012450d00201241d0006c2104201341c4006a21030340024020032802002200450d00200041306c450d002003417c6a28020010350b200341d0006a2103200441b07f6a22040d000b0b02402015450d00201541d0006c450d00201310350b200541e0006a41286a2200200541a0026a41286a290300370300200541e0006a41206a2201200541a0026a41206a290300370300200541e0006a41186a2206200541a0026a41186a290300370300200541e0006a41106a2208200541a0026a41106a290300370300200541e0006a41086a220b200541a0026a41086a290300370300200520052903a00237036020054180036a41086a22034200370300200542003703800341f7edcb00ad4280808080f0008410012204290000210720054190036a41086a2202200441086a2900003703002005200737039003200410352003200229030037030020052005290390033703800341ceeecb00ad4280808080b001841001220429000021072004290008210920041035200541e0026a41086a2003290300370300200520093703f802200520073703f00220052005290380033703e002413010332203450d0220032005290360370000200341286a2000290300370000200341206a2001290300370000200341186a2006290300370000200341106a2008290300370000200341086a200b290300370000200a2003ad42808080808006841002200310350240201f450d00201f412c6c21042020210303400240200341046a2802002200450d00200041306c450d00200328020010350b2003412c6a2103200441546a22040d000b0b02402010450d002010412c6c450d00202010350b0240201741ffffff3f71450d00201410350b0240200528024441ffffff3f71450d00200528024010350b411d21040c0f0b411b21040b0240024020160d004100210f200541f4006a4100360200200541003602640c010b0240024020120d00201621030c010b2012210320162100034020002802c80521002003417f6a22030d000b201621030340200320032f01064102746a41c8056a28020021032012417f6a22120d000b200021160b200541fc006a20032f0106360200200541f8006a4100360200200541f4006a2003360200200541003602702005420037036820052016360264200541003602600b2005200f36028001200541e0006a109e020240201f450d00201f412c6c21002020210303400240200341046a2802002206450d00200641306c450d00200328020010350b2003412c6a2103200041546a22000d000b0b2010450d072010412c6c450d07202010350c070b1045000b103e000b202541ffffff3f71450d010b201010350b02402019450d002019412c6c21002018210303400240200341046a2802002206450d00200641226c450d00200328020010350b2003412c6a2103200041546a22000d000b0b201d450d02201d412c6c450d02201810350c020b103c000b411521040b41002103201741ffffff3f71450d012014103520110d030c040b41122104410121030b20110d010c020b1044000b200e10350b0240200528024441ffffff3f71450d00200528024010350b2003450d00200110fa010b200541a0036a240020040be10503027f017e057f230041e0006b2202240041f7edcb00ad4280808080f00084100122032900002104200241206a41086a200341086a290000370300200220043703202003103541ccb5c000ad4280808080800284100122032900002104200241c0006a41086a200341086a2900003703002002200437034020031035200220013602542002200241d4006aad4280808080c000841003220329000037035820031035200241146a200241d8006a3602002002200241d8006a41086a36020c2002200241d4006a3602102002200241d8006a360208200241306a200241086a107b02400240024002402002280238220541206a2206417f4c0d00200228023021070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290320370000200341086a200241206a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290340370010200341186a200241c0006a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a02402002280234450d00200710350b200241086a2003200610ae01200241c0006a41086a2201200241086a410c6a2902003703002002200229020c3703400240024020022802084101460d00200042003702002000410c6a41003602000c010b20002002290340370200200041086a20012903003702000b02402008450d00200310350b200241e0006a24000f0b1044000b1045000b103e000b103c000bbb0302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b2203428094ebdc034200109808200441286a20042903382206200441386a41086a2903002207428094ebdc034200108408200441186a20022003200620022004290328852003200441286a41086a2903008584420052ad7c22084201200842015620072008200654ad7c22064200522006501b22051b22082006420020051b220710980802400240024020042903182206428080808010544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b2008200710980820042903082203428080808010544100200441086a41086a290300501b450d012006a7450d02200441d0006a2400200342ffffffff0f83428094ebdc037e200642ffffffff0f8380a70f0b2004411136024c20044190efc40036024841bcedc40041de00200441c8006a41acedc400419ceec4001046000b2004411136024c20044190efc40036024841bcedc40041de00200441c8006a41acedc40041f0eec4001046000b4190edc40041194180efc400103f000bf619020c7f087e23004190046b2204240020044190036a2001108c024100200428029003220520042802980310970241ff0171220620064103461b21060240200428029403450d00200510350b0240024002400240024020060e03000201000b200441a0016a200110b40120044190036a20042802a001220620042802a80110d50120044180026a41086a220520044199036a29000037030020044180026a41106a2207200441a1036a29000037030020044180026a41186a2208200441a9036a29000037030020042004290091033703800202400240024020042d0090034101470d0020044180016a41186a200829030037030020044180016a41106a200729030037030020044180016a41086a2005290300370300200420042903800237038001024020042802a401450d00200610350b200441e0016a41186a20044180016a41186a290300370300200441e0016a41106a20044180016a41106a290300370300200441e0016a41086a20044180016a41086a29030037030020042004290380013703e001200441c0006a200441e0016a10b70120044190036a20042802402209200428024810d601200441a0016a41086a220520044190036a41086a290300370300200441a0016a41106a220720044190036a41106a290300370300200441a0016a41186a220820044190036a41186a29030037030020044180026a41086a220a200441bc036a29020037030020044180026a41106a220b200441c4036a29020037030020044180026a41186a220c200441cc036a29020037030020044180026a41206a220d200441d4036a29020037030020044180026a41286a220e200441dc036a29020037030020044180026a41306a220f200441e4036a28020036020020042004290390033703a001200420042902b4033703800220042802b0032206450d01200441e0026a41186a2008290300370300200441e0026a41106a2007290300370300200441e0026a41086a2005290300370300200441086a41086a200a290300370300200441086a41106a200b290300370300200441086a41186a200c290300370300200441086a41206a200d290300370300200441086a41286a200e290300370300200441086a41306a200f280200360200200420042903a0013703e002200420042903800237030802402004280244450d00200910350b20044180026a41186a200441e0016a41186a290300221037030020044180026a41106a200441e0016a41106a290300221137030020044180026a41086a200441e0016a41086a2903002212370300200420042903e00122133703800220044190036a41186a201037030020044190036a41106a201137030020044190036a41086a201237030020044190036a41286a200441e0026a41086a290300221437030020044190036a41306a200441e0026a41106a290300221537030020044190036a41386a200441e0026a41186a29030022163703002004201337039003200420042903e00222173703b003200441c0006a41386a2016370300200441c0006a41306a2015370300200441c0006a41286a2014370300200441e0006a2017370300200441c0006a41186a2010370300200441c0006a41106a2011370300200441c0006a41086a2012370300200420133703400c020b20042802a401450d04200610350c040b02402004280244450d00200910350b20044180026a41186a200441e0016a41186a29030037030020044180026a41106a200441e0016a41106a29030037030020044180026a41086a200441e0016a41086a290300370300200420042903e001370380020b2006450d02200441a0016a41386a2207200441c0006a41386a290300370300200441a0016a41306a2208200441c0006a41306a290300370300200441a0016a41286a220a200441c0006a41286a290300370300200441a0016a41206a220b200441c0006a41206a290300370300200441a0016a41186a200441c0006a41186a2205290300370300200441a0016a41106a200441c0006a41106a220c290300370300200441a0016a41086a200441c0006a41086a220d290300370300200420042903403703a001200441e0016a41186a2005290300370300200441e0016a41106a200c290300370300200441e0016a41086a200d290300370300200420042903403703e00120044180026a41186a2205200729030037030020044180026a41106a2207200829030037030020044180026a41086a2208200a290300370300200420063602a0022004200b29030037038002200441a4026a2004290308370200200441ac026a200441086a41086a290300370200200441b4026a200441086a41106a290300370200200441bc026a200441086a41186a290300370200200441c4026a200441086a41206a290300370200200441cc026a200441086a41286a290300370200200441d4026a200441086a41306a2802003602002005290300211020072007290300221120027c22123703002005201020037c2012201154ad7c3703002008200829030020037c200429038002221020027c2211201054ad7c221237030020042011370380022004200337038801200420023703800102400240200220038450450d004200210342002110420021020c010b200420013602dc02200441e0026a200120044180016a200441dc026a109a02024020042802e0024101470d004200211020042903e8022103420121020c010b20044188036a290300211020044180036a29030021034200210220042903e8024201520d00200441e0026a41106a2903002113200441c8036a200441e0026a41186a290300370300200441c0036a201337030020044190036a41086a41003a000020044199036a2001290000370000200441a1036a200141086a290000370000200441a9036a200141106a290000370000200441b1036a200141186a290000370000200441033a00900341b0b4cc00410020044190036a10d4010b200442f3e885db96cddbb3203703800120044180016a20044180026a41386a20112012411f10900220044190036a200441e0016a10b701200428029003210120042004280298033602e402200420013602e00220044180026a200441e0026a10e1010240200428029403450d00200110350b024020042802a4022201450d00200141186c450d0020042802a00210350b0240200441b0026a28020041ffffffff0371450d0020042802ac0210350b200242018521020c030b200441a0016a200110b40120044190036a20042802a001220120042802a80110d50120044180026a41086a220620044199036a29000037030020044180026a41106a2205200441a1036a29000037030020044180026a41186a2207200441a9036a290000370300200420042900910337038002024020042d0090034101470d00200441c0006a41186a2007290300370300200441c0006a41106a2005290300370300200441c0006a41086a20062903003703002004200429038002370340024020042802a401450d00200110350b200441a0016a41186a200441c0006a41186a290300370300200441a0016a41106a200441c0006a41106a290300370300200441a0016a41086a200441c0006a41086a290300370300200420042903403703a001200420023703082004200337031002400240200220038450450d004200210242002103420021100c010b2004200441a0016a3602e00220044180026a200441a0016a200441086a200441e0026a109a0202402004280280024101470d00420021102004290388022103420121020c010b200441a8026a2903002110200441a0026a2903002103420021022004290388024201520d0020044180026a41106a2903002111200441c8036a20044180026a41186a290300370300200441c0036a201137030020044190036a41086a41003a000020044199036a20042903a001370000200441a1036a200441a0016a41086a290300370000200441a9036a200441a0016a41106a290300370000200441b1036a200441a0016a41186a290300370000200441033a00900341b0b4cc00410020044190036a10d4010b200242018521020c030b20042802a401450d0120011035420021020c020b200420023703a001200420033703a80102400240200220038450450d004200210342002110420021020c010b2004200136024020044180026a2001200441a0016a200441c0006a109a0202402004280280024101470d00420021102004290388022103420121020c010b200441a8026a2903002110200441a0026a2903002103420021022004290388024201520d0020044180026a41106a2903002111200441c8036a20044180026a41186a290300370300200441c0036a201137030020044190036a41086a41003a000020044199036a2001290000370000200441a1036a200141086a290000370000200441a9036a200141106a290000370000200441b1036a200141186a290000370000200441033a00900341b0b4cc00410020044190036a10d4010b200242018521020c010b420021020b2000200337030820002002370300200041106a201037030020044190046a24000b800201027f230041d0006b220224002002200136020420022000360200200241086a2001ad4220862000ad84100510c20102400240200228020822010d00410321000c010b200228020c210302400240200241106a280200450d0020012d000022004103490d010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b410321000b2003450d00200110350b200241d0006a240020000ba30301067f230041106b22032400024020014105744104722204417f4c0d000240200410332205450d002003410036020820032004360204200320053602002001200310770240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210620032802082105034020002101024002402006200522046b4120490d00200441206a21050c010b024002400240200441206a22052004490d00200641017422002005200020054b1b22004100480d000240024020060d00024020000d00410121070c020b2000103321070c040b20062000470d020b200021060c030b103e000b200720062000103721070b2000210620070d00103c000b200141206a2100200720046a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100202402006450d00200710350b200341106a24000f0b1045000b1044000bce0203027f017e037f23004180026b22012400200141086a2000108e02200141e0006a2001280208220020012802102202108f0220012903602103200141b8016a200141e8006a41c400109d081a200141b4016a41026a2204200141af016a2d00003a0000200120012f00ad013b01b4010240024020034201510d0041002105200141186a410041c400109f081a0c010b20012d00ac012105200141186a200141b8016a41c400109d081a200141146a41026a20042d00003a0000200120012f01b4013b01140b200141e8006a200141186a41c400109d082104200141af016a200141166a2d00003a000020014201370360200141002005411874220541808080786a2206200620054b1b4118763a00ac01200120012f01143b00ad01200120023602bc01200120003602b8012004200141b8016a10e7020240200128020c450d00200010350b20014180026a24000bbe1007047f027e027f067e037f067e047f230041d0036b2204240020032802002105200441206a2001108e02200441a0016a2004280220220620042802282207108f0220042903a001210842002109200442003703a001200441e8016a280200210a20042d00ec01210b02400240200842015122030d00200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441c0006a4200370300200441386a4200370300200442003703304200210c4200210d4200210e4200210f0c010b200441d8016a2903002110200441a0016a41306a2903002111200441a0016a41206a290300210c200441a0016a41186a2903002109200441e0016a290300210f20042903b001210e20042903a801210d200441306a41206a200441a0016a41286a290300370300200441306a41286a2011370300200441306a41306a2010370300200441c0006a20093703002004200c3703482004200d3703302004200e3703380b024002400240427f200d20097c22092009200d542212200e200c7c2012ad7c2209200e542009200e511b22121b427f200920121b84500d000240200d2002290300220c7c2209200d542212200e200241086a29030022107c2012ad7c220d200e54200d200e511b450d00200441a0026a41086a4108360200200441a7d6ca003602a402200441023a00a202200441830c3b01a002200441a0026a21020c020b200420093703302004200d370338200441e8006a41186a200441c0006a220241086a290300220e370300200441e8006a41206a2212200241106a29030037030020044190016a2213200241186a29030037030020044198016a2214200241206a2903003703002004200d3703702004200937036820042002290300221137037802400240427f200920117c221120112009542202200d200e7c2002ad7c220e200d54200e200d511b22021b2211428080e983b1de16544100427f200e20021b220e501b0d00200441e8006a41106a290300210e201429030021112013290300211520122903002116200429037021172004290368211842012119200429038001211a0c010b024002402011200e8450450d00420021190c010b42002119200441a0026a41186a221b4200370300200441a0026a41106a22134200370300200441a0026a41086a22124200370300200442003703a00241b6fdc600ad42808080808001842215100122142900002116200441c0036a41086a2202201441086a290000370300200420163703c0032014103520122002290300370300200420042903c0033703a00241e489c200ad4280808080d0018422161001221429000021172002201441086a290000370300200420173703c00320141035201320042903c0032217370300200441a0036a41086a221c2012290300370300200441a0036a41106a221d2017370300200441a0036a41186a221e2002290300370300200420042903a0023703a003200441086a200441a0036a412010d701200441086a41106a29030021172004290310211820042802082114201b42003703002013420037030020124200370300200442003703a00220151001221b29000021152002201b41086a290000370300200420153703c003201b103520122002290300370300200420042903c0033703a00220161001221b29000021152002201b41086a290000370300200420153703c003201b1035201320042903c0032215370300201c2012290300370300201d2015370300201e2002290300370300200420042903a0023703a003200442002017420020141b2215200e7d2018420020141b2216201154ad7d2217201620117d2218201656201720155620172015511b22021b3703a80220044200201820021b3703a002200441a0036aad4280808080800484200441a0026aad42808080808002841002200441d8026a200e370300200441d0026a2011370300201241013a0000200441a9026a2005290000370000200441b1026a200541086a290000370000200441b9026a200541106a290000370000200441c1026a200541186a290000370000200441033a00a00241b0b4cc004100200441a0026a10d4010b0b200441c8016a2016370300200441d0016a2015370300200441b0016a2017370300200441d8016a2011370300200441b8016a200e3703002004201a3703c0012004200f3703e001200420183703a8014201210e410021022004200b4100200842015122121b3a00ec012004200a410020121b3602e801200420194201512212ad3703a001024020120d002007ad4220862006ad8410074200210e420021080c030b200420073602a402200420063602a002200441a8016a200441a0026a10e702420021080c020b200441a8026a410b360200200441ea88c2003602a402200441073a00a202200441830c3b01a002200441a0026a21020b200241046a290200220d4280807c832108200d42088842ff0183210e200da7210320022802002112410121020b02402004280224450d00200610350b024002402002450d0020002012360204200041086a200e4208862003ad42ff018384200884370200410121010c010b024002400240200341ff017122030d00200e4200510d0041032102200441a0026a21030c010b2003450d01200e4200520d0141042102200441a0016a21030b200341086a20023a0000200341003a0000200341096a2001290000370000200341116a200141086a290000370000200341196a200141106a290000370000200341216a200141186a29000037000041b0b4cc004100200310d4010b200041286a2010370300200041206a200c370300200041186a200d370300200041106a2009370300200041086a4200370300410021010b20002001360200200441d0036a24000bf6c8010e077f017e057f017e0b7f017e037f017e017f017e017f017e017f017e230041d0016b220424002004200336020c20044100360218200442043703102001280204210520012802002106024002400240024002400240024002400240024020012802082203450d0020034103742107200441b0016a41106a2108200441b0016a41176a21092006210a03402002280208200a290200220ba722034d0d07200441b0016a41086a220c200228020020034105746a220341096a2900003703002008200341116a2900003703002009200341186a290000370000200420032900013703b00120032d0000210d412210332203450d02200428020c220e280208200b422088a741ffff0371220f4d0d06200441c0006a41106a2210200e280200200f4105746a220e41116a290000370300200441c0006a41176a220f200e41186a290000370000200441c0006a41086a200e41096a2900002211370300200e290001210b2003200e2d00003a00002003200b370001200341096a2011370000200341ffff033b0120200341116a2010290300370000200341186a200f2900003700002004200b37034020044190016a41176a220f200929000037000020044190016a41106a2210200829030037030020044190016a41086a2212200c290300370300200420042903b0013703900102402004280218220e2004280214470d00200441106a200e41011098012004280218210e0b200a41086a210a2004280210200e412c6c6a220e200d3a000c200e428180808010370204200e2003360200200e410d6a200429039001370000200e41156a2012290300370000200e411d6a2010290300370000200e41246a200f2900003700002004200428021841016a360218200741786a22070d000b0b0240200541ffffffff0171450d00200610350b200128020c2113200141106a2802002114200141146a2802002203450d0320132003410c6c6a211520044190016a41106a210720044190016a41176a210c2013210a034002400240200a41066a2f0100220841ffff03460d002002280208200a28020022034b0d0120004181043b01000c050b200041013b01000c040b200a41086a2f01002109200a41046a2f0100210e20044190016a41086a2210200228020020034105746a220341096a2900003703002007200341116a290000370300200c200341186a290000370000200420032900013703900120032d0000211241c40010332203450d01200428020c220d280208220f200e4d0d02200441b0016a41086a2206200d280200220d200e4105746a220e41096a290000370300200441b0016a41106a2205200e41116a290000370300200441b0016a41176a2216200e41186a2900003700002004200e2900013703b0010240200f20094d0d00200e2d0000210f200441c0006a41086a2217200d20094105746a220e41096a290000370300200441c0006a41106a2209200e41116a290000370300200441c0006a41176a220d200e41186a290000370000200e290001210b200e2d0000210e2003200f3a0000200320042903b001370001200341096a2006290300370000200341116a2005290300370000200341186a20162900003700002003200e3a0022200320083b01202004200b370340200320042903403700232003412b6a2017290300370000200341336a20092903003700002003413a6a200d29000037000020032008417f733b0142200441206a41176a2208200c290000370000200441206a41106a22092007290300370300200441206a41086a220d2010290300370300200420042903900137032002402004280218220e2004280214470d00200441106a200e41011098012004280218210e0b2004280210200e412c6c6a220e20123a000c200e428280808020370204200e2003360200200e410d6a2004290320370000200e41156a200d290300370000200e411d6a2009290300370000200e41246a20082900003700002004200428021841016a360218200a410c6a220a2015470d010c050b0b20004181043b0100200310350c020b103c000b20004181043b0100200310350b4100210641012102200441106a210802402014450d002014410c6c450d00201310350b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f4101211041012112410121140c040b02402014450d002014410c6c450d00201310350b200128021821172001411c6a28020021150240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141206a2802002203450d00201720034104746a2116200441c0006a41086a210e200441c0006a41106a210a200441c0006a41176a2108201721090240024003402009410c6a2f0100210c2009280200210d2004200941046a290200220b3703800102400240200428020c2203280208200ba741ffff037122074d0d00200e200328020020074105746a220341096a290000370300200a200341116a2900003703002008200341186a2900003700002004200329000137034020032d00002107412210332203450d06200320073a0000200320042903403700012003200b421088a722123b0120200341096a200e290300370000200341116a200a290300370000200341186a20082900003700002004428180808010370294012004200336029001200428020c220f28020820042f01840122104b0d0141000d004122450d00200310350b20004181043b01000c3a0b20042f0186012107200441b0016a41176a2206200f28020020104105746a220341186a290000370000200441b0016a41106a2210200341116a290000370300200441b0016a41086a220f200341096a290000220b3703002004200329000122113703b00120032d0000210520082006290000370000200a2010290300370300200e200b3703002004201137034020044190016a41014101109e01200428029001220320053a0022200341236a20042903403700002003412b6a200e290300370000200341336a200a2903003700002003413a6a2008290000370000200341c2006a20073b01002004410236022820042004280294012210360224200420033602200240417f2012411074221220074110746a220720072012491b411076220741ffff03470d00200041013b01000c030b200428020c2212280208200c4d0d012007417f732106200e2012280200200c4105746a220741096a290000370300200a200741116a2900003703002008200741186a290000370000200420072900013703404102210c20072d00002107024020104102470d00200441206a41024101109e01200428022021032004280228210c0b2003200c41226c6a220320073a000020032004290340370001200320063b0120200341096a200e290300370000200341116a200a290300370000200341186a20082900003700002004200428022841016a36022802402002280208200d4d0d0020022802002103200f200441206a41086a280200360200200e2003200d4105746a220341096a290000370300200a200341116a2900003703002008200341186a290000370000200420042903203703b0012004200329000137034020032d000021070240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b001370200200320073a000c200341086a200f2802003602002003410d6a2004290340370000200341156a200e2903003700002003411d6a200a290300370000200341246a20082900003700002004200428021841016a360218200941106a22092016470d010c040b0b20004181043b0100200428022421100c010b20004181043b01000b2010450d36201041226c450d36200428022010350c360b0240201541ffffffff0071450d00201710350b20012802242118200141286a280200211902402001412c6a2802002203450d002018200341146c6a211a2004418a016a211b20044180016a41086a211c200441c0006a41106a2107200441c0006a41176a210c20182115024002400240034020152f01102114201528020021132015290104210b201c2015410c6a2801003602002004200b3703800102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f018201210e200441c0006a41086a220d2003280200200a4105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d0000210341221033220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200d290300370000200f41116a2007290300370000200f41186a200c2900003700002004428180808010370294012004200f360290010240200428020c220328020820042f018401220a4b0d00410221034101210a0c390b201541146a2115417f200e411074220e20042f01860122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201b21080340200c201629000037000020072005290300370300200d2012290300370300200420042903b0013703400240200e417f6a2003470d0020044190016a20034101109e01200428029001210f0b200f200a6a220941606a20173a0000200941616a22032004290340370000200c290000210b20072903002111200d290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e360298010240200a41e400470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d0000211720042802940121030c000b0b410221030c380b200428029401210a20034103470d362004200e3602282004200a3602242004200f3602200240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200d200328020020144105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d000021090240200a200e470d00200441206a200e4101109e012004280220210f2004280228210e0b200f200e41226c6a220320093a000020032004290340370001200c290000210b20072903002111200d290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b3700002004200428022841016a360228200228020820134d0d03200228020021032012200441206a41086a280200360200200d200320134105746a220341096a2900003703002007200341116a290000370300200c200341186a290000370000200420042903203703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200d2903003700002003411d6a2007290300370000200341246a200c2900003700002004200428021841016a3602182015201a470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b01002004280224210a0b200a450d34200a41226c450d34200428022010350c340b02402019450d00201941146c450d00201810350b20012802302118200141346a28020021190240200141386a2802002203450d002018200341186c6a211a2004419a016a211b20044190016a41086a211c200441c0006a41106a2107200441c0006a41176a210c20182115024002400240034020152f01142114201528020021132015290104210b201c2015410c6a2901003703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220d2003280200200a4105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d0000210341221033220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200d290300370000200f41116a2007290300370000200f41186a200c29000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c350b201541186a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201b21080340200c201629000037000020072005290300370300200d2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a22032004290340370000200c290000210b20072903002111200d290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a418601470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c340b2004280224210a20034103470d322004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200d200328020020144105746a220341096a2900003703002007200341116a290000370300200c200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a000020032004290340370001200c290000210b20072903002111200d290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200d200320134105746a220341096a2900003703002007200341116a290000370300200c200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200d2903003700002003411d6a2007290300370000200341246a200c2900003700002004200428021841016a3602182015201a470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d30200a41226c450d3020042802800110350c300b02402019450d00201941186c450d00201810350b200128023c2119200141c0006a280200211e0240200141c4006a2802002203450d0020192003411c6c6a21182004419a016a211a20044190016a41106a211c20044190016a41086a211b200441c0006a41176a210720192115024002400240034020152f01182114201528020021132015410c6a29010021112015290104210b201c201541146a280100360200201b20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221033220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c310b2015411c6a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201a2108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41a801470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c300b2004280224210a20034103470d2e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152018470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d2c200a41226c450d2c20042802800110350c2c0b0240201e450d00201e411c6c450d00201910350b20012802482119200141cc006a280200211e0240200141d0006a2802002203450d00201920034105746a21182004419a016a211a20044190016a41106a211c20044190016a41086a211b200441c0006a41176a210720192115024002400240034020152f011c2114201528020021132015410c6a29010021112015290104210b201c201541146a290100370300201b20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221033220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c2d0b201541206a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e201a2108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41ca01470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c2c0b2004280224210a20034103470d2a2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152018470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d28200a41226c450d2820042802800110350c280b0240201e41ffffff3f71450d00201910350b2001280254211f200141d8006a280200211e0240200141dc006a2802002203450d00201f200341246c6a21192004419a016a211820044190016a41186a211c20044190016a41106a211b20044190016a41086a211a200441c0006a41176a2107201f2115024002400240034020152f01202114201528020021132015410c6a2901002111201541146a290100211d2015290104210b201c2015411c6a280100360200201b201d370300201a20113703002004200b3703900102400240200428020c2203280208200ba741ffff0371220a4d0d0020042f019201210e200441c0006a41086a220c2003280200200a4105746a220341096a290000370300200441c0006a41106a220d200341116a2900003703002007200341186a2900003700002004200329000137034020032d0000210341221033220f450d07200f20033a0000200f2004290340370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f019401220a4b0d00410221034101210a0c290b201541246a2115417f200e411074220e20042f01960122064110746a22082008200e491b4110762110200441b0016a41086a22122003280200200a4105746a220341096a290000370300200441b0016a41106a2205200341116a290000370300200441b0016a41176a2216200341186a290000370000200420032900013703b00120032d000021174101210341c200210a4102210e20182108034020072016290000370000200d2005290300370300200c2012290300370300200420042903b0013703400240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903403700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41ec01470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a290000370000200420032900013703b001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c280b2004280224210a20034103470d262004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a2900003700002004200329000137034020032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903403700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a29000037000020042004290380013703b0012004200329000137034020032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a220320042903b0013702002003200e3a000c200341086a20122802003602002003410d6a2004290340370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152019470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d24200a41226c450d2420042802800110350c240b0240201e450d00201e41246c450d00201f10350b2001280260211f200141e4006a280200211e0240200141e8006a2802002203450d00201f200341286c6a2119200441ca006a2118200441c0006a41186a211c200441c0006a41106a211b200441c0006a41086a211a200441b0016a41176a2107201f2115024002400240034020152f01242114201528020021132015410c6a2901002111201541146a290100211d2015290104210b201c2015411c6a290100370300201b201d370300201a20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c250b201541286a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20182108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a418e02470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c240b2004280224210a20034103470d222004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152019470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d20200a41226c450d2020042802800110350c200b0240201e450d00201e41286c450d00201f10350b200128026c211f200141f0006a28020021200240200141f4006a2802002203450d00201f2003412c6c6a211e200441ca006a2119200441e0006a211c200441c0006a41186a211b200441c0006a41106a211a200441c0006a41086a2118200441b0016a41176a2107201f2115024002400240034020152f01282114201528020021132015410c6a2901002111201541146a290100211d2015411c6a29010021212015290104210b201c201541246a280100360200201b2021370300201a201d370300201820113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c210b2015412c6a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20192108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41b002470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c200b2004280224210a20034103470d1e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201e470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d1c200a41226c450d1c20042802800110350c1c0b02402020450d002020412c6c450d00201f10350b20012802782120200141fc006a280200211f024020014180016a2802002203450d002020200341306c6a211e200441ca006a2119200441e0006a211c200441c0006a41186a211b200441c0006a41106a211a200441c0006a41086a2118200441b0016a41176a210720202115024002400240034020152f012c2114201528020021132015410c6a2901002111201541146a290100211d2015411c6a29010021212015290104210b201c201541246a290100370300201b2021370300201a201d370300201820113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c1d0b201541306a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20192108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41d202470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c1c0b2004280224210a20034103470d1a2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201e470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d18200a41226c450d1820042802800110350c180b0240201f450d00201f41306c450d00202010350b200128028401212020014188016a280200212202402001418c016a2802002203450d002020200341346c6a211f200441ca006a211e200441e8006a211c200441e0006a211b200441c0006a41186a211a200441c0006a41106a2118200441c0006a41086a2119200441b0016a41176a210720202115024002400240034020152f01302114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015290104210b201c2015412c6a280100360200201b2023370300201a20213703002018201d370300201920113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c190b201541346a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201e2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41f402470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c180b2004280224210a20034103470d162004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201f470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d14200a41226c450d1420042802800110350c140b02402022450d00202241346c450d00202010350b200128029001212020014194016a2802002122024020014198016a2802002203450d002020200341386c6a211f200441ca006a211e200441e8006a211c200441e0006a211b200441c0006a41186a211a200441c0006a41106a2118200441c0006a41086a2119200441b0016a41176a210720202115024002400240034020152f01342114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015290104210b201c2015412c6a290100370300201b2023370300201a20213703002018201d370300201920113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c150b201541386a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201e2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a419603470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c140b2004280224210a20034103470d122004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a3602182015201f470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d10200a41226c450d1020042802800110350c100b02402022450d00202241386c450d00202010350b200128029c012124200141a0016a28020021220240200141a4016a2802002203450d0020242003413c6c6a2120200441ca006a211f200441f0006a211c200441e8006a211b200441e0006a211a200441c0006a41186a2118200441c0006a41106a2119200441c0006a41086a211e200441b0016a41176a210720242115024002400240034020152f01382114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015412c6a29010021252015290104210b201c201541346a280100360200201b2025370300201a2023370300201820213703002019201d370300201e20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c110b2015413c6a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201f2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41b803470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c100b2004280224210a20034103470d0e2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152020470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d0c200a41226c450d0c20042802800110350c0c0b02402022450d002022413c6c450d00202410350b20012802a8012122200141ac016a28020021240240200141b0016a2802002203450d00202220034106746a2120200441ca006a211f200441f0006a211c200441e8006a211b200441e0006a211a200441c0006a41186a2118200441c0006a41106a2119200441c0006a41086a211e200441b0016a41176a210720222115024002400240034020152f013c2114201528020021132015410c6a2901002111201541146a290100211d2015411c6a2901002121201541246a29010021232015412c6a29010021252015290104210b201c201541346a290100370300201b2025370300201a2023370300201820213703002019201d370300201e20113703002004200b37034002400240200428020c2203280208200ba741ffff0371220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d07200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c0e0b201541c0006a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e201f2108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41da03470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c0d0b2004280224210a20034103470d0b2004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152020470d010c050b0b200041013b01000c020b20004181043b01000c010b20004181043b0100200428028401210a0b200a450d09200a41226c450d0920042802800110350c090b0240202441ffffff1f71450d00202210350b20012802b4012126200141b8016a2802002124200141bc016a2802002203450d022026200341c4006c6a2122200441ca006a2120200441f8006a211c200441f0006a211b200441e8006a211a200441e0006a2118200441c0006a41186a2119200441c0006a41106a211e200441c0006a41086a211f200441b0016a41176a21072026211502400240034020152f01402114201528020021132015410c6a290100210b201541146a29010021112015411c6a290100211d201541246a29010021212015412c6a2901002123201541346a290100212520152901042127201c2015413c6a280100360200201b2025370300201a2023370300201820213703002019201d370300201e2011370300201f200b3703002004202737034002400240200428020c220328020820042f0140220a4d0d0020042f0142210e200441b0016a41086a220c2003280200200a4105746a220341096a290000370300200441b0016a41106a220d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d0000210341221033220f450d05200f20033a0000200f20042903b001370001200f200e3b0120200f41096a200c290300370000200f41116a200d290300370000200f41186a200729000037000020044281808080103702242004200f3602200240200428020c220328020820042f0144220a4b0d00410221034101210a0c090b201541c4006a2115417f200e411074220e20042f014622064110746a22082008200e491b411076211020044190016a41086a22122003280200200a4105746a220341096a29000037030020044190016a41106a2205200341116a29000037030020044190016a41176a2216200341186a290000370000200420032900013703900120032d000021174101210341c200210a4102210e20202108034020072016290000370000200d2005290300370300200c201229030037030020042004290390013703b0010240200e417f6a2003470d00200441206a20034101109e012004280220210f0b200f200a6a220941606a20173a0000200941616a220320042903b0013700002007290000210b200d2903002111200c290300211d200920063b0100200341086a201d370000200341106a2011370000200341176a200b3700002004200e3602280240200a41fc03470d00410321030c030b417f2010411074220320082f010022064110746a220920092003491b41107621100240200428020c22032802082008417e6a2f010022094b0d00410221030c030b2012200328020020094105746a220341096a2900003703002005200341116a2900003703002016200341186a2900003700002004200329000137039001200e41016a210e200a41226a210a200841046a210820032d00002117200428022421030c000b0b410221030c080b2004280224210a20034103470d062004200e360288012004200a360284012004200f360280010240201041ffff037141ffff03460d00200428020c220328020820144d0d022010417f732108200c200328020020144105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420032900013703b00120032d000021090240200a200e470d0020044180016a200e4101109e01200428028001210f200428028801210e0b200f200e41226c6a220320093a0000200320042903b0013700012007290000210b200d2903002111200c290300211d200320083b0120200341096a201d370000200341116a2011370000200341186a200b370000200420042802880141016a36028801200228020820134d0d0320022802002103201220044180016a41086a280200360200200c200320134105746a220341096a290000370300200d200341116a2900003703002007200341186a290000370000200420042903800137039001200420032900013703b00120032d0000210e0240200428021822032004280214470d00200441106a20034101109801200428021821030b20042802102003412c6c6a22032004290390013702002003200e3a000c200341086a20122802003602002003410d6a20042903b001370000200341156a200c2903003700002003411d6a200d290300370000200341246a20072900003700002004200428021841016a36021820152022470d010c060b0b200041013b01000c030b20004181043b01000c020b20004181043b0100200428028401210a0c010b1045000b200a450d03200a41226c450d0320042802800110350c030b02402024450d00202441c4006c450d00202610350b200041003a0000200041046a20042903103702002000410c6a200441186a2802003602000c370b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b41002102200441106a210802402024450d00202441c4006c450d00202610350b41002109410021050c060b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210941012102200441106a21080240202441ffffff1f710d00410021050c040b20221035410021050c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210541012102200441106a210802402022450d002022413c6c450d00202410350b410121090b410021160c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100211641012102200441106a210802402022450d00202241386c450d00202010350b41012109410121050b410021170c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100211741012102200441106a210802402022450d00202241346c450d00202010350b4101210941012105410121160b410021150c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100211541012102200441106a21080240201f450d00201f41306c450d00202010350b410121094101210541012116410121170b410021070c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210741012102200441106a210802402020450d002020412c6c450d00201f10350b41012109410121054101211641012117410121150b4100210c0c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210c41012102200441106a21080240201e450d00201e41286c450d00201f10350b4101210941012105410121164101211741012115410121070b410021000c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210041012102200441106a21080240201e450d00201e41246c450d00201f10350b4101210941012105410121164101211741012115410121074101210c0b4100210d0c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210d41012102200441106a21080240201e41ffffff3f71450d00201910350b4101210941012105410121164101211741012115410121074101210c410121000b4100210f0c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100210f41012102200441106a21080240201e450d00201e411c6c450d00201910350b4101210941012105410121164101211741012115410121074101210c410121004101210d0b410021100c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100211041012102200441106a210802402019450d00201941186c450d00201810350b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f0b410021120c030b200a450d00200a41226c450d00200f10350b200041013a0000200020033a00010b4100211241012102200441106a210802402019450d00201941146c450d00201810350b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f410121100b41002114410021060c040b4100211441012102200441106a21080240201541ffffffff0071450d00201710350b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f4101211041012112410021060c030b20004181043b0100200310350c010b20004181043b01000b41012102200441106a21080240200541ffffffff0171450d00200610350b4101210941012105410121164101211741012115410121074101210c410121004101210d4101210f410121104101211241012114410121060b02402004280218220e450d0020042802102103200e412c6c210e03400240200341046a280200220a450d00200a41226c450d00200328020010350b2003412c6a2103200e41546a220e0d000b0b0240200841046a2802002203450d002003412c6c450d00200828020010350b02402006450d00200141106a2802002203450d002003410c6c450d00200128020c10350b02402014450d002001411c6a28020041ffffffff0071450d00200128021810350b02402012450d00200141286a2802002203450d00200341146c450d00200128022410350b02402010450d00200141346a2802002203450d00200341186c450d00200128023010350b0240200f450d00200141c0006a2802002203450d002003411c6c450d00200128023c10350b0240200d450d00200141cc006a28020041ffffff3f71450d00200128024810350b02402000450d00200141d8006a2802002203450d00200341246c450d00200128025410350b0240200c450d00200141e4006a2802002203450d00200341286c450d00200128026010350b02402007450d00200141f0006a2802002203450d002003412c6c450d00200128026c10350b02402015450d00200141fc006a2802002203450d00200341306c450d00200128027810350b02402017450d0020014188016a2802002203450d00200341346c450d0020012802840110350b02402016450d0020014194016a2802002203450d00200341386c450d0020012802900110350b02402005450d00200141a0016a2802002203450d002003413c6c450d00200128029c0110350b02402009450d00200141ac016a28020041ffffff1f71450d0020012802a80110350b2002450d00200141b8016a2802002203450d00200341c4006c450d0020012802b40110350b200441d0016a24000bb00401087f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041023a00100c010b200328021421042003200341106a41086a28020036022420032001360220200341c8006a200341206a10c301024002400240024020032802482205450d00200328024c2106024002400240200328022422024104490d00200341c8006a41086a280200210720032002417c6a220836022420032003280220220941046a220a3602202008450d012009280000210920032002417b6a3602242003200a41016a360220200a2d0000220a41014b0d0141002102200a0e020504050b200641ffffff3f710d010c020b200641ffffff3f71450d010b200510350b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b410221020c020b410121020b200341386a41026a200341286a41026a2d0000220a3a0000200341c8006a41026a200a3a0000200320032f002822083b01382000200936020c200020073602082000200636020420002005360200200320083b0148200041136a200a3a0000200020083b00110b200020023a00102004450d00200110350b200341e0006a24000bcb0f0a0f7f017e087f017e017f017e017f027e047f057e230041d0026b22022400200141086a2802002103200128020421042000280204210520002802002106024020002802082207200028020c2208460d0020012802002109200241f0006a410c6a210a200241f0006a410472210b200241c8006a41086a210c200241c8006a41106a210d200241c8006a41186a210e200241c8006a41206a210f0340200c20072200410c6a290200370300200d200041146a290200370300200e2000411c6a290200370300200f200041246a290200370300200220002902043703482000412c6a210720002802002210450d01200b2002290348370200200b41086a200c290300370200200b41106a200d290300370200200b41186a200e290300370200200b41206a200f29030037020020022010360270200a10c8012111200241a0016a41086a2212200a41086a290200370300200241a0016a41106a2213200a41106a290200370300200241a0016a41186a2214200a41186a2902003703002002200a2902003703a00120022802742115024002400240200228027841226c2201450d00201021000340200041206a2f01002116200241b0026a41186a2217200041186a290000370300200241b0026a41106a2218200041106a290000370300200241b0026a41086a2219200041086a290000370300200220002900003703b00220160d02200041226a21002001415e6a22010d000b0b4200211a4108211b4100210002402015450d00201541226c450d00201010354200211a0b4200211c4100211d0c010b200241386a2011420042ffff034200109808200241286a2002290338221e200241386a41086a290300221f4281807c427f108408200241186a201e201f2016ad4200108408200241d0016a41086a22202019290300370300200241d0016a41106a22212018290300370300200241d0016a41186a22222017290300370300200220022903b002221c3703f0012002201c3703d0012016200229032820117ca722236c221641ffff036e211d2002290318211c200241186a41086a29030021240240024041301033221b450d00201b201c201d417f20164180807c491b2016201d4181807c6c6a41ffff014b6aad42ffff03837c221a370320201b20022903d001370300201b41286a2024201a201c54ad7c221c370300201b41186a2022290300370300201b41106a2021290300370300201b41086a202029030037030020024281808080103702c4012002201b3602c001024020014122470d004101211d0c020b200141bc7f6a21214101211d410021160340200020166a220141c2006a2f0100212020172001413a6a2900003703002018200141326a29000037030020192001412a6a2900003703002002200141226a2900003703b0020240024020200d0020212016460d040c010b200241086a201e201f2020ad4200108408200241f0016a41086a20192903002224370300200241f0016a41106a20182903002225370300200241f0016a41186a20172903002226370300200220022903b00222273703f001201720263703002018202537030020192024370300200220273703b002201a20022903082225202020236c220141ffff036e2220417f20014180807c491b200120204181807c6c6a41ffff014b6aad42ffff03837c22247c2226201a542201201c200241086a41086a2903002024202554ad7c22257c2001ad7c221a201c54201a201c511b21010240201d20022802c401470d00200241c0016a201d410110880120022802c001211b0b427f201a20011b211c427f202620011b211a201b201d41306c6a220120022903b00237030020192903002126201829030021272017290300212820012024370320200141286a2025370300200141186a2028370300200141106a2027370300200141086a20263703002002201d41016a221d3602c80120212016460d030b201641226a21160c000b0b1045000b02402015450d00201541226c450d00201010350b20022802c40121000b024002402011201a7d22252011564200201c2011201a54ad7c7d22244200522024501b4101470d00201a20117d2224201a56201c201a201154ad7d2225201c56201a20115a1b0d01201d450d01201d41306c201b6a41706a220142002001290300221c20247d221a201a201c56200141086a2201290300221a20257d201c202454ad7d221c201a56201c201a511b22171b37030020014200201c20171b3703000c010b201d450d00201d41306c201b6a41706a2201427f2001290300221c20257c221a201a201c542217200141086a2201290300221c20247c2017ad7c221a201c54201a201c511b22171b3703002001427f201a20171b3703000b200241b0026a41186a22012014290300370300200241b0026a41106a22172013290300370300200241b0026a41086a22182012290300370300200220022903a0013703b002200920003602042009201d3602082009201b360200200920022903b00237020c200941146a20182903003702002009411c6a2017290300370200200941246a2001290300370200200341016a21032009412c6a210920072008470d000b200821070b20042003360200200820076b2200412c6d210102402000450d002001412c6c210003400240200741046a2802002201450d00200141226c450d00200728020010350b2007412c6a2107200041546a22000d000b0b02402005450d002005412c6c450d00200610350b200241d0026a24000b880303057f017e027f02400240024020002802202201450d00034020002001417f6a36022020002802042201450d0320002802082102200028020021030240200028020c220420012f0106490d00034002400240200128020022050d002002ad2106410021050c010b200341016a210320013301044220862002ad8421060b200110352006a72102200521012006422088a7220420052f01064f0d000b200521010b200441016a2107200120044105746a220541fc026a2802002104200541f8026a280200210802402003450d00200120074102746a41c8056a2802002101410021072003417f6a2205450d00034020012802c80521012005417f6a22050d000b0b2000200736020c2000200236020820002001360204200041003602002008450d0202402004450d00200441306c450d00200810350b200028022022010d000b0b200028020421010b02402001450d0020012802002105200110352005450d00034020052802002101200510352001210520010d000b0b0f0b41958dcc00412b41c08dcc00103f000b13002000411c360204200041c8f4c1003602000be60203047f017e017f024020002802002201450d0020002802082102024020002802042200450d00034020012802e40121012000417f6a22000d000b0b02402002450d0041002103024003402001450d01410021040240200320012f0106490d00034002400240200128020022000d0041002103410021000c010b200441016a210420012f010421030b2001103520002101200320002f01064f0d000b200021010b200341016a210020012003410c6c6a220341e4006a2902002105200341e0006a28020021060240024020040d00200021030c010b200120004102746a41e4016a2802002101410021032004417f6a2200450d00034020012802e40121012000417f6a22000d000b0b2006450d022002417f6a210202402005a7450d00200610350b20020d000c020b0b41958dcc00412b41c08dcc00103f000b2001450d0020012802002100200110352000450d00034020002802002101200010352001210020010d000b0b0b9a9e0106047f017e087f047e287f037e230041c0056b22002400200041b0036a41186a4200370300200041b0036a41106a22014200370300200041b0036a41086a22024200370300200042003703b00341a0e4cb00ad42808080808002841001220329000021042002200341086a290000370300200020043703b0032003103541e1b8c800ad4280808080a0018410012203290000210420004190056a41086a2205200341086a29000037030020002004370390052003103520012000290390052204370300200041f8026a41086a2002290300370300200041f8026a41106a2004370300200041f8026a41186a2005290300370300200020002903b0033703f802200041b0036a200041f8026a10fe010240024020002802b00322020d004100210620004100360298022000420137039002410121020c010b200020002902b40322043702940220002002360290022004422088a721060b024002400240200641ffffff3f712006470d0020064105742203417f4c0d000240024020030d00410121050c010b200310332205450d020b200041003602b803200020053602b003200020034105763602b403200041b0036a41002006108a0120002802b80321070240024020060d0020002802b00321080c010b2006410574210520002802b003220820074105746a2103034020032002290000370000200341186a200241186a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200341206a2103200241206a2102200541606a22050d000b200641057441606a41057620076a41016a21070b20002802b4032109200041b0036a41186a22054200370300200041b0036a41106a220a4200370300200041b0036a41086a22024200370300200042003703b00341a0e4cb00ad42808080808002841001220329000021042002200341086a290000370300200020043703b003200310354189eaca00ad4280808080f0008410012203290000210420004190056a41086a220b200341086a2900003703002000200437039005200310352001200029039005370000200141086a200b290300370000200041f8026a41086a2002290300370300200041f8026a41106a200a290300370300200041f8026a41186a2005290300370300200020002903b0033703f802200041b0036a200041f8026a10a20220002802b003210220002902b4032104200041003602b803200042013703b003200041b0036a41002004420020021b2204422088a7220341306c220a41306d108a012004a7210b2002410820021b210c20002802b803210502402003450d0020002802b00320054105746a2102200c21030340200341086a2900002104200341106a290000210d2003290000210e200241186a200341186a290000370000200241106a200d370000200241086a20043700002002200e370000200541016a2105200241206a2102200341306a2103200a41506a220a0d000b0b200020053602b8030240200b450d00200b41306c450d00200c10350b20002802b403210320002802b003210220004190026a20062005108a01200028029002200028029802220a4105746a20022005410574109d081a2000200a20056a220b360298020240200341ffffff3f71450d00200210350b200041b0036a41186a22054200370300200041b0036a41106a220a4200370300200041b0036a41086a22024200370300200042003703b00341a0e4cb00ad42808080808002841001220329000021042002200341086a290000370300200020043703b0032003103541c699c200ad428080808090018410012203290000210420004190056a41086a2206200341086a2900003703002000200437039005200310352001200029039005370000200141086a2006290300370000200041f8026a41086a2002290300370300200041f8026a41106a200a290300370300200041f8026a41186a2005290300370300200020002903b0033703f802200041b0036a200041f8026a10a20220002802b003210220002902b4032104200041003602b803200042013703b003200041b0036a41002004420020021b2204422088a7220341306c220a41306d108a012004a721062002410820021b210120002802b803210502402003450d0020002802b00320054105746a2102200121030340200341086a2900002104200341106a290000210d2003290000210e200241186a200341186a290000370000200241106a200d370000200241086a20043700002002200e370000200541016a2105200241206a2102200341306a2103200a41506a220a0d000b0b200020053602b80302402006450d00200641306c450d00200110350b20002802b403210320002802b003210220004190026a200b2005108a01200028029002200028029802220a4105746a20022005410574109d081a2000200a20056a360298020240200341ffffff3f71450d00200210350b41a0e4cb00ad4280808080800284100122022900002104200041f0046a41086a2203200241086a290000370300200020043703f004200210354190eaca00ad4280808080e0008410012202290000210420004190056a41086a2205200241086a290000370300200020043703900520021035412010332202450d01200220002903f0043700002002200029039005370010200241086a2003290300370000200241186a220a2005290300370000412010332203450d0120032002290000370000200341186a200a290000370000200341106a200241106a290000370000200341086a200241086a290000370000200041b8026a41026a2205200041b0036a41026a2d00003a0000200020002f00b0033b01b802200041d8026a41106a42a08080808004370300200041003a00f002200020023602e402200042a080808080043702dc02200020033602d802200041f3026a20052d00003a0000200020002f01b8023b00f102200020004190056a3602f402200041b0036a200041d8026a10a3020240024020002802e0032205450d00200041f0046a41186a220a200041b0036a41186a290300370300200041f0046a41106a2206200041b0036a41106a290300370300200041f0046a41086a220b200041b0036a41086a290300370300200020002903b0033703f004200041d8036a290300210d20002903d003210e20002902e403210f200041f8026a41186a4200370300200041f8026a41106a22014200370300200041f8026a41086a22024200370300200042003703f80241b6fdc600ad42808080808001841001220329000021042002200341086a290000370300200020043703f8022003103541e489c200ad4280808080d00184100122032900002104200041b0056a41086a220c200341086a290000370300200020043703b00520031035200120002903b005220437030020004190056a41086a200229030037030020004190056a41106a200437030020004190056a41186a200c290300370300200020002903f80237039005200041f8016a20004190056a412010d701200041e8016a200029038002200041f8016a41106a290300427f420010980820002802f8012102200041b0046a41186a2203200a290300370300200041b0046a41106a2006290300370300200041b0046a41086a200b290300370300200020002903f0043703b004200041e8016a41086a290300210420002903e8012110413810332211450d03200041d8016a200e200d2010420020021b2210420120104201562004420020021b22044200522004501b22021b2004420020021b109808201120002903b0043703082011200f37022c20112005360228201141106a200041b0046a41086a2202290300370300201141186a200041b0046a41106a2205290300370300201141206a2003290300370300201120002903d80137030020004281808080103702a402200020113602a0022003200041d8026a41186a2903003703002005200041d8026a41106a2903003703002002200041d8026a41086a290300370300200020002903d8023703b004200041b0036a200041b0046a10a3020240024020002802e003220b0d00410121120c010b200041b0036a41286a21134138210a41012106410121030340200041d0046a41186a220c200041b0036a41186a290300370300200041d0046a41106a2214200041b0036a41106a290300370300200041d0046a41086a2215200041b0036a41086a290300370300200020002903b0033703d0042013290300210d20002902e403210e20002903d003210f200041f8026a41186a22164200370300200041f8026a41106a22174200370300200041f8026a41086a22024200370300200042003703f80241b6fdc600ad42808080808001841001220529000021042002200541086a290000370300200020043703f8022005103541e489c200ad4280808080d00184100122052900002104200041b0056a41086a2218200541086a290000370300200020043703b00520051035200120002903b005370000200141086a201829030037000020004190056a41086a200229030037030020004190056a41106a201729030037030020004190056a41186a2016290300370300200020002903f80237039005200041c0016a20004190056a412010d701200041b0016a20002903c801200041c0016a41106a290300427f4200109808200041a0016a200f200d20002903b001420020002802c00122021b220442012004420156200041b0016a41086a290300420020021b22044200522004501b22021b2004420020021b109808200041f0046a41186a2205200c290300370300200041f0046a41106a220c2014290300370300200041f0046a41086a22142015290300370300200020002903d0043703f00420002903a0012104024020032006470d00200041a0026a20064101108b0120002802a00221110b2011200a6a22022004370300200241086a20002903f00437030020052903002104200c290300210d2014290300210f2002412c6a200e370200200241286a200b360200200241106a200f370300200241186a200d370300200241206a20043703002000200341016a22023602a802200041b0036a200041b0046a10a302024020002802e003220b450d00200a41386a210a20002802a4022106200221030c010b0b200341016a21120b024020002802b404450d0020002802b00410350b0240200041c0046a280200450d0020002802bc0410350b20002802a40221190c010b024020002802dc02450d0020002802d80210350b4108211141002112024020002802e802450d0020002802e40210350b410021190b20004190056a41086a20004190026a41086a2802003602002000200029039002370390052012ad42387e2204422088a70d002004a72202417f4c0d000240024020020d00410821030c010b200210332203450d020b2000410036028003200020033602f8022000200241386e3602fc02200041f8026a41002012108b01200028028003210102402012450d00201241386c210a20002802f802200141386c6a2102201241037441786a410376210b200041b0036a41286a2106200041b0036a41086a2105201121030340200541186a200341206a290300370300200541106a200341186a290300370300200541086a200341106a2903003703002005200341086a290300370300200020032903003703b0032006200341286a10a402200241306a200041b0036a41306a290300370300200241286a2006290300370300200241206a200041b0036a41206a290300370300200241186a200041b0036a41186a290300370300200241106a200041b0036a41106a290300370300200241086a2005290300370300200220002903b003370300200241386a2102200341386a2103200a41486a220a0d000b2001200b6a41016a21010b4108210a200041b0036a41086a22022001360200200020002903f8023703b003200041a0026a4114410020004190056a200041b0036a10ca010240024020002802a002220c0d0041012118200041013a00b403200041093a00b00341b0b4cc004100200041b0036a10d401200041f8026a2101200041b0036a21060c010b200041a0026a41146a2802002115200041a0026a41106a2802002116200041ac026a2802002101200041a0026a41086a280200210b20002802a402211442002104200041b0036a41186a4200370300200041b0036a41106a221a420037030020024200370300200042003703b00341a0e4cb00ad428080808080028410012203290000210d200041f0046a41086a2205200341086a2900003703002000200d3703f0042003103520022005290300370300200020002903f0043703b0034189eaca00ad4280808080f0008410012203290000210d20004190056a41086a2205200341086a2900003703002000200d3703900520031035201a200029039005220d370300200041f8026a41086a2002290300370300200041f8026a41106a200d370300200041f8026a41186a2005290300370300200020002903b0033703f802200041b0036a200041f8026a10a202024020002802b0032202450d00200041f8026aad4280808080800484100720002902b40321042002210a0b200041003602b803200042013703b003200041b0036a41002004422088a7220241306c220541306d108a012004a7210620002802b803211b02402002450d0020002802b003201b4105746a2102200a21030340200341086a2900002104200341106a290000210d2003290000210e200241186a200341186a290000370000200241106a200d370000200241086a20043700002002200e370000201b41016a211b200241206a2102200341306a2103200541506a22050d000b0b2000201b3602b80302402006450d00200641306c450d00200a10350b20002802b403211c20002802b003211d42002104200041b0036a41186a22054200370300200041b0036a41106a220642003703004108210a200041b0036a41086a22024200370300200042003703b00341a0e4cb00ad428080808080028410012203290000210d200041f0046a41086a2217200341086a2900003703002000200d3703f0042003103520022017290300370300200020002903f0043703b00341c699c200ad428080808090018410012203290000210d20004190056a41086a2217200341086a2900003703002000200d3703900520031035201a200029039005370000201a41086a2017290300370000200041f8026a41086a2002290300370300200041f8026a41106a2006290300370300200041f8026a41186a2005290300370300200020002903b0033703f802200041b0036a200041f8026a10a202024020002802b0032202450d00200041f8026aad4280808080800484100720002902b40321042002210a0b200041003602b803200042013703b003200041b0036a41002004422088a7220241306c220541306d108a012004a7210620002802b803211e02402002450d0020002802b003201e4105746a2102200a21030340200341086a2900002104200341106a290000210d2003290000210e200241186a200341186a290000370000200241106a200d370000200241086a20043700002002200e370000201e41016a211e200241206a2102200341306a2103200541506a22050d000b0b2000201e3602b80302402006450d00200641306c450d00200a10350b20002802b403211f20002802b0032120024002400240200b41306c2203450d00200c21020340200241286a2903002104200241206a290300210d200041f8026a41186a200241186a290000370300200041f8026a41106a200241106a290000370300200041f8026a41086a200241086a290000370300200020022900003703f802200d2004844200520d02200241306a2102200341506a22030d000b0b410121214100210b02402014450d00201441306c450d00200c10350b410021220c010b200041b0046a41086a2205200041f8026a41086a290300370300200041b0046a41106a220a200041f8026a41106a290300370300200041b0046a41186a2206200041f8026a41186a290300370300200020002903f80222043703d004200020043703b004412010332221450d03202120002903b004370000202141186a2006290300370000202141106a200a290300370000202141086a200529030037000020004281808080103702b403200020213602b0030240024020034130470d004101210b0c010b200241306a2105200c200b41306c6a220641506a21174101210b03402005210202400340200241286a2903002104200241206a290300210d200041f8026a41186a2203200241186a290000370300200041f8026a41106a2205200241106a290000370300200041f8026a41086a220a200241086a290000370300200020022900003703f802200d2004844200520d012006200241306a2202470d000c030b0b20004190056a41086a200a290300220437030020004190056a41106a2005290300220d37030020004190056a41186a2003290300220e370300200020002903f802220f37039005200041d0046a41186a220a200e370300200041d0046a41106a2218200d370300200041d0046a41086a221320043703002000200f3703d0040240200b20002802b403470d00200041b0036a200b4101108a0120002802b00321210b200241306a21052021200b4105746a220320002903d004370000200341186a200a290300370000200341106a2018290300370000200341086a20132903003700002000200b41016a220b3602b80320172002470d000b0b02402014450d00201441306c450d00200c10350b20002802b40321220b200020004190056a3602f0042000410036029805200042043703900520004190056a41002015412c6c2203412c6d109801200028029005210520002802980521022000200120036a3602bc03200020013602b803200020163602b403200020013602b0032000200041f0046a3602c003200041f8026a41086a22162002360200200020004190056a41086a22233602fc02200020052002412c6c6a3602f802200041b0036a200041f8026a10a5022000280294052124200041b0036a2021200b2000280290052225200028029805222610cc01200041b8026a41086a200041b0036a41086a2217280200360200200020002903b0033703b802200041003602d804200042083703d004200041d0046a4100200b410574220241057510880120002802d804212720002802d004212802402002450d00202120026a21292028202741306c6a2101200041f8026a41106a211541b6fdc600ad4280808080800184210f2021210b0340200b41086a2900002104200b41106a290000210d200b290000210e200041b0036a41186a2218200b41186a290000370300200041b0036a41106a2213200d370300201720043703002000200e3703b0030240024020002802b8022206450d00200b41206a210b20002802bc02210c0340200641086a210320062f01062214410574210241002105024003402002450d01200041b0036a2003412010a008220a450d04200241606a2102200541016a2105200341206a2103200a417f4a0d000b2005417f6a21140b200c450d01200c417f6a210c200620144102746a41c8056a28020021060c000b0b41b894ca0041da00419495ca001064000b200041f0046a41186a22032018290300370300200041f0046a41106a220a2013290300370300200041f0046a41086a220c2017290300370300200020002903b0033703f004200620054105746a220241f0026a290300210d200241e8026a290300210e200041f8026a41186a220542003703002015420037030020164200370300200042003703f802200f1001220229000021042016200241086a290000370300200020043703f8022002103541e489c200ad4280808080d00184100122022900002104200041b0056a41086a2206200241086a290000370300200020043703b00520021035201520002903b005370000201541086a20062903003700002023201629030037030020004190056a41106a201529030037030020004190056a41186a2005290300370300200020002903f8023703900520004188016a20004190056a412010d701200041f8006a20002903900120004188016a41106a290300427f4200109808200041e8006a2000290378420020002802880122021b220442012004420156200041f8006a41086a290300420020021b22044200522004501b22021b2004420020021b200e200d108408200141186a2003290300370300200141106a200a290300370300200141086a200c290300370300200120002903f004370300200141286a200041e8006a41086a29030037030020012000290368370320202741016a2127200141306a2101200b2029470d000b0b200020273602d8040240202241ffffff3f71450d00202110350b20002802d404212a024002402027410d2027410d491b222b0d00200041003602b803200042083703b003200041b0036a4100410010880120002802b80321290c010b202b41306c220510332202450d03200041003602b8032000202b3602b403200020023602b003200041b0036a4100202b10880120002802b00320002802b803222941306c6a2102202821030340200341086a2903002104200341106a290300210d200341186a290300210e2003290300210f200241286a200341286a290300370300200241206a200341206a290300370300200241186a200e370300200241106a200d370300200241086a20043703002002200f370300200241306a2102202941016a2129200341306a2103200541506a22050d000b200020293602b8030b20002802b403212c20002802b00321170240024020294115490d002029410176ad42307e2204422088a70d032004a7222d417f4c0d03202d1033222e450d042000410036028003200042043703f802201741506a212f201741f07e6a21304104210541002103410021312029212303402023210b410021234101210c0240200b417f6a2206450d000240024002400240024002402017200641306c6a200b41306c220220176a41a07f6a412010a0084100480d00200b417e6a2101203020026a2102410021234100210a034002402001200a470d00200b210c0c080b200a41016a210a200241306a2002412010a0082106200241506a21022006417f4a0d000b200a41016a210c200a417f73200b6a21060c010b2030200b41066c41037422146a210202400340024020064101470d00410021060c020b2006417f6a2106200241306a2002412010a008210a200241506a2102200a4100480d000b0b200b2006490d01200b20294b0d02200b20066b220c4101762201450d00202f20146a21022017200641306c6a210a0340200041b0036a41286a2214200a41286a2215290300370300200041b0036a41206a2216200a41206a2218290300370300200041b0036a41186a2213200a41186a2223290300370300200041b0036a41106a2221200a41106a2222290300370300200041b0036a41086a2232200a41086a22332903003703002000200a2903003703b003200241086a22342903002104200241106a2235290300210d200241186a2236290300210e200241206a2237290300210f200241286a22382903002110200a2002290300370300201520103703002018200f3703002023200e3703002022200d370300203320043703002038201429030037030020372016290300370300203620132903003703002035202129030037030020342032290300370300200220002903b003370300200241506a2102200a41306a210a2001417f6a22010d000b0b024020060d00200621230c050b0240200c41094d0d00200621230c050b200b20294b0d02200b20066b21012017200641306c6a21140340200b2006417f6a2223490d040240200b20236b220c4102490d002017200641306c6a22022017202341306c6a2206412010a008417f4a0d002006290300210420062002290300370300200041b0036a41286a2213200641286a220a290300370300200041b0036a41206a2221200641206a2215290300370300200041b0036a41186a2222200641186a2216290300370300200041b0036a41106a2232200641106a2218290300370300200041b0036a41086a2233200641086a22342903003703002034200241086a2903003703002018200241106a2903003703002016200241186a2903003703002015200241206a290300370300200a200241286a290300370300200020043703b003410121180240200c4103490d00200641e0006a200041b0036a412010a008417f4a0d004102210a2014210202400340200241286a200241d8006a290300370300200241206a200241d0006a290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a22152903003703002001200a460d01200241e0006a2116200a211820152102200a41016a210a2016200041b0036a412010a008417f4a0d020c000b0b200a21180b2006201841306c6a220220002903b003370300200241286a2013290300370300200241206a2021290300370300200241186a2022290300370300200241106a2032290300370300200241086a20332903003703000b2023450d05201441506a2114200141016a210120232106200c410a4f0d050c000b0b2006200b41eccfca001059000b200b202941eccfca001058000b200b2006417f6a2223490d00200b202941fccfca001058000b2023200b41fccfca001059000b0240203120002802fc02470d00200041f8026a2031410110900120002802f8022105200028028003220321310b200520314103746a2202200c360204200220233602002000200341016a22033602800320032131024020034102490d000240024003400240024002400240024020052003417f6a4103746a2202280200450d00200341037420056a220141746a28020022062002280204220a4b0d010b20034103490d022002280204210a20052003417d6a22164103746a28020421020c010b41022131200341024d0d0620052003417d6a22164103746a2802042202200a20066a4d0d0041032131200341034d0d06200141646a280200200220066a4b0d050b2002200a490d010b2003417e6a21160b02400240024002400240024002402003201641016a22184d0d00200320164d0d012005201641037422216a2202280204222220022802006a22022005201841037422326a22032802002213490d02200220294b0d032017201341306c6a22142003280204221541306c22036a210a200241306c2105200220136b220120156b220220154f0d04202e200a200241306c2203109d08220c20036a210620154101480d0520024101480d05202f20056a2103200a210203402003200241506a220a200641506a22012001200a412010a008410048220b1b2205290300370300200341286a200541286a290300370300200341206a200541206a290300370300200341186a200541186a290300370300200341106a200541106a290300370300200341086a200541086a29030037030020062001200b1b210602402014200a2002200b1b2202490d00200c21050c080b200341506a2103200c2105200c2006490d000c070b0b20182003418cd0ca001042000b20162003419cd0ca001042000b2013200241acd0ca001059000b2002202941acd0ca001058000b202e20142003109d08220c20036a2106024020154101480d00200120154c0d00201720056a210b200c21052014210203402002200a2005200a2005412010a00841004822011b2203290300370300200241286a200341286a290300370300200241206a200341206a290300370300200241186a200341186a290300370300200241106a200341106a290300370300200241086a200341086a2903003703002005200541306a20011b2105200241306a2102200a41306a200a20011b220a200b4f0d03200620054b0d000c030b0b20142102200c21050c010b200a2102200c21050b20022005200620056b220320034130706b109d081a0240200028028003220220164d0d0020002802f802220520216a2203202220156a36020420032013360200200220184d0d02200520326a2203200341086a20022018417f736a410374109e081a20002002417f6a220336028003200341014b0d010c030b0b2016200241bcd0ca001042000b20182002104e000b200321310b20230d000b024020002802fc0241ffffffff0171450d00200510350b202d4130702102202d4130490d01202d2002460d01202e10350c010b20294102490d002029417f6a2103202941306c20176a41506a21064101210503400240024002400240202920032202417f6a2203490d00202920036b22014102490d032017200241306c6a22022017200341306c6a220a412010a008417f4a0d03200a2903002104200a2002290300370300200041b0036a41286a2215200a41286a220b290300370300200041b0036a41206a2216200a41206a220c290300370300200041b0036a41186a2218200a41186a2214290300370300200041b0036a41106a2213200a41106a2223290300370300200041b0036a41086a2221200a41086a22222903003703002022200241086a2903003703002023200241106a2903003703002014200241186a290300370300200c200241206a290300370300200b200241286a290300370300200020043703b0034101210220014103490d02200a41e0006a200041b0036a412010a008417f4a0d0241002101200621020340200241286a200241d8006a290300370300200241206a200241d0006a290300370300200241186a200241c8006a290300370300200241106a200241c0006a290300370300200241086a200241386a2903003703002002200241306a220c29030037030020052001220b460d02200b417f6a2101200241e0006a2114200c21022014200041b0036a412010a008417f4a0d020c000b0b2003202941dccfca001059000b4102200b6b21020b200a200241306c6a220220002903b003370300200241286a2015290300370300200241206a2016290300370300200241186a2018290300370300200241106a2013290300370300200241086a20212903003703000b200641506a21062005417f6a210520030d000b0b200041003602b803200042083703b003200041b0036a4100202941306c221341306e2223109a0120002802b803210b0240024020130d0020002802b00321010c010b20002802b0032201200b4104746a21022013210520172103034020022003360200200241086a4200370300200241106a2102200b41016a210b200341306a2103200541506a22050d000b0b2011201241386c6a211520002802b403212102400240024020120d002011210c0c010b200b41014b2118201121020340200241386a210c20022802282216450d0102402002412c6a290200220e422088a74105742203450d002002290300210d024020180d000240200b0e020200020b2001280200210542102104201621020340024020052002412010a0080d0020012001290308200d200442ffffffff0f837e7c3703080b200241206a21022004427f7c2104200341606a22030d000c020b0b201620036a21144200210420162106024003400240200b450d0041002102200b210303402003410176220520026a220a20022001200a4104746a2802002006412010a0084101481b2102200320056b220341014b0d000b200120024104746a22032802002006412010a0080d00200b20024d0d0220032003290308200d421020047d42ffffffff0f837e7c3703080b200442017c21042014200641206a2206460d020c000b0b2002200b41d099c2001042000b0240200e42ffffff3f83500d00201610350b200c2102200c2015470d000c020b0b2015200c460d000340200c41386a21020240200c412c6a28020041ffffff3f71450d00200c41286a28020010350b2002210c20152002470d000b0b02402019450d00201941386c450d00201110350b201720136a210c024002400240200b450d0020012802002203450d000240200b4101460d002001200b4104746a2106200141106a210220012903082104034020022802002205450d012004200241086a290300220d2004200d56220a1b210420032005200a1b2103200241106a22022006470d000b0b0240202141ffffffff0071450d00200110350b20030d01410021160c020b41002116202141ffffffff0071450d01200110350c010b200041d8026a41186a200341186a290000370300200041d8026a41106a200341106a290000370300200041d8026a41086a200341086a290000370300200020032900003703d802410121160b200041003602b803200042013703b003200041b0036a41002023108a0120002802b8032105024002402017200c4722310d0020002802b00321340c010b202941306c210a20002802b003223420054105746a210220172103034020022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200541016a2105200241206a2102200341306a2103200a41506a220a0d000b0b20002802b403212f200041003602b803200042083703b003200041b0036a41002028202741306c22026a22032028202b41306c220a6a6b41306e10880120002802b8032115024002402027410d4b0d0020002802b00321360c010b200a20026b210a20002802b0032236201541306c6a2102200341506a21030340200341086a2903002104200341106a290300210d200341186a290300210e2003290300210f200241286a200341286a290300370300200241206a200341206a290300370300200241186a200e370300200241106a200d370300200241086a20043703002002200f370300200241306a2102200341506a2103201541016a2115200a41306a220a0d000b0b20002802b4032137200041003602b803200042013703b003200041b0036a41002015108a0120002802b803210a02400240201541306c22060d0020002802b00321210c010b20002802b0032221200a4105746a210220362103034020022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200a41016a210a200241206a2102200341306a2103200641506a22060d000b0b20002802b4032127200041b0036a20342005201d201b10a602200041c4036a280200220b41ffffff3f71200b470d01200b4105742201417f4c0d01200041c0036a280200211b20002802bc03212220002802b403213020002802b003212b0240024020010d00410121020c010b200110332202450d030b200041003602b803200020023602b0032000200141057622183602b403200041b0036a4100200b108a0120002802b803210c02400240200b0d0020002802b00321140c010b200b410574210620002802b0032214200c4105746a210220222103034020022003290000370000200241186a200341186a290000370000200241106a200341106a290000370000200241086a200341086a290000370000200241206a2102200341206a2103200641606a22060d000b200b41057441606a410576200c6a41016a210c0b20002802b40321022014200c2034200510a7020240200241ffffff3f71450d00201410350b200041b0046a41186a2202200041d8026a41186a290300370300200041b0046a41106a2203200041d8026a41106a290300370300200041b0046a41086a2205200041d8026a41086a290300370300200020002903d8023703b0040240024020160d00200041f8026a41186a4200370300200041f8026a41106a22054200370300200041f8026a41086a22024200370300200042003703f80241dad5ca00ad4280808080b002841001220329000021042002200341086a290000370300200020043703f80220031035419cdfca00ad4280808080d00084100122032900002104200041b0056a41086a2206200341086a290000370300200020043703b00520031035200520002903b0052204370300200041f0046a41086a2002290300370300200041f0046a41106a2004370300200041f0046a41186a2006290300370300200020002903f8023703f004200041f0046aad428080808080048410070c010b200041b0036a41186a2002290300370300200041b0036a41106a2003290300370300200041b0036a41086a2005290300370300200020002903b0043703b00320004190056a41186a420037030020004190056a41106a2205420037030020004190056a41086a22024200370300200042003703900541dad5ca00ad4280808080b002841001220329000021042002200341086a290000370300200020043703900520031035419cdfca00ad4280808080d00084100122032900002104200041f8026a41086a2206200341086a290000370300200020043703f80220031035200520002903f8022204370300200041d0046a41086a2002290300370300200041d0046a41106a2004370300200041d0046a41186a200629030037030020002000290390053703d004412010332202450d03200220002903b003370000200241186a200041b0036a41186a290300370000200241106a200041b0036a41106a290300370000200241086a200041b0036a41086a290300370000200041d0046aad42808080808004842002ad42808080808004841002200210350b0240024020010d00410121030c010b200110332203450d030b41002102200041003602b803200020183602b403200020033602b003200041b0036a4100200b108a0120002802b803210c0240200b450d00200b410574210620002802b003200c4105746a21010340200120026a2203202220026a2205290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002006200241206a2202470d000b200b41057441606a410576200c6a41016a210c0b200041b8046a200c360200200020002903b0033703b004200041b0036a2021200a2020201e10a602200041c4036a2802002103200041c0036a280200210520002802bc032102024020002802b40341ffffff3f71450d0020002802b00310350b200041b0046a20002802b804200341057422034105752206108a0120002802b004222e20002802b80422014105746a20022003109d081a2000200120066a22383602b8040240200541ffffff3f71450d00200210350b02402007450d00200820074105746a2118200a4105742113200041b0036aad42808080808002842139200041f8026aad4280808080800484213a200041b0036a41106a2101200041b9036a2132202941014b2123200041e8036a21352008210b0340200b41086a2900002104200b41106a290000210d200b290000210e20004190056a41186a220c200b41186a29000037030020004190056a41106a2214200d37030020004190056a41086a221620043703002000200e37039005200b41206a210b410021030240024002400240024020230d0020290e020201020b202921050340200041b0036a41186a20172005410176220a20036a220641306c6a220241186a2900003703002001200241106a290000370300200041b0036a41086a200241086a290000370300200020022900003703b00320062003200041b0036a20004190056a412010a0084101481b21032005200a6b220541014b0d000b0b200041b0036a41186a2017200341306c6a220241186a2900003703002001200241106a290000370300200041b0036a41086a200241086a290000370300200020022900003703b0032013210320212102200041b0036a20004190056a412010a0080d010c020b20132103202121020b024003402003450d0120004190056a2002460d02200341606a2103200220004190056a412010a0082105200241206a210220050d000c020b0b200042003703f80420004280809aa6eaafe3013703f004200020004190056a3602d004200041f8026a20004190056a200041f0046a200041d0046a10a802200041f8026a41206a290300210d2000290390032104024020002903f8024201520d00200029038003210e2035200041f8026a41106a2903003703002032200029039005370000203241086a2016290300370000203241106a2014290300370000203241186a200c2903003700002000200e3703e003200041003a00b803200041033a00b00341b0b4cc004100200041b0036a10d4010b200020043703d0042000200d3703d804024002402004200d844200520d00200041b0036a41186a2205420037030020014200370300200041b0036a41086a22034200370300200042003703b00341b6fdc600ad428080808080018422041001220a290000210d200041f0046a41086a2202200a41086a2900003703002000200d3703f004200a103520032002290300370300200020002903f0043703b00341e489c200ad4280808080d00184220d1001220a290000210e2002200a41086a2900003703002000200e3703f004200a1035200120002903f004370000200141086a220c2002290300370000200041f8026a41086a22142003290300370300200041f8026a41106a22162001290300370300200041f8026a41186a22332005290300370300200020002903b0033703f802200041386a200041f8026a412010d701200041386a41106a290300210e2000290340210f2000280238210a200542003703002001420037030020034200370300200042003703b00320041001220629000021042002200641086a290000370300200020043703f0042006103520032002290300370300200020002903f0043703b003200d1001220629000021042002200641086a290000370300200020043703f00420061035200120002903f004370000200c2002290300370000201420032903003703002016200129030037030020332005290300370300200020002903b0033703f8022000200e4200200a1b3703b8032000200f4200200a1b3703b0030c010b200020043703d0042000200d3703d804200041b0036a41186a2205420037030020014200370300200041b0036a41086a22034200370300200042003703b00341b6fdc600ad4280808080800184220e1001220a290000210f200041f0046a41086a2202200a41086a2900003703002000200f3703f004200a103520032002290300370300200020002903f0043703b00341e489c200ad4280808080d00184220f1001220a29000021102002200a41086a290000370300200020103703f004200a1035200120002903f004370000200141086a220c2002290300370000200041f8026a41086a22142003290300370300200041f8026a41106a22162001290300370300200041f8026a41186a22332005290300370300200020002903b0033703f802200041d0006a200041f8026a412010d701200041d0006a41106a29030021102000290358213b2000280250210a200542003703002001420037030020034200370300200042003703b003200e10012206290000210e2002200641086a2900003703002000200e3703f0042006103520032002290300370300200020002903f0043703b003200f10012206290000210e2002200641086a2900003703002000200e3703f00420061035200120002903f004370000200c2002290300370000201420032903003703002016200129030037030020332005290300370300200020002903b0033703f8022000420020104200200a1b220e200d7d203b4200200a1b220d200454ad7d220f200d20047d2204200d56200f200e56200f200e511b22021b3703b80320004200200420021b3703b0030b203a203910020b200b2018470d000b0b0240200941ffffff3f71450d00200810350b20002802b404213302402038450d0020384105742101200041b0036aad42808080808002842139200041f8026aad4280808080800484213a200041b0036a41106a2102200041b9036a210b200041e8036a2132202e21030340200341086a2900002104200341106a290000210d2003290000210e20004190056a41186a2205200341186a29000037030020004190056a41106a220a200d37030020004190056a41086a220620043703002000200e37039005200042003703f80420004280809aa6eaafe3013703f004200020004190056a3602d004200041f8026a20004190056a200041f0046a200041d0046a10a802200041f8026a41206a290300210d2000290390032104024020002903f8024201520d00200029038003210e2032200041f8026a41106a290300370300200b200029039005370000200b41086a2006290300370000200b41106a200a290300370000200b41186a20052903003700002000200e3703e003200041003a00b803200041033a00b00341b0b4cc004100200041b0036a10d4010b200020043703d0042000200d3703d804024002402004200d844200520d00200041b0036a41186a2206420037030020024200370300200041b0036a41086a220a4200370300200042003703b00341b6fdc600ad428080808080018422041001220c290000210d200041f0046a41086a2205200c41086a2900003703002000200d3703f004200c1035200a2005290300370300200020002903f0043703b00341e489c200ad4280808080d00184220d1001220c290000210e2005200c41086a2900003703002000200e3703f004200c1035200220002903f004370000200241086a22162005290300370000200041f8026a41086a2218200a290300370300200041f8026a41106a22132002290300370300200041f8026a41186a22232006290300370300200020002903b0033703f802200041086a200041f8026a412010d701200041086a41106a290300210e2000290310210f2000280208210c2006420037030020024200370300200a4200370300200042003703b00320041001221429000021042005201441086a290000370300200020043703f00420141035200a2005290300370300200020002903f0043703b003200d1001221429000021042005201441086a290000370300200020043703f00420141035200220002903f004370000201620052903003700002018200a2903003703002013200229030037030020232006290300370300200020002903b0033703f8022000200e4200200c1b3703b8032000200f4200200c1b3703b0030c010b200020043703d0042000200d3703d804200041b0036a41186a2206420037030020024200370300200041b0036a41086a220a4200370300200042003703b00341b6fdc600ad4280808080800184220e1001220c290000210f200041f0046a41086a2205200c41086a2900003703002000200f3703f004200c1035200a2005290300370300200020002903f0043703b00341e489c200ad4280808080d00184220f1001220c29000021102005200c41086a290000370300200020103703f004200c1035200220002903f004370000200241086a22162005290300370000200041f8026a41086a2218200a290300370300200041f8026a41106a22132002290300370300200041f8026a41186a22232006290300370300200020002903b0033703f802200041206a200041f8026a412010d701200041206a41106a29030021102000290328213b2000280220210c2006420037030020024200370300200a4200370300200042003703b003200e10012214290000210e2005201441086a2900003703002000200e3703f00420141035200a2005290300370300200020002903f0043703b003200f10012214290000210e2005201441086a2900003703002000200e3703f00420141035200220002903f004370000201620052903003700002018200a2903003703002013200229030037030020232006290300370300200020002903b0033703f8022000420020104200200c1b220e200d7d203b4200200c1b220d200454ad7d220f200d20047d2204200d56200f200e56200f200e511b22051b3703b80320004200200420051b3703b0030b203a20391002200341206a2103200141606a22010d000b0b0240203341ffffff3f71450d00202e10350b200041b0036a41186a22034200370300200041b0036a41106a22054200370300200041b0036a41086a22024200370300200042003703b00341a0e4cb00ad4280808080800284220410012206290000210d200041f0046a41086a220a200641086a2900003703002000200d3703f004200610352002200a290300370300200020002903f0043703b0034189eaca00ad4280808080f0008410012201290000210d20004190056a41086a2206200141086a2900003703002000200d3703900520011035201a200029039005370000201a41086a220b2006290300370000200041f8026a41086a220c2002290300370300200041f8026a41106a22142005290300370300200041f8026a41186a22162003290300370300200020002903b0033703f802200041203602b4032000200041f8026a3602b00320172029200041b0036a10a902200342003703002005420037030020024200370300200042003703b0032004100122012900002104200a200141086a290000370300200020043703f004200110352002200a290300370300200020002903f0043703b00341c699c200ad42808080809001841001220a29000021042006200a41086a2900003703002000200437039005200a1035201a200029039005370000200b2006290300370000200c20022903003703002014200529030037030020162003290300370300200020002903b0033703f802200041203602b4032000200041f8026a3602b00320362015200041b0036a10a9022029ad42307e2204422088a70d012004a72202417f4c0d010240024020020d00410821030c010b200210332203450d030b200041003602b803200020033602b0032000200241306e3602b403200041b0036a4100202910880120002802b80321050240024020310d0020002802b00321010c010b202941306c210a20002802b0032201200541306c6a2102201721030340200341086a2903002104200341106a290300210d200341186a290300210e2003290300210f200241286a200341286a290300370300200241206a200341206a290300370300200241186a200e370300200241106a200d370300200241086a20043703002002200f370300200241306a2102200541016a2105200341306a2103200a41506a220a0d000b0b2005ad42307e2204422088a70d012004a72202417f4c0d0120002802b40321060240024020020d00410821030c010b200210332203450d030b200041003602b803200020033602b0032000200241306e3602b403200041b0036a4100200510880120002802b803210a0240200541306c2205450d0020002802b003200a41306c6a2102200121030340200341086a2903002104200341106a290300210d200341186a290300210e2003290300210f200241286a200341286a290300370300200241206a200341206a290300370300200241186a200e370300200241106a200d370300200241086a20043703002002200f370300200241306a2102200a41016a210a200341306a2103200541506a22050d000b0b20004183036a200a360000200020002903b0033700fb02200041bc036a200041ff026a290000370000200041003a00b403200041093a00b003200020002900f8023700b50341b0b4cc004100200041b0036a10d40102402006450d00200641306c450d00200110350b0240201b41ffffff3f71450d00202210350b0240203041ffffff3f71450d00202b10350b0240202741ffffff3f71450d00202110350b02402037450d00203741306c450d00203610350b0240202f41ffffff3f71450d00203410350b0240202c450d00202c41306c450d00201710350b0240202a450d00202a41306c450d00202810350b0240024020002802b802220a0d0041002106200041c4036a4100360200200041003602b4030c010b20002802c00221060240024020002802bc0222030d00200a21020c010b20032102200a2105034020052802c80521052002417f6a22020d000b200a21020340200220022f01064102746a41c8056a28020021022003417f6a22030d000b2005210a0b200041cc036a20022f0106360200200041c8036a4100360200200041c4036a2002360200200041003602c003200042003703b8032000200a3602b403200041003602b0030b200020063602d003200041b0036a109e0202402026450d002026412c6c21032025210203400240200241046a2802002205450d00200541306c450d00200228020010350b2002412c6a2102200341546a22030d000b0b02402024450d002024412c6c450d00202510350b0240201f41ffffff3f71450d00202010350b41002118200041b0036a2106200041f8026a2101201c41ffffff3f71450d00201d10350b200041b0036a41186a220b4200370300200041b0036a41106a22024200370300200041b0036a41086a22034200370300200042003703b00341a0e4cb00ad428080808080028422041001220a290000210d200041f0046a41086a2205200a41086a2900003703002000200d3703f004200a1035200641086a220c2005290300370000200620002903f00437000041e1b8c800ad4280808080a0018410012214290000210d20004190056a41086a220a201441086a2900003703002000200d37039005201410352002200029039005220d370300200041f8026a41086a22142003290300370300200041f8026a41106a2215200d370300200041f8026a41186a2216200a290300370300200020002903b0033703f8022001ad42808080808004841007200b42003703002002420037030020034200370300200042003703b003200410012217290000210d2005201741086a2900003703002000200d3703f00420171035200c2005290300370000200620002903f00437000041b0e4cb00ad4280808080e00184220d10012217290000210e200a201741086a2900003703002000200e37039005201710352002200029039005220e370300201420032903003703002015200e3703002016200a290300370300200020002903b0033703f80220002001412010c0012000280200211720002802042113200b42003703002002420037030020034200370300200042003703b00320041001220129000021042005200141086a290000370300200020043703f00420011035200c2005290300370000200620002903f004370000200d100122052900002104200a200541086a2900003703002000200437039005200510352002200029039005220437030020142003290300370300201520043703002016200a290300370300200020002903b0033703f8022000201341016a410120171b3602b003200041f8026aad4280808080800484200041b0036aad4280808080c0008410020240024020002802a00222020d0020180d010c040b2018450d03024020002802a4022203450d00200341306c450d00200210350b200041ac026a280200210a0240200041b4026a2802002202450d002002412c6c2103200a210203400240200241046a2802002205450d00200541246c450d00200228020010350b2002412c6a2102200341546a22030d000b0b200041b0026a2802002202450d002002412c6c450d00200a10350b02402012450d00201241386c21032011412c6a210203400240200228020041ffffff3f71450d002002417c6a28020010350b200241386a2102200341486a22030d000b0b02402019450d00201941386c450d00201110350b200941ffffff3f71450d02200810350c020b1044000b1045000b200041c0056a24000bbf0201027f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022010d00200041003602000c010b200228021421032002200241106a41086a28020036022420022001360220200241c8006a200241206a10aa020240024020022802480d0020024100360230200242013703282002410936023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b200041003602000c010b20002002290348370200200041086a200241c8006a41086a2802003602000b2003450d00200110350b200241e0006a24000ba00605057f017e037f027e027f230041f0006b22022400200241286a200141146a350200422086200135020c84102710c2010240024020022802282203450d00200141086a2104200141106a210503400240024020042802002206200229022c2207422088a722084b0d00200128020022092003460d0120092003200610a008450d010b2007a7450d02200310350c020b02402005280200450d00200128020c10350b2001200336020c20052007370200200241086a2003200810cc02024002402002280218220a450d00200241086a41086a29030021072002290308210b2002290320210c200228021c210d024020012d0018450d002001350214422086200135020c8410070b2001280214220820042802002203490d0102400240200820036b22084108490d00200841786a2106200128020c20036a41086a21090c010b410021060240410028028cb54c0d0041b0b4cc0021090c010b410021064100280298b54c21034100280294b54c21084100280290b54c210e200241e500360268200242b48080801037036020024187a1c00036025c20024213370254200241f4a0c0003602502002420037034841b0b4cc002109200241b0b4cc0036024420024201370338200241eca0c00036023420024113360230200241f4a0c00036022c20024101360228200841aca2c000200e410246220e1b200241286a200341c4a2c000200e1b2802101102000b41002103200241003a00480240034020062003460d01200241286a20036a200920036a2d00003a00002002200341016a22083a00482008210320084120470d000b20002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a290300370000200041286a20073703002000200b370320200041386a200c3703002000200d3602342000200a3602300c050b0240200341ff0171450d00200241003a00480b200d41ffffff3f71450d00200a10350b200241286a2001350214422086200135020c84102710c201200228022822030d010c020b0b2003200841889aca001059000b200041003602300b200241f0006a24000ba10201087f230041106b22022400024002402001280208220341ffffff3f712003470d0020034105742204417f4c0d00200128020021050240024020040d00410121060c010b200410332206450d020b41002101200241003602082002200636020020022004410576360204200241002003108a012002280208210702402003450d0020034105742108200228020020074105746a21090340200920016a2204200520016a2206290000370000200441186a200641186a290000370000200441106a200641106a290000370000200441086a200641086a2900003700002008200141206a2201470d000b200341057441606a41057620076a41016a21070b20002002290300370200200041086a2007360200200241106a24000f0b1044000b1045000b8509050f7f027e017f017e027f23004180026b22022400200141086a2802002103200128020421042000280204210520002802002106024020002802082207200028020c2208460d002001280200210020024190016a410c6a2109200241c0016a41106a210120024190016a410472210a200241386a41206a210b200241386a41186a210c200241386a41086a210d024003402007280200210e200b200741246a290200370300200c2007411c6a290200370300200241386a41106a220f200741146a290200370300200d2007410c6a2902003703002002200741046a290200370338200e450d01200a2002290338370200200a41086a200d290300370200200a41106a200f290300370200200a41186a200c290300370200200a41206a200b2903003702002002200e36029001200241e0006a200910e502200241c0016a20022802602210200228026810cc02200241c0016a41086a220e290300211120022802d001210f20022903c001211220022802d401211302402002280264450d00201010350b20114200200f1b211420124200200f1b21120240200f450d00201341ffffff3f71450d00200f4101200f1b10350b200241c0016a41186a220f420037030020014200370300200e4200370300200242003703c00141b6fdc600ad4280808080800184100122132900002111200e201341086a290000370300200220113703c0012013103541e489c200ad4280808080d00184100122132900002111200241f0016a41086a2210201341086a290000370300200220113703f00120131035200120022903f001370000200141086a2010290300370000200241e0006a41086a2213200e290300370300200241e0006a41106a22102001290300370300200241e0006a41186a2215200f290300370300200220022903c001370360200241206a200241e0006a412010d701200241106a2002290328200241206a41106a290300427f420010980820022012201420022903104200200228022022161b221142012011420156200241106a41086a290300420020161b22114200522011501b22161b2011420020161b109808200241c0016a41286a20024190016a41286a280200360200200241c0016a41206a20024190016a41206a290300370300200f20024190016a41186a290300370300200120024190016a41106a290300370300200e20024190016a41086a29030037030020022002290390013703c001200241e0006a200241c0016a2002290300420010cb01200041286a200241e0006a41286a280200360200200041206a200241e0006a41206a290300370200200041186a2015290300370200200041106a2010290300370200200041086a201329030037020020002002290360370200200341016a21032000412c6a21002007412c6a22072008470d000b200821070c010b2007412c6a21070b20042003360200200820076b2200412c6d210102402000450d002001412c6c210003400240200741046a2802002201450d00200141246c450d00200728020010350b2007412c6a2107200041546a22000d000b0b02402005450d002005412c6c450d00200610350b20024180026a24000bd907010f7f230041c0006b22052400200541003602082005420137030020054100360218200542013703102003410020041b21062001410020021b2107200341206a200320041b2108200141206a200120021b2109200120024105746a210a200320044105746a210b4101210c4100210d4101210e4101210f410021100340200e211120102102200821032006210102400340024020010d004100210620070d02200020052903003702002000200529031037020c200041086a200541086a280200360200200041146a200541106a41086a280200360200200541c0006a24000f0b024020070d00200541206a41186a2203200641186a290000370300200541206a41106a2202200641106a290000370300200541206a41086a2207200641086a29000037030020052006290000370320024020102005280214470d00200541106a20104101108a012005280210210e200528021821100b200e20104105746a22012005290320370000200141186a2003290300370000200141106a2002290300370000200141086a20072903003700002005201041016a221036021841002107410020082008200b4622011b2106200e210f2008200841206a20011b21080c030b0240024020012007460d0020012007412010a00822040d010b2003200341206a2003200b4622011b2108410020092009200a4622041b21074100200320011b21062011210e200221102009200941206a20041b21090c030b02402004417f4c0d00200121060c020b200541206a41186a2204200141186a290000370300200541206a41106a2212200141106a290000370300200541206a41086a2213200141086a29000037030020052001290000370320024020022005280214470d00200541106a20024101108a012005280218210220052802102211210f0b200f20024105746a22012005290320370000200141186a2004290300370000200141106a2012290300370000200141086a20132903003700002005200241016a2202360218410020032003200b4622041b21012003200341206a20041b21030c000b0b200541206a41186a2204200741186a290000370300200541206a41106a2212200741106a290000370300200541206a41086a2213200741086a290000370300200520072900003703200240200d2005280204470d002005200d4101108a012005280200210c2005280208210d0b200c200d4105746a22012005290320370000200141186a2004290300370000200141106a2012290300370000200141086a20132903003700002005200d41016a220d360208410020092009200a4622011b21072011210e200221102009200941206a20011b2109200321080c000b0be80f06087f017e047f017e057f077e230022042105200441a0016b41607122042400024002400240200141ffffff3f712001470d0020014105742206417f4c0d000240024020060d00410121070c010b200610332207450d020b41002108200441003602282004200736022020042006410576360224200441206a41002001108a012004280228210902402001450d002001410574210a200428022020094105746a210b0340200b20086a2206200020086a2207290000370000200641186a200741186a290000370000200641106a200741106a290000370000200641086a200741086a290000370000200a200841206a2208470d000b200141057441606a41057620096a41016a21090b200441086a200936020020042004290320220c370300200ca72009410041202009676b10c105200441206a41186a22014200370300200441206a41106a220d4200370300200441206a41086a220e42003703002004420037032041dad5ca00ad4280808080b0028410012208290000210c200e200841086a2900003703002004200c370320200810354180eaca00ad428080808090018410012208290000210c200441e8006a41086a220f200841086a2900003703002004200c37036820081035200d2004290368220c37030020044180016a41086a200e29030037030020044180016a41106a200c37030020044180016a41186a200f2903003703002004200429032037038001200441206a20044180016a412010b50220042802202208410120081b21102004290224420020081b2211422088a72208450d022008410574210920044180016a410c722112200441206a410c6a2100200441206a4114722113200441206a41087221142010210803402001200841186a290000370300200d200841106a290000370300200e200841086a29000037030020042008290000370320200441106a200441206a108c07200441206a2004280210220b2004280218221510de02200f200041086a290200370300200441e8006a41106a220a200041106a2802003602002004200029020037036820042802402106024020042802282207450d002004290320210c20122004290368370200201241086a200f290300370200201241106a200a2802003602002004200c37038001200621160b200420073602880120044100360228200429039801211720042004290338221837039801200429039001211920042004290330221a37039001200429038001211b20042004290320221c37038001200429038801210c20042004290328221d37038801201da7210702400240200ca7220a0d00201d210c201a211920182117201621060c010b2004201b3703202004200c37032820042019370330200420173703382004200a2019a74105746a3602742004200a3602702004200c422088a736026c2004200a36026820042004360278200441d8006a200441e8006a10ca05201441086a200441d8006a41086a22162802003602002014200429035837020020042019422088a7220a2017422088a74105746a3602742004200a36027020042017a736026c2004200a36026820042004360278200441d8006a200441e8006a10ca05201341086a2016280200360200201320042903583702002004290328210c2004290320211c200429033821172004290330211902402007450d002018a7210a0240201d422088a741ffffff3f71450d00200710350b200a41ffffff3f71450d00201a422088a710350b2004201c370380012004200c3703880120042019370390012004201737039801200ca721070b2004200c37032820042019370330200120173703002004201c37032020042006360240200ca7210a0240024020070d002015ad422086200bad8410070c010b2004201536026c2004200b360268200441206a200441e8006a108b070b0240200a450d002017a721070240200c422088a741ffffff3f71450d00200a10350b200741ffffff3f71450d002019422088a710350b02402004280214450d00200b10350b200841206a210820062116200941606a22090d000c030b0b1044000b1045000b0240201142ffffff3f83500d00201010350b200441206a41186a220a4200370300200441206a41106a22074200370300200441206a41086a220642003703002004420037032041dad5ca00ad4280808080b00284220c10012200290000211c200441e8006a41086a2208200041086a2900003703002004201c3703682000103520062008290300370300200420042903683703204189eaca00ad4280808080f0008410012200290000211c2008200041086a2900003703002004201c3703682000103520072004290368221c37030020044180016a41086a220b200629030037030020044180016a41106a2201201c37030020044180016a41186a22092008290300370300200420042903203703800120044120360224200420044180016a36022020022003200441206a10a806200a4200370300200742003703002006420037030020044200370320200c10012200290000210c2008200041086a2900003703002004200c370368200010352006200829030037030020042004290368370320419cdfca00ad4280808080d0008410012200290000210c2008200041086a2900003703002004200c3703682000103520072004290368220c370300200b20062903003703002001200c37030020092008290300370300200420042903203703800120044180016aad428080808080048410070240200428020441ffffff3f71450d00200428020010350b200524000b9d0f07037f027e027f0a7e037f067e047f230041d0036b2204240020032802002105200441206a2001108e02200441a0016a2004280220220320042802282206108f0220042903a001210742002108200442003703a001200441e8016a280200210920042d00ec01210a0240024020074201510d00200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441c0006a4200370300200441386a4200370300200442003703304200210b4200210c4200210d4200210e0c010b200441d8016a290300210f200441a0016a41306a2903002110200441a0016a41206a290300210b200441a0016a41186a2903002108200441e0016a290300210e20042903b001210d20042903a801210c200441306a41206a200441a0016a41286a290300370300200441306a41286a2010370300200441306a41306a200f370300200441c0006a20083703002004200b3703482004200c3703302004200d3703380b200441306a41186a200b200241086a2903002210200b20082002290300221156200b201056200b2010511b22021b22127d20082011200820021b220f54ad7d221337030020042008200f7d2214370340200441e8006a41186a2013370300200441e8006a41206a2215200441306a41206a290300370300200441e8006a41286a2216200441306a41286a290300370300200441e8006a41306a2217200441306a41306a290300370300200420143703782004200c3703682004200d370370427f200d200b7c200c20087c220b200c542202ad7c220820022008200d542008200d511b22021b2118427f200b20021b211902400240427f200c20147c22082008200c542202200d20137c2002ad7c2208200d542008200d511b22021b220b428080e983b1de16544100427f200820021b2213501b0d00200441f8006a290300210b20172903002113201629030021142015290300211a2004290370211b2004290368211c42012108200429038001211d0c010b02400240200b20138450450d00420021080c010b42002108200441a0026a41186a221e4200370300200441a0026a41106a22164200370300200441a0026a41086a22154200370300200442003703a00241b6fdc600ad4280808080800184221410012217290000211a200441c0036a41086a2202201741086a2900003703002004201a3703c0032017103520152002290300370300200420042903c0033703a00241e489c200ad4280808080d00184221a10012217290000211b2002201741086a2900003703002004201b3703c00320171035201620042903c003221b370300200441a0036a41086a221f2015290300370300200441a0036a41106a2220201b370300200441a0036a41186a22212002290300370300200420042903a0023703a003200441086a200441a0036a412010d701200441086a41106a290300211b2004290310211c20042802082117201e42003703002016420037030020154200370300200442003703a00220141001221e29000021142002201e41086a290000370300200420143703c003201e103520152002290300370300200420042903c0033703a002201a1001221e29000021142002201e41086a290000370300200420143703c003201e1035201620042903c0032214370300201f20152903003703002020201437030020212002290300370300200420042903a0023703a00320044200201b420020171b221420137d201c420020171b221a200b54ad7d221b201a200b7d221c201a56201b201456201b2014511b22021b3703a80220044200201c20021b3703a002200441a0036aad4280808080800484200441a0026aad42808080808002841002200441d8026a2013370300200441d0026a200b370300201541013a0000200441a9026a2005290000370000200441b1026a200541086a290000370000200441b9026a200541106a290000370000200441c1026a200541186a290000370000200441033a00a00241b0b4cc004100200441a0026a10d4010b0b2011200f54210220192018842118200441c8016a201a370300200441d0016a2014370300200441b0016a201b370300200441d8016a2013370300200441b8016a200b3703002004201d3703c0012004200e3703e0012004201c3703a8012004200a4100200742015122051b3a00ec0120042009410020051b3602e801200420084201512205ad3703a0010240024020050d002006ad4220862003ad8410070c010b200420063602a402200420033602a002200441a8016a200441a0026a10e7020b201020127d210b2002ad2110201850210202402004280224450d00200310350b200b20107d210b2002ad21102011200f7d21112008420152210202400240024020074201510d0020020d0041032103200441a0026a21020c010b20074201522002410173720d0141042103200441a0016a21020b200241086a20033a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b2000200f3703182000200c37030820002010370300200041306a200b370300200041286a2011370300200041206a2012370300200041106a200d370300200441d0036a24000bac0402067f027e230041106b220324000240024002400240200141306c4104722204417f4c0d00200410332205450d012003410036020820032004360204200320053602002001200310770240024020010d002003280208210120032802042105200328020021060c010b2000200141306c6a2107200328020021062003280204210520032802082101034002400240200520016b4120490d00200141206a2104200521080c010b200141206a22042001490d05200541017422082004200820044b1b22084100480d05024020050d00024020080d00410121060c020b2008103322060d010c070b20052008460d0020062005200810372206450d060b200620016a22012000290000370000200141186a200041186a290000370000200141106a200041106a290000370000200141086a200041086a290000370000200041286a2903002109200041206a290300210a02400240200820046b4110490d00200441106a2101200821050c010b200441106a22012004490d05200841017422052001200520014b1b22054100480d05024020080d00024020050d00410121060c020b200510332206450d070c010b20082005460d0020062008200510372206450d060b200620046a220420093700082004200a3700002007200041306a2200470d000b2003200536020420032001360208200320063602000b20022902002001ad4220862006ad84100202402005450d00200610350b200341106a24000f0b1044000b1045000b103e000b103c000bcf0504037f017e087f047e23004180016b220224002002200110c40102400240024002402002280200450d00200041003602000c010b20022802042203200128020441306e2204200420034b1bad42307e2205422088a70d012005a72204417f4c0d010240024020040d00410821060c010b200410332206450d030b4100210720024100360210200220063602082002200441306e36020c0240024002402003450d0041002108034041002104200241003a0078200841016a210820012802042109417f210a034020092004460d03200241d8006a20046a2001280200220b2d00003a000020012009200a6a3602042001200b41016a3602002002200441016a220c3a0078200a417f6a210a200c2104200c4120470d000b200241386a41186a2204200241d8006a41186a290300370300200241386a41106a220a200241d8006a41106a290300370300200241386a41086a220d200241d8006a41086a290300370300200220022903583703382009200c6b220c4110490d03200b41096a2900002105200b290001210e2001200c41706a3602042001200b41116a360200200241186a41086a220c200d290300370300200241186a41106a2209200a290300370300200241186a41186a220a20042903003703002002200229033837031802402007200228020c470d00200241086a2007410110880120022802082106200228021021070b2006200741306c6a22042002290318370300200c290300210f20092903002110200a29030021112004200e370320200441286a2005370300200441186a2011370300200441106a2010370300200441086a200f3703002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c020b200441ff0171450d00200241003a00780b20004100360200200228020c2204450d00200441306c450d00200610350b20024180016a24000f0b1044000b1045000bcaf80102517f0d7e230041d0106b2201240020014100360210200141003602080240024002400240024002400240200041086a22022802002203450d00200141f8076a4102722104200141fd026a2105200141d0026a41206a2106200141386a41206a2107200141f8076a41206a2108200141186a41186a2109200141186a41106a210a4100210b034002402002280200220c200b4b0d00200b200c41e099c2001042000b20092000280200200b412c6c220d6a220e41246a290000370300200a200e411c6a290000370300200141186a41086a220f200e41146a2900003703002001200e29000c370318200e280200210c200e280208210e2001410036028008200142013703f807200141f8076a4100200e108a01200128028008211002400240200e41306c22110d0020012802f80721120c010b20012802f807221220104105746a210e0340200e200c290000370000200e41186a200c41186a290000370000200e41106a200c41106a290000370000200e41086a200c41086a290000370000201041016a2110200e41206a210e200c41306a210c201141506a22110d000b0b20012802fc072113024020104102490d00024002402010417f6a221420106c410176220c41ffffff1f71200c470d00200c410674220c417f4c0d00024002400240200c0d00410121150c010b200c10332215450d010b201241206a2116200c4106762117410021184100210c03400240200c41016a221920104f0d002012200c4105746a21112014211a2016210e0340200141f8076a41086a221b201141086a290000370300200141f8076a41106a221c201141106a290000370300200141f8076a41186a221d201141186a290000370300200120112900003703f8072008200e290000370000200841086a200e41086a290000370000200841106a200e41106a290000370000200841186a200e41186a290000370000024020182017470d00024002400240201741016a220c2017490d002017410174221e200c201e200c4b1b220c41ffffff1f71200c470d00200c410674220c4100480d00024020170d00200c0d02410121150c030b20174106742217200c460d02024020170d00200c0d02410121150c030b20152017200c10372215450d120c020b103e000b200c10332215450d100b200c41067621170b201520184106746a220c20012903f807370000200c41386a200141f8076a41386a290300370000200c41306a200141f8076a41306a290300370000200c41286a200141f8076a41286a290300370000200c41206a2008290300370000200c41186a201d290300370000200c41106a201c290300370000200c41086a201b290300370000200e41206a210e201841016a2118201a417f6a221a0d000b0b2014417f6a2114201641206a21162019210c20192010470d000b2018450d02201520184106746a211f2015211e02400340200141386a41386a201e41386a290000370300200141386a41306a201e41306a290000370300200141386a41286a201e41286a2900003703002007201e41206a290000370300200141386a41186a201e41186a220c290000370300200141386a41106a201e41106a220e290000370300200141386a41086a201e41086a22112900003703002001201e290000370338200141f8006a41186a2218200c290000370300200141f8006a41106a220c200e290000370300200141f8006a41086a220e20112900003703002001201e29000037037820014198016a41186a200741186a221129000037030020014198016a41106a200741106a221a29000037030020014198016a41086a200741086a221b2900003703002001200729000037039801200141d0026a41186a22202018290300370300200141d0026a41106a2221200c290300370300200141d0026a41086a2222200e29030037030020062007290000370000200641086a201b290000370000200641106a201a290000370000200641186a2011290000370000200120012903783703d002024002402001280208221b450d00200128020c211c0c010b200141f8076a410041c005109f081a200141e8046a410041e002109f081a41a8081033221b450d0e4100211c201b41003b0106201b4100360200201b41086a200141f8076a41c005109d081a201b41c8056a200141e8046a41e002109d081a2001410036020c2001201b3602080b201e41c0006a211e024002400240024002400240024002400240024002400240024003400240201b2f0106221a410674220e450d00201b41286a210c41002111034002400240200141d0026a200c41606a412010a0082218450d00201841004e0d012011211a0c030b2006200c412010a0082218450d04201841004e0d002011211a0c020b201141016a2111200c41c0006a210c200e41406a220e0d000b0b201c450d02201c417f6a211c201b201a4102746a41a8086a280200211b0c000b0b20022802002219200b4d0d032000280200221d200d6a220c28020841306c221a450d0a201b201141057422236a41c8056a2110200c280200210c4100211803404101210e0240200141f8006a200c460d00200c200141f8006a412010a008450d00024020014198016a200c470d004101210e0c010b200c20014198016a412010a00845210e0b200c41306a210c200e20186a2118201a41506a221a0d000b20184102470d0a2019412c6c210e0340201d210c200e450d0b0240200c410c6a22182010460d00200e41546a210e200c412c6a211d20182010412010a0080d010b0b0240200c41086a280200220e450d00200e41306c211a200141f8006a200c28020022186b211d20014198016a20186b21194100210c0340201d200c460d032018200c6a220e200141f8006a412010a008450d032019200c460d03200e20014198016a412010a008450d03201a200c41306a220c470d000b0b41082124410021250c070b200141b8016a41386a220c200141d0026a41386a290300370300200141b8016a41306a220e200141d0026a41306a290300370300200141b8016a41286a2211200141d0026a41286a290300370300200141b8016a41206a22182006290300370300200141b8016a41186a221c2020290300370300200141b8016a41106a221d2021290300370300200141b8016a41086a22102022290300370300200120012903d0023703b8012001200128021041016a360210200141a0036a41386a2226200c290300370300200141a0036a41306a2227200e290300370300200141a0036a41286a22282011290300370300200141a0036a41206a22242018290300370300200141a0036a41186a2223201c290300370300200141a0036a41106a2225201d290300370300200141a0036a41086a22292010290300370300200120012903b8013703a003200141d0076a41186a222a2009290300370300200141d0076a41106a222b200a290300370300200141d0076a41086a222c200f290300370300200120012903183703d0070240201b2f0106220e410b490d00200141f8076a410041c005109f081a200141e8046a410041e002109f081a41a8081033220c450d19200c41003b0106200c4100360200200c41086a200141f8076a41c005109d08210e200c41c8056a200141e8046a41e002109d082118200141f8076a41086a2210201b41a3036a290000370300200141f8076a41106a2219201b41ab036a290000370300200141f8076a41186a2214201b41b3036a2900003703002008201b41bb036a290000370300200141f8076a41256a2216201b41c0036a2900003700002001201b4188036a2f00003b0188042001201b418a036a2d00003a008a042001201b419b036a2900003703f807201b418b036a280000212d201b418f036a280000212e201b4193036a280000212f201b4197036a2800002130200141c8046a41186a2231201b41a0076a290000370300200141c8046a41106a2232201b4198076a290000370300200141c8046a41086a2233201b4190076a2900003703002001201b290088073703c804200e201b41c8036a201b2f010641796a2211410674109d08210e2018201b41a8076a2011410574109d082118201b41063b0106200c20113b0106200141e0036a41026a221c20012d008a043a0000200141e8046a41086a22342010290300370300200141e8046a41106a22352019290300370300200141e8046a41186a22362014290300370300200141e8046a41206a22372008290300370300200141e8046a41256a22382016290000370000200120012f0188043b01e003200120012903f8073703e804200141a8046a41186a22392031290300370300200141a8046a41106a223a2032290300370300200141a8046a41086a223b2033290300370300200120012903c8043703a80402400240201a4107490d00200e201a417a6a221d4106746a200e201a41796a221a4106746a220e201141ffff0371201a6b410674109e081a200e41386a2026290300370000200e41306a2027290300370000200e41286a2028290300370000200e41206a2024290300370000200e41186a2023290300370000200e41106a2025290300370000200e41086a2029290300370000200e20012903a0033700002018201d4105746a2018201a4105746a220e200c2f0106201a6b410574109e081a200e41186a202a290300370000200e41106a202b290300370000200e41086a202c290300370000200e20012903d007370000200c200c2f010641016a3b01060c010b201b41086a220e201a41016a22114106746a200e201a4106746a220e201b2f0106201a6b410674109e081a200e41386a2026290300370000200e41306a2027290300370000200e41286a2028290300370000200e41206a2024290300370000200e41186a2023290300370000200e41106a2025290300370000200e41086a2029290300370000200e20012903a003370000201b41c8056a220e20114105746a200e201a4105746a220e201b2f0106201a6b410574109e081a200e41186a202a290300370000200e41106a202b290300370000200e41086a202c290300370000200e20012903d007370000201b201b2f010641016a3b01060b200520012903a804370000200141f4076a41026a220e201c2d00003a000020222034290300370300202120352903003703002020203629030037030020062037290300370300200141d0026a41256a22282038290000370000200541086a2211203b290300370000200541106a2218203a290300370000200541186a221a2039290300370000200120012f01e0033b01f407200120012903e8043703d002200141cc026a41026a223c200e2d00003a000020014198026a41086a223d202229030037030020014198026a41106a223e202129030037030020014198026a41186a223f202029030037030020014198026a41206a2240200629030037030020014198026a41256a22412028290000370000200120012f01f4073b01cc02200120012903d00237039802200141f8016a41186a2242201a290000370300200141f8016a41106a22432018290000370300200141f8016a41086a22442011290000370300200120052900003703f8010240201b28020022180d004100211d200141086a210e200c21110c0a0b201b2f0104212641002145200c2146034020014184046a41026a2247203c2d00003a00002022203d2903003703002021203e2903003703002020203f2903003703002006204029030037030020282041290000370000200120012f01cc023b01840420012001290398023703d00220014188046a41186a2248204229030037030020014188046a41106a2249204329030037030020014188046a41086a224a2044290300370300200120012903f8013703880441000d03202641ffff0371211c02400240024020182f0106220c410b490d002004410041d208109f081a41d8081033221a450d1d201a4100360200201a41046a200141f8076a41d408109d081a200141d0076a41026a224b2018418a036a2d00003a00002010201841a3036a2900003703002019201841ab036a2900003703002014201841b3036a2900003703002008201841bb036a2900003703002016201841c0036a290000370000200120184188036a2f00003b01d00720012018419b036a2900003703f8072018418b036a280000214c2018418f036a280000214d20184193036a280000214e20184197036a280000214f2031201841a0076a290000370300203220184198076a290000370300203320184190076a29000037030020012018290088073703c804201a41086a201841c8036a20182f0106220e41796a220c410674109d082150201a41c8056a201841a8076a200c410574109d082151201a41a8086a201841c4086a200e417a6a221d410274109d082127201841063b0106201a200c3b01060240201d450d004100210c2027210e0340200e2802002211200c3b01042011201a360200200e41046a210e201d200c41016a220c470d000b0b2034201029030037030020352019290300370300203620142903003703002037200829030037030020382016290000370000203b2033290300370300203a203229030037030020392031290300370300200120012f01d0073b01f407200120012903f8073703e804200120012903c8043703a8042001204b2d00003a00f607200141cc076a41026a221d20012d00f6073a00002010203429030037030020192035290300370300201420362903003703002008203729030037030020162038290000370000200120012f01f4073b01cc07200120012903e8043703f807202a2039290300370300202b203a290300370300202c203b290300370300200120012903a8043703d007202641ffff037122264107490d012050201c417a6a22114106746a2050201c41796a220c4106746a220e201a2f0106200c6b410674109e081a200e203036000f200e202f36000b200e202e360007200e202d360003200e41026a20472d00003a0000200e20012f0184043b0000200e20012903d002370013200e411b6a2022290300370000200e41236a2021290300370000200e412b6a2020290300370000200e41336a2006290300370000200e41386a2028290000370000205120114105746a2051200c4105746a220e201a2f01062226200c6b410574109e081a200e41186a2048290300370000200e41106a2049290300370000200e41086a204a290300370000200e200129038804370000201a202641016a220e3b0106201c410274222620276a416c6a202720114102746a221c200e41ffff037120116b410274109e081a201c20463602002011201a2f0106221c4b0d02201a20266a4190086a210e0340200e2802002211200c41016a220c3b01042011201a360200200e41046a210e200c201c490d000c030b0b201841086a220e201c41016a22114106746a200e201c4106746a220e200c201c6b410674109e081a200e203036000f200e202f36000b200e202e360007200e202d360003200e41026a20472d00003a0000200e20012f0184043b0000200e20012903d002370013200e411b6a2022290300370000200e41236a2021290300370000200e412b6a2020290300370000200e41336a2006290300370000200e41386a2028290000370000201841c8056a220c20114105746a200c201c4105746a220c20182f0106220e201c6b410574109e081a200c41186a2048290300370000200c41106a2049290300370000200c41086a204a290300370000200c2001290388043700002018200e41016a220c3b0106201c410274201841a8086a220e6a41086a200e20114102746a220e200c41ffff037120116b410274109e081a200e20463602000240201c20182f0106221a4f0d0020182011417f6a220c4102746a41ac086a210e0340200e2802002211200c41016a220c3b010420112018360200200e41046a210e200c201a490d000b0b41001a200141086a1a201b1a0c0d0b201841086a220c201c41016a220e4106746a200c201c4106746a220c20182f0106201c6b410674109e081a200c203036000f200c202f36000b200c202e360007200c202d360003200c41026a20472d00003a0000200c20012f0184043b0000200c20012903d002370013200c411b6a2022290300370000200c41236a2021290300370000200c412b6a2020290300370000200c41336a2006290300370000200c41386a2028290000370000201841c8056a220c200e4105746a200c201c4105746a220c20182f01062211201c6b410574109e081a200c41186a2048290300370000200c41106a2049290300370000200c41086a204a290300370000200c2001290388043700002018201141016a220c3b0106201c4102742227201841a8086a22116a41086a2011200e4102746a2211200c41ffff0371200e6b410274109e081a20112046360200202620182f010622114f0d00201820276a41ac086a210c0340200c280200220e201c41016a221c3b0104200e2018360200200c41046a210c2011201c470d000b0b204541016a210c20014180046a41026a220e201d2d00003a000020292010290300370300202520192903003703002023201429030037030020242008290300370300200141a0036a41256a22112016290000370000200141e0036a41086a221c202c290300370300200141e0036a41106a221d202b290300370300200141e0036a41186a2226202a290300370300200120012f01cc073b018004200120012903f8073703a003200120012903d0073703e003203c200e2d00003a0000203d2029290300370300203e2025290300370300203f20232903003703002040202429030037030020412011290000370000200120012f0180043b01cc02200120012903a00337039802204220262903003703002043201d2903003703002044201c290300370300200120012903e0033703f80102402018280200220e0d00204c212d200141086a220e1a20181a204f2130204e212f204d212e200c211d201a21110c0b0b20182f01042126200141086a1a204c212d20181a204f2130204e212f204d212e200e2118201a2146200c21450c000b0b201b41086a220c201a41016a22114106746a200c201a4106746a220c200e201a6b410674109e081a200c41386a2026290300370000200c41306a2027290300370000200c41286a2028290300370000200c41206a2024290300370000200c41186a2023290300370000200c41106a2025290300370000200c41086a2029290300370000200c20012903a003370000201b41c8056a220c20114105746a200c201a4105746a220c201b2f0106201a6b410574109e081a200c41186a202a290300370000200c41106a202b290300370000200c41086a202c290300370000200c20012903d007370000201b201b2f010641016a3b01060c090b200141f8076a41086a22292018200c6a220e41086a290300370300200141f8076a41106a222a200e41106a290300370300200141f8076a41186a222b200e41186a2903003703002001200e2903003703f807200e41286a2903002152200e41206a2903002153413010332224450d0c20242053370320202420012903f807370300202441286a2052370300202441186a202b290300370300202441106a202a290300370300202441086a202929030037030020014281808080103702ec04200120243602e8040240201a41506a200c470d0020012802ec0421250c060b200e41306a211d2018201a6a220e41506a21204101211a0340201d210c024002400340200141f8006a200c460d01200c200141f8006a412010a008450d0120014198016a200c460d01200c20014198016a412010a008450d01200e200c41306a220c470d000c020b0b200c41286a2903002152200c41206a2903002153200141c8046a41186a2219200c41186a290300370300200141c8046a41106a2214200c41106a290300370300200141c8046a41086a2216200c41086a2903003703002001200c2903003703c8040240201a20012802ec04470d00200141e8046a201a410110880120012802e80421240b200c41306a211d2024201a41306c6a221820012903c80437030020162903002154201429030021552019290300215620182053370320201841286a2052370300201841186a2056370300201841106a2055370300201841086a20543703002001201a41016a221a3602f0042020200c470d010b0b20012802ec042125201a4102490d05201a4102470d0441e0001033221d450d0c2001420237029c022001201d3602980202402002280200220c200b4d0d000240024002402000280200200d6a220c28020841306c221a0d004102210c0c010b200c280200210c41002118034002400240200141f8006a200c460d00200c200141f8006a412010a008210e20014198016a200c460d00200e450d00200c20014198016a412010a0080d010b200141f8016a41186a2219200c41186a290300370300200141f8016a41106a2214200c41106a290300370300200141f8016a41086a2216200c41086a2903003703002001200c2903003703f801200c41286a2903002152200c41206a290300215302402018200128029c02470d0020014198026a20184101108801200128029802211d20012802a00221180b201d201841306c6a220e20012903f801370300201629030021542014290300215520192903002156200e2053370320200e41286a2052370300200e41186a2056370300200e41106a2055370300200e41086a20543703002001201841016a22183602a0020b200c41306a210c201a41506a221a0d000b20184102460d01200128029c02210c0b200c450d08200c41306c450d08201d10350c080b0240201d2024460d002024201d412010a008450d00200141f8076a41286a220c202441286a220e2903003703002008202441206a2218290300370300202b202441186a221a290300370300202a202441106a22192903003703002029202441086a2214290300370300200120242903003703f807200e202441d8006a22162903003703002018202441d0006a220e290300370300201a202441c8006a22182903003703002019202441c0006a221a2903003703002014202441386a2219290300370300202420242903303703002016200c290300370300200e20082903003703002018202b290300370300201a202a29030037030020192029290300370300202420012903f8073703300b2001427f3703f0042001427f3703e8044100211a200141003602d0072001410036028008200142083703f807200141f8076a4100410410880120012802f8072235200128028008221641306c6a210c0240201d450d00200141e8046a41086a290300215420012903e8042157410021194100211a03400240201d20196a220e41206a2903002253205756200e41286a290300225220545620522054511b0d00200120533703e8042001201a3602d007200120523703f00420532157205221540b200c20196a2218200e290300370300200e41086a2903002155200e41106a2903002156200e41186a2903002158201841286a2052370300201841206a2053370300201841186a2058370300201841106a2056370300201841086a2055370300201a41016a211a201941306a221941e000470d000b2016201a6a2116200c20196a210c0b02402024450d00202441e0006a221d2024460d00200141e8046a41086a290300215420012903e80421572024210e0340200e41306a21180240200e41206a2903002253205756200e41286a290300225220545620522054511b0d00200120533703e8042001201a3602d007200120523703f00420532157205221540b200c200e290300370300200e41086a2903002155200e41106a2903002156200e41186a2903002158200c41286a2052370300200c41206a2053370300200c41186a2058370300200c41106a2056370300200c41086a2055370300200c41306a210c201a41016a211a201641016a21162018210e201d2018470d000b0b20012802fc072131200141003602c001200142043703b801200141003602a803200142043703a00320012802d007210c200141a0036a4100410110860120012802a003222820012802a803220e4102746a200c3602002001200e41016a220c3602a80302400240024020012802d00722184102490d00200141b8016a4100410110860120012802b80120012802c001220e4102746a201841017141037322183602002001200e41016a220e3602c0012018417e6a21180240200c20012802a403470d00200141a0036a200c410110860120012802a003212820012802a803210c0b2028200c4102746a20183602002001200c41016a22343602a80320012802d007417e6a210c200e20012802bc01470d02200141b8016a200e41011086010c010b200141b8016a4100410110860120012802b80120012802c001220e4102746a410120186b3602002001200e41016a220e3602c001410320186b21180240200c20012802a403470d00200141a0036a200c410110860120012802a003212820012802a803210c0b2028200c4102746a20183602002001200c41016a22343602a80320012802d00741026a210c200e20012802bc01470d01200141b8016a200e41011086010b20012802c001210e0b20012802b8012227200e4102746a200c3602002001200e41016a220c3602c00141041033222c450d0d200142013702d4022001202c3602d00220012802bc0121360240200c450d002027200c4102746a212620272122034002400240202228020022214102490d00202b201041186a290000370300202a201041106a2900003703002029201041086a290000370300200120102900003703f8070c010b202b2009290300370300202a200a2903003703002029200f290300370300200120012903183703f8070b02402002280200220c450d0020002802002219200c412c6c6a21142035202141306c6a211a034002400240200141f8076a2019410c6a220c460d00200c200141f8076a412010a0080d010b2019280208210c0240201620214d0d00200c41306c210e4100211820192802002220210c02400340200e450d03201a200c460d01200c201a412010a008211d201841016a2118200e41506a210e200c41306a210c201d0d000b201d4541016a41017120186a417f6a21180b2020201841306c6a220c427f200c290320225220012903e8047c22532053205254220e200c41286a220c2903002252200141e8046a41086a2903007c200ead7c225320525420532052511b220e1b370320200c427f2053200e1b3703000c010b200c450d002021201641909ac2001042000b2019412c6a22192014470d000b0b202241046a22222026470d000b0b0240203641ffffffff0371450d00202710350b20012802a40321320240024020340d00410021270c010b202820344102746a21364100212720282134034002400240203428020022224102490d00202b201041186a290000370300202a201041106a2900003703002029201041086a290000370300200120102900003703f8070c010b202b2009290300370300202a200a2903003703002029200f290300370300200120012903183703f8070b02402002280200220c450d0020002802002219200c412c6c6a21202035202241306c6a211a034002400240200141f8076a2019410c6a220c460d00200c200141f8076a412010a0080d010b201941086a2226280200211402400240201620224d0d00201441306c210e4100211820192802002221210c02400340200e450d04201a200c460d01200c201a412010a008211d201841016a2118200e41506a210e200c41306a210c201d0d000b201d4541016a41017120186a417f6a21180b42002021201841306c6a220c290320225220012903e80422547d22532053205256200c41286a2903002253200141e8046a41086a2903007d2052205454ad7d225220535620522053511b220e1b225342002052200e1b225284500d01200c41206a220c2053370300200c20523703080c020b2014450d012022201641a09ac2001042000b200c200c41306a20142018417f736a41306c109e081a20262014417f6a3602000240202720012802d402470d00200141d0026a2027410110860120012802d80221270b20012802d002222c20274102746a20223602002001202741016a22273602d8020b2019412c6a22192020470d000b0b203441046a22342036470d000b0b0240203241ffffffff0371450d00202810350b202c417c6a21182027410274220c210e024003400240200e0d00410021180c020b200e417c6a210e201841046a221828020041014b0d000b0b20012802d402211d202c210e024003400240200c0d004100210c0c020b200c417c6a210c200e280200211a200e41046a210e201a4102490d000b4101210c0b0240201d41ffffffff0371450d00202c10350b0240024020180d00200c450d0120102001290318370000201041186a2009290300370000201041106a200a290300370000201041086a200f2903003700000c060b200c450d0520012001280210417f6a360210201b41086a210c02400240201c450d00201c417f6a210e200c20114106746a2118201b20114102746a41a8086a280200210c02400340200c2f01062111200e450d01200e417f6a210e200c20114102746a41a8086a280200210c0c000b0b200c410020111b221b41086a220e2011417f6a410020111b22114106746a220c2900002152200c2900082153200c2900102154200c41186a2900002155200c2900202156200c41286a2900002158200c41306a2900002157200c41386a290000215941012137200c200e201141016a221a4106746a2011417f73220e201b2f01066a410674109e081a201b41c8056a221c20114105746a220c290000215a200c290008215b200c290010215c200c41186a290000215d200c201c201a4105746a200e201b2f01066a410574109e081a201b201b2f0106417f6a3b0106201841386a2059370000201841306a2057370000201841286a205837000020182056370020201841186a2055370000201820543700102018205337000820182052370000201041186a205d3700002010205c3700102010205b3700082010205a370000201b2f0106210c0c010b200c20114106746a200c201141016a220e4106746a2011417f73220c201b2f01066a410674109e081a201b41c8056a221820236a2018200e4105746a200c201b2f01066a410574109e081a201b201b2f0106417f6a220c3b0106410021370b200c41ffff037141044b0d0441002122200141086a210e201b210c410021200240024002400240024002400240024002400240024002400240024002400340200c280200221a450d1402400240200c33010422524200520d0041002121201a4100201a2f0106220c1b211a42002052422086200c1b200ead8421520c010b2052422086200ead844280808080707c2152410121210b02400240201a41a8086a220e2052422088a7221841016a220c41027422276a221c28020022192f01062210200e201841027422236a2226280200221d2f010622146a2233410b490d0020210d052010450d01201941c0006a2900002152201941386a2900002153201941306a2900002154201941286a2900002155201941206a2900002156201941186a2900002158201941106a290000215720192900082159201941086a201941c8006a201041067441406a109e081a201941e0056a290000215a201941d8056a290000215b201941d0056a290000215c20192900c805215d201941c8056a201941e8056a201041057441606a109e081a20200d034100211d0c040b202041016a2120201a2f01062116200141f8076a41386a222c201a41086a223420184106746a220e41386a290000370300200141f8076a41306a2236200e41306a290000370300200141f8076a41286a2228200e41286a2900003703002008200e41206a290000370300202b200e41186a290000370300202a200e41106a2900003703002029200e41086a2900003703002001200e2900003703f807200e2034200c4106746a20162018417f7322346a410674109e081a201d41086a223220144106746a220e41386a202c290300370000200e41306a2036290300370000200e41286a2028290300370000200e41206a2008290300370000200e41186a202b290300370000200e41106a202a290300370000200e41086a2029290300370000200e20012903f8073700002032201441016a22164106746a201941086a2010410674109d081a201a2f0106212c200141c8046a41186a2236201a41c8056a222820184105746a220e41186a290000370300200141c8046a41106a2218200e41106a290000370300200141c8046a41086a2232200e41086a2900003703002001200e2900003703c804200e2028200c4105746a2034202c6a410574109e081a201d41c8056a222c20144105746a220e41186a2036290300370000200e41106a2018290300370000200e41086a2032290300370000200e20012903c804370000202c20164105746a201941c8056a2010410574109d081a201c202641086a412c20276b109e081a0240200c201a2f0106221c4f0d00201a20236a41ac086a210e0340200e2802002218200c3b01042018201a360200200e41046a210e201c200c41016a220c470d000b201a2f0106211c0b201a201c417f6a3b0106201d2010201d2f01066a41016a3b0106024020204102490d00201d20164102746a41a8086a201941a8086a201041027441046a109d081a2016203341026a4f0d00201041016a2118201d20144102746a41ac086a210c2016210e0340200c280200221c200e3b0104201c201d360200200c41046a210c200e41016a210e2018417f6a22180d000b0b20191035024020222021417f73724101710d0020204101470d102016410020211b20116a2111201a20236a41a8086a280200211b0b2052a7210e201a220c2f01062218450d064101212220184105490d010c150b0b41e4dec600412041c086cc00103f000b20192802a808211d201941a8086a220c201941ac086a2010410274109e081a4100210e201d41003602000340200c280200221c200e3b0104201c2019360200200c41046a210c2010200e41016a220e470d000b2020417f6a211c20192f010621100b20192010417f6a3b0106201a20184106746a220c41206a220e290000215e200e2056370000200c41186a220e2900002156200e2058370000200c41106a220e2900002158200e2057370000200c41086a220e2900002157200e2059370000200c41c0006a220e2900002159200e2052370000200c41386a220e2900002152200e2053370000200c41306a220e2900002153200e2054370000200c41286a220c2900002154200c2055370000201a20184105746a220c41d8056a220e2900002155200e205b370000200c41d0056a220e290000215b200e205c370000200c41c8056a220e290000215c200e205d370000200c41e0056a220c290000215d200c205a3700002026280200210c02402020450d00201d450d052020417f6a201c470d06200c2f01062218410a4b0d07200c20184106746a220e41c0006a2059370000200e41386a2052370000200e41306a2053370000200e41286a2054370000200e41206a205e370000200e41186a2056370000200e41106a2058370000200e41086a2057370000200c20184105746a220e41e0056a205d370000200e41d8056a2055370000200e41d0056a205b370000200e41c8056a205c370000200c201841016a220e4102746a41a8086a2218201d360200200c200c2f010641016a3b010620182802002218200e3b01042018200c3602000c020b200c2f01062218410b4f0d07200c20184106746a220e41c0006a2059370000200e41386a2052370000200e41306a2053370000200e41286a2054370000200e41206a205e370000200e41186a2056370000200e41106a2058370000200e41086a2057370000200c20184105746a220e41d8056a2055370000200e41d0056a205b370000200e41c8056a205c370000200e41e0056a205d370000200c200c2f010641016a3b01060c010b0240024002402014450d00201d2014417f6a220e4105746a220c41e0056a2900002152200c41d8056a2900002153200c41d0056a2900002154200c41c8056a2900002155201d200e4106746a220c41c0006a2900002156200c41386a2900002158200c41306a2900002157200c41286a2900002159200c41206a290000215a200c41186a290000215b200c41106a290000215c200c41086a290000215d20200d014100210e0c020b41e4dec600412041c086cc00103f000b201d20144102746a41a8086a280200220e41003602002020417f6a2110201d2f010621140b201d2014417f6a3b0106201a20184106746a220c41206a221d290000215e201d205a370000200c41186a221d290000215a201d205b370000200c41106a221d290000215b201d205c370000200c41086a221d290000215c201d205d370000200c41c0006a221d290000215d201d2056370000200c41386a221d2900002156201d2058370000200c41306a221d2900002158201d2057370000200c41286a220c2900002157200c2059370000201a20184105746a220c41d8056a2218290000215920182053370000200c41d0056a2218290000215320182054370000200c41c8056a2218290000215420182055370000200c41e0056a220c2900002155200c2052370000201c280200211802402020450d00200e450d082020417f6a2010470d09024020182f0106220c410a4b0d00201841c8006a201841086a200c410674109e081a201841386a2056370000201841306a2058370000201841286a2057370000201841186a205a370000201841106a205b3700002018205c370008201841c0006a205d370000201841206a205e370000201841e8056a201841c8056a200c410574109e081a201841e0056a2055370000201841d8056a2059370000201841d0056a2053370000201820543700c805201841ac086a201841a8086a220c20182f010641027441046a109e081a2018200e3602a808201820182f010641016a220e3b0106200e41ffff037141016a211c4100210e0340200c280200221a200e3b0104201a2018360200200c41046a210c201c200e41016a220e470d000c030b0b41af84cc00412741c086cc00103f000b20182f0106220c410b4f0d09201841c8006a201841086a200c410674109e081a201841386a2056370000201841306a2058370000201841286a2057370000201841186a205a370000201841106a205b3700002018205c370008201841c0006a205d370000201841206a205e370000201841e8056a201841c8056a200c410574109e081a201841e0056a2055370000201841d8056a2059370000201841d0056a2053370000201820543700c805201820182f010641016a3b01060b2022417f732021710d010c0f0b0240200e2802042218450d00200e280200221a2802a808210c200e2018417f6a360204200e200c360200200c4100360200201a10350c0f0b41c3dec600412141c086cc00103f000b2011201b2f0106490d084100210e024003400240201b280200220c0d00410021114100210c0c020b200e41016a210e201b2f01042111200c211b2011200c2f01064f0d000b0b201141016a21110240200e0d00200c211b0c0e0b200c20114102746a41a8086a280200211b41002111200e417f6a220c450d0d0340201b2802a808211b200c417f6a220c0d000c0e0b0b41958dcc00412b41ecdfc600103f000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b41af84cc00412741c086cc00103f000b41958dcc00412b4184dfc600103f000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b41cfa2cc00412841c086cc00103f000b201141016a21110c040b41b09ac200412941c086cc00103f000b200b200c41809ac2001042000b41d684cc00413541c086cc00103f000b200b201941f099c2001042000b2037450d002011201b2f0106490d000340201b280200220c450d01201b2f0104210e200c211b200e200c2f01064f0d000b0b02402031450d00203141306c450d00203510350b200128029c02220c450d00200c41306c450d0020012802980210350b2025450d03202541306c450d03202410350c030b20102001290318370000201041186a2009290300370000201041106a200a290300370000201041086a200f2903003700000b2025450d01202541306c450d01202410350c010b2004410041d208109f081a41d8081033220c450d0f200c4100360200200c41046a200141f8076a41d408109d081a200c200e28020022183602a808200e200c360200200e200e280204221a41016a360204201841003b01042018200c360200200141d0026a41026a221c203c2d00003a00002010203d2903003703002019203e2903003703002014203f2903003703002008204029030037030020162041290000370000200120012f01cc023b01d00220012001290398023703f807203620422903003703002035204329030037030020342044290300370300200120012903f8013703e804201a201d470d01200c2f01062218410a4b0d03200c20184106746a220e410a6a201c2d00003a0000200e41086a20012f01d0023b0000200e41176a2030360000200e41136a202f360000200e410f6a202e360000200e410b6a202d360000200e41c0006a2016290000370000200e413b6a2008290300370000200e41236a2010290300370000200e411b6a20012903f807370000200e41336a2014290300370000200e412b6a2019290300370000200c20184105746a220e41e0056a2036290300370000200e41d8056a2035290300370000200e41d0056a2034290300370000200e41c8056a20012903e804370000200c201841016a220e4102746a41a8086a2011360200200c200e3b01062011200c3602002011200e3b010441001a201b1a0b201e201f470d010c050b0b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b1045000b1044000b201741ffffff1f71450d00201510350b200b41016a210b0240201341ffffff3f71450d00201210350b200b2003470d000b2001280208220c0d010b2001418c086a41003602002001410036029808200141003602fc070c010b2001280210211702400240200128020c22110d00200c210e0c010b2011210e200c2108034020082802a8082108200e417f6a220e0d000b200c210e0340200e200e2f01064102746a41a8086a280200210e2011417f6a22110d000b2008210c0b20014194086a200e2f0106360200200141f8076a41186a41003602002001418c086a200e3602002001201736029808200141003602f807200141003602880820014200370380082001200c3602fc0702402017450d00200141a0036a41186a211a200141b0036a211b200141a8036a211c4100211841002111034020012017417f6a221736029808200c450d034100210802402018200c2f0106490d00034002400240200c280200220e0d002011ad21524100210e0c010b200841016a2108200c3301044220862011ad8421520b200c10352052a72111200e210c2052422088a72218200e2f01064f0d000b200e210c0b201a200c20184105746a220e41e0056a290000370300201b200e41d8056a290000370300201c200e41d0056a2900003703002001200e41c8056a2900003703a003201841016a211802402008450d00200c20184102746a41a8086a280200210c410021182008417f6a220e450d000340200c2802a808210c200e417f6a220e0d000b0b200120183602840820012011360280082001200c3602fc07200141003602f80720170d000b0b200c450d00200c280200210e200c1035200e450d000340200e280200210c200e1035200c210e200c0d000b0b200141003602d004200141003602c80402400240200041086a22322802002204450d00200141c8046a41086a21412000280200210c200141e8046a41186a2139200141d0076a41106a2146200141d0076a41086a2147200141d0026a41016a222e41286a2149202e41206a214a200141f5026a21452004210e4100212303400240200e20234b0d002023200e41dc9ac2001042000b200141d0076a41186a2248200c2023412c6c22406a221141246a29000037030020462011411c6a2900003703002047201141146a2900003703002001201129000c3703d00702402011280208450d00410021370340200c20406a280200210c200141386a41186a22152048290300370300200141386a41106a22062046290300370300200141386a41086a221e2047290300370300200120012903d007370338200141003a0058200141b8016a41186a2210200c203741306c6a220c41186a290000370300200141b8016a41106a2219200c41106a290000370300200141b8016a41086a2207200c41086a2900003703004101211d200141013a00d8012001200c2900003703b8010240024020012802c80422170d004100210c410021140c010b2017211a20012802cc04221b211c02400340201a41286a210c201a2f0106221d41216c210e41002108024002400340200821110240200e0d00201d21110c020b02400240200141386a200c41606a412010a0082208450d0041012118200841004e0d010c030b200c2d00002208450d03417f410120081b21180b201141016a2108200e415f6a210e200c41216a210c2018417f470d000b0b0240201c0d004101211d0c030b201c417f6a211c201a20114102746a41a0036a280200211a0c010b0b4100211d0b2017211a02400340201a41286a210c201a2f0106221c41216c210e41002108024002400340200821110240200e0d00201c21110c020b02400240200141b8016a200c41606a412010a0082208450d0041012118200841004e0d010c030b200c2d000022084101460d03417f4101200841014b1b21180b201141016a2108200e415f6a210e200c41216a210c2018417f470d000b0b0240201b0d00410021140c030b201b417f6a211b201a20114102746a41a0036a280200211a0c010b0b201a20114102746a41f4026a21140b2017210c0b200141a0036a41186a223a2015290300370300200141a0036a41106a223b2006290300370300200141a0036a41086a222d201e290300370300200120012903383703a003200141003a00c00302400240200c450d0020012802cc04211a0c010b200141f8076a410041eb02109f081a20494100360000204a4200370000202e41186a4200370000202e41106a4200370000202e41086a4200370000202e420037000041a00310332217450d094100211a201741003b010620174100360200201741086a200141f8076a41eb02109d081a20174198036a204529000037000020174193036a200141d0026a41206a2900003700002017418b036a200141d0026a41186a29000037000020174183036a200141d0026a41106a290000370000201741fb026a200141d0026a41086a290000370000201720012900d0023700f302200141003602cc04200120173602c8040b024002400340201741286a210c20172f0106221b41216c210e4100210802400340200821110240200e0d00201b21110c020b02400240200141a0036a200c41606a412010a0082208450d0041012118200841004e0d010c030b200c2d00002208450d04417f410120081b21180b201141016a2108200e415f6a210e200c41216a210c2018417f470d000b0b0240201a450d00201a417f6a211a201720114102746a41a0036a28020021170c010b0b203920012903a003370000203941086a202d290300370000203941106a203b290300370000203941186a203a290300370000203941206a200141a0036a41206a2d00003a0000200120413602fc04200120113602f804200120173602f0044100210c200141003602ec042001200141c8046a3602f4040c010b200120413602fc04200120113602f804200120173602f0042001201a3602ec042001200141c8046a3602f4044101210c0b2001200c3602e804200141f8076a41086a2234201e290300370300200141f8076a41106a22352006290300370300200141f8076a41186a22362015290300370300200141f8076a41206a221c200141386a41206a2d00003a0000200120012903383703f80741341033220c450d08200c4200370208200c428180808010370200200c20012903f807370210200c20012f00d0023b0031200c41186a2034290300370200200c41206a2035290300370200200c41286a2036290300370200200c41306a201c2d00003a0000200c41336a200141d0026a41026a22152d00003a000002400240024002400240024002400240200141e8046a200c10ac02280200222628020041016a220c41014d0d002026200c360200203a2010290300370300203b2019290300370300202d2007290300370300200120012903b8013703a003200141013a00c0030240024020012802c8042217450d0020012802cc04211a0c010b200141f8076a410041eb02109f081a20494100360000204a4200370000202e41186a4200370000202e41106a4200370000202e41086a4200370000202e420037000041a00310332217450d114100211a201741003b010620174100360200201741086a200141f8076a41eb02109d081a20174198036a204529000037000020174193036a200141d0026a41206a2900003700002017418b036a200141d0026a41186a29000037000020174183036a200141d0026a41106a290000370000201741fb026a200141d0026a41086a290000370000201720012900d0023700f302200141003602cc04200120173602c8040b024002400340201741286a210c20172f0106221b41216c210e4100210802400340200821110240200e0d00201b21110c020b02400240200141a0036a200c41606a412010a0082208450d0041012118200841004e0d010c030b200c2d000022084101460d04417f4101200841014b1b21180b201141016a2108200e415f6a210e200c41216a210c2018417f470d000b0b0240201a450d00201a417f6a211a201720114102746a41a0036a28020021170c010b0b203920012903a003370000203941086a202d290300370000203941106a203b290300370000203941186a203a290300370000203941206a200141a0036a41206a2d00003a0000200120413602fc04200120113602f804200120173602f0044100210c200141003602ec042001200141c8046a3602f4040c010b200120413602fc04200120113602f804200120173602f0042001201a3602ec042001200141c8046a3602f4044101210c0b2001200c3602e804203420072903003703002035201929030037030020362010290300370300201c200141b8016a41206a2d00003a0000200120012903b8013703f80741341033220c450d10200c4200370208200c428180808010370200200c20012903f807370210200c20012f00d0023b0031200c41186a2034290300370200200c41206a2035290300370200200c41286a2036290300370200200c41306a201c2d00003a0000200c41336a20152d00003a0000200141e8046a200c10ac022802002227280200220e41016a220c41014d0d002027200c360200024002400240024002400240024002400240024002400240024002400240024002400240201d450d0020140d03202628020041016a220c41014d0d122026200c36020020272802080d0b2027417f360208202728020c220c0d014100210c0c020b2014450d03200141f8076a202610ad022001280284082144200128028008214e20012802fc07213820012802f807212f200141f8076a202710ad022001280284082142200128028008214f20012802fc0721300240202f20012802f807223e460d00202f28020841016a220c41004c0d0d202f200c360208203e280208220c41016a220e41004c0d0c203e200e360208202f41106a203e41106a412010a0080d0e202f2d0030203e2d0030470d0e203e200c360208202f202f280208417f6a3602080b20302042410274222b6a211c20382044410274222a6a2111202a0d04410021170c050b200c200c280200417f6a3602000240202728020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10ae02200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10350b202728020c220c200c280204417f6a360204202728020c220c2802040d00200c10350b202728020841016a210c0b2027200c3602080c130b200e417e4f0d0e2027200e41026a36020020262802080d062026417f36020802400240202628020c220c0d004100210c0c010b200c200c280200417f6a3602000240202628020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10ae02200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10350b202628020c220c200c280204417f6a360204202628020c220c2802040d00200c10350b202628020841016a210c0b2026200c3602082026202736020c0c130b202628020041016a220c41014d0d0d2026200c36020020272802080d042027417f3602080240202728020c220c0d00202741003602080c120b200c200c280200417f6a3602000240202728020c220c2802000d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10ae02200c28020c210e0b200e200e280204417f6a360204200c28020c220c2802040d00200c10350b202728020c220c200c280204417f6a360204202728020c220c2802040d00200c10350b2027202728020841016a3602080c110b41002117201c210820112118034020302008460d01024002402018417c6a2218280200220c2008417c6a2208280200220e460d00200c28020841016a221a41004c0d05200c201a360208200e280208221a41016a221b41004c0d04200e201b360208200c41106a200e41106a412010a0080d01200c2d0030200e2d0030470d01200e201a360208200c200c280208417f6a3602080b201741016a211720382018470d010c020b0b200e201a360208200c200c280208417f6a3602080b2001410036028008200142043703f807204420176b211a204220176b220b41016a210e024020300d004100210c2038450d0a201a450d0a201a201120386b410276220c200c201a4b1b210c0c0a0b2038450d084100210c410021080240200e450d00200e201c20306b41027622082008200e4b1b21080b0240201a450d00201a201120386b410276220c200c201a4b1b210c0b2008200c6a220c20084f0d09410421144100211841002115203021080340024002402008450d000240200e0d004100210e0c010b200e417f6a210e201c2008460d002008280200220c28020041016a221741014d0d0e200c2017360200200c450d00200841046a21080c010b201a450d0c201120386b410276220c4100200c201a6b22082008200c4b1b220c4d0d0c2011200c4102746b417c6a2211280200220c28020041016a220841014d0d0d200c2008360200200c450d0c201a417f6a211a410021080b0240201520012802fc07470d0002400240024020080d00201a0d01410021170c020b4100211b410021170240200e450d00200e201c20086b41027622172017200e4b1b21170b0240201a450d00201a201120386b410276221b201b201a4b1b211b0b417f2017201b6a221b201b2017491b21170c010b201a201120386b41027622172017201a4b1b21170b200141f8076a2015417f201741016a221b201b2017491b10860120012802f80721140b201420186a200c3602002001201541016a221536028008201841046a21180c000b0b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b203e200c360208202f202f280208417f6a360208204fad4220862030ad842252204ead4220862038ad842253204420424b22151b2254a7211d02400240024002402042204420151b2206410274220e450d00201d200e6a211c41012118201d2111201d21080340024002402018450d00201c20116b41027620184d0d03201120184102746a21110c010b201c2011460d020b2008280200221728020041016a220c41014d0d082017200c3602002011280200220c2802080d02200841046a2108200c417f360208410021184100211a0240200c28020c221b450d00201b201b280200417f6a3602000240200c28020c221a2802000d000240201a28020c221b450d00201b201b280200417f6a360200201a28020c221b2802000d000240201b28020c450d00201b410c6a10ae02201a28020c211b0b201b201b280204417f6a360204201a28020c221a2802040d00201a10350b200c28020c221a201a280204417f6a360204200c28020c221a2802040d00201a10350b200c28020841016a211a0b201141046a2111200c201a360208200c201736020c201c2008470d000b0b2006450d0102402044204220151b22180d0041004100419c9bc2001042000b2053205220151b2252a72217280200221128020041016a220c41014d0d062011200c360200201d280200220c2802080d02200c417f36020802400240200c28020c22080d00410021080c010b20082008280200417f6a3602000240200c28020c22082802000d000240200828020c221a450d00201a201a280200417f6a360200200828020c221a2802000d000240201a28020c450d00201a410c6a10ae02200828020c211a0b201a201a280204417f6a360204200828020c22082802040d00200810350b200c28020c22082008280204417f6a360204200c28020c22082802040d00200810350b200c28020841016a21080b2052422088215220544220882153200c2008360208200c201136020c201841027421112017210c0340200c28020022082008280200417f6a3602000240200c28020022082802000d000240200828020c2218450d0020182018280200417f6a360200200828020c22182802000d000240201828020c450d002018410c6a10ae02200828020c21180b20182018280204417f6a360204200828020c22082802040d00200810350b200c28020022082008280204417f6a360204200c28020022082802040d00200810350b200c41046a210c2011417c6a22110d000b02402052500d002052a7410274450d00201710350b201d210c0340200c28020022112011280200417f6a3602000240200c28020022112802000d000240201128020c2208450d0020082008280200417f6a360200201128020c22082802000d000240200828020c450d002008410c6a10ae02201128020c21080b20082008280204417f6a360204201128020c22112802040d00201110350b200c28020022112011280204417f6a360204200c28020022112802040d00201110350b200c41046a210c200e417c6a220e0d000b02402053500d002053a7410274450d00201d10350b203e203e280200417f6a220c360200203741016a2137200c0d090240203e28020c220c450d00200c200c280200417f6a360200203e28020c220c2802000d000240200c28020c450d00200c410c6a10ae02203e28020c210c0b200c200c280204417f6a360204203e28020c220c2802040d00200c10350b203e203e280204417f6a220c360204200c0d09203e10350c090b41a797cc004110200141a8046a41a08bc50041c897cc001046000b41004100418c9bc2001042000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b0240200e0d004100210c0c010b200e201c20306b410276220c200c200e4b1b210c0b200141f8076a4100200c10860120012802f807221420012802800822154102746a210c02402030450d00200e450d00203020424102746a211b2042417f7320176a21082030210e0340201b200e460d01200e280200221828020041016a221741014d0d0320182017360200200c2018360200201541016a2115200c41046a210c200e41046a210e200841016a221820084f21172018210820170d000b0b02402038450d00201a450d000240201120386b410276220e201a4d0d00200e201a417f736a2208200e4f0d01201120084102746b417c6a21110b20112038460d0003402011417c6a2211280200220e28020041016a220841014d0d03200e2008360200200c200e360200201541016a2115200c41046a210c20382011470d000b0b20012015360280080b20012802fc07215120014198026a41186a224b420037030020014198026a41106a224c420037030020014198026a41086a224d42003703002001420037039802203a4200370300203b4200370300202d4200370300200142003703a0034100211e0240024020150d00427f2152427f2153410021074100212c410021250c010b2015417f6a2116427f215241002107427f21534100212c41002125427f2155427f21544100211a0240024002400240024003402014201a4102746a280200220c28020841016a220e41004c0d01201a41016a211b0240200c2d00300d00200c200e360208200141d0026a41186a221c200c41286a290000370300200141d0026a41106a221d200c41206a290000370300200141d0026a41086a2206200c41186a290000370300200c200c280208417f6a3602082001200c2900103703d0022015201b41002016201a4b1b220c4d0d032014200c4102746a280200220c28020841016a220e41004c0d04200c200e3602082039200c41286a290000370300200141e8046a41106a2210200c41206a290000370300200141e8046a41086a2219200c41186a290000370300200c200c280208417f6a3602082001200c2900103703e8042015201a2015201a1b417f6a220c4d0d052014200c4102746a280200220c28020841016a220e41004c0d06200c200e3602082036200c41286a2900003703002035200c41206a2900003703002034200c41186a290000370300200c200c280208417f6a3602082001200c2900103703f8072032280200412c6c220e2111200028020022082118024003402018210c2011450d010240200141d0026a200c410c6a2217460d00201141546a2111200c412c6a21182017200141d0026a412010a0080d010b0b200c41086a28020041306c2111200c280200211803402018210c2011450d010240200141e8046a200c460d00201141506a2111200c41306a2118200c200141e8046a412010a0080d010b0b2052200c41206a2903002258582054200c41286a29030022565820542056511b0d00204b2039290300370300204c2010290300370300204d2019290300370300202d2006290300370300203b201d290300370300203a201c290300370300200120012903e80437039802200120012903d0023703a0034101212c2058215220562153201a2107201a212520562155205621540b03402008210c200e450d010240200141d0026a200c410c6a2211460d00200e41546a210e200c412c6a21082011200141d0026a412010a0080d010b0b200c41086a28020041306c210e200c280200211103402011210c200e450d010240200141f8076a200c460d00200e41506a210e200c41306a2111200c200141f8076a412010a0080d010b0b205521542052200c41206a2903002258582055200c41286a29030022565820552056511b0d00204b2036290300370300204c2035290300370300204d2034290300370300202d2006290300370300203b201d290300370300203a201c290300370300200120012903f80737039802200120012903d0023703a0034100212c2058215220562153201a2107201a212520562155205621540b201b211a201b2015460d060c000b0b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b200c201541ac9bc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b200c201541bc9bc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b200141003602d802200142043703d0022025202c6a21500240024020150d0041012119417f213f0c010b2015417f6a213f41012119205041017121434100211e202c212041002106024003400240024002400240024002400240201420064102746a2229280200221028020841016a220c41004c0d00200641016a21222010200c36020820102d00300d0620152006201520061b417f6a220c4d0d012014200c4102746a2233280200222828020841016a220c41004c0d022028200c36020802402032280200220c0d002022210c2006211b0c060b20002802002217200c412c6c6a211d202841106a210e201041106a211a202c45200620074671213120430d034100211c2006211b034002400240201a2017410c6a220c460d00200c201a412010a0080d010b201741086a2224280200222141306c21114100210820172802002216210c024003402011450d02200e200c460d01200c200e412010a0082118200841016a2108201141506a2111200c41306a210c20180d000b20184541016a41017120086a417f6a21080b0240427f2016200841306c6a220c290320225520527c225420542055542211200c41286a290300225420537c2011ad7c225620545420562054511b22111b4200205520527d22582058205556205420537d2055205254ad7d225520545620552054511b22181b201b41017122161b2254427f205620111b4200205520181b20161b225584500d00200c41206a220c2054370300200c20553703080c010b200c200c41306a20212008417f736a41306c109e081a20242021417f6a36020041002120410020192023201c461b211902402031450d00200721252007211b0c010b2029280200220c28020041016a221141014d0d0c200c20113602002033280200221128020041016a220841014d0d0c201120083602000240201e20012802d402470d00200141d0026a201e410110900120012802d802211e0b20012802d002201e4103746a220820113602042008200c3602002001201e41016a221e3602d802202c2120200721252006211b0b201c41016a211c2017412c6a2217201d470d000c050b0b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b200c201541cc9bc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b4100211c2006211b034002400240201a2017410c6a220c460d00200c201a412010a0080d010b201741086a2224280200222141306c21114100210820172802002216210c024003402011450d02200e200c460d01200c200e412010a0082118200841016a2108201141506a2111200c41306a210c20180d000b20184541016a41017120086a417f6a21080b024042002016200841306c6a220c290320225520527d22542054205556200c41286a290300225420537d2055205254ad7d225620545620562054511b22111b427f205520527c225820582055542218205420537c2018ad7c225520545420552054511b22181b201b41017122161b22544200205620111b427f205520181b20161b225584500d00200c41206a220c2054370300200c20553703080c010b200c200c41306a20212008417f736a41306c109e081a20242021417f6a36020041002120410020192023201c461b211902402031450d00200721252007211b0c010b2029280200220c28020041016a22114102490d08200c20113602002033280200221128020041016a22084102490d08201120083602000240201e20012802d402470d00200141d0026a201e410110900120012802d802211e0b20012802d002201e4103746a220820113602042008200c3602002001201e41016a221e3602d802202c2120200721252006211b0b201c41016a211c2017412c6a2217201d470d000b0b201b41016a210c0b024002400240024002402015200c4100203f201b4b1b220c4d0d002014200c4102746a280200223128020841016a220c41004c0d012031200c3602082032280200220e450d0420002802002217200e412c6c6a211d202c4101462006200746712133203141106a210e201041106a211a201420224100203f20064b1b223c4102746a213d20430d024100211c034002400240201a2017410c6a220c460d00200c201a412010a0080d010b201741086a2224280200222141306c21114100210820172802002216210c024003402011450d02200e200c460d01200c200e412010a0082118200841016a2108201141506a2111200c41306a210c20180d000b20184541016a41017120086a417f6a21080b024042002016200841306c6a220c290320225520527d22542054205556200c41286a290300225420537d2055205254ad7d225620545620562054511b22111b427f205520527c225820582055542218205420537c2018ad7c225520545420552054511b22181b201b41017122161b22544200205620111b427f205520181b20161b225584500d00200c41206a220c2054370300200c20553703080c010b200c200c41306a20212008417f736a41306c109e081a20242021417f6a360200410020192023201c461b21194101212002402033450d00200721252007211b0c010b2029280200220c28020041016a221141014d0d0b200c20113602002015203c4d0d09203d280200221128020041016a220841014d0d0b201120083602000240201e20012802d402470d00200141d0026a201e410110900120012802d802211e0b20012802d002201e4103746a220820113602042008200c3602002001201e41016a221e3602d802202c2120200721252006211b0b201c41016a211c2017412c6a2217201d470d000c040b0b200c201541dc9bc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b4100211c034002400240201a2017410c6a220c460d00200c201a412010a0080d010b201741086a2224280200222141306c21114100210820172802002216210c024003402011450d02200e200c460d01200c200e412010a0082118200841016a2108201141506a2111200c41306a210c20180d000b20184541016a41017120086a417f6a21080b0240427f2016200841306c6a220c290320225520527c225420542055542211200c41286a290300225420537c2011ad7c225620545420562054511b22111b4200205520527d22582058205556205420537d2055205254ad7d225520545620552054511b22181b201b41017122161b2254427f205620111b4200205520181b20161b225584500d00200c41206a220c2054370300200c20553703080c010b200c200c41306a20212008417f736a41306c109e081a20242021417f6a360200410020192023201c461b21194101212002402033450d00200721252007211b0c010b2029280200220c28020041016a22114102490d08200c20113602002015203c4d0d06203d280200221128020041016a22084102490d08201120083602000240201e20012802d402470d00200141d0026a201e410110900120012802d802211e0b20012802d002201e4103746a220820113602042008200c3602002001201e41016a221e3602d802202c2120200721252006211b0b201c41016a211c2017412c6a2217201d470d000b0b2031280208210c0b2031200c417f6a36020820282028280208417f6a3602082010280208210c0b2010200c417f6a3602082022210620222015470d000b2020212c0c010b203c201541ec9bc2001042000b0240202c4101470d002025203f460d030b41c0001033220e450d10200e20012903a003370000200e200129039802370020200e41186a203a290300370000200e41106a203b290300370000200e41086a202d290300370000200e41286a204d290300370000200e41306a204c290300370000200e41386a204b290300370000024002402050200b4b0d002042417f6a221b450d014100210802400240024002400240034020082042460d01203020084102746a2217280200220c280200221141016a221841014d0d08200c2018360200200c28020841016a41004c0d02200c20113602002039200c41286a290000370300200141e8046a41106a200c41206a290000370300200141e8046a41086a200c41186a2900003703002001200c2900103703e8042042200841016a22084d0d03203020084102746a221a280200220c280200221141016a221841014d0d08200c2018360200200c28020841016a41004c0d04200c20113602002036200c41286a2900003703002035200c41206a2900003703002034200c41186a2900003703002001200c2900103703f8074100210c02400340200c41c000460d01200e200c6a2111200c41206a210c2011200141e8046a412010a0080d000b4100210c0340200c41c000460d01200e200c6a2111200c41206a210c2011200141f8076a412010a0080d000c090b0b2017280200221128020041016a220c41014d0d082011200c360200201a280200220c2802080d05200c417f36020802400240200c28020c22180d00410021180c010b20182018280200417f6a3602000240200c28020c22182802000d000240201828020c2217450d0020172017280200417f6a360200201828020c22172802000d000240201728020c450d002017410c6a10ae02201828020c21170b20172017280204417f6a360204201828020c22182802040d00201810350b200c28020c22182018280204417f6a360204200c28020c22182802040d00201810350b200c28020841016a21180b200c2018360208200c201136020c2008201b470d000c070b0b20422042419c9cc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b2008204241ac9cc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b02402044417f6a221b450d004100210802400240024002400240034020082044460d01203820084102746a2217280200220c280200221141016a221841014d0d08200c2018360200200c28020841016a41004c0d02200c20113602002039200c41286a290000370300200141e8046a41106a200c41206a290000370300200141e8046a41086a200c41186a2900003703002001200c2900103703e8042044200841016a22084d0d03203820084102746a221a280200220c280200221141016a221841014d0d08200c2018360200200c28020841016a41004c0d04200c20113602002036200c41286a2900003703002035200c41206a2900003703002034200c41186a2900003703002001200c2900103703f8074100210c02400340200c41c000460d01200e200c6a2111200c41206a210c2011200141e8046a412010a0080d000b4100210c0340200c41c000460d01200e200c6a2111200c41206a210c2011200141f8076a412010a0080d000c080b0b2017280200221128020041016a220c41014d0d082011200c360200201a280200220c2802080d05200c417f36020802400240200c28020c22180d00410021180c010b20182018280200417f6a3602000240200c28020c22182802000d000240201828020c2217450d0020172017280200417f6a360200201828020c22172802000d000240201728020c450d002017410c6a10ae02201828020c21170b20172017280204417f6a360204201828020c22182802040d00201810350b200c28020c22182018280204417f6a360204200c28020c22182802040d00201810350b200c28020841016a21180b200c2018360208200c201136020c2008201b470d000c060b0b2044204441fc9bc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b20082044418c9cc2001042000b41ac96cc004118200141a8046a41fc9ac20041d496cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b202728020041016a220c41014d0d012027200c360200024020262802080d002026417f36020802400240202628020c220c0d004100210c0c010b200c200c280200417f6a3602000240202628020c220c2802000d000240200c28020c2211450d0020112011280200417f6a360200200c28020c22112802000d000240201128020c450d002011410c6a10ae02200c28020c21110b20112011280204417f6a360204200c28020c220c2802040d00200c10350b202628020c220c200c280204417f6a360204202628020c220c2802040d00200c10350b202628020841016a210c0b2026200c3602082026202736020c200e10350c040b41a797cc004110200141a8046a41a08bc50041c897cc001046000b202628020041016a220c41014d0d002026200c36020020272802080d012027417f36020802400240202728020c220c0d004100210c0c010b200c200c280200417f6a3602000240202728020c220c2802000d000240200c28020c2211450d0020112011280200417f6a360200200c28020c22112802000d000240201128020c450d002011410c6a10ae02200c28020c21110b20112011280204417f6a360204200c28020c220c2802040d00200c10350b202728020c220c200c280204417f6a360204202728020c220c2802040d00200c10350b202728020841016a210c0b2027200c3602082027202636020c200e10350c020b00000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b20012802d0022217201e4103746a210820012802d402211b2017210e0240024002400240201e450d0020172111024003402011280200220c450d010240024002400240200c201141046a280200220e10af020d00200e200c10af02450d03200e2802080d09200e417f360208200e28020c22180d01410021180c020b200c2802080d07200c417f36020802400240200c28020c22180d00410021180c010b20182018280200417f6a3602000240200c28020c22182802000d000240201828020c221a450d00201a201a280200417f6a360200201828020c221a2802000d000240201a28020c450d00201a410c6a10ae02201828020c211a0b201a201a280204417f6a360204201828020c22182802040d00201810350b200c28020c22182018280204417f6a360204200c28020c22182802040d00201810350b200c28020841016a21180b200c2018360208200c410036020c0c020b20182018280200417f6a3602000240200e28020c22182802000d000240201828020c221a450d00201a201a280200417f6a360200201828020c221a2802000d000240201a28020c450d00201a410c6a10ae02201828020c211a0b201a201a280204417f6a360204201828020c22182802040d00201810350b200e28020c22182018280204417f6a360204200e28020c22182802040d00201810350b200e28020841016a21180b200e2018360208200e410036020c0b200e200e280200417f6a2218360200024020180d000240200e28020c2218450d0020182018280200417f6a360200200e28020c22182802000d000240201828020c450d002018410c6a10ae02200e28020c21180b20182018280204417f6a360204200e28020c22182802040d00201810350b200e200e280204417f6a221836020420180d00200e10350b200c200c280200417f6a220e3602000240200e0d000240200c28020c220e450d00200e200e280200417f6a360200200c28020c220e2802000d000240200e28020c450d00200e410c6a10ae02200c28020c210e0b200e200e280204417f6a360204200c28020c220e2802040d00200e10350b200c200c280204417f6a220e360204200e0d00200c10350b201141086a22112008470d000c030b0b201141086a210e0b2008200e460d000340200e220c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2211450d0020112011280200417f6a360200200e28020c22112802000d000240201128020c450d002011410c6a10ae02200e28020c21110b20112011280204417f6a360204200e28020c220e2802040d00200e10350b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10350b200c41086a210e200c41046a220c28020022112011280200417f6a3602000240200c28020022112802000d000240201128020c2218450d0020182018280200417f6a360200201128020c22182802000d000240201828020c450d002018410c6a10ae02201128020c21180b20182018280204417f6a360204201128020c22112802040d00201110350b200c28020022112011280204417f6a360204200c280200220c2802040d00200c10350b2008200e470d000b0b0240201b41ffffffff0171450d00201710350b02402015450d002015410274210e2014210c0340200c28020022112011280200417f6a3602000240200c28020022112802000d000240201128020c2208450d0020082008280200417f6a360200201128020c22082802000d000240200828020c450d002008410c6a10ae02201128020c21080b20082008280204417f6a360204201128020c22112802040d00201110350b200c28020022112011280204417f6a360204200c28020022112802040d00201110350b200c41046a210c200e417c6a220e0d000b0b0240205141ffffffff0371450d00201410350b02402042450d002030210c0340200c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2211450d0020112011280200417f6a360200200e28020c22112802000d000240201128020c450d002011410c6a10ae02200e28020c21110b20112011280204417f6a360204200e28020c220e2802040d00200e10350b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10350b200c41046a210c202b417c6a222b0d000b0b0240204f41ffffffff0371450d00203010350b203e203e280200417f6a220c3602000240200c0d000240203e28020c220c450d00200c200c280200417f6a360200203e28020c220c2802000d000240200c28020c450d00200c410c6a10ae02203e28020c210c0b200c200c280204417f6a360204203e28020c220c2802040d00200c10350b203e203e280204417f6a220c360204200c0d00203e10350b201941ff0171210802402044450d002038210c0340200c280200220e200e280200417f6a3602000240200c280200220e2802000d000240200e28020c2211450d0020112011280200417f6a360200200e28020c22112802000d000240201128020c450d002011410c6a10ae02200e28020c21110b20112011280204417f6a360204200e28020c220e2802040d00200e10350b200c280200220e200e280204417f6a360204200c280200220e2802040d00200e10350b200c41046a210c202a417c6a222a0d000b0b203720086a2137204e41ffffffff0371450d02203810350c020b41a797cc004110200141a8046a41a08bc50041c897cc001046000b41a797cc004110200141a8046a41a08bc50041c897cc001046000b202f202f280200417f6a220c3602000240200c0d000240202f28020c220c450d00200c200c280200417f6a360200202f28020c220c2802000d000240200c28020c450d00200c410c6a10ae02202f28020c210c0b200c200c280204417f6a360204202f28020c220c2802040d00200c10350b202f202f280204417f6a220c360204200c0d00202f10350b20272027280200417f6a220c3602000240200c0d000240202728020c220c450d00200c200c280200417f6a360200202728020c220c2802000d000240200c28020c450d00200c410c6a10ae02202728020c210c0b200c200c280204417f6a360204202728020c220c2802040d00200c10350b20272027280204417f6a220c360204200c0d00202710350b20262026280200417f6a220c360200200c0d030240202628020c220c450d00200c200c280200417f6a360200202628020c220c2802000d000240200c28020c450d00200c410c6a10ae02202628020c210c0b200c200c280204417f6a360204202628020c220c2802040d00200c10350b20262026280204417f6a220c360204200c0d030c020b2027202636020c0b20272027280200417f6a220c3602000240200c0d000240202728020c220c450d00200c200c280200417f6a360200202728020c220c2802000d000240200c28020c450d00200c410c6a10ae02202728020c210c0b200c200c280204417f6a360204202728020c220c2802040d00200c10350b20272027280204417f6a220c360204200c0d00202710350b203741016a213720262026280200417f6a220c360200200c0d010240202628020c220c450d00200c200c280200417f6a360200202628020c220c2802000d000240200c28020c450d00200c410c6a10ae02202628020c210c0b200c200c280204417f6a360204202628020c220c2802040d00200c10350b20262026280204417f6a220c360204200c0d010b202610350b02402032280200220e20234d0d002000280200220c20406a28020820374d0d020c010b0b2023200e41ec9ac2001042000b202341016a22232004470d000b20012802c804220c0d010b2001418c086a41003602002001410036029808200141003602fc070c030b20012802d004211a0240024020012802cc0422110d00200c210e0c010b2011210e200c2108034020082802a0032108200e417f6a220e0d000b200c210e0340200e200e2f01064102746a41a0036a280200210e2011417f6a22110d000b2008210c0b20014194086a200e2f010636020020014190086a41003602002001418c086a200e3602002001201a36029808200141003602f807200141003602880820014200370380082001200c3602fc07201a450d014100211841002111024003402001201a417f6a221a36029808200c450d014100210802402018200c2f0106490d00034002400240200c280200220e0d002011ad21524100210e0c010b200841016a2108200c3301044220862011ad8421520b200c10352052a72111200e210c2052422088a72218200e2f01064f0d000b200e210c0b201841016a210e200c20184102746a41f4026a2802002117200c201841216c6a41286a2d0000211b0240024020080d00200e21180c010b200c200e4102746a41a0036a280200210c410021182008417f6a220e450d000340200c2802a003210c200e417f6a220e0d000b0b200120183602840820012011360280082001200c3602fc07200141003602f807201b41ff01714102460d0320172017280200417f6a220e3602000240200e0d000240201728020c220e450d00200e200e280200417f6a360200201728020c220e2802000d000240200e28020c450d00200e410c6a10ae02201728020c210e0b200e200e280204417f6a360204201728020c220e2802040d00200e10350b20172017280204417f6a220e360204200e0d00201710350b201a0d000c030b0b41958dcc00412b41c08dcc00103f000b41958dcc00412b41c08dcc00103f000b200c450d00200c280200210e200c1035200e450d000340200e280200210c200e1035200c210e200c0d000b0b200141d0106a24000f0b103c000bdb21011d7f230041b0046b220224000240024002400240024002400240024020002802004101460d00200041146a2802002203200328020041016a360200200041106a28020021042000410c6a2802002105200041086a280200210320002802042106200241e0006a41206a2207200041386a2d00003a0000200241e0006a41186a2208200041306a290000370300200241e0006a41106a2209200041286a290000370300200241e0006a41086a220a200041206a2900003703002002200041186a29000037036020032f0106220b410b490d01200241c0016a410041eb02109f081a200241d9006a4100360000200241306a41216a4200370000200241c9006a4200370000200241c1006a4200370000200241396a42003700002002420037003141a0031033220c450d05200c41003b0106200c4100360200200c41086a200241c0016a41eb02109d082107200c4198036a200241d5006a290000370000200c4193036a200241306a41206a290000370000200c418b036a200241306a41186a290000370000200c4183036a200241306a41106a290000370000200c41fb026a200241306a41086a290000370000200c20022900303700f3022002200341ce016a2f00003b01182002200341d0016a2d00003a001a200341d1016a280000210d200341d5016a280000210e200341d9016a280000210f200341dd016a28000021102002200341e7016a2900003701c6012002200341e1016a2900003703c001200328028c0321112007200341ef016a20032f010641796a220041216c109d082107200c41f4026a20034190036a2000410274109d082108200341063b0106200c20003b01062002412c6a41026a20022d001a3a0000200220022f01183b012c200220022903c001370330200220022901c6013701360240024020044107490d00200441216c20076a220741ba7e6a200741997e6a2207200041ffff0371200441796a22096b41216c109e081a200741206a200241e0006a41206a2d00003a0000200741186a200241e0006a41186a290300370000200741106a200241e0006a41106a290300370000200741086a200241e0006a41086a29030037000020072002290360370000200441027420086a41686a2107200820094102746a2112200c41066a22002f010020096b21040c010b200341086a200441216c6a220741216a2007200341066a22002f010020046b41216c109e081a200741206a200241e0006a41206a2d00003a0000200741186a200241e0006a41186a290300370000200741106a200241e0006a41106a290300370000200741086a200241e0006a41086a29030037000020072002290360370000200341f4026a20044102746a221241046a210720002f010020046b21040b200720122004410274109e081a20122001360200200241146a41026a2002412c6a41026a22132d000022013a0000200020002f010041016a3b0100200241106a41026a221420013a000020022002290136370196012002200229033037039001200220022f012c22003b0114200220003b0110200220022903900137030020022002290196013701060240200328020022070d00410021000c040b20032f01042115200241c0016a4102722116200241306a41016a210a410021000340201320142d00003a0000200220022f01103b012c200220022903003703182002200229010637011e20062000470d03201541ffff0371210802400240024020072f01062200410b490d00200a41286a4100360000200a41206a4200370000200a41186a4200370000200a41106a4200370000200a41086a4200370000200a42003700002016410041ed02109f081a200241e0006a41086a22004200370300200241e0006a41106a22034200370300200241e0006a41186a22044200370300200241e0006a41206a22094200370300200241e0006a41286a220b420037030020024190016a41256a2217200241306a41256a29000037000020024190016a41206a2218200241306a41206a29000037030020024190016a41186a2219200241306a41186a29000037030020024190016a41106a221a200241306a41106a29000037030020024190016a41086a221b200241306a41086a29000037030020024200370360200220022900303703900141d00310332201450d0920014100360200200141046a200241c0016a41ef02109d081a20014198036a201729000037000020014193036a20182903003700002001418b036a201929030037000020014183036a201a290300370000200141fb026a201b29030037000020012002290390013700f302200120022903603702a003200141a8036a2000290300370200200141b0036a2003290300370200200141b8036a2004290300370200200141c0036a2009290300370200200141c8036a200b29030037020020024190016a41026a220b200741d0016a2d00003a00002002200741ce016a2f00003b0190012002200741e1016a2900003703c0012002200741e7016a2900003701c601200741d1016a2800002118200741d5016a2800002119200741d9016a280000211a200741dd016a280000211b200728028c03211c200141086a200741ef016a20072f0106220341796a220041216c109d08211d200141f4026a20074190036a2000410274109d08211e200141a0036a200741bc036a2003417a6a2209410274109d082117200741063b0106200120003b010602402009450d00410021002017210303402003280200220420003b010420042001360200200341046a21032009200041016a2200470d000b0b200220022f01900122003b0130200220022903c001370360200220022901c6013701662002200b2d000022033a0032200b20033a0000200220003b019001200220022903603703c001200220022901663701c601201541ffff037122034107490d01200841216c201d6a220041ba7e6a200041997e6a220320012f0106200841796a22006b41216c109e081a2003201036000f2003200f36000b2003200e3600072003200d360003200341026a20132d00003a0000200320022f012c3b000020032002290318370013200341196a200229011e370000201e2008417a6a220341027422046a201e20004102746a220920012f0106221520006b410274109e081a200920113602002001201541016a22093b01062008410274221520176a416c6a201720046a2204200941ffff0371220820036b410274109e081a2004200c36020020082003490d02200120156a4188036a2103034020032802002204200041016a22003b010420042001360200200341046a210320002008490d000c030b0b2007200841216c6a220341296a200341086a2201200020086b41216c109e081a200341176a2010360000200341136a200f3600002003410f6a200e3600002003410b6a200d3600002003410a6a2002412c6a41026a2d00003a0000200120022f012c3b00002003411b6a2002290318370000200341216a200229011e370000200741f4026a2203200841016a220041027422016a2003200841027422046a220320072f0106220920086b410274109e081a200320113602002007200941016a22033b01062004200741a0036a22086a41086a200820016a2201200341ffff0371220420006b410274109e081a2001200c360200201541ffff037120044f0d0720072000417f6a22004102746a41a4036a2103034020032802002201200041016a22003b010420012007360200200341046a210320002004490d000c080b0b200741086a200841216c6a220041216a200020072f010620086b41216c109e081a2000201036000f2000200f36000b2000200e3600072000200d360003200041026a20132d00003a0000200020022f012c3b000020002002290318370013200041196a200229011e370000200741f4026a2204200841016a220941027422156a2004200841027422006a220420072f0106221720086b410274109e081a200420113602002007201741016a22043b01062000200741a0036a22176a41086a201720156a2215200441ffff0371220420096b410274109e081a2015200c360200200320044f0d00200720006a41a4036a2100034020002802002203200841016a22083b010420032007360200200041046a210020042008470d000b0b200641016a21002014200b2d00003a0000200220022f0190013b0110200220022903c001370300200220022901c6013701060240200728020022030d002018210d201b2110201a210f2019210e2001210c201c21110c050b20072f010421152018210d201b2110201a210f2019210e20032107201c21112001210c200021060c000b0b20012001280200417f6a2203360200200041086a280200200041106a2802004102746a41f4026a211220030d030240200128020c2200450d0020002000280200417f6a360200200128020c22002802000d000240200028020c450d002000410c6a10ae02200128020c21000b20002000280204417f6a360204200128020c22002802040d00200010350b20012001280204417f6a220036020420000d03200110350c030b2003200441216c6a220041296a200041086a220c200b20046b41216c109e081a200041286a20072d00003a0000200041206a2008290300370000200041186a2009290300370000200041106a200a290300370000200c2002290360370000200320044102746a220041f8026a200041f4026a221220032f010620046b410274109e081a20122001360200200320032f010641016a3b01060c020b41d684cc00413541c086cc00103f000b200241b9016a4100360000200241b1016a4200370000200241a9016a4200370000200241a1016a420037000020024199016a42003700002002420037009101200241c0016a410272410041ed02109f081a200241e0006a41086a22014200370300200241e0006a41106a22044200370300200241e0006a41186a22074200370300200241e0006a41206a2208420037030020024188016a22094200370300200241306a41256a220a20024190016a41256a290000370000200241306a41206a220b20024190016a41206a290000370300200241306a41186a220620024190016a41186a290000370300200241306a41106a221520024190016a41106a290000370300200241306a41086a221720024190016a41086a29000037030020024200370360200220022900900137033041d00310332203450d0120034100360200200341046a200241c0016a41ef02109d081a20034198036a200a29000037000020034193036a200b2903003700002003418b036a200629030037000020034183036a2015290300370000200341fb026a2017290300370000200320022903303700f302200320022903603702a003200341a8036a2001290300370200200341b0036a2004290300370200200341b8036a2007290300370200200341c0036a2008290300370200200341c8036a20092903003702002003200528020022013602a0032005200336020020052005280204220441016a360204200141003b010420012003360200200241e0006a41026a200241106a41026a2d00003a0000200220022f01103b0160200220022903003703c001200220022901063701c60120042000470d0220032f01062201410a4b0d032003200141216c6a2200410a6a200241e0006a41026a2d00003a0000200041086a20022f01603b0000200041176a2010360000200041136a200f3600002000410f6a200e3600002000410b6a200d3600002000411b6a20022903c001370000200041216a20022901c6013700002003200141016a22004102746a41a0036a200c360200200320014102746a41f4026a2011360200200320003b0106200c20003b0104200c20033602000b200241b0046a240020120f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000baf0b010c7f230041306b220224002002410036021020024204370308200241003602202002420437031802400240024002400240200128020041016a220341014d0d0020012003360200200241086a4100410110860120022802082204200228021022034102746a20013602002002200341016a22053602102001280200220341016a41014d0d002001200341016a360200200241186a4100410110860120022802182206200228022022034102746a20013602002002200341016a2207360220200128020041016a220841014d0d00200120083602000340200841016a220341014d0d0120012003360200200128020841016a220941004c0d0220012009360208200128020c2208450d0502402007450d002007410274210a200841106a210b20062109034002400240200928020022032008460d00200328020841016a220c41004c0d072003200c3602082008280208220c41016a220d41004c0d082008200d360208200341106a200b412010a0080d0120032d003020082d0030470d012008200c36020820032003280208417f6a3602080b20012802002103200128020821090c080b200941046a21092008200c36020820032003280208417f6a360208200a417c6a220a0d000b200128020c21080b200828020041016a220341014d0d012008200336020002402005200228020c470d00200241086a2005410110860120022802082104200228021021050b200420054102746a20083602002002200541016a2205360210200128020c220328020041016a220841014d0d012003200836020020012001280200417f6a2208360200024020080d000240200128020c2208450d0020082008280200417f6a360200200128020c22082802000d000240200828020c450d002008410c6a10ae02200128020c21080b20082008280204417f6a360204200128020c22082802040d00200810350b20012001280204417f6a220836020420080d00200110350b200328020041016a220841014d0d012003200836020002402007200228021c470d00200241186a2007410110860120022802182106200228022021070b200620074102746a200336020020012001280208417f6a36020820012001280200417f6a22083602002002200741016a2207360220024020080d000240200128020c2208450d0020082008280200417f6a360200200128020c22082802000d000240200828020c450d002008410c6a10ae02200128020c21080b20082008280204417f6a360204200128020c22082802040d00200810350b20012001280204417f6a220836020420080d00200110350b20032802002108200321010c000b0b00000b41ac96cc004118200241286a41808bc50041d496cc001046000b41ac96cc004118200241286a41e495ca0041d496cc001046000b41ac96cc004118200241286a41e495ca0041d496cc001046000b20012003417f6a220336020020012009417f6a360208024020030d000240200128020c2203450d0020032003280200417f6a360200200128020c22032802000d000240200328020c450d002003410c6a10ae02200128020c21030b20032003280204417f6a360204200128020c22032802040d00200310350b20012001280204417f6a220336020420030d00200110350b20002001360200200020022903083702042000410c6a200241106a28020036020002402007450d0020074102742108200621030340200328020022092009280200417f6a3602000240200328020022092802000d000240200928020c2201450d0020012001280200417f6a360200200928020c22012802000d000240200128020c450d002001410c6a10ae02200928020c21010b20012001280204417f6a360204200928020c22092802040d00200910350b200328020022092009280204417f6a360204200328020022092802040d00200910350b200341046a21032008417c6a22080d000b0b0240200228021c41ffffffff0371450d00200610350b200241306a24000b5c01017f200028020022012001280200417f6a3602000240200028020022012802000d000240200128020c450d002001410c6a10ae02200028020021010b20012001280204417f6a360204200028020022002802040d00200010350b0ba50201047f230041106b22022400410021030240024002400240024002400240200028020841016a220441004c0d00200028020c2205450d0620002004360208024020052001470d00410121030c060b200528020841016a220341004c0d01200520033602082001280208220441016a220341004c0d0220012003360208200541106a200141106a412010a0080d034101210320052d003020012d0030470d030c040b41ac96cc004118200241086a41808bc50041d496cc001046000b41ac96cc004118200241086a41808bc50041d496cc001046000b41ac96cc004118200241086a41808bc50041d496cc001046000b410021030b2001200436020820052005280208417f6a360208200028020821040b20002004417f6a3602080b200241106a240020030b80150c047f027e027f067e017f037e037f027e037f037e037f017e230041e0036b2204240020032802002105200441306a2001108e02200441b0016a2004280230220620042802382207108f0220042903b001210842002109200442003703b001200441f8016a280200210a20042d00fc01210b02400240200842015122030d00200441c0006a41306a4200370300200441c0006a41286a4200370300200441c0006a41206a4200370300200441c0006a41186a4200370300200441d0006a4200370300200441c8006a4200370300200442003703404200210c4200210d4200210e4200210f0c010b200441e8016a2903002110200441b0016a41306a2903002111200441b0016a41206a290300210c200441b0016a41186a2903002109200441f0016a290300210f20042903c001210e20042903b801210d200441c0006a41206a200441b0016a41286a290300370300200441c0006a41286a2011370300200441c0006a41306a2010370300200441d0006a20093703002004200c3703582004200d3703402004200e3703480b427f200e200c7c200d20097c220c200d542212ad7c220920122009200e542009200e511b22121b2113427f200c20121b21144200210c024002402002290300221542ffffe883b1de1656200241086a29030022094200522009501b0d00201420138450450d0041002103410021124200210e410121020c010b4200200e20097c200d20157c2210200d542202ad7c220d2002200d200e54200d200e511b22021b210e4200201020021b2111024020024101470d002011421088200e42308684210c200e421088210e2011420888a721122011a72103410121020c010b200441b0026a41186a22164200370300200441b0026a41106a22174200370300200441b0026a41086a22124200370300200442003703b00241b6fdc600ad4280808080800184220c100122182900002119200441d0036a41086a2202201841086a290000370300200420193703d0032018103520122002290300370300200420042903d0033703b00241e489c200ad4280808080d00184221910012218290000211a2002201841086a2900003703002004201a3703d00320181035201720042903d003221a370300200441b0036a41086a221b2012290300370300200441b0036a41106a221c201a370300200441b0036a41186a221d2002290300370300200420042903b0023703b003200441186a200441b0036a412010d701200441186a41106a290300211a2004290320211e20042802182118201642003703002017420037030020124200370300200442003703b002200c10012216290000210c2002201641086a2900003703002004200c3703d0032016103520122002290300370300200420042903d0033703b002201910012216290000210c2002201641086a2900003703002004200c3703d00320161035201720042903d003220c370300201b2012290300370300201c200c370300201d2002290300370300200420042903b0023703b0032004201a420020181b3703b8022004201e420020181b3703b002200441b0036aad4280808080800484221a200441b0026aad221e428080808080028410022004200e37034820042011370340200441f8006a41186a200441d0006a220241086a290300220c370300200441f8006a41206a2212200241106a290300370300200441a0016a2218200241186a290300370300200441a8016a2216200241206a2903003703002004200e37038001200420113703782004200229030022193703880102400240427f201120197c221920192011542202200e200c7c2002ad7c220c200e54200c200e511b22021b220e428080e983b1de16544100427f200c20021b220c501b0d00200441f8006a41106a290300210e2016290300210c2018290300211120122903002119200429038001211a2004290378211e4201211f20042903900121200c010b02400240200e200c8450450d004200211f0c010b4200211f200441b0026a41186a22184200370300200441b0026a41106a22164200370300200441b0026a41086a22124200370300200442003703b00241b6fdc600ad428080808080018422111001221b2900002119200441d0036a41086a2202201b41086a290000370300200420193703d003201b103520122002290300370300200420042903d0033703b00241e489c200ad4280808080d0018422191001221b29000021202002201b41086a290000370300200420203703d003201b1035201720042903d003370000201741086a221d2002290300370000200441b0036a41086a22212012290300370300200441b0036a41106a22222016290300370300200441b0036a41186a22232018290300370300200420042903b0023703b0032004200441b0036a412010d701200441106a2903002120200429030821242004280200211b201842003703002016420037030020124200370300200442003703b00220111001221c29000021112002201c41086a290000370300200420113703d003201c103520122002290300370300200420042903d0033703b00220191001221c29000021112002201c41086a290000370300200420113703d003201c1035201720042903d003370000201d2002290300370000202120122903003703002022201629030037030020232018290300370300200420042903b0023703b0032004420020204200201b1b2211200c7d20244200201b1b2219200e54ad7d22202019200e7d2224201956202020115620202011511b22021b3703b80220044200202420021b3703b002201a201e42808080808002841002200441e8026a200c370300200441e0026a200e370300201241013a0000200441b9026a2005290000370000200441c1026a200541086a290000370000200441c9026a200541106a290000370000200441d1026a200541186a290000370000200441033a00b00241b0b4cc004100200441b0026a10d4010b0b200441d8016a2019370300200441e0016a2011370300200441c0016a201a370300200441e8016a200c370300200441c8016a200e370300200420203703d0012004200f3703f0012004201e3703b801410021022004200b4100200842015122121b3a00fc012004200a410020121b3602f8012004201f4201512212ad3703b001201420138450ad423086210c4200210e024020120d002007ad4220862006ad841007410021120c010b200420073602b402200420063602b002200441b8016a200441b0026a10e70241012112410021020b02402004280234450d00200610350b024002402002450d00200041106a200e421086200c4230888437030020002012ad42ff01834208862003ad42ff018384200c421086843703084201210e0c010b200c423088200e42108684210e024002400240200341ff017122020d00201241ff0171450d0041032103200441b0026a21020c010b2002450d01201241ff01710d0141042103200441b0016a21020b200241086a20033a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b2000200e370308200041286a2009370300200041206a2015370300200041186a200d370300200041106a20103703004200210e0b2000200e370300200441e0036a24000bd60302057f047e230041f0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022030d00200041003a00000c010b200241186a28020021042002280214210541002101200241003a006802400240034020042001460d01200241c8006a20016a200320016a2d00003a00002002200141016a22063a00682006210120064120470d000b200241206a41186a200241c8006a41186a2903002207370300200241206a41106a200241c8006a41106a2903002208370300200241206a41086a200241c8006a41086a290300220937030020022002290348220a370320200041196a2007370000200041116a2008370000200041096a20093700002000200a370001410121010c010b0240200141ff0171450d00200241003a00680b410021012002410036022820024201370320200241093602442002200241086a3602402002200241206a36026c200241dc006a41013602002002420137024c200241c888c2003602482002200241c0006a360258200241ec006a41e88ac500200241c8006a10431a200235022842208620023502208410062002280224450d00200228022010350b200020013a00002005450d00200310350b200241f0006a24000ba11005097f037e027f037e037f230041f0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022040d00200042023703000c010b200328021421052003200341186a28020022063602a401200320043602a00141002107200341003a00e8022004210220062101024002400240024002400240024002400340200721082001450d01200341c8026a20086a20022d00003a000020032001417f6a22013602a4012003200241016a22023602a0012003200841016a22073a00e80220074120470d000b200341a8016a41086a200341c8026a41086a290300370300200341a8016a41106a200341c8026a41106a290300370300200341a8016a41186a200341c8026a41186a290300370300200320032903c8023703a80141002107200341003a00e802200620086b417e6a2108034020012007460d02200341c8026a20076a200220076a22062d00003a00002003200641016a3602a0012003200741016a22063a00e802200320083602a4012008417f6a21082006210720064120470d000b200341c8016a41086a200341c8026a41086a290300370300200341c8016a41106a200341c8026a41106a290300370300200341c8016a41186a200341c8026a41186a290300370300200320032903c8023703c80120012006460d05200220066a22092d00002102200320083602a4012003200941016a22073602a001200241014b0d0520020e020302030b200841ff0171450d04200341003a00e8020c040b200741ff0171450d03200341003a00e8020c030b200941116a210741002102200341003a00e802200120066b416f6a21010240034020082002460d01200341c8026a20026a200920026a41016a2d00003a000020032001410f6a3602a4012003200741716a3602a0012003200241016a22063a00e8022001417f6a2101200741016a21072006210220064120470d000b200341a8026a41186a2202200341c8026a41186a290300370300200341a8026a41106a220a200341c8026a41106a290300370300200341a8026a41086a220b200341c8026a41086a290300370300200320032903c8023703a802200820066b4110490d03200920066a220841096a290000210c200841016a290000210d20034188026a41086a200b29030037030020034188026a41106a200a29030037030020034188026a41186a2002290300370300200320013602a401200320073602a001200320032903a802370388024201210e200121080c020b200241ff0171450d02200341003a00e8020c020b4200210e0b200341e8016a41186a20034188026a41186a290300370300200341e8016a41106a20034188026a41106a290300370300200341e8016a41086a20034188026a41086a29030037030020032003290388023703e8012008450d0020072d0000210120032008417f6a22023602a4012003200741016a3602a001200141014b0d00410021060240024020010e020100010b20024104490d012007280001210920032008417b6a3602a4012003200741056a3602a001410121060b200341c8026a200341a0016a10aa0220032802c8020d010b200341003602b002200342013703a8022003410936028c022003200341086a360288022003200341a8026a3602e801200341dc026a4101360200200342013702cc02200341c888c2003602c802200320034188026a3602d802200341e8016a41e88ac500200341c8026a10431a20033502b00242208620033502a802841006024020032802ac02450d0020032802a80210350b4202210e0c010b200341f0006a41086a2202200341c8026a41086a2201280200360200200341d0006a41086a2207200341a8016a41086a290300370300200341d0006a41106a2208200341a8016a41106a290300370300200341d0006a41186a220a200341a8016a41186a290300370300200341306a41086a220b200341c8016a41086a290300370300200341306a41106a220f200341c8016a41106a290300370300200341306a41186a2210200341c8016a41186a290300370300200320032903c802370370200320032903a801370350200320032903c80137033020034180016a41186a200341e8016a41186a290300221137030020034180016a41106a200341e8016a41106a290300221237030020034180016a41086a200341e8016a41086a290300221337030020012013370300200341c8026a41106a22142012370300200341c8026a41186a22152011370300200341206a41086a22162002280200360200200320032903e801221137038001200320113703c80220032003290370370320200341a8026a41186a2202200a290300370300200341a8026a41106a220a2008290300370300200341a8026a41086a22082007290300370300200320032903503703a80220034188026a41186a2207201029030037030020034188026a41106a2210200f29030037030020034188026a41086a220f200b2903003703002003200329033037038802200041306a200c370300200041286a200d3703002000413c6a2009360200200041386a2006360200200041206a2015290300370300200041186a2014290300370300200041106a2001290300370300200020032903c802370308200041c0006a2003290320370300200041c8006a2016280200360200200020032903a80237024c200041d4006a2008290300370200200041dc006a200a290300370200200041e4006a200229030037020020004184016a2007290300370200200041fc006a2010290300370200200041f4006a200f290300370200200020032903880237026c0b2000200e3703002005450d00200410350b200341f0026a24000be00903067f067e057f230041a0016b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022040d00200041023a00000c010b2003280214210502400240200341186a2802002206450d0020042d0000220141014b0d002006417f6a210202400240024020010e020001000b20024104490d022004280001210741002101200341003a0098012006417b6a21080240034020082001460d01200341f8006a20016a200420016a41056a2d00003a00002003200141016a22023a0098012002210120024120470d000b200341d8006a41186a200341f8006a41186a290300370300200341d8006a41106a200341f8006a41106a290300370300200341d8006a41086a200341f8006a41086a290300370300200320032903783703582006417b6a2002460d03200420026a220141056a2d0000220841034f0d03200620026b2202417a6a4104490d03200241766a4110490d03200241666a4110490d03200241566a4110490d03200141066a2800002106200141126a29000021092001410a6a290000210a200341286a41086a200341d8006a41086a290300370300200341286a41106a200341d8006a41106a290300370300200341286a41186a200341d8006a41186a29030037030020032003290358370328200320032800503602202003200341d3006a280000360023200141326a290000210b2001412a6a290000210c200141226a290000210d2001411a6a290000210e200320032f014e3b014c410021010c020b200141ff0171450d02200341003a0098010c020b2002450d0120042d0001220141014b0d012006417e6a2108410021020240024020010e020100010b410121020b200841034d0d01200341286a41086a200341f8006a41086a290300370300200341286a41106a200341f8006a41106a290300370300200341286a41186a200341f8006a41186a29030037030020032003290378370328200320032800583602202003200341d8006a41036a2800003600232004280002210f410121010b200341f8006a41086a2210200341286a41086a290300370300200341f8006a41106a2211200341286a41106a290300370300200341f8006a41186a2212200341286a41186a290300370300200320032f014c22133b015020032003290328370378200320032802203602582003200328002336005b200041306a200b370000200041286a200c370000200041206a200d370000200041186a200e370000200041106a2009370000200041086a200a370000200020023a00012000413c6a2006360000200041386a2007360000200041046a200f360000200041026a20133b0000200041e0006a20083a0000200041c0006a2003290378370000200041c8006a2010290300370000200041d0006a2011290300370000200041d8006a2012290300370000200041e1006a2003280258360000200041e4006a200328005b3600000c010b20034100360260200342013703582003410936022c2003200341086a3602282003200341d8006a3602502003418c016a41013602002003420137027c200341c888c2003602782003200341286a36028801200341d0006a41e88ac500200341f8006a10431a200335026042208620033502588410060240200328025c450d00200328025810350b410221010b200020013a00002005450d00200410350b200341a0016a24000b880504057f017e027f017e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c2010240024002400240200328021022040d00200041003602000c010b200328021421052003200341186a280200360224200320043602202003200341206a10c4010240024020032802000d00200328020422062003280224220741186e2201200120064b1bad42187e2208422088a70d032008a72202417f4c0d030240024020020d00410821090c010b200210332209450d050b4100210120034100360250200320093602482003200241186e36024c0240024002402006450d00034020074104490d0320032003280220220241046a3602202007417c6a4110490d022002280000210a2003200241146a3602202002410c6a29000021082002290004210b02402001200328024c470d00200341c8006a20014101109c0120032802482109200328025021010b2007416c6a21072009200141186c6a2202200a3602002002200b370308200241106a20083703002003200141016a22013602502006417f6a22060d000b200320073602240b2009450d022000200329024c370204200020093602000c030b2007417c6a21070b20032007360224200328024c2201450d00200141186c450d00200910350b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602000b2005450d00200410350b200341e0006a24000f0b1044000b1045000bbe0201017f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602000c010b200328021421022003200341106a41086a28020036022420032001360220200341c8006a200341206a10c3010240024020032802480d0020034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602000c010b20002003290348370200200041086a200341c8006a41086a2802003602000b2002450d00200110350b200341e0006a24000b901304057f017e107f027e230041e0026b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c2010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c4010240024020022802000d00200228020422052002280224220641c4006e2201200120054b1bad42c4007e2207422088a70d032007a72201417f4c0d030240024020010d00410421080c010b200110332208450d050b20024100360230200220083602282002200141c4006e36022c0240024002402005450d00200241b8026a41077221094100210a4100210b03402006450d0220022006417f6a220c36022420022002280220220d41016a360220200d2d0000220141014b0d0202400240024020010e020001000b200c4104490d04200241f4016a41026a200241f8016a41026a2d00003a0000200241d8016a41086a20024198026a41086a290200370300200241d8016a41106a20024198026a41106a290200370300200241d8016a41186a20024198026a41186a2d00003a0000200241b8016a41086a200241b8026a41086a290100370300200241b8016a41106a200241b8026a41106a290100370300200241b8016a41186a200241b8026a41186a290100370300200220022f00f8013b01f40120022002290298023703d801200220022901b8023703b80120022006417b6a220e3602242002200d41056a360220200d280001210f200220022f0194023b01b601410021100c010b41002111200241003a00d8022006417e6a2110024002400240024002400340200c20112201460d01200241b8026a20016a200d20016a221141016a2d00003a00002002201141026a3602202002200141016a22113a00d802200220103602242010417f6a211020114120470d000b20024194026a41026a221220022d00ba023a0000200241f8016a41086a2213200941086a290000370300200241f8016a41106a2214200941106a290000370300200241f8016a41186a2215200941186a2d00003a0000200220022f01b8023b019402200220092900003703f8014100210e200c2011460d0220022800bb022116200220103602242002200d20116a220c41026a360220200c41016a2d0000221141014d0d012010210e410221100c050b0240200141ff0171450d00200241003a00d8020b4100210e410221100c040b024020110e020200020b41002111200241003a00d802200620016b417c6a21010240034020102011460d01200241b8026a20116a200c20116a220d41026a2d00003a00002002200d41036a3602202002201141016a220d3a00d802200220013602242001417f6a2101200d2111200d4120470d000b20024198026a41186a200241b8026a41186a29030037030020024198026a41106a200241b8026a41106a29030037030020024198026a41086a200241b8026a41086a290300370300200220022903b802370398022010200d6b210e410121170c030b0240201141ff0171450d00200241003a00d8020b4100210e0b410221100c020b410021172010210e0b200241b8016a41186a20024198026a41186a290300370300200241b8016a41106a20024198026a41106a290300370300200241b8016a41086a20024198026a41086a290300370300200241f4016a41026a20122d00003a0000200241d8016a41086a2013290300370300200241d8016a41106a2014290300370300200241d8016a41186a20152d00003a000020022002290398023703b801200220022f0194023b01f401200220022903f8013703d801410121102016210f0b200241b2016a41026a2201200241f4016a41026a2d00003a000020024198016a41086a2211200241d8016a41086a29030037030020024198016a41106a220d200241d8016a41106a29030037030020024198016a41186a220c200241d8016a41186a2d00003a0000200241f8006a41086a2206200241b8016a41086a290300370300200241f8006a41106a2212200241b8016a41106a290300370300200241f8006a41186a2213200241b8016a41186a290300370300200220022f01f4013b01b201200220022903d80137039801200220022903b801370378200220022f01b6013b017620104102460d03200b41016a210b200241f2006a41026a221420012d00003a0000200241d8006a41086a22152011290300370300200241d8006a41106a2211200d290300370300200241d8006a41186a220d200c2d00003a0000200241386a41086a220c2006290300370300200241386a41106a22062012290300370300200241386a41186a22122013290300370300200220022f01b2013b0172200220022903980137035820022002290378370338200220022f01763b01360240200a200228022c470d00200241286a200a4101109f01200228022821082002280230210a0b2008200a41c4006c6a220120103a00002001200f360004200141036a20142d00003a0000200120022f01723b0001200d2d00002110201129030021072015290300211820022903582119200120173a002120012019370008200141106a2018370000200141186a2007370000200141206a20103a000020012002290338370022200c29030021072006290300211820122903002119200120022f01363b00422001413a6a2019370000200141326a20183700002001412a6a20073700002002200a41016a220a360230200e2106200b2005470d000b0b2008450d022000200229022c370204200020083602000c030b200241b2016a41026a200241f4016a41026a2d00003a000020024198016a41086a200241d8016a41086a29030037030020024198016a41106a200241d8016a41106a29030037030020024198016a41186a200241d8016a41186a2d00003a0000200241f8006a41086a200241b8016a41086a290300370300200241f8006a41106a200241b8016a41106a290300370300200241f8006a41186a200241b8016a41186a290300370300200220022f01f4013b01b201200220022903d80137039801200220022903b801370378200220022f01b6013b01760b200228022c2201450d00200141c4006c450d00200810350b200241003602a0022002420137039802200241093602bc012002200241086a3602b801200220024198026a360278200241cc026a4101360200200242013702bc02200241c888c2003602b8022002200241b8016a3602c802200241f8006a41e88ac500200241b8026a10431a20023502a0024220862002350298028410060240200228029c02450d0020022802980210350b200041003602000b2004450d00200310350b200241e0026a24000f0b1044000b1045000bd20402067f047e230041f0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822030d00200041023a00000c010b200228020c210402400240200241106a2802002205450d0020032d0000220641014b0d004100210102400240024020060e020100010b41002101200241003a0068200341016a21072005417f6a2106034020062001460d02200241c8006a20016a200720016a2d00003a00002002200141016a22053a00682005210120054120470d000b200241186a41186a200241c8006a41186a290300370300200241186a41106a200241c8006a41106a290300370300200241186a41086a200241c8006a41086a29030037030020022002290348370318410121010b200241c8006a41186a200241186a41186a2903002208370300200241c8006a41106a200241186a41106a2903002209370300200241c8006a41086a200241186a41086a290300220a37030020022002290318220b370348200041196a2008370000200041116a2009370000200041096a200a3700002000200b3700010c020b200141ff0171450d00200241003a00680b20024100360220200242013703182002410936023c200220023602382002200241186a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235022042208620023502188410060240200228021c450d00200228021810350b410221010b200020013a00002004450d00200310350b200241f0006a24000ba90d03047f017e147f230041e00c6b220324002003200236021c20032001360218200341206a2002ad4220862001ad84100510c2010240024002400240200328022022040d00200041003602000c010b200328022421052003200341286a28020036023420032004360230200341106a200341306a10c40102400240024020032802100d00200328021422062003280234220141d0026e2202200220064b1bad42d0027e2207422088a70d052007a72208417f4c0d050240024020080d00410821090c010b200810332209450d050b4100210220034100360240200320093602382003200841d0026e36023c02402006450d002006417f6a21080340024002402001450d002003280230220a2d0000210b20032001417f6a220c3602342003200a41016a360230200b41014b0d00410221060240200b0e020200020b024002400240200c0d00410221060c010b200a2d0001210b20032001417e6a220c360234410221062003200a41026a36023002400240200b41014b0d0041002101024002400240200b0e020100010b200341086a200341306a10c40120032802080d022003280234200328020c220b490d02200b417f4c0d0f02400240200b0d004100210a410121010c010b200b10392201450d0f2003280234200b490d0220012003280230200b109d081a2003280234220a200b490d042003200a200b6b36023420032003280230200b6a360230200b210a0b2001450d02200bad422086200aad8421072003280234210c0b2007a7210b02400240024002400240200c450d002003280230220d2d0000210a2003200c417f6a3602342003200d41016a360230200341b00a6a200341306a10b90220032802b00a411b460d0320034180086a200341b00a6a41b002109d081a2003280234220c450d042003280230220e2d0000210d2003200c417f6a220f3602342003200e41016a360230200d41014b0d0441002106200d0e020201020b2001450d07200b450d070c040b200f4104490d02200e280001210d2003200e41056a3602302003200c417b6a220636023420064104490d02200e28000521102003200c41776a3602342003200e41096a36023041012106200d21110b2007422088a72112200341b00a6a20034180086a41b002109d081a200320032800f9073602f0072003200341f9076a41036a2800003600f3070c060b2001450d04200b450d040c010b20034180086a10ba022001450d01200b450d010b200110350b2013210a2014210b20152101410221060c020b200b200a41a4f0cb001059000b2013210a2014210b201521010b200341c0056a200341b00a6a41b002109d081a200320032800f3073600bb05200320032802f0073602b805024020064102460d00200341b00a6a200341c0056a41b002109d081a200320032800bb0536008308200320032802b8053602800820012116200b211720122118200a21192010211a2011211b200a2113200b2114200121150c020b200a2113200b2114200121150b410321060b20034188036a200341b00a6a41b002109d081a200320032800830836008303200320032802800836028003024020064103460d00200341d0006a20034188036a41b002109d081a200320032800830336004b200320032802800336024802402002200328023c470d00200341386a2002410110a70120032802382109200328024021020b2009200241d0026c6a200341d0006a41b002109d08220141c8026a20193a0000200141c4026a201a3602002001201b3602c002200120063602bc02200120183602b802200120173602b402200120163602b002200141c9026a2003280248360000200141cc026a200328004b3600002003200241016a22023602402008450d022008417f6a2108200328023421010c010b0b02402002450d00200241d0026c21022009210103400240200141bc026a2802004102460d000240200141b0026a2802002206450d00200141b4026a280200450d00200610350b200110bb020b200141d0026a2101200241b07d6a22020d000b0b200328023c2201450d01200141d0026c450d01200910350c010b20090d010b20034100360288082003420137038008200341093602c4052003200341186a3602c005200320034180086a36028803200341c40a6a4101360200200342013702b40a200341c888c2003602b00a2003200341c0056a3602c00a20034188036a41e88ac500200341b00a6a10431a2003350288084220862003350280088410060240200328028408450d0020032802800810350b200041003602000c010b2000200329023c370204200020093602000b2005450d00200410350b200341e00c6a24000f0b1045000b1044000bd2870307087f027e0b7f087e057f027e1b7f23004190116b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005411b4b0d25200141046a210720050e1c0102030405060708090a0b0c0d0e0f10111213141516171819222324010b2000411b3602000c600b2006450d5e20042d0001210520012003417e6a22083602042001200441026a360200200541094b0d5e410a2109024002400240024002400240024002400240024020050e0a00010203040506070809000b20084104490d672004280002210620012003417a6a3602042001200441066a3602002006418194ebdc034f0d67410121090c080b2002200110c40120022802000d66200728020020022802042204490d662004417f4c0d2c0240024020040d004200210a410121060c010b200410392206450d2120072802002004490d66200620012802002004109d081a200128020422032004490d2e2001200320046b3602042001200128020020046a3602002004ad210a0b2006450d66200a2004ad42208684210a410221090c070b20084108490d652004290002210a2001200341766a36020420012004410a6a360200410321090c060b200241086a200110c40120022802080d642007280200200228020c2204490d642004417f4c0d2a0240024020040d004200210a410121060c010b200410392206450d1f20072802002004490d64200620012802002004109d081a200128020422032004490d2d2001200320046b3602042001200128020020046a3602002004ad210a0b2006450d64200a2004ad42208684210a410421090c050b200241106a200110c40120022802100d63200728020020022802142204490d632004417f4c0d290240024020040d004200210a410121060c010b200410392206450d1e20072802002004490d63200620012802002004109d081a200128020422032004490d2d2001200320046b3602042001200128020020046a3602002004ad210a0b2006450d63200a2004ad42208684210a410521090c040b2008450d6220042d0002210520012003417d6a22073602042001200441036a360200200541014b0d624106210941002106024020050e020400040b20074104490d622004350003210a2001200341796a22053602042001200441076a36020020054104490d622004350007210b2001200341756a36020420012004410b6a360200200b422086200a84210a410121060c030b200241286a200110c40120022802280d61200228022c2209200728020041186e2204200420094b1bad42187e220a422088a70d27200aa72204417f4c0d270240024020040d00410421060c010b200410332206450d1c0b41002105200241003602b80c200220063602b00c2002200441186e3602b40c024002400240024002402009450d000340200241206a200110c40120022802200d05200728020020022802242204490d052004417f4c0d2d0240024020040d004100210c410121080c010b200410392208450d2220072802002004490d05200820012802002004109d081a200128020422032004490d322001200320046b3602042001200128020020046a3602002004210c0b200241186a200110c40120022802180d032007280200200228021c2203490d032003417f4c0d2d0240024020030d004100210d4101210e0c010b20031039220e450d2220072802002003490d03200e20012802002003109d081a2001280204220d2003490d332001200d20036b3602042001200128020020036a3602002003210d0b2004ad422086200cad84210a2003ad422086200dad84210b0240200520022802b40c470d00200241b00c6a2005410110970120022802b00c210620022802b80c21050b2006200541186c6a2204200e36020c2004200a37020420042008360200200441106a200b3702002002200541016a22053602b80c2009417f6a22090d000b0b2006450d6520022902b40c210a410721090c060b200e10350b200c450d010b200810350b02402005450d00200541186c21042006210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141186a2101200441686a22040d000b0b20022802b40c2201450d61200141186c450d610c600b200241386a200110c40120022802380d60200228023c22092007280200410c6e2204200420094b1bad420c7e220a422088a70d26200aa72204417f4c0d260240024020040d00410421060c010b200410332206450d1b0b41002103200241003602b80c200220063602b00c20022004410c6e3602b40c0240024002402009450d000340200241306a200110c40120022802300d03200728020020022802342204490d032004417f4c0d2a0240024020040d0041002108410121050c010b200410392205450d1f20072802002004490d03200520012802002004109d081a200128020422082004490d312001200820046b3602042001200128020020046a360200200421080b2004ad4220862008ad84210a0240200320022802b40c470d00200241b00c6a2003410110870120022802b00c210620022802b80c21030b20062003410c6c6a2204200a370204200420053602002002200341016a22033602b80c2009417f6a22090d000b0b2006450d6220022902b40c210a410821090c030b200510350b02402003450d002003410c6c21042006210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b20022802b40c2201450d602001410c6c0d5f0c600b200241c0006a200110c40120022802400d5f200728020020022802442204490d5f2004417f4c0d250240024020040d004200210a410121060c010b200410392206450d1a20072802002004490d5f200620012802002004109d081a200128020422032004490d2d2001200320046b3602042001200128020020046a3602002004ad210a0b2006450d5f200a2004ad42208684210a410921090b20004100360200200041106a200a3702002000410c6a2006360200200041086a2009360200200041186a200241e00e6a419802109d081a0c5f0b2006450d5a20042d0001210520012003417e6a22063602042001200441026a360200200541044b0d5a02400240024002400240024002400240024020050e050001020304000b200241e00e6a200110c80520022802e00e2204450d622004411876210f20022902e40e220aa722034118762110200a422088a7210d41012111410021120c050b20064102490d6120042f0002210520012003417c6a3602042001200441046a360200200241e00e6a200110b90220022802e00e2101200241b00c6a200241e00e6a41047241ac02109d081a2001411b460d61200241e00e6a200241b00c6a41ac02109d081a41b002103322040d030c620b20064102490d6020042f0002210520012003417c6a3602042001200441046a360200200241e00e6a200110c30120022802e00e2204450d6020022802e40e2103024020072802002206450d00200241e80e6a280200210d200128020022092d0000210720012006417f6a22083602042001200941016a360200200741014b0d004200210a4100210e0240024020070e020100010b20084104490d012009350001210a20012006417b6a22073602042001200941056a36020020074104490d01200928000521132001200641776a3602042001200941096a360200200a422086210a4101210e0b200241e00e6a200110b90220022802e00e2106200241b00c6a200241e00e6a41047241ac02109d081a2006411b460d06200241e00e6a200241b00c6a41ac02109d081a41b00210332201450d62200a200ead84210a20012006360200200141046a200241e00e6a41ac02109d081a200341187621102004411876210f20054180fe03714108762112410321110c040b200341ffffff3f71450d600c5f0b20064102490d5f20042f0002210820012003417c6a3602042001200441046a360200200241e00e6a200110c30120022802e00e2206450d5f20022802e40e2109024020072802002204450d00200241e80e6a2802002107200128020022052d0000210320012004417f6a220d3602042001200541016a360200200341014b0d004100210e0240024020030e020100010b200d4104490d012005280001210c20012004417b6a22033602042001200541056a36020020034104490d01200528000521142001200441776a220d3602042001200541096a3602004101210e0b41002103200241003a00800f200d417f6a2104024003402004417f460d01200241e00e6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00800f2004417f6a21042005210320054120470d000b200220022800e30e3600c30b200220022802e00e22153602c00b20022900e70e220aa72203411876211020022800c30b2204411876210f20022f00c10b2205410876211220022900f70e220b422088a72101200a422088a7210d200241ef0e6a290000210a200241ff0e6a2d00002116200ba72113410421110c050b0240200341ff0171450d00200241003a00800f0b200941ffffff3f71450d60200610350c600b200941ffffff3f71450d5f200610350c5f0b20064102490d5e20042f0002210820012003417c6a3602042001200441046a360200200241e00e6a200110c30120022802e00e2206450d5e20022802e40e21090240200728020022034104490d00200241e80e6a28020021072001280200220d280000210e20012003417c6a22043602042001200d41046a36020020044104490d00200d280004210c2001200341786a22143602042001200d41086a36020041002104200241003a00800f200341776a21030240034020142004460d01200241e00e6a20046a200d20046a220541086a2d00003a0000200120033602042001200541096a3602002002200441016a22053a00800f2003417f6a21032005210420054120470d000b200220022800e30e3600c30b200220022802e00e22153602c00b20022801c20b2212410876210420022900f70e2217422088a7210120022900e70e220b422088a7210d200b421888a72110200241ef0e6a290000210a200241ff0e6a2d0000211620022d00c10b210520022d00c60b210f2017a72113200ba72103410521110c040b0240200441ff0171450d00200241003a00800f0b200941ffffff3f71450d5f200610350c5f0b200941ffffff3f71450d5e200610350c5e0b20042001360200200441046a200241e00e6a41ac02109d081a2004411876210f20054180fe037141087621122002280288092113200228028408210c200228028808211441022111410021100b0b200020153a0005200020113a0004200041013602002000413c6a2014360200200041386a200c360200200041346a200e360200200041306a20073602002000412c6a2009360200200041286a2006360200200041266a20083b0100200041246a20163a0000200041206a20013602002000411c6a2013360200200041146a200a370200200041106a200d3602002000410c6a2010411874200341ffffff077172360200200041086a200f411874200441ffffff077172360200200041066a2012410874200541ff0171723b0100200041c0006a20024190066a41f001109d081a0c5f0b200341ffffff3f710d590c5a0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c5d0b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241c8006a20011091062002290348a70d002002290350210a20004103360200200041086a200a370300200041106a200241e00e6a41a002109d081a0c5d0b2000411b3602000c5c0b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241b00c6a200110cf0320022802b00c2201450d00200041086a20022902b40c3702002000200136020420004104360200200041106a200241e00e6a41a002109d081a0c5c0b2000411b3602000c5b0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a360200200541034b0d00024002400240024020050e0400010203000b20064104490d032004280002210920012003417a6a3602042001200441066a3602004200210a410121060c570b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200220022800b30c3600c30b200220022802b00c22053602c00b200320076b2203417e6a4104490d03200241b00c6a410f6a290000210b200241cf0c6a310000211820022900b70c211720022900c70c210a20022f00c10b210820022800c30b210941022106200420076a220441026a280000210e20012003417a6a3602042001200441066a36020020022017370380082002200b370388082002200a37039008200a423888201842ff018342088684a721042017421888a721012017420888a7210320024180086a410f6a290000210b200229008708210a2017a721070c580b200541ff0171450d02200241003a00d00c0c020b20064104490d012004280002210920012003417a6a3602042001200441066a3602004200210a410321060c550b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200241e80b6a41106a200241b00c6a410f6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022800b30c3600c30b200220022802b00c22053602c00b200220022d00c60b3a00e80b200220022900b70c220ba722063b00e90b200220064110763a00eb0b2002200b421888200a422886843702ec0b41042106200320076b2203417e6a4104490d01200241cf0c6a310000210b20022900c70c210a20022d00c10b210c20022801c20b2108200420076a220441026a280000210e20012003417a6a3602042001200441066a36020020024180096a41086a200241e80b6a410172220141086a2900003703002002200129000022173703800920022d00e80b41187420084108767221092002200a37039009200a423888200b42ff018342088684a72104200c200841087472210820024180096a410f6a290000210b200228008309210120022f0081092103200229008709210a2017a721070c560b200541ff0171450d00200241003a00d00c0b2000411b3602000c5a0b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541034b0d00024002400240024020050e0400010203000b200241b00c6a200110920620022d00b00c4102460d03200241c40c6a290200210a200241bc0c6a290200210b200241cc0c6a2902002117200241b80c6a280200210420022802b40c210320022802b00c2105200241d8006a200110f60120022802580d03200241e8006a290300211841012101200229036021190c550b200241b00c6a200110920620022d00b00c4102460d02200241c40c6a290200210a200241bc0c6a290200210b200241cc0c6a2902002117200241b80c6a280200210420022802b40c210320022802b00c210520024188016a200110f601200229038801a70d0220024188016a41106a29030021182002290390012119200241f0006a200110f6012002290370a70d02200241f0006a41106a290300211a2002290378211b410221010c540b200241b00c6a200110920620022d00b00c4102460d01200241c40c6a290200210a200241bc0c6a290200210b200241cc0c6a2902002117200241b00c6a41086a2206280200210420022802b40c210320022802b00c2105200241b00c6a200110920620022d00b00c4102460d0120024190066a41206a2207200241b00c6a41206a28020036020020024190066a41186a2209200241b00c6a41186a29030037030020024190066a41106a2208200241b00c6a41106a29030037030020024190066a41086a2006290300370300200220022903b00c37039006200241a0016a200110f60120022903a001a70d01200241a0016a41106a290300211c20022903a801211d2009290300211a2008290300211b20024198066a29030021182007350200211e2002290390062119410321010c530b200241b00c6a200110920620022d00b00c4102460d00200241c40c6a290200210a200241bc0c6a290200210b200241cc0c6a2902002117200241b80c6a280200210420022802b40c210320022802b00c2105200241b8016a200110f60120022802b8010d00200241c8016a29030021184104210120022903c00121190c520b2000411b3602000c590b2006450d4d20042d0001210520012003417e6a221f3602042001200441026a360200200541174b0d4d4104210d02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e1800010267030405060708090a0b0c0d0e0f10111213151617000b200241e00e6a200110920620022d00e00e4102460d64200241fc0e6a290200210b200241f40e6a290200210a200241ec0e6a290200211920022902e40e211e20022802e00e2109200241d0016a200110f60120022903d001a70d6420072802002204450d64200241e0016a290300211820022903d8012117200128020022032d0000210e20012004417f6a3602044101210d2001200341016a360200200e41024b0d64200241a80b6a41106a200241b00c6a41106a290200370300200241a80b6a41086a200241b00c6a41086a290200370300200241900b6a41086a20024180096a41086a290300370300200241900b6a41106a20024180096a41106a290300370300200241f80a6a41086a20024180086a41086a290200370300200241f80a6a41106a20024180086a41106a290200370300200220022902b00c3703a80b20022002290380093703900b20022002290280083703f80a200241e00a6a41106a200241980c6a41106a290300370300200241e00a6a41086a200241980c6a41086a290300370300200220022903980c3703e00a201e422088a72106200b422088a7210f200b421088a72120200b420888a721212019422088a72114201ea721082019a7210c0c660b200241e8016a200110f60120022903e801a70d63200241e8016a41106a290300210a20022903f001210b200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a200b422088a72106200a422088a72114200ba72108200aa7210c4102210d0c650b20024180026a200110f601200229038002a70d6220024180026a41106a290300210a200229038802210b200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a200b422088a72106200a422088a72114200ba72108200aa7210c4103210d0c640b20024198026a200110c4012002280298020d61200228029c022109200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a4105210d0c620b200241a0026a200110c40120022802a0020d6020022802a4022203200728020041246e2204200420034b1bad42247e220a422088a70d30200aa72204417f4c0d300240024020040d00410421090c010b200410332209450d250b41002106200241003602880c200220093602800c2002200441246e22083602840c024002402003450d0041002106200241e00e6a41206a2114200241e00e6a41106a21130340200241e00e6a200110920620022802840c210420022d00e00e22054102460d022014310000210a2013290300210b20022903f80e211720022903e80e211820022f01820f210720022d00810f210820022802e40e210e20022f01e20e210c20022d00e10e210d024020062004470d00200241800c6a20064101108d0120022802800c210920022802880c21060b2009200641246c6a220420073b0022200420083a0021200420173700182004200e3600042004200c3b00022004200d3a0001200420053a0000200441206a200a3c000020042018370008200441106a200b3700002002200641016a22063602880c2003417f6a22030d000b20022802840c21080b2009450d61200241a80b6a41106a200241b00c6a41106a290200370300200241a80b6a41086a200241b00c6a41086a290200370300200241900b6a41086a20024180096a41086a290300370300200241900b6a41106a20024180096a41106a290300370300200241f80a6a41086a20024180086a41086a290200370300200241f80a6a41106a20024180086a41106a290200370300200220022902b00c3703a80b20022002290380093703900b20022002290280083703f80a200241e00a6a41106a200241980c6a41106a290300370300200241e00a6a41086a200241980c6a41086a290300370300200220022903980c3703e00a4106210d0c630b2004450d60200441246c0d5d0c600b4107210d0c610b201f450d5e20042d0002210e20012003417d6a3602042001200441036a360200200e41024b0d5e200241a80b6a41106a200241e00e6a41106a2901003703004108210d200241a80b6a41086a200241e00e6a41086a290100370300200241900b6a41086a200241b00c6a41086a290100370300200241900b6a41106a200241b00c6a41106a290100370300200241f80a6a41086a20024180096a41086a290100370300200241f80a6a41106a20024180096a41106a290100370300200220022901e00e3703a80b200220022901b00c3703900b20022002290180093703f80a200241e00a6a41106a20024180086a41106a290100370300200241e00a6a41086a20024180086a41086a29010037030020022002290180083703e00a410021144100210c410021060c600b200241e00e6a200110920620022d00e00e4102460d5d200241d00b6a41086a2201200241fc0e6a280200360200200241a80b6a41086a200241b00c6a41086a290200370300200241a80b6a41106a200241b00c6a41106a2902003703002002200241f40e6a290200220a3703d00b200220022902b00c3703a80b200241800f6a280200210f200241ec0e6a290200211720022802e00e210920022902e40e21182001310000210b20022f01da0b212020022d00d90b2121200241900b6a41106a20024180096a41106a290300370300200241900b6a41086a20024180096a41086a29030037030020022002290380093703900b200241f80a6a41106a20024180086a41106a290200370300200241f80a6a41086a20024180086a41086a29020037030020022002290280083703f80a200241e00a6a41106a200241980c6a41106a290300370300200241e00a6a41086a200241980c6a41086a290300370300200220022903980c3703e00a2018422088a721062017422088a721142018a721082017a7210c4109210d0c5f0b200241a8026a200110c40120022802a8020d5c20022802ac022109200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a410a210d0c5d0b410b210d0c5d0b410c210d0c5c0b200241980c6a200110c30120022802980c2209450d59200241a80b6a41086a200241e00e6a41086a290200370300200241a80b6a41106a200241e00e6a41106a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200229029c0c210a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a200a422088a72106200aa72108410d210d0c5b0b41002105200241003a00800f2003417e6a21072003417d6a21030240034020072005460d01200241e00e6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800f2003417f6a21032006210520064120470d000b20024198096a2201200241ff0e6a2d00003a000020024180096a41106a200241f70e6a290000220a370300200241a80b6a41086a200241b00c6a41086a290000370300200241a80b6a41106a200241b00c6a41106a290000370300200220022900b00c3703a80b200241ef0e6a290000211720022800e30e210920022f00e10e212220022d00e00e210e20022900e70e21182001310000210b200241900b6a41106a20024180086a41106a290000370300200241900b6a41086a20024180086a41086a29000037030020022002290080083703900b200241f80a6a41106a200241980c6a41106a290000370300200241f80a6a41086a200241980c6a41086a290000370300200220022900980c3703f80a200241e00a6a41106a200241800c6a41106a290000370300200241e00a6a41086a200241800c6a41086a290000370300200220022900800c3703e00a2018422088a721062017422088a721142018a721082017a7210c410e210d0c5b0b200541ff0171450d58200241003a00800f0c580b410f210d0c590b201f4104490d562004280002210920012003417a6a3602042001200441066a360200200241b0026a200110c40120022802b0020d56200728020020022802b4024102742204490d562004417f4c0d260240024020040d004200210a410121080c010b200410392208450d1b20072802002004490d30200820012802002004109d081a200128020422032004490d2f2001200320046b3602042001200128020020046a3602002004ad210a0b2008450d560240200a2004ad42208684220a422088a722010d00200aa721010c550b024020082001724103710d00200aa722014103710d0020014102762206450d55200a422288a7210c0c560b200aa7450d56200810350c560b201f4104490d552004280002210920012003417a6a3602042001200441066a360200200241b8026a200110c40120022802b8020d5520022802bc02220d200728020041246e22042004200d4b1bad42247e220a422088a70d25200aa72204417f4c0d250240024020040d00410421080c010b200410332208450d1a0b4100210c200241003602880c200220083602800c2002200441246e22063602840c024002400240200d450d00200241ef0e6a2113200241e00e6a411f6a210f200241f40b6a2110200241f00b6a21114100210c410021140340200241003a00800f201441016a211420072802002106417f210341002104034020062004460d03200241e00e6a20046a2001280200220e2d00003a00002001200620036a3602042001200e41016a3602002002200441016a22053a00800f2003417f6a21032005210420054120470d000b200220022800e30e3600c30b200220022802e00e3602c00b200620056b22044104490d032013290000210a200f310000211720022900e70e210b20022900f70e2118200e28000121032001200e41056a36020020012004417c6a360204200241e80b6a41106a2205200a4238883c00002010200a4218883e0200200220022d00c60b3a00e80b2002200ba722043b00e90b200220044110763a00eb0b2002200b421888200a422886843702ec0b20022d00c00b210620022d00c10b210e20022801c20b21120240200c20022802840c470d00200241800c6a200c4101108d0120022802800c210820022802880c210c0b2008200c41246c6a220420123601022004200e3a0001200420063a000020052d000021052011290200210a20022902e80b210b2004411f6a20173c0000200420183700172004200b370106200420033602202004410e6a200a370100200441166a20053a00002002200c41016a220c3602880c2014200d470d000b20022802840c21060b2008450d57200241a80b6a41106a200241b00c6a41106a290200370300200241a80b6a41086a200241b00c6a41086a290200370300200241900b6a41086a20024180096a41086a290200370300200241900b6a41106a20024180096a41106a290200370300200241f80a6a41086a20024180086a41086a290200370300200241f80a6a41106a20024180086a41106a290200370300200220022902b00c3703a80b20022002290280093703900b20022002290280083703f80a200241e00a6a41106a200241980c6a41106a290200370300200241e00a6a41086a200241980c6a41086a290200370300200220022902980c3703e00a4111210d0c590b200441ff0171450d00200241003a00800f0b20022802840c2201450d55200141246c450d55200810350c550b201f4104490d542004280002210920012003417a6a3602042001200441066a360200200241a80b6a41086a20024180096a41086a290200370300200241a80b6a41106a20024180096a41106a290200370300200241900b6a41086a200241980c6a41086a290300370300200241900b6a41106a200241980c6a41106a29030037030020022002290280093703a80b200220022903980c3703900b20022d00d90b212120022f01da0b212020022802dc0b210f200241f80a6a41106a200241800c6a41106a290200370300200241f80a6a41086a200241800c6a41086a290200370300200241e00a6a41086a200241e80b6a41086a290300370300200241e00a6a41106a200241e80b6a41106a290300370300200220022902800c3703f80a200220022903e80b3703e00a200241c80c6a290300211a20022903c00c211b4112210d0c030b41002105200241003a00800f2003417e6a2109417d21060240034020092005460d01200241e00e6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00800f2006417f6a21062007210520074120470d000b20024180096a41186a2205200241ff0e6a2d00003a000020024180096a41106a200241f70e6a290000220a370300200320076b2203417e6a4104490d54200241ef0e6a290000211720022800e30e210920022f00e10e212220022d00e00e210e20022900e70e21182005310000210b200420076a220441026a280000210f20012003417a6a3602042001200441066a360200200241a80b6a41086a200241980c6a41086a290200370300200241a80b6a41106a200241980c6a41106a290200370300200241900b6a41086a200241800c6a41086a290300370300200241900b6a41106a200241800c6a41106a290300370300200241f80a6a41086a200241e80b6a41086a290200370300200241f80a6a41106a200241e80b6a41106a290200370300200220022902980c3703a80b200220022903800c3703900b200220022902e80b3703f80a200241e00a6a41106a200241d00b6a41106a290300370300200241e00a6a41086a200241d00b6a41086a290300370300200220022903d00b3703e00a2018422088a721062017422088a72114200241b00c6a41186a290300211a20022903c00c211b2018a721082017a7210c4113210d0c560b200541ff0171450d53200241003a00800f0c530b200241c0026a200110f60120022903c002a70d52200241c0026a41106a290300210a20022903c802210b200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290300370300200241e00a6a41086a20024180086a41086a29030037030020022002290380083703e00a200b422088a72106200a422088a72114200ba72108200aa7210c4114210d0c540b200241d8026a200110c40120022802d8020d5120022802dc022109200241a80b6a41086a20024180096a41086a290200370300200241a80b6a41106a20024180096a41106a290200370300200241900b6a41086a20024180086a41086a290300370300200241900b6a41106a20024180086a41106a290300370300200241f80a6a41086a200241980c6a41086a290200370300200241f80a6a41106a200241980c6a41106a29020037030020022002290280093703a80b20022002290380083703900b200220022902980c3703f80a20022802f40b210f20022f01f20b212020022d00f10b2121200241e00a6a41106a200241800c6a41106a290300370300200241e00a6a41086a200241800c6a41086a290300370300200220022903800c3703e00a200241c80c6a290300211a20022903c00c211b4115210d0b410021144100210c41002106410021080c520b41002105200241003a00800f2003417e6a21072003417d6a21030240034020072005460d01200241e00e6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800f2003417f6a21032006210520064120470d000b20024198096a2201200241ff0e6a2d00003a000020024180096a41106a200241f70e6a290000220a370300200241a80b6a41086a200241b00c6a41086a290000370300200241a80b6a41106a200241b00c6a41106a290000370300200220022900b00c3703a80b200241ef0e6a290000211720022800e30e210920022f00e10e212220022d00e00e210e20022900e70e21182001310000210b200241900b6a41106a20024180086a41106a290000370300200241900b6a41086a20024180086a41086a29000037030020022002290080083703900b200241f80a6a41106a200241980c6a41106a290000370300200241f80a6a41086a200241980c6a41086a290000370300200220022900980c3703f80a200241e00a6a41106a200241800c6a41106a290000370300200241e00a6a41086a200241800c6a41086a290000370300200220022900800c3703e00a2018422088a721062017422088a721142018a721082017a7210c4116210d0c520b200541ff0171450d4f200241003a00800f0c4f0b200241e0026a200110c40120022802e0020d4e200728020020022802e4024101742204490d4e2004417f4c0d1e0240024020040d004200210a410121090c010b200410392209450d1320072802002004490d4c200920012802002004109d081a200128020422032004490d292001200320046b3602042001200128020020046a3602002004ad210a0b2009450d4e02402004ad422086200a84220a422088a722040d00200aa721040c4a0b024020092004724101710d00200aa722044101710d0020044101762208450d4a200a422188a721060c4b0b200aa70d4b0c4e0b200241e8026a200110c40120022802e8020d4d200728020020022802ec024101742204490d4d2004417f4c0d1d0240024020040d004200210a410121090c010b200410392209450d1220072802002004490d4b200920012802002004109d081a200128020422032004490d292001200320046b3602042001200128020020046a3602002004ad210a0b2009450d4d02402004ad422086200a84220a422088a722040d00200aa721040c470b024020092004724101710d00200aa722044101710d0020044101762208450d47200a422188a721060c480b200aa70d4a0c4d0b2006450d2a20042d0001210520012003417e6a3602042001200441026a360200200541014b0d2a410021040240024020050e020001000b200241b00c6a200110c20220022d00b00c4101460d2b20024190066a200241b00c6a410172418001109d081a200241f0026a200110c40120022802f0020d2b200728020020022802f4022203490d2b2003417f4c0d1d0240024020030d004200210a410121040c010b200310392204450d1220072802002003490d2b200420012802002003109d081a200128020422052003490d2a2001200520036b3602042001200128020020036a3602002003ad210a0b2004450d2b200a2003ad42208684210a20024180096a20024190066a418001109d081a0b20024180086a20024180096a418001109d081a200041086a200a3702002000200436020420004108360200200041106a20024180086a418001109d081a20004190016a200241e00e6a41a001109d081a0c570b02402006450d0020042d0001210520012003417e6a22233602042001200441026a3602002005411c4b0d00410e2113410021090240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e1d000102030405060708090a0b0c610d0e0f101112131415161718191a1b000b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b200241bf0c6a2900002119200241cf0c6a310000210a20022900b70c210b20022900c70c211e200241c50b6a2d0000210420022d00c10b210820022d00c20b210e20022d00c60b210d20022f00c30b2103200241f8026a200110f60120022903f802a70d1d200241f8026a41106a29030021182002290380032117201e422088200a42ff018342208684210a200320044110747241ffffff077121092019420888a721122019421088a7210f2019422088a72111201ea721102019a72116410121130c610b200541ff0171450d1c200241003a00d00c0c1c0b20024190036a200110c4012002280290030d1b2002280294032209411876210d410221130c5d0b20024198036a200110c4012002280298030d1a200228029c032109200241b00c6a200110ca0220022d00b00c4102460d1a2009411876210d200241c40c6a350200200241b00c6a41186a31000042208684210a200241d00c6a2903002117200241cc0c6a2802002114200241ca0c6a2f01002115200241c90c6a2d0000210c200241c00c6a2802002110200241bc0c6a2802002111200241ba0c6a2f0100210f200241b90c6a2d00002112200241b80c6a2d0000211620022903b00c210b42002118410321134100210e0c5e0b200241a0036a200110c40120022802a0030d1920022802a4032109200241b00c6a200110ca0220022d00b00c4102460d192009411876210d200241c40c6a350200200241b00c6a41186a31000042208684210a200241d00c6a2903002117200241cc0c6a2802002114200241ca0c6a2f01002115200241c90c6a2d0000210c200241c00c6a2802002110200241bc0c6a2802002111200241ba0c6a2f0100210f200241b90c6a2d00002112200241b80c6a2d0000211620022903b00c210b42002118410421134100210e0c5d0b20234104490d182004280002210920012003417a6a3602042001200441066a3602002009411876210d410521130c5a0b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116410621130c5c0b200541ff0171450d17200241003a00d00c0c170b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116410721130c5b0b200541ff0171450d16200241003a00d00c0c160b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116410821130c5a0b200541ff0171450d15200241003a00d00c0c150b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b200320076b2203417e6a4104490d15200241c50b6a2d0000210920022f00c30b210c200241bf0c6a290000210a200241cf0c6a310000211920022900b70c210b20022900c70c211820022d00c10b210820022d00c20b210e20022d00c60b210d200420076a220441026a280000211420012003417a6a22053602042001200441066a220736020020054104490d15200a422088a72111200a421088a7210f200a420888a72112200aa72116200735000021172001200341766a36020420012004410a6a3602002018422088201942ff018342208684210a200c20094110747241ffffff077121092018a7211042002118410921130c590b200541ff0171450d14200241003a00d00c0c140b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116410a21130c580b200541ff0171450d13200241003a00d00c0c130b200241a8036a200110c40120022802a8030d1220022802ac032209411876210d410b21130c540b20234104490d112004280002210920012003417a6a3602042001200441066a3602002009411876210d410c21130c530b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116410d21130c550b200541ff0171450d10200241003a00d00c0c100b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109410f2113200241b00c6a410f6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a721160c540b200541ff0171450d0f200241003a00d00c0c0f0b41002105200241003a00d00c2003417e6a2108417d21070240034020082005460d01200241b00c6a20056a200420056a220641026a2d00003a00002001200320076a3602042001200641036a3602002002200541016a22093a00d00c2007417f6a21072009210520094120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b2003417e6a2009460d0f200241c50b6a2d0000211420022f00c30b2110200241bf0c6a290000210a200241cf0c6a310000211e20022900b70c210b20022900c70c211920022d00c10b210820022d00c20b210e20022d00c60b210d200420096a220441026a2d0000210c2001200320076a22053602042001200441036a360200200c41064b0d0f4110211320054110490d0f200a422088a72111200a421088a7210f200a420888a72112200aa721162004410b6a2900002118200441036a29000021172001200320096b416d6a3602042001200441136a3602002019422088201e42ff018342208684210a201020144110747241ffffff077121092019a721100c530b200541ff0171450d0e200241003a00d00c0c0e0b411121130c500b411221130c4f0b200241b0036a200110c40120022802b0030d0b200728020020022802b4032204490d0b2004417f4c0d270240024020040d004200210a410121090c010b200410392209450d1c20072802002004490d0b200920012802002004109d081a200128020422032004490d372001200320046b3602042001200128020020046a3602002004ad210a0b2009450d0b200a2004ad42208684210b2009411876210d411321134100210e0c4f0b200241b8036a200110c40120022802b8030d0a200728020020022802bc032204490d0a2004417f4c0d260240024020040d004200210a410121090c010b200410392209450d1b20072802002004490d0a200920012802002004109d081a200128020422032004490d372001200320046b3602042001200128020020046a3602002004ad210a0b2009450d0a200a2004ad42208684210b2009411876210d411421134100210e0c4e0b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022f00c30b200241c50b6a2d0000411074722109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c10b210820022d00c20b210e20022d00c60b210d2018a721102017a72116411521130c4e0b200541ff0171450d09200241003a00d00c0c090b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20022800c30b2209411876210d20022f00c10b2208410876210e200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b2018a721102017a72116411621130c4d0b200541ff0171450d08200241003a00d00c0c080b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b20022900c70c2218422088200241cf0c6a31000042208684210a20064180fe0371410876210820022801c20b220e4108762109200241bf0c6a2900002217422088a721112017421088a7210f2017420888a7211220022900b70c210b20022d00c60b210d2018a721102017a72116411721130c4c0b200541ff0171450d07200241003a00d00c0c070b20234104490d062004280002210920012003417a6a3602042001200441066a360200411821132009411876210d0c480b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b20024198086a200241cf0c6a310000220a3c0000200220022800b30c3600c30b200220022802b00c22063602c00b200220022900c70c221837039008200220022900b70c220b370380082002200241bf0c6a290000221737038808200320076b2203417e6a4104490d06200241c50b6a2d0000210520022f00c30b210920022d00c10b210820022d00c20b210e20022d00c60b210d200420076a220441026a280000211420012003417a6a3602042001200441066a3602002018422088200a42ff018342208684210a200920054110747241ffffff077121092017422088a72111201742ffffffff0f832219421088a7210f2019420888a721122018a721102017a72116411921130c4a0b200541ff0171450d05200241003a00d00c0c050b41002105200241003a00d00c2003417e6a2109417d21070240034020092005460d01200241b00c6a20056a200420056a220641026a2d00003a00002001200320076a3602042001200641036a3602002002200541016a220e3a00d00c2007417f6a2107200e2105200e4120470d000b200220022800b30c3600c30b200220022802b00c22063602c00b2003417e6a200e460d05200241bf0c6a2900002119200241cf0c6a310000210a20022900b70c210b20022900c70c211e20022f00c10b210820022800c30b21092004200e6a220441026a2d0000210c2001200320076a22053602042001200441036a360200200c41064b0d0520054110490d052004410b6a2900002118200441036a290000211720012003200e6b416d6a3602042001200441136a360200201e422088200a42ff018342208684210a2009411876210d20084180fe0371410876210e2019422088a721112019421088a7210f2019420888a72112201ea721102019a72116411a21130c490b200541ff0171450d04200241003a00d00c0c040b411b21130c460b20234104490d022004280002210920012003417a6a3602042001200441066a3602002009411876210d411c21130c440b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200241e80b6a41106a200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022800b30c3600c30b200220022802b00c22063602c00b200220022d00c60b3a00e80b200220022900b70c220ba722053b00e90b200220054110763a00eb0b2002200b421888200a422886843702ec0b200320076b2203417e6a4104490d02200241cf0c6a310000210a20022900c70c211720022d00c10b210820022801c20b210e200420076a220441026a280000211420012003417a6a3602042001200441066a36020020024180096a41086a200241e80b6a410172220141086a290000220b3703002017422088200a42ff018342208684210a200e4108762109200ba721162001290000210b20022d00e80b210d20022d008909211220022f018a09210f200228028c0921112017a72110411d21130c460b200541ff0171450d01200241003a00d00c0c010b200910350b2000411b3602000c560b200241b00c6a2001109306024020022d00b00c4106460d0020024190066a41286a200241b00c6a41286a290300220a37030020024190066a41206a200241b00c6a41206a290300220b37030020024190066a41186a200241b00c6a41186a290300221737030020024190066a41106a200241b00c6a41106a290300221837030020024190066a41086a200241b00c6a41086a2903002219370300200220022903b00c221e370390062000410a3602002000201e3702042000410c6a2019370200200041146a20183702002000411c6a2017370200200041246a200b3702002000412c6a200a370200200041346a200241e00e6a41fc01109d081a0c560b2000411b3602000c550b200241b00c6a2001109306024020022d00b00c4106460d0020024190066a41286a200241b00c6a41286a290300220a37030020024190066a41206a200241b00c6a41206a290300220b37030020024190066a41186a200241b00c6a41186a290300221737030020024190066a41106a200241b00c6a41106a290300221837030020024190066a41086a200241b00c6a41086a2903002219370300200220022903b00c221e370390062000410b3602002000201e3702042000410c6a2019370200200041146a20183702002000411c6a2017370200200041246a200b3702002000412c6a200a370200200041346a200241e00e6a41fc01109d081a0c550b2000411b3602000c540b2006450d3d20042d0001210520012003417e6a360204410221032001200441026a360200200541054b0d3d02400240024002400240024020050e06000501020304000b200241b00c6a200110c30120022802b00c2204450d42200241b80c6a280200210720022802b40c2106200241c0036a200110f601024020022903c003a70d00200241d0036a290300211720022903c803210b410121030c050b200641ffffff3f71450d42200410350c420b200241b00c6a200110920620022d00b00c4102460d41200241c40c6a2902002117200241bc0c6a290200210b200241cc0c6a290200210a200241b80c6a280200210720022802b40c210620022802b00c2104410321030c030b410421030c020b410521030c010b200241b00c6a200110920620022d00b00c4102460d3e200241c40c6a2902002117200241bc0c6a290200210b200241cc0c6a290200210a200241b80c6a280200210720022802b40c210620022802b00c2104410621030b2000410c360200200041206a2017370200200041186a200b370200200041286a200a370200200041146a2007360200200041106a20063602002000410c6a2004360200200041086a2003360200200041306a200241e00e6a418002109d081a0c530b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541064b0d004200211941072106410021074200211c4200211b4200211a4200210b420021244200212502400240024002400240024020050e0700010203040542000b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200241e80b6a41106a200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022800b30c3600c30b200220022802b00c22083602c00b200220022900b70c220ba722013b00e90b200220014110763a00eb0b2002200b421888200a422886843702ec0b20022900c70c220b422088200241cf0c6a31000042208684210a20022801c20b2209410876210720022d00c10b210e20022d00c60b210c200241f10b6a290000211820022900e90b2117200ba7211142002119410121060c400b200541ff0171450d05200241003a00d00c0c050b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200241e80b6a41106a2201200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e020020024190066a41106a20012d00003a0000200220022900b70c220b421888200a422886843702ec0b20024190066a41086a200241e80b6a41086a290200370300200220022800b30c3600c30b200220022d00c60b3a00e80b2002200ba722013b00e90b200220014110763a00eb0b200220022802b00c22083602c00b200220022902e80b3703900620022d00c10b210e20022801c20b210920022900c70c210b200241a9066a200241cf0c6a310000220a3c00002002200b3700a106200b422088200a42208684210a2009410876210720024199066a2900002118200229009106211720022d009006210c200ba7211142002119410221060c3f0b200541ff0171450d04200241003a00d00c0c040b41002105200241003a00d00c410220036b21092003417d6a2106024002400340200920056a450d01200241b00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200241e80b6a41106a200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022802b00c22083602c00b200220022800b30c3600c30b200220022900b70c220ba722053b00e90b200220054110763a00eb0b2002200b421888200a422886843702ec0b200241cf0c6a310000210a20022900c70c210b20022d00c10b210e20022d00c60b210c20022801c20b2109200241f10b6a290000211820022900e90b211741002105200241003a00d00c200420076a210d200720036b41026a2103200941087621070340200320056a450d02200241b00c6a20056a200d20056a220441026a2d00003a0000200120063602042001200441036a3602002002200541016a22043a00d00c2006417f6a21062004210520044120470d000b200241e80b6a41106a200241bf0c6a29000022194238883c0000200241f40b6a20194218883e0200200220022800b30c3600c30b200220022802b00c22103602c00b200220022900b70c221ea722013b00e90b200220014110763a00eb0b2002201e4218882019422886843702ec0b20022d00c60b41187420022801c20b2201410876722113200b422088200a42ff018342208684210a200141087420022d00c10b72210f20022900e90b221e42ffffffff0f832119201e42808080807083211b200241f10b6a290000221e42ffffffff0f832124201e428080808070832125200241cf0c6a310000211d20022900c70c211e200ba721114200211c410321064200211a4200210b0c410b200541ff0171450d04200241003a00d00c0c040b200541ff0171450d03200241003a00d00c0c030b200241b00c6a200110c30120022802b00c2207450d022007411876210c20023502840920024188096a31000042208684210a20022902b40c211720022d008909211020022f018a09210f20022d008908210d20022f018a082114420021184104210641002109420021190c3d0b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22083602c00b20022900c70c220b422088200241cf0c6a31000042208684210a20022801c20b22094108762107200241bf0c6a290000211820022900b70c211720022d00c10b210e20022d00c60b210c200ba7211142002119410521060c3c0b200541ff0171450d01200241003a00d00c0c010b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200241e80b6a41106a200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022900b70c220b421888200a422886843702ec0b20024180096a41086a2201200241f10b6a290000370300200220022800b30c3600c30b2002200ba722043b00e90b200220044110763a00eb0b200220022802b00c22083602c00b200220022d00c60b220c3a00e80b200220022900e90b3703800920022d00c10b210e20022801c20b210920022900c70c210b20024198096a200241cf0c6a310000220a3c00002002200b37039009200b422088200a42208684210a20094108762107200129030021182002290380092117200ba7211142002119410621060c3b0b200541ff0171450d00200241003a00d00c0b2000411b3602000c520b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241d8036a200110c40120022802d8030d0020022802dc0321012000410e36020020002001360204200041086a200241e00e6a41a802109d081a0c520b2000411b3602000c510b02402006450d0020042d0001210520012003417e6a3602042001200441026a36020020050d00200241e0036a200110c40120022802e0030d00200728020020022802e4032204490d002004417f4c0d1602400240024020040d004200210a410121030c010b200410392203450d0c20072802002004490d01200320012802002004109d081a200128020422052004490d292001200520046b3602042001200128020020046a3602002004ad210a0b2003450d01200020033602042000410f360200200041086a200a2004ad42208684370200200041106a200241e00e6a41a002109d081a0c520b200310350b2000411b3602000c500b2006450d3320042d0001210520012003417e6a3602042001200441026a360200200541074b0d3302400240024002400240024002400240024020050e080001020304050607000b200241e8036a200110f60120022903e803a70d3b200241f8036a290300210a20022903f003210b200241b00c6a200110920620022d00b00c4102460d3b200241d80b6a2205200241cc0c6a2802003602002002200b3703980c2002200a3703a00c20022902b40c2219421888200241bc0c6a290200220b42288684210a20022802b00c22034118762101200b4218882118200241c40c6a290200210b200241d00c6a28020021042005310000211720022f01da0b210720022d00d90b21092019a721084101210e4100210c0c3d0b20024180046a200110c4012002280280040d3a2002280284042103200241980c6a41106a200241b00c6a41106a290300370300200241980c6a41086a200241b00c6a41086a290300370300200220022903b00c3703980c200341187621014200210a4102210e0c3b0b20024188046a200110c4012002280288040d39200228028c042103200241980c6a41106a200241b00c6a41106a290300370300200241980c6a41086a200241b00c6a41086a290300370300200220022903b00c3703980c200341187621014200210a4103210e0c3a0b20024190046a200110c4012002280290040d3820072802002002280294042206490d382006417f4c0d1902400240024020060d004200210a410121040c010b200610392204450d0f20072802002006490d01200420012802002006109d081a200128020422032006490d2d2001200320066b3602042001200128020020066a3602002006ad210a0b2004450d3941002105200241003a00d00c2007280200417f6a2103200a2006ad42208684220a422088a72109200aa72107024003402003417f460d01200241b00c6a20056a200128020022062d00003a0000200120033602042001200641016a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200220022800b30c3600c30b200220022802b00c22053602c00b2002200936029c0c200220073602980c20022900b70c2219421888200241bf0c6a290000220b42288684210a20054180fe03714108762106200b421888211820022801c20b220c4108762103200241cf0c6a310000211720022900c70c210b20022d00c60b21012019a721084104210e0c3c0b0240200541ff0171450d00200241003a00d00c0b2007450d390b200410350c380b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b200241980c6a41086a20024190066a41086a290000370300200241980c6a41106a20024190066a41106a290000370300200220022800b30c3600c30b200220022802b00c22053602c00b20022002290090063703980c20022900b70c2219421888200241bf0c6a290000220b42288684210a200b421888211820022800c30b2203411876210120022f00c10b2206410876210c200241cf0c6a310000211720022900c70c210b2019a721084105210e0c3a0b200541ff0171450d37200241003a00d00c0c370b20024198046a200110c4012002280298040d362007280200200228029c042205490d362005417f4c0d170240024020050d004200210a410121040c010b200510392204450d0c20072802002005490d36200420012802002005109d081a200128020422032005490d2b2001200320056b3602042001200128020020056a3602002005ad210a0b2004450d3641002103200241003a00d00c200a2005ad42208684220a422088a7210e200aa7210820072802002107417f21050240034020072003460d01200241b00c6a20036a200128020022092d00003a00002001200720056a3602042001200941016a3602002002200341016a22063a00d00c2005417f6a21052006210320064120470d000b200220022800b30c3600c30b200220022802b00c22053602c00b200720066b22074110490d03200241bf0c6a2900002118200241cf0c6a310000211720022900b70c211920022900c70c210b20022f00c10b210620022800c30b2103200241980c6a41106a200941096a2900003703002009290001210a2001200741706a3602042001200941116a3602002002200e36029c0c200220083602980c2002200a3703a00c2019421888201842288684210a200341187621012018421888211820064180fe0371410876210c2019a721084106210e0c390b0240200341ff0171450d00200241003a00d00c0b2008450d360c350b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b20024180096a41186a200241cf0c6a31000022173c0000200220022800b30c3600c30b200220022802b00c22053602c00b200220022900c70c220b37039009200220022900b70c2219370380092002200241bf0c6a290000221837038809200320076b2209417e6a4110490d3620022f00c10b210620022800c30b2103200420076a220441026a290000210a2004410a6a290000211e20012009416e6a3602042001200441126a3602002002201e3703a00c2002200a3703980c2019421888201842288684210a200341187621012018421888211820064180fe0371410876210c2019a721084107210e0c380b200541ff0171450d35200241003a00d00c0c350b41002105200241003a00d00c2003417e6a21072003417d6a21030240034020072005460d01200241b00c6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00d00c2003417f6a21032006210520064120470d000b4108210e200241980c6a41086a20024190066a41086a290000370300200241980c6a41106a20024190066a41106a290000370300200220022800b30c3600c30b200220022802b00c22053602c00b200220022900b70c220aa722084110763a00eb0b20022002290090063703980c200a421888200241bf0c6a290000220b42288684210a200b421888211820022801c20b220c4108762103200241cf0c6a310000211720022900c70c210b20022d00c10b210620022d00c60b21010c370b200541ff0171450d34200241003a00d00c0c340b20080d320c330b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541044b0d0002400240024002400240024002400240024020050e050001020304000b200241e00e6a200110db0220022d00e80f4102460d08200241a80b6a41086a200241e00e6a41106a290300370300200241a80b6a41106a200241f80e6a2d00003a0000200241980c6a41086a200241900f6a290300370300200241980c6a41106a200241980f6a290300370300200220022903e80e3703a80b200220022903880f3703980c200241fc0e6a2802002104200241840f6a280200210c20022903e00e210a20022d00f90e210520022d00fa0e210620022d00fb0e210820022802800f210d20022903a00f210b20024190066a200241e00e6a41c8006a41c800109d081a200241b00a6a41026a20024180086a41026a2d00003a0000200220022f0080083b01b00a410121010c050b200241a0046a200110c40120022802a0040d07200728020020022802a4042204490d072004417f4c0d1b02400240024020040d004200210a410121090c010b200410392209450d1120072802002004490d01200920012802002004109d081a200128020422032004490d312001200320046b3602042001200128020020046a3602002004ad210a0b2009450d08200a2004ad42208684210a41022101200241b00a6a41026a200241d00b6a41026a2d00003a0000200241a80b6a41086a200241e80b6a41086a290300370300200241a80b6a41106a200241e80b6a41106a2d00003a0000200241980c6a41086a20024180086a41086a290300370300200241980c6a41106a20024180086a41106a290300370300200220022f00d00b3b01b00a200220022903e80b3703a80b20022002290380083703980c20024190066a200241e00e6a41c800109d081a0c040b200910350c070b20024180086a200110920620022d0080084102460d06200241f00b6a20024194086a290200370300200241e80b6a41106a2002419c086a2d00003a000020022002418c086a2902003703e80b2002419d086a2d000021052002419e086a2d000021062002419f086a2d00002108200241a0086a2802002104200229028408210a2002280280082109200241c0046a200110f60120022903c004a70d06200241c0046a41106a290300211720022903c8042118200241b0046a200110910620022903b004a70d0620022903b804210b200241a8046a200110c40120022802a8040d06200728020020022802ac042203490d062003417f4c0d1a0240024020030d00420021194101210d0c010b20031039220d450d0f20072802002003490d06200d20012802002003109d081a200128020422072003490d302001200720036b3602042001200128020020036a3602002003ad21190b200d450d06200241a80b6a41106a200241e80b6a41106a2d00003a0000200241a80b6a41086a200241e80b6a41086a290300370300200241980c6a41106a2017370300200241b00a6a41026a200241d00b6a41026a2d00003a0000200220022903e80b3703a80b200220183703a00c200220022f00d00b3b01b00a200220192003ad4220868422174220883e02980c20024190066a200241e00e6a41c800109d081a2017a7210c410321010c030b200241f0046a200110f60120022903f004a70d0520024180056a290300210b20022903f8042117200241e0046a200110910620022903e004a70d0520022903e804211841002103200241003a00a0082007280200417f6a2104024002400240024003402004417f460d0120024180086a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00a0082004417f6a21042005210320054120470d000b200241e20a6a20022d0082083a0000200241e00b6a2002419f086a2d00003a0000200241d80b6a20024197086a2900003703002002200229008f08220a3703e80b200220022f0180083b01e00a2002200a3703d00b200229008708210a2002280083082109200241d8046a200110c40120022802d8040d09200728020020022802dc04220c490d09200c417f4c0d1d200c0d01410121044101450d094100210d0c020b200341ff0171450d08200241003a00a0080c080b200c10392204450d0f2007280200200c490d0120042001280200200c109d08210320012802042205200c490d3120012005200c6b36020420012001280200200c6a3602002003450d07200c210d0b200241b00a6a41026a200241e00a6a41026a2d00003a0000200241a80b6a41086a200241d00b6a41086a290300370300200241a80b6a41106a200241d00b6a41106a2d00003a0000200220022f01e00a3b01b00a200220022903d00b3703a80b200220173703980c200220183703a80c2002200b3703a00c20024190066a200241e00e6a41c800109d081a410421010c020b200410350c050b41002105200241003a00a0082003417e6a21092003417d6a2106024002400240034020092005460d0120024180086a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00a0082006417f6a21062007210520074120470d000b200241c80a6a41026a20022d0082083a0000200241e00b6a2002419f086a2d00003a0000200241d80b6a20024197086a2900003703002002200229008f08220a3703e80b200220022f0180083b01c80a2002200a3703d00b2003417e6a2007460d07200229008708210a2002280083082109200420076a220e41026a2d00002114200120063602042001200e41036a360200201441014b0d074100210520140e020201020b200541ff0171450d06200241003a00a0080c060b41002104200241003a00a008200720036b41036a2106200320076b417c6a21030340200620046a450d0420024180086a20046a200e20046a220541036a2d00003a0000200120033602042001200541046a3602002002200441016a22053a00a0082003417f6a21032005210420054120470d000b200241e80b6a41106a22012002418f086a290000220b4238883c0000200241f40b6a200b4218883e020020022002280083083600c30b200220022802800822063602c00b200220022d00c60b3a00e80b20022002290087082217a722043b00e90b200220044110763a00eb0b200220174218882218200b422886843702ec0b2002419f086a3100002117200229009708210b20022d00c10b210820022801c20b210420022802e80b210d200241800b6a20012d00003a0000200220022902f00b3703f80a2018a7210c410121050b200241a90c6a20173c0000200241980c6a41086a200241f80a6a41086a2d00003a0000200241b00a6a41026a200241c80a6a41026a2d00003a0000200241a80b6a41086a200241d00b6a41086a290300370300200241a80b6a41106a200241d00b6a41106a2d00003a00002002200b3700a10c200220022903f80a3703980c200220022f01c80a3b01b00a200220022903d00b3703a80b200241ae0c6a200241e40a6a2f01003b0100200220022801e00a3601aa0c20024190066a200241e00e6a41c800109d081a410521010b0b200241980a6a41026a2203200241b00a6a41026a2d00003a0000200241900b6a41086a2207200241a80b6a41086a290300370300200241900b6a41106a220e200241a80b6a41106a2d00003a0000200241800c6a41086a2214200241980c6a41086a290300370300200241800c6a41106a2213200241980c6a41106a290300370300200220022f01b00a3b01980a200220022903a80b3703900b200220022903980c3703800c20024180096a20024190066a41c800109d081a200041086a20013a000020004111360200200020022f01980a3b00092000410b6a20032d00003a0000200041106a200a3702002000410c6a2009360200200041186a20022903900b370000200041206a2007290300370000200041286a200e2d00003a0000200041346a200c360200200041306a200d3602002000412c6a2004360200200020083a002b200020063a002a200020053a0029200041d0006a200b370200200041c8006a2013290300370200200041c0006a2014290300370200200041386a20022903800c370200200041d8006a20024180096a41c800109d081a200041a0016a200241b00c6a419001109d081a0c510b200441ff0171450d01200241003a00a0080c010b200d10350b2000411b3602000c4e0b200241b00c6a2001109406024020022802b00c4104460d0020024190066a41286a200241b00c6a41286a280200220136020020024190066a41206a200241b00c6a41206a290300220a37030020024190066a41186a200241b00c6a41186a290300220b37030020024190066a41106a200241b00c6a41106a290300221737030020024190066a41086a200241b00c6a41086a2903002218370300200220022903b00c22193703900620004112360200200020193702042000410c6a2018370200200041146a20173702002000411c6a200b370200200041246a200a3702002000412c6a2001360200200041306a200241e00e6a418002109d081a0c4e0b2000411b3602000c4d0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a36020020050d0020064104490d002004280002210520012003417a6a3602042001200441066a36020020024198056a200110c4012002280298050d002007280200200228029c052204490d002004417f4c0d1202400240024002400240024002400240024020040d0041002103410121060c010b200410392206450d0e20072802002004490d01200620012802002004109d081a200128020422032004490d312001200320046b3602042001200128020020046a360200200421030b2006450d0720024190056a200110c4012004ad4220862003ad84220ba7210d02402002280290050d0020022802940522082007280200410c6e2204200420084b1bad420c7e220a422088a70d1a200aa72204417f4c0d1a0240024020040d004104210e0c010b20041033220e450d0f0b41002103200241003602b80c2002200e3602b00c20022004410c6e22093602b40c0240024002402008450d0041002103034020024188056a200110c4012002280288050d032007280200200228028c052204490d032004417f4c0d1e0240024020040d004100210c410121090c010b200410392209450d1320072802002004490d03200920012802002004109d081a2001280204220c2004490d372001200c20046b3602042001200128020020046a3602002004210c0b2004ad422086200cad84210a0240200320022802b40c470d00200241b00c6a2003410110870120022802b00c210e20022802b80c21030b200e2003410c6c6a2204200a370204200420093602002002200341016a22033602b80c2008417f6a22080d000b20022802b40c21090b200e450d022006450d0a200728020022074104490d042001280200220c280000211320012007417c6a22043602042001200c41046a36020020044104490d05200c280004210f2001200741786a22043602042001200c41086a36020020044104490d06200b422088a72110200c28000821112001200741746a22143602042001200c410c6a36020041002104200241003a00f00c200741736a2107034020142004460d08200241b00c6a20046a200c20046a2208410c6a2d00003a00002001200736020420012008410d6a3602002002200441016a22083a00f00c2007417f6a210720082104200841c000470d000b200841ff017141c000490d082006450d0a200241e80c6a290300210a200241b80c6a290300210b20022903e00c211720022903b00c211820022802dc0c210120022902d40c211920022802d00c210420022802cc0c210720022f01ca0c210820022d00c80c210c20022903c00c211e200020022d00c90c3a00452000200536020420004113360200200041e4006a200a370200200041dc006a2017370200200041346a200b3702002000412c6a2018370200200041d8006a2001360200200041d0006a2019370200200041cc006a2004360200200041c8006a2007360200200041c6006a20083b0100200041c4006a200c3a00002000413c6a201e370200200041286a2011360200200041246a200f360200200041206a20133602002000411c6a2003360200200041186a2009360200200041146a200e360200200041106a20103602002000410c6a200d360200200041086a2006360200200041ec006a200241e00e6a41c401109d081a0c570b200910350b02402003450d002003410c6c2104200e210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b20022802b40c2201450d002001410c6c450d00200e10350b200d450d070b200610350c060b0240200d450d00200610350b02402003450d002003410c6c2104200e210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b2009450d052009410c6c0d040c050b0240200d450d00200610350b02402003450d002003410c6c2104200e210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b2009450d042009410c6c0d030c040b0240200d450d00200610350b02402003450d002003410c6c2104200e210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b2009450d032009410c6c0d020c030b200441ff0171450d00200241003a00f00c0b0240200d450d00200610350b02402003450d002003410c6c2104200e210103400240200141046a280200450d00200128020010350b2001410c6a2101200441746a22040d000b0b2009450d012009410c6c450d010b200e10350b2000411b3602000c4c0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c4b0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c4a0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c490b2006450d2a20042d0001210620012003417e6a22263602042001200441026a3602002006410a4b0d2a410421274200212402400240024002400240024002400240024002400240024020060e0b0001020b03040506070809000b41002105200241003a00800f2003417e6a21072003417d6a21030240034020072005460d01200241e00e6a20056a200420056a220641026a2d00003a0000200120033602042001200641036a3602002002200541016a22063a00800f2003417f6a21032006210520064120470d000b200241a80b6a41086a200241b00c6a41086a290000370300200241a80b6a41106a200241b00c6a41106a290000370300200241900b6a41086a20024190066a41086a290000370300200241900b6a41106a20024190066a41106a290000370300200220022900b00c3703a80b20022002290090063703900b200241ef0e6a290000210b200241ff0e6a310000210a20022800e30e210920022f00e10e212820022d00e00e212920022900e70e211720022900f70e2118200241f80a6a41106a20024180096a41106a290000370300200241f80a6a41086a20024180096a41086a29000037030020022002290080093703f80a200241e00a6a41106a20024180086a41106a290000370300200241e00a6a41086a20024180086a41086a29000037030020022002290080083703e00a2018422088200a42208684210a2017422088a72105200b422088a7210f200b4280feffff0f83420888a7212a2018a721142017a72108200ba7210c41012127410021100c0b0b200541ff0171450d35200241003a00800f0c350b200241a0056a200110c40120022802a0050d3420022802a4052206200728020041c8006e2204200420064b1bad42c8007e220a422088a70d17200aa72204417f4c0d170240024020040d00410421090c010b200410332209450d0c0b41002105200241003602c80b200220093602c00b2002200441c8006e22083602c40b0240024002402006450d00200241b00c6a410c6a2110410021050340200241b00c6a200110ad040240024020022d00b00c22034106470d00410621030c010b200241980c6a41086a220e201041086a290200370300200241980c6a41106a220c201041106a290200370300200220102902003703980c20022802b80c210420022802b40c210820022f01b20c210d20022d00b10c2114200241e00e6a200110ad04024020022d00e00e4106470d00024020034101470d002004450d00200810350b410621030c010b200241800c6a41106a200c290300370300200241800c6a41086a200e29030037030020024190066a41086a200241e00e6a41086a29030037030020024190066a41106a200241e00e6a41106a29030037030020024190066a41186a200241e00e6a41186a29030037030020024190066a41206a200241e00e6a41206a280200360200200220022903980c3703800c200220022903e00e37039006200d21112014211220042116200821150b200241e80b6a41086a2204200241800c6a41086a290300370300200241e80b6a41106a2208200241800c6a41106a29030037030020024180096a41086a220e20024190066a41086a29030037030020024180096a41106a220c20024190066a41106a29030037030020024180096a41186a220d20024190066a41186a29030037030020024180096a41206a221420024190066a41206a280200360200200220022903800c3703e80b20022002290390063703800920034106460d02200241d00b6a41106a22132008290300370300200241d00b6a41086a2208200429030037030020024180086a41086a220f200e29030037030020024180086a41106a220e200c29030037030020024180086a41186a220c200d29030037030020024180086a41206a220d2014280200360200200220022903e80b3703d00b2002200229038009370380080240200520022802c40b470d00200241c00b6a2005410110a80120022802c00b210920022802c80b21050b2009200541c8006c6a220420123a0001200420033a0000200441086a2016360000200441046a2015360000200441026a20113b00002004410c6a20022903d00b370000200441146a20082903003700002004411c6a2013290300370000200441246a2002290380083700002004412c6a200f290300370000200441346a200e2903003700002004413c6a200c290300370000200441c4006a200d2802003600002002200541016a22053602c80b2006417f6a22060d000b20022802c40b21080b20090d010c360b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b20022802c40b2201450d35200141c8006c450d35200910350c350b200241e00e6a200110ad0402400240024002400240024002400240024020022d00e00e220c4106460d00200241800f6a280200210d200241f80e6a290300210b200241f40e6a2204280200210e200241ec0e6a2203290200210a200241e80e6a2206280200211420022802e40e210f20022f01e20e212720022d00e10e2128200241e00e6a200110ad0420022d00e00e22104106460d01200241fc0e6a2216290200211920042902002118200329020021172006280200211120022802e40e211320023301e20e212420023100e10e2125200241e00e6a200110ad0420022d00e00e22124106460d0220024180086a41086a200241f40e6a220429020037030020024180086a41106a20162902003703002002200241ec0e6a220329020037038008200241e00e6a41086a2206280200211620022802e40e211520022f01e20e212b20022d00e10e212c200241e00e6a200110ad0420022d00e00e22234106460d0320024180096a41086a200429020037030020024180096a41106a200241fc0e6a220429020037030020022003290200370380092006280200212d20022802e40e212e20022f01e20e212020022d00e10e212f200241e00e6a200110ad0420022d00e00e22304106460d0620024190066a41086a200241f40e6a290200370300200241a0066a20042902003703002002200241ec0e6a29020037039006200241e00e6a41086a280200212220022802e40e212120072802002204450d0720022f01e20e213120022d00e10e2132200128020022032d0000210620012004417f6a22073602042001200341016a360200200641014b0d074200211e410021334200211d20060e020504050b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d3c200841c8006c450d3c200910350c3c0b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d3b200841c8006c450d3b200910350c3b0b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d3a200841c8006c450d3a200910350c3a0b024020124101470d002016450d00201510350b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d39200841c8006c450d39200910350c390b2007450d0220032d0001213420012004417e6a22063602042001200341026a3602002006450d0220032d0002210720012004417d6a22063602042001200341036a3602002006450d0220032d0003213520012004417c6a22063602042001200341046a3602002006450d0220032d0004213620012004417b6a22063602042001200341056a3602002006450d0220032d0005213320012004417a6a22063602042001200341066a3602002006450d0220032d000621372001200441796a22063602042001200341076a3602002006450d0220032d000721382001200441786a22063602042001200341086a3602002006450d0220032d0008211f2001200441776a22063602042001200341096a3602002006450d0220032d000921392001200441766a220636020420012003410a6a3602002006450d0220032d000a213a2001200441756a220636020420012003410b6a3602002006450d0220032d000b21292001200441746a220636020420012003410c6a3602002006450d0220032d000c213b2001200441736a220636020420012003410d6a3602002006450d0220032d000d213c2001200441726a220636020420012003410e6a3602002006450d0220032d000e213d2001200441716a220636020420012003410f6a3602002006450d0220032d000f212a2001200441706a22063602042001200341106a3602002006450d0220032d0010213e20012004416f6a22063602042001200341116a3602002006450d0220032d0011212620012004416e6a22063602042001200341126a3602002006450d0220032d0012213f20012004416d6a22063602042001200341136a3602002006450d0220032d0013214020012004416c6a22063602042001200341146a3602002006450d022003310014211e20012004416b6a3602042001200341156a3602002002203641187420354110747220074108747222042034723602e00e2002203bad4238862029ad42ff018342308684203aad42ff0183422886842039ad42ff018342208684201fad42ff018342188684221d2038ad42ff0183421086842037ad42ff0183420886842033ad42ff0183843702e40e201d421888201e4238862040ad42ff018342308684203fad42ff0183422886842026ad42ff018342208684203ead42ff018342188684202aad42ff018342108684203dad42ff018342088684203cad42ff018384221d42288684211e20044108762135201d421888211d20022800e30e2136410121330b200241e00e6a200110ad0420022d00e00e22374106460d02200241b00c6a41086a2204200241f40e6a290200370300200241b00c6a41106a2203200241fc0e6a2902003703002002200241ec0e6a22062902003703b00c200241e00e6a41086a2207280200213820022802e40e211f20022f01e20e213a20022d00e10e2139200241e00e6a200110ad0420022d00e00e4106470d0b024020374101470d002038450d00201f10350b024020304101470d002022450d00202110350b024020234101470d00202d450d00202e10350b024020124101470d002016450d00201510350b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d37200841c8006c450d37200910350c370b024020234101470d00202d450d00202e10350b024020124101470d002016450d00201510350b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d36200841c8006c450d36200910350c360b024020304101470d002022450d00202110350b024020234101470d00202d450d00202e10350b024020124101470d002016450d00201510350b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d35200841c8006c450d35200910350c350b024020304101470d002022450d00202110350b024020234101470d00202d450d00202e10350b024020124101470d002016450d00201510350b024020104101470d002011450d00201310350b0240200c4101470d002014450d00200f10350b02402005450d002009200541c8006c6a2104200921010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012004470d000b0b2008450d34200841c8006c450d34200910350c340b200241a8056a200110c40120022802a8050d3320022802ac052215200728020041c4006e2204200420154b1bad42c4007e220a422088a70d16200aa72204417f4c0d160240024020040d00410421090c010b200410332209450d0b0b200241003602880c200220093602800c2002200441c4006e3602840c024002402015450d00200241e80b6a410172210c20024180096a41186a2123200241f40b6a212c4100210641002108034041002103200241003a00800f200841016a21082007280200417f6a210402400240024003402004417f460d01200241e00e6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00800f2004417f6a21042005210320054120470d000b200220022800e30e3600c30b200220022802e00e3602c00b200241e00e6a410f6a2900002117200241e00e6a411f6a310000211b20022900e70e211820022900f70e211a200241e00e6a200110ad0420022d00e00e22034106470d01410621030c020b0240200341ff0171450d00200241003a00800f0b410621030c010b200241e80b6a41106a20174238883c0000202c20174218883e0200200220022d00c60b3a00e80b20022018a722043b00e90b200220044110763a00eb0b200220184218882017422886843702ec0b200241e00e6a41106a290300211e200241e00e6a41206a310000211c20022903e80e211920022903f80e211d20022801c20b210e20022d00c10b211420022d00c00b211320022d00e10e210f20022f01e20e211020022802e40e211120022d00810f211220022f01820f2116201a210a201b210b0b2023200b3c000020024180096a41086a2204200c41086a2900003703002002200a370390092002200c2900003703800920034106460d0220022d00e80b2105200e410876210d2004290300211720022903800921180240200620022802840c470d00200241800c6a20064101109f0120022802800c210920022802880c21060b2009200641c4006c6a220420163b0042200420123a00412004201d37003820042011360024200420103b00222004200f3a0021200420033a00202004200a37001720042005411874200d723600032004200e410874201441ff0171723b0001200420133a0000200441c0006a201c3c00002004411f6a200b3c00002004201937002820042018370007200441306a201e3700002004410f6a20173700002002200641016a22063602880c20082015470d000b0b2009450d3420022902840c210a200241a80b6a41106a200241b00c6a41106a290200370300200241a80b6a41086a200241b00c6a41086a290200370300200241900b6a41086a20024190066a41086a290300370300200241900b6a41106a20024190066a41106a290300370300200241f80a6a41086a20024180086a41086a290200370300200241f80a6a41106a20024180086a41106a290200370300200220022902b00c3703a80b20022002290390063703900b20022002290280083703f80a200241e00a6a41106a200241980c6a41106a290300370300200241e00a6a41086a200241980c6a41086a290300370300200220022903980c3703e00a200a422088a72105200aa7210841032127410021100c090b02402006450d00200641c4006c2104200941286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010350b200141c4006a2101200441bc7f6a22040d000b0b20022802840c2201450d33200141c4006c450d33200910350c330b200241c8056a200110c40120022802c8050d3220022802cc052109200241b0056a200110f60120022903b005a70d32200241b0056a41106a290300210a20022903b805210b200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024190066a41086a290200370300200241f80a6a41106a20024190066a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290290063703f80a200241e00a6a41106a20024180096a41106a290300370300200241e00a6a41086a20024180096a41086a29030037030020022002290380093703e00a200b422088a72105200a422088a7210f200a4280feffff0f83420888a7212a200ba72108200aa7210c41052127410021100c070b20264104490d312004280002210920012003417a6a360204410621272001200441066a360200200241a80b6a41086a200241e00e6a41086a290200370300200241a80b6a41106a200241e00e6a41106a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024190066a41086a290200370300200241f80a6a41106a20024190066a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290290063703f80a200241e00a6a41106a20024180096a41106a290300370300200241e00a6a41086a20024180096a41086a29030037030020022002290380093703e00a410021054100212a4100210c410021100c060b200241e8056a200110c40120022802e8050d3020022802ec052109200241d0056a200110f60120022903d005a70d30200241d0056a41106a290300210a20022903d805210b200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024190066a41086a290200370300200241f80a6a41106a20024190066a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290290063703f80a200241e00a6a41106a20024180096a41106a290300370300200241e00a6a41086a20024180096a41086a29030037030020022002290380093703e00a200b422088a72105200a422088a7210f200a4280feffff0f83420888a7212a200ba72108200aa7210c41072127410021100c050b200241f0056a200110c40120022802f0050d2f20022802f405210e41002103200241003a00800f2007280200417f6a2104024003402004417f460d01200241e00e6a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00800f2004417f6a21042005210320054120470d000b41082127200241a80b6a41086a20024180096a41086a290200370300200241a80b6a41106a20024180096a41106a290200370300200241900b6a41086a200241980c6a41086a290300370300200241900b6a41106a200241980c6a41106a29030037030020022002290280093703a80b200220022903980c3703900b200241ef0e6a290000210b200241ff0e6a310000210a20022800e30e210920022f00e10e212820022d00e00e212920022900e70e211820022900f70e211920022802d40b211120022903d80b2117200241f80a6a41106a200241800c6a41106a290200370300200241f80a6a41086a200241800c6a41086a290200370300200220022902800c3703f80a200241e00a6a41106a200241e80b6a41106a290300370300200241e00a6a41086a200241e80b6a41086a290300370300200220022903e80b3703e00a2019422088200a42208684210a2018422088a72105200b422088a7210f200b4280feffff0f83420888a7212a200241c40c6a290200211d20022902bc0c211e20022802cc0c213e20022802b80c213620022f01b60c213520022d00b50c213420022d00b40c213320022802b00c213d2019a721142018a72108200ba7210c410021100c050b200341ff0171450d2f200241003a00800f0c2f0b200241f8056a200110c40120022802f8050d2e200728020022044108490d2e20022802fc05210920012802002203290000210a2001200441786a3602042001200341086a360200200a4280025a0d2e200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290300370300200241900b6a41106a200241b00c6a41106a290300370300200241f80a6a41086a20024190066a41086a290200370300200241f80a6a41106a20024190066a41106a290200370300200220022902e00e3703a80b200220022903b00c3703900b20022002290290063703f80a200241e00a6a41106a20024180096a41106a290300370300200241e00a6a41086a20024180096a41086a29030037030020022002290380093703e00a200a422088a72105200aa7210841092127410021100c030b20024180066a200110c4012002280280060d2d2002280284062109200241e00e6a200110920620022d00e00e4102460d2d20072802002203450d2d200241e80e6a3502002118200241800f6a350200210b200241fc0e6a280200210e200241f40e6a290200210a200241f00e6a2802002114200241ec0e6a280200210f20022903e00e2119200128020022052d0000210420012003417f6a22063602042001200541016a360200200441064b0d2d42002117410021114100210d0240024002400240024002400240024020040e0707000501020304070b20064110490d34200541096a29000021172005290001211e20012003416f6a3602042001200541116a360200201e422088a72111201ea721134101210d0c060b4103210d0c040b4104210d0c030b4105210d0c020b4106210d0c010b4102210d0b0b200241a80b6a41106a200241980c6a41106a290200370300200241a80b6a41086a200241980c6a41086a290200370300200241900b6a41086a200241800c6a41086a290300370300200241900b6a41106a200241800c6a41106a290300370300200241f80a6a41086a200241e80b6a41086a290200370300200241f80a6a41106a200241e80b6a41106a290200370300200220022902980c3703a80b200220022903800c3703900b200220022902e80b3703f80a200241e00a6a41106a200241d00b6a41106a290300370300200241e00a6a41086a200241d00b6a41086a290300370300200220022903d00b3703e00a2019422088a7210520184280feffff0f83420888a7212a200241c40c6a290200211d20022802b80c213620022802cc0c213e20022902bc0c211e20022f01b60c213520022d00b50c213420022d00b40c21332019a721082018a7210c410a212741002110420021240c020b200241e00e6a200110920620022d00e00e4102460d2c200241d00b6a41086a200241fc0e6a280200360200200241a80b6a41086a20024180096a41086a290200370300200241a80b6a41106a20024180096a41106a2902003703002002200241e00e6a41146a29020022193703d00b20022002290280093703a80b200241800f6a280200210e200241ec0e6a290200210b20022802e00e210920022902e40e211820022802ec0b211120022903f00b211720022902d40b210a200241900b6a41106a20024180086a41106a290300370300200241900b6a41086a20024180086a41086a29030037030020022002290380083703900b200241f80a6a41106a200241980c6a41106a290200370300200241f80a6a41086a200241980c6a41086a290200370300200220022902980c3703f80a200241e00a6a41106a200241800c6a41106a290300370300200241e00a6a41086a200241800c6a41086a290300370300200220022903800c3703e00a2018422088a72105200b422088a7210f200b4280feffff0f83420888a7212a200241b00c6a41146a290200211d20022902bc0c211e20022802cc0c213e20022802b80c213620022f01b60c213520022d00b50c213420022d00b40c21332018a721082019a72114200ba7210c410b2127410021100c010b200241a80b6a41086a20024180086a41086a290300370300200241a80b6a41106a20024180086a41106a290300370300200241900b6a41086a20024180096a41086a290300370300200241900b6a41106a20024180096a41106a29030037030020022002290380083703a80b20022002290380093703900b200241f80e6a290300211a200241e00e6a41106a290300211b200241800f6a280200213d2006280200213c2007280200213b20022903e00e211c200241f80a6a41106a20024190066a41106a290300370300200241f80a6a41086a20024190066a41086a29030037030020022002290390063703f80a200241e00a6a41106a2003290300370300200241e00a6a41086a2004290300370300200220022903b00c3703e00a2027410874202841ff017172212a20244208862025842124410221270b200241c80a6a41106a2201200241a80b6a41106a290300370300200241c80a6a41086a2204200241a80b6a41086a290300370300200241b00a6a41086a2203200241900b6a41086a290300370300200241b00a6a41106a2206200241900b6a41106a290300370300200241980a6a41086a2207200241f80a6a41086a290300370300200241980a6a41106a2226200241f80a6a41106a290300370300200220022903a80b3703c80a200220022903900b3703b00a200220022903f80a3703980a200241800a6a41106a223f200241e00a6a41106a290300370300200241800a6a41086a2240200241e00a6a41086a290300370300200220022903e00a3703800a200041d8006a2019370200200041d0006a2018370200200041186a202a410874ad200cad42ff0183843e0200200041106a2005ad4220862008ad84370200200041e8006a2016360200200041e4006a20153602002000202b3b00622000202c3a0061200041e0006a20123a0000200041c8006a2017370200200041c4006a2011360200200041c0006a2013360200200041386a20244228862010ad42ff018342208684200dad84370200200041306a200b3702002000412c6a200e360200200041246a200a370200200041206a20143602002000411c6a200f3602002000410c6a2009360200200020283b000a200020293a0009200041086a20273a00002000411736020020004188016a202e3602002000418c016a202d360200200020203b0086012000202f3a00850120004184016a20233a0000200041a8016a20303a0000200020323a00a901200020313b00aa01200041b0016a2022360200200041ac016a2021360200200041fc006a2001290300370200200041f4006a2004290300370200200041ec006a20022903c80a37020020004190016a20022903b00a37020020004198016a2003290300370200200041a0016a2006290300370200200041cc016a20373a0000200020393a00cd012000203a3b00ce01200041d4016a2038360200200041d0016a201f360200200041a4026a201d3700002000419c026a201e37000020004188026a201a37020020004180026a201b37020020004194026a20333a0000200020343a009502200020353b009602200041ac026a203e36020020004198026a203636000020004190026a203d360200200041fc016a203c360200200041f8016a203b360200200041f0016a201c370200200041c4016a2026290300370200200041bc016a2007290300370200200041b4016a20022903980a370200200041d8016a20022903800a370200200041e0016a2040290300370200200041e8016a203f2903003702000c480b2006450d0720042d0001210520012003417e6a22123602042001200441026a3602002005410b4b0d074107210d4200211d4100211141002106024002400240024002400240024020050e0c0001020304052f0608090a0b000b20124110490d0d2004410a6a29000021172004290002210b20012003416e6a3602042001200441126a3602004101210d4200211e410021064200211d0c2e0b20124104490d0c2004280002210c20012003417a6a3602042001200441066a3602004102210d0c2c0b41002105200241003a00d00c2003417e6a2109417d21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a00002001200320066a3602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200220022800b30c3600c30b200220022802b00c22083602c00b200320076b2203417e6a4110490d0c200241bf0c6a2900002117200241cf0c6a310000211c20022900b70c210b20022900c70c210a20022f00c10b211420022800c30b210c200420076a2204410e6a2800002113200441066a290000211d200441026a280000210620012003416e6a22053602042001200441126a220736020020054110490d0c2004411a6a29000021192007290000211820012003415e6a3602042001200441226a360200201d421088211e20064180807c712111201ca741ff017121104103210d0c2d0b200541ff0171450d0b200241003a00d00c0c0b0b4104210d20124104490d0a2004280002210c20012003417a6a3602042001200441066a3602000c2a0b200241b00c6a200110920620022d00b00c4102460d0920072802002203450d09200241bc0c6a2902002117200241d00c6a280200210e200241ce0c6a2f0100210f200241cd0c6a2d00002109200241cc0c6a2d00002110200241c40c6a290200210a20022902b40c210b20022802b00c210c200128020022052d0000210420012003417f6a3602042001200541016a360200200441014b0d09410021080240024020040e020100010b410121080b20023502900620023301940642208684211e200241a2066a2901002119200229019a06211820022801960621134105210d41002111410021060c2a0b2012450d0820042d0002210520012003417d6a3602042001200441036a360200200541014b0d084106210d410021114200211e410021064200211d4100210820050e022906290b41002105200241003a00d00c2003417e6a2108417d2106024002400240034020082005460d01200241b00c6a20056a200420056a220941026a2d00003a00002001200320066a3602042001200941036a3602002002200541016a22093a00d00c2006417f6a21062009210520094120470d000b20024198086a200241cf0c6a31000022183c0000200220022800b30c3600c30b200220022802b00c22083602c00b200220022900c70c220a37039008200220022900b70c220b370380082002200241bf0c6a290000221737038808200320096b2203417e6a4104490d0a200241c50b6a2d0000210520022f00c30b210c20022d00c10b211420022d00c20b211320022d00c60b210d200420096a220441026a280000210e20012003417a6a3602042001200441066a36020020024188066a200110c4012002280288060d0a2007280200200228028c062204490d0a2004417f4c0d0f20040d0142002119410121060c020b200541ff0171450d09200241003a00d00c0c090b200410392206450d0120072802002004490d07200620012802002004109d081a200128020422032004490d262001200320046b3602042001200128020020046a3602002004ad21190b2006450d07200d411874200c20054110747241ffffff077172210c20192004ad42208684221d421088211e20064180807c7121114108210d201341087420147221142018a741ff017121100c280b1045000b4109210d410021060c260b41002105200241003a00d00c2003417e6a21092003417d6a2106024002400240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200220022800b30c3600c30b200220022802b00c22083602c00b2003417e6a2007460d07200241bf0c6a2900002117200241cf0c6a310000211820022900b70c210b20022900c70c210a20022f00c10b211420022800c30b210c200420076a220341026a2d00002104200120063602042001200341036a360200200441014b0d074100210920040e020201020b200541ff0171450d06200241003a00d00c0c060b410121090b2018a741ff01712110410a210d0c230b41002105200241003a00d00c2003417e6a21092003417d6a21060240034020092005460d01200241b00c6a20056a200420056a220741026a2d00003a0000200120063602042001200741036a3602002002200541016a22073a00d00c2006417f6a21062007210520074120470d000b200241e80b6a41106a200241bf0c6a290000220a4238883c0000200241f40b6a200a4218883e0200200220022800b30c3600c30b200220022802b00c22083602c00b200220022d00c60b3a00e80b200220022900b70c220ba722053b00e90b200220054110763a00eb0b2002200b421888200a422886843702ec0b2003417e6a2007460d04200241cf0c6a310000210b20022900c70c210a20022d00c10b210520022801c20b2103200420076a220441026a2d00002109200120063602042001200441036a360200200941034f0d0420022d00e80b411874200341087672210c20034108742005722114200ba741ff01712110200241e80b6a410172220141086a29000021172001290000210b410b210d0c230b200541ff0171450d03200241003a00d00c0c030b20124104490d022004280002210c20012003417a6a3602042001200441066a360200410c210d0c220b410121084200211e41002111410021064200211d0c220b200610350b2000411b3602000c3f0b200241b00c6a2001109506024020022d00b00c410a460d0020024190066a200241b00c6a41c400109d081a20004119360200200041046a20024190066a41c400109d081a200041c8006a200241e00e6a41e801109d081a0c3f0b2000411b3602000c3e0b02402006450d0020042d0001210520012003417e6a3602042001200441026a360200200541024b0d004101210402400240024020050e03020001020b200241b00c6a20011092064102210420022d00b00c4102460d02200241c40c6a2902002117200241bc0c6a290200210b200241cc0c6a290200210a200241b80c6a280200210320022802b40c210620022802b00c21090c010b200241b00c6a200110920620022d00b00c4102460d01200728020022054110490d01200241c40c6a2902002117200241bc0c6a290200210b200241cc0c6a290200210a200241b00c6a41086a280200210320022802b40c210620022802b00c21092001280200220441086a2900002119200429000021182001200441106a3602002001200541706a220736020420074110490d01200441186a290000211d2004290010211e2001200541606a22073602042001200441206a36020020074104490d012004280020210820012005415c6a3602042001200441246a360200410321040b2000411a360200200041c8006a201d370200200041c0006a201e370200200041386a2019370200200041306a2018370200200041206a2017370200200041186a200b370200200041d0006a2008360200200041286a200a370200200041146a2003360200200041106a20063602002000410c6a2009360200200041086a2004360200200041d8006a200241e00e6a41d801109d081a0c3e0b2000411b3602000c3d0b02402006450d0020012003417e6a3602042001200441026a3602000b2000411b3602000c3c0b2000411b3602000c3b0b1044000b2004200341a4f0cb001059000b2004200341a4f0cb001059000b2004200341a4f0cb001059000b2004200341a4f0cb001059000b2003200d41a4f0cb001059000b2004200841a4f0cb001059000b2004200341a4f0cb001059000b2004200341a4f0cb001059000b200810350c260b2004200341a4f0cb001059000b2004200341a4f0cb001059000b2003200541a4f0cb001059000b200410350b2000411b3602000c2c0b2004200341a4f0cb001059000b2004200341a4f0cb001059000b2004200541a4f0cb001059000b2006200341a4f0cb001059000b2005200341a4f0cb001059000b2004200341a4f0cb001059000b2003200741a4f0cb001059000b200c200541a4f0cb001059000b2004200341a4f0cb001059000b2004200c41a4f0cb001059000b2004200341a4f0cb001059000b4200211e41002111410021064200211d0c010b4200211e410021064200211d0b2000200f3b012a200020093a0029200020143b010a200020083a000920004118360200200041c8006a2019370200200041c0006a2018370200200041186a2017370200200041106a200b3702002000413c6a20133602002000412c6a200e360200200041286a20103a0000200041206a200a3702002000410c6a200c360200200041086a200d3a0000200041346a201e421086201d42ffff038384370200200041306a2011200641ffff037172360200200041d0006a200241e00e6a41e001109d081a0c1e0b2000411b3602000c1d0b200410350b2000411b3602000c1b0b4100210c420021180b200241800c6a41106a200241980c6a41106a2903002219370300200241800c6a41086a200241980c6a41086a290300221e370300200220022903980c221d3703800c200041286a20173c0000200041206a200b370200200041186a2018421886200a42288884370200200041106a200a4218862008ad42ffffff0783843702002000412c6a20043602002000412a6a20073b0100200020093a00292000410c6a2001411874200341ffffff0771723602002000200c410874200641ff0171723b000a200020053a0009200041086a200e3a000020004110360200200041306a201d370200200041386a201e370200200041c0006a2019370200200041c8006a200241e00e6a41e801109d081a0c190b0b4200211c4200211b4200211a4200210b42002124420021250b200020143b00462000200d3a00452000200f3b0026200020103a0025200020083a0005200020063a00042000410d360200200041246a200a4220883c0000200041206a200a3e0000200041c4006a201d3c00002000413c6a201e370000200041146a20183700002000410c6a2017370000200041286a20133600002000411c6a2011360000200041086a200c411874200741ffffff07717236000020002009410874200e41ff0171723b00062000412c6a200b200b84201b84201984370000200041346a2025202484201a84201c84370000200041c8006a200241e00e6a41e801109d081a0c160b2000411b3602000c150b4100210e0b0b200020153b012a2000200c3a00292000200f3b011a200020123a0019200020063a000920004109360200200041286a200a4220883c0000200041246a200a3e0200200041386a2018370200200041306a20173702002000412c6a2014360200200041206a20103602002000411c6a2011360200200041186a20163a0000200041106a200b370200200041086a20133a00002000410c6a200d411874200941ffffff0771723602002000200e410874200841ff0171723b000a200041c0006a200241e00e6a41f001109d081a0c120b4100210802402004450d00200910350b41022109410021060b41000d052009450d05200241e00e6a200110f80102400240024020022802e00e450d00200241b00c6a200241e00e6a41c001109d081a200728020022034110490d012001280200220441086a290000211e200429000021192001200441106a3602002001200341706a220536020420054110490d01200441186a290000211c2004290010211d2001200341606a22053602042001200441206a36020020054110490d01200441286a290000211a2004290020211b2001200341506a22053602042001200441306a36020020054104490d022004280030211320012003414c6a3602042001200441346a360200200241a80b6a41086a200241ec0c6a290200370300200241a80b6a41106a200241f40c6a2902003703002002200241b00c6a41346a2902003703a80b200241b00c6a41106a310000210b200241d00c6a2903002118200241c40c6a280200210f200241b00c6a41286a2d00002110200241dc0c6a280200211120022903b80c210a20022903c80c211720022802b00c210c20022802b40c211420022d00c10c212120022f01c20c212020022d00d90c213220022f01da0c213120022802e00c2112200241900b6a41086a200241900d6a290300370300200241900b6a41106a200241980d6a290300370300200241f80a6a41086a200241b40d6a290200370300200241f80a6a41106a200241bc0d6a2902003703002002200241880d6a2903003703900b2002200241ac0d6a2902003703f80a200241800d6a2802002115200241fc0c6a2d00002116200241a40d6a280200212b200241a00d6a2d0000212c20022802840d212320022f01fe0c213520022d00fd0c213420022802a80d212d20022f01a20d213320022d00a10d2136200241e00a6a41106a200241e00d6a290300370300200241e00a6a41086a200241d80d6a2903003703002002200241d00d6a2903003703e00a200241c80d6a2802002130200241c40d6a2d0000212e200241e80d6a290300212420022802cc0d212f20022f01c60d213820022d00c50d21374118210d0c0a0b20080d040c070b200241b00c6a10fa01200841808080807872418080808078470d030c060b200241b00c6a10fa012008450d050c020b4100210802402004450d00200910350b41022109410021060b41000d032009450d03200241e00e6a200110f80102400240024020022802e00e450d00200241b00c6a200241e00e6a41c001109d081a200728020022034110490d012001280200220441086a290000211e200429000021192001200441106a3602002001200341706a220536020420054110490d01200441186a290000211c2004290010211d2001200341606a22053602042001200441206a36020020054110490d01200441286a290000211a2004290020211b2001200341506a22053602042001200441306a36020020054104490d022004280030211320012003414c6a3602042001200441346a360200200241a80b6a41086a200241ec0c6a290200370300200241a80b6a41106a200241f40c6a2902003703002002200241b00c6a41346a2902003703a80b200241b00c6a41106a310000210b200241d00c6a2903002118200241c40c6a280200210f200241b00c6a41286a2d00002110200241dc0c6a280200211120022903b80c210a20022903c80c211720022802b00c210c20022802b40c211420022d00c10c212120022f01c20c212020022d00d90c213220022f01da0c213120022802e00c2112200241900b6a41086a200241900d6a290300370300200241900b6a41106a200241980d6a290300370300200241f80a6a41086a200241b40d6a290200370300200241f80a6a41106a200241bc0d6a2902003703002002200241880d6a2903003703900b2002200241ac0d6a2902003703f80a200241800d6a2802002115200241fc0c6a2d00002116200241a40d6a280200212b200241a00d6a2d0000212c20022802840d212320022f01fe0c213520022d00fd0c213420022802a80d212d20022f01a20d213320022d00a10d2136200241e00a6a41106a200241e00d6a290300370300200241e00a6a41086a200241d80d6a2903003703002002200241d00d6a2903003703e00a200241c80d6a2802002130200241c40d6a2d0000212e200241e80d6a290300212420022802cc0d212f20022f01c60d213820022d00c50d21374117210d0c080b20080d020c050b200241b00c6a10fa01200841808080807872418080808078470d010c040b200241b00c6a10fa012008450d030b200910350c020b4100210602402001450d00200810350b410421084100210c0b41000d002008450d004110210d200241a80b6a41106a200241e00e6a41106a290200370300200241a80b6a41086a200241e00e6a41086a290200370300200241900b6a41086a200241b00c6a41086a290200370300200241900b6a41106a200241b00c6a41106a290200370300200241f80a6a41086a20024180096a41086a290200370300200241f80a6a41106a20024180096a41106a290200370300200220022902e00e3703a80b200220022902b00c3703900b20022002290280093703f80a200241e00a6a41106a20024180086a41106a290200370300200241e00a6a41086a20024180086a41086a29020037030020022002290280083703e00a0c020b2000411b3602000c0a0b410021144100210c410021060b200241c80a6a41106a2201200241a80b6a41106a290300370300200241c80a6a41086a2204200241a80b6a41086a290300370300200241b00a6a41086a2203200241900b6a41086a290300370300200241b00a6a41106a2205200241900b6a41106a290300370300200241980a6a41086a2207200241f80a6a41086a290300370300200241980a6a41106a221f200241f80a6a41106a290300370300200220022903a80b3703c80a200220022903900b3703b00a200220022903f80a3703980a200241800a6a41106a2239200241e00a6a41106a290300370300200241800a6a41086a223a200241e00a6a41086a290300370300200220022903e00a3703800a200041386a2018370200200041306a2017370200200041286a200b3c0000200041206a200a370200200041186a2014ad422086200cad84370200200041106a2006ad4220862008ad84370200200041c8006a2012360200200041c4006a2011360200200020313b0042200020323a0041200041c0006a20103a00002000412c6a200f360200200020203b012a200020213a00292000410c6a2009360200200020223b010a2000200e3a0009200041086a200d3a000020004107360200200041e8006a2015360200200041ec006a2023360200200020353b0066200020343a0065200041e4006a20163a0000200041cc006a20022903c80a370200200041d4006a2004290300370200200041dc006a20012903003702002000418c016a202b36020020004190016a202d360200200020333b008a01200020363a00890120004188016a202c3a0000200041f0006a20022903b00a370200200041f8006a200329030037020020004180016a2005290300370200200041a4016a201f2903003702002000419c016a200729030037020020004194016a20022903980a370200200041b4016a202f360200200041b0016a2030360200200020383b00ae01200020373a00ad01200041ac016a202e3a0000200041c8016a2039290300370200200041c0016a203a290300370200200041b8016a20022903800a37020020004188026a201a37020020004180026a201b370200200041f8016a201c370200200041f0016a201d370200200041e8016a201e370200200041e0016a2019370200200041d8016a2013360200200041d0016a2024370200200041a8026a20024190066a41186a290300370300200041a0026a20024190066a41106a29030037030020004198026a20024190066a41086a29030037030020004190026a2002290390063703000c080b20004106360200200041e0006a201c370200200041d8006a201d370200200041c8006a201a370200200041c0006a201b370200200041386a2018370200200041306a2019370200200041206a200a370200200041186a200b370200200041d0006a201e370200200041286a2017370200200041146a2004360200200041106a20033602002000410c6a2005360200200041086a2001360200200041e8006a200241e00e6a41c801109d081a0c070b410021014200210b410021034100210e0b200041003a0025200020043b0023200020083b0006200020053a0005200020063a0004200041053602002000411b6a200b370000200041136a200a370000200041286a200e360200200041266a41003b01002000410f6a20013600002000410d6a20033b00002000410c6a20073a0000200041086a20093602002000412c6a200241e00e6a418402109d081a0c050b200410350b2000411b3602000c030b103c000b200610350b2000411b3602000b20024190116a24000b9d1401037f02402000280200220141194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020010e1a0001121202121203040506070809120a0b0c0d0e1212120f1011000b200041086a280200417e6a220141074b0d1102400240024002400240024020010e080017010217030405000b200041106a280200450d162000410c6a28020010350f0b200041106a280200450d152000410c6a28020010350f0b200041106a280200450d142000410c6a28020010350f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141186a2101200241686a22020d000b0b200041106a2802002201450d13200141186c450d13200028020c10350f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d122001410c6c450d12200028020c10350f0b200041106a280200450d112000410c6a28020010350f0b024020002d0004220141044b0d00024002400240024020010e051500010203150b0240200041106a2802002202450d00200041086a2802002101200241b0026c21020340200110bb02200141b0026a2101200241d07d6a22020d000b0b2000410c6a2802002201450d14200141b0026c450d14200028020810350f0b200041086a220128020010ba02200128020010350f0b02402000410c6a28020041ffffff3f71450d00200041086a28020010350b200041206a220128020010ba02200128020010350f0b2000412c6a28020041ffffff3f71450d11200041286a28020010350f0b2000412c6a28020041ffffff3f71450d10200041286a28020010350f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a21010340200110b1030240200141046a2802002203450d00200341246c450d00200128020010350b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0f200141f0006c450d0f200028020410350f0b0240200041086a2d0000220141174b0d000240024002400240024020010e18141414141414001414141414140114140203141414141404140b200041106a2802002201450d13200141246c450d132000410c6a28020010350f0b200041106a28020041ffffff3f71450d122000410c6a28020010350f0b200041146a28020041ffffffff0371450d11200041106a28020010350f0b200041146a2802002201450d10200141246c450d10200041106a28020010350f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010350b200041186a10fa010f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010350b200041186a10fa010f0b20002802042201450d0d200041086a280200450d0d200110350f0b200041086a2d0000416d6a220141014b0d0c0240024020010e020001000b200041106a280200450d0d2000410c6a28020010350f0b200041106a280200450d0c2000410c6a28020010350f0b20002d0004417f6a220141024b0d0b02400240024020010e03000102000b2000412c6a28020041ffffff3f71450d0d200041286a28020010350f0b200041086a220128020010ba02200128020010350f0b2000410c6a220128020010ba02200128020010350f0b20002d0004417f6a220141024b0d0a02400240024020010e03000102000b2000412c6a28020041ffffff3f71450d0c200041286a28020010350f0b200041086a220128020010ba02200128020010350f0b2000410c6a220128020010ba02200128020010350f0b200041086a2802004101470d09200041106a28020041ffffff3f71450d092000410c6a28020010350f0b20002d00044104470d082000410c6a28020041ffffff3f71450d08200041086a28020010350f0b200041086a280200450d07200028020410350f0b200041086a2d0000417c6a220141024b0d060240024020010e03000801000b200041306a280200450d072000412c6a28020010350f0b200041306a280200450d062000412c6a28020010350f0b200041086a2d0000417e6a220141024b0d0502400240024020010e03000102000b200041106a280200450d072000410c6a28020010350c070b200041346a280200450d06200041306a28020010350f0b200041306a280200450d052000412c6a28020010350f0b02402000280204220141024b0d00024020010e03060006060b200041086a220128020010ba02200128020010350f0b2000412c6a220128020010ba02200128020010350f0b02402000410c6a280200450d00200041086a28020010350b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d032001410c6c450d03200028021410350f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b0240200041106a2802002201450d00200141c8006c450d00200028020c10350b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010350b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010350b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010350b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010350b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010350b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010350b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a28020010350f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010350b200141c4006a2101200241bc7f6a22020d000b0b200041106a2802002201450d02200141c4006c450d02200028020c10350f0b200041086a2d00004108470d01200041346a280200450d01200041306a28020010350f0b20002d0004417f6a220141024b0d000240024020010e03000201000b200041286a220128020010ba02200128020010350f0b2000410c6a28020041ffffff3f71450d00200041086a28020010350f0b0b9d1401037f02402000280200220141194b0d0002400240024002400240024002400240024002400240024002400240024002400240024020010e1a0001121202121203040506070809120a0b0c0d0e1212120f1011000b200041086a280200417e6a220141074b0d1102400240024002400240024020010e080017010217030405000b200041106a280200450d162000410c6a28020010350f0b200041106a280200450d152000410c6a28020010350f0b200041106a280200450d142000410c6a28020010350f0b0240200041146a2802002202450d002000410c6a2802002101200241186c210203400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141186a2101200241686a22020d000b0b200041106a2802002201450d13200141186c450d13200028020c10350f0b0240200041146a2802002202450d002000410c6a28020021012002410c6c210203400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b200041106a2802002201450d122001410c6c450d12200028020c10350f0b200041106a280200450d112000410c6a28020010350f0b024020002d0004220141044b0d00024002400240024020010e051500010203150b0240200041106a2802002202450d00200041086a2802002101200241b0026c21020340200110bb02200141b0026a2101200241d07d6a22020d000b0b2000410c6a2802002201450d14200141b0026c450d14200028020810350f0b200041086a220128020010bb02200128020010350f0b02402000410c6a28020041ffffff3f71450d00200041086a28020010350b200041206a220128020010bb02200128020010350f0b2000412c6a28020041ffffff3f71450d11200041286a28020010350f0b2000412c6a28020041ffffff3f71450d10200041286a28020010350f0b02402000410c6a2802002201450d00200141f0006c2102200028020441046a21010340200110b1030240200141046a2802002203450d00200341246c450d00200128020010350b200141f0006a2101200241907f6a22020d000b0b200041086a2802002201450d0f200141f0006c450d0f200028020410350f0b0240200041086a2d0000220141174b0d000240024002400240024020010e18141414141414001414141414140114140203141414141404140b200041106a2802002201450d13200141246c450d132000410c6a28020010350f0b200041106a28020041ffffff3f71450d122000410c6a28020010350f0b200041146a28020041ffffffff0371450d11200041106a28020010350f0b200041146a2802002201450d10200141246c450d10200041106a28020010350f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010350b200041186a10fa010f0b0240200041106a28020041808080807872418080808078460d002000410c6a28020010350b200041186a10fa010f0b20002802042201450d0d200041086a280200450d0d200110350f0b200041086a2d0000416d6a220141014b0d0c0240024020010e020001000b200041106a280200450d0d2000410c6a28020010350f0b200041106a280200450d0c2000410c6a28020010350f0b20002d0004417f6a220141024b0d0b02400240024020010e03000102000b2000412c6a28020041ffffff3f71450d0d200041286a28020010350f0b200041086a220128020010bb02200128020010350f0b2000410c6a220128020010bb02200128020010350f0b20002d0004417f6a220141024b0d0a02400240024020010e03000102000b2000412c6a28020041ffffff3f71450d0c200041286a28020010350f0b200041086a220128020010bb02200128020010350f0b2000410c6a220128020010bb02200128020010350f0b200041086a2802004101470d09200041106a28020041ffffff3f71450d092000410c6a28020010350f0b20002d00044104470d082000410c6a28020041ffffff3f71450d08200041086a28020010350f0b200041086a280200450d07200028020410350f0b200041086a2d0000417c6a220141024b0d060240024020010e03000801000b200041306a280200450d072000412c6a28020010350f0b200041306a280200450d062000412c6a28020010350f0b200041086a2d0000417e6a220141024b0d0502400240024020010e03000102000b200041106a280200450d072000410c6a28020010350c070b200041346a280200450d06200041306a28020010350f0b200041306a280200450d052000412c6a28020010350f0b02402000280204220141024b0d00024020010e03060006060b200041086a220128020010bb02200128020010350f0b2000412c6a220128020010bb02200128020010350f0b02402000410c6a280200450d00200041086a28020010350b02402000411c6a2802002202450d00200041146a28020021012002410c6c210203400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d032001410c6c450d03200028021410350f0b200041086a2d0000417e6a220141014b0d020240024020010e020001000b0240200041146a2802002202450d002000410c6a2802002201200241c8006c6a21020340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b0240200041106a2802002201450d00200141c8006c450d00200028020c10350b0240200041186a2d00004101470d00200041206a280200450d002000411c6a28020010350b02402000413c6a2d00004101470d00200041c4006a280200450d00200041c0006a28020010350b0240200041e0006a2d00004101470d00200041e8006a280200450d00200041e4006a28020010350b024020004184016a2d00004101470d002000418c016a280200450d0020004188016a28020010350b0240200041a8016a2d00004101470d00200041b0016a280200450d00200041ac016a28020010350b0240200041cc016a2d00004101470d00200041d4016a280200450d00200041d0016a28020010350b200041f0016a2d00004101470d03200041f8016a280200450d03200041f4016a28020010350f0b0240200041146a2802002201450d00200141c4006c21022000410c6a28020041286a210103400240200141786a2d00004101470d002001280200450d002001417c6a28020010350b200141c4006a2101200241bc7f6a22020d000b0b200041106a2802002201450d02200141c4006c450d02200028020c10350f0b200041086a2d00004108470d01200041346a280200450d01200041306a28020010350f0b20002d0004417f6a220141024b0d000240024020010e03000201000b200041286a220128020010bb02200128020010350f0b2000410c6a28020041ffffff3f71450d00200041086a28020010350f0b0bad0204017f017e017f027e230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004110490d00200141086a290000210520012900002106420121030c010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b420021030b2004450d00200110350b2000200637030820002003370300200041106a2005370300200241d0006a24000b950201047f230041d0006b220124002001412036020420012000360200200141086a2000ad4280808080800484100510c20102400240200128020822020d00410221000c010b200128020c210302400240200141106a280200450d0020022d0000220441014b0d0041002100024020040e020200020b410121000c010b20014100360220200142013703182001410936022c200120013602282001200141186a360234200141cc006a41013602002001420137023c200141c888c2003602382001200141286a360248200141346a41e88ac500200141386a10431a200135022042208620013502188410060240200128021c450d00200128021810350b410221000b2003450d00200210350b200141d0006a240020000bad0e04057f017e107f047e230041a0036b220224002002412036021420022001360210200241186a2001ad4280808080800484100510c2010240024002400240200228021822030d00200041003602000c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10c40102400240024020022802080d00200228020c2205200228022c220641e8006e2201200120054b1bad42e8007e2207422088a70d052007a72201417f4c0d050240024020010d00410821080c010b200110332208450d050b20024100360238200220083602302002200141e8006e36023402402005450d00200241e8026a41017221094100210a4100210b034041002101200241003a008803200b41016a210b0240024002400240034020062001460d01200241e8026a20016a2002280228220c2d00003a00002002200c41016a3602282002200141016a220c3a008803200c2101200c4120470d000b20024190026a41086a2201200241e8026a41086a220d29030037030020024190026a41106a220e200241e8026a41106a220f29030037030020024190026a41186a2210200241e8026a41186a2211290300370300200220022903e8023703900220022006200c6b36022c200241e8026a200241286a10bf0220022d00e802220c4102470d010c020b2002410036022c200141ff0171450d01200241003a0088034102210c0c020b200241b0026a412f6a22062009412f6a290000370000200241b0026a41286a2212200941286a290000370300200241b0026a41206a2213200941206a290000370300200241b0026a41186a2214200941186a290000370300200241b0026a41106a2215200941106a290000370300200241b0026a41086a2216200941086a290000370300200220092900003703b002200228022c22174110490d00200241f0016a41086a2001290300370300200241f0016a41106a200e290300370300200241f0016a41186a2010290300370300200d2016290300370300200f201529030037030020112014290300370300200241e8026a41206a2013290300370300200241e8026a41286a2012290300370300200241e8026a412f6a200629000037000020022002290390023703f001200220022903b0023703e8022002201741706a36022c20022002280228220141106a360228200141086a2900002118200129000021190c010b4102210c0b200241b8016a412f6a2201200241e8026a412f6a290000370000200241b8016a41286a2206200241e8026a41286a290300370300200241b8016a41206a220d200241e8026a41206a290300370300200241b8016a41186a220e200241e8026a41186a290300370300200241b8016a41106a220f200241e8026a41106a290300370300200241b8016a41086a2210200241e8026a41086a29030037030020024198016a41086a2211200241f0016a41086a29030037030020024198016a41106a2212200241f0016a41106a29030037030020024198016a41186a2213200241f0016a41186a290300370300200220022903e8023703b801200220022903f001370398010240200c4102460d00200241e0006a412f6a22142001290000370000200241e0006a41286a22152006290300370300200241e0006a41206a2206200d290300370300200241e0006a41186a220d200e290300370300200241e0006a41106a220e200f290300370300200241e0006a41086a220f2010290300370300200241c0006a41086a22102011290300370300200241c0006a41106a22112012290300370300200241c0006a41186a22122013290300370300200220022903b80137036020022002290398013703400240200a2002280234470d00200241306a200a4101109601200228023021082002280238210a0b2008200a41e8006c6a2201200c3a0000200141196a200d290300370000200141116a200e290300370000200141096a200f29030037000020012002290360370001201429000021072015290300211a2006290300211b200141c0006a2018370000200141386a2019370000200141216a201b370000200141296a201a370000200141306a2007370000200141c8006a2002290340370000200141d0006a2010290300370000200141d8006a2011290300370000200141e0006a20122903003700002002200a41016a220a360238200b2005460d02200228022c21060c010b0b20022802342201450d01200141e8006c450d01200810350c010b20080d010b200241003602b802200242013703b002200241093602bc012002200241106a3602b8012002200241b0026a360260200241fc026a4101360200200242013702ec02200241c888c2003602e8022002200241b8016a3602f802200241e0006a41e88ac500200241e8026a10431a20023502b80242208620023502b002841006024020022802b402450d0020022802b00210350b200041003602000c010b20002002290234370204200020083602000b2004450d00200310350b200241a0036a24000f0b1045000b1044000bcc0502077f067e230041f0006b2102024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a360200200541014b0d0320050e020102010b200041023a00000f0b024020064110490d00200041003a000020002002280028360001200041086a2004290001370300200041186a2002290348370300200041106a200441096a29000037030020012003416f6a3602042001200441116a360200200041046a2002412b6a280000360000200041206a200241c8006a41086a290300370300200041286a200241c8006a41106a290300370300200041306a200241c8006a41186a2903003703000f0b200041023a00000f0b41002105200241003a00682003417f6a2107417e210602400240034020072005460d01200241c8006a20056a200420056a220841016a2d00003a00002001200320066a3602042001200841026a3602002002200541016a22083a00682006417f6a21062008210520084120470d000b200241286a41186a2205200241c8006a41186a290300370300200241286a41106a2206200241c8006a41106a290300370300200241286a41086a2207200241c8006a41086a290300370300200220022903483703282008417f7320036a4110490d01200241086a41086a20072903002209370300200241086a41106a2006290300220a370300200241086a41186a2005290300220b370300200420086a220541016a290000210c200541096a290000210d2001200320086b416f6a3602042001200541116a36020020022002290328220e370308200041013a00002000200e370001200041096a2009370000200041116a200a370000200041196a200b370000200041306a200d370300200041286a200c370300200041216a2002280001360000200041246a200241046a2800003600000f0b200541ff0171450d00200241003a00680b200041023a00000f0b200041023a00000bfe0301057f230041f0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022030d00200041033a00200c010b200241186a28020021042002280214210541002101200241003a0068024002400240034020042001460d01200241c8006a20016a200320016a2d00003a00002002200141016a22063a00682006210120064120470d000b200241286a41186a200241c8006a41186a290300370300200241286a41106a200241c8006a41106a290300370300200241286a41086a200241c8006a41086a2903003703002002200229034837032820042006460d01200320066a2d0000220141034f0d0120002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a2903003700000c020b200141ff0171450d00200241003a00680b2002410036023020024201370328200241093602242002200241086a3602202002200241286a36026c200241dc006a41013602002002420137024c200241c888c2003602482002200241206a360258200241ec006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b410321010b200020013a00202005450d00200310350b200241f0006a24000bd60201027f230041c0026b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003a00000c010b200328021421042003200341186a2802003602ac02200320013602a802200341a0016a200341a8026a10c202410121020240024020032d00a0014101470d00410021022003410036022820034201370320200341093602b4022003200341086a3602b0022003200341206a3602bc02200341b4016a4101360200200342013702a401200341c888c2003602a0012003200341b0026a3602b001200341bc026a41e88ac500200341a0016a10431a200335022842208620033502208410062003280224450d01200328022010350c010b200341206a200341a0016a410172418001109d081a200041016a200341206a418001109d081a0b200020023a00002004450d00200110350b200341c0026a24000ba60901077f230041d0026b2202240041002103200241003a002820012802042104417f210502400240024002400240034020042003460d01200241086a20036a200128020022062d00003a00002001200420056a3602042001200641016a3602002002200341016a22073a00282005417f6a21052007210320074120470d000b20024188016a41086a200241086a41086a29030037030020024188016a41106a200241086a41106a29030037030020024188016a41186a200241086a41186a290300370300200220022903083703880141002108200241003a0028200420076b2107200420056a2103034020072008460d02200241086a20086a200620086a220541016a2d00003a0000200120033602042001200541026a3602002002200841016a22053a00282003417f6a21032005210820054120470d000b200241a8016a41086a200241086a41086a290300370300200241a8016a41106a200241086a41106a290300370300200241a8016a41186a200241086a41186a290300370300200220022903083703a80141002107200241003a0028200620056a210803402003417f460d03200241086a20076a200820076a220541016a2d00003a0000200120033602042001200541026a3602002002200741016a22053a00282003417f6a21032005210720054120470d000b200241c8016a41086a200241086a41086a290300370300200241c8016a41106a200241086a41106a290300370300200241c8016a41186a200241086a41186a290300370300200220022903083703c80141002107200241003a00c802200820056a41016a210503402003417f460d04200241a8026a20076a20052d00003a0000200120033602042001200541016a22053602002002200741016a22083a00c8022003417f6a21032008210720084120470d000b200241e8016a41086a2201200241a8026a41086a290300370300200241e8016a41106a2203200241a8026a41106a290300370300200241e8016a41186a2205200241a8026a41186a290300370300200241086a41086a20024188016a41086a290300370300200241086a41106a20024188016a41106a290300370300200241086a41186a20024188016a41186a290300370300200220022903a8023703e8012002200229038801370308200241c0006a200241a8016a41186a290300370300200241386a200241a8016a41106a290300370300200241306a200241a8016a41086a290300370300200220022903a801370328200241e0006a200241c8016a41186a290300370300200241d8006a200241c8016a41106a290300370300200241d0006a200241c8016a41086a290300370300200220022903c80137034820024180016a2005290300370300200241f8006a2003290300370300200241f0006a2001290300370300200220022903e801370368200041016a200241086a418001109d081a200041003a00000c040b0240200341ff0171450d00200241003a00280b200041013a00000c030b0240200841ff0171450d00200241003a00280b200041013a00000c020b0240200741ff0171450d00200241003a00280b200041013a00000c010b0240200741ff0171450d00200241003a00c8020b200041013a00000b200241d0026a24000b8a06010c7f23004190016b220324002003200236021420032001360210200341186a2002ad4220862001ad84100510c2010240024002400240200328021822040d00200041003602000c010b200328021c21052003200341206a28020036022c20032004360228200341086a200341286a10c4010240024020032802080d00200328020c2206200328022c22074105762201200120064b1b22014105742202417f4c0d030240024020010d00410121080c010b200210332208450d050b41002109200341003602402003200136023c20032008360238024002402006450d004100210a03402007210b41002101200341003a008801200a41016a210a0340200b2001460d03200341e8006a20016a200328022822022d00003a00002003200241016a3602282003200141016a22023a0088012002210120024120470d000b200341c8006a41186a220c200341e8006a41186a290300370300200341c8006a41106a220d200341e8006a41106a290300370300200341c8006a41086a220e200341e8006a41086a2903003703002003200329036837034802402009200328023c470d00200341386a20094101108a0120032802382108200328024021090b200b20026b2107200820094105746a22012003290348370000200141186a200c290300370000200141106a200d290300370000200141086a200e2903003700002003200941016a2209360240200a2006470d000b2003200b20026b36022c0b2008450d012000200329023c370204200020083602000c020b2003410036022c0240200141ff0171450d00200341003a0088010b200328023c41ffffff3f71450d00200810350b20034100360250200342013703482003410936023c2003200341106a3602382003200341c8006a360234200341fc006a41013602002003420137026c200341c888c2003602682003200341386a360278200341346a41e88ac500200341e8006a10431a200335025042208620033502488410060240200328024c450d00200328024810350b200041003602000b2005450d00200410350b20034190016a24000f0b1044000b1045000bab0602057f047e23004190016b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022040d00200041023a00000c010b2003280214210502400240200341186a2802002201450d0020042d0000220241014b0d002001417f6a2106024002400240024020020e020001000b41002101200341003a008801200441016a21070240034020062001460d01200341e8006a20016a200720016a2d00003a00002003200141016a22023a0088012002210120024120470d000b200341c8006a41186a200341e8006a41186a2903002208370300200341206a41086a200341e8006a41086a290300370300200341206a41106a200341e8006a41106a290300370300200341206a41186a200837030020032003290368370320410021010c020b200141ff0171450d03200341003a0088010c030b41002101200341003a008801200441016a2107034020062001460d02200341e8006a20016a200720016a2d00003a00002003200141016a22023a0088012002210120024120470d000b200341c8006a41186a200341e8006a41186a2903002208370300200341206a41086a200341e8006a41086a290300370300200341206a41106a200341e8006a41106a290300370300200341206a41186a200837030020032003290368370320410121010b200341e8006a41186a200341206a41186a2903002208370300200341e8006a41106a200341206a41106a2903002209370300200341e8006a41086a200341206a41086a290300220a37030020032003290320220b370368200041196a2008370000200041116a2009370000200041096a200a3700002000200b3700010c020b200141ff0171450d00200341003a0088010b2003410036025020034201370348200341093602242003200341086a3602202003200341c8006a360244200341fc006a41013602002003420137026c200341c888c2003602682003200341206a360278200341c4006a41e88ac500200341e8006a10431a200335025042208620033502488410060240200328024c450d00200328024810350b410221010b200020013a00002005450d00200410350b20034190016a24000ba20403047f017e027f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022010d00200041003602000c010b200228021421032002200241186a280200360224200220013602202002200241206a10c4010240024020022802000d002002280224220420022802044102742205490d0002400240024002402005417f4c0d000240024020050d0042002106410121070c010b200510392207450d022007200228022022082005109d081a2002200420056b3602242002200820056a3602202005ad21060b2007450d04024020062005ad422086842206422088a722050d002006a721050c030b024020072005724103710d002006a722054103710d0020054102762204450d032006422288a721080c040b2006a7450d04200710350c040b1044000b1045000b4100210802402005450d00200710350b41002104410421070b41000d002007450d002000200436020420002007360200200041086a20083602000c010b20024100360230200242013703282002410936023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b200041003602000b2003450d00200110350b200241e0006a24000bef1104047f017e137f047e23004180036b220224002002412036022420022001360220200241286a2001ad4280808080800484100510c2010240024002400240200228022822030d00200041003602000c010b200228022c21042002200241306a28020036023c20022003360238200241186a200241386a10c4010240024020022802180d00200228021c2205200228023c411c6e2201200120054b1bad421c7e2206422088a70d032006a72201417f4c0d030240024020010d00410421070c010b200110332207450d050b200241003602482002200736024020022001411c6e36024402400240024002400240024002402005450d00200241a0026a41c4006a2108410021094100210a0340200241106a200241386a10c40120022802100d072002280214220b200228023c41e0006e22012001200b4b1bad42e0007e2206422088a70d0b2006a72201417f4c0d0b0240024020010d004108210c0c010b20011033220c450d0d0b200241003602582002200c3602502002200141e0006e3602540240024002400240200b450d004100210d0340200241a0026a200241386a10c702200241e0016a41386a2201200241a0026a41386a290300370300200241e0016a41306a220e200241a0026a41306a290300370300200241e0016a41286a220f200241a0026a41286a290300370300200241e0016a41206a2210200241a0026a41206a290300370300200241e0016a41186a2211200241a0026a41186a290300370300200241e0016a41106a2212200241a0026a41106a290300370300200241e0016a41086a2213200241a0026a41086a290300370300200241c0016a41086a2214200841086a290200370300200241c0016a41106a2215200841106a290200370300200241c0016a41186a2216200841186a280200360200200220022903a0023703e001200220082902003703c00120022802e0022217450d0220024180016a41386a2218200129030037030020024180016a41306a2219200e29030037030020024180016a41286a220e200f29030037030020024180016a41206a220f201029030037030020024180016a41186a2210201129030037030020024180016a41106a2211201229030037030020024180016a41086a22122013290300370300200241e0006a41086a22132014290300370300200241e0006a41106a22142015290300370300200241e0006a41186a22152016280200360200200220022903e00137038001200220022903c0013703600240200d2002280254470d00200241d0006a200d410110a4012002280250210c2002280258210d0b200c200d41e0006c6a2201200229038001370300200141106a2011290300370300200141086a2012290300370300201929030021062018290300211a200e290300211b200f290300211c2010290300211d200141c0006a2017360200200141186a201d370300200141206a201c370300200141286a201b370300200141c4006a2002290360370200200141386a201a370300200141306a2006370300200141cc006a2013290300370200200141d4006a2014290300370200200141dc006a20152802003602002002200d41016a220d360258200b417f6a220b0d000b0b200c450d0a20022902542106200241086a200241386a10c40120022802080d07200228020c220b200228023c220d41027622012001200b4b1b2201410274220e417f4c0d0e20010d014104210f0c020b0240200d450d00200d41e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010350b0240200128020041ffffff3f71450d002001417c6a28020010350b200141e0006a2101200d41a07f6a220d0d000b0b20022802542201450d09200141e0006c0d080c090b200e1033220f450d0d0b200241003602a802200220013602a4022002200f3602a0020240200b450d00410021010340200d4104490d0520022002280238220e41046a360238200e280000220e418094ebdc034b0d040240200120022802a402470d00200241a0026a2001410110860120022802a002210f20022802a80221010b200d417c6a210d200f20014102746a200e3602002002200141016a22013602a802200b417f6a220b0d000b2002200d36023c0b200f450d0420022902a402211a200d4104490d05200a41016a210a2002200d417c6a36023c20022002280238220141046a3602382001280000210d024020092002280244470d00200241c0006a2009410110f90120022802402107200228024821090b20072009411c6c6a2201200d360218200120063702042001200c360200200141106a201a3702002001410c6a200f3602002002200941016a2209360248200a2005470d000b0b2007450d0620002002290244370204200020073602000c070b200d417c6a210d0b2002200d36023c20022802a40241ffffffff0371450d00200f10350b02402006422088a72201450d00200141e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010350b0240200128020041ffffff3f71450d002001417c6a28020010350b200141e0006a2101200d41a07f6a220d0d000b0b2006a72201450d02200141e0006c0d010c020b0240201a42ffffffff0383500d00200f10350b02402006422088a72201450d00200141e0006c210d200c41d4006a210103400240200141706a2802002208450d00200841306c450d002001416c6a28020010350b0240200128020041ffffff3f71450d002001417c6a28020010350b200141e0006a2101200d41a07f6a220d0d000b0b2006a72201450d01200141e0006c450d010b200c10350b2007200910c80220022802442201450d002001411c6c450d00200710350b200241003602e801200242013703e00120024109360284012002200241206a360280012002200241e0016a3602c001200241b4026a4101360200200242013702a402200241c888c2003602a002200220024180016a3602b002200241c0016a41e88ac500200241a0026a10431a20023502e80142208620023502e001841006024020022802e401450d0020022802e00110350b200041003602000b2004450d00200310350b20024180036a24000f0b1044000b1045000b9e06020a7f017e230041d0016b2202240041002103200241003a00c0012001280204417f6a2104024002400240024003402004417f460d01200241a0016a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c0012004417f6a21042005210320054120470d000b20024180016a41186a2204200241a0016a41186a220329030037030020024180016a41106a2205200241a0016a41106a220629030037030020024180016a41086a2207200241a0016a41086a2208290300370300200220022903a00137038001200241a0016a200110c50120022802c0012209450d01200241c0006a41186a220a2004290300370300200241c0006a41106a220b2005290300370300200241c0006a41086a22052007290300370300200241c0006a41286a22072008290300370300200241c0006a41306a22082006290300370300200241c0006a41386a220620032903003703002002200229038001370340200220022903a001370360200241c4016a2802002104200241a0016a41286a290300210c200241086a2005290300370300200241106a200b290300370300200241186a200a290300370300200241206a22032002290360370300200241286a22052007290300370300200241306a22072008290300370300200241386a2208200629030037030020022002290340370300200241c0006a200110c3012002280240450d02200241a0016a41086a2201200241c0006a41086a280200360200200220022903403703a001200041386a2008290300370300200041306a2007290300370300200041286a2005290300370300200041206a2003290300370300200041186a200241186a290300370300200041106a200241106a290300370300200041086a200241086a29030037030020002002290300370300200041c8006a200c3703002000200436024420002009360240200041d0006a20022903a001370300200041d8006a20012802003602000c030b200341ff0171450d00200241003a00c0010b200041003602400c010b200041003602402004450d00200441306c450d00200910350b200241d0016a24000bd90101037f02402001450d0020002001411c6c6a21020340024020002802082201450d00200141e0006c2103200028020041d4006a210103400240200141706a2802002204450d00200441306c450d002001416c6a28020010350b0240200128020041ffffff3f71450d002001417c6a28020010350b200141e0006a2101200341a07f6a22030d000b0b0240200041046a2802002201450d00200141e0006c450d00200028020010350b2000411c6a21010240200041106a28020041ffffffff0371450d00200028020c10350b2001210020012002470d000b0b0bbb1005057f017e067f077e017f230041c0016b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c2010240024002400240200328021022020d00200041023a00000c010b200328021421042003200341186a280200220536025420032002360250024002402005450d0020022d0000210120032005417f6a22063602542003200241016a360250200141014b0d00024002400240024020010e020001000b2003200341d0006a10c40120032802000d03200328020422062003280254220141306e2207200720064b1bad42307e2208422088a70d062008a72207417f4c0d060240024020070d00410821090c010b200710332209450d080b4100210a20034100360268200320093602602003200741306e220b36026402402006450d002006417f6a210720034198016a41017221064100210a02400240034020014104490d0120032802502205350000210820032001417c6a3602542003200541046a36025020034198016a200341d0006a10ca0220032d00980122054102460d01200341f0006a411f6a220b2006411f6a290000370000200341f0006a41186a220c200641186a290000370300200341f0006a41106a220d200641106a290000370300200341f0006a41086a220e200641086a290000370300200320062900003703700240200a2003280264470d00200341e0006a200a4101108801200328026021092003280268210a0b2009200a41306c6a220120053a000820012008370300200141096a2003290370370000200141116a200e290300370000200141196a200d290300370000200141216a200c290300370000200141286a200b2900003700002003200a41016a220a3602682007450d022007417f6a2107200328025421010c000b0b20032802642201450d05200141306c450d05200910350c050b2003280264210b0b2009450d0302400240200328025422014110490d0020032003280250220641106a3602502003200141706a220736025420074110490d00200641086a290000210f200629000021102003200641206a3602502003200141606a220736025420074104490d01200641186a2900002108200629001021112003200641246a36025020032001415c6a220736025420074110490d0120062800202107200341386a2006412c6a290000370300200341cc006a41026a200341dd006a41026a2d00003a000020032011370320200320032f005d3b014c20032007360240200320062900243703302003200837032820032001414c6a3602542003200641346a360250410021010c030b200b450d04200b41306c450d04200910350c040b200b450d03200b41306c450d03200910350c030b20064110490d0220032005416f6a220a3602542003200241116a360250200241096a29000021082002290001211141002101200341003a00b801416e21060340200a2001460d0220034198016a20016a200220016a220741116a2d00003a00002003200520066a3602542003200741126a3602502003200141016a22073a00b8012006417f6a21062007210120074120470d000b200341e2006a20032d009a013a0000200320032f0198013b01602005416f6a2007460d02200341af016a290000210f20032900a7012110200328009b012109200328009f01210b20032800a301210a20032d00b701210d200220076a220141116a2d0000210c2003200520066a22063602542003200141126a360250200c41074f0d0220064110490d022003200141226a220e3602502003200520076b2207415e6a220636025420064110490d022001411a6a2900002112200141126a29000021132003200141326a220536025020032007414e6a220636025420064104490d022001412a6a2900002114200e2900002115200528000021062003200141366a220e36025020032007414a6a220536025420054110490d02200341cc006a41026a200341e0006a41026a2d00003a0000200341c0006a2012370300200341206a41106a2008370300200320032f01603b014c2003200741ba7f6a3602542003200141c6006a36025020032013370338200320113703282003200c3a00212003200d3a0020200320032801703601222003200341f4006a2f01003b01262001413e6a2900002111200e2900002108410121010b200341f0006a41026a200341cc006a41026a2d000022073a000020034198016a41086a2205200341206a41086a29030037030020034198016a41106a220c200341206a41106a29030037030020034198016a41186a220d200341206a41186a29030037030020034198016a41206a220e200341206a41206a290300370300200320032f014c22163b01702003200329032037039801200041186a200f370000200041106a2010370000200041036a20073a0000200020163b00012000410c6a200a360000200041086a200b360000200041046a2009360000200041e8006a2006360000200041e0006a2011370000200041d8006a2008370000200041d0006a2014370000200041c8006a2015370000200041206a200329039801370000200041286a2005290300370000200041306a200c290300370000200041386a200d290300370000200041c0006a200e2903003700000c020b200141ff0171450d00200341003a00b8010b2003410036022820034201370320200341093602742003200341086a3602702003200341206a360260200341ac016a41013602002003420137029c01200341c888c200360298012003200341f0006a3602a801200341e0006a41e88ac50020034198016a10431a2003350228422086200335022084100602402003280224450d00200328022010350b410221010b200020013a00002004450d00200210350b200341c0016a24000f0b1044000b1045000b840402067f047e230041206b21020240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a2207360200200541014b0d0320050e020102010b200041023a00000f0b02402006450d0020042d0001210520012003417e6a22063602042001200441026a360200200541ff0071220741064b0d0020064110490d00200041003a0000200041086a2004290002370300200041026a20073a0000200020054107763a0001200041036a2002280009360000200041186a2002290310370300200041106a2004410a6a29000037030020012003416e6a3602042001200441126a360200200041076a2002410d6a2d00003a0000200041206a200241106a41086a2903003703000f0b200041023a00000f0b200241106a41086a220542003703002002420037031020064110490d01200741086a29000021082007290000210920012003416f6a22063602042001200441116a2207360200200542003703002002420037031020064110490d01200741086a290000210a2007290000210b20012003415f6a3602042001200441216a360200200041206a200a370300200041186a200b370300200041106a2008370300200041086a2009370300200041013a000020002002280009360001200041046a2002410c6a2800003600000f0b200041023a00000f0b200041023a00000bbb0402097f057e230041f0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022040d00200042003703000c010b200341186a28020021052003280214210641002101200341003a0068024002400240034020052001460d01200341c8006a20016a200420016a2d00003a00002003200141016a22023a00682002210120024120470d000b200341286a41186a2201200341c8006a41186a2207290300370300200341286a41106a2208200341c8006a41106a2209290300370300200341286a41086a220a200341c8006a41086a220b29030037030020032003290348370328200520026b410f4d0d01200b200a290300220c37030020092008290300220d37030020072001290300220e37030020032003290328220f370348200420026a22012900002110200041306a200141086a290000370300200041286a2010370300200041206a200e370300200041186a200d370300200041106a200c3703002000200f3703084201210c0c020b200141ff0171450d00200341003a00680b2003410036023020034201370328200341093602242003200341086a3602202003200341286a36026c200341dc006a41013602002003420137024c200341c888c2003602482003200341206a360258200341ec006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b4200210c0b2000200c3703002006450d00200410350b200341f0006a24000bf80202027f037e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602100c010b200328021421042003200341106a41086a28020022023602242003200136022002400240024020024110490d002003200241706a3602242003200141106a360220200141086a290000210520012900002106200341c8006a200341206a10c301200328024822020d010b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602100c010b200329024c2107200020053703082000200637030020002007370214200020023602100b2004450d00200110350b200341e0006a24000bde0201037f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602040c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d0020032002417c6a3602242003200141046a36022020012800002102200341c8006a200341206a10c301200328024822050d010b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602040c010b2000200329024c37020820002005360204200020023602000b2004450d00200110350b200341e0006a24000bb10201037f230041e0006b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c20102400240200228021022010d00200041003602000c010b200228021421032002200241186a28020036022420022001360220200241c8006a200241206a10cf0202400240200228024822040d0020024100360230200242013703282002410936023c2002200241086a3602382002200241286a360244200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b200041003602000c010b2000200229024c370204200020043602000b2003450d00200110350b200241e0006a24000b8f0d05037f017e0a7f017e047f23004180016b22022400200241086a200110c40102400240024002402002280208450d00200041003602000c010b200228020c2203200128020441246e2204200420034b1bad42247e2205422088a70d022005a72204417f4c0d020240024020040d00410421060c010b200410332206450d020b4100210720024100360218200220063602102002200441246e36021402402003450d00200241cd006a2108200241eb006a220941056a210a4100210b0340024002400240024002402001280204220c450d002001280200220d2d000021042001200c417f6a220e3602042001200d41016a360200200441074b0d00024002400240024002400240024020040e080007010703040205000b2002200110c40120022802000d06200128020420022802042204490d062004417f4c0d0f024020040d004101210f4101450d074100210d0c090b20041039220f450d0e20012802042004490d05200f20012802002004109d08210c2001280204220d2004490d072001200d20046b3602042001200128020020046a360200200c450d062004210d0c080b41002104200241003a0078200c417e6a210c02400340200e2004460d01200241d8006a20046a200d20046a220f41016a2d00003a00002001200c3602042001200f41026a3602002002200441016a220f3a0078200c417f6a210c200f2104200f4120470d000b200220092900003703402002200a290000370045200228005f210d20022f0158210420022d005a210c200228005b210f20022900632110200841026a200241d5006a41026a2d00003a0000200820022f00553b00002010428080808070832105200f41087621112004200c41107472210c2010a721044100210e0c0a0b200441ff0171450d05200241003a00780c050b200241d8006a200110c405200228025c220d450d0420022f015820022d005a41107472210c20022d005b210f200229036022104280808080708321052010a721044101210e0c080b200241d8006a200110c405200228025c220d450d0320022f015820022d005a41107472210c20022d005b210f200229036022104280808080708321052010a721044102210e0c070b200241d8006a200110c405200228025c220d450d0220022f015820022d005a41107472210c20022d005b210f200229036022104280808080708321052010a721044103210e0c060b200e450d01200d2d000121042001200c417e6a220f3602042001200d41026a36020020040d01200f450d01200d2d000221042001200c417d6a220e3602042001200d41036a360200200441014b0d014100210f0240024020040e020100010b200e4104490d02200d28000321122001200c41796a22043602042001200d41076a36020020044104490d02200d28000721132001200c41756a3602042001200d410b6a3602004101210f0b200241c0006a41086a200241d8006a41086a290200370300200220022902583703404104210e4200210541002111201321042012210d0c040b200f10350b200241306a41086a200241c0006a41086a290300370300200220022903403703302000410036020002402007450d00200741246c21042006210103400240024020012d0000220c41044b0d00024002400240200c0e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012004415c6a22040d000b0b20022802142201450d06200141246c450d06200610350c060b2004200d41a4f0cb001059000b200241c0006a41086a200241d8006a41086a29020037030020022002290258370340200f41087621114105210e420021050b0b200b41016a210b200241306a41086a200241c0006a41086a2903002210370300200241206a41086a22142010370300200220022903402210370330200220103703202011410874200f41ff017172210f20052004ad842105024020072002280214470d00200241106a20074101108d0120022802102106200228021821070b2006200741246c6a2204200537000c2004200d3600082004200f3600042004200c3b00012004200e3a0000200441036a200c4110763a0000200420022903203700142004411c6a20142903003700002002200741016a2207360218200b2003470d000b0b20002002290310370200200041086a200241106a41086a2802003602000b20024180016a24000f0b1045000b1044000ba00302037f037e230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602140c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d002003200141046a36022020032002417c6a220536022420054110490d002001280000210520032002416c6a3602242003200141146a3602202001410c6a290000210620012900042107200341c8006a200341206a10c301200328024822020d010b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602140c010b200329024c210820002006370308200020073703002000200837031820002002360214200020053602100b2004450d00200110350b200341e0006a24000b940201037f230041d0006b220224002002200136020420022000360200200241086a2001ad4220862000ad84100510c20102400240200228020822010d00410221000c010b200228020c210302400240200241106a280200450d0020012d0000220441014b0d0041002100024020040e020200020b410121000c010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b410221000b2003450d00200110350b200241d0006a240020000bd70b06057f017e057f017e027f037e230041a0016b220324002003200236021420032001360210200341186a2002ad4220862001ad84100510c2010240024002400240200328021822010d00200041023a00000c010b200328021c21042003200341206a280200220236024c20032001360248024002402002450d0020012d0000210520032002417f6a220636024c2003200141016a360248200541014b0d000240024002400240024020050e020001000b20064104490d04200341c4006a41026a200341d8006a41026a2d00003a0000200341286a41086a200341f8006a41086a290300370300200341286a41106a200341f8006a41106a290300370300200341286a41186a200341f8006a41186a280200360200200320032f00583b0144200320032903783703282001280001210520032002417b6a36024c2003200141056a360248410021020c010b200341086a200341c8006a10c40120032802080d03200328024c2207200328020c2205490d032005417f4c0d060240024020050d0042002108410121090c010b200510392209450d082009200328024822022005109d081a2003200720056b220736024c2003200220056a3602482005ad21080b2009450d0341002102200341003a0098012005ad4220862008842208422088a7210a2008a7210b417f21050240024002400240034020072002460d01200341f8006a20026a2003280248220c2d00003a00002003200720056a36024c2003200c41016a3602482003200241016a22063a0098012005417f6a21052006210220064120470d000b200341d2006a20032d007a3a0000200341e0006a20034187016a290000370300200341d8006a41106a2003418f016a290000370300200341f0006a20034197016a2d00003a0000200320032f01783b01502003200329007f370358200720066b22024110490d01200328007b21052003200c41116a3602482003200241706a220d36024c200d4104490d05200c41096a290000210e200c29000121082003200c41156a36024820032002416c6a36024c2007416c6a2006460d05200c28001121062003200c41166a36024820032002416b6a220f36024c200c2d0015221041014b0d054100210d20100e020302030b200241ff0171450d00200341003a0098010b200b0d040c050b200f4104490d022003200c411a6a3602482003200241676a36024c200c28001621074101210d0b200341c4006a41026a200341d0006a41026a2d00003a0000200341286a41086a200341d8006a41086a290300370300200341286a41106a200341d8006a41106a290300370300200341286a41186a200341d8006a41186a2d00003a0000200341c3006a200341d5006a41026a2d00003a0000200320032f01503b014420032003290358370328200320032f00553b0041410121020b200341d8006a41026a200341c4006a41026a2d0000220c3a0000200341f8006a41086a200341286a41086a2903002211370300200341f8006a41106a200341286a41106a2903002212370300200341f8006a41186a200341286a41186a2802002210360200200320032f0144220f3b0158200320032903282213370378200041036a200c3a00002000200f3b0001200041046a2005360000200041c8006a200e370000200041c0006a2008370000200041086a2013370000200041106a2011370000200041186a2012370000200041206a2010360000200041386a2007360000200041346a200d360000200041306a20063600002000412c6a200a360000200041286a200b360000200041246a20093600000c030b200b450d010b200910350b20034100360230200342013703282003410936025c2003200341106a3602582003200341286a3602502003418c016a41013602002003420137027c200341c888c2003602782003200341d8006a36028801200341d0006a41e88ac500200341f8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b410221020b200020023a00002004450d00200110350b200341a0016a24000f0b1044000b1045000b850604067f027e027f057e23004190016b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822020d00200041003602180c010b200328020c21042003200341106a280200220136023c200320023602380240024020014104490d002003200241046a36023820032001417c6a220536023c20054104490d00200228000021062003200241086a3602382003200141786a220536023c20054110490d00200228000421072003200141686a220836023c2003200241186a360238200241106a29000021092002290008210a41002101200341003a0088010240034020082001460d01200341e8006a20016a200220016a220541186a2d00003a00002003200541196a3602382003200141016a22053a0088012005210120054120470d000b200341c8006a41086a2201200341e8006a41086a290300370300200341c8006a41106a220b200341e8006a41106a290300370300200341c8006a41186a220c200341e8006a41186a290300370300200320032903683703482003200820056b36023c200341e8006a200341386a10c30120032802682205450d01200341186a41086a2001290300220d370300200341186a41106a200b290300220e370300200341186a41186a200c290300220f370300200320032903482210370318200329026c2111200020093703082000200a3703002000201137021c200020053602182000200736021420002006360210200041246a20103702002000412c6a200d370200200041346a200e3702002000413c6a200f3702000c020b2003410036023c200141ff0171450d00200341003a0088010b20034100360250200342013703482003410936021c200320033602182003200341c8006a360244200341fc006a41013602002003420137026c200341c888c2003602682003200341186a360278200341c4006a41e88ac500200341e8006a10431a200335025042208620033502488410060240200328024c450d00200328024810350b200041003602180b2004450d00200210350b20034190016a24000bfa4f07087f017e017f017e017f027e4f7f230041d0086b220324002003200236021420032001360210200341186a2002ad4220862001ad84100510c20102400240200328021822040d00200041023a00a4020c010b200328021c21052003200341186a41086a280200360294022003200436029002200320034190026a36028804200341086a20034188046a10d5020240024020032802080d004108210602400240200328020c22074180012007418001491b2201450d00200141057410332206450d010b2003410036028808200320013602840820032006360280080240024002400240024002402007450d00200341b0086a2108410021010340200341003602a808200341a8086a20032802900222092003280294022202410420024104491b220a109d081a20032002200a6b3602940220032009200a6a360290020240200241034b0d00200341a8086a200a6a41004104200a6b109f081a0b20033502a808210b200341003a00a80820032802940222022002410047220a490d02200341a8086a2003280290022209200a109d081a20032002200a6b220c3602940220032009200a6a220a3602900202400240024020020d004200210d0c010b20032d00a808220241064b0d044200210d02400240024002400240024020020e0707000102030405070b200341a8086a200c4110200c4110491b22026a41004100411020026b22092002410f4b1b109f08210e200341a8086a200a2002109d081a2003200c20026b360294022003200a20026a360290020240200c410f4b0d00200e41002009109f081a0b2008290300210f20032903a80821104201210d0c060b4202210d0c040b4203210d0c030b4204210d0c020b4205210d0c010b4206210d0b0b02402001200328028408470d0020034180086a2001410110a101200328028008210620032802880821010b200620014105746a2202200d3703082002200b370300200241186a200f370300200241106a20103703002003200141016a2201360288082007417f6a22070d000b0b2006450d06200329028408210d200341b0086a220a4200370300200342003703a808200341a8086a20032802900222072003280294022201411020014110491b2202109d081a2003200120026b360294022003200720026a3602900202402001410f4b0d00200341a8086a20026a4100411020026b109f081a0b200a290300210f20032903a8082110200320034188046a10d50220032802000d0320032802042209413820094138491b22070d014104210a0c020b20032802840841ffffff3f71450d0520061035410221010c060b200741c8006c1033220a450d030b410021022003410036028006200320073602fc052003200a3602f805024002400240024002400240024002402009450d0020034180086a410c6a211120034180086a410172211241002102034020034180086a20034188046a10d6020240024020032d00800822074106470d00410621070c010b200341fc076a41026a2208201241026a2d00003a0000200341e0076a41086a220e201141086a290200370300200341e0076a41106a2213201141106a290200370300200320122f00003b01fc07200320112902003703e007200328028408210c2003280288082101200341a8086a20034188046a10d602024020032d00a8084106470d00024020074101470d002001450d00200c10350b410621070c010b200341dc076a41026a20082d00003a0000200341c0076a41086a200e290300370300200341c0076a41106a201329030037030020034198076a41086a200341a8086a41086a29030037030020034198076a41106a200341a8086a41106a29030037030020034198076a41186a200341a8086a41186a29030037030020034198076a41206a200341a8086a41206a280200360200200320032f01fc073b01dc07200320032903e0073703c007200320032903a8083703980720012114200c21150b20034194076a41026a2201200341dc076a41026a2d00003a0000200341f8066a41086a220c200341c0076a41086a290300370300200341f8066a41106a2208200341c0076a41106a290300370300200341d0066a41086a220e20034198076a41086a290300370300200341d0066a41106a221320034198076a41106a290300370300200341d0066a41186a221620034198076a41186a290300370300200341d0066a41206a221720034198076a41206a280200360200200320032f01dc073b019407200320032903c0073703f80620032003290398073703d00620074106460d02200341cc066a41026a221820012d00003a0000200341b0066a41086a2219200c290300370300200341b0066a41106a220c200829030037030020034188066a41086a2208200e29030037030020034188066a41106a220e201329030037030020034188066a41186a2213201629030037030020034188066a41206a22162017280200360200200320032f0194073b01cc06200320032903f8063703b006200320032903d006370388060240200220032802fc05470d00200341f8056a2002410110a80120032802f805210a20032802800621020b200a200241c8006c6a220120073a0000200141086a2014360000200141046a2015360000200141036a20182d00003a0000200120032f01cc063b0001200141146a20192903003700002001411c6a200c2903003700002001410c6a20032903b006370000200141246a200329038806370000200141346a200e2903003700002001412c6a20082903003700002001413c6a2013290300370000200141c4006a20162802003600002003200241016a2202360280062009417f6a22090d000b20032802fc0521070b200a450d07200341a8086a20034188046a10d60220032d00a80822094106460d0120034194076a41026a20032d00ab083a0000200341c0076a41086a200341bc086a2201290200370300200341c0076a41106a200341c4086a2213290200370300200320032f00a9083b0194072003200341b4086a22162902003703c007200341a8086a41086a2217280200210c20032802ac082108200341a8086a20034188046a10d60220032d00a808220e4106460d02200341dc076a41026a20032d00ab083a0000200341e0076a41086a2001290200370300200341e0076a41106a2013290200370300200320032f00a9083b01dc07200320162902003703e0072017280200211320032802ac082116200341a8086a20034188046a10d60220032d00a80822174106460d03200341fc076a41026a20032d00ab083a000020034188066a41086a200341bc086a220129020037030020034188066a41106a200341c4086a2214290200370300200320032f00a9083b01fc072003200341b4086a221529020037038806200341a8086a41086a2212280200211820032802ac082119200341a8086a20034188046a10d60220032d00a80822114106460d04200341f8056a41026a20032d00ab083a0000200341d0066a41086a2001290200370300200341d0066a41106a2014290200370300200320032f00a9083b01f805200320152902003703d0062012280200211420032802ac082115200341a8086a20034188046a10d60220032d00a80822124106470d05024020114101470d002014450d00201510350b024020174101470d002018450d00201910350b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d07200741c8006c0d060c070b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b20032802fc052201450d06200141c8006c0d050c060b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d05200741c8006c0d040c050b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d04200741c8006c0d030c040b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d03200741c8006c0d020c030b024020174101470d002018450d00201910350b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d02200741c8006c0d010c020b200341b2066a20032d00ab083a000020034198076a41086a200341bc086a290200370300200341a8076a200341c4086a290200370300200320032f00a9083b01b0062003200341b4086a29020037039807200341a8086a41086a280200211a20032802ac08211b200341003a00a8080240024020032802940222012001410047221c490d00200341a8086a200328029002221d201c109d081a20032001201c6b221e360294022003201d201c6a221f360290020240024020010d00410021010c010b20032d00a808222041014b0d0141002101024020200e020100010b200341003a00a808201e201e4100472201490d01200341a8086a201f2001109d081a2003201e20016b221d360294022003201f20016a22213602900202400240201e450d0020032d00a808211c0c010b4100211c200341003a00a8080b200341003a00a808201d201d4100472201490d01200341a8086a20212001109d081a2003201d20016b2222360294022003202120016a22213602900202400240201d450d0020032d00a808211d0c010b4100211d200341003a00a8080b200341003a00a808202220224100472201490d01200341a8086a20212001109d081a2003202220016b2223360294022003202120016a222436029002024002402022450d0020032d00a80821210c010b41002121200341003a00a8080b200341003a00a808202320234100472201490d01200341a8086a20242001109d081a2003202320016b2225360294022003202420016a222436029002024002402023450d0020032d00a80821220c010b41002122200341003a00a8080b200341003a00a808202520254100472201490d01200341a8086a20242001109d081a2003202520016b2226360294022003202420016a222436029002024002402025450d0020032d00a80821230c010b41002123200341003a00a8080b200341003a00a808202620264100472201490d01200341a8086a20242001109d081a2003202620016b2225360294022003202420016a222736029002024002402026450d0020032d00a80821240c010b41002124200341003a00a8080b200341003a00a808202520254100472201490d01200341a8086a20272001109d081a2003202520016b2226360294022003202720016a222736029002024002402025450d0020032d00a80821250c010b41002125200341003a00a8080b200341003a00a808202620264100472201490d01200341a8086a20272001109d081a2003202620016b2228360294022003202720016a222736029002024002402026450d0020032d00a80821260c010b41002126200341003a00a8080b200341003a00a808202820284100472201490d01200341a8086a20272001109d081a2003202820016b2229360294022003202720016a222a36029002024002402028450d0020032d00a80821270c010b41002127200341003a00a8080b200341003a00a808202920294100472201490d01200341a8086a202a2001109d081a2003202920016b222b360294022003202a20016a222a36029002024002402029450d0020032d00a80821280c010b41002128200341003a00a8080b200341003a00a808202b202b4100472201490d01200341a8086a202a2001109d081a2003202b20016b222c360294022003202a20016a222a3602900202400240202b450d0020032d00a80821290c010b41002129200341003a00a8080b200341003a00a808202c202c4100472201490d01200341a8086a202a2001109d081a2003202c20016b222b360294022003202a20016a222d3602900202400240202c450d0020032d00a808212a0c010b4100212a200341003a00a8080b200341003a00a808202b202b4100472201490d01200341a8086a202d2001109d081a2003202b20016b222c360294022003202d20016a222d3602900202400240202b450d0020032d00a808212b0c010b4100212b200341003a00a8080b200341003a00a808202c202c4100472201490d01200341a8086a202d2001109d081a2003202c20016b222e360294022003202d20016a222d3602900202400240202c450d0020032d00a808212c0c010b4100212c200341003a00a8080b200341003a00a808202e202e4100472201490d01200341a8086a202d2001109d081a2003202e20016b222f360294022003202d20016a22303602900202400240202e450d0020032d00a808212d0c010b4100212d200341003a00a8080b200341003a00a808202f202f4100472201490d01200341a8086a20302001109d081a2003202f20016b2231360294022003203020016a22303602900202400240202f450d0020032d00a808212e0c010b4100212e200341003a00a8080b200341003a00a808203120314100472201490d01200341a8086a20302001109d081a2003203120016b2232360294022003203020016a223036029002024002402031450d0020032d00a808212f0c010b4100212f200341003a00a8080b200341003a00a808203220324100472201490d01200341a8086a20302001109d081a2003203220016b2231360294022003203020016a221e36029002024002402032450d0020032d00a80821300c010b41002130200341003a00a8080b200341003a00a808203120314100472201490d01200341a8086a201e2001109d081a2003203120016b2232360294022003201e20016a221e36029002024002402031450d0020032d00a80821310c010b41002131200341003a00a8080b200341003a00a808203220324100472201490d01200341a8086a201e2001109d081a2003203220016b360294022003201e20016a36029002024002402032450d0020032d00a80821320c010b41002132200341003a00a8080b410121010b200341a8086a20034188046a10d60220032d00a808221e4106460d01200341f8066a41026a223320032d00ab083a000020034180086a41086a2234200341bc086a29020037030020034180086a41106a2235200341c4086a290200370300200320032f00a9083b01f8062003200341b4086a29020037038008200341a8086a41086a2236280200211f20032802ac082120200341a8086a20034188046a10d60220032d00a8084106470d040240201e4101470d00201f450d00202010350b024020124101470d00201a450d00201b10350b024020114101470d002014450d00201510350b024020174101470d002018450d00201910350b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d03200741c8006c0d020c030b024020124101470d00201a450d00201b10350b024020114101470d002014450d00201510350b024020174101470d002018450d00201910350b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d02200741c8006c0d010c020b024020124101470d00201a450d00201b10350b024020114101470d002014450d00201510350b024020174101470d002018450d00201910350b0240200e4101470d002013450d00201610350b024020094101470d00200c450d00200810350b02402002450d00200a200241c8006c6a2102200a21010340024020012d00004101470d00200141086a280200450d00200141046a28020010350b0240200141246a2d00004101470d002001412c6a280200450d00200141286a28020010350b200141c8006a22012002470d000b0b2007450d01200741c8006c450d010b200a10350b200d42ffffff3f83500d0220061035410221010c030b20034190046a41206a2237200341a8086a41206a223828020036020020034190046a41186a2239200341a8086a41186a223a29030037030020034190046a41106a223b200341a8086a41106a223c29030037030020034190046a41086a223d2036290300370300200341f2056a41026a223e20034194076a41026a223f2d00003a0000200341d8056a41086a2240200341c0076a41086a2241290300370300200341d8056a41106a2242200341c0076a41106a2243290300370300200320032903a80837039004200320032f0194073b01f205200320032903c0073703d805200341d4056a41026a2244200341dc076a41026a22452d00003a0000200320032f01dc073b01d405200341b8056a41106a2246200341e0076a41106a2247290300370300200341b8056a41086a2248200341e0076a41086a2249290300370300200320032903e0073703b805200341b4056a41026a224a200341fc076a41026a224b2d00003a0000200320032f01fc073b01b40520034198056a41106a224c20034188066a41106a224d29030037030020034198056a41086a224e20034188066a41086a224f29030037030020032003290388063703980520034194056a41026a2250200341f8056a41026a22512d00003a0000200320032f01f8053b019405200341f8046a41106a2252200341d0066a41106a2253290300370300200341f8046a41086a2254200341d0066a41086a2255290300370300200320032903d0063703f804200341f4046a41026a2256200341b0066a41026a22572d00003a0000200320032f01b0063b01f404200341d8046a41106a225820034198076a41106a2259290300370300200341d8046a41086a225a20034198076a41086a225b29030037030020032003290398073703d804200341d4046a41026a225c20332d00003a0000200320032f01f8063b01d404200341b8046a41106a225d2035290300370300200341b8046a41086a225e203429030037030020032003290380083703b8042003418c046a41026a225f200341f5056a41026a2d00003a0000200320032f00f5053b018c042033203e2d00003a0000200320032f01f2053b01f8062035204229030037030020342040290300370300200320032903d80537038008205720442d00003a0000200320032f01d4053b01b00620592046290300370300205b2048290300370300200320032903b805370398072051204a2d00003a0000200320032f01b4053b01f8052053204c2903003703002055204e29030037030020032003290398053703d006204b20502d00003a0000200320032f0194053b01fc07204d2052290300370300204f2054290300370300200320032903f80437038806204520562d00003a0000200320032f01f4043b01dc07204720582903003703002049205a290300370300200320032903d8043703e007203f205c2d00003a0000200320032f01d4043b0194072043205d2903003703002041205e290300370300200320032903b8043703c00720382037280200360200203a2039290300370300203c203b2903003703002036203d29030037030020032003290390043703a808200341cc066a41026a205f2d00003a0000200320032f018c043b01cc060c020b1045000b410221010b20034184046a41026a200341f8066a41026a2d00003a0000200341e8036a41086a20034180086a41086a290300370300200341e8036a41106a223320034180086a41106a290300370300200341e4036a41026a200341b0066a41026a2d00003a0000200341c8036a41086a20034198076a41086a290300370300200341c8036a41106a223420034198076a41106a290300370300200320032f01f8063b01840420032003290380083703e803200320032f01b0063b01e40320032003290398073703c803200341c4036a41026a200341f8056a41026a2d00003a0000200341a8036a41086a200341d0066a41086a290300370300200341a8036a41106a2235200341d0066a41106a290300370300200341a4036a41026a200341fc076a41026a2d00003a000020034188036a41086a20034188066a41086a29030037030020034188036a41106a223620034188066a41106a290300370300200320032f01f8053b01c403200320032903d0063703a803200320032f01fc073b01a40320032003290388063703880320034184036a41026a200341dc076a41026a2d00003a0000200341e8026a41106a2237200341e0076a41106a290300370300200341e8026a41086a200341e0076a41086a290300370300200341e4026a41026a20034194076a41026a2d00003a0000200341c8026a41106a2238200341c0076a41106a290300370300200341c8026a41086a200341c0076a41086a290300370300200320032f01dc073b018403200320032903e0073703e802200320032f0194073b01e402200320032903c0073703c802200341a0026a41206a2239200341a8086a41206a280200360200200341a0026a41186a223a200341a8086a41186a290300370300200341a0026a41106a223b200341a8086a41106a290300370300200341a0026a41086a200341a8086a41086a290300370300200320032903a8083703a0022003419c026a41026a200341cc066a41026a2d00003a0000200320032f01cc063b019c020240024020014102470d00200341003602880820034201370380082003410936029c072003200341106a36029807200320034180086a3602d006200341bc086a4101360200200342013702ac08200341c888c2003602a808200320034198076a3602b808200341d0066a41e88ac500200341a8086a10431a200335028808422086200335028008841006200328028408450d0120032802800810350c010b2003418c026a41026a223c20034184046a41026a2d00003a0000200341f0016a41086a223d200341e8036a41086a290300370300200341f0016a41106a223e2033290300370300200341ec016a41026a2233200341e4036a41026a2d00003a0000200341d0016a41086a223f200341c8036a41086a290300370300200341d0016a41106a22402034290300370300200320032f0184043b018c02200320032903e8033703f001200320032f01e4033b01ec01200320032903c8033703d001200341cc016a41026a2234200341c4036a41026a2d00003a0000200341b0016a41086a2241200341a8036a41086a290300370300200341b0016a41106a22422035290300370300200341ac016a41026a2235200341a4036a41026a2d00003a000020034190016a41086a224320034188036a41086a29030037030020034190016a41106a22442036290300370300200320032f01c4033b01cc01200320032903a8033703b001200320032f01a4033b01ac012003200329038803370390012003418c016a41026a223620034184036a41026a2d00003a0000200341f0006a41106a22452037290300370300200341f0006a41086a2237200341e8026a41086a290300370300200341ec006a41026a2246200341e4026a41026a2d00003a0000200341d0006a41106a22472038290300370300200341d0006a41086a2238200341c8026a41086a290300370300200320032f0184033b018c01200320032903e802370370200320032f01e4023b016c200320032903c802370350200341286a41206a22482039280200360200200341286a41186a2239203a290300370300200341286a41106a223a203b290300370300200341286a41086a223b200341a0026a41086a290300370300200320032903a002370328200341a8086a41026a22492003419c026a41026a2d00003a0000200320032f019c023b01a8082000200f37030820002010370300200020093a002820002002360224200020073602202000200a36021c2000200d370214200020063602102000200c3602302000200836022c200020032f018c023b00292000412b6a203c2d00003a0000200020032903f0013702342000413c6a203d290300370200200041c4006a203e2903003702002000200e3a004c200041cf006a20332d00003a0000200020032f01ec013b004d2000201336025420002016360250200041e8006a2040290300370200200041e0006a203f290300370200200020032903d001370258200020173a0070200041f3006a20342d00003a0000200020032f01cc013b007120002018360278200020193602742000418c016a204229030037020020004184016a2041290300370200200020032903b00137027c200020113a00940120004197016a20352d00003a0000200020032f01ac013b0095012000201436029c012000201536029801200041b0016a2044290300370200200041a8016a204329030037020020002003290390013702a001200020123a00b801200041bb016a20362d00003a0000200020032f018c013b00b9012000201a3602c0012000201b3602bc01200041d4016a2045290300370200200041cc016a2037290300370200200020032903703702c4012000201e3a00dc01200041df016a20462d00003a0000200020032f016c3b00dd012000201f3602e401200020203602e001200041f8016a2047290300370200200041f0016a2038290300370200200020032903503702e801200041a0026a204828020036020020004198026a203929030037020020004190026a203a29030037020020004188026a203b2903003702002000200329032837028002200041b8026a20323a0000200041b7026a20313a0000200041b6026a20303a0000200041b5026a202f3a0000200041b4026a202e3a0000200041b3026a202d3a0000200041b2026a202c3a0000200041b1026a202b3a0000200041b0026a202a3a0000200041af026a20293a0000200041ae026a20283a0000200041ad026a20273a0000200041ac026a20263a0000200041ab026a20253a0000200041aa026a20243a0000200041a9026a20233a0000200041a8026a20223a0000200041a7026a20213a0000200041a6026a201d3a00002000201c3a00a502200041bb026a20492d00003a0000200041b9026a20032f01a8083b00000b200020013a00a4022005450d00200410350b200341d0086a24000bd90401057f230041106b22022400200241003a000502400240024002400240024020012802002203280204220420044100472205490d00200241056a200328020022062005109d081a2003200420056b3602042003200620056a360200024020040d00410021040c050b024020022d0005220441037122034103460d000240024020030e03070001070b200241003b0106200220043a00064101210420012802002201280204220320034100472205490d04200241066a410172200128020022042005109d0821062001200320056b3602042001200420056a360200024020030d00200620056a22044100200241066a20046b41026a109f081a0b20022f0106220441ff014d0d0220044102762103410021040c070b20024100360208200220043a0008200241086a4101722001280200220428020020042802042205410320054103491b2203109d082106200428020422012003490d042004200120036b3602042004200428020020036a3602000240200541024b0d00200620036a22044100200241086a20046b41046a109f081a0b2002280208220341808004492104200341027621030c060b200441034d0d010b410121040c040b2002410036020c2002410c6a20012802002204280200220120042802042203410420034104491b2205109d081a2004200320056b3602042004200120056a3602000240200341034b0d002002410c6a20056a4100410420056b109f081a0b200228020c22034180808080044921040c030b0c020b2003200141a4f0cb001059000b20044102762103410021040b2000200336020420002004360200200241106a24000b8913010b7f23004180016b22022400200241003a004002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802002203280204220420044100472205490d00200241c0006a200328020022062005109d081a2003200420056b3602042003200620056a360200024020040d00410021062002410d6a2107200241106a2108200241246a21090c140b2002410d6a2107200241106a2108200241246a210920022d0040220a41254b0d0141002106200a0e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b0240200a417f6a220441ff01714121490d00200041063a00000c130b024020040d00410121034100210441002105410121060c120b0240200410392203450d002003200128020022012802002001280204220a2004200a2004491b2205109d08210b200128020422062005490d052001200620056b3602042001200128020020056a360200410121060240200a20044f0d00200b20056a22014100200b20046a20016b109f081a0b200421050c120b1045000b200241003a00784100210a02400340200241003a004020012802002203280204220420044100472205490d01200a41016a2106200241c0006a2003280200220b2005109d081a2003200420056b3602042003200b20056a360200024002402004450d0020022d004021040c010b41002104200241003a00400b200241d8006a200a6a20043a0000200220063a00782006210a20064120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c100b41012101200a41ff01710d040c0e0b200241003a00784100210a02400340200241003a004020012802002203280204220420044100472205490d01200a41016a2106200241c0006a2003280200220b2005109d081a2003200420056b3602042003200b20056a360200024002402004450d0020022d004021040c010b41002104200241003a00400b200241d8006a200a6a20043a0000200220063a00782006210a20064120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0d0b41012101200a41ff01710d040c0b0b200241003a00784100210a02400340200241003a004020012802002203280204220420044100472205490d01200a41016a2106200241c0006a2003280200220b2005109d081a2003200420056b3602042003200b20056a360200024002402004450d0020022d004021040c010b41002104200241003a00400b200241d8006a200a6a20043a0000200220063a00782006210a20064120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c0a0b41012101200a41ff01710d040c080b200241003a00784100210a02400340200241003a004020012802002203280204220420044100472205490d01200a41016a2106200241c0006a2003280200220b2005109d081a2003200420056b3602042003200b20056a360200024002402004450d0020022d004021040c010b41002104200241003a00400b200241d8006a200a6a20043a0000200220063a00782006210a20064120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632104200228005f2105200228005b21030c070b41012101200a41ff01710d040c050b2005200641a4f0cb001059000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410521060c070b200041063a00000c070b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410421060c050b200041063a00000c050b0b2002413c6a41026a2206200241d4006a41026a2d00003a0000200241286a41086a220a200241c0006a41086a290300370300200241286a41106a220b200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20062d00003a0000200241106a41086a200a290300370300200241106a41106a200b2d00003a0000200220022f013c3b012420022002290328370310410321060c030b200041063a00000c030b0b410221062002413c6a41026a220a200241d4006a41026a2d00003a0000200241286a41086a220b200241c0006a41086a290300370300200241286a41106a220c200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a200a2d00003a0000200241106a41086a200b290300370300200241106a41106a200c2d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020063a0000200020092f00003b00012000410c6a2004360000200041086a2005360000200041046a2003360000200041106a2008290000370000200041216a20072f00003b0000200041036a200941026a2d00003a0000200041186a200841086a290000370000200041206a200841106a2d00003a0000200041236a200741026a2d00003a00000b20024180016a24000bb10201017f230041a0016b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822010d00200041003602400c010b200328020c21022003200341106a28020036027c20032001360278200341186a200341f8006a10c7020240024020032802580d002003410036028801200342013703800120034109360294012003200336029001200320034180016a36029c012003412c6a41013602002003420137021c200341c888c200360218200320034190016a3602282003419c016a41e88ac500200341186a10431a2003350288014220862003350280018410060240200328028401450d0020032802800110350b200041003602400c010b2000200341186a41e000109d081a0b2002450d00200110350b200341a0016a24000b8b06010d7f23004190016b220224002002412036021420022001360210200241186a2001ad4280808080800484100510c2010240024002400240200228021822030d00200041003602000c010b200228021c21042002200241206a28020036022c20022003360228200241086a200241286a10c4010240024020022802080d00200228020c2205200228022c22064105762201200120054b1b22014105742207417f4c0d030240024020010d00410121080c010b200710332208450d050b41002109200241003602402002200136023c20022008360238024002402005450d004100210a03402006210b41002101200241003a008801200a41016a210a0340200b2001460d03200241e8006a20016a200228022822072d00003a00002002200741016a3602282002200141016a22073a0088012007210120074120470d000b200241c8006a41186a220c200241e8006a41186a290300370300200241c8006a41106a220d200241e8006a41106a290300370300200241c8006a41086a220e200241e8006a41086a2903003703002002200229036837034802402009200228023c470d00200241386a20094101108a0120022802382108200228024021090b200b20076b2106200820094105746a22012002290348370000200141186a200c290300370000200141106a200d290300370000200141086a200e2903003700002002200941016a2209360240200a2005470d000b2002200b20076b36022c0b2008450d012000200229023c370204200020083602000c020b2002410036022c0240200141ff0171450d00200241003a0088010b200228023c41ffffff3f71450d00200810350b20024100360250200242013703482002410936023c2002200241106a3602382002200241c8006a360234200241fc006a41013602002002420137026c200241c888c2003602682002200241386a360278200241346a41e88ac500200241e8006a10431a200235025042208620023502488410060240200228024c450d00200228024810350b200041003602000b2004450d00200310350b20024190016a24000f0b1044000b1045000bb80c07057f017e067f017e037f027e017f23004190016b220324002003200236021420032001360210200341186a2002ad4220862001ad84100510c20102400240200328021822040d00200041023a00000c010b200328021c21052003200341206a280200220236023c20032004360238024002402002450d0020042d0000210120032002417f6a36023c2003200441016a360238200141014b0d00024002400240024002400240024020010e020001000b200341086a200341386a10c40120032802080d06200328023c2206200328020c2201490d062001417f4c0d030240024020010d0041002102410121070c010b200110392207450d052007200328023822022001109d081a2003200620016b220636023c2003200220016a360238200121020b2007450d062001ad4220862002ad842208a7210902400240024002400240024020064104490d002008422088a7210a2003280238220b280000210c20032006417c6a220d36023c2003200b41046a36023841002101200341003a008801417b210202400340200d2001460d01200341e8006a20016a200b20016a220e41046a2d00003a00002003200620026a36023c2003200e41056a3602382003200141016a220e3a0088012002417f6a2102200e2101200e4120470d000b2003200328006b3600432003200328026836024020032003280240360250200320032800433600532006200e6b2201417c6a4110490d06200341f7006a2900002108200329006f210f200328007f2102200328008301210d20032d00870121102003200b200e6a221141146a221236023820032001416c6a220b36023c200b4104490d042011410c6a2900002113201141046a29000021142012280000210b2003200141686a36023c2003201141186a2212360238200641686a200e460d0520122d000021122003200141676a221536023c2003201141196a360238201241014b0d054100210e20120e020302030b0240200141ff0171450d00200341003a0088010b2009450d0c0c0b0b2009450d0b200710350c0b0b20154104490d02201141196a28000021062003200141636a36023c20032011411d6a3602384101210e0b2003200328005336006320032003280250360260200320032802603602282003200328006336002b200320032800593602302003200341dc006a280000360033410021010c040b2009450d08200710350c080b2009450d07200710350c070b20090d050c060b41002101200341003a0088012002417f6a21062002417e6a2102034020062001460d02200341e8006a20016a200420016a220e41016a2d00003a00002003200e41026a3602382003200141016a220e3a0088012003200236023c2002417f6a2102200e2101200e4120470d000b2003200328006b3600432003200328026836024020032003280043360053200320032802403602502003200328025036026020032003280053360063200341f7006a2900002113200329006f2114200328007f2107200328008301210920032d008701210a20032003280063360033200320032802603602302003200341dc006a28000036002b20032003280059360228410121010b2003200328003336006b20032003280230360268200320032802283602402003200328002b360043200041106a2013370000200041086a2014370000200041046a200328006b36000020002003280268360001200041306a20063600002000412c6a200e360000200041286a200b360000200041246a200c360000200041206a200a3600002000411c6a2009360000200041186a2007360000200041c3006a20083700002000413b6a200f370000200041d3006a20103a0000200041cf006a200d360000200041cb006a2002360000200041346a2003280240360000200041376a20032800433600000c050b200141ff0171450d03200341003a0088010c030b1044000b1045000b200710350b2003410036024820034201370340200341093602542003200341106a3602502003200341c0006a360260200341fc006a41013602002003420137026c200341c888c2003602682003200341d0006a360278200341e0006a41e88ac500200341e8006a10431a2003350248422086200335024084100602402003280244450d00200328024010350b410221010b200020013a00002005450d00200410350b20034190016a24000bf30201047f230041d0016b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822010d00200041023a0088010c010b200228020c21032002200241106a2802003602ac01200220013602a801200241186a200241a8016a10db020240024020022d00a00122044102470d00200241003602b801200242013703b001200241093602c401200220023602c0012002200241b0016a3602cc012002412c6a41013602002002420137021c200241c888c2003602182002200241c0016a360228200241cc016a41e88ac500200241186a10431a20023502b80142208620023502b00184100620022802b401450d0120022802b00110350c010b2000200241186a418801109d0821052002200241186a418c016a2800003600b301200220022800a1013602b0012005418c016a20022800b301360000200520022802b001360089010b200020043a0088012003450d00200110350b200241d0016a24000bfe0703057f0e7e067f230041106b21020240200128020422034104490d0020012802002204280000210520012003417c6a22063602042001200441046a36020020064108490d00200429000421072001200341746a220636020420012004410c6a36020020064108490d00200429000c210820012003416c6a22063602042001200441146a36020020064108490d00200429001421092001200341646a220636020420012004411c6a36020020064108490d00200429001c210a20012003415c6a22063602042001200441246a36020020064108490d002004290024210b2001200341546a220636020420012004412c6a36020020064108490d00200429002c210c20012003414c6a22063602042001200441346a36020020064108490d002004290034210d2001200341446a220636020420012004413c6a36020020064108490d00200429003c210e2001200341bc7f6a22063602042001200441c4006a36020020064108490d002004290044210f2001200341b47f6a22063602042001200441cc006a36020020064108490d00200429004c21102001200341ac7f6a22063602042001200441d4006a36020020064108490d00200429005421112001200341a47f6a22063602042001200441dc006a36020020064108490d00200429005c211220012003419c7f6a22063602042001200441e4006a36020020064108490d00200429006421132001200341947f6a22063602042001200441ec006a36020020064108490d00200429006c211420012003418c7f6a22063602042001200441f4006a36020020064104490d00200428007421152001200341887f6a22063602042001200441f8006a36020020064104490d00200428007821162001200341847f6a22063602042001200441fc006a36020020064104490d00200428007c21172001200341807f6a2206360204200120044180016a36020020064104490d0020042800800121182001200341fc7e6a2206360204200120044184016a22043602002006450d0020042d000021062001200341fb7e6a22193602042001200441016a360200200641014b0d004100211a0240024020060e020100010b4101211a0b20194104490d00200428000121062001200341f77e6a3602042001200441056a3602002000201a3a008801200020063602840120002018360280012000201736027c20002016360278200020153602742000200536027020002014370368200020133703602000201237035820002011370350200020103703482000200f3703402000200e3703382000200d3703302000200c3703282000200b3703202000200a3703182000200937031020002008370308200020073703002000418c016a2002410c6a28000036000020002002280009360089010f0b200041023a0088010b8b0a040a7f017e037f037e23004180026b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c2010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c4010240024020022802000d0020022802042205200228022422064106762201200120054b1b22014106742207417f4c0d030240024020010d00410821080c010b200710332208450d050b41002109200241003602302002200136022c200220083602280240024002402005450d004100210a03400240024002402006450d0020022002280220220b41016a3602202006417f6a2107200b2d0000220141014b0d054200210c20010e020201020b200241003602240c050b41002101200241003a00f8012006417f6a210d024002400240024002400340200d2001460d01200241d8016a20016a200b20016a220741016a2d00003a00002002200741026a3602202002200141016a22073a00f8012007210120074120470d000b200241b8016a41186a220d200241d8016a41186a290300370300200241b8016a41106a220e200241d8016a41106a290300370300200241b8016a41086a220f200241d8016a41086a290300370300200220022903d8013703b8012007417f7320066a4110490d022002200b20076a220141116a220b360220200620076b2207416f6a41074b0d012007416f6a21010c030b0240200141ff0171450d00200241003a00f8010b410021010c020b200141096a2900002110200141016a29000021112002200141196a360220200b2900002212428002540d02200741676a21010c010b2007417f7320066a21010b200241f8006a41086a20024198016a41086a290300370300200241f8006a41106a20024198016a41106a2903003703002002200229039801370378200220013602240c050b200741676a2107200241f8006a41086a200f290300220c370300200241d8006a41186a200d290300370300200241d8006a41106a200e290300370300200241d8006a41086a200c370300200220022903b801220c3703782002200c3703584201210c0b200a41016a210a200241386a41186a220b200241d8006a41186a290300370300200241386a41106a220d200241d8006a41106a290300370300200241386a41086a2206200241d8006a41086a2903003703002002200229035837033802402009200228022c470d00200241286a200910940120022802282108200228023021090b200820094106746a220120113703082001200c370300200141106a2010370300200141186a2012370300200141206a2002290338370300200141286a2006290300370300200141306a200d290300370300200141386a200b2903003703002002200941016a220936023020072106200a2005470d000b200220073602240b2008450d022000200229022c370204200020083602000c030b200220073602240b200228022c41ffffff1f71450d00200810350b200241003602c001200242013703b8012002410936029c012002200241086a360298012002200241b8016a360278200241ec016a4101360200200242013702dc01200241c888c2003602d801200220024198016a3602e801200241f8006a41e88ac500200241d8016a10431a20023502c00142208620023502b801841006024020022802bc01450d0020022802b80110350b200041003602000b2004450d00200310350b20024180026a24000f0b1044000b1045000b980704057f017e087f037e230041a0016b220224002002412036020c20022001360208200241106a2001ad4280808080800484100510c2010240024002400240200228021022030d00200041003602000c010b200228021421042002200241186a280200360224200220033602202002200241206a10c4010240024020022802000d00200228020422052002280224220641286e2201200120054b1bad42287e2207422088a70d032007a72201417f4c0d030240024020010d00410821080c010b200110332208450d050b4100210920024100360230200220083602282002200141286e36022c02400240024002402005450d004100210a034041002101200241003a009801200a41016a210a034020062001460d03200241f8006a20016a2002280220220b2d00003a00002002200b41016a3602202002200141016a220c3a009801200c2101200c4120470d000b200241d8006a41186a2201200241f8006a41186a290300370300200241d8006a41106a220d200241f8006a41106a290300370300200241d8006a41086a220e200241f8006a41086a290300370300200220022903783703582006200c6b220c4108490d03200241386a41086a220f200e290300370300200241386a41106a220e200d290300370300200241386a41186a220d2001290300370300200220022903583703382002200b41096a360220200b290001210702402009200228022c470d00200241286a20094101108f0120022802282108200228023021090b200c41786a21062008200941286c6a22012002290338370300200f2903002110200e2903002111200d290300211220012007370320200141186a2012370300200141106a2011370300200141086a20103703002002200941016a2209360230200a2005470d000b2002200c41786a3602240b2008450d032000200229022c370204200020083602000c040b20024100360224200141ff0171450d01200241003a0098010c010b2002200c3602240b200228022c2201450d00200141286c450d00200810350b20024100360260200242013703582002410936023c2002200241086a3602382002200241d8006a3602282002418c016a41013602002002420137027c200241c888c2003602782002200241386a36028801200241286a41e88ac500200241f8006a10431a200235026042208620023502588410060240200228025c450d00200228025810350b200041003602000b2004450d00200310350b200241a0016a24000f0b1044000b1045000bd304010a7f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602080c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d002003200141046a36022020032002417c6a220536022420054104490d00200128000021062003200241786a3602242003200141086a36022020012800042107200341c8006a200341206a10c30120032802482202450d00200341c8006a41086a2802002108200328024c2105200341c8006a200341206a10c3010240024020032802482209450d00200328024c210a2003280224220b41044f0d030240200a41ffffff3f71450d00200910350b200541ffffff3f710d010c020b200541ffffff3f71450d010b200210350b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602080c010b200341d0006a280200210c2000200536020c200020023602082000200736020420002006360200200041206a200328022022022800003602002000411c6a200c360200200041186a200a360200200041146a2009360200200041106a20083602002003200b417c6a3602242003200241046a3602200b2004450d00200110350b200341e0006a24000be70804067f027e077f027e230041e0016b220324002003200236020420032001360200200341086a2002ad4220862001ad84100510c20102400240200328020822040d00200042003703000c010b200341106a2802002105200328020c210641002101200341003a00d801200541706a21070240024002400240034020052001460d01200341b8016a20016a200420016a2d00003a00002003200141016a22023a00d8012007417f6a21072002210120024120470d000b200341d8006a41086a200341b8016a41086a290300370300200341d8006a41106a200341b8016a41106a290300370300200341d8006a41186a200341b8016a41186a290300370300200320032903b801370358200520026b22084110490d02200420026a22052900002109200541086a290000210a41002101200341003a00d801200841706a2108034020082001460d02200341b8016a20016a200520016a41106a2d00003a00002003200141016a22023a00d8012002210120024120470d000b200341f8006a41086a220b200341b8016a41086a2201290300370300200341f8006a41106a220c200341b8016a41106a2208290300370300200341f8006a41186a220d200341b8016a41186a220e290300370300200320032903b801370378200720026b410f4d0d02200341386a41086a2207200341d8006a41086a290300370300200341386a41106a220f200341d8006a41106a290300370300200341386a41186a2210200341d8006a41186a290300370300200341186a41086a2211200b290300370300200341186a41106a220b200c290300370300200341186a41186a220c200d2903003703002003200329035837033820032003290378370318200520026a220241106a2900002112200241186a2900002113200120072903003703002008200f290300370300200e201029030037030020034198016a41086a2202201129030037030020034198016a41106a2207200b29030037030020034198016a41186a2205200c290300370300200320032903383703b8012003200329031837039801200041206a2013370300200041186a2012370300200041106a200a37030020002009370308200041286a20032903b801370300200041306a2001290300370300200041386a2008290300370300200041c0006a200e290300370300200041c8006a200329039801370300200041d0006a2002290300370300200041d8006a2007290300370300200041e0006a2005290300370300420121090c030b200141ff0171450d01200341003a00d8010c010b200141ff0171450d00200341003a00d8010b200341003602a00120034201370398012003410936027c20032003360278200320034198016a360258200341cc016a4101360200200342013702bc01200341c888c2003602b8012003200341f8006a3602c801200341d8006a41e88ac500200341b8016a10431a20033502a0014220862003350298018410060240200328029c01450d0020032802980110350b420021090b200020093703002006450d00200410350b200341e0016a24000ba30303037f017e027f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c2010240024002400240200328021022010d00200041003602000c010b200328021421022003200341186a280200360224200320013602202003200341206a10c40102400240024020032802000d002003280224220420032802042205490d002005417f4c0d040240024020050d0042002106410121070c010b200510392207450d062007200328022022082005109d081a2003200420056b3602242003200820056a3602202005ad21060b20070d010b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602000c010b200020062005ad42208684370204200020073602000b2002450d00200110350b200341e0006a24000f0b1044000b1045000b990204017f017e017f017e230041d0006b220224002002412036020420022001360200200241086a2001ad4280808080800484100510c20102400240200228020822010d00420021030c010b200228020c210402400240200241086a41086a2802004108490d0020012900002105420121030c010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b420021030b2004450d00200110350b2000200537030820002003370300200241d0006a24000bb20403037f027e057f230041e0006b220324002003200236020c20032001360208200341106a2002ad4220862001ad84100510c20102400240200328021022010d00200041003602140c010b200328021421042003200341186a28020022023602242003200136022002400240024020024104490d002003200141046a36022020032002417c6a220536022420054110490d002001280000210520032002416c6a3602242003200141146a3602202001410c6a290000210620012900042107200341c8006a200341206a10c30120032802482202450d00200328024c21082003280224220941024f0d01200841ffffff3f71450d00200210350b20034100360230200342013703282003410936023c2003200341086a3602382003200341286a360244200341dc006a41013602002003420137024c200341c888c2003602482003200341386a360258200341c4006a41e88ac500200341c8006a10431a200335023042208620033502288410060240200328022c450d00200328022810350b200041003602140c010b200341d0006a280200210a200341386a41046a200341286a41046a2f0100220b3b010020032003280128220c36023820032009417e6a36022420032003280220220941026a36022020092f000021092000200637030820002007370300200041206a20093b01002000411c6a200a3602002000200836021820002002360214200020053602102000200c360122200041266a200b3b01000b2004450d00200110350b200341e0006a24000be70203017f017e017f23004190056b22032400200320023602b402200320013602b002200341b8026a2002ad4220862001ad842204100510c2010240024020032802b80222010d00411b21010c010b20032802bc0221052003200341c0026a2802003602fc04200320013602f804200341c8026a200341f8046a10b9020240024020032802c8022202411b470d00200341003602082003420137030020034109360284052003200341b0026a360280052003200336028c05200341dc026a4101360200200342013702cc02200341c888c2003602c802200320034180056a3602d8022003418c056a41e88ac500200341c8026a10431a200335020842208620033502008410062003280204450d01200328020010350c010b2003200341c8026a41047241ac02109d081a0b02402005450d00200110350b411b21012002411b460d0020041007200221010b20002001360200200041046a200341ac02109d081a20034190056a24000b9b0203017f017e017f230041d0006b220224002002200136020420022000360200200241086a2001ad4220862000ad842203100510c20102400240200228020822010d00410321000c010b200228020c210402400240200241106a280200450d0020012d000022004103490d010b20024100360220200242013703182002410936022c200220023602282002200241186a360234200241cc006a41013602002002420137023c200241c888c2003602382002200241286a360248200241346a41e88ac500200241386a10431a200235022042208620023502188410060240200228021c450d00200228021810350b02402004450d00200110350b410321000c010b02402004450d00200110350b200310070b200241d0006a240020000bb10503027f017e047f230041d0006b2202240041a0e4cb00ad4280808080800284100122032900002104200241086a41086a200341086a29000037030020022004370308200310354190eaca00ad4280808080e00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b8e280b037f027e037f047e027f017e027f087e017f027e087f230041f0086b22062400200620043703402006200337033820062001360234200620053a004f024002400240024020012002460d002003200484500d0020012002412010a008450d00200641d0006a2002108e02200641e0006a2006280250220720062802582208108f02200629036021094200210a20064200370360200641a8016a280200210b20062d00ac01210c024002402009420151220d0d00200641b0016a41386a4200370300200641b0016a41306a4200370300200641b0016a41286a4200370300200641d0016a4200370300200641b0016a41186a4200370300200641c0016a4200370300200641b8016a4200370300200642003703b0014200210e4200210f420021100c010b200641e0006a41386a2903002103200641e0006a41306a2903002104200641e0006a41206a290300210e200641e0006a41186a290300210a200641a0016a2903002111200629037021102006290368210f200641d0016a200641e0006a41286a290300370300200641b0016a41286a2004370300200641b0016a41306a2003370300200641c0016a200a3703002006200e3703c801200620113703e8012006200f3703b001200620103703b8010b200641f0036a20062802342212108e0220064180046a20062802f003221320062802f8032201108f022006290380042114420021032006420037038004200641c8046a280200211520062d00cc04211602400240201442015122050d00200641d0046a41306a4200370300200641d0046a41286a4200370300200641d0046a41206a4200370300200641d0046a41186a4200370300200641d0046a41106a4200370300200641d8046a4200370300200642003703d004420021044200211742002118420021190c010b200641b8046a290300211120064180046a41306a290300211a20064180046a41206a290300211820064180046a41186a2903002117200641c0046a290300211920062903900421042006290388042103200641d0046a41206a20064180046a41286a290300370300200641d0046a41286a201a370300200641d0046a41306a2011370300200641d0046a41106a2017370300200620183703e804200620033703d004200620043703d8040b0240024020032006290338221b7d221a2003562004200641386a41086a290300221c7d2003201b54ad7d221120045620112004511b450d00419089c20021054280808080b00221114180800c21010c010b2006201a3703d004200620113703d804024020062903b001221d201b7c221e201d54221f200641b0016a41086a2903002220201c7c201fad7c221d202054201d2020511b450d0041a7d6ca0021054280808080800121114180800821010c010b2006201e3703b001200641c8016a29030021202006201d3703b8010240427f201e20062903c0017c22212021201e54221f201d20207c201fad7c2220201d542020201d511b221f1b428080e983b1de16544100427f2020201f1b501b450d0041fe88c20021054280808080a00221114180801021010c010b0240201b201c84500d0020064188056a2006280234108e02200641c0076a2006280288052222200628029005108f02200641f0076a290300420020062903c007420151221f1b211b200641e8076a2903004200201f1b211d0240200628028c05450d00202210350b201d201a56201b201156201b2011511b450d004180800421014280808080d002211141a389c20021050c010b0240024020062d004f4101460d00201a428080e983b1de165441002011501b0d010c040b20064188056a2006280234108e02200641c0076a200628028805221f200628029005108f0220062d008c08212220062903c007211b0240200628028c05450d00201f10350b201a42ffffe883b1de165620114200522011501b0d03201b4201520d03202241ff0171450d030b41f588c20021054280808080900121114180801421010b20014180801c7141830c7221152005ad220342088842ff018321042011200384428080fcffff0383211b4101211f0c020b200041043a00000c020b20064188056a41186a200641d0046a41186a290300221b37030020064188056a41206a2222200641d0046a41206a29030037030020064188056a41286a2223200641d0046a41286a29030037030020064188056a41306a2224200641d0046a41306a290300370300200620062903e004221d370398052006201a370388052006201137039005427f200320177c221c201c200354221f200420187c201fad7c220320045420032004511b221f1b427f2003201f1b8450212502400240427f201a201d7c22032003201a54221f2011201b7c201fad7c220320115420032011511b221f1b2204428080e983b1de16544100427f2003201f1b2203501b0d0020064198056a29030021042024290300211d2023290300211c20222903002117200629039005211820062903880521204201211b20062903a005211e0c010b02400240200420038450450d004200211b0c010b4200211b200641c0076a41186a22264200370300200641c0076a41106a22234200370300200641c0076a41086a22224200370300200642003703c00741b6fdc600ad4280808080800184221d10012224290000211c200641e0086a41086a221f202441086a2900003703002006201c3703e008202410352022201f290300370300200620062903e0083703c00741e489c200ad4280808080d00184221c100122242900002117201f202441086a290000370300200620173703e00820241035202320062903e0082217370300200641c0086a41086a22272022290300370300200641c0086a41106a22282017370300200641c0086a41186a2229201f290300370300200620062903c0073703c008200641186a200641c0086a412010d701200641186a41106a29030021172006290320211820062802182124202642003703002023420037030020224200370300200642003703c007201d10012226290000211d201f202641086a2900003703002006201d3703e008202610352022201f290300370300200620062903e0083703c007201c10012226290000211d201f202641086a2900003703002006201d3703e00820261035202320062903e008221d370300202720222903003703002028201d3703002029201f290300370300200620062903c0073703c008200642002017420020241b221d20037d2018420020241b221c200454ad7d2217201c20047d2218201c562017201d562017201d511b221f1b3703c807200642002018201f1b3703c007200641c0086aad4280808080800484200641c0076aad42808080808002841002200641f8076a2003370300200641f0076a2004370300202241013a0000200641c9076a2012290000370000200641d1076a201241086a290000370000200641d9076a201241106a290000370000200641e1076a201241186a290000370000200641033a00c00741b0b4cc004100200641c0076a10d4010b0b2025ad2103200641a8046a2017370300200641b0046a201c37030020064190046a2018370300200641b8046a201d37030020064198046a20043703002006201e3703a004200620193703c0042006202037038804420121044100211f200620164100201442015122221b3a00cc0420062015410020221b3602c8042006201b4201512215ad37038004024020150d002001ad4220862013ad841007420021044200211b0c010b200620013602c407200620133602c00720064188046a200641c0076a10e7024200211b0b024020062802f403450d00201310350b200641b0016a41106a210102400240201f0d00024002400240200541ff017122050d0020044200510d0041032115200641c0066a21050c010b2005450d0120044200520d0141042115200641c0056a21050b200541086a20153a0000200541003a0000200541096a2012290000370000200541116a201241086a290000370000200541196a201241106a290000370000200541216a201241186a29000037000041b0b4cc004100200510d4010b410421154100210520034201520d01200641f8076a2011370300200641f0076a201a37030041002105200641c0076a41086a41003a0000200641c9076a2012290000370000200641d1076a201241086a290000370000200641d9076a201241106a290000370000200641e1076a201241186a290000370000200641033a00c00741b0b4cc004100200641c0076a10d4010c010b20044208862005ad42ff018384201b842103201541807e7121050b200641c0056a41086a2212200141086a290300370300200641c0056a41106a221f200141106a290300370300200641c0056a41186a2213200141186a290300370300200641c0056a41206a2216200141206a290300370300200620012903003703c005200641b0016a41086a290300210420062903b001211102400240201541ff017122014104460d0020034280807c83211a200342088842ff01832110200520017221012003a7210d410121050c010b20062903e801211a200641c0066a41186a2012290300221b370300200641c0066a41206a201f290300370300200641e8066a22052013290300370300200641f0066a22152016290300370300200620062903c00522143703d006200620113703c006200620043703c806427f200f200a7c22032003200f5422012010200e7c2001ad7c220320105420032010511b22011b427f200320011b8450211202400240427f201120147c2203200320115422012004201b7c2001ad7c220320045420032004511b22011b2210428080e983b1de16544100427f200320011b2203501b0d00200641d0066a29030021102015290300211b2005290300210a200641e0066a290300210f20062903c806211420062903c006210e4201211d20062903d806211c0c010b02400240201020038450450d004200211d0c010b4200211d200641c0076a41186a22134200370300200641c0076a41106a22154200370300200641c0076a41086a22054200370300200642003703c00741b6fdc600ad4280808080800184221b1001221f290000210a200641e0086a41086a2201201f41086a2900003703002006200a3703e008201f103520052001290300370300200620062903e0083703c00741e489c200ad4280808080d00184220a1001221f290000210f2001201f41086a2900003703002006200f3703e008201f1035201520062903e008220f370300200641c0086a41086a22162005290300370300200641c0086a41106a2222200f370300200641c0086a41186a22252001290300370300200620062903c0073703c0082006200641c0086a412010d701200641106a290300210f200629030821142006280200211f201342003703002015420037030020054200370300200642003703c007201b10012213290000211b2001201341086a2900003703002006201b3703e0082013103520052001290300370300200620062903e0083703c007200a10012213290000211b2001201341086a2900003703002006201b3703e00820131035201520062903e008221b370300201620052903003703002022201b37030020252001290300370300200620062903c0073703c00820064200200f4200201f1b221b20037d20144200201f1b220a201054ad7d220f200a20107d2214200a56200f201b56200f201b511b22011b3703c80720064200201420011b3703c007200641c0086aad4280808080800484200641c0076aad42808080808002841002200641f8076a2003370300200641f0076a2010370300200541013a0000200641c9076a2002290000370000200641d1076a200241086a290000370000200641d9076a200241106a290000370000200641e1076a200241186a290000370000200641033a00c00741b0b4cc004100200641c0076a10d4010b0b2012ad210320064188016a200f37030020064190016a200a370300200641f0006a201437030020064198016a201b370300200641f8006a20103703002006201c370380012006201a3703a0012006200e37036842012110410021052006200c4100200942015122011b3a00ac012006200b410020011b3602a8012006201d4201512201ad370360024020010d002008ad4220862007ad841007420021104200211a0c010b200620083602c407200620073602c007200641e8006a200641c0076a10e7024200211a0b02402006280254450d00200710350b02400240024020050d00024002400240200d41ff017122010d0020104200510d0041032105200641f0026a21010c010b2001450d0120104200520d0141042105200641f0016a21010b200141086a20053a0000200141003a0000200141096a2002290000370000200141116a200241086a290000370000200141196a200241106a290000370000200141216a200241186a29000037000041b0b4cc004100200110d4010b20034201520d01200641f8076a2004370300200641f0076a2011370300200641c0076a41086a41003a0000200641c9076a2002290000370000200641d1076a200241086a290000370000200641d9076a200241106a290000370000200641e1076a200241186a290000370000200641033a00c00741b0b4cc004100200641c0076a10d4010c010b200141ff01714104470d010b200628023421012006290338210320064198086a200641386a41086a29030037030020064190086a2003370300200641c0076a41086a41023a0000200641c9076a2001290000370000200641d1076a200141086a290000370000200641d9076a200141106a290000370000200641e1076a200141186a290000370000200641e9076a2002290000370000200641f1076a200241086a290000370000200641f9076a200241106a29000037000020064181086a200241186a290000370000200641033a00c00741b0b4cc004100200641c0076a10d401200041043a00000c010b2000200141087622023b0001200020013a0000200041036a20024110763a0000200041046a2010420886200dad42ff018384201a843700000b200641f0086a24000bfd0102027f027e200028024021020240410410332203450d002003200236000020002d0044210220034104410810372203450d00200320023a0004200041086a29030021042000290300210520034108411510372203450d00200320053700052003410d6a2004370000200041186a29030021042000290310210520034115412a10372203450d00200320053700152003411d6a2004370000200041286a2903002104200029032021052003412a41d40010372203450d00200320053700252003412d6a2004370000200320002903303700352003413d6a200041386a29030037000020012902002003ad4280808080d008841002200310350f0b103c000b830404047f017e037f027e230041d0006b22012400200141206a41186a4200370300200141206a41106a22024200370300200141206a41086a220342003703002001420037032041a0e4cb00ad42808080808002841001220429000021052003200441086a29000037030020012005370320200410354189eaca00ad4280808080f00084100122042900002105200141c0006a41086a2206200441086a2900003703002001200537034020041035200220012903402205370300200141086a2003290300370300200141106a2005370300200141186a200629030037030020012001290320370300200141206a200110a20220012802202103200129022421052001410036022820014201370320200141206a41002005420020031b2205422088a7220441306c220641306d108a012005a721072003410820031b21082001280228210202402004450d00200128022020024105746a2103200821040340200441086a2900002105200441106a29000021092004290000210a200341186a200441186a290000370000200341106a2009370000200341086a20053700002003200a370000200241016a2102200341206a2103200441306a2104200641506a22060d000b0b2001200236022802402007450d00200741306c450d00200810350b20002001290320370200200041086a200141206a41086a280200360200200141d0006a24000b8d0303047f017e027f230041d0006b22012400200141206a41186a4200370300200141206a41106a22024200370300200141206a41086a220342003703002001420037032041a0e4cb00ad42808080808002841001220429000021052003200441086a29000037030020012005370320200410354189eaca00ad4280808080f00084100122042900002105200141c0006a41086a2206200441086a2900003703002001200537034020041035200220012903402205370300200141086a2003290300370300200141106a2005370300200141186a200629030037030020012001290320370300200141206a200110a20220012802202204410820041b2107410021030240024002402001290224420020041b2205422088a7220441014b0d0020040e020201020b03402004410176220220036a220620032007200641306c6a2000412010a0084101481b2103200420026b220441014b0d000b0b2007200341306c6a2000412010a0084521030b02402005a72204450d00200441306c450d00200710350b200141d0006a240020030bc00c07027f017e027f017e087f057e017f230022042105200441a0016b4160712204240002402002200384500d002000290000210620044180016a200110eb022004280280012107200428028401210842012109024002400240200428028801220a450d002007200a410574220a6a210b200a41406a210c200441e0006a41106a210d200441e0006a41196a210e2007210a02400340200441c0006a41106a220f200a41106a290300370300200441c0006a41086a2210200a41086a2903003703002004200a290300370340200a41186a2d000021112004200a41196a2800003602282004200a411c6a28000036002b20114103460d02200d200f290300370300200441e0006a41086a2010290300370300200e2004280228360000200e41036a200428002b36000020042004290340370360200420113a00780240024002400240200d2000460d00200d2900002000290000510d002004200e2800003602582004200e41036a28000036005b200441e8006a290300211220042903602113200429037021140c010b2009a7210f200441033a0098012004290390012106200429038001211520042903880121162004290398012109200f41ff01714103460d01200441e8006a2903002212200320042903602213200256201220035620122003511b220d1b211220132002200d1b2113201141022011200f41ff0171461b21112004290370211420152102201621030b2004200428005b36003320042004280258360230200420042802303602382004200428003336003b0240412010332217450d0020172013370300201720113a00182017201437031020172004280238360019201720123703082017411c6a200428003b360000200442818080801037021c20042017360218200c4160460d02200a41206a210a200441e0006a41106a210f200441e0006a41196a21104101210e0340200441c0006a41106a220d200a41106a290300370300200441c0006a41086a220b200a41086a2903003703002004200a290300370340200a41186a2d000021112004200a41196a2800003602282004200a411c6a28000036002b20114103460d03200f200d290300370300200441e0006a41086a220d200b29030037030020102004280228360000201041036a220b200428002b36000020042004290340370360200420113a0078024002400240200f2000460d00200f2900002000290000510d00200420102800003602582004200b28000036005b200d2903002112200429036021132004290370211420022115200321160c010b2009a7210b200441033a00980120042903900121062004290380012115200429038801211620042903980121090240200b41ff0171220b4103460d00200d2903002212200320042903602213200256201220035620122003511b220d1b211220132002200d1b2113201141022011200b461b2111200429037021140c010b200c450d070c010b2004200428005b36003320042004280258360230200420042802303602382004200428003336003b2004200428003b3600830120042004280238360280010240200e200428021c470d00200441186a200e410110a101200428021821170b2017200e4105746a220d20113a0018200d2014370310200d200428028001360019200d411c6a200428008301360000200d2012370308200d20133703002004200e41016a220e360220200c450d060b200a41206a210a200c41606a210c20152102201621030c000b0b1045000b200c41606a210c2015210220162103200a41206a220a200b470d010c040b0b20022115200321160b0240200841ffffff3f71450d00200710350b20044180016a41086a200441186a41086a28020036020020042004290318370380010c020b20022115200321160b20044100360288012004420837038001200841ffffff3f71450d00200710350b02400240200942ff01834203854200520d00200428028801210a200428028001210c20044180016a21040c010b0240200428028801220a200428028401470d0020044180016a200a410110a101200428028801210a0b200428028001220c200a4105746a221120063703102011201637030820112015370300201141186a20093703002004200a41016a220a3602880120044180016a21040b2001200c200a10ec02200441046a28020041ffffff3f71450d00200428020010350b200524000ba70704087f017e027f057e23004190016b22022400200241106a200110ed022002280210210320022002280218220136022420022003360220200241286a2001ad4220862003ad84100510c2010240024002400240024020022802282204450d00200228022c21052002200241306a28020036023c20022004360238200241086a200241386a10c40102400240024002402002280208450d0041002106200241003602400c010b200228020c2207200228023c4105762201200120074b1b22014105742206417f4c0d070240024020010d00410821080c010b200610332208450d070b41002106200241003602582002200136025420022008360250024002402007450d00034020024180016a200241386a10ee020240024020022d0080014101460d0041032109200228023c22014110490d01200229008101210a2002200141706a220b36023c20022002280238220c41106a360238200b450d01200c41086a290000210d200c290000210e20022001416f6a36023c2002200c41116a36023841032109200c2d0010220141034f0d012002200228008001360278200220024180016a41036a28000036007b200a210f200e2110200d2111200121090c010b410321090b200220022802783602702002200228007b36007320094103460d022002200228007336006b20022002280270360268024020062002280254470d00200241d0006a2006410110a10120022802502108200228025821060b200820064105746a220120093a00182001200f370310200120022802683600192001411c6a200228006b36000020012011370308200120103703002002200641016a22063602582007417f6a22070d000b0b200241c0006a41086a200241d0006a41086a28020036020020022002290350220f370340200fa722064521012006450d022002290244210f0c030b4100210620024100360240200228025441ffffff3f71450d00200810350b410121010b200241003602482002420137034020024109360284012002200241206a360280012002200241c0006a360278200241e4006a410136020020024201370254200241c888c200360250200220024180016a360260200241f8006a41e88ac500200241d0006a10431a2002350248422086200235024084100602402002280244450d00200228024010350b0b02402005450d00200410350b2001450d010b20004100360208200042083702000c010b2000200f370204200020063602000b02402002280214450d00200310350b20024190016a24000f0b1045000b1044000bb0180d037f027e027f067e027f027e017f017e027f017e037f027e017f230041b0056b22032400200341286a2000108e02200341386a2003280228220420032802302205108f0220032903382106420021072003420037033820034180016a280200210820032d00840121090240024020064201510d0020034188016a41386a420037030020034188016a41306a420037030020034188016a41286a420037030020034188016a41206a420037030020034188016a41186a420037030020034198016a420037030020034190016a420037030020034200370388014200210a4200210b4200210c0c010b200341386a41386a290300210d200341386a41306a290300210e200341386a41206a290300210a200341386a41186a2903002107200341f8006a290300210f2003290348210c2003290340210b20034188016a41206a200341386a41286a29030037030020034188016a41286a200e37030020034188016a41306a200d37030020034198016a20073703002003200a3703a0012003200f3703c0012003200b370388012003200c370390010b4200210d200341c0016a2210420037030020034188016a41306a420037030020034188016a41286a22114200370300200342003703a801200c200a7c2112200b20077c2213200b542214ad211520034188016a41106a211602402002450d00200241057421174200210d4200210f420021184200210e200121190340024002400240201941186a221a2d0000221b417f6a41ff017141014b0d002011200e201941086a290300220720182019290300220a56200e200756200e2007511b221b1b220e37030020032018200a201b1b22183703a801201a2d0000221b4102460d010b201b41ff01710d01201941086a29030021072019290300210a0b2010200d2007200f200a56200d200756200d2007511b221b1b220d3703002003200f200a201b1b220f3703b8010b201941206a2119201741606a22170d000b0b201220157c2107200341c8016a41186a201641086a290300220a370300200341c8016a41206a221b201641106a290300370300200341c8016a41286a201641186a290300370300200341c8016a41306a201641206a29030037030020032016290300220e3703d8012003200b3703c8012003200c3703d00102400240427f200b200e7c220e200e200b542219200c200a7c2019ad7c220a200c54200a200c511b22191b220e428080e983b1de16544100427f200a20191b220f501b0d00200341d8016a290300210e200341f8016a290300210f200341f0016a2903002118201b290300211220032903d001211520032903c801211c4201210a20032903e001211d0c010b02400240200e200f8450450d004200210a0c010b4200210a20034180046a41186a2210420037030020034180046a41106a2217420037030020034180046a41086a221b4200370300200342003703800441b6fdc600ad428080808080018422181001221a2900002112200341a0056a41086a2219201a41086a290000370300200320123703a005201a1035201b2019290300370300200320032903a0053703800441e489c200ad4280808080d0018422121001221a29000021152019201a41086a290000370300200320153703a005201a1035201720032903a005221537030020034180056a41086a2211201b29030037030020034180056a41106a2216201537030020034180056a41186a221e2019290300370300200320032903800437038005200341106a20034180056a412010d701200341106a41106a29030021152003290318211c2003280210211a2010420037030020174200370300201b4200370300200342003703800420181001221029000021182019201041086a290000370300200320183703a00520101035201b2019290300370300200320032903a0053703800420121001221029000021182019201041086a290000370300200320183703a00520101035201720032903a00522183703002011201b29030037030020162018370300201e20192903003703002003200329038004370380052003420020154200201a1b2218200f7d201c4200201a1b2212200e54ad7d22152012200e7d221c201256201520185620152018511b22191b3703880420034200201c20191b3703800420034180056aad428080808080048420034180046aad42808080808002841002200341b8046a200f370300200341b0046a200e370300201b41013a000020034189046a200029000037000020034191046a200041086a29000037000020034199046a200041106a290000370000200341a1046a200041186a290000370000200341033a00800441b0b4cc00410020034180046a10d4010b0b2007200c5121192007200c54211b200341e0006a2012370300200341e8006a2018370300200341c8006a2015370300200341f0006a200f370300200341d0006a200e3703002003201d3703582003200d3703782003201c370340200320094100200642015122171b3a00840120032008410020171b360280012003200a4201512217ad3703380240024020170d002005ad4220862004ad8410070c010b20032005360284042003200436028004200341c0006a20034180046a10e7020b2014201b20191b21190240200328022c450d00200410350b427f200720191b2107427f201320191b210d200a420152211902400240024020064201510d0020190d004103211b20034180036a21190c010b20064201522019410173720d014104211b20034180026a21190b201941086a201b3a0000201941003a0000201941096a2000290000370000201941116a200041086a290000370000201941196a200041106a290000370000201941216a200041186a29000037000041b0b4cc004100201910d4010b0240200d2007844200520d00200341b8046a200c370300200341b0046a200b37030020034180046a41086a41003a000020034189046a200029000037000020034191046a200041086a29000037000020034199046a200041106a290000370000200341a1046a200041186a290000370000200341033a00800441b0b4cc00410020034180046a10d4010b20034180046a200010ed02200341086a200328028004221920032802880441b0b4cc0041004100108a02200328020821040240200328028404450d00201910350b0240024002400240024002402002450d0020034180036a200010ed0220024105744104722219417f4c0d02200335028803210d200328028003210520191033221b450d03200341003602880420032019360284042003201b36028004200220034180046a107720024105742111200328028404211a2003280288042117034002400240201a20176b4108490d00200328028004211b201a21100c010b201741086a22192017490d06201a410174221b2019201b20194b1b22104100480d0602400240201a0d00024020100d004101211b0c020b20101033221b0d010c090b200328028004211b201a2010460d00201b201a20101037221b450d080b20032010360284042003201b360280040b201b20176a200141106a2900003700002003201741086a221a36028804200141086a29030021072001290300210a024002402010201a6b410f4d0d00201021190c010b201a41106a2219201a490d06201041017422162019201620194b1b22194100480d060240024020100d00024020190d004101211b0c020b20191033221b450d090c010b20102019460d00201b201020191037221b450d080b20032019360284042003201b360280040b201b201a6a221a2007370008201a200a3700002003201741186a221736028804200141186a2d000021100240024020192017460d002019211a201721190c010b201941016a22172019490d062019410174221a2017201a20174b1b221a4100480d060240024020190d00410021190240201a0d004101211b0c020b201a1033221b450d090c010b2019201a460d00201b2019201a1037221b450d080b2003201a360284042003201b360280040b200141206a2101201b20196a20103a00002003201941016a221736028804201141606a22110d000b2003280284042119200d4220862005ad842017ad422086200328028004221bad84100202402019450d00201b10350b0240200328028403450d00200510350b20044101460d012000108d020c010b20034180046a200010ed022003350288044220862003280280042219ad8410070240200328028404450d00201910350b20044101470d0020001099020b200341b0056a24000f0b1044000b1045000b103e000b103c000bc20503027f017e047f230041d0006b2202240041b6fdc600ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003103541b8a2c600ad4280808080d00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bf00204027f017e017f077e0240024020012802042202450d0020012802002203310000210420012002417f6a22053602042001200341016a3602002005450d012003310001210620012002417e6a22053602042001200341026a3602002005450d012003310002210720012002417d6a22053602042001200341036a3602002005450d012003310003210820012002417c6a22053602042001200341046a3602002005450d012003310004210920012002417b6a22053602042001200341056a3602002005450d012003310005210a20012002417a6a22053602042001200341066a3602002005450d012003310006210b2001200241796a22053602042001200341076a3602002005450d01200041003a00002003310007210c2001200241786a3602042001200341086a3602002000200c423886200b42308684200a422886842009422086842008421886842007421086842006420886842004843700010f0b200041013a00000f0b200041013a00000bb3270f037f017e037f057e037f017e037f027e017f027e017f017e027f047e047f230041900a6b220624002006200437034020062003370338200620053a004f024002400240024002400240024002400240024002402003200484500d0020012002460d0320012002412010a008450d03200641d0016a2002108e02200641e0016a20062802d001220720062802d8012208108f0220062903e001210942002104200642003703e001200641a8026a280200210a20062d00ac02210b2009420151220c0d01200641b0026a41386a4200370300200641b0026a41306a4200370300200641b0026a41286a4200370300200641d0026a4200370300200641b0026a41186a4200370300200641c0026a4200370300200641b8026a4200370300200642003703b002420021034200210d4200210e0c020b20004100360200200041106a4200370300200041086a42003703000c090b200641e0016a41386a290300210f200641e0016a41306a2903002110200641e0016a41206a290300210e200641e0016a41186a290300210d200641a0026a290300211120062903f001210320062903e8012104200641d0026a200641e0016a41286a290300370300200641b0026a41286a2010370300200641b0026a41306a200f370300200641c0026a200d3703002006200e3703c802200620113703e802200620043703b002200620033703b8020b200641b0026a41106a2105427f2004200d7c220d200d20045422122003200e7c2012ad7c220420035420042003511b22121b427f200420121b84500d01200641f0046a2001108e0220064180056a20062802f004221320062802f8042214108f022006290380052115420021032006420037038005200641c8056a280200211620062d00cc05211702400240201542015122180d00200641d0056a41306a4200370300200641d0056a41286a4200370300200641d0056a41206a4200370300200641d0056a41186a4200370300200641e0056a4200370300200641d8056a4200370300200642003703d005420021044200210e4200210d420021190c010b200641b8056a290300210f20064180056a41306a290300211020064180056a41206a290300210420064180056a41186a2903002103200641c0056a2903002119200629039005210d200629038805210e200641d0056a41206a20064180056a41286a290300370300200641d0056a41286a2010370300200641d0056a41306a200f370300200641e0056a2003370300200620043703e8052006200e3703d0052006200d3703d8050b200641386a41086a2903002210200420032006290338221156200420105620042010511b22121b211a2011200320121b210f0240024020062d004f4101470d00200641d0066a21122005211b20062903c002221c200f7c221d201c54221e200641c8026a290300221f201a7c201ead7c221c201f54201c201f511b0d010c040b200641c0066a2112200641b0026a211b20062903b002221c200f7c221d201c54221e200641b0026a41086a290300221f201a7c201ead7c221c201f54201c201f511b4101470d030b201241086a4108360200201241046a221841a7d6ca00360200201241026a41023a0000201241830c3b0100201829020022034280807c83210f200342088842ff018321042003a721182012280200211b410121120c030b02402005450d00200641e0076a2001108e02200641e0086a20062802e007220220062802e807108f0220064180096a290300420020062903e00842015122011b210e200641f8086a290300420020011b210d024020062802e407450d00200210350b20004100360200200041106a42002004200e7d2003200d54ad7d220e2003200d7d220d200356200e200456200e2004511b22011b370300200041086a4200200d20011b3703000c070b200620033703e006200620043703e806200620013602f003200641e0076a2001200641e0066a200641f0036a10f00220064180086a290300210320062903f8072104024020062903e0074201520d0020062903e807210d20064198096a200641e0076a41106a29030037030020064190096a200d370300200641e0086a41086a41003a0000200641e9086a2001290000370000200641f1086a200141086a290000370000200641f9086a200141106a29000037000020064181096a200141186a290000370000200641033a00e00841b0b4cc004100200641e0086a10d4010b200041106a2003370300200041086a2004370300200041003602000c060b200641e0066a41206a200541206a290300370300200641e0066a41186a200541186a290300370300200641e0066a41106a200541106a290300370300200641e0066a41086a200541086a290300370300200620052903003703e00641ea88c200ad4280808080b0018421034200211041838c1c211b0c020b201b201d370300201b201c370308200641d0056a41186a2004201a7d2003200f54ad7d37030020062003200f7d3703e00520064188066a41186a200641e0056a221241086a290300221c37030020064188066a41206a221b201241106a290300370300200641b0066a2220201241186a290300370300200641b8066a2221201241206a29030037030020062012290300221d370398062006200e370388062006200d370390062010201a7d21102011200f54ad211a427f200e20037c22032003200e542212200d20047c2012ad7c2203200d542003200d511b22121b427f200320121b8450211e02400240427f200e201d7c22032003200e542212200d201c7c2012ad7c2203200d542003200d511b22121b2204428080e983b1de16544100427f200320121b2203501b0d0020064188066a41106a29030021042021290300211c2020290300211d201b290300211f200629039006212220062903880621234201212420062903a00621250c010b02400240200420038450450d00420021240c010b42002124200641e0086a41186a22264200370300200641e0086a41106a22204200370300200641e0086a41086a221b4200370300200642003703e00841b6fdc600ad4280808080800184221c10012221290000211d200641800a6a41086a2212202141086a2900003703002006201d3703800a20211035201b2012290300370300200620062903800a3703e00841e489c200ad4280808080d00184221d10012221290000211f2012202141086a2900003703002006201f3703800a20211035202020062903800a221f370300200641e0096a41086a2227201b290300370300200641e0096a41106a2228201f370300200641e0096a41186a22292012290300370300200620062903e0083703e009200641206a200641e0096a412010d701200641206a41106a290300211f20062903282122200628022021212026420037030020204200370300201b4200370300200642003703e008201c10012226290000211c2012202641086a2900003703002006201c3703800a20261035201b2012290300370300200620062903800a3703e008201d10012226290000211c2012202641086a2900003703002006201c3703800a20261035202020062903800a221c3703002027201b2903003703002028201c37030020292012290300370300200620062903e0083703e00920064200201f420020211b221c20037d2022420020211b221d200454ad7d221f201d20047d2222201d56201f201c56201f201c511b22121b3703e80820064200202220121b3703e008200641e0096aad4280808080800484200641e0086aad4280808080800284100220064198096a200337030020064190096a2004370300201b41013a0000200641e9086a2001290000370000200641f1086a200141086a290000370000200641f9086a200141106a29000037000020064181096a200141186a290000370000200641033a00e00841b0b4cc004100200641e0086a10d4010b0b2010201a7d21102011200f7d2111201ead2103200641a8056a201f370300200641b0056a201d37030020064190056a2022370300200641b8056a201c37030020064198056a2004370300200620253703a005200620193703c005200620233703880542012104410021122006201741002015420151221b1b3a00cc05200620164100201b1b3602c80520062024420151221bad370380050240201b0d002014ad4220862013ad841007420021044200210f0c010b200620143602e408200620133602e00820064188056a200641e0086a10e7024200210f0b024020062802f404450d00201310350b024002402012450d0020044208862018ad42ff018384200f842103410121180c010b02400240201841ff017122120d0020044200510d0041032118200641e0076a21120c010b410021182012450d0120044200520d0141042118200641e0066a21120b201241086a20183a000041002118201241003a0000201241096a2001290000370000201241116a200141086a290000370000201241196a200141106a290000370000201241216a200141186a29000037000041b0b4cc004100201210d4010b024002402018450d0042002110410121120c010b41002112024020034201520d0020064198096a200d37030020064190096a200e37030041002112200641e0086a41086a41003a0000200641e9086a2001290000370000200641f1086a200141086a290000370000200641f9086a200141106a29000037000020064181096a200141186a290000370000200641033a00e00841b0b4cc004100200641e0086a10d4010b201121030b200641b0026a41086a290300210420062903b002210d20062903e802210e200641e0066a41206a2201200541206a290300370300200641e0066a41186a2218200541186a290300370300200641e0066a41106a2213200541106a290300370300200641e0066a41086a2216200541086a290300370300200620052903003703e0062012450d010b20034280807c83210d200342088842ff018321042003a7210c410121010c010b200641e0076a41186a2016290300220f370300200641e0076a41206a201329030037030020064188086a2205201829030037030020064190086a22122001290300370300200620062903e00622113703f0072006200d3703e007200620043703e80702400240427f200d20117c22112011200d5422012004200f7c2001ad7c220d200454200d2004511b22011b2204428080e983b1de16544100427f200d20011b220d501b0d00200641f0076a29030021042012290300210d2005290300210f20064180086a290300211120062903e807211a20062903e00721154201211c20062903f80721190c010b024002402004200d8450450d004200211c0c010b4200211c200641e0086a41186a22134200370300200641e0086a41106a22124200370300200641e0086a41086a22054200370300200642003703e00841b6fdc600ad4280808080800184220f100122182900002111200641800a6a41086a2201201841086a290000370300200620113703800a2018103520052001290300370300200620062903800a3703e00841e489c200ad4280808080d00184221110012218290000211a2001201841086a2900003703002006201a3703800a20181035201220062903800a221a370300200641e0096a41086a22162005290300370300200641e0096a41106a2217201a370300200641e0096a41186a22142001290300370300200620062903e0083703e009200641086a200641e0096a412010d701200641086a41106a290300211a2006290310211520062802082118201342003703002012420037030020054200370300200642003703e008200f10012213290000210f2001201341086a2900003703002006200f3703800a2013103520052001290300370300200620062903800a3703e008201110012213290000210f2001201341086a2900003703002006200f3703800a20131035201220062903800a220f370300201620052903003703002017200f37030020142001290300370300200620062903e0083703e00920064200201a420020181b220f200d7d2015420020181b2211200454ad7d221a201120047d2215201156201a200f56201a200f511b22011b3703e80820064200201520011b3703e008200641e0096aad4280808080800484200641e0086aad4280808080800284100220064198096a200d37030020064190096a2004370300200541013a0000200641e9086a2002290000370000200641f1086a200241086a290000370000200641f9086a200241106a29000037000020064181096a200241186a290000370000200641033a00e00841b0b4cc004100200641e0086a10d4010b0b20064188026a201137030020064190026a200f370300200641f0016a201a37030020064198026a200d370300200641f8016a200437030020062019370380022006200e3703a002200620153703e80142012104410021012006200b4100200942015122051b3a00ac022006200a410020051b3602a8022006201c4201512205ad3703e0010240024020050d002008ad4220862007ad841007420021040c010b200620083602e408200620073602e008200641e8016a200641e0086a10e7020b4200210d0b024020062802d401450d00200710350b024020010d00024002400240200c41ff017122010d0020044200510d0041032105200641f0036a21010c010b2001450d0120044200520d0141042105200641f0026a21010b200141086a20053a0000200141003a0000200141096a2002290000370000200141116a200241086a290000370000200141196a200241106a290000370000200141216a200241186a29000037000041b0b4cc004100200110d4010b200041106a2010370300200041086a2003370300200041003602000c010b2000201b360204200041086a2004420886200cad42ff018384200d84370200200041013602000b200641900a6a24000bc50f07037f027e027f0c7e037f047e047f230041d0036b2204240020032802002105200441206a2001108e02200441a0016a2004280220220320042802282206108f0220042903a001210742002108200442003703a001200441e8016a280200210920042d00ec01210a0240024020074201510d00200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441c0006a4200370300200441386a4200370300200442003703304200210b4200210c4200210d4200210e0c010b200441d8016a290300210f200441a0016a41306a2903002110200441a0016a41206a290300210b200441a0016a41186a2903002108200441e0016a290300210e20042903b001210d20042903a801210c200441306a41206a200441a0016a41286a290300370300200441306a41286a2010370300200441306a41306a200f370300200441c0006a20083703002004200b3703482004200c3703302004200d3703380b200441306a41186a200b200241086a2903002211200b20082002290300221256200b201156200b2011511b22021b22137d20082012200820021b221054ad7d22143703002004200820107d22153703402004427f200d20137c200c20107c2216200c542202ad7c220f2002200f200d54200f200d511b22021b220f3703382004427f201620021b2216370330200441e8006a41186a2014370300200441e8006a41206a2217200441306a41206a290300370300200441e8006a41286a2218200441306a41286a290300370300200441e8006a41306a2219200441306a41306a2903003703002004200f3703702004201637036820042015370378427f200d200b7c200c20087c220b200c542202ad7c220820022008200d542008200d511b22021b210c427f200b20021b211a02400240427f201620157c220d200d2016542202200f20147c2002ad7c220d200f54200d200f511b22021b2208428080e983b1de16544100427f200d20021b220b501b0d00200441f8006a29030021082019290300210b20182903002114201729030021152004290370211b2004290368211c4201210d200429038001211d0c010b024002402008200b8450450d004200210d0c010b4200210d200441a0026a41186a221e4200370300200441a0026a41106a22184200370300200441a0026a41086a22174200370300200442003703a00241b6fdc600ad42808080808001842214100122192900002115200441c0036a41086a2202201941086a290000370300200420153703c0032019103520172002290300370300200420042903c0033703a00241e489c200ad4280808080d00184221510012219290000211b2002201941086a2900003703002004201b3703c00320191035201820042903c003221b370300200441a0036a41086a221f2017290300370300200441a0036a41106a2220201b370300200441a0036a41186a22212002290300370300200420042903a0023703a003200441086a200441a0036a412010d701200441086a41106a290300211b2004290310211c20042802082119201e42003703002018420037030020174200370300200442003703a00220141001221e29000021142002201e41086a290000370300200420143703c003201e103520172002290300370300200420042903c0033703a00220151001221e29000021142002201e41086a290000370300200420143703c003201e1035201820042903c0032214370300201f20172903003703002020201437030020212002290300370300200420042903a0023703a00320044200201b420020191b2214200b7d201c420020191b2215200854ad7d221b201520087d221c201556201b201456201b2014511b22021b3703a80220044200201c20021b3703a002200441a0036aad4280808080800484200441a0026aad42808080808002841002200441d8026a200b370300200441d0026a2008370300201741013a0000200441a9026a2005290000370000200441b1026a200541086a290000370000200441b9026a200541106a290000370000200441c1026a200541186a290000370000200441033a00a00241b0b4cc004100200441a0026a10d4010b0b20122010542102201a200c84210c200441c8016a2015370300200441d0016a2014370300200441b0016a201b370300200441d8016a200b370300200441b8016a20083703002004201d3703c0012004200e3703e0012004201c3703a8012004200a4100200742015122051b3a00ec0120042009410020051b3602e8012004200d4201512205ad3703a0010240024020050d002006ad4220862003ad8410070c010b200420063602a402200420033602a002200441a8016a200441a0026a10e7020b201120137d21082002ad210b200c50210202402004280224450d00200310350b2008200b7d21082002ad210b201220107d210c200d420152210202400240024020074201510d0020020d0041032103200441a0026a21020c010b20074201522002410173720d0141042103200441a0016a21020b200241086a20033a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b2000200c370318200020163703082000200b370300200041206a2008370300200041106a200f370300200441d0036a24000b130020004104360204200041f89cc2003602000b3400200041b6fdc60036020420004100360200200041146a4104360200200041106a41c4b6c200360200200041086a42083702000b830101017f0240411010332202450d00200242003700082002420037000020024110412010372202450d0020024200370010200241186a42003700002002412041c00010372202450d002002420037003020024200370020200042c0808080800837020420002002360200200241386a4200370000200241286a42003700000f0b103c000b130020004101360204200041f4bec2003602000b130020004106360204200041ecbfc2003602000b3400200041a0e4cb0036020420004100360200200041146a4105360200200041106a41d8d8c200360200200041086a42103702000b3a01017f230041206b22022400200241186a41003602002002420037030820024200370300200242013703102000200210f802200241206a24000bad0301077f230041106b220224000240200141186a28020022034105744114722204417f4c0d000240200410332205450d00200520012903003700002005200141086a2903003700082002411036020820022004360204200220053602002001280210210620032002107702402003450d0020034105742107200228020021082002280204210420022802082103034020062101024002402004200322056b4120490d00200541206a21030c010b024002400240200541206a22032005490d00200441017422062003200620034b1b22064100480d000240024020040d00024020060d00410121080c020b2006103321080c040b20042006470d020b200621040c030b103e000b200820042006103721080b2006210420080d00103c000b200141206a2106200820056a22052001290000370000200541186a200141186a290000370000200541106a200141106a290000370000200541086a200141086a290000370000200741606a22070d000b2002200436020420022003360208200220083602000b20002002290300370200200041086a200241086a280200360200200241106a24000f0b1045000b1044000b130020004106360204200041d8e0c2003602000b3501017f02404108103322020d001045000b20004288808080800137020420002002360200200242f0d0c9abc6add9b1f4003700000b2e01017f02404104103322020d001045000b20004284808080c0003702042000200236020020024180a70c3600000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241073600000b2c01017f02404104103322020d001045000b20004284808080c000370204200020023602002002410d3600000b8709010f7f23004190036b2204240002400240200141046a28020022052f01062206410b490d002001280208210720012802002108200441306a410041e002109f081a200441286a22064100360200200441206a22094200370300200441186a220a4200370300200441106a220b4200370300200441086a220c42003703002004420037030002404194031033220d450d00200d41003b0106200d4100360200200d41086a200441306a41e002109d08210e200d4190036a2006280200360200200d4188036a2009290300370200200d4180036a200a290300370200200d41f8026a200b290300370200200d41f0026a200c290300370200200d20042903003702e802200441306a41086a2209200541d0016a290000370300200441306a41106a220f200541d8016a290000370300200441306a41186a2210200541e0016a290000370300200420052900c8013703302005280280032111200e200541e8016a20052f010641796a2206410574109d08210e200d41e8026a20054184036a2006410274109d082112200541063b0106200d20063b0106200a2010290300370300200b200f290300370300200c20092903003703002004200429033037030002400240200128020c22014107490d00200d41066a210a200e2001417a6a220c4105746a200e200141796a22014105746a220b200641ffff037120016b410574109e081a200b41186a200241186a290000370000200b41106a200241106a290000370000200b41086a200241086a290000370000200b20022900003700002012200c4102746a2106201220014102746a21020c010b200541086a220a200141016a220b4105746a200a20014105746a2206200541066a220a2f010020016b410574109e081a200641186a200241186a290000370000200641106a200241106a290000370000200641086a200241086a29000037000020062002290000370000200541e8026a220620014102746a21022006200b4102746a2106200121010b20062002200a2f010020016b410274109e081a20022003360200200041013a00002000200236023c200041386a4100360200200041346a200d360200200041306a20113602002000412c6a2007360000200041286a2005360000200041246a200836000020002004290300370001200041096a200441086a290300370000200041116a200441106a290300370000200041196a200441186a290300370000200a200a2f010041016a3b01000c020b103c000b200541086a220a200128020c220d41016a220b4105746a200a200d4105746a220a2006200d6b410574109e081a200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a290000370000200a2002290000370000200541e8026a2202200b4102746a2002200d4102746a220220052f0106200d6b410274109e081a20022003360200200520052f010641016a3b0106200441306a410b6a200141086a280000360000200041003a00002000200236023c200041106a200d3600002004200129000037003320002004290030370001200041086a200441376a2900003700000b20044190036a24000be60b020f7f047e23004180046b220624000240024020012802002207417f6a2005470d000240024002400240200141046a28020022082f01062209410b490d002001280208210a200641c0006a410272410041be03109f081a41c4031033220b450d05200b4100360200200b41046a200641c0006a41c003109d081a200641c0006a41186a220c200841e0016a290000370300200641c0006a41106a220d200841d8016a290000370300200641c0006a41086a220e200841d0016a290000370300200620082900c801370340200828028003210f200b41086a200841e8016a20082f0106221041796a2205410574109d082111200b41e8026a20084184036a2005410274109d082112200b4194036a200841b0036a2010417a6a2213410274109d082114200841063b0106200b20053b010602402013450d00410021052014211003402010280200220920053b01042009200b360200201041046a21102013200541016a2205470d000b0b200641206a41186a200c2903002215370300200641206a41106a200d2903002216370300200641206a41086a200e2903002217370300200620062903402218370320200641186a2015370300200641106a2016370300200641086a201737030020062018370300200128020c22054107490d0120112005417a6a22014105746a2011200541796a22104105746a2209200b2f010620106b410574109e081a200941186a200241186a290000370000200941106a200241106a290000370000200941086a200241086a290000370000200920022900003700002012200141027422096a201220104102746a2213200b2f010620106b410274109e081a20132003360200200b200b2f010641016a22133b01062005410274220220146a416c6a201420096a2205201341ffff037120016b410274109e081a200520043602002001200b2f010622134b0d022002200b6a41fc026a2105034020052802002209201041016a22103b01042009200b360200200541046a210520102013490d000c030b0b200841086a2205200128020c221341016a22104105746a200520134105746a2205200920136b410574109e081a200541186a200241186a290000370000200541106a200241106a290000370000200541086a200241086a29000037000020052002290000370000200841e8026a22092010410274220b6a2009201341027422056a220920082f010620136b410274109e081a20092003360200200820082f010641016a22093b0106200520084194036a22026a41086a2002200b6a220b200941ffff037120106b410274109e081a200b20043602000240201020082f0106220b4b0d00200820056a4198036a210520132110034020052802002209201041016a22103b010420092008360200200541046a21052010200b490d000b0b200041003a0000200041046a2001290200370200200041106a20133602002000410c6a200141086a2802003602000c020b200841086a2210200541016a22094105746a201020054105746a221020082f010620056b410574109e081a201041186a200241186a290000370000201041106a200241106a290000370000201041086a200241086a29000037000020102002290000370000200841e8026a2213200941027422016a2013200541027422106a221320082f010620056b410274109e081a20132003360200200820082f010641016a22133b0106201020084194036a22026a41086a200220016a2201201341ffff037120096b410274109e081a20012004360200200520082f010622134f0d00200820106a4198036a2110034020102802002209200541016a22053b010420092008360200201041046a211020132005470d000b0b20002006290300370001200041013a00002000412c6a200a360200200041286a2008360200200041246a2007360200200041386a2007360200200041346a200b360200200041306a200f360200200041096a200641086a290300370000200041116a200641106a290300370000200041196a200641186a2903003700000b20064180046a24000f0b41d684cc00413541c086cc00103f000b103c000bb71a01197f230041d0116b2202240020002802102203200328020041016a360200200028020c2104200028020821052000280200210620002802042103200241206a41186a22072000412c6a290000370300200241206a41106a2208200041246a290000370300200241206a41086a22092000411c6a29000037030020022000290014370320200241a0026a200141e000109d081a024002400240024002400240024020032f01062201410b490d00200241b0036a410041e002109f081a20024198066a410041a008109f081a41880b1033220a450d04200a41003b0106200a4100360200200a41086a200241b0036a41e002109d082101200a41e8026a20024198066a41a008109d0821072002200341c8016a2f00003b01ac032002200341ca016a2d00003a00ae032002200341db016a290000370398032002200341e0016a29000037009d03200341cb016a280000210b200341cf016a280000210c200341d3016a280000210d200341d7016a280000210e20024198066a200341a8076a41e000109d081a2001200341e8016a20032f010641796a2200410574109d082101200720034188086a200041e0006c109d082107200341063b0106200a20003b0106200220022f01ac033b019403200220022d00ae033a0096032002200229039803370380032002200229009d0337008503200241b0036a20024198066a41e000109d081a0240024020044107490d00200441057420016a41c07e6a2001200441796a22084105746a2201200041ffff037120086b410574109e081a200141186a200241206a41186a290300370000200141106a200241206a41106a290300370000200141086a200241206a41086a29030037000020012002290320370000200441e0006c20076a220041c07b6a200041e07a6a220f200a41066a22002f010020086b41e0006c109e081a200f200241a0026a41e000109d081a0c010b200341086a20044105746a220141206a2001200341066a22002f010020046b410574109e081a200141186a200241206a41186a290300370000200141106a200241206a41106a290300370000200141086a200241206a41086a29030037000020012002290320370000200341e8026a200441e0006c6a220f41e0006a200f20002f010020046b41e0006c109e081a200f200241a0026a41e000109d081a0b20024188026a41026a220420022d0096033a0000200020002f010041016a3b0100200220022f0194033b01880220022002290380033703800120022002290085033700850120024190016a200241b0036a41e000109d081a2002411c6a41026a221020042d00003a0000200220022f0188023b011c2002200229038001370308200220022900850137000d200241206a20024190016a41e000109d081a200328020022070d01410021030c020b200320044105746a220041286a200041086a2206200120046b410574109e081a200041206a2007290300370000200041186a2008290300370000200041106a2009290300370000200620022903203700002003200441e0006c6a220041c8036a200041e8026a220f20032f010620046b41e0006c109e081a200f200241a0026a41e000109d081a200320032f010641016a3b01060c020b20032f0104211120024198066a410272211241002103024003402002419c026a41026a221320102d00003a0000200220022f011c3b019c0220022002290308370388022002200229000d37008d02200241a0026a200241206a41e000109d081a20062003470d01201141ffff0371210802400240024020072f01062203410b490d002012410041b20b109f081a41b80b10332201450d0720014100360200200141046a20024198066a41b40b109d081a200220072f00c8013b01ac032002200741ca016a2d00003a00ae032002200741db016a290000370398032002200741e0016a29000037009d03200741cb016a2800002114200741cf016a2800002115200741d3016a2800002116200741d7016a280000211720024198066a200741a8076a41e000109d081a200141086a200741e8016a20072f0106220041796a2203410574109d082118200141e8026a20074188086a200341e0006c109d082119200141880b6a200741a40b6a2000417a6a2209410274109d08211a200741063b0106200120033b010602402009450d0041002103201a210003402000280200220420033b010420042001360200200041046a21002009200341016a2203470d000b0b200241b0036a20024198066a41e000109d081a200220022d00ae0322033a009603200220022f01ac0322003b0194032002200229009d033700850320022002290398033703800320024194066a41026a220920033a0000200220003b01940620022002290380033703800120022002290085033700850120024198066a200241b0036a41e000109d081a201141ffff037122004107490d0120182008417a6a22044105746a2018200841796a22034105746a220020012f010620036b410574109e081a200041186a200229008d023700002000200e36000f2000200d36000b2000200c3600072000200b360003200041026a20132d00003a0000200020022f019c023b00002000200229038802370013200841e0006c20196a220041c07b6a200041e07a6a220020012f010620036b41e0006c109e081a2000200241a0026a41e000109d081a200120012f010641016a22003b01062008410274220b201a6a416c6a201a20044102746a2211200041ffff0371220820046b410274109e081a2011200a36020020082004490d022001200b6a41f00a6a2100034020002802002204200341016a22033b010420042001360200200041046a210020032008490d000c030b0b200741086a2200200841016a22044105746a200020084105746a2200200320086b2201410574109e081a2000200e36000f2000200d36000b2000200c3600072000200b360003200041026a2002419c026a41026a2d00003a0000200020022f019c023b00002000200229038802370013200041186a200229008d023700002007200841e0006c6a220041c8036a200041e8026a2200200141e0006c109e081a2000200241a0026a41e000109d081a2007200341016a22033b01062008410274200741880b6a22006a41086a200020044102746a2200200341ffff037120046b410274109e081a2000200a360200201141ffff037120072f010622034f0d05200a20043b0104200a2007360200200420034f0d052003417f6a210120072004417f6a22034102746a41900b6a2100034020002802002204200341026a3b010420042007360200200041046a21002001200341016a2203470d000c060b0b200741086a2203200841016a22044105746a200320084105746a220320072f0106221120086b221a410574109e081a2003200e36000f2003200d36000b2003200c3600072003200b360003200341026a20132d00003a0000200320022f019c023b00002003200229038802370013200341186a200229008d02370000200741e8026a200841e0006c6a220341e0006a2003201a41e0006c109e081a2003200241a0026a41e000109d081a2007201141016a22033b01062008410274221a200741880b6a22116a41086a201120044102746a2211200341ffff037120046b410274109e081a2011200a360200200020072f010622044f0d002007201a6a418c0b6a2103034020032802002200200841016a22083b010420002007360200200341046a210320042008470d000b0b200641016a210320024184026a41026a220020092d00003a0000200220022f0194063b01840220022002290380013703f00120022002290085013700f50120024190016a20024198066a41e000109d081a201020002d00003a0000200220022f0184023b011c200220022903f001370308200220022900f50137000d200241206a20024190016a41e000109d081a0240200728020022000d002014210b2017210e2016210d2015210c2001210a0c030b20072f010421112014210b2017210e2016210d2015210c200021072001210a200321060c000b0b41d684cc00413541c086cc00103f000b20024198066a410272410041b20b109f081a41b80b10332200450d0120004100360200200041046a20024198066a41b40b109d081a2000200528020022043602880b2005200036020020052005280204220141016a360204200441003b010420042000360200200241a0026a41026a2002411c6a41026a2d00003a0000200220022f011c3b01a002200220022903083703b0032002200229000d3700b50320024198066a200241206a41e000109d081a20012003470d0220002f01062204410a4b0d03200020044105746a2203410a6a200241a0026a41026a2d00003a0000200341086a20022f01a0023b0000200341176a200e360000200341136a200d3600002003410f6a200c3600002003410b6a200b3600002003411b6a20022903b003370000200341206a20022900b5033700002000200441e0006c6a41e8026a20024198066a41e000109d081a2000200441016a22034102746a41880b6a200a360200200020033b0106200a20033b0104200a20003602000b200241d0116a2400200f0f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000bfb0203057f017e027f0240024020002802202201450d00034020002001417f6a36022020002802042201450d0220002802082102200028020021030240200028020c220420012f0106490d00034002400240200128020022050d002002ad2106410021050c010b200341016a210320013301044220862002ad8421060b200110352006a72102200521012006422088a7220420052f01064f0d000b200521010b200441016a210720012004410c6c6a220541ec026a2802002108200541e8026a280200210402402003450d00200120074102746a41ec036a2802002101410021072003417f6a2205450d00034020012802ec0321012005417f6a22050d000b0b2000200736020c20002002360208200020013602042000410036020002402004450d002008450d00200410350b200028022022010d000b0b024020002802042205450d0020052802002101200510352001450d00034020012802002105200110352005210120050d000b0b0f0b41958dcc00412b41c08dcc00103f000bc91305027f017e067f037e0a7f230041b0036b2202240020002802102203200328020041016a36020020002902142104200028020c2105200028020821062000280200210320002802042100200241f0016a41086a2207200141086a280200360200200220012902003703f001024002400240024002400240024020002f01062201410b490d00200241d0026a410272410041da00109f081a200241386a4100418401109f081a41e40110332208450d0420084100360200200841046a200241d0026a41dc00109d081a200841e0006a200241386a418401109d082107200241386a41086a2209200041b0016a280200360200200220002902a8013703382000413f6a2d0000210a200041386a350000210b2000413c6a330000210c2000413e6a310000210d200841086a200041c0006a20002f010641796a2201410374109d08210e2007200041b4016a2001410c6c109d082107200041063b0106200820013b0106200241d0026a41086a2009280200360200200220022903383703d002200b200c200d4210868442208684210b0240024020054107490d002005410374200e6a41506a200e200541796a22094103746a220e200141ffff037120096b410374109e081a200e20043700002005410c6c20076a220541b87f6a200541ac7f6a2205200841066a22012f010020096b410c6c109e081a200541086a200241f0016a41086a280200360200200520022903f0013702000c010b200041086a20054103746a220741086a2007200041066a22012f010020056b410374109e081a20072004370000200041e0006a2005410c6c6a2207410c6a200720012f010020056b410c6c109e081a200741086a200241f0016a41086a280200360200200720022903f0013702000b200120012f010041016a3b0100200241286a41086a220f200241d0026a41086a22102802002205360200200241086a221120053602002002200a3a0017200220022903d00222043703282002200b3e02102002200b4230883c00162002200b4220883d01142002200437030020022903102104200028020022090d01410021120c020b200020054103746a220341106a200341086a2203200120056b410374109e081a2003200437000020002005410c6c6a220341ec006a200341e0006a220120002f010620056b410c6c109e081a200341e8006a2007280200360200200120022903f001370200200020002f010641016a3b01060c020b20002f01042113200241d0026a41027221144100210002400340200220093602242002200341016a2212360220200f20112802003602002002200229030037032820032000470d01201341ffff0371210702400240024020092f01062203410b490d002014410041da00109f081a200241f0016a200241d0026a41dc00109d081a200241386a410041b401109f081a41940210332201450d0720014100360200200141046a200241f0016a41dc00109d081a200141e0006a200241386a41b401109d0821002009290038210b200241386a41086a220e200941b0016a280200360200200220092902a801370338200141086a200941c0006a20092f0106220541796a2203410374109d0821152000200941b4016a2003410c6c109d082116200141e4016a20094180026a2005417a6a220a410274109d082117200941063b0106200120033b01060240200a450d00410021032017210003402000280200220520033b010420052001360200200041046a2100200a200341016a2203470d000b0b2010200e280200220336020020022002290338220c3703d002200e20033602002002200c370338201341ffff037122004107490d0120152007417a6a22004103746a2015200741796a22034103746a220520012f010620036b410374109e081a200520043700002007410c6c20166a220541b87f6a200541ac7f6a220520012f0106220a20036b410c6c109e081a200541086a200f280200360200200520022903283702002001200a41016a22053b01062007410274221320176a416c6a201720004102746a220a200541ffff0371220720006b410274109e081a200a200836020020072000490d02200120136a41cc016a2100034020002802002205200341016a22033b010420052001360200200041046a210020032007490d000c030b0b200941086a2205200741016a22004103746a200520074103746a2205200320076b2201410374109e081a2005200437000020092007410c6c6a220541ec006a200541e0006a220a2001410c6c109e081a200541e8006a200241286a41086a280200360200200a20022903283702002009200341016a22033b01062007410274200941e4016a22056a41086a200520004102746a2205200341ffff0371220120006b410274109e081a20052008360200201341ffff037120014f0d0520092000417f6a22034102746a41e8016a2100034020002802002205200341016a22033b010420052009360200200041046a210020032001490d000c060b0b200941086a2203200741016a220a4103746a200320074103746a220320092f0106220520076b2213410374109e081a20032004370000200941e0006a2007410c6c6a2203410c6a20032013410c6c109e081a200341086a200f280200360200200320022903283702002009200541016a22033b010620074102742217200941e4016a22056a41086a2005200a4102746a2213200341ffff03712205200a6b410274109e081a20132008360200200020054f0d00200920176a41e8016a2103034020032802002200200741016a22073b010420002009360200200341046a210320052007470d000b0b200241106a41086a200e280200220336020020112003360200200220022903382204370310200220043703000240200928020022030d0020012108200b21040c030b20092f0104211320032109200b21042001210820122100201221030c000b0b41d684cc00413541c086cc00103f000b200241d0026a410272410041da00109f081a200241f0016a200241d0026a41dc00109d081a200241386a410041b401109f081a41940210332203450d0120034100360200200341046a200241f0016a41dc00109d081a200341e0006a200241386a41b401109d0821052003200628020022003602e4012006200336020020062006280204220141016a360204200041003b010420002003360200200241386a41086a200241086a2802003602002002200229030037033820012012470d0220032f01062200410a4b0d0320052000410c6c6a22052002290338370200200320004103746a41086a2004370000200541086a200241386a41086a2802003602002003200041016a22004102746a41e4016a2008360200200320003b0106200820003b0104200820033602000b200241b0036a24000f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000bfa20021b7f017e23004180076b22042400200441e0006a41186a200241186a290000370300200441e0006a41106a200241106a290000370300200441e0006a41086a200241086a290000370300200420022900003703600240024002400240024020012802002205450d00200128020421060c010b41002106200441e8026a410041e002109f081a200441c0016a4100418401109f081a41ec0310332205450d01200541003b010620054100360200200541086a200441e8026a41e002109d081a200541e8026a200441c0016a418401109d081a20014100360204200120053602000b200420013602c801200420053602c401200420063602c00102400240024002400340200541086a2107200541066a210820052f0106220941057421024100210a024002400240024003402002450d010240200441e0006a2007412010a008220b0d00410021022006210c0c030b200241606a2102200a41016a210a200741206a2107200b417f4a0d000b200a417f6a21090b20060d01410121024100210c2009210a0b200441e8026a41106a200a360200200441e8026a410c6a2001360200200441e8026a41086a22072005360200200420013602c801200420053602c401200420063602c0012004200c3602ec02200420023602e80202402002450d00200441086a41186a2207200441e0006a41186a2202290300370300200441086a41106a220b200441e0006a41106a2206290300370300200441086a41086a2209200441e0006a41086a220d290300370300200420042903603703082001200128020841016a360208200220072903003703002006200b290300370300200d200929030037030020042004290308370360200441d8026a41086a200341086a280200360200200420032902003703d80220082f0100220b410b490d02200441e8026a410041e002109f081a200441c0016a4100418401109f081a41ec0310332203450d08200341003b010620034100360200200341086a200441e8026a41e002109d082107200341e8026a200441c0016a418401109d08210b200441e8026a41086a2206200541b8036a2802003602002004200541db016a2900003703a8012004200541e0016a2900003700ad01200420052902b0033703e8022004200541c8016a2f00003b01bc012004200541ca016a2d00003a00be01200541cb016a280000210e200541cf016a280000210f200541d3016a2800002110200541d7016a28000021112007200541e8016a20052f010641796a2202410574109d082107200b200541bc036a2002410c6c109d08210b200541063b0106200320023b0106200420042f01bc013b01a401200420042d00be013a00a601200420042903a8013703c001200420042900ad013700c501200441286a41086a2006280200360200200420042903e80237032802400240200a4107490d00200a41057420076a41c07e6a2007200a41796a22064105746a2207200241ffff037120066b410574109e081a200741186a200441e0006a41186a290300370000200741106a200441e0006a41106a290300370000200741086a200441e0006a41086a29030037000020072004290360370000200a410c6c200b6a220241b87f6a200241ac7f6a2202200341066a22082f010020066b410c6c109e081a200241086a200441d8026a41086a280200360200200220042903d8023702000c010b200541086a200a4105746a220241206a200220082f0100200a6b410574109e081a200241186a200441e0006a41186a290300370000200241106a200441e0006a41106a290300370000200241086a200441e0006a41086a29030037000020022004290360370000200541e8026a200a410c6c6a2202410c6a200220082f0100200a6b410c6c109e081a200241086a200441d8026a41086a280200360200200220042903d8023702000b200820082f010041016a3b010020044198016a41026a220220042d00a6013a0000200441c8026a41086a2212200441286a41086a280200360200200420042f01a4013b019801200420042903c001370350200420042900c501370055200420042903283703c8022004413c6a41026a221320022d00003a0000200420042f0198013b013c2004200429005537002d20042004290350370328200441c0006a41086a22142012280200360200200420042903c8023703400240200528020022060d00410021020c060b20052f01042108200441e8026a410272211541002102034020044194016a41026a221620132d00003a0000200420042f013c3b019401200420042903283703602004200429002d37006520044198016a41086a221720142802003602002004200429034037039801200c2002470d05200841ffff0371210502400240024020062f01062202410b490d0020154100419604109f081a419c041033220b450d0c200b4100360200200b41046a200441e8026a419804109d081a2004200641c8016a2f00003b01bc012004200641ca016a2d00003a00be012004200641db016a2900003703a8012004200641e0016a2900003700ad01200641cb016a2800002118200641cf016a2800002119200641d3016a280000211a200641d7016a280000211b200441e8026a41086a221c200641b8036a280200360200200420062902b0033703e802200b41086a200641e8016a20062f0106220741796a2202410574109d08211d200b41e8026a200641bc036a2002410c6c109d08211e200b41ec036a20064188046a2007417a6a2209410274109d08210d200641063b0106200b20023b010602402009450d0041002102200d210703402007280200220a20023b0104200a200b360200200741046a21072009200241016a2202470d000b0b200441d8026a41086a2202201c280200360200200420042d00be0122073a00a601200420042f01bc01220a3b01a401200420042903a8013703c001200420042900ad013700c501200420042903e8023703d802200441c4026a41026a220920073a00002004200a3b01c402200420042903c0013703e802200420042900c5013700ed0220122002280200360200200420042903d8023703c802200841ffff037122074107490d01201d2005417a6a220a4105746a201d200541796a22024105746a2207200b2f010620026b410574109e081a200741186a20042900653700002007201136000f2007201036000b2007200f3600072007200e360003200741026a20162d00003a0000200720042f0194013b0000200720042903603700132005410c6c201e6a220741b87f6a200741ac7f6a2207200b2f0106220820026b410c6c109e081a200741086a20172802003602002007200429039801370200200b200841016a22073b01062005410274220e200d6a416c6a200d200a4102746a2208200741ffff03712205200a6b410274109e081a200820033602002005200a490d02200b200e6a41d4036a210703402007280200220a200241016a22023b0104200a200b360200200741046a210720022005490d000c030b0b200641086a2207200541016a220a4105746a200720054105746a2207200220056b410574109e081a200741186a20042900653700002007201136000f2007201036000b2007200f3600072007200e360003200741026a20044194016a41026a2d00003a0000200720042f0194013b00002007200429036037001320062005410c6c6a220241f4026a200241e8026a220720062f0106220b20056b410c6c109e081a200241f0026a20044198016a41086a28020036020020072004290398013702002006200b41016a22023b01062005410274200641ec036a22076a41086a2007200a4102746a2207200241ffff0371220b200a6b410274109e081a20072003360200200841ffff0371200b4f0d092006200a417f6a22024102746a41f0036a210703402007280200220a200241016a22023b0104200a2006360200200741046a21072002200b490d000c0a0b0b200641086a2202200541016a22084105746a200220054105746a220220062f010620056b410574109e081a200241186a20042900653700002002201136000f2002201036000b2002200f3600072002200e360003200241026a20162d00003a0000200220042f0194013b000020022004290360370013200641e8026a2005410c6c6a2202410c6a200220062f0106220a20056b410c6c109e081a200241086a201728020036020020022004290398013702002006200a41016a22023b01062005410274220e200641ec036a220a6a41086a200a20084102746a220d200241ffff0371220a20086b410274109e081a200d20033602002007200a4f0d002006200e6a41f0036a2102034020022802002207200541016a22053b010420072006360200200241046a2102200a2005470d000b0b200c41016a210220044190016a41026a220720092d00003a000020044180016a41086a220a2012280200360200200420042f01c40222053b019001200420042903e802370350200420042900ed02370055200420042903c80237038001201320072d00003a0000200420053b013c2004200429005537002d200420042903503703282014200a28020036020020042004290380013703400240200628020022070d002018210e201b2111201a21102019210f200b21030c070b20062f010421082018210e201b2111201a21102019210f20072106200b21032002210c0c000b0b20072005200a410c6c6a220241f0026a220a2802003602002004200241e8026a22022902003703e80220022003290200370200200a200341086a280200360200200441c0016a41086a20072802002202360200200420042903e802221f3703c0012000410c6a20023602002000201f370204200041013602000c060b2006417f6a2106200520094102746a41ec036a28020021050c010b0b2005200a4105746a220741286a200741086a2206200b200a6b410574109e081a200741206a2002290300370000200741186a200441e0006a41106a290300370000200741106a200441e0006a41086a290300370000200620042903603700002005200a410c6c6a220241f4026a200241e8026a220720052f0106200a6b410c6c109e081a200241f0026a200441d8026a41086a280200360200200720042903d802370200200520052f010641016a3b01060c020b41d684cc00413541c086cc00103f000b200441e8026a4102724100419604109f081a419c0410332207450d0220074100360200200741046a200441e8026a419804109d081a20072001280200220a3602ec032001200736020020012001280204220b41016a360204200a41003b0104200a2007360200200441e0006a41026a2004413c6a41026a2d00003a0000200420042f013c3b0160200420042903283703e8022004200429002d3700ed02200441c0016a41086a200441c0006a41086a280200360200200420042903403703c001200b2002470d0320072f0106220a410a4b0d042007200a4105746a2202410a6a200441e0006a41026a2d00003a0000200241086a20042f01603b0000200241176a2011360000200241136a20103600002002410f6a200f3600002002410b6a200e3600002002411b6a20042903e802370000200241206a20042900ed023700002007200a410c6c6a220241f0026a200441c0016a41086a280200360200200241e8026a20042903c0013702002007200a41016a22024102746a41ec036a2003360200200720023b0106200320023b0104200320073602000b200041003602000b20044180076a24000f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000bf70c01087f230041c0046b22032400200341206a41186a200141186a290000370300200341206a41106a200141106a290000370300200341206a41086a200141086a290000370300200320012900003703200240024002400240024020002802002204450d00200028020421050c010b4100210520034180016a410041e002109f081a200341f8006a22014100360200200341f0006a22064200370300200341d0006a41186a4200370300200341d0006a41106a4200370300200341d0006a41086a42003703002003420037035041940310332204450d01200441003b010620044100360200200441086a20034180016a41e002109d081a20044190036a200128020036020020044188036a200629030037020020044180036a200341e8006a290300370200200441f8026a200341e0006a290300370200200441f0026a200341d0006a41086a290300370200200420032903503702e80220004100360204200020043602000b2003200036025820032004360254200320053602500240034020042f01062207410574210841002101410021060240024002400240034020082001460d010240200341206a200420016a41086a412010a00822090d0041002101200521090c030b200141206a2101200641016a21062009417f4a0d000b2006417f6a21070b20050d014101210141002109200721060b20034180016a41106a20063602002003418c016a200036020020034180016a41086a20043602002003200036025820032004360254200320053602502003200936028401200320013602800102402001450d00200341186a2201200341206a41186a2207290300370300200341106a2208200341206a41106a290300370300200341086a2205200341206a41086a290300370300200320032903203703002000200028020841016a3602082003200636024c200320003602482003200436024420032009360240200341d0006a41186a2001290300370300200341d0006a41106a2008290300370300200341d0006a41086a20052903003703002003200329030037035020034180016a200341c0006a200341d0006a200210fe0220032d0080014101470d04200341206a41086a220520034189016a290000370300200341206a41106a220020034191016a290000370300200720034199016a2900003703002003200329008101370320200341ac016a2802002106200341b8016a2802002108200341b4016a2802002109200341b0016a2802002104200341a8016a28020022012802002207450d0220012f01042102200341a4016a280200210a20034180016a410172210103402003200241ffff037136024c20032006360248200320073602442003200a41016a360240200341d0006a41186a200341206a41186a2206290300370300200341d0006a41106a2000290300370300200341d0006a41086a20052903003703002003200329032037035020034180016a200341c0006a200341d0006a20042009200810ff0220032d0080014101470d052005200141086a2900003703002000200141106a2900003703002006200141186a2900003703002003200129000037032020032802ac01210620032802b801210820032802b401210920032802b001210420032802a80122022802002207450d0320022f0104210220032802a401210a0c000b0b200420064102746a41e8026a20023602000c030b2005417f6a2105200420074102746a4194036a28020021040c010b0b20034180016a410272410041be03109f081a41c40310332201450d0120014100360200200141046a20034180016a41c003109d081a200120062802002205360294032006200136020020062006280204220041016a360204200541003b01042005200136020020034180016a41186a200341206a41186a29030037030020034180016a41106a200341206a41106a29030037030020034180016a41086a200341206a41086a290300370300200320032903203703800120002008470d0220012f01062206410a4b0d03200120064105746a220841206a20034180016a41186a290300370000200841186a20034180016a41106a290300370000200841106a20034180016a41086a290300370000200841086a200329038001370000200120064102746a41e8026a20043602002001200641016a22064102746a4194036a2009360200200120063b0106200920063b0104200920013602000b200341c0046a24000f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b920c02057f027e230041d0006b220224000240024002400240024002402001280200417f6a220341034b0d0020030e0401020304010b41cfa2cc00412841c086cc00103f000b410121030240024020012d00044101470d00200141086a28020021040c010b2002410a6a200141046a220341036a2d00003a0000200241306a41086a200141146a290200370300200241c0006a2001411c6a290200370300200241c8006a200141246a2d00003a0000200220032f00013b010820022001410c6a290200370330200141086a2802002104410021030b200020033a0004200020022f01083b000520004101360200200041286a2001290328370300200041086a20043602002000410c6a2002290330370200200041306a200141306a290300370300200041076a2002410a6a2d00003a0000200041146a200241306a41086a2903003702002000411c6a200241c0006a290300370200200041246a200241c8006a2802003602000c030b410121030240024020012d00044101470d00200141086a28020021040c010b2002410a6a200141046a220341036a2d00003a0000200241306a41086a200141146a290200370300200241c0006a2001411c6a290200370300200241c8006a200141246a2d00003a0000200220032f00013b010820022001410c6a290200370330200141086a2802002104410021030b200020033a0004200020022f01083b0005200041286a2001290328370300200041386a2001290338370300200041086a20043602002000410c6a2002290330370200200041306a200141306a290300370300200041c0006a200141c0006a290300370300200041076a200241086a41026a2d00003a0000200041146a200241306a41086a2903003702002000411c6a200241c0006a290300370200200041246a200241c8006a280200360200200041023602000c020b200141286a2103410121040240024020012d00044101470d00200141086a28020021050c010b2002412a6a200141046a220441036a2d00003a0000200241086a41086a200141146a290200370300200241186a2001411c6a290200370300200241206a200141246a2d00003a0000200220042f00013b012820022001410c6a290200370308200141086a2802002105410021040b410121060240024020032d00004101470d002001412c6a28020021030c010b2002412e6a200341036a2d00003a0000200241386a200141386a290200370300200241c0006a200141c0006a290200370300200241c8006a200141c8006a2d00003a0000200220032f00013b012c2002200141306a2902003703302001412c6a2802002103410021060b200020043a0004200020022f01283b0005200020022f012c3b0029200041086a20053602002000410c6a2002290308370200200041286a20063a0000200041076a200241286a41026a2d00003a0000200041146a200241086a41086a2903003702002000411c6a200241086a41106a290300370200200041246a200241086a41186a2802003602002000412b6a2002412c6a41026a2d00003a0000200141d8006a2903002107200129035021082000412c6a2003360200200041d0006a2008370300200041d8006a200737030020004103360200200041306a2002290330370200200041386a200241306a41086a290300370200200041c0006a200241306a41106a290300370200200041c8006a200241306a41186a2802003602000c010b410121030240024020012d00044101470d00200141086a28020021040c010b2002410a6a200141046a220341036a2d00003a0000200241306a41086a200141146a290200370300200241c0006a2001411c6a290200370300200241c8006a200141246a2d00003a0000200220032f00013b010820022001410c6a290200370330200141086a2802002104410021030b200020033a0004200020022f01083b000520004104360200200041286a2001290328370300200041086a20043602002000410c6a2002290330370200200041306a200141306a290300370300200041076a2002410a6a2d00003a0000200041146a200241306a41086a2903003702002000411c6a200241c0006a290300370200200041246a200241c8006a2802003602000b200241d0006a24000bbe0702097f017e230041306b2202240002400240024002400240024002400240024002402001280200417f6a220341054b0d0020030e06010203040506010b41cfa2cc00412841c086cc00103f000b2001410c6a280200220441ffffff3f712004470d0620044105742205417f4c0d06200128020421060240024020050d00410121070c010b200510332207450d080b41002103200241003602182002200736021020022005410576360214200241106a41002004108a012002280218210802402004450d0020044105742109200228021020084105746a210a0340200a20036a2205200620036a2207290000370000200541186a200741186a290000370000200541106a200741106a290000370000200541086a200741086a2900003700002009200341206a2203470d000b200441057441606a41057620086a41016a21080b200241086a200836020020022002290310220b3703002000200b3702042000410c6a200836020020004101360200200041186a200141186a290300370300200041106a20012903103703000c050b200041023602000c040b410121030240024020012d00044101470d00200141086a28020021050c010b200241026a200141046a220341036a2d00003a0000200241106a41086a200141146a290200370300200241206a2001411c6a290200370300200241286a200141246a2d00003a0000200220032f00013b010020022001410c6a290200370310200141086a2802002105410021030b200020033a0004200020022f01003b000520004103360200200041086a20053602002000410c6a2002290310370200200041076a200241026a2d00003a0000200041146a200241106a41086a2903003702002000411c6a200241206a290300370200200041246a200241286a2802003602000c030b200041043602000c020b200041053602000c010b410121030240024020012d00044101470d00200141086a28020021050c010b200241026a200141046a220341036a2d00003a0000200241106a41086a200141146a290200370300200241206a2001411c6a290200370300200241286a200141246a2d00003a0000200220032f00013b010020022001410c6a290200370310200141086a2802002105410021030b200020033a0004200020022f01003b000520004106360200200041086a20053602002000410c6a2002290310370200200041076a200241026a2d00003a0000200041146a200241106a41086a2903003702002000411c6a200241206a290300370200200041246a200241286a2802003602000b200241306a24000f0b1044000b1045000bf64006017f027e117f0e7e027f017e230041d0066b220324000240024002400240024002400240024002400240024020012802000e050001020304000b200341ac056a41013602002003420137029c05200341e8d4ca00360298052003410436029c042003419cd5ca0036029804200320034198046a3602a80520034198056a41b0b4cc00104c000b200141306a2903002104200141286a2903002105200341b8046a200141246a28020036020020034198046a41186a2001411c6a29020037030020034198046a41106a200141146a29020037030020034198046a41086a2001410c6a2902003703002003200129020437039804410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703f802200320013a00f702200320063a00f602200320073b01f402200320083a00f302200320093a00f2022003200a3b01f0022003200b3a00ef022003200c3a00ee022003200d3b01ec022003200e3a00eb022003200f3a00ea02200320103b01e802200320113a00e702200320123a00e602200320133b01e402200320143a00e302200320153a00e202200320163b01e00220034198056a41206a20034198046a41206a28020036020020034198056a41186a20034198046a41186a29030037030020034198056a41106a20034198046a41106a29030037030020034198056a41086a20034198046a41086a29030037030020032003290398043703980520034198036a20034198056a108b02200341a0066a41086a2201200341a1036a290000370300200341a0066a41106a2202200341a9036a290000370300200341a0066a41186a2206200341b1036a29000037030020032003290099033703a006024020032d0098034101460d00200341d8016a41186a2006290300370300200341d8016a41106a2002290300370300200341d8016a41086a2001290300370300200320032903a0063703d80120034198056a200341e0026a200341d8016a20052004410110e60220032d00980522014104460d0a20032f00990520032d009b05411074722102200329029c0521040c020b410121010b0b200042003703082000411c6a2004370200200041186a20024108742001723602000c050b200141c0006a2903002117200141386a2903002118200141306a2903002104200141286a290300210520034180016a41206a2206200141246a28020036020020034180016a41186a22072001411c6a29020037030020034180016a41106a2208200141146a29020037030020034180016a41086a22092001410c6a29020037030020032001290204370380014102210120022d000120022d0000410047720d0320034198056a41206a200628020036020020034198056a41186a200729030037030020034198056a41106a200829030037030020034198056a41086a200929030037030020032003290380013703980520034198046a20034198056a108b02200341a0066a41086a200341a1046a290000370300200341a0066a41106a200341a9046a290000370300200341a0066a41186a200341b1046a29000037030020032003290099043703a0064101210120032d0098044101460d03200341a8016a41186a200341a0066a41186a290300370300200341a8016a41106a200341a0066a41106a290300370300200341a8016a41086a200341a0066a41086a290300370300200320032903a0063703a801200341c8016a200341a8016a108e02200341d8016a20032802c801220820032802d0012209108f0220032903d8012119200342003703d80142002004201820057c221a428080e983b1de16544100201720047c201a201854ad7c501b22011b21044200200520011b2105200341a0026a280200210a20032d00a402210b0240024020194201510d00200341a8026a41306a4200370300200341a8026a41286a4200370300200341a8026a41206a4200370300200341a8026a41186a4200370300200341a8026a41106a4200370300200341a8026a41086a4200370300200342003703a8024200211b4200211c4200211d4200211a4200211e0c010b20034190026a290300211f200341d8016a41306a2903002120200341d8016a41206a290300211c200341d8016a41186a290300211b20034198026a290300211e20032903e801211a20032903e001211d200341a8026a41206a200341d8016a41286a290300370300200341a8026a41286a2020370300200341a8026a41306a201f370300200341a8026a41106a201b3703002003201c3703c0022003201d3703a8022003201a3703b0020b4200201720011b21174200201820011b2118201d201b7c2220201d5421062005201d562004201a562004201a5122011b0d022005201d542004201a5420011b450d052003201d20057d3703e0022003201a20047d201d200554ad7d3703e8022003200341e0026a36029c0620034198056a41186a220d420037030020034198056a41106a2207420037030020034198056a41086a22024200370300200342003703980541b6fdc600ad4280808080800184221f1001220c290000211d200341c0066a41086a2201200c41086a2900003703002003201d3703c006200c103520022001290300370300200320032903c0063703980541e489c200ad4280808080d0018422211001220c290000211d2001200c41086a2900003703002003201d3703c006200c1035200720032903c006221d370300200341a0066a41086a220e2002290300370300200341a0066a41106a220f201d370300200341a0066a41186a2210200129030037030020032003290398053703a006200341e8006a200341a0066a412010d701200341e8006a41106a2903002122200329037021232003280268210c20032903e802212420032903e002211d200d420037030020074200370300200242003703002003420037039805201f1001220d290000211f2001200d41086a2900003703002003201f3703c006200d103520022001290300370300200320032903c0063703980520211001220d290000211f2001200d41086a2900003703002003201f3703c006200d1035200720032903c006221f370300200e2002290300370300200f201f3703002010200129030037030020032003290398053703a0062003420020224200200c1b221f20247d20234200200c1b2221201d54ad7d22222021201d7d221d2021562022201f562022201f511b22011b3703a00520034200201d20011b37039805200341a0066aad428080808080048420034198056aad428080808080028410020c050b200141d8006a2903002104200141d0006a290300210520034198036a41206a2206200141246a28020036020020034198036a41186a22072001411c6a29020037030020034198036a41106a2208200141146a29020037030020034198036a41086a22092001410c6a290200370300200320012902043703980320034198046a41206a200141c8006a28020036020020034198046a41186a200141c0006a29020037030020034198046a41106a200141386a29020037030020034198046a41086a200141306a2902003703002003200141286a29020037039804410221010240024020022d000120022d0000410047720d0020034198056a41206a200628020036020020034198056a41186a200729030037030020034198056a41106a200829030037030020034198056a41086a2009290300370300200320032903980337039805200341d8016a20034198056a108b024101210120032d00d8014101460d00200341d8016a41086a2d00002101200341e1016a22022f00002106200341e3016a2d00002107200341d8016a410c6a2d00002108200341e5016a2f00002109200341e7016a2d0000210a200341d8016a41106a2d0000210b200341e9016a220c2f0000210d200341eb016a2d0000210e200341d8016a41146a2d0000210f200341ed016a2f00002110200341ef016a2d00002111200341d8016a41186a2d0000211220032f00d901211320032d00db01211420032d00dc01211520032f00dd01211620032d00df0121252003200341f1016a22262900003703c002200320123a00bf02200320113a00be02200320103b01bc022003200f3a00bb022003200e3a00ba022003200d3b01b8022003200b3a00b7022003200a3a00b602200320093b01b402200320083a00b302200320073a00b202200320063b01b002200320013a00af02200320253a00ae02200320163b01ac02200320153a00ab02200320143a00aa02200320133b01a80220034198056a41206a20034198046a41206a28020036020020034198056a41186a20034198046a41186a29030037030020034198056a41106a20034198046a41106a29030037030020034198056a41086a20034198046a41086a290300370300200320032903980437039805200341d8016a20034198056a108b02200341a0066a41086a22012002290000370300200341a0066a41106a2202200c290000370300200341a0066a41186a22062026290000370300200320032900d9013703a006024020032d00d8014101460d00200341e0026a41186a2006290300370300200341e0026a41106a2002290300370300200341e0026a41086a2001290300370300200320032903a0063703e00220034198056a200341a8026a200341e0026a20052004410110e60220032d00980522014104460d0820032f00990520032d009b05411074722102200329029c0521040c020b410121010b0b200042003703082000411c6a2004370200200041186a20024108742001723602000c030b200141306a2903002104200141286a2903002105200341b8046a200141246a28020036020020034198046a41186a2001411c6a29020037030020034198046a41106a200141146a29020037030020034198046a41086a2001410c6a2902003703002003200129020437039804410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703f802200320013a00f702200320063a00f602200320073b01f402200320083a00f302200320093a00f2022003200a3b01f0022003200b3a00ef022003200c3a00ee022003200d3b01ec022003200e3a00eb022003200f3a00ea02200320103b01e802200320113a00e702200320123a00e602200320133b01e402200320143a00e302200320153a00e202200320163b01e00220034198056a41206a20034198046a41206a28020036020020034198056a41186a20034198046a41186a29030037030020034198056a41106a20034198046a41106a29030037030020034198056a41086a20034198046a41086a29030037030020032003290398043703980520034198036a20034198056a108b02200341a0066a41086a2201200341a1036a290000370300200341a0066a41106a2202200341a9036a290000370300200341a0066a41186a2206200341b1036a29000037030020032003290099033703a006024020032d0098034101460d00200341d8016a41186a2006290300370300200341d8016a41106a2002290300370300200341d8016a41086a2001290300370300200320032903a0063703d80120034198056a200341e0026a200341d8016a20052004410010e60220032d00980522014104460d0720032f00990520032d009b05411074722102200329029c0521040c020b410121010b0b200042003703082000411c6a2004370200200041186a20024108742001723602000c020b20032005201d7d3703e00220032004201a7d2005201d54ad7d3703e8022003200341e0026a36029c0620034198056a41186a220d420037030020034198056a41106a2207420037030020034198056a41086a22024200370300200342003703980541b6fdc600ad4280808080800184221d1001220c290000211f200341c0066a41086a2201200c41086a2900003703002003201f3703c006200c103520022001290300370300200320032903c0063703980541e489c200ad4280808080d00184221f1001220c29000021212001200c41086a290000370300200320213703c006200c1035200720032903c0062221370300200341a0066a41086a220e2002290300370300200341a0066a41106a220f2021370300200341a0066a41186a2210200129030037030020032003290398053703a006200341d0006a200341a0066a412010d701200341d0006a41106a2903002121200329035821222003280250210c20032903e802212320032903e0022124200d420037030020074200370300200242003703002003420037039805201d1001220d290000211d2001200d41086a2900003703002003201d3703c006200d103520022001290300370300200320032903c00637039805201f1001220d290000211d2001200d41086a2900003703002003201d3703c006200d1035200720032903c006221d370300200e2002290300370300200f201d3703002010200129030037030020032003290398053703a0062003427f202320214200200c1b221d7c202420224200200c1b221f7c2221201f542201ad7c221f2001201f201d54201f201d511b22011b3703a0052003427f202120011b37039805200341a0066aad428080808080048420034198056aad428080808080028410020c020b20004200370308200041186a20013602000b420121040c020b201a201c7c211d2006ad211f200341a8026a41106a2101024002402018201b562017201c562017201c5122021b0d002018201b542017201c5420021b450d012003201b20187d3703e0022003201c20177d201b201854ad7d3703e8022003200341e0026a36029c0620034198056a41186a220e420037030020034198056a41106a220c420037030020034198056a41086a22074200370300200342003703980541b6fdc600ad4280808080800184221b1001220d290000211c200341c0066a41086a2202200d41086a2900003703002003201c3703c006200d103520072002290300370300200320032903c0063703980541e489c200ad4280808080d0018422211001220d290000211c2002200d41086a2900003703002003201c3703c006200d1035200c20032903c006221c370300200341a0066a41086a220f2007290300370300200341a0066a41106a2210201c370300200341a0066a41186a2211200229030037030020032003290398053703a006200341386a200341a0066a412010d701200341386a41106a2903002122200329034021232003280238210d20032903e802212420032903e002211c200e4200370300200c4200370300200742003703002003420037039805201b1001220e290000211b2002200e41086a2900003703002003201b3703c006200e103520072002290300370300200320032903c0063703980520211001220e290000211b2002200e41086a2900003703002003201b3703c006200e1035200c20032903c006221b370300200f20072903003703002010201b3703002011200229030037030020032003290398053703a0062003420020224200200d1b221b20247d20234200200d1b2221201c54ad7d22222021201c7d221c2021562022201b562022201b511b22021b3703a00520034200201c20021b37039805200341a0066aad428080808080048420034198056aad428080808080028410020c010b20032018201b7d3703e00220032017201c7d2018201b54ad7d3703e8022003200341e0026a36029c0620034198056a41186a220e420037030020034198056a41106a220c420037030020034198056a41086a22074200370300200342003703980541b6fdc600ad4280808080800184221c1001220d290000211b200341c0066a41086a2202200d41086a2900003703002003201b3703c006200d103520072002290300370300200320032903c0063703980541e489c200ad4280808080d00184221b1001220d29000021212002200d41086a290000370300200320213703c006200d1035200c20032903c0062221370300200341a0066a41086a220f2007290300370300200341a0066a41106a22102021370300200341a0066a41186a2211200229030037030020032003290398053703a006200341206a200341a0066a412010d701200341206a41106a2903002121200329032821222003280220210d20032903e802212320032903e0022124200e4200370300200c4200370300200742003703002003420037039805201c1001220e290000211c2002200e41086a2900003703002003201c3703c006200e103520072002290300370300200320032903c00637039805201b1001220e290000211c2002200e41086a2900003703002003201c3703c006200e1035200c20032903c006221c370300200f20072903003703002010201c3703002011200229030037030020032003290398053703a0062003427f202320214200200d1b221c7c202420224200200d1b221b7c2221201b542202ad7c221b2002201b201c54201b201c511b22021b3703a0052003427f202120021b37039805200341a0066aad428080808080048420034198056aad428080808080028410020b201d201f7c211d200320053703a802200320173703c002200320183703b802200320043703b002200341e0026a41186a200141086a290300221c370300200341e0026a41206a2202200141106a29030037030020034188036a2207200141186a29030037030020034190036a220c200141206a290300370300200320043703e802200320053703e00220032001290300221b3703f00202400240427f2005201b7c221b201b20055422012004201c7c2001ad7c221c200454201c2004511b22011b221b428080e983b1de16544100427f201c20011b221f501b0d00200341e0026a41106a290300211b200c290300211f200729030021212002290300212220032903e802212320032903e00221244201211c20032903f80221270c010b02400240201b201f8450450d004200211c0c010b4200211c20034198056a41186a220d420037030020034198056a41106a2207420037030020034198056a41086a22024200370300200342003703980541b6fdc600ad428080808080018422211001220c2900002122200341c0066a41086a2201200c41086a290000370300200320223703c006200c103520022001290300370300200320032903c0063703980541e489c200ad4280808080d0018422221001220c29000021232001200c41086a290000370300200320233703c006200c1035200720032903c0062223370300200341a0066a41086a220e2002290300370300200341a0066a41106a220f2023370300200341a0066a41186a2210200129030037030020032003290398053703a006200341086a200341a0066a412010d701200341086a41106a2903002123200329031021242003280208210c200d42003703002007420037030020024200370300200342003703980520211001220d29000021212001200d41086a290000370300200320213703c006200d103520022001290300370300200320032903c0063703980520221001220d29000021212001200d41086a290000370300200320213703c006200d1035200720032903c0062221370300200e2002290300370300200f20213703002010200129030037030020032003290398053703a0062003420020234200200c1b2221201f7d20244200200c1b2222201b54ad7d22232022201b7d2224202256202320215620232021511b22011b3703a00520034200202420011b37039805200341a0066aad428080808080048420034198056aad42808080808002841002200341d0056a201f370300200341c8056a201b370300200241013a0000200341a1056a20032903a801370000200341a9056a200341a8016a41086a290300370000200341b1056a200341a8016a41106a290300370000200341b9056a200341a8016a41186a290300370000200341033a00980541b0b4cc00410020034198056a10d4010b0b201d201a512101201d201a54210220034180026a202237030020034188026a2021370300200341e8016a202337030020034190026a201f370300200341f0016a201b370300200320273703f8012003201e37039802200320243703e0012003200b4100201942015122071b3a00a4022003200a410020071b3602a0022003201c4201512207ad3703d8010240024020070d002009ad4220862008ad8410070c010b2003200936029c052003200836029805200341e0016a20034198056a10e7020b2006200220011b2101024020032802cc01450d00200810350b427f201d20011b211a427f202020011b211d201c420152210102400240024020194201510d0020010d004103210220034198046a21010c010b20194201522001410173720d014104210220034198036a21010b200141086a20023a0000200141096a20032903a801370000200141003a0000200141116a200341a8016a41086a290300370000200141196a200341b8016a290300370000200141216a200341c0016a29030037000041b0b4cc004100200110d4010b0240201d201a8450450d00200341d0056a2004370300200341c8056a200537030020034198056a41086a41003a0000200341a1056a20032903a801370000200341a9056a200341a8016a41086a290300370000200341b1056a200341b8016a290300370000200341b9056a200341c0016a290300370000200341033a00980541b0b4cc00410020034198056a10d4010b200341e0056a2017370300200341d8056a2018370300200341d0056a2004370300200341c8056a200537030020034198056a41086a41033a0000200341a1056a20032903a801370000200341a9056a200341a8016a41086a290300370000200341b1056a200341b8016a290300370000200341b9056a200341c0016a290300370000200341033a00980541b0b4cc00410020034198056a10d4010b42002104200042003703080b20002004370300200341d0066a24000b130020004108360204200041e0e4c2003602000b847c05057f027e107f057e037f230041e0036b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e0700010203040506000b200341d4026a4101360200200342013702c402200341e8d4ca003602c0022003410436028c022003419cd5ca0036028802200320034188026a3602d002200341c0026a41b0b4cc00104c000b200141086a280200210420012802042105410221064100210720022d00000d1920022d00014101470d19200141186a2903002108200141106a29030021092001410c6a2802002101200241196a2d00002106200241186a2d00002107200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211920032002411a6a2901003703b801200320063a00b701200320073a00b6012003200a3b01b4012003200b3a00b3012003200c3a00b2012003200d3b01b0012003200e3a00af012003200f3a00ae01200320103b01ac01200320113a00ab01200320123a00aa01200320133b01a801200320143a00a701200320153a00a601200320163b01a401200320173a00a301200320183a00a201200320193b01a00141a0e4cb00ad428080808080028410012202290000211a2002290008211b2002103541e1b8c800ad4280808080a0018410012202290000211c2002290008211d200210352003201d3701d8022003201c3701d0022003201b3701c8022003201a3701c002200341e8016a200341c0026aad4280808080800484221a100510c201024002400240024020032802e8012202450d0020032802ec0121072003200341f0016a28020036028c022003200236028802200341206a20034188026a10c4012003280220450d01410021060c020b2003420037028c02200341013602880220034188026a108a0321060c020b200328022421060b2007450d00200210350b41a0e4cb00ad428080808080028410012202290000211b2002290008211c200210354189eaca00ad4280808080f0008410012202290000211d2002290008211e200210352003201e3701d8022003201d3701d0022003201c3701c8022003201b3701c002200341e8016a201a100510c201024002400240024020032802e8012202450d0020032802ec01210a2003200341f0016a28020036028c022003200236028802200341186a20034188026a10c4012003280218450d01410021070c020b2003420037028c02200341083602880220034188026a108b0321070c020b200328021c21070b200a450d00200210350b41a0e4cb00ad428080808080028410012202290000211b2002290008211c2002103541c699c200ad428080808090018410012202290000211d2002290008211e200210352003201e3701d8022003201d3701d0022003201c3701c8022003201b3701c002200341e8016a201a100510c201024002400240024020032802e8012202450d0020032802ec01210b2003200341f0016a28020036028c022003200236028802200341106a20034188026a10c4012003280210450d014100210a0c020b2003420037028c02200341083602880220034188026a108b03210a0c020b2003280214210a0b200b450d00200210350b410c21020240200720066a200a6a22060d00418790c2002101410021070c190b0240200120064d0d0041f48fc20021014180800821070c190b0240200141104d0d0041e08fc2002101411421024180800c21070c190b024020010d00418090c2002101410721024180800421070c190b02402009428180e983b1de165441002008501b450d0041d68fc2002101410a21024180801021070c190b200341c0026a200341a0016a10e502200341086a20032802c002220620032802c80241b0b4cc0041004100108a0220032802082102024020032802c402450d00200610350b024020024101460d00200342003703f0012003428080e983b1de163703e8012003200341a0016a3602d0032003200341a0016a3602c8012003200341c8016a3602c8022003200341d0036a3602c4022003200341e8016a3602c00220034188026a200341a0016a200341c0026a108c0302402003280288024101470d0020032d008c024104460d0141c78fc2002101410f21024180801421070c1a0b20034188026a41086a2903004201520d0020034188026a41106a290300211a20032802c8012102200341f8026a20034188026a41186a290300370300200341f0026a201a370300200341c0026a41086a41003a0000200341c9026a2002290000370000200341d1026a200241086a290000370000200341d9026a200241106a290000370000200341e1026a200241186a290000370000200341033a00c00241b0b4cc004100200341c0026a10d4010b20034188026a200341a0016a108e02200341c0026a2003280288022207200328029002108f02200341d0026a290300420020032903c00242015122021b211a20032903c802420020021b211b200341e0026a290300420020021b211c200341d8026a2206290300420020021b211d0240200328028c02450d00200710350b200342f0d0c9abc6add9b1f4003703d003200341d0036a200341a0016a427f201b201d7c221d201d201b542202201a201c7c2002ad7c221b201a54201b201a511b22021b221a2009201a200954427f201b20021b221a200854201a2008511b22021b221b201a200820021b221a411e10900220062001360200200341d4026a20043602002003201a3703c8022003201b3703c002200320053602d00220034188026a200341a0016a10e502200328028802210220032003280290023602ec01200320023602e801200341c0026a200341e8016a108d030240200328028c02450d00200210350b200441ffffff3f71450d17200510350c170b41829a182101024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002104200241146a2d00002105200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703b801200320013a00b701200320063a00b601200320073b01b401200320043a00b301200320053a00b2012003200a3b01b0012003200b3a00af012003200c3a00ae012003200d3b01ac012003200e3a00ab012003200f3a00aa01200320103b01a801200320113a00a701200320123a00a601200320133b01a401200320143a00a301200320153a00a201200320163b01a001200341c0026a200341a0016a10e502200341286a20032802c002220120032802c80241b0b4cc0041004100108a0220032802282102024020032802c402450d00200110350b41839a18210120024101470d00200341c0026a200341a0016a10e50220033502c80242208620032802c0022202ad841007024020032802c402450d00200210350b200342f0d0c9abc6add9b1f4003703d00320034188026a200341a0016a10eb022003280288022113024020032802900222070d00410021070c170b200341c0036a210a4100210120132102410021060340024002400240200a2002460d00200241106a220529000020032903d003510d0020010d01410021010c020b200141016a21010c010b200620016b220420074f0d07200341c0026a41186a220b200220014105746b220441186a220c290300370300200341c0026a41106a220d200441106a220e290300370300200341c0026a41086a220f200441086a2210290300370300200320042903003703c002200241086a2211290300211a2005290300211b200241186a2212290300211c20042002290300370300200c201c370300200e201b3703002010201a3703002012200b2903003703002005200d2903003703002011200f290300370300200220032903c0023703000b200241206a21022007200641016a2206460d160c000b0b20004200370308200041206a410b3602002000411c6a41bc8fc200360200200041186a20013602004201211a0c1a0b200341c0016a200141246a280200360200200341a0016a41186a2001411c6a290200370300200341a0016a41106a200141146a290200370300200341a0016a41086a2001410c6a290200370300200320012902043703a0012002411a6a290100211a200241196a2d00002106200241186a2d00002107200241166a2f01002104200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d0000211741022101200241026a2f0100211841012105024020022d00000d0020022d000141014721050b2003201a3701d802200320063a00d702200320073a00d602200320043b01d4022003200a3a00d3022003200b3a00d2022003200c3b01d0022003200d3a00cf022003200e3a00ce022003200f3b01cc02200320103a00cb02200320113a00ca02200320123b01c802200320133a00c702200320143a00c602200320153b01c402200320163a00c302200320173a00c202200320183b01c0024100210a4100210641002102024020050d00200341c8016a41186a200341c0026a41186a2202290100370300200341c8016a41106a200341c0026a41106a2201290100370300200341c8016a41086a200341c0026a41086a2206290100370300200320032901c0023703c801200341c0026a41206a200341a0016a41206a2802003602002002200341a0016a41186a2903003703002001200341a0016a41106a2903003703002006200341a0016a41086a290300370300200320032903a0013703c00220034188026a200341c0026a108b0241012101410021064100210220032d0088024101460d0020034188026a41086a2d0000210220034191026a2f0000210120034193026a2d0000210620034194026a2d0000210720034195026a2f0000210420034197026a2d0000210520034188026a41106a2d0000210b20034199026a2f0000210c2003419b026a2d0000210d2003419c026a2d0000210e2003419d026a2f0000210f2003419f026a2d0000211020034188026a41186a2d0000211120032f008902211220032d008b02211320032d008c02211420032f008d02211520032d008f0221162003200341a1026a29000037038002200320113a00ff01200320103a00fe012003200f3b01fc012003200e3a00fb012003200d3a00fa012003200c3b01f8012003200b3a00f701200320053a00f601200320043b01f401200320073a00f301200320063a00f201200320013b01f001200320023a00ef01200320163a00ee01200320153b01ec01200320143a00eb01200320133a00ea01200320123b01e8014103210141801a21020240200341c8016a200341e8016a412010a0080d0041b28fc2002104410a21074180801c21060c010b200341c0026a200341c8016a10e502200341e8006a20032802c002220720032802c80241b0b4cc0041004100108a0220032802682106024020032802c402450d00200710350b024020064101460d0041bc8fc2002104410b21074180801821060c010b200341c0026a200341e8016a10e502200341e0006a20032802c002220120032802c80241b0b4cc0041004100108a0220032802602102024020032802c402450d00200110350b02400240024002400240024020024101470d0020034188026a200341e8016a10e502200341c0026a200328028802220120032802900210cc0220032902d402420020032802d00222021b211a2002410120021b210d0240200328028c02450d00200110350b200d201a422088a74105746a210e200341c0026a41106a2105200d210603402006200e460d020240200610e9020d00200641206a2110200341c0026a41186a220b420037030020054200370300200341c0026a41086a220a4200370300200342003703c00241a0e4cb00ad4280808080800284221c10012202290000211b200a200241086a2900003703002003201b3703c0022002103541c699c200ad428080808090018410012202290000211b200341d0036a41086a220c200241086a2900003703002003201b3703d00320021035200520032903d003370000200541086a2211200c29030037000020034188026a41086a2212200a29030037030020034188026a41106a2213200529030037030020034188026a41186a2214200b290300370300200320032903c00237038802200341c0026a20034188026a10a20220032902c402420020032802c00222021b221b422088a741306c2101410021072002410820021b220f2102024003402001450d01024020062002460d0020022006412010a0082104200741016a2107200141506a2101200241306a210220040d010b0b201ba72202450d01200241306c450d01200f10350c010b0240201ba72202450d00200241306c450d00200f10350b200b420037030020054200370300200a4200370300200342003703c002201c10012202290000211b200a200241086a2900003703002003201b3703c0022002103541e1b8c800ad4280808080a0018410012202290000211b200c200241086a2900003703002003201b3703d00320021035200520032903d0033700002011200c2903003700002012200a290300370300201320052903003703002014200b290300370300200320032903c00237038802200341c0026a20034188026a10fe0120032802c0022201410120011b210a4100210202400240024020032902c402420020011b221b422088a7220141014b0d0020010e020201020b03402001410176220720026a22042002200a20044105746a2006412010a0084101481b2102200120076b220141014b0d000b0b200a20024105746a2006412010a0084521020b0240201b42ffffff3f83500d00200a10350b201021062002450d010b0b201a42ffffff3f83500d00200d10350b200342003703d8032003428080e983b1de163703d0032003200341c8016a3602c00320034188026a200341c8016a200341d0036a200341c0036a10a802200341a8026a290300211b20032903a002211a02402003290388024201520d00200329039002211c200341f8026a20034188026a41106a290300370300200341f0026a201c370300200341c0026a41086a41003a0000200341c9026a20032903c801370000200341d1026a200341c8016a41086a290300370000200341d9026a200341c8016a41106a290300370000200341e1026a200341e0016a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b2003201a3703c0032003201b3703c803201a201b844200520d01200341c0026a41186a22044200370300200341c0026a41106a22064200370300200341c0026a41086a22014200370300200342003703c00241b6fdc600ad4280808080800184221a10012207290000211b200341d0036a41086a2202200741086a2900003703002003201b3703d0032007103520012002290300370300200320032903d0033703c00241e489c200ad4280808080d00184221b10012207290000211c2002200741086a2900003703002003201c3703d00320071035200620032903d003221c37030020034188026a41086a2205200129030037030020034188026a41106a220a201c37030020034188026a41186a220b2002290300370300200320032903c00237038802200341306a20034188026a412010d701200341306a41106a290300211c2003290338211d20032802302107200442003703002006420037030020014200370300200342003703c002201a10012204290000211a2002200441086a2900003703002003201a3703d0032004103520012002290300370300200320032903d0033703c002201b10012204290000211a2002200441086a2900003703002003201a3703d00320041035200620032903d003221a37030020052001290300370300200a201a370300200b2002290300370300200320032903c002370388022003201c420020071b3703c8022003201d420020071b3703c00220034188026aad4280808080800484200341c0026aad428080808080028410020c020b0240201a42ffffff3f83500d00200d10350b200341c0026a200341e8016a200341c8016a428080e983b1de164200410010ef0220032802c0024101460d03200341c0026a200341e8016a10e50220033502c80242208620032802c0022202ad841007024020032802c402450d00200210350b200342f0d0c9abc6add9b1f4003703d00320034188026a200341e8016a10eb02200328028802211320032802900222070d02410021070c140b2003201a3703c0032003201b3703c803200341c0026a41186a22044200370300200341c0026a41106a22064200370300200341c0026a41086a22014200370300200342003703c00241b6fdc600ad4280808080800184221c10012207290000211d200341d0036a41086a2202200741086a2900003703002003201d3703d0032007103520012002290300370300200320032903d0033703c00241e489c200ad4280808080d00184221d10012207290000211e2002200741086a2900003703002003201e3703d00320071035200620032903d003221e37030020034188026a41086a2205200129030037030020034188026a41106a220a201e37030020034188026a41186a220b2002290300370300200320032903c00237038802200341c8006a20034188026a412010d701200341c8006a41106a290300211e2003290350210820032802482107200442003703002006420037030020014200370300200342003703c002201c10012204290000211c2002200441086a2900003703002003201c3703d0032004103520012002290300370300200320032903d0033703c002201d10012204290000211c2002200441086a2900003703002003201c3703d00320041035200620032903d003221c37030020052001290300370300200a201c370300200b2002290300370300200320032903c0023703880220034200201e420020071b221c201b7d2008420020071b221b201a54ad7d221d201b201a7d221a201b56201d201c56201d201c511b22021b3703c80220034200201a20021b3703c00220034188026aad4280808080800484200341c0026aad428080808080028410020b200341c0026a200341c8016a10e50220033502c80242208620032802c0022202ad841007024020032802c402450d00200210350b200342f0d0c9abc6add9b1f4003703d00320034188026a200341c8016a10eb02410021142003280288022113410021022003280290022207450d14200341c0036a210a4100210120132102410021060340024002400240200a2002460d00200241106a220529000020032903d003510d0020010d01410021010c020b200141016a21010c010b200620016b220420074f0d09200341c0026a41186a220b200220014105746b220441186a220c290300370300200341c0026a41106a220d200441106a220e290300370300200341c0026a41086a220f200441086a2210290300370300200320042903003703c002200241086a2211290300211a2005290300211b200241186a2212290300211c20042002290300370300200c201c370300200e201b3703002010201a3703002012200b2903003703002005200d2903003703002011200f290300370300200220032903c0023703000b200241206a21022007200641016a2206460d140c000b0b200341c0036a210a4100210120132102410021060340024002400240200a2002460d00200241106a220529000020032903d003510d0020010d01410021010c020b200141016a21010c010b200620016b220420074f0d09200341c0026a41186a220b200220014105746b220441186a220c290300370300200341c0026a41106a220d200441106a220e290300370300200341c0026a41086a220f200441086a2210290300370300200320042903003703c002200241086a2211290300211a2005290300211b200241186a2212290300211c20042002290300370300200c201c370300200e201b3703002010201a3703002012200b2903003703002005200d2903003703002011200f290300370300200220032903c0023703000b200241206a21022007200641016a2206460d110c000b0b20032802c402220541ff017122014104460d16200341cc026a2802002107200341c8026a280200210420054180fe037121022005418080fc077121062005418080807871210a0b20004200370308200041206a20073602002000411c6a2004360200200041186a200a2006722002722001723602004201211a0c190b410221014100210620022d00000d0b20022d00014101470d0b200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002104200241146a2d00002105200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703b801200320013a00b701200320063a00b601200320073b01b401200320043a00b301200320053a00b2012003200a3b01b0012003200b3a00af012003200c3a00ae012003200d3b01ac012003200e3a00ab012003200f3a00aa01200320103b01a801200320113a00a701200320123a00a601200320133b01a401200320143a00a301200320153a00a201200320163b01a001200341c0026a41186a4200370300200341c0026a41106a22054200370300200341c0026a41086a22024200370300200342003703c00241a0e4cb00ad428080808080028410012201290000211a2002200141086a2900003703002003201a3703c0022001103541e1b8c800ad4280808080a0018410012201290000211a200341d0036a41086a2206200141086a2900003703002003201a3703d00320011035200520032903d003221a37030020034188026a41086a200229030037030020034188026a41106a201a37030020034188026a41186a2006290300370300200320032903c00237038802200341c0026a20034188026a10fe0120032802c0022201410120011b21044100210a41002102024020032902c402420020011b221a422088a7220141014b0d004100210b20010e020b0a0b0b03402001410176220620026a22072002200420074105746a200341a0016a412010a0084101481b2102200120066b220141014b0d000c0a0b0b410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002104200241146a2d00002105200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703b801200320013a00b701200320063a00b601200320073b01b401200320043a00b301200320053a00b2012003200a3b01b0012003200b3a00af012003200c3a00ae012003200d3b01ac012003200e3a00ab012003200f3a00aa01200320103b01a801200320113a00a701200320123a00a601200320133b01a401200320143a00a301200320153a00a201200320163b01a001200341c8016a200341a0016a108e030240024002400240024020032d00c801450d00200341c0026a41186a4200370300200341c0026a41106a22044200370300200341c0026a41086a22024200370300200342003703c00241a0e4cb00ad428080808080028410012201290000211a2002200141086a2900003703002003201a3703c0022001103541c699c200ad428080808090018410012201290000211a200341d0036a41086a2206200141086a2900003703002003201a3703d00320011035200420032903d003221a37030020034188026a41086a200229030037030020034188026a41106a201a37030020034188026a41186a2006290300370300200320032903c00237038802200341c0026a20034188026a10a20220032902c402420020032802c00222021b221a422088a7220a41306c2101410021062002410820021b22052102024003402001450d03200341a0016a2002460d01200641016a2106200141506a21012002200341a0016a412010a0082107200241306a210220070d000b20074541016a41017120066a417f6a21060b2005200641306c6a2202200241306a2006417f73200a6a41306c109e081a200342003703f00120034280809aa6eaafe3013703e8012003200341a0016a3602c80120034188026a200341a0016a200341e8016a200341c8016a10f00202402003290388024201520d00200329039002211b200341f8026a20034188026a41106a290300370300200341c0026a41306a201b370300200341c0026a41086a41003a0000200341c9026a20032903a001370000200341d1026a200341a0016a41086a290300370000200341d9026a200341a0016a41106a290300370000200341e1026a200341b8016a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b41a0e4cb00ad428080808080028410012202290000211b2002290008211c2002103541c699c200ad428080808090018410012202290000211d2002290008211e200210352003201e3701d8022003201d3701d0022003201c3701c8022003201b3701c0022003412036028c022003200341c0026a360288022005200a417f6a20034188026a10a902201aa72202450d03200241306c0d020c030b200342003703f00120034280809aa6eaafe3013703e8012003200341a0016a3602d00320034188026a200341a0016a200341e8016a200341d0036a10f00202402003290388024201520d00200329039002211a200341f8026a20034188026a41106a290300370300200341f0026a201a370300200341c0026a41086a41003a0000200341c9026a20032903a001370000200341d1026a200341a0016a41086a290300370000200341d9026a200341a0016a41106a290300370000200341e1026a200341b8016a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b200341cd026a200341a8016a290300370000200341d5026a200341b0016a290300370000200341dd026a200341b8016a290300370000200341033a00c402200341093a00c002200320032903a0013700c50241b0b4cc004100200341c0026a10d4014200211a0c050b200341c0026a41186a22064200370300200341c0026a41106a22074200370300200341c0026a41086a22024200370300200342003703c00241a0e4cb00ad428080808080028410012201290000211b2002200141086a2900003703002003201b3703c0022001103541e1b8c800ad4280808080a0018410012201290000211b200341d0036a41086a220a200141086a2900003703002003201b3703d00320011035200420032903d003370000200441086a200a29030037000020034188026a41086a200229030037030020034188026a41106a200729030037030020034188026a41186a2006290300370300200320032903c00237038802200341c0026a20034188026a10fe0120032802c0022201410120011b2104410021020240024020032902c402420020011b221b422088a7220a41014b0d00200a0e020401040b200a210103402001410176220620026a22072002200420074105746a200341a0016a412010a0084101481b2102200120066b220141014b0d000b0b200420024105746a200341a0016a412010a0080d022002200a4f0d09200420024105746a2201200141206a2002417f73200a6a410574109e081a200342003703f00120034280809aa6eaafe3013703e8012003200341a0016a3602c80120034188026a200341a0016a200341e8016a200341c8016a10f00202402003290388024201520d00200329039002211c200341f8026a20034188026a41106a290300370300200341f0026a201c370300200341c0026a41086a41003a0000200341c9026a20032903a001370000200341d1026a200341a0016a41086a290300370000200341d9026a200341a0016a41106a290300370000200341e1026a200341b8016a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b41a0e4cb00ad428080808080028410012202290000211c2002290008211d2002103541e1b8c800ad4280808080a0018410012202290000211e2002290008210820021035200320083701d8022003201e3701d0022003201d3701c8022003201c3701c0022003412036028c022003200341c0026a360288022004200a417f6a20034188026a1098020240201b42ffffff3f83500d00200410350b201aa72202450d01200241306c450d010b200510350b4200211a0c020b0240201b42ffffff3f83500d00200410350b0240201aa72202450d00200241306c450d00200510350b410321010b200041206a410d3602002000411c6a41e08ec200360200200041186a200141809a30723602004201211a0b200042003703080c170b200341a0016a41206a2207200141246a280200360200200341a0016a41186a22042001411c6a290200370300200341a0016a41106a2205200141146a290200370300200341a0016a41086a220a2001410c6a290200370300200320012902043703a001410021064102210120022d000120022d0000410047720d04200341c0026a41206a2007280200360200200341c0026a41186a2004290300370300200341c0026a41106a2005290300370300200341c0026a41086a200a290300370300200320032903a0013703c00220034188026a200341c0026a108b024101210120032d0088024101460d0420034188026a41086a2d0000210220034191026a2f0000210120034193026a2d0000210620034188026a410c6a2d0000210720034195026a2f0000210420034197026a2d0000210520034188026a41106a2d0000210a20034199026a2f0000210b2003419b026a2d0000210c20034188026a41146a2d0000210d2003419d026a2f0000210e2003419f026a2d0000210f20034188026a41186a2d0000211020032f008902211120032d008b02211220032d008c02211320032f008d02211420032d008f0221152003200341a1026a29000037038002200320103a00ff012003200f3a00fe012003200e3b01fc012003200d3a00fb012003200c3a00fa012003200b3b01f8012003200a3a00f701200320053a00f601200320043b01f401200320073a00f301200320063a00f201200320013b01f001200320023a00ef01200320153a00ee01200320143b01ec01200320133a00eb01200320123a00ea01200320113b01e801200341c0036a200341e8016a108e03024020032d00c0034101460d0020032d00c1032107200342003703d00120034280809aa6eaafe3013703c8012003200341e8016a3602d00320034188026a200341e8016a200341c8016a200341d0036a10a802200341a8026a290300211b20032903a002211a02402003290388024201520d00200329039002211c200341f8026a20034188026a41106a290300370300200341f0026a201c370300200341c0026a41086a41003a0000200341c9026a20032903e801370000200341d1026a200341e8016a41086a290300370000200341d9026a200341e8016a41106a290300370000200341e1026a20034180026a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b2003201a3703d0032003201b3703d80302400240201a201b844200520d00200341c0026a41186a22054200370300200341c0026a41106a22064200370300200341c0026a41086a22014200370300200342003703c00241b6fdc600ad4280808080800184221a10012204290000211b200341c8016a41086a2202200441086a2900003703002003201b3703c8012004103520012002290300370300200320032903c8013703c00241e489c200ad4280808080d00184221b10012204290000211c2002200441086a2900003703002003201c3703c80120041035200620032903c801221c37030020034188026a41086a220a200129030037030020034188026a41106a220b201c37030020034188026a41186a220c2002290300370300200320032903c00237038802200341f0006a20034188026a412010d701200341f0006a41106a290300211c2003290378211d20032802702104200542003703002006420037030020014200370300200342003703c002201a10012205290000211a2002200541086a2900003703002003201a3703c8012005103520012002290300370300200320032903c8013703c002201b10012205290000211a2002200541086a2900003703002003201a3703c80120051035200620032903c801221a370300200a2001290300370300200b201a370300200c2002290300370300200320032903c002370388022003201c420020041b3703c8022003201d420020041b3703c00220034188026aad4280808080800484200341c0026aad428080808080028410020c010b2003201a3703d0032003201b3703d803200341c0026a41186a22054200370300200341c0026a41106a22064200370300200341c0026a41086a22014200370300200342003703c00241b6fdc600ad4280808080800184221c10012204290000211d200341c8016a41086a2202200441086a2900003703002003201d3703c8012004103520012002290300370300200320032903c8013703c00241e489c200ad4280808080d00184221d10012204290000211e2002200441086a2900003703002003201e3703c80120041035200620032903c801221e37030020034188026a41086a220a200129030037030020034188026a41106a220b201e37030020034188026a41186a220c2002290300370300200320032903c0023703880220034188016a20034188026a412010d70120034188016a41106a290300211e20032903900121082003280288012104200542003703002006420037030020014200370300200342003703c002201c10012205290000211c2002200541086a2900003703002003201c3703c8012005103520012002290300370300200320032903c8013703c002201d10012205290000211c2002200541086a2900003703002003201c3703c80120051035200620032903c801221c370300200a2001290300370300200b201c370300200c2002290300370300200320032903c0023703880220034200201e420020041b221c201b7d2008420020041b221b201a54ad7d221d201b201a7d221a201b56201d201c56201d201c511b22021b3703c80220034200201a20021b3703c00220034188026aad4280808080800484200341c0026aad428080808080028410020b200341cd026a200341f0016a290300370000200341d5026a200341f8016a290300370000200341dd026a20034180026a290300370000200341023a00c402200341093a00c002200320032903e8013700c50241b0b4cc004100200341c0026a10d4010240200741ff01710d0010a1020b4200211a0c070b4200211a20032802c403220141ff01714104460d06200141807e712106200341c8036a290300211a0c050b2004200741f485cc001042000b2004200741f485cc001042000b2004200741f485cc001042000b2002200a104e000b0b2000411c6a201a370200200041186a2006200141ff0171723602004201211a0b200042003703080c0f0b0240200420024105746a200341a0016a412010a00822010d004101210a2002210b0c010b2001411f7620026a210b0b0240201a42ffffff3f83500d00200410350b02400240200a450d00419f8fc2002102411321074180802021060c010b410c21070240200341a0016a10e902450d0041938fc20021024180802421060c010b200341c0026a41186a22064200370300200341c0026a41106a22044200370300200341c0026a41086a22024200370300200342003703c00241a0e4cb00ad428080808080028410012201290000211a2002200141086a2900003703002003201a3703c0022001103541c699c200ad428080808090018410012201290000211a200341d0036a41086a220a200141086a2900003703002003201a3703d00320011035200520032903d003370000200541086a200a29030037000020034188026a41086a200229030037030020034188026a41106a200429030037030020034188026a41186a2006290300370300200320032903c00237038802200341c0026a20034188026a10a20220032902c402420020032802c00222021b221a422088a741306c2101410021062002410820021b220a2102024003402001450d010240200341a0016a2002460d00200641016a2106200141506a21012002200341a0016a412010a0082104200241306a210220040d010b0b41878fc2002102418080282106201aa72201450d01200141306c450d01200a10350c010b0240201aa72202450d00200241306c450d00200a10350b200342003703f00120034280809aa6eaafe3013703e8012003200341a0016a3602d0032003200341a0016a3602c8012003200341c8016a3602c8022003200341d0036a3602c4022003200341e8016a3602c00220034188026a200341a0016a200341c0026a108c03024002402003280288024101470d0020032d008c024104460d0141ed8ec2002102411a21074180802c21060c020b20034188026a41086a2903004201520d0020034188026a41106a290300211a20032802c8012102200341f8026a20034188026a41186a290300370300200341f0026a201a370300200341c0026a41086a41003a0000200341c9026a2002290000370000200341d1026a200241086a290000370000200341d9026a200241106a290000370000200341e1026a200241186a290000370000200341033a00c00241b0b4cc004100200341c0026a10d4010b20032903b801211a20032d00b701210420032d00b601210a20032f01b401210c20032d00b301210d20032d00b201210e20032f01b001210f20032d00af01211020032d00ae01211120032f01ac01211220032d00ab01211320032d00aa01211420032f01a801211520032d00a701211620032d00a601211720032f01a401211820032d00a301211920032d00a201211f20032f01a0012120200341c0026a41186a22064200370300200341c0026a41106a22074200370300200341c0026a41086a22024200370300200342003703c00241a0e4cb00ad428080808080028410012201290000211b2002200141086a2900003703002003201b3703c0022001103541e1b8c800ad4280808080a0018410012201290000211b200341d0036a41086a2221200141086a2900003703002003201b3703d00320011035200520032903d003370000200541086a202129030037000020034188026a41086a200229030037030020034188026a41106a200729030037030020034188026a41186a2006290300370300200320032903c00237038802200341c0026a20034188026a10fe010240024020032802c00222010d00410021072003410036029002200342013703880241012101410021060c010b200320032902c402221b37028c022003200136028802201b422088a72106201ba721070b02402006200b490d00024020062007470d0020034188026a20074101108a01200328028c02210720032802880221010b2001200b4105746a220241206a20022006200b6b410574109e081a2002201a370018200220043a00172002200a3a00162002200c3b00142002200d3a00132002200e3a00122002200f3b0010200220103a000f200220113a000e200220123b000c200220133a000b200220143a000a200220153b0008200220163a0007200220173a0006200220183b0004200220193a00032002201f3a0002200220203b00002003200641016a22063602900241a0e4cb00ad428080808080028410012202290000211a2002290008211b2002103541e1b8c800ad4280808080a0018410012202290000211c2002290008211d200210352003201d3701d8022003201c3701d0022003201b3701c8022003201a3701c002024020010d00200341c0026aad428080808080048410070c0c0b200341203602ec012003200341c0026a3602e80120012006200341e8016a109802200741ffffff3f71450d0b200110350c0b0b200b2006104d000b410321010c010b0b20004200370308200041206a20073602002000411c6a2002360200200041186a20064180803c7120017241801a723602004201211a0c0b0b2001417f6a20074f0d002003200720016b2207360290020b200341e8016a2013200710ec0241012114200328028c0241ffffff3f71450d02201310350c020b02402001417f6a2007490d00200721020c010b2003200720016b2202360290020b200341c8016a2013200210ec02200328028c0241ffffff3f71450d00201310350b200341cd026a200341e8016a41086a290300370000200341d5026a200341e8016a41106a290300370000200341dd026a200341e8016a41186a290300370000200341e5026a20032903c801370000200341ed026a200341c8016a41086a290300370000200341f5026a200341c8016a41106a290300370000200341fd026a200341c8016a41186a290300370000200341043a00c402200341093a00c002200320032903e8013700c50220034185036a20143a000041b0b4cc004100200341c0026a10d4010c020b2001417f6a20074f0d002003200720016b2207360290020b200341a0016a2013200710ec020240200328028c0241ffffff3f71450d00201310350b4200211a200342003703f0012003428080e983b1de163703e8012003200341a0016a3602c80120034188026a200341a0016a200341e8016a200341c8016a10f00202402003290388024201520d00200329039002211b200341f8026a20034188026a41106a290300370300200341f0026a201b370300200341c0026a41086a41003a0000200341c9026a20032903a001370000200341d1026a200341a0016a41086a290300370000200341d9026a200341a0016a41106a290300370000200341e1026a200341b8016a290300370000200341033a00c00241b0b4cc004100200341c0026a10d4010b200042003703080c040b4200211a200042003703080c030b410321060c010b0b0240200441ffffff3f71450d00200510350b20004200370308200041206a20023602002000411c6a2001360200200041186a20074180801c7120067241801a723602004201211a0b2000201a370300200341e0036a24000bbb0201097f230041106b22012400024002402000280208220241ffffff3f712002470d0020024105742203417f4c0d00200028020021040240024020030d00410121050c010b200310332205450d020b41002100200141003602082001200536020020012003410576360204200141002002108a01200128020821060240024020020d00200128020021070c010b200241057421082001280200220720064105746a21090340200920006a2203200420006a2205290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002008200041206a2200470d000b200241057441606a41057620066a41016a21060b200641057441057521000240200128020441ffffff3f71450d00200710350b200141106a240020000f0b1044000b1045000be30204027f017e037f037e230041106b220124000240024020002802082202ad42307e2203422088a70d002003a72204417f4c0d00200028020021000240024020040d00410821050c010b200410332205450d020b20014100360208200120053602002001200441306e3602042001410020021088012001280208210502400240200241306c22020d00200128020021060c010b20012802002206200541306c6a21040340200041086a2903002103200041106a2903002107200041186a290300210820002903002109200441286a200041286a290300370300200441206a200041206a290300370300200441186a2008370300200441106a2007370300200441086a200337030020042009370300200441306a2104200541016a2105200041306a2100200241506a22020d000b0b200541306c41306d2100024020012802042204450d00200441306c450d00200610350b200141106a240020000f0b1044000b1045000be61107067f027e027f0a7e037f017e047f230041d0036b22032400200228020821042002280204210520022802002106200341206a2001108e02200341a0016a2003280220220720032802282208108f0220032903a00121094200210a200342003703a001200341e8016a280200210b20032d00ec01210c02400240200942015122020d00200341306a41306a4200370300200341306a41286a4200370300200341306a41206a4200370300200341306a41186a4200370300200341c0006a4200370300200341386a4200370300200342003703304200210d4200210e4200210f420021100c010b200341d8016a2903002111200341a0016a41306a2903002112200341a0016a41206a290300210f200341a0016a41186a290300210e200341e0016a290300211020032903b001210d20032903a801210a200341306a41206a200341a0016a41286a290300370300200341306a41286a2012370300200341306a41306a2011370300200341c0006a200e3703002003200f3703482003200a3703302003200d3703380b0240024002400240200a200629030022127d2213200a56200d200641086a29030022147d200a201254ad7d2211200d562011200d511b450d0041838c0c2108419089c20021024280808080b00221120c010b200320133703302003201137033802400240200e20127c2215200e542206200f20147c2006ad7c2216200f542016200f511b450d0041838c08210841a7d6ca0021024280808080800121120c010b200341306a41186a2016370300200320153703402012201484500d02200341e8006a2005280200108e02200341a0026a200328026822052003280270108f02200341d0026a290300420020032903a00242015122061b2112200341c8026a290300420020061b21140240200328026c450d00200510350b2014201358201220115820122011511b0d0241838c04210841a389c20021024280808080d00221120b2013210a2011210d0b2002ad221142088842ff0183210f20122011428080fcff0f8384210e410121060c010b20042802002104200341e8006a41186a200341c0006a220641086a2903002212370300200341e8006a41206a2205200641106a29030037030020034190016a2217200641186a29030037030020034198016a2218200641206a2903003703002003200629030022143703782003201337036820032011370370427f200a200e7c220e200e200a542206200d200f7c2006ad7c220a200d54200a200d511b22061b427f200a20061b8450211902400240427f201320147c220a200a2013542206201120127c2006ad7c220a201154200a2011511b22061b220d428080e983b1de16544100427f200a20061b220a501b0d00200341e8006a41106a290300210a2018290300210d2017290300210f2005290300210e200329037021142003290368211642012115200329038001211a0c010b02400240200d200a8450450d00420021150c010b42002115200341a0026a41186a221b4200370300200341a0026a41106a22174200370300200341a0026a41086a22054200370300200342003703a00241b6fdc600ad4280808080800184220f100122182900002112200341c0036a41086a2206201841086a290000370300200320123703c0032018103520052006290300370300200320032903c0033703a00241e489c200ad4280808080d00184221210012218290000210e2006201841086a2900003703002003200e3703c00320181035201720032903c003220e370300200341a0036a41086a221c2005290300370300200341a0036a41106a221d200e370300200341a0036a41186a221e2006290300370300200320032903a0023703a003200341086a200341a0036a412010d701200341086a41106a290300210e2003290310211420032802082118201b42003703002017420037030020054200370300200342003703a002200f1001221b290000210f2006201b41086a2900003703002003200f3703c003201b103520052006290300370300200320032903c0033703a00220121001221b290000210f2006201b41086a2900003703002003200f3703c003201b1035201720032903c003220f370300201c2005290300370300201d200f370300201e2006290300370300200320032903a0023703a00320034200200e420020181b220f200a7d2014420020181b2212200d54ad7d220e2012200d7d2214201256200e200f56200e200f511b22061b3703a80220034200201420061b3703a002200341a0036aad4280808080800484200341a0026aad42808080808002841002200341d8026a200a370300200341d0026a200d370300200541013a0000200341a9026a2004290000370000200341b1026a200441086a290000370000200341b9026a200441106a290000370000200341c1026a200441186a290000370000200341033a00a00241b0b4cc004100200341a0026a10d4010b0b2019ad2112200341c8016a200e370300200341d0016a200f370300200341b0016a2014370300200341d8016a200d370300200341b8016a200a3703002003201a3703c001200320103703e001200320163703a8014201210f410021062003200c4100200942015122041b3a00ec012003200b410020041b3602e801200320154201512204ad3703a001024020040d002008ad4220862007ad8410074200210f2013210a2011210d4200210e0c010b200320083602a402200320073602a002200341a8016a200341a0026a10e7024200210e2013210a2011210d0b02402003280224450d00200710350b024002402006450d0020002008360204200041086a200f4208862002ad42ff018384200e84370200410121020c010b024002400240200241ff017122020d00200f4200510d0041032106200341a0026a21020c010b2002450d01200f4200520d0141042106200341a0016a21020b200241086a20063a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b200041186a200d370300200041106a200a370300200041086a2012370300410021020b20002002360200200341d0036a24000bc90301077f230041106b220224000240200041186a28020022034105744114722204417f4c0d000240200410332205450d00200520002903003700002005200041086a290300370008200241103602082002200436020420022005360200200028021021062003200210770240024020030d002002280208210320022802042104200228020021070c010b20034105742108200228020021072002280204210420022802082103034020062100024002402004200322056b4120490d00200541206a21030c010b024002400240200541206a22032005490d00200441017422062003200620034b1b22064100480d000240024020040d00024020060d00410121070c020b2006103321070c040b20042006470d020b200621040c030b103e000b200720042006103721070b2006210420070d00103c000b200041206a2106200720056a22052000290000370000200541186a200041186a290000370000200541106a200041106a290000370000200541086a200041086a290000370000200841606a22080d000b2002200436020420022003360208200220073602000b20012902002003ad4220862007ad84100202402004450d00200710350b200241106a24000f0b1045000b1044000bea1508047f017e077f027e037f017e017f037e230041d0016b22022400200241b0016a41186a4200370300200241b0016a41106a22034200370300200241b0016a41086a22044200370300200242003703b00141a0e4cb00ad42808080808002841001220529000021062004200541086a290000370300200220063703b001200510354189eaca00ad4280808080f00084100122052900002106200241f0006a41086a2207200541086a290000370300200220063703702005103520032002290370220637030020024190016a41086a200429030037030020024190016a41106a200637030020024190016a41186a2007290300370300200220022903b00137039001200241d0006a20024190016a10a202024002400240200228025022080d00410021092002410036020820024208370300410821080c010b200220022902542206370204200220083602002006a7210941002104024002402006422088a7220a41014b0d00200a0e020201020b200a210503402005410176220720046a220b20042008200b41306c6a2001412010a0084101481b2104200520076b220541014b0d000b0b2008200441306c6a2001412010a0080d0002400240024002402004200a4f0d002008200441306c6a2205200541306a200a2004417f736a41306c109e081a2002200a417f6a220c360208200241b0016a41186a220b4200370300200241b0016a41106a220d4200370300200241b0016a41086a22044200370300200242003703b00141a0e4cb00ad4280808080800284220e1001220529000021062004200541086a290000370300200220063703b0012005103541c699c200ad4280808080900184220f100122072900002106200241f0006a41086a2205200741086a290000370300200220063703702007103520032002290370370000200341086a200529030037000020024190016a41086a2203200429030037030020024190016a41106a2210200d29030037030020024190016a41186a2211200b290300370300200220022903b00137039001200241b0016a20024190016a10a20220022802b0012207410820071b21120240024020022902b401420020071b2206422088a722070d00420021130c010b200b20122007417f6a221441306c6a220741186a290300370300200d200741106a2903003703002004200741086a290300370300200220072903003703b0012014ad422086200642ffffffff0f83842106200741286a290300211520072903202116420121130b2011200b2903003703002010200d29030037030020032004290300370300200220022903b00137039001200241f0006a41186a4200370300200241f0006a41106a220342003703002005420037030020024200370370200e10012207290000210e2004200741086a2900003703002002200e3703b0012007103520052004290300370300200220022903b001370370200f10012207290000210e2004200741086a2900003703002002200e3703b00120071035200320022903b001220e370300200241d0006a41086a2005290300370300200241d0006a41106a200e370300200241d0006a41186a2004290300370300200220022903703703500240024020120d00200241d0006aad428080808080048410070c010b200241203602b4012002200241d0006a3602b00120122006422088a7200241b0016a10a9022006a72204450d00200441306c450d00201210350b200241106a41186a20024190016a41186a22042903002206370300200241106a41106a20024190016a41106a2205290300220e370300200241106a41086a20024190016a41086a2207290300220f37030020022002290390012217370310200241306a41186a220b2006370300200241306a41106a220d200e370300200241306a41086a2212200f370300200220173703300240201350450d00200c210a4100210d0c040b2004200b2903003703002005200d29030037030020072012290300370300200220022903303703900141002104024002400240200a417f6a220541014b0d0020050e020201020b200c210503402005410176220720046a220b20042008200b41306c6a20024190016a412010a0084101481b2104200520076b220541014b0d000b0b2008200441306c6a20024190016a412010a0082205450d022005411f7620046a21040b200241d0006a41186a20024190016a41186a2903002206370300200241d0006a41106a20024190016a41106a290300220e370300200241d0006a41086a20024190016a41086a290300220f37030020022002290390012213370350200241f0006a41186a2006370300200241f0006a41106a200e370300200241f0006a41086a200f37030020022013370370200241b0016a41186a2006370300200241b0016a41106a200e370300200241b0016a41086a200f370300200220133703b001200c2004490d020240200c2009470d0020022009410110880120022802042109200228020021080b2008200441306c6a220541306a2005200c20046b41306c109e081a200541286a201537030020052016370320200541186a200241b0016a41186a290300370300200541106a200241b0016a41106a290300370300200541086a200241b0016a41086a290300370300200520022903b0013703002002200a3602084101210d0c030b2004200a104e000b200241d0006a41186a20024190016a41186a290300370300200241d0006a41106a20024190016a41106a290300370300200241d0006a41086a20024190016a41086a29030037030020022002290390013703504100210d200c210a0c010b2004200c104d000b200241f0006a41186a220b4200370300200241f0006a41106a22124200370300200241f0006a41086a220542003703002002420037037041a0e4cb00ad4280808080800284100122072900002106200241b0016a41086a2204200741086a290000370300200220063703b0012007103520052004290300370300200220022903b0013703704189eaca00ad4280808080f000841001220729000021062004200741086a290000370300200220063703b00120071035200320022903b001370000200341086a2004290300370000200241d0006a41086a2005290300370300200241d0006a41106a2012290300370300200241d0006a41186a200b29030037030020022002290370370350200241203602b4012002200241d0006a3602b0012008200a200241b0016a10a902200241003602b801200242013703b001200241b0016a4100200a41306c220b41306d108a0120022802b80121070240200a450d0020022802b00120074105746a2104200821050340200541086a2900002106200541106a290000210e2005290000210f200441186a200541186a290000370000200441106a200e370000200441086a20063700002004200f370000200741016a2107200441206a2104200541306a2105200b41506a220b0d000b0b200220073602b80102402009450d00200941306c450d00200810350b20022802b401210520022802b0012104200241b0016a41186a200141186a290000370300200241b0016a41106a200141106a290000370300200241b0016a41086a200141086a290000370300200220012900003703b001200241b0016a41012004200710a7022000200d3a0001200041003a0000200041026a200229019001370100200041086a20024196016a290100370100200541ffffff3f71450d01200410350c010b200041013a00002000410c6a4109360200200041086a41f2dfca00360200200041066a410d3a0000200041046a41831a3b01002009450d00200941306c450d00200810350b200241d0016a24000bd30403067f017e037f230041306b220124000240024020002802202202450d000240034020002002417f6a36022020002802042202450d0120002802082103200028020021040240200028020c220520022f0106490d00034002400240200228020022060d002003ad2107410021060c010b200441016a210420023301044220862003ad8421070b200210352007a72103200621022007422088a7220520062f01064f0d000b200621020b200541016a21082002200541e0006c6a220541a0036a28020021092005419c036a280200210620054198036a280200210a200541e8026a290300210702402004450d00200220084102746a41880b6a2802002102410021082004417f6a2204450d00034020022802880b21022004417f6a22040d000b0b2000200836020c20002003360208200020023602042000410036020020074202510d0302400240200a0d00410021092001410036021c2001410036020c0c010b0240024020060d00200a21020c010b20062102200a2103034020032802ec0321032002417f6a22020d000b200a21020340200220022f01064102746a41ec036a28020021022006417f6a22060d000b2003210a0b2001410036022020014100360218200142003703102001200a36020c200141003602082001200236021c200120022f01063602240b20012009360228200141086a108103200028022022020d000c020b0b41958dcc00412b41c08dcc00103f000b200028020421020b02402002450d0020022802002106200210352006450d00034020062802002102200610352002210620020d000b0b200141306a24000b13002000410e360204200041cce9c2003602000bb30201027f230041206b220724002004a7210802400240024002402001a70d0020080d01427f200320067c200220057c22052002542208ad7c22022008200220035420022003511b22081b2103427f200520081b21020c020b024020084101460d00200741086a200420052006200120022003109103200741186a290300210320072903102102200729030821050c030b427f200320067c200220057c22052002542208ad7c22022008200220035420022003511b22081b2103427f200520081b2102420121050c020b02402002200556200320065620032006511b0d00200620037d2005200254ad7d2103200520027d2102420121050c020b200320067d2002200554ad7d2103200220057d21020b420021050b2000200237030820002005370300200041106a2003370300200741206a24000b130020004105360204200041b8fdc2003602000b3400200041a8fdc60036020420004100360200200041146a4101360200200041106a41a8a8c300360200200041086a42073702000bb10201057f230041106b220324000240024002400240200141046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b2003410036020820032005360200200320043602042001200310770240024020032802042206200328020822056b2001490d0020032802002104200621070c010b200520016a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d00024020070d00410121040c020b2007103322040d010c060b2003280200210420062007460d0020042006200710372204450d050b20032007360204200320043602000b200420056a20002001109d081a2002290200200520016aad4220862004ad84100202402007450d00200410350b200341106a24000f0b1044000b1045000b103e000b103c000bb60201057f230041106b2203240002400240024002402001410274220441046a2205417f4c0d000240024020050d0041012106410021050c010b200510332206450d020b2003410036020820032006360200200320053602042001200310770240024020032802042207200328020822016b2004490d0020032802002105200721060c010b200120046a22052001490d03200741017422062005200620054b1b22064100480d030240024020070d00024020060d00410121050c020b2006103322050d010c060b2003280200210520072006460d0020052007200610372205450d050b20032006360204200320053602000b200520016a20002004109d081a2002290200200120046aad4220862005ad84100202402006450d00200510350b200341106a24000f0b1044000b1045000b103e000b103c000ba00402067f027e230041106b220324000240024002400240200141186c4104722204417f4c0d00200410332205450d0120034100360208200320043602042003200536020020012003107702400240200141186c22010d002003280208210120032802042104200328020021060c010b200020016a2107200328020421042003280208210103402000280200210802400240200420016b4104490d0020032802002106200421050c010b200141046a22052001490d05200441017422062005200620054b1b22054100480d050240024020040d00024020050d00410121060c020b2005103322060d010c080b2003280200210620042005460d0020062004200510372206450d070b20032005360204200320063602000b200620016a20083600002003200141046a2208360208200041106a2903002109200041086a290300210a02400240200520086b4110490d00200141146a2101200521040c010b200841106a22012008490d05200541017422042001200420014b1b22044100480d050240024020050d00024020040d00410121060c020b200410332206450d080c010b20052004460d0020062005200410372206450d070b20032004360204200320063602000b200620086a220520093700082005200a37000020032001360208200041186a22002007470d000b0b20022902002001ad4220862006ad84100202402004450d00200610350b200341106a24000f0b1044000b1045000b103e000b103c000bdf0301057f230041106b220324000240024002400240200141046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b2003410036020820032005360200200320043602042001200310770240024020032802042204200328020822066b2001490d0020032802002105200421070c010b200620016a22052006490d03200441017422072005200720054b1b22074100480d030240024020040d00024020070d00410121050c020b2007103322050d010c060b2003280200210520042007460d0020052004200710372205450d050b20032007360204200320053602000b200520066a20002001109d081a02400240200241046a2802002200200241086a28020022046b200620016a2201490d00200228020021060c010b200420016a22062004490d03200041017422042006200420064b1b22044100480d030240024020000d00024020040d00410121060c020b200410332206450d060c010b2002280200210620002004460d0020062000200410372206450d050b20022006360200200241046a2004360200200241086a28020021040b200620046a20052001109d081a200241086a200420016a36020002402007450d00200510350b200341106a24000f0b1044000b1045000b103e000b103c000bf00201057f230041206b220324000240024002400240200241046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b2003410036021820032005360210200320043602142002200341106a10770240024020032802142206200328021822056b2002490d0020032802102104200621070c010b200520026a22042005490d03200641017422072004200720044b1b22074100480d030240024020060d00024020070d00410121040c020b2007103322040d010c060b2003280210210420062007460d0020042006200710372204450d050b20032007360214200320043602100b200420056a20012002109d081a2003200520026a2202ad4220862004ad8410032205290000370308200510352003411c6a200420026a360200200320043602182003200341106a3602142003200341086a3602102000200341106a107b02402007450d00200410350b200341206a24000f0b1044000b1045000b103e000b103c000b960503037f027e057f230041106b220224002002410036020820024201370300200028021021030240410410332204450d0020024104360204200220043602002004200336000020024104360208200041146a280200210320044104410810372204450d0020024108360204200420033600042002200436020020024108360208200041086a29030021052000290300210620044108411810372204450d0020042006370008200441106a200537000020022004360200200242988080808003370204024041000d0020044118413810372204450d010b20042000290024370018200441206a2000412c6a290000370000200441286a200041346a290000370000200441306a2000413c6a29000037000020024138360204200220043602002002413836020820002802182104200041206a28020022002002107702400240024020000d002002280208210020022802042107200228020021080c010b200041057421094100200228020822006b210a2002280204210b034002400240200b200a6a4120490d0020022802002108200b21070c010b200041206a22032000490d03200b41017422082003200820034b1b22074100480d0302400240200b0d00024020070d00410121080c020b2007103322080d010c060b20022802002108200b2007460d002008200b200710372208450d050b20022007360204200220083602002007210b0b200820006a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002002200041206a2200360208200a41606a210a200441206a2104200941606a22090d000b0b20012902002000ad4220862008ad84100202402007450d00200810350b200241106a24000f0b103e000b103c000be20c03037f017e077f230041c0026b22022400024002400240024002400240024002400240024020012d0000417f6a220341044b0d0020030e050102030405010b41cfa2cc00412841c086cc00103f000b2001410c6a2802002204ad42b0027e2205422088a70d052005a72206417f4c0d05200141046a28020021030240024020060d00410821070c010b200610332207450d070b20024100360208200220073602002002200641b0026e3602042002410020041092012002280208210102402004450d00200441b0026c21062002280200200141b0026c6a2107200441047441706a41047621040340200241106a2003109b032007200241106a41b002109d0841b0026a2107200341b0026a2103200641d07d6a22060d000b200120046a41016a21010b200241186a20013602002002200229030022053703102000410c6a2001360200200041046a2005370200200041013a00000c040b200141026a2f0100210641b00210332203450d062003200141046a280200109c03200041046a2003360200200041026a20063b0100200041023a00000c030b2001410c6a280200220841ffffff3f712008470d0320084105742206417f4c0d03200141026a2f01002109200141046a28020021040240024020060d00410121070c010b200610332207450d050b41002103200241003602182002200736021020022006410576360214200241106a41002008108a012002280218210a02402008450d002008410574210b2002280210200a4105746a210c0340200c20036a2206200420036a2207290000370000200641186a200741186a290000370000200641106a200741106a290000370000200641086a200741086a290000370000200b200341206a2203470d000b200841057441606a410576200a6a41016a210a0b200241086a2206200a36020020022002290310370300200141186a2802002107200141146a28020021042001280210210b41b00210332203450d0520032001411c6a280200109c03200041026a20093b01002000411c6a2003360200200041186a2007360200200041146a2004360200200041106a200b360200200041033a0000200041046a20022903003702002000410c6a20062802003602000c020b2001412c6a280200220841ffffff3f712008470d0220084105742206417f4c0d02200141226a2f01002109200141246a28020021040240024020060d00410121070c010b200610332207450d040b41002103200241003602182002200736021020022006410576360214200241106a41002008108a012002280218210a02402008450d002008410574210b2002280210200a4105746a210c0340200c20036a2206200420036a2207290000370000200641186a200741186a290000370000200641106a200741106a290000370000200641086a200741086a290000370000200b200341206a2203470d000b200841057441606a410576200a6a41016a210a0b200241086a200a360200200220022903102205370300200041226a20093b0100200041246a20053702002000412c6a200a360200200041043a0000200041386a200141386a280200360200200041306a200129023037020020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c010b2001412c6a280200220841ffffff3f712008470d0120084105742206417f4c0d01200141226a2f01002109200141246a28020021040240024020060d00410121070c010b200610332207450d030b41002103200241003602182002200736021020022006410576360214200241106a41002008108a012002280218210a02402008450d002008410574210b2002280210200a4105746a210c0340200c20036a2206200420036a2207290000370000200641186a200741186a290000370000200641106a200741106a290000370000200641086a200741086a290000370000200b200341206a2203470d000b200841057441606a410576200a6a41016a210a0b200241086a200a360200200220022903102205370300200041226a20093b0100200041246a20053702002000412c6a200a360200200041053a0000200041306a20012902303702002000200141016a290000370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000b200241c0026a24000f0b1044000b1045000b103c000b881c04057f017e017f037e230041b0036b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c00011302030405060708090a0b0c0d0e0f1011121313131415161713000b20024180016a200141086a109d0320004100360200200041106a20024180016a41086a290300370300200041086a2002290380013703000c170b20024180016a200141046a109a03200041013602002000413c6a200241b8016a280200360200200041346a200241b0016a2903003702002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c160b20004103360200200041086a200141086a2903003703000c150b20024180016a200141046a109e03200041043602002000410c6a20024188016a28020036020020002002290380013702040c140b02400240024002400240024020012d0004417f6a220341034b0d00200141046a210420030e0401020304010b41cfa2cc00412841c086cc00103f000b200141086a2802002103410121050c030b41022105200241026a200441036a2d00003a000020024180016a41086a200141146a29020037030020024190016a2001411c6a29020037030020024198016a200141246a2d00003a0000200220042f00013b010020022001410c6a29020037038001200141086a2802002103200141286a28020021010c020b200141086a2802002103410321050c010b200241026a200441036a2d00003a000020024180016a41086a200141146a29020037030020024190016a2001411c6a29020037030020024198016a200141246a2d00003a0000200220042f00013b010020022001410c6a29020037038001200141086a2802002103200141286a2802002101410421050b200020053a0004200020022f01003b000520004105360200200041086a20033602002000410c6a200229038001370200200041286a2001360200200041076a200241026a2d00003a0000200041146a20024180016a41086a2903003702002000411c6a20024190016a290300370200200041246a20024198016a2802003602000c130b20024180016a200141086a108503200041086a20024180016a41e000109d081a200041063602000c120b20024180016a200141086a108702200041086a20024180016a418802109d081a200041073602000c110b02400240200128020422060d00410021030c010b20024180016a41186a200141286a29000037030020024180016a41106a200141206a29000037030020024188016a200141186a29000037030020024180016a41286a200141386a29000037030020024180016a41306a200141c0006a29000037030020024180016a41386a200141c8006a29000037030020024180016a41c8006a200141d8006a29000037030020024180016a41d0006a200141e0006a29000037030020024180016a41d8006a200141e8006a2900003703002002200141106a290000370380012002200141306a2900003703a0012002200141d0006a2900003703c00120024180016a41f8006a20014188016a29000037030020024180016a41f0006a20014180016a29000037030020024180016a41e8006a200141f8006a2900003703002002200141f0006a2900003703e0012001410c6a2802002201417f4c0d120240024020010d0041002105410121030c010b200110332203450d14200121050b0240024020052001490d00200521040c010b200541017422042001200420014b1b22044100480d15024020050d002004103322030d010c170b20052004460d0020032005200410372203450d160b200320062001109d081a200220024180016a418001109d081a2001ad4220862004ad8421070b20002003360204200041086a2007370200200041106a2002418001109d081a200041083602000c100b20024180016a200141086a10a00320004109360200200041386a20024180016a41306a290300370300200041306a20024180016a41286a290300370300200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c0f0b20024180016a200141046a10a1032000410a3602002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c0e0b20024180016a200141046a10a1032000410b3602002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c0d0b20024180016a200141086a1086032000410c360200200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c0c0b20024180016a200141046a10a203200041046a20024180016a41c400109d081a2000410d3602000c0b0b2000410e360200200020012802043602040c0a0b2001410c6a2802002203417f4c0d0a200128020421060240024020030d0041002101410121040c010b200310332204450d0c200321010b0240024020012003490d00200121050c010b200141017422052003200520034b1b22054100480d0d024020010d00200510332204450d0f0c010b20012005460d0020042001200510372204450d0e0b200420062003109d0821012000410c6a2003360200200041086a2005360200200020013602042000410f3602000c090b20024180016a200141086a10a30320004110360200200041c0006a20024180016a41386a290300370300200041386a20024180016a41306a290300370300200041306a20024180016a41286a290300370300200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c080b20024180016a200141086a10a403200041086a20024180016a419801109d081a200041113602000c070b20024180016a200141046a10a503200041123602002000412c6a200241a8016a280200360200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c060b20024180016a200141046a10de04200041046a20024180016a41e800109d081a200041133602000c050b10a703000b20024180016a200141086a10a803200041086a20024180016a41a802109d081a200041173602000c030b20024180016a200141086a10a903200041086a20024180016a41c800109d081a200041183602000c020b20024180016a200141046a10aa03200041046a20024180016a41c400109d081a200041193602000c010b0240024002400240200141086a280200417f6a220841024b0d004101210520080e03030102030b41cfa2cc00412841c086cc00103f000b41012103024002402001410c6a22052d00004101470d00200141106a28020021060c010b200241ae036a200541036a2d00003a000020024188016a2001411c6a29020037030020024180016a41106a200141246a29020037030020024198016a2001412c6a2d00003a0000200220052f00013b01ac032002200141146a29020037038001200141106a2802002106410021030b41022105200241a8036a41026a200241ac036a41026a2d00003a0000200241086a20024180016a41086a290300370300200241106a20024180016a41106a290300370300200241186a20024180016a41186a280200360200200220022f01ac033b01a80320022002290380013703000c010b41012103024002402001410c6a22052d00004101470d00200141106a28020021060c010b200241ae036a200541036a2d00003a000020024188016a2001411c6a29020037030020024180016a41106a200141246a29020037030020024198016a2001412c6a2d00003a0000200220052f00013b01ac032002200141146a29020037038001200141106a2802002106410021030b200241a8036a41026a200241ac036a41026a2d00003a0000200241086a20024180016a41086a290300370300200241106a20024180016a41106a290300370300200241186a20024180016a41186a280200360200200220022f01ac033b01a8032002200229038001370300200141c8006a2903002109200141c0006a2903002107200141386a290300210a200141d0006a28020021042001290330210b410321050b200020022f01a8033b000d200041c8006a2009370300200041c0006a2007370300200041386a200a370300200041306a200b3703002000410c6a20033a0000200041086a2005360200200041106a2006360200200041146a2002290300370200200041d0006a20043602002000410f6a200241aa036a2d00003a00002000411c6a200241086a290300370200200041246a200241106a2903003702002000412c6a200241186a2802003602002000411a3602000b200241b0036a24000f0b1044000b1045000b103e000b103c000ba91a03047f047e027f230041c0036b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c00011302030405060708090a0b0c0d0e0f1011121313131415161713000b2002200141086a109d0320004100360200200041106a200241086a290300370300200041086a20022903003703000c170b2002200141046a109a03200041013602002000413c6a200241386a280200360200200041346a200241306a2903003702002000412c6a200241286a290300370200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241106a2903003702002000410c6a200241086a290300370200200020022903003702040c160b20004103360200200041086a200141086a2903003703000c150b2002200141046a109e03200041043602002000410c6a200241086a280200360200200020022903003702040c140b02400240024002400240024020012d0004417f6a220341034b0d00200141046a210420030e0401020304010b41cfa2cc00412841c086cc00103f000b200141086a2802002103410121050c030b41022105200241b0026a41026a200441036a2d00003a0000200241086a200141146a290200370300200241106a2001411c6a290200370300200241186a200141246a2d00003a0000200220042f00013b01b00220022001410c6a290200370300200141086a2802002103200141286a28020021010c020b200141086a2802002103410321050c010b200241b2026a200441036a2d00003a0000200241086a200141146a290200370300200241106a2001411c6a290200370300200241186a200141246a2d00003a0000200220042f00013b01b00220022001410c6a290200370300200141086a2802002103200141286a2802002101410421050b200020053a0004200020022f01b0023b000520004105360200200041086a20033602002000410c6a2002290300370200200041286a2001360200200041076a200241b2026a2d00003a0000200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a2802003602000c130b2002200141086a108503200041086a200241e000109d081a200041063602000c120b2002200141086a108702200041086a2002418802109d081a200041073602000c110b024002402001280204450d00200241b0026a41186a200141286a290000370300200241b0026a41106a200141206a290000370300200241b8026a200141186a290000370300200241b0026a41286a200141386a290000370300200241b0026a41306a200141c0006a290000370300200241b0026a41386a200141c8006a290000370300200241b0026a41c8006a200141d8006a290000370300200241b0026a41d0006a200141e0006a290000370300200241b0026a41d8006a200141e8006a2900003703002002200141106a2900003703b0022002200141306a2900003703d0022002200141d0006a2900003703f002200241b0026a41f8006a20014188016a290000370300200241b0026a41f0006a20014180016a290000370300200241b0026a41e8006a200141f8006a2900003703002002200141f0006a290000370390032002200141046a109f032002410c6a200241b0026a418001109d081a0c010b200241003602000b200041046a2002418c01109d081a200041083602000c100b2002200141086a10a00320004109360200200041386a200241306a290300370300200041306a200241286a290300370300200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a290300370300200041086a20022903003703000c0f0b2002200141046a10a1032000410a3602002000412c6a200241286a290300370200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241106a2903003702002000410c6a200241086a290300370200200020022903003702040c0e0b2002200141046a10a1032000410b3602002000412c6a200241286a290300370200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241106a2903003702002000410c6a200241086a290300370200200020022903003702040c0d0b2002200141086a1086032000410c360200200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a290300370300200041086a20022903003703000c0c0b2002200141046a10a203200041046a200241c400109d081a2000410d3602000c0b0b2000410e360200200020012802043602040c0a0b2002200141046a109f032000410f3602002000410c6a200241086a280200360200200020022903003702040c090b2002200141086a10a30320004110360200200041c0006a200241386a290300370300200041386a200241306a290300370300200041306a200241286a290300370300200041286a200241206a290300370300200041206a200241186a290300370300200041186a200241106a290300370300200041106a200241086a290300370300200041086a20022903003703000c080b2002200141086a10a403200041086a2002419801109d081a200041113602000c070b2002200141046a10a503200041123602002000412c6a200241286a280200360200200041246a200241206a2903003702002000411c6a200241186a290300370200200041146a200241106a2903003702002000410c6a200241086a290300370200200020022903003702040c060b200128020421032002200141086a109f03200241b0036a200141146a10a603200241146a200241b0036a41086a280200360200200220022903b00337020c200241b0026a41106a200241106a2903002206370300200241b0026a41086a200241086a29030022073703002002200229030022083703b002200141206a2902002109200141286a280200210520002003360204200041086a2008370200200041106a2007370200200041186a2006370200200041286a2005360200200041206a20093702002000412c6a2001412c6a290200370200200041346a200141346a2902003702002000413c6a2001413c6a290200370200200041c4006a200141c4006a290200370200200041cc006a200141cc006a290200370200200041d4006a200141d4006a290200370200200041dc006a200141dc006a290200370200200041e4006a200141e4006a290200370200200041133602000c050b10a703000b2002200141086a10a803200041086a200241a802109d081a200041173602000c030b2002200141086a10a903200041086a200241c800109d081a200041183602000c020b2002200141046a10aa03200041046a200241c400109d081a200041193602000c010b0240024002400240200141086a280200417f6a220a41024b0d0041012105200a0e03030102030b41cfa2cc00412841c086cc00103f000b41012103024002402001410c6a22052d00004101470d00200141106a280200210b0c010b200241b2036a200541036a2d00003a0000200241086a2001411c6a290200370300200241106a200141246a290200370300200241186a2001412c6a2d00003a0000200220052f00013b01b0032002200141146a290200370300200141106a280200210b410021030b41022105200241ac026a41026a200241b0036a41026a2d00003a0000200241b0026a41086a200241086a290300370300200241b0026a41106a200241106a290300370300200241b0026a41186a200241186a280200360200200220022f01b0033b01ac02200220022903003703b0020c010b41012103024002402001410c6a22052d00004101470d00200141106a280200210b0c010b200241b2036a200541036a2d00003a0000200241086a2001411c6a290200370300200241106a200141246a290200370300200241186a2001412c6a2d00003a0000200220052f00013b01b0032002200141146a290200370300200141106a280200210b410021030b200241ac026a41026a200241b0036a41026a2d00003a0000200241b0026a41086a200241086a290300370300200241b0026a41106a200241106a290300370300200241b0026a41186a200241186a280200360200200220022f01b0033b01ac02200220022903003703b002200141c8006a2903002107200141c0006a2903002106200141386a2903002109200141d0006a280200210420012903302108410321050b200020022f01ac023b000d200041c8006a2007370300200041c0006a2006370300200041386a2009370300200041306a20083703002000410c6a20033a0000200041086a2005360200200041106a200b360200200041146a20022903b002370200200041d0006a20043602002000410f6a200241ae026a2d00003a00002000411c6a200241b0026a41086a290300370200200041246a200241b0026a41106a2903003702002000412c6a200241c8026a2802003602002000411a3602000b200241c0036a24000bf20b03057f017e017f230041306b2202240002400240024002400240024002400240024002400240024002400240024002402001280200417f6a220341094b0d0020030e0a0102030405060708090a010b41cfa2cc00412841c086cc00103f000b20004101360200200020012802043602040c090b2001410c6a2802002203417f4c0d09200128020421040240024020030d0041002101410121050c010b200310332205450d0b200321010b0240024020012003490d00200121060c010b200141017422062003200620034b1b22064100480d0c024020010d002006103322050d010c0e0b20012006460d0020052001200610372205450d0d0b200520042003109d0821012000410c6a2003360200200041086a200636020020002001360204200041023602000c080b20004103360200200041086a200141086a2903003703000c070b2001410c6a2802002203417f4c0d07200128020421040240024020030d0041002101410121050c010b200310332205450d09200321010b0240024020012003490d00200121060c010b200141017422062003200620034b1b22064100480d0a024020010d00200610332205450d0c0c010b20012006460d0020052001200610372205450d0b0b200520042003109d0821012000410c6a2003360200200041086a200636020020002001360204200041043602000c060b2001410c6a2802002203417f4c0d06200128020421040240024020030d0041002101410121050c010b200310332205450d08200321010b0240024020012003490d00200121060c010b200141017422062003200620034b1b22064100480d09024020010d00200610332205450d0b0c010b20012006460d0020052001200610372205450d0a0b200520042003109d0821012000410c6a2003360200200041086a200636020020002001360204200041053602000c050b20004106360200200020012902043702042000410c6a2001410c6a2802003602000c040b2001410c6a2802002205ad42187e2207422088a70d042007a72206417f4c0d04200128020421030240024020060d00410421010c010b200610332201450d060b20024100360228200220013602202002200641186e360224200241206a410020051097012002280228210402402005450d002003200541186c6a21062002280220200441186c6a2101200541037441786a4103762108200241086a410c6a21050340200241086a2003109f0320052003410c6a109f03200141106a200241086a41106a290300370200200141086a200241086a41086a29030037020020012002290308370200200141186a2101200341186a22032006470d000b200420086a41016a21040b200241106a20043602002002200229032022073703082000410c6a200436020020002007370204200041073602000c030b2001410c6a2802002204ad420c7e2207422088a70d032007a72206417f4c0d03200128020421030240024020060d00410421010c010b200610332201450d050b200241003602282002200136022020022006410c6e360224200241206a410020041087012002280228210502402004450d002004410c6c210620022802202005410c6c6a21012004410274417c6a41027621040340200241086a2003109f03200141086a200241086a41086a280200360200200120022903083702002001410c6a21012003410c6a2103200641746a22060d000b200520046a41016a21050b200241086a41086a20053602002002200229032022073703082000410c6a200536020020002007370204200041083602000c020b2001410c6a2802002203417f4c0d02200128020421040240024020030d0041002101410121050c010b200310332205450d04200321010b0240024020012003490d00200121060c010b200141017422062003200620034b1b22064100480d05024020010d00200610332205450d070c010b20012006460d0020052001200610372205450d060b200520042003109d0821012000410c6a2003360200200041086a200636020020002001360204200041093602000c010b2000410a3602000b200241306a24000f0b1044000b1045000b103e000b103c000ba10e03027f017e177f230041a0016b22022400024002400240024020012802082203ad42f0007e2204422088a70d002004a72205417f4c0d00200128020021060240024020050d00410421010c010b200510332201450d020b20024100360208200220013602002002200541f0006e3602042002410020031093012002280208210502402003450d002006200341f0006c6a21072002280200200541f0006c6a21082005200341047441706a4104766a21090340200241d0006a41086a220a200641186a290000370300200241d0006a41106a220b200641206a290000370300200241d0006a41186a220c200641286a290000370300200241306a41086a220d200641386a29000037030020062900102104200241306a41106a220e200641c0006a290000370300200241306a41186a220f200641c8006a290000370300200241106a41186a2210200641e8006a290000370300200241106a41106a2211200641e0006a290000370300200241106a41086a2212200641d8006a290000370300200220043703502002200629003037033020022006290050370310200628020c2205ad42247e2204422088a70d022004a72203417f4c0d0220062802002113200628020421140240024020030d00410421010c010b200310332201450d040b20024100360278200220013602702002200341246e360274200241f0006a41002005108d012002280278211502402005450d00200541246c21162002280270201541246c6a211741002101034002400240024002400240024002400240201420016a22032d00000e06010203040500010b2003410c6a2802002218417f4c0d0b200341046a28020021190240024020180d0041002103410121050c010b201810332205450d0d201821030b0240024020032018490d002003211a0c010b2003410174221a2018201a20184b1b221a4100480d0e024020030d00201a103322050d010c100b2003201a460d0020052003201a10372205450d0f0b2002200520192018109d0836009301410521190c050b2002200341046a28000036009b012002200341016a280000360298012002200341146a290000370380012002200341196a290000370085012002200228029801360290012002200228009b0136009301200341086a280000211a2003410c6a2800002118200341106a2800002105410021190c050b200341106a2802002205417f4c0d09200341086a2802002119200341016a280000211b0240024020050d00410021034101211a0c010b20051033221a450d0b200521030b0240024020032005490d00200321180c010b200341017422182005201820054b1b22184100480d0c024020030d0020181033221a450d0e0c010b20032018460d00201a200320181037221a450d0d0b201a20192005109d081a2002201b36029001410121190c040b200341106a2802002205417f4c0d08200341086a2802002119200341016a280000211b0240024020050d00410021034101211a0c010b20051033221a450d0a200521030b0240024020032005490d00200321180c010b200341017422182005201820054b1b22184100480d0b024020030d0020181033221a450d0d0c010b20032018460d00201a200320181037221a450d0c0b201a20192005109d081a2002201b36029001410221190c030b200341106a2802002205417f4c0d07200341086a2802002119200341016a280000211b0240024020050d00410021034101211a0c010b20051033221a450d09200521030b0240024020032005490d00200321180c010b200341017422182005201820054b1b22184100480d0a024020030d0020181033221a450d0c0c010b20032018460d00201a200320181037221a450d0b0b201a20192005109d081a2002201b36029001410321190c020b410421192002200341046a280200360093012003410c6a2802002118200341086a280200211a0b0b201720016a220320193a0000200341016a200228029001360000200341046a200228009301360000200341106a20053602002003410c6a2018360200200341086a201a360200200341146a2002290380013702002003411c6a20024180016a41086a290300370200201541016a21152016200141246a2201470d000b0b20024180016a41086a2015360200200220022903702204370380012008410c6a20153602002008200437020420082002290350370210200841186a200a29030037020020082013360200200841206a200b290300370200200841286a200c29030037020020082002290330370230200841386a200d290300370200200841c0006a200e290300370200200841c8006a200f290300370200200841e8006a2010290300370200200841e0006a2011290300370200200841d8006a201229030037020020082002290310370250200841f0006a2108200641f0006a22062007470d000b200941016a21050b20002002290300370200200041086a2005360200200241a0016a24000f0b1044000b1045000b103e000b103c000bc80101047f02400240024020012802082202417f4c0d00200128020021030240024020020d0041002101410121040c010b200210332204450d02200221010b0240024020012002490d00200121050c010b02400240200141017422052002200520024b1b22054100480d00024020010d002005103322040d030c060b20012005470d01200121050c020b103e000b20042001200510372204450d030b200420032002109d0821012000200236020820002005360204200020013602000f0b1044000b1045000b103c000bc01203037f027e027f230041106b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a2203411c4b0d0020030e1d0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d010b41cfa2cc00412841c086cc00103f000b200041013a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c1c0b200041023a0000200041046a200141046a2802003602000c1b0b200141046a28020021044101210302400240200141086a2d00004101470d00200141286a2903002105200141206a29030021060c010b200141096a2d000041017121072001410a6a2d00002108410021030b200041033a0000200041286a2005370300200041206a2006370300200041106a20012903103703002000410a6a20083a0000200041096a20073a0000200041086a20033a0000200041046a20043602002000410b6a2002280006360000200041186a200141186a2903003703002000410f6a200241066a41046a2d00003a00000c1a0b200141046a28020021044101210302400240200141086a2d00004101470d00200141286a2903002105200141206a29030021060c010b200141096a2d000041017121072001410a6a2d00002108410021030b200041043a0000200041286a2005370300200041206a2006370300200041106a20012903103703002000410a6a20083a0000200041096a20073a0000200041086a20033a0000200041046a20043602002000410b6a200228000b360000200041186a200141186a2903003703002000410f6a2002410b6a41046a2d00003a00000c190b200041053a0000200041046a200141046a2802003602000c180b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c170b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c160b200041083a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c150b200041093a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2902003702000c140b2000410a3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c130b2000410b3a0000200041046a200141046a2802003602000c120b2000410c3a0000200041046a200141046a2802003602000c110b2000410d3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c100b2000410e3a00000c0f0b2000410f3a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0e0b200041103a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c0d0b200041113a00000c0c0b200041123a00000c0b0b2001410c6a2802002203417f4c0d0b200141046a28020021070240024020030d0041002101410121080c010b200310332208450d0d200321010b0240024020012003490d00200121040c010b200141017422042003200420034b1b22044100480d0e024020010d002004103322080d010c100b20012004460d0020082001200410372208450d0f0b200820072003109d0821012000410c6a2003360200200041086a2004360200200041046a2001360200200041133a00000c0a0b2001410c6a2802002203417f4c0d0a200141046a28020021070240024020030d0041002101410121080c010b200310332208450d0c200321010b0240024020012003490d00200121040c010b200141017422042003200420034b1b22044100480d0d024020010d00200410332208450d0f0c010b20012004460d0020082001200410372208450d0e0b200820072003109d0821012000410c6a2003360200200041086a2004360200200041046a2001360200200041143a00000c090b200041153a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c080b200041163a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c070b200041173a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c060b200041183a0000200041046a200141046a2802003602000c050b200041193a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000c040b2000411a3a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c030b2000411b3a00000c020b2000411c3a0000200041046a200141046a2802003602000c010b2000411d3a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000b200241106a24000f0b1044000b1045000b103e000b103c000bcd0601097f230041306b22022400024002400240024002400240024002400240024020012d0000417f6a220341044b0d0020030e050102030405010b41cfa2cc00412841c086cc00103f000b2001412c6a280200220441ffffff3f712004470d0520044105742205417f4c0d05200141246a28020021060240024020050d00410121070c010b200510332207450d070b41002103200241003602182002200736021020022005410576360214200241106a41002004108a012002280218210802402004450d0020044105742109200228021020084105746a210a0340200a20036a2205200620036a2207290000370000200541186a200741186a290000370000200541106a200741106a290000370000200541086a200741086a2900003700002009200341206a2203470d000b200441057441606a41057620086a41016a21080b200241086a220520083602002002200229031037030041002103024020012d00014101470d00200241286a2001411a6a290000370300200241206a200141126a290000370300200241106a41086a2001410a6a2900003703002002200141026a290000370310410121030b200020033a0001200041013a0000200041246a2002290300370200200041026a20022903103700002000412c6a20052802003602002000410a6a200241106a41086a290300370000200041126a200241206a2903003700002000411a6a200241286a2903003700000c040b41b00210332203450d062003200141046a280200109b03200041023a0000200041046a20033602000c030b200141046a280200210541b00210332203450d052003200141086a280200109b03200041086a2003360200200041046a2005360200200041033a00000c020b200041043a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a280200360200200041216a200141216a2d00004100473a00000c010b200041053a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041246a200141246a2802003602000b200241306a24000f0b1044000b1045000b103c000ba60602087f017e230041206b220224000240024002400240024002400240024002400240024020012d0000417f6a220341064b0d0020030e0701020304050607010b41cfa2cc00412841c086cc00103f000b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c060b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c050b200041033a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c040b2001410c6a280200220441ffffff3f712004470d0420044105742203417f4c0d04200141046a28020021050240024020030d00410121060c010b200310332206450d060b41002101200241003602182002200636021020022003410576360214200241106a41002004108a012002280218210702402004450d0020044105742108200228021020074105746a21090340200920016a2203200520016a2206290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002008200141206a2201470d000b200441057441606a41057620076a41016a21070b200241086a200736020020022002290310220a3703002000410c6a2007360200200041046a200a370200200041043a00000c030b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c020b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c010b200041073a00000b200241206a24000f0b1044000b1045000bc30903027f027e047f230041206b220224000240024002400240024002400240024002400240024002400240024020012d0000417f6a220341074b0d0020030e080102030405060708010b41cfa2cc00412841c086cc00103f000b200141306a2903002104200141286a29030021054101210302400240200141046a2d00004101470d00200141086a28020021010c010b2002411e6a200141076a2d00003a0000200241086a200141146a290000370300200241106a2001411c6a290000370300200241186a200141246a2d00003a00002002200141056a2f00003b011c20022001410c6a290000370300200141086a2800002101410021030b200041013a0000200041306a2004370300200041286a2005370300200041046a20033a0000200041056a20022f011c3b0000200041086a20013602002000410c6a2002290300370200200041076a2002411e6a2d00003a0000200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a2802003602000c070b200041023a0000200041046a200141046a2802003602000c060b200041033a0000200041046a200141046a2802003602000c050b2001412c6a2802002203417f4c0d05200141246a28020021060240024020030d0041002107410121080c010b200310332208450d07200321070b0240024020072003490d00200721090c010b200741017422092003200920034b1b22094100480d08024020070d002009103322080d010c0a0b20072009460d0020082007200910372208450d090b200820062003109d0821072000412c6a2003360200200041286a2009360200200041246a2007360200200041043a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c040b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c030b2001412c6a2802002203417f4c0d03200141246a28020021060240024020030d0041002107410121080c010b200310332208450d05200321070b0240024020072003490d00200721090c010b200741017422092003200920034b1b22094100480d06024020070d00200910332208450d080c010b20072009460d0020082007200910372208450d070b200820062003109d0821072000412c6a2003360200200041286a2009360200200041246a2007360200200041063a0000200041386a200141386a290300370300200041306a200129033037030020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c020b200041073a000020002001290001370001200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c010b200041083a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241206a24000f0b1044000b1045000b103e000b103c000bd20e03027f107e057f230041c0006b220224000240024002400240024002400240024002400240024020012d0000417f6a220341044b0d0020030e050102030405010b41cfa2cc00412841c086cc00103f000b20014190016a2d00002103200141086a2903002104200141106a2903002105200141186a2903002106200141206a2903002107200141286a2903002108200141306a2903002109200141386a290300210a200141c0006a290300210b200141c8006a290300210c200141d0006a290300210d200141d8006a290300210e200141e0006a290300210f200141e8006a2903002110200141f0006a2903002111200141f8006a290300211220014180016a290300211320004188016a20014188016a29030037030020004180016a2013370300200041f8006a2012370300200041f0006a2011370300200041e8006a2010370300200041e0006a200f370300200041d8006a200e370300200041d0006a200d370300200041c8006a200c370300200041c0006a200b370300200041386a200a370300200041306a2009370300200041286a2008370300200041206a2007370300200041186a2006370300200041106a2005370300200041086a200437030020004190016a20034100473a0000200041013a000020004194016a200241236a28000036000020004191016a20022800203600000c040b2001410c6a2802002203417f4c0d04200141046a28020021140240024020030d0041002101410121150c010b200310332215450d06200321010b0240024020012003490d00200121160c010b200141017422162003201620034b1b22164100480d07024020010d002016103322150d010c090b20012016460d0020152001201610372215450d080b201520142003109d0821012000410c6a2003360200200041086a2016360200200041046a2001360200200041023a00000c030b4101211502400240200141046a2d00004101470d00200141086a28020021170c010b200241026a200141076a2d00003a0000200241206a41086a200141146a290000370300200241306a2001411c6a290000370300200241386a200141246a2d00003a00002002200141056a2f00003b010020022001410c6a290000370320200141086a2800002117410021150b200141306a2802002203417f4c0d03200141c0006a29030021042001290338210520012802282118200129034821060240024020030d0041002101410121140c010b200310332214450d05200321010b0240024020012003490d00200121160c010b200141017422162003201620034b1b22164100480d06024020010d00201610332214450d080c010b20012016460d0020142001201610372214450d070b201420182003109d082101200041c0006a2004370300200041386a2005370300200041046a20153a0000200041086a2017360200200041c8006a2006370300200041306a20033602002000412c6a2016360200200041286a2001360200200041056a20022f01003b0000200041076a200241026a2d00003a00002000410c6a2002290320370200200041146a200241206a41086a2903003702002000411c6a200241306a290300370200200041246a200241386a280200360200200041033a00000c020b200141386a2903002104200141306a2903002105200141c0006a2903002106200241386a200141196a290000370300200241306a200141116a290000370300200241286a200141096a290000370300200220012900013703202001412c6a2802002203417f4c0d02200141246a28020021140240024020030d0041002101410121150c010b200310332215450d04200321010b0240024020012003490d00200121160c010b200141017422162003201620034b1b22164100480d05024020010d00201610332215450d070c010b20012016460d0020152001201610372215450d060b201520142003109d082101200041386a2004370300200041306a2005370300200041c0006a20063703002000412c6a2003360200200041286a2016360200200041246a2001360200200041043a000020002002290320370001200041096a200241286a290300370000200041116a200241306a290300370000200041196a200241386a2903003700000c010b200241186a2216200141196a290000370300200241106a2215200141116a290000370300200241086a2214200141096a29000037030020022001290001370300410021030240200141216a2d00004101470d00200241206a41186a2001413a6a290000370300200241206a41106a200141326a290000370300200241206a41086a2001412a6a2900003703002002200141226a290000370320410121030b20002002290300370001200041216a20033a0000200041226a2002290320370000200041196a2016290300370000200041116a2015290300370000200041096a20142903003700002000412a6a200241206a41086a290300370000200041326a200241206a41106a2903003700002000413a6a200241206a41186a290300370000200041053a00000b200241c0006a24000f0b1044000b1045000b103e000b103c000b890501047f230041206b220224000240024002400240024002402001280200417f6a220341024b0d0020030e03010203010b41cfa2cc00412841c086cc00103f000b41b00210332203450d032003200128020410d10620004101360200200020033602040c020b410121030240024020012d00044101470d00200141086a28020021010c010b2002411e6a200141046a220341036a2d00003a0000200241086a200141146a290200370300200241106a2001411c6a290200370300200241186a200141246a2d00003a0000200220032f00013b011c20022001410c6a290200370300200141086a2802002101410021030b200020033a0004200020022f011c3b000520004102360200200041086a20013602002000410c6a2002290300370200200041076a2002411c6a41026a2d00003a0000200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a2802003602000c010b410121040240024020012d00044101470d00200141086a28020021050c010b2002411e6a200141046a220341036a2d00003a0000200241086a200141146a290200370300200241106a2001411c6a290200370300200241186a200141246a2d00003a0000200220032f00013b011c20022001410c6a290200370300200141086a2802002105410021040b41b00210332203450d012003200128022810d106200020043a0004200041086a2005360200200041286a200336020020004103360200200020022f011c3b0005200041076a2002411e6a2d00003a00002000410c6a2002290300370200200041146a200241086a2903003702002000411c6a200241106a290300370200200041246a200241186a2802003602000b200241206a24000f0b103c000b920203027f017e037f230041206b220224000240024020012802082203ad420c7e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410421060c010b200510332206450d020b200241003602082002200636020020022005410c6e3602042002410020031087012002280208210702402003450d002003410c6c210620022802002007410c6c6a21052003410274417c6a41027621030340200241106a2001109f03200541086a200241106a41086a280200360200200520022903103702002005410c6a21052001410c6a2101200641746a22060d000b200720036a41016a21070b20002002290300370200200041086a2007360200200241206a24000f0b1044000b1045000b110041cfa2cc00412841c086cc00103f000bc95704027f017e3a7f017e230041e0036b220224000240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a2203410a4b0d0020030e0b0102030405060708090a0b010b41cfa2cc00412841c086cc00103f000b200041013a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c0a0b2001410c6a2802002203ad42c8007e2204422088a70d0a2004a72205417f4c0d0a200141046a28020021060240024020050d00410421070c010b200510332207450d0c0b200241003602d003200220073602c8032002200541c8006e3602cc03200241c8036a4100200310a80120022802d003210802402003450d002006200341c8006c6a210920022802c803200841c8006c6a210a4100210703404100210b4100210c024002400240024002400240200620076a22052d00000e06050102030400050b20024188026a41086a200541186a29000037030020024188026a41106a200541206a2d00003a00002002200541036a2d00003a009a032002200541016a2f00003b0198032002200541106a290000370388022005410c6a280000210d200541086a280000210e200541046a280000210f4105210c0c040b2005410c6a280200220d417f4c0d10200541046a280200210c02400240200d0d00410021034101210f0c010b200d1033220f450d12200d21030b024002402003200d490d002003210e0c010b2003410174220e200d200e200d4b1b220e4100480d13024020030d00200e1033220f0d010c150b2003200e460d00200f2003200e1037220f450d140b200f200c200d109d081a4101210c0c030b20024188026a41086a200541186a29000037030020024188026a41106a200541206a2d00003a00002002200541036a2d00003a009a032002200541016a2f00003b0198032002200541106a290000370388022005410c6a280000210d200541086a280000210e200541046a280000210f4102210c0c020b20024188026a41086a200541186a29000037030020024188026a41106a200541206a2d00003a00004103210c2002200541036a2d00003a009a032002200541016a2f00003b0198032002200541106a290000370388022005410c6a280000210d200541086a280000210e200541046a280000210f0c010b20024188026a41086a200541186a29000037030020024188026a41106a200541206a2d00003a00002002200541036a2d00003a009a032002200541016a2f00003b0198032002200541106a290000370388022005410c6a280000210d200541086a280000210e4104210c200541046a280000210f0b024002400240024002400240200541246a2d00000e06050102030400050b200241e8026a41026a200541276a2d00003a0000200241086a41086a2005413c6a290000370300200241086a41106a200541c4006a2d00003a00002002200541256a2f00003b01e8022002200541346a290000370308200541306a28000021102005412c6a2800002111200541286a28000021124105210b0c040b200541306a2802002210417f4c0d10200541286a280200210b0240024020100d0041002103410121120c010b201010332212450d12201021030b0240024020032010490d00200321110c010b200341017422112010201120104b1b22114100480d13024020030d00201110332212450d150c010b20032011460d0020122003201110372212450d140b2012200b2010109d081a4101210b0c030b4102210b200241e8026a41026a200541276a2d00003a0000200241086a41086a2005413c6a290000370300200241086a41106a200541c4006a2d00003a00002002200541256a2f00003b01e8022002200541346a290000370308200541306a28000021102005412c6a2800002111200541286a28000021120c020b200241e8026a41026a200541276a2d00003a0000200241086a41086a2005413c6a290000370300200241086a41106a200541c4006a2d00003a00002002200541256a2f00003b01e8022002200541346a290000370308200541306a28000021102005412c6a2800002111200541286a28000021124103210b0c010b200241e8026a41026a200541276a2d00003a0000200241086a41086a2005413c6a290000370300200241086a41106a200541c4006a2d00003a00002002200541256a2f00003b01e8022002200541346a290000370308200541306a28000021102005412c6a2800002111200541286a28000021124104210b0b200a20076a2203200c3a0000200341016a20022f0198033b0000200341036a20022d009a033a00002003410c6a200d360000200341086a200e360000200341046a200f360000200341106a200229038802370000200341216a20022f0080033b0000200341186a20024188026a41086a290300370000200341206a20024188026a41106a2d00003a0000200341236a20024180036a41026a2d00003a0000200341246a200b3a0000200341286a20123600002003412c6a2011360000200341306a2010360000200341256a20022f01e8023b0000200341276a200241e8026a41026a2d00003a0000200341346a20022903083700002003413c6a200241086a41086a290300370000200341c4006a200241086a41106a2d00003a0000200341c5006a20022f00b0033b0000200341c7006a200241b0036a41026a2d00003a0000200741c8006a2107200841016a2108200541c8006a2009470d000b0b200241a8026a41086a2008360200200220022903c8033703a8024100211341002114024002400240024002400240200141106a2d00000e06050102030400050b200241cc026a200141136a2d00003a0000200241b8026a41086a200141286a290000370300200241b8026a41106a200141306a2d00003a00002002200141116a2f00003b01ca022002200141206a2900003703b8022001411c6a2800002103200141186a280000210a200141146a2800002108410521140c040b2001411c6a2802002203417f4c0d0e200141146a28020021070240024020030d0041002105410121080c010b200310332208450d10200321050b0240024020052003490d002005210a0c010b2005410174220b2003200b20034b1b220a4100480d11024020050d00200a10332208450d130c010b2005200a460d0020082005200a10372208450d120b200820072003109d081a410121140c030b41022114200241ca026a41026a200141136a2d00003a0000200241b8026a41086a200141286a290000370300200241b8026a41106a200141306a2d00003a00002002200141116a2f00003b01ca022002200141206a2900003703b8022001411c6a2800002103200141186a280000210a200141146a28000021080c020b200241cc026a200141136a2d00003a0000200241b8026a41086a200141286a290000370300200241b8026a41106a200141306a2d00003a00002002200141116a2f00003b01ca022002200141206a2900003703b8022001411c6a2800002103200141186a280000210a200141146a2800002108410321140c010b200241cc026a200141136a2d00003a0000200241b8026a41086a200141286a290000370300200241b8026a41106a200141306a2d00003a00002002200141116a2f00003b01ca022002200141206a2900003703b8022001411c6a2800002103200141186a280000210a200141146a2800002108410421140b024002400240024002400240200141346a2d00000e06050102030400050b200241e4026a200141376a2d00003a0000200241d8026a200141cc006a290000370300200241e0026a200141d4006a2d00003a00002002200141356a2f00003b01e2022002200141c4006a2900003703d002200141c0006a28000021052001413c6a2800002115200141386a280000210f410521130c040b200141c0006a2802002205417f4c0d0e200141386a280200210b0240024020050d00410021074101210f0c010b20051033220f450d10200521070b0240024020072005490d00200721150c010b2007410174220c2005200c20054b1b22154100480d11024020070d0020151033220f450d130c010b20072015460d00200f200720151037220f450d120b200f200b2005109d081a410121130c030b41022113200241e2026a41026a200141376a2d00003a0000200241d8026a200141cc006a290000370300200241e0026a200141d4006a2d00003a00002002200141356a2f00003b01e2022002200141c4006a2900003703d002200141c0006a28000021052001413c6a2800002115200141386a280000210f0c020b200241e4026a200141376a2d00003a0000200241d8026a200141cc006a290000370300200241e0026a200141d4006a2d00003a00002002200141356a2f00003b01e2022002200141c4006a2900003703d002200141c0006a28000021052001413c6a2800002115200141386a280000210f410321130c010b200241e4026a200141376a2d00003a0000200241d8026a200141cc006a290000370300200241e0026a200141d4006a2d00003a00002002200141356a2f00003b01e2022002200141c4006a2900003703d002200141c0006a28000021052001413c6a2800002115200141386a280000210f410421130b4100211641002117024002400240024002400240200141d8006a2d00000e06050102030400050b200241fc026a200141db006a2d00003a0000200241f0026a200141f0006a290000370300200241f8026a200141f8006a2d00003a00002002200141d9006a2f00003b01fa022002200141e8006a2900003703e802200141e4006a2800002107200141e0006a2800002118200141dc006a2800002112410521170c040b200141e4006a2802002207417f4c0d0e200141dc006a280200210c0240024020070d004100210b410121120c010b200710332212450d102007210b0b02400240200b2007490d00200b21180c010b200b410174220d2007200d20074b1b22184100480d110240200b0d00201810332212450d130c010b200b2018460d002012200b201810372212450d120b2012200c2007109d081a410121170c030b41022117200241fa026a41026a200141db006a2d00003a0000200241f0026a200141f0006a290000370300200241f8026a200141f8006a2d00003a00002002200141d9006a2f00003b01fa022002200141e8006a2900003703e802200141e4006a2800002107200141e0006a2800002118200141dc006a28000021120c020b200241fc026a200141db006a2d00003a0000200241f0026a200141f0006a290000370300200241f8026a200141f8006a2d00003a00002002200141d9006a2f00003b01fa022002200141e8006a2900003703e802200141e4006a2800002107200141e0006a2800002118200141dc006a2800002112410321170c010b200241fc026a200141db006a2d00003a0000200241f0026a200141f0006a290000370300200241f8026a200141f8006a2d00003a00002002200141d9006a2f00003b01fa022002200141e8006a2900003703e802200141e4006a2800002107200141e0006a2800002118200141dc006a2800002112410421170b024002400240024002400240200141fc006a2d00000e06050102030400050b20024194036a200141ff006a2d00003a000020024188036a20014194016a29000037030020024190036a2001419c016a2d00003a00002002200141fd006a2f00003b01920320022001418c016a2900003703800320014188016a280000210b20014184016a280000211920014180016a280000210e410521160c040b20014188016a280200220b417f4c0d0e20014180016a280200210d02400240200b0d004100210c4101210e0c010b200b1033220e450d10200b210c0b02400240200c200b490d00200c21190c010b200c4101742210200b2010200b4b1b22194100480d110240200c0d0020191033220e450d130c010b200c2019460d00200e200c20191037220e450d120b200e200d200b109d081a410121160c030b4102211620024192036a41026a200141ff006a2d00003a000020024188036a20014194016a29000037030020024190036a2001419c016a2d00003a00002002200141fd006a2f00003b01920320022001418c016a2900003703800320014188016a280000210b20014184016a280000211920014180016a280000210e0c020b20024194036a200141ff006a2d00003a000020024188036a20014194016a29000037030020024190036a2001419c016a2d00003a00002002200141fd006a2f00003b01920320022001418c016a2900003703800320014188016a280000210b20014184016a280000211920014180016a280000210e410321160c010b20024194036a200141ff006a2d00003a000020024188036a20014194016a29000037030020024190036a2001419c016a2d00003a00002002200141fd006a2f00003b01920320022001418c016a2900003703800320014188016a280000210b20014184016a280000211920014180016a280000210e410421160b4100211a4100211b024002400240024002400240200141a0016a2d00000e06050102030400050b200241ac036a200141a3016a2d00003a0000200241a0036a200141b8016a290000370300200241a8036a200141c0016a2d00003a00002002200141a1016a2f00003b01aa032002200141b0016a29000037039803200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114105211b0c040b200141ac016a280200220c417f4c0d0e200141a4016a280200211002400240200c0d004100210d410121110c010b200c10332211450d10200c210d0b02400240200d200c490d00200d211c0c010b200d4101742206200c2006200c4b1b221c4100480d110240200d0d00201c10332211450d130c010b200d201c460d002011200d201c10372211450d120b20112010200c109d081a4101211b0c030b4102211b200241aa036a41026a200141a3016a2d00003a0000200241a0036a200141b8016a290000370300200241a8036a200141c0016a2d00003a00002002200141a1016a2f00003b01aa032002200141b0016a29000037039803200141ac016a280000210c200141a8016a280000211c200141a4016a28000021110c020b200241ac036a200141a3016a2d00003a0000200241a0036a200141b8016a290000370300200241a8036a200141c0016a2d00003a00002002200141a1016a2f00003b01aa032002200141b0016a29000037039803200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114103211b0c010b200241ac036a200141a3016a2d00003a0000200241a0036a200141b8016a290000370300200241a8036a200141c0016a2d00003a00002002200141a1016a2f00003b01aa032002200141b0016a29000037039803200141ac016a280000210c200141a8016a280000211c200141a4016a28000021114104211b0b02402001418c026a2d00004101470d0020024198026a2001419d026a28000036020020024190026a20014195026a29000037030020022001418d026a290000370388024101211a0b4100211d4100211e024002400240024002400240200141c4016a2d00000e06050102030400050b200241c4036a200141c7016a2d00003a0000200241b8036a200141dc016a290000370300200241c0036a200141e4016a2d00003a00002002200141c5016a2f00003b01c2032002200141d4016a2900003703b003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064105211e0c040b200141d0016a280200220d417f4c0d0e200141c8016a280200210902400240200d0d0041002110410121060c010b200d10332206450d10200d21100b024002402010200d490d002010211f0c010b2010410174221f200d201f200d4b1b221f4100480d11024020100d00201f10332206450d130c010b2010201f460d0020062010201f10372206450d120b20062009200d109d081a4101211e0c030b4102211e200241c2036a41026a200141c7016a2d00003a0000200241b8036a200141dc016a290000370300200241c0036a200141e4016a2d00003a00002002200141c5016a2f00003b01c2032002200141d4016a2900003703b003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021060c020b200241c4036a200141c7016a2d00003a0000200241b8036a200141dc016a290000370300200241c0036a200141e4016a2d00003a00002002200141c5016a2f00003b01c2032002200141d4016a2900003703b003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064103211e0c010b200241c4036a200141c7016a2d00003a0000200241b8036a200141dc016a290000370300200241c0036a200141e4016a2d00003a00002002200141c5016a2f00003b01c2032002200141d4016a2900003703b003200141d0016a280000210d200141cc016a280000211f200141c8016a28000021064104211e0b024002400240024002400240200141e8016a2d00000e06050102030400050b200241de036a200141eb016a2d00003a0000200241d0036a20014180026a290000370300200241d8036a20014188026a2d00003a00002002200141e9016a2f00003b01dc032002200141f8016a2900003703c803200141f4016a2800002110200141f0016a2800002120200141ec016a28000021094105211d0c040b200141f4016a2802002210417f4c0d0e200141ec016a280200211d0240024020100d0041002101410121090c010b201010332209450d10201021010b0240024020012010490d00200121200c010b200141017422202010202020104b1b22204100480d11024020010d00202010332209450d130c010b20012020460d0020092001202010372209450d120b2009201d2010109d081a4101211d0c030b4102211d200241dc036a41026a200141eb016a2d00003a0000200241d0036a20014180026a290000370300200241d8036a20014188026a2d00003a00002002200141e9016a2f00003b01dc032002200141f8016a2900003703c803200141f4016a2800002110200141f0016a2800002120200141ec016a28000021090c020b200241de036a200141eb016a2d00003a0000200241d0036a20014180026a290000370300200241d8036a20014188026a2d00003a00002002200141e9016a2f00003b01dc032002200141f8016a2900003703c803200141f4016a2800002110200141f0016a2800002120200141ec016a28000021094103211d0c010b200241de036a200141eb016a2d00003a0000200241d0036a20014180026a290000370300200241d8036a20014188026a2d00003a00002002200141e9016a2f00003b01dc032002200141f8016a2900003703c803200141f4016a2800002110200141f0016a2800002120200141ec016a28000021094104211d0b200241f8016a41086a2201200241a8026a41086a280200360200200241f4016a41026a2221200241ca026a41026a2d00003a0000200241e0016a41086a2222200241b8026a41086a290300370300200241e0016a41106a2223200241b8026a41106a2d00003a0000200241dc016a41026a2224200241b5026a41026a2d00003a0000200220022903a8023703f801200220022f01ca023b01f401200220022903b8023703e001200220022f00b5023b01dc01200241d8016a41026a2225200241e2026a41026a2d00003a0000200241c0016a41086a2226200241d0026a41086a290300370300200241c0016a41106a2227200241d0026a41106a2d00003a0000200241bc016a41026a2228200241cd026a41026a2d00003a0000200241b8016a41026a2229200241fa026a41026a2d00003a0000200220022f01e2023b01d801200220022903d0023703c001200220022f00cd023b01bc01200220022f01fa023b01b801200241a0016a41106a222a200241e8026a41106a2d00003a0000200241a0016a41086a222b200241e8026a41086a2903003703002002419c016a41026a222c200241e5026a41026a2d00003a000020024198016a41026a222d20024192036a41026a2d00003a000020024180016a41106a222e20024180036a41106a2d00003a000020024180016a41086a222f20024180036a41086a290300370300200220022903e8023703a001200220022f00e5023b019c01200220022f0192033b019801200220022903800337038001200241fc006a41026a2230200241fd026a41026a2d00003a0000200220022f00fd023b017c200241f8006a41026a2231200241aa036a41026a2d00003a0000200220022f01aa033b0178200241e0006a41106a223220024198036a41106a2d00003a0000200241e0006a41086a223320024198036a41086a2903003703002002200229039803370360200241dc006a41026a223420024195036a41026a2d00003a0000200220022f0095033b015c200241086a41106a223520024188026a41106a280200360200200241086a41086a223620024188026a41086a2903003703002002200229038802370308200241d8006a41026a2237200241c2036a41026a2d00003a0000200220022f01c2033b0158200241c0006a41106a2238200241b0036a41106a2d00003a0000200241c0006a41086a2239200241b0036a41086a290300370300200220022903b0033703402002413c6a41026a223a200241ad036a41026a2d00003a0000200220022f00ad033b013c200241386a41026a223b200241dc036a41026a2d00003a0000200220022f01dc033b0138200241206a41106a223c200241c8036a41106a2d00003a0000200241206a41086a223d200241c8036a41086a290300370300200220022903c8033703202002411c6a41026a223e200241c5036a41026a2d00003a0000200220022f00c5033b011c200041106a20143a00002000410c6a2001280200360200200041046a20022903f8013702002000411c6a2003360000200041186a200a360000200041146a2008360000200041116a20022f01f4013b0000200041136a20212d00003a0000200041206a20022903e001370000200041286a2022290300370000200041306a20232d00003a0000200041336a20242d00003a0000200041316a20022f01dc013b0000200041346a20133a0000200041376a20252d00003a0000200041356a20022f01d8013b0000200041c0006a20053600002000413c6a2015360000200041386a200f360000200041d4006a20272d00003a0000200041cc006a2026290300370000200041c4006a20022903c001370000200041d7006a20282d00003a0000200041d5006a20022f01bc013b0000200041d8006a20173a0000200041db006a20292d00003a0000200041d9006a20022f01b8013b0000200041e4006a2007360000200041e0006a2018360000200041dc006a2012360000200041f8006a202a2d00003a0000200041f0006a202b290300370000200041e8006a20022903a001370000200041fb006a202c2d00003a0000200041f9006a20022f019c013b0000200041fc006a20163a0000200041ff006a202d2d00003a0000200041fd006a20022f0198013b000020004188016a200b36000020004184016a201936000020004180016a200e3600002000419c016a202e2d00003a000020004194016a202f2903003700002000418c016a2002290380013700002000419f016a20302d00003a00002000419d016a20022f017c3b0000200041a0016a201b3a0000200041a3016a20312d00003a0000200041a1016a20022f01783b0000200041ac016a200c360000200041a8016a201c360000200041a4016a2011360000200041c0016a20322d00003a0000200041b8016a2033290300370000200041b0016a2002290360370000200041c3016a20342d00003a0000200041c1016a20022f015c3b0000200041c4016a201e3a0000200041c7016a20372d00003a0000200041c5016a20022f01583b0000200041d0016a200d360000200041cc016a201f360000200041c8016a2006360000200041e4016a20382d00003a0000200041dc016a2039290300370000200041d4016a2002290340370000200041e7016a203a2d00003a0000200041e5016a20022f013c3b0000200041e8016a201d3a0000200041eb016a203b2d00003a0000200041e9016a20022f01383b0000200041f4016a2010360000200041f0016a2020360000200041ec016a200936000020004188026a203c2d00003a000020004180026a203d290300370000200041f8016a20022903203700002000418b026a203e2d00003a000020004189026a20022f011c3b00002000418c026a201a3a00002000419d026a203528020036000020004195026a20362903003700002000418d026a2002290308370000200041a3026a20024188026a41026a2d00003a0000200041a1026a20022f0088023b0000200041023a00000c090b2001410c6a2802002203ad42c4007e2204422088a70d092004a72205417f4c0d09200141046a28020021060240024020050d00410421070c010b200510332207450d0b0b41002101200241003602b803200220073602b0032002200541c4006e3602b403200241b0036a41002003109f0120022802b803210b02402003450d002006200341c4006c6a210920022802b003200b41c4006c6a210a20024188026a41086a210c20024188026a41106a210d0340200c200620016a220541176a290000370300200d2005411f6a2d00003a0000200220052f01003b0198032002200541026a2d00003a009a0320022005410f6a290000370388022005410b6a2800002110200541076a2800002108200541036a280000210f41002107024002400240024002400240200541206a2d00000e06050102030400050b200241e8026a41026a200541236a2d00003a0000200241086a41086a200541386a290000370300200241086a41106a200541c0006a2d00003a00002002200541216a2f00003b01e8022002200541306a2900003703082005412c6a2800002111200541286a280000210e200541246a2800002112410521070c040b200241c8036a200541246a109f0320022802d003211120022802cc03210e20022802c8032112410121070c030b41022107200241e8026a41026a200541236a2d00003a0000200241086a41086a200541386a290000370300200241086a41106a200541c0006a2d00003a00002002200541216a2f00003b01e8022002200541306a2900003703082005412c6a2800002111200541286a280000210e200541246a28000021120c020b200241e8026a41026a200541236a2d00003a0000200241086a41086a200541386a290000370300200241086a41106a200541c0006a2d00003a00002002200541216a2f00003b01e8022002200541306a2900003703082005412c6a2800002111200541286a280000210e200541246a2800002112410321070c010b200241e8026a41026a200541236a2d00003a0000200241086a41086a200541386a290000370300200241086a41106a200541c0006a2d00003a00002002200541216a2f00003b01e8022002200541306a2900003703082005412c6a2800002111200541286a280000210e200541246a2800002112410421070b200a20016a220320022f0198033b0100200341026a20022d009a033a00002003410b6a2010360000200341076a2008360000200341036a200f3600002003410f6a200229038802370000200341176a200c2903003700002003411f6a200d2d00003a0000200341206a20073a0000200341216a20022f01e8023b0000200341236a200241e8026a41026a2d00003a00002003412c6a2011360000200341286a200e360000200341246a2012360000200341306a2002290308370000200341386a200241086a41086a290300370000200341c0006a200241086a41106a2d00003a0000200341c1006a20022f0080033b0000200341c3006a20024180036a41026a2d00003a0000200141c4006a2101200b41016a210b200541c4006a2009470d000b0b20024190026a200b360200200220022903b0032204370388022000410c6a200b360200200041046a2004370200200041033a00000c080b200041043a00000c070b200041053a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c060b200041063a0000200041046a200141046a2802003602000c050b200041073a0000200041106a200141106a290300370300200041086a200141086a290300370300200041046a200141046a2802003602000c040b200041083a000020002001290001370001200041246a200141246a280200360200200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c030b200041093a0000200041086a200141086a290300370300200041046a200141046a2802003602000c020b200141046a28020021054101210302400240200141086a2d00004101470d002001410c6a28020021070c010b2002410a6a2001410b6a2d00003a000020024188026a41086a200141186a29000037030020024188026a41106a200141206a29000037030020024188026a41186a200141286a2d00003a00002002200141096a2f00003b01082002200141106a290000370388022001410c6a2800002107410021030b200041086a20033a0000200041046a2005360200200041096a20022f01083b00002000410c6a2007360200200041106a2002290388023702002000410b6a2002410a6a2d00003a0000200041186a20024188026a41086a290300370200200041206a20024188026a41106a290300370200200041286a20024188026a41186a280200360200200141386a29030021042001350230213f200041c0006a200141c0006a290300370300200041386a2004370300200041306a203f3703002000410a3a00000c010b4101210302400240200141046a2d00004101470d00200141086a28020021050c010b2002410a6a200141076a2d00003a000020024188026a41086a200141146a29000037030020024198026a2001411c6a290000370300200241a0026a200141246a2d00003a00002002200141056a2f00003b010820022001410c6a29000037038802200141086a2800002105410021030b2000410b3a0000200041046a20033a0000200041056a20022f01083b0000200041086a20053602002000410c6a200229038802370200200041076a2002410a6a2d00003a0000200041146a20024188026a41086a2903003702002000411c6a20024198026a290300370200200041246a200241a0026a2802003602000b200241e0036a24000f0b1044000b1045000b103e000b103c000ba80901067f230041306b2202240002400240024002400240024002400240024002400240024002400240024002400240024020012d0000417f6a2203410b4b0d0020030e0c0102030405060708090a0b0c010b41cfa2cc00412841c086cc00103f000b200041013a0000200041106a200141106a290300370300200041086a200141086a2903003703000c0b0b200041023a0000200041046a200141046a2802003602000c0a0b200041033a000020002001290001370001200041c0006a200141c0006a290300370300200041386a200141386a290300370300200041306a200141306a290300370300200041286a200141286a290300370300200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a2900003700000c090b200041043a0000200041046a200141046a2802003602000c080b4101210302400240200141046a2d00004101470d00200141086a28020021040c010b2002410e6a200141076a2d00003a0000200241106a41086a200141146a290000370300200241206a2001411c6a290000370300200241286a200141246a2d00003a00002002200141056a2f00003b010c20022001410c6a290000370310200141086a2800002104410021030b200041053a0000200041046a20033a0000200041056a20022f010c3b0000200041086a20043602002000410c6a2002290310370200200041076a2002410e6a2d00003a0000200041146a200241106a41086a2903003702002000411c6a200241206a290300370200200041246a200241286a280200360200200020012d00014100473a00010c070b200041063a0000200020012d00014100473a00010c060b200041073a00000c050b200241286a200141196a290000370300200241206a200141116a290000370300200241186a200141096a29000037030020022001290001370310200141306a2802002203417f4c0d05200141286a2802002105200141246a28020021060240024020030d0041002101410121070c010b200310332207450d07200321010b0240024020012003490d00200121040c010b200141017422042003200420034b1b22044100480d08024020010d002004103322070d010c0a0b20012004460d0020072001200410372207450d090b200720052003109d082101200041306a20033602002000412c6a2004360200200041286a2001360200200041246a2006360200200041083a0000200041196a200241286a290300370000200041116a200241206a290300370000200041096a200241106a41086a290300370000200020022903103700010c040b200041093a00000c030b2000410a3a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00004100473a00000c020b2000410b3a000020002001290001370001200041096a200141096a290000370000200041116a200141116a290000370000200041196a200141196a290000370000200041216a200141216a2d00003a00000c010b2000410c3a0000200041046a200141046a2802003602000b200241306a24000f0b1044000b1045000b103e000b103c000be90802097f017e230041306b220224000240024002400240024002400240024002400240024002400240024020012d0000417f6a220341084b0d0020030e09010203040506070809010b41cfa2cc00412841c086cc00103f000b200241186a2204200141196a290000370300200241106a2205200141116a290000370300200241086a2206200141096a2900003703002002200129000137030041b00210332203450d092003200141246a280200109b03200041246a2003360200200041013a0000200041196a2004290300370000200041116a2005290300370000200041096a2006290300370000200020022903003700010c080b200041023a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c070b2001410c6a280200220741ffffff3f712007470d0820074105742204417f4c0d08200141046a28020021060240024020040d00410121050c010b200410332205450d0a0b41002103200241003602082002200536020020022004410576360204200241002007108a012002280208210802402007450d0020074105742109200228020020084105746a210a0340200a20036a2204200620036a2205290000370000200441186a200541186a290000370000200441106a200541106a290000370000200441086a200541086a2900003700002009200341206a2203470d000b200741057441606a41057620086a41016a21080b200241286a200836020020022002290300220b370320200041046a200b3702002000410c6a2008360200200041033a0000200041106a2001280210360200200041026a20012f01023b01000c060b200041043a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c050b200041053a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a290000370000200041216a200141216a290000370000200041296a200141296a290000370000200041316a200141316a290000370000200041396a200141396a2900003700000c040b200041063a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c030b200041073a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000c020b200041083a00000c010b200041093a000020002001290001370001200041196a200141196a290000370000200041116a200141116a290000370000200041096a200141096a2900003700000b200241306a24000f0b103c000b1044000b1045000bda9b01070b7f017e097f027e037f017e177f230041a00a6b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341f4066a4101360200200342013702e406200341e8d4ca003602e0062003410436029c032003419cd5ca0036029803200320034198036a3602f006200341e0066a41b0b4cc00104c000b200341e8056a41026a2204200241076a2d00003a00002003200241056a2f00003b01e805200141046a28020022052001410c6a280200220641b0026c22076a2108200141086a280200210920052101024002402006450d00200241046a2d0000210a200241026a2f0100210b200241086a280200210c2002410c6a280200210d200241106a290200210e200241186a280200210f200241246a2d0000211020022d0001211120022d0000211220034198036a410272211320034198036a4105722114200741d07d6a2106200341bd036a2115200341c0066a4103722116200341e0066a41047221172002411c6a29020022184220882119200341de066a211a4100211b2005210103402001280200210220034198036a200141046a220741ac02109d081a200341e0066a200741ac02109d081a02402002411b470d00200141b0026a21010c2b0b200341e8006a200341e0066a41ac02109d081a200320023602e0062017200341e8006a41ac02109d081a024002400240024020120e03000102000b4102210202400240024020110e03000102000b410021020c010b201620032f01e8053b0000200320183e01da06201a20193d0100201641026a20042d00003a00002003200a3a00c2062003200b3b01c0062003200f3601d6062003200e3701ce062003200d3601ca062003200c3601c606410121020b201320032903c006370000201341086a200341c0066a41086a290300370000201341106a200341c0066a41106a290300370000201341186a200341c0066a41186a290300370000200320023a009903200341003a0098030c020b41022102024002400240200a0e03000102000b410021020c010b20034188066a41026a20042d00003a0000200320032f01e8053b018806410121020b201420032f0188063b0000201520032f00b8093b0000201441026a20034188066a41026a2d00003a0000201541026a200341b8096a41026a2d00003a0000200320023a009c03200320103a00bc03200320183702b4032003200f3602b0032003200e3703a8032003200d3602a4032003200c3602a003200341013a0098030c010b41022102024002400240200a0e03000102000b410021020c010b200341c4056a41026a20042d00003a0000200320032f01e8053b01c405201c41807e71201072211c410121020b201420032f01c4053b0000200341023a009803201441026a200341c4056a41026a2d00003a0000200320023a009c032003201c3602bc03200320183702b4032003200f3602b0032003200e3703a8032003200d3602a4032003200c3602a0030b20034190096a200341e0066a20034198036a10ac032003290390094201510d02201b41016a211b200641d07d6a2106200141b0026a22012008470d000b200821010b200341e0066a20034198036a41ac02109d081a0c280b20034198036a41186a200341b0096a290300220e37030020034198036a41106a20034190096a41186a290300221837030020034198036a41086a20034190096a41106a290300370300200320032903980937039803200341e0066a41086a201b360200200341ec066a2018370200200341f4066a200e3e0200200341003a00e406200341013a00e00641b0b4cc004100200341e0066a10d40102402006450d00200141b0026a21010340200110bb02200141b0026a2101200641d07d6a22060d000b0b2009450d28200941b0026c450d28200510350c280b41022106200141046a280200210820022d00000d0520022d00014101470d052002411a6a290100210e200241196a2d00002106200241186a2d00002107200241166a2f0100211b200241156a2d00002113200241146a2d00002114200241126a2f01002112200241116a2d00002117200241106a2d0000210a2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210f2002410a6a2f01002115200241096a2d0000211c200241086a2d00002110200241066a2f01002104200241056a2d00002105200241046a2d00002111200241026a2f01002102200141026a2f01002109411210332201450d03200141086a4100290085aa43370000200141002900fda94337000020014112413010372201450d042001200e370028200120063a0027200120073a00262001201b3b0024200120133a0023200120143a0022200120123b0020200120173a001f2001200a3a001e2001200c3b001c2001200d3a001b2001200f3a001a200120153b00182001201c3a0017200120103a0016200120043b0014200120053a0013200120113a0012200120023b00102001413041e00010372202450d04200220093b00302002ad4280808080a0068410092201290000210e200141086a2900002118200141106a2900002119200341c0066a41186a2206200141186a290000370300200341c0066a41106a22072019370300200341c0066a41086a221b20183703002003200e3703c0062001103520021035200341093a0080072003410a3a0080072003410b3a008007200320032f01c0063b01e006200320032801c2063601e206200320032f01c6063b01e6062003201b2f01003b01e806200320032d00ca063a00ea062003410c3a008007200320032d00cb063a00eb062003410d3a008007200320032d00cc063a00ec062003410e3a008007200320032d00cd063a00ed062003410f3a008007200320032d00ce063a00ee06200341103a008007200320032d00cf063a00ef06200341113a008007200320072d00003a00f006200320032d00d1063a00f106200341123a008007200341133a008007200320032d00d2063a00f206200341143a008007200320032d00d3063a00f306200341153a008007200320032d00d4063a00f406200341163a008007200320032d00d5063a00f506200341173a008007200320032d00d6063a00f606200341183a008007200320032d00d7063a00f706200341193a008007200320062d00003a00f806200320032d00d9063a00f9062003411a3a0080072003411b3a008007200320032d00da063a00fa062003411c3a008007200320032d00db063a00fb062003411d3a008007200320032d00dc063a00fc062003411e3a008007200320032d00dd063a00fd062003411f3a008007200320032d00de063a00fe06200341203a008007200320032d00df063a00ff0620034190096a41186a220120032903f80637030020034190096a41106a220220032903f00637030020034190096a41086a220620032903e806370300200320032903e006370390092006290300210e2002290300211820012903002119200329039009211d200341e0066a200841b002109d081a20034198036a411a6a201937010020034198036a41126a201837010020034198036a410a6a200e3701002003201d37019a0320034180023b019803200341e8006a200341e0066a20034198036a10ac030240024020032903684201520d0020032903704202520d010b200810354200210e0c260b200341e8006a411c6a2902002118200341e8006a41186a2802002106200810354200210e200641ff01714104460d25200641807e7121010c240b2001411c6a280200210841022106200141086a2802002107200141046a280200211b024020022d00000d0020022d00014101470d00200141186a280200211e200141146a280200211f200141106a2802002120200141026a2f010021062001410c6a2802002101200241196a2d00002113200241186a2d00002114200241166a2f01002112200241156a2d00002117200241146a2d0000210a200241126a2f0100210c200241116a2d0000210d200241106a2d0000210f2002410e6a2f010021152002410d6a2d0000211c2002410c6a2d000021102002410a6a2f01002104200241096a2d00002105200241086a2d00002111200241066a2f01002109200241056a2d00002116200241046a2d0000210b200241026a2f0100211a20032002411a6a2901003703e005200320133a00df05200320143a00de05200320123b01dc05200320173a00db052003200a3a00da052003200c3b01d8052003200d3a00d7052003200f3a00d605200320153b01d4052003201c3a00d305200320103a00d205200320043b01d005200320053a00cf05200320113a00ce05200320093b01cc05200320163a00cb052003200b3a00ca052003201a3b01c805200641ffff0371450d062001450d07200141e4004f0d08200320013602702003200736026c2003201b360268200341e0066a41186a200341c8056a41186a290300370300200341e0066a41106a200341c8056a41106a290300370300200341e0066a41086a2202200341c8056a41086a290300370300200320032903c8053703e00620034198036a200341e8006a200341e0066a10ad032003280298034101460d0920034198036a41086a2802002121200328029c032117200220034198036a410c6a280200360200200320063b01ec06200320173602e406200341fda9c3003602e006200341c0066a200341e0066a10ae03200341083a0080072003410b3a0080072003410c3a008007200320032f01c0063b01e006200320032801c2063601e206200320032d00c6063a00e606200320032800c7063600e706200320032d00cb063a00eb062003410d3a008007200320032d00cc063a00ec062003410e3a008007200320032d00cd063a00ed062003410f3a008007200320032d00ce063a00ee06200320032d00cf063a00ef06200341103a008007200341113a008007200320032d00d0063a00f006200341123a008007200320032d00d1063a00f106200341133a008007200320032d00d2063a00f206200341143a008007200320032d00d3063a00f306200341153a008007200320032d00d4063a00f406200341163a008007200320032d00d5063a00f506200341173a008007200320032d00d6063a00f606200320032d00d7063a00f706200341183a008007200341193a008007200320032d00d8063a00f8062003411a3a008007200320032d00d9063a00f9062003411b3a008007200320032d00da063a00fa062003411c3a008007200320032d00db063a00fb062003411d3a008007200320032d00dc063a00fc062003411e3a008007200320032d00dd063a00fd062003411f3a008007200320032d00de063a00fe06200341203a008007200320032d00df063a00ff0620034190096a41186a220220032903f80637030020034190096a41106a220720032903f00637030020034190096a41086a221b20032903e806370300200320032903e00637039009200341e8056a41186a2002290300370300200341e8056a41106a2007290300370300200341e8056a41086a201b29030037030020032003290390093703e805200341003602e806200342013703e0062008200341e0066a10af0320032802e406210720033502e80642208620032802e006221bad8410092202290018210e20022d0017210a20022d0016210c20022f0014210d20022d0013210f20022d0012211520022f0010211c20022d000f211020022d000e210420022f000c210520022d000b211120022d000a210920022f0008211620022d0007210b20022d0006211a20022f0004212220022d0003212320022d0002212420022f000021252002103502402007450d00201b10350b2003200e3703d8062003200a3a00d7062003200c3a00d6062003200d3b01d4062003200f3a00d306200320153a00d2062003201c3b01d006200320103a00cf06200320043a00ce06200320053b01cc06200320113a00cb06200320093a00ca06200320163b01c8062003200b3a00c7062003201a3a00c606200320223b01c406200320233a00c306200320243a00c206200320253b01c00620034198036a200341e8056a200341c0066a10b003200341e0066a200328029803220720032802a00310d302200341c0066a41086a221b200341e0066a41086a290300370300200341c0066a41106a2213200341e0066a41106a29030037030020034190096a41086a221420034188076a29030037030020034190096a41106a222620034190076a29030037030020034190096a41186a222720034198076a29030037030020034190096a41206a200341a0076a290300370300200320032903e0063703c0062003200341e0066a41206a2903003703900920032802fc062112024020032802f8062202450d00200341d8096a41106a2013290300370300200341d8096a41086a201b29030037030020034188066a41086a201429030037030020034188066a41106a202629030037030020034188066a41186a202729030037030020034188066a41206a20034190096a41206a290300370300200320032903c0063703d8092003200329039009370388060b0240200328029c03450d00200710350b02400240024002400240024020020d004101210720204101460d01200641ffff037141014b0d02200341e0066a200841b002109d081a200341a2036a200341f0056a290300370100200341aa036a200341e8056a41106a290300370100200341b2036a200341e8056a41186a29030037010020034180023b019803200320032903e80537019a03200341e8006a200341e0066a20034198036a10ac0320032903684201520d0320032003290081013703e006200320034188016a2800003600e706200341e8006a41186a2d00002106200341e8006a41106a290300210e20032903702218a70d042003418c016a28020021010c050b200341b4036a201236020020034198036a41206a20032903880637030020034198036a41106a200341d8096a41106a29030037030020034198036a41086a200341d8096a41086a290300370300200341c0036a20034188066a41086a290300370300200341c8036a20034188066a41106a290300370300200341d0036a20034188066a41186a290300370300200341d8036a20034188066a41206a290300370300200320032903d80937039803200320023602b0034101210702400240024002400240024020204101470d0020032802a803201f470d04200341ac036a280200201e470d0420032802b803222041014b0d014100210720200e020302030b2003410b36005f200341c8f1c20036005b20034181123b00580c280b410021072020211b0340201b410176221320076a22142007200220144105746a200341c8056a412010a0084101481b2107201b20136b221b41014b0d000b0b200220074105746a200341c8056a412010a008221b450d02201b411f7620076a21070b2006417f6a41ffff0371202041ffff03714b0d240c230b2003410e36005f200341baf1c20036005b20034181143b00580c240b200641ffff0371202041ffff03714d0d212003410f36005f200341aff2c20036005b20034181023b0058410121070c230b2003411336005f200341a7f1c20036005b20034181163b01584100211b4201211942002118410321060c250b200341186a2006ad42ffff038342004280a0e5b9c2910142001084082003200329031822194280c0dfda8ee9067c22183703682003200341186a41086a2903002018201954ad7c22193703702003200341c8056a3602b8092003200341c8056a36029009200320034190096a3602e8062003200341b8096a3602e4062003200341e8006a3602e00620034198036a200341c8056a200341e0066a108c03024002402003280298034101470d00200341a4036a280200210720034198036a41086a280200211b20032d009f03211320032d009e03211420032d009d03212020032d009c0321060c010b41042106024020034198036a41086a2903004201520d0020034198036a41106a290300211d200328029009210720034198076a20034198036a41186a29030037030020034190076a201d370300200341e0066a41086a41003a0000200341e9066a2007290000370000200341f1066a200741086a290000370000200341f9066a200741106a29000037000020034181076a200741186a290000370000200341033a00e00641b0b4cc004100200341e0066a10d4010b0b0240200641ff01714104470d0020034198036a41186a420037030020034198036a41106a2213420037030020034198036a41086a22074200370300200342003703980341d1c4c700ad4280808080e000841001221b290000211d200341e0066a41086a2206201b41086a2900003703002003201d3703e006201b103520072006290300370300200320032903e0063703980341e7c4c700ad4280808080e000841001221b290000211d2006201b41086a2900003703002003201d3703e006201b1035201320032903e006221d37030020034190096a41086a200729030037030020034190096a41106a201d37030020034190096a41186a2006290300370300200320032903980337039009200341106a20034190096a412010c001200328021421072003280210211b200341086a41c4c3c700411010c001200328020c21132003280208211420032f01c805212020032d00ca05211f20032d00cb05211e20032f01cc05212620032d00ce05212720032d00cf05212820032f01d005212920032d00d205212a20032d00d305212b20032f01d405212c20032d00d605212d20032d00d705212e20032f01d805212f20032d00da05213020032d00db05213120032f01dc05213220032d00de05213320032d00df05213420032903e005211d412010332206450d08200620032903c805370000200641186a200341c8056a41186a290300370000200641106a200341c8056a41106a290300370000200641086a200341c8056a41086a290300370000200341f4066a2013410020141b3602002003419c076a201d3702002003419b076a20343a00002003419a076a20333a000020034198076a20323b010020034197076a20313a000020034196076a20303a000020034194076a202f3b010020034193076a202e3a000020034192076a202d3a000020034190076a202c3b01002003418f076a202b3a00002003418e076a202a3a00002003418c076a20293b01002003418b076a20283a00002003418a076a20273a000020034188076a20263b010020034187076a201e3a000020034186076a201f3a0000200320193703e806200320183703e006200320074100201b1b3602f006200320203b018407200341fc066a428180808010370200200320063602f8062003200e3703d8062003200a3a00d7062003200c3a00d6062003200d3b01d4062003200f3a00d306200320153a00d2062003201c3b01d006200320103a00cf06200320043a00ce06200320053b01cc06200320113a00cb06200320093a00ca06200320163b01c8062003200b3a00c7062003201a3a00c606200320223b01c406200320233a00c306200320243a00c206200320253b01c00620034198036a200341e8056a200341c0066a10b0032003280298032106200320032802a00336026c20032006360268200341e0066a200341e8006a1099030240200328029c03450d00200610350b024020032802fc0641ffffff3f71450d0020032802f80610350b20034185076a20032903e805370000200341ed066a200341c8056a41086a290300370000200341f5066a200341c8056a41106a290300370000200341fd066a200341c8056a41186a2903003700002003418d076a200341e8056a41086a29030037000020034195076a200341e8056a41106a2903003700002003419d076a200341e8056a41186a290300370000200341023a00e40641012107200341013a00e006200320032903c8053700e506200341bd076a200e370000200341bc076a200a3a0000200341bb076a200c3a0000200341b9076a200d3b0000200341b8076a200f3a0000200341b7076a20153a0000200341b5076a201c3b0000200341b4076a20103a0000200341b3076a20043a0000200341b1076a20053b0000200341b0076a20113a0000200341af076a20093a0000200341ad076a20163b0000200341ac076a200b3a0000200341ab076a201a3a0000200341a9076a20223b0000200341a8076a20233a0000200341a7076a20243a0000200341a5076a20253b00004100211b41b0b4cc004100200341e0066a10d4012001ad4290a10f7e42c0c09bd8007c210e42002119420121180c250b2003200736005f2003201b36005b200320133a005a200320143a0059200320203a00584100211b4101210742012119420021180c240b420021190240024020032903704201510d00420021180c010b427f427f427f200341f8006a290300220e42808ece1c7c22182018200e541b220e2001ad4290a10f7e7c22182018200e541b220e42c0b2cd3b7c22182018200e541b210e420121180b0c1d0b427f427f427f200e42808ece1c7c22182018200e541b220e2001ad4290a10f7e7c22182018200e541b220e42c0b2cd3b7c22182018200e541b210e420121180b200320032800e70636005f200320032903e006370358420121190c1b0b200341023a00e006200341e0066a21010c180b200141286a2802002106200141246a28020021134102210820022d00000d1320022d00014101470d13200141196a290000210e200141186a2d0000211a200141176a2d00002120200141156a2f0000211f200141146a2d0000211e200141136a2d00002122200141116a2f00002123200141106a2d000021242001410f6a2d000021252001410d6a2f000021212001410c6a2d000021262001410b6a2d00002127200141096a2f00002128200141086a2d00002129200141076a2d0000212a200141056a2f0000212b200141046a2d0000212c200141036a2d0000212d2001412c6a2802002107200141386a2802002131200141346a2802002130200141306a280200212f200141226a2f0100211420012f0001212e200241196a2d00002101200241186a2d00002108200241166a2f0100211b200241156a2d00002112200241146a2d00002117200241126a2f0100210a200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210f2002410d6a2d000021152002410c6a2d0000211c2002410a6a2f01002110200241096a2d00002104200241086a2d00002105200241066a2f01002111200241056a2d00002109200241046a2d00002116200241026a2f0100210b20032002411a6a2901003703d009200320013a00cf09200320083a00ce092003201b3b01cc09200320123a00cb09200320173a00ca092003200a3b01c8092003200c3a00c7092003200d3a00c6092003200f3b01c409200320153a00c3092003201c3a00c209200320103b01c009200320043a00bf09200320053a00be09200320113b01bc09200320093a00bb09200320163a00ba092003200b3b01b809024020140d0041c0d7ca00211b410d210741032108410021020c150b41032108024020070d00418df2c200211b41112107410321020c150b0240200741e3004d0d0041fbf1c200211b41122107410421020c150b200320073602702003200636026c20032013360268200341e0066a41186a200341b8096a41186a290300370300200341e0066a41106a2202200341b8096a41106a290300370300200341e0066a41086a2201200341b8096a41086a290300370300200320032903b8093703e00620034198036a200341e8006a200341e0066a10ad0302402003280298034101460d0020034198036a41086a2802002112200328029c032113200120034198036a410c6a280200360200200320143b01ec06200320133602e406200341fda9c3003602e006200341c0066a200341e0066a10ae03200341083a0080072003410b3a0080072003410c3a008007200320032f01c0063b01e006200320032801c2063601e206200320032d00c6063a00e606200320032800c7063600e706200320032d00cb063a00eb062003410d3a008007200320032d00cc063a00ec062003410e3a008007200320032d00cd063a00ed062003410f3a008007200320032d00ce063a00ee06200320032d00cf063a00ef06200341103a008007200341113a008007200320032d00d0063a00f006200341123a008007200320032d00d1063a00f106200341133a008007200320032d00d2063a00f206200341143a008007200320032d00d3063a00f306200341153a008007200320032d00d4063a00f406200341163a008007200320032d00d5063a00f506200341173a008007200320032d00d6063a00f606200320032d00d7063a00f706200341183a008007200341193a008007200320032d00d8063a00f8062003411a3a008007200320032d00d9063a00f9062003411b3a008007200320032d00da063a00fa062003411c3a008007200320032d00db063a00fb062003411d3a008007200320032d00dc063a00fc062003411e3a008007200320032d00dd063a00fd062003411f3a008007200320032d00de063a00fe06200320032d00df063a00ff06200341203a00800720034190096a41186a220820032903f80637030020034190096a41106a220620032903f00637030020034190096a41086a220720032903e806370300200320032903e0063703900920034188066a41186a200829030037030020034188066a41106a200629030037030020034188066a41086a20072903003703002003200329039009370388062003200e3703d8062003201a3a00d706200320203a00d6062003201f3b01d4062003201e3a00d306200320223a00d206200320233b01d006200320243a00cf06200320253a00ce06200320213b01cc06200320263a00cb06200320273a00ca06200320283b01c806200320293a00c7062003202a3a00c6062003202b3b01c4062003202c3a00c3062003202d3a00c2062003202e3b01c00620034198036a20034188066a200341c0066a10b003200341e0066a200328029803221b20032802a00310d302200341c0066a41086a2001290300370300200341c0066a41106a2002290300370300200720034188076a290300370300200620034190076a290300370300200820034198076a29030037030020034190096a41206a2202200341a0076a290300370300200320032903e0063703c0062003200341e0066a41206a2903003703900920032802fc062106024020032802f8062201450d00200341e8056a41106a200341c0066a41106a290300370300200341e8056a41086a200341c0066a41086a290300370300200341e8006a41086a20034190096a41086a290300370300200341e8006a41106a20034190096a41106a290300370300200341e8006a41186a20034190096a41186a290300370300200341e8006a41206a2002290300370300200320032903c0063703e80520032003290390093703680b0240200328029c03450d00201b10350b0240024020010d004101210141032108201441014b0d01419ef2c200211b41112107410221020c140b200341b4036a200636020020034198036a41206a200329036837030020034198036a41106a200341e8056a41106a29030037030020034198036a41086a200341e8056a41086a290300370300200341c0036a200341e8006a41086a290300370300200341c8036a200341e8006a41106a290300370300200341d0036a200341e8006a41186a290300370300200341d8036a200341e8006a41206a290300370300200320032903e80537039803200320013602b0030240202f4101460d0041c8f1c200211b410b2107410921020c130b41baf1c200211b410e2107410a210220032802a8032030470d12200341ac036a2802002031470d12024020032802b80322172014490d00419ef2c200211b41112107410221020c130b410021020240201741014b0d00024020170e020010000b200341e0066a41186a200341b8096a41186a290300370300200341e0066a41106a200341b8096a41106a290300370300200341e0066a41086a200341b8096a41086a290300370300200320032903b8093703e00641002102200341e0066a21080c100b2017210803402008410176220720026a221b20022001201b4105746a200341b8096a412010a0084101481b2102200820076b220841014b0d000c0f0b0b410121010240202f4101470d0041a7f1c200211b41132107410b21020c130b200341386a2014ad42004280a0e5b9c2910142001084082003200329033822194280c0dfda8ee9067c2218370390092003200341386a41086a2903002018201954ad7c2219370398092003200341b8096a3602c8052003200341b8096a3602c0062003200341c0066a3602e8062003200341c8056a3602e406200320034190096a3602e00620034198036a200341b8096a200341e0066a108c03024002402003280298034101470d00200341a4036a280200210720034198036a41086a280200211b20032d009f03210620032d009e03210220032d009d03210120032d009c0321080c010b41042108024020034198036a41086a2903004201520d0020034198036a41106a290300211d20032802c006210120034198076a20034198036a41186a29030037030020034190076a201d370300200341e0066a41086a41003a0000200341e9066a2001290000370000200341f1066a200141086a290000370000200341f9066a200141106a29000037000020034181076a200141186a290000370000200341033a00e00641b0b4cc004100200341e0066a10d4010b0b200841ff01714104470d1320034198036a41186a420037030020034198036a41106a2206420037030020034198036a41086a22024200370300200342003703980341d1c4c700ad4280808080e0008410012208290000211d200341e0066a41086a2201200841086a2900003703002003201d3703e0062008103520022001290300370300200320032903e0063703980341e7c4c700ad4280808080e0008410012208290000211d2001200841086a2900003703002003201d3703e00620081035200620032903e006221d37030020034190096a41086a200229030037030020034190096a41106a201d37030020034190096a41186a2001290300370300200320032903980337039009200341306a20034190096a412010c0012003280234210220032802302108200341286a41c4c3c700411010c001200328022c21062003280228210720032f01b809211b20032d00ba09211420032d00bb09211720032f01bc09210a20032d00be09210c20032d00bf09210d20032f01c009210f20032d00c209211520032d00c309211c20032f01c409211020032d00c609210420032d00c709210520032f01c809211120032d00ca09210920032d00cb09211620032f01cc09210b20032d00ce09212f20032d00cf09213020032903d009211d412010332201450d03200120032903b809370000200141186a200341b8096a41186a290300370000200141106a200341b8096a41106a290300370000200141086a200341b8096a41086a290300370000200341f4066a2006410020071b3602002003419c076a201d3702002003419b076a20303a00002003419a076a202f3a000020034198076a200b3b010020034197076a20163a000020034196076a20093a000020034194076a20113b010020034193076a20053a000020034192076a20043a000020034190076a20103b01002003418f076a201c3a00002003418e076a20153a00002003418c076a200f3b01002003418b076a200d3a00002003418a076a200c3a000020034188076a200a3b010020034187076a20173a000020034186076a20143a0000200320193703e806200320183703e00620032002410020081b3602f0062003201b3b018407200341fc066a428180808010370200200320013602f8062003200e3703d8062003201a3a00d706200320203a00d6062003201f3b01d4062003201e3a00d306200320223a00d206200320233b01d006200320243a00cf06200320253a00ce06200320213b01cc06200320263a00cb06200320273a00ca06200320283b01c806200320293a00c7062003202a3a00c6062003202b3b01c4062003202c3a00c3062003202d3a00c2062003202e3b01c00620034198036a20034188066a200341c0066a10b0032003280298032101200320032802a003360294092003200136029009200341e0066a20034190096a1099030240200328029c03450d00200110350b024020032802fc0641ffffff3f71450d0020032802f80610350b20034185076a200329038806370000200341ed066a200341b8096a41086a290300370000200341f5066a200341b8096a41106a290300370000200341fd066a200341b8096a41186a2903003700002003418d076a20034188066a41086a29030037000020034195076a20034188066a41106a2903003700002003419d076a20034188066a41186a290300370000200341023a00e406200341013a00e006200320032903b8093700e506200341bd076a200e370000200341bc076a201a3a0000200341bb076a20203a0000200341b9076a201f3b0000200341b8076a201e3a0000200341b7076a20223a0000200341b5076a20233b0000200341b4076a20243a0000200341b3076a20253a0000200341b1076a20213b0000200341b0076a20263a0000200341af076a20273a0000200341ad076a20283b0000200341ac076a20293a0000200341ab076a202a3a0000200341a9076a202b3b0000200341a8076a202c3a0000200341a7076a202d3a0000200341a5076a202e3b000041b0b4cc004100200341e0066a10d4010c0f0b4200210e200328029c03220841ff01714104460d16200841187621062008411076210220084108762101200341a4036a280200210720034198036a41086a280200211b0c150b2001412c6a2802002106200141286a2802002108200141246a280200211b200141346a2802002114200141306a2802002113200141226a2f01002107200341e8056a41186a200141196a290000370300200341e8056a41106a200141116a290000370300200341e8056a41086a200141096a290000370300200320012900013703e8054102210120022d00000d0720022d00014101470d07200241196a2d00002101200241186a2d00002112200241166a2f01002117200241156a2d0000210a200241146a2d0000210c200241126a2f0100210d200241116a2d0000210f200241106a2d000021152002410e6a2f0100211c2002410d6a2d000021102002410c6a2d000021042002410a6a2f01002105200241096a2d00002111200241086a2d00002109200241066a2f01002116200241056a2d0000210b200241046a2d0000211a200241026a2f0100212020032002411a6a2901003703d009200320013a00cf09200320123a00ce09200320173b01cc092003200a3a00cb092003200c3a00ca092003200d3b01c8092003200f3a00c709200320153a00c6092003201c3b01c409200320103a00c309200320043a00c209200320053b01c009200320113a00bf09200320093a00be09200320163b01bc092003200b3a00bb092003201a3a00ba09200320203b01b8090240200741ffff03710d0041c0d7ca002107410d210641032101410021020c090b41032101024020060d00418df2c200210741112106410321020c090b0240200641e3004d0d0041fbf1c200210741122106410421020c090b200320063602702003200836026c2003201b360268200341e0066a41186a200341b8096a41186a290300370300200341e0066a41106a2202200341b8096a41106a290300370300200341e0066a41086a2201200341b8096a41086a290300370300200320032903b8093703e00620034198036a200341e8006a200341e0066a10ad0302402003280298034101460d0020034198036a41086a2802002112200328029c03211b200120034198036a410c6a280200360200200320073b01ec062003201b3602e406200341fda9c3003602e006200341c0066a200341e0066a10ae03200341083a0080072003410b3a0080072003410c3a008007200320032f01c0063b01e006200320032801c2063601e206200320032d00c6063a00e606200320032800c7063600e706200320032d00cb063a00eb062003410d3a008007200320032d00cc063a00ec062003410e3a008007200320032d00cd063a00ed062003410f3a008007200320032d00ce063a00ee06200320032d00cf063a00ef06200341103a008007200341113a008007200320032d00d0063a00f006200341123a008007200320032d00d1063a00f106200341133a008007200320032d00d2063a00f206200341143a008007200320032d00d3063a00f306200341153a008007200320032d00d4063a00f406200341163a008007200320032d00d5063a00f506200341173a008007200320032d00d6063a00f606200320032d00d7063a00f706200341183a008007200341193a008007200320032d00d8063a00f8062003411a3a008007200320032d00d9063a00f9062003411b3a008007200320032d00da063a00fa062003411c3a008007200320032d00db063a00fb062003411d3a008007200320032d00dc063a00fc062003411e3a008007200320032d00dd063a00fd062003411f3a008007200320032d00de063a00fe06200320032d00df063a00ff06200341203a00800720034190096a41186a220820032903f80637030020034190096a41106a220620032903f00637030020034190096a41086a220720032903e806370300200320032903e0063703900920034188066a41186a200829030037030020034188066a41106a200629030037030020034188066a41086a20072903003703002003200329039009370388062003200341e8056a41186a2903003703d8062003200341e8056a41106a2903003703d0062003200341e8056a41086a2903003703c806200320032903e8053703c006200341900a6a20034188066a200341c0066a10b003200341e0066a20032802900a221720032802980a10d302200341c0066a41086a2001290300370300200341c0066a41106a2002290300370300200720034188076a290300370300200620034190076a290300370300200820034198076a29030037030020034190096a41206a2202200341a0076a290300370300200320032903e0063703c0062003200341e0066a41206a2903003703900902400240024020032802f8062201450d0020032802fc062108200341f8096a41106a2206200341c0066a41106a290300370300200341f8096a41086a2207200341c0066a41086a290300370300200341e8006a41086a220a20034190096a41086a290300370300200341e8006a41106a220c20034190096a41106a290300370300200341e8006a41186a220d20034190096a41186a290300370300200341e8006a41206a2002290300370300200320032903c0063703f8092003200329039009370368024020032802940a450d00201710350b200341c8056a41166a2006290300220e370100410e2106200341c8056a410e6a2007290300370100200341d8096a41166a2202200e370100200341d8096a41106a200341c8056a41106a290100370300200320032903f8093701ce05200341d8096a41086a200341c8056a41086a290100370300200320032901c8053703d80920034198036a41106a2217200229010037030020034198036a41086a200341d8096a410e6a290100370300200320032901de0937039803200341b4036a2008360200200320013602b003200341d8036a200341e8006a41206a290300370300200341d0036a200d290300370300200341c8036a200c290300370300200341c0036a200a29030037030020034198036a41206a200329036837030041baf1c2002107410a2102024020172802002013470d00200341ac036a2802002014470d00200341bc036a2202200341b8096a412010a008450d0341fbb5c300210741082102410821060b200841ffffff3f71450d01200110350c010b024020032802940a450d00201710350b41d0b9c300210741082106410721020b0240201241ffffff3f71450d00201b10350b41002108418002211b410321010c0b0b200329039803210e200320034198036a41086a2903002218370398092003200e370390090240200e201884500d00200320023602c006200341e8006a200220034190096a200341c0066a10f00220032903684201520d002003290370210e20034198076a200341e8006a41106a29030037030020034190076a200e370300200341e0066a41086a41003a0000200341e9066a2002290000370000200341f1066a200241086a290000370000200341f9066a200241106a29000037000020034181076a200241186a290000370000200341033a00e00641b0b4cc004100200341e0066a10d4010b200341c0066a41186a200341e8056a41186a2201290300370300200341c0066a41106a200341e8056a41106a2202290300370300200341c0066a41086a200341e8056a41086a290300370300200320032903e8053703c006200341e0066a20034188066a200341c0066a10b00320033502e80642208620032802e0062208ad841007024020032802e406450d00200810350b20034185076a200329038806370000200341ed066a200341b8096a41086a290300370000200341f5066a200341b8096a41106a290300370000200341fd066a200341b8096a41186a2903003700002003418d076a20034188066a41086a29030037000020034195076a20034188066a41106a2903003700002003419d076a20034188066a41186a290300370000200341053a00e406200341013a00e006200320032903b8093700e506200341c8076a2013360200200341cc076a2014360200200341bd076a2001290300370000200341b5076a2002290300370000200341ad076a200341e8056a41086a290300370000200341a5076a20032903e80537000041b0b4cc004100200341e0066a10d401024020032802b40341ffffff3f71450d0020032802b00310350b0240201241ffffff3f71450d00201b10350b4200210e0c0b0b4200210e200328029c03220141ff01714104460d0a2001418080807871210820014110762102200141807e71211b200341a4036a280200210620034198036a41086a28020021070c090b1045000b103c000b200810ba0220081035410021010c1e0b200341e8066a410d360200200341c0d7ca003602e406200341003a00e20620034183023b01e006200341e0066a2101410321060c120b200341e8066a41113602002003418df2c2003602e40641032106200341033a00e20620034183023b01e006200341e0066a21010c110b200341e8066a4112360200200341fbf1c2003602e406200341043a00e20620034183023b01e006200341e0066a2101410321060c100b2003200329009d033703582003200341a4036a28000036005f20032d009c032106200810ba0220081035420021180c100b0b0240200841ffffff3f71450d00201b10350b41002108418002211b0b200041206a20063602002000411c6a2007360200200041186a2008200241ff017141107472201b4180fe037172200141ff0171723602004201210e0b2000200e370300200042003703080c1a0b0240200120024105746a200341b8096a412010a00822070d0041aff2c200211b410f2107410121020c040b200341e0066a41186a200341b8096a41186a290300370300200341e0066a41106a200341b8096a41106a290300370300200341e0066a41086a200341b8096a41086a290300370300200320032903b8093703e006200341e0066a210820172007411f7620026a2202490d020b024020172006470d0020034198036a41186a20064101108a0120032802b00321010b200120024105746a220141206a2001201720026b410574109e081a200141186a200841186a290000370000200141106a200841106a290000370000200141086a200841086a290000370000200120082900003700002003201741016a3602b803200341e0066a20034198036a41c800109d081a2003200e3703d8062003201a3a00d706200320203a00d6062003201f3b01d4062003201e3a00d306200320223a00d206200320233b01d006200320243a00cf06200320253a00ce06200320213b01cc06200320263a00cb06200320273a00ca06200320283b01c806200320293a00c7062003202a3a00c6062003202b3b01c4062003202c3a00c3062003202d3a00c2062003202e3b01c00620034190096a20034188066a200341c0066a10b003200328029009210120032003280298093602c406200320013602c006200341e0066a200341c0066a1099030240200328029409450d00200110350b0240200341fc066a28020041ffffff3f71450d0020032802f80610350b20034185076a200329038806370000200341ed066a200341b8096a41086a290300370000200341f5066a200341b8096a41106a290300370000200341fd066a200341b8096a41186a2903003700002003418d076a20034188066a41086a29030037000020034195076a20034188066a41106a2903003700002003419d076a20034188066a41186a290300370000200341033a00e406200341013a00e006200320032903b8093700e506200341cc076a2031360200200341c8076a2030360200200341bd076a200e370000200341bc076a201a3a0000200341bb076a20203a0000200341b9076a201f3b0000200341b8076a201e3a0000200341b7076a20223a0000200341b5076a20233b0000200341b4076a20243a0000200341b3076a20253a0000200341b1076a20213b0000200341b0076a20263a0000200341af076a20273a0000200341ad076a20283b0000200341ac076a20293a0000200341ab076a202a3a0000200341a9076a202b3b0000200341a8076a202c3a0000200341a7076a202d3a0000200341a5076a202e3b000041b0b4cc004100200341e0066a10d4010b0240201241ffffff3f71450d00201310350b4200210e0c070b20022017104d000b0240200641ffffff3f71450d00200110350b41032108410121010b0b201241ffffff3f71450d02201310350c020b0b410121010240200641ffffff3f710d000c010b201310350b200041206a20073602002000411c6a201b360200200041186a2006411874200241ff017141107472200141ff017141087472200841ff0171723602004201210e0b2000200e370300200042003703080c0f0b200320012900013703582003200141086a28000036005f200810ba022008103542002118200741ffffff3f71450d00201b10350b0c080b410021074100211b0c060b200341e0066a200841b002109d081a200341f2006a200341e8056a41086a290300370100200341fa006a200341f8056a29030037010020034182016a20034180066a29030037010020034180023b0168200320032903e80537016a20034190096a200341e0066a200341e8006a10ac032003290398032118200320034198036a41086a29030022193703c009200320183703b80902402018201984500d002003200341bc036a22013602c006200341e8006a2001200341b8096a200341c0066a10f00220032903684201520d002003290370211820034198076a200341e8006a41106a29030037030020034190076a2018370300200341e0066a41086a41003a0000200341e9066a2001290000370000200341f1066a200141086a290000370000200341f9066a200141106a29000037000020034181076a200141186a290000370000200341033a00e00641b0b4cc004100200341e0066a10d4010b2003200e3703d8062003200a3a00d7062003200c3a00d6062003200d3b01d4062003200f3a00d306200320153a00d2062003201c3b01d006200320103a00cf06200320043a00ce06200320053b01cc06200320113a00cb06200320093a00ca06200320163b01c8062003200b3a00c7062003201a3a00c606200320223b01c406200320233a00c306200320243a00c206200320253b01c006200341e0066a200341e8056a200341c0066a10b00320033502e80642208620032802e0062201ad841007024020032802e406450d00200110350b200341e8006a41186a200341c8056a41186a290300370300200341e8006a41106a200341c8056a41106a290300370300200341e8006a41086a200341c8056a41086a290300370300200320032903c805370368200341e0066a41186a200341e8056a41186a290300370300200341e0066a41106a200341e8056a41106a290300370300200341e0066a41086a200341e8056a41086a290300370300200320032903e8053703e00620034190096a41186a2d0000210620032903980921192003290390092118200320032900a9093703b8092003200341b0096a2800003600bf090240024020184201510d00410421010c010b200320032800bf093600ff09200320032903b8093703f8094104210120194202510d00200320032800ff093600970a200320032903f8093703900a200621010b200341b8096a41086a2206200341e8006a41086a290300370300200341b8096a41106a2207200341e8006a41106a290300370300200341b8096a41186a221b200341e8006a41186a290300370300200341c0066a41086a2213200341e0066a41086a290300370300200341c0066a41106a2214200341e0066a41106a290300370300200341c0066a41186a2220200341e0066a41186a290300370300200320032903683703b809200320032903e0063703c006200320032800970a3600b706200320032903900a3703b006200341ed066a2006290300370000200341f5066a2007290300370000200341fd066a201b29030037000020034185076a20032903c0063700002003418d076a201329030037000020034195076a20142903003700002003419d076a2020290300370000200341043a00e406200341013a00e006200320032903b8093700e506200341bd076a200e370000200341bc076a200a3a0000200341bb076a200c3a0000200341b9076a200d3b0000200341b8076a200f3a0000200341b7076a20153a0000200341b5076a201c3b0000200341b4076a20103a0000200341b3076a20043a0000200341b1076a20053b0000200341b0076a20113a0000200341af076a20093a0000200341ad076a20163b0000200341ac076a200b3a0000200341ab076a201a3a0000200341a9076a20223b0000200341a8076a20233a0000200341a7076a20243a0000200341a5076a20253b0000200341d0076a20013a0000200341cc076a201e360200200341c8076a201f360200200341c7076a200341c6056a2d00003a0000200341c5076a20032f00c4053b0000200341d8076a20032800b706360000200341d1076a20032903b0063700004100210741b0b4cc004100200341e0066a10d4014200211920032802b40321010c020b200341e0066a41186a200341c8056a41186a290300370300200341e0066a41106a200341c8056a41106a290300370300200341e0066a41086a200341c8056a41086a290300370300200320032903c8053703e006024020202007490d0020022106024020202012470d0020034198036a41186a20124101108a0120032802b00321060b200620074105746a220641206a2006202020076b410574109e081a200641186a200341e0066a41186a290300370000200641106a200341e0066a41106a290300370000200641086a200341e0066a41086a290300370000200620032903e0063700002003202041016a3602b803200341e0066a20034198036a41c800109d081a2003200e3703d8062003200a3a00d7062003200c3a00d6062003200d3b01d4062003200f3a00d306200320153a00d2062003201c3b01d006200320103a00cf06200320043a00ce06200320053b01cc06200320113a00cb06200320093a00ca06200320163b01c8062003200b3a00c7062003201a3a00c606200320223b01c406200320233a00c306200320243a00c206200320253b01c006200341e8006a200341e8056a200341c0066a10b0032003280268210620032003280270360294092003200636029009200341e0066a20034190096a1099030240200328026c450d00200610350b0240200341fc066a28020041ffffff3f71450d0020032802f80610350b20034185076a20032903e805370000200341ed066a200341c8056a41086a290300370000200341f5066a200341c8056a41106a290300370000200341fd066a200341c8056a41186a2903003700002003418d076a200341e8056a41086a29030037000020034195076a200341e8056a41106a2903003700002003419d076a200341e8056a41186a290300370000200341033a00e40641012107200341013a00e006200320032903c8053700e506200341cc076a201e360200200341c8076a201f360200200341bd076a200e370000200341bc076a200a3a0000200341bb076a200c3a0000200341b9076a200d3b0000200341b8076a200f3a0000200341b7076a20153a0000200341b5076a201c3b0000200341b4076a20103a0000200341b3076a20043a0000200341b1076a20053b0000200341b0076a20113a0000200341af076a20093a0000200341ad076a20163b0000200341ac076a200b3a0000200341ab076a201a3a0000200341a9076a20223b0000200341a8076a20233a0000200341a7076a20243a0000200341a5076a20253b000041b0b4cc004100200341e0066a10d4012001ad4290a10f7e42c0c09bd8007c210e42002119420121180c030b20072020104d000b42012119201221010b420021180240200141ffffff3f710d000c010b20032802b00310350b4101211b410321060b0b0240202141ffffff3f71450d00201710350b0240201241ffffff3f71450d00200245201b720d00200210350b02402007450d00200810ba020b20081035201950450d0020002018370308200041106a200e370300200042003703000c050b2003200328005f36004f20032003290358370348200041186a20063a0000200041106a200e3703002000201837030820002003290348370019200041206a200328004f360000200041246a2001360200200042013703000c040b2000411c6a2018370200200041186a2001200641ff0171723602004201210e0b2000200e370300200042003703080c020b024020082001460d000340200110bb022008200141b0026a2201470d000b0b02402009450d00200941b0026c450d00200510350b200341013a00e406200341013a00e00641b0b4cc004100200341e0066a10d4010b20004200370300200041086a42003703000b200341a00a6a24000bebca010a017f017e017f017e017f017e057f017e287f0c7e230041f0116b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1b010200030405060708090a0b0c0d0e0f1011121300000014151617010b000b20034198066a41086a200141106a2903003703002003200141086a29030037039806200341a80b6a41206a200241206a290200370300200341a80b6a41186a200241186a290200370300200341a80b6a41106a200241106a290200370300200341a80b6a41086a200241086a290200370300200320022902003703a80b200020034198066a200341a80b6a1085060c280b200341e00b6a2001413c6a280200360200200341d80b6a200141346a290200370300200341d00b6a2001412c6a290200370300200341a80b6a41206a200141246a290200370300200341a80b6a41186a2001411c6a290200370300200341a80b6a41106a200141146a290200370300200341a80b6a41086a2001410c6a290200370300200320012902043703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a10ab030c270b0240024020022d00000d0020022d000141ff01714102470d00200141086a2903002104200341a80b6a41186a22054200370300200341a80b6a41106a22014200370300200341a80b6a41086a22024200370300200342003703a80b41d1efcb00ad42808080809001842206100122072900002108200341a0116a41086a2209200741086a290000370300200320083703a0112007103520022009290300370300200320032903a0113703a80b41daefcb00ad42808080809001841001220a2900002108200341f8106a41086a2207200a41086a290000370300200320083703f810200a1035200120032903f810220837030020034198066a41086a220b200229030037030020034198066a41106a220c200837030020034198066a41186a220d2007290300370300200320032903a80b37039806200341186a20034198066a412041b0b4cc0041004100108a0220032802184101460d16200542003703002001420037030020024200370300200342003703a80b20061001220a29000021062009200a41086a290000370300200320063703a011200a103520022009290300370300200320032903a0113703a80b41ebc3c400ad4280808080308422061001220929000021082007200941086a290000370300200320083703f81020091035200120032903f810370000200141086a2007290300370000200b2002290300370300200c2001290300370300200d2005290300370300200320032903a80b37039806200341086a20034198066a10e1022003290310220842dc0b7c2004580d012008500d012003280208450d0141beebc40041ce0041c086cc00103f000b20004200370308200041186a4102360200200042013703000c270b200341a80b6a41186a22094200370300200341a80b6a41106a22074200370300200341a80b6a41086a22024200370300200342003703a80b41d1efcb00ad428080808090018422081001220a290000210e200341a0116a41086a2205200a41086a2900003703002003200e3703a011200a103520022005290300370300200320032903a0113703a80b20061001220b2900002106200341f8106a41086a220a200b41086a290000370300200320063703f810200b1035200120032903f810370000200141086a220c200a29030037000020034198066a41086a220d200229030037030020034198066a41106a220f200729030037030020034198066a41186a22102009290300370300200320032903a80b37039806200320043703a80b20034198066aad42808080808004842204200341a80b6aad42808080808001841002200942003703002007420037030020024200370300200342003703a80b20081001220b29000021062005200b41086a290000370300200320063703a011200b103520022005290300370300200320032903a0113703a80b41daefcb00ad4280808080900184100122052900002106200a200541086a290000370300200320063703f81020051035200120032903f810370000200c200a290300370000200d2002290300370300200f200729030037030020102009290300370300200320032903a80b37039806200341013a00d00f2004200341d00f6aad42808080801084100220004200370308200042003703000c260b200341b00b6a2001410c6a280200360200200320012902043703a80b2000200341a80b6a20022d000020022d00011086060c250b20034198066a41206a200141246a29020037030020034198066a41186a2001411c6a29020037030020034198066a41106a200141146a29020037030020034198066a41086a2001410c6a2902003703002003200129020437039806200341a80b6a41206a200241206a290200370300200341a80b6a41186a200241186a290200370300200341a80b6a41106a200241106a290200370300200341a80b6a41086a200241086a290200370300200320022902003703a80b200020034198066a200341a80b6a10b1040c240b200341a80b6a200141086a41e000109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1087030c230b200341a80b6a200141086a418802109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1089020c220b200341a80b6a200141046a418c01109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1087060c210b200341a80b6a41306a200141386a290300370300200341a80b6a41286a200141306a290300370300200341a80b6a41206a200141286a290300370300200341a80b6a41186a200141206a290300370300200341a80b6a41106a200141186a290300370300200341a80b6a41086a200141106a2903003703002003200141086a2903003703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a108b050c200b200341d00b6a2001412c6a290200370300200341a80b6a41206a200141246a290200370300200341a80b6a41186a2001411c6a290200370300200341a80b6a41106a200141146a290200370300200341a80b6a41086a2001410c6a290200370300200320012902043703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1088060c1f0b200341d00b6a2001412c6a290200370300200341a80b6a41206a200141246a290200370300200341a80b6a41186a2001411c6a290200370300200341a80b6a41106a200141146a290200370300200341a80b6a41086a2001410c6a290200370300200320012902043703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1089060c1e0b20034198066a41206a200141286a29030037030020034198066a41186a200141206a29030037030020034198066a41106a200141186a29030037030020034198066a41086a200141106a2903003703002003200141086a29030037039806200341a80b6a41206a200241206a290200370300200341a80b6a41186a200241186a290200370300200341a80b6a41106a200241106a290200370300200341a80b6a41086a200241086a290200370300200320022902003703a80b200020034198066a200341a80b6a1089030c1d0b200341a80b6a200141046a41c400109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a108a060c1c0b4102210741002109024002400240024020022d0000450d000c010b20022d000141ff01714102470d0020012802042105200341a80b6a41186a4200370300200341a80b6a41106a22074200370300200341a80b6a41086a22014200370300200342003703a80b41bee4cb00ad4280808080f00184100122092900002104200341c00a6a41086a2202200941086a290000370300200320043703c00a2009103520012002290300370300200320032903c00a3703a80b418cc0c700ad4280808080e000841001220929000021042002200941086a290000370300200320043703c00a20091035200720032903c00a2204370300200341d00f6a41086a2001290300370300200341d00f6a41106a2004370300200341d00f6a41186a2002290300370300200320032903a80b3703d00f41002109200341286a200341d00f6a412041b0b4cc0041004100108a020240024020032802284101470d00410e210541d0b8c700210a0c010b200341d8106a41186a4200370300200341d8106a41106a220a4200370300200341d8106a41086a22024200370300200342003703d81041d1c4c700ad4280808080e000841001220929000021042002200941086a290000370300200320043703d8102009103541e7c4c700ad4280808080e000841001220929000021042001200941086a290000370300200320043703a80b20091035200a20032903a80b2204370300200341b8106a41086a2002290300370300200341b8106a41106a2004370300200341b8106a41186a2001290300370300200320032903d8103703b810200341206a200341b8106a412010c0012003280224410020032802201b20054f0d024107210541e8b8c700210a4180800421090b410321070b200041206a20053602002000411c6a200a360200200041186a2009418080047120077241801e72360200420121040c010b42002104200341a80b6a41186a220a4200370300200341a80b6a41106a220b4200370300200341a80b6a41086a22024200370300200342003703a80b41bee4cb00ad4280808080f00184100122092900002106200341c00a6a41086a2201200941086a290000370300200320063703c00a2009103520022001290300370300200320032903c00a3703a80b418cc0c700ad4280808080e000841001220929000021062001200941086a290000370300200320063703c00a20091035200720032903c00a370000200741086a2001290300370000200341d00f6a41086a2002290300370300200341d00f6a41106a200b290300370300200341d00f6a41186a200a290300370300200320032903a80b3703d00f200320053602a80b200341d00f6aad4280808080800484200341a80b6aad4280808080c0008410020b20002004370300200042003703080c1b0b200141086a280200210920012802042101024020022d00000d0020022d000141ff01714101470d0002402009450d00200110350b20004200370308200042003703000c1b0b02402009450d00200110350b20004200370308200041186a4102360200200042013703000c1a0b200341a80b6a41386a200141c0006a290300370300200341a80b6a41306a200141386a290300370300200341a80b6a41286a200141306a290300370300200341a80b6a41206a200141286a290300370300200341a80b6a41186a200141206a290300370300200341a80b6a41106a200141186a290300370300200341a80b6a41086a200141106a2903003703002003200141086a2903003703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a108b060c190b20014180016a2802002111200141d0006a2903002106200141346a2d00002112200141306a2d0000210f2001412c6a2d00002113200141086a2d0000210920012f0036211420012d0035211520012f0032211020012d0031211620012f002e211720012d002d211820012f002a211920012d0029211a20034194026a41026a221b2001410b6a2d00003a000020034180026a41086a2205200141206a29000037030020034180026a41106a220a200141286a2d00003a0000200341e8016a41086a221c200141c0006a290300370300200341e8016a41106a221d200141c8006a290300370300200320012f00093b0194022003200141186a290000370380022003200141386a2903003703e8012001410c6a2800002107200141106a280000210b200141146a280000210c200341c0016a41206a221e200141f8006a290300370300200341c0016a41186a221f200141f0006a290300370300200341c0016a41106a2220200141e8006a290300370300200341c0016a41086a2221200141e0006a290300370300200341a0016a41186a22222001419c016a280200360200200341a0016a41106a222320014194016a290200370300200341a0016a41086a22242001418c016a2902003703002003200141d8006a2903003703c001200320014184016a2902003703a0012002411a6a2901002104200241196a2d00002125200241186a2d00002126200241166a2f01002127200241156a2d00002128200241146a2d00002129200241126a2f0100212a200241116a2d0000212b200241106a2d0000212c2002410e6a2f0100212d2002410d6a2d0000212e2002410c6a2d0000212f2002410a6a2f01002130200241096a2d00002131200241086a2d00002132200241066a2f01002133200241056a2d00002134200241046a2d00002135200241026a2f0100213620022d0001210d20022d0000210102400240024002400240024020090e06000102030405000b200341a80b6a41146a4101360200200342013702ac0b200341e8d4ca003602a80b2003410436029c062003419cd5ca0036029806200320034198066a3602b80b200341a80b6a41b0b4cc00104c000b200341c8046a41086a2005290300370300200341c8046a41106a200a2d00003a000020034188036a41086a201c29030037030020034188036a41106a201d29030037030020034198066a41086a202129030037030020034198066a41106a202029030037030020034198066a41186a201f29030037030020034198066a41206a201e29030037030020032003290380023703c804200320032903e80137038803200320032903c00137039806200341800e6a41186a2022280200360200200341800e6a41106a2023290300370300200341800e6a41086a2024290300370300200320032903a0013703800e024002400240200d200141ff01714100477241ff01710d00200341f0086a41186a22054200370300200341f0086a41106a22094200370300200341f0086a41086a22024200370300200342003703f00841f1d8cb00ad42808080809001842208100122072900002104200341c00a6a41086a2201200741086a290000370300200320043703c00a2007103520022001290300370300200320032903c00a3703f00841e2d8cb00ad4280808080f00184220e1001220729000021042001200741086a290000370300200320043703c00a20071035200920032903c00a2204370300200341b8026a41086a22072002290300370300200341b8026a41106a220a2004370300200341b8026a41186a220d2001290300370300200320032903f0083703b802200341a80b6a200341b8026a10da020240410020032802980c20032d00b00c4102461b2011490d0041832421010c020b200341b40b6a2011360200200341a80b6a41086a41053a00002003410d3a00a80b41b0b4cc004100200341a80b6a10d401200341a80b6a41106a200341c8046a41086a290300370300200341a80b6a41186a200341c8046a41106a2d00003a00002003200c3602ac0b2003200b3602a80b200320032903c8043703b00b200320143b01ce0b200320153a00cd0b200320123a00cc0b200320103b01ca0b200320163a00c90b2003200f3a00c80b200320173b01c60b200320183a00c50b200320133a00c40b200320193b01c20b2003201a3a00c10b200341e00b6a20034188036a41106a290300370300200341d80b6a20034188036a41086a290300370300200341f80b6a20034198066a41086a290300370300200341800c6a20034198066a41106a290300370300200341880c6a20034198066a41186a290300370300200341900c6a200341b8066a290300370300200320063703e80b200320113602980c20032003290388033703d00b20032003290398063703f00b200341b40c6a200341800e6a41186a280200360200200341ac0c6a200341800e6a41106a290300370200200341a40c6a200341800e6a41086a290300370200200320032903800e37029c0c200542003703002009420037030020024200370300200342003703f00820081001220b29000021042001200b41086a290000370300200320043703c00a200b103520022001290300370300200320032903c00a3703f008200e1001220b29000021042001200b41086a290000370300200320043703c00a200b1035200920032903c00a370000200941086a200129030037000020072002290300370300200a2009290300370300200d2005290300370300200320032903f0083703b802200341003602f808200342013703f008200341a80b6a200341f0086a10f30520032802f4082101200341b8026aad428080808080048420033502f80842208620032802f0082202ad84100202402001450d00200210350b420021040c020b41822421010b200041206a41163602002000411c6a41bcffc600360200200041186a2001360200420121040b20004200370308200020043703000c1c0b024002400240200141ff01710d00200d41ff01714101470d00200341f0086a41186a420037030041102105200341f0086a41106a220a4200370300200341f0086a41086a22024200370300200342003703f00841f1d8cb00ad4280808080900184100122092900002104200341c00a6a41086a2201200941086a290000370300200320043703c00a2009103520022001290300370300200320032903c00a3703f00841e2d8cb00ad4280808080f001841001220929000021042001200941086a290000370300200320043703c00a20091035200a20032903c00a2204370300200341b8026a41086a2002290300370300200341b8026a41106a2004370300200341b8026a41186a2001290300370300200320032903f0083703b802200341a80b6a200341b8026a10da0220032903a80b210420032903b00b210620032903b80b210820032903c00b210e20032903c80b213720032903d00b213820032903d80b213920032903e00b213a20032903e80b213b20032903f00b213c20032903f80b213d20032903800c213e20032903880c213f20032903900c214020032802980c210f200328029c0c210220032802a00c210920032802a40c211020032802a80c210a20032802ac0c210d20032d00b00c21012003200341a80b6a418c016a2800003600f308200320032800b10c3602f0080240024020014102470d0020034280c2d72f3703800720034280e1eb173703f806200342a0c21e3703f006200342a0c21e3703e806200342e0ef97203703e006200342e0c9dc293703d806200342e0ef97203703d006200342a0c21e3703c806200342a0c21e3703c006200342a0c21e3703b806200342a0c21e3703b006200342a0c21e3703a806200342a0c21e3703a006200342a0c21e370398064100210120034100360288074120210d41808001210a418080042109410421020c010b20034198066a418c016a20032800f3083600002003200f3602880720032040370380072003203f3703f8062003203e3703f0062003203d3703e8062003203c3703e0062003203b3703d8062003203a3703d006200320393703c806200320383703c006200320373703b8062003200e3703b006200320083703a806200320063703a0062003200437039806200320032802f0083600a107201021050b200320013a00a0072003200d36029c072003200a36029807200320053602940720032009360290072003200236028c07200341a80b6a2007200c20034198066a108c06024020032802a80b4101460d00200341800e6a41186a2202200341a80b6a410472220141186a280200360200200341800e6a41106a2209200141106a290200370300200341800e6a41086a220d200141086a290200370300200320012902003703800e200341c00a6a41026a220f200cad4220862007ad841009220141026a2d00003a0000200128000321052001280007210a20012f00002110200341c8046a410d6a2216200141186a290000370000200341c8046a41086a221b200141136a290000370300200320103b01c00a2003200129000b3703c80420011035200341a80b6a41186a2002280200360200200341a80b6a41106a2009290300370300200341a80b6a41086a200d290300370300200320032903800e3703a80b200341d00f6a41026a2202200f2d00003a000020034188036a41086a2209201b29030037030020034188036a410d6a220d2016290000370000200320032f01c00a3b01d00f200320032903c8043703880341f1d8cb00ad4280808080900184100122012900002104200341a0116a41086a200141086a290000370300200320043703a0112001103541a0e0c600ad4280808080b00184100122012900002104200341f8106a41086a200141086a290000370300200320043703f81020011035412010332201450d0e200120032f01d00f3b00002001200a36000720012005360003200120032903880337000b200141026a20022d00003a0000200141136a2009290300370000200141186a200d290000370000412010332202450d0e20022001290000370000200241186a2209200141186a290000370000200241106a220d200141106a290000370000200241086a220f200141086a2900003700002001103541c00010332201450d0e200120032903f810370010200120032903a011370000200141086a200341a0116a41086a290300370000200141186a200341f8106a41086a29030037000020012002290000370020200141286a200f290000370000200141306a200d290000370000200141386a20092900003700002002103520034100360290032003420137038803200341a80b6a20034188036a10e201200341a80b6a41047220034188036a10e201200341a80b6a41086a20034188036a10e201200320032d00c00b220d3a00d00f02400240200328028c032003280290032202460d0020032802880321090c010b200241016a22092002490d112002410174220d2009200d20094b1b220d4100480d110240024020020d00410021020240200d0d00410121090c020b200d103322090d010c230b20032802880321092002200d460d0020092002200d10372209450d220b2003200d36028c03200320093602880320032d00d00f210d0b200920026a200d3a00002003200241016a3602900320032802b40b2116200341bc0b6a280200220220034188036a107702400240200328028c032210200328029003220d6b2002490d0020032802880321092010210f0c010b200d20026a2209200d490d112010410174220f2009200f20094b1b220f4100480d110240024020100d000240200f0d00410121090c020b200f10332209450d230c010b20032802880321092010200f460d0020092010200f10372209450d220b2003200f36028c0320032009360288030b2009200d6a20162002109d081a2001ad4280808080800884200d20026aad4220862009ad8410020240200f450d00200910350b200110350240200341b80b6a280200450d00201610350b20034188036a41026a2202200341c00a6a41026a2d00003a0000200341a80b6a41086a2209200341c8046a41086a290300370300200341a80b6a410d6a220d200341c8046a410d6a290000370000200320032f01c00a3b018803200320032903c8043703a80b41f1d8cb00ad4280808080900184100122012900002104200341a0116a41086a200141086a290000370300200320043703a011200110354194e0c600ad4280808080c00184100122012900002104200341f8106a41086a200141086a290000370300200320043703f81020011035412010332201450d0e200120032f0188033b00002001200a36000720012005360003200120032903a80b37000b200141026a20022d00003a0000200141136a2009290300370000200141186a2209200d290000370000412010332202450d0e20022001290000370000200241186a2009290000370000200241106a2209200141106a290000370000200241086a220d200141086a2900003700002001103541c00010332201450d0e200120032903f810370010200120032903a011370000200141086a200341a0116a41086a290300370000200141186a200341f8106a41086a29030037000020012002290000370020200141286a200d290000370000200141306a2009290000370000200141386a200241186a29000037000020021035200341c0003602ac0b200320013602a80b2007200c200341a80b6a109403200110350240200b450d00200710350b200341d8106a41026a200341c00a6a41026a2d000022013a0000200341f0086a41086a2202200341c8046a41086a290300370300200341f0086a410d6a2209200341c8046a410d6a290000370000200320032f01c00a22073b01d810200320032903c8043703f008200341a80b6a41086a41043a0000200341b10b6a20073b0000200341b30b6a20013a0000200341b80b6a200a360200200341b40b6a20053602002003410d3a00a80b200341bc0b6a20032903f008370200200341c40b6a2002290300370200200341c90b6a200929000037000041b0b4cc004100200341a80b6a10d401420021040c030b200341b00b6a350200210420033502ac0b21060240200b450d00200710350b20044220862006842104410021010c010b410221010240200b450d00200710350b0b2000411c6a2004370200200041186a2001360200420121040b20004200370308200020043703000c1b0b201d290300210820032903f001210e20032802e8012109200341a0116a41106a200a2d00003a0000200341a0116a41086a200529030037030020032003290380023703a0112016410874200f72201041107472210202400240200141ff01710d00200d41ff01714101470d00200320043701e80f200320253a00e70f200320263a00e60f200320273b01e40f200320283a00e30f200320293a00e20f2003202a3b01e00f2003202b3a00df0f2003202c3a00de0f2003202d3b01dc0f2003202e3a00db0f2003202f3a00da0f200320303b01d80f200320313a00d70f200320323a00d60f200320333b01d40f200320343a00d30f200320353a00d20f200320363b01d00f200341a80b6a41086a2201200c360200200341b40b6a20032903a011370200200341bc0b6a200341a0116a41086a290300370200200341c40b6a200341a0116a41106a2d00003a0000200341ca0b6a20173b0100200341c90b6a20183a0000200341c80b6a20133a0000200341c60b6a20193b0100200341c50b6a201a3a00002003200b3602ac0b200320073602a80b20034198066a200341a80b6a108b02200341800e6a41086a2207200341a1066a290000370300200341800e6a41106a2205200341a9066a290000370300200341800e6a41186a220a200341b1066a29000037030020032003290099063703800e20032d0098064101470d01410121072015410874201272201441107472450d190c180b4102210720154108742012722014411074720d170c180b200341b8026a41086a220b2007290300370300200341b8026a41106a22072005290300370300200341b8026a41186a2205200a290300370300200320032903800e3703b8022003200637038011200320063703f810200341c8046a41186a200341d00f6a41186a290100370300200341c8046a41106a200341d00f6a41106a290100370300200341c8046a41086a200341d00f6a41086a290100370300200320032901d00f3703c80420034188036a41186a200529030037030020034188036a41106a200729030037030020034188036a41086a200b290300370300200320032903b802370388032003200341f8106a3602b805200341d8106a41186a4200370300200341d8106a41106a22074200370300200341d8106a41086a22054200370300200342003703d81041f1d8cb00ad42808080809001841001220a29000021042005200a41086a290000370300200320043703d810200a103541e2d8cb00ad4280808080f001841001220a29000021042001200a41086a290000370300200320043703a80b200a1035200720032903a80b2204370300200341b8106a41086a2005290300370300200341b8106a41106a2004370300200341b8106a41186a2001290300370300200320032903d8103703b810200341a80b6a200341b8106a10da0220032903a80b210420032903b00b210620032903b80b213720032903c00b213820032903c80b213920032903d00b213a20032903d80b213b20032903e00b213c20032903e80b213d20032903f00b213e20032903f80b213f20032903800c214020032903880c214120032903900c214220032802980c2110200328029c0c210520032802a00c210a20032802a40c210b20032802a80c210c20032802ac0c210d20032d00b00c21012003200341a80b6a418c016a2800003600f308200320032800b10c3602f0082015410874201272201441107472210f0240024020014102470d0020034280c2d72f3703e80e20034280e1eb173703e00e200342a0c21e3703d80e200342a0c21e3703d00e200342e0ef97203703c80e200342e0c9dc293703c00e200342e0ef97203703b80e200342a0c21e3703b00e200342a0c21e3703a80e200342a0c21e3703a00e200342a0c21e3703980e200342a0c21e3703900e200342a0c21e3703880e200342a0c21e3703800e41002101200341003602f00e4120210d41808001210c4110210b41808004210a410421050c010b200341800e6a418c016a20032800f308360000200320103602f00e200320423703e80e200320413703e00e200320403703d80e2003203f3703d00e2003203e3703c80e2003203d3703c00e2003203c3703b80e2003203b3703b00e2003203a3703a80e200320393703a00e200320383703980e200320373703900e200320063703880e200320043703800e200320032802f0083600890f0b200341a80f6a4200370300200341980f6a4200370300200320013a00880f2003200d3602840f2003200c3602800f2003200b3602fc0e2003200a3602f80e200320053602f40e2003428080e983b1de163703a00f2003428080e983b1de163703900f200342a08080808080103703b00f2003200341800e6a360298022003200341800e6a3602e802200341d8106a41186a220a4200370300200341d8106a41106a220b4200370300200341d8106a41086a22014200370300200342003703d81041d1efcb00ad42808080809001841001220529000021042001200541086a290000370300200320043703d8102005103541ebc3c400ad428080808030841001220c2900002104200341a80b6a41086a2205200c41086a290000370300200320043703a80b200c1035200720032903a80b370000200741086a220d2005290300370000200341b8106a41086a22102001290300370300200341b8106a41106a2216200b290300370300200341b8106a41186a221b200a290300370300200320032903d8103703b810200341386a200341b8106a10e102200329034021042003280238211c200a4200370300200b420037030020014200370300200342003703d81041d1c4c700ad4280808080e000841001220c29000021062001200c41086a290000370300200320063703d810200c103541e7c4c700ad4280808080e000841001220c29000021062005200c41086a290000370300200320063703a80b200c1035200720032903a80b370000200d2005290300370000201020012903003703002016200b290300370300201b200a290300370300200320032903d8103703b810200341306a200341b8106a412010c001200341a8096a42003703002003419c096a419494ca0036020020034198096a41b0b4cc0036020020034194096a4100360200200341c8096a200341c8046a41086a290300370300200341d0096a200341c8046a41106a290300370300200341d8096a200341c8046a41186a2903003703002003428080808080013703a0092003420037038809200342003703f808200320032903c8043703c00920032802302101200328023421072003200341e8026a3602b809200320034198026a3602b4092003200341800e6a3602b00920032007410020011b3602bc09200320044200201c1b3703f008200341a80b6a41186a20034188036a41186a290300370300200341a80b6a41106a20034188036a41106a290300370300200520034188036a41086a29030037030020032003290388033703a80b200320093602a0062003200f36029c062003200236029806200341c00a6a200341f0086a200341a80b6a200e2008200341f8106a20034198066a10ef034101210b024020032802c00a220c0d00200341c00a6a41106a2d00000d00200341a80b6a41086a20034190096a29030037030020034198066a41086a200341b40b6a28020036020020032003290388093703a80b200320032902ac0b37039806200341e8116a20034198066a10f0034100210b0b20032802a409220520032802ac09220141d8026c6a210920032802a809210a2003200341b8056a3602d81020052102024002402001450d00200341a80b6a4101722107200521010240034020012d0000210220034198066a200141016a41d702109d081a20024103460d01200320023a00a80b200720034198066a41d702109d081a200341d8106a200341a80b6a108d06200141d8026a22012009470d000c030b0b200141d8026a21020b20092002460d0003402002220141d8026a21020240024020012d0000220741014b0d000240024020070e020001000b0240200141086a28020041ffffff3f71450d00200141046a28020010350b200141106a2d00004107470d02200141386a280200450d02200141346a28020010350c020b200141286a10bb020c010b200141e8006a28020041ffffff3f71450d00200141e4006a28020010350b20092002470d000b0b0240200a450d00200a41d8026c450d00200510350b200341d40a6a290200210e200341c00a6a41106a280200210a200341c80a6a290300210820032802c40a2107024020032802fc082201450d00200341f0086a41106a280200450d00200110350b0240200b450d0002400240200328028c0922050d004100210b200341bc0b6a4100360200200341003602ac0b0c010b200328029409210b0240024020034190096a28020022020d00200521010c010b2002210120052109034020092802880b21092001417f6a22010d000b200521010340200120012f01064102746a41880b6a28020021012002417f6a22020d000b200921050b200341c40b6a20012f0106360200200341c00b6a4100360200200341bc0b6a2001360200200341003602b80b200342003703b00b200320053602ac0b200341003602a80b0b2003200b3602c80b200341a80b6a108f030b200329038011210420032903f810210602400240200c450d000240200ea7450d00200a10350b200620047d210e410121010c010b200620047d210e410021012008a7450d00200710350b42002104420121062001450d190c180b201c290300210820032903e801210e20032903f8012106200341af026a2005290300370000200341b7026a200a2d00003a00002003201b2d00003a009a02200320032f0194023b0198022003200c3600a3022003200b36009f022003200736009b0220032003290380023700a7022018410874201372201741107472210a02400240200141ff01710d00200d41ff01714101470d00200320313a00bf02200320323a00be02200320333b01bc02200320343a00bb02200320353a00ba02200320363b01b8022003202b3a00c7022003202c3a00c6022003202d3b01c4022003202e3a00c3022003202f3a00c202200320303b01c002200320253a00cf02200320263a00ce02200320273b01cc02200320283a00cb02200320293a00ca022003202a3b01c802200320043701d002200320063703e002200320063703d802200341e8026a41186a200437030041102107200341e8026a41106a20032901c802370300200341e8026a41086a20032901c002370300200320032901b8023703e802200341d8106a41186a4200370300200341d8106a41106a22024200370300200341d8106a41086a22014200370300200342003703d81041f1d8cb00ad42808080809001841001220929000021042001200941086a290000370300200320043703d8102009103541e2d8cb00ad4280808080f00184100122092900002104200341a80b6a41086a2205200941086a290000370300200320043703a80b20091035200220032903a80b2204370300200341b8106a41086a2001290300370300200341b8106a41106a2004370300200341b8106a41186a2005290300370300200320032903d8103703b810200341a80b6a200341b8106a10da0220032903a80b210420032903b00b210620032903b80b213720032903c00b213820032903c80b213920032903d00b213a20032903d80b213b20032903e00b213c20032903e80b213d20032903f00b213e20032903f80b213f20032903800c214020032903880c214120032903900c214220032802980c211b200328029c0c210920032802a00c210520032802a40c211c20032802a80c210b20032802ac0c210c20032d00b00c21012003200341a80b6a418c016a2800003600f308200320032800b10c3602f0082016410874200f72201041107472210d0240024020014102470d0020034280c2d72f3703f00320034280e1eb173703e803200342a0c21e3703e003200342a0c21e3703d803200342e0ef97203703d003200342e0c9dc293703c803200342e0ef97203703c003200342a0c21e3703b803200342a0c21e3703b003200342a0c21e3703a803200342a0c21e3703a003200342a0c21e37039803200342a0c21e37039003200342a0c21e3703880341002101200341003602f8034120210c41808001210b418080042105410421090c010b20034188036a418c016a20032800f3083600002003201b3602f803200320423703f003200320413703e803200320403703e0032003203f3703d8032003203e3703d0032003203d3703c8032003203c3703c0032003203b3703b8032003203a3703b003200320393703a803200320383703a003200320373703980320032006370390032003200437038803200320032802f00836009104201c21070b200341b0046a4200370300200341a0046a4200370300200320013a0090042003200c36028c042003200b3602880420032007360284042003200536028004200320093602fc032003428080e983b1de163703a8042003428080e983b1de1637039804200342a08080808080103703b804200320034188036a3602c004200320034188036a3602c404200341d8106a41186a22094200370300200341d8106a41106a22074200370300200341d8106a41086a22014200370300200342003703d81041d1efcb00ad42808080809001841001220529000021042001200541086a290000370300200320043703d8102005103541ebc3c400ad428080808030841001220b2900002104200341a80b6a41086a2205200b41086a290000370300200320043703a80b200b1035200220032903a80b370000200241086a220c2005290300370000200341b8106a41086a220f2001290300370300200341b8106a41106a22102007290300370300200341b8106a41186a22162009290300370300200320032903d8103703b810200341d0006a200341b8106a10e102200329035821042003280250211b200942003703002007420037030020014200370300200342003703d81041d1c4c700ad4280808080e000841001220b29000021062001200b41086a290000370300200320063703d810200b103541e7c4c700ad4280808080e000841001220b29000021062005200b41086a290000370300200320063703a80b200b1035200220032903a80b370000200c2005290300370000200f20012903003703002010200729030037030020162009290300370300200320032903d8103703b810200341c8006a200341b8106a412010c00120034180056a4200370300200341f4046a419494ca00360200200341c8046a41286a41b0b4cc00360200200341ec046a4100360200200341a0056a200341e8026a41086a290300370300200341a8056a200341e8026a41106a290300370300200341b0056a200341e8026a41186a2903003703002003428080808080013703f804200342003703e004200342003703d004200320032903e8023703980520032802482101200328024c21022003200341c4046a360290052003200341c0046a36028c05200320034188036a3602880520032002410020011b36029405200320044200201b1b3703c804200320143b01a206200320153a00a106200320123a00a0062003200d36029c062003200a36029806200341a80b6a200341c8046a200e2008200341d8026a20034198026a20034198066a10c0054101211a200341a80b6a41047221010240024020032802a80b4101470d00200341cc056a200141106a290200370200200341c4056a200141086a2902003702004101211a200341013602b805200320012902003702bc05200341b8056a410472212f0c010b200341b8056a410c6a200141286a2902003702002003200141206a2902003702bc05200341003602b805200341b8056a410472212f200341b8056a41106a2d00000d00200341a80b6a41086a200341e8046a29030037030020034198066a41086a200341a80b6a410c6a280200360200200320032903e0043703a80b200320032902ac0b37039806200341e8116a20034198066a10f0034100211a0b20032802fc042235200328028405220141d8026c6a210720032802800521362035210202402001450d00200341f10b6a211620034181106a210f200341a80b6a41017221302003419f066a2131200341a80b6a41186a211b200341b10b6a210c200341a0116a41116a211d200341a0116a410272211420034198066a41e0006a2132200341d00f6a41186a2133200341d10b6a211c200341a4106a2115200341a0116a410f6a2112200341d00f6a41116a2110200341b8106a410f6a2113200341e8066a2134203521010240034020012d00002102200341a40b6a41026a220d200141036a2d00003a00002003200141016a2f00003b01a40b200141046a2802002109200141086a28020021052001410c6a280200210a200341c00a6a200141106a41e000109d081a200141f8006a2903002104200141f0006a290300210620014180016a2903002108200341f0086a20014188016a41d001109d081a20024103460d01200341b4106a41026a220b200d2d00003a0000200320032f01a40b3b01b410200341d00f6a200341c00a6a41e000109d081a200341800e6a200341f0086a41d001109d081a024002400240024020020e03010200010b201320032900d00f370000201341086a200341d00f6a41086a2202290000370000201341106a200341d00f6a41106a220d2d00003a0000200320032f01b4103b01b8102003200a3600c310200320053600bf10200320093600bb102003200b2d00003a00ba10200341d8106a41186a2217201041186a2218290000370300200341d8106a41106a2225201041106a2226290000370300200341d8106a41086a2227201041086a2228290000370300200320102900003703d810200341f8106a41186a2229200f41186a222a290000370300200341f8106a41106a222b200f41106a222c290000370300200341f8106a41086a222d200f41086a222e2900003703002003200f2900003703f8102003200a3600ab11200320053600a711200320093600a3112003200b2d00003a00a211200320032f01b4103b01a011201220032900d00f370000201241086a2002290000370000201241106a200d2d00003a000020034198066a41186a201829000037030020034198066a41106a202629000037030020034198066a41086a20282900003703002003201029000037039806201b202a290000370300200341a80b6a41106a202c290000370300200341a80b6a41086a202e2900003703002003200f2900003703a80b200341d8116a41086a201541086a280000360200200320152900003703d811200341c8116a200341a0116a20034198066a200341a80b6a20062004200341d8116a10f10320032d00c8112102200c20032903b810370000200c41086a200341b8106a41086a290300370000200c41106a200341b8106a41106a290300370000200c41186a200341b8106a41186a290300370000201c20032903d810370000201c41086a2027290300370000201c41106a2025290300370000201c41186a2017290300370000200341033a00b00b2003410d3a00a80b200341a80b6a41f8006a2004370300201641186a2029290300370000201641106a202b290300370000201641086a202d290300370000201620032903f810370000200320063703980c200320024104463a00910c41b0b4cc004100200341a80b6a10d4010c020b2031200341d00f6a41e000109d081a2003410d3a00a80b203020034198066a41e700109d081a200341a80b6a41f0006a2004370300200320063703900c200320083703a00c2009200a200341a80b6a10d401200541ffffff3f71450d01200910350c010b200341d8116a41026a2202200b2d00003a0000200341d8106a41086a220d200341d00f6a41086a2217290000370300200341d8106a41106a2218200341d00f6a41106a22252d00003a0000200320032f01b4103b01d811200320032900d00f3703d81020034198066a203341c800109d081a20342004370300200320063703e006200320083703f0062032200341800e6a41d001109d081a200341b8106a20034198066a10d803200341a80b6a20034198066a41b002109d081a201420032f01b4103b0000201441026a200b2d00003a0000201d20032900d00f370000201d41086a2017290000370000201d41106a20252d00003a000020034180023b01a0112003200a3600ad11200320053600a911200320093600a511200341f8106a200341a80b6a200341a0116a10ac034200210402402003290380114201520d00420020032903b81022042003290388117d220620062004561b21040b2003427f20032903e002220620047c220420042006541b220420032903d802220620042006561b3703e00220032903f8102104200c20032f01d8113b0000200c41026a20022d00003a0000201b20032903d810370000201b41086a200d290300370000201b41106a20182d00003a0000200341063a00b00b2003410d3a00a80b2003200a3602bc0b200320053602b80b200320093602b40b20032004503a00d10b41b0b4cc004100200341a80b6a10d4010b200141d8026a22012007470d000b200721020c010b200141d8026a21020b024020072002460d0003402002220141d8026a21020240024020012d0000220941014b0d000240024020090e020001000b0240200141086a28020041ffffff3f71450d00200141046a28020010350b200141106a2d00004107470d02200141386a280200450d02200141346a28020010350c020b200141286a10bb020c010b200141e8006a28020041ffffff3f71450d00200141e4006a28020010350b20072002470d000b0b02402036450d00203641d8026c450d00203510350b202f290210210e202f28020c210b202f2902042104202f280200210720032802b8052105024020032802d4042201450d00200341d8046a280200450d00200110350b0240201a450d000240024020032802e404220a0d004100210c200341bc0b6a4100360200200341003602ac0b0c010b20032802ec04210c02400240200341e8046a28020022020d00200a21010c010b20022101200a2109034020092802880b21092001417f6a22010d000b200a21010340200120012f01064102746a41880b6a28020021012002417f6a22020d000b2009210a0b200341c40b6a20012f0106360200200341c00b6a4100360200200341bc0b6a2001360200200341003602b80b200342003703b00b2003200a3602ac0b200341003602a80b0b2003200c3602c80b200341a80b6a108f030b20032903e002210620032903d802210820054101470d010240200ea7450d00200b10350b200820067d2108420121060c150b420021064102210702402016410874200f722010411074720d000c150b200a10350c140b02402004a7450d00200710350b200820067d210842002104420121060c140b20032901f201210620032d00f101210220032d00f001210920032f01ee01211c20032d00ed01211d20032d00ec01211e20032f01ea01211f20032d00e901212020032d00e8012121200320032f0194023b01c00a2003200c3600cb0a2003200b3600c70a200320073600c30a2003201b2d00003a00c20a200341d70a6a2005290300370000200341df0a6a200a2d00003a000020032003290380023700cf0a200141ff01710d0f02400240201a4101710d0041022107200d41ff01714101460d010c110b41002107201c2127201f212a2014212d2010213020172133201921362013213520182134200f2132201621312012212f2015212e2021212c2020212b201e2129201d2128200921262002212520062104200d41ff01714102470d100b200320043703e80f200320253a00e70f200320263a00e60f200320273b01e40f200320283a00e30f200320293a00e20f2003202a3b01e00f2003202b3a00df0f2003202c3a00de0f2003202d3b01dc0f2003202e3a00db0f2003202f3a00da0f200320303b01d80f200320313a00d70f200320323a00d60f200320333b01d40f200320343a00d30f200320353a00d20f200320363b01d00f200341f0086a200341c00a6a10f303200341a80b6a20032802f008220220032802f80810d90220032d00a80b210120034198066a200341a80b6a41017241d700109d081a024020014102460d00200341800e6a20034198066a41d700109d081a0b024020032802f408450d00200210350b024002402001417f6a41ff01714102490d00200341f0086a200341870e6a41d000109d081a200341a80b6a41186a4200370300200341a80b6a41106a22094200370300200341a80b6a41086a22014200370300200342003703a80b41d1c4c700ad4280808080e000841001220229000021042001200241086a290000370300200320043703a80b2002103541e7c4c700ad4280808080e00084100122022900002104200341f8106a41086a2205200241086a290000370300200320043703f81020021035200920032903f810220437030020034198066a41086a200129030037030020034198066a41106a200437030020034198066a41186a2005290300370300200320032903a80b37039806200341f8006a20034198066a412010c001200341c8046a200341c00a6a200328027c410020032802781b22012007200341f0086a10f603024020032802c804417f6a41014b0d0020034198066a200341f0086a41d000109d081a20034188036a41186a200341c8046a41186a29030037030020034188036a41106a200341c8046a41106a29030037030020034188036a41086a200341c8046a41086a290300370300200320032903c80437038803200341a80b6a200341c00a6a20034198066a200120034188036a10f703024020032d00a80b0d00200341c40b6a280200450d00200341c00b6a28020010350b42002104200342003703880e200342808086bdbacdd21a3703800e2003200341d00f6a3602f00820034198066a200341d00f6a200341800e6a200341f0086a109a022003280298064101460d02200341c0066a290300210820034198066a41206a290300210e024020034198066a41086a220b2903004201520d0020034198066a41106a2903002104200341e00b6a20034198066a41186a290300370300200341d80b6a2004370300200341a80b6a41086a41003a0000200341b10b6a20032903d00f370000200341b90b6a200341d00f6a41086a290300370000200341c10b6a200341d00f6a41106a290300370000200341c90b6a200341d00f6a41186a290300370000200341033a00a80b41b0b4cc004100200341a80b6a10d4010b42002104200341a80b6a41186a22024200370300200341a80b6a41106a22074200370300200341a80b6a41086a22014200370300200342003703a80b41b6fdc600ad428080808080018422061001220a2900002137200341a0116a41086a2205200a41086a290000370300200320373703a011200a103520012005290300370300200320032903a0113703a80b41e489c200ad4280808080d0018422371001220c2900002138200341f8106a41086a220a200c41086a290000370300200320383703f810200c1035200920032903f810370000200941086a220f200a290300370000200b200129030037030020034198066a41106a2210200729030037030020034198066a41186a22162002290300370300200320032903a80b37039806200341e0006a20034198066a412010d701200341e0006a41106a2903002138200329036821392003280260210c200242003703002007420037030020014200370300200342003703a80b20061001220d29000021062005200d41086a290000370300200320063703a011200d103520012005290300370300200320032903a0113703a80b2037100122052900002106200a200541086a290000370300200320063703f81020051035200920032903f810370000200f200a290300370000200b20012903003703002010200729030037030020162002290300370300200320032903a80b370398062003427f20384200200c1b220620087c20394200200c1b2208200e7c220e2008542201ad7c22082001200820065420082006511b22011b3703b00b2003427f200e20011b3703a80b20034198066aad4280808080800484200341a80b6aad428080808080028410020c140b20034184096a280200450d0020032802800910350b420021040c120b200328029c06220141ff01714104460d112001418080807871210220014180807c712109200141807e712107200341a0066a2903002204422088a721052004a7210a0c100b200341d00b6a2001412c6a280200360200200341a80b6a41206a200141246a290200370300200341a80b6a41186a2001411c6a290200370300200341a80b6a41106a200141146a290200370300200341a80b6a41086a2001410c6a290200370300200320012902043703a80b20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a108e060c170b2001411c6a280200210d200141186a280200210f200141146a28020021102001410c6a2802002116200141086a280200211c410021094102210702400240024020022d0000450d000c010b20022d000141ff01714102470d00200141246a280200211b200141106a2802002107200341a80b6a41186a22054200370300200341a80b6a41106a22014200370300200341a80b6a41086a22024200370300200342003703a80b41a3edcb00ad4280808080f000841001220929000021042002200941086a290000370300200320043703a80b2009103541a5ebcb00ad4280808080c001841001220a2900002104200341f8106a41086a2209200a41086a290000370300200320043703f810200a1035200120032903f810220437030020034198066a41086a220b200229030037030020034198066a41106a220c200437030020034198066a41186a221d2009290300370300200320032903a80b3703980620034188016a20034198066a412010c001200341a80b6a200328028c0141002003280288011b2213201b10ba0420034180016a20032802a80b220a20032802b00b41b0b4cc0041004100108a022003280280012112024020032802ac0b450d00200a10350b200542003703002001420037030020024200370300200342003703a80b4188e8cb00ad42808080808001841001220a29000021042002200a41086a290000370300200320043703a80b200a1035418fd1cb00ad4280808080c000841001220a29000021042009200a41086a290000370300200320043703f810200a1035200120032903f810370000200141086a2009290300370000200b2002290300370300200c2001290300370300201d2005290300370300200320032903a80b37039806200341a80b6a20034198066a10d80220032802a80b2201410120011b211d20032902ac0b420020011b21040240201241014622020d00201d201b4105746a4100201b2004422088a7491b22010d020b41eec3c4004181c4c40020021b21054113410a20021b210a2002411074210941032107200442ffffff3f83500d00201d10350b02402016450d00201c10350b0240200d450d00200d410c6c21022010210103400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b0240200f450d00200f410c6c450d00201010350b20004200370308200041206a200a3602002000411c6a2005360200200041186a200920077241802872360200200042013703000c170b200141086a2900002106200141106a29000021082001290000210e20034198066a41186a200141186a290000223737030020034198066a41106a200837030020034198066a41086a20063703002003200e37039806200341b50b6a2006370000200341bd0b6a2008370000200341c50b6a2037370000200341003a00ac0b2003410f3a00a80b2003200e3700ad0b41b0b4cc004100200341a80b6a10d401200341003602b00b200342013703a80b2007200341a80b6a10770240024020032802ac0b220920032802b00b22016b2007490d0020032802a80b21020c010b200120076a22022001490d08200941017422052002200520024b1b22054100480d080240024020090d00024020050d00410121020c020b200510332202450d1a0c010b20032802a80b210220092005460d0020022009200510372202450d190b200320053602ac0b200320023602a80b0b200220016a201c2007109d081a2003200120076a3602b00b200d200341a80b6a1077200d450d062010200d410c6c6a210c2010210203402002280200210b200241086a2802002201200341a80b6a10770240024020032802ac0b220720032802b00b22096b2001490d0020032802a80b21052007210a0c010b200920016a22052009490d092007410174220a2005200a20054b1b220a4100480d090240024020070d000240200a0d00410121050c020b200a10332205450d1b0c010b20032802a80b21052007200a460d0020052007200a10372205450d1a0b2003200a3602ac0b200320053602a80b0b200520096a200b2001109d081a2003200920016a22013602b00b2002410c6a2202200c470d000c0d0b0b200341a80b6a200141086a41a802109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a10b3040c150b200341a80b6a200141086a41c800109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a108f060c140b200341a80b6a200141046a41c400109d081a20034198066a41206a200241206a29020037030020034198066a41186a200241186a29020037030020034198066a41106a200241106a29020037030020034198066a41086a200241086a29020037030020032002290200370398062000200341a80b6a20034198066a1090060c130b200341800e6a41086a2207200141146a290200370300200341800e6a41106a22052001411c6a290200370300200341800e6a41186a220a200141246a290200370300200341800e6a41206a220b2001412c6a28020036020020032001410c6a2902003703800e2002411a6a2901002104200241196a2d0000210d200241186a2d0000210f200241166a2f01002110200241156a2d00002116200241146a2d0000211b200241126a2f0100211c200241116a2d0000211d200241106a2d000021122002410e6a2f010021132002410d6a2d000021142002410c6a2d000021152002410a6a2f01002117200241096a2d00002118200241086a2d00002125200241066a2f01002126200241056a2d00002127200241046a2d000021284102210c200241026a2f0100212920022d0001210920022d000021020240024002400240200141086a2802000e0400010203000b200341a80b6a41146a4101360200200342013702ac0b200341e8d4ca003602a80b2003410436029c062003419cd5ca0036029806200320034198066a3602b80b200341a80b6a41b0b4cc00104c000b02400240024002400240200241ff01710d00200941ff01714101460d010b200341023a0098060c010b200320043703c00b2003200d3a00bf0b2003200f3a00be0b200320103b01bc0b200320163a00bb0b2003201b3a00ba0b2003201c3b01b80b2003201d3a00b70b200320123a00b60b200320133b01b40b200320143a00b30b200320153a00b20b200320173b01b00b200320183a00af0b200320253a00ae0b200320263b01ac0b200320273a00ab0b200320283a00aa0b200320293b01a80b20034198066a200341a80b6a10890520032d0098064104460d010b20032802980621012000411c6a200329029c06370200200041186a2001360200420121040c010b420021040b200042003703080c090b20034198066a41206a200b28020036020020034198066a41186a200a29030037030020034198066a41106a200529030037030020034198066a41086a2007290300370300200320032903800e37039806200241ff01710d05200941ff01714101470d05200341a80b6a41206a20034198066a41206a280200360200200341a80b6a41186a20034198066a41186a290300370300200341a80b6a41106a20034198066a41106a290300370300200341a80b6a41086a20034198066a41086a29030037030020032003290398063703a80b200341f0086a200341a80b6a108b02024020032d00f0084101470d00200341013a00c8040c070b200341f0086a41086a2d00002101200341f9086a2f00002102200341fb086a2d00002109200341fc086a2d00002107200341fd086a2f00002105200341ff086a2d0000210a200341f0086a41106a2d0000210b20034181096a2f0000210c20034183096a2d0000210d20034184096a2d0000210f20034185096a2f0000211020034187096a2d00002116200341f0086a41186a2d0000211b20032f00f108211c20032d00f308211d20032d00f408211220032f00f508211320032d00f7082114200320034189096a2900003703a0032003201b3a009f03200320163a009e03200320103b019c032003200f3a009b032003200d3a009a032003200c3b0198032003200b3a0097032003200a3a009603200320053b019403200320073a009303200320093a009203200320023b019003200320013a008f03200320143a008e03200320133b018c03200320123a008b032003201d3a008a032003201c3b018803200341c8046a20034188036a10890520032d00c8044104470d06420021040c070b200141c8006a290300210e200141c0006a2903002137200141386a2903002106200141306a2903002108200141d0006a280200212a20034198066a41206a200b28020036020020034198066a41186a200a29030037030020034198066a41106a200529030037030020034198066a41086a2007290300370300200320032903800e37039806024002400240200241ff01710d00200941ff01714101470d00200320043703e0042003200d3a00df042003200f3a00de04200320103b01dc04200320163a00db042003201b3a00da042003201c3b01d8042003201d3a00d704200320123a00d604200320133b01d404200320143a00d304200320153a00d204200320173b01d004200320183a00cf04200320253a00ce04200320263b01cc04200320273a00cb04200320283a00ca04200320293b01c8044103210c200842808084fea6dee1115441002006501b0d00200341a80b6a41206a20034198066a41206a280200360200200341a80b6a41186a20034198066a41186a290300370300200341a80b6a41106a20034198066a41106a290300370300200341a80b6a41086a20034198066a41086a29030037030020032003290398063703a80b200341f0086a200341a80b6a108b024101210c024020032d00f0084101470d000c020b200341f0086a41086a2d00002101200341f9086a2f00002102200341fb086a2d00002109200341fc086a2d00002107200341fd086a2f00002105200341ff086a2d0000210a200341f0086a41106a2d0000210b20034181096a2f0000210c20034183096a2d0000210d20034184096a2d0000210f20034185096a2f0000211020034187096a2d00002116200341f0086a41186a2d0000211b20032f00f108211c20032d00f308211d20032d00f408211220032f00f508211320032d00f7082114200320034189096a2900003703a0032003201b3a009f03200320163a009e03200320103b019c032003200f3a009b032003200d3a009a032003200c3b0198032003200b3a0097032003200a3a009603200320053b019403200320073a009303200320093a009203200320023b019003200320013a008f03200320143a008e03200320133b018c03200320123a008b032003201d3a008a032003201c3b018803200341a80b6a20034188036a108a0520034198016a20032802a80b220120032802b00b41b0b4cc0041004100108a022003280298012102024020032802ac0b450d00200110350b41012101024020024101470d00411b21074103210c4117210941aaefc40021020c020b200341a80b6a200341c8046a20034188036a20082006410110e602024020032d00a80b220c4104460d00200341b00b6a280200210920032802ac0b210220032d00ab0b210520032d00aa0b210120032d00a90b21070c030b200341a80b6a20034188036a108a0520034190016a20032802a80b220220032802b00b41b0b4cc0041004100108a022003280290012101024020032802ac0b450d00200210350b024020014101460d00200341a80b6a20034188036a108a0520033502b00b210420032802a80b2102411010332201450d17200120083700002001200637000820014110412010372201450d1720012037370010200141186a200e3700002001412041c00010372201450d172001202a36002020044220862002ad842001ad4280808080c00484100220011035024020032802ac0b450d00200210350b200341a80b6a41186a20034188036a41186a290300370300200341a80b6a41106a20034188036a41106a290300370300200341a80b6a41086a20034188036a41086a29030037030020032003290388033703a80b200341f0086a200341a80b6a10890542002104200042003703080c0b0b200341b00b6a4117360200200341aaefc4003602ac0b200341013a00aa0b20034183363b01a80b4188bfc6004137200341a80b6a41c0bfc60041d0bfc6001046000b41022101411b21074109210941a1efc40021020b0b20004200370308200041206a20093602002000411c6a2002360200200041186a2005411874200141ff017141107472200741ff017141087472200c72360200420121040c070b418eebc400413041c086cc00103f000b1045000b20032802b00b210120032802ac0b210a20032802a80b21050c050b103e000b200341023a00c8040b20032802c80421012000411c6a20032902cc04370200200041186a2001360200420121040b200042003703080b200020043703000c0a0b200341a80b6a2013201b10ba0420032802a80b2102200320032802b00b36029c0620032002360298062005200120034198066a109403024020032802ac0b450d00200210350b0240200a450d00200510350b0240200442ffffff3f83500d00201d10350b02402016450d00201c10350b0240200d450d00200d410c6c21022010210103400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b0240200f450d00200f410c6c450d00201010350b20004200370308200042003703000c090b410021024180800421094180242107410321014115210541dcffc600210a0b200041206a20053602002000411c6a200a360200200041186a20074180fe0371200141ff0171722009418080fc077172200272360200420121040b20004200370308200020043703000c060b2000411c6a2004370200200041186a2007360200420121040b20002006370308200041106a2008370300200020043703000c040b200210350b420021060b2000411c6a2008370200200041186a2007360200420121040b20002006370308200041106a200e370300200020043703000b200341f0116a24000f0b103c000bbf0403027f017e047f230041306b22032400200341086a200141086a28020022043602002003200129020022053703002005a72106024002400240024020040d00410021070c010b200441057421084100210941002107200621010240034002402009450d0020092001412010a0084100480d00200341186a4115360200200341e6f1c200360214200341053a001220034183023b0110200341106a21010c020b0240024020012002412010a008220941004a0d0020022001460d012009450d01200741016a21070b20012109200141206a2101200841606a2208450d030c010b0b200341186a4113360200200341d3f1c200360214200341063a001220034183023b0110200341106a21010b20004101360200200020012902003702042000410c6a200141086a280200360200200328020441ffffff3f71450d01200610350c010b200341106a41186a200241186a290000370300200341106a41106a200241106a290000370300200341106a41086a200241086a2900003703002003200229000037031020042007490d01024020042003280204470d00200320044101108a01200328020021060b200620074105746a220141206a2001200420076b410574109e081a200141186a200341106a41186a290300370000200141106a200341106a41106a290300370000200141086a200341106a41086a290300370000200120032903103700002003200441016a22013602082000410c6a200136020020002003290300370204200041003602000b200341306a24000f0b20072004104d000bba0502087f037e230041106b2202240002400240200141086a28020022034105744116722204417f4c0d000240200410332205450d00200520012802002206290000370000200541086a200641086a290000370000200241103602082002200436020420022005360200200141046a280200210720032002107702400240024020030d0020022802042106200228020821040c010b20034105742108200228020021092002280204210620022802082104034020072105024002402006200422036b4120490d00200341206a21040c010b200341206a22042003490d03200641017422072004200720044b1b22074100480d03024002400240024020060d00024020070d00410121090c020b2007103321090c030b20062007470d010b200721060c020b200920062007103721090b200721062009450d060b200541206a2107200920036a22032005290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a290000370000200841606a22080d000b2002200636020420022004360208200220093602000b20012f010c210802400240200620046b4102490d00200441026a210520022802002103200621070c010b200441026a22052004490d01200641017422032005200320054b1b22074100480d010240024020060d00024020070d00410121030c020b200710332203450d060c010b2002280200210320062007460d0020032006200710372203450d050b20022007360204200220033602000b200320046a20083b00002005ad4220862003ad8410092205290000210a200541086a290000210b200541106a290000210c200041186a200541186a290000370000200041106a200c370000200041086a200b3700002000200a3700002005103502402007450d00200310350b200241106a24000f0b103e000b1045000b1044000b103c000b855802057f017e230041206b220224000240024020002802002203411b4b0d000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e1c000102030405060708090a0b0c0d0e0f101112131415161718191a1b000b200241003a00102001200241106a41011078200041086a280200417f6a220341094b0d1c024002400240024002400240024002400240024020030e0a00010203040506070809000b200241003a00042001200241046a4101107820022000410c6a2802003602102001200241106a410410780c250b200241013a00042001200241046a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c240b200241023a00042001200241046a410110782002200041106a2903003703102001200241106a410810780c230b200241033a00042001200241046a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c220b200241043a00042001200241046a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c210b200241053a00042001200241046a4101107802402000410c6a2802004101460d00200241003a00042001200241046a410110780c210b200241013a00042001200241046a410110782002200041106a2802003602102001200241106a410410782002200041146a2802003602102001200241106a410410780c200b200241063a00042001200241046a410110782000410c6a2802002103200041146a2802002200200110772000450d1f2003200041186c6a2104034020032802002100200341086a28020022052001107720012000200510782003410c6a2802002100200341146a2802002205200110772001200020051078200341186a22032004470d000c200b0b200241073a00042001200241046a410110782000410c6a2802002103200041146a2802002200200110772000450d1e20032000410c6c6a2104034020032802002100200341086a28020022052001107720012000200510782003410c6a22032004470d000c1f0b0b200241083a00042001200241046a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c1d0b200241093a00042001200241046a410110780c1c0b200241013a00102001200241106a4101107820002d0004417f6a220341044b0d1b200041046a21040240024002400240024020030e050001020304000b200241003a00042001200241046a41011078200041086a2802002103200041106a2802002200200110772000450d1f200041b0026c210003402003200110af03200341b0026a2103200041d07d6a22000d000c200b0b200241013a00042001200241046a41011078200220002f01063b01102001200241106a41021078200041086a280200200110af030c1e0b200241023a00042001200241046a41011078200220002f01063b01102001200241106a41021078200041086a2802002103200041106a28020022052001107702402005450d002005410574210503402001200341201078200341206a2103200541606a22050d000b0b0240024020002802144101460d00200241003a00042001200241046a410110780c010b200241013a00042001200241046a410110782002200041186a2802003602102001200241106a4104107820022000411c6a2802003602102001200241106a410410780b2000280220200110af030c1d0b200241033a00042001200241046a41011078200220002f01263b01102001200241106a41021078200041286a2802002103200041306a28020022052001107702402005450d002005410574210503402001200341201078200341206a2103200541606a22050d000b0b200441016a21030240024020002802344101460d00200241003a00042001200241046a410110780c010b200241013a00042001200241046a410110782002200041386a2802003602102001200241106a4104107820022000413c6a2802003602102001200241106a410410780b20012003412010780c1c0b200241043a00042001200241046a41011078200220002f01263b01102001200241106a41021078200041286a2802002103200041306a280200220520011077200441016a210402402005450d002005410574210503402001200341201078200341206a2103200541606a22050d000b0b200220002802343602102001200241106a410410782002200041386a2802003602102001200241106a4104107820012004412010780c1b0b200241023a00102001200241106a410110780c190b200241033a00102001200241106a41011078200241003a00102001200241106a41011078200041086a200110fb050c190b200241043a00102001200241106a41011078200241003a00102001200241106a41011078200028020421032000410c6a2802002200200110772000450d182003200041f0006c6a21060340412010332200450d1a20002003290010370000200041186a200341286a290000370000200041106a200341206a290000370000200041086a200341186a2900003700002001200041201078200010352003200110e201412010332200450d1a20002003290030370000200041186a200341c8006a290000370000200041106a200341c0006a290000370000200041086a200341386a290000370000200120004120107820001035412010332200450d1a200341f0006a210420002003290050370000200041186a200341e8006a290000370000200041106a200341e0006a290000370000200041086a200341d8006a29000037000020012000412010782000103520032802042100200328020c22032001107702402003450d00200341246c21030340200241106a200010c0032001200228021022052002280218107802402002280214450d00200510350b200041246a21002003415c6a22030d000b0b2004210320042006470d000c190b0b200241053a00102001200241106a4101107820002d0004417f6a220341034b0d17200041046a21050240024002400240024020030e0400010203000b200241003a00042001200241046a410110782002200041086a280200360210200241106a21000c030b200241013a00042001200241046a410110782001200541016a412010782002200041286a280200360210200241106a21000c020b200241023a00042001200241046a410110782002200041086a280200360210200241106a21000c010b200241033a00042001200241046a410110782001200541016a412010782002200041286a280200360210200241106a21000b20012000410410780c170b200241063a00102001200241106a41011078200041086a280200417f6a220341034b0d160240024002400240024020030e0400010203000b200241003a00042001200241046a410110782000410c6a200110fc05200041306a2103200221000c030b200241013a00042001200241046a410110782000410c6a200110fc052002200041306a360204200241046a200110cf01200041c0006a2103200241086a21000c020b200241023a00042001200241046a410110782000410c6a200110fc05200041306a200110fc05200041d8006a21032002410c6a21000c010b200241033a00042001200241046a410110782000410c6a200110fc05200041306a2103200241106a21000b200020033602002000200110cf010c160b200241073a00102001200241106a41011078200041086a22052d0000417f6a220341174b0d1502400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e18000102030405060708090a0b0c0d0e0f1011121314151617000b200241003a00102001200241106a410110782000410c6a200110fc052002200041306a360210200241106a200110cf0120002d0009220041024b0d2c02400240024020000e03000102000b200241003a00102001200241106a410110780c2e0b200241013a00102001200241106a410110780c2d0b200241023a00102001200241106a410110780c2c0b200241013a00102001200241106a410110782002200041106a360210200241106a200110cf010c2b0b200241023a00102001200241106a410110782002200041106a360210200241106a200110cf010c2a0b200241033a00102001200241106a410110780c290b200241043a00102001200241106a410110780240024002402000410c6a280200220341c000490d00200341808001490d012003418080808004490d02200241033a00042001200241046a410110782002200028020c3602102001200241106a410410780c2b0b200220034102743a00042001200241046a410110780c2a0b200220034102744101723b01102001200241106a410210780c290b200220034102744102723602102001200241106a410410780c280b200241053a00102001200241106a410110782000410c6a2802002103200041146a2802002200200110772000450d27200041246c210003402003200110fc05200341246a21032000415c6a22000d000c280b0b200241063a00102001200241106a410110780c260b200241073a00102001200241106a4101107820052d0001220041024b0d2502400240024020000e03000102000b200241003a00102001200241106a410110780c270b200241013a00102001200241106a410110780c260b200241023a00102001200241106a410110780c250b200241083a00102001200241106a410110782000410c6a200110fc050c240b200241093a00102001200241106a410110782000410c6a200110e2010c230b2002410a3a00102001200241106a410110780c220b2002410b3a00102001200241106a410110780c210b2002410c3a00102001200241106a410110782000410c6a2802002103200041146a2802002200200110772000450d202000410574210003402001200341201078200341206a2103200041606a22000d000c210b0b2002410d3a00102001200241106a410110782001200541016a412010780c1f0b2002410e3a00102001200241106a410110780c1e0b2002410f3a00102001200241106a4101107820022000410c6a2802003602102001200241106a41041078200041106a2802002103200041186a28020022002001107720012003200041027410780c1d0b200241103a00102001200241106a4101107820022000410c6a2802003602102001200241106a41041078200041106a2802002103200041186a2802002200200110772000450d1c2003200041246c6a2100034020012003412010782002200341206a2802003602102001200241106a410410782000200341246a2203470d000c1d0b0b200241113a00102001200241106a4101107820022000410c6a2802003602102001200241106a410410780c1b0b200241123a00102001200241106a410110782001200541016a4120107820022000412c6a2802003602102001200241106a410410780c1a0b200241133a00102001200241106a410110782002200041106a360210200241106a200110cf010c190b200241143a00102001200241106a410110782000410c6a200110e2010c180b200241153a00102001200241106a410110782001200541016a412010780c170b200241163a00102001200241106a410110782000410c6a2802002103200041146a2802002205200110772001200320054101741078200041186a200110f7012001200041e0016a413010782002200041d8016a2802003602102001200241106a410410780c160b200241173a00102001200241106a410110782000410c6a2802002103200041146a2802002205200110772001200320054101741078200041186a200110f7012001200041e0016a413010782002200041d8016a2802003602102001200241106a410410780c150b200241083a00102001200241106a4101107802402000280204450d00200241003a00042001200241046a410110782001200041106a412010782001200041306a412010782001200041d0006a412010782001200041f0006a41201078200028020421032000410c6a28020022002001107720012003200010780c150b200241013a00042001200241046a410110780c140b200241093a00102001200241106a41011078200041086a22032d0000417f6a2205411c4b0d130240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020050e1d000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c000b200241003a00102001200241106a41011078412010332205450d3020052003290001370000200541186a200341196a290000370000200541106a200341116a290000370000200541086a200341096a2900003700002001200541201078200510352002200041306a360210200241106a200110cf010c2f0b200241013a00102001200241106a410110782000410c6a200110e2010c2e0b200241023a00102001200241106a410110782000410c6a200110e201200041106a200110fd050c2d0b200241033a00102001200241106a410110782000410c6a200110e201200041106a200110fd050c2c0b200241043a00102001200241106a4101107820022000410c6a2802003602102001200241106a410410780c2b0b200241053a00102001200241106a41011078412010332200450d2b20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c2a0b200241063a00102001200241106a41011078412010332200450d2a20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c290b200241073a00102001200241106a41011078412010332200450d2920002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c280b200241083a00102001200241106a41011078412010332205450d2820052003290001370000200541186a200341196a290000370000200541106a200341116a290000370000200541086a200341096a29000037000020012005412010782005103520022000412c6a2802003602102001200241106a410410782002200041306a2802003602102001200241106a410410780c270b200241093a00102001200241106a41011078412010332200450d2720002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c260b2002410a3a00102001200241106a410110782000410c6a200110e2010c250b2002410b3a00102001200241106a4101107820022000410c6a2802003602102001200241106a410410780c240b2002410c3a00102001200241106a410110782001200341016a412010780c230b2002410d3a00102001200241106a410110780c220b2002410e3a00102001200241106a410110782001200341016a412010780c210b2002410f3a00102001200241106a410110782001200341016a41201078024020002d0029220341064b0d000240024002400240024002400240024020030e0700010203040506000b200241003a00040c060b200241013a00040c050b200241023a00040c040b200241033a00040c030b200241043a00040c020b200241053a00040c010b200241063a00040b2001200241046a410110780b200029033021072002200041386a290300370318200220073703102001200241106a411010780c200b200241103a00102001200241106a410110780c1f0b200241113a00102001200241106a410110780c1e0b200241123a00102001200241106a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c1d0b200241133a00102001200241106a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c1c0b200241143a00102001200241106a41011078412010332200450d1c20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c1b0b200241153a00102001200241106a410110782001200341016a412010780c1a0b200241163a00102001200241106a410110782001200341016a412010780c190b200241173a00102001200241106a4101107820022000410c6a2802003602102001200241106a410410780c180b200241183a00102001200241106a410110782001200341016a4120107820022000412c6a2802003602102001200241106a410410780c170b200241193a00102001200241106a410110782001200341016a41201078024020002d0029220341064b0d000240024002400240024002400240024020030e0700010203040506000b200241003a00040c060b200241013a00040c050b200241023a00040c040b200241033a00040c030b200241043a00040c020b200241053a00040c010b200241063a00040b2001200241046a410110780b200029033021072002200041386a290300370318200220073703102001200241106a411010780c160b2002411a3a00102001200241106a410110780c150b2002411b3a00102001200241106a4101107820022000410c6a2802003602102001200241106a410410780c140b2002411c3a00102001200241106a41011078412010332205450d1420052003290001370000200541186a200341196a290000370000200541106a200341116a290000370000200541086a200341096a29000037000020012005412010782005103520022000412c6a2802003602102001200241106a410410780c130b2002410a3a00102001200241106a41011078200041046a200110fe050c120b2002410b3a00102001200241106a41011078200041046a200110fe050c110b2002410c3a00102001200241106a41011078200041086a280200417f6a220341054b0d1002400240024002400240024020030e06000102030405000b200241003a00042001200241046a410110782000410c6a2802002103200041146a280200220520011077200041186a210402402005450d002005410574210003402001200341201078200341206a2103200041606a22000d000b0b20022004360210200241106a200110cf010c150b200241013a00042001200241046a410110780c140b200241023a00042001200241046a410110782000410c6a200110fc050c130b200241033a00042001200241046a410110780c120b200241043a00042001200241046a410110780c110b200241053a00042001200241046a410110782000410c6a200110fc050c100b2002410d3a00102001200241106a4101107820002d0004417f6a220341064b0d0f200041046a2105024002400240024002400240024020030e0700010203040506000b200241003a00042001200241046a410110782001200541016a412010780c150b200241013a00042001200241046a410110782001200541016a412010780c140b200241023a00042001200241046a410110782001200541016a412010782001200541216a412010780c130b200241033a00042001200241046a41011078200041086a2802002103200041106a2802002200200110772000450d122000410574210003402001200341201078200341206a2103200041606a22000d000c130b0b200241043a00042001200241046a410110782001200541016a412010780c110b200241053a00042001200241046a410110782001200541016a412010780c100b200241063a00042001200241046a410110780c0f0b2002410e3a00102001200241106a41011078200241003a00102001200241106a41011078200041046a200110e2010c0e0b2002410f3a00102001200241106a41011078200241003a00102001200241106a41011078200028020421032000410c6a28020022002001107720012003200010780c0d0b200241103a00102001200241106a41011078200041086a22032d0000417f6a220541074b0d0c0240024002400240024002400240024020050e080001020304050607000b200241003a00042001200241046a410110782002200041306a360210200241106a200110cf012000410c6a200110fc050c130b200241013a00042001200241046a410110782000410c6a200110e2010c120b200241023a00042001200241046a410110782000410c6a200110e2010c110b200241033a00042001200241046a410110782000412c6a2802002105200041346a28020022002001107720012005200010782001200341016a412010780c100b200241043a00042001200241046a41011078412010332200450d1020002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c0f0b200241053a00042001200241046a410110782000412c6a2802002105200041346a28020022042001107720012005200410782001200341016a41201078200041386a29030021072002200041c0006a290300370318200220073703102001200241106a411010780c0e0b200241063a00042001200241046a41011078412010332205450d0e20052003290001370000200541186a200341196a290000370000200541106a200341116a290000370000200541086a200341096a290000370000200120054120107820051035200041306a29030021072002200041386a290300370318200220073703102001200241106a411010780c0d0b200241073a00042001200241046a41011078412010332200450d0d20002003290001370000200041186a200341196a290000370000200041106a200341116a290000370000200041086a200341096a2900003700002001200041201078200010350c0c0b200241113a00102001200241106a41011078200041086a22032d0000417f6a220541044b0d0b0240024002400240024020050e050001020304000b200241003a00042001200241046a41011078200041106a200110f3050c0f0b200241013a00042001200241046a410110782000410c6a2802002103200041146a28020022002001107720012003200010780c0e0b200241023a00042001200241046a410110782000410c6a200110fc052002200041c0006a360210200241106a200110cf01200041d0006a200110fb05200041306a2802002103200041386a28020022002001107720012003200010780c0d0b200241033a00042001200241046a410110782002200041386a360210200241106a200110cf01200041c8006a200110fb05412010332205450d0d20052003290001370000200541186a200341196a290000370000200541106a200341116a290000370000200541086a200341096a2900003700002001200541201078200510352000412c6a2802002103200041346a28020022002001107720012003200010780c0c0b200241043a00042001200241046a410110782001200341016a412010780240200341216a2d00004101460d00200241003a00042001200241046a410110780c0c0b200241013a00042001200241046a410110782001200341226a412010780c0b0b200241123a00102001200241106a410110782000280204417f6a220341024b0d0a02400240024020030e03000102000b200241003a00042001200241046a41011078200041086a280200200110af030c0c0b200241013a00042001200241046a41011078200041086a200110fc050c0b0b200241023a00042001200241046a41011078200041086a200110fc052000412c6a280200200110af030c0a0b200241133a00102001200241106a41011078200241003a00102001200241106a41011078200220002802043602102001200241106a41041078200041086a2802002103200041106a2802002205200110772001200320051078200041146a28020021032000411c6a28020022052001107702402005450d0020032005410c6c6a2106034020032802002105200341086a28020022042001107720012005200410782003410c6a22032006470d000b0b2002200041206a2802003602102001200241106a410410782002200041246a2802003602102001200241106a410410782002200041286a2802003602102001200241106a4104107820012000412c6a41c00010780c090b200241143a00102001200241106a410110780c070b200241153a00102001200241106a410110780c060b200241163a00102001200241106a410110780c050b200241173a00102001200241106a41011078200041086a22052d0000417f6a2203410a4b0d050240024002400240024002400240024002400240024020030e0b000102030405060708090a000b200241003a00042001200241046a410110782001200541016a412010780c0f0b200241013a00042001200241046a410110782000410c6a200110ab040c0e0b200241023a00042001200241046a410110782000410c6a2802002103200041146a2802002200200110772000450d0d2003200041c4006c6a210503402001200341201078200241106a200341206a220010ac042001200228021022032002280218107802402002280214450d00200310350b2005200041246a2203470d000c0e0b0b200241033a00042001200241046a410110780c0c0b200241043a00042001200241046a410110782000410c6a200110e2012002200041106a360210200241106a200110cf010c0b0b200241053a00042001200241046a4101107820022000410c6a2802003602102001200241106a410410780c0a0b200241063a00042001200241046a410110782000410c6a200110e2012002200041106a360210200241106a200110cf010c090b200241073a00042001200241046a410110782000412c6a200110e2012001200541016a412010780c080b200241083a00042001200241046a410110782000410c6a200110e2012002200041106a2903003703102001200241106a410810780c070b200241093a00042001200241046a410110782000410c6a200110e201200041106a200110fc05200041386a200110aa040c060b2002410a3a00042001200241046a410110782000410c6a200110fc050c050b200241183a00102001200241106a41011078200041086a22052d0000417f6a2203410b4b0d0402400240024002400240024002400240024002400240024020030e0c000102030405060708090a0b000b200241003a00042001200241046a41011078200041106a29030021072002200041186a290300370318200220073703102001200241106a411010780c0f0b200241013a00042001200241046a4101107820022000410c6a2802003602102001200241106a410410780c0e0b200241023a00042001200241046a410110782001200541016a41201078200041306a29030021072002200041386a290300370318200220073703102001200241106a41101078200041c0006a29030021072002200041c8006a290300370318200220073703102001200241106a411010780c0d0b200241033a00042001200241046a4101107820022000410c6a2802003602102001200241106a410410780c0c0b200241043a00042001200241046a410110782000410c6a200110fc05200220002d00093a00042001200241046a410110780c0b0b200241053a00042001200241046a41011078200220052d00013a00042001200241046a410110780c0a0b200241063a00042001200241046a410110780c090b200241073a00042001200241046a410110782001200541016a4120107820022000412c6a2802003602102001200241106a41041078200041306a2802002103200041386a28020022002001107720012003200010780c080b200241083a00042001200241046a410110780c070b200241093a00042001200241046a410110782001200541016a412010782002200541216a2d00003a00042001200241046a410110780c060b2002410a3a00042001200241046a410110782001200541016a41201078200541216a2d0000220041024b0d0502400240024020000e03000102000b200241003a00042001200241046a410110780c070b200241013a00042001200241046a410110780c060b200241023a00042001200241046a410110780c050b2002410b3a00042001200241046a4101107820022000410c6a2802003602102001200241106a410410780c040b200241193a00102001200241106a4101107820002d0004417f6a220341084b0d03200041046a210502400240024002400240024002400240024020030e09000102030405060708000b200241003a00042001200241046a410110782001200541016a41201078200041286a280200200110af030c0b0b200241013a00042001200241046a410110782001200541016a412010782001200541216a412010780c0a0b200241023a00042001200241046a41011078200041086a2802002103200041106a28020022052001107702402005450d002005410574210503402001200341201078200341206a2103200541606a22050d000b0b200220002f01063b01102001200241106a41021078200220002802143602102001200241106a410410780c090b200241033a00042001200241046a410110782001200541016a412010780c080b200241043a00042001200241046a410110782001200541016a412010782001200541216a412010780c070b200241053a00042001200241046a410110782001200541016a412010780c060b200241063a00042001200241046a410110782001200541016a412010780c050b200241073a00042001200241046a410110780c040b200241083a00042001200241046a410110782001200541016a412010780c030b2002411a3a00102001200241106a41011078200041086a280200417f6a220341024b0d0202400240024020030e03000102000b200241003a00042001200241046a410110780c040b200241013a00042001200241046a410110782000410c6a200110fc050c030b200241023a00042001200241046a410110782000410c6a200110fc05200041306a29030021072002200041386a290300370318200220073703102001200241106a41101078200041c0006a29030021072002200041c8006a290300370318200220073703102001200241106a411010782002200041d0006a2802003602102001200241106a410410780c020b2002411b3a00102001200241106a410110780b200110ff050b200241206a24000f0b1045000bf30703027f017e067f230041e0006b2203240041a8fdc600ad4280808080f00084100122042900002105200341086a200441086a29000037030020032005370300200410354180a9c300ad4280808080900184100122042900002105200341106a41086a200441086a29000037030020032005370310200410350240024002400240412010332204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad42808080808004841003220129000037034020011035200341dc006a2206200441206a360200200320043602582003200341c0006a41086a3602542003200341c0006a360250200341206a200341d0006a107b20041035412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a2900003700002004ad4280808080800484100422012900002105200341c0006a41086a200141086a29000037030020032005370340200110352006200441206a360200200320043602582003200341c0006a41106a3602542003200341c0006a360250200341306a200341d0006a107b200410352003280228220741206a2206200328023822086a2201417f4c0d01200328023021092003280220210a0240024020010d004100210b410121040c010b200110332204450d012001210b0b02400240200b410f4d0d00200b21020c010b200b41017422024110200241104b1b22024100480d030240200b0d002002103322040d010c050b200b2002460d002004200b200210372204450d040b20042003290300370000200441086a200341086a2903003700000240024020024170714110460d002002210b0c010b2002410174220b4120200b41204b1b220b4100480d032002200b460d0020042002200b10372204450d040b20042003290310370010200441186a200341106a41086a29030037000002400240200b41606a2007490d00200b21020c010b2007415f4b0d03200b41017422022006200220064b1b22024100480d03200b2002460d002004200b200210372204450d040b200441206a200a2007109d081a02400240200220066b2008490d002002210b0c010b20012006490d032002410174220b2001200b20014b1b220b4100480d03024020020d000240200b0d00410121040c020b200b10332204450d050c010b2002200b460d0020042002200b10372204450d040b200420066a20092008109d081a200020013602082000200b3602042000200436020002402003280234450d00200910350b02402003280224450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000bb10101027f024020002802082201450d0020002802002100200141246c210103400240024020002d0000220241044b0d0002400240024020020e050400010204040b2000410c6a280200450d03200041086a28020010350c030b2000410c6a280200450d02200041086a28020010350c020b2000410c6a280200450d01200041086a28020010350c010b200041086a280200450d00200041046a28020010350b200041246a21002001415c6a22010d000b0b0b13002000410c36020420004190aac3003602000beb0d02097f027e230041e0006b22022400200241386a4100290288e146370300200241306a4100290280e146370300200241286a41002902f8e046370300200241206a41002902f0e046370300200241186a41002902e8e046370300200241106a41002902e0e046370300200241086a41002902d8e046370300200241002902d0e0463703002002410036024820024201370340200241d0006a200210b40320022802502103024002400240024020022802442204200228024822056b20022802582206490d00200228024021070c010b200520066a22072005490d01200441017422082007200820074b1b22084100480d010240024020040d00024020080d00410121070c020b2008103322070d010c040b2002280240210720042008460d0020072004200810372207450d030b20022008360244200220073602400b200720056a20032006109d081a2002200520066a36024802402002280254450d00200310350b200241d0006a200241106a10b403200228025021080240024020022802442204200228024822056b20022802582203490d0020022802402106200421070c010b200520036a22062005490d01200441017422072006200720064b1b22074100480d010240024020040d00024020070d00410121060c020b200710332206450d040c010b2002280240210620042007460d0020062004200710372206450d030b20022007360244200220063602400b200620056a20082003109d081a2002200520036a220336024802402002280254450d00200810350b02400240200720036b4104490d00200341046a21050c010b200341046a22052003490d01200741017422042005200420054b1b22044100480d010240024020070d00024020040d00410121060c020b200410332206450d040c010b20072004460d0020062007200410372206450d030b20022004360244200220063602400b200620036a410a3600002002200536024820022802242103024002402002280244220720056b4104490d00200228024021060c010b200541046a22062005490d01200741017422042006200420064b1b22044100480d010240024020070d00024020040d00410121060c020b200410332206450d040c010b2002280240210620072004460d0020062007200410372206450d030b20022004360244200220063602400b200620056a20033600002002200541046a220636024820022802282104024002402002280244220320066b4104490d00200228024021070c010b200641046a22072006490d01200341017422082007200820074b1b22084100480d010240024020030d00024020080d00410121070c020b200810332207450d040c010b2002280240210720032008460d0020072003200810372207450d030b20022008360244200220073602400b200720066a20043600002002200541086a360248200241306a2802002108200241386a200241346a200228022c4101461b2802002205200241c0006a1077024002402005410c6c22050d00200228024821040c010b200820056a21092002280244210620022802482104034002400240200620046b4108490d00200441086a210520022802402103200621070c010b200441086a22052004490d03200641017422072005200720054b1b22074100480d030240024020060d00024020070d00410121030c020b200710332203450d060c010b2002280240210320062007460d0020032006200710372203450d050b20022007360244200220033602400b200320046a200829000037000020022005360248200841086a280200210402400240200720056b41034d0d00200721060c010b200541046a22062005490d032007410174220a2006200a20064b1b22064100480d030240024020070d00024020060d00410121030c020b200610332203450d060c010b20072006460d0020032007200610372203450d050b20022006360244200220033602400b200320056a20043600002002200541046a22043602482008410c6a22082009470d000b0b200228023c2107024002402002280244220620046b4104490d00200228024021050c010b200441046a22052004490d01200641017422032005200320054b1b22034100480d010240024020060d00024020030d00410121050c020b200310332205450d040c010b2002280240210520062003460d0020052006200310372205450d030b20022003360244200220053602400b200520046a2007360000200441046aad210b2002350240210c02402002280200450d00200241086a280200450d00200228020410350b200b422086210b02402002280210450d00200241186a280200450d00200241146a28020010350b200b200c84210b0240200228022c450d0020022802342205450d002005410c6c450d00200228023010350b200241e0006a2400200b0f0b103e000b103c000bd80401067f20012802042102024002400240024020012802004101470d002001410c6a280200220141046a2203417f4c0d0102400240024002400240024002400240024002402003450d00200310332204450d0c200141c000490d04200141808001490d052001418080808004490d0620030d010b41012103410110332204450d07200441033a0000410521050c010b200441033a000002402003417f6a41034d0d00200321050c020b200341017422064105200641054b1b22054100480d0720032005460d010b20042003200510372204450d050b20042001360001410521060c030b024020030d0041012103410110332204450d040b200420014102743a000041012106200321050c020b02400240200341014d0d00200321050c010b200341017422064102200641024b1b2105024020030d002005103322040d010c040b20032005460d0020042003200510372204450d030b41022106200420014102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d03024020030d002005103322040d010c030b20032005460d0020042003200510372204450d020b20042001410274410272360000410421060b0240200520066b2001490d00200521030c060b200620016a22032006490d01200541017422072003200720034b1b22034100480d0120052003460d05200420052003103722040d050b103c000b103e000b20002002200141086a28020010d3030f0b1044000b1045000b200420066a20022001109d081a2000200620016a36020820002003360204200020043602000b9b1a03047f017e057f230041a00e6b22022400024002402001450d00200220003602300c010b200241b0b4cc003602300b20022001360234200241c00a6a200241306a10b60302400240024020022802c40a450d00200241386a200241c00a6a41fc00109d081a200241b8016a200241386a41fc00109d081a200241b8016a10b703024020022802b8012201450d00200241b8026a2001417f6a10b803200241c00a6a20022802b802220120022802c00210d501200241e8066a41086a2200200241c90a6a290000370300200241e8066a41106a2203200241d10a6a290000370300200241e8066a41186a2204200241d90a6a290000370300200220022900c10a3703e8060240024020022d00c00a4101460d00200241a8036a41186a4200370300200241a8036a41106a4200370300200241a8036a41086a4200370300200242003703a8030c010b200241a8036a41186a2004290300370300200241a8036a41106a2003290300370300200241a8036a41086a2000290300370300200220022903e8063703a8030b024020022802bc02450d00200110350b200241a8036a200241c8016a412010a0080d00200241b0026a280200210120022802a8022100200241003602f006200242043703e806200241e8066a4100200110870120022802f006210402402001450d00200141c8036c21032001410374210520022802e8062004410c6c6a21010340200220003602a803200241c00a6a200241a8036a10b903200141086a200241c00a6a41086a280200360200200120022903c00a3702002001410c6a2101200041c8036a2100200341b87c6a22030d000b200541786a41037620046a41016a21040b200241a8036a41086a2004360200200220022903e80622063703a803200241e8066a41086a2004360200200220063703e806200241c00a6a200241e8066a10ba03024020024188026a2201200241c00a6a412010a008450d0041ec9ccc00ad4280808080e0018410062001ad4280808080800484100a200241c00a6aad4280808080800484100a0b02402001200241c00a6a412010a0080d00100b200241ac026a280200210720022802a802210520022802b0022103200241b8026a200241b8016a41f000109d081a2005200341c8036c6a210020022802b8022108200521010240024002402003450d00200241e8066a41f0006a2104200521010240034020024180066a200141e800109d081a200141e8006a2903002106200241a8036a200141f0006a41d802109d081a20064203510d01200241e8066a20024180066a41e800109d081a200220063703d0072004200241a8036a41d802109d081a2002200241e8066a3602b00a200241c00a6a200241b00a6a10b90320022802c80a2103024020022802c40a450d0020022802c00a10350b200241c00a6a200241e8066a41c803109d081a200241003602880e200241b00a6a200241c00a6a2003200241880e6a10bb0320022d00b00a4101460d04200141c8036a22012000470d000c030b0b200141c8036a21010b20002001460d00034020014198016a10bb022000200141c8036a2201470d000b0b02402007450d00200741c8036c450d00200510350b10bc03200810bd030240100c4101470d00200241c00a6a10be03200241206a200241b8026a410472220110bf032002200228022422003602980e200241186a200241c00a6a410472220310bf032002200228021c220436029c0e20002004470d06200241106a200110bf0320022802102105200241086a200310bf03200228020c220120022802142200200020014b1b2209450d05200228020821074100210341edc5ca00ad4280808080c002842106410021040340024002400240024002400240024002400240200520036a22012d00002208200720036a22002d0000470d0002400240024002400240024020080e06000102030405000b20052007460d0d200141016a200041016a412010a0080d050c060b024020052007460d00200141016a280000200041016a280000470d050b200141106a2802002208200041106a280200470d04200141086a280200220a200041086a280200220b460d0a200a200b200810a0080d040c0a0b024020052007460d00200141016a280000200041016a280000470d040b200141106a2802002208200041106a280200470d03200141086a280200220a200041086a280200220b460d08200a200b200810a0080d030c080b024020052007460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a280200220a200041086a280200220b460d06200a200b200810a0080d020c060b200141046a2802002208200041046a280200470d012008450d04200141086a280200200041086a280200470d012001410c6a2802002000410c6a280200470d010c040b2001410c6a28020022082000410c6a280200470d00200141046a280200220a200041046a280200220b460d02200a200b200810a008450d020b20061006200241e8066a200110c00320023502f00642208620022802e8062208ad84100a024020022802ec06450d00200810350b200241e8066a200010c00320023502f00642208620022802e8062208ad84100a024020022802ec06450d00200810350b20012d000020002d00002208470d06024020080e06000605040302000b20052007460d070b200141016a200041016a412010a0080d050c060b2001410c6a28020022082000410c6a280200470d04200141046a2802002201200041046a2802002200460d0520012000200810a0080d040c050b200141046a2802002208200041046a280200470d032008450d04200141086a280200200041086a280200470d032001410c6a2802002000410c6a280200460d040c030b024020052007460d00200141016a280000200041016a280000470d030b200141106a2802002208200041106a280200470d02200141086a2802002201200041086a2802002200460d0320012000200810a0080d020c030b024020052007460d00200141016a280000200041016a280000470d020b200141106a2802002208200041106a280200470d01200141086a2802002201200041086a2802002200460d0220012000200810a0080d010c020b024020052007460d00200141016a280000200041016a280000470d010b200141106a2802002208200041106a280200470d00200141086a2802002201200041086a2802002200460d0120012000200810a008450d010b4188cfc400412741c086cc00103f000b200341246a2103200441016a22042009490d000c060b0b41d7cfc400411e41c086cc00103f000b200241286a20022f00b10a20022d00b30a4110747210c1032002280228200228022c41c086cc00103f000b41dccec400412441c086cc00103f000b41c0cec400411c41c086cc00103f000b200241b4036a4104360200200241fc066a4102360200200242023702ec06200241f0b2c3003602e806200241043602ac03200241e8b2c3003602a803200241003602bc01200241b0b4cc003602b8012002200241a8036a3602f8062002200241b8016a3602b003200241e8066a4180b3c300104c000b0240200241b8026a41306a2201200241c00a6a41306a2200412010a008450d0041ec9ccc00ad4280808080e0018410062001ad4280808080800484100a2000ad4280808080800484100a0b024020012000412010a008450d0041afcfc400412841c086cc00103f000b0240200241c00a6a410c6a2802002200450d0020022802c40a2101200041246c210003400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b0240200241c80a6a2802002201450d00200141246c450d0020022802c40a10350b0240200241b8026a410c6a2802002200450d0020022802bc022101200041246c210003400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b0240200241c0026a2802002201450d00200141246c450d0020022802bc0210350b200241a00e6a240042010f0b200241a8036a41146a410a360200200241b4036a410c36020020024180066a41146a41033602002002200241980e6a3602880e20022002419c0e6a3602b00a200241e8066a41146a41003602002002420337028406200241a0b3cc00360280062002410c3602ac03200241b0b4cc003602f806200242013702ec0620024180cfc4003602e8062002200241a8036a360290062002200241e8066a3602b8032002200241b00a6a3602b0032002200241880e6a3602a80320024180066a41b0b4cc00104c000bc10603077f017e037f230041c00b6b22022400200241f8076a200110c4030240024020022802fc072203450d0020024184086a2802002104200228028008210520022802f8072106200241086a20024188086a41e000109d081a2002200110c40102400240024020022802000d0020022802042207200128020441c8036e2208200820074b1bad42c8037e2209422088a70d012009a7220a417f4c0d0102400240200a0d004108210b0c010b200a1033220b450d030b41002108200241003602702002200b3602682002200a41c8036e36026c024002402007450d00200241f8076a41f0006a210c0340200241f8076a200110c80320024190076a200241f8076a41e800109d081a20022903e0082109200241b8046a200c41d802109d081a20094203510d02200241d0036a20024190076a41e800109d081a200241f8006a200241b8046a41d802109d081a02402008200228026c470d00200241e8006a200810a9012002280268210b200228027021080b200b200841c8036c6a200241d0036a41e800109d08220a2009370368200a41f0006a200241f8006a41d802109d081a2002200841016a22083602702007417f6a22070d000b0b200b450d01200229026c2109200241f8076a200241086a41e000109d081a2000410c6a2004360200200020053602082000200336020420002006360200200041106a200241f8076a41e000109d081a200041f4006a2009370200200041f0006a200b3602000c050b02402008450d00200841c8036c2107200b4198016a21080340200810bb02200841c8036a2108200741b87c6a22070d000b0b200228026c2208450d00200841c8036c450d00200b10350b2000410036020402402004450d00200441246c21072003210803400240024020082d0000220141044b0d0002400240024020010e050400010204040b2008410c6a280200450d03200841086a28020010350c030b2008410c6a280200450d02200841086a28020010350c020b2008410c6a280200450d01200841086a28020010350c010b200841086a280200450d00200841046a28020010350b200841246a21082007415c6a22070d000b0b2005450d03200541246c450d03200310350c030b1044000b1045000b200041003602040b200241c00b6a24000bb83a05047f017e057f017e107f230041f01a6b22012400200141186a200010df03200141c8156a41186a4200370300200141c8156a41106a22024200370300200141c8156a41086a22034200370300200142003703c81541d1c4c700ad4280808080e000841001220429000021052003200441086a290000370300200120053703c8152004103541c8f1c700ad4280808080a00284100122042900002105200141b8106a41086a2206200441086a290000370300200120053703b81020041035200220012903b8102205370300200141a0186a41086a2003290300370300200141a0186a41106a2005370300200141a0186a41186a2006290300370300200120012903c8153703a0182001412036028c062001200141a0186a36028806200141e80d6a200141a0186aad22054280808080800484100510c20102400240024002400240024002400240024002400240024020012802e80d22040d00410221030c010b20012802ec0d21072001200141e80d6a41086a2802003602dc08200120043602d808200141106a200141d8086a10c401200128021421080240024020012802100d00200141086a200141d8086a10c40120012802080d0020012802dc082209200128020c2203490d002003417f4c0d030240024020030d0041002109410121060c010b200310392206450d09200620012802d808220a2003109d081a2001200920036b3602dc082001200a20036a3602d808200321090b2006450d002003ad4220862009ad84210b410121030c010b200141003602c010200142013703b810200141093602ac0b200120014188066a3602a80b2001200141b8106a3602b803200141dc156a4101360200200142013702cc15200141c888c2003602c8152001200141a80b6a3602d815200141b8036a41e88ac500200141c8156a10431a20013502c01042208620013502b810841006024020012802bc10450d0020012802b81010350b410221030b2007450d00200410350b02400240024002400240024020034102460d00200ba72104410121070240200841f501490d00410021080240200b422088a7200420034101461b4104470d004101210820064190e1c600460d00200628000041eede91ab064621080b200841017321070b02402004450d00200610350b2007450d010b200141c4106a41002902d8e046370200200141f5013602b810200141002902d0e0463702bc10200141c8156a41186a4200370300200141c8156a41106a22064200370300200141c8156a41086a22034200370300200142003703c81541d1c4c700ad4280808080e0008410012204290000210b2003200441086a2900003703002001200b3703c8152004103541c8f1c700ad4280808080a0028410012204290000210b200141286a41086a2208200441086a2900003703002001200b3703282004103520062001290328220b370300200141a0186a41086a2003290300370300200141a0186a41106a200b370300200141a0186a41186a2008290300370300200120012903c8153703a018200141003602f00d200142013703e80d41f501200141e80d6a1077200141c8156a200141b8106a41047210b40320012802c81521090240024020012802ec0d220720012802f00d22046b20012802d0152206490d0020012802e80d2103200721080c010b200420066a22032004490d02200741017422082003200820034b1b22084100480d020240024020070d00024020080d00410121030c020b2008103322030d010c110b20012802e80d210320072008460d0020032007200810372203450d100b200120083602ec0d200120033602e80d0b200320046a20092006109d081a2001200420066a22043602f00d024020012802cc15450d00200910350b200542808080808004842004ad4220862003ad84100202402008450d00200310350b420010c8040b2000280200200041106a200041d0006a200141186a410110e00320012000280200220c36023c2001428089fa00370340200141a0186a200c10c904200141c8156a20012802a018220020012802a818220310b8020240024020012802c815220d0d00420021054108210d0c010b2003ad4220862000ad84100720012902cc1521050b024020012802a418450d00200010350b200d2005422088a7220341d0026c22066a21042005a7210e200d21002003450d07200641b07d6a2107200141c8156a41046a210f200141a0186a41046a210a200141e80d6a41046a211041002106200141d8006a41086a2108200d210002400340200141e8006a200041bc02109d081a200041bc026a28020021032008200041c8026a2903003703002001200041c0026a290300370358024020034103470d00200041d0026a21000c0a0b2010200141e8006a41bc02109d082111200141a0186a200141e80d6a41c002109d081a20014188136a200a41bc02109d081a200141f8126a41086a22092008290300370300200120012903583703f8120240024020034102470d00410121090c010b200f20014188136a41bc02109d081a200141a80b6a200141c8156a41c002109d081a200141980b6a41086a2009290300370300200120012903f8123703980b41002109200621120b200141d8086a200141a80b6a41c002109d081a200141c8086a41086a200141980b6a41086a290300370300200120012903980b3703c8082009450d01200641016a2106200741b07d6a2107200041d0026a22002004470d000b200421000c080b200141b8036a200141d8086a41c002109d081a200141a8036a41086a2208200141c8086a41086a290300370300200120012903c8083703a803200141b8106a200141b8036a41c002109d081a200141a8106a41086a22092008290300370300200120012903a8033703a810200041d0026a210020034102460d0720014188066a200141b8106a41c002109d081a200141f8056a41086a22082009290300370300200120012903a8103703f805200141c8156a20014188066a41c002109d081a200141a0186a41086a2008290300370300200120012903f8053703a01841d80210332213450d0920132012360200201341046a200141c8156a41c002109d081a201320033602c402201320012903a0183703c802201341d0026a200141a0186a41086a290300370300200142818080801037024c20012013360248200421032007450d02200641016a2108200141b8106a41046a2109200141980b6a41086a210302400340200141b8036a200041bc02109d081a200041bc026a28020021062003200041c8026a2903003703002001200041c0026a2903003703980b024020064103470d00200041d0026a21030c050b2009200141b8036a41bc02109d081a200141a0186a200141b8106a41c002109d081a20014188136a200a41bc02109d081a200141f8126a41086a22072003290300370300200120012903980b3703f8120240024020064102470d00410121070c010b200f20014188136a41bc02109d081a200141e80d6a200141c8156a41c002109d081a200141e8006a41086a2007290300370300200120012903f81237036841002107200821100b200141a80b6a200141e80d6a41c002109d081a200141a8106a41086a200141e8006a41086a290300370300200120012903683703a8102007450d01200841016a2108200041d0026a22002004470d000b20042103410121140c040b200141d8086a200141a80b6a41c002109d081a200141c8086a41086a2209200141a8106a41086a2215290300370300200120012903a8103703c808200041d0026a21034101211420064102460d03200841016a210020014188066a200141d8086a41c002109d081a200141f8056a41086a22162009290300370300200120012903c8083703f80541012108410121140340200141c8156a20014188066a41c002109d081a200141a0186a41086a22072016290300370300200120012903f8053703a018024020142008470d00200141c8006a20084101109501200128024821130b2013201441d8026c6a22082010360200200841046a200141c8156a41c002109d081a200841c4026a2006360200200841c8026a20012903a018370300200841d0026a20072903003703002001201441016a2214360250024020032004470d00200421030c050b02400340200141e8006a200341bc02109d081a200341bc026a2802002106200141d8006a41086a2208200341c8026a2903003703002001200341c0026a290300370358024020064103470d00200341d0026a21030c070b2011200141e8006a41bc02109d081a200141a0186a200141e80d6a41c002109d081a20014188136a200a41bc02109d081a200141f8126a41086a22072008290300370300200120012903583703f8120240024020064102470d00410121080c010b200f20014188136a41bc02109d081a200141a80b6a200141c8156a41c002109d081a200141286a41086a20072903002205370300200141980b6a41086a2005370300200120012903f8122205370328200120053703980b41002108200021120b200141d8086a200141a80b6a41c002109d081a2009200141980b6a41086a290300370300200120012903980b3703c8082008450d01200041016a2100200341d0026a22032004470d000b200421030c050b200141b8036a200141d8086a41c002109d081a200141a8036a41086a22082009290300370300200120012903c8083703a803200141b8106a200141b8036a41c002109d081a20152008290300370300200120012903a8033703a81020064102460d02200341d0026a2103200041016a210020014188066a200141b8106a41c002109d081a20162015290300370300200120012903a8103703f805200128024c2108201221100c000b0b103e000b200341d0026a21030c010b410121140b024020042003460d000340200341d0026a21000240200341bc026a2802004102460d000240200341b0026a2802002206450d00200341b4026a280200450d00200610350b200310bb020b2000210320042000470d000b0b0240200e450d00200e41d0026c450d00200d10350b200128024c211720144115490d022014410176ad42d8027e2205422088a70d002005a72218417f4c0d00201810332219450d0541002100200141003602a818200142043703a018201341a87d6a211a201341c87a6a211b410421034100210f20142112034020122109410021124101210702402009417f6a220e450d000240024002400240024002402013200e41d8026c6a41d0026a2d0000200941d8026c221020136a41a07d6a2d00002206490d002009417e6a210a201b20106a2108410021124100210403400240200a2004470d00200921070c080b200441016a2104200641ff0171210720082d00002106200841a87d6a2108200720064f0d000b200441016a21072004417f7320096a21040c010b201b20106a2108200e210402400340024020044101470d00410021040c020b2004417f6a2104200641ff0171210720082d00002106200841a87d6a210820072006490d000b0b20092004490d02200920144b0d01200920046b2207410176220a450d002013200441d8026c6a2106201a20106a21080340200141c8156a200641d802109d081a2006200841d802109e0841d8026a21062008200141c8156a41d802109d0841a87d6a2108200a417f6a220a0d000b0b024020040d00200421120c050b0240200741094d0d00200421120c050b200920144b0d022013200441d8026c6a2110034020092004417f6a2212490d040240200920126b22074102490d002013200441d8026c6a220841d0026a2d00002013201241d8026c6a220641d0026a2d0000220d4f0d00200141c8156a200641d002109d081a2001200641d4026a2800003600bb102001200641d1026a2800003602b8102006200841d802109d082111024020074103490d00200e210a2010210620114180086a2d0000200d4f0d0003402006200641d8026a220841d802109d0821112004200a417f6a220a460d012008210620114180086a2d0000200d490d000b0b2008200141c8156a41d002109d08220441d0026a200d3a0000200441d1026a20012802b810360000200441d4026a20012800bb103600000b2012450d05201041a87d6a2110201221042007410a4f0d050c000b0b2009201441eccfca001058000b2004200941eccfca001059000b20092004417f6a2212490d002009201441fccfca001058000b2012200941fccfca001059000b0240200f20012802a418470d00200141a0186a200f410110900120012802a018210320012802a8182200210f0b2003200f4103746a22042007360204200420123602002001200041016a22003602a8182000210f024020004102490d000240024003400240024002400240024020032000417f6a4103746a2204280200450d00200041037420036a220741746a2802002208200428020422064b0d010b20004103490d022004280204210620032000417d6a22114103746a28020421040c010b4102210f200041024d0d0620032000417d6a22114103746a2802042204200620086a4d0d004103210f200041034d0d06200741646a280200200420086a4b0d050b20042006490d010b2000417e6a21110b02400240024002400240024002402000201141016a220d4d0d00200020114d0d0120032011410374220e6a2200280204221520002802006a22002003200d41037422166a2203280200220f490d02200020144b0d032013200f41d8026c6a220a2003280204221041d8026c22036a2106200041d8026c21072000200f6b220820106b220020104f0d0420192006200041d8026c2203109d08220820036a210420104101480d0520004101480d05201a20076a21072006210303402007200341a87d6a2206200441a87d6a2209200441786a2d0000200341786a2d00004922001b41d802109d0821072004200920001b21040240200a2006200320001b2203490d00200821000c080b200741a87d6a21072008210020082004490d000c070b0b200d2000418cd0ca001042000b20112000419cd0ca001042000b200f200041acd0ca001059000b2000201441acd0ca001058000b2019200a2003109d08220020036a2104024020104101480d00200820104c0d00201320076a210920002100200a2103034020062000200641d0026a2d0000200041d0026a2d00004922081b21072000200041d8026a20081b21002003200741d802109d0841d8026a2103200641d8026a200620081b220620094f0d03200420004b0d000c030b0b200a2103200021000c010b20062103200821000b20032000200420006b2204200441d802706b109d081a024020012802a818220020114d0d0020012802a0182203200e6a2204201520106a3602042004200f3602002000200d4d0d02200320166a2204200441086a2000200d417f736a410374109e081a20012000417f6a22003602a818200041014b0d010c030b0b2011200041bcd0ca001042000b200d2000104e000b2000210f0b2012450d020c000b0b1044000b024020012802a41841ffffffff0171450d00200310350b201841d802702100201841d802490d0220182000460d02201910350c020b20144102490d012014417f6a21032013201441d8026c6a2106410021080340024002400240201420032200417f6a2203490d00201420036b22074102490d022013200041d8026c6a220041d0026a2d00002013200341d8026c6a220441d0026a2d000022094f0d02200141c8156a200441d002109d081a2001200441d4026a2800003600bb102001200441d1026a2800003602b8102004200041d802109d08210a20074103490d012008210420062107200a4180086a2d000020094f0d0103402007220041a87d6a200041d802109d081a2004417f6a2204450d02200041d8026a2107200041a8056a2d000020094f0d020c000b0b2003201441dccfca001059000b2000200141c8156a41d002109d08220041d0026a20093a0000200041d1026a20012802b810360000200041d4026a20012800bb103600000b200841016a2108200641a87d6a210620030d000c020b0b024020042000460d000340200041d0026a21030240200041bc026a2802004102460d000240200041b0026a2802002206450d00200041b4026a280200450d00200610350b200010bb020b2003210020042003470d000b0b41002114410821130240200e450d00200e41d0026c450d00200d10350b410021170b200142003703d808200141800e6a4100360200200141fc0d6a2013201441d8026c6a360200200141f80d6a2013360200200141f40d6a2017360200200141900e6a200141d8086a3602002001418c0e6a2001413c6a360200200120133602f00d200142003703e80d2001200141c0006a3602880e200141a0186a200141e80d6a10ca04024020012802dc1a4103460d00200141c8156a200141a0186a41d002109d081a41d00210332206450d012006200141c8156a41d002109d08210020014281808080103702ac0b200120003602a80b200141b8106a41286a200141e80d6a41286a290300370300200141b8106a41206a200141e80d6a41206a290300370300200141b8106a41186a200141e80d6a41186a290300370300200141b8106a41106a2208200141e80d6a41106a290300370300200141b8106a41086a200141e80d6a41086a290300370300200120012903e80d3703b810200141a0186a200141b8106a10ca04024020012802dc1a4103470d00410121030c030b4102210341d0022100410121040340200141c8156a200141a0186a41d002109d081a02402003417f6a2004470d00200141a80b6a2004410110a70120012802a80b21060b200620006a200141c8156a41d002109d081a200120033602b00b200141a0186a200141b8106a10ca0420012802dc1a4103460d03200041d0026a2100200341016a210320012802ac0b21040c000b0b20012802fc0d20012802f80d22046b220041d8026d210302402000450d00200341d8026c2103200441bc026a2100034002402000417c6a2802002204450d002000280200450d00200410350b200041cc7d6a10bb02200041d8026a2100200341a87d6a22030d000b0b024020012802f40d2200450d00200041d8026c450d0020012802f00d10350b41082106410021080c020b1045000b200141cc106a280200200828020022086b220041d8026d210402402000450d00200441d8026c2104200841bc026a2100034002402000417c6a2802002208450d002000280200450d00200810350b200041cc7d6a10bb02200041d8026a2100200441a87d6a22040d000b0b0240200141c4106a2802002200450d00200041d8026c450d0020012802c01010350b20012802ac0b21082003450d00200128023c41016a2006200310cb04200341d0026c210320012903d80821052006210003400240200041bc026a2802004102460d000240200041b0026a2802002204450d00200041b4026a280200450d00200410350b200010bb020b200041d0026a2100200341b07d6a22030d000c020b0b20012903d80821050b02402008450d00200841d0026c450d00200610350b427f427f2005200c10cc047c220b200b2005541b22054280e497d0127c220b200b2005541b10c804200142003703e80d200141c8156a41186a22044200370300200141c8156a41106a22064200370300200141c8156a41086a22004200370300200142003703c81541d1c4c700ad4280808080e000841001220329000021052000200341086a290000370300200120053703c815200310354188f2c700ad4280808080e00184100122032900002105200141b8106a41086a2208200341086a290000370300200120053703b81020031035200220012903b810370000200241086a2008290300370000200141a0186a41086a2000290300370300200141a0186a41106a2006290300370300200141a0186a41186a2004290300370300200120012903c8153703a018200141203602cc152001200141a0186a3602c815200141e80d6a200141c8156a10cd0420012802182106024020012802202200450d00200041246c21032006210003400240024020002d0000220441044b0d0002400240024020040e050400010204040b2000410c6a280200450d03200041086a28020010350c030b2000410c6a280200450d02200041086a28020010350c020b2000410c6a280200450d01200041086a28020010350c010b200041086a280200450d00200041046a28020010350b200041246a21002003415c6a22030d000b0b0240200128021c2200450d00200041246c450d00200610350b200141f01a6a24000f0b103c000bfc0403027f017e057f230041d0006b2202240041d1c4c700ad4280808080e00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541dec4c700ad4280808080900184100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000b981103067f027e067f230041c0006b22022400024002400240024041ca0310332203450d00200241ca0336020420022003360200200341003b00002002410236020802400240200128020022032903684202520d00024020022802044102470d0020022802004102410410372201450d0620024104360204200220013602000b200228020041043a00022002200228020841016a3602080c010b024020022802044102470d0020022802004102410410372201450d0520024104360204200220013602000b20022802004184013a00022002200228020841016a3602082003200210fc05024020032d0024220141024b0d000240024002400240024020010e03000102000b410021040c020b410121040c010b41022104200241023a001041c10021050c010b200220043a001041c00021050b02400240200228020420022802082201460d00200228020021060c010b200141016a22062001490d05200141017422072006200720064b1b22074100480d050240024020010d0041002101024020070d00410121060c020b2007103322060d010c080b2002280200210620012007460d0020062001200710372206450d070b20022007360204200220063602000b200620016a20043a00002002200141016a2201360208024002402002280204220420016b2005490d00200228020021060c010b200120056a22062001490d05200441017422072006200720064b1b22074100480d050240024020040d00024020070d00410121060c020b200710332206450d080c010b2002280200210620042007460d0020062004200710372206450d070b20022007360204200220063602000b200620016a200341256a2005109d081a2002200120056a3602080b02400240200341e8006a22012903004201520d00200129031020012903082208420c882209420120094201561b8021090240024020022802042204200228020822056b4102490d00200228020021060c010b200541026a22062005490d06200441017422072006200720064b1b22074100480d060240024020040d00024020070d00410121060c020b200710332206450d090c010b2002280200210620042007460d0020062004200710372206450d080b20022007360204200220063602000b200620056a2009a741047420087aa7417f6a22064101200641014b1b2206410f2006410f491b723b0000200541026a21050c010b02400240200228020420022802082205460d00200228020021060c010b200541016a22062005490d05200541017422042006200420064b1b22044100480d050240024020050d0041002105024020040d00410121060c020b200410332206450d080c010b2002280200210620052004460d0020062005200410372206450d070b20022004360204200220063602000b200620056a41003a0000200541016a21050b20022005360208200141186a200210e2012002200141206a360210200241106a200210cf010b20034198016a200210af0320022802082103410410332201450d0020024204370214200220013602102003417e6a200241106a10772002280208220341014d0d01200228021821012002280214210a200220022802102207360224200241286a200720016a2205360200200241023602102002411c6a2002280200220641026a2204360200410021012002410036020820022003417e6a22033602142002200436021820022002360220200241246a210b0240024002402003450d0020072103034020032005460d032002200341016a360224200620016a20032d00003a00002002200228020841016a36020820014101460d02200141016a210120022802242103200228022821050c000b0b2002200b10c7050c010b024020022802282204200228022422036b2201450d00024002402002280220220641046a280200220c2002280214220d2002280210220e6a22056b2001490d00200628020021050c010b200520016a220f2005490d05200c4101742205200f2005200f4b1b220f4100480d0502400240200c0d000240200f0d00410121050c020b200f10332205450d080c010b20062802002105200c200f460d002005200c200f10372205450d070b20062005360200200641046a200f3602000b2005200e20016a22016a2005200e6a200d109e081a20022001360210200120062802082205460d00200520036a417f732004200e6a6a2101200628020020056a2105034020032004460d022002200341016a360224200520032d00003a00002006200628020841016a3602082001450d01200541016a21052001417f6a210120022802242103200228022821040c000b0b2002410036023820024201370330200241306a200b10c7052002280234210b2002280230210e024020022802382203450d00024002402002280220220641046a28020022042002280214220c200228021022056a22016b2003490d00200628020021010c010b200120036a220d2001490d0520044101742201200d2001200d4b1b220d4100480d050240024020040d000240200d0d00410121010c020b200d10332201450d080c010b200628020021012004200d460d0020012004200d10372201450d070b20062001360200200641046a200d3602000b2001200520036a22046a200120056a200c109e081a20022004360210200420062802082201460d00200120056b2104200628020020016a2101200e210503402003450d01200120052d00003a00002006200628020841016a360208200541016a2105200141016a210120042003417f6a2203470d000b0b200b450d00200e10350b02402002280218200228021c2203460d00200220033602180b024020022802142203450d000240200228021022062002280220220441086a22052802002201460d002004280200220420016a200420066a2003109e081a0b2005200320016a3602000b0240200a450d00200710350b20002002290300370200200041086a200241086a280200360200200241c0006a24000f0b1045000b41022003104f000b103e000b103c000bf104020b7f037e230041206b22022400024002400240024020012802082203410c6c41046a2204417f4c0d00200128020021050240024020040d0041012106410021040c010b200410332206450d020b2002410036020820022006360200200220043602042003200210770240024020030d002002280208210420022802042107200228020021080c010b20052003410c6c6a21092005210603402006280200210a200641086a280200220420021077024002402002280204220b2002280208220c6b2004490d0020022802002108200b21070c010b200c20046a2208200c490d05200b41017422072008200720084b1b22074100480d0502400240200b0d00024020070d00410121080c020b2007103322080d010c080b20022802002108200b2007460d002008200b200710372208450d070b20022007360204200220083602000b2008200c6a200a2004109d081a2002200c20046a22043602082006410c6a22062009470d000b0b2004ad4220862008ad8410282204290000210d200441086a290000210e200441106a290000210f200241186a2206200441186a290000370300200241106a220c200f370300200241086a220b200e3703002002200d37030020041035200041186a2006290300370000200041106a200c290300370000200041086a200b2903003700002000200229030037000002402007450d00200810350b02402003450d002003410c6c21062005210403400240200441046a280200450d00200428020010350b2004410c6a2104200641746a22060d000b0b0240200141046a2802002204450d002004410c6c450d00200510350b200241206a24000f0b1044000b1045000b103e000b103c000bdd3d04057f027e077f0b7e230041c00e6b22042400200441b8086a200141c803109d081a200441b0056a200441b8086a10d7034101210502400240024002400240024002400240024020042d00b0054101460d00200441b0026a200441b0056a41086a418003109d081a024020032802002201450d00200341086a280200210620032802042107200441a8026a41c4c3c700411010c00141002105200441b8086a20042802ac02410020042802a8021b10cb0320042802b8082108200420042802c0083602b405200420083602b00520012006200441b0056a109403024020042802bc08450d00200810350b2007450d00200110350b200441800c6a20044180036a10d803200441b8086a200441b0026a418003109d081a024002400240024020042903d80822094202520d0020042903800c220920042d00880c2206200210ce04220841ff01714102470d094200210a200441800d6a41086a22074200370300200441800d6a41106a220b4200370300200441800d6a41186a220c4200370300200442003703800d2004280288094113470d02200441b0056a2004418c096a10dd0320042d00b0054101460d01200441dc056a280200210d200441d8056a280200210e200441d4056a280200210f200441cc056a2802002110200441c8056a28020021110240200441d0056a2802002208450d002008410c6c21022011210803400240200841046a280200450d00200828020010350b2008410c6a2108200241746a22020d000b0b02402010450d002010410c6c450d00201110350b0240200d450d00200d410c6c2102200f210803400240200841046a280200450d00200828020010350b2008410c6a2108200241746a22020d000b0b200e450d02200e410c6c450d02200f10350c020b200441800d6a41186a200441b8086a41186a290300370300200441800d6a41106a200441b8086a41106a290300370300200441800d6a41086a200441b8086a41086a290300370300200420042903b8083703800d20044180096a2903002112200441f8086a290300210a200441f0086a280200210820042903e008211342002114200441900e6a41186a4200370300200441900e6a41106a220b4200370300200441900e6a41086a22064200370300200442003703900e41d1c4c700ad4280808080e000841001220729000021152006200741086a290000370300200420153703900e2007103541e7c4c700ad4280808080e00084100122072900002115200441f80d6a41086a220c200741086a290000370300200420153703f80d20071035200b20042903f80d2215370300200441b0056a41086a2006290300370300200441b0056a41106a2015370300200441b0056a41186a200c290300370300200420042903900e3703b005200441a0026a200441b0056a412010c001024020094201520d0020134200510d060b200441900e6a200441800d6a108e02200441b0056a20042802900e220720042802980e108f020240024020042903b0054201510d0041002106420021094200211542002113420021164200211742002118420021194100210b0c010b200441c0056a2903002119200441d0056a2903002117200441c8056a2903002116200441e0056a2903002113200441d8056a2903002115200441f0056a2903002109200441e8056a2903002114200441f8056a280200210620042903b805211820042802fc05210b0b024020042802940e450d00200710350b024020062008470d00200441b0056a200441800d6a108e0220043502b805211a20042802b0052107410410332206450d072006200841016a36000020064104410810372208450d072008200b3a000420084108411510372208450d07200820183700052008410d6a201937000020084115412a10372208450d07200820163700152008411d6a20173700002008412a41d40010372208450d0720082014370035200820153700252008413d6a20093700002008412d6a2013370000201a4220862007ad842008ad4280808080d00884100220081035024020042802b405450d00200710350b418012210820042d00880c22064102460d0920042903800c22092006200210ce04220841ff01714102470d0920044190026a2002200920042d00890c200a201210db0302400240200429039002221420044190026a41086a29030022158450450d00420021160c010b200441003a00a80d200420153703e80c200420143703e00c41012102200441014111200a201284501b3a008c0e2004200441800d6a3602f80d2004200441800d6a3602c00c2004200441c00c6a3602c00520042004418c0e6a3602bc052004200441f80d6a3602b8052004200441a80d6a3602b4052004200441e00c6a3602b005200441900e6a200441800d6a200441b0056a10dc030240024020042802900e4101470d004200211520042903980e21140c010b200441b80e6a2903002115200441b00e6a2903002114024020042903980e4201510d00410021020c010b200441900e6a41106a290300211320042802c00c2108200441e8056a200441900e6a41186a290300370300200441e0056a201337030041002102200441b0056a41086a41003a0000200441b9056a2008290000370000200441c1056a200841086a290000370000200441c9056a200841106a290000370000200441d1056a200841186a290000370000200441033a00b00541b0b4cc004100200441b0056a10d4010b42012116418002210820020d0a0b200441b80d6a41186a200441800d6a41186a2903002213370300200441b80d6a41106a200441800d6a41106a2903002217370300200441b80d6a41086a200441800d6a41086a2903002218370300200441d80d6a41086a2018370300200441d80d6a41106a2017370300200441d80d6a41186a2013370300200420042903800d22133703b80d200420133703d80d4101210d0c030b418006418004200620084b1b21080c080b20042d00b10522084102470d060b200441b80d6a41186a200c290300370300200441b80d6a41106a200b290300370300200441b80d6a41086a2007290300370300200420042903800d3703b80d4100210d42002112420021160b200441c00c6a41186a2210200441d80d6a41186a2208290300370300200441c00c6a41106a220f200441d80d6a41106a2202290300370300200441c00c6a41086a2211200441d80d6a41086a2207290300370300200420042903d80d3703c00c200441e00c6a41186a200441b80d6a41186a220b290300370300200441e00c6a41106a200441b80d6a41106a220c290300370300200441e00c6a41086a200441b80d6a41086a220e290300370300200420042903b80d3703e00c200441b0056a20044188096a41b002109d081a200820102903003703002002200f29030037030020072011290300370300200420042903c00c3703d80d410221100240200d450d00200b2008290300370300200c2002290300370300200e2007290300370300200420042903d80d3703b80d410121100b2004419a0e6a200e290300370100200441a20e6a200c290300370100200441aa0e6a200b290300370100200420103a00910e200420042903b80d3701920e200441003a00900e200441800d6a200441b0056a200441900e6a10ac03200441800d6a41106a290300211720042903880d2113200420042900990d3703b0052004200441a00d6a2800003600b7050240024020042903800d4201510d00410421080c010b200441800d6a41186a2d00002102200420042800b7053600970e200420042903b0053703900e4104210820134202510d00200420042800970e3600af0d200420042903900e3703a80d200221080b200441b80d6a41186a200441e00c6a41186a290300370300200441b80d6a41106a200441e00c6a41106a290300370300200441b80d6a41086a200441e00c6a41086a290300370300200420042903e00c3703b80d0240024002400240200841ff01714104460d00200641ff01714102460d010b20134201520d024200200920177d221820182009561b2219500d02200441b0056a41186a220c4200370300200441b0056a41106a22074200370300200441b0056a41086a22064200370300200442003703b00541d1c4c700ad4280808080e00084221a1001220b2900002118200441d80d6a41086a2202200b41086a290000370300200420183703d80d200b103520062002290300370300200420042903d80d3703b0054184eec700ad4280808080b00284221b1001220b29000021182002200b41086a290000370300200420183703d80d200b1035200720042903d80d2218370300200441900e6a41086a220e2006290300370300200441900e6a41106a22102018370300200441900e6a41186a220d2002290300370300200420042903b0053703900e20044180026a200441900e6a10e1022004290388022118200429038002211c200c42003703002007420037030020064200370300200442003703b005201a1001220b290000211a2002200b41086a2900003703002004201a3703d80d200b103520062002290300370300200420042903d80d3703b005201b1001220b290000211a2002200b41086a2900003703002004201a3703d80d200b1035200720042903d80d221a370300200e20062903003703002010201a370300200d2002290300370300200420042903b0053703900e201ca70d01200441900e6aad428080808080048410070c020b41801021082016500d08200441900e6a41186a220c4200370300200441900e6a41106a22074200370300200441900e6a41086a22064200370300200442003703900e41b6fdc600ad428080808080018422091001220b2900002112200441f80d6a41086a2202200b41086a290000370300200420123703f80d200b103520062002290300370300200420042903f80d3703900e41e489c200ad4280808080d0018422121001220b290000210a2002200b41086a2900003703002004200a3703f80d200b1035200720042903f80d220a370300200441b0056a41086a220e2006290300370300200441b0056a41106a2210200a370300200441b0056a41186a220d2002290300370300200420042903900e3703b005200441086a200441b0056a412010d701200441086a41106a290300210a200429031021132004280208210b200c42003703002007420037030020064200370300200442003703900e20091001220c29000021092002200c41086a290000370300200420093703f80d200c103520062002290300370300200420042903f80d3703900e20121001220c29000021092002200c41086a290000370300200420093703f80d200c1035200720042903f80d2209370300200e200629030037030020102009370300200d2002290300370300200420042903900e3703b00520044200200a4200200b1b220920157d20134200200b1b2215201454ad7d2212201520147d2214201556201220095620122009511b22021b3703980e20044200201420021b3703900e200441b0056aad4280808080800484200441900e6aad428080808080028410020c080b20044200201820197d221920192018561b3703b005200441900e6aad4280808080800484200441b0056aad428080808080018410020b200441d80d6a41186a200441b80d6a41186a290300370300200441d80d6a41106a200441b80d6a41106a290300370300200441d80d6a41086a200441b80d6a41086a290300370300200420042903b80d3703d80d02402016500d0042002116200441f0016a4200200920177d221720172009561b420020134201511b10cf0420042903f00121092004200441f0016a41086a29030022133703800e200420093703f80d02400240024002400240200920138450450d00420021090c010b2004200441d80d6a36028c0e200441900e6a200441d80d6a200441f80d6a2004418c0e6a109a0220042802900e4101460d01200441b80e6a2903002109200441b00e6a2903002116200441900e6a41086a2903004201520d00200441900e6a41106a2903002113200441e8056a200441900e6a41186a290300370300200441e0056a2013370300200441b0056a41086a41003a0000200441b9056a20042903d80d370000200441c1056a200441d80d6a41086a290300370000200441c9056a200441d80d6a41106a290300370000200441d1056a200441d80d6a41186a290300370000200441033a00b00541b0b4cc004100200441b0056a10d4010b20142016542202201520095420152009511b0d01201520097d2002ad7d2115201420167d21140b200441f0006a201220152014200a56201520125620152012511b22021b2212420042d0004200108408200441b0016a200a201420021b2209420042d000420010840820044180016a4200420020094200108408200441d0016a20042903b001200441b0016a41086a290300220a20042903702004290380017c7c221342e4004200109808200441a0016a201520127d2014200954ad7d2215420042d0004200108408200441c0016a201420097d2214420042d000420010840820044190016a4200420020144200108408200441e0016a20042903c001200441c0016a41086a290300221620042903a0012004290390017c7c221742e4004200109808427f201242dc9e8aae8f85d7c702200441d0016a41086a2903002004290378200429038801844200522013200a547222021b220a201242c2eba3e1f5d1f0fa2820042903d00120021b2213200954200a201254200a2012511b22021b22187d20092013200920021b221254ad7d220a201542dc9e8aae8f85d7c702200441e0016a41086a29030020042903a8012004290398018442005220172016547222021b2213201542c2eba3e1f5d1f0fa2820042903e00120021b2216201454201320155420132015511b22021b22137d20142016201420021b221554ad7d7c200920127d2209201420157d7c22162009542202ad7c220920022009200a542009200a511b22021b2114427f201620021b210a02400240201520127c2209201320187c2009201554ad7c2215844200520d00200441900e6a41186a220c4200370300200441900e6a41106a22074200370300200441900e6a41086a22064200370300200442003703900e41b6fdc600ad428080808080018422091001220b2900002115200441f80d6a41086a2202200b41086a290000370300200420153703f80d200b103520062002290300370300200420042903f80d3703900e41e489c200ad4280808080d0018422151001220b29000021122002200b41086a290000370300200420123703f80d200b1035200720042903f80d2212370300200441b0056a41086a220e2006290300370300200441b0056a41106a22102012370300200441b0056a41186a220d2002290300370300200420042903900e3703b005200441d8006a200441b0056a412010d701200441d8006a41106a2903002112200429036021132004280258210b200c42003703002007420037030020064200370300200442003703900e20091001220c29000021092002200c41086a290000370300200420093703f80d200c103520062002290300370300200420042903f80d3703900e20151001220c29000021092002200c41086a290000370300200420093703f80d200c1035200720042903f80d2209370300200e200629030037030020102009370300200d2002290300370300200420042903900e3703b005200420124200200b1b3703980e200420134200200b1b3703900e200441b0056aad4280808080800484200441900e6aad428080808080028410020c010b200442f0f2bda1a7ee9cb9f9003703900e200441b0056a200441900e6a10e001200441b0056a2009201510df01200441c8056a2015370300200441c0056a2009370300200441b0056a41086a41063a00002004410c3a00b00541b0b4cc004100200441b0056a10d4010b200a2014844200520d01200441900e6a41186a220c4200370300200441900e6a41106a22074200370300200441900e6a41086a22064200370300200442003703900e41b6fdc600ad428080808080018422091001220b2900002114200441f80d6a41086a2202200b41086a290000370300200420143703f80d200b103520062002290300370300200420042903f80d3703900e41e489c200ad4280808080d0018422141001220b29000021152002200b41086a290000370300200420153703f80d200b1035200720042903f80d2215370300200441b0056a41086a220e2006290300370300200441b0056a41106a22102015370300200441b0056a41186a220d2002290300370300200420042903900e3703b005200441c0006a200441b0056a412010d701200441c0006a41106a2903002115200429034821122004280240210b200c42003703002007420037030020064200370300200442003703900e20091001220c29000021092002200c41086a290000370300200420093703f80d200c103520062002290300370300200420042903f80d3703900e20141001220c29000021092002200c41086a290000370300200420093703f80d200c1035200720042903f80d2209370300200e200629030037030020102009370300200d2002290300370300200420042903900e3703b005200420154200200b1b3703980e200420124200200b1b3703900e200441b0056aad4280808080800484200441900e6aad428080808080028410020c020b200441900e6a41186a220b4200370300200441900e6a41106a22064200370300200441900e6a41086a22024200370300200442003703900e41b6fdc600ad4280808080800184221210012207290000210a200441f80d6a41086a2208200741086a2900003703002004200a3703f80d2007103520022008290300370300200420042903f80d3703900e41e489c200ad4280808080d00184220a1001220729000021132008200741086a290000370300200420133703f80d20071035200620042903f80d2213370300200441b0056a41086a220c2002290300370300200441b0056a41106a220e2013370300200441b0056a41186a22102008290300370300200420042903900e3703b005200441206a200441b0056a412010d701200441206a41106a29030021132004290328211720042802202107200b42003703002006420037030020024200370300200442003703900e20121001220b29000021122008200b41086a290000370300200420123703f80d200b103520022008290300370300200420042903f80d3703900e200a1001220b29000021122008200b41086a290000370300200420123703f80d200b1035200620042903f80d2212370300200c2002290300370300200e201237030020102008290300370300200420042903900e3703b0052004427f2013420020071b2212200920157d2016201454ad7d7c2017420020071b2209201620147d7c22142009542208ad7c22092008200920125420092012511b22081b3703980e2004427f201420081b3703900e200441b0056aad4280808080800484200441900e6aad4280808080800284100241800221080c080b200441b0056a10d004200441b0056a200a201410df010b200420042800af0d3600b70c200420042903a80d3703b00c200420042903b00c3703a00c200420042800b70c3600a70c200420083a00900c200441900c6a41086a20042800a70c360000200420042903a00c3700910c200441800d6a41086a200441800c6a41086a290300370300200420042903800c3703800d41072102410021060240200841ff01714104460d00200441900c6a10d104200441bb056a200441980c6a280200360000200420042903900c3700b30541012106410f21020b200441b0056a20026a220820042903800d370000200841086a200441800d6a41086a290300370000200441b8086a41086a20063a0000200441c1086a20042900b005370000200441c9086a200441b0056a41086a2208290000370000200441d1086a200441b0056a41106a2202290000370000200441b8086a41206a200441c7056a290000370000200441003a00b80841b0b4cc004100200441b8086a10d401200441386a41c4c3c700411010c0012004200428023c41016a410120042802381b22063602b80841c4c3c700ad4280808080800284200441b8086aad4280808080c000841002200420063602dc0d200441003602d80d200441b0056a41186a42003703002002420037030020084200370300200442003703b00541d1c4c700ad4280808080e000841001220629000021092008200641086a290000370300200420093703b005200610354188f2c700ad4280808080e00184100122062900002109200441f80d6a41086a2207200641086a290000370300200420093703f80d20061035200220042903f80d2209370300200441900e6a41086a2008290300370300200441900e6a41106a2009370300200441900e6a41186a2007290300370300200420042903b0053703900e200441203602bc082004200441900e6a3602b808200441d80d6a200441b8086a10cd042000410c6a200441900c6a41086a280200360200200041046a20042903900c370200200041003a00002001450d0820050d010c080b200020042f00b1053b0001200041013a0000200041036a20042d00b3053a000020032802002101410021000c060b200341046a280200450d06200110350c060b41809ccc004119419c9ccc00103f000b103c000b20042f01b20541087420087221080b20044188096a10ba020b200420042903b00c3703a00c200420042800b70c3600a70c200041036a20084110763a0000200020083b0001200041013a000020054521000b20000d002001450d00200341046a280200450d00200110350b200441c00e6a24000bcc0405067f017e017f017e047f230041e0006b22002400200041c4c3c700411010c001200028020421010240200028020022024101470d0041c4c3c700ad428080808080028410070b200041306a41186a22034200370300200041306a41106a22044200370300200041306a41086a220542003703002000420037033041d1c4c700ad4280808080e000842206100122072900002108200041d0006a41086a2209200741086a2900003703002000200837035020071035200520092903003703002000200029035037033041ecedc700ad4280808080e001841001220729000021082009200741086a2900003703002000200837035020071035200420002903502208370300200041106a41086a220a2005290300370300200041106a41106a220b2008370300200041106a41186a220c20092903003703002000200029033037031020002001410020021b360230200041106aad4280808080800484200041306aad4280808080c000841002200041013602082003420037030020044200370300200542003703002000420037033020061001220729000021062009200741086a290000370300200020063703502007103520052009290300370300200020002903503703304188f2c700ad4280808080e001841001220729000021062009200741086a2900003703002000200637035020071035200420002903502206370300200a2005290300370300200b2006370300200c200929030037030020002000290330370310200041203602342000200041106a360230200041086a200041306a10cd04200041e0006a24000b956808047f017e017f027e077f017e057f067e230041c0036b22012400200141a8016a41186a4200370300200141a8016a41106a22024200370300200141a8016a41086a22034200370300200142003703a80141a8e7cb00ad4280808080f00184100122042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004103520032006290300370300200120012903c0023703a80141b697ca00ad4280808080d001841001220429000021052006200441086a290000370300200120053703c00220041035200220012903c002220537030020014190036a41086a200329030037030020014190036a41106a200537030020014190036a41186a2006290300370300200120012903a80137039003200141203602ac02200120014190036a3602a802200141c0026a20014190036aad220742808080808004842208100510c2010240024020012802c00222030d004102210620014102360284030c010b20012802c40221092001200628020022063602b402200120033602b0020240024020064104490d002001200341046a3602b00220012006417c6a22043602b40220044104490d002003280000210a2001200641786a3602b4022001200341086a3602b0022003280004210b200141a8016a200141b0026a10e80320012802a801220c450d0020012902ac012105410021060240024020012802b402220d0d000c010b2001200d417f6a220e3602b402200120012802b002220f41016a3602b0020240200f2d00004101460d000c010b200e4104490d002001200d417b6a3602b4022001200f41056a3602b002200f2800012104410121060b2001200436028803200120053702fc022001200c3602f8022001200b3602f4022001200a3602f0020c010b200141003602d802200142013703d002200141093602b4032001200141a8026a3602b0032001200141d0026a3602bc02200141bc016a4101360200200142013702ac01200141c888c2003602a8012001200141b0036a3602b801200141bc026a41e88ac500200141a8016a10431a20013502d80242208620013502d002841006024020012802d402450d0020012802d00210350b410221060b20012006360284032009450d00200310350b200141a8016a41106a2203200141f0026a41106a2209280200360200200141a8016a41086a220a200141f0026a41086a220b290300370300200120012903f0023703a8010240024002400240024002400240024020064102460d00200141d0026a41106a20032802002203360200200141d0026a41086a200a2903002210370300200120012903a80122053703d00220092003360200200b201037030020014188036a2004360200200120053703f002200120063602840302402005a722032000470d000240024020064101460d0020012802f4022106200141a8016a200141f0026a41086a10c605200141a0036a200636020020014190036a410c6a200141a8016a41086a22062802003602002001410036029003200120012903a80137029403200141a8016a20014190036a108805200141cb026a2006280200360000200120012903a8013700c302200141a8016a410c6a200141c7026a290000370000200141c6a4b9da043600a901200141023a00a801200120012900c0023700ad01200141a8016a10820420014190036a41086a2802002206450d01200641286c450d0120012802940310350c010b20012802f4022106200141a8016a200141f0026a41086a10c605200141a4036a200636020020014190036a41086a20012903a801370300200141a0036a200141a8016a41086a220628020036020020012004360294032001410136029003200141a8016a20014190036a108805200141cb026a2006280200360000200120012903a8013700c302200141a8016a410c6a200141c7026a290000370000200141c6a4b9da043600a901200141023a00a801200120012900c0023700ad01200141a8016a10820420014190036a410c6a2802002206450d00200641286c450d0020012802980310350b20012802f00221030b024020012802f40220036a2000470d002001200141f8026a220d3602ac01200141003602a80120014180036a28020041286c4105722206417f4c0d02200610332203450d03200341013a000020012006360294032001200336029003200141013602980320012802f8022106200128028003220320014190036a10770240024020030d002001280298032103200128029003210b0c010b2006200341286c6a210c20012802940321092001280298032103034002400240200920036b4120490d00200341206a2104200128029003210b2009210a0c010b200341206a22042003490d072009410174220a2004200a20044b1b220a4100480d070240024020090d000240200a0d004101210b0c020b200a1033220b0d010c0d0b200128029003210b2009200a460d00200b2009200a1037220b450d0c0b2001200a360294032001200b360290030b200b20036a22032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a2900003700002001200436029803200641206a290300210502400240200a20046b4108490d00200441086a2103200a21090c010b200441086a22032004490d07200a41017422092003200920034b1b22094100480d0702400240200a0d00024020090d004101210b0c020b20091033220b450d0d0c010b200a2009460d00200b200a20091037220b450d0c0b20012009360294032001200b360290030b200b20046a20053700002001200336029803200c200641286a2206470d000b0b2001280294032106419793ca00ad4280808080c002842003ad422086200bad84100202402006450d00200b10350b024020012802a801450d00200141b0016a2802002206450d00200641286c450d0020012802ac0110350b200141a8016a41086a2206200d290000370300200141a8016a41106a2204200d41086a280000360200200141003602ac012001410b3a00a80141b0b4cc004100200141a8016a10d401200141a8016a41186a220a42003703002004420037030020064200370300200142003703a80141a8e7cb00ad4280808080f00184100122092900002105200141c0026a41086a2203200941086a290000370300200120053703c0022009103520062003290300370300200120012903c0023703a80141b697ca00ad4280808080d001841001220929000021052003200941086a290000370300200120053703c00220091035200220012903c002370000200241086a200329030037000020014190036a41086a200629030037030020014190036a41106a200429030037030020014190036a41186a200a290300370300200120012903a80137039003200810070c010b200141fc026a2802002206450d00200641286c450d0020012802f80210350b200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141a8e7cb00ad4280808080f00184100122042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004103520032006290300370300200120012903c0023703a80141c397ca00ad4280808080d000841001220429000021052006200441086a290000370300200120053703c00220041035200220012903c002370000200241086a200629030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200141203602c402200120014190036a3602c002200141d0026a2008100510c20120012802d0022206450d0520012802d4022104024002400240200141d0026a41086a2802002209450d0020062d0000220a41034b0d0041002103024002400240200a0e0405000102050b2009417f6a4108490d0220062900012105410121030c040b410221030c020b2009417f6a4108490d0020062900012105410321030c020b200141003602f802200142013703f002200141093602b4032001200141c0026a3602b0032001200141f0026a3602b002200141bc016a4101360200200142013702ac01200141c888c2003602a8012001200141b0036a3602b801200141b0026a41e88ac500200141a8016a10431a20013502f80242208620013502f002841006024020012802f402450d0020012802f00210350b410421030b0b02402004450d00200610350b2003417f6a220641024b0d0520060e03040503040b1044000b1045000b103e000b2005422088a7210602402005a722032000470d0020014104360290032001200636029403200141a8016a20014190036a108805200141cb026a200141b0016a280200360000200120012903a8013700c302200141b4016a200141c7026a290000370000200141c6a4b9da043600a901200141023a00a801200120012900c0023700ad01200141a8016a1082040b200620036a2000470d01200141003602f002200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141a8e7cb00ad4280808080f00184100122042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004103520032006290300370300200120012903c0023703a80141c397ca00ad4280808080d000841001220429000021052006200441086a290000370300200120053703c00220041035200220012903c002370000200241086a200629030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200141a8016a200141f0026a10db06200820013502b00142208620012802a8012206ad841002024020012802ac01450d00200610350b200141023602ac012001410b3a00a80141b0b4cc004100200141a8016a10d4010c010b2005422088a7210602402005a722032000470d0020014103360290032001200636029403200141a8016a20014190036a108805200141cb026a200141b0016a280200360000200120012903a8013700c302200141b4016a200141c7026a290000370000200141c6a4b9da043600a901200141023a00a801200120012900c0023700ad01200141a8016a1082040b200620036a2000470d00200141023602f002200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141a8e7cb00ad4280808080f00184100122042900002105200141c0026a41086a2206200441086a290000370300200120053703c0022004103520032006290300370300200120012903c0023703a80141c397ca00ad4280808080d000841001220429000021052006200441086a290000370300200120053703c00220041035200220012903c002370000200241086a200629030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200141a8016a200141f0026a10db06200820013502b00142208620012802a8012206ad841002024020012802ac01450d00200610350b200141013602ac012001410b3a00a80141b0b4cc004100200141a8016a10d4010b200141a8016a41186a22044200370300200141a8016a41106a220d4200370300200141a8016a41086a22034200370300200142003703a80141bee4cb00ad4280808080f001842205100122092900002108200141f0026a41086a2206200941086a290000370300200120083703f0022009103520032006290300370300200120012903f0023703a801418cc0c700ad4280808080e000841001220929000021082006200941086a290000370300200120083703f00220091035200d20012903f002220837030020014190036a41086a220a200329030037030020014190036a41106a220b200837030020014190036a41186a220c2006290300370300200120012903a80137039003200141a0016a20014190036a412010c00120012802a401210f024020012802a00122024101470d002007428080808080048410070b20044200370300200d420037030020034200370300200142003703a80120051001220929000021052006200941086a290000370300200120053703f0022009103520032006290300370300200120012903f0023703a80141cde4cb00ad4280808080b001841001220929000021052006200941086a290000370300200120053703f00220091035200d20012903f002370000200d41086a2006290300370000200a2003290300370300200b200d290300370300200c2004290300370300200120012903a801370390030240024020014190036a10bd02220641ff01714102460d0020064101710d010b41041033220a450d01200a4100360200200141a8016a41186a22044200370300200141a8016a41106a22094200370300200141a8016a41086a22034200370300200142003703a80141bee4cb00ad4280808080f0018422051001220b2900002108200141f0026a41086a2206200b41086a290000370300200120083703f002200b103520032006290300370300200120012903f0023703a80141b9e0c600ad4280808080b001841001220b29000021082006200b41086a290000370300200120083703f002200b1035200d20012903f002370000200d41086a220b200629030037000020014190036a41086a220c200329030037030020014190036a41106a2200200929030037030020014190036a41186a220e2004290300370300200120012903a80137039003200141203602ac01200120014190036a3602a801200a4101200141a8016a109503200a103541041033220a450d01200a4100360200200442003703002009420037030020034200370300200142003703a80120051001221129000021082006201141086a290000370300200120083703f0022011103520032006290300370300200120012903f0023703a8014192c0c700ad4280808080c001841001221129000021082006201141086a290000370300200120083703f00220111035200d20012903f002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903a80137039003200141203602ac01200120014190036a3602a801200a4101200141a8016a109503200a1035200442003703002009420037030020034200370300200142003703a80120051001220a29000021082006200a41086a290000370300200120083703f002200a103520032006290300370300200120012903f0023703a801419ec0c700ad4280808080e000841001220a29000021082006200a41086a290000370300200120083703f002200a1035200d20012903f002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903a80137039003200141003602a801200742808080808004842208200141a8016aad22104280808080c000841002200442003703002009420037030020034200370300200142003703a80120051001220a29000021052006200a41086a290000370300200120053703f002200a103520032006290300370300200120012903f0023703a80141cde4cb00ad4280808080b001841001220a29000021052006200a41086a290000370300200120053703f002200a1035200d20012903f002370000200b2006290300370000200c200329030037030020002009290300370300200e2004290300370300200120012903a80137039003200141013a00a801200820104280808080108410020b200141a8016a41186a4200370300200141a8016a41106a22124200370300200141a8016a41086a22064200370300200142003703a80141bee4cb00ad4280808080f001841001220329000021052006200341086a290000370300200120053703a8012003103541b9e0c600ad4280808080b00184100122032900002105200141f0026a41086a2204200341086a290000370300200120053703f00220031035201220012903f002220537030020014190036a41086a200629030037030020014190036a41106a200537030020014190036a41186a2004290300370300200120012903a80137039003200141a8016a20014190036a10c5020240024020012802a801220e0d0041002113200141003602c802200142043703c0024104210e410021110c010b200120012902ac0122053702c4022001200e3602c0022005422088a721112005a721130b200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141bee4cb00ad4280808080f00184100122042900002105200141f0026a41086a2206200441086a290000370300200120053703f0022004103520032006290300370300200120012903f0023703a8014192c0c700ad4280808080c001841001220429000021052006200441086a290000370300200120053703f00220041035200d20012903f002370000200d41086a200629030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200141a8016a20014190036a10c5020240024020012802a801220a0d0041002114200141003602d802200142043703d0024104210a4100210c0c010b200120012902ac0122053702d4022001200a3602d0022005422088a7210c2005a721140b0240024002400240024020020d002011450d012011410274200e6a417c6a280200210f0b201141002011419c7f6a22062006201141016a4b1b2215490d01200141003602c8022015450d03200e20154102746a2100200e210203402002280200210b02400240024002400240200c41014b0d0041002106200c0e020201020b41002106200c2103034020062003410176220420066a2209200b200a20094102746a280200491b2106200320046b220341014b0d000b0b200b200a200641027422036a2802002204460d022006200b20044b6a21060c010b410021060b200120063602a80141dcc0c700412e200141a8016a418cc1c700419cc1c7001046000b200c20064d0d03200a20036a2203200341046a2006417f73200c6a410274109e081a2001200c417f6a220c3602d802200241046a22022000470d000c040b0b41a4c0c700412641ccc0c7001064000b20152011104f000b2006200c104e000b410021064100210b0240201120156b2203450d0002402015450d00200e200e20154102746a2003410274109e081a0b200120033602c8022003210b0b024002400240200c41014b0d00200c0e020201020b41002106200c2103034020062003410176220420066a2209200f200a20094102746a280200491b2106200320046b220341014b0d000b0b0240200f200a20064102746a2802002203460d002006200f20034b6a21060b200c20064f0d002006200c104d000b0240200c2014470d00200141d0026a2014410110860120012802d002210a0b200a20064102746a220341046a2003200c20066b410274109e081a2003200f3602002001200c41016a22033602d8020240200b2013470d00200141c0026a2013410110860120012802c002210e20012802c802210b0b200e200b4102746a200f3602002001200b41016a220b3602c80202400240024002400240024002402003450d00200341017621062003410171450d01200320064d0d03200a20064102746a28020021000c020b41acc1c70041c30041c086cc00103f000b200320064d0d0220032006417f6a22044d0d03200a20044102746a280200200a20064102746a2802006a41017621000b20012802c4022102200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22044200370300200142003703a80141bee4cb00ad4280808080f0018422051001220c2900002108200141f0026a41086a2206200c41086a290000370300200120083703f002200c103520042006290300370300200120012903f0023703a80141b9e0c600ad4280808080b001841001220c29000021082006200c41086a290000370300200120083703f002200c1035200d20012903f002370000200d41086a220f200629030037000020014190036a41086a2211200429030037030020014190036a41106a2215200a29030037030020014190036a41186a22132009290300370300200120012903a80137039003200141203602ac01200120014190036a3602a801200e200b200141a8016a1095030240200241ffffffff0371450d00200e10350b20012802d402210e20012802d002210220094200370300200a420037030020044200370300200142003703a80120051001220c29000021052006200c41086a290000370300200120053703f002200c103520042006290300370300200120012903f0023703a8014192c0c700ad4280808080c001841001220c29000021052006200c41086a290000370300200120053703f002200c1035200d20012903f002370000200f2006290300370000201120042903003703002015200a29030037030020132009290300370300200120012903a80137039003200141203602ac01200120014190036a3602a80120022003200141a8016a1095030240200e41ffffffff0371450d00200210350b200141a8016a41186a22094200370300200141a8016a41106a22044200370300200141a8016a41086a22034200370300200142003703a80141bee4cb00ad4280808080f001841001220a2900002105200141f0026a41086a2206200a41086a290000370300200120053703f002200a103520032006290300370300200120012903f0023703a801419ec0c700ad4280808080e000841001220a29000021052006200a41086a290000370300200120053703f002200a1035200d20012903f002370000200d41086a200629030037000020014190036a41086a220a200329030037030020014190036a41106a220c200429030037030020014190036a41186a22022009290300370300200120012903a80137039003200120003602a80120074280808080800484200141a8016aad22164280808080c0008410020240200b41e500470d00200942003703002004420037030020034200370300200142003703a80141d1c4c700ad4280808080e000841001220b29000021052003200b41086a290000370300200120053703a801200b103541e7c4c700ad4280808080e000841001220b29000021052006200b41086a290000370300200120053703f002200b1035201220012903f002370000201241086a2006290300370000200a2003290300370300200c200429030037030020022009290300370300200120012903a8013703900320014198016a20014190036a412010c0010b200942003703002004420037030020034200370300200142003703a80141f7edcb00ad4280808080f0008422081001220929000021052006200941086a290000370300200120053703f0022009103520032006290300370300200120012903f0023703a80141eeedcb00ad428080808090018422101001220929000021052006200941086a290000370300200120053703f00220091035200420012903f0022205370300200a2003290300370300200c200537030020022006290300370300200120012903a80137039003200141a8016a20014190036a10ac01024020012903a801427f7c4202540d0020042903002117200141a8016a41186a220a4200370300200141a8016a41106a22094200370300200141a8016a41086a22064200370300200142003703a80141d1efcb00ad42808080809001841001220329000021052006200341086a290000370300200120053703a8012003103541ebc3c400ad428080808030841001220b2900002105200141f0026a41086a2203200b41086a290000370300200120053703f002200b1035200920012903f002220537030020014190036a41086a220c200629030037030020014190036a41106a2202200537030020014190036a41186a22002003290300370300200120012903a8013703900320014188016a20014190036a10e102200141f8006a20012903900142002001280288011b221842e807802219420042e8074200108408200a42003703002009420037030020064200370300200142003703a80120081001220b29000021052003200b41086a290000370300200120053703f002200b103520062003290300370300200120012903f0023703a80120101001220b29000021052003200b41086a290000370300200120053703f002200b1035200420012903f002370000200441086a2003290300370000200c2006290300370300200220092903003703002000200a290300370300200120012903a8013703900320012903782105200141f8006a41086a2903002108410410332206450d05200620173e000020064104410810372206450d05200641013a000420064108411010372206450d0520062005201820194298787e7c42ff07837c2210427f20082010200554ad7c501b370005200742808080808004842006ad4280808080d001841002200610350b200141a8016a41186a220b4200370300200141a8016a41106a22094200370300200141a8016a41086a22034200370300200142003703a80141e3efcb00ad4280808080a00284100122042900002105200141f0026a41086a2206200441086a290000370300200120053703f0022004103520032006290300370300200120012903f0023703a80141f5efcb00ad42808080809002841001220429000021052006200441086a290000370300200120053703f00220041035200920012903f002220537030020014190036a41086a200329030037030020014190036a41106a200537030020014190036a41186a2006290300370300200120012903a80137039003200141e0006a20014190036a10bc02200141e0006a41106a29030021172001290368211920012802602104200141f0026a41186a4200370300200141f0026a41106a220c420037030020064200370300200142003703f00241d1c4c700ad4280808080e000841001220a29000021052006200a41086a290000370300200120053703f002200a10354184eec700ad4280808080b002841001220a2900002105200141c0026a41086a2202200a41086a290000370300200120053703c002200a1035200c20012903c00222053703002003200629030037030020092005370300200b2002290300370300200120012903f0023703a801200141d0006a200141a8016a10e102200141106a2001290358420020012802501b2205428090cad2c60e2005428090cad2c60e5622061b428090cad2c60e200520061b7d420042a0c21e4200108408200141c0006a20012903102208200141106a41086a29030022102008201010dc06200141c0006a41086a290300211a2001290340211b200141306a428080aace938c0942002008201010dc06200141306a41086a290300210820012903302118200141206a428090bcfd024200201b201a10dc062017420020041b21102019420020041b2119200141206a41086a29030021172001290320211a02400240200542ff8fcad2c60e560d0042ffffffffffffffffff00428080808080808080807f201042ffffffffffffffffff00428080808080808080807f200820177d2018201a54ad7d22054200531b200541012008427f552008501b220641012017427f552017501b47200641012005427f552005501b477122061b22087d20192005423f872018201a7d20061b221754ad7d22054200531b200541012010427f552010501b220641012008427f552008501b47200641012005427f552005501b477122061b2208427f2005423f87201920177d20061b2205428080f0c4c5a9d28f72562008427f552008427f511b22061b21082005428080f0c4c5a9d28f7220061b21050c010b42ffffffffffffffffff00428080808080808080807f201042ffffffffffffffffff00428080808080808080807f200820177c2018201a7c221a201854ad7c22054200531b200541012008427f552008501b220641012017427f552017501b46200641012005427f552005501b477122061b22087c20192005423f87201a20061b7c2217201954ad7c22054200531b200541012010427f552010501b220641012008427f552008501b46200641012005427f552005501b477122061b21082005423f87201720061b21050b200141a8016a41186a220a4200370300200141a8016a41106a22044200370300200141a8016a41086a22034200370300200142003703a80141e3efcb00ad4280808080a002841001220b2900002110200141f0026a41086a2206200b41086a290000370300200120103703f002200b103520032006290300370300200120012903f0023703a80141f5efcb00ad42808080809002841001220b29000021102006200b41086a290000370300200120103703f002200b1035200920012903f002370000200941086a200629030037000020014190036a41086a2209200329030037030020014190036a41106a220b200429030037030020014190036a41186a220c200a290300370300200120012903a80137039003200120083703b001200120053703a801200742808080808004842205201642808080808002841002200a42003703002004420037030020034200370300200142003703a8014193d1cb00ad4280808080a0018422081001220229000021102006200241086a290000370300200120103703f0022002103520032006290300370300200120012903f0023703a80141d8c7ca00ad4280808080e000841001220229000021102006200241086a290000370300200120103703f00220021035200420012903f002221037030020092003290300370300200b2010370300200c2006290300370300200120012903a8013703900320051007200a42003703002004420037030020034200370300200142003703a80120081001220229000021082006200241086a290000370300200120083703f0022002103520032006290300370300200120012903f0023703a801419dd1cb00ad4280808080c001841001220229000021082006200241086a290000370300200120083703f00220021035200420012903f002220837030020092003290300370300200b2008370300200c2006290300370300200120012903a8013703900320051007200a42003703002004420037030020034200370300200142003703a80141d1efcb00ad42808080809001841001220a29000021082003200a41086a290000370300200120083703a801200a103541daefcb00ad42808080809001841001220a29000021082006200a41086a290000370300200120083703f002200a1035200420012903f002220837030020092003290300370300200b2008370300200c2006290300370300200120012903a8013703900320014190036a10bd02220641ff01714102460d03200510072006410171450d03200141a8016a41186a4200370300200141a8016a41106a22064200370300200141a8016a41086a22034200370300200142003703a80141a9d1cb00ad4280808080c000841001220429000021052003200441086a290000370300200120053703a8012004103541cde4cb00ad4280808080b00184100122042900002105200141c0026a41086a2209200441086a290000370300200120053703c00220041035200620012903c002220537030020014190036a41086a200329030037030020014190036a41106a200537030020014190036a41186a2009290300370300200120012903a80137039003200141a8016a20014190036a10b702024020012d00a80122034102460d00200742808080808004841007200141d0026a41086a200141b1016a290000370300200141d0026a41106a200141b9016a290000370300200141d0026a41186a200141c1016a290000370300200120012900a9013703d0020240200341037122034103460d0020030e03010001010b200141f0026a41186a200141d0026a41186a290300370300200141f0026a41106a200141d0026a41106a290300370300200141f0026a41086a200141d0026a41086a290300370300200120012903d0023703f002200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141a9d1cb00ad4280808080c000841001220429000021052003200441086a290000370300200120053703a8012004103541f0d1cb00ad4280808080c00184100122042900002105200141c0026a41086a220b200441086a290000370300200120053703c00220041035200620012903c002370000200641086a200b29030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200141086a20014190036a412010c00141002109200141a8016a200128020c410020012802081b220a10fe0320014190036a20012802a801220b20012802b00110c3020240024020012802900322040d00200141003602b803200142013703b00341012104410021030c010b200120012902940322053702b403200120043602b0032005422088a721032005a721090b024020012802ac01450d00200b10350b024002402003418002490d00412010332203450d07200320012903f002370000200341186a200141f0026a41186a290300370000200341106a200141f0026a41106a290300370000200341086a200141f0026a41086a290300370000200141a8016a200a41016a220910fe0320012802a8012104200120012802b0013602940320012004360290032003410120014190036a109802024020012802ac01450d00200410350b20031035200141a8016a41186a220a4200370300200141a8016a41106a220b4200370300200141a8016a41086a22034200370300200142003703a80141a9d1cb00ad4280808080c000841001220429000021052003200441086a290000370300200120053703a8012004103541f0d1cb00ad4280808080c00184100122042900002105200141c0026a41086a220c200441086a290000370300200120053703c00220041035200620012903c002370000200641086a200c29030037000020014190036a41086a200329030037030020014190036a41106a200b29030037030020014190036a41186a200a290300370300200120012903a80137039003200120093602a8012007428080808080048420164280808080c000841002200141b0036a21030c010b200141a8016a41186a220b200141f0026a41186a290300370300200141a8016a41106a220c200141f0026a41106a290300370300200141a8016a41086a2202200141f0026a41086a290300370300200120012903f0023703a801024020032009470d00200141b0036a20094101108a0120012802b003210420012802b80321030b200420034105746a220920012903a801370000200941186a200b290300370000200941106a200c290300370000200941086a20022903003700002001200341016a22093602b803200141a8016a200a10fe0320012802a8012103200120012802b0013602940320012003360290032004200920014190036a109802024020012802ac01450d00200310350b200141b0036a21030b200341046a28020041ffffff3f71450d00200328020010350b200141a8016a41186a22094200370300200141a8016a41106a220a4200370300200141a8016a41086a22034200370300200142003703a80141a9d1cb00ad4280808080c000841001220429000021052003200441086a290000370300200120053703a801200410354199c2c300ad4280808080800184100122042900002105200141c0026a41086a220b200441086a290000370300200120053703c00220041035200620012903c002370000200641086a200b29030037000020014190036a41086a200329030037030020014190036a41106a200a29030037030020014190036a41186a2009290300370300200120012903a80137039003200742808080808004841007200141c0036a24000f0b2006200341f0c1c7001042000b200620034180c2c7001042000b200420034190c2c7001042000b41c0c3c400412b41c086cc00103f000b103c000ba41d08047f017e017f017e047f017e047f017e230041e0016b2201240020014190016a41186a2202420037030020014190016a41106a2203420037030020014190016a41086a22044200370300200142003703900141d1c4c700ad4280808080e000842205100122062900002107200141b8016a41086a2208200641086a290000370300200120073703b8012006103520042008290300370300200120012903b801370390014188f2c700ad4280808080e001841001220629000021072008200641086a290000370300200120073703b80120061035200320012903b8012207370300200141f0006a41086a22062004290300370300200141f0006a41106a22092007370300200141f0006a41186a220a20082903003703002001200129039001370370200141f0006aad428080808080048422071007200242003703002003420037030020044200370300200142003703900120051001220b290000210c2008200b41086a2900003703002001200c3703b801200b103520042008290300370300200120012903b8013703900141ecedc700ad4280808080e001841001220b290000210c2008200b41086a2900003703002001200c3703b801200b1035200320012903b801220c370300200620042903003703002009200c370300200a2008290300370300200120012903900137037020071007200242003703002003420037030020044200370300200142003703900120051001220b290000210c2008200b41086a2900003703002001200c3703b801200b103520042008290300370300200120012903b801370390014184eec700ad4280808080b002841001220b290000210c2008200b41086a2900003703002001200c3703b801200b1035200320012903b801220c370300200620042903003703002009200c370300200a2008290300370300200120012903900137037020071007200242003703002003420037030020044200370300200142003703900120051001220b290000210c2008200b41086a2900003703002001200c3703b801200b103520042008290300370300200120012903b8013703900141b8eec700ad42808080808002841001220b290000210c2008200b41086a2900003703002001200c3703b801200b1035200320012903b801220c370300200620042903003703002009200c370300200a2008290300370300200120012903900137037020071007200242003703002003420037030020044200370300200142003703900120051001220b290000210c2008200b41086a2900003703002001200c3703b801200b103520042008290300370300200120012903b8013703900141e7c4c700ad4280808080e000841001220b290000210c2008200b41086a2900003703002001200c3703b801200b1035200320012903b801220c370300200620042903003703002009200c370300200a20082903003703002001200129039001370370200141086a200141f0006a412010c001200128020c210d02402001280208220e4101470d00200710070b200242003703002003420037030020044200370300200142003703900120051001220b29000021052008200b41086a290000370300200120053703b801200b103520042008290300370300200120012903b8013703900141edc4c700ad4280808080a001841001220b29000021052008200b41086a290000370300200120053703b801200b1035200320012903b801370000200341086a20082903003700002006200429030037030020092003290300370300200a20022903003703002001200129039001370370200141b8016a200141f0006a412010d501024002400240024020012d00b80122080d00200141a8016a200141d1016a290000370300200141a0016a200141c9016a29000037030020014198016a200141c1016a290000370300200120012900b901370390010c010b2007100720014190016a41186a2204200141d1016a29000037030020014190016a41106a2202200141c9016a29000037030020014190016a41086a2206200141c1016a290000370300200120012900b9013703900120084101460d010b200141286a4200370300200141206a4200370300200141186a4200370300200142003703100c010b200141106a41186a2004290300370300200141106a41106a2002290300370300200141106a41086a200629030037030020012001290390013703100b20014190016a41186a2206420037030020014190016a41106a2209420037030020014190016a41086a22044200370300200142003703900141d1c4c700ad4280808080e00084100122022900002105200141b8016a41086a2208200241086a290000370300200120053703b8012002103520042008290300370300200120012903b801370390014185c5c700ad4280808080e000841001220229000021052008200241086a290000370300200120053703b80120021035200320012903b801370000200341086a2008290300370000200141f0006a41086a2004290300370300200141f0006a41106a2009290300370300200141f0006a41186a20062903003703002001200129039001370370200141b8016a200141f0006a10ce020240024020012802b801220f0d004100210a20014100360238200142043703304104210f410021100c010b200710072001200f360230200120012902bc0122053702342005422088a7210a2005a721100b200d4100200e1b210620014190016a41186a2202420037030020014190016a41106a2209420037030020014190016a41086a22084200370300200142003703900141d1c4c700ad4280808080e000841001220b2900002105200141b8016a41086a2204200b41086a290000370300200120053703b801200b103520082004290300370300200120012903b8013703900141f7c4c700ad4280808080e001841001220b29000021052004200b41086a290000370300200120053703b801200b1035200320012903b801370000200341086a2004290300370000200141f0006a41086a2008290300370300200141f0006a41106a2009290300370300200141f0006a41186a20022903003703002001200129039001370370200141b8016a200141f0006a412010d501024002400240024020012d00b80122030d002002200141d1016a2900003703002009200141c9016a2900003703002008200141c1016a290000370300200120012900b901370390010c010b200710072002200141d1016a2900003703002009200141c9016a2900003703002008200141c1016a290000370300200120012900b9013703900120034101460d010b200141d8006a4200370300200141d0006a4200370300200141c8006a4200370300200142003703400c010b200141c0006a41186a20014190016a41186a290300370300200141c0006a41106a20014190016a41106a290300370300200141c0006a41086a20014190016a41086a29030037030020012001290390013703400b0240200641fb01490d00200641857e6a2208450d00200141b8016a200810b80320013502c00142208620012802b8012208ad84100720012802bc01450d00200810350b41012109024010232207422088a72202450d002007a721090b41002108200141003a00d801200921030240024002400240034020022008460d01200141b8016a20086a20032d00003a00002001200841016a22043a00d801200341016a21032004210820044120470d000b200141f0006a41186a200141b8016a41186a290300370300200141f0006a41106a200141b8016a41106a290300370300200141f0006a41086a200141b8016a41086a290300370300200120012903b80137037002402002450d00200910350b412010332208450d0220082001290310370000200841186a2204200141106a41186a290300370000200841106a2202200141106a41106a290300370000200841086a2209200141106a41086a290300370000412010332203450d0320032008290000370000200341186a2004290000370000200341106a2002290000370000200341086a200929000037000020081035200141e0006a2003ad4280808080800484102410c20120031035024020012802602204450d00200141e8006a28020021022001280264210b41002108200141003a00d801034020022008460d03200141b8016a20086a200420086a2d00003a00002001200841016a22033a00d8012003210820034120470d000b20014190016a41186a200141b8016a41186a2203290300220737030020014190016a41106a200141b8016a41106a2202290300220537030020014190016a41086a200141b8016a41086a2209290300220c370300200120012903b8012211370390012009200c3703002002200537030020032007370300200141b4016a41026a220d200141ed006a41026a2d00003a0000200120113703b801200120012f006d3b01b4010240200a2010470d00200141306a20104101108d012001280230210f2001280238210a0b200f200a41246c6a220841003a0000200820012903b80137000120032903002107200229030021052009290300210c200820012f01b4013b0021200841236a200d2d00003a0000200841096a200c370000200841116a2005370000200841196a20073700002001200a41016a360238200b450d00200410350b200020012903103700102000200636020020002001290370370030200041286a200141106a41186a290300370000200041206a200141106a41106a290300370000200041186a200141106a41086a290300370000200041386a200141f0006a41086a290300370000200041c0006a200141f0006a41106a290300370000200041c8006a200141f0006a41186a290300370000200041e8006a200141c0006a41186a290300370000200041e0006a200141c0006a41106a290300370000200041d8006a200141c0006a41086a290300370000200020012903403700502000410c6a200141306a41086a28020036020020002001290330370204200141e0016a24000f0b0240200841ff0171450d00200141003a00d8010b41b983c800412c200141b8016a41bccfc70041e883c8001046000b0240200841ff0171450d00200141003a00d8010b41b983c800412c200141b8016a41bccfc70041f883c8001046000b1045000b103c000b160020002001280208360204200020012802003602000bff1001067f230041106b22022400024002400240024002400240024002400240024020012d00000e06010402030500010b2002410036020820024201370300410110332203450d082002410136020420022003360200200341003a000020024101360208200141046a28020021042001410c6a2802002201200210770240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d08200541017422072006200720064b1b22074100480d080240024020050d00024020070d00410121060c020b2007103322060d010c0b0b2002280200210620052007460d0020062005200710372206450d0a0b20022007360204200220063602000b200620036a20042001109d081a2002200320016a3602080c050b2002410036020820024201370300410110332203450d072002410136020420022003360200200341023a000020024101360208412010332203450d0520032001290001370000200341186a200141196a290000370000200341106a200141116a290000370000200341086a200141096a2900003700000240024020022802042206417f6a4120490d00200228020021010c010b200641017422014121200141214b1b22054100480d0720022802002101024020062005460d0020012006200510372201450d090b20022005360204200220013602000b20012003290000370001200141196a200341186a290000370000200141116a200341106a290000370000200141096a200341086a29000037000020024121360208200310350c040b2002410036020820024201370300410110332203450d062002410136020420022003360200200341043a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0620022802002103024020062005460d0020032006200510372203450d080b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210770240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d06200541017422072006200720064b1b22074100480d060240024020050d00024020070d00410121060c020b200710332206450d090c010b2002280200210620052007460d0020062005200710372206450d080b20022007360204200220063602000b200620036a20042001109d081a2002200320016a3602080c030b2002410036020820024201370300410110332203450d052002410136020420022003360200200341053a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0520022802002103024020062005460d0020032006200510372203450d070b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210770240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d05200541017422072006200720064b1b22074100480d050240024020050d00024020070d00410121060c020b200710332206450d080c010b2002280200210620052007460d0020062005200710372206450d070b20022007360204200220063602000b200620036a20042001109d081a2002200320016a3602080c020b2002410036020820024201370300410110332203450d042002410136020420022003360200200341063a0000200241013602080240024020022802042206417f6a4104490d00200228020021030c010b200641017422034105200341054b1b22054100480d0420022802002103024020062005460d0020032006200510372203450d060b20022005360204200220033602000b200320012800013600012002410536020820012802082104200141106a2802002201200210770240024020022802042205200228020822036b2001490d00200228020021060c010b200320016a22062003490d04200541017422072006200720064b1b22074100480d040240024020050d00024020070d00410121060c020b200710332206450d070c010b2002280200210620052007460d0020062005200710372206450d060b20022007360204200220063602000b200620036a20042001109d081a2002200320016a3602080c010b2002410036020820024201370300410110332203450d032002410136020420022003360200200341073a00002002410136020820022802002103024020022802044101470d0020034101410210372203450d0420024102360204200220033602000b200341003a0001200241023602082002280200210320022802042106024020012802044101460d00024020064102470d0020034102410410372203450d0520024104360204200220033602000b200341003a0002200241033602080c010b024020064102470d0020034102410410372203450d0420024104360204200220033602000b200341013a000220024103360208200141086a28020021050240024020022802042206417d6a4104490d00200228020021030c010b200641017422034107200341074b1b22044100480d0320022802002103024020062004460d0020032006200410372203450d050b20022004360204200220033602000b20032005360003200241073602082001410c6a2802002106024002402002280204220341796a4104490d00200228020021010c010b20034101742201410b2001410b4b1b22054100480d0320022802002101024020032005460d0020012003200510372201450d050b20022005360204200220013602000b200120063600072002410b3602080b200020022201290200370200200041086a200141086a280200360200200241106a24000f0b1045000b103e000b103c000b8f0201027f20014180feff07714108762102024002402001410171450d00411f210341b0a2cc00210102400240200241ff01710e03000103000b41c100210341efa1cc0021010c020b41c100210341aea1cc0021010c010b411f2103418fa1cc002101024002400240024002400240024002400240200241ff01710e0a00060102030405090708000b4120210341efa0cc0021010c080b41272103418fa0cc0021010c070b4117210341f89fcc0021010c060b41d99fcc0021010c050b4126210341b39fcc0021010c040b412b210341889fcc0021010c030b4139210341b6a0cc0021010c020b413b210341cd9ecc0021010c010b41d100210341fc9dcc0021010b20002003360204200020013602000bc00201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210420034120710d012004ad41012001105221000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000b20024180016a240020000f0b200441800141c88bc0001059000b200441800141c88bc0001059000bb00301027f23004180026b22022400024002402001450d00200220003602000c010b200241b0b4cc003602000b20022001360204200241f8006a200210c4030240200228027c450d00200241086a200241f8006a41f000109d081a200241086a10b7030240200241086a410c6a2802002200450d00200228020c2101200041246c210003400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b0240200241106a2802002201450d00200141246c450d00200228020c10350b20024180026a240042010f0b200241f4016a41043602002002411c6a41023602002002420237020c200241f0b2c300360208200241043602ec01200241b8b3c3003602e801200241003602fc01200241b0b4cc003602f8012002200241e8016a3602182002200241f8016a3602f001200241086a4180b3c300104c000ba00a03077f037e057f230041d0026b2202240041002103200241003a00c8022001280204417f6a210402400240024002400240024003402004417f460d01200241a8026a20036a200128020022052d00003a0000200120043602042001200541016a3602002002200341016a22053a00c8022004417f6a21042005210320054120470d000b200241e8006a41086a200241a8026a41086a290300370300200241e8006a41106a200241a8026a41106a290300370300200241e8006a41186a200241a8026a41186a290300370300200220022903a8023703682002200110c40120022802000d022002280204210641002104200241003a00c80220012802042107417f2103034020072004460d02200241a8026a20046a200128020022082d00003a00002001200720036a3602042001200841016a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241a8016a41086a200241a8026a41086a2903002209370300200241a8016a41106a200241a8026a41106a290300220a370300200241a8016a41186a200241a8026a41186a290300220b37030020024188016a41086a200937030020024188016a41106a200a37030020024188016a41186a200b370300200220022903a80222093703a801200220093703880141002104200241003a00c802200720056b210c200720036a21030340200c2004460d04200241a8026a20046a200820046a220541016a2d00003a0000200120033602042001200541026a3602002002200441016a22053a00c8022003417f6a21032005210420054120470d000b200241e8016a41086a200241a8026a41086a2903002209370300200241e8016a41106a200241a8026a41106a290300220a370300200241e8016a41186a200241a8026a41186a290300220b370300200241c8016a41086a22042009370300200241c8016a41106a2203200a370300200241c8016a41186a2205200b370300200220022903a80222093703e801200220093703c801200241a8026a200110cf0220022802a8022201450d04200241c8006a41086a2208200241e8006a41086a290300370300200241c8006a41106a2207200241e8006a41106a290300370300200241c8006a41186a220c200241e8006a41186a290300370300200241286a41086a220d20024188016a41086a290300370300200241286a41106a220e20024188016a41106a290300370300200241286a41186a220f20024188016a41186a29030037030020022002290368370348200220022903880137032820022902ac022109200241086a41186a22102005290300370300200241086a41106a22052003290300370300200241086a41086a22032004290300370300200220022903c801370308200020093702082000200136020420002006360200200041106a2002290348370200200041186a2008290300370200200041206a2007290300370200200041286a200c290300370200200041306a2002290328370200200041386a200d290300370200200041c0006a200e290300370200200041c8006a200f290300370200200041e8006a2010290300370200200041e0006a2005290300370200200041d8006a2003290300370200200041d0006a20022903083702000c050b0240200341ff0171450d00200241003a00c8020b200041003602040c040b0240200441ff0171450d00200241003a00c8020b200041003602040c030b200041003602040c020b0240200441ff0171450d00200241003a00c8020b200041003602040c010b200041003602040b200241d0026a24000bc30202077f017e230041206b22022400200210c60302400240024002402002280208220341046a2204417f4c0d00200228020021050240024020040d0041012106410021040c010b200410332206450d020b2002410036021820022006360210200220043602142003200241106a10770240024020022802142207200228021822046b2003490d00200228021021060c010b200420036a22062004490d03200741017422082006200820064b1b22084100480d030240024020070d00024020080d00410121060c020b2008103322060d010c060b2002280210210620072008460d0020062007200810372206450d050b20022008360214200220063602100b200620046a20052003109d081a200420036aad4220862006ad84210902402002280204450d00200510350b200241206a240020090f0b1044000b1045000b103e000b103c000bbc34010f7f230041d0006b2201240020014100360238200142043703300240410810332202450d002002410c360204200241ba84c800360200200141306a41004101109001200128023020012802384103746a20022902003702002001200128023841016a36023820021035410810332202450d002002410c360204200241c684c800360200200141306a20012802384101109001200128023020012802384103746a20022902003702002001200128023841016a36023820021035410810332202450d0020024108360204200241d284c800360200200141306a20012802384101109001200128023020012802384103746a20022902003702002001200128023841016a36023820021035410810332202450d002002410a360204200241da84c800360200200141306a20012802384101109001200128023020012802384103746a20022902003702002001200128023841016a36023820021035410810332202450d002002410b360204200241e484c800360200200141306a20012802384101109001200128023020012802384103746a20022902003702002001200128023841016a36023820021035410810332202450d0020024118360204200241fcdfc600360200200141306a20012802384101109001200128023020012802384103746a200229020037020020012001280238220341016a22043602382002103520012802342105200128023021062001410036023820014204370330200141306a41002004410374220241037510870120012802382107024020042003490d00200620026a210820012802302007410c6c6a210220062104034020042802002203450d01200241086a200441046a280200360200200241046a2003360200200241003602002002410c6a2102200741016a2107200441086a22042008470d000b0b200120073602380240200541ffffffff0171450d00200610350b200128023421092001280230210a2001410036022820014201370320410410332202450d002001410436022420012002360220200241edcad18b063600002001410436022820012802202102024020012802244104470d0020024104410810372202450d0120014108360224200120023602200b2002410b3a000420014105360228411d200141206a107741ece4c600210b02400340200b2802042105200b2802082203200141206a10770240024020012802242206200128022822086b2003490d0020012802202104200621020c010b200820036a22022008490d02200641017422042002200420024b1b22024100480d020240024020060d00024020020d00410121040c020b2002103322040d010c050b2001280220210420062002460d0020042006200210372204450d040b20012002360224200120043602200b200420086a20052003109d081a2001200820036a220336022802400240200b28020c4102470d000240024020022003460d00200321020c010b200241016a22032002490d04200241017422082003200820034b1b22034100480d040240024020020d0041002102024020030d00410121040c020b200310332204450d070c010b20022003460d0020042002200310372204450d060b20012003360224200120043602200b200420026a41003a00002001200241016a22023602280c010b0240024020022003460d00200321020c010b200241016a22032002490d03200241017422082003200820034b1b22034100480d030240024020020d0041002102024020030d00410121040c020b200310332204450d060c010b20022003460d0020042002200310372204450d050b20012003360224200120043602200b200420026a41013a00002001200241016a36022802400240200b28020c4101470d00200b2802142106200b2802182202200141206a10770240024020012802242208200128022822046b2002490d00200128022021030c010b200420026a22032004490d05200841017422052003200520034b1b22054100480d050240024020080d00024020050d00410121030c020b200510332203450d080c010b2001280220210320082005460d0020032008200510372203450d070b20012005360224200120033602200b200320046a20062002109d081a2001200420026a360228200b28022021020240200b28021c4101470d002002200b280228200141206a107a0c020b2002200b41246a280200200141206a107a0c010b200141306a200b2802101103002001280234210620012802382202200141206a10770240024020012802242208200128022822046b2002490d00200128022021030c010b200420026a22032004490d04200841017422052003200520034b1b22054100480d040240024020080d00024020050d00410121030c020b200510332203450d070c010b2001280220210320082005460d0020032008200510372203450d060b20012005360224200120033602200b200320046a20062002109d081a2001200420026a360228200128024021030240200128023c4101460d0020032001280244200141206a107a0c010b200320012802482202200141206a107a02402002450d00200241d8006c21084100210403400240200320046a220241346a280200450d002002413c6a280200450d00200241386a28020010350b0240200241c4006a280200450d00200241cc006a28020041ffffffff0171450d00200241c8006a28020010350b2008200441d8006a2204470d000b0b20012802442202450d00200241d8006c450d00200310350b200128022821020b2001280224210402400240200b28022c4102470d000240024020042002460d00200128022021040c010b200241016a22042002490d04200241017422032004200320044b1b22034100480d040240024020020d0041002102024020030d00410121040c020b200310332204450d070c010b2001280220210420022003460d0020042002200310372204450d060b20012003360224200120043602200b200420026a41003a00002001200241016a22023602280c010b0240024020042002460d00200128022021040c010b200241016a22042002490d03200241017422032004200320044b1b22034100480d030240024020020d0041002102024020030d00410121040c020b200310332204450d060c010b2001280220210420022003460d0020042002200310372204450d050b20012003360224200120043602200b200420026a41013a00002001200241016a36022802400240200b28022c4101470d00200b2802302104200b2802382202200141206a10772002450d012002412c6c21052004411c6a21020340200241686a280200210c2002416c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d062006410174220d2008200d20084b1b220d4100480d060240024020060d000240200d0d00410121080c020b200d10332208450d090c010b200128022021082006200d460d0020082006200d10372208450d080b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a360228200241706a200141206a10792002200141206a10762002412c6a2102200541546a22050d000c020b0b200141186a200b28023011030020012802182104200128021c2202200141206a10772002450d002002412c6c21052004411c6a21020340200241686a280200210c2002416c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d052006410174220d2008200d20084b1b220d4100480d050240024020060d000240200d0d00410121080c020b200d10332208450d080c010b200128022021082006200d460d0020082006200d10372208450d070b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a360228200241706a200141206a10792002200141206a10762002412c6a2102200541546a22050d000b0b200128022821020b2001280224210402400240200b28023c4102470d000240024020042002460d00200128022021040c010b200241016a22042002490d04200241017422032004200320044b1b22034100480d040240024020020d0041002102024020030d00410121040c020b200310332204450d070c010b2001280220210420022003460d0020042002200310372204450d060b20012003360224200120043602200b200420026a41003a00002001200241016a3602280c010b0240024020042002460d00200128022021040c010b200241016a22042002490d03200241017422032004200320044b1b22034100480d030240024020020d0041002102024020030d00410121040c020b200310332204450d060c010b2001280220210420022003460d0020042002200310372204450d050b20012003360224200120043602200b200420026a41013a00002001200241016a3602280240200b28023c4101470d00200b2802402104200b2802482202200141206a10772002450d012002412c6c21052004411c6a21020340200241686a280200210c2002416c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d052006410174220d2008200d20084b1b220d4100480d050240024020060d000240200d0d00410121080c020b200d10332208450d080c010b200128022021082006200d460d0020082006200d10372208450d070b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a360228200241706a200141206a10762002200141206a10762002412c6a2102200541546a22050d000c020b0b200141106a200b2802401103002001280210210420012802142202200141206a10772002450d002002412c6c21052004411c6a21020340200241686a280200210c2002416c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d042006410174220d2008200d20084b1b220d4100480d040240024020060d000240200d0d00410121080c020b200d10332208450d070c010b200128022021082006200d460d0020082006200d10372208450d060b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a360228200241706a200141206a10762002200141206a10762002412c6a2102200541546a22050d000b0b02400240200b28024c4101470d00200b280250210e200b2802582202200141206a10772002450d01200241386c210f410021080340200e20086a220241046a280200210c200241086a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d052005410174220d2006200d20064b1b220d4100480d050240024020050d000240200d0d00410121060c020b200d10332206450d080c010b200128022021062005200d460d0020062005200d10372206450d070b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a360228200241106a280200210c200241146a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d052005410174220d2006200d20064b1b220d4100480d050240024020050d000240200d0d00410121060c020b200d10332206450d080c010b200128022021062005200d460d0020062005200d10372206450d070b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a36022802400240200241186a2802004101470d002002411c6a280200210c200241246a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d072005410174220d2006200d20064b1b220d4100480d070240024020050d000240200d0d00410121060c020b200d10332206450d0a0c010b200128022021062005200d460d0020062005200d10372206450d090b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a3602280c010b200141306a2002411c6a280200200241206a28020028020c1102002001280230210520012802382204200141206a1077024002402001280224220c200128022822036b2004490d00200128022021060c010b200320046a22062003490d06200c410174220d2006200d20064b1b220d4100480d0602400240200c0d000240200d0d00410121060c020b200d10332206450d090c010b20012802202106200c200d460d002006200c200d10372206450d080b2001200d360224200120063602200b200620036a20052004109d081a2001200320046a3602282001280234450d00200510350b200241286a200141206a1076200f200841386a2208470d000c020b0b200141086a200b2802501103002001280208210e200128020c2202200141206a10772002450d00200241386c210f410021080340200e20086a220241046a280200210c200241086a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d042005410174220d2006200d20064b1b220d4100480d040240024020050d000240200d0d00410121060c020b200d10332206450d070c010b200128022021062005200d460d0020062005200d10372206450d060b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a360228200241106a280200210c200241146a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d042005410174220d2006200d20064b1b220d4100480d040240024020050d000240200d0d00410121060c020b200d10332206450d070c010b200128022021062005200d460d0020062005200d10372206450d060b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a36022802400240200241186a2802004101470d002002411c6a280200210c200241246a2802002204200141206a10770240024020012802242205200128022822036b2004490d00200128022021060c010b200320046a22062003490d062005410174220d2006200d20064b1b220d4100480d060240024020050d000240200d0d00410121060c020b200d10332206450d090c010b200128022021062005200d460d0020062005200d10372206450d080b2001200d360224200120063602200b200620036a200c2004109d081a2001200320046a3602280c010b200141306a2002411c6a280200200241206a28020028020c1102002001280230210520012802382204200141206a1077024002402001280224220c200128022822036b2004490d00200128022021060c010b200320046a22062003490d05200c410174220d2006200d20064b1b220d4100480d0502400240200c0d000240200d0d00410121060c020b200d10332206450d080c010b20012802202106200c200d460d002006200c200d10372206450d070b2001200d360224200120063602200b200620036a20052004109d081a2001200320046a3602282001280234450d00200510350b200241286a200141206a1076200f200841386a2208470d000b0b02400240200b28025c4101470d00200b2802602104200b2802682202200141206a10772002450d012002411c6c21052004410c6a21020340200241786a280200210c2002417c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d052006410174220d2008200d20084b1b220d4100480d050240024020060d000240200d0d00410121080c020b200d10332208450d080c010b200128022021082006200d460d0020082006200d10372208450d070b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a3602282002200141206a10762002411c6a2102200541646a22050d000c020b0b2001200b2802601103002001280200210420012802042202200141206a10772002450d002002411c6c21052004410c6a21020340200241786a280200210c2002417c6a2802002204200141206a10770240024020012802242206200128022822036b2004490d00200128022021080c010b200320046a22082003490d042006410174220d2008200d20084b1b220d4100480d040240024020060d000240200d0d00410121080c020b200d10332208450d070c010b200128022021082006200d460d0020082006200d10372208450d060b2001200d360224200120083602200b200820036a200c2004109d081a2001200320046a3602282002200141206a10762002411c6a2102200541646a22050d000b0b200b41ec006a220b41a8fdc600470d000b02400240200128022420012802282202460d00200128022021040c010b200241016a22042002490d01200241017422032004200320044b1b22034100480d010240024020020d0041002102024020030d00410121040c020b200310332204450d040c010b2001280220210420022003460d0020042002200310372204450d030b20012003360224200120043602200b200420026a41043a00002001200241016a3602282007200141206a107702402007450d002007410c6c2105200a41086a210403402004417c6a280200210c20042802002202200141206a10770240024020012802242206200128022822036b2002490d00200128022021080c010b200320026a22082003490d032006410174220d2008200d20084b1b220d4100480d030240024020060d000240200d0d00410121080c020b200d10332208450d060c010b200128022021082006200d460d0020082006200d10372208450d050b2001200d360224200120083602200b200820036a200c2002109d081a2001200320026a3602282004410c6a2104200541746a22050d000b0b20002001290320370200200041086a200141206a41086a28020036020002402009450d002009410c6c450d00200a10350b200141d0006a24000f0b103e000b103c000bbc0602057f017e230041900b6b22022400024002402001450d00200220003602000c010b200241b0b4cc003602000b20022001360204200241b8076a200210c803024002400240024020022903a0084203510d00200241186a200241b8076a41c803109d081a200241e0036a200241186a41c803109d081a2002200241e0036a3602b807200241a8076a200241b8076a10b90320022802b0072101200241b8076a200241e0036a41c803109d081a200241880b6a20022802b007360200200220022903a8073703800b200241086a200241b8076a2001200241800b6a10bb034101410220022d000822034101461b220010332201450d01200241003602c007200220003602bc07200220013602b8070240024020034101470d00200141013a0000200241013602c007200241086a410172200241b8076a10c90320022802c00721010c010b200141003a0000200241013602c0070240024020022d000c22044104460d00200141013a000141022103200241023602c00702400240024002400240024020040e0400010203000b410021040c030b410121040c020b200241023a00e003410221040c020b200241033a00e0034104210020014102410410372201450d07200141033a0002200220013602b80720024284808080303702bc07200220022d000d22033a00e003024041010d004106210020014103410610372201450d08200241063602bc07200220013602b8070b200120033a000341042103200241043602c00720022d000e21040b200220043a00e0030b024020002003470d0041000d070240200020004101742205200041016a2206200520064b1b2205460d0020012000200510372201450d070b200220053602bc07200220013602b8070b200120036a20043a0000200341017221010c010b200141003a0001410221010b200220013602c0070b20023502b8072107200241900b6a240020072001ad422086840f0b200241246a4104360200200241f4036a4102360200200242023702e403200241f0b2c3003602e0032002410436021c200241d0b3c3003602182002410036020c200241b0b4cc003602082002200241186a3602f0032002200241086a360220200241e0036a4180b3c300104c000b1045000b103c000b103e000bfb1104047f017e037f047e230041c0086b22022400200241286a200110c401024002400240024002400240024020022802280d0020012802042203450d01200128020022042d0000210520012003417f6a3602042001200441016a360200200541ff00714104470d0220054118744118754100480d03420221060c040b200042033703680c050b200042033703680c040b200042033703680c030b20024198076a20011092060240024020022d0098074102460d00200241f0066a41206a20024198076a41206a280200360200200241f0066a41186a20024198076a41186a290300370300200241f0066a41106a20024198076a41106a290300370300200241f0066a41086a20024198076a41086a29030037030020022002290398073703f00620012802042205450d00200128020022042d0000210320012005417f6a3602042001200441016a360200200341024b0d00024002400240024002400240024020030e03000102000b41002103200241003a00f8042005417f6a2107417e21080240034020072003460d01200241b8046a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00f8042008417f6a210820092103200941c000470d000b20024180086a41386a200241b8046a41386a290300220637030020024180086a41306a200241b8046a41306a290300220a37030020024180086a41286a200241b8046a41286a290300220b37030020024180086a41206a200241b8046a41206a290300220c37030020024180086a41186a200241b8046a41186a290300220d37030020024188026a41086a200241b8046a41086a29030037030020024188026a41106a200241b8046a41106a29030037030020024188026a41186a200d37030020024188026a41206a200c37030020024188026a41286a200b37030020024188026a41306a200a37030020024188026a41386a2006370300200220022903b804370388022009417f7320056a2105200420096a41016a2104410021030c030b200341ff0171450d06200241003a00f804420221060c070b41002103200241003a00f8042005417f6a2107417e21080240034020072003460d01200241b8046a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00f8042008417f6a210820092103200941c000470d000b20024180086a41386a200241b8046a41386a290300220637030020024180086a41306a200241b8046a41306a290300220a37030020024180086a41286a200241b8046a41286a290300220b37030020024180086a41206a200241b8046a41206a290300220c37030020024180086a41186a200241b8046a41186a290300220d37030020024188026a41086a200241b8046a41086a29030037030020024188026a41106a200241b8046a41106a29030037030020024188026a41186a200d37030020024188026a41206a200c37030020024188026a41286a200b37030020024188026a41306a200a37030020024188026a41386a2006370300200220022903b804370388022009417f7320056a210541012103200420096a41016a21040c020b200341ff0171450d05200241003a00f804420221060c060b41002103200241003a00f9042005417f6a2107417e2108034020072003460d02200241b8046a20036a200420036a220941016a2d00003a00002001200520086a3602042001200941026a3602002002200341016a22093a00f9042008417f6a210820092103200941c100470d000b20024188026a200241b8046a41c100109d081a2009417f7320056a2105200420096a41016a2104410221030b200241bf076a20024188026a41c100109d081a2005450d032004310000210b20012005417f6a22083602042001200441016a360200200b50450d01420021060c020b200341ff0171450d02200241003a00f904420221060c030b2008450d012004310001210c20012005417e6a3602042001200441026a3602004202200b420f8386220a4204540d0142012106200c420886200b84420488200a420c88220b4201200b4201561b7e220b200a5a0d010b200241206a200110c40120022802200d0020022802242105200241086a200110f6012002290308a70d00200241086a41106a290300210d2002290310210c20024180086a41206a200241f0066a41206a28020036020020024180086a41186a200241f0066a41186a29030037030020024180086a41106a200241f0066a41106a29030037030020024180086a41086a200241f0066a41086a290300370300200220022903f00637038008200241b8046a200241bf076a41c100109d081a200220022f01ee063b0186020c010b420221060b200241e0016a41086a220420024180086a41086a290300370300200241e0016a41106a220820024180086a41106a290300370300200241e0016a41186a220920024180086a41186a290300370300200241e0016a41206a220720024180086a41206a28020036020020022002290380083703e0012002419f016a200241b8046a41c100109d081a200220022f0186023b019c0120064202510d01200241f8006a41206a2007280200360200200241f8006a41186a2009290300370300200241f8006a41106a2008290300370300200241f8006a41086a2004290300370300200220022903e001370378200241376a2002419f016a41c100109d081a200220022f019c013b01340b200241b8046a200110b90220022802b804210120024188026a200241b8046a41047241ac02109d081a02402001411b460d0020002002290378370300200020033a0024200041206a200241f8006a41206a280200360200200041186a200241f8006a41186a290300370300200041106a200241f8006a41106a290300370300200041086a200241f8006a41086a290300370300200041256a200241376a41c100109d081a200020022f01343b016620004190016a200d37030020004188016a200c37030020004198016a200136020020004180016a2005360200200041f8006a200b3703002000200a370370200020063703682000419c016a20024188026a41ac02109d081a0c020b200042033703680c010b200042033703680b200241c0086a24000bb30301027f230041106b220224000240024020002d00004101460d00200241003a000e20012002410e6a4101107820002d0001220341094b0d010240024002400240024002400240024002400240024020030e0a00010203040506070809000b200241003a000f2002410f6a21000c090b200241013a000f2002410f6a21000c080b200241023a000f2002410f6a21000c070b200241033a000f2002410f6a21000c060b200241043a000f2002410f6a21000c050b200241053a000f2002410f6a21000c040b200241063a000f2002410f6a21000c030b200241073a000f20012002410f6a410110782002200041026a2d00003a000f2002410f6a21000c020b200241083a000f2002410f6a21000c010b200241093a000f2002410f6a21000b20012000410110780c010b200241013a000e20012002410e6a4101107820002d0001220341024b0d0002400240024020030e03000102000b200241003a000e20012002410e6a410110780c020b200241013a000e20012002410e6a410110780c010b200241023a000e20012002410e6a410110782002200041026a2d00003a000e20012002410e6a410110780b200241106a24000be11305047f017e017f017e0b7f23004180026b2202240010bc03200241106a41186a22034200370300200241106a41106a22044200370300200241106a41086a220542003703002002420037031041d1c4c700ad4280808080e000842206100122072900002108200241d0016a41086a2209200741086a290000370300200220083703d0012007103520052009290300370300200220022903d00137031041e7c4c700ad4280808080e00084100122072900002108200241b0016a41086a220a200741086a290000370300200220083703b00120071035200420022903b001220837030020092005290300370300200241d0016a41106a220b2008370300200241d0016a41186a220c200a290300370300200220022903103703d001200241086a200241d0016a412010c00141002107200228020c410020022802081b10bd032003420037030020044200370300200542003703002002420037031020061001220d2900002108200241f0016a41086a220e200d41086a290000370300200220083703f001200d10352005200e290300370300200220022903f00137031041ecedc700ad4280808080e001841001220d2900002108200e200d41086a290000370300200220083703f001200d1035200420022903f001220837030020092005290300370300200b2008370300200c200e290300370300200220022903103703d0012002200241d0016a412010c0012002280204210d2002280200210f200241003602b801200242043703b001200241b0016a4100200d4100200f1b221010870120022802b801211102402010450d0020022802b0012011410c6c6a210d0340200241d0016a200710cb03200241106a20022802d001221220022802d801221310e00202402002280210220f450d002013ad4220862012ad8410070b200741016a210720022902144200200f1b2108200f4101200f1b210f024020022802d401450d00201210350b200d200f360200200d41046a2008370200200d410c6a210d20102007470d000b201120106a21110b20024180016a41086a2011360200200220022903b001220837038001200520113602002002200837031020024190016a200241106a10ba03200241b0016a41186a20024190016a41186a290300370300200241b0016a41106a20024190016a41106a290300370300200a20024190016a41086a29030037030020022002290390013703b001200342003703002004420037030020054200370300200242003703102006100122072900002108200e200741086a290000370300200220083703f001200710352005200e290300370300200220022903f00137031041f7c4c700ad4280808080e00184100122072900002108200e200741086a290000370300200220083703f00120071035200420022903f001370000200441086a200e29030037000020092005290300370300200b2004290300370300200c2003290300370300200220022903103703d001024002400240412010332207450d00200720022903b001370000200741186a200241b0016a41186a290300370000200741106a200241b0016a41106a290300370000200741086a200241b0016a41086a290300370000200241d0016aad42808080808004842007ad4280808080800484100220071035200241106a10be03200241003602b801200242013703b001412010332207450d0020072002290320370000200741186a200241386a290300370000200741106a200241106a41206a290300370000200741086a200241106a41186a29030037000041201033220d450d02200241203602b4012002200d3602b001200d2007290000370000200d41086a200741086a290000370000200d41106a200741106a290000370000200d41186a200741186a290000370000200241203602b80120071035200241106a200241b0016a10e201412010332207450d0020072002290340370000200741186a200241d8006a290300370000200741106a200241d0006a290300370000200741086a200241c8006a2903003700000240024020022802b401221020022802b80122136b4120490d00201341206a210d20022802b001210f201021120c010b201341206a220d2013490d022010410174220f200d200f200d4b1b22124100480d020240024020100d00024020120d004101210f0c020b20121033220f0d010c050b20022802b001210f20102012460d00200f201020121037220f450d040b200220123602b4012002200f3602b0010b200f20136a22132007290000370000201341186a200741186a290000370000201341106a200741106a290000370000201341086a200741086a2900003700002002200d3602b80120071035412010332207450d0020072002290360370000200741186a200241f8006a290300370000200741106a200241f0006a290300370000200741086a200241e8006a29030037000002402012200d6b411f4b0d00200d41206a2213200d490d02201241017422102013201020134b1b22134100480d020240024020120d00024020130d004101210f0c020b20131033220f450d050c010b20122013460d00200f201220131037220f450d040b200220133602b4012002200f3602b0010b200f200d6a220f2007290000370000200f41186a200741186a290000370000200f41106a200741106a290000370000200f41086a200741086a2900003700002002200d41206a3602b80120071035200228021421112002411c6a2802002209200241b0016a10770240024020090d0020022802b801210d20022802b00121050c010b200941246c210e20022802b401210f20022802b8012107201121130340200241d0016a201310c00320022802d001210402400240200f20076b20022802d8012210490d00200720106a210d20022802b0012105200f21120c010b200720106a220d2007490d04200f4101742212200d2012200d4b1b22124100480d0402400240200f0d00024020120d00410121050c020b201210332205450d070c010b20022802b0012105200f2012460d002005200f201210372205450d060b200220123602b401200220053602b0010b200520076a20042010109d081a2002200d3602b801024020022802d401450d00200410350b201341246a21132012210f200d2107200e415c6a220e0d000b0b200dad42208621082005ad210602402009450d00200941246c210d2011210703400240024020072d0000220f41044b0d00024002400240200f0e050400010204040b2007410c6a280200450d03200741086a28020010350c030b2007410c6a280200450d02200741086a28020010350c020b2007410c6a280200450d01200741086a28020010350c010b200741086a280200450d00200741046a28020010350b200741246a2107200d415c6a220d0d000b0b200820068421080240200241186a2802002207450d00200741246c450d00201110350b20024180026a240020080f0b1045000b103e000b103c000bfc0403027f017e057f230041d0006b2202240041d1c4c700ad4280808080e00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541e8eec700ad4280808080d00184100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000be82709017f017e017f017e017f017e0f7f017e0b7f230041b0056b22022400024002402001450d00200220003602200c010b200241b0b4cc003602200b20022001360224200241186a200241206a10c4010240024020022802180d00200228021c21012002200241206a36029005200241003a00f802200241003602a804200241003602a0042002200136025c200241003602582002200241f8026a360264200220024190056a360260200241d8006a200241a0046a10cd03200241b8036a41086a20022802a8042201360200200220022903a00422033703b80320022d00f8022100200241d8006a41086a22042001360200200220033703582000450d01200241d8006a10a0020b200241ac046a4104360200200241ec006a41023602002002420237025c200241f0b2c300360258200241043602a404200241e8b3c3003602a004200241003602bc03200241b0b4cc003602b8032002200241a0046a3602682002200241b8036a3602a804200241d8006a4180b3c300104c000b200241286a41086a20042802002201360200200220022903582203370328200241386a41086a2001360200200220033703382002410036025020024208370348200241d8006a200241386a10ce0302400240024020022802584101460d00200241d8006a41086a290300210342002105200241f8026a41186a4200370300200241f8026a41106a22064200370300200241f8026a41086a22014200370300200242003703f80241d1efcb00ad42808080809001841001220029000021072001200041086a290000370300200220073703f8022000103541ebc3c400ad4280808080308410012200290000210720024198036a41086a2204200041086a2900003703002002200737039803200010352006200229039803220737030020024190056a41086a200129030037030020024190056a41106a200737030020024190056a41186a2004290300370300200220022903f80237039005200241086a20024190056a10e1022002280208210020022903102107200241c8006a410010a901200228024822082002280250220441c8036c6a220141033602980120014202370368200141a0016a2003200742dc0b7c42dc0b20001b220720032007561b3703002002200441016a22093602504104210a02402002280238220b450d00200228023c210c200b210d0340200d41086a2100200d2f0106220e4103742101410021040240024003402001450d0141f495ca002000410810a008220f450d02200141786a2101200441016a2104200041086a2100200f417f4a0d000b2004417f6a210e0b200c450d02200c417f6a210c200d200e4102746a41e4016a280200210d0c010b0b2002200d2004410c6c6a220141e8006a2802003602a4042002200141e0006a2802003602a004200241d8006a200241a0046a10cf032002280258220a450d02200229025c21050b2005422088a7210e2005a721100c020b200241a8046a200241e4006a2902003703002002200229025c3703a0044184c8c4004128200241a0046a41ecc7c40041acc8c4001046000b4104210a4100210e410021100b200241003602b003200242043703a8030240024002400240024002400240200e450d00200241d8006a41186a220c4200370300200241d8006a41106a22114200370300200241d8006a41086a220f4200370300200242003703584193d1cb00ad4280808080a00184100122012900002103200f200141086a290000370300200220033703582001103541e0caca00ad4280808080e0008410012201290000210320024198036a41086a2200200141086a2900003703002002200337039803200110352011200229039803220337030020024190056a41086a200f29030037030020024190056a41106a200337030020024190056a41186a20002903003703002002200229035837039005200241d8006a20024190056a10b60220022802582201410420011b2112200229025c420020011b2203a721130240024002402003422088a72214450d002012201441c4006c22016a210d200141bc7f6a210420122101034020012d00002100200241d8006a200141016a41c300109d081a20004102460d01200241f8026a41186a200c290000370300200241f8026a41106a2011290000370300200241f8026a41086a200f290000370300200220022900583703f80220004101460d02200441bc7f6a2104200141c4006a2201200d470d000b0b2002410036028003200242013703f8022013450d01201341c4006c450d01201210350c010b20024190056a41086a2200200241f8026a41086a29030037030020024190056a41106a220f200241f8026a41106a29030037030020024190056a41186a220c200241f8026a41186a290300370300200220022903f80222033703b8032002200337039005412010332215450d042015200229039005370000201541186a200c290300370000201541106a200f290300370000201541086a2000290300370000200242818080801037029c03200220153602980302402004450d00200141c4006a2100201441c4006c20126a41bc7f6a211641012114034020002101034020012d00002100200241d8006a200141016a41c300109d081a20004102460d02200241f8026a41186a2204200241d8006a41186a290000370300200241f8026a41106a220f200241d8006a41106a290000370300200241f8026a41086a220c200241d8006a41086a290000370300200220022900583703f802024020004101460d00200141c4006a2201200d470d010c030b0b20024190056a41086a200c290300220337030020024190056a41106a200f290300220537030020024190056a41186a20042903002207370300200220022903f802221737039005200241b8036a41186a220f2007370300200241b8036a41106a220c2005370300200241b8036a41086a22182003370300200220173703b80302402014200228029c03470d0020024198036a20144101108a0120022802980321150b200141c4006a2100201520144105746a220420022903b803370000200441186a200f290300370000200441106a200c290300370000200441086a20182903003700002002201441016a22143602a00320162001470d000b0b02402013450d00201341c4006c450d00201210350b200241f8026a41086a20024198036a41086a28020036020020022002290398033703f8020b200a200e41f0006c6a2115200241a0046a41106a2119200241a0046a41086a211a41d1c4c700ad4280808080e0008421054104211b4104211c4104211d4100211e200a210f0340200f280204210d200f2802002104200241d8006a200f41086a41e800109d081a200f41f0006a210f200d450d02200241b8036a200241d8006a41e800109d081a2002200d3602a404200220043602a004201a200241b8036a41e800109d081a200241d8006a41186a22164200370300200241d8006a41106a22184200370300200241d8006a41086a220c4200370300200242003703582005100122012900002103200c200141086a290000370300200220033703582001103541e7c4c700ad4280808080e0008410012201290000210320024198036a41086a2200200141086a2900003703002002200337039803200110352011200229039803370000201141086a200029030037000020024190056a41086a221f200c29030037030020024190056a41106a2220201829030037030020024190056a41186a222120162903003703002002200229035837039005200220024190056a412010c001200228020021012002280204210020024190056a200241a0046a10d003024002402004417f6a220e2000410020011b22014f0d00200241d8006a200e10d103200241d8006a2019412010a0080d00200441002001417b6a2200200020014b1b490d002002280280032222410574211220024190056a20022802f802220e6b21144100210102400340024020122001470d00410021130c020b4101211320142001460d01200e20016a2100200141206a2101200020024190056a412010a0080d000b0b200241d8006a200410d103200241d8006a20024190056a412010a008210120130d002001450d0020024190056a200241a0046a10d003200241d8006a200241a0046a41f000109d081a0240201e20022802ac03470d00200241a8036a201e410110930120022802b003211e20022802a803221b211c201b211d0b201d201e41f0006c6a200241d8006a41f000109d081a2002201e41016a221e3602b0032016202129030037030020182020290300370300200c201f29030037030020022002290390053703580240202220022802fc02470d00200241f8026a20224101108a0120022802f802210e20022802800321220b200e20224105746a22012002290358370000200141186a2016290300370000200141106a2018290300370000200141086a200c2903003700002002202241016a36028003201e410a470d01410a211e0c040b024020022802ac042201450d00200141246c2100200d210103400240024020012d0000220441044b0d0002400240024020040e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b20022802a8042201450d00200141246c450d00200d10350b200f2015470d000b2015210f0c010b2010450d01201041f0006c450d01200a10350c010b02402015200f460d000340200f220141046a220010b103200141f0006a210f0240200141086a2802002201450d00200141246c450d00200028020010350b2015200f470d000b0b02402010450d00201041f0006c450d00200a10350b024020022802fc0241ffffff3f71450d0020022802f80210350b0240201e0d0020022802ac032201450d01200141f0006c450d01201b10350c010b201c450d0020022902ac03210302402009200228024c470d00200241c8006a200910a90120022802482108200228025021090b2008200941c8036c6a200241a0046a41e800109d0822014202370368200141a0016a20033703002001419c016a201c3602002001410436029801200120022903b803370370200141f8006a200241c0036a29030037030020014180016a200241c8036a29030037030020014188016a200241d0036a29030037030020014190016a200241d8036a290300370300200141a8016a200241d8006a41a002109d081a2002200941016a22093602500b0240200b450d00200228023c210d0340200b41086a2100200b2f0106220c4103742101410021040240024003402001450d0141fc95ca002000410810a008220f450d02200141786a2101200441016a2104200041086a2100200f417f4a0d000b2004417f6a210c0b200d450d02200d417f6a210d200b200c4102746a41e4016a280200210b0c010b0b200b41e0006a2004410c6c6a22012802084104490d002001280200280000210f200241f8026a41186a22044200370300200241f8026a41106a220d4200370300200241f8026a41086a22014200370300200242003703f80241bee4cb00ad4280808080f001841001220029000021032001200041086a290000370300200220033703f8022000103541b9e0c600ad4280808080b0018410012200290000210320024198036a41086a220c200041086a2900003703002002200337039803200010352006200229039803370000200641086a200c29030037000020024190056a41086a200129030037030020024190056a41106a200d29030037030020024190056a41186a2004290300370300200220022903f80237039005200241d8006a20024190056a10c50220022802582201410420011b2104410021000240200229025c420020011b2203422088a72201450d00200141027420046a417c6a2201450d002001280200200f4721000b0240200342ffffffff0383500d00200410350b2000450d0002402009200228024c470d00200241c8006a200910a90120022802482108200228025021090b2008200941c8036c6a200241a0046a41e800109d0822014202370368200120022903b803370370200141f8006a200241c0036a29030037030020014180016a200241c8036a29030037030020014188016a200241d0036a29030037030020014190016a200241d8036a2903003703002001419c016a200f3602002001410e36029801200141a8016a200241d8006a41a002109d081a2002200941016a22093602500b200228024c2114200241386a10a002200941c8036c4104722201417f4c0d01200110332200450d00200241003602a804200220013602a404200220003602a0042009200241a0046a10770240024020090d0020022802a804210020022802a004210e0c010b200941c8036c211320022802a404210420022802a80421012008210d03402002200d3602b803200241d8006a200241b8036a10b9032002280258211202400240200420016b2002280260220c490d002001200c6a210020022802a004210e2004210f0c010b2001200c6a22002001490d052004410174220f2000200f20004b1b220f4100480d050240024020040d000240200f0d004101210e0c020b200f1033220e0d010c080b20022802a004210e2004200f460d00200e2004200f1037220e450d070b2002200f3602a4042002200e3602a0040b200e20016a2012200c109d081a200220003602a8040240200228025c450d00201210350b200d41c8036a210d200f210420002101201341b87c6a22130d000b0b2000ad4220862103200ead210502402009450d00200941c8036c210020084198016a21010340200110bb02200141c8036a2101200041b87c6a22000d000b0b2003200584210302402014450d00201441c8036c450d00200810350b200241b0056a240020030f0b1045000b1044000b103e000b103c000bd40505067f017e047f017e027f23004180026b22022400024002400240024002402000280200220320002802044f0d00200028020c2104200141086a2105200241a0016a4102722106024003402000200341016a360200200241186a2000280208280200220710ee0220022d00184101460d0120022900192108200241086a200710c40120022802080d012007280204200228020c2203490d012003417f4c0d0302400240024020030d0041002107410121090c010b200310392209450d0820072802042003490d01200920072802002003109d081a2007280204220a2003490d062007200a20036b3602042007200728020020036a360200200321070b20022008370310024002402001280200220b450d002001280204210c0c010b2006410041da00109f081a200241186a4100418401109f081a41e4011033220b450d074100210c200b4100360200200b41046a200241a0016a41dc00109d081a200b41e0006a200241186a418401109d081a200141003602042001200b3602000b2003ad4220862007ad84210d024002400340200b41086a2107200b2f0106220e41037421034100210a024003402003450d01200241106a2007410810a008220f450d03200341786a2103200a41016a210a200741086a2107200f417f4a0d000b200a417f6a210e0b0240200c450d00200c417f6a210c200b200e4102746a41e4016a280200210b0c010b0b2002200837022c200220053602282002200e360224200220013602202002200b36021c200241003602182002200d3702a401200220093602a001200241186a200241a0016a1082030c010b200b200a410c6c6a220341e4006a2207280200210a2007200d370200200341e0006a22072802002103200720093602002003450d00200a450d00200310350b200028020022032000280204490d010c030b0b200910350b200441013a00000b20024180026a24000f0b1044000b2003200a41a4f0cb001059000b103c000b1045000b8c0201067f02400240024020012802002202450d00200128020421030340200241086a210420022f010622054103742101410021060240024003402001450d0141f8eecb002004410810a0082207450d02200141786a2101200641016a2106200441086a21042007417f4a0d000b2006417f6a21050b2003450d022003417f6a2103200220054102746a41e4016a28020021020c010b0b200241e0006a2006410c6c6a22012802084108490d01200041086a2001280200290000370300200041003602000f0b200041003602042000410c6a4128360200200041086a4180efcb003602000c010b200041003602042000410c6a4129360200200041086a41a8efcb003602000b200041013602000bf80303037f017e057f230041e0026b22022400200241086a200110c40102400240024002402002280208450d00200041003602000c010b200228020c2203200128020441f0006e2204200420034b1bad42f0007e2205422088a70d012005a72206417f4c0d010240024020060d00410421070c010b200610332207450d030b4100210420024100360218200220073602102002200641f0006e360214024002402003450d00200241f0016a41086a21080340200241f0016a200110c40320022802f401210620022802f001210920024188016a200841e800109d081a2006450d02200241206a20024188016a41e800109d081a024020042002280214470d00200241106a2004410110930120022802102107200228021821040b2007200441f0006c6a220a2006360204200a2009360200200a41086a200241206a41e800109d081a2002200441016a22043602182003417f6a22030d000b0b20002002290310370200200041086a200241106a41086a2802003602000c010b2000410036020002402004450d00200441f0006c2106200741046a21040340200410b1030240200441046a280200220a450d00200a41246c450d00200428020010350b200441f0006a2104200641907f6a22060d000b0b20022802142204450d00200441f0006c450d00200710350b200241e0026a24000f0b1044000b1045000b9b0902097f037e230041206b220224002002410036020820024201370300024002400240412010332203450d0020032001290010370000200341186a2204200141286a290000370000200341106a2205200141206a290000370000200341086a2206200141186a290000370000412010332207450d02200241203602042002200736020020072003290000370000200741086a2006290000370000200741106a2005290000370000200741186a200429000037000020024120360208200310352001200210e201412010332203450d0020032001290030370000200341186a200141c8006a290000370000200341106a200141c0006a290000370000200341086a200141386a2900003700000240024020022802042208200228020822066b4120490d00200641206a210720022802002104200821050c010b200641206a22072006490d02200841017422042007200420074b1b22054100480d020240024020080d00024020050d00410121040c020b2005103322040d010c050b2002280200210420082005460d0020042008200510372204450d040b20022005360204200220043602000b200420066a22062003290000370000200641186a200341186a290000370000200641106a200341106a290000370000200641086a200341086a2900003700002002200736020820031035412010332203450d0020032001290050370000200341186a200141e8006a290000370000200341106a200141e0006a290000370000200341086a200141d8006a2900003700000240200520076b411f4b0d00200741206a22062007490d02200541017422082006200820064b1b22064100480d020240024020050d00024020060d00410121040c020b200610332204450d050c010b20052006460d0020042005200610372204450d040b20022006360204200220043602000b200420076a22042003290000370000200441186a200341186a290000370000200441106a200341106a290000370000200441086a200341086a2900003700002002200741206a36020820031035200128020421052001410c6a2802002201200210770240024020010d002002280208210320022802042104200228020021080c010b200141246c210920022802042107200228020821010340200241106a200510c0032002280210210a02400240200720016b20022802182206490d00200120066a210320022802002108200721040c010b200120066a22032001490d04200741017422042003200420034b1b22044100480d040240024020070d00024020040d00410121080c020b200410332208450d070c010b2002280200210820072004460d0020082007200410372208450d060b20022004360204200220083602000b200820016a200a2006109d081a2002200336020802402002280214450d00200a10350b200541246a210520042107200321012009415c6a22090d000b0b2003ad4220862008ad8410092201290000210b200141086a290000210c200141106a290000210d200041186a200141186a290000370000200041106a200d370000200041086a200c3700002000200b3700002001103502402004450d00200810350b200241206a24000f0b1045000b103e000b103c000bb90603027f017e057f23004180016b2202240041d1c4c700ad4280808080e00084100122032900002104200241306a41086a200341086a290000370300200220043703302003103541dec4c700ad4280808080900184100122032900002104200241d0006a41086a200341086a2900003703002002200437035020031035200220013602742002200241f4006aad4280808080c000841003220329000037037820031035200241146a200241f8006a3602002002200241f8006a41086a36020c2002200241f4006a3602102002200241f8006a360208200241c0006a200241086a107b02400240024002402002280248220541206a2206417f4c0d00200228024021070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290330370000200341086a200241306a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290350370010200341186a200241d0006a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a02402002280244450d00200710350b200241086a2003200610d501200241d0006a41086a2201200241116a290000370300200241d0006a41106a2206200241196a290000370300200241d0006a41186a2205200241216a290000370300200220022900093703500240024020022d00084101460d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b20002002290350370000200041186a2005290300370000200041106a2006290300370000200041086a20012903003700000b02402008450d00200310350b20024180016a24000f0b1044000b1045000b103e000b103c000bac2508077f017e0d7f017e017f027e017f037e230041f0026b22022400024002402001450d00200220003602180c010b200241b0b4cc003602180b2002200136021c200241f8006a200241186a10b6030240024002400240024002400240200228027c2203450d00200241f0016a2802002104200241ec016a2802002105200241e8016a2802002106200241f8006a410c6a28020021072002280280012108200241106a200241186a10c4010240024020022802100d00200228021421012002200241186a360250200241003a0020200241003602980220024100360290022002200136027c200241003602782002200241206a360284012002200241d0006a36028001200241f8006a20024190026a10cd03200241e0006a41086a20022802980222013602002002200229039002220937036020022d00202100200241f8006a41086a220a2001360200200220093703782000450d01200241f8006a10a0020b20024190026a410c6a41043602002002418c016a41023602002002420237027c200241f0b2c300360278200241043602940220024184b4c3003602900220024100360264200241b0b4cc00360260200220024190026a360288012002200241e0006a36029802200241f8006a4180b3c300104c000b200241306a41086a200a2802002201360200200220022903782209370330200241c0006a41086a200136020020022009370340200241013b015c2002410036025820024100360250024002402004450d002006200441c8036c6a210b200241d0006a41086a210c200241e0006a410472210d20024190026a410272210e200241f8006a41106a210f200621100340201041e8006a2903004202520d0102400240024002400240201028029801221141034722120d00024002400240024020022802402213450d0020102903a0012109200228024421140340201341086a210020132f0106221541037421014100210a0240024003402001450d01418799cc002000410810a0082216450d02200141786a2101200a41016a210a200041086a21002016417f4a0d000b200a417f6a21150b2014450d022014417f6a2114201320154102746a41e4016a28020021130c010b0b0240201341e0006a200a410c6c6a220128020841074b0d002017428080808070834229842109418f99cc0021140c020b200942b8178020012802002900002217510d034131211841e8c1c30021140c020b201742808080807083421c84210941b899cc0021140b2009a721180b0240024020022d005d450d0041c4c6ca002101413121000c010b200241d0006a10a0022002410036025820024100360250200242e2c289abb68edbb7f40037036020024190026a410272410041da00109f081a200241f8006a4100418401109f081a41e40110332216450d1020164100360200201641046a20024190026a41dc00109d081a201641e0006a200241f8006a418401109d081a200241003602542002201636025020162f010622104103742113417f210041002101024002400340024020132001470d00201021000c020b200241e0006a201620016a41086a410810a008220a450d02200141086a2101200041016a2100200a41004e0d000b0b200242e2c289abb68edbb7f40037028c012002200c3602880120022000360284012002201636027c200241003602782002200241d0006a3602800120024190026a2014201810d303200241f8006a20024190026a10820320024180023b015c200241206a41086a200241d0006a41086a290300370300200220022903503703200c0a0b41f5c6ca002101412d21000b2002200036027c200220013602784181c6ca004122200241f8006a41a4c6ca0041b4c6ca001046000b20120d0020102903a0012109200241f8006a200241c0006a10ce03024002400240024020022802784101460d002002290380012119200241f8006a41186a220a4200370300200f4200370300200241f8006a41086a220142003703002002420037037841d1efcb00ad428080808090018410012200290000211a2001200041086a2900003703002002201a3703782000103541ebc3c400ad4280808080308410012200290000211a200241e0006a41086a2216200041086a2900003703002002201a37036020001035200f2002290360370000200f41086a201629030037000020024190026a41086a200129030037030020024190026a41106a200f29030037030020024190026a41186a200a2903003703002002200229037837039002200220024190026a10e1022009201942b0ea017c560d012009200229030842dc0b7c42dc0b20022802001b22195a0d032019422088211a420021090c020b2002290380012219422088211a200228027c221bad4220864201842109201c4280808080708320023502880184221c211d0c010b201d428080808070832018ad84211d41e9eac400ad21194225211a420121094100211b0b2002201d3703702002201a422086201942ffffffff0f8384221e3703682002201bad422086200942ffffffff0f838437036002400240024020022d005d450d0041c4c6ca002101413121000c010b0240024002402009a722154101470d00200241d0006a10a0022002410036025820024100360250200242f4d2b59bc7ae98b8303703200c010b20022802502113200242f4d2b59bc7ae98b8303703202013450d00200228025421140c010b200e410041da00109f081a200241f8006a4100418401109f081a41e40110332213450d124100211420134100360200201341046a20024190026a41dc00109d081a201341e0006a200241f8006a418401109d081a20024100360254200220133602500b2019a72112201aa7211102400340201341086a210020132f0106221841037421014100210a024003402001450d01200241206a2000410810a0082216450d03200141786a2101200a41016a210a200041086a21002016417f4a0d000b200a417f6a21180b02402014450d002014417f6a2114201320184102746a41e4016a28020021130c010b0b200242f4d2b59bc7ae98b83037028c012002200c3602880120022018360284012002201336027c200241003602782002200241d0006a360280014101103321010240201541014622160d002001450d13200141003a000020014101410910372201450d132001201e3700014109210a410921000c030b2001450d12200141013a000020024190026a200d10b40320022802900221140240024020022802980222130d004101210a201341016a21000c010b201341016a22002013490d1020004102200041024b1b220a4100480d1020014101200a10372201450d130b200141016a20142013109d081a200228029402450d02201410350c020b41f5c6ca002101412d21000b2002200036027c200220013602784181c6ca004122200241f8006a41a4c6ca0041b4c6ca001046000b20022000360298022002200a360294022002200136029002200241f8006a20024190026a108203200220093c005d200241003a005c20160d022015450d00201b450d002011450d00201210350b20102802980121110b20114104470d03201041a4016a280200410b490d032002410d36026820024192c8ca003602642002410036026020022d005d450d0141c4c6ca002101413121000c020b200241206a41086a200241d0006a41086a29030037030020022002290350370320201b450d052011450d05201210350c050b200241d0006a10a0022002410036025820024100360250200242f5dc8de3d6ec9c983037032020024190026a410272410041da00109f081a200241f8006a4100418401109f081a41e40110332216450d0b4100210120164100360200201641046a20024190026a41dc00109d081a201641e0006a200241f8006a418401109d081a200241003602542002201636025020162f010622144103742113417f2100024002400340024020132001470d00201421000c020b200241206a201620016a41086a410810a008220a450d02200141086a2101200041016a2100200a417f4a0d000b0b200242f5dc8de3d6ec9c983037028c012002200c3602880120022000360284012002201636027c200241003602782002200241d0006a36028001410110332201450d0c200141003a000020024190026a200241e0006a10b40320022802900221160240024020022802980222000d0041012113200041016a210a0c010b200041016a220a2000490d0a200a4102200a41024b1b22134100480d0a20014101201310372201450d0d0b200141016a20162000109d081a0240200228029402450d00201610350b2002200a3602880220022013360284022002200136028002200241f8006a20024180026a10820320024180023b015c200241206a41086a200241d0006a41086a290300370300200220022903503703200c050b41f5c6ca002101412d21000b2002200036027c200220013602784181c6ca004122200241f8006a41a4c6ca0041b4c6ca001046000b201041c8036a2210200b470d000b0b200241206a41086a200241d0006a41086a290300370300200220022903503703200b200241c0006a10a00202402007450d00200741246c21002003210103400240024020012d0000220a41044b0d00024002400240200a0e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b02402008450d00200841246c450d00200310350b02402004450d00200441c8036c210020064198016a21010340200110bb02200141c8036a2101200041b87c6a22000d000b0b02402005450d00200541c8036c450d00200610350b200241003602682002420137036020022d002c2100410110332201450d062002410136026420022001360260200120003a00002002410136026820022d002d210020014101410210372201450d062002410236026420022001360260200120003a00012002410236026820022802282200200241e0006a1077024020022802202201450d00024020022802242216450d002016210a20012113034020132802e4012113200a417f6a220a0d000b2001210a0340200a200a2f01064102746a41e4016a280200210a2016417f6a22160d000b200241f8006a2116201321010c030b200241f8006a21162001210a0c020b410021012002410036027c200241f8006a21160c020b200241ec006a4104360200200241a4026a41023602002002420237029402200241f0b2c300360290022002410436026420024184b4c30036026020024100360254200241b0b4cc003602502002200241e0006a3602a0022002200241d0006a36026820024190026a4180b3c300104c000b2002200a36027c20024184016a200a2f01063602002002410036028001200241003602780b20024190026a41086a201641086a29020022093703002002201629020022173703900220024190016a200937030020024200370380012002200136027c20024100360278200220173703880120022000360298012000450d01034020022000417f6a36029801200241f8006a410020011b2213280200210a20132802082114024002400240201328020c2216201328020422002f01064f0d00200021010c010b0240034020002802002201450d01200a41016a210a20002f0104211620012100201620012f0106490d020c000b0b2014ad2109410021010c010b2016ad4220862014ad8421090b2009422088a7221441016a21162009a7211802400240200a0d00200121000c010b200120164102746a41e4016a280200210041002116200a417f6a220a450d00034020002802e4012100200a417f6a220a0d000b0b2013201636020c2013201836020820132000360204201341003602000240024020022802642216200228026822006b4108490d002002280260210a0c010b200041086a220a2000490d0220164101742213200a2013200a4b1b22134100480d020240024020160d00024020130d004101210a0c020b20131033220a0d010c070b2002280260210a20162013460d00200a201620131037220a450d060b200220133602642002200a3602600b200a20006a200120144103746a41086a2900003700002002200041086a360268200141e0006a2014410c6c6a2201280200211320012802082201200241e0006a10770240024020022802642216200228026822006b2001490d002002280260210a0c010b200020016a220a2000490d0220164101742214200a2014200a4b1b22144100480d020240024020160d00024020140d004101210a0c020b20141033220a450d070c010b2002280260210a20162014460d00200a201620141037220a450d060b200220143602642002200a3602600b200a20006a20132001109d081a2002200020016a22013602682002280298012200450d03200228027c21010c000b0b103e000b200228026821012002280260210a0b200241206a10a002200241f0026a24002001ad422086200aad840f0b103c000bac0401057f024002400240200241046a2203417f4c0d0002400240024002400240024002400240024002402003450d00200310332204450d0b200241c000490d04200241808001490d052002418080808004490d0620030d010b41012103410110332204450d07200441033a0000410521050c010b200441033a000002402003417f6a41034d0d00200321050c020b200341017422064105200641054b1b22054100480d0720032005460d010b20042003200510372204450d050b20042002360001410521060c030b024020030d0041012103410110332204450d040b200420024102743a000041012106200321050c020b02400240200341014d0d00200321050c010b200341017422064102200641024b1b2105024020030d002005103322040d010c040b20032005460d0020042003200510372204450d030b41022106200420024102744101723b00000c010b02400240200341034d0d00200321050c010b200341017422064104200641044b1b22054100480d03024020030d002005103322040d010c030b20032005460d0020042003200510372204450d020b20042002410274410272360000410421060b0240200520066b2002490d00200521030c050b200620026a22032006490d01200541017422072003200720034b1b22034100480d0120052003460d04200420052003103722040d040b103c000b103e000b1044000b1045000b200420066a20012002109d081a2000200620026a36020820002003360204200020043602000bbf0101067f230041206b22022400200241b0b4cc00410010d50302400240412010332203450d0020032002290300370000200341186a2204200241186a290300370000200341106a2205200241106a290300370000200341086a2206200241086a290300370000412010332207450d0120072003290000370000200741186a2004290000370000200741106a2005290000370000200741086a200629000037000020031035200241206a24002007ad42808080808004840f0b1045000b103c000be51b06037f017e077f017e277f027e230041a00d6b220324002003200236020c20032001360208200341206a41186a22044200370300200341206a41106a22024200370300200341206a41086a220142003703002003420037032041d1c4c700ad4280808080e000841001220529000021062001200541086a290000370300200320063703202005103541e7c4c700ad4280808080e00084100122072900002106200341106a41086a2205200741086a2900003703002003200637031020071035200220032903102206370300200341800d6a41086a22082001290300370300200341800d6a41106a22092006370300200341800d6a41186a220a2005290300370300200320032903203703800d2003200341800d6a412010c0012003280204210b2003280200210c200442003703002002420037030020014200370300200342003703204182e9ca00ad42808080808003841001220729000021062001200741086a2900003703002003200637032020071035419ae9ca00ad4280808080e001841001220729000021062005200741086a29000037030020032006370310200710352002200329031022063703002008200129030037030020092006370300200a2005290300370300200320032903203703800d200341206a200341800d6a412010b50220032802202201410120011b210d0240024002402003290224420020011b220e422088a722020d0020004200370000200041186a4200370000200041106a4200370000200041086a42003700000c010b200341206a410041e00c109f081a200b417f6a41d100704130200c1b2101200d41206a210f200d20024105746a21104100211141002112410021134100211441002115410021164100211741002118410021194100211a4100211b4100211c4100211d4100211e4100211f410021204100212141002122410021234100212441002125410021264100212741002128410021294100212a4100212b4100212c4100212d4100212e4100212f4100210b200d21024100213041d1002131024003402030210720022105024002402001450d00200141016a2101200521020340024020102002470d00200d21020b2002220541206a21022001417f6a22010d000b20050d010c030b024020052010460d00200541206a21020c010b200f2102200d21050b0240024002400240200328020c220141056a2204417f4c0d00200328020821320240024020040d00410021044101210c0c010b20041033220c450d020b200341003602182003200c36021020032004360214024020040d0041011033220c450d08200341013602142003200c3602100b200c20073a0000200341013602182001200341106a10770240024020032802142233200328021822306b2001490d00200328021021042033210c0c010b203020016a22042030490d032033410174220c2004200c20044b1b220c4100480d030240024020330d000240200c0d00410121040c020b200c103322040d010c0a0b200328021021042033200c460d0020042033200c10372204450d090b2003200c360214200320043602100b200420306a20322001109d081a2003203020016a2230360218412010332201450d0120012005290000370000200141186a2232200541186a290000370000200141106a2234200541106a290000370000200141086a2235200541086a29000037000002400240200c20306b411f4d0d00200c21330c010b203041206a22052030490d03200c41017422332005203320054b1b22334100480d0302400240200c0d00024020330d00410121040c020b203310332204450d0a0c010b200c2033460d002004200c203310372204450d090b20032033360214200320043602100b200420306a22052001290000370000200541186a2032290000370000200541106a2034290000370000200541086a20352900003700002003203041206a2205360218200110352005ad4220862004ad84100922012900002106200141086a2900002136200141106a2900002137200a200141186a2900003703002009203737030020082036370300200320063703800d2001103502402033450d00200410350b2031417f6a2131200741016a2130200341206a20074103704105746a220120032903800d370000200141186a200a290300370000200141106a2009290300370000200141086a20082903003700004100210503402007200741036e2204417d6c6a4102470d04200341206a20056a220141df006a2d0000220b2001411f6a2d0000220c71200b200c722001413f6a2d000071722128200141de006a2d0000220b2001411e6a2d0000220c71200b200c722001413e6a2d000071722127200141dd006a2d0000220b2001411d6a2d0000220c71200b200c722001413d6a2d000071722126200141dc006a2d0000220b2001411c6a2d0000220c71200b200c722001413c6a2d000071722125200141db006a2d0000220b2001411b6a2d0000220c71200b200c722001413b6a2d000071722124200141da006a2d0000220b2001411a6a2d0000220c71200b200c722001413a6a2d000071722123200141d9006a2d0000220b200141196a2d0000220c71200b200c72200141396a2d000071722122200141d8006a2d0000220b200141186a2d0000220c71200b200c72200141386a2d000071722121200141d7006a2d0000220b200141176a2d0000220c71200b200c72200141376a2d000071722120200141d6006a2d0000220b200141166a2d0000220c71200b200c72200141366a2d00007172211f200141d5006a2d0000220b200141156a2d0000220c71200b200c72200141356a2d00007172211e200141d4006a2d0000220b200141146a2d0000220c71200b200c72200141346a2d00007172211d200141d3006a2d0000220b200141136a2d0000220c71200b200c72200141336a2d00007172211c200141d2006a2d0000220b200141126a2d0000220c71200b200c72200141326a2d00007172211b200141d1006a2d0000220b200141116a2d0000220c71200b200c72200141316a2d00007172211a200141d0006a2d0000220b200141106a2d0000220c71200b200c72200141306a2d000071722119200141cf006a2d0000220b2001410f6a2d0000220c71200b200c722001412f6a2d000071722118200141ce006a2d0000220b2001410e6a2d0000220c71200b200c722001412e6a2d000071722117200141cd006a2d0000220b2001410d6a2d0000220c71200b200c722001412d6a2d000071722116200141cc006a2d0000220b2001410c6a2d0000220c71200b200c722001412c6a2d000071722115200141cb006a2d0000220b2001410b6a2d0000220c71200b200c722001412b6a2d000071722114200141ca006a2d0000220b2001410a6a2d0000220c71200b200c722001412a6a2d000071722113200141c9006a2d0000220b200141096a2d0000220c71200b200c72200141296a2d000071722112200141c8006a2d0000220b200141086a2d0000220c71200b200c72200141286a2d000071722111200141c7006a2d0000220b200141076a2d0000220c71200b200c72200141276a2d000071722129200141c6006a2d0000220b200141066a2d0000220c71200b200c72200141266a2d00007172212a200141c5006a2d0000220b200141056a2d0000220c71200b200c72200141256a2d00007172212b200141c4006a2d0000220b200141046a2d0000220c71200b200c72200141246a2d00007172212c200141c3006a2d0000220b200141036a2d0000220c71200b200c72200141236a2d00007172212d200141c2006a2d0000220b200141026a2d0000220c71200b200c72200141226a2d00007172212e200141c1006a2d0000220b200141016a2d0000220c71200b200c72200141216a2d00007172212f200141c0006a2d0000220b20012d0000220c71200b200c72200141206a2d00007172210b200541800c460d04200341206a20052004410574200741096e41e0006c6b6a6a220141ff006a20283a0000200141fe006a20273a0000200141fd006a20263a0000200141fc006a20253a0000200141fb006a20243a0000200141fa006a20233a0000200141f9006a20223a0000200141f8006a20213a0000200141f7006a20203a0000200141f6006a201f3a0000200141f5006a201e3a0000200141f4006a201d3a0000200141f3006a201c3a0000200141f2006a201b3a0000200141f1006a201a3a0000200141f0006a20193a0000200141ef006a20183a0000200141ee006a20173a0000200141ed006a20163a0000200141ec006a20153a0000200141eb006a20143a0000200141ea006a20133a0000200141e9006a20123a0000200141e8006a20113a0000200141e7006a20293a0000200141e6006a202a3a0000200141e5006a202b3a0000200141e4006a202c3a0000200141e3006a202d3a0000200141e2006a202e3a0000200141e1006a202f3a0000200141e0006a200b3a000020042107200541e0006a220541e00c470d000c040b0b1044000b1045000b103e000b4100210120310d000b0b200020283a001f200020273a001e200020263a001d200020253a001c200020243a001b200020233a001a200020223a0019200020213a0018200020203a00172000201f3a00162000201e3a00152000201d3a00142000201c3a00132000201b3a00122000201a3a0011200020193a0010200020183a000f200020173a000e200020163a000d200020153a000c200020143a000b200020133a000a200020123a0009200020113a0008200020293a00072000202a3a00062000202b3a00052000202c3a00042000202d3a00032000202e3a00022000202f3a00012000200b3a00000b0240200e42ffffff3f83500d00200d10350b200341a00d6a24000f0b103c000b925303097f087e047f230041a0136b220224000240024020010d0020022001360254200241b0b4cc003602500c010b2002200136025420022001417f6a360254200220003602502002200041016a36025020002d0000220341034f0d00200241a80b6a200241d0006a10c80302400240024002400240024002400240024020022903900c4203510d0020024190016a200241a80b6a41c803109d081a200241d8046a20024190016a41c803109d081a2002200241d8046a3602a008200241a80b6a200241a0086a10b90320022802b00b2100024020022802ac0b450d0020022802a80b10350b200241a80b6a200241d8046a41c803109d081a200241a0086a200241a80b6a10d70341012101024020022d00a0084101460d00200241a80b6a200241a0086a41086a2201418003109d081a200241f00e6a200241f80b6a220410d8030240024020022903c80b4202520d00200241800f6a41206a22014200370300200241800f6a41186a22054280808080c000370300200241013a00a80f200242043703900f2002427f3703880f200242003703800f200241a0086a41206a22064200370300200241a0086a41186a22074280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a008200241e0106a200241800f6a200241a0086a10d903200241800f6a41286a2208200241e0106a41286a2903003703002001200241e0106a41206a2903003703002005200241e0106a41186a290300370300200241800f6a41106a2209200241e0106a41106a290300370300200241800f6a41086a220a200241e0106a41086a290300370300200220022903e0103703800f2006420037030020074280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a00820024190116a200241800f6a200241a0086a10d903200820024190116a41286a290300370300200120024190116a41206a290300370300200520024190116a41186a290300370300200920024190116a41106a290300370300200a20024190116a41086a29030037030020022002290390113703800f2006420037030020074280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a008200241c0116a200241800f6a200241a0086a10d9032008200241c0116a41286a2903003703002001200241c0116a41206a2903003703002005200241c0116a41186a2903003703002009200241c0116a41106a290300370300200a200241c0116a41086a290300370300200220022903c0113703800f2006420037030020074280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a008200241f0116a200241800f6a200241a0086a10d9032008200241f0116a41286a2903003703002001200241f0116a41206a2903003703002005200241f0116a41186a2903003703002009200241f0116a41106a290300370300200a200241f0116a41086a290300370300200220022903f0113703800f20022903f00e210b200241d0126a20022d00f80e2201200010da03024002400240024020022903d012220ca741ff01714101460d00200241e00f6a41186a4200370300200241e00f6a41106a22064200370300200241e00f6a41086a22004200370300200242003703e00f41d1c4c700ad4280808080e0008410012205290000210c2000200541086a2900003703002002200c3703e00f200510354184eec700ad4280808080b0028410012205290000210c20024188136a41086a2207200541086a2900003703002002200c37038813200510352006200229038813220c370300200241c00f6a41086a2000290300370300200241c00f6a41106a200c370300200241c00f6a41186a2007290300370300200220022903e00f3703c00f2002200241c00f6a10e102200228020021002002290308210d02400240200141024b0d004280b0def7d32b210c20010e03010004010b4280c0a8ca9a3a210c0b41800c2105200b42c0b2cd3b7c220e200b540d01200d420020001b220d200e7c220e200d540d01200e200c560d014200210c20024181136a21000240024020010e03000105000b200b210c0c040b427f210c0c030b200c420888a721050b20022802900f21060240200241980f6a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241940f6a2802002200450d002000410c6c450d00200610350b200228029c0f21060240200241a40f6a2802002200450d002000410c6c21012006210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241a00f6a2802002200450d002000410c6c450d00200610350b41010d030c080b4200210c20024181136a21000b200241a0086a41206a22014200370300200241a0086a41186a22054280808080c000370300200220002800003602b80f2002200041036a2800003600bb0f200241cc086a20022800bb0f360000200241013a00c808200242043703b0082002427f3703a8082002200c3703a008200220022802b80f3600c908200241a0126a200241800f6a200241a0086a10d903200241800f6a41286a200241a0126a41286a290300370300200241800f6a41206a200241a0126a41206a290300370300200241800f6a41186a200241a0126a41186a290300370300200241800f6a41106a200241a0126a41106a290300370300200241800f6a41086a200241a0126a41086a290300370300200220022903a0123703800f2001420037030020054280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a008200241d0126a200241800f6a200241a0086a10d903200241bc106a200241d0126a41086a290300370200200220022903d0123702b41041000d01200241e4126a2802002105200241d0126a41186a2802002101200241d0126a41206a2802002106200241f4126a280200210720022802e012210820022802ec12210920022903f812210b0c060b200241800f6a41206a22034200370300200241800f6a41186a22064280808080c000370300200241013a00a80f200242043703900f427f210b2002427f3703880f200242003703800f200241a0086a41206a22074200370300200241a0086a41186a22054280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a00820024180106a200241800f6a200241a0086a10d903200241800f6a41286a220820024180106a41286a290300370300200320024180106a41206a290300370300200620024180106a41186a290300370300200241800f6a41106a220920024180106a41106a290300370300200241800f6a41086a220a20024180106a41086a29030037030020022002290380103703800f2007420037030020054280808080c000370300200241013a00c808200242043703b0082002427f3703a808200242003703a008200241b0106a200241800f6a200241a0086a10d9032008200241b0106a41286a2903003703002003200241b0106a41206a2903003703002006200241b0106a41186a2903003703002009200241b0106a41106a290300370300200a200241b0106a41086a290300370300200220022903b0103703800f20054200370300200241a0086a41106a2206420037030020014200370300200242003703a00841d1c4c700ad4280808080e0008410012203290000210c2001200341086a2900003703002002200c3703a0082003103541e7c4c700ad4280808080e0008410012203290000210c200241a0126a41086a2208200341086a2900003703002002200c3703a01220031035200620022903a012220c370300200241d0126a41086a2001290300370300200241d0126a41106a2201200c370300200241d0126a41186a22032008290300370300200220022903a0083703d012200241c8006a200241d0126a412010c001200228024c410020022802481bad210c024020022903c80b4201520d0020022903d00b220b4200510d04200c200241d80b6a290300220d200d200c541b220e200b7c200e200d7d200b827d210b0b2007420037030020054280808080c000370300200241013a00c808200242043703b008200242003703a00820024200200b200c7d220c200c200b561b3703a808200241e0106a200241800f6a200241a0086a10d903200241d0126a41286a200241e0106a41286a290300370300200241d0126a41206a200241e0106a41206a2903003703002003200241e0106a41186a2903003703002001200241e0106a41106a290300370300200241d0126a41086a200241e0106a41086a290300370300200220022903e0103703d01220022903f00e210b20022802e00b2101200241a0126a200241a80b6a108e02200241a0086a20022802a012220520022802a812108f02200241e8086a280200410020022903a0084201511b2103024020022802a412450d00200510350b024002400240200320014b0d00410c10332206450d0d410410332205450d0b20054104412010372205450d0d200520022903a80b370000200541186a200241a80b6a41186a290300370000200541106a200241a80b6a41106a290300370000200541086a200241a80b6a41086a2903003700002005412041c00010372205450d0d20052001360020200642c0808080c004370204200620053602000240024020032001490d0041002101410421050c010b410c10332205450d0e410410332203450d0c20034104412010372203450d0e200320022903a80b370000200341186a200241a80b6a41186a290300370000200341106a200241a80b6a41106a290300370000200341086a200241a80b6a41086a2903003700002003412041c00010372203450d0e20032001417f6a360020200542c0808080c00437020420052003360200410121010b200241800f6a41206a2203428180808010370300200241800f6a41186a22072001360200200241940f6a2001360200200220022800f0113602e00f2002200241f0116a41036a2800003600e30f200241ac0f6a20022800e30f360000200241013a00a80f2002200636029c0f200220053602900f2002427f3703880f2002200b3703800f200220022802e00f3600a90f20024190116a200241d0126a200241800f6a10d903200241800f6a41286a20024190116a41286a290300370300200320024190116a41206a290300370300200720024190116a41186a290300370300200241800f6a41106a20024190116a41106a290300370300200241800f6a41086a20024190116a41086a29030037030020022002290390113703800f4180122101024020022d00f80e22054102460d00200241d0126a2005200010da03024020022903d012220ca741ff01714101460d00200241e00f6a41186a4200370300200241e00f6a41106a22064200370300200241e00f6a41086a22014200370300200242003703e00f41d1c4c700ad4280808080e0008410012203290000210c2001200341086a2900003703002002200c3703e00f200310354184eec700ad4280808080b0028410012203290000210c20024188136a41086a2207200341086a2900003703002002200c37038813200310352006200229038813220c370300200241c00f6a41086a2001290300370300200241c00f6a41106a200c370300200241c00f6a41186a2007290300370300200220022903e00f3703c00f200241386a200241c00f6a10e1020240200b42c0b2cd3b7c220c200b540d00200229034042002002290338a71b220d200c7c220c200d5a0d040b20022002280081133602b80f200220024184136a2800003600bb0f41800c21010c040b200c420888a721010b20022002280081133602b80f200220024181136a41036a2800003600bb0f0c020b200220022800f0113602e00f2002200241f3116a2800003600e30f200241003a005b20024180063b0059200241013a005820022802e01221050240200241e8126a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241e4126a2802002200450d002000410c6c450d00200510350b20022802ec1221050240200241f4126a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b200241f0126a2802002200450d082000410c6c450d08200510350c080b20022002280081133602b80f200220024184136a2800003600bb0f41800c2101200c4280c0a8ca9a3a4280b0def7d32b20051b580d050b200241013a0058200220013b0059200220014110763a005b20022802900f21050240200241980f6a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241940f6a2802002200450d002000410c6c450d00200510350b200228029c0f21050240200241a40f6a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b200241a00f6a2802002200450d062000410c6c450d06200510350c060b200241013a0058200220053b0059200220054110763a005b0c050b200220022d00a3083a005b200220022f00a1083b0059200241013a00580c050b2002419c016a4104360200200241ec046a4102360200200242023702dc04200241f0b2c3003602d80420024104360294012002419cb4c30036029001200241003602a408200241b0b4cc003602a008200220024190016a3602e8042002200241a0086a36029801200241d8046a4180b3c300104c000b41809ccc004119419c9ccc00103f000b200241a0086a41206a4200370300200241a0086a41186a4280808080c000370300200241a0086a412c6a20022800bb0f360000200241013a00c808200242043703b0082002427f3703a8082002427f200b20051b3703a008200220022802b80f3600c908200241c0116a200241800f6a200241a0086a10d903200241a0126a41286a200241c0116a41286a290300370300200241a0126a41206a200241c0116a41206a290300370300200241a0126a41186a200241c0116a41186a290300370300200241a0126a41106a200241c0116a41106a290300370300200241a0126a41086a200241c0116a41086a290300370300200220022903c0113703a012200241286a2000200b20022d00f90e20022903e80b220d200241f00b6a290300220e10db03024002402002290328220b200241286a41086a290300220c84500d0041002100200241003a00b80f2002200c3703e80f2002200b3703e00f200241014111200d200e84501b3a009f132002200241a80b6a360288132002200241a80b6a3602c00f2002200241c00f6a3602b00820022002419f136a3602ac08200220024188136a3602a8082002200241b80f6a3602a4082002200241e00f6a3602a008200241800f6a200241a80b6a200241a0086a10dc030240024020022802800f4101470d004200210e20022903880f210d410121000c010b200241a80f6a290300210e200241a00f6a290300210d20022903880f4201520d00200241800f6a41106a290300210f20022802c00f2101200241d8086a200241800f6a41186a290300370300200241d0086a200f37030041002100200241a0086a41086a41003a0000200241a9086a2001290000370000200241b1086a200141086a290000370000200241b9086a200141106a290000370000200241c1086a200141186a290000370000200241033a00a00841b0b4cc004100200241a0086a10d4010b20000d01200241e00f6a41186a22064200370300200241e00f6a41106a22054200370300200241e00f6a41086a22014200370300200242003703e00f41b6fdc600ad4280808080800184220f10012203290000211020024188136a41086a2200200341086a2900003703002002201037038813200310352001200029030037030020022002290388133703e00f41e489c200ad4280808080d0018422101001220329000021112000200341086a29000037030020022011370388132003103520052002290388132211370300200241c00f6a41086a22072001290300370300200241c00f6a41106a22082011370300200241c00f6a41186a22092000290300370300200220022903e00f3703c00f200241106a200241c00f6a412010d701200241106a41106a29030021112002290318211220022802102103200642003703002005420037030020014200370300200242003703e00f200f10012206290000210f2000200641086a2900003703002002200f37038813200610352001200029030037030020022002290388133703e00f201010012206290000210f2000200641086a2900003703002002200f37038813200610352005200229038813220f370300200720012903003703002008200f37030020092000290300370300200220022903e00f3703c00f200242002011420020031b220f200e7d2012420020031b220e200d54ad7d2210200e200d7d220d200e562010200f562010200f511b22001b3703a80820024200200d20001b3703a008200241c00f6aad4280808080800484200241a0086aad428080808080028410020b200241d0126a41206a4200370300200241d0126a41186a4280808080c000370300200241d0126a412c6a20024184136a280000360000200241013a00f812200242043703e01220022002280081133600f9122002427f3703d8122002200b427f200c501b3703d012200241f0116a200241a0126a200241d0126a10d903200241d8006a41086a20022903f011370300200241d8006a41106a200241f0116a41086a290300370300200241d8006a41186a200241f0116a41106a290300370300200241d8006a41206a200241f0116a41186a290300370300200241d8006a41286a200241f0116a41206a29030037030020024188016a200241f0116a41286a290300370300200241003a00580c020b200241003a005b20024180023b0059200241013a005820022802b01221050240200241b8126a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241b4126a2802002200450d002000410c6c450d00200510350b20022802bc1221050240200241c4126a2802002200450d002000410c6c21012005210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b200241c0126a2802002200450d012000410c6c450d01200510350c010b20024188106a200241b0106a410c6a290200370300200220022902b4103703801002400240024020022802f80b41796a2200410c4b0d000240024020000e0d00020202020202020202020201000b0240200241800c6a2d00004118460d0041002100200241003a00830f200241003b00810f200241013a00800f0c030b024020034102490d0041002100200241003a00830f200241003b00810f200241013a00800f0c030b200241a0086a41286a200241d80d6a220041286a290300370300200241a0086a41206a2203200041206a290300370300200241a0086a41186a220a200041186a290300370300200241a0086a41106a200041106a290300370300200241a0086a41086a200041086a290300370300200220002903003703a00841808eec00210002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200241a0086a20022802d00d10f101411f71417f6a0e1d0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c00010b200241d4086a410f36020020034200370300200a4280808080c000370300200241bdb5c0003602d008200241013a00c808200242043703b0082002427f3703a8082002427f20022903d80d427f200241e00d6a290300501b220c42ffffffffffffffffff007c220d200d200c541b3703a008411710332200450d22200242173702d412200220003602d012410f200241d0126a10770240024020022802d412221320022802d81222146b410f490d002014410f6a210020022802d01221032013210a0c010b2014410f6a22002014490d24201341017422032000200320004b1b220a4100480d240240024020130d000240200a0d00410121030c020b200a103322030d010c270b20022802d01221032013200a460d0020032013200a10372203450d260b2002200a3602d412200220033602d0120b200320146a221441002900bdb540370000201441076a41002900c4b540370000200220003602d81220022802d00d21140240200a20006b41034b0d00200041046a22132000490d24200a41017422152013201520134b1b22134100480d2402400240200a0d00024020130d00410121030c020b201310332203450d270c010b200a2013460d002003200a201310372203450d260b200220133602d412200220033602d0120b200241c9086a210a200320006a2014360000200041046a210320022802d012211420022802d4122113024020022802c408220020022802c008470d00200241bc086a2000410110870120022802c40821000b20022802bc082000410c6c6a220020033602082000201336020420002014360200200241d8126a2200200241a0086a41186a290300370300200220022802c40841016a3602c408200241d0126a41106a2203200241a0086a41206a290300370300200241800f6a41106a4232370300200220022903b0083703d0122002200a2900003703f0112002200a41076a2900003700f711200220022903a0083703880f200241800f6a41186a20022903d012370300200241800f6a41206a2000290300370300200241a80f6a2003290300370300200241b00f6a41003a0000200241b40f6a20022800f311360000200241b10f6a20022802f011360000200241003a00800f0c1f0b41800e21000c1a0b41808e0421000c190b41808e0821000c180b41808e0c21000c170b41808e1021000c160b41808e1421000c150b41808e1821000c140b41808e1c21000c130b41808e2021000c120b41808e2421000c110b41808e2821000c100b41808e2c21000c0f0b41808e3021000c0e0b41808e3421000c0d0b41808e3821000c0c0b41808e3c21000c0b0b41808ec00021000c0a0b41808ec40021000c090b41808ec80021000c080b41808ecc0021000c070b41808ed00021000c060b41808ed40021000c050b41808ed80021000c040b41808edc0021000c030b41808ee00021000c020b41808ee40021000c010b41808ee80021000b200241013a00800f200220003b00810f200220004110763a00830f0c020b200241800f6a200241fc0b6a10dd0320022d00800f4101470d0220022f00810f20022d00830f4110747221000c010b200241003a00830f418102210020024181023b00810f200241013a00800f0b200241013a0058200220003b0059200220004110763a005b02402001450d002001410c6c21012008210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b02402005450d002005410c6c450d00200810350b02402007450d002007410c6c21012009210003400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b2006450d012006410c6c450d01200910350c010b200241a0126a41286a2200200241800f6a41306a290300370300200241a0126a41206a2203200241800f6a41286a290300370300200241a0126a41186a220a200241800f6a41206a2214290300370300200241a0126a41106a2213200241800f6a41186a2215290300370300200241a0126a41086a2216200241800f6a41106a290300370300200220022903880f3703a012200241800f6a41086a20024180106a41086a290300370300200241a40f6a20073602002014200636020020152001360200200241940f6a200536020020022002290380103703800f2002200b3703a80f2002200936029c0f200220083602900f200241a0086a41286a2000290300370300200241a0086a41206a2003290300370300200241a0086a41186a200a290300370300200241a0086a41106a2013290300370300200241a0086a41086a2016290300370300200220022903a0123703a008200241d0126a200241800f6a200241a0086a10d903200241d8006a41086a20022903d012370300200241d8006a41106a200241d0126a41086a290300370300200241d8006a41186a200241d0126a41106a290300370300200241d8006a41206a200241d0126a41186a290300370300200241d8006a41286a200241d0126a41206a290300370300200241d8006a41306a200241d0126a41286a290300370300200241003a00580b200410ba0220022d005821010b410110332200450d00200242013702ac0b200220003602a80b02400240200141ff01714101470d00200041013a0000200241013602b00b200241d8006a410172200241a80b6a10c90320022802b00b21000c010b200041003a0000200241013602b00b200241e0006a290300210b024020022802ac0b2201417f6a41074b0d00200141017422054109200541094b1b22054100480d03024020012005460d0020002001200510372200450d050b200220053602ac0b200220003602a80b0b2000200b370001200241093602b00b200241f0006a2802002101200241f8006a2802002200200241a80b6a107702402000450d0020012000410c6c6a2108034020012802002106200141086a2802002200200241a80b6a10770240024020022802ac0b220420022802b00b22056b2000490d0020022802a80b21030c010b200520006a22032005490d05200441017422072003200720034b1b22074100480d050240024020040d00024020070d00410121030c020b200710332203450d080c010b20022802a80b210320042007460d0020032004200710372203450d070b200220073602ac0b200220033602a80b0b200320056a20062000109d081a2002200520006a3602b00b2001410c6a22012008470d000b0b200241fc006a280200210120024184016a2802002200200241a80b6a10770240024020000d0020022802ac0b210620022802b00b21000c010b20012000410c6c6a2108034020012802002107200141086a2802002200200241a80b6a10770240024020022802ac0b220320022802b00b22056b2000490d0020022802a80b2104200321060c010b200520006a22042005490d05200341017422062004200620044b1b22064100480d050240024020030d00024020060d00410121040c020b200610332204450d080c010b20022802a80b210420032006460d0020042003200610372204450d070b200220063602ac0b200220043602a80b0b200420056a20072000109d081a2002200520006a22003602b00b2001410c6a22012008470d000b0b200241e8006a290300210b02400240200620006b4108490d0020022802a80b2105200621010c010b200041086a22012000490d03200641017422052001200520014b1b22014100480d030240024020060d00024020010d00410121050c020b200110332205450d060c010b20022802a80b210520062001460d0020052006200110372205450d050b200220013602ac0b200220053602a80b0b200520006a200b3700002002200041086a22003602b00b20024188016a2d000021030240024020012000460d00200021010c010b200141016a22002001490d03200141017422042000200420004b1b22004100480d030240024020010d0041002101024020000d00410121050c020b200010332205450d060c010b20012000460d0020052001200010372205450d050b200220003602ac0b200220053602a80b0b200520016a20033a00002002200141016a22003602b00b0b2000ad42208620023502a80b84210b024020022d00580d000240200241f8006a2802002201450d00200241f0006a28020021002001410c6c210103400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b0240200241f4006a2802002200450d002000410c6c450d00200228027010350b024020024184016a2802002201450d00200241fc006a28020021002001410c6c210103400240200041046a280200450d00200028020010350b2000410c6a2100200141746a22010d000b0b20024180016a2802002200450d002000410c6c450d00200228027c10350b200241a0136a2400200b0f0b1045000b103e000b103c000b200241e4046a4104360200200241bc0b6a4102360200200242023702ac0b200241f0b2c3003602a80b200241043602dc042002419cb4c3003602d8042002410036029401200241b0b4cc00360290012002200241d8046a3602b80b200220024190016a3602e004200241a80b6a4180b3c300104c000be82307017f027e027f017e077f017e017f230041a0116b22022400420221030240024002400240024002400240024002400240200129036822044202520d00200241186a20014198016a41b002109d081a0c010b20024196036a200141246a41c200109d081a200241d8036a41086a220520014188016a290300370300200241d8036a41106a220620014190016a290300370300200220014180016a2903003703d803200141f8006a29030021032001290370210720024190046a41206a200141206a28020036020020024190046a41186a200141186a29020037030020024190046a41106a200141106a29020037030020024190046a41086a200141086a2902003703002002200129020037039004200241c80a6a20024190046a108b0220024190086a41086a2208200241d10a6a29000037030020024190086a41106a2209200241d90a6a29000037030020024190086a41186a220a200241c80a6a41196a290000370300200220022900c90a3703900820022d00c80a4101460d02200241f0036a41186a200a290300370300200241f0036a41106a2009290300370300200241f0036a41086a200829030037030020022002290390083703f003200241800d6a20014198016a41b002109d081a200241b00f6a41106a2006290300370300200241b00f6a41086a2005290300370300200220022903d8033703b00f4100210520024190116a410010b803200241e8106a200228029011220120022802981110d501200241c8106a41086a200241f4106a290200370300200241c8106a41106a200241fc106a290200370300200241dd106a2206200241e8106a41196a290000370000200220022902ec103703c8100240024020022d00e8104101460d00200241c0106a4200370300200241b8106a4200370300200241b0106a4200370300200242003703a8100c010b20022d00eb10210520022f00e9102108200241b3106a200241d0106a290300370000200241bb106a200241c8106a41106a290300370000200241c0106a2006290000370000200220022903c8103700ab102002200820054110747222053b01a810200220054110763a00aa100b0240200228029411450d00200110350b20024188106a41086a200241b3106a220629000037030020024188106a41106a200241bb106a220829000037030020024188106a41156a200241c0106a2209290000370000200220022900ab1037038810200241c8106a41156a220a4200370000200241c8106a41106a220b4200370300200241c8106a41086a220c4200370300200242003703c81041d1c4c700ad4280808080e00084100122012f0000210d200141026a2d0000210e2002200141086a2900003700ed10200220012900033703e81020011035200220022900ed103700cd10200220022903e8103703c81041e7c4c700ad4280808080e0008410012201290000210f200241e8106a41086a2210200141086a2900003703002002200f3703e81020011035200a2010290300220f3700002009200f370000200220022903e8103700d5102006200c2903003700002008200b2903003700002002200e3a00aa102002200d3b01a810200220022903c8103700ab10200241106a200241a8106a412010c00141002101024020044201520d0020074200510d052002280214410020022802101b2106417f21012006ad220f20032003200f541b220f200f20037d2007827d220f42ffffffff0f560d00200fa721010b200241e8106a200110b803200241086a20022802e810220620022802f01041b0b4cc0041004100108a0220022802082108024020022802ec10450d00200610350b41012106024002400240024020084101470d0020024190116a200110b803200241e8106a200228029011220620022802981110d501200241c8106a41086a2208200241f4106a290200370300200241c8106a41106a2209200241fc106a290200370300200241c8106a41156a220a20024181116a290000370000200220022902ec103703c81020022d00e8104101460d01200241a8106a41156a4200370000200241a8106a41106a4200370300200241a8106a41086a4200370300200242003703a810410021010c020b0c020b20022f00e91020022d00eb10411074722101200241a8106a41156a200a290000370000200241a8106a41106a2009290300370300200241a8106a41086a2008290300370300200220022903c8103703a8100b0240200228029411450d00200610350b200241c8106a41086a200241a8106a41086a290300370300200241c8106a41106a200241a8106a41106a290300370300200241c8106a41156a200241a8106a41156a290000370000200241e8106a41086a20024188106a41086a290300370300200241e8106a41106a20024188106a41106a290300370300200241e8106a41156a20024188106a41156a290000370000200220022903a8103703c81020022002290388103703e810410021060b200241e80f6a41156a2208200241e8106a41156a290000370000200241e80f6a41106a2209200241e8106a41106a290300370300200241e80f6a41086a220a200241e8106a41086a290300370300200241c80f6a41086a220b200241c8106a41086a290300370300200241c80f6a41106a220c200241c8106a41106a290300370300200241c80f6a41156a220d200241c8106a41156a290000370000200220022903e8103703e80f200220022903c8103703c80f20060d01200241d8076a41156a22062008290000370000200241d8076a41106a22082009290300370300200241d8076a41086a2209200a290300370300200241b8076a41086a220a200b290300370300200241b8076a41106a220b200c290300370300200241b8076a41156a220c200d290000370000200220022903e80f3703d807200220022903c80f3703b807200241f8076a41106a220d200241b00f6a41106a290300370300200241f8076a41086a220e200241b00f6a41086a290300370300200220022903b00f3703f807200241c80a6a41046a200241800d6a41b002109d081a20024190086a200241c80a6a41b402109d081a20024190046a20024190086a41046a41b002109d081a200241f6066a20054110763a0000200241f4066a20053b0100200241d0066a2003370300200241c8066a2007370300200241d8066a220520022903f807370300200241e0066a2210200e290300370300200241e8066a200d290300370300200241f7066a20022903d807370000200241ff066a200929030037000020024187076a20082903003700002002418c076a2006290000370000200220043703c006200241f5013602f00620024196076a20014110763a000020024194076a20013b010020024197076a20022903b8073700002002419f076a200a290300370000200241a7076a200b290300370000200241ac076a200c290000370000410410332201450d05200242043702cc0a200220013602c80a20024190046a200241c80a6a10af030240024020022903c0064201520d0020022903d00620022903c8062203420c882204420120044201561b8021040240024020022802cc0a220820022802d00a22016b4102490d0020022802c80a21060c010b200141026a22062001490d09200841017422092006200920064b1b22094100480d090240024020080d00024020090d00410121060c020b2009103322060d010c0d0b20022802c80a210620082009460d0020062008200910372206450d0c20022802d00a21010b200220093602cc0a200220063602c80a0b200620016a2004a741047420037aa7417f6a22064101200641014b1b2206410f2006410f491b723b0000200141026a21010c010b0240024020022802cc0a20022802d00a2201460d0020022802c80a21060c010b200141016a22062001490d08200141017422082006200820064b1b22084100480d080240024020010d0041002101024020080d00410121060c020b200810332206450d0c0c010b20022802c80a210620012008460d0020062001200810372206450d0b20022802d00a21010b200220083602cc0a200220063602c80a0b200620016a41003a0000200141016a21010b200220013602d00a2005200241c80a6a10e201200220103602900820024190086a200241c80a6a10cf0120022802f00621080240024020022802cc0a220620022802d00a22016b4104490d0020022802c80a21050c010b200141046a22052001490d07200641017422092005200920054b1b22094100480d070240024020060d00024020090d00410121050c020b200910332205450d0b0c010b20022802c80a210520062009460d0020052006200910372205450d0a20022802d00a21010b200220093602cc0a200220053602c80a0b200520016a20083600002002200141046a3602d00a412010332201450d052001200241f4066a290200370000200141186a2002418c076a290200370000200141106a20024184076a290200370000200141086a200241fc066a2902003700000240024020022802cc0a220820022802d00a22056b4120490d0020022802c80a21060c010b200541206a22062005490d07200841017422092006200920064b1b22094100480d070240024020080d00024020090d00410121060c020b200910332206450d0b0c010b20022802c80a210620082009460d0020062008200910372206450d0a20022802d00a21050b200220093602cc0a200220063602c80a0b200620056a22062001290000370000200641186a200141186a290000370000200641106a200141106a290000370000200641086a200141086a2900003700002002200541206a3602d00a20011035412010332201450d05200120024194076a290200370000200141186a200241ac076a290200370000200141106a200241a4076a290200370000200141086a2002419c076a2902003700000240024020022802cc0a220820022802d00a22056b4120490d0020022802c80a21060c010b200541206a22062005490d07200841017422092006200920064b1b22094100480d070240024020080d00024020090d00410121060c020b200910332206450d0b0c010b20022802c80a210620082009460d0020062008200910372206450d0a20022802d00a21050b200220093602cc0a200220063602c80a0b200620056a22062001290000370000200641186a200141186a290000370000200641106a200141106a290000370000200641086a200141086a2900003700002002200541206a3602d00a2001103520022802cc0a210620022802c80a21010240024020022802d00a22054180024b0d0020024196036a200241f0036a2001200510f90521050c010b2005ad4220862001ad84100922052900002103200541086a2900002104200541106a2900002107200241a8106a41186a200541186a290000370300200241a8106a41106a2007370300200241a8106a41086a2004370300200220033703a8102005103520024196036a200241f0036a200241a8106a412010f90521050b02402006450d00200110350b2005450d03200241f0026a41086a200241f0036a41086a290300370300200241f0026a41106a200241f0036a41106a290300370300200241f0026a41186a200241f0036a41186a290300370300200241c8026a41086a200241d0066a290300370300200241c8026a41106a200241d8066a290300370300200241c8026a41186a200241e0066a290300370300200241e8026a200241e8066a290300370300200220022903f0033703f0022002200241c8066a2903003703c80220022903c0062103200241186a20024190046a41b002109d081a0b200041086a20022903f002370300200041286a2003370300200041306a20022903c802370300200041206a200241f0026a41186a290300370300200041186a200241f0026a41106a290300370300200041106a200241f0026a41086a290300370300200041386a200241c8026a41086a290300370300200041c0006a200241c8026a41106a290300370300200041c8006a200241c8026a41186a290300370300200041d0006a200241c8026a41206a290300370300200041d8006a200241186a41b002109d081a200041003a00000c060b200241800d6a10ba02200041036a41003a0000200041800a3b0001200041013a00000c050b200041013b0001200041013a0000200041036a41003a000020014198016a10ba020c040b20004180083b0001200041013a0000200041036a41003a000020024190046a10ba020c030b41809ccc004119419c9ccc00103f000b1045000b103e000b200241a0116a24000f0b103c000b841f05017f017e037f027e017f230041d0016b22022400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c00011302030405060708090a0b0c0d0e0f1011121313131415161713000b420021034100210402400240024002400240024002400240200141086a2802000e0b0001070203030405050506000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b2001410c6a35020042d00f7e21030b410121040c040b41012104428084afdf0021030c030b410121044280dac40921030c020b410121040c010b4101210442c0f0f50b21030b200041003a0009200020043a0008200020033703000c170b0240024002400240024002400240024020012d00040e06000102030405000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b200141086a280200210442c0c3930721030240200141106a280200220541b0026c2206450d00200421010340200241106a200110d803427f427f200320022903107c220720072003541b220342c0843d7c220720072003541b2103200141b0026a2101200641d07d6a22060d000b0b200541b0026c21014101210603402001450d06200141d07d6a2101200241106a200410d803200441b0026a210420022d00184101460d000c050b0b200241106a200141086a280200220110d80320022903102103200241106a200110d803427f200342c08db7017c220720072003541b210320022d001821060c040b200141106a3502002107200241106a200141206a280200220110d80320022903102103200241106a200110d803427f427f427f200342808ece1c7c220820082003541b220320074290a10f7e7c220720072003541b220342c0b2cd3b7c220720072003541b210320022d001821060c030b200141306a35020042c0a9077e42c0c09bd8007c21030c010b200141306a35020042a08d067e42c093b9d3007c21030b410021060b200041003a0009200020063a0008200020033703000c160b200041023b0108200042c0cbe8cb003703000c150b200041023b0108200042003703000c140b200041003b0108200042003703000c130b42c0b2cd3b21074280e89226210302400240024002400240200141086a2802000e050004010203000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b42c09dd81021030c020b4280e59af70021070c010b42808ece1c21030b200041003b01082000200720037c3703000c120b4280cab5ee012103410021040240024002400240024002400240024002400240200141086a2d00000e1900090901010202090902030303030603040909090905060707000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b428088debe0121030c060b4280afd0e50221030c050b42c096b10221030c040b428094ebdc0321030c030b410121040c030b420021030c010b4280d0dbc3f40221030b410021040b200041003a0009200020043a0008200020033703000c110b200041003b010820004280f1a795034280c7bdbf0220012802041b3703000c100b4280e497d0122103410021040240024002400240024002400240024002400240200141086a2d00000e1e000909020201090909020203030404040505060404060604060605050607000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b410121044280cab5ee0121030c070b428084afdf0021030c050b41012104420021030c050b4280c2d72f21030c030b4280cab5ee0121030c020b420021030c010b42c099f9ebc02b21030b410021040b200041003a0009200020043a0008200020033703000c0f0b4280c2d72f2103024002400240024020012d00040e06000303010202000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b4280e497d01221030c010b428084afdf0021030b200041013b0108200020033703000c0e0b4280c2d72f2103024002400240024020012d00040e06000303010202000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b4280e497d01221030c010b428084afdf0021030b200041013b0108200020033703000c0d0b4280c2d72f210341002104024002400240024002400240200141086a2802000e0700050102030404000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b42002103410021040c030b428094ebdc032103410021040c020b4280cab5ee012103410021040c010b410121044280a8d6b90721030b200041003a0009200020043a0008200020033703000c0c0b200041003b010820004280e1eb173703000c0b0b200041023b0108200042003703000c0a0b200041003b0108200042003703000c090b42c090c1a401210341002104024002400240024002400240024002400240200141086a2d00000e09000801020308040506000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b410121044280ae99b50121030c060b410121044280bcded70021030c050b200141346a35020042a01f7e42c0cbf1c5017c21030c030b200141346a35020042a01f7e4280c2d1ae017c21030c020b4280caacf40021030c010b42a0dcc4a20221030b410021040b200041003a0009200020043a0008200020033703000c080b024002400240024002400240200141086a2d00000e06000102030405000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b200041003b0108200042003703000c0b0b200241106a41186a4200370300200241106a41106a22054200370300200241106a41086a220442003703002002420037031041f1d8cb00ad42808080809001841001220629000021032004200641086a290000370300200220033703102006103541e2d8cb00ad4280808080f00184100122062900002103200241c0016a41086a2209200641086a290000370300200220033703c00120061035200520022903c0012203370300200241a0016a41086a2004290300370300200241a0016a41106a2003370300200241a0016a41186a2009290300370300200220022903103703a001200241106a200241a0016a10da02200242a0c21e200229031020022d0098014102461b4200200141146a3502004200108408200041003b01082000427f200229030020022903084200521b3703000c0a0b200041003b01082000200141d0006a2903003703000c090b200041003b01082000200141c8006a2903003703000c080b200041003b0108200042003703000c070b42002103410021040240024002400240024020012802040e0400010402000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b200241106a200141086a280200220110d80320022903102103200241106a200110d803200241106a21010c010b200241106a2001412c6a280200220110d80320022903102103200241106a200110d803200241106a21010b20034290ce007c210320012d000821040b200041003a0009200020043a0008200020033703000c060b200041003b01082000200141286a35020042b0e32d7e2001411c6a35020042809fc9007e7c4280f797f3017c3703000c050b108406000b42c0d4e2cc002103024002400240024002400240024002400240024002400240200141086a2d00000e0c000b0102030405060708090a000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b42808c84a40121030c090b200141146a35020042a0acb9317e42c0b5b6f7267c21030c080b42808ea9da2721030c070b42c0f587ba0121030c060b42c0bda3a90121030c050b42c0ceffc30021030c040b42e0facec40021030c030b4280b4f3c30021030c020b42c0a0e2b30121030c010b42c0febdaf2821030b200041003b0108200020033703000c030b4280e1eb172103024002400240024002400240024002400240200141086a2d00000e0d00080108010203040705060807000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b4280dac40921030c060b428087a70e21030c050b4280dac40921030c040b428087a70e21030c030b4280dac40921030c020b428087a70e21030c010b420021030b200041003b0108200020033703000c020b420021034100210402400240024002400240024020012d00040e0a00010502020202030305000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b200241106a200141286a280200220110d80320022903102103200241106a200110d80320034290ce007c210320022d001821040c030b4280c2d72f21030c010b428087a70e21030b410021040b200041003a0009200020043a0008200020033703000c010b4280e59af700210342808ece1c21070240024002400240200141086a2802000e0400030102000b200241246a410136020020024201370214200241e8d4ca00360210200241043602a4012002419cd5ca003602a0012002200241a0016a360220200241106a41b0b4cc00104c000b42c097e8b20121030c010b42c097e8b201210342c085eb3621070b200041003b01082000200320077c3703000b200241d0016a24000bc10304017f027e067f017e230041206b22032400200229030021042001290300210520022802102106200141106a200141186a2207280200200241186a2208280200220910870120012802102007280200220a410c6c6a20062009410c6c109d081a200841003602002007200a20096a2209360200200341086a200936020020032001290210370300200228021c21082001411c6a200141246a2207280200200241246a220a2802002209108701200128021c2007280200220b410c6c6a20082009410c6c109d081a200a41003602002007200b20096a2209360200200341106a41086a20093602002003200129021c370310427f200520047c220420042005541b2105200229030822042001290308220c200c2004561b21040240024020012d0028450d004101210120022d00280d010b410021010b20002005370300200020032903003702102000200329031037021c200020013a002820002004370308200041186a200341086a280200360200200041246a200341106a41086a2802003602000240200241146a2802002201450d002001410c6c450d00200610350b0240200241206a2802002201450d002001410c6c450d00200810350b200341206a24000b920303047f017e017f230041e0006b22032400200341306a41186a4200370300200341306a41106a22044200370300200341306a41086a220542003703002003420037033041d1c4c700ad4280808080e000841001220629000021072005200641086a290000370300200320073703302006103541b8eec700ad4280808080800284100122062900002107200341d0006a41086a2208200641086a2900003703002003200737035020061035200420032903502207370300200341106a41086a2005290300370300200341106a41106a2007370300200341106a41186a200829030037030020032003290330370310200341086a200341106a412010c0014100210502400240417f200328020c410020032802081b220620026a220220022006491b22064280808080f28ba80942808080c0f588fe06200141ff01711b22072007428094ebdc038022074280ec94a37c7e7c4280cab5ee01562007a76a4b0d00200041046a20063602000c010b200041800c3b0001200041036a41003a0000410121050b200020053a0000200341e0006a24000b8b0a04027f017e017f087e230041b0026b220624000240200341ff01710d00200641b8016a2001ad42004280c8afa025420010840820064180026a41186a420037030020064180026a41106a2207420037030020064180026a41086a22034200370300200642003703800241e3efcb00ad4280808080a002841001220129000021082003200141086a29000037030020062008370380022001103541f5efcb00ad4280808080900284100122012900002108200641a0026a41086a2209200141086a290000370300200620083703a00220011035200720062903a0022208370300200641e0016a41086a2003290300370300200641e0016a41106a2008370300200641e0016a41186a200929030037030020062006290380023703e001200641b8016a41086a29030020062903b801220820024280c0a8ca9a3a20024280c0a8ca9a3a541b7c2202200854ad7c2108200641c8016a200641e0016a10bc020240024020062802c8010d00410021034200210a4200210b0c010b20062903d001220a4200522201200641c8016a41106a290300220b420055200b501b2103200b427f550d00428080808080808080807f4200200b2001ad7c7d200a200b428080808080808080807f85845022011b210b42004200200a7d20011b210a0b200641f8006a2002200842808090bbbad6adf00d4200109808200641a8016a200a200b42808090bbbad6adf00d4200109808200641e8006a2006290378220c200641f8006a41086a290300220d428080f0c4c5a9d28f72427f10840820064198016a20062903a801220b200641a8016a41086a290300220e428080f0c4c5a9d28f72427f108408200642808090bbbad6adf00d370388022006290368210f2006200a2006290398017c220a37038002200641c8006a2002200f7c42ffffffffffffffff0f83420020064180026a200a42808090bbbad6adf00d564103746a29030022104200108408200641386a2006290348220a200641c8006a41086a290300220f42808090bbbad6adf00d4200109808200641286a20062903382211200641386a41086a290300428080f0c4c5a9d28f72427f108408200641d8006a200c200d20104200108408200641186a20084200200b4200108408200641086a200e42002002420010840820064188016a20024200200b4200108408427f427f427f2008427f427f20064188016a41086a290300220b200629031820062903087c7c220c2008420052200e42005271200629032042005272200629031042005272200c200b547222011b220b200641d8006a41086a2903002006290358220e2011427f200f42808090bbbad6adf00d541b200a20062903287c220c428080c89d9deb96f80656200f200641286a41086a2903007c200c200a54ad7c220a420052200a501bad7c7c220a200e54ad7c7c427f20062903880120011b220e200a7c220f200e542201ad7c220a2001200a200b54200a200b511b22011b220e7c2002427f200f20011b220b7c220f2002542201ad7c220a2001200a200854200a2008511b22011b42002008200e7d2002200b54ad7d220a2002200b7d220b200256200a200856200a2008511b22071b20031b220a427f200f20011b4200200b20071b20031b220242c0b2cd3b7c22082002542203ad7c220b2003200b200a54200820025a1b22031b220220057c427f200820031b220820047c22042008542203ad7c22082003200820025420082002511b22031b2105427f200420031b21040b2000200437030020002005370308200641b0026a24000b8e1307077f027e037f0a7e017f037e047f230041d0036b2203240020022802102104200228020c2105200228020821062002280204210720022802002102200341206a2001108e02200341a0016a2003280220220820032802282209108f0220032903a001210a4200210b200342003703a001200341e8016a280200210c20032d00ec01210d02400240200a420151220e0d00200341306a41306a4200370300200341306a41286a4200370300200341306a41206a4200370300200341306a41186a4200370300200341c0006a4200370300200341386a4200370300200342003703304200210f4200211042002111420021120c010b200341d8016a2903002113200341a0016a41306a2903002114200341a0016a41206a290300210f200341a0016a41186a290300210b200341e0016a290300211220032903b001211120032903a8012110200341306a41206a200341a0016a41286a290300370300200341306a41286a2014370300200341306a41306a2013370300200341c0006a200b3703002003200f37034820032010370330200320113703380b02400240024002402010200229030022157d22142010562011200241086a29030022167d2010201554ad7d221320115620132011511b450d00419089c200ad4280808080b00284211141838c0c21040c010b02402010200b7c2217428080e983b1de165441002011200f7c22182017200b54ad7c501b0d002014200b7c220b42ffffe883b1de16562013200f7c200b201454ad7c220b420052200b501b0d0020072d00004101460d0041f588c200ad4280808080900184211141838c1421040c010b2015201684500d0120052d00002105200341e8006a2006280200108e02200341a0026a200328026822062003280270108f0220032903a0024201512107200341d0026a290300210f200341c8026a2903002116200341e0026a290300210b200341d8026a29030021150240200328026c450d00200610350b200b420020071b210b2015420020071b21150240200541ff01714101460d00200f420020071b210f2016420020071b2116024020054101710d0020162115200f210b0c010b200f200b2016201556200f200b56200f200b511b22071b210b2016201520071b21150b2015201458200b201358200b2013511b0d0141a389c200ad4280808080d00284211141838c0421040b20114280807c83210b201142088842ff018321102011a7210e410121020c010b2003201437033020032013370338200241086a290300210f2002290300211520042802002104200341e8006a41186a200341c0006a220241086a290300220b370300200341e8006a41206a2207200241106a29030037030020034190016a2206200241186a29030037030020034198016a2219200241206a2903003703002003201337037020032014370368200320022903002216370378427f20172017201054220220182002ad7c221020115420102011511b22021b427f201020021b8450210502400240427f201420167c2211201120145422022013200b7c2002ad7c221120135420112013511b22021b2210428080e983b1de16544100427f201120021b2211501b0d00200341e8006a41106a29030021102019290300210b2006290300211720072903002116200329037021182003290368211a4201211b200329038001211c0c010b02400240201020118450450d004200211b0c010b4200211b200341a0026a41186a221d4200370300200341a0026a41106a22064200370300200341a0026a41086a22074200370300200342003703a00241b6fdc600ad4280808080800184220b100122192900002117200341c0036a41086a2202201941086a290000370300200320173703c0032019103520072002290300370300200320032903c0033703a00241e489c200ad4280808080d0018422171001221929000021162002201941086a290000370300200320163703c00320191035200620032903c0032216370300200341a0036a41086a221e2007290300370300200341a0036a41106a221f2016370300200341a0036a41186a22202002290300370300200320032903a0023703a003200341086a200341a0036a412010d701200341086a41106a29030021162003290310211820032802082119201d42003703002006420037030020074200370300200342003703a002200b1001221d290000210b2002201d41086a2900003703002003200b3703c003201d103520072002290300370300200320032903c0033703a00220171001221d290000210b2002201d41086a2900003703002003200b3703c003201d1035200620032903c003220b370300201e2007290300370300201f200b37030020202002290300370300200320032903a0023703a003200342002016420020191b220b20117d2018420020191b2217201054ad7d2216201720107d22182017562016200b562016200b511b22021b3703a80220034200201820021b3703a002200341a0036aad4280808080800484200341a0026aad42808080808002841002200341d8026a2011370300200341d0026a2010370300200741013a0000200341a9026a2004290000370000200341b1026a200441086a290000370000200341b9026a200441106a290000370000200341c1026a200441186a290000370000200341033a00a00241b0b4cc004100200341a0026a10d4010b0b2005ad2111200341c8016a2016370300200341d0016a2017370300200341b0016a2018370300200341d8016a200b370300200341b8016a20103703002003201c3703c001200320123703e0012003201a3703a80142012110410021022003200d4100200a42015122041b3a00ec012003200c410020041b3602e8012003201b4201512204ad3703a001024020040d002009ad4220862008ad841007420021104200210b0c010b200320093602a402200320083602a002200341a8016a200341a0026a10e7024200210b0b02402003280224450d00200810350b024002402002450d0020002004360204200041086a2010420886200ead42ff018384200b84370200410121020c010b024002400240200e41ff017122020d0020104200510d004103210e200341a0026a21020c010b2002450d0120104200520d014104210e200341a0016a21020b200241086a200e3a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b200041286a200f370300200041206a2015370300200041186a2013370300200041106a2014370300200041086a2011370300410021020b20002002360200200341d0036a24000b8f1804057f017e077f017e230041f0006b2202240020012802202103200241086a41186a4200370300200241086a41106a22044200370300200241086a41086a220542003703002002420037030841a3edcb00ad4280808080f000841001220629000021072005200641086a290000370300200220073703082006103541f393ca00ad4280808080a00184100122062900002107200241e0006a41086a2208200641086a2900003703002002200737036020061035200420022903602207370300200241c0006a41086a2005290300370300200241c0006a41106a2007370300200241c0006a41186a200829030037030020022002290308370340200241086a200241c0006a10fe0120022802082205410120051b2106024002400240024002400240024002402003200229020c420020051b2207422088a7490d00200742ffffff3f83500d01200610350c010b2003200620034105746a10b90421030240200742ffffff3f83500d00200610350b20030d010b200241086a41186a22054200370300200241086a41106a22064200370300200241086a41086a220342003703002002420037030841a3edcb00ad4280808080f000841001220829000021072003200841086a290000370300200220073703082008103541a5ebcb00ad4280808080c00184100122082900002107200241e0006a41086a2209200841086a290000370300200220073703602008103520042002290360370000200441086a22082009290300370000200241c0006a41086a220a2003290300370300200241c0006a41106a220b2006290300370300200241c0006a41186a220c2005290300370300200220022903083703402002200241c0006a412010c001200128021c2002280204410020022802001b220d470d01200542003703002006420037030020034200370300200242003703084188e8cb00ad42808080808001841001220e29000021072003200e41086a29000037030020022007370308200e1035418fd1cb00ad4280808080c000841001220e29000021072009200e41086a29000037030020022007370360200e10352004200229036037000020082009290300370000200a2003290300370300200b2006290300370300200c200529030037030020022002290308370340200241086a200241c0006a10d80220022802082204410120041b210c2001280224200229020c420020041b2207422088a72205470d0202402001280220220620054f0d00200c20064105746a220e0d040b20004180083b0001200041013a0000200041036a41003a00000c040b20004180063b0001200041013a0000200041036a41003a00000c040b20004180063b0001200041013a0000200041036a41003a00000c030b200041800e3b0001200041013a0000200041036a410a3a00000c010b2002410036021020024201370308200128020021030240410410332204450d002002410436020c2002200436020820042003360000200241043602102001280204210a2001410c6a2802002204200241086a1077024002400240200228020c2209200228021022036b2004490d00200228020821080c010b200320046a22082003490d012009410174220b2008200b20084b1b220b4100480d010240024020090d000240200b0d00410121080c020b200b103322080d010c040b200228020821082009200b460d0020082009200b10372208450d030b2002200b36020c200220083602080b200820036a200a2004109d081a2002200320046a360210200141106a2802002103200141186a2802002204200241086a10770240024020040d00200228020c210920022802102104200d210b0c010b20032004410c6c6a210b03402003280200210a200341086a2802002204200241086a107702400240200228020c2206200228021022056b2004490d0020022802082108200621090c010b200520046a22082005490d03200641017422092008200920084b1b22094100480d030240024020060d00024020090d00410121080c020b200910332208450d060c010b2002280208210820062009460d0020082006200910372208450d050b2002200936020c200220083602080b200820056a200a2004109d081a2002200520046a22043602102003410c6a2203200b470d000b2001280224210520012802202106200128021c210b0b02400240200920046b4104490d00200441046a2103200228020821082009210a0c010b200441046a22032004490d01200941017422082003200820034b1b220a4100480d010240024020090d000240200a0d00410121080c020b200a10332208450d040c010b200228020821082009200a460d0020082009200a10372208450d030b2002200a36020c200220083602080b200820046a200b360000200220033602100240200a20036b41034b0d00200341046a22042003490d01200a41017422092004200920044b1b22044100480d0102400240200a0d00024020040d00410121080c020b200410332208450d040c010b200a2004460d002008200a200410372208450d030b2002200436020c200220083602080b200820036a20063600002002200341046a220636021002400240200228020c220920066b4104490d0020022802082104200921080c010b200641046a22042006490d01200941017422082004200820044b1b22084100480d010240024020090d00024020080d00410121040c020b200810332204450d040c010b2002280208210420092008460d0020042009200810372204450d030b2002200836020c200220043602080b200420066a2005360000200141286a200341086aad4220862004ad84200e1015210302402008450d00200410350b0240024020034101470d00200241086a41086a427f3703002002413c6a4108360200200241286a4200370300200241206a4280808080c0003703002002427f37030820024188e8cb00360238200241013a003020024204370318411010332204450d0120024210370244200220043602404108200241c0006a10770240024020022802442208200228024822066b4108490d00200641086a210420022802402103200821050c010b200641086a22042006490d03200841017422032004200320044b1b22054100480d030240024020080d00024020050d00410121030c020b200510332203450d060c010b2002280240210320082005460d0020032008200510372203450d050b20022005360244200220033602400b200320066a42c9dabdf2c6ad9ab7e500370000200220043602480240200520046b41034b0d00200441046a22062004490d03200541017422082006200820064b1b22064100480d030240024020050d00024020060d00410121030c020b200610332203450d060c010b20052006460d0020032005200610372203450d050b20022006360244200220033602400b200320046a200d3600002002200441046a2203360248024002402002280244220920036b4120490d00200441246a210820022802402105200921060c010b200341206a22082003490d03200941017422042008200420084b1b22064100480d030240024020090d00024020060d00410121050c020b200610332205450d060c010b2002280240210520092006460d0020052009200610372205450d050b20022006360244200220053602400b200241316a2109200520036a2204200e290000370000200441186a200e41186a290000370000200441106a200e41106a290000370000200441086a200e41086a2900003700000240200228022c22042002280228470d00200241246a20044101108701200228022c21040b20022802242004410c6c6a220420083602082004200636020420042005360200200241c0006a41086a2204200241086a41186a2903003703002002200228022c41016a36022c200241c0006a41106a2203200241086a41206a29030037030020022002290318370340200220092900003703602002200941076a2900003700672002290308210f200041106a42e400370300200041086a200f370300200041306a41013a0000200041186a2002290340370300200041206a2004290300370300200041286a2003290300370300200041003a0000200041316a2002280260360000200041346a2002280063360000200742ffffff3f83500d05200c10350c050b20004180083b0001200041013a0000200041036a41003a00000c030b1045000b103e000b103c000b200742ffffff3f83500d00200c10350b200241f0006a24000bcf3909057f017e057f017e047f017e037f017e0d7f230022022103200241c0046b41607122022400024002402001450d00200220003602400c010b200241b0b4cc003602400b20022001360244200241c0026a200241c0006a10c403024002400240024002400240024020022802c402450d00200241c8006a200241c0026a41f000109d081a200241b8016a200241c8006a10df032002280248200241d8006a20024198016a200241b8016a410010e00341004100280290b54c2201410120011b360290b54c0240200141014b0d000240024020010e020001000b410041fca1c000360298b54c410041b0b4cc00360294b54c41004102360290b54c0c010b03404100280290b54c4101460d000b0b2002410020022802482201417f6a2200200020014b1b22043602c401100d4101470d01200241c0026a41186a22054200370300200241c0026a41106a22004200370300200241c0026a41086a22014200370300200242003703c0024188e8cb00ad42808080808001841001220629000021072001200641086a290000370300200220073703c002200610354194c4c400ad4280808080e00184100122082900002107200241f0016a41086a2206200841086a290000370300200220073703f00120081035200020022903f0012207370300200241e0036a41086a22092001290300370300200241e0036a41106a220a2007370300200241e0036a41186a220b2006290300370300200220022903c0023703e003200241386a200241e0036a412010c001410021080240200228023c410020022802381b220c20044d0d00200241e0036a2100200241c8016a21010c060b200542003703002000420037030020014200370300200242003703c00241a3edcb00ad4280808080f00084220710012208290000210d2001200841086a2900003703002002200d3703c0022008103541a5ebcb00ad4280808080c0018410012208290000210d2006200841086a2900003703002002200d3703f00120081035200020022903f001220d37030020092001290300370300200a200d370300200b2006290300370300200220022903c0023703e003200241306a200241e0036a412010c0012002280234210e2002280230210f200542003703002000420037030020014200370300200242003703c00220071001220829000021072001200841086a290000370300200220073703c0022008103541f393ca00ad4280808080a001841001220829000021072006200841086a290000370300200220073703f00120081035200020022903f001220737030020092001290300370300200a2007370300200b2006290300370300200220022903c0023703e003200241c8016a200241e0036a10fe010240024020022802c80122010d00410021100c010b20022902cc012207422088a72110200742ffffff3f83500d00200110350b200241c0026a41186a22084200370300200241c0026a41106a22054200370300200241c0026a41086a22014200370300200242003703c0024188e8cb00ad42808080808001841001220629000021072001200641086a290000370300200220073703c00220061035418fd1cb00ad4280808080c00084100122062900002107200241f0016a41086a2209200641086a290000370300200220073703f00120061035200020022903f001370000200041086a2009290300370000200241e0036a41086a2001290300370300200241e0036a41106a2005290300370300200241e0036a41186a2008290300370300200220022903c0023703e003200241c0026a200241e0036a10d80220022802c002211120022902c4022112200241c0026a41e9dabdf30610e10320022802c002210820022802c402210902400240024020022802c80222000d004100211341012114410021150c010b02400240024020004105742201410575220641ffffff3f712006470d0020014100480d0020010d01410121140c020b103e000b200110332214450d020b200820016a210a2000410574210520014105762113410021010340200820016a22002900002107200041086a290000210d200041106a2900002116201420016a220641186a200041186a290000370000200641106a2016370000200641086a200d370000200620073700002005200141206a2201470d000b200a20086b41606a41057641016a21150b0240200941ffffff3f71450d00200810350b20154115490d0402404101450d0020154104744160712217417f4c0d000240201710332218450d00200241003602f801200242043703f001201441606a2119201441a07f6a211a41042106410021014100211b2015211c0340201c210b4100211c4101210a0240200b417f6a2205450d00024002400240024002400240201420054105746a200b410574221d20146a41406a412010a0084100480d00200b417e6a2109201a201d6a21004100211c410021080340024020092008470d00200b210a0c080b200841016a2108200041206a2000412010a0082105200041606a21002005417f4a0d000b200841016a210a2008417f73200b6a21050c010b201a201d6a210002400340024020054101470d00410021050c020b2005417f6a2105200041206a2000412010a0082108200041606a210020084100480d000b0b200b2005490d01200b20154b0d02200b20056b220a4101762209450d002019201d6a2100201420054105746a21080340200241e0036a41186a221d200841186a221e290000370300200241e0036a41106a221f200841106a2220290000370300200241e0036a41086a220c200841086a221c290000370300200220082900003703e003200041086a22212900002107200041106a2222290000210d200041186a2223290000211620082000290000370000201e20163700002020200d370000201c20073700002023201d2903003700002022201f2903003700002021200c290300370000200020022903e003370000200041606a2100200841206a21082009417f6a22090d000b0b024020050d002005211c0c050b0240200a41094d0d002005211c0c050b200b20154b0d02200b20056b2109201420054105746a211d0340200b2005417f6a221c490d040240200b201c6b220a4102490d00201420054105746a22002014201c4105746a2205412010a008417f4a0d00200241c0026a41186a220c200541186a2208290000370300200241c0026a41106a2221200541106a221e290000370300200241c0026a41086a2222200541086a221f290000370300200220052900003703c00220052000290000370000201f200041086a290000370000201e200041106a2900003700002008200041186a290000370000410121200240200a4103490d00200541c0006a200241c0026a412010a008417f4a0d0041022108201d210002400340200041186a200041386a290000370000200041106a200041306a290000370000200041086a200041286a2900003700002000200041206a221e29000037000020092008460d01200041c0006a211f20082120201e2100200841016a2108201f200241c0026a412010a008417f4a0d020c000b0b200821200b200520204105746a220020022903c002370000200041186a200c290300370000200041106a2021290300370000200041086a20222903003700000b201c450d05201d41606a211d200941016a2109201c2105200a410a4f0d050c000b0b2005200b41eccfca001059000b200b201541eccfca001058000b200b2005417f6a221c490d00200b201541fccfca001058000b201c200b41fccfca001059000b0240201b20022802f401470d00200241f0016a201b410110900120022802f001210620022802f8012201211b0b2006201b4103746a2200200a3602042000201c3602002002200141016a22013602f8012001211b024020014102490d000240024003400240024002400240024020062001417f6a4103746a2200280200450d00200141037420066a220941746a2802002205200028020422084b0d010b20014103490d022000280204210820062001417d6a221f4103746a28020421000c010b4102211b200141024d0d0620062001417d6a221f4103746a2802042200200820056a4d0d004103211b200141034d0d06200941646a280200200020056a4b0d050b20002008490d010b2001417e6a211f0b02400240024002400240024002402001201f41016a22204d0d002001201f4d0d012006201f41037422216a2201280204222220012802006a22012006202041037422236a2200280200220c490d02200120154b0d032014200c4105746a221d2000280204221e41057422006a2108200141057421062001200c6b2209201e6b2201201e4f0d042018200820014105742200109d08220b20006a2105201e4101480d0520014101480d05201920066a21062008210103402006200141606a2208200541606a220920092008412010a008410048220a1b2200290000370000200641186a200041186a290000370000200641106a200041106a290000370000200641086a200041086a29000037000020052009200a1b21050240201d20082001200a1b2201490d00200b21000c080b200641606a2106200b2100200b2005490d000c070b0b20202001418cd0ca001042000b201f2001419cd0ca001042000b200c200141acd0ca001059000b2001201541acd0ca001058000b2018201d2000109d08220b20006a21050240201e4101480d002009201e4c0d00201420066a210a200b2100201d2101034020012008200020082000412010a00841004822091b2206290000370000200141186a200641186a290000370000200141106a200641106a290000370000200141086a200641086a2900003700002000200041206a20091b2100200141206a2101200841206a200820091b2208200a4f0d03200520004b0d000c030b0b201d2101200b21000c010b20082101200b21000b20012000200520006b416071109d081a024020022802f8012201201f4d0d0020022802f001220620216a22002022201e6a3602042000200c360200200120204d0d02200620236a2200200041086a20012020417f736a410374109e081a20022001417f6a22013602f801200141014b0d010c030b0b201f200141bcd0ca001042000b20202001104e000b2001211b0b201c450d060c000b0b1045000b1044000b103c000b200241ec036a4104360200200241dc006a41023602002002420237024c200241f0b2c300360248200241043602e403200241b8b4c3003602e003200241003602f401200241b0b4cc003602f0012002200241e0036a3602582002200241f0016a3602e803200241c8006a4180b3c300104c000b410028028cb54c4105490d042002410d3602e4032002200241c4016a3602e0034100280298b54c21014100280294b54c21004100280290b54c210620024180036a418003360200200241f8026a42b580808010370300200241f4026a4184cac400360200200241ec026a4210370200200241e8026a41f4c9c400360200200241e0026a4201370300200241d0026a4202370300200241c0026a41086a4108360200200241dc026a200241e0036a360200200241dcc9c4003602cc02200241ecc9c4003602c402200241053602c002200041aca2c000200641024622061b200241c0026a200141c4a2c00020061b2802101102000c040b024020022802f40141ffffffff0171450d00200610350b2017450d01201810350c010b20154102490d0020142015417f6a22004105746a21054101210603400240024002400240201520002201417f6a2200490d00201520006b22094102490d03201420014105746a2201201420004105746a2208412010a008417f4a0d03200241c0026a41186a221e200841186a220a290000370300200241c0026a41106a221f200841106a220b290000370300200241c0026a41086a2220200841086a221d290000370300200220082900003703c00220082001290000370000201d200141086a290000370000200b200141106a290000370000200a200141186a2900003700004101210120094103490d02200841c0006a200241c0026a412010a008417f4a0d0241002109200521010340200141186a200141386a290000370000200141106a200141306a290000370000200141086a200141286a2900003700002001200141206a220b29000037000020062009220a460d02200a417f6a2109200141c0006a211d200b2101201d200241c0026a412010a008417f4a0d020c000b0b2000201541dccfca001059000b4102200a6b21010b200820014105746a220120022903c002370000200141186a201e290300370000200141106a201f290300370000200141086a20202903003700000b200541606a21052006417f6a210620000d000b0b200220103602e801200220043602e4012002200e4100200f1b22013602e001200220153602dc01200220133602d801200220143602d401200241003602d0012002201036028004200220043602fc03200220013602f803200220153602f403200220133602f003200220143602ec03200241003602e80320022011410120111b22083602e003200220083602c801200220082012420020111b2207422088a74105746a22013602e403200220013602cc012007a7210c200241e0036a2100200241c8016a21010b20024198026a41086a2206200141086a29020037030020024198026a41106a220a200141106a29020037030020024198026a41186a220b200141186a29020037030020024198026a41206a221d200141206a280200360200200241f0016a41086a221e200241c0026a41086a2205290200370300200241f0016a41106a221f200241c0026a41106a290200370300200241f0016a41186a2220200241c0026a41186a290200370300200241f0016a41206a221c200241c0026a41206a2902003703002002200129020037039802200220022902c0023703f001200241c8016a41206a2201200241e0036a41206a290200370300200241c8016a41186a2214200241e0036a41186a290200370300200241c8016a41106a2221200241e0036a41106a290200370300200241c8016a41086a2222200241e0036a41086a290200370300200220022902e0033703c8012005200c360200200220083602c402200241013602c002200241cc026a2208200229039802370200200241d4026a22052006290300370200200241dc026a2209200a290300370200200241e4026a220a200b290300370200200241ec026a201d280200360200200241003602f002200241f4026a20022903f001370200200241fc026a201e29030037020020024184036a201f2903003702002002418c036a202029030037020020024194036a201c2903003702002002410036029c03200241c0036a2001290300370300200241b8036a2014290300370300200241b0036a2021290300370300200241a8036a2022290300370300200241a0036a20022903c80137030020024190036a211d200241f8026a21012002419c036a2114200241f0026a212020024180036a211e20024188036a211f410021060340024002402006450d00200241286a202010e3030240200228022822064108460d00200228022c211c0c020b024020022802f0022206450d00024020022802f40241ffffff3f71450d00200610350b20022802880341ffffff3f71450d0020022802840310350b20012000290200370200200141086a200041086a290200370200200141106a200041106a290200370200200141186a200041186a290200370200200141206a200041206a2802003602002002200c3602f402200241003602f0020b2009290200210d200920022903f80337020020052902002116200520022903f00337020020082902002112200820022903e803370200200241d0036a41086a220b200a41086a280200360200200241003602e0032002200a2902003703d00320022902c4022107200220022903e0033702c40202402007a72206450d00201d20022903d00337020020012012370300201e2016370300201d41086a200b280200360200201f200d370300200220073703f0020c020b0240200228029c030d00410821060c010b200241206a201410e3032002280224211c200228022021060b02400240200641796a220b41014b0d000240200b0e020200020b024020022802c002450d0020022802c4022201450d00024020022802c80241ffffff3f71450d00200110350b200241dc026a28020041ffffff3f71450d00200241d8026a28020010350b024020022802f0022201450d00024020022802f40241ffffff3f71450d00200110350b20022802880341ffffff3f71450d0020022802840310350b200228029c032201450d030240200241a0036a28020041ffffff3f71450d00200110350b200241b4036a28020041ffffff3f71450d03200241b0036a28020010350c030b2002201c3602cc03200220063602c803410028028cb54c4104490d002002410e3602dc032002410d3602d4032002200241c8036a3602d8032002200241c4016a3602d0034100280298b54c21064100280294b54c210b4100280290b54c211c200241f7023602a004200242b5808080103703980420024184cac400360294042002421037028c04200241f4c9c400360288042002420237038004200242023703f003200241ccc9c4003602ec03200241083602e803200241ecc9c4003602e403200241043602e003200641c4a2c000201c410246221c1b28021021062002200241d0036a3602fc03200b41aca2c000201c1b200241e0036a20061102000b20022802f00221060c000b0b200241e0036a41186a4200370300200241e0036a41106a22064200370300200241e0036a41086a22014200370300200242003703e00341f7edcb00ad4280808080f000841001220029000021072001200041086a290000370300200220073703e0032000103541b6aac000ad4280808080900284100122002900002107200241f0016a41086a2208200041086a290000370300200220073703f00120001035200620022903f0012207370300200241c0026a41086a2001290300370300200241c0026a41106a2007370300200241c0026a41186a2008290300370300200220022903e0033703c002200241186a200241c0026a10f201024020022802184101470d00200228021c2004470d00200241f0016a410041aeb8c300ad4280808080800384100e10c20102400240024020022802f0012201450d00200241f8016a2802004104490d0041fd93ca002100200420012800002206490d01418294ca002100200641056a20044f0d010b2002200436029802200220043602c801200241e0036a41086a200241f0016a41086a280200360200200220022903f0013703e003200241c0026a200241e0036a10e50320022802c4022101410041aeb8c300ad428080808080038420023502c80242208620022802c0022206ad84200241c8016aad4280808080c00084100f210002402001450d00200610350b024020022802e0032201450d0020022802e403450d00200110350b20004101460d010c020b024020022802f401450d00200110350b20000d010b10e6030b20022802b8012108024020022802c0012201450d00200141246c21002008210103400240024020012d0000220641044b0d0002400240024020060e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b024020022802bc012201450d00200141246c450d00200810350b0240200241c8006a410c6a2802002200450d00200228024c2101200041246c210003400240024020012d0000220641044b0d0002400240024020060e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012000415c6a22000d000b0b0240200241d0006a2802002201450d00200141246c450d00200228024c10350b2003240042010b9704010d7f230041c0006b220224002002410036021820024204370310200241086a200141046a10bf0302400240024002400240200228020c41246c2203450d002002280208210141042104410021050340024020012d00004101470d00200141106a2802002206417f4c0d03200141036a2d00002107200141016a2f00002108200141086a2802002109200141046a2d0000210a0240024020060d004100210b4101210c0c010b20061033220c450d052006210b0b02400240200b2006490d00200b210d0c010b200b410174220d2006200d20064b1b220d4100480d060240200b0d00200d1033220c0d010c080b200b200d460d00200c200b200d1037220c450d070b20082007411074722107200c20092006109d08210c200241306a41086a2208200241206a41086a29020037030020022002290220370330200e41807e71200a72210e024020052002280214470d00200241106a20054101108d0120022802102104200228021821050b2004200541246c6a220b2006360210200b200d36020c200b200c360208200b200e360204200b20073b0001200b41013a0000200b41036a20074110763a0000200b2002290330370214200b411c6a20082903003702002002200541016a22053602180b200141246a21012003415c6a22030d000b0b20002002290310370200200041086a200241106a41086a280200360200200241c0006a24000f0b1044000b1045000b103e000b103c000b931107047f017e017f017e037f017e017f230041e0006b2205240020054102360208200541306a41186a22064200370300200541306a41106a22074200370300200541306a41086a220842003703002005420037033041d1c4c700ad4280808080e0008422091001220a290000210b200541d0006a41086a220c200a41086a2900003703002005200b370350200a10352008200c290300370300200520052903503703304188f2c700ad4280808080e001841001220a290000210b200c200a41086a2900003703002005200b370350200a103520072005290350220b370300200541106a41086a220a2008290300370300200541106a41106a220d200b370300200541106a41186a220e200c29030037030020052005290330370310200541203602342005200541106a360230200541086a200541306a10cd042005410036023041c4c3c700ad4280808080800284200541306aad4280808080c00084220f100220064200370300200742003703002008420037030020054200370330200910012210290000210b200c201041086a2900003703002005200b370350201010352008200c2903003703002005200529035037033041e7c4c700ad4280808080e0008410012210290000210b200c201041086a2900003703002005200b3703502010103520072005290350220b370300200a2008290300370300200d200b370300200e200c2903003703002005200529033037031020052000360230200541106aad4280808080800484220b200f100220064200370300200742003703002008420037030020054200370330200910012210290000210f200c201041086a2900003703002005200f370350201010352008200c290300370300200520052903503703304185c5c700ad4280808080e0008410012210290000210f200c201041086a2900003703002005200f3703502010103520072005290350220f370300200a2008290300370300200d200f370300200e200c29030037030020052005290330370310200541203602342005200541106a36023020032802002003280208200541306a109606200642003703002007420037030020084200370300200542003703302009100122062900002109200c200641086a29000037030020052009370350200610352008200c2903003703002005200529035037033041edc4c700ad4280808080a00184100122062900002109200c200641086a2900003703002005200937035020061035200720052903502209370300200a2008290300370300200d2009370300200e200c29030037030020052005290330370310024041201033220c450d00200c2001290000370000200c41186a200141186a290000370000200c41106a200141106a290000370000200c41086a200141086a290000370000200b200cad42808080808004841002200c1035200541306a2000417f6a10b803200535023821092005280230210841201033220c450d00200c2001290000370000200c41186a200141186a290000370000200c41106a200141106a290000370000200c41086a200141086a29000037000020094220862008ad84200cad42808080808004841002200c103502402005280234450d00200810350b200541306a41186a22064200370300200541306a41106a220a4200370300200541306a41086a220842003703002005420037033041d1c4c700ad4280808080e00084100122012900002109200541d0006a41086a220c200141086a29000037030020052009370350200110352008200c2903003703002005200529035037033041f7c4c700ad4280808080e00184100122012900002109200c200141086a290000370300200520093703502001103520072005290350370000200741086a200c290300370000200541106a41086a2008290300370300200541106a41106a200a290300370300200541106a41186a20062903003703002005200529033037031041201033220c450d00200c2002290000370000200c41186a200241186a290000370000200c41106a200241106a290000370000200c41086a200241086a290000370000200b200cad42808080808004841002200c103502402004450d00200541306a41186a22014200370300200541306a41106a22024200370300200541306a41086a220842003703002005420037033041d1c4c700ad4280808080e00084220910012206290000210f200541d0006a41086a220c200641086a2900003703002005200f370350200610352008200c2903003703002005200529035037033041cccfc700ad4280808080e0008410012206290000210f200c200641086a2900003703002005200f3703502006103520072005290350370000200741086a2206200c290300370000200541106a41086a220a2008290300370300200541106a41106a220d2002290300370300200541106a41186a220e200129030037030020052005290330370310200b100720014200370300200242003703002008420037030020054200370330200910012203290000210f200c200341086a2900003703002005200f370350200310352008200c290300370300200520052903503703304198f0c700ad4280808080a0018410012203290000210f200c200341086a2900003703002005200f37035020031035200720052903503700002006200c290300370000200a2008290300370300200d2002290300370300200e200129030037030020052005290330370310200b1007200142003703002002420037030020084200370300200542003703302009100122032900002109200c200341086a29000037030020052009370350200310352008200c2903003703002005200529035037033041d2cfc700ad4280808080b00184100122032900002109200c200341086a2900003703002005200937035020031035200720052903503700002006200c290300370000200a2008290300370300200d2002290300370300200e200129030037030020052005290330370310200b10080b200541e0006a24000f0b1045000bf30505017f017e0a7f017e027f230041e0006b220224002002200136020c0240024002402002410c6a10312203422088a722010d0020004100360208200042013702000c010b2002200136021420022003a722043602102002200241106a10c40120022802000d0102400240024020022802042205200228021422064105762201200120054b1b22014105742207417f4c0d0002400240024020010d00410121080c010b200710332208450d010b2001ad21032005450d024100210903402006210a200241003a0058200941016a2109410021010240024002400340200a2001460d01200241386a20016a200228021022072d00003a00002002200741016a3602102002200141016a22073a00582007210120074120470d000b200241186a41186a220b200241386a41186a290300370300200241186a41106a220c200241386a41106a290300370300200241186a41086a220d200241386a41086a290300370300200220022903383703182003422088220ea722012003a7460d012001210f0c020b200241003602140240200141ff0171450d00200241003a00580b200342ffffff3f83500d08200810350c080b0240024002400240200141016a22062001490d00200ea7220f4101742210200620062010491b220641ffffff3f712006470d00200641057422064100480d00024020010d0020060d02410121080c040b2006200f4105742201460d03024020010d0020060d02410121080c040b20082001200610372208450d020c030b103e000b2006103322080d010b103c000b2006410576ad21030b200a20076b21062008200f4105746a22012002290318370000200141186a200b290300370000200141106a200c290300370000200141086a200d290300370000200342ffffffff0f83200f41016aad42208684210320092005470d000b2002200a20076b3602140c030b1045000b1044000b2008450d020b2000200337020420002008360200200410350b200241e0006a24000f0b41b89acc00412e200241386a41a89acc0041d499cc001046000bb90201037f23004180016b2202240002400240024002400240200128020022034110710d002000280200210420034120710d012004ad41012001105221000c020b20002802002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a2100200441047622040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000b20024180016a240020000f0b200441800141c88bc0001059000b200441800141c88bc0001059000bc023030b7f047e0c7f230041c0066b2202240002400240024020012802082203200128020c2204460d002001200341206a220536020820012802102106200241f8026a41186a200341186a290000370300200241f8026a41106a200341106a290000370300200241f8026a41086a200341086a290000370300200220032900003703f8022001280214210702400240024002402001411c6a280200220841014b0d004100210920080e020201020b2008210a4100210903402009200a410176220b20096a220c2007200c4105746a200241f8026a412010a00841004a1b2109200a200b6b220a41014b0d000b0b200720094105746a200241f8026a412010a0080d002006210c0c010b2001200641016a220c3602104108210920052004460d020240200841014d0d0003402001200541206a2203360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f8022008210a4100210903402009200a410176220520096a220b2007200b4105746a200241f8026a412010a00841004a1b2109200a20056b220a41014b0d000b200720094105746a200241f8026a412010a008450d022001200c41016a220c3602102003210520032004460d030c000b0b0240024020080e020100010b03402001200541206a2209360208200241f8026a41186a200541186a290000370300200241f8026a41106a200541106a290000370300200241f8026a41086a200541086a290000370300200220052900003703f80202402007200241f8026a412010a0080d00410021090c030b2001200c41016a220c3602102009210520042009460d030c000b0b2001200436020820012006200420036b41406a4105766a41026a3602100c020b024002400240024002400240024002400240200820094d0d00200241186a200720094105746a220941186a290000220d370300200241106a200941106a290000220e370300200241086a200941086a290000220f3703002002200929000022103703002001200c41016a360210200141286a2802002111200141206a2802002109200141246a280200210a200241206a41186a200d370300200241206a41106a200e370300200241206a41086a200f370300200220103703202002200a36024c200220093602482002200c360244200241f8026a41186a4200370300200241f8026a41106a22054200370300200241f8026a41086a22094200370300200242003703f80241a3edcb00ad4280808080f000841001220a290000210d2009200a41086a2900003703002002200d3703f802200a103541f393ca00ad4280808080a001841001220a290000210d200241b8026a41086a220b200a41086a2900003703002002200d3703b802200a1035200520022903b802220d370300200241d0006a41086a2009290300370300200241d0006a41106a200d370300200241d0006a41186a200b290300370300200220022903f802370350200241f8026a200241d0006a10fe0120022802f8022209410120091b210a02400240200c20022902fc02420020091b220d422088a7490d000240200d42ffffff3f83500d00200a10350b200228024421010c010b200c200a200c4105746a10b90421050240200d42ffffff3f83500d00200a10350b410221092002280244210120050d0c0b200228024c210520022802482106411b10332209450d01200941176a41002800b7cd44360000200941106a41002900b0cd44370000200941086a41002900a8cd44370000200941002900a0cd4437000041041033220a450d01200a20013600002009411b413610372208450d082008200a28000036001b200a1035200241b8026a41002008ad4280808080f00384220d100e10c2010240024002400240024020022802b8022209450d00200241c0026a280200220a4104490d00200a417c714104460d0041000d0020092800002006470d002009280004220a41036a20054b0d010b410410332209450d0c2009200636000020094104410810372209450d0c20092005360004200241d0006a41086a200241b8026a41086a280200360200200220022903b802370350200241f8026a200241d0006a10e50320022802fc02210a4100200d20023502800342208620022802f8022207ad842009ad4280808080800184100f210b0240200a450d00200710350b02402002280250220a450d002002280254450d00200a10350b2009103541042109200b4101470d01200241f8026a10bb0420022802f8022201450d072002418c036a280200211220024188036a280200211320024184036a280200211420024180036a280200211520022802fc022116200228024c211720022802482118200228024421192002410036028003200242013703f802410410332209450d0c200241043602fc02200220093602f8022009201736000020024104360280032015200241f8026a107720022802fc02220520022802800322096b2015490d0220022802f802210a0c030b024020022802bc02450d00200910350b41012109200a21050b20081035200521010c0d0b200920156a220a2009490d082005410174220b200a200b200a4b1b220b4100480d080240024020050d000240200b0d004101210a0c020b200b1033220a0d010c0b0b20022802f802210a2005200b460d00200a2005200b1037220a450d0a0b2002200b3602fc022002200a3602f8020b200a20096a20012015109d081a2002200920156a360280032012200241f8026a10772012450d0220142012410c6c6a21032014210a0340200a2802002104200a41086a2802002209200241f8026a10770240024020022802fc02220b20022802800322056b2009490d0020022802f8022107200b210c0c010b200520096a22072005490d09200b410174220c2007200c20074b1b220c4100480d0902400240200b0d000240200c0d00410121070c020b200c10332207450d0c0c010b20022802f8022107200b200c460d002007200b200c10372207450d0b0b2002200c3602fc02200220073602f8020b200720056a20042009109d081a2002200520096a220936028003200a410c6a220a2003470d000c050b0b200920084190cdc4001042000b1045000b20022802fc02210c20022802800321090c010b41012109410521170c010b02400240200c20096b4104490d0020022802f802210a200c21050c010b200941046a220a2009490d03200c4101742205200a2005200a4b1b22054100480d0302400240200c0d00024020050d004101210a0c020b20051033220a450d060c010b20022802f802210a200c2005460d00200a200c20051037220a450d050b200220053602fc022002200a3602f8020b200a20096a20183600002002200941046a220b3602800302402005200b6b41034b0d00200b41046a2207200b490d032005410174220c2007200c20074b1b22074100480d030240024020050d00024020070d004101210a0c020b20071033220a450d060c010b20052007460d00200a200520071037220a450d050b200220073602fc022002200a3602f8020b200a200b6a20193600002002200941086a2205360280030240024020022802fc02220b20056b4104490d0020022802f802210a200b21070c010b200541046a220a2005490d03200b4101742207200a2007200a4b1b22074100480d0302400240200b0d00024020070d004101210a0c020b20071033220a450d060c010b20022802f802210a200b2007460d00200a200b20071037220a450d050b200220073602fc022002200a3602f8020b200a20056a2011360000200241f8026a41e9dabdf306200241206a200a2009410c6a10bc04410121090240024020022d00f8024101460d00410321050c010b200241f6026a20022d00fb023a0000200241b8026a41086a2002418c036a290200370300200241c8026a20024194036a290200370300200241d0026a2002419c036a290200370300200241d8026a200241a4036a290200370300200241e0026a200241ac036a290200370300200241e5026a200241b1036a290000370000200220022f00f9023b01f4022002200241f8026a410c6a2902003703b802200241f8026a41086a280200210b4100210920022802fc0221050b200241b4026a41026a220c200241f4026a41026a2d00003a0000200241f8016a41086a2204200241b8026a41086a290300370300200241f8016a41106a2203200241b8026a41106a290300370300200241f8016a41186a221a200241b8026a41186a290300370300200241f8016a41206a221b200241b8026a41206a290300370300200241f8016a41286a221c200241b8026a41286a290300370300200241f8016a41306a200241b8026a41306a290300370300200220022f01f4023b01b402200220022903b8023703f801024020090d00200241f4016a41026a200c2d00003a0000200241f8026a41086a2004290300370300200241f8026a41106a2003290300370300200241f8026a41186a201a290300370300200241f8026a41206a201b290300370300200241f8026a41286a201c290300370300200241f8026a412d6a200241f8016a412d6a290000370000200220022f01b4023b01f401200220022903f8013703f80202402007450d00200a10350b200220022f01f4013b01b8022002200241f6016a2d00003a00ba02410021090c020b02402007450d00200a10350b02402016450d00200110350b02402012450d002012410c6c210a2014210903400240200941046a280200450d00200928020010350b2009410c6a2109200a41746a220a0d000b0b4101210902402013450d002013410c6c450d00201410350b20052117200b21010b0b200241b8016a41086a220a200241f8026a41086a290300370300200241b8016a41106a2207200241f8026a41106a290300370300200241b8016a41186a220c200241f8026a41186a290300370300200241b8016a41206a2204200241f8026a41206a290300370300200241b8016a41286a2203200241f8026a41286a290300370300200241b8016a412d6a221a200241f8026a412d6a290000370000200220022d00ba023a00f201200220022f01b8023b01f001200220022903f8023703b80102400240024020090d00200241d0006a41186a2012360200200241d0006a41146a2013360200200241d0006a41106a2014360200200241d0006a410c6a2015360200200241d0006a41086a2016360200200241fa006a20022d00f2013a0000200241ff006a200b360000200241fb006a200536000020024183016a20022903b8013700002002418b016a200a29030037000020024193016a20072903003700002002419b016a200c290300370000200241a3016a2004290300370000200241ab016a2003290300370000200241b0016a201a29000037000020022011360274200220193602702002201836026c2002200136025420022017360250200220022f01f0013b01780240410028028cb54c4103490d00200241b8026a411c6a410f360200200241b8026a41146a410d360200200241b8026a410c6a410d3602002002410d3602bc022002200241d0006a3602d0022002200241c8006a3602c8022002200241cc006a3602c0022002200241c4006a3602b8024100280298b54c21094100280294b54c210a4100280290b54c2105200241b8036a418104360200200241b0036a42b580808010370300200241ac036a4184cac400360200200241a4036a4210370200200241a0036a41f4c9c40036020020024198036a420437030020024188036a4204370300200241f8026a41086a4108360200200241f8026a411c6a200241b8026a360200200241bccdc40036028403200241ecc9c4003602fc02200241033602f802200a41aca2c000200541024622051b200241f8026a200941c4a2c00020051b2802101102000b2002411336029004200242023703e00320024194046a200241d0006a41e800109d081a2002200241f8026a3602f801200241b8026a200241f8016a10b90320022802b80220022802bc0220022802c00210a004210a20024190046a10ba024107210941062117200a0d010c020b4107210920174107460d010b410410332209450d022009200636000020094104410810372209450d02200941003600044100200d2009ad4280808080800184101620091035201721090b200810350c040b103e000b103c000b410821090b0b2000200136020420002009360200200241c0066a24000bef0401017f230041306b220224000240024002400240024002400240024020002802000e0701020304050600010b2001411c6a2802002100200128021821012002412c6a4100360200200241b0b4cc003602282002420137021c200241e4cac40036021820012000200241186a104321010c060b2002200041046a36020c2002410c3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420137021c200241eccac4003602182002200241106a36022820012000200241186a104321010c050b2002200041046a36020c2002410c3602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c200241f4cac4003602182002200241106a36022820012000200241186a104321010c040b2002200028020436020c200241013602142001411c6a280200210020022002410c6a360210200128021821012002412c6a41013602002002420237021c20024184cbc4003602182002200241106a36022820012000200241186a104321010c030b2001411c6a2802002100200128021821012002412c6a4100360200200241b0b4cc003602282002420137021c20024194cbc40036021820012000200241186a104321010c020b2001411c6a2802002100200128021821012002412c6a4100360200200241b0b4cc003602282002420137021c2002419ccbc40036021820012000200241186a104321010c010b2001411c6a2802002100200128021821012002412c6a4100360200200241b0b4cc003602282002420137021c200241a4cbc40036021820012000200241186a104321010b200241306a240020010ba50301067f230041106b22022400024002400240200128020022030d00410121040c010b0240200141086a28020041056a2204417f4c0d0020040d0141002104410121050c020b1044000b2004103322050d001045000b200241003602082002200536020020022004360204024002400240024020030d00024020040d00410110332205450d0420024101360204200220053602000b200541003a0000410121040c010b024020040d00410110332205450d0320024101360204200220053602000b200541013a000020024101360208200141086a2802002204200210770240024020022802042206200228020822056b2004490d00200228020021010c010b200520046a22012005490d02200641017422072001200720014b1b22074100480d020240024020060d00024020070d00410121010c020b2007103322010d010c050b2002280200210120062007460d0020012006200710372201450d040b20022007360204200220013602000b200120056a20032004109d081a200520046a21040b20002002290300370200200041086a2004360200200241106a24000f0b103e000b103c000bde940111027f017e087f017e017f027e037f017e0a7f037e087f027e017f027e037f017e187f230041c0076b22002400200041003602e805200042083703e005200041003602f805200042013703f00541f7edcb00ad4280808080f00084100122012900002102200041f0066a41086a2203200141086a290000370300200020023703f0062001103541f393ca00ad4280808080a00184100122012900002102200041a0076a41086a2204200141086a290000370300200020023703a00720011035024002400240024002400240024002400240412010332201450d00200120002903f006370000200120002903a007370010200141086a2003290300370000200141186a22052004290300370000412010332203450d0020032001290000370000200341186a2005290000370000200341106a200141106a290000370000200341086a200141086a290000370000200041b0066a41026a220420004198026a41026a2d00003a0000200020002f0098023b01b006200041d0066a41106a42a0808080800437030041002106200041003a00e806200020013602dc06200042a080808080043702d406200020033602d006200041eb066a20042d00003a0000200020002f01b0063b00e90620004198026a200041d0066a10c701024002400240024002402000280298024101470d0020004198026a410472210741012108410821094100210a034020004180066a41206a200741206a28020036020020004180066a41186a2201200741186a290200220237030020004180066a41106a2205200741106a290200220b37030020004180066a41086a220c200741086a290200220d37030020002007290200220e37038006200041f0066a41186a220f2002370300200041f0066a41106a2210200b370300200041f0066a41086a2211200d3703002000200e3703f00620004198026a41186a2203200129030037030020004198026a41106a2204200529030037030020004198026a41086a2205200c290300370300200020002903800637039802200041f0066a10c801210241201033220c450d02200c20002903f006370000200c41186a200f290300370000200c41106a2010290300370000200c41086a2011290300370000200041a0076a41086a2005290300220b370300200041a0076a41106a2004290300220d370300200041a0076a41186a2003290300220e370300200020002903980222123703a0072003200e3703002004200d3703002005200b37030020002012370398020240200a20002802e405470d00200041e0056a200a4101108b0120002802e005210920002802e805210a0b2009200a41386c6a22012002370300200529030021022004290300210b2003290300210d200029039802210e2001412c6a4281808080103702002001200c3602282001200e370308200141206a200d370300200141186a200b370300200141106a20023703002000200a41016a220a3602e8052003200f2903003703002004201029030037030020052011290300370300200020002903f006370398020240200620002802f405470d00200041f0056a20064101108a0120002802f005210820002802f80521060b200820064105746a2201200029039802370000200141186a2003290300370000200141106a2004290300370000200141086a20052903003700002000200641016a22063602f80520004198026a200041d0066a10c7012000280298024101460d000b0b024020002802d406450d0020002802d00610350b024020002802e006450d0020002802dc0610350b41f7edcb00ad4280808080f00084100122012900002102200041f0066a41086a2203200141086a290000370300200020023703f0062001103541cca9c000ad4280808080a00184100122012900002102200041a0076a41086a2204200141086a290000370300200020023703a00720011035412010332201450d04200120002903f006370000200120002903a007370010200141086a2003290300370000200141186a22052004290300370000412010332203450d0420032001290000370000200341186a2005290000370000200341106a200141106a290000370000200341086a200141086a29000037000020004188026a41026a220520004198026a41026a2d00003a0000200020002f0098023b01880220004198026a41106a220442a08080808004370300200041003a00b002200020013602a402200042a0808080800437029c022000200336029802200041b3026a20052d00003a0000200020002f0188023b00b102200041e0056a20004198026a10c90120004198026a41186a220642003703002004420037030020004198026a41086a22014200370300200042003703980241f7edcb00ad4280808080f00084220210012205290000210b200041f0066a41086a2203200541086a2900003703002000200b3703f0062005103520012003290300370300200020002903f0063703980241c1edcb00ad4280808080e001841001220c290000210b200041a0076a41086a2205200c41086a2900003703002000200b3703a007200c1035200420002903a007220b37030020004180066a41086a2207200129030037030020004180066a41106a220a200b37030020004180066a41186a220f2005290300370300200020002903980237038006200041b0016a20004180066a412010c00120002802b401211320002802b0012114200642003703002004420037030020014200370300200042003703980220021001220c29000021022003200c41086a290000370300200020023703f006200c103520012003290300370300200020002903f0063703980241cfedcb00ad4280808080d002841001220329000021022005200341086a290000370300200020023703a00720031035200420002903a007220237030020072001290300370300200a2002370300200f2005290300370300200020002903980237038006200041a8016a20004180066a412010c00120002802ac01210520002802a801210c20002802f005211520002802f405211620002802e005211720002802e405211820002802f805210120002802e8052119200041003602d801200041003602d001201920016aad42e0007e2202422088a70d052002a72203417f4c0d054108210402402003450d00200310332204450d050b20054104200c1b221a41014b211b200041003602d806200020043602d0062000200341e0006e3602d406200041003602a807200042083703a007200041a0076a410020014105742205410575109b0120002802a807210902402001450d00200541606a410576211c20002802a007200941d8006c6a210c200041c8026a2103200041c0026a210841002104201521010340200041b0066a41186a2206200141186a2207290000370300200041b0066a41106a220a200141106a220f290000370300200041b0066a41086a2210200141086a2211290000370300200020012900003703b00620004180066a41186a200729000037030020004180066a41106a200f29000037030020004180066a41086a20112900003703002000200129000037038006200041d0016a20004180066a200410840320004198026a41086a420037030020004198026a41106a420037030020004198026a41186a420037030020004198026a41206a420037030020084200370300200341186a2006290300370300200341106a200a290300370300200341086a2010290300370300200320002903b0063703002000420037039802200c20004198026a41d000109d08220c41d0006a41003a0000200c41d8006a210c200141206a2101200441016a2104200541606a22050d000b2009201c6a41016a21090b201a4101201b1b2101200020093602a8070240201641ffffff3f71450d00201510350b200041f0066a41086a200041a0076a41086a2802002203360200200020002903a0073703f0060240024020032001490d00200041d0066a20002802d806201941386c220341386d10a40120002802d006210420002802d8062101200041ac026a200041f0066a3602002000201720036a3602a402200020173602a0022000201836029c0220002017360298022000200041d0016a3602a80220004180066a41086a20013602002000200041d8066a3602840620002004200141e0006c6a3602800620004198026a20004180066a109a042013410020141b2215ad42307e2202422088a70d072002a72203417f4c0d0720002802f80621010240024020030d00410821080c010b200310332208450d070b200041003602980720002008360290072000200341306e360294072015412c6c2203417f4c0d070240024020030d00410421130c010b200310332213450d070b41002117200041003602c001200020153602bc01200020133602b801410021142001201520012015491b221c0d010c040b024020002802f4062201450d00200141d8006c450d0020002802f00610350b024020002802d8062201450d00200141e0006c210320002802d00641346a21010340024020012802002204450d00200441c8006c450d002001417c6a28020010350b200141e0006a2101200341a07f6a22030d000b0b024020002802d4062201450d00200141e0006c450d0020002802d00610350b200041d0016a10b10102402019450d00201941386c21032017412c6a210103400240200128020041ffffff3f71450d002001417c6a28020010350b200141386a2101200341486a22030d000b0b410021082018450d02201841386c450d02201710350c040b20004198026a41186a211a20004198026a41106a210920004198026a41086a211b41002116034020002802f006210402402001450d00200141d8006c21032004210103400240200141d0006a2d00000d0002400240200141206a290300220b200141286a290300220d8450450d0042002102427f210b427f210d0c010b427f210220004198016a427f427f200b200d10980820004198016a41086a290300210d200029039801210b0b2001200b3703002001200d370308200141106a2002370300200141186a20023703000b200141d8006a2101200341a87f6a22030d000b0b0240024020002802d8062201450d0020002802d0062205200141e0006c6a210a0340024020052802382201450d00200141c8006c2104200528023041206a2101034020002802f806220c200128020022034d0d04024020002802f006200341d8006c6a22032d00500d0020032903202202200341286a290300220b84500d0020004198026a2005290310200541186a2903002005290300200541086a2903002002200b109b04200320032903002202427f2002427f20002903a002200028029802410146220c1b220d7c220b200b2002542206200341086a22072903002202427f2009290300200c1b220e7c2006ad7c220b200254200b2002511b220c1b200d200e845022061b37030020072002427f200b200c1b20061b3703000b200141c8006a2101200441b87f6a22040d000b0b200541e0006a2205200a470d000b20002802f00621040b201641016a211620002802f80641d8006c2101200441a87f6a210303402001450d05200141a87f6a2101200341d8006a2103200441d0006a2105200441d8006a220c210420052d00000d000b02402001450d00200341086a2903002102200341186a290300210b200341106a290300210d2003290300210e4100210403400240200c20046a220541d0006a2d00000d00200541086a29030022122002200e2002200d200b2005290300221d2012200541106a290300221e200541186a290300221f109c0441ff017141014622061b2102201d200e20061b210e201f200b20061b210b201e200d20061b210d2005200320061b21030b2001200441d8006a2204470d000b2003450d050b200341013a0050024020002802d8062201450d0020002802d0062204200141e0006c6a21182003410c6a2110200341306a21110340200441e0006a2119024020042802382205450d0020042802302101200541c8006c210503400240024020102001460d00200141246a2011412010a0080d010b200441186a220c290300210e200341086a220629030021022004290310210d2003290300210b20032903102112200141186a200341186a2207290300370300200141106a20123703002001200242002002200e7d200b200d54ad7d2212200b200d7d221d200b56201220025620122002511b220a1b200d200e8450220f1b3703082001200b4200201d200a1b200f1b370300200629030021022007290300210b2003290300210d20042003290310370320200441286a200b3703002004200d370310200c20023703000b200141c8006a2101200541b87f6a22050d000b0b2019210420192018470d000b0b201a200341c8006a2900003703002009200341c0006a290000370300201b200341386a2900003703002000200329003037039802200341286a29030021022003290320210b02402014200028029407470d0020004190076a20144101108801200028029007210820002802980721140b2008201441306c6a2201200029039802370300201b290300210d2009290300210e201a29030021122001200b370320200141286a2002370300200141186a2012370300200141106a200e370300200141086a200d3703002000201441016a2214360298072016201c4f0d0420002802f80621010c010b0b2003200c41f4c4c8001042000b103c000b0c010b024020002802d8062201450d0020002802d0062210200141e0006c6a2115201441306c21192000418c066a221841186a2116201841106a211a201841086a211b4100211703402018201029003c3700002016201041d4006a290000370000201a201041cc006a290000370000201b201041c4006a29000037000020004100360288062000420237038006024020102802382201450d002010280230220a200141c8006c6a2111201041106a2109410021074102210f0340200a220641246a2104200641c8006a210a410021052019210320082101024003402003450d01024020042001460d0020012004412010a008210c200541016a2105200341506a2103200141306a2101200c0d010b0b41ffff032103024020092006109d040d00410021032006290310201029032085200641186a290300201041286a29030085844200520d0020004198026a42ffff0342002006290300200641086a2903002009290300200941086a290300109b04427f20002903a00220002802980241014622011b2202a7417f200242808004544100427f20004198026a41106a29030020011b501b1b21030b20004198026a41186a22042006413c6a29000037030020004198026a41106a2205200641346a29000037030020004198026a41086a220c2006412c6a290000370300200020062900243703980202402007200028028406470d0020004180066a20074101109e01200028028006210f20002802880621070b200f200741226c6a2201200029039802370100200c29030021022005290300210b2004290300210d200120033b0120200141186a200d370100200141106a200b370100200141086a20023701002000200741016a2207360288060b200a2011470d000b0240024002402007450d002007417f200741808004491b210602400240200741226c22040d00410021030c010b200f41206a2101410021030340417f2003411074220320012f01004110746a220520052003491b4110762103200141226a21012004415e6a22040d000b0b200641ffff03712201450d012003417f73220a41ffff0371220320016e210c0240200120034b0d00200f41206a210141002103034020072003460d042001417f20012f01004110742204200c4110746a220520052004491b4110763b0100200141226a21012007200341016a2203470d000b0b0240200a200c20066c6b41ffff03712205450d00410021010340200f200120077041226c6a2203417f20032f01204110742203418080046a220420042003491b4110763b0120200141016a22012005490d000b0b20004198026a41286a220320004180066a41286a28020036020020004198026a41206a220420004180066a41206a29030037030020004198026a41186a220520004180066a41186a29030037030020004198026a41106a220c20004180066a41106a29030037030020004198026a41086a220620004180066a41086a2903003703002000200029038006370398020240201720002802bc01470d00200041b8016a2017410110980120002802b801211320002802c00121170b20132017412c6c6a2201200029039802370200200141286a2003280200360200200141206a2004290300370200200141186a2005290300370200200141106a200c290300370200200141086a20062903003702002000201741016a22173602c0010c030b2000280284062201450d02200141226c450d02200f10350c020b41f0b8c80041194194c5c800103f000b200320074184c5c8001042000b201041e0006a22102015470d000b20002802bc0121150b2000280294072105024020002802f4062201450d00200141d8006c450d0020002802f00610350b024020002802d8062201450d00200141e0006c210320002802d00641346a21010340024020012802002204450d00200441c8006c450d002001417c6a28020010350b200141e0006a2101200341a07f6a22030d000b0b024020002802d4062201450d00200141e0006c450d0020002802d00610350b200041d0016a10b1010b2008450d0820004198026a41186a220c420037030020004198026a41106a2220420037030020004198026a41086a22014200370300200042003703980241f7edcb00ad4280808080f00084220b1001220329000021022001200341086a2900003703002000200237039802200310354192aac000ad4280808080a00284100122042900002102200041a0076a41086a2203200441086a290000370300200020023703a00720041035202020002903a007220237030020004180066a41086a2207200129030037030020004180066a41106a220a200237030020004180066a41186a220f2003290300370300200020002903980237038006200041f0066a20004180066a10fe0120002802f0062206450d07200020002902f406220d3702ec01200020063602e801200c420037030020204200370300200142003703002000420037039802200b1001220429000021022001200441086a29000037030020002002370398022004103541a4aac000ad4280808080a002841001220429000021022003200441086a290000370300200020023703a00720041035202020002903a007370000202041086a200329030037000020072001290300370300200a2020290300370300200f200c290300370300200020002903980237038006200041f0066a20004180066a10fe0120002802f0062201450d06200020002902f4063702fc01200020013602f801200041003602a002200042013703980220004198026a4100201441306c220441306d108a0120002802a002212102402014450d0020002802980220214105746a2101200821030340200341086a2900002102200341106a290000210b2003290000210d200141186a200341186a290000370000200141106a200b370000200141086a20023700002001200d370000202141016a2121200141206a2101200341306a2103200441506a22040d000b0b200020213602a00202402005450d00200541306c450d00200810350b200028029c0221222000280298022123200041003602a807200042043703a007200041a0076a41002017412c6c2203412c6d10980120002802a007210420002802a80721012000201320036a3602a402200020133602a0022000201536029c0220002013360298022000200041f0066a3602a80220004180066a41086a20013602002000200041a0076a41086a36028406200020042001412c6c6a3602800620004198026a20004180066a109d0220004188026a41086a220120002802a807360200200020002903a0073703880220004188026a10ab0220004198026a2023202120002802880222242001280200220110cc01200041e0056a41086a20004198026a41086a220a28020036020020002000290398023703e00510142203280000210420031035024020044106702225450d00410021260340024020010d00410021010c020b20242001412c6c6a212742002128420021290240034002400240202441086a222a28020041306c22030d004200210b420021020c010b202428020041206a21014200210b420021020340427f2002200141086a2903007c200b20012903007c220d200b542204ad7c220b2004200b200254200b2002511b22041b2102427f200d20041b210b200141306a2101200341506a22030d000b0b2000200041e0056a3602a0074200212b4200212c02400240202a28020022014102490d002024280200210802400240200141306c22050d004200210e4200210d0c010b200841206a21014200210e200521034200210d0340427f200d200141086a2903007c200e20012903007c2212200e542204ad7c220e2004200e200d54200e200d511b22041b210d427f201220041b210e200141306a2101200341506a22030d000b0b2024410c6a2106200820056a21112008210f024002400240024002400240024003400240200f220c2011470d004100212d4108212e0c020b200c41306a210f200c41206a290300200c41286a29030084500d0020002802e0052207450d0020002802e40521100340200741086a210320072f010622094105742101410021040240024003402001450d01200c2003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21090b2010450d022010417f6a2110200720094102746a41c8056a28020021070c010b0b0b200720044105746a220141f0026a2903002112200141e8026a290300211d41101033222e450d0d202e201d370300202e2012370308200042818080801037029c022000202e360298024101211902400340200f220c2011460d01200c41306a210f200c41206a290300200c41286a29030084500d0020002802a00722012802002207450d00200128020421100340200741086a210320072f010622094105742101410021040240024003402001450d01200c2003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21090b2010450d022010417f6a2110200720094102746a41c8056a28020021070c010b0b200720044105746a220141f0026a2903002112200141e8026a290300211d02402019200028029c02470d0020004198026a20194101109a01200028029802212e0b202e20194104746a220120123703082001201d3703002000201941016a22193602a0020c000b0b200028029c02212d20190d010b200b212b2002212c0c010b20194104742203450d01202e2109024020194101460d00202e41106a2101200341706a2103202e21090340200920012009290300200129030056200941086a2903002212200141086a290300221d562012201d511b1b2109200141106a2101200341706a22030d000b2009450d020b20002802a00721180240024003402008220c2011460d01200c41306a210820182802002219450d002019210720182802042217210f0340200741086a210320072f01062210410574210141002104024003402001450d01200c2003412010a0082205450d05200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21100b200f450d01200f417f6a210f200720104102746a41c8056a28020021070c000b0b0b41acc6c800413241e0c6c8001064000b200720044105746a220141f0026a2903002112200141e8026a290300211d024020082011460d0003402008220c41306a2108201921072017210f02400340200741086a210320072f010622104105742101410021040240024003402001450d01200c2003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21100b200f450d02200f417f6a210f200720104102746a41c8056a28020021070c010b0b200720044105746a220141f0026a290300221e2012201d200141e8026a290300221f562012201e562012201e511b22011b2112201f201d20011b211d0b20082011470d000b0b427f4200200941086a290300221e20127d20092903002212201d54ad7d221f2012201d7d221d201256201f201e56201f201e511b22011b221242002002200d7d200b200e54ad7d220d200b200e7d220e200b56200d200256200d2002511b22031b7c4200201d20011b220d4200200e20031b7c220e200d542201ad7c220d2001200d201254200d2012511b22011b212c427f200e20011b212b0b202428020021010240202a280200220341306c2204450d00200120046a211c03402001210c024020002802a00722012802002207450d002001280204210f0340200741086a210320072f010622104105742101410021040240024003402001450d01200c2003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21100b200f450d02200f417f6a210f200720104102746a41c8056a28020021070c010b0b200720044105746a220141e8026a220342002003290300220d200c29032022127d220e200e200d56200141f0026a2203290300220e200c41286a2903007d200d201254ad7d220d200e56200d200e511b22041b37030020034200200d20041b37030020014180036a222f2802002207450d00200141f8026a28020021014100210341002104034002400240024020062001460d0020012006412010a008450d0020030d01410021030c020b200341016a21030c010b200420036b220520074f0d0620004198026a41286a220f2001200341506c6a220541286a221029030037030020004198026a41206a2211200541206a220829030037030020004198026a41186a2209200541186a221929030037030020004198026a41106a2217200541106a2218290300370300200a200541086a22152903003703002000200529030037039802200141086a2216290300210d200141106a221a290300210e200141186a221b2903002112200141206a2213290300211d200141286a2214290300211e200520012903003703002010201e3703002008201d370300201920123703002018200e3703002015200d3703002014200f29030037030020132011290300370300201b2009290300370300201a20172903003703002016200a29030037030020012000290398023703000b200141306a21012007200441016a2204470d000b2003450d00202f280200200720036b2201490d00202f20013602000b200c4200370320200c41286a4200370300200c41306a2201201c470d000b202a2802002103202428020021010b2000200041a0076a36028006200020004180066a360298022001200320004198026a410041202003676b109e04202a2802002215417f6a21182024280200220c201541306c22016a2109024020010d004200210d4200210e0c040b20002802a007221728020021194200210d410021084200210e200c2107034002402019450d00201728020421102019210f0340200f41086a2103200f2f010622114105742101410021040240024003402001450d0120072003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21110b2010450d022010417f6a2110200f20114102746a41c8056a280200210f0c010b0b200041e8006a200f20044105746a220141f0026a290300223042002008ad2212420010840820004188016a200141e8026a290300221e420020124200108408200041f8006a42004200201e42001084084200427f20002903880120002903702000290380018442005220004188016a41086a2903002212200029036820002903787c7c221d2012547222011b2212200d7d221f201f201256427f201d20011b221d200e7d2012200d54ad7d2212201d562012201d511b22011b200b564200201220011b221220025620122002511b0d04427f200e20307c200d201e7c2212200d542201ad7c220d2001200d200e54200d200e511b22011b210e427f201220011b210d0b200841016a2108200741306a22072009470d000c040b0b41ecc5c8004130419cc6c8001064000b2005200741f485cc001042000b41002008417f6a2201200120084b1b21180b201520184d0d01200041386a200c201841306c6a220141286a290300221e4200201841016a2211ad22124200108408200041d8006a2001290320221d420020124200108408200041c8006a42004200201d42001084084200427f2002200e7c200b200d7c220d200b542201ad7c220b2001200b200254200b2002511b22011b2202427f200041d8006a41086a290300220b200029033820002903487c7c220e2000290340200029035084420052200e200b547222031b7d427f200d20011b220b427f200029035820031b220e54ad7d220d200b200e7d220e200b56200d200256200d2002511b22011b211f4200200e20011b2130024003402009200c460d012011417f6a2111024020002802a00722012802002207450d002001280204210f0340200741086a210320072f010622104105742101410021040240024003402001450d01200c2003412010a0082205450d02200141606a2101200441016a2104200341206a21032005417f4a0d000b2004417f6a21100b200f450d02200f417f6a210f200720104102746a41c8056a28020021070c010b0b200041286a2030201f20124200109808200c41286a220f4200427f200041286a41086a2903002202201e7c2000290328220b201d7c220d200b542201ad7c220b2001200b200254200b2002511b22051b2202200720044105746a220141f0026a22032903007d427f200d20051b220b200141e8026a2204290300220e54ad7d220d200b200e7d220e200b56200d200256200d2002511b22051b220b370300200c4200200e20051b22023703202004427f2004290300220d20027c22022002200d54220520032903002202200b7c2005ad7c220b200254200b2002511b22051b3703002003427f200b20051b370300200041b0066a41186a2207200641186a290000370300200041b0066a41106a2210200641106a290000370300200041b0066a41086a2208200641086a290000370300200020062900003703b006200141f8026a2105200f2903002102200c290320210b024020014180036a22032802002204200141fc026a280200470d00200520044101108801200328020021040b2005280200200441306c6a220120002903b0063703002001200b370320200141186a2007290300370300200141106a2010290300370300200141086a2008290300370300200141286a20023703002003200328020041016a3602000b200c41306a210c20110d000b0b202d41ffffffff0071450d00202e10350b202c2029202b202856202c202956202c2029511b22011b2129202b202820011b21282024412c6a22242027460d020c010b0b2018201541f0c6c8001042000b02400240202641016a222620254f0d0020282029844200520d010b200028029002210120002802880221240c020b200028028802212420002802900221010c000b0b200028028c02212a200041003602f805200042043703f005200041f0056a41002001412c6c2203412c6d109801202420036a211a20002802f805211502400240024020010d002024210f0c010b20002802f0052015412c6c6a2111200041d0066a41186a211b200041d0066a41106a2113200041d0066a41086a21142024210f0340200f2802082104200f2802042116200f2802002118201b200f41246a2902003703002013200f411c6a2902003703002014200f41146a2902003703002000200f29020c3703d006200f412c6a210f2018450d01200041f0066a41186a221c201b290300370300200041f0066a41106a222f2013290300370300200041f0066a41086a222e2014290300370300200020002903d0063703f0062018200441306c22036a21050240024020030d00420021024200210b0c010b201841206a2101420021024200210b0340200141086a290300200b7c2001290300220b20027c2202200b54ad7c210b200141306a2101200341506a22030d000b0b02400240024020052018460d00200441306c2103201821010340200141286a290300210d200141206a290300210e200041b0066a41186a220c200141186a290300370300200041b0066a41106a2206200141106a290300370300200041b0066a41086a2207200141086a290300370300200020012903003703b006200e200d2002200b109f04220441ffff03710d02200141306a2101200341506a22030d000b0b4200210d410021014102211002402016450d00201641306c450d00201810354200210d0b4200211d410021050c010b200041a0076a41086a22052007290300370300200041a0076a41106a220a2006290300370300200041a0076a41186a2208200c290300370300200020002903b006220d370380062000200d3703a007412210332210450d04201020002903a007370100201020043b0120201041186a2008290300370100201041106a200a290300370100201041086a200529030037010020004281808080103702940720002010360290072004ad210d0240024020034130470d00200d42ffff0383210d4200211d410121050c010b200341a07f6a2117200d42ffff0383210e4200211d41012105410021040340200120046a220341d8006a290300210d200341d0006a2903002112200c200341c8006a2903003703002006200341c0006a2903003703002007200341386a2903003703002000200341306a2903003703b006024002402012200d2002200b109f04220a41ffff03710d00200e210d20172004460d030c010b20004180066a41086a2007290300220d37030020004180066a41106a2006290300221237030020004180066a41186a200c290300221e370300200020002903b006221f3703800620004198026a41186a2208201e37030020004198026a41106a2209201237030020004198026a41086a2219200d3703002000201f37039802200e200aad42ffff03837c220d200e54ad210e02402005200028029407470d0020004190076a20054101109e0120002802900721100b201d200e7c211d2010200541226c6a22032000290398023701002019290300210e200929030021122008290300211e2003200a3b0120200341186a201e370100200341106a2012370100200341086a200e3701002000200541016a22053602980720172004460d020b200441306a2104200d210e0c000b0b02402016450d00201641306c450d00201810350b20002802940721010b0240024042ffff03200d7d220b42ffff03564200201d200d42ffff0356ad7c7d220242005220025022031b4101470d00200d4281807c7c2202200d56201d200d42ffff0354ad7d220b201d56200d42feff03561b0d012005450d01200541226c20106a417e6a2203410020032f010041107422032002a7417f200242808004544100200b501b1b4110746b2204200420034b1b4110763b01000c010b2005450d00200541226c20106a417e6a2204417f20042f01004110742204200ba7417f200b4280800454410020031b1b4110746a220320032004491b4110763b01000b20004198026a41186a2203201c29030037030020004198026a41106a2204202f29030037030020004198026a41086a220c202e290300370300200020002903f00637039802201120013602042011200536020820112010360200201120002903980237020c201141146a200c2903003702002011411c6a2004290300370200201141246a2003290300370200201541016a21152011412c6a2111200f201a470d000b200020153602f8050c010b200020153602f805200f201a460d000340200f2201412c6a210f0240200141046a2802002203450d00200341306c450d00200128020010350b201a200f470d000b0b0240202a450d00202a412c6c450d00202410350b2015ad422c7e2202422088a70d012002a72201417f4c0d0120002802f405211720002802f00521090240024020010d00410421030c010b200110332203450d010b200041003602a807200020033602a00720002001412c6e3602a407200041a0076a4100201510980120002802a80721010240024020150d0020002802a00721080c010b20092015412c6c6a211120002802a00722082001412c6c6a210620012015410274417c6a4102766a2119200041a4026a2107200041b0066a41186a210a200041b0066a41106a210f200041b0066a41086a21102009210c0340200a200c41246a290200370300200f200c411c6a2902003703002010200c41146a2902003703002000200c29020c3703b006200c2802082203ad42227e2202422088a70d032002a72204417f4c0d03200c28020021010240024020040d00410221050c010b200410332205450d030b200c412c6a210c200041003602880620002005360280062000200441226e3602840620004180066a41002003109e01200028028806210402402003450d00200341226c2105200028028006200441226c6a21030340200141086a2901002102200141106a290100210b200141186a290100210d2001290100210e200341206a200141206a2f01003b0100200341186a200d370100200341106a200b370100200341086a20023701002003200e370100200341226a2103200441016a2104200141226a21012005415e6a22050d000b0b20004198026a41086a220120043602002000200029038006220237039802200741186a200a290300370200200741106a200f290300370200200741086a2010290300370200200720002903b006370200200641286a20004198026a41286a280200360200200641206a20004198026a41206a290300370200200641186a20004198026a41186a290300370200200641106a20004198026a41106a290300370200200641086a2001290300370200200620023702002006412c6a2106200c2011470d000b201941016a21010b20002802a407210441002103200041003602a807200042043703a007200041a0076a41002001412c6c2205412c6d10980120002802a007210c20002802a80721012000200820056a3602a402200020083602a0022000200436029c0220002008360298022000200041f0066a3602a80220004180066a41086a20013602002000200041a0076a41086a360284062000200c2001412c6c6a3602800620004198026a20004180066a109d0220002802a407211120004198026a2023202120002802a007221920002802a807220810cc0120002802a0022110200028029c02210a024002400240200028029802220f450d000240200a450d00200a2101200f2103034020032802c80521032001417f6a22010d000b200f2101200a21040340200120012f01064102746a41c8056a28020021012004417f6a22040d000b20004198026a21040c020b20004198026a2104200f2103200f21010c010b2000410036029c0220004198026a21040c010b2000200136029c02200041a4026a20012f0106360200200041003602a00220004100360298020b20004180066a41086a200441086a290200220237030020002004290200220b37038006200041b0026a200237030042002112200042003703a0022000200336029c0220004100360298022000200b3703a802200020103602b8020240024020100d00427f211d4200210d4200211e4200211f427f210e0c010b20002010417f6a3602b80220004198026a410020031b220c2802002104200c28020821060240024002400240200c28020c2205200c28020422012f01064f0d00200121030c010b034020012802002203450d02200441016a210420012f0104210520032101200520032f01064f0d000b0b2005ad4220862006ad8421020c010b2006ad2102410021030b2002422088a7220641016a21052002a721070240024020040d00200321010c010b200320054102746a41c8056a2802002101410021052004417f6a2204450d00034020012802c80521012004417f6a22040d000b0b200c200536020c200c2007360208200c2001360204200c4100360200200320064105746a41e8026a2101427f211d427f210e4200211e4200211f420021124200210d0340200041086a200141086a290300220b4200200129030022024200108408200041186a2002420020024200108408427f200d427f200041186a41086a29030022302000290308222c202c7c7c222c200b2000290310222984202984420052202c2030547222011b7c2012427f200029031820011b7c22302012542201ad7c221220012012200d542012200d511b22011b210d427f203020011b2112200b200e2002201d54200b200e54200b200e511b22011b210e2002201d20011b211d200b201f7c2002201e7c221e200254ad7c211f20002802b8022201450d0120002001417f6a3602b80220004198026a4100200028029c021b220c2802002104200c2802082106024002400240200c28020c2205200c28020422012f01064f0d00200121030c010b0240034020012802002203450d01200441016a210420012f0104210520032101200520032f0106490d020c000b0b2006ad2102410021030c010b2005ad4220862006ad8421020b2002422088a7220641016a21052002a721070240024020040d00200321010c010b200320054102746a41c8056a2802002101410021052004417f6a2204450d00034020012802c80521012004417f6a22040d000b0b200c200536020c200c2007360208200c2001360204200c4100360200200320064105746a41e8026a21010c000b0b02400240200f0d0041002110200041ac026a41003602002000410036029c020c010b02400240200a0d00200f21010c010b200a2101200f2103034020032802c80521032001417f6a22010d000b200f21010340200120012f01064102746a41c8056a2802002101200a417f6a220a0d000b2003210f0b200041b4026a20012f0106360200200041b0026a4100360200200041ac026a2001360200200041003602a802200042003703a0022000200f36029c0220004100360298020b200020103602b80220004198026a109e0202402008450d002008412c6c21032019210103400240200141046a2802002204450d00200441306c450d00200128020010350b2001412c6a2101200341546a22030d000b0b02402011450d002011412c6c450d00201910350b20002015360288062000201736028406200020093602800620004198026a20004180066a200041f8016a200041e8016a10fb0120002d0098024101460d03202120216a22012021490d012001417f4c0d01200041d8036a2802002131200041d4036a2802002107200041d0036a2802002127200041cc036a2802002132200041c8036a280200211b200041c4036a280200212f200041c0036a2802002133200041bc036a280200210a200041b8036a280200212d200041b4036a2802002134200041b0036a280200210f200041ac036a2802002126200041a8036a2802002135200041a4036a2802002110200041a0036a28020021252000419c036a280200213620004198036a280200211120004194036a280200213720004190036a28020021382000418c036a280200210820004188036a280200213920004184036a280200213a20004180036a2802002109200041fc026a280200213b200041f8026a280200213c200041f4026a2802002119200041f0026a280200213d200041ec026a280200213e200041e8026a2802002113200041e4026a280200212e200041e0026a280200213f200041dc026a2802002117200041d8026a2802002140200041d4026a2802002141200041d0026a2802002118200041cc026a2802002142200041c8026a2802002143200041c4026a2802002115200041c0026a2802002144200041bc026a2802002145200041b8026a2802002114200041b4026a2802002124200041b0026a2802002146200041ac026a2802002116200041a8026a2802002147200041a4026a2802002148200041a0026a280200211c200028029c02212a0240024020010d00410221060c010b200110332206450d010b4100210c2000410036028806200020063602800620002001410176360284062021450d02202320214105746a212120002802f001221a41057441606a41057641016a2104202321050340200541086a2900002102200541106a290000210b2005290000213020004198026a41186a200541186a29000037030020004198026a41106a200b37030020004198026a41086a20023703002000203037039802201a450d05200541206a21054100210320002802e80121010240034020004198026a2001460d01200120004198026a412010a008450d01200141206a21012004200341016a2203470d000c070b0b200341ffff034b0d050240200c200028028406470d0020004180066a200c4101108e012000280280062106200028028806210c0b2006200c4101746a20033b01002000200c41016a220c3602880620052021470d000c030b0b1045000b1044000b0240202241ffffff3f71450d00202310350b200041de016a20004188066a28020036010020002000290380063701d6010240024020002802e00522050d004100210c200041ac026a41003602002000410036029c020c010b20002802e805210c0240024020002802e40522030d00200521010c010b2003210120052104034020042802c80521042001417f6a22010d000b200521010340200120012f01064102746a41c8056a28020021012003417f6a22030d000b200421050b200041b4026a20012f0106360200200041b0026a4100360200200041ac026a2001360200200041003602a802200042003703a0022000200536029c0220004100360298020b2000200c3602b80220004198026a109e02024020002802fc0141ffffff3f71450d0020002802f80110350b024020002802ec0141ffffff3f71450d0020002802e80110350b200041b8016a41106a200041d0016a41106a2f01003b0100200041b8016a41086a200041d0016a41086a290100370300200020002901d0013703b801200041f0066a41086a2204200041c6016a280100360200200020002901be013703f00620004198026a41186a2205420037030020004198026a41106a220c420037030020004198026a41086a22014200370300200042003703980241f7edcb00ad4280808080f000841001220329000021022001200341086a29000037030020002002370398022003103541e4edcb00ad4280808080a00184100122032900002102200041a0076a41086a2206200341086a290000370300200020023703a00720031035202020002903a007370000202041086a200629030037000020004180066a41086a2203200129030037030020004180066a41106a2201200c29030037030020004180066a41186a220c2005290300370300200020002903980237038006200020004180066a412010c0012000280204210520002802002106200041a3026a2004280200360000200020002903f00637009b0220002000290098023703a007200020004198026a41076a2900003700a707200041b8056a200d370300200041b0056a2012370300200041a8056a201f370300200041a0056a201e37030020004198056a200e37030020004190056a201d370300200041b8036a41183a0000200041c0036a20002900a70737000020004188056a2005410020061b36020020004184056a203136020020004180056a2007360200200041fc046a2027360200200041f8046a2032360200200041f4046a201b360200200041f0046a202f360200200041ec046a2033360200200041e8046a200a360200200041e4046a202d360200200041e0046a2034360200200041dc046a200f360200200041d8046a2026360200200041d4046a2035360200200041d0046a2010360200200041cc046a2025360200200041c8046a2036360200200041c4046a2011360200200041c0046a2037360200200041bc046a2038360200200041b8046a2008360200200041b4046a2039360200200041b0046a203a360200200041ac046a2009360200200041a8046a203b360200200041a4046a203c360200200041a0046a20193602002000419c046a203d36020020004198046a203e36020020004194046a201336020020004190046a202e3602002000418c046a203f36020020004188046a201736020020004184046a204036020020004180046a2041360200200041fc036a2018360200200041f8036a2042360200200041f4036a2043360200200041f0036a2015360200200041ec036a2044360200200041e8036a2045360200200041e4036a2014360200200041e0036a2024360200200041dc036a2046360200200041d8036a2016360200200041d4036a2047360200200041d0036a2048360200200041cc036a201c360200200041c8036a202a360200200041073602b0032000420237038003200020002903a0073700b903200041d8056a200c290300370300200041d0056a2001290300370300200041c8056a2003290300370300200041c0056a200029038006370300200020004198026a3602d00620004180066a200041d0066a10b90320002802800620002802840620002802880610a0041a200041b0036a10ba020c050b0240024020002802e00522050d004100210c200041ac026a41003602002000410036029c020c010b20002802e805210c0240024020002802e40522030d00200521010c010b2003210120052104034020042802c80521042001417f6a22010d000b200521010340200120012f01064102746a41c8056a28020021012003417f6a22030d000b200421050b200041b4026a20012f0106360200200041b0026a4100360200200041ac026a2001360200200041003602a802200042003703a0022000200536029c0220004100360298020b2000200c3602b80220004198026a109e02202241ffffff3f71450d01202310350c010b0240202241ffffff3f71450d00202310350b024020002802840641808080807872418080808078460d00200610350b0240201c41ffffffff0171450d00202a10350b02402016450d002016410c6c450d00204710350b0240201441ffffffff0071450d00202410350b02402015450d00201541146c450d00204410350b02402018450d00201841186c450d00204210350b02402017450d002017411c6c450d00204010350b0240201341ffffff3f71450d00202e10350b02402019450d00201941246c450d00203d10350b02402009450d00200941286c450d00203b10350b02402008450d002008412c6c450d00203910350b02402011450d00201141306c450d00203710350b02402010450d00201041346c450d00202510350b0240200f450d00200f41386c450d00202610350b0240200a450d00200a413c6c450d00202d10350b0240201b41ffffff1f71450d00202f10350b02402007450d00200741c4006c450d00202710350b0240024020002802e00522050d004100210c200041ac026a41003602002000410036029c020c010b20002802e805210c0240024020002802e40522030d00200521010c010b2003210120052104034020042802c80521042001417f6a22010d000b200521010340200120012f01064102746a41c8056a28020021012003417f6a22030d000b200421050b200041b4026a20012f0106360200200041b0026a4100360200200041ac026a2001360200200041003602a802200042003703a0022000200536029c0220004100360298020b2000200c3602b80220004198026a109e020b024020002802fc0141ffffff3f71450d0020002802f80110350b20002802ec0141ffffff3f71450d0220002802e80110350c020b200d42ffffff3f83500d00200610350b02402005450d00200541306c450d00200810350b02402017450d002017412c6c21032013210103400240200141046a2802002204450d00200441226c450d00200128020010350b2001412c6a2101200341546a22030d000b0b2015450d002015412c6c450d00201310350b200041c0076a24000ba50a07027f017e047f017e017f047e027f230041e0006b220224002002411436020c2002419793ca00360208200241106a419793ca00ad4280808080c00284100510c201024002400240024002400240200228021022030d0042002104410821050c010b200228021421062002200241186a2802002207360224200220033602200240024002402007450d0020022007417f6a3602242002200341016a36022020032d00002107200241c8006a200241206a10e80320022802482208450d00200229024c2109200741ff01714101460d012009a72207450d00200741286c450d00200810350b20024100360230200242013703282002410936023c2002200241086a3602382002200241286a36024441012107200241dc006a41013602002002420137024c200241c888c2003602482002200241386a360258200241c4006a41e88ac500200241c8006a10431a200235023042208620023502288410060240200228022c450d00200228022810350b4102210a0c010b4101210a410021070b02402006450d00200310350b4108200820071b21054200200920071b210420070d00200a4101460d0020052802082203ad42287e2209422088a70d012009a72207417f4c0d01200528020021060240024020070d00410821050c010b200710332205450d030b02400240024002400240200741286e220820034f0d002008410174220a2003200a20034b1bad42287e2209422088a70d082009a7220a4100480d08200741274d0d01200841286c2207200a460d022007450d0120052007200a10372205450d090c020b2008ad210b20030d02420021090c030b200a10332205450d070b200a41286ead210b0b200341286c210a42002109410021080340200620086a22032903002104200341086a290300210c200341106a290300210d200341186a290300210e200520086a220741206a200341206a290300370300200741186a200e370300200741106a200d370300200741086a200c3703002007200437030020094280808080107c2109200a200841286a2208470d000b0b200b20098421040b2004422088a7220341286c4104722207417f4c0d00200710332208450d01200241003602502002200736024c200220083602482003200241c8006a10772002280250210702402003450d002005200341286c6a210f200228024c210620052103034002400240200620076b4120490d00200741206a2108200228024821102006210a0c010b200741206a22082007490d052006410174220a2008200a20084b1b220a4100480d050240024020060d000240200a0d00410121100c020b200a10332210450d080c010b200228024821102006200a460d0020102006200a10372210450d070b2002200a36024c200220103602480b201020076a22072003290000370000200741186a200341186a290000370000200741106a200341106a290000370000200741086a200341086a29000037000020022008360250200341206a290300210902400240200a20086b4108490d00200841086a2107200a21060c010b200841086a22072008490d05200a41017422062007200620074b1b22064100480d0502400240200a0d00024020060d00410121100c020b200610332210450d080c010b200a2006460d002010200a200610372210450d070b2002200636024c200220103602480b201020086a200937000020022007360250200f200341286a2203470d000b0b2007ad422086200235024884210902402004a72203450d00200341286c450d00200510350b200241e0006a240020090f0b1044000b1045000b103e000b103c000bbb0504037f017e087f037e23004180016b220224002002200110c40102400240024002402002280200450d00200041003602000c010b20022802042203200128020441286e2204200420034b1bad42287e2205422088a70d012005a72204417f4c0d010240024020040d00410821060c010b200410332206450d030b4100210720024100360210200220063602082002200441286e36020c0240024002402003450d0041002108034041002104200241003a0078200841016a210820012802042109417f210a034020092004460d03200241d8006a20046a2001280200220b2d00003a000020012009200a6a3602042001200b41016a3602002002200441016a220c3a0078200a417f6a210a200c2104200c4120470d000b200241386a41186a2204200241d8006a41186a290300370300200241386a41106a220a200241d8006a41106a290300370300200241386a41086a220d200241d8006a41086a290300370300200220022903583703382009200c6b220c4108490d03200b29000121052001200b41096a3602002001200c41786a360204200241186a41086a220c200d290300370300200241186a41106a2209200a290300370300200241186a41186a220a20042903003703002002200229033837031802402007200228020c470d00200241086a20074101108f0120022802082106200228021021070b2006200741286c6a22042002290318370300200c290300210e2009290300210f200a290300211020042005370320200441186a2010370300200441106a200f370300200441086a200e3703002002200741016a220736021020082003470d000b0b20002002290308370200200041086a200241086a41086a2802003602000c020b200441ff0171450d00200241003a00780b20004100360200200228020c2204450d00200441286c450d00200610350b20024180016a24000f0b1044000b1045000b8c0f05047f017e017f017e077f23004190016b22022400200241c8006a41186a22034200370300200241c8006a41106a22044200370300200241c8006a41086a220542003703002002420037034841a9d1cb00ad4280808080c0008422061001220729000021082005200741086a290000370300200220083703482007103541b7d1cb00ad4280808080b00184100122092900002108200241286a41086a2207200941086a2900003703002002200837032820091035200420022903282208370300200241f0006a41086a220a2005290300370300200241f0006a41106a220b2008370300200241f0006a41186a220c200729030037030020022002290348370370200241c8006a200241f0006a10dd0220022802482109200229024c21082003420037030020044200370300200542003703002002420037034820061001220329000021062005200341086a290000370300200220063703482003103541d8d1cb00ad4280808080a001841001220329000021062007200341086a2900003703002002200637032820031035200420022903282206370300200a2005290300370300200b2006370300200c200729030037030020022002290348370370200241c8006a200241f0006a10b10220022d00482105200c200241e1006a290000370300200b200241d9006a290000370300200a200241d1006a290000370300200220022900493703700240024020054101460d00200241286a41186a4200370300200241286a41106a420037030020074200370300200242003703280c010b200241286a41186a200c290300370300200241286a41106a200b2903003703002007200a290300370300200220022903703703280b200241086a41086a200241286a41086a290300370300200241086a41106a200241286a41106a290300370300200241086a41186a200241286a41186a2903003703002002200229032837030820024100360250200242013703480240410810332205450d002002410836024c20022005360248200542b8173700002002410836025020054108411010372205450d00200542c8013700082002411036024c20022005360248200241103602500240024002404100450d00411021070c010b411041017422074118200741184b1b22074100480d010240024041100d002007103322050d010c040b41102007460d0020054110200710372205450d030b2002200736024c200220053602480b2005420137001020024118360250024020074138714118470d00200741017422044120200441204b1b22044100480d010240024020070d00200410332205450d040c010b20072004460d0020052007200410372205450d030b2002200436024c200220053602480b2009410820091b210d20054204370018200241203602502008420020091b2208422088a72205200241c8006a10772002280250210302402005450d00200d200541286c6a210e410020036b210b200228024c2104410021050340200320056a210c024002402004200b6a4120490d002002280248210a200421090c010b200c41206a2207200c490d03200441017422092007200920074b1b22094100480d030240024020040d00024020090d004101210a0c020b20091033220a450d060c010b2002280248210a20042009460d00200a200420091037220a450d050b2002200936024c2002200a3602480b200a20036a20056a2204200d20056a2207290000370000200441186a200741186a290000370000200441106a200741106a290000370000200441086a200741086a2900003700002002200c41206a2204360250200741206a2903002106024002402009200b6a41606a41074d0d00200921040c010b200441086a220f2004490d0320094101742204200f2004200f4b1b22044100480d030240024020090d00024020040d004101210a0c020b20041033220a450d060c010b20092004460d00200a200920041037220a450d050b2002200436024c2002200a3602480b200a20036a20056a41206a20063700002002200c41286a360250200b41586a210b200541286a2105200e200741286a470d000b200320056a21030b02400240200228024c220420036b4120490d0020022802482107200421050c010b200341206a22052003490d01200441017422072005200720054b1b22054100480d010240024020040d00024020050d00410121070c020b200510332207450d040c010b2002280248210720042005460d0020072004200510372207450d030b2002200536024c200220073602480b200720036a22042002290308370000200441186a200241086a41186a290300370000200441106a200241086a41106a290300370000200441086a200241086a41086a2903003700002002200341206a22043602500240024020052004460d00200421050c010b200541016a22042005490d01200541017422092004200920044b1b22044100480d010240024020050d0041002105024020040d00410121070c020b200410332207450d040c010b20052004460d0020072005200410372207450d030b2002200436024c200220073602480b200720056a41013a0000200541016aad422086200235024884210602402008a72205450d00200541286c450d00200d10350b20024190016a240020060f0b103e000b103c000b8e0406047f017e017f017e047f027e230041f0006b22022400200241c0006a41186a22034200370300200241c0006a41106a22044200370300200241c0006a41086a220542003703002002420037034041a9d1cb00ad4280808080c0008422061001220729000021082005200741086a290000370300200220083703402007103541add1cb00ad4280808080a00184100122092900002108200241e0006a41086a2207200941086a2900003703002002200837036020091035200420022903602208370300200241206a41086a220a2005290300370300200241206a41106a220b2008370300200241206a41186a220c200729030037030020022002290340370320200241106a200241206a10e102200229031821082002290310210d2003420037030020044200370300200542003703002002420037034020061001220929000021062005200941086a290000370300200220063703402009103541c2d1cb00ad4280808080b001841001220929000021062007200941086a2900003703002002200637036020091035200420022903602206370300200a2005290300370300200b2006370300200c2007290300370300200220022903403703202002200241206a10e102200229030821062002290300210e02404108103322050d001045000b200520064200200ea71b200842c8017e4200200da71b7c370000200241f0006a24002005ad42808080808001840baf0b04047f017e0a7f017e230041b0016b2202240020024188016a41186a420037030020024188016a41106a2203420037030020024188016a41086a22044200370300200242003703880141fdd0cb00ad4280808080a00284100122052900002106200241e8006a41086a2207200541086a2900003703002002200637036820051035200420072903003703002002200229036837038801418fd1cb00ad4280808080c000841001220529000021062007200541086a2900003703002002200637036820051035200320022903682206370300200241106a41086a2004290300370300200241106a41106a2006370300200241106a41186a20072903003703002002200229038801370310200241203602342002200241106a360230200241386a200241106aad4280808080800484100510c2010240024002400240200228023822080d00410021030c010b200228023c21092002200241386a41086a28020036024c20022008360248200241086a200241c8006a10c4010240024020022802080d00200228020c220a200228024c220b41057622072007200a4b1b22074105742204417f4c0d040240024020070d00410121030c010b200410332203450d040b4100210c200241003602602002200736025c2002200336025802400240200a450d004100210d0340200b210541002107200241003a00a801200d41016a210d034020052007460d0320024188016a20076a200228024822042d00003a00002002200441016a3602482002200741016a22043a00a8012004210720044120470d000b200241e8006a41186a220e20024188016a41186a290300370300200241e8006a41106a220f20024188016a41106a290300370300200241e8006a41086a221020024188016a41086a29030037030020022002290388013703680240200c200228025c470d00200241d8006a200c4101108a01200228025821032002280260210c0b200520046b210b2003200c4105746a22072002290368370000200741186a200e290300370000200741106a200f290300370000200741086a20102903003700002002200c41016a220c360260200d200a470d000b2002200520046b36024c0b200229025c21062003450d010c020b2002410036024c0240200741ff0171450d00200241003a00a8010b0240200228025c41ffffff3f71450d00200310350b0b4100210320024100360270200242013703682002410936025c2002200241306a3602582002200241e8006a3602542002419c016a41013602002002420137028c01200241c888c200360288012002200241d8006a36029801200241d4006a41e88ac50020024188016a10431a20023502704220862002350268841006200228026c450d00200228026810350b2009450d00200810350b2006420020031b2206422088a7220741057422094104722204417f4c0d01200410332205450d002003410120031b210a20024100360290012002200436028c012002200536028801200720024188016a10770240024020070d002002280290012104200228028801210d0c010b410020022802900122046b2103200228028801210d200228028c012108200a210c0340200c21070240200820036a411f4b0d00024002400240200441206a22052004490d002008410174220c2005200c20054b1b22054100480d000240024020080d00024020050d004101210d0c020b20051033210d0c040b20082005470d020b200521080c030b103e000b200d200820051037210d0b20052108200d0d00103c000b200741206a210c200d20046a22052007290000370000200541186a200741186a290000370000200541106a200741106a290000370000200541086a200741086a290000370000200341606a2103200441206a2104200941606a22090d000b2002200836028c0120022004360290012002200d360288010b2004ad422086200dad8421110240200642ffffff3f83500d00200a10350b200241b0016a240020110f0b1045000b1044000bb70302037f047e23004180016b2202240041002103200241003a0040200041b0b4cc0020011b210402400240034020012003460d01200241206a20036a200420036a2d00003a00002002200341016a22003a00402000210320004120470d000b200241186a200241206a41186a22032903002205370300200241106a200241206a41106a22002903002206370300200241086a200241206a41086a2201290300220737030020022002290320220837030020032005370300200020063703002001200737030020022008370320200241f0006a200241206a10ed03200241206a200228027022032002280278108f0220022903202105200241e8006a280200210002402002280274450d00200310350b4104103322030d011045000b0240200341ff0171450d00200241003a00400b200241346a41023602002002410c6a410436020020024202370224200241f0b2c30036022020024104360204200241d0b4c30036020020024100360274200241b0b4cc00360270200220023602302002200241f0006a360208200241206a4180b3c300104c000b20032000410020054201511b36000020024180016a24002003ad4280808080c000840bc20503027f017e047f230041d0006b2202240041d1c4c700ad4280808080e00084100122032900002104200241086a200341086a290000370300200220043703002003103541d7c4c700ad4280808080f00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bec2d05057f047e067f017e1e7f230041900f6b22022400024020010d0041b0b4cc0021000b200220003602282002200136022c41002103200241003a00f80b2001417f6a210402400240024002400240024002400240024002400240034020012003460d01200241d80b6a20036a200020036a22052d00003a00002002200541016a3602282002200341016a22053a00f80b2002200436022c2004417f6a21042005210320054120470d000b200241306a41086a200241d80b6a41086a290300370300200241306a41106a200241d80b6a41106a290300370300200241306a41186a200241d80b6a41186a290300370300200220022903d80b37033041002103200241003a00f80b200120056b2106200020056a2100417f2101034020062003460d02200241d80b6a20036a200020036a22052d00003a00002002200420036b36022c2002200541016a3602282002200341016a22053a00f80b2001417f6a21012005210320054120470d000b200241d0006a41086a200241d80b6a41086a290300370300200241d0006a41106a200241d80b6a41106a290300370300200241d0006a41186a200241d80b6a41186a290300370300200220022903d80b370350200420056b220441016a4110490d042002200020056a220341106a3602282002200441716a220536022c20054108490d0720032900002107200341086a29000021082002200441696a36022c2002200341186a360228200341106a2900002109200241206a200241286a10c40120022802200d08200228022c220420022802242203490d082003417f4c0d0520030d0241002104410121060c030b0240200341ff0171450d00200241003a00f80b0b200241ec0b6a41023602002002418c096a4104360200200242023702dc0b200241f0b2c3003602d80b2002410436028409200241e8b4c30036028009200241003602cc06200241b0b4cc003602c806200220024180096a3602e80b2002200241c8066a36028809200241d80b6a4180b3c300104c000b0240200341ff0171450d00200241003a00f80b0b200241ec0b6a41023602002002418c096a4104360200200242023702dc0b200241f0b2c3003602d80b2002410436028409200241e8b4c30036028009200241003602cc06200241b0b4cc003602c806200220024180096a3602e80b2002200241c8066a36028809200241d80b6a4180b3c300104c000b200310392206450d032006200228022822052003109d081a2002200420036b36022c2002200520036a360228200321040b2006450d042003ad4220862004ad84210a200241f0006a41186a200241306a41186a290300370300200241f0006a41106a200241306a41106a290300370300200241f0006a41086a200241306a41086a2903003703002002200229033037037020024190016a41186a200241d0006a41186a29030037030020024190016a41106a200241d0006a41106a29030037030020024190016a41086a200241d0006a41086a2903003703002002200229035037039001200220093703b801200220093703b001200241d80b6a41186a4200370300200241d80b6a41106a22044200370300200241d80b6a41086a22034200370300200242003703d80b41f1d8cb00ad42808080809001841001220529000021092003200541086a290000370300200220093703d80b2005103541e2d8cb00ad4280808080f00184100122052900002109200241c8066a41086a2201200541086a290000370300200220093703c80620051035200420022903c806220937030020024180096a41086a200329030037030020024180096a41106a200937030020024180096a41186a2001290300370300200220022903d80b37038009200241d80b6a20024180096a10da0220022d00e00c210320024180096a200241d80b6a418801109d081a2002200241d80b6a418c016a2800003600cb06200220022800e10c3602c8060240024020034102470d002002428080818080043703c0022002428080848080023703b80220024280c2d72f3703a80220024280e1eb173703a002200242a0c21e37039802200242a0c21e37039002200242e0ef972037038802200242e0c9dc2937038002200242e0ef97203703f801200242a0c21e3703f001200242a0c21e3703e801200242a0c21e3703e001200242a0c21e3703d801200242a0c21e3703d001200242a0c21e3703c801200242a0c21e3703c00120024280808080c0003703b002410021030c010b200241c0016a20024180096a418801109d081a200241c0016a418c016a20022800cb06360000200220022802c8063600c9020b200241e8026a4200370300200241d8026a4200370300200220033a00c8022002428080e983b1de163703e0022002428080e983b1de163703d002200242a08080808080103703f0022002200241c0016a3602f8022002200241c0016a3602fc02200241d80b6a41186a22054200370300200241d80b6a41106a22014200370300200241d80b6a41086a22034200370300200242003703d80b41d1efcb00ad42808080809001841001220029000021092003200041086a290000370300200220093703d80b2000103541ebc3c400ad428080808030841001220b2900002109200241c8066a41086a2200200b41086a290000370300200220093703c806200b1035200420022903c806370000200441086a220c200029030037000020024180096a41086a220d200329030037030020024180096a41106a220e200129030037030020024180096a41186a220f2005290300370300200220022903d80b37038009200241106a20024180096a10e1022002290318210920022802102110200542003703002001420037030020034200370300200242003703d80b41d1c4c700ad4280808080e000841001220b29000021112003200b41086a290000370300200220113703d80b200b103541e7c4c700ad4280808080e000841001220b29000021112000200b41086a290000370300200220113703c806200b1035200420022903c806370000200c2000290300370000200d2003290300370300200e2001290300370300200f2005290300370300200220022903d80b37038009200241086a20024180096a412010c001200241b8036a4200370300200241ac036a419494ca00360200200241a8036a41b0b4cc00360200200241a4036a4100360200200241d8036a200241f0006a41086a290300370300200241e0036a200241f0006a41106a290300370300200241e8036a200241f0006a41186a2903003703002002428080808080013703b00320024200370398032002420037038803200220022903703703d00320022802082104200228020c21002002200241fc026a3602c8032002200241f8026a3602c4032002200241c0016a3602c00320022000410020041b3602cc0320022009420020101b37038003200520024190016a41186a290300370300200120024190016a41106a290300370300200320024190016a41086a29030037030020022002290390013703d80b2002200a370284092002200636028009200241f0036a20024180036a200241d80b6a20072008200241b0016a20024180096a10ef0341012112024020022802f00322130d00200241f0036a41106a2d00000d00200241d80b6a41086a200241a0036a29030037030020024180096a41086a200241e40b6a28020036020020022002290398033703d80b200220022902dc0b37038009200241880f6a20024180096a10f003410021120b20022802b403221420022802bc03220341d8026c6a210120022802b80321152014210402402003450d00200241a10c6a2110200241cd086a210e20024187096a2116200241d80b6a41186a210b200241e10b6a2117200241880e6a41116a2118200241880e6a41027221192002419c086a41186a211a200241810c6a211b200241f0086a211c200241970e6a211d2002419c086a41116a210f200241d80b6a410172211e20024180096a41e0006a211f200241d0096a2120201421030240034020032d00002104200241c4066a41026a220d200341036a2d00003a00002002200341016a2f00003b01c406200341046a2802002105200341086a28020021002003410c6a2802002106200241e0056a200341106a41e000109d081a200341f8006a2903002109200341f0006a290300210720034180016a290300210820024190046a20034188016a41d001109d081a20044103460d01200241fc086a41026a220c200d2d00003a0000200220022f01c4063b01fc082002419c086a200241e0056a41e000109d081a200241c8066a20024190046a41d001109d081a024002400240024020040e03010200010b200241c40e6a41026a2204200c2d00003a0000200241b00e6a41086a220d2002419c086a41086a2221290000370300200241b00e6a41106a22222002419c086a41106a22232d00003a0000200220022f01fc083b01c40e2002200229009c083703b00e200241c80e6a41186a2224200f41186a2225290000370300200241c80e6a41106a2226200f41106a2227290000370300200241c80e6a41086a2228200f41086a22292900003703002002200f2900003703c80e200241b00b6a41186a222a200e41186a222b290000370300200241b00b6a41106a222c200e41106a222d290000370300200241b00b6a41086a222e200e41086a222f2900003703002002200e2900003703b00b200220063600930e2002200036008f0e2002200536008b0e2002200c2d00003a008a0e200220022f01fc083b01880e201d200229009c08370000201d41086a2021290000370000201d41106a20232d00003a000020024180096a41186a202529000037030020024180096a41106a202729000037030020024180096a41086a20292900003703002002200f29000037038009200b202b290000370300200241d80b6a41106a202d290000370300200241d80b6a41086a202f2900003703002002200e2900003703d80b200241f80e6a41086a201c41086a2800003602002002201c2900003703f80e200241e80e6a200241880e6a20024180096a200241d80b6a20072009200241f80e6a10f10320022d00e80e210c201720022f01c40e3b0000201741026a20042d00003a0000200b20022903b00e370000200b41086a200d290300370000200b41106a20222d00003a0000200241033a00e00b2002410d3a00d80b200220063602ec0b200220003602e80b200220053602e40b201b20022903c80e370000201b41086a2028290300370000201b41106a2026290300370000201b41186a2024290300370000201041186a202a290300370000201041106a202c290300370000201041086a202e290300370000201020022903b00b370000200241d80b6a41f8006a2009370300200220073703c80c2002200c4104463a00c10c41b0b4cc004100200241d80b6a10d4010c020b20162002419c086a41e000109d081a2002410d3a00d80b201e20024180096a41e700109d081a200241d80b6a41f0006a2009370300200220073703c00c200220083703d00c20052006200241d80b6a10d401200041ffffff3f71450d01200510350c010b200241f80e6a41026a2204200c2d00003a0000200241c80e6a41086a220d2002419c086a41086a2221290000370300200241c80e6a41106a22222002419c086a41106a22232d00003a0000200220022f01fc083b01f80e2002200229009c083703c80e20024180096a201a41c800109d081a20202009370300200220073703c809200220083703d809201f200241c8066a41d001109d081a200241b00e6a20024180096a10d803200241d80b6a20024180096a41b002109d081a201920022f01fc083b0000201941026a200c2d00003a00002018200229009c08370000201841086a2021290000370000201841106a20232d00003a000020024180023b01880e200220063600950e200220003600910e2002200536008d0e200241b00b6a200241d80b6a200241880e6a10ac0342002109024020022903b80b4201520d00420020022903b00e220920022903c00b7d220720072009561b21090b2002427f20022903b801220720097c220920092007541b220920022903b001220720092007561b3703b80120022903b00b2109201720022f01f80e3b0000201741026a20042d00003a0000200b20022903c80e370000200b41086a200d290300370000200b41106a20222d00003a0000200241063a00e00b2002410d3a00d80b200220063602ec0b200220003602e80b200220053602e40b20022009503a00810c41b0b4cc004100200241d80b6a10d4010b200341d8026a22032001470d000b200121040c010b200341d8026a21040b024020012004460d0003402004220341d8026a21040240024020032d0000220541014b0d000240024020050e020001000b0240200341086a28020041ffffff3f71450d00200341046a28020010350b200341106a2d00004107470d02200341386a280200450d02200341346a28020010350c020b200341286a10bb020c010b200341e8006a28020041ffffff3f71450d00200341e4006a28020010350b20012004470d000b0b02402015450d00201541d8026c450d00201410350b20024184046a280200210d200241f0036a41106a2802002106200241fc036a2802002100200241f8036a280200210b20022802f40321010240200228028c032203450d0020024180036a41106a280200450d00200310350b02402012450d0002400240200228029c03220c0d004100210e200241ec0b6a4100360200200241003602dc0b0c010b20022802a403210e02400240200241a0036a28020022040d00200c21030c010b20042103200c2105034020052802880b21052003417f6a22030d000b200c21030340200320032f01064102746a41880b6a28020021032004417f6a22040d000b2005210c0b200241f40b6a20032f0106360200200241f00b6a4100360200200241ec0b6a2003360200200241003602e80b200242003703e00b2002200c3602dc0b200241003602d80b0b2002200e3602f80b200241d80b6a108f030b02402013450d00410021010240200d450d00200610350b0b200241003602e00b200242013703d80b410110332103024002402001450d002003450d08200341003a0000200220033602d80b20024281808080103702dc0b20034101410210372203450d08200320063a0001200220033602d80b20024282808080203702dc0b2000200241d80b6a10770240024020022802dc0b220520022802e00b22046b2000490d0020022802d80b21030c010b200420006a22032004490d08200541017422062003200620034b1b22064100480d080240024020050d00024020060d00410121030c020b2006103322030d010c0b0b20022802d80b210320052006460d0020032005200610372203450d0a0b200220063602dc0b200220033602d80b0b200320046a20012000109d081a200420006aad42208621090c010b2003450d07200341013a0000200241013602dc0b200220033602d80b42808080801021090b20092003ad84210902402001450d00200b450d00200110350b200241900f6a240020090f0b2002418c096a4104360200200241ec0b6a4102360200200242023702dc0b200241f0b2c3003602d80b2002410436028409200241e8b4c30036028009200241003602cc06200241b0b4cc003602c806200220024180096a3602e80b2002200241c8066a36028809200241d80b6a4180b3c300104c000b1044000b1045000b2002418c096a4104360200200241ec0b6a4102360200200242023702dc0b200241f0b2c3003602d80b2002410436028409200241e8b4c30036028009200241003602cc06200241b0b4cc003602c806200220024180096a3602e80b2002200241c8066a36028809200241d80b6a4180b3c300104c000b2002418c096a4104360200200241ec0b6a4102360200200242023702dc0b200241f0b2c3003602d80b2002410436028409200241e8b4c30036028009200241003602cc06200241b0b4cc003602c806200220024180096a3602e80b2002200241c8066a36028809200241d80b6a4180b3c300104c000b103e000b103c000bbf2303027f027e077f23004190056b2207240020072004370310200720033703082007200536021c02400240024002400240024002400240024002400240024002402001280230200128024022082802b001460d002005420020052903082209200841386a2903007d220a200a20095622081b37030820080d03200741f8026a200210f303200741a0016a20072802f802220820072802800310d90220072d00a0012105200741b8046a200741a0016a41017241d700109d081a024020054102460d00200741e0036a200741b8046a41d700109d081a0b024020072802fc02450d00200810350b2005417f6a41ff01714102490d01200741b8046a200741e7036a220b41d000109d081a200741a0016a41186a4200370300200741a0016a41106a220c4200370300200741a0016a41086a22054200370300200742003703a00141d1c4c700ad4280808080e000841001220829000021092005200841086a290000370300200720093703a0012008103541e7c4c700ad4280808080e00084100122082900002109200741b0026a41086a220d200841086a290000370300200720093703b00220081035200c20072903b0022209370300200741f8026a41086a22082005290300370300200741f8026a41106a22052009370300200741f8026a41186a220c200d290300370300200720072903a0013703f8022007200741f8026a412010c001200741b0026a20022007280204410020072802001b220e4100200741b8046a10f603200741a0016a200b41d000109d081a200c200741b0026a41186a2903003703002005200741b0026a41106a2903003703002008200d290300370300200720072903b0023703f802200741206a2002200741a0016a200e200741f8026a10f70320072d002021050c020b200041003a0004200041013602002000410c6a4129360200200041086a41c4baca00360200200041106a2006290200370200200041186a200641086a2802003602000c0b0b200720053a0020200741206a410172200741e0036a41d700109d081a0b200541037122084103460d0220080e03010201010b200041003a0004200041013602002000410c6a4123360200200041086a41edbaca00360200200041106a2006290200370200200041186a200641086a2802003602000c080b200741f8006a41186a200141e8006a29000037030020074188016a200141e0006a290000370300200741f8006a41086a200141d8006a2900003703002007200129005037037841002108024002400240200541ff0171220541024d0d000c010b024020050e03000102000b200741c0006a2802002205417f4c0d032007413c6a280200210e200741206a41186a280200210c0240024020050d004100210d410121080c010b200510332208450d052005210d0b02400240200d2005490d00200d210b0c010b200d410174220b2005200b20054b1b220b4100480d060240200d0d00200b103322080d010c0a0b200d200b460d002008200d200b10372208450d090b2008200c2005109d081a2005ad422086200bad842109200e450d00200c10350b200741086a41086a2903002104200729030821030b200741dc016a4100360200200741cc016a41d8b9ca00360200200741c4016a4100360200200741a0016a41106a2009370300200741f8016a200241086a29000037030020074180026a200241106a29000037030020074188026a200241186a290000370300200720013602a801200741a0016a41286a200141186a220f360200200742083702d401200742003703b801200720083602ac01200720022900003703f001200720012802483602e801200720012903403703e0012007200128023041016a3602d001200129030021092007200128024c3602ec01200720093703a00120074180046a200741f8006a41086a290300370300200741e0036a41286a200741f8006a41106a29030037030020074190046a200741f8006a41186a290300370300200741f4036a200641086a280200360200200720023602e803200720072903783703f803200720062902003702ec0320072007411c6a3602e4032007200741086a3602e003200741e0036a41186a211002400240200320048450450d00410021060c010b200741b8046a200728021c41002010200220032004200741a0016a10bf05024020072d00b8044104460d00200720072900ed033703a0022007200741f4036a2800003600a70220072d00ec03210520072902bc04210320072802b80421060c070b20072802b801210620072802e80321020b200641016a220e41004c0d042007200e3602b801024002400240200741bc016a280200220b450d00200741a0016a41206a280200210c0340200b41086a2105200b2f010622114105742106410021080240024003402006450d0120022005412010a008220d450d02200641606a2106200841016a2108200541206a2105200d417f4a0d000b2008417f6a21110b200c450d02200c417f6a210c200b20114102746a41880b6a280200210b0c010b0b200b200841e0006c6a220541e8026a210602400240200541c5036a2d00000d00200741b8046a41086a2208200641c5006a290000370300200741b8046a41106a220d200641cd006a290000370300200741b8046a41186a220b200641d5006a29000037030020072006413d6a2900003703b8044102210520062d003c4101470d01200741f8026a41186a200b290300370300200741f8026a41106a200d290300370300200741f8026a41086a2008290300370300200720072903b8043703f802410121050c010b20074180036a200641c5006a29000037030020074188036a200641cd006a29000037030020074190036a200641d5006a29000037030020072006413d6a2900003703f80220062d003c21050b200541ff01714102470d010b200741b0026a20072802c801200220072802cc0128021011040020072802b801210e20072d00b00221050c010b200741b9026a20074180036a290300370000200741c1026a20074188036a290300370000200741c9026a20074190036a290300370000200720053a00b002200720072903f8023700b1020b2007200e417f6a3602b8014101210602400240200541ff01714101470d00200741d8026a41186a200741c9026a290000370300200741d8026a41106a200741c1026a290000370300200741d8026a41086a200741b9026a290000370300200720072900b1023703d802200741b8046a200741d8026a20072802e80128020010a306024020072802b8044101470d00200720072900ed033703a0022007200741f4036a2800003600a70220072902bc04210320072d00ec032105410021060c080b200741b0036a41186a2205200741b8046a410472220641186a2802002202360200200741f8026a41106a200641086a290200370300200741f8026a41186a200641106a29020037030020074198036a2002360200200741043602fc02200741fbd5cb003602f802200720062902003703800320072802e40121062005201041186a2900002203370300200741b0036a41106a2202201041106a2900002204370300200741b0036a41086a2208201041086a2900002209370300200741e0046a2009370300200741e8046a2004370300200741f0046a20033703002007201029000022033703b003200720033703d80420072802e003220d41086a29030021032007200741a0016a3602d004200d290300210420072903a001210920072802ec01210d200720033703c004200720043703b8042007200d3602d404200720093703c804200741d0036a41086a200741ec036a220d41086a2802003602002007200d2902003703d003200741b0036a2006200741f8026a200741b8046a200741d0036a20072802e403280200109a05200720072900c1033703a003200720052800003600a7032008290300210320022d0000210520072802b4032106024020072802b0034101470d00200720072800a7033600a702200720072903a0033703a00220074190036a280200450d082007418c036a28020010350c080b200720072d00a2033a00a202200720072f01a0033b01a00220074190036a280200450d012007418c036a28020010350c010b4200210341002105200741f0036a280200450d0020072802ec0310350b200720072903a0022204370390022007419c016a41026a221120072d0092023a0000200720043d019c01200741c0016a280200210220072802dc01210d20072802d801210c20072802d401210820072802c401210e20072802bc01210b024020072802ac012210450d00200741b0016a280200450d00201010350b200741b8046a41026a20112d00003a0000200720072f019c013b01b80402400240200541ff01710d002007200e3602a801200720023602a4012007200b3602a001200f200741a0016a109504200141346a2001413c6a2205280200200d41d8026c220241d8026d220d1095012001280234200528020041d8026c6a20082002109d081a20052005280200200d6a3602000240200c450d00200c41d8026c450d00200810350b20002006360204200020072f01b8043b0011200041106a41003a0000200041086a2003370200200041136a200741ba046a2d00003a00000c010b20002006360204200020072f01b8043b0011200041106a20053a0000200041086a2003370200200041136a200741ba046a2d00003a00000240200d450d00200d41d8026c210d41002106034002400240200820066a22052d0000220141014b0d000240024020010e020001000b0240200541086a28020041ffffff3f71450d00200541046a28020010350b200541106a2d00004107470d02200541386a280200450d02200541346a28020010350c020b200541286a10bb020c010b200541e8006a28020041ffffff3f71450d00200541e4006a28020010350b200d200641d8026a2206470d000b0b0240200c450d00200c41d8026c450d00200810350b02400240200b0d004100210e200741b4016a4100360200200741003602a4010c010b0240024020020d00200b21060c010b20022106200b2105034020052802880b21052006417f6a22060d000b200b21060340200620062f01064102746a41880b6a28020021062002417f6a22020d000b2005210b0b200741bc016a20062f0106360200200741b8016a4100360200200741b4016a2006360200200741003602b001200742003703a8012007200b3602a401200741003602a0010b2007200e3602c001200741a0016a108f030b200041003602000c070b200041003a0004200041013602002000410c6a4119360200200041086a4190bbca00360200200041106a2006290200370200200041186a200641086a280200360200200541ff01710d062007413c6a280200450d06200741386a28020010350c060b1044000b1045000b103e000b41ac96cc004118200741b8046a41d8c1c30041d496cc001046000b200720072903a00237039002200720072800a70236009702200041106a20053a0000200041086a2003370200200020063602042000200729039002370011200041186a20072800970236000020004101360200024020072802ac012200450d00200741a0016a41106a280200450d00200010350b0240024020072802bc0122010d0041002102200741cc046a4100360200200741003602bc040c010b20072802c401210202400240200741c0016a28020022060d00200121000c010b2006210020012105034020052802880b21052000417f6a22000d000b200121000340200020002f01064102746a41880b6a28020021002006417f6a22060d000b200521010b200741d4046a20002f0106360200200741d0046a4100360200200741cc046a2000360200200741003602c804200742003703c004200720013602bc04200741003602b8040b200720023602d804200741b8046a108f03024020072802dc012200450d0020072802d4012101200041d8026c210241002100034002400240200120006a22062d0000220541014b0d000240024020050e020001000b0240200641086a28020041ffffff3f71450d00200641046a28020010350b200641106a2d00004107470d02200641386a280200450d02200641346a28020010350c020b200641286a10bb020c010b200641e8006a28020041ffffff3f71450d00200641e4006a28020010350b2002200041d8026a2200470d000b0b20072802d8012200450d01200041d8026c450d0120072802d40110350c010b103c000b20074190056a24000ba6480d077f017e047f067e047f047e0d7f067e107f027e057f027e0a7f230041b0056b2202240020024190016a42003703002002420037038801200242003703800102400240200128020022030d004100210141002103410021040c010b2001280208210402400240200128020422050d00200321010c010b2005210120032106034020062802880b21062001417f6a22010d000b200321010340200120012f01064102746a41880b6a28020021012005417f6a22050d000b200621030b20012f010621050b20024188016a2107200241b4016a2005360200200241b0016a4100360200200241ac016a2001360200200220043602b801200241003602a801200242003703a0012002200336029c012002410036029801024002400240024002402004450d0020022004417f6a3602b80102402003450d000240024020032f0106450d004100210841002106410021050c010b4100210641002105034002400240200328020022010d002005ad2109410021010c010b200641016a210620033301044220862005ad8421090b200310352009a72105200121032009422088a7220820012f01064f0d000b200121030b20024190056a41186a220a200320084105746a220141206a29000037030020024190056a41106a220b200141186a29000037030020024190056a41086a220c200141106a2900003703002002200141086a290000370390052003200841e0006c6a220141a4036a2d0000210d200141a0036a280200210420014198036a290300210e20014190036a290300210f20014188036a290300211020014180036a2903002111200141f8026a2903002112200141f0026a2903002113200141e8026a290300210920024180046a41186a2214200141bd036a29000037030020024180046a41106a2215200141b5036a29000037030020024180046a41086a2216200141ad036a2900003703002002200141a5036a29000037038004200841016a2108200141c5036a2d0000211702402006450d00200320084102746a41880b6a2802002103410021082006417f6a2201450d00034020032802880b21032001417f6a22010d000b0b200241e0026a41186a200a290300370300200241e0026a41106a200b290300370300200241e0026a41086a200c290300370300200241d0036a41086a2016290300370300200241d0036a41106a2015290300370300200241d0036a41186a201429030037030020022002290390053703e00220022002290380043703d003200220083602a401200220053602a0012002200336029c01200241003602980120094202510d0120024190056aad42808080808004842118200241d0036aad42808080808004842119200241e0026aad4280808080800284211a20024180046aad4280808080800484211b200241b4046a211c20024190056a41106a210820024180046a41106a211d20024189046a211e20024180046a41086a211f20024180046a412c6a2120200241e0026a412c6a2121200241e0026a41106a212220024188036a2123200241b8046a212402400340200241e0016a41186a2203200241e0026a41186a2225290300370300200241e0016a41106a22012022290300370300200241e0016a41086a2205200241e0026a41086a2226290300370300200241c0016a41086a2206200241d0036a41086a220b290300370300200241c0016a41106a220a200241d0036a41106a220c290300370300200241c0016a41186a2215200241d0036a41186a2214290300370300200220022903e0023703e001200220022903d0033703c00120024180026a41186a2216200329030037030020024180026a41106a2227200129030037030020024180026a41086a22282005290300370300200220022903e00137038002200241a0026a41186a22012015290300370300200241a0026a41106a2205200a290300370300200241a0026a41086a220a2006290300370300200220022903c0013703a00202402017ad42ff0183200920095022031b4201520d0020024200201220031b3703d80320024200201320031b3703d003200220024180026a36029005200241e0026a20024180026a200241d0036a20024190056a10880442022109024020022903e00222294202510d0020232903002113200229038003211220022903f802210920294201520d0020022903e802212920242022290300370300201e200229038002370000201e41086a2028290300370000201e41106a2027290300370000201e41186a2016290300370000200220293703b004200241003a008804200241033a00800441b0b4cc00410020024180046a10d4010b42002013200942025122031b21134200201220031b21124200200920031b2109024020030d0020024190056a41186a220642003703002008420037030020024190056a41086a22034200370300200242003703900541b6fdc600ad4280808080800184222910012215290000212a2026201541086a2900003703002002202a3703e0022015103520032026290300370300200220022903e0023703900541e489c200ad4280808080d00184222a10012215290000212b2026201541086a2900003703002002202b3703e00220151035200820022903e002370000200841086a22272026290300370000201f2003290300370300201d200829030037030020024180046a41186a22282006290300370300200220022903900537038004200241e8006a20024180046a412010d701200241e8006a41106a290300212b2002290370212c20022802682115200642003703002008420037030020034200370300200242003703900520291001221629000021292026201641086a290000370300200220293703e0022016103520032026290300370300200220022903e00237039005202a1001221629000021292026201641086a290000370300200220293703e00220161035200820022903e00237000020272026290300370000201f2003290300370300201d2008290300370300202820062903003703002002200229039005370380042002202b420020151b3703e8022002202c420020151b3703e002201b201a10020b200241d0006a20022903800120022903880120024180016a41106a22032903002009201220131091032003200241d0006a41106a290300370300200220022903583703880120022002290350370380010b200e422088210902400240024002400240024002400240024002400240024002400240200d41ff017122154101460d00201741ff01710d0020042011a772450d010b200241d0036a20024180026a10f30320024180046a20022802d003220620022802d80310d9022026201c41086a2900003703002022201c41106a2900003703002025201c41186a2900003703002002201c2900003703e002024020022d00800422034102460d00201d290300212d200229038804212e20022802b004212f20022802ac04213020022802a804213120022802a404213220022802a0042133200228029c042134200228029804213520024190056a41086a20262903003703002008202229030037030020024190056a41186a2025290300370300200220022903e0023703900520022802d40421360b024020022802d403450d00200610350b024002402003410371417f6a220641014b0d0041022137024020060e020002000b20030d0d2034450d0d203510350c0d0b200241c0026a41186a20024190056a41186a290300370300200241c0026a41106a2008290300370300200241c0026a41086a20024190056a41086a29030037030020022002290390053703c00220362138202f2139203021372031213a2032213b2033213c2034213d2035213e202e213f202d21400b4102210641022141024020374102460d00203c417f4c0d0202400240203c0d0041002103410121420c010b203c10332242450d04203c21030b024002402003203c490d00200321430c010b20034101742206203c2006203c4b1b22434100480d05024020030d002043103322420d010c070b20032043460d0020422003204310372242450d060b2042203e203c109d081a20024180046a41186a200241c0026a41186a290300370300201d200241c0026a41106a290300370300201f200241c0026a41086a290300370300200220022903c0023703800420374101462141203c214420372106203b2145203f214620402147203a2148203921490b200241b0036a41186a224a2001290300370300200241b0036a41106a224b2005290300370300200241b0036a41086a224c200a290300370300200b201f290300370300200c201d290300370300201420024180046a41186a2203290300370300200220022903a0023703b00320022002290380043703d003201741ff0171450d060c050b02400240200ea722030d0041002104200241003602940420024100360284040c010b024002402009a722050d00200321010c010b2005210620032101034020012802ec0321012006417f6a22060d000b0340200320032f01064102746a41ec036a28020021032005417f6a22050d000b0b200241003602980420024100360290042002420037038804200220013602840420024100360280042002200336029404200220032f010636029c040b200220043602a00420024180046a1081030c0b0b1044000b1045000b103e000b103c000b20414102460d010240200d4101710d0020024180046a2042204410f4032002350288044220862002280280042203ad8410110240200228028404450d00200310350b20024180046a20024180026a10f3032002350288044220862002280280042203ad8410070240200228028404450d00200310350b02402043450d00204210350b203721060c030b20024180046a2042204410f4032002350288044220862002280280042206ad8410110240200228028404450d00200610350b200241f0036a20024180026a10890420034200370300201d42003703004108211620024180046a41086a22064200370300200242003703800441d1c4c700ad4280808080e000841001221729000021122006201741086a29000037030020022012370380042017103541e7c4c700ad4280808080e0008410012217290000211220024180056a41086a220d201741086a290000370300200220123703800520171035201d200229038005370000201d41086a200d29030037000020024190056a41086a20062903003703002008201d29030037030020024190056a41186a2003290300370300200220022903800437039005200241c8006a20024190056a412010c001200228024c210620022802482117202241086a200241f0036a41086a280200360200202220022903f003370200202120022903b003370100202141086a200241b0036a41086a290300370100202141106a204b290300370100202141186a204a290300370100427f21132002427f3703e8022002427f3703e002200241083602fc0241002141200241003602840320022006410020171b224d36028003024020430d00427f21290c050b20421035427f2113427f21290c040b20414102470d020b200d410171450d00200241f0036a20024180026a10890420034200370300201d42003703004108211620024180046a41086a22064200370300200242003703800441d1c4c700ad4280808080e000841001221729000021122006201741086a29000037030020022012370380042017103541e7c4c700ad4280808080e0008410012217290000211220024180056a41086a220d201741086a290000370300200220123703800520171035201d200229038005370000201d41086a200d29030037000020024190056a41086a20062903003703002008201d29030037030020024190056a41186a2003290300370300200220022903800437039005200241c0006a20024190056a412010c0012002280244210620022802402117202241086a200241f0036a41086a280200360200202220022903f003370200202120022903b003370100202141086a200241b0036a41086a290300370100202141106a204b290300370100202141186a204a290300370100427f21132002427f3703e8022002427f3703e002200241083602fc0241002141200241003602840320022006410020171b224d36028003427f21290c020b20064102460d020240203d0d004100213d0c030b203e10350c020b202120022903d003370200202141086a200b290300370200202141106a200c290300370200202141186a2014290300370200200220463703e002200220493602880320022041360284032002204836028003200220453602fc02200220443602f802200220433602f402200220423602f002200220473703e8022048214d2046211320472129204521160b024020114201520d00200220103703e0022002200f3703e80220102113200f21290b02402015450d00202120022903a002370000202141186a2001290300370000202141106a2005290300370000202141086a200a2903003700000b200ea7210102402004450d0020034200370300201d4200370300201f4200370300200242003703800441d1c4c700ad4280808080e0008410012205290000210e201f200541086a2900003703002002200e370380042005103541e7c4c700ad4280808080e0008410012205290000210e20024180056a41086a2206200541086a2900003703002002200e3703800520051035201d200229038005370000201d41086a200629030037000020024190056a41086a201f2903003703002008201d29030037030020024190056a41186a2003290300370300200220022903800437039005200241386a20024190056a412010c0014101214120024101360284032002200228023c410020022802381b360288030b0240024020010d004100210341002101410021040c010b024002402009a722050d00200121030c010b2005210620012103034020032802ec0321032006417f6a22060d000b0340200120012f01064102746a41ec036a28020021012005417f6a22050d000b0b20012f0106214e0b200220043602a0042002204e36029c0420024100360298042002200136029404200241003602900420024200370388042002200336028404200241003602800402402004450d0020022004417f6a22153602a00402402003450d000240024020032f0106450d004100210d41002106410021050c010b4100210641002105034002400240200328020022010d002005ad2109410021010c010b200641016a210620033301044220862005ad8421090b200310352009a72105200121032009422088a7220d20012f01064f0d000b200121030b20024190056a41186a22172003200d4105746a220141206a2900003703002008200141186a29000037030020024190056a41086a220a200141106a2900003703002002200141086a29000037039005200d41016a21042003200d410c6c6a220141f0026a2802002127200141ec026a280200214f200141e8026a280200210d02402006450d00200320044102746a41ec036a2802002103410021042006417f6a2201450d00034020032802ec0321032001417f6a22010d000b0b20142017290300370300200c2008290300370300200b200a29030037030020022002290390053703d0032002200436028c0420022005360288042002200336028404200241003602800420022802f802212820022802f00221500340204a20142903002209370300204b200c290300220e370300204c200b2903002211370300200220022903d00322123703b00320142009370300200c200e370300200b2011370300200220123703d00320024180056a2050202810f40320191009220141086a2900002109200141106a290000210e200129000021112017200141186a2900003703002008200e370300200a2009370300200220113703900520011035200241f0036a2002350288054220862002280280052201ad842018101010c201024020022802f0032206450d00201620022802f8036b211620022802f403450d00200610350b0240200228028405450d00200110350b02400240200d450d0020024180056a2050202810f40320191009220141086a2900002109200141106a290000210e200129000021112017200141186a2900003703002008200e370300200a20093703002002201137039005200110352002350288054220862002280280052201ad8420182027ad422086200dad8410120240200228028405450d00200110350b201620276a2116204f450d01200d10350c010b20024180056a2050202810f40320191009220141086a2900002109200141106a290000210e200129000021112017200141186a2900003703002008200e370300200a20093703002002201137039005200110352002350288054220862002280280052201ad8420181013200228028405450d00200110350b024020150d00200220163602fc020c030b20022015417f6a22153602a00402402003450d00410021060240200420032f0106490d00034002400240200328020022010d002005ad2109410021010c010b200641016a210620033301044220862005ad8421090b200310352009a72105200121032009422088a7220420012f01064f0d000b200121030b2017200320044105746a220141206a2900003703002008200141186a290000370300200a200141106a2900003703002002200141086a29000037039005200441016a215120032004410c6c6a220141f0026a2802002127200141ec026a280200214f200141e8026a280200210d0240024020060d00205121040c010b200320514102746a41ec036a2802002103410021042006417f6a2201450d00034020032802ec0321032001417f6a22010d000b0b20142017290300370300200c2008290300370300200b200a29030037030020022002290390053703d0032002200436028c042002200536028804200220033602840420024100360280040c010b0b41958dcc00412b41c08dcc00103f000b41958dcc00412b41c08dcc00103f000b20024180046a10810320024190056a41186a2203200241c0026a41186a2903003703002008200241c0026a41106a29030037030020024190056a41086a2201200241c0026a41086a290300370300200220022903c002370390050240024020374102460d002020200229039005370200202041086a2001290300370200202041106a2008290300370200202041186a20032903003702002002203f37038004200220393602a804200220373602a4042002203a3602a0042002203b36029c042002203d360294042002203e36029004200220383602cc0420022040370388042002203c36029804410121030240203c20022802f802470d000240024020022802f0022201203e460d00203e2001203c10a0080d02203b2016470d020c010b203b2016470d010b20202021412010a0080d00203f2013852040202985844200520d00203a204d470d00024020372041470d004100210320374101470d012039200228028803460d010b410121030b0240203d450d00203e10350b20034102460d002003450d010b201f200241e0026a41d000109d081a200241003a00800420024190056a20024180026a10f303200228029005210320022002280298053602d403200220033602d00320024180046a200241d0036a108a040240200228029405450d00200310350b200228029c04450d0220022802980410350c020b20022802f402450d0120022802f00210350c010b02400240200ea722030d0041002104200241003602940420024100360284040c010b024002402009a722050d00200321010c010b2005210620032101034020012802ec0321012006417f6a22060d000b0340200320032f01064102746a41ec036a28020021032005417f6a22050d000b0b200241003602980420024100360290042002420037038804200220013602840420024100360280042002200336029404200220032f010636029c040b200220043602a00420024180046a1081030b024020022802b8012203450d0020022003417f6a3602b801200228029c012203450d0220022802a00121052002280298012106024020022802a401220420032f0106490d00034002400240200328020022010d002005ad2109410021010c010b200641016a210620033301044220862005ad8421090b200310352009a72105200121032009422088a7220420012f01064f0d000b200121030b20024190056a41186a2215200320044105746a220141206a2900003703002008200141186a29000037030020024190056a41086a2216200141106a2900003703002002200141086a29000037039005201f2003200441e0006c6a220141ad036a290000370300201d200141b5036a29000037030020024180046a41186a2227200141bd036a2900003703002002200141a5036a29000037038004200441016a210a20014190036a290300210f20014188036a2903002110200141f8026a2903002112200141f0026a2903002113200141c5036a2d00002117200141a4036a2d0000210d200141a0036a280200210420014198036a290300210e20014180036a2903002111200141e8026a290300210902402006450d002003200a4102746a41880b6a28020021034100210a2006417f6a2201450d00034020032802880b21032001417f6a22010d000b0b202520152903003703002022200829030037030020262016290300370300200b201f290300370300200c201d2903003703002014202729030037030020022002290390053703e00220022002290380043703d0032002200a3602a401200220053602a0012002200336029c01200241003602980120094202520d010b0b200229038001210920024198016a108f0320024180046a2104200950450d040c030b41958dcc00412b41c08dcc00103f000b41958dcc00412b41c08dcc00103f000b20024198016a108f030b024020022903880120024190016a29030084500d0041a1c2c300413341c086cc00103f000b200229038001500d0120024180046aad4280808080800484211b20024180046a21040b200220073602980120024190056a41186a2208420037030020024190056a41106a2205420037030020024190056a41086a22014200370300200242003703900541b6fdc600ad42808080808001842218100122062900002109200241e0026a41086a2203200641086a290000370300200220093703e0022006103520012003290300370300200220022903e0023703900541e489c200ad4280808080d0018422191001220629000021092003200641086a290000370300200220093703e00220061035200520022903e002220937030020024180046a41086a2217200129030037030020024180046a41106a220a200937030020024180046a41186a220b2003290300370300200220022903900537038004200241206a2004412010d701200241206a41106a290300210e200229032821112002280220210620024180016a41106a29030021122002290388012109200842003703002005420037030020014200370300200242003703900520181001220429000021182003200441086a290000370300200220183703e0022004103520012003290300370300200220022903e0023703900520191001220429000021182003200441086a290000370300200220183703e00220041035200520022903e002221837030020172001290300370300200a2018370300200b200329030037030020022002290390053703800420024200200e420020061b221820127d2011420020061b2219200954ad7d220e201920097d2209201956200e201856200e2018511b22031b3703e80220024200200920031b3703e002201b200241e0026aad428080808080028410020c010b200220073602980120024190056a41186a2204420037030020024190056a41106a2205420037030020024190056a41086a22014200370300200242003703900541b6fdc600ad42808080808001842209100122062900002118200241e0026a41086a2203200641086a290000370300200220183703e0022006103520012003290300370300200220022903e0023703900541e489c200ad4280808080d0018422181001220629000021192003200641086a290000370300200220193703e00220061035200520022903e002221937030020024180046a41086a2208200129030037030020024180046a41106a2217201937030020024180046a41186a220a2003290300370300200220022903900537038004200241086a20024180046a412010d701200241086a41106a29030021192002290310210e2002280208210620024180016a41106a29030021112002290388012112200442003703002005420037030020014200370300200242003703900520091001220429000021092003200441086a290000370300200220093703e0022004103520012003290300370300200220022903e0023703900520181001220429000021092003200441086a290000370300200220093703e00220041035200520022903e00222093703002008200129030037030020172009370300200a20032903003703002002200229039005370380042002427f20112019420020061b22097c2012200e420020061b22187c22192018542203ad7c22182003201820095420182009511b22031b3703e8022002427f201920031b3703e00220024180046aad4280808080800484200241e0026aad428080808080028410020b200241b0056a24000b9c3b040f7f017e017f067e230041d0046b2207240020074198026a200110f303200741d0036a200728029802220820072802a00210d902200741f8026a41086a2209200741da036a290100370300200741f8026a410e6a220a200741d0036a41106a290000370100200741a0036a41086a220b20074188046a290300370300200741a0036a41106a220c20074190046a290300370300200741a0036a41186a220d20074198046a290300370300200741a0036a41206a220e200741a0046a290300370300200720072901d2033703f8022007200741f1036a290000370390032007200741f8036a28000036009703200720074180046a2903003703a003200741d0036a41206a2d0000210f200741ec036a2802002110200741d0036a41186a28020021110240024020072d00d00322124102460d00200741fc036a2802002113200741e0026a410e6a200a290100370100200741e0026a41086a2009290300370300200741a8026a41086a200b290300370300200741a8026a41106a200c290300370300200741a8026a41186a200d290300370300200741a8026a41206a200e290300370300200720072903f8023703e00220072007290390033703d00220072007280097033600d702200720072903a0033703a8020240200728029c02450d00200810350b200741f8026a41086a200741e0026a41086a290300370300200741f8026a410e6a2209200741e0026a410e6a290100370100200741a0036a41086a220b200741a8026a41086a290300370300200741a0036a41106a220c200741a8026a41106a290300370300200741a0036a41186a220d200741a8026a41186a290300370300200741a0036a41206a220e200741a8026a41206a290300370300200720072903e0023703f802200720072903d00237039003200720072800d70236009703200720072903a8023703a003410221084102210a024020120d0020074198026a41086a2009290100370300200741d0036a41086a200b290300370300200741d0036a41106a200c290300370300200741d0036a41186a200d290300370300200741d0036a41206a200e290300370300200720072901fe0237039802200720072903900337038802200720072800970336008f02200720072903a0033703d0032013210a0b41012109200a4102460d01200741b6026a20074198026a41086a290300370100200741a0036a41086a200741d0036a41086a290300370300200741a0036a41106a200741d0036a41106a290300370300200741a0036a41186a200741d0036a41186a290300370300200741a0036a41206a200741d0036a41206a29030037030020072007290398023701ae0220072007290388023703f8022007200728008f023600ff02200720072903d0033703a00341002109200a21080c010b0240200728029c02450d00200810350b41012109410221080b200741f0016a41086a200741a8026a41086a220a290100370300200741f0016a410e6a220b200741a8026a410e6a290100370100200741b8016a41086a220c200741a0036a41086a220d290300370300200741b8016a41106a220e200741a0036a41106a2212290300370300200741b8016a41186a2213200741a0036a41186a2214290300370300200741b8016a41206a2215200741a0036a41206a290300370300200720072901a8023703f001200720072903f8023703e001200720072800ff023600e701200720072903a0033703b8010240024002400240024020090d00200741e8006a41186a200f3a0000200741fc006a2010360200200741e8006a41206a20072800e701360000200741e8006a41286a220f20072903b801370300200741e8006a41086a200b290100370300200741e8006a41306a200c290300370300200741e8006a41386a200e290300370300200741e8006a41c0006a2013290300370300200741e8006a41c8006a2015290300370300200720072901f60137036820072011360278200720072903e001370081012007200836028c01200741d0036a41186a4200370300200741d0036a41106a220c4200370300200741d0036a41086a22094200370300200742003703d00341d1c4c700ad4280808080e000841001220b29000021162009200b41086a290000370300200720163703d003200b103541e7c4c700ad4280808080e000841001220b2900002116200a200b41086a290000370300200720163703a802200b1035200c20072903a8022216370300200d2009290300370300201220163703002014200a290300370300200720072903d0033703a003200741e0006a200741a0036a412010c0012007280264410020072802601b210c20084101470d01200f280200200c470d0120004183243b0100200041086a4115360200200041046a41d880c700360200200041026a41053a00000c020b20004183243b0100200041086a4115360200200041046a41fcffc600360200200041026a41023a00000c020b200741f0016a200210f303200741d0036a20072802f001220820072802f80110d902200741f8026a41086a2209200741da036a290100370300200741f8026a410e6a220a200741d0036a41106a290000370100200741a0036a41086a200741d0036a41386a290300370300200741a0036a41106a200741d0036a41c0006a290300370300200741a0036a41186a200741d0036a41c8006a290300370300200741a0036a41206a200741a0046a290300370300200720072901d2033703f8022007200741f1036a290000370390032007200741d0036a41286a280000360097032007200741d0036a41306a2903003703a00302400240024020072d00d003220b4102460d00200741d0036a41206a2d0000210f200741ec036a280200210d200741d0036a41186a280200210e20072d00d1032110200741a8026a410e6a200a290100370100200741a8026a41086a2009290300370300200720072903f8023703a802024020072802f401450d00200810350b200741d0036a410e6a2208200741a8026a410e6a290100370100200741d0036a41086a2209200741a8026a41086a290300370300200720072903a8023703d003200b0d02200d450d01200e10350c010b20072802f401450d00200810350b20004183243b0100200041086a411a360200200041046a419c80c700360200200041026a41033a00000c010b200741e0026a410e6a220a2008290100370100200741e0026a41086a220b2009290300370300200741c1016a200b290300370000200741c7016a200a290100370000200720103a00b801200720072903d0033700b9012007200f3a00d7012007200d3600d3012007200e3600cf01200641086a2802002113200728028c01211520072802900121172007200628020022143602e00220072014201341057422096a3602e4022007200741e8006a3602e802024002400240024002400240024002402013450d002014210803402007200841206a220a3602e002200741d0036a200b200810800620072802d00322080d02200a2108200941606a22090d000b0b4104210d41002109410021110c010b200741a0036a41086a2211200741d0036a410c6a280200360200200720072902d4033703a00341101033220d450d01200d2008360200200d20072903a003370204200d410c6a201128020036020020074281808080103702fc022007200d3602f8022011200741e0026a41086a280200360200200720072903e00222163703a00302402016a7220820072802a4032209470d0041012109410121110c010b200741d0036a410472210f200941606a211241012109024003402007200841206a220a3602a003200741d0036a20112008108006024020072802d003220e0d002012200846210b200a2108200b450d010c020b200741a8026a41086a200f41086a280200220b3602002007200f29020022163703a802200741d0036a41086a2210200b360200200720163703d0030240200920072802fc02470d00200741f8026a20094101108c0120072802f802210d0b200d20094104746a220b200e360200200b20072903d003370204200b410c6a20102802003602002007200941016a2209360280032012200847210b200a2108200b0d000b0b20072802fc0221110b200741a0036a200728027820072802800110f4030240024020073502a80342208620072802a0032212ad8410212216422088a7220f0d00410121100c010b2016a721100b200741003602d803200742013703d0032010200f200741d0036a1097030240024020072802d403220b20072802d80322086b4120490d0020072802d003210a200b210e0c010b200841206a220a2008490d02200b410174220e200a200e200a4b1b220e4100480d0202400240200b0d000240200e0d004101210a0c020b200e1033220a0d010c070b20072802d003210a200b200e460d00200a200b200e1037220a450d060b2007200e3602d4032007200a3602d0030b200a20086a220b2003290000370000200b41186a200341186a290000370000200b41106a200341106a290000370000200b41086a200341086a2900003700002007200841206a22083602d8032008ad422086200aad84100922082900002116200841086a2900002118200841106a2900002119200741a8026a41186a200841186a290000370300200741a8026a41106a2019370300200741a8026a41086a2018370300200720163703a802200810350240200e450d00200a10350b0240200f450d00201010350b024020072802a403450d00201210350b0240200741a8026a200741b8016a412010a0080d000240024020090d004100210a0c010b2009410474210b200d410c6a21084100210a03402008280200200a6a210a200841106a2108200b41706a220b0d000b0b200741e8006a41106a2108200c201720131b210b4101201520131b210e2007200728028401200a6b36028401200741d0036a200110f30320073502d80342208620072802d003220aad841007024020072802d403450d00200a10350b200741d0036a41106a200537030020074180046a200b360200200741fc036a200e360200200741f8036a200c360200200741f4036a200728028401360200200741d0036a41186a2008290300370300200741f0036a200841086a28020036020020074184046a20032900003702002007418c046a200341086a29000037020020074194046a200341106a2900003702002007419c046a200341186a290000370200200720043703d803200741003a00d003200741a0036a200210f30320072802a0032108200720072802a8033602fc02200720083602f802200741d0036a200741f8026a108a04024020072802a403450d00200810350b0240200741ec036a280200450d0020072802e80310350b200741a0036a2001108e02200741d0036a20072802a003220820072802a803108f0220072903d0032105200741e0036a290300211620072903d8032118024020072802a403450d00200810350b200742003703f801200742003703f001200720013602f802200741a0036a2001200741f0016a200741f8026a1088040240024020072903a003221a4202520d00420221040c010b200741c8036a290300211b200741c0036a2903002119200741a0036a41186a2903002104201a4201520d0020072903a803211a20074188046a200741a0036a41106a29030037030020074180046a201a370300200741d0036a41086a41003a0000200741d9036a2001290000370000200741e1036a200141086a290000370000200741e9036a200141106a290000370000200741f1036a200141186a290000370000200741033a00d00341b0b4cc004100200741d0036a10d4010b200542015121014200201b200442025122081b211b4200201920081b21194200200420081b2104024020080d00200741d0036a41186a220e4200370300200741d0036a41106a220b4200370300200741d0036a41086a220a4200370300200742003703d00341b6fdc600ad428080808080018422051001220c290000211a200741e0026a41086a2208200c41086a2900003703002007201a3703e002200c1035200a2008290300370300200720072903e0023703d00341e489c200ad4280808080d00184221a1001220c290000211c2008200c41086a2900003703002007201c3703e002200c1035200b20072903e002221c370300200741a0036a41086a220f200a290300370300200741a0036a41106a2210201c370300200741a0036a41186a22122008290300370300200720072903d0033703a003200741c8006a200741a0036a412010d701200741c8006a41106a290300211c2007290350211d2007280248210c200e4200370300200b4200370300200a4200370300200742003703d00320051001220e29000021052008200e41086a290000370300200720053703e002200e1035200a2008290300370300200720072903e0023703d003201a1001220e29000021052008200e41086a290000370300200720053703e002200e1035200b20072903e0022205370300200f200a2903003703002010200537030020122008290300370300200720072903d0033703a0032007201c4200200c1b3703d8032007201d4200200c1b3703d003200741a0036aad4280808080800484200741d0036aad428080808080028410020b2016420020011b21052018420020011b2116200741f8026a41106a220b201b3703002007201937038003200720043703f802200741f8026a41086a21080240024020044200520d00200720083602f001200741d0036a41186a220e4200370300200741d0036a41106a220a4200370300200741d0036a41086a22014200370300200742003703d00341b6fdc600ad428080808080018422041001220c2900002118200741e0026a41086a2208200c41086a290000370300200720183703e002200c103520012008290300370300200720072903e0023703d00341e489c200ad4280808080d0018422181001220c29000021192008200c41086a290000370300200720193703e002200c1035200a20072903e0022219370300200741a0036a41086a220f2001290300370300200741a0036a41106a22102019370300200741a0036a41186a22122008290300370300200720072903d0033703a003200741186a200741a0036a412010d701200741186a41106a29030021192007290320211b2007280218210c200b290300211a200729038003211c200e4200370300200a420037030020014200370300200742003703d00320041001220b29000021042008200b41086a290000370300200720043703e002200b103520012008290300370300200720072903e0023703d00320181001220b29000021042008200b41086a290000370300200720043703e002200b1035200a20072903e0022204370300200f20012903003703002010200437030020122008290300370300200720072903d0033703a0032007427f201a20194200200c1b22047c201c201b4200200c1b22187c22192018542208ad7c22182008201820045420182004511b22081b3703d8032007427f201920081b3703d003200741a0036aad4280808080800484200741d0036aad428080808080028410020c010b200720083602f001200741d0036a41186a220e4200370300200741d0036a41106a220a4200370300200741d0036a41086a22014200370300200742003703d00341b6fdc600ad428080808080018422181001220c2900002104200741e0026a41086a2208200c41086a290000370300200720043703e002200c103520012008290300370300200720072903e0023703d00341e489c200ad4280808080d0018422191001220c29000021042008200c41086a290000370300200720043703e002200c1035200a20072903e0022204370300200741a0036a41086a220f2001290300370300200741a0036a41106a22102004370300200741a0036a41186a22122008290300370300200720072903d0033703a003200741306a200741a0036a412010d701200741306a41106a290300211b2007290338211a2007280230210c200b290300211c2007290380032104200e4200370300200a420037030020014200370300200742003703d00320181001220b29000021182008200b41086a290000370300200720183703e002200b103520012008290300370300200720072903e0023703d00320191001220b29000021182008200b41086a290000370300200720183703e002200b1035200a20072903e0022218370300200f20012903003703002010201837030020122008290300370300200720072903d0033703a00320074200201b4200200c1b2218201c7d201a4200200c1b2219200454ad7d221b201920047d2204201956201b201856201b2018511b22081b3703d80320074200200420081b3703d003200741a0036aad4280808080800484200741d0036aad428080808080028410020b200720163703f802200720053703800302400240201620058450450d0042002105420021160c010b200720023602e002200741a0036a2002200741f8026a200741e0026a10b002024020072903a0034201520d00200741b0036a290300211620072903a80321050c010b200741c8036a2903002116200741c0036a290300210520072903a8034201520d00200741a0036a41106a290300210420074188046a200741a0036a41186a29030037030020074180046a2004370300200741d0036a41086a41003a0000200741d9036a2002290000370000200741e1036a200241086a290000370000200741e9036a200241106a290000370000200741f1036a200241186a290000370000200741033a00d00341b0b4cc004100200741d0036a10d4010b200741d0036a41186a220c4200370300200741d0036a41106a220a4200370300200741d0036a41086a22014200370300200742003703d00341b6fdc600ad428080808080018422041001220b2900002118200741e0026a41086a2208200b41086a290000370300200720183703e002200b103520012008290300370300200720072903e0023703d00341e489c200ad4280808080d0018422181001220b29000021192008200b41086a290000370300200720193703e002200b1035200a20072903e0022219370300200741a0036a41086a220e2001290300370300200741a0036a41106a220f2019370300200741a0036a41186a22102008290300370300200720072903d0033703a0032007200741a0036a412010d701200741106a29030021192007290308211b2007280200210b200c4200370300200a420037030020014200370300200742003703d00320041001220c29000021042008200c41086a290000370300200720043703e002200c103520012008290300370300200720072903e0023703d00320181001220c29000021042008200c41086a290000370300200720043703e002200c1035200a20072903e0022204370300200e2001290300370300200f200437030020102008290300370300200720072903d0033703a0032007427f20194200200b1b220420167c201b4200200b1b221620057c22182016542208ad7c22052008200520045420052004511b22081b3703d8032007427f201820081b3703d003200741a0036aad4280808080800484200741d0036aad42808080808002841002200041043a000002402009450d0020094104742108200d41046a210003400240200041046a280200450d00200028020010350b200041106a2100200841706a22080d000b0b0240201141ffffffff0071450d00200d10350b200641046a28020041ffffff3f71450d08201410350c080b200d20094104746a210a024020090d00200d21080c030b200741d0036aad42808080808004842119200d210803400240200828020022090d00200841106a21080c040b200841086a280200210b200841046a28020021012008410c6a3502002104200741a0036a200728027820072802800110f4032009ad4280808080800484100922092900002105200941086a2900002116200941106a2900002118200741d0036a41186a200941186a290000370300200741d0036a41106a2018370300200741d0036a41086a2016370300200720053703d0032009103520073502a80342208620072802a0032209ad84201920044220862001ad841012024020072802a403450d00200910350b0240200b450d00200110350b200841106a2208200a470d000c040b0b1045000b103e000b200a2008460d000340200841106a21090240200841086a280200450d00200841046a28020010350b20092108200a2009470d000b0b0240201141ffffffff0071450d00200d10350b20004183243b0100200041086a4110360200200041046a41c080c700360200200041026a41043a00000c010b103c000b200728027c450d00200728027810350b200641046a28020041ffffff3f71450d00200628020010350b200741d0046a24000bd90e03087f037e027f23004180026b2202240041002103200241003a00b801200041b0b4cc0020011b210402400240024002400240034020012003460d0120024198016a20036a200420036a2d00003a00002002200341016a22003a00b8012000210320004120470d000b200241086a41186a20024198016a41186a290300370300200241086a41106a20024198016a41106a290300370300200241086a41086a20024198016a41086a290300370300200220022903980137030841002103200241003a00b801200420006a2104200120006b2101034020012003460d0220024198016a20036a200420036a2d00003a00002002200341016a22003a00b8012000210320004120470d000b200241286a41186a220320024198016a41186a2204290300370300200241286a41106a220020024198016a41106a290300370300200241286a41086a220120024198016a41086a2903003703002002200229039801370328200241c8006a41186a200241086a41186a290300370300200241c8006a41106a200241086a41106a290300370300200241c8006a41086a200241086a41086a29030037030020022002290308370348200241e8006a41186a2003290300370300200241e8006a41106a2000290300370300200241e8006a41086a200129030037030020022002290328370368200241f0016a200241c8006a10f30320024198016a20022802f001220020022802f80110d90220022802f401210320022d00980122014102460d02200241c4016a2802002105200241b8016a2802002106200241b4016a28020021072004280200210802402003450d00200010350b410121092001450d03410121040c040b0240200341ff0171450d00200241003a00b8010b200241ac016a4102360200200241f4006a41043602002002420237029c01200241f0b2c300360298012002410436026c200241f0b4c3003602682002410036024c200241b0b4cc003602482002200241e8006a3602a8012002200241c8006a36027020024198016a4180b3c300104c000b0240200341ff0171450d00200241003a00b8010b200241ac016a4102360200200241f4006a41043602002002420237029c01200241f0b2c300360298012002410436026c200241f0b4c3003602682002410036024c200241b0b4cc003602482002200241e8006a3602a8012002200241c8006a36027020024198016a4180b3c300104c000b02402003450d00200010350b41012104410021090c010b4101210420054102460d00200241f0016a2008200610f403200241e8006aad428080808080048410092203290000210a200341086a290000210b200341106a290000210c20024198016a41186a200341186a29000037030020024198016a41106a200c37030020024198016a41086a200b3703002002200a370398012003103520024188016a20023502f80142208620022802f0012203ad8420024198016aad4280808080800484101010c201024020022802f401450d00200310350b20024188016a41086a280200210d2002280288012101200228028c01210e4100210402402007450d00200810350b0b410121030240024002400240024002400240024020040d00200d41066a410220011b2203417f4c0d0220030d0041002103410121000c010b200310332200450d020b200241003602a00120022000360298012002200336029c0102402004450d00024020030d00410110332200450d052002410136029c0120022000360298010b200041013a0000200241013602a0012002280298012103200228029c0121000240200941ff01714101460d00024020004101470d0020034101410210372203450d062002410236029c0120022003360298010b200341003a0001200241023602a0010c060b024020004101470d0020034101410210372203450d052002410236029c0120022003360298010b200341013a0001200241023602a0010c050b024020030d00410110332200450d042002410136029c0120022000360298010b200041003a0000200241013602a0012002280298012103200228029c0121000240024020010d00024020004101470d0020034101410210372203450d062002410236029c0120022003360298010b200341003a0001200241023602a001428080808020210a0c010b024020004101470d0020034101410210372203450d052002410236029c0120022003360298010b200341013a0001200241023602a001200d20024198016a107702400240200228029c01220420022802a00122006b200d490d0020022802980121030c010b2000200d6a22032000490d04200441017422092003200920034b1b22094100480d040240024020040d00024020090d00410121030c020b2009103322030d010c070b200228029801210320042009460d0020032004200910372203450d060b2002200936029c0120022003360298010b200320006a2001200d109d081a20022000200d6a22003602a0012000ad422086210a0b200a2003ad84210a2001450d05200e450d05200110350c050b1044000b1045000b103e000b103c000b2003ad42808080802084210a0b20024180026a2400200a0bb10503027f017e047f230041d0006b2202240041f1d8cb00ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541abe0c600ad4280808080e00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb30101037f02400240024002402002417f4c0d000240024020020d0041002103410121040c010b200210332204450d02200221030b0240024020032002490d00200321050c010b200341017422052002200520024b1b22054100480d03024020030d002005103322040d010c050b20032005460d0020042003200510372204450d040b200420012002109d0821032000200236020820002005360204200020033602000f0b1044000b1045000b103e000b103c000ba70c04037f047e047f037e23004190046b2202240041002103200241003a008003200041b0b4cc0020011b210402400240024002400240034020012003460d01200241e0026a20036a200420036a2d00003a00002002200341016a22003a0080032000210320004120470d000b200241386a41186a200241e0026a41186a2903002205370300200241386a41106a200241e0026a41106a2903002206370300200241386a41086a200241e0026a41086a2903002207370300200220022903e0022208370338200241d8006a41186a2005370300200241d8006a41106a2006370300200241d8006a41086a200737030020022008370358200241d0016a200241d8006a10f303200241e0026a20022802d001220020022802d80110d90220022d00e0022103200241b8036a200241e0026a41017241d700109d081a024020034102460d00200241f8006a200241b8036a41d700109d081a0b024020022802d401450d00200010350b410121002003417f6a41ff01714102490d04200241d0016a200241ff006a220941d000109d081a200241e0026a41186a220a4200370300200241e0026a41106a22044200370300200241e0026a41086a22034200370300200242003703e00241d1c4c700ad4280808080e000841001220029000021052003200041086a290000370300200220053703e0022000103541e7c4c700ad4280808080e00084100122002900002105200241c0026a41086a2201200041086a290000370300200220053703c00220001035200420022903c0022205370300200241b8036a41086a2003290300370300200241b8036a41106a220b2005370300200241b8036a41186a2001290300370300200220022903e0023703b803200241306a200241b8036a412010c001200241a0026a200241d8006a2002280234410020022802301b220c4100200241d0016a10f603200241b8036a200941d000109d081a200241c0026a41186a200241a0026a41186a290300370300200241c0026a41106a200241a0026a41106a2903003703002001200241a0026a41086a290300370300200220022903a0023703c002200241e0026a200241d8006a200241b8036a200c200241c0026a10f703410121014101210020022d00e002417f6a41ff01714102490d03200429030021082003290300210d20024184036a2802002103200241fc026a2802002104200a2802002109200241c0026a200241d8006a108e02200241b8036a20022802c002220a20022802c802108f02200b290300420020022903b80342015122001b210620022903c003420020001b2105024020022802c402450d00200a10350b200241206a20052006428080a8ec85afd1b1014200109808200241106a42002003ad22072002290320220e7d220f200f2007564200200241206a41086a2903002007200e54ad7c7d22074200522007501b22031b220e4200200720031b2207428080e983b1de164200108408200e200784500d022005428080d287e2bc2d5441002006501b0d0120022005428080aef89dc3527c2207200d200d200756200820062007200554ad7c427f7c22055620082005511b22031b2005200820031b2002290310200241106a41086a29030010980820022903002205a7417f2005428080808010544100200241086a290300501b1b210302402004450d00200910350b2003200c6a210441002101410021000c040b0240200341ff0171450d00200241003a0080030b200241f4026a4102360200200241c4036a4104360200200242023702e402200241f0b2c3003602e002200241043602bc0320024184b5c3003602b8032002410036027c200241b0b4cc003602782002200241b8036a3602f0022002200241f8006a3602c003200241e0026a4180b3c300104c000b41c780ca00419b0141e481ca001064000b410021002004450d00200910350b0b02400240410110332203450d000240024002402000450d00200341013a000020034101410210372203450d04200341013a00010c010b200341003a000020034101410210372103024020014101460d002003450d04200341003a000120034102410610372203450d04200320043600024280808080e00021050c020b2003450d03200341013a00010b42808080802021050b20024190046a240020052003ad840f0b1045000b103c000bb90504017f017e017f057e23004190016b220524000240024041004100200220036b2203200320024b1b220220042802206b2203200320024b1b22030d00420021060c010b20054180016a2001108e02200541306a2005280280012207200528028801108f0242002106200541c0006a2903004200200529033042015122021b21082005290338420020021b21090240200528028401450d00200710350b200541206a20092008428080a8ec85afd1b101420010980842002004411c6a350200220a2005290320220b7d220c200c200a564200200541286a290300200a200b54ad7c7d220a420052200a501b22021b220b4200200a20021b220a844200510d00420121062009428080d287e2bc2d5441002008501b0d00200541106a2003ad4200200b200a10840820052005290310200541106a41086a290300428080e983b1de164200108408024002402009428080aef89dc3527c22062004290300220a200a200656200441086a290300220a20082006200954ad7c427f7c220656200a2006511b22041b220b2005290300220c200b200c542006200a20041b220a200541086a290300220b54200a200b511b22041b2206200a200b20041b220a8450450d00410121020c010b42002008200a7d2009200654ad7d220b200920067d220c200956200b200856200b2008511b22021b21094200200c20021b210b20054180016a2001108e02200541306a2005280280012203200528028801108f02200541e0006a2903004200200529033042015122021b2108200541d8006a290300420020021b210c0240200528028401450d00200310350b200c200b58200820095820082009511b21020b024020040d002002450d0020002006370308200041106a200a370300420321060c010b200041186a200a370300200041106a200637030020002002ad370308420221060b2000200637030020054190016a24000bbe1d05017f037e057f037e037f230041f0026b220524000240024002400240024002400240024020042802000e0401020300010b200441106a290300210620042903082107200541e0006a2003360200200541386a41186a2002290310370300200541e4006a2002290224370200200541d8006a200241186a290300370300200541386a41346a200229022c370200200541386a413c6a200241346a290200370200200541386a41c4006a2002413c6a29020037020020054184016a200241c4006a290200370200200541386a41106a200241086a29030020067d20022903002208200754ad7d37030041002102200541003a00382005200820077d370340200541e0016a200110f30320052802e0012104200520052802e80136029c012005200436029801200541386a20054198016a10f805024020052802e401450d00200410350b200541003a00df01200541083a009701200520013602d801200520073703e002200520063703e80202400240200720068450450d0042002107420021060c010b200520013602c8012005200541c8016a3602f001200520054197016a3602ec012005200541d8016a3602e8012005200541df016a3602e4012005200541e0026a3602e00120054198016a2001200541e0016a10dc034101210202402005280298014101470d004200210620052903a00121070c010b200541c0016a2903002106200541b8016a29030021074100210220052903a0014201520d0020054198016a41106a290300210820052802c801210120054198026a20054198016a41186a29030037030020054190026a200837030041002102200541e0016a41086a41003a0000200541e9016a2001290000370000200541f1016a200141086a290000370000200541f9016a200141106a29000037000020054181026a200141186a290000370000200541033a00e00141b0b4cc004100200541e0016a10d4010b024020020d00200520073703c801200520063703d0010240024020072006844200520d002005200541c8016a3602d801200541c8016a21030c010b200520063703d001200520073703c8012005200541c8016a3602d801200541c8016a21030b200541e0016a41186a22094200370300200541e0016a41106a22044200370300200541e0016a41086a22014200370300200542003703e00141b6fdc600ad428080808080018422061001220a2900002107200541e0026a41086a2202200a41086a290000370300200520073703e002200a103520012002290300370300200520052903e0023703e00141e489c200ad4280808080d0018422081001220a29000021072002200a41086a290000370300200520073703e002200a1035200420052903e002220737030020054198016a41086a220b200129030037030020054198016a41106a220c200737030020054198016a41186a220d2002290300370300200520052903e00137039801200541206a20054198016a412010d701200541206a41106a290300210e2005290328210f2005280220210a200341086a290300211020032903002107200942003703002004420037030020014200370300200542003703e00120061001220329000021062002200341086a290000370300200520063703e0022003103520012002290300370300200520052903e0023703e00120081001220329000021062002200341086a290000370300200520063703e00220031035200420052903e0022206370300200b2001290300370300200c2006370300200d2002290300370300200520052903e0013703980120054200200e4200200a1b220620107d200f4200200a1b2208200754ad7d220e200820077d2207200856200e200656200e2006511b22021b3703e80120054200200720021b3703e00120054198016aad4280808080800484200541e0016aad428080808080028410020b2000200541386a41d800109d081a0c060b200541e7016a200241d000109d081a200041003a0000200041016a200541e0016a41d700109d081a0c050b200541e0016a200110f30320053502e80142208620052802e0012204ad841007024020052802e401450d00200410350b200541e0016a2002280210220a200241186a28020010f40320053502e80142208620052802e0012204ad841011024020052802e401450d00200410350b200541e0016a41086a41023a000020054189026a41003a0000200541e9016a2001290000370000200541f1016a200141086a290000370000200541f9016a200141106a29000037000020054181026a200141186a2900003700002005410d3a00e00141b0b4cc004100200541e0016a10d401200041023a00000c010b024020042903084201520d00200441106a2903002107200441186a290300210641002104200541003a00d801200541083a00df01200520063703a0012005200737039801200520013602c80102400240200720068450450d0042002107420021060c010b200520013602e0022005200541e0026a3602f0012005200541df016a3602ec012005200541c8016a3602e8012005200541d8016a3602e401200520054198016a3602e001200541386a2001200541e0016a10dc0341012104024020052802384101470d0042002106200529034021070c010b200541e0006a2903002106200541d8006a29030021074100210420052903404201520d00200541386a41106a290300210820052802e002210320054198026a200541386a41186a29030037030020054190026a200837030041002104200541e0016a41086a41003a0000200541e9016a2003290000370000200541f1016a200341086a290000370000200541f9016a200341106a29000037000020054181026a200341186a290000370000200541033a00e00141b0b4cc004100200541e0016a10d4010b20040d00200541e0016a41186a22094200370300200541e0016a41106a22034200370300200541e0016a41086a220a4200370300200542003703e00141b6fdc600ad4280808080800184220f1001220b2900002108200541e0026a41086a2204200b41086a290000370300200520083703e002200b1035200a2004290300370300200520052903e0023703e00141e489c200ad4280808080d0018422101001220b29000021082004200b41086a290000370300200520083703e002200b1035200320052903e002220837030020054198016a41086a220b200a29030037030020054198016a41106a220c200837030020054198016a41186a220d2004290300370300200520052903e00137039801200541086a20054198016a412010d701200541086a41106a2903004200200528020822111b21082005290310420020111b210e024020072006844200520d002009420037030020034200370300200a4200370300200542003703e001200f1001221129000021072004201141086a290000370300200520073703e00220111035200a2004290300370300200520052903e0023703e00120101001221129000021072004201141086a290000370300200520073703e00220111035200320052903e002370000200341086a2004290300370000200b200a290300370300200c2003290300370300200d2009290300370300200520052903e00137039801200520083703e8012005200e3703e00120054198016aad4280808080800484200541e0016aad428080808080028410020c010b2009420037030020034200370300200a4200370300200542003703e001200f10012211290000210f2004201141086a2900003703002005200f3703e00220111035200a2004290300370300200520052903e0023703e001201010012211290000210f2004201141086a2900003703002005200f3703e00220111035200320052903e002370000200341086a2004290300370000200b200a290300370300200c2003290300370300200d2009290300370300200520052903e0013703980120054200200820067d200e200754ad7d2206200e20077d2207200e56200620085620062008511b22041b3703e80120054200200720041b3703e00120054198016aad4280808080800484200541e0016aad428080808080028410020b200541e0016a2002280210220a200241186a280200221210f4030240024020053502e80142208620052802e0012204ad8410212207422088a7220d0d00410121110c010b2007a721110b024020052802e401450d00200410350b200541003602e801200542013703e0012011200d200541e0016a1097030240024020052802e401220b20052802e80122096b4120490d00200941206a210420052802e0012103200b210c0c010b200941206a22042009490d02200b41017422032004200320044b1b220c4100480d0202400240200b0d000240200c0d00410121030c020b200c103322030d010c050b20052802e0012103200b200c460d002003200b200c10372203450d040b2005200c3602e401200520033602e0010b200320096a22092002412c6a220b290000370000200941186a200b41186a290000370000200941106a200b41106a290000370000200941086a200b41086a290000370000200520043602e80120054198016a41186a22092004ad4220862003ad841009220441186a29000037030020054198016a41106a220b200441106a29000037030020054198016a41086a2213200441086a2900003703002005200429000037039801200410350240200c450d00200310350b200541d1006a2009290300370000200541c9006a200b290300370000200541c1006a20132903003700002005200529039801370039200541013a0038200541e0016a200110f30320052802e0012104200520052802e8013602e402200520043602e002200541386a200541e0026a10f805024020052802e401450d00200410350b200541e0016a200a201210f40320053502e80142208620052802e0012204ad841011024020052802e401450d00200410350b200541e0016a41086a41023a000020054189026a41013a0000200541e9016a2001290000370000200541f1016a200141086a290000370000200541f9016a200141106a29000037000020054181026a200141186a2900003700002005410d3a00e00141b0b4cc004100200541e0016a10d4012000200541386a41d800109d081a200d450d00201110350b200241146a280200450d02200a10350c020b103e000b103c000b200541f0026a24000ba50503027f037e027f230041c0076b22022400024002402001450d00200220003602100c010b200241b0b4cc003602100b20022001360214200241e8036a200241106a10c80302400240024020022903d0044203510d00200241186a200241e8036a41c803109d081a200228021422014104490d0120022802102200280000210320022001417c6a3602142002200041046a360210200241e8036a200241186a41c803109d081a200241b0076a20024180056a220110d8032002200320022903b007220420022d00b9074200420010db0341082100200241086a29030021052002290300210620022d00b8072103200110ba02410810332201450d022001200437000002400240200341024d0d00410821030c010b024002400240024020030e03000102000b410021030c020b410121030c010b410221030b200220033a00e8034110210020014108411010372201450d03200120033a0008410921030b200341107221070240200020036b410f4b0d002000200041017422082007200820074b1b2208460d0020012000200810372201450d030b200120036a2200200537000820002006370000200241c0076a24002007ad4220862001ad840f0b200241bc076a41043602002002412c6a41023602002002420237021c200241f0b2c300360218200241043602b4072002419cb5c3003602b007200241003602e403200241b0b4cc003602e0032002200241b0076a3602282002200241e0036a3602b807200241186a4180b3c300104c000b200241bc076a4104360200200241fc036a4102360200200242023702ec03200241f0b2c3003602e803200241043602b4072002419cb5c3003602b007200241003602e403200241b0b4cc003602e0032002200241b0076a3602f8032002200241e0036a3602b807200241e8036a4180b3c300104c000b103c000bd30f04037f017e027f017e230041a0026b220224000240024020010d002002200136020c200241b0b4cc003602080c010b20022001417f6a36020c2002200041016a36020820002d0000220041014b0d004100210102400240024002400240024020000e020100010b2002200241086a10c40120022802000d05200228020c220320022802042200490d052000417f4c0d010240024020000d0041002103410121010c010b200010392201450d032001200228020822042000109d081a2002200320006b36020c2002200420006a360208200021030b2001450d052000ad4220862003ad8421050b410021030240024020010d00410021040c010b2005422088a72200417f4c0d010240024020000d0041002106410121040c010b200010332204450d03200021060b0240024020062000490d00200621070c010b200641017422072000200720004b1b22074100480d04024020060d002007103322040d010c060b20062007460d0020042006200710372204450d050b200420012000109d081a2005428080808070832007ad8421080b200220083702142002200436021020024190016a41e7e485f306200241106a10fa030240024020010d000c010b2005422088a72200417f4c0d010240024020000d0041002104410121030c010b200010332203450d03200021040b0240024020042000490d00200421060c010b200441017422062000200620004b1b22064100480d04024020040d00200610332203450d060c010b20042006460d0020032004200610372203450d050b200320012000109d081a2005428080808070832006ad8421080b2002200837021420022003360210200241b0016a41e2c289ab06200241106a10fb03410021030240024020010d00410021040c010b2005422088a72200417f4c0d010240024020000d0041002106410121040c010b200010332204450d03200021060b0240024020062000490d00200621070c010b200641017422072000200720004b1b22074100480d04024020060d00200710332204450d060c010b20062007460d0020042006200710372204450d050b200420012000109d081a2005428080808070832007ad8421080b2002200837021420022004360210200241d0016a41e9dabdf306200241106a10fb030240024020010d000c010b2005422088a72200417f4c0d010240024020000d0041002104410121030c010b200010332203450d03200021040b0240024020042000490d00200421060c010b200441017422062000200620004b1b22064100480d04024020040d00200610332203450d060c010b20042006460d0020032004200610372203450d050b200320012000109d081a2005428080808070832006ad8421080b20022008370294022002200336029002200241f0016a41e1ea91cb0620024190026a10fb03200241106a41086a220320024190016a41086a290300370300200241106a41106a220420024190016a41106a290300370300200241106a41186a220620024190016a41186a290300370300200241386a200241b0016a41086a290300370300200241c0006a200241b0016a41106a290300370300200241c8006a200241b0016a41186a290300370300200241d8006a200241d0016a41086a290300370300200241e0006a200241d0016a41106a290300370300200241e8006a200241d0016a41186a2903003703002002200229039001370310200220022903b001370330200220022903d00137035020024188016a200241f0016a41186a29030037030020024180016a200241f0016a41106a290300370300200241f8006a200241f0016a41086a290300370300200220022903f001370370412010332200450d0320002002290310370000200041186a2006290300370000200041106a2004290300370000200041086a20032903003700002000412041c00010372200450d032000200241106a41206a2203290000370020200041386a200341186a290000370000200041306a200341106a290000370000200041286a200341086a290000370000200041c00041800110372200450d032000200241106a41c0006a22032900003700402000200241f0006a2204290000370060200041d8006a200341186a290000370000200041d0006a200341106a290000370000200041c8006a200341086a290000370000200041e8006a200441086a290000370000200041f0006a200441106a290000370000200041f8006a200441186a29000037000002402001450d002005a7450d00200110350b41840110332201450d01200242840137021420022001360210418001200241106a10770240024020022802142206200228021822036b418001490d0020034180016a2104200228021021010c010b20034180016a22042003490d03200641017422012004200120044b1b22074100480d030240024020060d00024020070d00410121010c020b200710332201450d060c010b2002280210210120062007460d0020012006200710372201450d050b20022007360214200220013602100b200120036a2000418001109d081a20001035200241a0026a24002004ad4220862001ad840f0b1044000b1045000b103e000b103c000b200241fc016a4104360200200241246a410236020020024202370214200241f0b2c300360210200241043602f401200241b0b5c3003602f001200241003602d401200241b0b4cc003602d0012002200241f0016a3602202002200241d0016a3602f801200241106a4180b3c300104c000bfa0103037f037e037f230041306b220324002003200136020c200341106a200210e503200328021421042003410c6a200335021842208620032802102205ad84102e22012900002106200141086a2900002107200141106a2900002108200341106a41186a2209200141186a290000370300200341106a41106a220a2008370300200341106a41086a220b20073703002003200637031020011035200041186a2009290300370000200041106a200a290300370000200041086a200b2903003700002000200329031037000002402004450d00200510350b024020022802002200450d00200241046a280200450d00200010350b200341306a24000bfa0103037f037e037f230041306b220324002003200136020c200341106a200210e503200328021421042003410c6a200335021842208620032802102205ad84103022012900002106200141086a2900002107200141106a2900002108200341106a41186a2209200141186a290000370300200341106a41106a220a2008370300200341106a41086a220b20073703002003200637031020011035200041186a2009290300370000200041106a200a290300370000200041086a200b2903003700002000200329031037000002402004450d00200510350b024020022802002200450d00200241046a280200450d00200010350b200341306a24000bc50c03037f017e077f230041c0026b22022400024002402001450d00200220003602080c010b200241b0b4cc003602080b2002200136020c2002200241086a10c401024002400240024020022802000d00200228020c220320022802042201490d0002402001417f4c0d000240024020010d0041002103410121000c010b200110392200450d032000200228020822042001109d081a2002200320016b36020c2002200420016a360208200121030b2000450d0120022001ad4220862003ad8422054220883e029c02200220003602980220024190016a20024198026a10c2020240024020022d0090014101470d00410021060c010b200241106a20024190016a410172418001109d081a20024190016a200241106a418001109d081a200241003602a802200242043703a002412010332201450d032001200229039001370000200141186a20024190016a41186a290300370000200141106a20024190016a41106a290300370000200141086a20024190016a41086a290300370000200241a0026a41004101108c0120022802a002220620022802a80222044104746a220341e7e485f30636020c200342a08080808004370204200320013602002002200441016a22013602a802200241b0026a20024190016a41206a10fd030240200120022802a4022207470d00200241a0026a20014101108c0120022802a402210720022802a002210620022802a80221010b200620014104746a220320022903b002370200200341e2c289ab0636020c200341086a200241b0026a41086a2802003602002002200141016a22013602a802200241b0026a200241d0016a10fd03024020012007470d00200241a0026a20074101108c0120022802a402210720022802a002210620022802a80221010b200620014104746a220320022903b002370200200241b0026a41086a22042802002108200341e9dabdf30636020c200341086a20083602002002200141016a22013602a802200241b0026a200241f0016a10fd03024020012007470d00200241a0026a20074101108c0120022802a402210720022802a002210620022802a80221010b200620014104746a220320022903b00237020020042802002104200341e1ea91cb0636020c200341086a2004360200200141016a21090b02402005a7450d00200010350b0240024020060d00410121010c010b20094104744105722201417f4c0d010b200110332200450d022002410036029801200220013602940120022000360290010240024020060d00200041003a00004101210020024101360298010c010b200041013a00002002410136029801200920024190016a1077024020090d0020022802980121000c010b200620094104746a210a2006210103402001280200210b200141086a280200220020024190016a107702400240200228029401220c20022802980122086b2000490d002002280290012103200c21040c010b200820006a22032008490d06200c41017422042003200420034b1b22044100480d0602400240200c0d00024020040d00410121030c020b2004103322030d010c090b2002280290012103200c2004460d002003200c200410372203450d080b200220043602940120022003360290010b200320086a200b2000109d081a2002200820006a2200360298010240200420006b41034b0d00200041046a22082000490d062004410174220c2008200c20084b1b22084100480d060240024020040d00024020080d00410121030c020b200810332203450d090c010b20042008460d0020032004200810372203450d080b200220083602940120022003360290010b200320006a2001410c6a2800003600002002200041046a220036029801200141106a2201200a470d000b0b2000ad42208620023502900184210502402006450d0002402009450d00200941047421002006210103400240200141046a280200450d00200128020010350b200141106a2101200041706a22000d000b0b200741ffffffff0071450d00200610350b200241c0026a240020050f0b1044000b2002411c6a4104360200200241a4016a41023602002002420237029401200241f0b2c3003602900120024104360214200241d0b5c300360210200241003602b402200241b0b4cc003602b0022002200241106a3602a0012002200241b0026a36021820024190016a4180b3c300104c000b1045000b103e000b103c000b5f01017f02404120103322020d001045000b200042a080808080043702042000200236020020022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700000bfc0403027f017e057f230041d0006b2202240041a9d1cb00ad4280808080c00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541fcd1cb00ad4280808080900284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bca1d09017f017e047f017e027f037e057f047e017f230041c0046b2200240042002101200041f8016a41186a22024200370300200041f8016a41106a22034200370300200041f8016a41086a22044200370300200042003703f80141a9d1cb00ad4280808080c000841001220529000021062004200541086a290000370300200020063703f8012005103541cde4cb00ad4280808080b00184100122052900002106200041d8036a41086a2207200541086a290000370300200020063703d80320051035200320002903d803220637030020004198046a41086a200429030037030020004198046a41106a200637030020004198046a41186a2007290300370300200020002903f80137039804200041f8016a20004198046a10b70202400240024020002d00f8014102470d00200242003703002003420037030020044200370300200042003703f80141d1c4c700ad4280808080e000841001220529000021062004200541086a290000370300200020063703f801200510354185c5c700ad4280808080e0008410012205290000210620004190016a41086a2207200541086a29000037030020002006370390012005103520032000290390012206370300200041f0026a41086a2004290300370300200041f0026a41106a2006370300200041f0026a41186a2007290300370300200020002903f8013703f002200041f8016a200041f0026a10ce020240024020002802f80122080d0041042108410021040c010b20002902fc012201422088a721040b02400240200441246c2205450d002008210402400340024020042d00004101470d00200441016a2800002107200441086a28020021022000200441106a2802003602f402200020023602f002200741c28289aa04470d00200041f8016a200041f0026a10800420002903f80122064203520d020b200441246a21042005415c6a2205450d020c000b0b2000290380022109200041286a20004188026a41e800109d081a0c010b420321060b02402001422088a72204450d00200441246c21052008210403400240024020042d0000220741044b0d0002400240024020070e050400010204040b2004410c6a280200450d03200441086a28020010350c030b2004410c6a280200450d02200441086a28020010350c020b2004410c6a280200450d01200441086a28020010350c010b200441086a280200450d00200441046a28020010350b200441246a21042005415c6a22050d000b0b02402001a72204450d00200441246c450d00200810350b20004190016a200041286a41e800109d081a0240024020064203520d004100210720004198046a21080c010b200041f0026a20004190016a41e800109d081a200041f8016a41186a22054200370300200041f8016a41106a22074200370300200041f8016a41086a22044200370300200042003703f80141a9d1cb00ad4280808080c00084220a1001220229000021012004200241086a290000370300200020013703f8012002103541c2d1cb00ad4280808080b00184220b100122082900002101200041d8036a41086a2202200841086a290000370300200020013703d80320081035200320002903d803370000200341086a220c200229030037000020004198046a41086a2208200429030037030020004198046a41106a220d200729030037030020004198046a41186a220e2005290300370300200020002903f80137039804200041186a20004198046a10e102024002402000280218450d002000290320500d0020004198046aad4280808080800484210120004198046a21080c010b200542003703002007420037030020044200370300200042003703f801200a1001220f29000021012004200f41086a290000370300200020013703f801200f1035200b1001220f29000021012002200f41086a290000370300200020013703d803200f1035200320002903d803370000200c200229030037000020082004290300370300200d2007290300370300200e2005290300370300200020002903f80137039804200020093703f80120004198046aad42808080808004842201200041f8016aad42808080808001841002200542003703002007420037030020044200370300200042003703f801200a1001220f290000210b2004200f41086a2900003703002000200b3703f801200f103541b7d1cb00ad4280808080b001841001220f290000210b2002200f41086a2900003703002000200b3703d803200f1035200320002903d803370000200c200229030037000020082004290300370300200d2007290300370300200e2005290300370300200020002903f80137039804200041f8016a20004198046a10dd0220002802f801210f20002902fc01210b200542003703002007420037030020044200370300200042003703f801200a10012210290000210a2004201041086a2900003703002000200a3703f8012010103541d8d1cb00ad4280808080a0018410012210290000210a2002201041086a2900003703002000200a3703d80320101035200320002903d803370000200c200229030037000020082004290300370300200d2007290300370300200e2005290300370300200020002903f80137039804200041f8016a20004198046a10b10220002d00f8012105200e20004191026a290000370300200d20004189026a290000370300200820004181026a290000370300200020002900f90137039804200b4200200f1b210a200b428080808070834200200f1b210b200f4108200f1b21040240024020054101460d0020004190046a420037030020004188046a420037030020004180046a4200370300200042003703f8030c010b200041f8036a41186a20004198046a41186a290300370300200041f8036a41106a20004198046a41106a290300370300200041f8036a41086a20004198046a41086a29030037030020002000290398043703f8030b200041d8036a41086a200041f8036a41086a2903002211370300200041d8036a41106a200041f8036a41106a2903002212370300200041d8036a41186a200041f8036a41186a2903002213370300200020002903f80322143703d803200041f8016a41086a200b200a42ffffffff0f8384370300200041f8016a41106a2014370300200041f8016a41186a201137030020004198026a2012370300200041f8016a41286a2013370300200020043602fc01200041003602f80120004198046a200041f8016a10810420004183046a20004198046a41086a28020036000020002000290398043700fb03200041a4046a200041ff036a290000370000200041c28289aa0436009904200041023a009804200020002900f80337009d0420004198046a1082040240200aa72205450d00200541286c450d00200410350b20004198046a21080b200041f8016a41186a22054200370300200041f8016a41106a22074200370300200041f8016a41086a22044200370300200042003703f80141a9d1cb00ad4280808080c00084220a10012202290000210b2004200241086a2900003703002000200b3703f8012002103541cdd1cb00ad4280808080b00184220b1001220d2900002111200041d8036a41086a2202200d41086a290000370300200020113703d803200d1035200320002903d803370000200341086a220d200229030037000020004198046a41086a220e200429030037030020004198046a41106a220c200729030037030020004198046a41186a220f2005290300370300200020002903f80137039804200041086a20004198046a10e1022000280208211520002903102111200542003703002007420037030020044200370300200042003703f801200a1001221029000021122004201041086a290000370300200020123703f801201010354199c2c300ad42808080808001841001221029000021122002201041086a290000370300200020123703d80320101035200320002903d803370000200d2002290300370000200e2004290300370300200c2007290300370300200f2005290300370300200020002903f80137039804200042002009201142017c420120151b7d221120112009561b3e02f8012001200041f8016aad22114280808080c000841002200542003703002007420037030020044200370300200042003703f801200a10012210290000210a2004201041086a2900003703002000200a3703f80120101035200b10012210290000210a2002201041086a2900003703002000200a3703d80320101035200320002903d803370000200d2002290300370000200e2004290300370300200c2007290300370300200f2005290300370300200020002903f80137039804200020093703f80120012011428080808080018410024100210720064200520d00200041f8016a200041f0026a41e800109d081a200041f8036a41186a20004194026a290200370300200041f8036a41106a2000418c026a290200370300200041f8036a41086a20004184026a290200370300200020002902fc013703f803410121070b200041f0026a41186a200041f8036a41186a290300370300200041f0026a41106a200041f8036a41106a290300370300200041f0026a41086a200041f8036a41086a290300370300200020002903f8033703f002200041f8016a41186a22024200370300200041f8016a41106a220d4200370300200041f8016a41086a22044200370300200042003703f80141a9d1cb00ad4280808080c000841001220529000021062004200541086a290000370300200020063703f8012005103541cde4cb00ad4280808080b00184100122052900002106200041d8036a41086a220e200541086a290000370300200020063703d80320051035200320002903d803370000200341086a200e29030037000020004198046a41086a200429030037030020004198046a41106a200d29030037030020004198046a41186a2002290300370300200020002903f80137039804410110332204450d010240024020070d00200441003a000042808080801021060c010b200441013a000020044101412110372204450d03200420002903f002370001200441196a20004188036a290300370000200441116a20004180036a290300370000200441096a200041f8026a2903003700004280808080900421060b2008ad428080808080048420062004ad841002200410350b200041c0046a24000f0b1045000b103c000ba71405067f017e027f057e047f23004190036b22022400024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002005417f6a220541024b0d0420050e03010203010b200042033703000c050b024020064104490d002004280001210720012003417b6a22053602042001200441056a36020020054108490d00200429000521082001200341736a36020420012004410d6a36020041002105200241003a0028410d20036b2109200341726a2106024002400340200920056a450d01200241086a20056a200420056a220a410d6a2d00003a0000200120063602042001200a410e6a3602002002200541016a220a3a00282006417f6a2106200a2105200a4120470d000b200241b0026a41086a200241086a41086a290300370300200241b0026a41106a200241086a41106a290300370300200241b0026a41186a200241086a41186a290300370300200220022903083703b00241002105200241003a00482004200a6a2109200a20036b410d6a21030340200320056a450d02200241086a20056a200920056a2204410d6a2d00003a00002001200636020420012004410e6a3602002002200541016a22043a00482006417f6a210620042105200441c000470d000b200241d0026a41386a200241086a41386a290300220b370300200241d0026a41306a200241086a41306a290300220c370300200241d0026a41286a200241086a41286a290300220d370300200241d0026a41206a200241086a41206a290300220e370300200241d0026a41186a200241086a41186a290300220f370300200241d0016a41086a2201200241086a41086a290300370300200241d0016a41106a2204200241086a41106a290300370300200241d0016a41186a2205200f370300200241d0016a41206a2206200e370300200241d0016a41286a2203200d370300200241d0016a41306a220a200c370300200241d0016a41386a2209200b370300200220022903083703d00120024190026a41186a2210200241b0026a41186a29030037030020024190026a41106a2211200241b0026a41106a29030037030020024190026a41086a2212200241b0026a41086a290300370300200220022903b00237039002200241b0016a41186a22132010290300370300200241b0016a41106a22102011290300370300200241b0016a41086a2211201229030037030020022002290390023703b001200241f0006a41386a22122009290300370300200241f0006a41306a2209200a290300370300200241f0006a41286a220a2003290300370300200241f0006a41206a22032006290300370300200241f0006a41186a22062005290300370300200241f0006a41106a22052004290300370300200241f0006a41086a22042001290300370300200220022903d001370370200041106a20073602002000200837030820004200370300200020022903b0013702142000411c6a2011290300370200200041246a20102903003702002000412c6a2013290300370200200020022903703702342000413c6a2004290300370200200041c4006a2005290300370200200041cc006a2006290300370200200041d4006a2003290300370200200041dc006a200a290300370200200041e4006a2009290300370200200041ec006a20122903003702000c070b200541ff0171450d01200241003a00280c010b200541ff0171450d00200241003a00480b200042033703000c040b024020064104490d002004280001210620012003417b6a22053602042001200441056a36020020054108490d0020004201370300200429000521082001200341736a36020420012004410d6a360200200041106a200636020020002008370308200041146a200241086a41e400109d081a0c040b200042033703000c030b20064104490d012004280001210720012003417b6a22053602042001200441056a36020020054108490d01200429000521082001200341736a36020420012004410d6a36020041002105200241003a0028410d20036b2109200341726a2106024002400340200920056a450d01200241086a20056a200420056a220a410d6a2d00003a0000200120063602042001200a410e6a3602002002200541016a220a3a00282006417f6a2106200a2105200a4120470d000b200241b0026a41086a200241086a41086a290300370300200241b0026a41106a200241086a41106a290300370300200241b0026a41186a200241086a41186a290300370300200220022903083703b00241002105200241003a00482004200a6a2109200a20036b410d6a21030340200320056a450d02200241086a20056a200920056a2204410d6a2d00003a00002001200636020420012004410e6a3602002002200541016a22043a00482006417f6a210620042105200441c000470d000b200241d0026a41386a200241086a41386a290300220b370300200241d0026a41306a200241086a41306a290300220c370300200241d0026a41286a200241086a41286a290300220d370300200241d0026a41206a200241086a41206a290300220e370300200241d0026a41186a200241086a41186a290300220f370300200241d0016a41086a2201200241086a41086a290300370300200241d0016a41106a2204200241086a41106a290300370300200241d0016a41186a2205200f370300200241d0016a41206a2206200e370300200241d0016a41286a2203200d370300200241d0016a41306a220a200c370300200241d0016a41386a2209200b370300200220022903083703d00120024190026a41186a2210200241b0026a41186a29030037030020024190026a41106a2211200241b0026a41106a29030037030020024190026a41086a2212200241b0026a41086a290300370300200220022903b00237039002200241b0016a41186a22132010290300370300200241b0016a41106a22102011290300370300200241b0016a41086a2211201229030037030020022002290390023703b001200241f0006a41386a22122009290300370300200241f0006a41306a2209200a290300370300200241f0006a41286a220a2003290300370300200241f0006a41206a22032006290300370300200241f0006a41186a22062005290300370300200241f0006a41106a22052004290300370300200241f0006a41086a22042001290300370300200220022903d001370370200041106a20073602002000200837030820004202370300200020022903b0013702142000411c6a2011290300370200200041246a20102903003702002000412c6a2013290300370200200020022903703702342000413c6a2004290300370200200041c4006a2005290300370200200041cc006a2006290300370200200041d4006a2003290300370200200041dc006a200a290300370200200041e4006a2009290300370200200041ec006a20122903003702000c040b200541ff0171450d02200241003a00280c020b200541ff0171450d01200241003a00480c010b200042033703000c010b200042033703000b20024190036a24000bd90a02087f017e230041106b220224002002410036020820024201370300024002402001280200220341024b0d0002400240024002400240024020030e03000102000b410110332203450d062002410136020420022003360200200341013a000020024101360208200128020421032001410c6a2802002204200210770240024020040d00200228020821050c010b2003200441286c6a2106200228020821050340024002402002280204220720056b4120490d00200541206a210420022802002108200721090c010b200541206a22042005490d05200741017422082004200820044b1b22094100480d050240024020070d00024020090d00410121080c020b2009103322080d010c0b0b2002280200210820072009460d0020082007200910372208450d0a0b20022009360204200220083602000b200820056a22052003290000370000200541186a200341186a290000370000200541106a200341106a290000370000200541086a200341086a29000037000020022004360208200341206a290300210a0240200920046b41074b0d00200441086a22052004490d05200941017422072005200720054b1b22054100480d050240024020090d00024020050d00410121080c020b200510332208450d0b0c010b20092005460d0020082009200510372208450d0a0b20022005360204200220083602000b200820046a200a3700002002200441086a22053602082006200341286a2203470d000b0b024002402002280204220420056b4120490d00200228020021030c010b200541206a22032005490d03200441017422082003200820034b1b22084100480d030240024020040d00024020080d00410121030c020b200810332203450d090c010b2002280200210320042008460d0020032004200810372203450d080b20022008360204200220033602000b200320056a2203200141106a2204290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002002200541206a3602080c050b410110332203450d052002410136020420022003360200200341023a000020024101360208200128020421080240024020022802042204417f6a4104490d00200228020021030c010b200441017422034105200341054b1b22054100480d0220022802002103024020042005460d0020032004200510372203450d070b20022005360204200220033602000b20032008360001200241053602080c040b410110332203450d042002410136020420022003360200200341033a00002002410136020820022802002103024020022802044101470d0020034101410210372203450d0520024102360204200220033602000b200341013a0001200241023602082001290308210a0240024020022802042204417e6a4108490d00200228020021030c010b20044101742203410a2003410a4b1b22084100480d0120022802002103024020042008460d0020032004200810372203450d060b20022008360204200220033602000b2003200a3700022002410a3602082001290310210a2002280204220441766a41074b0d01200441017422034112200341124b1b22084100480d0020022802002103024020042008460d0020032004200810372203450d050b2003200a37000a200220083602042002200336020020024112360208200141186a2d000021080c020b103e000b20022802002203200a37000a20024112360208200141186a2d0000210820044112470d0020034112412410372203450d0220024124360204200220033602000b200320083a0012200241133602080b20002002290300370200200041086a200241086a280200360200200241106a24000f0b103c000bd00703047f017e057f230041f0006b22012400200141c8006a41186a4200370300200141c8006a41106a22024200370300200141c8006a41086a220342003703002001420037034841d1c4c700ad4280808080e000841001220429000021052003200441086a29000037030020012005370348200410354185c5c700ad4280808080e00084100122042900002105200141386a41086a2206200441086a2900003703002001200537033820041035200220012903382205370300200141186a41086a2003290300370300200141186a41106a2005370300200141186a41186a200629030037030020012001290348370318200141c8006a200141186a10ce0202400240200128024822020d0041002106200141003602102001420437030841042102410021030c010b2001200129024c220537020c200120023602082005422088a721032005a721060b200141c8006a41206a2207200041206a280200360200200141c8006a41186a2208200041186a290200370300200141c8006a41106a2209200041106a290200370300200141c8006a41086a2204200041086a29020037030020012000290200370348024020032006470d00200141086a20034101108d01200128020c210620012802082102200128021021030b2002200341246c220a6a22002001290348370200200041206a2007280200360200200041186a2008290300370200200041106a2009290300370200200041086a20042903003702002001200341016a22003602102008420037030020094200370300200442003703002001420037034841d1c4c700ad4280808080e000841001220829000021052004200841086a29000037030020012005370348200810354185c5c700ad4280808080e00084100122082900002105200141386a41086a2207200841086a2900003703002001200537033820081035200920012903382205370300200141186a41086a2004290300370300200141186a41106a2005370300200141186a41186a2007290300370300200120012903483703182001412036024c2001200141186a36024820022000200141c8006a109606024020002003490d00200a41246a21032002210003400240024020002d0000220441044b0d0002400240024020040e050400010204040b2000410c6a280200450d03200041086a28020010350c030b2000410c6a280200450d02200041086a28020010350c020b2000410c6a280200450d01200041086a28020010350c010b200041086a280200450d00200041046a28020010350b200041246a21002003415c6a22030d000b0b02402006450d00200641246c450d00200210350b200141f0006a24000b7402027f027e230041e0006b22032400200341d0006a2002108e022003200328025022042003280258108f02200341106a2903004200200329030042015122021b21052003290308420020021b210602402003280254450d00200410350b2000200637030020002005370308200341e0006a24000bca0102017f037e230041306b220524000240024020030d00200041003602000c010b20052003280200200328020810f4032004ad4280808080800484100922032900002106200341086a2900002107200341106a2900002108200541106a41186a200341186a290000370300200541106a41106a2008370300200541106a41086a200737030020052006370310200310352000200535020842208620052802002203ad84200541106aad4280808080800484101010c2012005280204450d00200310350b200541306a24000b8505010a7f230041e0016b2203240020034198016a200210f303200341c0006a200328029801220420032802a00110d902200341a8016a41086a2205200341c0006a41286a290300370300200341a8016a41106a2206200341c0006a41306a290300370300200341a8016a41186a2207200341f8006a290300370300200341a8016a41206a220820034180016a290300370300200341a8016a41286a220920034188016a290300370300200341a8016a41306a220a20034190016a2802003602002003200341c0006a41206a2903003703a801200341dc006a280200210b200341c0006a41186a280200210c024020032d004022024102460d00200341086a41306a200a280200360200200341086a41286a2009290300370300200341086a41206a2008290300370300200341086a41186a2007290300370300200341086a41106a2006290300370300200341086a41086a2005290300370300200320032903a8013703080b0240200328029c01450d00200410350b0240024020024102470d00200041003a00000c010b200341c0006a41306a200341086a41306a280200360200200341c0006a41286a200341086a41286a290300370300200341c0006a41206a200341086a41206a290300370300200341c0006a41186a200341086a41186a290300370300200341c0006a41106a200341086a41106a290300370300200341c0006a41086a200341086a41086a2903003703002003200329030837034002402002450d00200041003a00000c010b20002003290254370001200041013a0000200041196a200341ec006a290200370000200041116a200341e4006a290200370000200041096a200341dc006a290200370000200b450d00200c10350b200341e0016a24000b5601027f230041206b22022400200241106a200110f303200241086a20022802102203200228021841b0b4cc0041004100108a022002280208210102402002280214450d00200310350b200241206a240020014101460bbc0104027f027e027f017e230041f0006b22032400200341e0006a200210f303200341086a20032802602204200328026810d902200341186a2903002105200341106a2903002106200341246a2802002107200341206a280200210820032d0008210202402003280264450d00200410350b420021090240200241ff017122044102460d00200445ad21092007450d00200241ff01710d00200810350b2000200637030820002009370300200041106a2005370300200341f0006a24000b971009037f027e027f077e047f057e017f067e047f230041d0036b2204240020032802002105200441206a2001108e02200441a0016a2004280220220320042802282206108f0220042903a001210742002108200442003703a001200441e8016a280200210920042d00ec01210a0240024020074201510d00200441306a41306a4200370300200441306a41286a4200370300200441306a41206a4200370300200441306a41186a4200370300200441c0006a4200370300200441386a4200370300200442003703304200210b4200210c4200210d4200210e0c010b200441d8016a290300210f200441a0016a41306a2903002110200441a0016a41206a290300210b200441a0016a41186a2903002108200441e0016a290300210e20042903b001210d20042903a801210c200441306a41206a200441a0016a41286a290300370300200441306a41286a2010370300200441306a41306a200f370300200441c0006a20083703002004200b3703482004200c3703302004200d3703380b427f200d200b7c200c20087c2211200c542212ad7c220f2012200f200d54200f200d511b22121b2110427f201120121b2111024002400240427f2002290300220f20087c22082008200f542212200241086a2903002208200b7c2012ad7c220b200854200b2008511b22021b42ffffe883b1de1656427f200b20021b220b420052200b501b0d002011201084500d010b2004200f37033020042008370338200441e8006a41186a200441306a41186a290300220b370300200441e8006a41206a2213200441306a41206a290300370300200441e8006a41286a2214200441306a41286a290300370300200441e8006a41306a2215200441306a41306a290300370300200420083703702004200f370368200420042903402216370378200c200f56200d200856200d2008511b21022008200d7d200f200c54ad7d2117200d20087d200c200f54ad7d2118200f200c7d2119200c200f7d211a201120108450211b02400240427f200f20167c220d200d200f5422122008200b7c2012ad7c220d200854200d2008511b22121b220c428080e983b1de16544100427f200d20121b220d501b0d00200441f8006a29030021162015290300211c2014290300211d2013290300211e2004290370211f200429036821204201211120042903800121210c010b02400240200c200d8450450d00420021110c010b42002111200441a0026a41186a22224200370300200441a0026a41106a22144200370300200441a0026a41086a22134200370300200442003703a00241b6fdc600ad4280808080800184220b100122152900002110200441c0036a41086a2212201541086a290000370300200420103703c0032015103520132012290300370300200420042903c0033703a00241e489c200ad4280808080d0018422101001221529000021162012201541086a290000370300200420163703c00320151035201420042903c0032216370300200441a0036a41086a22232013290300370300200441a0036a41106a22242016370300200441a0036a41186a22252012290300370300200420042903a0023703a003200441086a200441a0036a412010d701200441086a41106a29030021162004290310211c20042802082115202242003703002014420037030020134200370300200442003703a002200b10012222290000210b2012202241086a2900003703002004200b3703c0032022103520132012290300370300200420042903c0033703a002201010012222290000210b2012202241086a2900003703002004200b3703c00320221035201420042903c003220b370300202320132903003703002024200b37030020252012290300370300200420042903a0023703a003200442002016420020151b220b200d7d201c420020151b2210200c54ad7d22162010200c7d221c2010562016200b562016200b511b22121b3703a80220044200201c20121b3703a002200441a0036aad4280808080800484200441a0026aad42808080808002841002200441d8026a200d370300200441d0026a200c370300201341013a0000200441a9026a2005290000370000200441b1026a200541086a290000370000200441b9026a200541106a290000370000200441c1026a200541186a290000370000200441033a00a00241b0b4cc004100200441a0026a10d4010b0b2018201720021b210c201a201920021b210b2002ad2110201bad210d200441c8016a201e370300200441d0016a201d370300200441b0016a201f370300200441d8016a201c370300200441b8016a2016370300200420213703c0012004200e3703e001200420203703a801410021022004200a4100200742015122121b3a00ec0120042009410020121b3602e801200420114201512212ad3703a001024020120d002006ad4220862003ad8410070c020b200420063602a402200420033602a002200441a8016a200441a0026a10e702410121020c010b4202210d0b02402004280224450d00200310350b02400240200d4202520d00200042023703000c010b02400240024020074201510d00200241ff0171450d0041032103200441a0026a21020c010b20074201520d01200241ff01710d0141042103200441a0016a21020b200241086a20033a0000200241003a0000200241096a2001290000370000200241116a200141086a290000370000200241196a200141106a290000370000200241216a200141186a29000037000041b0b4cc004100200210d4010b2000200f3703082000200d370300200041286a200c370300200041206a200b370300200041106a2008370300200041186a20103703000b200441d0036a24000b9c0607047f017e017f017e017f017e047f230041e0006b22022400200241306a41186a22034200370300200241306a41106a22044200370300200241306a41086a220542003703002002420037033041f1d8cb00ad42808080809001842206100122072900002108200241d0006a41086a2209200741086a2900003703002002200837035020071035200520092903003703002002200229035037033041fad8cb00ad4280808080e00184220810012207290000210a2009200741086a2900003703002002200a3703502007103520042002290350220a370300200241106a41086a220b2005290300370300200241106a41106a220c200a370300200241106a41186a220d2009290300370300200220022903303703102002200241106a10e1022002280200210e2002290308210a2003420037030020044200370300200542003703002002420037033020061001220729000021062009200741086a2900003703002002200637035020071035200520092903003703002002200229035037033020081001220729000021062009200741086a2900003703002002200637035020071035200420022903502206370300200b2005290300370300200c2006370300200d2009290300370300200220022903303703102002200a42017c4201200e1b2206370330200241106aad4280808080800484200241306aad4280808080800184100202400240412010332209450d0020092001290000370000200941186a200141186a290000370000200941106a200141106a290000370000200941086a200141086a2900003700002009412041c00010372205450d0020052006370020200241306a41186a22012005ad42808080808005841009220941186a290000370300200241306a41106a2204200941106a290000370300200241306a41086a2207200941086a2900003703002002200929000037033020091035412010332209450d0120092002290330370000200042a0808080800437020420002009360200200941186a2001290300370000200941106a2004290300370000200941086a200729030037000020051035200241e0006a24000f0b103c000b1045000bf10203037f017e037f230041106b22022400200241003602082002420137030020002d00002103410110332104024002400240024020034101460d002004450d02200441003a0000200220043602002002428180808010370204200041086a200210f705200235020842208621052002280204452104200228020021000c010b2004450d01200441013a0000200220043602002002428180808010370204412010332203450d0220032000290001370000200341186a2206200041196a290000370000200341106a2207200041116a290000370000200341086a2208200041096a29000037000020044101412110372200450d0120002003290000370001200041096a2008290000370000200041116a2007290000370000200041196a200629000037000020022000360200200242a1808080900437020420031035410021044280808080900421050b200129020020052000ad841002024020040d00200010350b200241106a24000f0b103c000b1045000b3400200041a9d1cb0036020420004100360200200041146a410a360200200041106a41d4c2c300360200200041086a42043702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120103322060d001045000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b130020004102360204200041c8d7c3003602000b2d01017f02404108103322020d001045000b20004288808080800137020420002002360200200242b8173700000b2d01017f02404108103322020d001045000b20004288808080800137020420002002360200200242c8013700000bee0202097f027e230041206b220324000240200128020041016a220441004c0d00200120043602000240024020012802042205450d00200141086a28020021060340200541086a210720052f0106220841057421094100210a0240024003402009450d0120022007412010a008220b450d02200941606a2109200a41016a210a200741206a2107200b417f4a0d000b200a417f6a21080b2006450d022006417f6a2106200520084102746a41880b6a28020021050c010b0b2005200a41e0006c6a220941c5036a310000200941e8026a290300220c200c5022071ba7450d004200200941f8026a29030020071b210c4200200941f0026a29030020071b210d0c010b200341086a20012802102002200141146a28020028021c110400200341106a290300210c200128020021042003290308210d0b20012004417f6a3602002000200c3703082000200d370300200341206a24000f0b41ac96cc004118200341186a41d8c1c30041d496cc001046000ba60502097f017e230041106b220524000240024002400240024002400240024002400240200128020041016a220641004c0d002001200636020020012802042207450d07200141086a28020021080340200741086a210920072f0106220a41057421064100210b0240024003402006450d0120022009412010a008220c450d02200641606a2106200b41016a210b200941206a2109200c417f4a0d000b200b417f6a210a0b2008450d092008417f6a21082007200a4102746a41880b6a28020021070c010b0b2007200b41e0006c6a220d4198036a22062802002207450d05200628020421080340200741086a210920072f0106220a41057421064100210b0240024003402006450d0120042009412010a008220c450d02200641606a2106200b41016a210b200941206a2109200c417f4a0d000b200b417f6a210a0b2008450d072008417f6a21082007200a4102746a41ec036a28020021070c010b0b0240200741e8026a200b410c6c6a220628020022070d0041012109410021060c070b20062802082209417f4c0d010240024020090d004100210b410121060c010b200910332206450d032009210b0b02400240200b2009490d00200b210c0c010b200b410174220c2009200c20094b1b220c4100480d040240200b0d00200c103322060d010c060b200b200c460d002006200b200c10372206450d050b200620072009109d081a2009ad422086200cad84210e410121090c060b41ac96cc004118200541086a41d8c1c30041d496cc001046000b1044000b1045000b103e000b103c000b410021090b0240200d41e8026a2d005d450d002006410020091b21060c020b20090d010b20002001280210200220032004200141146a28020028020c1105000c010b2000200e370204200020063602000b20012001280200417f6a360200200541106a24000bd10401097f230041c0006b220324000240200128020041016a220441004c0d002001200436020002400240024020012802042205450d00200141086a28020021060340200541086a210720052f0106220841057421094100210a0240024003402009450d0120022007412010a008220b450d02200941606a2109200a41016a210a200741206a2107200b417f4a0d000b200a417f6a21080b2006450d022006417f6a2106200520084102746a41880b6a28020021050c010b0b2005200a41e0006c6a220741e8026a210902400240200741c5036a2d00000d00200341206a41086a220a200941c5006a290000370300200341206a41106a220b200941cd006a290000370300200341206a41186a2205200941d5006a29000037030020032009413d6a2900003703204102210720092d003c4101470d01200341186a2005290300370300200341106a200b290300370300200341086a200a29030037030020032003290320370300410121070c010b200341086a200941c5006a290000370300200341106a200941cd006a290000370300200341186a200941d5006a29000037030020032009413d6a29000037030020092d003c21070b200741ff01714102470d010b200020012802102002200141146a280200280210110400200128020021040c010b200020073a000020002003290300370001200041096a200341086a290300370000200041116a200341106a290300370000200041196a200341186a2903003700000b20012004417f6a360200200341c0006a24000f0b41ac96cc004118200341206a41d8c1c30041d496cc001046000bbe0201097f230041106b220224000240200028020041016a220341004c0d002000200336020002400240024020002802042204450d00200041086a28020021050340200441086a210620042f010622074105742108410021090240024003402008450d0120012006412010a008220a450d02200841606a2108200941016a2109200641206a2106200a417f4a0d000b2009417f6a21070b2005450d022005417f6a2105200420074102746a41880b6a28020021040c010b0b2004200941e0006c6a220841a4036a2d000022064101410220064101461b200841c5036a2d00001b22084102470d010b20002802102001200041146a2802002802181101002108200028020021030c010b200841004721080b20002003417f6a360200200241106a240020080f0b41ac96cc004118200241086a41d8c1c30041d496cc001046000b820302097f037e230041206b220324000240200128020041016a220441004c0d00200120043602000240024020012802042205450d00200141086a28020021060340200541086a210720052f0106220841057421094100210a0240024003402009450d0120022007412010a008220b450d02200941606a2109200a41016a210a200741206a2107200b417f4a0d000b200a417f6a21080b2006450d022006417f6a2106200520084102746a41880b6a28020021050c010b0b2005200a41e0006c6a22094190036a290300210c20094188036a290300210d20094180036a290300210e0240200941c5036a2d00000d00200ea721094201210e2009450d010c020b200e4202520d010b200320012802102002200141146a280200280214110400200341106a290300210c200128020021042003290308210d2003290300210e0b20012004417f6a360200200041106a200c3703002000200d3703082000200e370300200341206a24000f0b41ac96cc004118200341186a41d8c1c30041d496cc001046000bc82107067f017e067f057e107f047e027f230041f00c6b220224000240024002400240024020002802000d002000417f36020002400240200128020022030d004100210141002103410021040c010b2001280208210402400240200128020422050d00200321010c010b2005210120032106034020062802880b21062001417f6a22010d000b200321010340200120012f01064102746a41880b6a28020021012005417f6a22050d000b200621030b20012f010621050b2002411c6a2005360200200241186a4100360200200241146a2001360200200220043602202002410036021020024200370308200220033602042002410036020002402004450d0020022004417f6a3602202003450d020240024020032f0106450d004100210741002106410021050c010b4100210641002105034002400240200328020022010d002005ad2108410021010c010b200641016a210620033301044220862005ad8421080b200310352008a72105200121032008422088a7220720012f01064f0d000b200121030b200241d00c6a41186a2209200320074105746a220141206a290000370300200241d00c6a41106a220a200141186a290000370300200241d00c6a41086a220b200141106a2900003703002002200141086a2900003703d00c2003200741e0006c6a220441a4036a2d0000210c200441a0036a280200210d2004419c036a280200210e20044198036a280200210120044190036a290300210f20044188036a290300211020044180036a2903002111200441f8026a2903002112200441f0026a2903002113200441e8026a2903002108200241d0016a41186a2214200441bd036a290000370300200241d0016a41106a2215200441b5036a290000370300200241d0016a41086a2216200441ad036a2900003703002002200441a5036a2900003703d001200741016a2107200441c6036a2f01002117200441c5036a2d0000211802402006450d00200320074102746a41880b6a2802002103410021072006417f6a2206450d00034020032802880b21032006417f6a22060d000b0b200241f0096a41186a2009290300370300200241f0096a41106a200a290300370300200241f0096a41086a200b29030037030020024188016a41086a201629030037030020024188016a41106a201529030037030020024188016a41186a2014290300370300200220022903d00c3703f009200220022903d001370388012002200736020c20022005360208200220033602042002410036020020084202510d002000410c6a2119200041046a211a200241d0016a41206a2107200241840a6a211b200241d0016a413d6a211c200241d0016a41286a211d0340200241c8006a41186a2203200241f0096a41186a2209290300370300200241c8006a41106a2205200241f0096a41106a220a290300370300200241c8006a41086a2206200241f0096a41086a220b290300370300200241286a41086a220420024188016a41086a221e290300370300200241286a41106a221420024188016a41106a221f290300370300200241286a41186a221520024188016a41186a2220290300370300200220022903f0093703482002200229038801370328200241e8006a41186a22212015290300370300200241e8006a41106a22222014290300370300200241e8006a41086a222320042903003703002002200229032837036820202003290300370300201f2005290300370300201e2006290300370300200220022903483703880102400240201a2802002214450d00200028020821150c010b200241f0096a410041e002109f081a200241d0016a410041a008109f081a41880b10332214450d0541002115201441003b010620144100360200201441086a200241f0096a41e002109d081a201441e8026a200241d0016a41a008109d081a20004100360208200020143602040b024002400340201441086a210520142f01062216410574210341002106024003402003450d0120024188016a2005412010a0082204450d03200341606a2103200641016a2106200541206a21052004417f4a0d000b2006417f6a21160b02402015450d002015417f6a2115201420164102746a41880b6a28020021140c010b0b200241d00c6a41186a20202903002224370300200241d00c6a41106a201f2903002225370300200241d00c6a41086a201e2903002226370300200220022903880122273703d00c201b2027370200201b41086a2026370200201b41106a2025370200201b41186a2024370200200220193602800a200220163602fc092002201a3602f809200220143602f409200241003602f009201d200f370300200241d0016a41106a2012370300200220103703f001200220133703d8012002200c3a008c022002200d360288022002200e360284022002200136028002200220113703e801200220083703d001201c2002290368370000201c41086a2023290300370000201c41106a2022290300370000201c41186a2021290300370000200220173b01ae02200220183a00ad02200241f0096a200241d0016a1080031a0c010b201441e8026a200641e0006c6a2105024020184101710d0020052005290300200820085022031b37030020052005290308201320031b370308200541106a22062006290300201220031b37030020092021290300370300200a2022290300370300200b2023290300370300200220022903683703f00920052d003c2106200241d0016a41186a2218200541d5006a2204290000370300200241d0016a41106a2221200541cd006a2214290000370300200241d0016a41086a2222200541c5006a221529000037030020022005413d6a22162900003703d001201e200241f0096a200241d0016a200c41ff0171410146220c1b220341086a290000370300201f200341106a2900003703002020200341186a2900003703002002200329000037038801200541012006200c1b3a003c20162002290388013700002015201e2903003700002014201f290300370000200420202903003700002005201020052903202011a722031b370320200541286a2206200f200629030020031b37030020052011200529031820031b3703180240024020010d0041002101410021034100210d0c010b02400240200e0d00200121030c010b200e210320012106034020062802ec0321062003417f6a22030d000b200121030340200320032f01064102746a41ec036a2802002103200e417f6a220e0d000b200621010b20032f010621280b2002200d3602a801200220283602a401200241003602a0012002200336029c01200241003602980120024200370390012002200136028c0120024100360288010240200d450d002002200d417f6a22163602a8012001450d08200541306a210c4100210641002105034002400240200620012f01064f0d0020012103410021040c010b41002104034002400240200128020022030d002005ad2108410021030c010b200441016a210420013301044220862005ad8421080b200110352008a72105200321012008422088a7220620032f01064f0d000b0b200241d00c6a41186a2214200320064105746a220141206a290000370300200241d00c6a41106a220e200141186a290000370300200241d00c6a41086a2215200141106a2900003703002002200141086a2900003703d00c200241b0016a41086a220d20032006410c6c6a220141f0026a2802003602002002200141e8026a2902003703b001200641016a21060240024020040d00200321010c010b200320064102746a41ec036a2802002101410021062004417f6a2203450d00034020012802ec0321012003417f6a22030d000b0b200720022903b001370200200741086a2203200d280200360200200b2015290300370300200a200e29030037030020092014290300370300200241f0096a41206a22042007290300370300200241f0096a41286a220d201d280200360200200220022903d00c3703f009200220063602940120022005360290012002200136028c012002410036028801201d200d28020036020020072004290300370300201820092903003703002021200a2903003703002022200b290300370300200220022903f0093703d00120142009290300370300200e200a2903003703002015200b290300370300200220022903f0093703d00c200241c0016a41086a2003280200360200200220072902003703c001200241b0016a200c200241d00c6a200241c0016a108303024020022802b001450d0020022802b4012203450d0020022802b801450d00200310350b2016450d0120022016417f6a22163602a80120010d000b41958dcc00412b41c08dcc00103f000b20024188016a1081030c010b200541386a2116200541306a211502400240200528023022140d0041002129200241003602e401200241003602d4010c010b2005280238212902400240200541346a28020022060d00201421030c010b2006210320142104034020042802ec0321042003417f6a22030d000b201421030340200320032f01064102746a41ec036a28020021032006417f6a22060d000b200421140b200241003602e801200241003602e001200242003703d801200220143602d401200241003602d001200220033602e401200220032f01063602ec010b200220293602f001200241d0016a108103200541286a200f37030020052010370320200541106a20123703002005201337030820052011370318200520083703002015200e360204201520013602002016200d3602002005200c3a003c2005413d6a2002290368370000200541c5006a2023290300370000200541cd006a2022290300370000200541d5006a2021290300370000200520173b015e200520183a005d0b20022802202201450d0120022001417f6a36022020022802042203450d0620022802082105200228020021060240200228020c220420032f0106490d00034002400240200328020022010d002005ad2108410021010c010b200641016a210620033301044220862005ad8421080b200310352008a72105200121032008422088a7220420012f01064f0d000b200121030b200241d00c6a41186a2215200320044105746a220141206a290000370300200241d00c6a41106a2216200141186a290000370300200241d00c6a41086a2221200141106a2900003703002002200141086a2900003703d00c200241d0016a41086a22222003200441e0006c6a221441ad036a290000370300200241d0016a41106a2223201441b5036a290000370300200241d0016a41186a2229201441bd036a2900003703002002201441a5036a2900003703d001200441016a210420144190036a290300210f20144188036a2903002110201441f8026a2903002112201441f0026a2903002113201441c6036a2f01002117201441c5036a2d00002118201441a4036a2d0000210c201441a0036a280200210d2014419c036a280200210e20144198036a280200210120144180036a2903002111201441e8026a290300210802402006450d00200320044102746a41880b6a2802002103410021042006417f6a2206450d00034020032802880b21032006417f6a22060d000b0b20092015290300370300200a2016290300370300200b2021290300370300201e2022290300370300201f202329030037030020202029290300370300200220022903d00c3703f009200220022903d001370388012002200436020c20022005360208200220033602042002410036020020084202520d000b0b2002108f032000200028020041016a360200200241f00c6a24000f0b41a797cc004110200241d0016a41c8c1c30041c897cc001046000b41958dcc00412b41c08dcc00103f000b103c000b41958dcc00412b41c08dcc00103f000b41958dcc00412b41c08dcc00103f000b8b0503027f017e057f230041d0006b2202240041affdc600ad4280808080f00084100122032900002104200241086a200341086a290000370300200220043703002003103541adb6c300ad4280808080800184100122032900002104200241106a41086a200341086a29000037030020022004370310200310352002200136022c2002412c6aad4280808080c00084100422032900002104200241306a41086a200341086a2900003703002002200437033020031035200241cc006a200241306a3602002002200241c0006a36024420022002412c6a3602482002200241306a360240200241206a200241c0006a107b02400240024002402002280228220541206a2206417f4c0d00200228022021070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a20002006360208200020083602042000200336020002402002280224450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bc20503027f017e047f230041d0006b2202240041fafdc600ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003103541f5bac300ad4280808080f00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b13002000410436020420004180dec3003602000b3400200041affdc60036020420004100360200200041146a4101360200200041106a4194edc300360200200041086a42073702000baa0b080e7f017e047f017e057f027e067f017e23004180016b22022400200141086a280200210320012802042104200028020421052000280200210602400240024020002802082207200028020c2208460d00200041146a28020021092001280200210a2000280210210b200241086a210c0340200c200741106a290300370300200241106a2201200741186a290300370300200241186a220d200741206a29030037030020022007290308370300200741386a210e02402007280228220f0d00200e21070c020b200741306a2802002100200729030021102007412c6a2802002111200241206a41186a2212200d290300370300200241206a41106a22132001290300370300200241206a41086a2214200c290300370300200220022903003703202000ad42c8007e2215422088a70d032015a72207417f4c0d030240024020070d00410821160c010b200710332216450d030b200741c8006e21170240024020000d00410021180c010b200f20004105746a211941002118200f211a0340201a41086a2900002115201a41106a290000211b201a290000211c200241c0006a41186a221d201a41186a290000370300200241c0006a41106a221e201b370300200241c0006a41086a221f20153703002002201c3703400240200b2802002220450d00200b28020421210340202041086a210020202f010622224105742107410021010240024003402007450d01200241c0006a2000412010a008220d450d02200741606a2107200141016a2101200041206a2100200d417f4a0d000b2001417f6a21220b2021450d022021417f6a2121202020224102746a4194036a28020021200c010b0b0240024002402009280208220d202020014102746a41e8026a220028020022074d0d002009280200200741d8006c6a2207427f2007290320221520107c221b201b2015542201200741286a2207290300221c2001ad7c2223201c54201b20155a1b22011b3703202007427f202320011b370300200241e0006a41186a2201201d290300370300200241e0006a41106a220d201e290300370300200241e0006a41086a2220201f290300370300200220022903403703602000280200210020182017470d02024002400240201841016a22072018490d00201841017422212007202120074b1bad42c8007e2215422088a70d002015a722074100480d00024020180d0020070d02410821160c050b201841c8006c22212007460d04024020210d0020070d02410821160c050b20162021200710372216450d020c040b103e000b2007103322160d020b103c000b2007200d41a4c5ca001042000b200741c8006e21170b2016201841c8006c6a2207420037030020072000360220200741186a4200370300200741106a4200370300200741086a4200370300200720022903603702242007412c6a2020290300370200200741346a200d2903003702002007413c6a2001290300370200201841016a21180b201a41206a221a2019470d000b0b0240201141ffffff3f71450d00200f10350b200241e0006a41186a22072012290300370300200241e0006a41106a22002013290300370300200241e0006a41086a2014290300221537030020022002290320221b370360200a4200370310200a41186a4200370300200a4200370308200a2010370300200a41286a4200370300200a4201370320200a2018360238200a2017360234200a2016360230200a201b37023c200a41c4006a2015370200200a41cc006a2000290300370200200a41d4006a2007290300370200200341016a2103200a41e0006a210a200e2107200e2008470d000b200821070b20042003360200200820076b220041386d210102402000450d00200141386c21002007412c6a210703400240200728020041ffffff3f71450d002007417c6a28020010350b200741386a2107200041486a22000d000b0b02402005450d00200541386c450d00200610350b20024180016a24000f0b1045000b1044000bef3007017f017e017f027e017f027e1c7f23004180036b2207240002400240024002402001200284500d002003200484500d004201210820074198016a200320012003200156200420025620042002511b22091b220a2004200220091b220b20054201200542015620064200522006501b220c1b220520064200200c1b220610980820074188016a200729039801220d20074198016a41086a290300220e200520061084082002200420091b21022001200320091b2104200a20072903880185200b20074188016a41086a290300858450450d01200d210a200e210b420021060c020b20004100360200200041106a4200370300200041086a42003703000c020b200741f8006a2004200220052006109808200741e8006a20072903782201200741f8006a41086a2903002203200520061084084200200620042007290368852002200741e8006a41086a29030085845022091b21064201200520091b21082003200220091b21022001200420091b21040b200741386a200b420020044200108408200741c8006a20024200200a4200108408200741d8006a200a4200200442001084080240024002400240024002400240024002400240024002400240024002400240200b420052200242005271200729034042005272200729035042005272200741d8006a41086a2903002201200729033820072903487c7c2203200154724101470d00411010332209450d0d2007420437029c02200720093602980220074198026a41004104108601200741f0026a41086a220920072802a002220c41046a360200200728029802200c4102746a220c200a3e020c200c200a4220883e0208200c200b3e0204200c200b4220883e020020072007290398023703f002200741f0026a10e607200741a8016a41086a2009280200360200200720072903f0023703a80141101033220c450d0d2007420437029c022007200c3602980220074198026a41004104108601200920072802a002220c41046a360200200728029802200c4102746a220c20043e020c200c20044220883e0208200c20023e0204200c20024220883e020020072007290398023703f002200741f0026a10e607200741b8016a41086a2009280200360200200720072903f0023703b801411010332209450d0d2007420437029c02200720093602980220074198026a41004104108601200741f0026a41086a220c20072802a002220941046a36020020072802980220094102746a22092008a7220f36020c200920084220883e0208200920063e0204200920064220883e020020072007290398023703f002200741f0026a10e607200c280200211020072802f402211120072802f0022112200c200741b8016a41086a280200360200200720072903b8013703f00220074198026a41086a200741a8016a41086a280200360200200720072903a80137039802200741c8016a20074198026a200741f0026a10e807024020072802f40241ffffffff0371450d0020072802f00210350b200741c8016a10e60720104101460d0120072802cc01211320072802c80121142010450d0a2012280200450d0a024020072802d0012215450d002014280200450d0b201520104d0d0b200720103602d401201520106b221641016a22174101201741014b1b221841ffffffff03712018470d0320184102742219417f4c0d0320191039221a450d0e201041ffffffff03712010470d032010410274221b417f4c0d03201b1039221c450d0e4101210f410221092012280200220c67221d211e0240200c41ffffffff034b0d0041022109201d210c4101210f034020094101200c4101711b200f6c210f200c41034b211f200920096c2109200c410176221e210c201f0d000b0b200720153602f802200720133602f402200720143602f0024104211f41041033220c450d0f200c20094101201e4101461b200f6c220f360200200742818080801037029c022007200c36029802200741d8016a200741f0026a20074198026a10e807200c10350240201b450d00201b1033221f450d0f0b200741003602a0022007201b410276222036029c022007201f3602980220074198026a4100201010860120072802980220072802a00222094102746a20122010410274109d081a200741f8026a200920106a36020020072007290398023703f002410410332209450d0f2009200f360200200742818080801037029c022007200936029802200741e8016a200741f0026a20074198026a10e80720091035024020072802d40120176a220920072802e001220c4d0d00200741003602a002200742043703980220074198026a41002009200c6b220c10860120072802a00221090240200c450d0020072802980220094102746a4100200c410274109f081a2009200c6a21090b200741f0026a41086a220c200936020020072007290398023703f00220072802d801211f200741f0026a200920072802e001220f10860120072802f002200c28020022094102746a201f200f410274109d081a200c2009200f6a220936020020074198026a41086a220c2009360200200720072903f00237039802024020072802dc0141ffffffff0371450d0020072802d80110350b200741d8016a41086a200c28020036020020072007290398023703d8010b20194102762121200741e8016a10e607024002400240024002400240024002400240024003402007201622223602f401024020072802e001220920072802d401220c20226a220f417f736a221f2009490d00201f200941ac95cc001042000b0240024002400240024002400240024002400240024002400240024020092009200f6b220f4d0d0020072802f00122092009200c6b220c4d0d0120072802e801200c4102746a35020022024200510d02202220224100476b211620072802d8012209201f4102746a35020021012009200f4102746a3502002104200741003602f80120072004200142208684200280220137038002200741003602880220072004200120027e7d42ffffffff0f83370390022007200741f4016a3602ac022007200741d8016a3602a8022007200741d4016a3602a4022007200741e8016a3602a002200720074188026a36029c022007200741f8016a3602980220074198026a10e9071a034020072802880241016a41004c0d04024020072903900242ffffffff0f560d0020074198026a10e9070d010b0b200729038002210220072802f401210920072802d401210c200741003a00f8022007200c20096a3602f402200720093602f0022007200741d8016a3602fc02200741b0026a200741f0026a10ec0720072802f001220941ffffffff03712009470d1c2009410274220c417f4c0d1c20072802e801210f02400240200c0d004104211f0c010b200c1033221f450d280b200741003602f8022007201f3602f0022007200c4102763602f402200741f0026a4100200910860120072802f00220072802f802221f4102746a200f200c109d081a200741e0026a41086a2223201f20096a360200200720072903f0023703e002410810332209450d2820092002a72224360204200920024220883e020020074282808080203702f402200720093602f002200741c0026a200741e0026a200741f0026a10e8072009103520072802b802221920072802c8022225201920254b1b22144101201441014b1b220c41ffffffff0371200c470d1c200c4102742226417f4c0d1c20072802b402212720072802b00221280240024020260d00410421290c010b202610392229450d280b2014450d062025417f6a221b20254b211520072802c002212a2019417f6a221720194b0d04200c417f6a2109202920266a417c6a211e4100210f4200210203404100211f024020192017200f6b22134d0d004100211f201320174b0d00202820134102746a280200211f0b201fad21044100211f024020150d002025201b200f6b22134d0d002013201b4b0d00202a20134102746a280200211f0b024002402004201fad22037d22012004560d00200120027d220a2001560d00200a42ffffffff0f832104420021020c010b20044280808080108420027d20037d2104420121020b200c20094d0d09201e20043e0200201e417c6a211e2009417f6a2109200f41016a220f2014490d000c060b0b200f200941ac95cc001042000b200c200941ac95cc001042000b419095cc00411941b494cc00103f000b41ac96cc004118200741f0026a41c496cc0041d496cc001046000b200c417f6a2109202920266a417c6a211f4100211e4200210203404100210f024020150d004100210f2025201b201e6b22134d0d004100210f2013201b4b0d00202a20134102746a280200210f0b024002404200200fad22017d22044200520d00200420027d22032004560d00200342ffffffff0f832104420021020c010b428080808010200220017c7d2104420121020b200c20094d0d04201f20043e0200201f417c6a211f2009417f6a2109201e41016a221e2014490d000b0b41012113200250450d010b410021130b0240202741ffffffff0371450d00202810350b20072802d401221f20072802f401220f6a2215201f490d05200f20154f0d01200f417f7321090340200c200c200f6a20096a221e4d0d03200920072802e00122146a220f20094f0d0420072802d801200f4102746a2029201e4102746a2802003602002009417f6a210920072802f401210f201f417f6a221f0d000c050b0b2009200c41bc95cc001042000b201f450d020c030b20252019202520194b1b22074101200741014b1b200f6a20096a200c41ac95cc001042000b200f201441bc95cc001042000b200c200c2015417f7322096a200f6a220f4d0d0220072802e001220c20096a2209200c4f0d0320072802d80120094102746a2029200f4102746a28020036020020072802f401210f0b2018200f417f736a220920184f0d03201a20094102746a202436020002402013450d00201820072802f401417f736a220920184f0d05201a20094102746a22092009280200417f6a36020020072802f401210920072802d401210c200741003a00f8022007200c20096a3602f402200720093602f0022007200741d8016a3602fc02200741d0026a200741f0026a10ec0720072802f001220941ffffffff03712009470d0f2009410274220c417f4c0d0f20072802e801210f02400240200c0d004104211f0c010b200c1033221f450d1b0b200741003602f8022007201f3602f0022007200c4102763602f402200741f0026a4100200910860120072802f00220072802f802221f4102746a200f200c109d081a2023201f20096a360200200720072903f0023703e002200741f0026a200741e0026a200741d0026a10e707024020072802d401220920072802f40122146a220c2009490d00024002402014200c4f0d00200c417f73210920072802f002211320072802f802210f2014211f0340200f200f201f6a20096a221f4d0d0a200920072802e00122156a221e20094f0d0b20072802d801201e4102746a2013201f4102746a280200360200200941016a210920072802f401211f2014200c417f6a220c490d000c020b0b20090d0120072802f802210f2014211f0b201f2014417f7322096a220c200f6a221f200c4f0d0920072802e001220c20096a2209200c4f0d0a20072802d80120094102746a20072802f002201f4102746a2802003602000b024020072802f40241ffffffff0371450d0020072802f00210350b20072802d40241ffffffff0371450d0020072802d00210350b02402026450d00202910350b024020072802c40241ffffffff0371450d0020072802c00210350b20220d000b0240201d0d0020072802e001211020072802dc01212020072802d801210f201c1035410021090c130b4101210920072802d401220c4101460d114100200c6b2114201d411f7121134100201d6b411f7121152010410274201c6a417c6a210c417f210903400240200920072802e001221f6a220f2009490d00200f201f41ac95cc001042000b201f200f417f6a221e4d0d09201020096a221f20104f0d0a200c20072802d801221f201e4102746a280200201574201f200f4102746a28020020137672360200200c417c6a210c20142009417f6a2209460d110c000b0b200f200c41ac95cc001042000b2009200c41bc95cc001042000b2009201841bc95cc001042000b2009201841ac95cc001042000b201f200f41ac95cc001042000b201e201541bc95cc001042000b201f200f41ac95cc001042000b2009200c41bc95cc001042000b200f417f6a201f41ac95cc001042000b201f201041bc95cc001042000b41004100419c96cc001042000b200741286a200729035820032008200610980820004100360200200041106a200741286a41086a290300370300200041086a20072903283703000c0f0b20074198026a41086a200741c8016a41086a280200221f360200200720072903c80137039802201f4101201f41014b1b221e41ffffffff0371201e470d00201e410274221b417f4c0d0002400240201b0d00410421170c010b201b10392217450d0c0b201f450d022017201e410274201f4102746b6a210c201f417f6a2114201e201f6b2113200f4101200f41014b1bad21024200210441002109200728029802210f0340201e201320096a22154d0d02200c2004422086200f35020084220420028022013e020020142009460d03200c41046a210c200f41046a210f2004200120027e7d2104201f200941016a22094b0d000b2009201f41ac95cc001042000b1044000b2015201e41bc95cc001042000b2007201e3602f8022007201b4102763602f402200720173602f002200728029c0241ffffffff0371450d0720072802980210350c070b20072802d40121090b20072802e001220c200c20096b220f4d0d012010201020096b22094d0d02201c20094102746a20072802d801200f4102746a280200201d411f717636020041012109201c210f0b024020072802ec0141ffffffff0371450d0020072802e80110350b2009450d0320072802dc0141ffffffff0371450d0320072802d80110350c030b200f200c41ac95cc001042000b2009201041bc95cc001042000b4100211a0240201341ffffffff0371450d00201410350b0b410410332209450d022009410036020041041033220c450d02200c41003602004101211e02400240201a0d002009211a4101212141012118200c210f41012120410121100c010b20091035200c10350b2007201836028002200720213602fc012007201a3602f801200720103602a0022007202036029c022007200f3602980220074198026a10e607420021020240024020072802a00222094105744180014d0d00421d21040c010b4100211e024020090d00420021040c010b200728029802220c200941027422096a417c6a220f280200211f0240200c200f470d00201fad21040c010b200c41786a210f201fad2104200741206a211f4120210c420021020340200741186a200f20096a3502004200200c41e0007110a308201f29030020027c2007290318220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b0240200728029c0241ffffffff0371450d0020072802980210350b201e0d030240200420084201882006423f8684562002200642018822045620022004511b450d0020074188026a41086a200741f8016a41086a280200360200200720072903f80137038802411010332209450d022007420437029c02200720093602980220074198026a41004104108601200741f0026a41086a220920072802a002220c41046a360200200728029802200c4102746a220c428080808010370208200c420037020020072007290398023703f002200741f0026a10e60720074198026a41086a2009280200360200200720072903f00237039802200741f8016a20074188026a20074198026a10e707200728029c0241ffffffff0371450d0020072802980210350b200741f0026a41086a200741f8016a41086a280200360200200720072903f8013703f0020b200741f0026a10e60720074198026a41086a2209200741f0026a41086a280200360200200720072903f0023703980220074198026a10e6074200210202400240200928020022094105744180014d0d00421d21044101211e0c010b4100211e024020090d00420021040c010b200728029802220c200941027422096a417c6a220f280200211f0240200c200f470d00201fad21040c010b200c41786a210f201fad2104200741106a211f4120210c420021020340200741086a200f20096a3502004200200c41e0007110a308201f29030020027c2007290308220220047c2204200254ad7c2102200c41206a210c2009417c6a22094104470d000b0b0240200728029c0241ffffffff0371450d0020072802980210350b02400240201e450d00200041a898cc00360204200041086a4119360200410121090c010b200041106a2002370300200041086a2004370300410021090b20002009360200201141ffffffff0371450d03201210350c030b1045000b103c000b200720043e029c02200741fc95cc003602980241d897cc00412f20074198026a418898cc00419898cc001046000b20074180036a24000b870701047f230041d0006b2208240002400240024002402002200685200320078584500d00200220038450450d01410121090c020b417f20002004852001200585844200522000200454200120055420012005511b1b21090c010b0240200620078450450d0041ff0121090c010b411010332209450d012008420437024420082009360240200841c0006a41004104108601200841306a41086a22092008280248220a41046a3602002008280240200a4102746a220a20003e020c200a20004220883e0208200a20013e0204200a20014220883e020020082008290340370330200841306a10e607200841106a41086a220b20092802003602002008200829033037031041101033220a450d01200842043702442008200a360240200841c0006a4100410410860120092008280248220a41046a3602002008280240200a4102746a220a20063e020c200a20064220883e0208200a20073e0204200a20074220883e020020082008290340370330200841306a10e607200841206a41086a200928020036020020082008290330370320200841c0006a41086a200b280200360200200820082903103703402008200841c0006a200841206a10e8070240200828022441ffffffff0371450d00200828022010350b411010332209450d012008420437024420082009360240200841c0006a41004104108601200841306a41086a22092008280248220a41046a3602002008280240200a4102746a220a20043e020c200a20044220883e0208200a20053e0204200a20054220883e020020082008290340370330200841306a10e607200841106a41086a220b20092802003602002008200829033037031041101033220a450d01200842043702442008200a360240200841c0006a4100410410860120092008280248220a41046a3602002008280240200a4102746a220a20023e020c200a20024220883e0208200a20033e0204200a20034220883e020020082008290340370330200841306a10e607200841206a41086a200928020036020020082008290330370320200841c0006a41086a200b28020036020020082008290310370340200841306a200841c0006a200841206a10e8070240200828022441ffffffff0371450d00200828022010350b2008200841306a10ea0721090240200828023441ffffffff0371450d00200828023010350b200828020441ffffffff0371450d00200828020010350b200841d0006a240020090f0b1045000bbb0703017f067e017f230041d0006b22022400024002400240200029031022032001290310220485200041186a2903002205200141186a29030022068584500d00200041086a290300210720002903002108411010332200450d022002420437024420022000360240200241c0006a41004104108601200241306a41086a22092002280248220041046a360200200228024020004102746a220020083e020c200020084220883e0208200020073e0204200020074220883e020020022002290340370330200241306a10e607200241106a41086a200928020036020020022002290330370310411010332200450d022002420437024420022000360240200241c0006a41004104108601200241306a41086a22092002280248220041046a360200200228024020004102746a220020043e020c200020044220883e0208200020063e0204200020064220883e020020022002290340370330200241306a10e607200241206a41086a200928020036020020022002290330370320200241c0006a41086a200241106a41086a280200360200200220022903103703402002200241c0006a200241206a10e8070240200228022441ffffffff0371450d00200228022010350b200141086a290300210420012903002106411010332200450d022002420437024420022000360240200241c0006a41004104108601200241306a41086a22002002280248220141046a360200200228024020014102746a220120063e020c200120064220883e0208200120043e0204200120044220883e020020022002290340370330200241306a10e607200241106a41086a2209200028020036020020022002290330370310411010332201450d022002420437024420022001360240200241c0006a4100410410860120002002280248220141046a360200200228024020014102746a220120033e020c200120034220883e0208200120053e0204200120054220883e020020022002290340370330200241306a10e607200241206a41086a200028020036020020022002290330370320200241c0006a41086a200928020036020020022002290310370340200241306a200241c0006a200241206a10e8070240200228022441ffffffff0371450d00200228022010350b2002200241306a10ea0721000240200228023441ffffffff0371450d00200228023010350b200041ff017121000240200228020441ffffffff0371450d00200228020010350b20004521000c010b2000290300200129030085200041086a290300200141086a29030085845021000b200241d0006a240020000f0b1045000bae380b147f017e017f017e017f017e017f017e017f017e0e7f23004180036b220524000240024020014115490d004101210641012107024002400240034020012108200021092006200771410173210a02400240024002400240024003400240024002402004450d00024020064101710d002000200110ff062004417f6a21040b20052002360208200520003602502005200136025420052001410276220b36020c2005200b410174220c3602102005200b41036c220d360214200541003602182005200541186a3602d8012005200541d0006a3602d4012005200541086a3602d0012005200541d0016a36021c024020014132490d002005200b417f6a3602202005200b41016a3602d0022005411c6a200541206a2005410c6a200541d0026a1080072005200c417f6a3602202005200c4101723602d0022005411c6a200541206a200541106a200541d0026a1080072005200d417f6a3602202005200d41016a3602d0022005411c6a200541206a200541146a200541d0026a1080070b2005411c6a2005410c6a200541106a200541146a1080072005280218220b410b4b0d01200b45210b2005280210210e0c020b2000200120021081070c0e0b02402005280254220c410176220d450d002005280250220b200c41306c6a41506a210c0340200541d0026a41286a220f200b41286a2210290300370300200541d0026a41206a2211200b41206a2212290300370300200541d0026a41186a220e200b41186a2213290300370300200541d0026a41106a2214200b41106a2215290300370300200541d0026a41086a2216200b41086a22172903003703002005200b2903003703d002200c41086a22182903002119200c41106a221a290300211b200c41186a221c290300211d200c41206a221e290300211f200c41286a22202903002121200b200c290300370300201020213703002012201f3703002013201d3703002015201b370300201720193703002020200f290300370300201e2011290300370300201c200e290300370300201a201429030037030020182016290300370300200c20052903d002370300200c41506a210c200b41306a210b200d417f6a220d0d000b0b20012005280210417f736a210e4101210b0b0240200b45200a724101710d002000200120021082070d0d0b02402003450d00200e20014f0d030240200228020028020028020022142802002211450d00201428020421122011211002400340201041086a210c20102f01062213410574210b4100210d024002400340200b450d012003200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21130b024020120d004200211b420021190c030b2012417f6a2112201020134102746a41c8056a28020021100c010b0b2010200d4105746a220b41f0026a2903002119200b41e8026a290300211b0b2011450d002000200e41306c6a2110201428020421120340201141086a210c20112f01062213410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21130b2012450d022012417f6a2112201120134102746a41c8056a28020021110c010b0b201b2011200d4105746a220b41e8026a290300542019200b41f0026a290300221b542019201b511b450d0020002109200121080c030b200541d0026a41286a221a200041286a2222290300370300200541d0026a41206a221c200041206a2223290300370300200541d0026a41186a221e200041186a2224290300370300200541d0026a41106a2220200041106a2207290300370300200541d0026a41086a2225200041086a2226290300370300200520002903003703d0022000200e41306c6a220b41086a220c2903002119200b41106a220d290300211b200b41186a220f290300211d200b41206a2210290300211f200b41286a221129030021212000200b290300370300202220213703002023201f3703002024201d3703002007201b370300202620193703002011201a2903003703002010201c290300370300200f201e290300370300200d2020290300370300200c2025290300370300200b20052903d002370300200541d0016a41286a22272022290300370300200541d0016a41206a22282023290300370300200541d0016a41186a22292024290300370300200541d0016a41106a222a2007290300370300200541d0016a41086a222b2026290300370300200520002903003703d001200041306a21184100210e200121140340200228020021170240200e2014417f6a22154f0d00201728020028020022162802002113034002402013450d00201628020421112013211002400340201041086a210c20102f01062212410574210b4100210d024002400340200b450d01200541d0016a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21120b024020110d004200211b420021190c030b2011417f6a2111201020124102746a41c8056a28020021100c010b0b2010200d4105746a220b41f0026a2903002119200b41e8026a290300211b0b2013450d002018200e41306c6a211020162802042112201321110340201141086a210c20112f01062214410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21140b2012450d022012417f6a2112201120144102746a41c8056a28020021110c010b0b201b2011200d4105746a220b41e8026a2903005a2019200b41f0026a290300221b5a2019201b511b450d020b200e41016a220e2015470d000b2015210e0b02400340200e201522144f0d010240201728020028020022162802002211450d002014417f6a2115201628020421122011211002400340201041086a210c20102f01062213410574210b4100210d024002400340200b450d01200541d0016a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21130b024020120d004200211b420021190c030b2012417f6a2112201020134102746a41c8056a28020021100c010b0b2010200d4105746a220b41f0026a2903002119200b41e8026a290300211b0b2011450d002000201441306c6a2110201628020421120340201141086a210c20112f01062213410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21130b2012450d022012417f6a2112201120134102746a41c8056a28020021110c010b0b201b2011200d4105746a220b41e8026a290300542019200b41f0026a290300221b542019201b511b0d010b0b201a2018200e41306c6a220b41286a220d290300370300201c200b41206a220f290300370300201e200b41186a22102903003703002020200b41106a22112903003703002025200b41086a22122903003703002005200b2903003703d0022000201441306c6a220c41086a22132903002119200c41106a2215290300211b200c41186a2216290300211d200c41206a2217290300211f200c41286a222c2903002121200b200c290300370300200d2021370300200f201f3703002010201d3703002011201b37030020122019370300202c201a2903003703002017201c2903003703002016201e2903003703002015202029030037030020132025290300370300200c20052903d002370300200e41016a210e0c010b0b200020052903d0013703002022202729030037030020232028290300370300202420292903003703002007202a2903003703002026202b2903003703002001200e41016a220b490d042000200b41306c6a21002001200b6b220141154f0d010c0c0b0b2008450d030b200e20084f0d03200541d0026a41286a2220200941286a2226290300370300200541d0026a41206a2225200941206a2227290300370300200541d0026a41186a222c200941186a2228290300370300200541d0026a41106a2222200941106a2229290300370300200541d0026a41086a2223200941086a222a290300370300200520092903003703d0022009200e41306c6a220b41086a220c2903002119200b41106a220d290300211b200b41186a220f290300211d200b41206a2210290300211f200b41286a221129030021212009200b290300370300202620213703002027201f3703002028201d3703002029201b370300202a20193703002011202029030037030020102025290300370300200f202c290300370300200d2022290300370300200c2023290300370300200b20052903d002370300200541206a41286a222b2026290300370300200541206a41206a22062027290300370300200541206a41186a220a2028290300370300200541206a41106a222d2029290300370300200541206a41086a222e202a29030037030020052009290300370320200941306a21002002280200211602402008417f6a22170d00410021240c050b2016280200280200221428020021134100212403402013450d052000202441306c6a2110201428020421122013211102400340201141086a210c20112f0106220e410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a210e0b024020120d004200211b420021190c030b2012417f6a21122011200e4102746a41c8056a28020021110c010b0b2011200d4105746a220b41f0026a2903002119200b41e8026a290300211b0b2013450d0520142802042111201321100340201041086a210c20102f01062212410574210b4100210d024002400340200b450d01200541206a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21120b2011450d072011417f6a2111201020124102746a41c8056a28020021100c010b0b201b2010200d4105746a220b41e8026a290300542019200b41f0026a290300221b542019201b511b450d05202441016a22242017470d000b201721240c040b200e200141d086cc001042000b200b200141e485cc001059000b4100410041f485cc001042000b200e2008418486cc001042000b2017210b02400340200b221420244d22070d010240024002402016280200280200221528020022120d004200211f4200211b0c010b2009201441306c6a21102015280204210e2012211102400340201141086a210c20112f01062213410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21130b0240200e0d004200211f4200211b0c030b200e417f6a210e201120134102746a41c8056a28020021110c010b0b2011200d4105746a220b41f0026a290300211b200b41e8026a290300211f0b2012450d00201528020421100340201241086a210c20122f01062211410574210b4100210d024002400340200b450d01200541206a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21110b2010450d022010417f6a2110201220114102746a41c8056a28020021120c010b0b2012200d4105746a220b41f0026a2903002119200b41e8026a290300211d0c010b4200211d420021190b2014417f6a210b201f201d5a201b20195a201b2019511b0d000b0b20142024490d0320172014490d022000201441306c6a2117418001211c410021154100211a4100211441002118418001211e2000202441306c6a222f21000340201720006b220b41306e210c0240200b41afe0004b22010d00200c41807f6a200c201a2015492018201449220d72220f1b210b0240200f450d00201e200b200d1b211e200b201c200d1b211c0c010b200b200b410176221e6b211c0b024020182014470d000240201e0d00200541d0006a221421180c010b41002113200541d0006a2114200021100340201420133a0000201341016a21130240024002402002280200280200280200221828020022120d004200211d420021190c010b2018280204210e2012211102400340201141086a210c20112f01062216410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21160b0240200e0d004200211d420021190c030b200e417f6a210e201120164102746a41c8056a28020021110c010b0b2011200d4105746a220b41f0026a2903002119200b41e8026a290300211d0b2012450d00201828020421110340201241086a210c20122f0106220e410574210b4100210d024002400340200b450d01200541206a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a210e0b2011450d022011417f6a21112012200e4102746a41c8056a28020021120c010b0b2012200d4105746a220b41f0026a290300211b200b41e8026a290300211f0c010b4200211f4200211b0b2014201d201f5a2019201b5a2019201b511b6a2114201041306a21102013201e470d000b200541d0006a21180b0240201a2015470d000240201c0d00200541d0016a2215211a0c010b41002113200541d0016a2115201721100340201520133a0000201041506a2110201341016a21130240024002402002280200280200280200221a28020022120d004200211d420021190c010b201a280204210e2012211102400340201141086a210c20112f01062216410574210b4100210d024002400340200b450d012010200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a21160b0240200e0d004200211d420021190c030b200e417f6a210e201120164102746a41c8056a28020021110c010b0b2011200d4105746a220b41f0026a2903002119200b41e8026a290300211d0b2012450d00201a28020421110340201241086a210c20122f0106220e410574210b4100210d024002400340200b450d01200541206a200c412010a008220f450d02200b41606a210b200d41016a210d200c41206a210c200f417f4a0d000b200d417f6a210e0b2011450d022011417f6a21112012200e4102746a41c8056a28020021120c010b0b2012200d4105746a220b41f0026a290300211b200b41e8026a290300211f0c010b4200211f4200211b0b2015201d201f542019201b542019201b511b6a21152013201c470d000b200541d0016a211a0b02402015201a6b220b201420186b220c200c200b4b1b2211450d002020200020182d000041306c6a220b41286a2903003703002025200b41206a290300370300202c200b41186a2903003703002022200b41106a2903003703002023200b41086a2903003703002005200b2903003703d002200020182d000041306c6a220b2017201a2d0000417f7341306c6a220c290300370300200b41286a200c41286a290300370300200b41206a200c41206a290300370300200b41186a200c41186a290300370300200b41106a200c41106a290300370300200b41086a200c41086a290300370300024020114101460d004100210d03402017201a200d6a220f2d0000417f7341306c6a220b20002018200d6a41016a22102d000041306c6a220c290300370300200b41286a200c41286a290300370300200b41206a200c41206a290300370300200b41186a200c41186a290300370300200b41106a200c41106a290300370300200b41086a200c41086a290300370300200020102d000041306c6a220b2017200f41016a2d0000417f7341306c6a220c290300370300200b41286a200c41286a290300370300200b41206a200c41206a290300370300200b41186a200c41186a290300370300200b41106a200c41106a290300370300200b41086a200c41086a290300370300200d41026a210b200d41016a220c210d200b2011490d000b201a200c6a211a2018200c6a21180b2017201a2d0000417f7341306c6a220b20052903d002370300200b41286a2020290300370300200b41206a2025290300370300200b41186a202c290300370300200b41106a2022290300370300200b41086a2023290300370300201a41016a211a201841016a21180b2000201e41306c6a200020182014461b210020174100201c6b41306c6a2017201a2015461b211720010d000b02400240201820144f0d002017210b0340202020002014417f6a22142d000041306c6a220c41286a220d2903003703002025200c41206a220f290300370300202c200c41186a22102903003703002022200c41106a22112903003703002023200c41086a22122903003703002005200c2903003703d002200b41506a220b41086a220e2903002119200b41106a2213290300211b200b41186a2215290300211d200b41206a2216290300211f200b41286a22172903002121200c200b290300370300200d2021370300200f201f3703002010201d3703002011201b3703002012201937030020172020290300370300201620252903003703002015202c29030037030020132022290300370300200e2023290300370300200b20052903d00237030020182014490d000c020b0b2000210b201a20154f0d0003402015417f6a22152d0000210c2020200b41286a220d2903003703002025200b41206a220f290300370300202c200b41186a22102903003703002022200b41106a22112903003703002023200b41086a22122903003703002005200b2903003703d0022017200c417f7341306c6a220c41086a220e2903002119200c41106a2213290300211b200c41186a2214290300211d200c41206a2216290300211f200c41286a22002903002121200b200c290300370300200d2021370300200f201f3703002010201d3703002011201b3703002012201937030020002020290300370300201620252903003703002014202c29030037030020132022290300370300200e2023290300370300200c20052903d002370300200b41306a210b201a2015490d000b0b200920052903203703002026202b290300370300202720062903003703002028200a2903003703002029202d290300370300202a202e29030037030002402008200b202f6b41306e20246a22014d0d002020202629030037030020252027290300370300202c2028290300370300202220292903003703002023202a290300370300200520092903003703d0022009200141306c6a220b41086a220c2903002119200b41106a220d290300211b200b41186a220f290300211d200b41206a2210290300211f200b41286a221129030021212009200b290300370300202620213703002027201f3703002028201d3703002029201b370300202a20193703002011202029030037030020102025290300370300200f202c290300370300200d2022290300370300200c2023290300370300200b20052903d002370300200820016b220c450d02200c20012001200c4b1b210d2008410376210f200b41306a2100024002402001200c417f6a220c490d002000200c2002200b2004109e04200921000c010b20092001200220032004109e04200b2103200c21010b200d200f4f2106200141154f0d010c050b0b20012008418486cc001042000b41a486cc00411c41c086cc00103f000b20142017419486cc001058000b20242014419486cc001059000b20014102490d004101210b03402000200b41016a220b20021083072001200b470d000b0b20054180036a24000bad0302027f037e230041d0006b22042400200441386a20024201200242015620034200522003501b22051b22022003420020051b220342ffff034200109808200441286a20042903382206200441386a41086a290300220742ffff034200108408200441186a20022003200620022004290328852003200441286a41086a2903008584420052ad7c22084201200842015620072008200654ad7c22064200522006501b22051b22082006420020051b22061098080240024002402004290318220742808004544100200441186a41086a290300501b450d00200441086a200220002002200054200320015420032001511b22051b2003200120051b200820061098082004290308220342808004544100200441086a41086a290300501b450d012007a741ffff037122050d024190edc40041194180efc400103f000b2004411136024c20044190efc40036024841bcedc40041de00200441c8006a41acedc400419ceec4001046000b2004411136024c20044190efc40036024841bcedc40041de00200441c8006a41acedc40041f0eec4001046000b200441d0006a24002003a741ffff037141ffff036c20056e0b810103017f017e027f230041106b220324000240024002402002ad4220862000ad84102a2204428080808010540d00410121022004a722052d0000220641014b0d0020060e020102010b41b89acc00412e200341086a41c09bcc0041e89acc001046000b410021020b2005103502402001450d00200010350b200341106a240020020b13002000410b360204200041c4eec3003602000b3400200041fafdc60036020420004100360200200041146a4104360200200041106a41e8a9c400360200200041086a42083702000b930301027f024020002802082201450d0020002802002202200141c8006c6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010350b0240200241246a2d00004101470d002002412c6a280200450d00200241286a28020010350b200241c8006a22022001470d000b0b0240200041046a2802002202450d00200241c8006c450d00200028020010350b024020002d000c4101470d00200041146a280200450d00200041106a28020010350b024020002d00304101470d00200041386a280200450d00200041346a28020010350b024020002d00544101470d00200041dc006a280200450d00200041d8006a28020010350b024020002d00784101470d0020004180016a280200450d00200041fc006a28020010350b024020002d009c014101470d00200041a4016a280200450d00200041a0016a28020010350b024020002d00c0014101470d00200041c8016a280200450d00200041c4016a28020010350b024020002d00e4014101470d00200041ec016a280200450d00200041e8016a28020010350b0b13002000410636020420004188b3c4003602000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241143600000b2d01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241e4003600000b3901017f02404110103322020d001045000b200242003700082002428080d287e2bc2d370000200042908080808002370204200020023602000b3901017f02404110103322020d001045000b2002420037000820024280c0c6c9faeb38370000200042908080808002370204200020023602000b3a01017f02404110103322020d001045000b2002420037000820024280809aa6eaafe301370000200042908080808002370204200020023602000bde0102027f017e230041106b2202240002402000280200220341064b0d00024002400240024002400240024020030e0700010203040506000b200241003a000020012002410110780c060b200241013a00002001200241011078200029030821042002200041106a2903003703082002200437030020012002411010780c050b200241023a000020012002410110780c040b200241033a000020012002410110780c030b200241043a000020012002410110780c020b200241053a000020012002410110780c010b200241063a000020012002410110780b200241106a24000bfa0301047f230041106b2202240020002802002103200028020822042001107702402004450d002003200441c8006c6a210503402002200310ac042001200228020022042002280208107802402002280204450d00200410350b2002200341246a220310ac042001200228020022042002280208107802402002280204450d00200410350b200341246a22032005470d000b0b20022000410c6a10ac042001200228020022032002280208107802402002280204450d00200310350b2002200041306a10ac042001200228020022032002280208107802402002280204450d00200310350b2002200041d4006a10ac042001200228020022032002280208107802402002280204450d00200310350b2002200041f8006a10ac042001200228020022032002280208107802402002280204450d00200310350b20022000419c016a10ac042001200228020022032002280208107802402002280204450d00200310350b0240024020002d0088024101460d00200241003a000020012002410110780c010b200241013a00002001200241011078200120004189026a411410780b2002200041c0016a10ac042001200228020022032002280208107802402002280204450d00200310350b2002200041e4016a10ac042001200228020022032002280208107802402002280204450d00200310350b200241106a24000bd10201057f230041106b22022400024002400240024002400240024002400240024020012d00000e06010203040500010b20024181ca003b01082002200141216a3602042002200141016a3602000c050b410110392201450d062000428180808010370204200020013602000c050b2001410c6a22032802002204412020044120491b220541016a220410332206450d05200620042004109f082106200328020022032005490d06200641016a200141046a2802002005109d081a2000200436020820002004360204200020063602000c040b20024181c4003b01082002200141216a3602042002200141016a3602000c020b20024181c6003b01082002200141216a3602042002200141016a3602000c010b20024181c8003b01082002200141216a3602042002200141016a3602000b2000200210cc070b200241106a24000f0b1045000b2005200341c4e7cb001058000b8611010a7f23004180016b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a2207360200200541254b0d014100210820050e261301010101010101010101010101010101010101010101010101010101010101010102030405130b200041063a00000c130b02402005417f6a41ff01714121490d00200041063a00000c130b02402005417f6a22090d0020012006360204200120073602004101210a410021094100210b410121080c120b0240024020091039220a450d0020012802042009490d01200a20012802002009109d081a200128020422052009490d062001200520096b3602042001200128020020096a360200410121082009210b0c130b1045000b200041063a0000200a10350c120b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c100b41012101200541ff01710d040c0e0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0d0b41012101200541ff01710d040c0b0b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c0a0b41012101200541ff01710d040c080b41002105200241003a00782003417f6a210a2003417e6a210302400340200a2005460d01200241d8006a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00782003417f6a21032009210520094120470d000b200241d6006a20022d005a3a0000200241c8006a200241ef006a290000370300200241d0006a200241f7006a2d00003a0000200220022f01583b0154200220022900673703404100210120022800632109200228005f210b200228005b210a0c070b41012101200541ff01710d040c050b2009200541a4f0cb001059000b200241003a00780c090b200241003a00780c060b200241003a00780c030b200241003a00780b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410521080c070b200041063a00000c070b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410421080c050b200041063a00000c050b0b2002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b012420022002290328370310410321080c030b200041063a00000c030b0b410221082002413c6a41026a2205200241d4006a41026a2d00003a0000200241286a41086a2204200241c0006a41086a290300370300200241286a41106a2203200241c0006a41106a2d00003a0000200220022f01543b013c20022002290340370328024020010d00200241246a41026a20052d00003a0000200241106a41086a2004290300370300200241106a41106a20032d00003a0000200220022f013c3b0124200220022903283703100c010b200041063a00000c010b200020083a0000200020022f01243b00012000410c6a2009360000200041086a200b360000200041046a200a360000200041106a2002290310370000200041216a20022f000d3b0000200041036a200241246a41026a2d00003a0000200041186a200241106a41086a290300370000200041206a200241106a41106a2d00003a0000200041236a2002410d6a41026a2d00003a00000b20024180016a24000be40701087f230041d00b6b22042400024020002802000d002000417f360200200441206a41186a200141186a290000370300200441206a41106a200141106a290000370300200441206a41086a200141086a2900003703002004200129000037032002400240024020002802042205450d00200041086a28020021060c010b41002106200441f0086a410041e002109f081a200441d0006a410041a008109f081a41880b10332205450d01200541003b010620054100360200200541086a200441f0086a41e002109d081a200541e8026a200441d0006a41a008109d081a200041086a4100360200200020053602040b2004200041046a22073602f808200420053602f408200420063602f008034020052f010622084105742109410021014100210a024002400240034020092001460d010240200441206a200520016a41086a412010a008220b0d00410021012006210b0c030b200141206a2101200a41016a210a200b417f4a0d000b200a417f6a21080b20060d01410121014100210b2008210a0b200441d0006a41106a200a360200200441d0006a410c6a2007360200200441d0006a41086a2005360200200420073602f808200420053602f408200420063602f0082004200b360254200420013602504101210902402001450d00200441186a200441206a41186a290300370300200441106a200441206a41106a290300370300200441086a200441206a41086a29030037030020042004290320370300410021090b0240024020090d002004418c096a200441086a29030037020020044194096a200441106a2903003702002004419c096a200441186a29030037020020042000410c6a360280092004200a3602fc08200420073602f808200420053602f4082004200b3602f0082004200429030037028409200441f0006a2004290340370300200441f8006a200441c0006a41086a29030037030020044188016a41003602002004420037036820044200370350200441003a008c0120044100360280012004418d016a200429002037000020044195016a200441206a41086a2900003700002004419d016a200441206a41106a290000370000200441a5016a200441206a41186a290000370000200441003a00ad01200441f0086a200441d0006a10800321010c010b200441e4006a410036020020044100360270200441003602542005200a41e0006c6a41e8026a2101200441d0006a1081030b200141106a200337030020012002370308200142013703002000200028020041016a360200200441d00b6a24000f0b2006417f6a2106200520084102746a41880b6a28020021050c000b0b103c000b41a797cc004110200441d0006a41c8c1c30041c897cc001046000bef0801087f230041d00b6b22042400024020002802000d002000417f360200200441206a41186a200141186a290000370300200441206a41106a200141106a290000370300200441206a41086a200141086a2900003703002004200129000037032002400240024020002802042205450d00200041086a28020021060c010b41002106200441f0086a410041e002109f081a200441d0006a410041a008109f081a41880b10332205450d01200541003b010620054100360200200541086a200441f0086a41e002109d081a200541e8026a200441d0006a41a008109d081a200041086a4100360200200020053602040b2004200041046a22073602f808200420053602f408200420063602f008034020052f010622084105742109410021014100210a024002400240034020092001460d010240200441206a200520016a41086a412010a008220b0d00410021012006210b0c030b200141206a2101200a41016a210a200b417f4a0d000b200a417f6a21080b20060d01410121014100210b2008210a0b200441d0006a41106a200a360200200441d0006a410c6a2007360200200441d0006a41086a2005360200200420073602f808200420053602f408200420063602f0082004200b360254200420013602504101210902402001450d00200441186a200441206a41186a290300370300200441106a200441206a41106a290300370300200441086a200441206a41086a29030037030020042004290320370300410021090b0240024020090d002004418c096a200441086a29030037020020044194096a200441106a2903003702002004419c096a200441186a29030037020020042000410c6a360280092004200a3602fc08200420073602f808200420053602f4082004200b3602f0082004200429030037028409200441f0006a2004290340370300200441f8006a200441c0006a41086a29030037030020044188016a41003602002004420037036820044200370350200441003a008c0120044100360280012004418d016a200429002037000020044195016a200441206a41086a2900003700002004419d016a200441206a41106a290000370000200441a5016a200441206a41186a290000370000200441003a00ad01200441f0086a200441d0006a10800321010c010b200441e4006a410036020020044100360270200441003602542005200a41e0006c6a41e8026a2101200441d0006a1081030b200441d0006a41186a200241186a290000370300200441d0006a41106a200241106a290000370300200441d0006a41086a200241086a29000037030020042002290000370350200441206a41086a200341086a28020036020020042003290200370320200441f0086a200141306a200441d0006a200441206a108303024020042802f008450d0020042802f4082201450d00200441f8086a280200450d00200110350b2000200028020041016a360200200441d00b6a24000f0b2006417f6a2106200520084102746a41880b6a28020021050c000b0b103c000b41a797cc004110200441d0006a41c8c1c30041c897cc001046000b920402087f027e230041106b22022400200241003602082002420137030020002802102103200041186a2802002204200210770240024002402004450d00200320044105746a21050340200328020021060240024020022802042207200228020822046b4104490d00200228020021080c010b200441046a22082004490d03200741017422092008200920084b1b22094100480d030240024020070d00024020090d00410121080c020b2009103322080d010c060b2002280200210820072009460d0020082007200910372208450d050b20022009360204200220083602000b200820046a20063600002002200441046a360208200341086a200210aa042005200341206a2203470d000b0b200041086a290300210a2000290300210b0240024020022802042207200228020822036b4110490d00200341106a2104200228020021080c010b200341106a22042003490d01200741017422082004200820044b1b22064100480d010240024020070d00024020060d00410121080c020b200610332208450d040c010b2002280200210820072006460d0020082007200610372208450d030b20022006360204200220083602000b200820036a2203200a3700082003200b370000200220043602082000411c6a200210ab04200228020421032001290200200235020842208620022802002204ad84100202402003450d00200410350b200241106a24000f0b103e000b103c000bdf2204137f017e017f087e230041a0026b22032400024002400240024002400240024002400240024002400240024002400240024020012d00000e050001020304000b200341b4016a4101360200200342013702a401200341e8d4ca003602a0012003410436027c2003419cd5ca003602782003200341f8006a3602b001200341a0016a41b0b4cc00104c000b4102210402400240024020022d00000d0020022d00014101470d00200141046a2802002101200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520032002411a6a290100370320200320043a001f200320053a001e200320063b011c200320073a001b200320083a001a200320093b01182003200a3a00172003200b3a00162003200c3b01142003200d3a00132003200e3a00122003200f3b0110200320103a000f200320113a000e200320123b010c200320133a000b200320143a000a200320153b0108200341286a2001109604200341a0016a200328022822052003280230220b10cb02200341f8006a41086a2202200341a0016a41106a290300370300200341f8006a41106a2204200341a0016a41186a290300370300200341f8006a41186a2206200341c0016a290300370300200320032903a8013703780240024020032903a0014201520d00200341386a41186a2006290300370300200341386a41106a2004290300370300200341386a41086a200229030037030020032003290378370338410321044100210241f6b5c300210741052106410221084105210a0c010b200341386a41086a200341086a41086a290300370300200341386a41106a200341086a41106a290300370300200341386a41186a200341086a41186a29030037030020032003290308370338200342003703682003428080e983b1de163703602003200341086a36025c2003200341086a3602742003200341f4006a3602a8012003200341dc006a3602a4012003200341e0006a3602a001200341f8006a200341086a200341a0016a108c030240024020032802784101470d0020032f007d20032d007f41107472220641107621092006410876210820034184016a280200210a200341f8006a41086a280200210720032d007c210c0c010b4104210c0240200341f8006a41086a2903004201520d00200341f8006a41106a290300211620032802742102200341d8016a200341f8006a41186a290300370300200341d0016a2016370300200341a0016a41086a41003a0000200341a9016a2002290000370000200341b1016a200241086a290000370000200341b9016a200241106a290000370000200341c1016a200241186a290000370000200341033a00a00141b0b4cc004100200341a0016a10d4010b0b41042104410021020240200c41ff01714104460d00200c21040c010b200341d0016a4200370300200341c8016a428080e983b1de16370300200341a0016a41106a200341386a41086a290300370300200341a0016a41186a200341386a41106a290300370300200341c0016a200341386a41186a290300370300200342013703a001200320032903383703a8012003200b36027c20032005360278200341a0016a41086a200341f8006a10b204410121020b0240200328022c450d00200510350b20020d02200941ff0171411074200841ff017141087472200641ff0171724108742102200aad4220862007ad8421160c010b410021020b200042003703082000411c6a2016370200200041186a2002200441ff017172360200420121160c0e0b200341c8016a2001360200200341ad016a200341106a290300370000200341b5016a200341186a290300370000200341bd016a200341206a290300370000200341003a00a401200341023a00a001200320032903083700a50141b0b4cc004100200341a0016a10d401420021160c0a0b200141246a2802002105200341386a41186a200141196a290000370300200341386a41106a200141116a290000370300200341386a41086a200141096a29000037030020032001290001370338410221014100210420022d00000d0a20022d00014101470d0a200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211720032002411a6a29010037039001200320013a008f01200320063a008e01200320073b018c01200320083a008b01200320093a008a012003200a3b0188012003200b3a0087012003200c3a0086012003200d3b0184012003200e3a0083012003200f3a008201200320103b018001200320113a007f200320123a007e200320133b017c200320143a007b200320153a007a200320173b01780240200341f8006a200341386a412010a0080d0041ebb5c3002102410b21074103210141800a21064180800c21050c0c0b200341e0006a2005109604200341a0016a200328026022042003280268220910cb02410321014105210641002107024020032903a0014201510d004183b6c3002102420b2116410021080c090b200341d0016a2903002118200341c8016a2903002119200341b0016a22022903002116200341a0016a41206a290300211a20032903a801211b2002200341b8016a2903003703002003201a3703b8012003201b3703a001200320163703a801200341a0016a200341f8006a412010a0080d02200341086a200341f8006a200341386a20192018410110ef02200341086a41086a290300211b0240024020032802084101460d004200211642002018200341086a41106a2903007d2019201b54ad7d221a2019201b7d221b201956201a201856201a2018511b22021b21184200201b20021b2119200341386a41106a290300211c2003290340211d2003290338211e2003290350211a4201211b4100210741002108410021060c010b201b4220882116200328020c220141187621072001411076210820014108762106201ba72102200141ff01714104470d094200211b0b200341d0016a2018370300200341c8016a2019370300200341c0016a201a3703002003201b3703a001200341b8016a201c3703002003201e3703a8012003201d3703b00102400240201b4201510d002009ad4220862004ad8410070c010b2003200936020c20032004360208200341a8016a200341086a10b2040b410421010c080b41022104024020022d00000d0020022d00014101470d00200141046a2802002101200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520032002411a6a290100370320200320043a001f200320053a001e200320063b011c200320073a001b200320083a001a200320093b01182003200a3a00172003200b3a00162003200c3b01142003200d3a00132003200e3a00122003200f3b0110200320103a000f200320113a000e200320123b010c200320133a000b200320143a000a200320153b0108200341286a2001109604200341a0016a200328022822052003280230220610cb024103210441800a2102024020032903a0014201510d004280808080b00121164183b6c30021060c060b200341d0016a2903002119200341c8016a290300211b200341a0016a41106a2903002116200341a0016a41206a290300211a20032903a8012118200341386a41106a200341b8016a2903003703002003201a3703502003201837033820032016370340200341386a200341086a412010a0080d032003201b370360200320193703680240201b201984500d002003200341086a360274200341f8006a200341086a200341e0006a200341f4006a10f00220032903784201520d002003290380012116200341d8016a200341f8006a41106a290300370300200341d0016a2016370300200341a0016a41086a41003a0000200341a9016a2003290308370000200341b1016a200341086a41086a290300370000200341b9016a200341086a41106a290300370000200341c1016a200341206a290300370000200341033a00a00141b0b4cc004100200341a0016a10d4010b2006ad4220862005ad84100741042104420021160c050b410021020c050b20022d000120022d0000410047720d02200141116a290000211a200141096a2900002118200141196a29000021192001290001211b200341e0006a200141246a2802002207109604200341a0016a200328026022022003280268220810cb02200341d0016a2101200341c8016a2104200341b8016a2105200341c0016a2106024020032903a0014201520d00200129030021162004290300211c200341a0016a41106a290300211d2006290300211e20032903a801211f200341386a41106a20052903003703002003201e3703502003201f3703382003201d3703402003201c37030820032016370310201c201684500d002003200341386a360228200341f8006a200341386a200341086a200341286a10f00220032903784201520d002003290380012116200341d8016a200341f8006a41106a290300370300200341d0016a2016370300200341a0016a41086a41003a0000200341a9016a2003290338370000200341b1016a200341386a41086a290300370000200341b9016a200341386a41106a290300370000200341c1016a200341d0006a290300370000200341033a00a00141b0b4cc004100200341a0016a10d4010b420021162001420037030020044200370300200620193703002005201a3703002003201b3703a801200342013703a001200320183703b0012003200836027c20032002360278200341a8016a200341f8006a10b20402402003280264450d00200210350b200341ad016a2018370000200341c8016a2007360200200341bd016a2019370000200341b5016a201a3700002003201b3700a501200341003a00a401200341023a00a00141b0b4cc004100200341a0016a10d4010c070b41fbb5c300210242082116410121080c050b41808a04210242808080808001211641fbb5c30021060c010b20004200370308200041186a4102360200420121160c070b0240200328022c450d00200510350b20044104460d0120162006ad8421160b200042003703082000411c6a2016370200200041186a2002200472360200420121160c050b200341a8016a2001360200200341013a00a401200341023a00a00141b0b4cc004100200341a0016a10d401420021160c010b02402003280264450d00200410350b0240200141ff01714104460d002007411874210420064108744180fe037121062008411074418080fc077121052016a721070c030b200341c8016a2005360200200341ad016a200341c0006a290300370000200341b5016a200341c8006a290300370000200341bd016a200341d0006a290300370000200341003a00a401200341023a00a001200320032903383700a50141b0b4cc004100200341a0016a10d401420021160b200020163703080c020b41002105410021060b200041206a20073602002000411c6a200236020020004200370308200041186a2004200572200672200141ff017172360200420121160b20002016370300200341a0026a24000ba90102017f027e02400240411010332202450d0020024110412010372202450d0120022000290000370000200241186a200041186a290000370000200241106a200041106a290000370000200241086a200041086a290000370000200041286a2903002103200029032021042002412041c00010372200450d0120002004370020200041286a200337000020012902002000ad42808080808006841002200010350f0b1045000b103c000b9aa90105037f017e137f077e107f230041f0126b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0c000102030405060708090a0b000b200341c4106a4101360200200342013702b410200341e8d4ca003602b0102003410436029c0b2003419cd5ca003602980b2003200341980b6a3602c010200341b0106a41b0b4cc00104c000b200241036a2d0000210420022f00012105200141196a2900002106200141186a2d00002107200141176a2d00002108200141156a2f00002109200141146a2d0000210a200141136a2d0000210b200141116a2f0000210c200141106a2d0000210d2001410f6a2d0000210e2001410d6a2f0000210f2001410c6a2d000021102001410b6a2d00002111200141096a2f00002112200141086a2d00002113200141076a2d00002114200141056a2f00002115200141046a2d00002116200141036a2d0000211720012f000121180240024002400240024020022d00002219417f6a220141024b0d00024020010e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200520044110747220194100477241ff01710d010b41fafdc600ad428080808080018410012202290000211a2002290008211b2002103541e8adc400ad4280808080a0018410012202290000211c2002290008211d200210352003201d3703b00b2003201c3703a80b2003201b3703a00b2003201a3703980b200341b0106a200341980b6a10dc020240024020032802b01022020d0041002105200341003602a00620034208370398064101210141082102410021040c010b200320032902b410221a37029c062003200236029806201a422088a722044114492101201aa721050b200320063703e008200320073a00df08200320083a00de08200320093b01dc082003200a3a00db082003200b3a00da082003200c3b01d8082003200d3a00d7082003200e3a00d6082003200f3b01d408200320103a00d308200320113a00d208200320123b01d008200320133a00cf08200320143a00ce08200320153b01cc08200320163a00cb08200320173a00ca08200320183b01c8082001450d01200341b0106a41186a2207200341c8086a41186a290300370300200341b0106a41106a2208200341c8086a41106a290300370300200341b0106a41086a2209200341c8086a41086a290300370300200320032903c8083703b010024020042005470d0020034198066a2004109401200328029c062105200328029806210220032802a00621040b200220044106746a2201420037030820014201370300200141106a4200370300200141186a4200370300200141206a20032903b010370300200141286a2009290300370300200141306a2008290300370300200141386a20072903003703002003200441016a22073602a00641fafdc600ad42808080808001841001220129000021062001290008211a2001103541e8adc400ad4280808080a0018410012201290000211b2001290008211c200110352003201c3703b00b2003201b3703a80b2003201a3703a00b200320063703980b0240024020020d00200341980b6aad428080808080048410070c010b200341b0106a2002200710b404200341980b6aad428080808080048420033502b81042208620032802b0102201ad841002024020032802b410450d00200110350b200541ffffff1f71450d00200210350b200341bc106a2004360200200341b8106a41063a0000200341113a00b01041b0b4cc004100200341b0106a10d401200041106a2007ad42f0c8217e4280a3c3c7007c37030020004201370308200042003703000c1d0b200341023a00b01020032802b01021010c010b4183b0302101200541ffffff1f71450d00200210350b200041206a41113602002000411c6a41c6b8c300360200200041186a200136020020004200370308200042013703000c1a0b200341c8086a200141046a41a002109d081a410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520032002411a6a2901003703a00e200320013a009f0e200320043a009e0e200320053b019c0e200320073a009b0e200320083a009a0e200320093b01980e2003200a3a00970e2003200b3a00960e2003200c3b01940e2003200d3a00930e2003200e3a00920e2003200f3b01900e200320103a008f0e200320113a008e0e200320123b018c0e200320133a008b0e200320143a008a0e200320153b01880e4103210120032802d008220241e4004b0d0020032002ad221e42004280c0c6c9faeb38420010840820034198066a200341880e6a10b504200341b0106a200328029806220220032802a00610d402200341d0036a200341b0106a41a402109d081a200341b0036a41086a2201200341dd126a290000370300200341b0036a41106a2204200341e5126a290000370300200341b0036a41176a2205200341ec126a280000360000200320032900d5123703b003200341086a290300211f2003290300211c0240024020032d00d41222074102460d0020034188016a200341d0036a41a402109d081a200341e8006a41176a2005280000360000200341e8006a41106a2004290300370300200341e8006a41086a2001290300370300200320032903b0033703680240200328029c06450d00200210350b200341b0106a20034188016a41a402109d081a200341b0106a41a4026a20073a0000200341d5126a2003290368370000200341dd126a200341e8006a41086a290300370000200341e5126a200341e8006a41106a290300370000200341ec126a200341ff006a2800003600000240200341b0106a41186a2802002208450d0020032802c010210241002101410021040340024002400240200241086a2207280200417f6a220541054b0d00024020050e06000101010100000b20010d01410021010c020b200141016a21010c010b200420016b220520084f0d1020034198066a41186a2209200220014105746b220541186a220a29030037030020034198066a41106a220b200541106a220c29030037030020034198066a41086a220d200541086a220e290300370300200320052903003703980620072903002106200241106a220f290300211a200241186a2210290300211b20052002290300370300200a201b370300200c201a370300200e200637030020102009290300370300200f200b2903003703002007200d29030037030020022003290398063703000b200241206a21022008200441016a2204470d000b2001417f6a20084f0d002003200820016b3602c8100b200341cc106a220210a3042002200341c8086a41a002109d081a200341980b6a200341b0106a41c002109d081a200341980b6a41086a290300211b20032903980b211d0c010b0240200328029c06450d00200210350b200341b00b6a41003602004200211d200342003703a00b200342003703980b200342083703a80b200341b40b6a200341c8086a41a002109d081a4200211b0b2003201c4280809aa6eaafe3017c221a3703980b2003201f201a201c54ad7c221c3703a00b0240201a201d58201c201b58201c201b5122041b0d002003201c201b7d201a201d54ad7d22063703d8032003201a201d7d221f3703d0032003200341880e6a360240201f2006844200510d002003200341880e6a36028801200320034188016a3602b8102003200341c0006a3602b4102003200341d0036a3602b01020034198066a200341880e6a200341b0106a108c03024002402003280298064101470d0020032f009d0620032d009f06411074722102200341a0066a290300210620032d009c0621010c010b41042101024020034198066a41086a2903004201520d0020034198066a41106a29030021062003280288012102200341e8106a20034198066a41186a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a2002290000370000200341c1106a200241086a290000370000200341c9106a200241106a290000370000200341d1106a200241186a290000370000200341033a00b01041b0b4cc004100200341b0106a10d4010b0b200141ff01714104460d000240200341ac0b6a28020041ffffff3f71450d0020032802a80b10350b200341b40b6a10a3040c020b0240201d201a58201b201c5820041b0d002003201b201c7d201d201a54ad7d22063703d8032003201d201a7d221a3703d003201a200684500d002003200341880e6a3602880120034198066a200341880e6a200341d0036a20034188016a10f0022003290398064201520d0020032903a0062106200341e8106a20034198066a41106a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a20032903880e370000200341c1106a200341880e6a41086a290300370000200341c9106a200341880e6a41106a290300370000200341d1106a200341a00e6a290300370000200341033a00b01041b0b4cc004100200341b0106a10d4010b200341b00b6a3502002106200341b0106a200341980b6a41c002109d081a20034198066a200341880e6a10b5042003280298062102200320032802a0063602d403200320023602d003200341b0106a200341d0036a10b0040240200328029c06450d00200210350b0240200341c4106a28020041ffffff3f71450d0020032802c01010350b200341cc106a10a304200341b0106a41086a41003a0000200341b9106a20032903880e370000200341c9106a200341880e6a41106a290300370000200341d1106a200341a00e6a290300370000200341880e6a41086a290300211a200341113a00b010200341b0106a41116a201a37000041b0b4cc004100200341b0106a10d401200041106a201e42e0c6db007e20064280b5187e7c4280c5d8d8007c37030020004201370308200042003703000c1b0b41d7b8c300ad4280808080d001842106200341c8086a10a30441981621020b200020023b00192000200637021c200042003703082000411b6a20024110763a0000200041186a20013a0000200042013703000c190b2001410c6a2802002107200141086a2802002105200141046a28020021084102210920022d00000d1620022d00014101470d16200241196a2d00002101200241186a2d00002104200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820032002411a6a2901003703e803200320013a00e703200320043a00e603200320093b01e4032003200a3a00e3032003200b3a00e2032003200c3b01e0032003200d3a00df032003200e3a00de032003200f3b01dc03200320103a00db03200320113a00da03200320123b01d803200320133a00d703200320143a00d603200320153b01d403200320163a00d303200320173a00d203200320183b01d003200341b0106a200341d0036a10b504200341206a20032802b010220120032802b81041b0b4cc0041004100108a0220032802202102024020032802b410450d00200110350b41032109024020024101460d0041d0b9c300ad4280808080800184210641980221040c180b0240200741e4004d0d0041d8b9c300ad4280808080a002842106411821040c180b200341980b6a200341d0036a10b604200341b0106a20032802980b220120032802a00b10cc02200341b0106a41086a290300420020032802c01022021b211a20032903b010420020021b211b20032902c41021060240200328029c0b450d00200110350b2006420020021b211e2002410120021b2119200341106a2007ad4200428080d287e2bc2d42001084080240201b2003290310221f5a201a200341106a41086a290300221d5a201a201d5122021b0d002003201d201a7d201f201b54ad7d22063703d0082003201f201b7d221c3703c8082003200341d0036a3602880e201c2006844200510d002003200341d0036a36029806200320034198066a3602b8102003200341880e6a3602b4102003200341c8086a3602b010200341980b6a200341d0036a200341b0106a108c030240024020032802980b4101470d0020032f009d0b20032d009f0b411074722104200341a00b6a290300210620032d009c0b21090c010b410421090240200341980b6a41086a2903004201520d00200341980b6a41106a29030021062003280298062101200341e8106a200341980b6a41186a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a2001290000370000200341c1106a200141086a290000370000200341c9106a200141106a290000370000200341d1106a200141186a290000370000200341033a00b01041b0b4cc004100200341b0106a10d4010b0b200941ff01714104460d00201e42ffffff3f83500d18201910350c180b0240201b201f58201a201d5820021b0d002003201a201d7d201b201f54ad7d22063703d0082003201b201f7d221a3703c808201a200684500d002003200341d0036a36029806200341980b6a200341d0036a200341c8086a20034198066a10f00220032903980b4201520d0020032903a00b2106200341e8106a200341980b6a41106a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a20032903d003370000200341c1106a200341d0036a41086a290300370000200341c9106a200341d0036a41106a290300370000200341d1106a200341e8036a290300370000200341033a00b01041b0b4cc004100200341b0106a10d4010b0240201e4220882220a72202450d0020024105742101201921020340200341b0106a200210970420033502b81042208620032802b0102204ad841007024020032802b410450d00200410350b200241206a2102200141606a22010d000b0b200341003602800b200342013703f80a200341f80a6a4100200741c4006c221641c4006d108a0120032802800b210d20032802f80a21180240024002402016450d00200820166a21212018200d4105746a2101200341b0106a41206a2117200341b0106a41216a2104200341980b6a411f6a210e4100210a0340200341880e6a41186a22072008200a6a220241186a290200370300200341880e6a41106a2209200241106a290200370300200341880e6a41086a220b200241086a290200370300200320022902003703880e200341980b6a41086a220c200241296a290000370300200341980b6a41106a220f200241316a290000370300200341980b6a41186a2210200241396a290000370300200e200241c0006a2800003600002003200241216a2900003703980b200241206a2d000022114106460d02200341c8086a41186a22122007290300370300200341c8086a41106a22132009290300370300200341c8086a41086a2214200b290300370300200320032903880e3703c808200341b0106a41186a2207200341d0036a41186a290300370300200341b0106a41106a2209200341d0036a41106a290300370300200341b0106a41086a2215200341d0036a41086a290300370300200320032903d0033703b010200320113a00d010200420032903980b370000200441086a200c290300370000200441106a200f290300370000200441186a20102903003700002004411f6a200e280000360000200341c0006a200341c8086a109704200335024821062003280240210b412010332202450d0d200220032903b010370000200241186a2007290300370000200241106a2009290300370000200241086a201529030037000020034188016a201710ac04200328028801210c0240024020032802900122070d00200741206a21090c010b200741206a22092007490d0f200941c000200941c0004b1b220f4100480d0f20024120200f10372202450d0e0b200241206a200c2007109d081a0240200328028c01450d00200c10350b2006422086200bad842009ad4220862002ad8410022002103502402003280244450d00200b10350b024020032d00d0104101470d0020032802d810450d0020032802d41010350b20034198066a41086a2014290300220637030020034198066a41106a2013290300221a37030020034198066a41186a2012290300221b370300200320032903c808221c37039806200141186a201b370000200141106a201a370000200141086a20063700002001201c370000200d41016a210d200141206a21012016200a41c4006a220a470d000b0b2003200d3602800b0c010b2003200d3602800b200241c4006a2021460d00200241e4006a21022016200a6b41bc7f6a21010340024020022d00004101470d00200241086a280200450d00200241046a28020010350b200241c4006a2102200141bc7f6a22010d000b0b02402005450d00200541c4006c450d00200810350b20032802fc0a2102200dad210602400240200d450d00200341c8106a200d360200200341c4106a20023602002003201f3703b010200320183602c0102003201d3703b810200341980b6a200341d0036a10b60420032802980b2101200320032802a00b3602cc08200320013602c808200341b0106a200341c8086a108d030240200328029c0b450d00200110350b0240200241ffffff3f71450d00201810350b410121010c010b200341b0106a200341d0036a10b60420033502b81042208620032802b0102201ad841007024020032802b410450d00200110350b410021010b202042c0d89e017e200642a0eae1017e7c20204280c2d72f7e7c20064280c2d72f7e7c21060240200241ffffff3f71450d0020010d00201810350b200642c0db89db007c21060240201e42ffffff3f83500d00201910350b20004201370308200041106a2006370300200042003703000c180b41022101024020022d00000d004101210520022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a290100370358200320013a0057200320043a0056200320073b0154200320083a0053200320093a00522003200a3b01502003200b3a004f2003200c3a004e2003200d3b014c2003200e3a004b2003200f3a004a200320103b0148200320113a0047200320123a0046200320133b0144200320143a0043200320153a0042200320163b0140200341980b6a200341c0006a10b604200341b0106a20032802980b220220032802a00b220110cc020240024020032802c01022040d004200211b4200211c4200211d0c010b2001ad4220862002ad841007200341b8106a290300211d20032903b010211c20032902c410211b200421050b0240200328029c0b450d00200210350b200341e80d6a200341c0006a10b504200341b0106a20032802e80d220220032802f00d220410d402024020032d00d412220941024622010d002004ad4220862002ad8410070b200341880e6a200341b0106a41a402109d081a200341f80a6a41176a2204200341ec126a280000360000200341f80a6a41106a2207200341e5126a290000370300200341f80a6a41086a2208200341dd126a290000370300200320032900d5123703f80a200341d0036a200341880e6a41a402109d081a200341b0036a41176a220a2004280000360000200341b0036a41106a22042007290300370300200341b0036a41086a22072008290300370300200320032903f80a3703b003024020010d0020034188016a200341d0036a41a402109d081a200341e8006a41176a200a280000360000200341e8006a41106a2004290300370300200341e8006a41086a2007290300370300200320032903b003370368024020032802ec0d450d00200210350b200341c8086a41066a20034188016a41a402109d081a20034198066a200341c8086a41aa02109d081a200341f8056a41176a2202200341e8006a41176a280000360000200341f8056a41106a2201200341e8006a41106a290300370300200341f8056a41086a2204200341e8006a41086a290300370300200320032903683703f805200341980b6a20034198066a41066a41a402109d081a200341980b6a41a4026a20093a0000200341bd0d6a20032903f805370000200341c50d6a2004290300370000200341cd0d6a2001290300370000200341d40d6a2002280000360000200341980b6a41086a290300211e20032903980b211f20032802a80b210702400240200341b00b6a280200220841057422010d00420021064200211a0c010b200741106a2102420021064200211a0340200241086a2903004200200241786a29030042015122041b201a7c2002290300420020041b221a20067c2206201a54ad7c211a200241206a2102200141606a22010d000b0b201e201d7c201f201c7c221c201f54ad7c201a7c201c20067c2206201c54ad7c211a0240201b422088221ca72202450d0020024105742101200521020340200341b0106a200210970420033502b81042208620032802b0102204ad841007024020032802b410450d00200410350b200241206a2102200141606a22010d000b0b20032006370398062003201a3703a00602402006201a84500d002003200341c0006a3602880e200341c8086a200341c0006a20034198066a200341880e6a10f00220032903c8084201520d0020032903d008211d200341e8106a200341c8086a41106a290300370300200341e0106a201d370300200341b0106a41086a41003a0000200341b9106a2003290340370000200341c1106a200341c0006a41086a290300370000200341c9106a200341c0006a41106a290300370000200341d1106a200341d8006a290300370000200341033a00b01041b0b4cc004100200341b0106a10d4010b200341e8106a201a370300200341e0106a2006370300200341b0106a41086a41013a0000200341b9106a2003290340370000200341c9106a200341d0006a290300370000200341d1106a200341d8006a290300370000200341c0006a41086a2903002106200341113a00b010200341b0106a41116a200637000041b0b4cc004100200341b0106a10d401201c42c0d89e017e2008ad42a09c017e7c201c4280c2d72f7e7c200341bc0b6a35020042a0f7367e7c2106200341b40b6a21020240200341ac0b6a28020041ffffff3f71450d00200710350b20064280eaee92017c2106200210a3040240201b42ffffff3f83500d00200510350b20004201370308200041106a2006370300200042003703000c190b024020032802ec0d450d00200210350b41032101201b42ffffff3f83500d00200510350b20004198043b001920004200370308200041206a41083602002000411c6a41c8b9c300360200200041186a20013a0000200042013703000c170b200141106a290300211a200141086a290300211b200141046a28020021012002411a6a2901002106200241196a2d00002105200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211741012104024020022d00000d0020022d000141014721040b200320063703e008200320053a00df08200320073a00de08200320083b01dc08200320093a00db082003200a3a00da082003200b3b01d8082003200c3a00d7082003200d3a00d6082003200e3b01d4082003200f3a00d308200320103a00d208200320113b01d008200320123a00cf08200320133a00ce08200320143b01cc08200320153a00cb08200320163a00ca08200320173b01c808024020040d00200341880e6a41186a200341c8086a41186a290300370300200341880e6a41106a200341c8086a41106a290300370300200341880e6a41086a200341c8086a41086a290300370300200320032903c8083703880e41fafdc600ad42808080808001841001220229000021062002290008211c2002103541e8adc400ad4280808080a0018410012202290000211d2002290008211f200210352003201f3703b00b2003201d3703a80b2003201c3703a00b200320063703980b200341b0106a200341980b6a10dc0220032802b0102205410820051b210741beb9c300ad4280808080a001842106419806210241032104200120032902b410420020051b221c422088a74f0d13200720014106746a2205450d13024020052903004201510d0041beb9c300ad4280808080a0018421060c140b0240200720014106746a2202290308201b58200241106a2903002206201a582006201a511b0d0041b4b9c300ad4280808080a00184210641980821020c140b200341c0006a200341880e6a10b504200341b0106a20032802402205200328024810d402200341d0036a200341b0106a41a402109d081a200341b0036a41086a200341dd126a290000370300200341b0036a41106a200341e5126a290000370300200341b0036a41176a2208200341ec126a280000360000200320032900d5123703b00302400240024002400240024020032d00d41222094102460d00200241086a210b20034188016a200341d0036a41a402109d081a200341e8006a41176a2008280000360000200341e8006a41106a2202200341b0036a41106a290300370300200341e8006a41086a2204200341b0036a41086a290300370300200320032903b00337036802402003280244450d00200510350b200341c8086a41066a20034188016a41a402109d081a20034198066a200341c8086a41aa02109d081a200341f8056a41176a2205200341e8006a41176a280000360000200341f8056a41106a22082002290300370300200341f8056a41086a22022004290300370300200320032903683703f805200341980b6a20034198066a41066a41a402109d081a200341980b6a41a4026a20093a0000200341bd0d6a20032903f805370000200341c50d6a2002290300370000200341cd0d6a2008290300370000200341d40d6a2005280000360000200b41086a290300211a200b290300211b20032802a80b210941002102200341b00b6a280200220a41014b0d01200a0e020302030b02402003280244450d00200510350b41aab9c300ad4280808080a00184210641980a21020c180b200a2104034020022004410176220520026a2208200920084105746a28020020014b1b2102200420056b220441014b0d000b0b200920024105746a220528020022042001460d01200a200220042001496a2202490d0d0b0240200a200341ac0b6a280200470d00200341980b6a41106a200a410110a10120032802a80b21090b200920024105746a220441206a2004200a20026b410574109e081a200441186a201a370300200441106a201b37030020044201370308200420013602002003200a41016a220a3602b00b0c010b200a20024d0d0c0240200920024105746a2208280208417f6a220c41054b0d00419bb9c300ad4280808080f00184210641980c210241032104200c0e06140000000014140b200841086a420137030020052001360200200841186a201a370300200841106a201b3703000b200b29030021062003200b41086a290300221a3703a00620032006370398062003200341880e6a3602880102402006201a844200510d002003200341880e6a3602d0032003200341d0036a3602b810200320034188016a3602b410200320034198066a3602b010200341c8086a200341880e6a200341b0106a108c030240024020032802c8084101470d0020032f00cd0820032d00cf08411074722102200341d0086a290300210620032d00cc0821040c010b410421040240200341c8086a41086a2903004201520d00200341c8086a41106a290300210620032802d0032102200341e8106a200341c8086a41186a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a2002290000370000200341c1106a200241086a290000370000200341c9106a200241106a290000370000200341d1106a200241186a290000370000200341033a00b01041b0b4cc004100200341b0106a10d4010b0b200441ff01714104470d130b200341bc0b6a3502002106200341b0106a200341980b6a41c002109d081a200341c8086a200341880e6a10b50420032802c8082102200320032802d00836029c062003200236029806200341b0106a20034198066a10b004024020032802cc08450d00200210350b200aad211a0240200341c4106a28020041ffffff3f71450d0020032802c01010350b200341cc106a10a304200341b0106a41086a41033a0000200341b9106a20032903880e370000200341c9106a200341880e6a41106a290300370000200341d1106a200341a00e6a290300370000200341dc106a2001360200200341880e6a41086a290300211b200341113a00b010200341b0106a41116a201b37000041b0b4cc004100200341b0106a10d401201a42b0901f7e200642a0e1e7007e7c4280b191e4007c21060240201c42ffffff1f83500d00200710350b20004201370308200041106a2006370300200042003703000c170b410221040c130b02400240024002400240024020022d00000d0020022d00014101470d00200141046a2802002107200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703a00e200320013a009f0e200320043a009e0e200320053b019c0e200320083a009b0e200320093a009a0e2003200a3b01980e2003200b3a00970e2003200c3a00960e2003200d3b01940e2003200e3a00930e2003200f3a00920e200320103b01900e200320113a008f0e200320123a008e0e200320133b018c0e200320143a008b0e200320153a008a0e200320163b01880e200341e80d6a200341880e6a10b504200341b0106a20032802e80d220220032802f00d10d402200341d0036a200341b0106a41a402109d081a200341b0036a41086a2201200341dd126a290000370300200341b0036a41106a2204200341e5126a290000370300200341b0036a41176a2205200341ec126a280000360000200320032900d5123703b003024020032d00d41222084102460d0020034188016a200341d0036a41a402109d081a200341e8006a41176a2005280000360000200341e8006a41106a2004290300370300200341e8006a41086a2001290300370300200320032903b003370368024020032802ec0d450d00200210350b200341c8086a41066a20034188016a41a402109d081a20034198066a200341c8086a41aa02109d081a200341f8056a41176a2202200341e8006a41176a280000360000200341f8056a41106a2201200341e8006a41106a2903003703004108210a200341f8056a41086a2204200341e8006a41086a290300370300200320032903683703f805200341980b6a20034198066a41066a41a402109d081a200341980b6a41a4026a20083a0000200341bd0d6a20032903f805370000200341c50d6a2004290300370000200341cd0d6a2001290300370000200341d40d6a20022800003600004101210b41d0b9c300210c20032802a80b210841002102200341b00b6a280200220941014b0d0220090e020403040b024020032802ec0d450d00200210350b2003410a360248200341aab9c300360244200341053a004220034183303b01400c040b200341023a00400c030b20092101034020022001410176220420026a2205200820054105746a28020020074b1b2102200120046b220141014b0d000b0b200820024105746a2802002007470d00200920024d0d0d200820024105746a220141186a2903002106200141106a290300211a2001290308211b2001200141206a2002417f7320096a410574109e081a20032009417f6a22023602b00b201b4201510d02418db9c300210c410e210a4107210b0b2003200a3602482003200c3602442003200b3a004220034183303b01400240200341ac0b6a28020041ffffff3f71450d00200810350b200341b40b6a10a3040b200341f80a6a41086a200341c0006a41086a290300220637030020032003290340221a3703f80a20004200370308200041186a201a370300200041206a2006370300200042013703000c160b2003201a37039806200320063703a0060240201a200684500d002003200341880e6a3602d003200341c8086a200341880e6a20034198066a200341d0036a10f00220032903c8084201520d0020032903d0082106200341e8106a200341c8086a41106a290300370300200341e0106a2006370300200341b0106a41086a41003a0000200341b9106a20032903880e370000200341c1106a200341880e6a41086a290300370000200341c9106a200341880e6a41106a290300370000200341d1106a200341a00e6a290300370000200341033a00b01041b0b4cc004100200341b0106a10d4010b200341bc0b6a3502002106200341b0106a200341980b6a41c002109d081a200341c8086a200341880e6a10b50420032802c8082101200320032802d00836029c062003200136029806200341b0106a20034198066a10b004024020032802cc08450d00200110350b2002ad211a0240200341c4106a28020041ffffff3f71450d0020032802c01010350b200341cc106a10a304200341b0106a41086a41043a0000200341b9106a20032903880e370000200341c9106a200341880e6a41106a290300370000200341d1106a200341a00e6a290300370000200341dc106a2007360200200341880e6a41086a290300211b200341113a00b010200341b0106a41116a201b37000041b0b4cc004100200341b0106a10d401200041106a201a42b0901f7e200642a0e1e7007e7c4280b191e4007c37030020004201370308200042003703000c150b200141106a2903002106200141086a290300211a200141046a280200210420032002411a6a2901003703e008410221012003200241026a2901003703c80820032002410a6a2901003703d0082003200241126a2901003703d8080240024020022d00014101470d0020022d000041ff01710d00200341b0106a41186a200341c8086a41186a290300370300200341b0106a41106a200341c8086a41106a290300370300200341b0106a41086a200341c8086a41086a290300370300200320032903c8083703b01041fafdc600ad4280808080800184221b10012202290000211c2002290008211d2002103541e8adc400ad4280808080a00184221f10012202290000211e2002290008212020021035200320203703b00b2003201e3703a80b2003201d3703a00b2003201c3703980b200341c8086a200341980b6a10dc0220032802c8082205410820051b2102410121074183b02421010240200420032902cc08420020051b221d422088a722054f0d00200220044106746a2208450d0020082903004201520d000240200220044106746a220841206a2204200341b0106a460d002004200341b0106a412010a0080d010b200841086a2201201a3703002001200637030841002107200521010b201b1001220429000021062004290008211a20041035201f10012204290000211b2004290008211c200410352003201c3703b00b2003201b3703a80b2003201a3703a00b200320063703980b0240024020020d00200341980b6aad428080808080048410070c010b200341c8086a2002200510b404200341980b6aad428080808080048420033502d00842208620032802c8082204ad841002024020032802cc08450d00200410350b201d42ffffff1f83500d00200210350b2007450d010b20004200370308200041186a20013602002000411c6a41f1b8c300ad4280808080c00184370200200042013703000c150b20004201370308200041106a2001ad42b09f1a7e4280dbf23f7c370300200042003703000c140b410221040240024020022d00000d004101210520022d00014101470d00200141196a290000211d200141186a2d00002118200141176a2d00002119200141156a2f00002121200141146a2d00002122200141136a2d00002123200141116a2f00002124200141106a2d000021252001410f6a2d000021262001410d6a2f000021272001410c6a2d000021282001410b6a2d00002129200141096a2f0000212a200141086a2d0000212b200141076a2d0000212c200141056a2f0000212d200141046a2d0000212e200141036a2d0000212f200141246a280200210820012f00012130200241196a2d00002101200241186a2d00002104200241166a2f01002107200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703c810200320013a00c710200320043a00c610200320073b01c410200320093a00c3102003200a3a00c2102003200b3b01c0102003200c3a00bf102003200d3a00be102003200e3b01bc102003200f3a00bb10200320103a00ba10200320113b01b810200320123a00b710200320133a00b610200320143b01b410200320153a00b310200320163a00b210200320173b01b010200341980b6a41186a22094200370300200341980b6a41106a220a4200370300200341980b6a41086a22024200370300200342003703980b41fafdc600ad4280808080800184220610012201290000211a2002200141086a2900003703002003201a3703980b2001103541e8adc400ad4280808080a00184221a10012201290008211b2001290000211c20011035200341c8086a41106a220b201c370300200341c8086a41186a220c201b370300200341c8086a41086a220d2002290300370300200320032903980b3703c808200341980b6a200341c8086a10dc0220032802980b2207410820071b21014183b024210402402008200329029c0b420020071b221b422088a7220e4f0d00200120084106746a2207450d0020072903004201520d002003201d3703e008200320183a00df08200320193a00de08200320213b01dc08200320223a00db08200320233a00da08200320243b01d808200320253a00d708200320263a00d608200320273b01d408200320283a00d308200320293a00d2082003202a3b01d0082003202b3a00cf082003202c3a00ce082003202d3b01cc082003202e3a00cb082003202f3a00ca08200320303b01c8082003201d3703b00b200320183a00af0b200320193a00ae0b200320213b01ac0b200320223a00ab0b200320233a00aa0b200320243b01a80b200320253a00a70b200320263a00a60b200320273b01a40b200320283a00a30b200320293a00a20b2003202a3b01a00b2003202b3a009f0b2003202c3a009e0b2003202d3b019c0b2003202e3a009b0b2003202f3a009a0b200320303b01980b0240200341b0106a200120084106746a41206a2207460d002007200341b0106a412010a0080d010b200720032903980b370200200741186a200341980b6a41186a290300370200200741106a200341980b6a41106a290300370200200741086a200341980b6a41086a29030037020041002105200e21040b20094200370300200a420037030020024200370300200342003703980b20061001220729000021062002200741086a290000370300200320063703980b20071035201a1001220729000821062007290000211a20071035200b201a370300200c2006370300200d2002290300370300200320032903980b3703c8080240024020010d00200341c8086aad428080808080048410070c010b200341980b6a2001200e10b404200341c8086aad428080808080048420033502a00b42208620032802980b2202ad8410020240200328029c0b450d00200210350b201b42ffffff1f83500d00200110350b2005450d010b20004200370308200041186a20043602002000411c6a41f1b8c300ad4280808080c00184370200200042013703000c140b20004201370308200041106a2004ad42c0ed1a7e42e0ecb5c0007c370300200042003703000c130b200141086a2903002106200141046a280200210420032002411a6a2901003703e008410221012003200241026a2901003703c80820032002410a6a2901003703d0082003200241126a2901003703d8080240024020022d00014101470d0020022d000041ff01710d00200341b0106a41186a200341c8086a41186a290300370300200341b0106a41106a200341c8086a41106a290300370300200341b0106a41086a200341c8086a41086a290300370300200320032903c8083703b01041fafdc600ad4280808080800184221a10012202290000211b2002290008211c2002103541e8adc400ad4280808080a00184221d10012202290000211f2002290008211e200210352003201e3702b00b2003201f3702a80b2003201c3702a00b2003201b3702980b200341c8086a200341980b6a10dc0220032802c8082205410820051b2102410121074183b02421010240200420032902cc08420020051b221f422088a722054f0d00200220044106746a2208450d0020082903004201520d000240200220044106746a220841206a2204200341b0106a460d002004200341b0106a412010a0080d010b2008200637031841002107200521010b201a1001220429000021062004290008211a20041035201d10012204290000211b2004290008211c200410352003201c3702b00b2003201b3702a80b2003201a3702a00b200320063702980b0240024020020d00200341980b6aad428080808080048410070c010b200341c8086a2002200510b404200341980b6aad428080808080048420033502d00842208620032802c8082204ad841002024020032802cc08450d00200410350b201f42ffffff1f83500d00200210350b2007450d010b20004200370308200041186a20013602002000411c6a41f1b8c300ad4280808080c00184370200200042013703000c130b20004201370308200041106a2001ad42a0d1197e4280dbf23f7c370300200042003703000c120b200141c0006a290300211a200141386a290300211b200141306a2903002106200141046a2802002107200341880e6a41206a200141286a280200360200200341880e6a41186a200141206a290200370300200341880e6a41106a200141186a290200370300200341880e6a41086a200141106a2902003703002003200141086a2902003703880e4102210120022d00000d0a20022d00014101470d0a200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703900b200320013a008f0b200320043a008e0b200320053b018c0b200320083a008b0b200320093a008a0b2003200a3b01880b2003200b3a00870b2003200c3a00860b2003200d3b01840b2003200e3a00830b2003200f3a00820b200320103b01800b200320113a00ff0a200320123a00fe0a200320133b01fc0a200320143a00fb0a200320153a00fa0a200320163b01f80a200341b0106a41206a200341880e6a41206a280200360200200341b0106a41186a200341880e6a41186a29030037030041102102200341b0106a41106a200341880e6a41106a29030037030041082104200341b0106a41086a200341880e6a41086a290300370300200320032903880e3703b010200341980b6a200341b0106a108b02200341c8086a41086a2201200341a10b6a290000370300200341c8086a41106a2205200341a90b6a290000370300200341c8086a41186a2208200341b10b6a290000370300200320032900990b3703c80820032d00980b4101460d09200341c0006a41186a2008290300370300200341c0006a41106a2005290300370300200341c0006a41086a2001290300370300200320032903c8083703404103210141fdb8c300210520064201510d0b41fafdc600ad428080808080018410012202290000211c2002290008211d2002103541e8adc400ad4280808080a0018410012202290000211f2002290008211e200210352003201e3702b00b2003201f3702a80b2003201d3702a00b2003201c3702980b200341b0106a200341980b6a10dc0220032802b0102202410820021b2108024002400240024002400240200720032902b410420020021b221c422088a74f0d00200820074106746a2202450d0020022903004201520d000240200820074106746a41206a2202200341f80a6a460d002002200341f80a6a412010a0080d010b0240201c42ffffff1f83500d00200810350b200341e80d6a200341c0006a10b504200341b0106a20032802e80d220220032802f00d10d402200341d0036a200341b0106a41a402109d081a200341b0036a41086a2204200341dd126a290000370300200341b0036a41106a2205200341e5126a290000370300200341b0036a41176a2208200341ec126a280000360000200320032900d5123703b003024020032d00d41222094102460d0020034188016a200341d0036a41a402109d081a200341e8006a41176a2008280000360000200341e8006a41106a2005290300370300200341e8006a41086a2004290300370300200320032903b003370368024020032802ec0d450d00200210350b200341c8086a41066a20034188016a41a402109d081a20034198066a200341c8086a41aa02109d081a200341f8056a41176a2202200341e8006a41176a280000360000200341f8056a41106a2201200341e8006a41106a290300370300200341f8056a41086a2204200341e8006a41086a290300370300200320032903683703f805200341980b6a20034198066a41066a41a402109d081a200341980b6a41a4026a20093a0000200341bd0d6a20032903f805370000200341c50d6a2004290300370000200341cd0d6a2001290300370000200341d40d6a200228000036000020032802a80b210841002102200341b00b6a280200220941014b0d0220090e020403040b024020032802ec0d450d00200210350b410a210441e4b8c3002105410d21020c110b4109210441f1b8c3002105410c2102201c42ffffff1f83500d10200810350c100b20092101034020022001410176220420026a2205200820054105746a28020020074b1b2102200120046b220141014b0d000b0b200820024105746a220128020022042007460d012009200220042007496a2202490d0a0b02402009200341ac0b6a280200470d00200341980b6a41106a2009410110a10120032802a80b21080b200820024105746a220141206a2001200920026b410574109e081a200141186a201a370300200141106a201b37030020012006370308200120073602002003200941016a22093602b00b0c010b200920024d0d09200820024105746a220241086a2104024020022903084201520d00200341b0106a200341c0006a200341f80a6a200241106a290300200241186a290300410010ef020b2004200637030020012007360200200241186a201a370300200241106a201b3703000b200341bc0b6a3502002106200341b0106a200341980b6a41c002109d081a200341c8086a200341c0006a10b50420032802c8082102200320032802d00836029c062003200236029806200341b0106a20034198066a10b004024020032802cc08450d00200210350b2009ad211a0240200341c4106a28020041ffffff3f71450d0020032802c01010350b200341cc106a10a304200341b0106a41086a41053a0000200341b9106a2003290340370000200341c9106a200341c0006a41106a290300370000200341d1106a200341d8006a290300370000200341dc106a2007360200200341c0006a41086a290300211b200341113a00b010200341b0106a41116a201b37000041b0b4cc004100200341b0106a10d401200041106a201a4280b5187e200642a0e1e7007e7c42c0fff1de007c37030020004201370308200042003703000c110b200341e0006a200141246a280200360200200341d8006a2001411c6a290200370300200341c0006a41106a200141146a290200370300200341c8006a2001410c6a2902003703002003200141046a29020037034041022101200241036a2d0000210520022f000121070240024002400240024002400240024020022d00002208417f6a220441024b0d00024020040e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200720054110747220084100477241ff01710d010b200341b0106a41206a200341c0006a41206a280200360200200341b0106a41186a200341c0006a41186a290300370300200341b0106a41106a200341c0006a41106a290300370300200341b0106a41086a200341c0006a41086a290300370300200320032903403703b010200341980b6a200341b0106a108b0241012105024020032d00980b4101460d00200341980b6a41086a2d00002102200341a10b6a2f00002101200341a30b6a2d00002104200341a40b6a2d00002107200341a50b6a2f00002108200341a70b6a2d00002109200341980b6a41106a2d0000210a200341a90b6a2f0000210b200341ab0b6a2d0000210c200341ac0b6a2d0000210d200341ad0b6a2f0000210e200341af0b6a2d0000210f200341980b6a41186a2d0000211020032f00990b211120032d009b0b211220032d009c0b211320032f009d0b211420032d009f0b21152003200341b10b6a2900003703900b200320103a008f0b2003200f3a008e0b2003200e3b018c0b2003200d3a008b0b2003200c3a008a0b2003200b3b01880b2003200a3a00870b200320093a00860b200320083b01840b200320073a00830b200320043a00820b200320013b01800b200320023a00ff0a200320153a00fe0a200320143b01fc0a200320133a00fb0a200320123a00fa0a200320113b01f80a200341980b6a200341f80a6a10b604200341b0106a20032802980b220220032802a00b220110cc020240024020032802c01022040d004200211b4200211c4200211d0c010b2001ad4220862002ad841007200341b8106a290300211d20032903b010211c20032902c410211b200421050b0240200328029c0b450d00200210350b200341d80d6a200341f80a6a10b504200341b0106a20032802d80d220220032802e00d220410d402024020032d00d412220941024622010d002004ad4220862002ad8410070b200341880e6a200341b0106a41a402109d081a200341e80d6a41176a2204200341ec126a280000360000200341e80d6a41106a2207200341e5126a290000370300200341e80d6a41086a2208200341dd126a290000370300200320032900d5123703e80d200341d0036a200341880e6a41a402109d081a200341b0036a41176a220a2004280000360000200341b0036a41106a22042007290300370300200341b0036a41086a22072008290300370300200320032903e80d3703b003024020010d0020034188016a200341d0036a41a402109d081a200341e8006a41176a200a280000360000200341e8006a41106a2004290300370300200341e8006a41086a2007290300370300200320032903b003370368024020032802dc0d450d00200210350b200341c8086a41066a20034188016a41a402109d081a20034198066a200341c8086a41aa02109d081a200341f8056a41176a2202200341e8006a41176a280000360000200341f8056a41106a2201200341e8006a41106a290300370300200341f8056a41086a2204200341e8006a41086a290300370300200320032903683703f805200341980b6a20034198066a41066a41a402109d081a200341980b6a41a4026a20093a0000200341bd0d6a20032903f805370000200341c50d6a2004290300370000200341cd0d6a2001290300370000200341d40d6a2002280000360000200341980b6a41086a290300211e20032903980b211f20032802a80b210702400240200341b00b6a280200220841057422010d00420021064200211a0c010b200741106a2102420021064200211a0340200241086a2903004200200241786a29030042015122041b201a7c2002290300420020041b221a20067c2206201a54ad7c211a200241206a2102200141606a22010d000b0b201e201d7c201f201c7c221c201f54ad7c201a7c201c20067c2206201c54ad7c211a0240201b422088221ca72202450d0020024105742101200521020340200341b0106a200210970420033502b81042208620032802b0102204ad841007024020032802b410450d00200410350b200241206a2102200141606a22010d000b0b20032006370398062003201a3703a0062006201a844200520d03200342003703d008200342003703c8080c040b024020032802dc0d450d00200210350b0240201b42ffffff3f83500d00200510350b410321010c010b410121010b20004198043b001920004200370308200041206a41083602002000411c6a41c8b9c300360200200041186a20013a0000420121060c040b2003200341f80a6a3602880e200341c8086a200341f80a6a20034198066a200341880e6a10a802200341e8086a290300211d20032903e008211f024020032903c8084201520d0020032903d008211e200341e8106a200341c8086a41106a290300370300200341e0106a201e370300200341b0106a41086a41003a0000200341b9106a20032903f80a370000200341c1106a200341f80a6a41086a290300370000200341c9106a200341f80a6a41106a290300370000200341d1106a200341900b6a290300370000200341033a00b01041b0b4cc004100200341b0106a10d4010b2003201f3703c8082003201d3703d008201f201d844200520d010b20034198066a41186a220a420037030020034198066a41106a2204420037030020034198066a41086a22014200370300200342003703980641b6fdc600ad4280808080800184221d10012209290000211f200341b0106a41086a2202200941086a2900003703002003201f3703b0102009103520012002290300370300200320032903b0103703980641e489c200ad4280808080d00184221f10012209290000211e2002200941086a2900003703002003201e3703b01020091035200420032903b010221e370300200341880e6a41086a220b2001290300370300200341880e6a41106a220c201e370300200341880e6a41186a220d200229030037030020032003290398063703880e200341286a200341880e6a412010d701200341286a41106a290300211e2003290330212020032802282109200a420037030020044200370300200142003703002003420037039806201d1001220a290000211d2002200a41086a2900003703002003201d3703b010200a103520012002290300370300200320032903b01037039806201f1001220a290000211d2002200a41086a2900003703002003201d3703b010200a1035200420032903b010221d370300200b2001290300370300200c201d370300200d200229030037030020032003290398063703880e2003201e420020091b3703b81020032020420020091b3703b010200341880e6aad4280808080800484200341b0106aad428080808080028410020c010b200342f0f2bda1a7ee9cb9f9003703c808200341b0106a200341c8086a10e001200341b0106a201f201d10df01200341c8106a201d370300200341c0106a201f370300200341b8106a41063a00002003410c3a00b01041b0b4cc004100200341b0106a10d4010b200341e8106a201a370300200341e0106a2006370300200341b0106a41086a41023a0000200341b9106a20032903f80a370000200341f80a6a41086a2903002106200341113a00b010200341b0106a41116a2006370000200341c9106a200341880b6a290300370000200341d1106a200341900b6a29030037000041b0b4cc004100200341b0106a10d401201c42c0d89e017e2008ad42a08d067e7c201c4280c2d72f7e7c200341bc0b6a35020042a0f7367e7c2106200341b40b6a21020240200341ac0b6a28020041ffffff3f71450d00200710350b200642c086a2e7017c2106200210a3040240201b42ffffff3f83500d00200510350b200041106a200637030020004201370308420021060b200020063703000c100b2005200841f485cc001042000b103c000b103e000b2002200a104d000b2002200a41a0bdc4001042000b20022009104e000b20022009104d000b2002200941b0bdc4001042000b410121010b0b200041206a20023602002000411c6a2005360200200020043a001a200041183a0019200041186a20013a000020004200370308200042013703000c050b0240200341ac0b6a28020041ffffff3f71450d00200910350b200341b40b6a10a3040b201c42ffffff1f83500d00200710350b200020023b00192000200637021c200042003703082000411b6a20024110763a0000200041186a20043a0000200042013703000c020b0b02402007450d00200741c4006c2101200841286a210203400240200241786a2d00004101470d002002280200450d002002417c6a28020010350b200241c4006a2102200141bc7f6a22010d000b0b02402005450d00200541c4006c450d00200810350b200020043b00192000200637021c200042003703082000411b6a20044110763a0000200041186a20093a0000200042013703000b200341f0126a24000b950202037f017e230041206b220324000240024020024106744104722204417f4c0d00200410332205450d0120034100360208200320043602042003200536020020022003107702402002450d002002410674210203400240024020012903004201510d00200341003a00102003200341106a410110780c010b200341013a00102003200341106a410110782003200141206a41201078200141086a29030021062003200141106a290300370318200320063703102003200341106a411010782003200141186a2903003703102003200341106a410810780b200141c0006a2101200241406a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1044000b1045000bb10503027f017e047f230041d0006b2202240041fafdc600ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541c8acc400ad4280808080a00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041fafdc600ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541b8adc400ad4280808080e00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b13002000410d360204200041c0bdc4003602000b1f0002402000280200450d00200041086a280200450d00200028020410350b0b8c0a03047f017e047f23004190016b22022400200241d8006a41186a4200370300200241d8006a41106a22034200370300200241d8006a41086a220442003703002002420037035841a3edcb00ad4280808080f000841001220529000021062004200541086a290000370300200220063703582005103541a5ebcb00ad4280808080c00184100122052900002106200241f8006a41086a2207200541086a2900003703002002200637037820051035200320022903782206370300200241386a41086a2004290300370300200241386a41106a2006370300200241386a41186a200729030037030020022002290358370338200241106a200241386a412010c001200241d8006a2002280214410020022802101b2203200010ba04200241086a20022802582204200228026041b0b4cc0041004100108a02200228020821050240200228025c450d00200410350b410121040240024002400240024020054101460d004188e8cb00ad4280808080800184100122042900002106200241f8006a41086a200441086a290000370300200220063703782004103541f1c8c400ad4280808080e00184100122042900002106200241386a41086a200441086a2900003703002002200637033820041035200220033602282002200241286aad4280808080c00084100322042900003703880120041035200241e4006a22052002412c6a360200200220024188016a41086a220036025c2002200241286a360260200220024188016a360258200241186a200241d8006a107b412010332204450d0120042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020022004ad42808080808004841003220129000037038801200110352005200441206a360200200220043602602002200036025c200220024188016a360258200241286a200241d8006a107b200410352002280220220741206a2200200228023022086a2201417f4c0d02200228022821092002280218210a0240024020010d0041002103410121040c010b200110332204450d02200121030b024002402003410f4d0d00200321050c010b200341017422054110200541104b1b22054100480d04024020030d002005103322040d010c060b20032005460d0020042003200510372204450d050b20042002290378370000200441086a200241f8006a41086a2903003700000240024020054170714110460d00200521030c010b200541017422034120200341204b1b22034100480d0420052003460d0020042005200310372204450d050b20042002290338370010200441186a200241386a41086a29030037000002400240200341606a2007490d00200321050c010b2007415f4b0d04200341017422052000200520004b1b22054100480d0420032005460d0020042003200510372204450d050b200441206a200a2007109d081a02400240200520006b2008490d00200521030c010b20012000490d04200541017422032001200320014b1b22034100480d04024020050d00024020030d00410121040c020b200310332204450d060c010b20052003460d0020042005200310372204450d050b200420006a20092008109d081a0240200228022c450d00200910350b0240200228021c450d00200a10350b20022004200110c001200228020421012002280200210502402003450d00200410350b200141004720054100477121040b20024190016a240020040f0b1045000b1044000b103e000b103c000bf60603027f017e077f230041e0006b220324004188e8cb00ad4280808080800184100122042900002105200341086a41086a200441086a29000037030020032005370308200410354190e8cb00ad4280808080a00284100122042900002105200341186a41086a200441086a2900003703002003200537031820041035200320013602382003200341386aad4280808080c000841003220429000037034820041035200341dc006a2204200341386a41046a3602002003200341c8006a41086a22013602542003200341386a3602582003200341c8006a360250200341286a200341d0006a107b200320023602442003200341c4006aad4280808080c0008410032202290000370348200210352004200341c4006a41046a360200200320013602542003200341c4006a3602582003200341c8006a360250200341386a200341d0006a107b02400240024002402003280230220641206a2207200328024022086a2202417f4c0d00200328023821092003280228210a0240024020020d004100210b410121040c010b200210332204450d022002210b0b02400240200b410f4d0d00200b21010c010b200b41017422014110200141104b1b22014100480d030240200b0d002001103322040d010c050b200b2001460d002004200b200110372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020014170714110460d002001210b0c010b2001410174220b4120200b41204b1b220b4100480d032001200b460d0020042001200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2006490d00200b21010c010b200641206a22012006490d03200b410174220c2001200c20014b1b22014100480d03200b2001460d002004200b200110372204450d040b200441206a200a2006109d081a02400240200120076b2008490d002001210b0c010b20022007490d032001410174220b2002200b20024b1b220b4100480d03024020010d000240200b0d00410121040c020b200b10332204450d050c010b2001200b460d0020042001200b10372204450d040b200420076a20092008109d081a200020023602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1044000b1045000b103e000b103c000bae0707017f017e067f017e047f017e027f230041306b220124000240024010292202422088a722030d00410121040c010b2002a721040b2001200336022420012004360220024002400240024002402003450d0020042d0000210520012003417f6a3602242001200441016a360220200541014b0d00024020050e020004000b200141186a200141206a10c40120012802180d0020012802242206200128021c2205490d002005417f4c0d020240024020050d0042002102410121070c010b200510392207450d022007200128022022082005109d081a2001200620056b3602242001200820056a3602202005ad21020b2007450d00200141106a200141206a10c4012005ad4220862002842209a7210a024020012802100d002001280214220b2001280224410c6e22052005200b4b1bad420c7e2202422088a70d032002a72205417f4c0d030240024020050d004104210c0c010b20051033220c450d030b2005410c6ead21020240200b450d000340200141086a200141206a10c40102400240024020012802080d0020012802242206200128020c2205490d002005417f4c0d080240024020050d004100210d410121080c010b200510392208450d0820082001280220220d2005109d081a2001200620056b3602242001200d20056a3602202005210d0b2002422088220ea722062002a7470d02024002400240200641016a220f2006490d00200ea74101742210200f200f2010491bad420c7e220e422088a70d00200ea7220f4100480d00024020060d00200f0d024104210c0c050b2006410c6c2206200f460d04024020060d00200f0d024104210c0c050b200c2006200f1037220c450d020c040b103e000b200f1033220c0d020b103c000b02402002422088a72205450d002005410c6c2106200c210503400240200541046a280200450d00200528020010350b2005410c6a2105200641746a22060d000b0b2002a72205450d042005410c6c450d04200c10350c040b2002422088220ea72106200f410c6ead21020b200c2006410c6c6a22062005ad422086200dad8437020420062008360200200e422086200242ffffffff0f83844280808080107c2102200b417f6a220b0d000b0b200c450d002007450d012009422088a721050c050b200a450d00200710350b41b89acc00412e200141286a41c09bcc0041e89acc001046000b1045000b1044000b410021070b2000200a36020420002007360200200041106a20023702002000410c6a200c360200200041086a200536020002402003450d00200410350b200141306a24000b970403017f017e017f23004190016b22052400200520013602040240200541046a20022004ad4220862003ad8410322206422088a72201450d002006a722072d0000220341014b0d004100210202400240024020030e020100010b41002102200541003a008801200741016a21042001417f6a2101034020012002460d02200541c8006a20026a200420026a2d00003a00002005200241016a22033a00880120032102200341c000470d000b200541086a41386a200541c8006a41386a290300370300200541086a41306a200541c8006a41306a290300370300200541086a41286a200541c8006a41286a290300370300200541086a41206a200541c8006a41206a290300370300200541086a41186a200541c8006a41186a290300370300200541086a41106a200541c8006a41106a290300370300200541086a41086a200541c8006a41086a29030037030020052005290348370308410121020b200020023a000020002005290308370001200041096a200541106a290300370000200041116a200541186a290300370000200041196a200541206a290300370000200041216a200541286a290300370000200041296a200541306a290300370000200041316a200541386a290300370000200041396a200541c0006a2903003700002007103520054190016a24000f0b200241ff0171450d00200541003a0088010b41b89acc00412e200541c8006a41c09bcc0041e89acc001046000bac0501077f23004190016b2202240002400240024002402000410c6a2802002203417f4c0d0020002802042104200028020021050240024020030d0041002106410121070c010b200310332207450d02200321060b0240024020062003490d00200621080c010b200641017422082003200820034b1b22084100480d03024020060d002008103322070d010c050b20062008460d0020072006200810372207450d040b200720042003109d082106200241f8006a200041106a10a603200241106a410c6a2003360200200241106a41086a22032008360200200241206a2002290378370300200241286a2208200241f8006a41086a280200360200200241106a41306a200041306a290200370300200241106a41386a200041386a290200370300200241106a41c0006a200041c0006a290200370300200241106a41c8006a200041c8006a290200370300200241106a41d0006a200041d0006a290200370300200241106a41d8006a200041d8006a290200370300200241106a41e0006a200041e0006a2902003703002002200636021420022005360210200220002802243602342002200029021c37022c200220002902283703382002410c6a4110360200200241fcc7c400360200200241043602042001411c6a28020021002002200241106a360208200128021821062002418c016a41023602002002420237027c20024190cec400360278200220023602880120062000200241f8006a1043210602402003280200450d00200228021410350b024020082802002203450d00200228022021002003410c6c210303400240200041046a280200450d00200028020010350b2000410c6a2100200341746a22030d000b0b0240200241246a2802002200450d002000410c6c450d00200228022010350b20024190016a240020060f0b1044000b1045000b103e000b103c000b980201027f230041206b220224002002200128021841b0b4cc0041002001411c6a28020028020c1100003a00102002200136020841012101200241013a00112002410036020c200220003602182002200041286a36021c200241086a200241186a41a0cec400106f2002411c6a41b0cec400106f1a20022d0010210002400240200228020c22030d00200021010c010b0240200041ff01710d00024020034101470d0020022d001141ff0171450d00200228020822002d00004104710d0041012101200028021841d6a0c00041012000411c6a28020028020c1100000d010b2002280208220128021841cca6cc0041012001411c6a28020028020c11000021010b200220013a00100b200241206a2400200141ff01714100470b1c00200128021841ed9dcc00410f2001411c6a28020028020c1100000bed93010a047f017e017f017e077f017e1f7f057e047f017e230041b0066b22002400200041a0056a41186a22014200370300200041a0056a41106a22024200370300200041a0056a41086a22034200370300200042003703a00541a3edcb00ad4280808080f0008422041001220529000021062003200541086a290000370300200020063703a0052005103541a5ebcb00ad4280808080c0018410012205290000210620004180046a41086a2207200541086a29000037030020002006370380042005103520022000290380042206370300200041d0046a41086a22082003290300370300200041d0046a41106a22092006370300200041d0046a41186a220a2007290300370300200020002903a0053703d004200041206a200041d0046a412010c0012000280224210b2000280220210c200142003703002002420037030020034200370300200042003703a0054188e8cb00ad42808080808001841001220529000021062003200541086a290000370300200020063703a00520051035418fd1cb00ad4280808080c000841001220529000021062007200541086a290000370300200020063703800420051035200220002903800422063703002008200329030037030020092006370300200a2007290300370300200020002903a0053703d004200041a0056a200041d0046a10d80220002802a005210d20002902a405210e200142003703002002420037030020034200370300200042003703a00520041001220529000021042003200541086a290000370300200020043703a0052005103541f393ca00ad4280808080a001841001220529000021042007200541086a290000370300200020043703800420051035200220002903800422043703002008200329030037030020092004370300200a2007290300370300200020002903a0053703d004200041a0056a200041d0046a10fe0120002802a0052205410120051b210f20002902a405420020051b2204a72110024002400240024002400240024002402004422088a72205450d00200f200541057422116a211220004194016a2113200041d0046a41206a211420004198036a4104722115200041e0026a41047221164102210541002117034020004180026a41186a200f20176a221841186a221929000037030020004180026a41106a201841106a221a29000037030020004180026a41086a201841086a221b290000370300200020182900003703800220162018290000370000201641086a201b290000370000201641106a201a290000370000201641186a201929000037000020002005417e6a221a3602e002410021190240201a201610b9040d0020004198036a41206a200041e0026a41206a28020036020020004198036a41186a200041e0026a41186a29030037030020004198036a41106a200041e0026a41106a29030037030020004198036a41086a200041e0026a41086a290300370300200020002903e00237039803200041a0026a41186a2219201541186a221a290000370300200041a0026a41106a221b201541106a221c290000370300200041a0026a41086a221d201541086a221e290000370300200020152900003703a002200a201a2900003703002009201c2900003703002008201e290000370300200020152900003703d004200041f0006a200041d0046a108402200041c0026a41186a221a2019290300370300200041c0026a41106a221c201b290300370300200041c0026a41086a221b201d290300370300200020002903a0023703c0022000280290012219450d0020142000290370370300201441186a200041f0006a41186a290300370300201441106a200041f0006a41106a290300370300201441086a200041f0006a41086a290300370300200a201a2903003703002009201c2903003703002008201b290300370300200041a0066a41086a221a201341086a280200360200200020002903c0023703d004200020132902003703a006200041a0056a41386a221b200041d0046a41386a290300370300200041a0056a41306a221c200041d0046a41306a290300370300200041a0056a41286a221d200041d0046a41286a290300370300200041a0056a41206a221e20142903003703002001200a2903003703002002200929030037030020032008290300370300200020002903d0043703a00520004180046a41386a201b29030037030020004180046a41306a201c29030037030020004180046a41286a201d29030037030020004180046a41206a201e29030037030020004180046a41186a200129030037030020004180046a41106a200229030037030020072003290300370300200020002903a00537038004200041386a41086a201a280200360200200020002903a0063703380b200041c0036a41086a2007290300370300200041c0036a41106a20004180046a41106a290300370300200041c0036a41186a20004180046a41186a290300370300200041c0036a41206a20004180046a41206a290300370300200041c0036a41286a20004180046a41286a290300370300200041c0036a41306a20004180046a41306a290300370300200041c0036a41386a20004180046a41386a29030037030020004188036a41086a200041386a41086a28020036020020002000290380043703c003200020002903383703880320190d02200541016a21052011201741206a2217470d000b0b2000410036023020004208370328201041ffffff3f71450d01200f10350c010b200041b0016a41386a2216200041c0036a41386a290300370300200041b0016a41306a2215200041c0036a41306a290300370300200041b0016a41286a221a200041c0036a41286a290300370300200041b0016a41206a221b200041c0036a41206a290300370300200041b0016a41186a2207200041c0036a41186a290300370300200041b0016a41106a2203200041c0036a41106a290300370300200041b0016a41086a2208200041c0036a41086a290300370300200041f0016a41086a220920004188036a41086a280200360200200020002903c0033703b00120002000290388033703f001200041e0006a41086a220a2009280200360200200020002903f001370360200041a0056a41086a22092008290300370300200041a0056a41106a22082003290300370300200041a0056a41186a22032007290300370300200041a0056a41206a221c201b290300370300200041a0056a41286a221b201a290300370300200041a0056a41306a221a2015290300370300200041a0056a41386a22152016290300370300200020002903b0013703a005200041d0046a41086a2216200a280200360200200020002903603703d00441d00010332207450d01200720002903a00537030020072019360240200720002903d004370244200741386a2015290300370300200741306a201a290300370300200741286a201b290300370300200741206a201c290300370300200741186a2003290300370300200741106a2008290300370300200741086a2009290300370300200741cc006a20162802003602002000428180808010370254200020073602500240201141606a2017460d00201841206a2116201120176b41606a211b200041d4016a211c20004198036a4104722115200041e0026a4104722118034020004180026a41186a201641186a221729000037030020004180026a41106a201641106a221929000037030020004180026a41086a201641086a221a290000370300200020162900003703800220162900002104201841186a201729000037000020182004370000201841086a201a290000370000201841106a201929000037000020002005417f6a22193602e0024100211702402019201810b9040d0020004198036a41206a200041e0026a41206a28020036020020004198036a41186a200041e0026a41186a29030037030020004198036a41106a200041e0026a41106a29030037030020004198036a41086a200041e0026a41086a290300370300200020002903e00237039803200041a0026a41186a2217201541186a221a290000370300200041a0026a41106a2208201541106a2203290000370300200041a0026a41086a2209201541086a220a290000370300200020152900003703a002200041d0046a41186a2219201a290000370300200041d0046a41106a221a2003290000370300200041d0046a41086a2203200a290000370300200020152900003703d004200041b0016a200041d0046a108402200041c0026a41186a220a2017290300370300200041c0026a41106a22112008290300370300200041c0026a41086a22082009290300370300200020002903a0023703c00220002802d0012217450d00201420002903b001370300201441186a200041b0016a41186a290300370300201441106a200041b0016a41106a290300370300201441086a200041b0016a41086a2903003703002019200a290300370300201a201129030037030020032008290300370300200041a0066a41086a2208201c41086a280200360200200020002903c0023703d0042000201c2902003703a006200041a0056a41386a2209200041d0046a41386a290300370300200041a0056a41306a220a200041d0046a41306a290300370300200041a0056a41286a2211200041d0046a41286a290300370300200041a0056a41206a221d200041d0046a41206a290300370300200041a0056a41186a221e2019290300370300200041a0056a41106a2219201a290300370300200041a0056a41086a221a2003290300370300200020002903d0043703a00520004180046a41386a200929030037030020004180046a41306a200a29030037030020004180046a41286a201129030037030020004180046a41206a201d29030037030020004180046a41186a201e29030037030020004180046a41106a201929030037030020004180046a41086a201a290300370300200020002903a00537038004200041386a41086a2008280200360200200020002903a0063703380b200041c0036a41086a20004180046a41086a290300370300200041c0036a41106a20004180046a41106a290300370300200041c0036a41186a20004180046a41186a290300370300200041c0036a41206a20004180046a41206a290300370300200041c0036a41286a20004180046a41286a290300370300200041c0036a41306a20004180046a41306a290300370300200041c0036a41386a20004180046a41386a29030037030020004188036a41086a200041386a41086a28020036020020002000290380043703c0032000200029033837038803024020170d00201641206a2116200541016a2105201b41606a221b0d010c020b0b200041f0006a41386a221f200041c0036a41386a2203290300370300200041f0006a41306a2220200041c0036a41306a2208290300370300200041f0006a41286a2221200041c0036a41286a2209290300370300200041f0006a41206a2222200041c0036a41206a220a290300370300200041f0006a41186a2223200041c0036a41186a2211290300370300200041f0006a41106a2224200041c0036a41106a221c290300370300200041f0006a41086a2225200041c0036a41086a221d290300370300200041f0016a41086a222620004188036a41086a221e280200360200200020002903c00337037020002000290388033703f001200041e0006a41086a22272026280200360200200020002903f001370360201641206a2116200041d4016a212820004198036a4104722115200041e0026a410472211841012119410121290340200041b0016a41086a222a2025290300370300200041b0016a41106a222b2024290300370300200041b0016a41186a222c2023290300370300200041b0016a41206a221a2022290300370300200041b0016a41286a221b2021290300370300200041b0016a41306a22012020290300370300200041b0016a41386a2213201f290300370300200020002903703703b001200041a0056a41086a222d2027280200360200200020002903603703a005024020292019470d00200041d0006a2019410110a301200028025021070b2007202941d0006c6a221920002903b001370300202b2903002104202c2903002106201a290300212e201b290300212f2001290300213020132903002131202a290300213220192017360240201941086a2032370300201920002903a005370244201941cc006a202d280200360200201941386a2031370300201941306a2030370300201941286a202f370300201941206a202e370300201941186a2006370300201941106a20043703002000202941016a222936025820162012460d01034020004180026a41186a201641186a221729000037030020004180026a41106a201641106a221929000037030020004180026a41086a201641086a221a2900003703002000201629000037038002200020053602e002201a2900002104201929000021062016290000212e201841186a2017290000370000201841106a2006370000201841086a20043700002018202e3700004100211702402005201810b9040d0020004198036a41206a200041e0026a41206a28020036020020004198036a41186a200041e0026a41186a29030037030020004198036a41106a200041e0026a41106a29030037030020004198036a41086a200041e0026a41086a290300370300200020002903e00237039803200041a0026a41186a2217201541186a221a290000370300200041a0026a41106a2201201541106a221b290000370300200041a0026a41086a2213201541086a2233290000370300200020152900003703a002200041d0046a41186a2219201a290000370300200041d0046a41106a221a201b290000370300200041d0046a41086a221b2033290000370300200020152900003703d004200041b0016a200041d0046a108402200041c0026a41186a22332017290300370300200041c0026a41106a22342001290300370300200041c0026a41086a22012013290300370300200020002903a0023703c00220002802d0012217450d00201420002903b001370300201441186a202c290300370300201441106a202b290300370300201441086a202a29030037030020192033290300370300201a2034290300370300201b2001290300370300200041a0066a41086a2201202841086a280200360200200020002903c0023703d004200020282902003703a006200041a0056a41386a2213200041d0046a41386a290300370300200041a0056a41306a2233200041d0046a41306a290300370300200041a0056a41286a2234200041d0046a41286a290300370300200041a0056a41206a2235200041d0046a41206a290300370300200041a0056a41186a22362019290300370300200041a0056a41106a2219201a290300370300202d201b290300370300200020002903d0043703a00520004180046a41386a201329030037030020004180046a41306a203329030037030020004180046a41286a203429030037030020004180046a41206a203529030037030020004180046a41186a203629030037030020004180046a41106a201929030037030020004180046a41086a202d290300370300200020002903a00537038004200041386a41086a2001280200360200200020002903a0063703380b201d20004180046a41086a290300370300201c20004180046a41106a290300370300201120004180046a41186a290300370300200a20004180046a41206a290300370300200920004180046a41286a290300370300200820004180046a41306a290300370300200320004180046a41386a290300370300201e200041386a41086a28020036020020002000290380043703c0032000200029033837038803024020170d00200541016a21052012201641206a2216470d010c030b0b201f200329030037030020202008290300370300202120092903003703002022200a290300370300202320112903003703002024201c2903003703002025201d2903003703002026201e280200360200200020002903c00337037020002000290388033703f00120272026280200360200200020002903f001370360201641206a2116200541016a2105200028025421190c000b0b0240201041ffffff3f71450d00200f10350b200041286a41086a200041d0006a41086a280200360200200020002903503703280b200041a0056a41186a22174200370300200041a0056a41106a22154200370300200041a0056a41086a22054200370300200042003703a00541a3edcb00ad4280808080f000841001221629000021042005201641086a290000370300200020043703a0052016103541a5ebcb00ad4280808080c0018410012216290000210420004180046a41086a2218201641086a2900003703002000200437038004201610352002200029038004370000200241086a2018290300370000200041d0046a41086a22162005290300370300200041d0046a41106a2015290300370300200041d0046a41186a2017290300370300200020002903a0053703d004200041186a200041d0046a412010c001200028021c2117200028021821154188e8cb00ad42808080808001841001220529000021042018200541086a2900003703002000200437038004200510354190e8cb00ad4280808080a002841001220529000021042016200541086a290000370300200020043703d004200510354100211820002017410020151b3602702000200041f0006aad22044280808080c00084100322052900003703b00120051035200041ac056a200041f4006a3602002000200041b0016a41086a22143602a4052000200041f0006a3602a8052000200041b0016a3602a005200041c0036a200041a0056a107b20002802c803221541206a2216417f4c0d0120002802c00321190240024020160d00410121050c010b201610332205450d01201621180b024002402018410f4d0d00201821170c010b201841017422174110201741104b1b22174100480d03024020180d002017103322050d010c060b20182017460d0020052018201710372205450d050b2005200029038004370000200541086a20004180046a41086a2903003700000240024020174170714110460d00201721180c010b201741017422184120201841204b1b22184100480d0320172018460d0020052017201810372205450d050b200520002903d004370010200541186a200041d0046a41086a29030037000002400240201841606a2015490d00201821170c010b2015415f4b0d03201841017422172016201720164b1b22174100480d0320182017460d0020052018201710372205450d050b200541206a20192015109d081a024020002802c403450d00201910350b2016ad4220862005ad84100802402017450d00200510350b200041a0056a41186a22174200370300200041a0056a41106a22154200370300200041a0056a41086a22054200370300200042003703a00541a3edcb00ad4280808080f000841001221629000021062005201641086a290000370300200020063703a0052016103541a5ebcb00ad4280808080c0018410012216290000210620004180046a41086a2218201641086a2900003703002000200637038004201610352002200029038004370000200241086a2018290300370000200041d0046a41086a22162005290300370300200041d0046a41106a2015290300370300200041d0046a41186a2017290300370300200020002903a0053703d004200041106a200041d0046a412010c00120002802142117200028021021154188e8cb00ad42808080808001841001220529000021062018200541086a29000037030020002006370380042005103541f1c8c400ad4280808080e001841001220529000021062016200541086a290000370300200020063703d004200510354100211820002017410020151b360270200020044280808080c00084100322052900003703b00120051035200041ac056a200041f4006a360200200020143602a4052000200041f0006a3602a8052000200041b0016a3602a005200041c0036a200041a0056a107b20002802c803221541206a2216417f4c0d0120002802c00321190240024020160d00410121050c010b201610332205450d01201621180b024002402018410f4d0d00201821170c010b201841017422174110201741104b1b22174100480d03024020180d00201710332205450d060c010b20182017460d0020052018201710372205450d050b2005200029038004370000200541086a20004180046a41086a2903003700000240024020174170714110460d00201721180c010b201741017422184120201841204b1b22184100480d0320172018460d0020052017201810372205450d050b200520002903d004370010200541186a200041d0046a41086a29030037000002400240201841606a2015490d00201821170c010b2015415f4b0d03201841017422172016201720164b1b22174100480d0320182017460d0020052018201710372205450d050b200541206a20192015109d081a024020002802c403450d00201910350b2016ad4220862005ad84100802402017450d00200510350b200e4200200d1b210e0240024002400240024002400240024002402000280230450d00200041a0056a200041286a10c104200041db046a200041a0056a41086a280200360000200020002903a0053700d304200041ac056a200041d7046a290000370000200041023a00a4052000410f3a00a005200020002900d0043700a50541b0b4cc004100200041a0056a10d401200041c8006a200041286a41086a2802003602002000200e422088a7223536023c2000200b4100200c1b221b3602382000200029032837034020004188036a200041386a41086a10c1042000280290032114200028028c0321102000280288032128410410332205450d092005201b36000020004284808080c000370284042000200536028004200041a0056a10c204200041d0046a20002802a005221620002802a80510e00220002902d404420020002802d00422051b21042005410120051b211a024020002802a405450d00201610350b200020044220883e02c4032000201a3602c003200041086a200041c0036a10c40141002115024020002802080d00200028020c220720002802c403221841246e2205200520074b1bad42247e2206422088a70d0b2006a72205417f4c0d0b0240024020050d00410421150c010b200510332215450d0b0b41002119200041003602d804200020153602d0042000200541246e22053602d4042007450d0041002119410021020240024002400340201822034104490d02200241016a2102200020002802c003221841046a3602c0032018280000210841002105200041003a00c0052003417c6a2117034020172005460d02200041a0056a20056a201820056a221641046a2d00003a00002000201641056a3602c0032000200541016a22163a00c0052016210520164120470d000b200041c0026a41186a2209200041a0056a41186a290300370300200041c0026a41106a220a200041a0056a41106a290300370300200041c0026a41086a220f200041a0056a41086a290300370300200020002903a0053703c0020240201920002802d404470d00200041d0046a20194101108d0120002802d004211520002802d80421190b201720166b21182015201941246c6a22052008360200200520002903c0023702042005410c6a200f290300370200200541146a200a2903003702002005411c6a20092903003702002000201941016a22193602d80420022007470d000b2000200320166b417c6a3602c40320002802d40421050c030b200041003602c403200541ff0171450d01200041003a00c0050c010b200020033602c4030b024020002802d4042205450d00200541246c450d00201510350b410021150b200041a0056a20004180046a10c304200041d0046a20002802a005220720002802a80510b5022019410020151b21162005410020151b211820002902d404420020002802d00422051b21062015410420151b21172005410120051b2105024020002802a405450d00200710350b200041b8036a2016360200200041b4036a2018360200200041a8036a200637030020004198036a41086a20004180046a41086a280200360200200020002903800437039803200020173602b003200020053602a40302402004a7450d00201a10350b2014450d01200041b0036a2134200041a4036a212d2028201441d0006c6a210f200041a0056a41d0006a2133200041a0056a41306a2109200041a0056a41206a210a20004180046a41306a211120004180046a41206a211c20004180046a41c4006a211d41002112202821070340200041a0056a41386a22162007220541386a2903003703002009200541306a290300370300200041a0056a41286a2218200541286a290300370300200a200541206a290300370300200041a0056a41186a2202200541186a290300370300200041a0056a41106a2203200541106a290300370300200041a0056a41086a2208200541086a290300370300200041a0066a41086a2217200541cc006a280200360200200020052903003703a0052000200541c4006a2902003703a006200541d0006a2107200541c0006a2802002205450d03200041c0036a41386a22152016290300370300200041c0036a41306a22162009290300370300200041c0036a41286a22192018290300370300200041c0036a41206a2218200a290300370300200041c0036a41186a22142002290300370300200041c0036a41106a221a2003290300370300200041c0036a41086a221e2008290300370300200041f0016a41086a22012017280200360200200020002903a0053703c003200020002903a0063703f00120004180046a41386a20152903003703002011201629030037030020004180046a41286a2019290300370300201c201829030037030020004180046a41186a2215201429030037030020004180046a41106a2219201a29030037030020004180046a41086a221a201e290300370300200020002903c00337038004200020053602c004201d20002903f001370200201d41086a2001280200360200410410332214450d0a2014201b360000411810332205450d0a200042183702a405200020053602a005200541002902f8be46370000200541086a4100290280bf46370000200041103602a8054104200041a0056a10770240024020002802a405221720002802a80522056b4104490d0020002802a0052116201721180c010b200541046a22162005490d0d201741017422182016201820164b1b22184100480d0d0240024020170d00024020180d00410121160c020b201810332216450d110c010b20002802a005211620172018460d0020162017201810372216450d100b200020183602a405200020163602a0050b201620056a20142800003600002000200541046a22173602a8050240201820176b411f4b0d00201741206a221e2017490d0d20184101742201201e2001201e4b1b221e4100480d0d0240024020180d000240201e0d00410121160c020b201e10332216450d110c010b2018201e460d0020162018201e10372216450d100b2000201e3602a405200020163602a0050b201620176a2216200029038004370000201641186a2015290300370000201641106a2019290300370000201641086a201a2903003700002000200541246a3602a8052000201c3602d004200041d0046a200041a0056a10cf01200020113602d004200041d0046a200041a0056a10cf0120002802c004210520002802c8042216200041a0056a107702402016450d00201641306c211503400240024020002802a405221720002802a80522186b4120490d0020002802a00521160c010b201841206a22162018490d0f201741017422192016201920164b1b22194100480d0f0240024020170d00024020190d00410121160c020b201910332216450d130c010b20002802a005211620172019460d0020162017201910372216450d120b200020193602a405200020163602a0050b201620186a2216200541106a290000370000201641186a200541286a290000370000201641106a200541206a290000370000201641086a200541186a2900003700002000201841206a3602a805200020053602d004200041d0046a200041a0056a10cf01200541306a2105201541506a22150d000b0b20002802a405211620003502a80542208620002802a0052218ad84100922052900002104200541086a2900002106200541106a290000212e200041b0016a41186a221e200541186a290000370300200041b0016a41106a2201202e370300200041b0016a41086a22132006370300200020043703b0012005103502402016450d00201810350b20141035200041a0056a200041b0016a10c404200020002802a005221620002802a80541b0b4cc0041004100108a0220002802002105024020002802a405450d00201610350b024002400240024020054101460d00200041d0046a20004180046a41d000109d081a2000410036027820004201370370200041f0006a41004100108a01200041e0026a41086a22052000280278360200200020002903703703e002200041a0056a200041d0046a41d000109d081a203341086a2005280200360200203320002903e002370200200041f0006a200041b0016a10c4042000350278210420002802702112200041003602d804200042013703d004412010332205450d12200041203602d404200020053602d004200520002903a005370000200541086a2008290300370000200541106a2003290300370000200541186a2002290300370000200041203602d8042000200a3602e002200041e0026a200041d0046a10cf01200020093602e002200041e0026a200041d0046a10cf0120002802e005210520002802e8052216200041d0046a107702402016450d00201641306c211503400240024020002802d404221720002802d80422186b4120490d0020002802d00421160c010b201841206a22162018490d13201741017422192016201920164b1b22194100480d130240024020170d00024020190d00410121160c020b201910332216450d170c010b20002802d004211620172019460d0020162017201910372216450d160b200020193602d404200020163602d0040b201620186a2216200541106a290000370000201641186a200541286a290000370000201641106a200541206a290000370000201641086a200541186a2900003700002000201841206a3602d804200020053602e002200041e0026a200041d0046a10cf01200541306a2105201541506a22150d000b0b20002802f005210520002802f8052216200041d0046a10770240024020160d0020002802d804211620002802d404211420002802d00421190c010b2016410574211a410020002802d80422166b211520002802d4042117034002400240201720156a4120490d0020002802d0042119201721140c010b201641206a22182016490d13201741017422192018201920184b1b22144100480d130240024020170d00024020140d00410121190c020b201410332219450d170c010b20002802d004211920172014460d0020192017201410372219450d160b200020143602d404200020193602d004201421170b201920166a22182005290000370000201841186a200541186a290000370000201841106a200541106a290000370000201841086a200541086a2900003700002000201641206a22163602d804201541606a2115200541206a2105201a41606a221a0d000b0b20044220862012ad842016ad4220862019ad84100202402014450d00201910350b02402000280274450d00201210350b024020002802e4052205450d00200541306c450d0020002802e00510350b024020002802f40541ffffff3f71450d0020002802f00510350b200041d0046a41186a2214201e290300370300200041d0046a41106a221a2001290300370300200041d0046a41086a221e2013290300370300200020002903b0013703d00420002802b003211541002105024020002802b803221941014b0d00024020190e020003000b200220142903003703002003201a2903003703002008201e290300370300200020002903d0043703a005410021050c030b20192116034020052016410176221820056a22172015201741246c6a280200201b4b1b2105201620186b221641014b0d000c020b0b20002802c4042205450d02200541306c450d0220002802c00410350c020b02402015200541246c6a2802002216201b460d0020052016201b496a21050b200220142903003703002003201a2903003703002008201e290300370300200020002903d0043703a005201920054f0d0020052019104d000b0240201920002802b403470d00203420194101108d0120002802b00321150b2015200541246c6a221641246a2016201920056b41246c109e081a2016201b360200201620002903a0053702042016410c6a2008290300370200201641146a20032903003702002016411c6a20022903003702002000201941016a3602b803200220142903003703002003201a2903003703002008201e290300370300200020002903d0043703a005024020002802ac03220520002802a803470d00202d20054101108a0120002802ac0321050b20002802a40320054105746a221620002903a005370000201641186a2002290300370000201641106a2003290300370000201641086a2008290300370000410121122000200541016a3602ac030b2007200f470d000b200f21070c020b200041013a00a4052000410f3a00a00541b0b4cc004100200041a0056a10d401200028022c2205450d07200541d0006c450d07200028022810350c070b2010450d01201041d0006c450d01202810350c010b0240200f2007460d0003402007220541d0006a21070240200541c4006a2802002216450d00201641306c450d00200541c0006a28020010350b200f2007470d000b0b02402010450d00201041d0006c450d00202810350b2012410171450d00024020002802ac032205450d0020002802a4032118200541057441406a2116200041e4056a2105034020004180026a201810c404200041a0056a200028028002221520002802880210d70220004180046a41086a2219200041a0056a41086a29030037030020004180046a41106a2214200041a0056a41106a29030037030020004180046a41186a221a200041a0056a41186a29030037030020004180046a41206a2207200041a0056a41206a29030037030020004180046a41286a2202200041a0056a41286a29030037030020004180046a41306a2203200041a0056a41306a29030037030020004180046a41386a2208200041a0056a41386a290300370300200041e0026a41086a2209200541086a290200370300200041e0026a41106a220a200541106a290200370300200041e0026a41186a220f200541186a280200360200200020002903a00537038004200020052902003703e002024020002802e0052217450d00200041f0006a41386a2008290300370300200041f0006a41306a2003290300370300200041f0006a41286a2002290300370300200041f0006a41206a2007290300370300200041f0006a41186a201a290300370300200041f0006a41106a2014290300370300200041f0006a41086a2019290300370300200041d0046a41086a2009290300370300200041d0046a41106a200a290300370300200041d0046a41186a200f2802003602002000200029038004370370200020002903e0023703d0040b0240200028028402450d00201510350b20170d03201841206a2118201641606a22164140470d000b0b4108210a410021084100210f0c020b0240200028029c03450d0020002802980310350b024020002802a80341ffffff3f71450d0020002802a40310350b20002802b4032205450d02200541246c450d0220002802b00310350c020b200041c0036a41386a2214200041f0006a41386a290300370300200041c0036a41306a221a200041f0006a41306a290300370300200041c0036a41286a2207200041f0006a41286a290300370300200041c0036a41206a2202200041f0006a41206a290300370300200041c0036a41186a2203200041f0006a41186a290300370300200041c0036a41106a2208200041f0006a41106a290300370300200041c0036a41086a2209200041f0006a41086a290300370300200041a0026a41086a220a200041d0046a41086a2205290300370300200041a0026a41106a220f200041d0046a41106a2215290300370300200041a0026a41186a2211200041d0046a41186a2219280200360200200020002903703703c003200020002903d0043703a002200041b0016a41086a221c2009290300370300200041b0016a41106a22092008290300370300200041b0016a41186a22082003290300370300200041b0016a41206a22032002290300370300200041b0016a41286a22022007290300370300200041b0016a41306a2207201a290300370300200041b0016a41386a221a2014290300370300200041c0026a41086a2214200a290300370300200041c0026a41106a220a200f290300370300200041c0026a41186a220f2011280200360200200020002903c0033703b001200020002903a0023703c002200041a0056a41086a2211201c290300370300200041a0056a41106a221c2009290300370300200041a0056a41186a22092008290300370300200041a0056a41206a22082003290300370300200041a0056a41286a22032002290300370300200041a0056a41306a22022007290300370300200041a0056a41386a2207201a290300370300200020002903b0013703a005200520142903003703002015200a2903003703002019200f280200360200200020002903c0023703d00441e0001033220a450d04200a20002903a005370300200a2017360240200a20002903d004370244200a41386a2007290300370300200a41306a2002290300370300200a41286a2003290300370300200a41206a2008290300370300200a41186a2009290300370300200a41106a201c290300370300200a41086a2011290300370300200a41cc006a2005290300370200200a41d4006a2015290300370200200a41dc006a201928020036020020004281808080103702a4062000200a3602a006024020164160470d00410121084101210f0c010b201841206a2117200041a0056a41c4006a211841012108034020004180026a201710c404200041a0056a200028028002220520002802880210d70220004180046a41086a220f200041a0056a41086a221929030037030020004180046a41106a2211200041a0056a41106a221429030037030020004180046a41186a221c200041a0056a41186a221a29030037030020004180046a41206a221d200041a0056a41206a220729030037030020004180046a41286a221e200041a0056a41286a220229030037030020004180046a41306a2201200041a0056a41306a220329030037030020004180046a41386a2213200041a0056a41386a2209290300370300200041e0026a41086a2212201841086a290200370300200041e0026a41106a2233201841106a290200370300200041e0026a41186a2234201841186a280200360200200020002903a00537038004200020182902003703e002024020002802e0052215450d00200041d0046a41386a2013290300370300200041d0046a41306a2001290300370300200041d0046a41286a201e290300370300200041d0046a41206a201d290300370300200041d0046a41186a201c290300370300200041d0046a41106a2011290300370300200041d0046a41086a200f290300370300200041f0006a41086a2012290300370300200041f0006a41106a2033290300370300200041f0006a41186a203428020036020020002000290380043703d004200020002903e0023703700b0240200028028402450d00200510350b02400240024020150d002016450d010c020b200041c0036a41386a2205200041d0046a41386a290300370300200041c0036a41306a221d200041d0046a41306a290300370300200041c0036a41286a221e200041d0046a41286a290300370300200041c0036a41206a2201200041d0046a41206a290300370300200041c0036a41186a2213200041d0046a41186a220f290300370300200041c0036a41106a2212200041d0046a41106a2211290300370300200041c0036a41086a2233200041d0046a41086a221c290300370300200041a0026a41086a2234200041f0006a41086a290300370300200041a0026a41106a222d200041f0006a41106a290300370300200041a0026a41186a2228200041f0006a41186a280200360200200020002903d0043703c003200020002903703703a002200041b0016a41086a22102033290300370300200041b0016a41106a22332012290300370300200041b0016a41186a22122013290300370300200041b0016a41206a22132001290300370300200041b0016a41286a2201201e290300370300200041b0016a41306a221e201d290300370300200041b0016a41386a221d2005290300370300200041c0026a41086a22052034290300370300200041c0026a41106a2234202d290300370300200041c0026a41186a222d2028280200360200200020002903c0033703b001200020002903a0023703c0022019201029030037030020142033290300370300201a201229030037030020072013290300370300200220012903003703002003201e2903003703002009201d290300370300200020002903b0013703a005201c200529030037030020112034290300370300200f202d280200360200200020002903c0023703d0040240200820002802a406470d00200041a0066a2008410110a40120002802a006210a0b200a200841e0006c6a220520002903a005370300200541106a2014290300370300200541086a201929030037030020032903002104200929030021062002290300212e2007290300212f201a2903002130200541c0006a2015360200200541186a2030370300200541206a202f370300200541286a202e370300200541c4006a20002903d004370200200541386a2006370300200541306a2004370300200541cc006a201c290300370200200541d4006a2011290300370200200541dc006a200f2802003602002000200841016a22083602a80620160d010b20002802a406210f0c020b201741206a2117201641606a21160c000b0b200041a0056a41206a20004198036a41206a2802002216360200200041a0056a41106a20004198036a41106a290300370300200041a0056a41086a20004198036a41086a290300370300200041a0056a41186a20004198036a41186a290300220437030020002000290398033703a005201641246c41046a2205417f4c0d040240024020050d0041012118410021050c010b200510332218450d040b200041003602d804200020183602d004200020053602d4042016200041d0046a10770240024020160d0020002802d804211820002802d404211720002802d00421190c010b2004a72205201641246c6a2109410020002802d80422186b211420002802d404211703402005280200211602400240201720146a4104490d0020002802d0042119201721150c010b201841046a22152018490d08201741017422192015201920154b1b22154100480d080240024020170d00024020150d00410121190c020b201510332219450d0c0c010b20002802d004211920172015460d0020192017201510372219450d0b0b200020153602d404200020193602d0040b201920186a20163600002000201841046a22173602d804412010332216450d05201641186a221a2005411c6a290000370000201641106a2207200541146a290000370000201641086a22022005410c6a2900003700002016200541046a29000037000002400240201520146a417c6a411f4d0d00201521170c010b201741206a22032017490d08201541017422172003201720034b1b22174100480d080240024020150d00024020170d00410121190c020b201710332219450d0c0c010b20152017460d0020192015201710372219450d0b0b200020173602d404200020193602d0040b201920186a221541046a20162900003700002015411c6a201a290000370000201541146a20072900003700002015410c6a20022900003700002000201841246a22183602d804201610352014415c6a2114200541246a22052009470d000b0b200041d0046a10c20420002802d0042105200020002802d8043602840420002005360280042019201820004180046a109403024020002802d404450d00200510350b02402017450d00201910350b200041d0046a200041a0056a10c30420002802d0042105200020002802d80436028404200020053602800420002802ac052216200041b4056a28020020004180046a10c504024020002802d404450d00200510350b024020002802a405450d0020002802a00510350b0240200041b0056a28020041ffffff3f71450d00201610350b0240200041bc056a2802002205450d00200541246c450d0020002802b80510350b200a0d010b200028024021170240200041c8006a2802002205450d00200541d0006c2116201741c4006a21050340024020052802002218450d00201841306c450d002005417c6a28020010350b200541d0006a2105201641b07f6a22160d000b0b0240200041c4006a2802002205450d00200541d0006c450d00201710350b41eba3cc00ad4280808080c00184100641dca3cc00ad4280808080f0018410060c010b4100211802402035410a6e417f7320086a221620084b0d0020354101203541014b1b2205418094ebdc036e221820052018418094ebdc036c476a22184101201841014b1b221820054b0d0520002005201641036c221620052016491b20186ead428094ebdc037e200520186ead8042ffffffff0f834280bbb0217e428094ebdc0380a722053602a0052000418094ebdc033602a405200041a0056a2005418094ebdc034b4102746a28020021180b200041003602a805200042043703a005200041a0056a4100200810860120002802a005210720002802a805211a02400240024020080d0020002802a405211141012116200a41002007201a201b10fd010d010c020b2007201a4102746a210520082116034020052018360200200541046a21052016417f6a22160d000b20002802a405211141012116200a20082007201a20086a221a201b10fd01450d010b200041a0026a41186a4200370300200041a0026a41106a22184200370300200041a0026a41086a22054200370300200042003703a00241a2e8cb00ad42808080808001841001221629000021042005201641086a290000370300200020043703a0022016103541e6f2c400ad4280808080800284100122162900002104200041a0056a41086a2217201641086a290000370300200020043703a00520161035201820002903a005220437030020004180026a41086a200529030037030020004180026a41106a200437030020004180026a41186a2017290300370300200020002903a00237038002200041a0056a20004180026a10c6020240024020002802a00522020d0041002109200041003602b801200042043703b00141042102410021030c010b200020002902a40522043702b401200020023602b0012004422088a721032004a721090b2008ad42e0007e2204422088a70d032004a72205417f4c0d030240024020050d00410821160c010b200510332216450d030b200041003602c803200020163602c0032000200541e0006e3602c403200041c0036a4100200810a40120002802c803211c02402008450d00200a200841e0006c6a211420002802c003201c41e0006c6a2105200841057441606a410576211d200041a4056a2118200a21160340200041c0026a41086a2217201641086a290300370300200041c0026a41106a2215201641106a290300370300200041c0026a41186a2219201641186a290300370300200020162903003703c002201641206a2903002104201641286a2903002106201641306a290300212e201641386a290300212f20004180046a201641c0006a10c604200041d0046a201641d0006a10a402201841086a200041d0046a41086a280200360200201820002903d00437020020192903002130201529030021312017290300213220002903c0022137200541386a202f370300200541306a202e370300200541286a2006370300200541206a2004370300200541086a203237030020052037370300200541106a2031370300200541c0006a200029038004370300200541c8006a20004180046a41086a280200360200200541186a2030370300200541cc006a20002902a005370200200541d4006a200041a0056a41086a290200370200200541e0006a2105201641e0006a22162014470d000b201c201d6a41016a211c0b200041a8056a201c360200200020002903c0033703a005201a41ffffffff0371201a470d03201a4102742205417f4c0d030240024020050d00410421160c010b200510332216450d030b200041003602d804200020163602d004200020054102763602d404200041d0046a4100201a10860120002802d00420002802d80422054102746a2007201a410274109d081a20004180046a41086a22182005201a6a2205360200200041b4056a2005360200200020002903d0043702ac05024020032009470d00200041b0016a2009410110f90120002802b401210920002802b001210220002802b80121030b20022003411c6c6a220520002903a005370200200041a0056a41086a22162903002104200041a0056a41106a221729030021062005201b360218200541106a2006370200200541086a20043702002000200341016a22153602b801200041a0056a41186a42003703002017420037030020164200370300200042003703a00541a2e8cb00ad42808080808001841001220529000021042016200541086a290000370300200020043703a0052005103541e6f2c400ad42808080808002841001220529000021042018200541086a29000037030020002004370380042005103520172000290380042204370300200041d0046a41086a2016290300370300200041d0046a41106a2004370300200041d0046a41186a2018290300370300200020002903a0053703d0040240024020020d00200041d0046aad428080808080048410070c010b200041a0056a2002201510c704200041d0046aad428080808080048420003502a80542208620002802a0052205ad841002024020002802a405450d00200510350b2002201510c8022009450d002009411c6c450d00200210350b410021160b410410332205450d012005201b360000200041a8056a4284808080c000370300200041b8056a4100290280bf46370300200041c0056a20163a0000200041103a00a005200041a0056a41106a41002902f8be46370300200020053602a40541b0b4cc004100200041a0056a10d4010240201141ffffffff0371450d00200710350b02402008450d00200841e0006c2116200a41d4006a210503400240200541706a2802002218450d00201841306c450d002005416c6a28020010350b0240200528020041ffffff3f71450d002005417c6a28020010350b200541e0006a2105201641a07f6a22160d000b0b0240200f450d00200f41e0006c450d00200a10350b200028024021170240200041c8006a2802002205450d00200541d0006c2116201741c4006a21050340024020052802002218450d00201841306c450d002005417c6a28020010350b200541d0006a2105201641b07f6a22160d000b0b200041c4006a2802002205450d00200541d0006c450d00201710350b0240200e42ffffff3f83500d00200d4101200d1b10350b200041b0066a24000f0b1045000b1044000b103e000b4190edc40041194180efc400103f000b103c000bfe0304027f017e067f077e230041c0006b220224000240024020012802082203ad42d0007e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510332206450d020b20024100360208200220063602002002200541d0006e36020420024100200310a3012002280208210702402003450d002001200341d0006c6a21082002280200200741d0006c6a2105200341047441706a41047621090340200241206a41086a2203200141086a290300370300200241206a41106a2206200141106a290300370300200241206a41186a220a200141186a29030037030020022001290300370320200141206a2903002104200141286a290300210b200141306a290300210c200141386a290300210d200241106a200141c0006a10c604200a290300210e2006290300210f2003290300211020022903202111200541386a200d370300200541306a200c370300200541286a200b370300200541206a2004370300200541086a201037030020052011370300200541106a200f370300200541186a200e370300200541c0006a2002290310370300200541c8006a200241106a41086a280200360200200541d0006a2105200141d0006a22012008470d000b200720096a41016a21070b20002002290300370200200041086a2007360200200241c0006a24000f0b1044000b1045000b970503027f017e067f230041d0006b2201240041a2e8cb00ad4280808080800184100122022900002103200141086a41086a200241086a290000370300200120033703082002103541aae8cb00ad4280808080a00284100122022900002103200141186a41086a200241086a29000037030020012003370318200210350240024002400240411010332202450d0041002104200241086a4100290280bf46370000200241002902f8be4637000020012002ad42808080808002841003220529000037033820051035200141cc006a200241106a360200200120023602482001200141386a41086a3602442001200141386a360240200141286a200141c0006a107b200210352001280230220641206a2207417f4c0d01200128022821080240024020070d00410121020c010b200710332202450d01200721040b024002402004410f4d0d00200421050c010b200441017422054110200541104b1b22054100480d03024020040d002005103322020d010c050b20042005460d0020022004200510372202450d040b20022001290308370000200241086a200141086a41086a2903003700000240024020054170714110460d00200521040c010b200541017422044120200441204b1b22044100480d0320052004460d0020022005200410372202450d040b20022001290318370010200241186a200141186a41086a29030037000002400240200441606a2006490d00200421050c010b200641206a22052006490d03200441017422092005200920054b1b22054100480d0320042005460d0020022004200510372202450d040b200241206a20082006109d081a2000200736020820002005360204200020023602000240200128022c450d00200810350b200141d0006a24000f0b1045000b1044000b103e000b103c000bbd0603027f017e087f230041d0006b2202240041a2e8cb00ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541b0a5c500ad4280808080e00284100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240411010332203450d0041002105200341086a4100290280bf46370000200341002902f8be4637000020022003ad42808080808002841003220629000037033820061035200241cc006a200341106a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b20031035200241c0006a200128020020012802081098032002280230220741206a2208200228024822096a2201417f4c0d012002280240210a2002280228210b0240024020010d00410121030c010b200110332203450d01200121050b024002402005410f4d0d002005210c0c010b200541017422064110200641104b1b220c4100480d03024020050d00200c103322030d010c050b2005200c460d0020032005200c10372203450d040b20032002290308370000200341086a200241086a41086a29030037000002400240200c4170714110460d00200c21060c010b200c41017422054120200541204b1b22064100480d03200c2006460d002003200c200610372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200641606a2007490d00200621050c010b200741206a22052007490d032006410174220c2005200c20054b1b22054100480d0320062005460d0020032006200510372203450d040b200341206a200b2007109d081a02400240200520086b2009490d00200521060c010b20012008490d03200541017422062001200620014b1b22064100480d03024020050d00024020060d00410121030c020b200610332203450d050c010b20052006460d0020032005200610372203450d040b200320086a200a2009109d081a20002001360208200020063602042000200336020002402002280244450d00200a10350b0240200228022c450d00200b10350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a2e8cb00ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541dff2c400ad4280808080f00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000be503010a7f230041106b22032400024020014105744104722204417f4c0d000240200410332205450d002003410036020820032004360204200320053602002001200310770240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210620032802082105034020052104412010332201450d0220012000290000370000200141186a2209200041186a290000370000200141106a220a200041106a290000370000200141086a220b200041086a29000037000002400240200620046b4120490d00200441206a21050c010b024002400240200441206a22052004490d002006410174220c2005200c20054b1b220c4100480d000240024020060d000240200c0d00410121070c020b200c103321070c040b2006200c470d020b200c21060c030b103e000b20072006200c103721070b200c210620070d00103c000b200041206a2100200720046a22042001290000370000200441186a2009290000370000200441106a200a290000370000200441086a200b29000037000020011035200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100202402006450d00200710350b200341106a24000f0b1045000b1044000bb10203027f017e027f230041106b220224000240024020012802082203ad42307e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510332206450d020b20024100360208200220063602002002200541306e3602042002410020031088012002280208210502402003450d002001200341306c6a21062002280200200541306c6a21030340200320012903003703002003200141086a290300370308200341106a200141106a290300370300200341186a200141186a290300370300200341206a200141206a290300370300200341286a200141286a290300370300200341306a2103200541016a2105200141306a22012006470d000b0b20002002290300370200200041086a2005360200200241106a24000f0b1044000b1045000bfe0301067f230041106b22032400024002402002411c6c41046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b20034100360208200320053602002003200436020420022003107702402002450d0020012002411c6c6a2106034020012802002105200128020822022003107702402002450d002005200241e0006c6a2107034020032005412010782003200541206a36020c2003410c6a200310cf012003200541306a36020c2003410c6a200310cf0120052802402102200528024822042003107702402004450d00200441306c210403402003200241106a412010782003200236020c200241306a21022003410c6a200310cf01200441506a22040d000b0b200541e0006a210820052802502102200528025822042003107702402004450d002004410574210403402003200241201078200241206a2102200441606a22040d000b0b2008210520082007470d000b0b2001411c6a2105200128020c2102200128021422042003107702402004450d002004410274210403402003200228020036020c20032003410c6a41041078200241046a21022004417c6a22040d000b0b2003200128021836020c20032003410c6a410410782005210120052006470d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1044000b1045000b960407047f017e017f017e017f017e047f230041e0006b22012400200141306a41186a22024200370300200141306a41106a22034200370300200141306a41086a220442003703002001420037033041d1c4c700ad4280808080e000842205100122062900002107200141d0006a41086a2208200641086a290000370300200120073703502006103520042008290300370300200120012903503703304184eec700ad4280808080b0028422071001220629000021092008200641086a2900003703002001200937035020061035200320012903502209370300200141106a41086a220a2004290300370300200141106a41106a220b2009370300200141106a41186a220c2008290300370300200120012903303703102001200141106a10e102200129030821092001280200210d2002420037030020034200370300200442003703002001420037033020051001220629000021052008200641086a2900003703002001200537035020061035200420082903003703002001200129035037033020071001220629000021052008200641086a2900003703002001200537035020061035200320012903502205370300200a2004290300370300200b2005370300200c2008290300370300200120012903303703102001427f20094200200d1b220520007c220020002005541b370330200141106aad4280808080800484200141306aad42808080808001841002200141e0006a24000bfc0403027f017e057f230041d0006b220224004189fec600ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541e28cc500ad4280808080e00084100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bea3506207f027e027f057e027f077e230041f0106b220224000240024002400240024002400240200141106a2802002203200141146a280200460d00200241f00a6a41c0026a21042002418d0b6a2105200241e10a6a2106200241a80a6a2107200241f00a6a4105722108200241f8076a4105722109200241a00f6a210a200241c00e6a41c0006a210b200241e00e6a210c200241e8086a210d200241f00a6a410472210e200241f8076a410472210f200241f00a6a41146a2110200241f00a6a41106a2111200241f00a6a410d6a2112200241f00a6a410c6a2113200241f00a6a41086a2114200241c8086a2115200241f8076a41146a2116200241f8076a41106a2117200241f8076a410d6a2118200241a8086a2119200241f8076a410c6a211a200241f8076a41086a211b200241f8076a41c0026a211c200241f8076a41046a211d03402001200341d8026a3602102003280200211e200241186a200341046a41c002109d081a200241086a41086a221f200341d0026a2903003703002002200341c8026a290300370308200341c4026a28020022034102460d0120012802182120200241f8076a200241186a41c002109d081a200241f00a6a201d41bc02109d081a20042002290308370300200441086a2221201f290300370300200220033602ac0d200241b8056a200241f00a6a10d8032001200129030020022903b8057c2222370300200241b8056a200241f00a6a41bc02109d081a200241a8056a41086a221f2021290300370300200220042903003703a8050240024020022802ac0d22034102470d00410321030c010b200241f8076a200241b8056a41bc02109d081a201c41086a2221201f290300370300201c20022903a805370300200220033602b40a0240024020022d00c00a41c000490d002020450d0020222001280220290300560d010b024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022802f8070e1c00011302030405060708090a0b0c0d0e0f1011121313131415161713000b200241c00e6a201b109d03201441086a200241c00e6a41086a290300370300201420022903c00e370300200241003602f00a0c170b200241c00e6a200f109a03200e41386a200241c00e6a41386a280200360200200e41306a200241c00e6a41306a290300370200200e41286a200241c00e6a41286a290300370200200e41206a200241c00e6a41206a290300370200200e41186a200241c00e6a41186a290300370200200e41106a200241c00e6a41106a290300370200200e41086a200241c00e6a41086a290300370200200e20022903c00e370200200241013602f00a0c160b20022002290380083703f80a200241033602f00a0c150b200241c00e6a200f109e03200e41086a200241c00e6a41086a280200360200200e20022903c00e370200200241043602f00a0c140b024002400240024002400240024020022d00fc07417f6a220341034b0d0020030e0401020304010b41cfa2cc00412841c086cc00103f000b41012103200228028008211f0c040b41022103200241c00d6a41026a200941026a2d00003a0000200241c00e6a41086a201a41086a290200370300200241c00e6a41106a201a41106a290200370300200241c00e6a41186a201a41186a2d00003a0000200220092f00003b01c00d2002201a2902003703c00e0c020b41032103200228028008211f0c020b200241c00d6a41026a200941026a2d00003a0000200241c00e6a41086a201a41086a290200370300200241c00e6a41106a201a41106a290200370300200241c00e6a41186a201a41186a2d00003a0000200220092f00003b01c00d2002201a2902003703c00e410421030b200228028008211f20022802a00821210b200820022f01c00d3b0000201320022903c00e370200200841026a200241c00d6a41026a2d00003a0000201341086a200241c00e6a41086a290300370200201341106a200241c00e6a41106a290300370200201341186a200241c00e6a41186a280200360200200220033a00f40a2002201f3602f80a200220213602980b200241053602f00a0c130b024002400240024002400240200228028008417f6a220341034b0d0020030e0401020304010b41cfa2cc00412841c086cc00103f000b41012103024020022d0084084101460d00200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e410021030b2002280288082121200241e8106a41026a200241ec106a41026a2d00003a0000200241c00d6a41086a200241c00e6a41086a290300370300200241c00d6a41106a200241c00e6a41106a290300370300200241c00d6a41186a200241c00e6a41186a280200360200200220022f01ec103b01e810200220022903c00e3703c00d20022903a8082223422088a721202023420888a721242023a7211f200241b0086a2903002123410121250c030b41012103024020022d0084084101460d00200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e410021030b200228028808212141022125200241e8106a41026a200241ec106a41026a2d00003a0000200241c00d6a41086a200241c00e6a41086a290300370300200241c00d6a41106a200241c00e6a41106a290300370300200241c00d6a41186a200241c00e6a41186a280200360200200220022f01ec103b01e810200220022903c00e3703c00d20022903a8082223422088a721202023420888a721242023a7211f200241c0086a2903002126200241b0086a290300212320022903b80821270c020b41012103024020022d0084084101460d00200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e410021030b20022802880821214101211f0240024020022d00a8084101470d0020022802ac0821202028212320292127202a2126202b21240c010b202c41807e7120022d00c80872212c4100211f20022802ac08212020022903b0082223212820022903b80822272129200241c0086a2903002226212a20022f00a908200241ab086a2d0000411074722224212b0b200241e8106a41026a200241ec106a41026a2d00003a0000200241c00d6a41086a200241c00e6a41086a290300370300200241c00d6a41106a200241c00e6a41106a290300370300200241c00d6a41186a200241c00e6a41186a280200360200200220022f01ec103b01e810200220022903c00e3703c00d202d42808080807083202cad84212d200241d8086a290300212e20022903d008212f410321250c010b41012103024020022d0084084101460d00200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e410021030b2002280288082121200241e8106a41026a200241ec106a41026a2d00003a0000200241c00d6a41086a200241c00e6a41086a290300370300200241c00d6a41106a200241c00e6a41106a290300370300200241c00d6a41186a200241c00e6a41186a280200360200200220022f01ec103b01e810200220022903c00e3703c00d20022903a8082223422088a721202023420888a721242023a7211f200241b0086a2903002123410421250b201220022f01e8103b0000201241026a200241e8106a41026a2d00003a0000201020022903c00d370200201041086a200241c00d6a41086a290300370200201041106a200241c00d6a41106a290300370200201041186a200241c00d6a41186a280200360200200220033a00fc0a200220253602f80a200220213602800b200241d00b6a202e370300200241b80b6a2026370300200241a80b6a20233703002002202f3703c80b200220273703b00b20022020ad4220862024ad42ffffff078342088684201fad42ff0183843703a00b2002202d3703c00b200241063602f00a0c120b200241c00e6a201b1087022014200241c00e6a418802109d081a200241073602f00a0c110b0240024020022802fc0722240d004100211f0c010b200c2019290000370000200b2015290000370000200241c00e6a41186a201741186a290000370300200241c00e6a41106a201741106a290000370300200241c00e6a41086a201741086a290000370300200c41086a201941086a290000370000200c41106a201941106a290000370000200c41186a201941186a290000370000200b41086a201541086a290000370000200b41106a201541106a290000370000200b41186a201541186a290000370000200220172900003703c00e200a41186a200d41186a290000370000200a41106a200d41106a290000370000200a41086a200d41086a290000370000200a200d2900003700002002280284082203417f4c0d180240024020030d00410021214101211f0c010b20031033221f450d1b200321210b0240024020212003490d00202121200c010b202141017422202003202020034b1b22204100480d1a024020210d0020201033221f0d010c1d0b20212020460d00201f202120201037221f450d1c0b201f20242003109d081a200241c00d6a200241c00e6a418001109d081a2003ad4220862020ad8421300b200220303703f80a2002201f3602f40a2011200241c00d6a418001109d081a200241083602f00a0c100b200241c00e6a201b10a003201441306a200241c00e6a41306a290300370300201441286a200241c00e6a41286a290300370300201441206a200241c00e6a41206a290300370300201441186a200241c00e6a41186a290300370300201441106a200241c00e6a41106a290300370300201441086a200241c00e6a41086a290300370300201420022903c00e370300200241093602f00a0c0f0b200241c00e6a200f10a103200e41286a200241c00e6a41286a290300370200200e41206a200241c00e6a41206a290300370200200e41186a200241c00e6a41186a290300370200200e41106a200241c00e6a41106a290300370200200e41086a200241c00e6a41086a290300370200200e20022903c00e3702002002410a3602f00a0c0e0b200241c00e6a200f10a103200e41286a200241c00e6a41286a290300370200200e41206a200241c00e6a41206a290300370200200e41186a200241c00e6a41186a290300370200200e41106a200241c00e6a41106a290300370200200e41086a200241c00e6a41086a290300370200200e20022903c00e3702002002410b3602f00a0c0d0b200241c00e6a201b108603201441206a200241c00e6a41206a290300370300201441186a200241c00e6a41186a290300370300201441106a200241c00e6a41106a290300370300201441086a200241c00e6a41086a290300370300201420022903c00e3703002002410c3602f00a0c0c0b200241c00e6a200f10a203200e200241c00e6a41c400109d081a2002410d3602f00a0c0b0b200220022802fc073602f40a2002410e3602f00a0c0a0b2002280284082203417f4c0d1020022802fc0721240240024020030d004100211f410121200c010b200310332220450d132003211f0b02400240201f2003490d00201f21210c010b201f41017422212003202120034b1b22214100480d120240201f0d00202110332220450d150c010b201f2021460d002020201f202110372220450d140b202020242003109d08211f200220033602fc0a200220213602f80a2002201f3602f40a2002410f3602f00a0c090b200241c00e6a201b10a303201441386a200241c00e6a41386a290300370300201441306a200241c00e6a41306a290300370300201441286a200241c00e6a41286a290300370300201441206a200241c00e6a41206a290300370300201441186a200241c00e6a41186a290300370300201441086a200241c00e6a41086a290300370300201420022903c00e370300200241103602f00a201441106a200241c00e6a41106a2903003703000c080b200241c00e6a201b10a4032014200241c00e6a419801109d081a200241113602f00a0c070b200241c00e6a200f10a503200e41286a200241c00e6a41286a280200360200200e41206a200241c00e6a41206a290300370200200e41186a200241c00e6a41186a290300370200200e41106a200241c00e6a41106a290300370200200e41086a200241c00e6a41086a290300370200200e20022903c00e370200200241123602f00a0c060b200241c00e6a200f10de04200e200241c00e6a41e800109d081a200241133602f00a0c050b10a703000b200241c00e6a201b10a8032014200241c00e6a41a802109d081a200241173602f00a0c030b200241c00e6a201b10a9032014200241c00e6a41c800109d081a200241183602f00a0c020b200241c00e6a200f10aa03200e200241c00e6a41c400109d081a200241193602f00a0c010b02400240024002400240200228028008417f6a220341024b0d004101212120030e03040102040b41cfa2cc00412841c086cc00103f000b4101211f024020022d0084084101470d00410221212002280288082124200241ec106a2125200241c00e6a21030c020b41022121200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e4100211f2002280288082124200241ec106a2125200241c00e6a21030c010b4101211f024020022d0084084101460d00200241ec106a41026a201841026a2d00003a0000200241c00e6a41086a201641086a290200370300200241c00e6a41106a201641106a290200370300200241c00e6a41186a201641186a2d00003a0000200220182f00003b01ec10200220162902003703c00e4100211f0b2002280288082124200241c0086a2903002131200241b0086a290300213220022903b808212320022903a80821334103212120022802c8082120200241ec106a2125200241c00e6a21030b200241e8106a41026a202541026a2d00003a0000200241c00d6a41086a200341086a290200370300200241c00d6a41106a200341106a290200370300200241c00d6a41186a200341186a280200360200200220252f00003b01e810200220032902003703c00d0b201220022f01e8103b0000201020022903c00d370200200241b80b6a2031370300200241a80b6a2032370300201241026a200241e8106a41026a2d00003a0000201041086a200241c00d6a41086a290300370200201041106a200241c00d6a41106a290300370200201041186a200241c00d6a41186a280200360200200220233703b00b200220333703a00b2002201f3a00fc0a200220213602f80a200220243602800b200220203602c00b2002411a3602f00a0b4100211f200241003b01c00e200241c80a6a200241f00a6a200241c00e6a10ac030240024020022802a80a22240d000c010b20022802b00a2203417f4c0d070240024020030d00410021214101211f0c010b20031033221f450d0a200321210b0240024020212003490d00202121200c010b202141017422202003202020034b1b22204100480d09024020210d0020201033221f450d0c0c010b20212020460d00201f202120201037221f450d0b0b201f20242003109d081a2003ad4220862020ad8421230b410121030240024020022802b40a4101460d0020022802a80a450d01200241f00a6a200710f00420023502f80a42208620022802f00a2221ad84100720022802f40a450d01202110350c010b20022802b80a21030240024020022802bc0a222141014b0d00200241003602b40a0c010b200241013602b40a20022021417f6a3602bc0a0b200128022428020020036a2103024020022802a80a450d00200241f00a6a200310f30420022802f40a212420022802f00a2125200241f00a6a200710f00420023502f80a213120022802f00a2120410810332221450d0a2021200336000020214100202420254101461b36000420314220862020ad842021ad428080808080018410022021103520022802f40a450d00202010350b200241f00a6a200241f8076a41d002109d081a2003200241f00a6a410110cb04024020022802ac0d4102460d00024020022802a00d2203450d0020022802a40d450d00200310350b200241f00a6a10ba020b410021030b20012802242802002120200220062900003703f00a2002200641076a2800003600f70a0240024020022903c80a4201510d00410421210c010b20022d00e00a212420022903d00a2131200220022800f70a3600c70e200220022903f00a3703c00e4104212120314202510d00200220022800c70e3600f70a200220022903c00e3703f00a202421210b200220022903f00a3703c00d200220022800f70a3600c70d200520022903c00d370000200541076a20022800c70d360000200220213a008c0b200220233702840b2002201f3602800b2002201e3602fc0a200220203602f80a200241013602f40a200241153a00f00a41b0b4cc004100200241f00a6a10d40120012802282022370300024020030d00410421030c020b024020022802a80a2203450d0020022802ac0a450d00200310350b200241f8076a10ba02410421030c010b200241f00a6a200241f8076a41bc02109d081a200241c00e6a41086a221f20212903003703002002201c2903003703c00e024020034103470d00410421030c010b200241f8076a200241f00a6a41bc02109d081a200241c00d6a41086a201f290300370300200220022903c00e3703c00d0b2001200128021841016a360218200241e8026a200241f8076a41bc02109d081a200241d8026a41086a200241c00d6a41086a290300370300200220022903c00d3703d802024020034104470d00200128021022032001280214470d010c020b0b200241f00a6a200241e8026a41bc02109d081a200241f8076a41086a2201200241d8026a41086a290300370300200220022903d8023703f80720034103470d010b200041033602bc020c010b2000200241f00a6a41bc02109d08220420033602bc02200420022903f8073703c002200441c8026a20012903003703000b200241f0106a24000f0b1044000b103e000b1045000b103c000bf41503027f017e087f23004190016b220324004189fec600ad4280808080900184100122042900002105200341c0006a41086a200441086a290000370300200320053703402004103541e28cc500ad4280808080e00084100122042900002105200341d8006a41086a200441086a2900003703002003200537035820041035200320003602082003200341086aad4280808080c00084100322042900003703182004103520034184016a2003410c6a3602002003200341186a41086a36027c2003200341086a360280012003200341186a360278200341286a200341f8006a107b0240024002400240024002400240024002400240024002402003280230220641206a2207417f4c0d00200328022821080240024020070d0041002104410121090c010b200710332209450d02200721040b024002402004410f4d0d002004210a0c010b2004410174220a4110200a41104b1b220a4100480d07024020040d00200a103322090d010c0d0b2004200a460d0020092004200a10372209450d0c0b20092003290340370000200941086a200341c0006a41086a29030037000002400240200a4170714110460d00200a21040c010b200a41017422044120200441204b1b22044100480d07200a2004460d002009200a200410372209450d0c0b20092003290358370010200941186a200341d8006a41086a29030037000002400240200441606a2006490d002004210b0c010b200641206a220a2006490d072004410174220b200a200b200a4b1b220b4100480d072004200b460d0020092004200b10372209450d0c0b200941206a20082006109d081a0240200328022c450d00200810350b200341d8006a2007ad4220862009ad842205100510c2010240024020032802580d00410410332204450d032003420437027c200320043602784100200341f8006a1077200341106a200328028001360200200320032903783703080c010b200341086a41086a200341d8006a41086a280200360200200320032903583703080b200341186a41086a200341086a41086a2802002204360200200320032903083703182001200241d0026c6a210a024002402004450d00200341f8006a20032802182004200210f10420032802784101470d01200328021c450d0b200328021810350c0b0b2002200341186a1077200a2001460d08200241d0026c210720012104034002400240200441bc026a2802004102470d0002400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0b200a41017422082006200820064b1b22084100480d0b02400240200a0d004100210a024020080d00410121060c020b200810332206450d120c010b20032802182106200a2008460d002006200a200810372206450d112003280220210a0b2003200836021c200320063602180b2006200a6a41003a00002003200a41016a3602200c010b02400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0a200a41017422082006200820064b1b22084100480d0a02400240200a0d004100210a024020080d00410121060c020b200810332206450d110c010b20032802182106200a2008460d002006200a200810372206450d102003280220210a0b2003200836021c200320063602180b2006200a6a41013a00002003200a41016a3602202004200341186a10da040b200441d0026a2104200741b07d6a22070d000c090b0b200328027c2108024020034184016a2802002204200341f8006a41086a2802002207460d002003280220200420076b6a220620024102746a220c417f4c0d0102400240200c0d004100210c4101210d0c010b200c1033220d450d030b2003200d3602282003200c36022c200320063602302003200341286a3602782008200341f8006a200410f20420062004490d03200328023022082006490d04200328022022082007490d052003280228210c2003280218210d2003200620046b22063602382003200820076b220836023c20062008470d06200c20046a200d20076a2006109d081a0240200a2001460d00200241d0026c210720012104034002400240200441bc026a2802004102470d0002400240200328022c2003280230220a460d00200328022821060c010b200a41016a2206200a490d0c200a41017422082006200820064b1b22084100480d0c02400240200a0d004100210a024020080d00410121060c020b200810332206450d130c010b20032802282106200a2008460d002006200a200810372206450d122003280230210a0b2003200836022c200320063602280b2006200a6a41003a00002003200a41016a3602300c010b02400240200328022c2003280230220a460d00200328022821060c010b200a41016a2206200a490d0b200a41017422082006200820064b1b22084100480d0b02400240200a0d004100210a024020080d00410121060c020b200810332206450d120c010b20032802282106200a2008460d002006200a200810372206450d112003280230210a0b2003200836022c200320063602280b2006200a6a41013a00002003200a41016a3602302004200341286a10da040b200441d0026a2104200741b07d6a22070d000b0b2003280230210a200328022c210720032802282104200328021c450d09200328021810350c090b2003200341186a3602782008200341f8006a200710f204200a2001460d07200241d0026c210720012104034002400240200441bc026a2802004102470d0002400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d0a200a41017422082006200820064b1b22084100480d0a02400240200a0d004100210a024020080d00410121060c020b200810332206450d110c010b20032802182106200a2008460d002006200a200810372206450d102003280220210a0b2003200836021c200320063602180b2006200a6a41003a00002003200a41016a3602200c010b02400240200328021c2003280220220a460d00200328021821060c010b200a41016a2206200a490d09200a41017422082006200820064b1b22084100480d0902400240200a0d004100210a024020080d00410121060c020b200810332206450d100c010b20032802182106200a2008460d002006200a200810372206450d0f2003280220210a0b2003200836021c200320063602180b2006200a6a41013a00002003200a41016a3602202004200341186a10da040b200441d0026a2104200741b07d6a2207450d080c000b0b1044000b1045000b2004200641e88cc5001059000b2006200841e88cc5001058000b2007200841f88cc5001059000b200341d8006a41146a410a360200200341e4006a410c360200200341c0006a41146a41033602002003200341386a36027020032003413c6a360274200341f8006a41146a410036020020034203370244200341a0b3cc003602402003410c36025c200341b0b4cc00360288012003420137027c200341f4b3cc003602782003200341d8006a3602502003200341f8006a3602682003200341f4006a3602602003200341f0006a360258200341c0006a41b0b4cc00104c000b103e000b2003280220210a200328021c2107200328021821040b2004450d002005200aad4220862004ad84100202402007450d00200410350b200b450d01200910350c010b0240200b450d00200910350b200341d8006a200010c9042003280258210420033502602105200341f8006a2001200210d90420054220862004ad842003350280014220862003280278220aad8410020240200328027c450d00200a10350b200328025c450d00200410350b20034190016a24000f0b103c000b81ad010a017f017e017f047e047f027e0b7f067e037f027e230041f00c6b22012400200141003602e003200142013703d803024002400240024020004180ee05700d0041a29bc800ad4280808080f00084220210012203290000210420032900082105200310354189eaca00ad4280808080f00084100122032900002106200329000821072003103520012007370288082001200637028008200120053702f807200120043702f007200141a00a6a200141f0076a10fe0120012902a40a420020012802a00a22031b21042003410120031b2103024020012802dc0341ffffff3f71450d0020012802d80310350b200120043702dc03200120033602d8032001200141d8036a3602e4032002100122032900002102200329000821042003103541ceb8c800ad42808080803084100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141c0036a200141f0076a412010d701200141c0036a41106a290300210220012903c803210420012802c0032103200141e8036a41d1b8c800411010d503200141003a00c00a2002420020031b21062004420020031b2107200141e8036a21084120210341002109024002400240024002400340200141003a00f007200141f0076a20082003410047220a109d081a024020030d00200141003a00f0070b2003200a490d01200141a00a6a20096a20012d00f0073a00002001200941016a220b3a00c00a2003200a6b21032008200a6a2108200b2109200b4120470d000b20012903a00a210420012903a80a210520012903b00a210c20012903b80a210d4100210e200141a00a6a4100418002109f081a42002102200141d00c6a4200370300200141c80c6a4200370300200141c00c6a200d370300200141b80c6a200c370300200141b00c6a2005370300200120043703a80c200141c0003602a00c4108210f024020012802e40341086a2802000d004100210a0c050b41a29bc800ad4280808080f00084100122032900002104200329000821052003103541e1b8c800ad4280808080a0018410012203290000210c2003290008210d200310352001200d370288082001200c37028008200120053702f807200120043702f007200141f0056a200141f0076a10be020240024020012802f005220a0d00410021030c010b200141f0076aad4280808080800484100720012902f4052202422088a72103200a210f0b20012802e403220a200a2802082003108a0141d1c4c700ad4280808080e00084100122032900002104200329000821052003103541e7c4c700ad4280808080e0008410012203290000210c2003290008210d200310352001200d370288082001200c37028008200120053702f807200120043702f007200141b8036a200141f0076a412010c00120012802e40341086a28020041f4036a2203450d0120012802bc03210a20012802b8032108200141e4003a00f107200141e40041d0860320036e22036b3a00f007410021102001200141f0076a200341ff017141e4004b6a2d00004180fe126c200a410020081b6a36028c04200141003602980420014201370390042001410036029c04200142003703a804200142003703a004200142003703b804200142003703b004200141e8046a2001418c046a360200200141e4046a200141b0046a360200200141c0046a41206a2001419c046a360200200141dc046a200141a0046a360200200141d8046a20014190046a360200200141d4046a200141a00a6a3602002001200f2002422088a7220341e8006c22086a3602cc042001200f3602c80420012002a722113602c4042001200f3602c0042001200141e4036a3602d0040240024002402003450d00200141f0076a410172210b200141d0046a2112200f210303402001200341e8006a22093602c80420032d0000210a200141f0056a200341016a41e700109d081a200a4102460d012001200a3a00f007200b200141f0056a41e700109d081a20014190076a2012200141f0076a10ae062001290390074201510d0220092103200841987f6a22080d000b0b4108210b02402011450d00201141e8006c450d00200f10350b410021110c010b200141d8066a41306a20014190076a41386a2903002202370300200141d8066a41286a20014190076a41306a2903002204370300200141d8066a41206a20014190076a41286a2903002205370300200141b8056a41086a220b20014190076a41106a290300370300200141b8056a41106a220920014190076a41186a290300370300200141b8056a41186a221220014190076a41206a290300370300200141b8056a41206a22082005370300200141b8056a41286a220a2004370300200141b8056a41306a2203200237030020012001290398073703b80520014180056a41306a220f200329030037030020014180056a41286a2203200a29030037030020014180056a41206a220a200829030037030020014180056a41186a2208201229030037030020014180056a41106a2212200929030037030020014180056a41086a2209200b290300370300200120012903b8053703800541381033220b450d07200b200129038005370300200b41306a200f290300370300200b41286a2003290300370300200b41206a200a290300370300200b41186a2008290300370300200b41106a2012290300370300200b41086a200929030037030020014281808080103702f4042001200b3602f0042009200141c0046a41086a29030022023703002003200141c0046a41286a280200360200200a200141c0046a41206a2903003703002008200141c0046a41186a2903003703002012200141c0046a41106a290300370300200120012903c00437038005024002402002a72203200128028c05220a470d00410121100c010b200a41987f6a210f20014190076a41086a210a200141f0076a41017221114101211003402001200341e8006a22093602880520032d00002108200141f0056a200341016a41e700109d081a20084102460d01200120083a00f0072011200141f0056a41e700109d081a20014190076a2012200141f0076a10ae0602402001290390074201510d00200f2003462108200921032008450d010c020b200141d8066a41306a200a41306a2903002202370300200141d8066a41286a200a41286a2903002204370300200141d8066a41206a200a41206a2903002205370300200141b8056a41086a2208200a41086a290300370300200141b8056a41106a2213200a41106a290300370300200141b8056a41186a2214200a41186a290300370300200141b8056a41206a22152005370300200141b8056a41286a22162004370300200141b8056a41306a221720023703002001200a2903003703b805200141f0076a41306a22182017290300370300200141f0076a41286a22172016290300370300200141f0076a41206a22162015290300370300200141f0076a41186a22152014290300370300200141f0076a41106a22142013290300370300200141f0076a41086a22132008290300370300200120012903b8053703f0070240201020012802f404470d00200141f0046a20104101108b0120012802f004210b0b200b201041386c6a220820012903f007370300200841306a2018290300370300200841286a2017290300370300200841206a2016290300370300200841186a2015290300370300200841106a2014290300370300200841086a20132903003703002001201041016a22103602f804200f20034721082009210320080d000b0b02402001280284052203450d00200341e8006c450d0020012802800510350b20012802f40421110b41a29bc800ad4280808080f00084100122032900002102200329000821042003103541b39bc800ad4280808080d000841001220329000021052003290008210c200310352001200c370288082001200537028008200120043702f807200120023702f007200141f0076aad4280808080800484220c1008024020012903a004200141a0046a41086a29030084500d00024002402001280298042203450d00200128029004210a200141a00a6a2003417f6a10af0622082003490d0120082003419cb9c8001042000b200142f0f2bd99f7edd8b4e5003703f007200141f0056a200141f0076a108106200142f0f2bd99f7edd8b4e50037039007200141f0076a20014190076a10e00120014190076a200141f0056a200141f0076a20012903a004200141a8046a290300410110e6020c010b200a20084105746a200128028c0420012903a004200141a8046a29030010b0060b024020012903b0042202200141b0046a41086a290300220484500d00200142f0f2bd99f7edd8b4e5003703f007200141f0056a200141f0076a10e001200142f0f2bd99f7edd8b4e50037039007200141f0076a20014190076a10810620014190076a200141f0056a200141f0076a20012903b004200141b8046a290300410110e6024200200620047d2007200254ad7d2204200720027d2202200756200420065620042006511b22031b21064200200220031b21070b0240024020100d004100210a0c010b201041386c210a200b41046a2109200141a00a6a200128029c04417f6a10af06210f200b2103034020092108200a450d0402402003290328200341306a29030084500d00200a41486a210a200841386a210920032802002112200341386a21032012200f4d0d010b0b200141f0056a41186a200841186a290000370300200141f0056a41106a200841106a290000370300200141f0056a41086a200841086a290000370300200120082900003703f00541002108200141003602f807200142013703f007200141f0076a4100201041386c221241386d108a0120012802f007220f20012802f80722094105746a21030340200b20086a220a41046a2902002102200a410c6a2902002104200a41146a2902002105200341186a200a411c6a290200370000200341106a2005370000200341086a200437000020032002370000200341206a2103200941016a21092012200841386a2208470d000b200120093602f80702402011450d00201141386c450d00200b10350b20012802f407210a20012802e4032203280200200328020810ac0620012802e403220328020821082003280200211241a29bc800ad4280808080f00084220210012203290000210420032900082105200310354189eaca00ad4280808080f0008410012203290000210d200329000821192003103520012019370288082001200d37028008200120053702f807200120043702f0072001200141f0076a3602900720014120360294072012200820014190076a10a8062002100122032900002102200329000821042003103541f69bc800ad4280808080c000841001220329000021052003290008210d200310352001200d370288082001200537028008200120043702f807200120023702f007412010332203450d07200320012903f005370000200341186a200141f0056a41186a2208290300370000200341106a200141f0056a41106a2212290300370000200341086a200141f0056a41086a2210290300370000200c2003ad4280808080800484100220031035200141f0076a41086a41063a0000200141f9076a20012903f00537000020014181086a201029030037000020014189086a201229030037000020014191086a2008290300370000200141a4086a2009360200200141a0086a200a3602002001419c086a200f360200200141123a00f00741b0b4cc004100200141f0076a10d4014101210a0b200142f0f2bd99f7edd8b4e5003703f007200141f0056a200141f0076a10e00120014190076a200141f0056a108e02200141f0076a2001280290072208200128029807108f0220014180086a290300420020012903f00742015122031b210220012903f807420020031b21040240200128029407450d00200810350b41a29bc800ad4280808080f000841001220329000021052003290008210d2003103541ceb8c800ad428080808030841001220329000021192003290008211a200310352001201a3702880820012019370280082001200d3702f807200120053702f00720014200200420077d22052005200456200220067d2004200754ad7d220420025620042002511b22031b4201884200200420031b2202423f8684220442808094f6c2d7e8d800200442808094f6c2d7e8d80054410020024201882202501b22031b220420077c22073703f00520012002420020031b20067c2007200454ad7c22063703f805200c200141f0056aad42808080808002841002200a201145720d03201141386c450d03200b10350c030b200a200341b89dcc001059000b41f0b8c8004119418cb9c800103f000b41b3b9c80041d700418cbac8001064000b024020012802940441ffffff3f71450d0020012802900410350b20012802e40341086a280200210a0b41a29bc800ad4280808080f000842219100122032900002102200329000821042003103541a99bc800ad4280808080a001841001220329000021052003290008210c200310352001200c370288082001200537028008200120043702f807200120023702f007200141b0036a200141f0076a412010c00102400240410020012802b403410020012802b0031b2203200a6b220a200a20034b1b2203410a2003410a491b22080d0041082111410021130c010b20191001220329000021022003290008210420031035419cbac800ad4280808080c000841001220329000021052003290008210c200310352001200c370288082001200537028008200120043702f807200120023702f007200141f0056a200141f0076a10be020240024020012802f00522180d00410821184200211b4100210a410021030c010b20012902f405221b422088a72103201ba7210a0b200141003602c005200142083703b80502400240024002402003450d000240201b422088a7220b0d00410821114100210e0c030b20032008200820034b1b210f201841286a21034100210e41082111410021174200210242002104410021124100210a4100210802400340024002402012200f4f0d00024002400240200341106a2903002205200341186a290300220c84500d00200220057c220d2007562004200c7c200d200254ad7c220420065620042006511b450d01200d21020c030b201741ff01710d02200141f0076a41186a2209200341386a290000370300200141f0076a41106a2210200341306a290000370300200141f0076a41086a2213200341286a2900003703002001200341206a2900003703f00702400240200341586a2d00004101470d002001200341596a221441036a28000036008305200341086a2903002105200341606a2215290000210c201541086a290000210d201428000021142003290300211a200141c0046a41086a200341706a221541086a2d00003a00002001201436028005200120152900003703c004410121140c010b200341606a2214290300210c201441086a290300210d410021140b200141f0056a41186a22152009290300370300200141f0056a41106a22162010290300370300200141f0056a41086a2210201329030037030020014190076a41086a2213200141c0046a41086a290300370300200120012903f0073703f00520012001280280053602b00420012001280083053600b304200120012903c004370390070240200e20012802bc05470d00200141b8056a200e410110960120012802b805211120012802c005210e0b2011200e41e8006c6a220920143a0000200941106a200d370300200941086a200c370300200920012802b004360001200941046a20012800b304360000200941206a2013290300370300200129039007210c200941c0006a420037030020094200370338200941306a2005370300200941286a201a370300200941186a200c370300200920012903f005370348200941d0006a2010290300370300200941d8006a2016290300370300200941e0006a2015290300370300410121172001200e41016a220e3602c0050c010b200141f0076a41186a2209200341386a290000370300200141f0076a41106a2210200341306a290000370300200141f0076a41086a2213200341286a2900003703002001200341206a2900003703f00702400240200341586a2d00004101470d002001200341596a221441036a28000036008305200341086a2903002102200341606a2215290000211a201541086a290000211c201428000021142003290300211d200141c0046a41086a200341706a221541086a2d00003a00002001201436028005200120152900003703c004410121140c010b200341606a2214290300211a201441086a290300211c410021140b200141d8066a41186a22152009290300370300200141d8066a41106a22162010290300370300200141d8066a41086a2210201329030037030020014190076a41086a2213200141c0046a41086a290300370300200120012903f0073703d80620012001280280053602b00420012001280083053600b304200120012903c004370390070240200e20012802bc05470d00200141b8056a200e410110960120012802b805211120012802c005210e0b2011200e41e8006c6a220920143a0000200941106a201c370300200941086a201a370300200920012802b004360001200941046a20012800b304360000200941206a2013290300370300200129039007211a200941c0006a200c37030020092005370338200941306a2002370300200941286a201d370300200941186a201a370300200920012903d806370348200941d0006a2010290300370300200941d8006a2016290300370300200941e0006a20152903003703002001200e41016a220e3602c005200d21020b200a41016a210a201241016a21120c010b0240200a0d004100210a0c010b2008200a6b2209200b4f0d02200141f0076a2003200a41987f6c6a41586a220941e800109d081a2009200341586a221041e800109e081a2010200141f0076a41e800109d081a0b200341e8006a2103200b200841016a2208460d030c000b0b2009200b41f485cc001042000b410821114100210e410021130c020b0240200a417f6a200b4f0d00201b42ffffffff0f83200b200a6bad42208684211b0b2012450d0041a29bc800ad4280808080f000841001220329000021022003290008210420031035419cbac800ad4280808080c00084100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141f0056a2018201b422088a710b106200141f0076aad428080808080048420013502f80542208620012802f005220aad841002201ba72103024020012802f405450d00200a10350b02402003450d00200341e8006c450d00201810350b20012802bc0521130c020b20012802bc052113201ba7210a0b200a450d00200a41e8006c450d00201810350b2019100122032900002102200329000821042003103541e1b8c800ad4280808080a00184100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141f0056a2011200e10b106200141f0076aad428080808080048420013502f80542208620012802f0052203ad841002024020012802f405450d00200310350b41002103024020012802e403220b41086a280200220a4102762208450d00410021032008200a460d00410021080340200841026a2103200a200841046a411e71762209450d01200321082009200a470d000b0b4100211203400240201241017422124101722208ad220220027e2202422088a70d00201220082002a7200a2003411f71764b1b21120b02402003450d0041002003417e6a2208200820034b1b21030c010b0b02402012450d0002400240200e450d00200e41e8006c210f201141c8006a21104100210e0c010b2012417f6a21080340200a450d05200141a00a6a200a417f6a10af062203200a4f0d062008450d022008417f6a210820012802e403280208210a0c000b0b0340200a450d04200b2802002108200141a00a6a200a417f6a10af062203200a4f0d05200e41016a210e200820034105746a210b200f21092010210a024002400340200141f0076a200a200b10b20620013502f807210220012802f0072108410110332203450d01200341003a000020024220862008ad842003ad42808080801084100220031035024020012802f407450d00200810350b200a41e8006a210a200941987f6a2209450d020c000b0b103c000b200e2012460d0120012802e403220b280208210a0c000b0b2013450d00201341e8006c450d00201110350b02400240024002400240024002400240024020004180a70c7022180d00024020012802e0030d0041a29bc800ad4280808080f0008410012203290000210220032900082104200310354189eaca00ad4280808080f00084100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141a00a6a200141f0076a10fe0120012902a40a420020012802a00a22031b21022003410120031b2103024020012802dc0341ffffff3f71450d0020012802d80310350b200120033602d803200120023702dc032002428080808010540d010b41a29bc800ad4280808080f00084100122032900002102200329000821042003103541ccbac800ad4280808080800184100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141a00a6a200141f0076a412010d501024020012d00a00a4101470d00200141a90a6a2800002103200141ad0a6a280000210a200141b10a6a2800002108200141b50a6a2800002109200141b90a6a280000210b20012800a10a211220012800a50a210e2001200141bd0a6a2800003602bc0a2001200b3602b80a200120093602b40a200120083602b00a2001200a3602ac0a200120033602a80a2001200e3602a40a200120123602a00a0240024020012802e003220a450d0020012802d8032103200a410574210a4100210b410021120340200141f0076a200310b30620012802f007220920012802f80710e40241ff01712108024020012802f407450d00200910350b0240024002402008417e6a220841014b0d0020080e020102010b200b41016a210b0c010b201241016a21120b200341206a2103200a41606a220a0d000b2012200b4a0d010b200141a00a6a10b40641a29bc800ad4280808080f0008410012203290000210220032900082104200310354189eaca00ad4280808080f00084100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141f0056a200141f0076a10fe0120012902f405420020012802f00522031b21022003410120031b2103024020012802dc0341ffffff3f71450d0020012802d80310350b200120023702dc03200120033602d8030b41a29bc800ad4280808080f00084100122032900002102200329000821042003103541d4bac800ad4280808080d00184100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141f0076aad428080808080048410080b024020012802e00341024d0d00200141f0056a41e1bac800411110d503200141003a00c00a200141f0056a210841202103410021090340200141003a00f007200141f0076a20082003410047220a109d081a024020030d00200141003a00f0070b2003200a490d03200141a00a6a20096a20012d00f0073a00002001200941016a220b3a00c00a2003200a6b21032008200a6a2108200b2109200b4120470d000b20012903a00a210220012903a80a210420012903b00a210520012903b80a2106200141a00a6a4100418002109f081a200141d00c6a4200370300200141c80c6a4200370300200141c00c6a2006370300200141b80c6a2005370300200141b00c6a2004370300200120023703a80c200141c0003602a00c20012802e0032203417f6a220a450d032003450d04024002402003417e6a220a450d0020012802d8032108200141a00a6a2003417d6a10af062209200a490d012009200a419cb9c8001042000b41a0bac800411c4184bbc8001064000b41a29bc800ad4280808080f00084100122032900002102200329000821042003103541ccbac800ad4280808080800184100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007412010332203450d0a2003200841206a20094105746a220a290000370000200341186a200a41186a2208290000370000200341106a200a41106a2209290000370000200341086a200a41086a220b290000370000200141f0076aad42808080808004842003ad4280808080800484100220031035200141f0076a41086a410a3a0000200141f9076a200a29000037000020014181086a200b29000037000020014189086a200929000037000020014191086a2008290000370000200141123a00f00741b0b4cc004100200141f0076a10d4010c010b41a29bc800ad4280808080f00084100122032900002102200329000821042003103541ccbac800ad4280808080800184100122032900002105200329000821062003103520012006370288082001200537028008200120043702f807200120023702f007200141f0076aad428080808080048410070b024020012802dc0341ffffff3f71450d0020012802d80310350b200141f0076a41186a22094200370300200141f0076a41106a22034200370300200141f0076a41086a220a4200370300200142003703f00741d1c4c700ad4280808080e00084100122082900002102200a200841086a290000370300200120023703f0072008103541edc4c700ad4280808080a00184100122082900002102200141a00a6a41086a220b200841086a290000370300200120023703a00a20081035200320012903a00a2202370300200141f0056a41086a200a290300370300200141f0056a41106a2002370300200141f0056a41186a200b290300370300200120012903f0073703f005200141a00a6a200141f0056a412010d50120012d00a00a21082009200141b90a6a2900003703002003200141b10a6a290000370300200a200141a90a6a290000370300200120012900a10a3703f0070240024020084101460d0020014190076a41186a420037030020014190076a41106a420037030020014190076a41086a420037030020014200370390070c010b20014190076a41186a200929030037030020014190076a41106a200329030037030020014190076a41086a200a290300370300200120012903f007370390070b200141f0076a41186a22094200370300200141f0076a41106a220b4200370300200141f0076a41086a22084200370300200142003703f0074182e9ca00ad42808080808003841001220a29000021022008200a41086a290000370300200120023703f007200a1035419ae9ca00ad4280808080e001841001220a2900002102200141a00a6a41086a2212200a41086a290000370300200120023703a00a200a1035200320012903a00a370000200341086a2012290300370000200141f0056a41086a2008290300370300200141f0056a41106a200b290300370300200141f0056a41186a2009290300370300200120012903f0073703f005200141d8066a200141f0056a412010b502024002400240024020012802d806220a0d0041002103200141003602c005200142013703b805200920014190076a41186a290300370300200b20014190076a41106a290300370300200820014190076a41086a29030037030020012001290390073703f007200141f0076a21080c010b200120012902dc0622023702bc052001200a3602b8052002a7210b02402002422088a7220341d100490d00200141a00a6a41186a220920014190076a41186a290300370300200141a00a6a41106a221220014190076a41106a290300370300200141a00a6a41086a220e20014190076a41086a29030037030020012001290390073703a00a2000417f6a41d10070220820034f0d07200a20084105746a220820012903a00a370000200841186a2009290300370000200841106a2012290300370000200841086a200e2903003700000c030b200141f0076a41186a20014190076a41186a290300370300200141f0076a41106a20014190076a41106a290300370300200141f0076a41086a20014190076a41086a29030037030020012001290390073703f007200141f0076a21082003200b470d010b200141b8056a20034101108a0120012802bc05210b20012802b805210a20012802c00521030b200a20034105746a22092008290000370000200941186a200841186a290000370000200941106a200841106a290000370000200941086a200841086a2900003700002001200341016a22033602c0050b200141a00a6a41186a4200370300200141a00a6a41106a22124200370300200141a00a6a41086a22084200370300200142003703a00a4182e9ca00ad42808080808003841001220929000021022008200941086a290000370300200120023703a00a20091035419ae9ca00ad4280808080e00184100122092900002102200141f0056a41086a220e200941086a290000370300200120023703f00520091035201220012903f0052202370300200141f0076a41086a2008290300370300200141f0076a41106a2002370300200141f0076a41186a200e290300370300200120012903a00a3703f00702400240200a0d00200141f0076aad428080808080048410070c010b200141203602a40a2001200141f0076a3602a00a200a2003200141a00a6a10c504200b41ffffff3f71450d00200a10350b4200211e200141a00a6a41186a220b4200370300200141a00a6a41106a220a4200370300200141a00a6a41086a22034200370300200142003703a00a41f7edcb00ad4280808080f000841001220829000021022003200841086a290000370300200120023703a00a2008103541b6aac000ad4280808080900284100122082900002102200141f0056a41086a2209200841086a290000370300200120023703f00520081035200a20012903f0052202370300200141f0076a41086a22082003290300370300200141f0076a41106a22122002370300200141f0076a41186a220e2009290300370300200120012903a00a3703f007200141a8036a200141f0076a10f20120012802a803417d710d07200b4200370300200a420037030020034200370300200142003703a00a41a2e8cb00ad428080808080018422061001220f29000021022003200f41086a290000370300200120023703a00a200f103541e6f2c400ad428080808080028422071001220f29000021022009200f41086a290000370300200120023703f005200f1035200a20012903f005370000200a41086a2009290300370000200820032903003703002012200a290300370300200e200b290300370300200120012903a00a3703f007200141a00a6a200141f0076a10c602200120012802a00a2203410420031b221f3602900720012902a40a420020031b2205422088a7220e450d064100210a201f21034100210803400240024002402003280200200341086a22092802002003410c6a280200200341146a280200200341186a220b28020010fd01450d00200a0d014100210a0c020b200a41016a210a0c010b2008200a6b2212200e4f0d06200141a00a6a41186a220f2003200a41646c6a221241186a2210280200360200200141a00a6a41106a2211201241106a2213290200370300200141a00a6a41086a2214201241086a2215290200370300200120122902003703a00a20092902002102200341106a22162902002104200b280200211720122003290200370200201020173602002013200437020020152002370200200b200f2802003602002016201129030037020020092014290300370200200320012903a00a3702000b2003411c6a2103200e200841016a2208460d060c000b0b200a200341b89dcc001059000b4101410041f4bac8001059000b200a410041f4bac8001058000b2008200341f0e9ca001042000b2012200e41f485cc001042000b200a450d00200e200a490d00201f200e200a6b220e411c6c6a200a10c802200542ffffffff0f8321050b2001280290072103200141a00a6a41186a4200370300200141a00a6a41106a22094200370300200141a00a6a41086a220a4200370300200142003703a00a2006100122082900002102200a200841086a290000370300200120023703a00a200810352007100122082900002102200141f0056a41086a220b200841086a290000370300200120023703f00520081035200920012903f0052202370300200141f0076a41086a200a290300370300200141f0076a41106a2002370300200141f0076a41186a200b290300370300200120012903a00a3703f007024020030d00200141f0076aad428080808080048410070c010b2005a7210a200141a00a6a2003200e10c704200141f0076aad428080808080048420013502a80a42208620012802a00a2208ad841002024020012802a40a450d00200810350b2003200e10c802200a450d00200a411c6c450d00200310350b024020004180e101700d00200142f0f2bda1a7ee9cb9f9003703a00a200141f0076a200141a00a6a10e001200141f0056a200141f0076a108e02200141a00a6a20012802f005220a20012802f805108f02200141a00a6a41106a2217290300420020012903a00a42015122031b210420012903a80a420020031b2102024020012802f405450d00200a10350b2001420020042002428080e983b1de1654ad7d2205200242808097fccea1697c22062002562005200456200242ffffe883b1de16561b22031b22023703880520014200200620031b220437038005200141a00a6a41186a221f200237030020172004370300200141a00a6a41086a220f41013a00002001410c3a00a00a41b0b4cc004100200141a00a6a10d401200141003a00a004200142003703c005200142003703b805201f420037030020174200370300200f4200370300200142003703a00a4186f0cb00ad4280808080800184221a100122032900002102200141f0056a41086a2214200341086a290000370300200120023703f00520031035200f2014290300370300200120012903f0053703a00a419bf0cb00ad4280808080900184221c1001220329000021022014200341086a290000370300200120023703f00520031035201720012903f0052202370300200141f0076a41086a2211200f290300370300200141f0076a41106a2002370300200141f0076a41186a22162014290300370300200120012903a00a3703f007200141a00a6a200141f0076a10c50220012802a00a2203410420031b2120024020012902a40a420020031b2219422088220da72210450d00200141a90a6a210b200141b0086a211220014190086a2113200141d80a6a2115200141b8076a2121202021034100210a410021080240034020014190076a2003280200220e10b506200141a00a6a200128029007220920012802980710df0220012903a00a2104200141f0076a200f41e000109d081a42002102024020044201520d00200141f0056a200141f0076a41e000109d081a420121020b0240200128029407450d00200910350b024002400240200250450d00200a41016a210a0c010b200141f0076a200141f0056a41e000109d081a0240200129038005220520012903f007220654220920014180056a41086a2903002202201129030022045420022004511b0d002001200520067d370380052001200220047d2009ad7d37038805200141a00a6a200e10b50620013502a80a42208620012802a00a2209ad841007024020012802a40a450d00200910350b20012903800821022001201629030022043703e006200120023703d80602402002200484500d00200120133602c00420014190076a2013200141d8066a200141c0046a10f0022001290390074201520d002001290398072102201520014190076a41106a290300370300200b2013290000370000200b41086a201341086a290000370000200b41106a201341106a290000370000200b41186a201341186a290000370000200120023703d00a200141003a00a80a200141033a00a00a41b0b4cc004100200141a00a6a10d4010b20012903f00721022001201129030022043703e006200120023703d80602400240200220048450450d00420021054200210642002104420021070c010b200120123602c00420014190076a2012200141d8066a200141c0046a10b002024002402001290390074201520d0020014190076a41106a290300210720012903980721040c010b2021290300210720012903b00721042001290398074201520d0020012903a0072102201520014190076a41186a290300370300200b2012290000370000200b41086a201241086a290000370000200b41106a201241106a290000370000200b41186a201241186a290000370000200120023703d00a200141003a00a80a200141033a00a00a41b0b4cc004100200141a00a6a10d4010b2011290300210620012903f00721050b200141b8056a41086a2209427f2009290300220220077c20012903b805220720047c220c2007542209ad7c22042009200420025420042002511b22091b3703002001427f200c20091b3703b80520152006370300200b2012290000370000200b41086a201241086a290000370000200b41106a201241106a290000370000200b41186a201241186a290000370000200120053703d00a200141023a00a80a2001410c3a00a00a2001200e3602cc0a41b0b4cc004100200141a00a6a10d401200a41016a210a0c010b200141013a00a0040240200a0d004100210a0c010b2008200a6b220920104f0d012003200a4102746b2209280200210e200920032802003602002003200e3602000b200341046a21032010200841016a2208460d020c010b0b2009201041f485cc001042000b200a417f6a20104f0d00201942ffffffff0f8321192010200a6b21100b201f4200370300200141a00a6a41106a220a4200370300200f4200370300200142003703a00a201a1001220329000021022014200341086a290000370300200120023703f00520031035200f2014290300370300200120012903f0053703a00a201c1001220329000021022014200341086a290000370300200120023703f00520031035201720012903f005370000201741086a20142903003700002011200f290300370300200141f0076a41106a200a2903003703002016201f290300370300200120012903a00a3703f007200141203602a40a2001200141f0076a3602a00a20202010200141a00a6a1095030240201942ffffffff0383500d00202010350b024020012d00a0040d004200210720014198036a200129038005220220014180056a41086a2203290300220442c0843d420010980820014188036a200129039803220520014198036a41086a290300220642c0fb42427f108408200141f8026a2005200642a0c21e4200108408200320042004200141f8026a41086a29030020012903f802220520022001290388037c2206420188220ca7417f200642a0c21e7e2206428080808080c8d007541b2006200c42c0fb427e7c42a0c21e566aad7c2206200554ad7c22052006200256200520045620052004511b220a1b22057d200220022006200a1b220454ad7d3703002001200220047d3703800502400240200420058450450d004200210c0c010b200141f0076a41186a22124200370300200141f0076a41106a220a4200370300200141f0076a41086a22034200370300200142003703f00741b6fdc600ad4280808080800184220210012209290000210620014190076a41086a2208200941086a2900003703002001200637039007200910352003200829030037030020012001290390073703f00741e489c200ad4280808080d0018422061001220b2900002107200141c0046a41086a2209200b41086a290000370300200120073703c004200b1035200a20012903c0042207370300200141d8066a41086a220e2003290300370300200141d8066a41106a220f2007370300200141d8066a41186a22102009290300370300200120012903f0073703d806200141e0026a200141d8066a412010d701200141e0026a41106a290300210720012903e802210c20012802e002210b20124200370300200a420037030020034200370300200142003703f00720021001221229000021022008201241086a2900003703002001200237039007201210352003200829030037030020012001290390073703f00720061001220829000021022009200841086a290000370300200120023703c00420081035200a20012903c0042202370300200e2003290300370300200f200237030020102009290300370300200120012903f0073703d8062001420020074200200b1b220220057d200c4200200b1b2206200454ad7d2207200620047d220c200656200720025620072002511b22031b3703a80a20014200200c20031b3703a00a200141d8066aad4280808080800484200141a00a6aad428080808080028410022002200520031b210c2006200420031b21070b200141b8056a41086a2203427f20032903002202200c7c20012903b805220620077c22072006542203ad7c22062003200620025420062002511b22031b3703002001427f200720031b3703b805200141b80a6a2005370300200141b00a6a2004370300200141a00a6a41086a41043a00002001410c3a00a00a41b0b4cc004100200141a00a6a10d4010b200142f0f2bda1a7ee9cb9f9003703a00a200141f0056a200141a00a6a10e001200141c0056a290300210420012903b805210241002103200141003a00e803200141023a00b004200120043703980720012002370390072001200141f0056a3602c00402400240200220048450450d0042002105420021060c010b2001200141f0056a3602d8062001200141d8066a3602b00a2001200141b0046a3602ac0a2001200141c0046a3602a80a2001200141e8036a3602a40a200120014190076a3602a00a200141f0076a200141f0056a200141a00a6a10dc0341012103024020012802f0074101470d004200210620012903f80721050c010b20014198086a290300210620014190086a29030021054100210320012903f8074201520d00200141f0076a41106a290300210720012802d806210a200141d80a6a200141f0076a41186a290300370300200141d00a6a200737030041002103200141a00a6a41086a41003a0000200141a90a6a200a290000370000200141b10a6a200a41086a290000370000200141b90a6a200a41106a290000370000200141c10a6a200a41186a290000370000200141033a00a00a41b0b4cc004100200141a00a6a10d4010b024002400240024020030d00200141f0076a41186a220b4200370300200141f0076a41106a22034200370300200141f0076a41086a220a4200370300200142003703f00741b6fdc600ad4280808080800184221a10012209290000210720014190076a41086a2208200941086a290000370300200120073703900720091035200a200829030037030020012001290390073703f00741e489c200ad4280808080d00184221c100122122900002107200141c0046a41086a2209201241086a290000370300200120073703c00420121035200320012903c0042207370300200141d8066a41086a2212200a290300370300200141d8066a41106a220e2007370300200141d8066a41186a220f2009290300370300200120012903f0073703d806200141b0026a200141d8066a412010d701200420067d2002200554ad7d200620047d2005200254ad7d20052002582006200458200620045122101b22111b211d200220057d200520027d20111b2119200141b0026a41106a290300420020012802b00222111b210720012903b802420020111b210c2005200256200620045620101b0d01200b420037030020034200370300200a4200370300200142003703f007201a1001221029000021022008201041086a290000370300200120023703900720101035200a200829030037030020012001290390073703f007201c1001220829000021022009200841086a290000370300200120023703c00420081035200320012903c004370000200341086a20092903003700002012200a290300370300200e2003290300370300200f200b290300370300200120012903f0073703d8062001427f2007201d7c200c20197c2204200c542203ad7c22022003200220075420022007511b22031b3703a80a2001427f200420031b3703a00a200141a00a6a21030c020b4184b8c800ad4280808080a009841006200141f0076a41186a22124200370300200141f0076a41106a220a4200370300200141f0076a41086a22034200370300200142003703f00741b6fdc600ad4280808080800184220510012209290000210620014190076a41086a2208200941086a2900003703002001200637039007200910352003200829030037030020012001290390073703f00741e489c200ad4280808080d0018422061001220b2900002107200141c0046a41086a2209200b41086a290000370300200120073703c004200b1035200a20012903c0042207370300200141d8066a41086a220e2003290300370300200141d8066a41106a220f2007370300200141d8066a41186a22102009290300370300200120012903f0073703d806200141c8026a200141d8066a412010d701200141c8026a41106a290300210720012903d002210c20012802c802210b20124200370300200a420037030020034200370300200142003703f00720051001221229000021052008201241086a2900003703002001200537039007201210352003200829030037030020012001290390073703f00720061001220829000021052009200841086a290000370300200120053703c00420081035200a20012903c0042205370300200e2003290300370300200f200537030020102009290300370300200120012903f0073703d8062001427f20074200200b1b220520047c200c4200200b1b220420027c22062004542203ad7c22022003200220055420022005511b22031b3703a80a2001427f200620031b3703a00a200141d8066aad4280808080800484200141a00a6aad428080808080028410020c020b200b420037030020034200370300200a4200370300200142003703f007201a1001221029000021022008201041086a290000370300200120023703900720101035200a200829030037030020012001290390073703f007201c1001220829000021022009200841086a290000370300200120023703c00420081035200320012903c004370000200341086a20092903003700002012200a290300370300200e2003290300370300200f200b290300370300200120012903f0073703d806200142002007201d7d200c201954ad7d2202200c20197d2204200c56200220075620022007511b22031b3703a80a20014200200420031b3703a00a200141a00a6a21030b200141d8066aad42808080808004842003ad428080808080028410020b2001290380052102200141b80a6a20014180056a41086a290300370300200141b00a6a2002370300200141a00a6a41086a41053a00002001410c3a00a00a41b0b4cc004100200141a00a6a10d401200d42c097e8b2017e200d4280bfdf80017e7c4280e59af7007c211e0b024020180d0010a1020b02400240200041809c3170450d00200141a00a6a21090c010b200141f0056a41186a4200370300200141f0056a41106a22094200370300200141f0056a41086a220a4200370300200142003703f00541d9e3cb00ad428080808090018410012208290000210220014190076a41086a2203200841086a290000370300200120023703900720081035200a200329030037030020012001290390073703f00541efe3cb00ad4280808080d002841001220829000021022003200841086a29000037030020012002370390072008103520092001290390072202370300200141a00a6a41086a200a290300370300200141a00a6a41106a2002370300200141a00a6a41186a2003290300370300200120012903f0053703a00a024002400240024002400240200141a00a6a10bd02220341ff01714102460d00200141a00a6aad4280808080800484100720034101710d010b200141a00a6a200010e70420012d00a00a4104460d02200141f0076a200010ea040c010b200141a00a6a200010ea0420012d00a00a4104460d01200141f0076a200010e7040b20012d00f0074104460d01200141a00a6a411610e8040c020b200141043a00f0070b200141043a00a00a0b200141a00a6a21090b200120003602b805200141f0056a41186a22124200370300200141f0056a41106a2208420037030041082113200141f0056a41086a220a4200370300200142003703f00541d9e3cb00ad428080808090018422021001220b290000210420014190076a41086a2203200b41086a2900003703002001200437039007200b1035200a200329030037030020012001290390073703f00541e2e3cb00ad4280808080d001841001220b29000021042003200b41086a2900003703002001200437039007200b103520082001290390072204370300200141a00a6a41086a220e200a290300370300200141a00a6a41106a220f2004370300200141a00a6a41186a22102003290300370300200120012903f0053703a00a200141a8026a2009412010c00120012802ac02211120012802a80221142012420037030020084200370300200a4200370300200142003703f00520021001220b29000021022003200b41086a2900003703002001200237039007200b1035200a200329030037030020012001290390073703f00541cae3cb00ad4280808080f001841001220b29000021022003200b41086a2900003703002001200237039007200b103520082001290390072202370300200e200a290300370300200f200237030020102003290300370300200120012903f0053703a00a200141a0026a2009412010c0014100210e200120012802a402410020012802a0021b3602dc0620012011410020141b3602d8062001200141b8056a3602e006200141a00a6a200141d8066a200141d8066a41086a10b6060240024020012d00800b220a4103460d00200141f0076a200141a00a6a41e000109d081a2001200141a00a6a41e4006a2800003600b304200120012800810b3602b00441e80010332213450d022013200141f0076a41e000109d082203200a3a0060200320012802b004360061200341e4006a20012800b3043600002001428180808010370294072001200336029007200141f0056a41086a220b200141d8066a41086a280200360200200120012903d8063703f005200141a00a6a200141f0056a200b10b606024020012d00800b22094103470d004101210a4101210e0c020b41c9012108200141810b6a221241036a210f4101210e4101210a0340200141f0076a200141a00a6a41e000109d081a2001200f2800003600b304200120122800003602b004200141a00a6a200141f0076a41e000109d081a200120012800b30436008305200120012802b004360280050240200a200e470d0020014190076a200e410110960120012802900721130b201320086a2203419f7f6a200141a00a6a41e000109d081a2003417f6a20093a00002003200128028005360000200341036a2001280083053600002001200a41016a220a36029807200141a00a6a200141f0056a200b10b606200841e8006a2108200128029407210e20012d00800b22094103470d000c020b0b4100210a0b0240200a450d002013200a41e8006c6a2115200141f0076a41096a2118200141f0076a41106a2109200141a8066a2114200141a00a6a41086a2120200141a00a6a410172211f200141c9066a210f20014190076a41046a211641b6fdc600ad4280808080800184212220014198066a21172013210803402008280200210b200141a00a6a200841046a41dc00109d081a2001200841e1006a2800003602f0072001200841e4006a2800003600f307200841e0006a2d000022124103460d0120014190076a200141a00a6a41dc00109d081a200120012800f3073600eb03200120012802f0073602e803200141f0056a201641d800109d081a200f20012802e803360000200f41036a20012800eb03360000200120123a00c806200141f0076a41186a2210420037030020094200370300200141f0076a41086a22034200370300200142003703f00720221001220a29000021022003200a41086a290000370300200120023703f007200a103541e489c200ad4280808080d001841001220a2900002102200141c0046a41086a2211200a41086a290000370300200120023703c004200a1035200920012903c004370000200941086a2011290300370000200141d8066a41086a2003290300370300200141d8066a41106a2009290300370300200141d8066a41186a2010290300370300200120012903f0073703d80620014188026a200141d8066a412010d70120014188026a41106a2903002105200128028802210a2001290390022106200141f0056a41186a2903002123200141f0056a41086a290300211b41002103200129038006211d20012903f005211c0240200129039006220d4202882017290300220c423e86842202200c420288220484500d002002200d852004200c8584500d00410021030340200141f8016a200d200c200341046a41fe007110a408200341026a210320012903f8012202200141f8016a41086a290300220484500d012002200d852004200c85844200520d000b0b200841e8006a210820054200200a1b211920064200200a1b211a42002106420021040340200141d8016a20044201862006423f8884220442002006420186220642018422024200108408200141e8016a20024200200242001084080240200420012903e001220584200584420052200141e8016a41086a290300220520012903d801220720077c7c2207200554720d0020012903e8012105200141c8016a200d200c200341ff007110a40820042004200520012903c801562007200141c8016a41086a29030022055620072005511b220a1b210420062002200a1b21060b02402003450d0041002003417e6a220a200a20034b1b21030c010b0b410021030240201a4202882019423e868422022019420288220584500d002002201a85200520198584500d00410021030340200141b8016a201a2019200341046a41fe007110a408200341026a210320012903b8012202200141b8016a41086a290300220584500d012002201a852005201985844200520d000b0b4200210542002102034020014198016a20024201862005423f8884220242002005420186220542018422074200108408200141a8016a20074200200742001084080240200220012903a001220c84200c84420052200141a8016a41086a290300220c200129039801220d200d7c7c220d200c54720d0020012903a801210c20014188016a201a2019200341ff007110a40820022002200c20012903880156200d20014188016a41086a290300220c56200d200c511b220a1b210220052007200a1b21050b02402003450d0041002003417e6a220a200a20034b1b21030c010b0b024002400240024002402006200484500d0002400240024020120e03000102000b0340200141386a201d2023200620041098082005220c2002220d844200510d04200141386a41086a290300210220012903382105200141286a201c201b200c200d109808200520012903282219542002200141286a41086a290300220754200220075122031b0d062019200554200720025420031b0d03200141186a2005200220062004108408200141086a20192007200c200d108408201c200129030822027d2207201b200141086a41086a2903007d201c200254ad7d220284500d032023200141186a41086a2903007d2119201d20012903182205542103201d20057d21052006211c2004211b2007210620022104200c211d200d2123200520192003ad7d22028450450d000c060b0b0340200421072006210c20052002844200510d04200141e8006a201c201b200c2007109808200141f8006a201d2023200520021098082001290378220d2001290368221954200141f8006a41086a2903002204200141e8006a41086a290300220654200420065122031b0d052019200d54200620045420031b0d02200141d8006a200d200420052002108408200141c8006a20192006200c2007108408201c200129034822047d220d201b200141c8006a41086a2903007d201c200454ad7d220484500d022023200141d8006a41086a2903007d2119201d20012903582206542103201d20067d21062005211c2002211b200d210520042102200c211d20072123200620192003ad7d22048450450d000c050b0b201c201d56201b202356201b2023511b0d030b2001200b3602ac0a200141053a00a80a200141063a00a00a4100210341b0b4cc004100200141a00a6a10d4010c030b41d0c7c40041194194c5c800103f000b41d0c7c40041194194c5c800103f000b2001200b3602ac0a200141043a00a80a200141063a00a00a41b0b4cc004100200141a00a6a10d401024002400240024020012802a4062203450d00200141d8066a201410ee04200141a00a6a20012802d806221220012802e006221010d202200320006a210a024020012d00a00a2203410371222141034622110d00024020030e03000100000b0240024020110d0020210e03010001010b20012802c80a450d0020012802c40a10350b201f20012f00b8053b0000201f41026a200141b8056a41026a2d00003a000041002103200141003a00a00a2001200a3602a40a2020200141f0076a41c800109d081a0c020b2001200a3602d80a200141013602d40a20034102470d012010ad4220862012ad8410070c020b200141a00a6a41186a201441186a290000370300200141a00a6a41106a201441106a2900003703002020201441086a290000370300200120142900003703a00a200141f0076a200141a00a6a200b10f4040c020b200141003602f807200142013703f007200141a00a6a200141f0076a10ef0420012802f40721112010ad4220862012ad8420013502f80742208620012802f0072210ad84100202402011450d00201010350b0240200341037122034103460d0020030e03010001010b20012802c80a450d0020012802c40a10350b024020012802dc06450d00201210350b20182014290000370000201841086a201441086a290000370000201841106a201441106a290000370000201841186a201441186a2900003700002001411d3a00f8072001200b36029c08200141093602f007410c10332203450d042003200b360008200342e4cab5fbb6ccdcb0e3003700002001428c808080c0013702dc06200120033602d806200141a00a6a200141d8066a10f004200120012802a00a221020012802a80a41b0b4cc0041004100108a0220012802002112024020012802a40a450d00201010350b024020124101460d00410c10332212450d0520122003290000370000201241086a200341086a280000360000200141a00a6a200141f0076a41b002109d081a2001413f3a00e80c200141003602dc0c2001428c808080c0013702d40c200120123602d00c200a200141a00a6a410110cb04024020012802dc0c4102460d00024020012802d00c2203450d0020012802d40c450d00200310350b200141a00a6a10ba020b200141a00a6a200a10f3042001410020012802a40a417f6a20012802a00a4101461b360284052001200a36028005200141a00a6a200141d8066a10f00420012802a00a2103200120012802a80a3602bc05200120033602b80520014180056a200141b8056a10db01024020012802a40a450d00200310350b20012802dc06450d0120012802d80610350c010b20031035200141f0076a10ba0241b08cc500ad4280808080a0068410060b410121030b200120003602a40a200120033a00a10a200141013a00a00a200141f0076a200b10f50420012802f0072103200120012802f8073602f405200120033602f005200141a00a6a200141f0056a10f604024020012802f407450d00200310350b20082015470d000b0b0240200e450d00200e41e8006c450d00201310350b200010b7062102200141f00c6a2400427f201e20027c22022002201e541b0f0b1045000b41a0bac800411c41bcbac8001064000b2003200a419cb9c8001042000bc30103017f017e027f0240024002402000280200220241024d0d004101210042002103410121020c010b024002400240024020020e03000102000b410110332204450d0441002102200441003a00002000280204210520044101410510372200450d04200020053600014280808080d00021030c030b410110332200450d03200041013a00000c010b410110332200450d02200041023a00000b4100210242808080801021030b200129020020032000ad841002024020020d00200010350b0f0b103c000bd10707017f017e027f017e017f027e037f230041e0006b22032400200341306a2001200210da03024002400240024020032903302204a7220241ff01714101460d00200341306a41186a4200370300200341306a41106a22054200370300200341306a41086a220242003703002003420037033041d1c4c700ad4280808080e000841001220629000021072002200641086a29000037030020032007370330200610354184eec700ad4280808080b00284100122062900002107200341d0006a41086a2208200641086a2900003703002003200737035020061035200520032903502207370300200341106a41086a2002290300370300200341106a41106a2007370300200341106a41186a2008290300370300200320032903303703102003200341106a10e1022003290308420020032802001b210702400240200141ff0171220141024b0d004280b0def7d32b210920010e03010003010b4280c0a8ca9a3a21090b4100210141800c2102200042c0b2cd3b7c220a2000540d032007200a7c22002007540d0320002009560d030c020b200241087641ff017121012004421088a741087421020c020b427f2007427f200042c0b2cd3b7c220920092000541b7c220020002007541b21000b200341306a41186a22084200370300200341306a41106a22064200370300200341306a41086a220242003703002003420037033041d1c4c700ad4280808080e000842207100122052900002109200341d0006a41086a2201200541086a2900003703002003200937035020051035200220012903003703002003200329035037033041b8eec700ad42808080808002841001220529000021092001200541086a2900003703002003200937035020051035200620032903502209370300200341106a41086a220b2002290300370300200341106a41106a220c2009370300200341106a41186a220d20012903003703002003200329033037031020032004422088a7360230200341106aad42808080808004842204200341306aad22094280808080c0008410022008420037030020064200370300200242003703002003420037033020071001220529000021072001200541086a290000370300200320073703502005103520022001290300370300200320032903503703304184eec700ad4280808080b002841001220529000021072001200541086a2900003703002003200737035020051035200620032903502207370300200b2002290300370300200c2007370300200d20012903003703002003200329033037031020032000370330200420094280808080800184100241022101410021020b200341e0006a240020022001720bac0604047f017e017f047e230041d0016b22022400200241a0016a41186a4200370300200241a0016a41106a22034200370300200241a0016a41086a22044200370300200242003703a00141e3efcb00ad4280808080a002841001220529000021062004200541086a290000370300200220063703a0012005103541f5efcb00ad4280808080900284100122052900002106200241c0016a41086a2207200541086a290000370300200220063703c00120051035200320022903c001220637030020024180016a41086a200429030037030020024180016a41106a200637030020024180016a41186a2007290300370300200220022903a0013703800120014280c0a8ca9a3a20014280c0a8ca9a3a541b2101200241e8006a20024180016a10bc020240024020022802680d004100210442002108420021060c010b200229037022084200522205200241e8006a41106a29030022064200552006501b21042006427f550d00428080808080808080807f420020062005ad7c7d20082006428080808080808080807f85845022051b21064200420020087d20051b21080b200241d8006a2008200642808090bbbad6adf00d4200109808200241c8006a20022903582209200241d8006a41086a290300220a428080f0c4c5a9d28f72427f108408200242808090bbbad6adf00d3703a8012002200820022903487c22063703a001200241286a200241a0016a200642808090bbbad6adf00d564103746a290300420020014200108408200241186a20022903282206200241286a41086a290300220842808090bbbad6adf00d4200109808200241086a2002290318220b200241186a41086a290300428080f0c4c5a9d28f72427f108408200241386a2009200a200142001084082000200241386a41086a29030020022903382209200b200620022903087c220a428080c89d9deb96f806562008200241086a41086a2903007c200a200654ad7c22064200522006501bad7c7c2206200954ad7c2208200620017c2209200654ad7c4200420020082001200654ad7c7d2208200120067d220620015620084200522008501b22051b20041b370308200020094200200620051b20041b370300200241d0016a24000b910f05017f017e047f017e067f230041f0016b2201240042002102200141d8006a41186a22034200370300200141d8006a41106a22044200370300200141d8006a41086a22054200370300200142003703584193d1cb00ad4280808080a00184100122062900002107200141c8006a41086a2208200641086a2900003703002001200737034820061035200520082903003703002001200129034837035841d8c7ca00ad4280808080e000841001220629000021072008200641086a2900003703002001200737034820061035200420012903482207370300200141286a41086a22062005290300370300200141286a41106a2007370300200141286a41186a200829030037030020012001290358370328200141f8006a200141286a412010d50120012d00782108200320014191016a290000370300200420014189016a290000370300200520014181016a290000370300200120012900793703580240024020084101470d0020002001290358370000200041186a2003290300370000200041106a2004290300370000200041086a20052903003700000c010b200141f8006a41186a4200370300200141f8006a41106a22094200370300200141f8006a41086a220842003703002001420037037841d1c4c700ad4280808080e000841001220a29000021072008200a41086a29000037030020012007370378200a10354185c5c700ad4280808080e000841001220a29000021072006200a41086a29000037030020012007370328200a103520092001290328220737030020052008290300370300200420073703002003200629030037030020012001290378370358200141f8006a200141d8006a10ce02024002402001280278220a0d004104210a410021050c010b200129027c2202422088a721050b02400240200541246c2205450d002005415c6a2108200a210503400240024020052d00004101460d002008450d030c010b200541016a2800002103200541086a28020021062001200541106a28020036025c200120063602580240200341c28289aa04460d0020080d010c030b200141f8006a200141d8006a10800420012903784203510d02200141f8006a41106a22052802002106200141f8006a41186a420037030020054200370300200141f8006a41086a220842003703002001420037037841a3edcb00ad4280808080f000841001220329000021072008200341086a290000370300200120073703782003103541f393ca00ad4280808080a00184100122032900002107200141286a41086a2209200341086a2900003703002001200737032820031035200520012903282207370300200141d8006a41086a2008290300370300200141d8006a41106a2007370300200141d8006a41186a200929030037030020012001290378370358200141f8006a200141d8006a10fe0120012802782205410120051b21034100210802402006200129027c420020051b2207422088a74f0d00200320064105746a2205450d00200141086a41186a200541186a290000370300200141086a41106a200541106a290000370300200141086a41086a200541086a29000037030020012005290000370308410121080b0240200742ffffff3f83500d00200310350b2008450d02200141f8006a41186a2208200141086a41186a290300370300200141f8006a41106a2203200141086a41106a290300370300200141f8006a41086a2206200141086a41086a29030037030020012001290308370378200141d8006a41186a220b4200370300200141d8006a41106a220c4200370300200141d8006a41086a22094200370300200142003703584193d1cb00ad4280808080a001841001220d2900002107200141c8006a41086a2205200d41086a29000037030020012007370348200d1035200920052903003703002001200129034837035841d8c7ca00ad4280808080e000841001220d29000021072005200d41086a29000037030020012007370348200d103520042001290348370000200441086a2005290300370000200141286a41086a2009290300370300200141286a41106a200c290300370300200141286a41186a200b290300370300200120012903583703280240412010332205450d0020052001290378370000200541186a2008290300370000200541106a2003290300370000200541086a2006290300370000200141286aad42808080808004842005ad4280808080800484100220051035200041186a2008290300370000200041106a2003290300370000200041086a2006290300370000200020012903783700000c040b1045000b200541246a21052008415c6a21080c000b0b20004200370000200041186a4200370000200041106a4200370000200041086a42003700000b02402002422088a72205450d00200541246c2108200a210503400240024020052d0000220341044b0d0002400240024020030e050400010204040b2005410c6a280200450d03200541086a28020010350c030b2005410c6a280200450d02200541086a28020010350c020b2005410c6a280200450d01200541086a28020010350c010b200541086a280200450d00200541046a28020010350b200541246a21052008415c6a22080d000b0b2002a72205450d00200541246c450d00200a10350b200141f0016a24000b8b0101017f41e09dcc00ad4280808080d001841006024002400240024020002d00000e0400010203000b200041046a29020010060f0b41d29dcc00ad4280808080e0018410060f0b41c89dcc00ad4280808080a0018410060f0b20003100011026200041026a31000010260240200041046a2802002201450d00200041086a3502004220862001ad8410060b0b130020004101360204200041a8d0c4003602000b850a03057f017e047f230041a0016b22012400200141e8006a41186a22024200370300200141e8006a41106a22034200370300200141e8006a41086a220442003703002001420037036841a3edcb00ad4280808080f000841001220529000021062004200541086a290000370300200120063703682005103541a5ebcb00ad4280808080c0018410012205290000210620014188016a41086a2207200541086a29000037030020012006370388012005103520032001290388012206370300200141c8006a41086a2004290300370300200141c8006a41106a2006370300200141c8006a41186a200729030037030020012001290368370348200141106a200141c8006a412010c00120012802142105200128021021082002200041186a2900003703002003200041106a2900003703002004200041086a290000370300200120002900003703684188e8cb00ad4280808080800184100122002900002106200141186a41086a200041086a290000370300200120063703182000103541f1c8c400ad4280808080e001841001220029000021062007200041086a29000037030020012006370388012000103520012005410020081b3602382001200141386aad4280808080c00084100322002900003703980120001035200141d4006a22052001413c6a360200200120014198016a41086a220736024c2001200141386a360250200120014198016a360248200141286a200141c8006a107b0240024002400240412010332200450d0020002001290368370000200041186a2002290300370000200041106a2003290300370000200041086a200429030037000020012000ad42808080808004841003220429000037039801200410352005200041206a360200200120003602502001200736024c200120014198016a360248200141386a200141c8006a107b200010352001280230220741206a2202200128024022086a2204417f4c0d01200128023821092001280228210a0240024020040d0041002105410121000c010b200410332200450d01200421050b024002402005410f4d0d00200521030c010b200541017422034110200341104b1b22034100480d03024020050d002003103322000d010c050b20052003460d0020002005200310372200450d040b20002001290318370000200041086a200141186a41086a2903003700000240024020034170714110460d00200321050c010b200341017422054120200541204b1b22054100480d0320032005460d0020002003200510372200450d040b2000200129038801370010200041186a20014188016a41086a29030037000002400240200541606a2007490d00200521030c010b2007415f4b0d03200541017422032002200320024b1b22034100480d0320052003460d0020002005200310372200450d040b200041206a200a2007109d081a02400240200320026b2008490d00200321050c010b20042002490d03200341017422052004200520044b1b22054100480d03024020030d00024020050d00410121000c020b200510332200450d050c010b20032005460d0020002003200510372200450d040b200020026a20092008109d081a0240200128023c450d00200910350b0240200128022c450d00200a10350b200141086a2000200410c0012001200128020c41016a410120012802081b3602682004ad4220862000ad84200141e8006aad4280808080c00084100202402005450d00200010350b200141a0016a24000f0b1045000b1044000b103e000b103c000b340020004188e8cb0036020420004100360200200041146a4104360200200041106a41f4d4c400360200200041086a42083702000b130020004101360204200041d8ddc4003602000b3400200041d1efcb0036020420004100360200200041146a4102360200200041106a4188e5c400360200200041086a42093702000b130020004101360204200041c8e7c4003602000b2d01017f02404108103322020d001045000b20004288808080800137020420002002360200200242dc0b3700000bd50101037f230041106b2203240002400240200241d0026c4104722204417f4c0d00200410332205450d0120034100360208200320043602042003200536020020022003107702402002450d00200241d0026c2102034002400240200141bc026a2802004102470d00200341003a000f20032003410f6a410110780c010b200341013a000f20032003410f6a410110782001200310da040b200141d0026a2101200241b07d6a22020d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1044000b1045000bec0101037f230041106b220224000240024020002802b00222030d00200241003a00072001200241076a41011078200241076a21030c010b200241013a00072001200241076a41011078200041b8026a2802002204200110772001200320041078200241076a21030b200220002d00c8023a000720012003410110782000200110af030240024020002802bc024101460d00200241003a000720012003410110780c010b200241013a000720012003410110782002200041c0026a2802003602082001200241086a410410782002200041c4026a28020036020c20012002410c6a410410780b200241106a24000b6401037f024041094101200128020022024101461b220310332204450d000240024020020d00200441003a0000410121010c010b200441013a000020042001290204370001410921010b2000200136020820002003360204200020043602000f0b1045000bc90202027f017e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d01200441012001105221000c020b20002903002104410021000340200220006a41ff006a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021000340200220006a41ff006a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000b20024180016a240020000f0b200341800141c88bc0001059000b200341800141c88bc0001059000b8b0605027f027e017f027e027f230041a0016b220224002000280200210002400240024002400240024002400240200128020022034110710d00200041086a29030021042000290300210520034120710d0220054290ce005441002004501b450d012005a72103412721000c060b200041086a2903002105200029030021044180012100024003402000450d01200241206a20006a417f6a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a210020044204882005423c8684220420054204882205844200520d000b0b20004181014f0d022001410141d88bc0004102200241206a20006a41800120006b105621000c060b41272100200241186a21060340200241106a200520044290ce0042001098082002200229031022072006290300220842f0b17f427f108408200241206a20006a2203417c6a200520022903007ca7220941ffff037141e4006e220a410174419a87c0006a2f00003b00002003417e6a200a419c7f6c20096a41ffff0371410174419a87c0006a2f00003b0000200542ffc1d72f56210320044200522109200450210a2000417c6a2100200721052008210420032009200a1b0d000c040b0b4180012100024003402000450d01200241206a20006a417f6a2005a7410f712203413072200341376a2003410a491b3a00002000417f6a210020054204882004423c8684220520044204882204844200520d000b0b20004181014f0d012001410141d88bc0004102200241206a20006a41800120006b105621000c040b200041800141c88bc0001059000b200041800141c88bc0001059000b2007a721030b02400240200341e3004a0d00200321090c010b200241206a2000417e6a22006a2003200341ffff037141e4006e2209419c7f6c6a41ffff0371410174419a87c0006a2f00003b00000b024002402009410a480d00200241206a2000417e6a22006a2009410174419a87c0006a2f00003b00000c010b200241206a2000417f6a22006a200941306a3a00000b2001410141b0b4cc004100200241206a20006a412720006b105621000b200241a0016a240020000ba50301077f230041106b2202240002400240024002402001410c6a2802002203417f4c0d0020012802042104200128020021050240024020030d0041002106410121070c010b200310332207450d02200321060b0240024020062003490d00200621080c010b200641017422082003200820034b1b22084100480d03024020060d002008103322070d010c050b20062008460d0020072006200810372207450d040b200720042003109d0821062002200141106a10a6032000410c6a2003360200200041086a20083602002000200636020420002005360200200041106a2002290300370200200041186a200241086a280200360200200020012802243602242000200129021c37021c20002001290228370228200041306a200141306a290200370200200041386a200141386a290200370200200041c0006a200141c0006a290200370200200041c8006a200141c8006a290200370200200041d0006a200141d0006a290200370200200041d8006a200141d8006a290200370200200041e0006a200141e0006a290200370200200241106a24000f0b1044000b1045000b103e000b103c000b1300200041023602042000418cecc4003602000b0f00200028020020012002107f41000bfe0101017f230041106b22022400200028020021002002410036020c02400240024002402001418001490d002001418010490d012001418080044f0d0220022001413f71418001723a000e20022001410676413f71418001723a000d20022001410c76410f7141e001723a000c410321010c030b200220013a000c410121010c020b20022001413f71418001723a000d20022001410676411f7141c001723a000c410221010c010b20022001413f71418001723a000f2002200141127641f001723a000c20022001410676413f71418001723a000e20022001410c76413f71418001723a000d410421010b20002002410c6a2001107f200241106a240041000b6301017f230041206b2202240020022000280200360204200241086a41106a200141106a290200370300200241086a41086a200141086a29020037030020022001290200370308200241046a41e88ac500200241086a10432101200241206a240020010ba50502067f017e230041d0006b220424002004200136020c2004200041b0b4cc0020011b3602082004200441086a10c40102400240024002400240024020042802000d0020042802042205200428020c4104762201200120054b1b22004104742201417f4c0d030240024020000d00410821060c010b200110332206450d050b41002101200441003602182004200036021420042006360210024002402005450d00200441306a4104722107410021010340200441306a200441086a10e404200441c0006a41086a2200200741086a28020036020020042007290200370340200428023022084104460d02200441206a41086a2209200028020036020020042004290340370320024020012004280214470d00200441106a20014101109a0120042802102106200428021821010b200620014104746a22002008360200200020042903203702042000410c6a20092802003602002004200141016a22013602182005417f6a22050d000b200428021421000b2006450d01200441306a200220062001200311060020042802302105410110332201450d054201210a200442013702442004200136024020054105470d02200141013a0000200441013602480c030b200428021441ffffffff0071450d00200610350b41b08bc50041f000200441306a41908bc50041a08cc5001046000b200141003a00002004410136024820014101410210372101024020054104470d002001450d04200141003a00012004200136024020044282808080203702444202210a0c010b2001450d03200141013a0001200420013602402004428280808020370244200441306a200441c0006a10e5042004350248210a200428024021010b2001ad422086200a84210a0240200041ffffffff0071450d00200610350b200441d0006a2400200a0f0b1044000b1045000b103c000bd90202047f017e02400240024002400240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a360200200441034b0d0520040e0401020304010b200041043602000f0b024020054104490d00200041003602002003280001210420012002417b6a3602042001200341056a360200200020043602040f0b200041043602000f0b024020054108490d0020004101360200200329000121062001200241776a3602042001200341096a360200200041086a20063703000f0b200041043602000f0b024020054104490d00200041023602002003280001210420012002417b6a3602042001200341056a360200200020043602040f0b200041043602000f0b024020054108490d0020004103360200200329000121062001200241776a3602042001200341096a360200200041086a20063703000f0b200041043602000f0b200041043602000bd70101017f230041106b220224000240024002400240024020002802000e0400010203000b200241003a00082001200241086a41011078200220002802043602082001200241086a410410780c030b200241013a00082001200241086a410110782002200041086a2903003703082001200241086a410810780c020b200241023a00082001200241086a41011078200220002802043602082001200241086a410410780c010b200241033a00082001200241086a410110782002200041086a2903003703082001200241086a410810780b200241106a24000bec0201047f230041306b22042400200441a58ecc00410310500240024002400240024020020d0041002105410121060c010b200210332206450d01200221050b0240024020052002490d00200521070c010b200541017422072002200720024b1b22074100480d02024020050d002007103322060d010c040b20052007460d0020062005200710372206450d030b200620012002109d082105200441146a2002360200200441106a220220073602002004200536020c200441186a41106a22052002290300370300200441186a41086a2207200441086a29030037030020042004290300370318024020002802082202200041046a280200470d00200020024101109101200028020821020b200028020020024105746a22024100360218200220042903183702002002411c6a2003360200200241106a2005290300370200200241086a20072903003702002000200028020841016a360208200441306a24000f0b1045000b103e000b103c000bdd0505047f017e017f017e0a7f230041e0016b22022400200241c0006a41186a22034200370300200241c0006a41106a22044200370300200241c0006a41086a220542003703002002420037034041d9e3cb00ad42808080809001842206100122072900002108200241e0006a41086a2209200741086a29000037030020022008370360200710352005200929030037030020022002290360370340419c8dc500ad4280808080c001841001220729000021082009200741086a2900003703002002200837036020071035200420022903602208370300200241206a41086a22072005290300370300200241206a41106a220a2008370300200241206a41186a220b200929030037030020022002290340370320200241e0006a200241206a10c0020240024020022d008001220c4103470d002000411610e8040c010b200241206aad428080808080048422081007200241086a220d2009290300370300200241106a220e200241e0006a41106a220f290300370300200241186a2210200241e0006a41186a2211290300370300200220022903603703002003420037030020044200370300200542003703002002420037034020061001221229000021062009201241086a2900003703002002200637036020121035200520092903003703002002200229036037034041efe3cb00ad4280808080d002841001221229000021062009201241086a290000370300200220063703602012103520042002290360370000200441086a200929030037000020072005290300370300200a2004290300370300200b200329030037030020022002290340370320200241013a00602008200241e0006aad428080808010841002200941023a0000200241063a006041b0b4cc004100200241e0006a10d40120112010290300370300200f200e2903003703002009200d29030037030020022002290300370360200141809c316a200241e0006a200c4180de3410e904200041043a00000b200241e0016a24000b8e0701047f230041c0006b2202240041f6f2c4002103412421044108210502400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200141ff01710e26000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425000b200241146a410136020020024201370204200241e8d4ca003602002002410436021c200241f0d5ca003602182002200241186a360210200241b0b4cc00104c000b41eaf5c400210341002104410821050c230b41d2dfca002103410f2105410121040c220b41e2f5c400210341022104410821050c210b41daf5c400210341032104410821050c200b41cbf5c4002103410f2105410421040c1f0b41e1dfca00210341112105410521040c1e0b41b8f5c400210341132105410621040c1d0b41a7f5c400210341112105410721040c1c0b419cf5c4002103410b2105410821040c1b0b4192f5c4002103410a2105410921040c1a0b4185f5c4002103410d2105410a21040c190b419bd6ca002103410c2105410b21040c180b41fbf4c4002103410a2105410c21040c170b41eff4c4002103410c2105410d21040c160b41def4c400210341112105410e21040c150b41d3f4c4002103410b2105410f21040c140b41a1dfca00210341102104410821050c130b41cbf4c400210341112104410821050c120b41bcf4c4002103410f2105411221040c110b41abf4c400210341112105411321040c100b419cf4c4002103410f2105411421040c0f0b4191f4c4002103410b2105411521040c0e0b4188f4c400210341092105411621040c0d0b41fef3c4002103410a2105411721040c0c0b41f7f3c400210341072105411821040c0b0b41eef3c400210341092105411921040c0a0b41e5f3c400210341092105411a21040c090b41ddf3c4002103411b2104410821050c080b41d1f3c4002103410c2105411c21040c070b41c0f3c400210341112105411d21040c060b41a7d6ca002103411e2104410821050c050b41b7f3c400210341092105411f21040c040b41a6f3c400210341112105412021040c030b4199f3c4002103410d2105412121040c020b418ff3c4002103410a2105412221040c010b41fef2c400210341112105412321040b20004183143b0100200041086a2005360200200041046a2003360200200041026a20043a0000200241c0006a24000b900707047f017e017f017e017f017e047f230041e0016b22042400200441d8006a41186a22054200370300200441d8006a41106a22064200370300200441d8006a41086a220742003703002004420037035841d9e3cb00ad4280808080900184220810012209290000210a200441c8006a41086a220b200941086a2900003703002004200a370348200910352007200b2903003703002004200429034837035841cae3cb00ad4280808080f00184220a10012209290000210c200b200941086a2900003703002004200c3703482009103520062004290348220c370300200441106a41086a22092007290300370300200441106a41106a220d200c370300200441106a41186a220e200b29030037030020042004290358370310200441086a200441106a412010c001200428020c210f20042802082110200542003703002006420037030020074200370300200442003703582008100122052900002108200b200541086a29000037030020042008370348200510352007200b29030037030020042004290348370358200a100122052900002108200b200541086a290000370300200420083703482005103520062004290348220837030020092007290300370300200d2008370300200e200b290300370300200420042903583703102004200f410020101b220b41016a360258200441106aad4280808080800484200441d8006aad4280808080c0008410022004413f6a4200370000200441376a42003700002004412f6a4200370000200441276a42003700002004411f6a420037000020044200370017200441e1006a22062009290000370000200441e9006a200d290000370000200441f1006a200e290000370000200441f9006a200441106a41206a29000037000020044181016a200441386a29000037000020044188016a420037000020044194016a200336020020044190016a200036020020044198016a2001290000370300200441a0016a200141086a290000370300200441a8016a200141106a290000370300200441b0016a200141186a290000370300200441003a005820042004290010370059200441b8016a20023a0000200441c8006a200b10f50420042802482101200420042802503602dc01200420013602d801200441d8006a200441d8016a10f6040240200428024c450d00200110350b200441e4006a200b360200200620023a0000200741033a0000200441063a005841b0b4cc004100200441d8006a10d401200441e0016a24000bcd1a06057f017e017f017e117f097e23002202210320024180046b4160712202240020024180016a41186a420037030020024180016a41106a2204420037030020024180016a41086a22054200370300200242003703800141d9e3cb00ad4280808080900184100122062900002107200241d8006a41086a2208200641086a290000370300200220073703582006103520052008290300370300200220022903583703800141918dc500ad4280808080b001841001220629000021072008200641086a2900003703002002200737035820061035200420022903582207370300200241386a41086a2005290300370300200241386a41106a2007370300200241386a41186a2008290300370300200220022903800137033820024120360294022002200241386a3602900220024198026a200241386aad42808080808004842209100510c20102400240024002400240200228029802220a0d004100210b0c010b200228029c02210c200220024198026a41086a2802003602ac022002200a3602a802200241306a200241a8026a10c4010240024020022802300d002002280234220d20022802ac02220e41c4006e22082008200d4b1bad42c4007e2207422088a70d042007a72208417f4c0d040240024020080d004104210b0c010b20081033220b450d040b200241003602b8022002200b3602b0022002200841c4006e3602b40202400240200d450d004100210f41002110034002400240200e4104490d00200220022802a802221141046a3602a8022011280000211241002108200241003a00a001200e417c6a21060240024002400240034020062008460d0120024180016a20086a201120086a220541046a2d00003a00002002200541056a3602a8022002200841016a22053a00a0012005210820054120470d000b200241d8006a41186a221320024180016a41186a2214290300370300200241d8006a41106a221520024180016a41106a2216290300370300200241d8006a41086a221720024180016a41086a2218290300370300200220022903800137035841002108200241003a00a001201120056a21192005200e6b41046a210e0340200e20086a450d0220024180016a20086a201920086a221141046a2d00003a00002002201141056a3602a8022002200841016a22113a00a0012006417f6a21062011210820114120470d000b200241c0036a41186a2014290300370300200241c0036a41106a2016290300370300200241c0036a41086a2018290300370300200241e0036a41086a2017290300370300200241e0036a41106a2015290300370300200241e0036a41186a201329030037030020022002290380013703c003200220022903583703e003200620056b210e410021082012211a0c050b200841ff0171450d020c010b200841ff0171450d010b200241003a00a0010b4100210e0b410121080b200241a0036a41186a2205200241e0036a41186a290300370300200241a0036a41106a2206200241e0036a41106a290300370300200241a0036a41086a2211200241e0036a41086a29030037030020024180036a41086a2219200241c0036a41086a29030037030020024180036a41106a2212200241c0036a41106a29030037030020024180036a41186a2213200241c0036a41186a290300370300200220022903e0033703a003200220022903c0033703800320080d02201041016a2110200241e0026a41186a22142005290300370300200241e0026a41106a22052006290300370300200241e0026a41086a22062011290300370300200241c0026a41086a22112019290300370300200241c0026a41106a22192012290300370300200241c0026a41186a22122013290300370300200220022903a0033703e00220022002290380033703c0020240200f20022802b402470d00200241b0026a200f4101109f0120022802b002210b20022802b802210f0b200b200f41c4006c6a2208201a360200200820022903e0023702042008410c6a2006290300370200200841146a20052903003702002008411c6a2014290300370200200820022903c0023702242008412c6a2011290300370200200841346a20192903003702002008413c6a20122903003702002002200f41016a220f3602b8022010200d470d000b2002200e3602ac020b20022902b4022107200b450d010c020b2002200e3602ac02024020022802b4022208450d00200841c4006c450d00200b10350b0b4100210b2002410036026020024201370358200241093602e403200220024190026a3602e0032002200241d8006a3602c00320024194016a41013602002002420137028401200241c888c200360280012002200241e0036a36029001200241c0036a41e88ac50020024180016a10431a20023502604220862002350258841006200228025c450d00200228025810350b200c450d00200a10350b200b4104200b1b2110024020074200200b1b221b422088a7220b450d00200241186a201028020010eb04200241186a41106a2903004200200228021822081b21072002290320420020081b211c0240200b4101470d002002201c3703800141002111200241003602900120022007370388010c040b201041c4006a2108200b41c4006c41bc7f6a210e41002111200241106a21192010210f4101210603402002200828020010eb04200720192903004200200228020022051b221d201c2002290308420020051b221e562007201d562007201d511b22051b2107201c201e20051b211c200f200820051b210f2011200620051b2111200641016a2106200841c4006a2108200e41bc7f6a220e0d000b2002201c3703800120022011360290012002200737038801200f0d030b2000411610e8040240201ba72202450d00200241c4006c450d00201010350b200324000f0b1045000b1044000b02402011200b4f0d002010201141c4006c6a220841186a2206290200211c2010200b417f6a221141c4006c6a220541c0006a280200210f200541206a290200211d200541286a290200211e200541306a290200211f200541386a29020021202005290200212120052902082107200529021021222006200541186a290200370200200829021021232008202237021020082902082122200820073702082008290200210720082021370200200841386a2020370200200841306a201f370200200841286a201e370200200841206a2205280200210b2005201d370200200841c0006a200f3602002002202337039001200220223703880120022007370380012002201c37039801200241e0036a41186a200228029c01360200200241e0036a41106a200229029401370300200241e0036a41086a200229028c0137030020022002290284013703e00320024180016a41186a220f420037030020024180016a41106a220e420037030020024180016a41086a22054200370300200242003703800141d9e3cb00ad428080808090018410012206290000211c200241d8006a41086a2208200641086a2900003703002002201c3703582006103520052008290300370300200220022903583703800141918dc500ad4280808080b0018410012206290000211c2008200641086a2900003703002002201c3703582006103520042002290358370000200441086a2008290300370000200241386a41086a2005290300370300200241386a41106a200e290300370300200241386a41186a200f290300370300200220022903800137033820024180016a2010201110ec0420092002350288014220862002280280012208ad8410020240200228028401450d00200810350b2007a7210e0240201ba72208450d00200841c4006c450d00201010350b200241d8006a200e10ed0420024180016a200228025822082002280260220510cc020240200228029001220f450d002005ad4220862008ad8410070b20024188016a290300210720024198016a2802002119200229038001211c20022802940121100240200228025c450d00200810350b0240200f450d0002402019410574450d00201c200784500d0020024189016a210520194105742106200241b8016a2111200f210803402002201c3703c003200220073703c803200220083602a003200241d8006a2008200241c0036a200241a0036a10f002024020022903584201520d002002290360211d200841186a290000211e200841106a290000211b200841086a29000021092008290000211f2011200241d8006a41106a2903003703002005201f370000200541086a2009370000200541106a201b370000200541186a201e370000200241003a008801200241033a0080012002201d3703b00141b0b4cc00410020024180016a10d4010b200841206a2108200641606a22060d000b0b200241a8016a2007370300200241a0016a201c37030020024180016a41186a2208201936020020024194016a201036020020024180016a41106a2205200f3602002002418c016a200e36020020024180016a41086a220641013a0000200241063a00800141b0b4cc00410020024180016a10d4012008200241e0036a41186a2802003602002005200241e0036a41106a2903003703002006200241e0036a41086a290300370300200220022903e003370380012002200b36029c01200141809c316a20024180016a41004180de3410e9040b200041043a0000200324000f0b2011200b104a000bcf0102037f047e230041c0006b22022400200241306a200110ed04200241106a20022802302203200228023810cc02200228023421010240024020022802202204450d00200241186a2903002105200229031021062002290224210702402001450d00200310350b20022006200520074220884200108408200241086a29030021054201210620022903002108200742ffffff3f83500d01200410350c010b02402001450d00200310350b420021060b2000200837030820002006370300200041106a2005370300200241c0006a24000bc006010a7f230041106b220324000240024002400240200241c4006c41046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b20034100360208200320053602002003200436020420022003107702402002450d002001200241c4006c6a2106200328020421022003280208210403402001280200210702400240200220046b4104490d0020032802002105200221080c010b200441046a22052004490d05200241017422082005200820054b1b22084100480d050240024020020d00024020080d00410121050c020b2008103322050d010c080b2003280200210520022008460d0020052002200810372205450d070b20032008360204200320053602000b200520046a20073600002003200441046a2209360208412010332202450d03200241186a220a2001411c6a290000370000200241106a220b200141146a290000370000200241086a220c2001410c6a2900003700002002200141046a29000037000002400240200820096b4120490d00200441246a2104200821070c010b200941206a22042009490d05200841017422072004200720044b1b22074100480d050240024020080d00024020070d00410121050c020b200710332205450d080c010b20082007460d0020052008200710372205450d070b20032007360204200320053602000b200520096a22082002290000370000200841186a200a290000370000200841106a200b290000370000200841086a200c290000370000200320043602082002103502400240200720046b411f4d0d00200721020c010b200441206a22022004490d05200741017422082002200820024b1b22024100480d050240024020070d00024020020d00410121050c020b200210332205450d080c010b20072002460d0020052007200210372205450d070b20032002360204200320053602000b200520046a2205200141246a290000370000200541186a2001413c6a290000370000200541106a200141346a290000370000200541086a2001412c6a2900003700002003200441206a2204360208200141c4006a22012006470d000b0b20002003290300370200200041086a200341086a280200360200200341106a24000f0b1044000b1045000b103e000b103c000bfc0403027f017e057f230041d0006b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541f2f8c400ad4280808080900184100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000b9f0303027f017e027f230041206b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a200341086a290000370300200220043703002003103541888dc500ad4280808080900184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b880202037f017e230041106b220224000240024020002d00004101460d00200241003a000020012002410110782002200041046a28020036020020012002410410780c010b200241013a00002001200241011078200041246a28020021032000412c6a28020022042001107720012003200410782001200041016a41201078200041c0006a29030021052002200041c8006a2903003703082002200537030020012002411010782002200041306a28020036020020012002410410780240200041346a2802004101460d00200241003a000020012002410110780c010b200241013a000020012002410110782002200041386a28020036020020012002410410780b200241106a24000ba50403027f017e057f230041306b220224004189fec600ad4280808080900184100122032900002104200241086a200341086a290000370300200220043703002003103541b489c500ad4280808080e00084100122032900002104200241106a41086a200341086a2900003703002002200437031020031035200241206a2001280200200128020810980302400240024002402002280228220541206a2206417f4c0d00200228022021070240024020060d0041002103410121010c010b200610332201450d02200621030b024002402003410f4d0d00200321080c010b200341017422084110200841104b1b22084100480d03024020030d002008103322010d010c050b20032008460d0020012003200810372201450d040b20012002290300370000200141086a200241086a2903003700000240024020084170714110460d00200821030c010b200841017422034120200341204b1b22034100480d0320082003460d0020012008200310372201450d040b20012002290310370010200141186a200241106a41086a29030037000002400240200341606a2005490d00200321080c010b200541206a22082005490d03200341017422092008200920084b1b22084100480d0320032008460d0020012003200810372201450d040b200141206a20072005109d081a20002006360208200020083602042000200136020002402002280224450d00200710350b200241306a24000f0b1044000b1045000b103e000b103c000bd60201027f024002402002450d002002417f6a21040240024020012d0000220241037122054103460d0002400240024020050e03000102000b200241027621020c030b2004450d0320012d0001410874200272220241ffff0371418002490d03200241fcff037141027621020c020b20044103490d0220012f0001200141036a2d000041107472410874200272220241808004490d02200241027621020c010b200241034b0d0120044104490d0120012800012202418080808004490d010b200220036a22012002490d0141012103410121050240200241c000490d0041022105200241808001490d00410441052002418080808004491b21050b0240200141c000490d0041022103200141808001490d00410441052001418080808004491b21030b20002001360204200041003602002000410c6a2003360200200041086a20053602000f0b200041013602000f0b200041013602000ba40301027f230041e0006b22032400200341003a00050240024002400240200041c000490d00200041808001490d012000418080808004490d0241052104200341053a0005200341033a0000200320003600010c030b41012104200341013a0005200320004102743a00000c020b41022104200341023a0005200320004102744101723b01000c010b41042104200341043a0005200320004102744102723602000b024002402001280200220028020822012002490d0020002802002100200320023602082003200436020c20042002470d01200020032002109d081a200341e0006a24000f0b2002200141ccc8ca001058000b200341286a41146a410a360200200341346a410c360200200341106a41146a41033602002003200341086a36024020032003410c6a360244200341c8006a41146a410036020020034203370214200341a0b3cc003602102003410c36022c200341b0b4cc003602582003420137024c200341f4b3cc003602482003200341286a3602202003200341c8006a3602382003200341c4006a3602302003200341c0006a360228200341106a41b0b4cc00104c000bad0301087f230041c0006b22022400200241106a200110c904200241206a200235021842208620022802102203ad84100510c20102400240200228022022040d002002410036023820024208370330200241306a4100410010a701200228023841d0026c220141d0026d2105200228023421062002280230210702402001450d00200541d0026c21082007210103400240200141bc026a2802004102460d000240200141b0026a2802002209450d00200141b4026a280200450d00200910350b200110bb020b200141d0026a2101200841b07d6a22080d000b0b02402006450d00200641d0026c450d00200710350b4100210120004100360200200020053602040c010b200228022421082002200241206a41086a28020036023420022004360230200241086a200241306a10c401024002402002280208450d00200041b0b4cc00360204200041086a4100360200410121010c010b2000200228020c360204410021010b20002001360200410121012008450d00200410350b02402002280214450d00200310350b02402004410047200141017371450d002002280224450d00200410350b200241c0006a24000bd71203077f057e057f230041d0086b22032400200341e0006a200110ee04200341f0056a200328026022042003280268220510d20241022106024020032d00f005220741024622080d002005ad4220862004ad8410070b20034198036a411f6a220520034190066a28000036000020034198036a41186a220920034189066a29000037030020034198036a41106a20034181066a290000220a37030020034198036a41086a200341f9056a290000220b370300200320032900f105220c37039803200341b8066a290300210d200341b0066a290300210e20034194066a280200210f20034198066a28020021102003419c066a2802002111200341f0056a411f6a22122005280000360000200341f0056a41186a22052009290300370300200341f0056a41106a2209200a370300200341f0056a41086a2213200b3703002003200c3703f005024020080d00200341186a411f6a2012280000360000200341186a41186a2005290300370300200341186a41106a2009290300370300200341186a41086a2013290300370300200320032903f005370318200721060b02402003280264450d00200410350b0240024002400240200641037122064103460d0020060e03010001010b200341c0006a41186a200341186a41186a290300370300200341c0006a41106a200341186a41106a290300370300200341c0006a41086a200341186a41086a2903003703002003200329031837034020032011360294032003200f36029003200341e0006a20034190036a10b90202402003280260411b460d0020034198036a200341e0006a41b002109d081a2003200e3703c8052003200d3703d0050240200e200d84500d002003200341c0006a3602a408200341a8086a200341c0006a200341c8056a200341a4086a10f00220032903a8084201520d0020032903b008210a200341a8066a200341a8086a41106a290300370300200341a0066a200a370300200341f0056a41086a41003a0000200341f9056a200329034037000020034181066a200341c0006a41086a29030037000020034189066a200341c0006a41106a29030037000020034191066a200341d8006a290300370000200341033a00f00541b0b4cc004100200341f0056a10d4010b200341f0056a41086a2206410c3a000020034199066a2003290340370000200341f9056a2207200129000037000020034181066a200141086a29000037000020034189066a200141106a29000037000020034191066a200141186a290000370000200341a1066a200341c0006a41086a290300370000200341a9066a200341c0006a41106a290300370000200341b1066a200341c0006a41186a290300370000200341063a00f005200341c8066a200d370300200341c0066a200e37030041b0b4cc004100200341f0056a10d401200341f0056a20034198036a41b002109d081a200341003b01a808200341c8056a200341f0056a200341a8086a10ac0320032903c805210a200341f0056a410c6a20023602002007200a503a0000200641073a0000200341063a00f00541b0b4cc004100200341f0056a10d401200041043a000020100d020c030b2003200e3703a8082003200d3703b0080240024002400240200e200d844200520d00200342003703d005200342003703c8050c010b2003200341c0006a3602c80520034198036a200341c0006a200341a8086a200341c8056a10a802200341b8036a290300210a20032903b003210b02402003290398034201520d0020032903a003210c200341a8066a20034198036a41106a290300370300200341a0066a200c370300200341f0056a41086a41003a0000200341f9056a200329034037000020034181066a200341c0006a41086a29030037000020034189066a200341c0006a41106a29030037000020034191066a200341d8006a290300370000200341033a00f00541b0b4cc004100200341f0056a10d4010b2003200b3703c8052003200a3703d005200b200a844200520d010b200341f0056a41186a22054200370300200341f0056a41106a22044200370300200341f0056a41086a22074200370300200342003703f00541b6fdc600ad4280808080800184220a10012208290000210b200341a8086a41086a2206200841086a2900003703002003200b3703a8082008103520072006290300370300200320032903a8083703f00541e489c200ad4280808080d00184220b10012208290000210c2006200841086a2900003703002003200c3703a80820081035200420032903a808220c37030020034198036a41086a2209200729030037030020034198036a41106a2212200c37030020034198036a41186a22132006290300370300200320032903f00537039803200320034198036a412010d701200341106a290300210c2003290308210d20032802002108200542003703002004420037030020074200370300200342003703f005200a10012205290000210a2006200541086a2900003703002003200a3703a8082005103520072006290300370300200320032903a8083703f005200b10012205290000210a2006200541086a2900003703002003200a3703a80820051035200420032903a808220a370300200920072903003703002012200a37030020132006290300370300200320032903f005370398032003200c420020081b3703f8052003200d420020081b3703f00520034198036aad4280808080800484200341f0056aad428080808080028410020c010b200342f0f2bda1a7ee9cb9f90037039803200341f0056a20034198036a10e001200341f0056a200b200a10df0120034188066a200a37030020034180066a200b370300200341f8056a41063a00002003410c3a00f00541b0b4cc004100200341f0056a10d4010b200341f0056a41086a410d3a0000200341f9056a20012900003700002003419c066a200236020020034181066a200141086a29000037000020034189066a200141106a29000037000020034191066a200141186a290000370000200341063a00f00541b0b4cc004100200341f0056a10d4012000411510e80420100d010c020b200341f0056a41086a410e3a0000200341f9056a20012900003700002003419c066a200236020020034181066a200141086a29000037000020034189066a200141106a29000037000020034191066a200141186a290000370000200341063a00f00541b0b4cc004100200341f0056a10d4012000411310e8040240200741037122014103460d0020010e03020002020b2010450d010b200f10350b200341d0086a24000bfc0403027f017e057f230041d0006b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541fbf8c400ad4280808080800284100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000ba60203027f017e017f230041106b22022400200241003602082002420137030002400240024020002d00004101460d00410110332203450d02200341003a0000200220033602002002428180808010370204200041086a200210a406200235020842208621042002280204452103200228020021000c010b410110332203450d01200341013a000020022003360200200242818080801037020420002d0001210520034101410210372203450d01200320053a00012002200336020020024282808080203702042000280204210520034102410610372200450d01200020053600022002200036020020024286808080e000370204410021034280808080e00021040b200129020020042000ad841002024020030d00200010350b200241106a24000f0b103c000b130020004103360204200041a88dc5003602000b340020004182fec60036020420004100360200200041146a4101360200200041106a41849fc500360200200041086a42073702000b130020004101360204200041aca0c5003602000b3a01017f02404110103322020d001045000b20024200370008200242808084fea6dee111370000200042908080808002370204200020023602000b3400200041a2e8cb0036020420004100360200200041146a4104360200200041106a41c8a1c500360200200041086a42083702000b13002000411d360204200041d8aac5003602000b3400200041d9e3cb0036020420004100360200200041146a410e360200200041106a418c95c600360200200041086a42093702000b4d01027f230041106b220224000240410110332203450d00200341003a0000200041086a4101360200200241013602042002200336020020002002290300370200200241106a24000f0b1045000b7c01017f230041f0006b22022400200241106a4200370300200241186a4200370300200241206a4200370300200241286a4200370300200241306a4200370300200241386a4200370300200241c0006a410036020020024108360204200241086a4200370300200241003a000020002002108005200241f0006a24000b8d1802097f027e230041206b220224002002410036020820024201370300024002400240024020012d00004101460d00410110332203450d032002410136020420022003360200200341003a000020024101360208200141046a28020021042001410c6a2802002203200210770240024020030d0020022802042105200228020821060c010b2004200341306c6a2107200228020421052002280208210603402004280200210802400240200520066b4104490d00200641046a2103200228020021090c010b200641046a22032006490d05200541017422092003200920034b1b220a4100480d050240024020050d000240200a0d00410121090c020b200a103322090d010c080b200228020021092005200a460d0020092005200a10372209450d070b2002200a360204200220093602000b200920066a20083600002002200336020802400240200441086a2d00004101460d00200241003a00100240024020022802042003460d00200228020021050c010b200341016a22052003490d07200341017422062005200620054b1b22064100480d070240024020030d0041002103024020060d00410121050c020b200610332205450d0a0c010b2002280200210520032006460d0020052003200610372205450d090b20022006360204200220053602000b200520036a41003a00002002200341016a22033602082002200441096a2d00004100474107742004410a6a2d00007222063a00100240024020022802042003460d00200228020021050c010b200341016a22052003490d07200341017422092005200920054b1b22094100480d070240024020030d0041002103024020090d00410121050c020b200910332205450d0a0c010b2002280200210520032009460d0020052003200910372205450d090b20022009360204200220053602000b200520036a20063a00002002200341016a2203360208200441106a290300210b2002200441186a2903003703182002200b370310200241106a2109200228020421060c010b200241013a00100240024020022802042003460d00200228020021050c010b200341016a22052003490d06200341017422062005200620054b1b22064100480d060240024020030d0041002103024020060d00410121050c020b200610332205450d090c010b2002280200210520032006460d0020052003200610372205450d080b20022006360204200220053602000b200520036a41013a00002002200341016a2205360208200441186a290300210b200441106a290300210c024002402002280204220920056b4110490d00200341116a210320022802002108200921060c010b200541106a22032005490d06200941017422062003200620034b1b22064100480d060240024020090d00024020060d00410121080c020b200610332208450d090c010b2002280200210820092006460d0020082009200610372208450d080b20022006360204200220083602000b200820056a2205200b3700082005200c37000020022003360208200441206a290300210b2002200441286a2903003703182002200b370310200241106a21090b02400240200620036b4110490d0020022802002108200621050c010b200341106a22052003490d05200641017422082005200820054b1b22054100480d050240024020060d00024020050d00410121080c020b200510332208450d080c010b2002280200210820062005460d0020082006200510372208450d070b20022005360204200220083602000b200820036a22062009290000370000200641086a200941086a2900003700002002200341106a22063602082007200441306a2204470d000b0b200141186a290300210b2001290310210c02400240200520066b4110490d0020022802002103200521040c010b200641106a22032006490d03200541017422042003200420034b1b22044100480d030240024020050d00024020040d00410121030c020b200410332203450d060c010b2002280200210320052004460d0020032005200410372203450d050b20022004360204200220033602000b200320066a2205200b3700082005200c3700002002200641106a2209360208200141286a290300210b200141206a290300210c02400240200420096b410f4d0d00200421050c010b200941106a22052009490d03200441017422082005200820054b1b22054100480d030240024020040d00024020050d00410121030c020b200510332203450d060c010b20042005460d0020032004200510372203450d050b20022005360204200220033602000b200320096a2204200b3700082004200c3700002002200641206a2204360208200141c0006a28020021090240200520046b41034b0d00200441046a22082004490d032005410174220a2008200a20084b1b22084100480d030240024020050d00024020080d00410121030c020b200810332203450d060c010b20052008460d0020032005200810372203450d050b20022008360204200220033602000b200320046a20093600002002200641246a22033602082001290330210b2002200141386a2903003703182002200b370310200241106a21040c010b410110332203450d022002410136020420022003360200200341013a000020024101360208200141306a290300210b200141286a290300210c0240024020022802042205417f6a4110490d0020022802002103200521040c010b200541017422034111200341114b1b22044100480d0220022802002103024020052004460d0020032005200410372203450d040b20022004360204200220033602000b2003200c370001200341096a200b37000020024111360208024002402004416f6a411f4d0d00200421050c010b200441017422054131200541314b1b22054100480d02024020042005460d0020032004200510372203450d040b20022005360204200220033602000b20032001290001370011200341296a200141196a290000370000200341216a200141116a290000370000200341196a200141096a2900003700004131210420024131360208024020012d0021220641064b0d000240024002400240024002400240024020060e0700010203040506000b410021040c060b410121040c050b410221040c040b410321040c030b410421040c020b410521040c010b410621040b200220043a0010024020054131470d002003413141e20010372203450d04200241e200360204200220033602000b200320043a00314132210420024132360208200228020421050b200141c0006a290300210b2001290338210c02400240200520046b4110490d0020022802002103200521060c010b20054101742203200441106a2206200320064b1b22064100480d020240024020050d00200610332203450d050c010b2002280200210320052006460d0020032005200610372203450d040b20022006360204200220033602000b200320046a2205200b3700082005200c3700002002200441106a2209360208200141d0006a290300210b200141c8006a290300210c02400240200620096b410f4d0d00200621050c010b20064101742205200441206a2208200520084b1b22054100480d020240024020060d00200510332203450d050c010b20062005460d0020032006200510372203450d040b20022005360204200220033602000b200320096a2206200b3700082006200c3700002002200441206a2206360208200141e8006a28020021090240200520066b41034b0d0020054101742208200441246a220a2008200a4b1b22084100480d020240024020050d00200810332203450d050c010b20052008460d0020032005200810372203450d040b20022008360204200220033602000b200320066a20093600002002200441246a22033602082001290358210b2002200141e0006a2903003703182002200b370310200241106a21040b024002402002280204220620036b4110490d00200228020021050c010b200341106a22052003490d01200641017422092005200920054b1b22094100480d010240024020060d00024020090d00410121050c020b200910332205450d040c010b2002280200210520062009460d0020052006200910372205450d030b20022009360204200220053602000b200520036a22052004290000370000200541086a200441086a2900003700002002200341106a2203360208200041086a200336020020002002290300370200200241206a24000f0b103e000b103c000b4d01027f230041106b2202240002404104103322030d001045000b2002420437020420022003360200410020021077200041086a200228020836020020002002290300370200200241106a24000b130020004107360204200041ccb0c6003602000b3801017f02404110103322020d001045000b2002420037000820024280a094a58d1d370000200042908080808002370204200020023602000b2e01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241809c313600000b2e01017f02404104103322020d001045000b20004284808080c0003702042000200236020020024180a3053600000b2e01017f02404104103322020d001045000b20004284808080c0003702042000200236020020024180de343600000b340020004189fec60036020420004100360200200041146a4102360200200041106a41acbbc600360200200041086a42093702000bfc0f030b7f017e017f230041106b2202240020024100360208200242013703000240024002402001280200220341044b0d000240024002400240024020030e050001020304000b410110332203450d062002410136020420022003360200200341013a000020024101360208200128020421042001410c6a2802002203200210770240024020030d00200228020821030c010b2004200341286c6a21054100200228020822066b2107410021030340200620036a2108024002402007200228020422096a4120490d002002280200210a2009210b0c010b200841206a220a2008490d082009410174220b200a200b200a4b1b220b4100480d080240024020090d000240200b0d004101210a0c020b200b1033220a0d010c0b0b2002280200210a2009200b460d00200a2009200b1037220a450d0a0b2002200b3602042002200a3602000b200a20066a20036a220c200420036a2209290000370000200c41186a200941186a290000370000200c41106a200941106a290000370000200c41086a200941086a2900003700002002200841206a220c360208200941206a290300210d0240200b20076a41606a41074b0d00200c41086a220e200c490d08200b410174220c200e200c200e4b1b220c4100480d0802400240200b0d000240200c0d004101210a0c020b200c1033220a450d0b0c010b200b200c460d00200a200b200c1037220a450d0a0b2002200c3602042002200a3602000b200a20066a20036a41206a200d3700002002200841286a360208200741586a2107200341286a21032005200941286a470d000b200620036a21030b200141106a280200210b024002402002280204220a20036b4104490d00200228020021090c010b200341046a22092003490d06200a41017422072009200720094b1b22074100480d0602400240200a0d00024020070d00410121090c020b200710332209450d090c010b20022802002109200a2007460d002009200a200710372209450d080b20022007360204200220093602000b200920036a200b3600002002200341046a3602080c040b410110332203450d052002410136020420022003360200200341023a0000200241013602082001280204210a0240024020022802042209417f6a4104490d00200228020021030c010b200941017422034105200341054b1b220b4100480d052002280200210302402009200b460d0020032009200b10372203450d070b2002200b360204200220033602000b2003200a3600012002410536020820012802082103200141106a2802002209200210770240024020090d002002280208210b0c010b2003200941286c6a210c2002280208210b03400240024020022802042208200b6b4120490d00200b41206a21092002280200210a200821070c010b200b41206a2209200b490d072008410174220a2009200a20094b1b22074100480d070240024020080d00024020070d004101210a0c020b20071033220a450d0a0c010b2002280200210a20082007460d00200a200820071037220a450d090b200220073602042002200a3602000b200a200b6a220b2003290000370000200b41186a200341186a290000370000200b41106a200341106a290000370000200b41086a200341086a29000037000020022009360208200341206a290300210d0240200720096b41074b0d00200941086a220b2009490d0720074101742208200b2008200b4b1b220b4100480d070240024020070d000240200b0d004101210a0c020b200b1033220a450d0a0c010b2007200b460d00200a2007200b1037220a450d090b2002200b3602042002200a3602000b200a20096a200d3700002002200941086a220b360208200c200341286a2203470d000b0b200141146a280200210a0240024020022802042209200b6b4104490d00200228020021030c010b200b41046a2203200b490d05200941017422072003200720034b1b22074100480d050240024020090d00024020070d00410121030c020b200710332203450d080c010b2002280200210320092007460d0020032009200710372203450d070b20022007360204200220033602000b2003200b6a200a3600002002200b41046a3602080c030b410110332203450d042002410136020420022003360200200341033a000020024101360208200141086a290300210d0240024020022802042209417f6a4108490d00200228020021030c010b200941017422034109200341094b1b220a4100480d042002280200210302402009200a460d0020032009200a10372203450d060b2002200a360204200220033602000b2003200d370001200241093602080c020b410110332203450d032002410136020420022003360200200341043a0000200241013602082001280204210a0240024020022802042209417f6a4104490d00200228020021030c010b200941017422034105200341054b1b220b4100480d032002280200210302402009200b460d0020032009200b10372203450d050b2002200b360204200220033602000b2003200a360001200241053602080c010b410110332203450d022002410136020420022003360200200341053a0000200241013602082001280204210a0240024020022802042209417f6a4104490d00200228020021030c010b200941017422034105200341054b1b220b4100480d022002280200210302402009200b460d0020032009200b10372203450d040b2002200b360204200220033602000b2003200a360001200241053602080b20002002290300370200200041086a200241086a280200360200200241106a24000f0b103e000b103c000bb70905037f017e027f047e017f230041a0026b22022400200241c8006a2001108a052002280248210320022002280250220436028c022002200336028802200241f8006a2004ad4220862003ad84100510c20102400240200228027822040d00420021050c010b200228027c2106024002400240200241f8006a41086a28020022074110490d0020074170714110460d002007417c714120470d010b20024100360260200242013703582002410936029402200220024188026a360290022002200241d8006a36029c022002419c016a41013602002002420137028c01200241c888c20036028801200220024190026a360298012002419c026a41e88ac50020024188016a10431a200235026042208620023502588410060240200228025c450d00200228025810350b420021050c010b200441086a290000210820042900002109200441186a290000210a2004290010210b20042800202107420121050b2006450d00200410350b0240200228024c450d00200310350b02400240024002402005500d0020024188016a41186a420037030020024188016a41106a2206420037030020024188016a41086a22034200370300200242003703880141d1c4c700ad4280808080e000841001220429000021052003200441086a29000037030020022005370388012004103541e7c4c700ad4280808080e00084100122042900002105200241f8006a41086a220c200441086a2900003703002002200537037820041035200620022903782205370300200241d8006a41086a2003290300370300200241d8006a41106a2005370300200241d8006a41186a200c2903003703002002200229038801370358200241306a200241d8006a412010c001200241106a200a420041002002280234410020022802301b220320076b2204200420034b1bad22054200108408200241206a20054200200b4200108408200242004200200b42001084082002290308200229031884420052200241206a41086a2903002205200229030020022903107c7c220b200554720d0142002009200229032022057d220a200a2009562008200b7d2009200554ad7d220520085620052008511b22031b220b4200200520031b220584500d01200242f6cacda397cddbb320370340200241c0006a2001200b20054106109002200241c0016a2005370300200241b8016a200b37030020024188016a41086a41003a000020024191016a200129000037000020024199016a200141086a290000370000200241a1016a200141106a290000370000200241a9016a200141186a290000370000200241143a00880120024188016a21010c020b20004183363b0100200041086a410a360200200041046a41c1efc400360200200041026a41003a00000c020b200242f6cacda397cddbb320370338200241386a200110920220024188016a2001108a052002350290014220862002280288012203ad8410070240200228028c01450d00200310350b20024188016a41086a41013a000020024191016a200129000037000020024199016a200141086a290000370000200241a1016a200141106a290000370000200241a9016a200141186a290000370000200241143a00880120024188016a21010b41b0b4cc004100200110d401200041043a00000b200241a0026a24000bbc0505017f017e017f017e047f230041d0006b220224004182fec600ad4280808080f000842203100122042900002105200241086a200441086a29000037030020022005370300200410352003100122042900002103200241106a41086a200441086a29000037030020022003370310200410350240024002400240412010332204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a2900003700002004ad4280808080800484100422012900002103200241306a41086a200141086a2900003703002002200337033020011035200241cc006a200441206a360200200220043602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200410352002280228220641206a2201417f4c0d01200228022021070240024020010d0041002108410121040c010b200110332204450d01200121080b024002402008410f4d0d00200821090c010b200841017422094110200941104b1b22094100480d03024020080d002009103322040d010c050b20082009460d0020042008200910372204450d040b20042002290300370000200441086a200241086a2903003700000240024020094170714110460d00200921080c010b200941017422084120200841204b1b22084100480d0320092008460d0020042009200810372204450d040b20042002290310370010200441186a200241106a41086a29030037000002400240200841606a2006490d00200821090c010b2006415f4b0d03200841017422092001200920014b1b22094100480d0320082009460d0020042008200910372204450d040b200441206a20072006109d081a20002001360208200020093602042000200436020002402002280224450d00200710350b200241d0006a24000f0b1045000b1044000b103e000b103c000be9800205027f037e117f057e0c7f23002203210420034180086b4160712203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e1e000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d000b20034194036a41013602002003420137028403200341e8d4ca0036028003200341043602c4052003419cd5ca003602c0052003200341c0056a3602900320034180036a41b0b4cc00104c000b200141306a2903002105200141286a290300210620034180026a41186a200141196a29000037030020034180026a41106a200141116a29000037030020034180026a41086a200141096a29000037030020032001290001370380022002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109024020022d0000450d00200320073702e407200320013a00e307200320083a00e207200320093b01e0070c500b200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820022d00012102200320073703e007200241ff01714101470d4f200320073703e006200320013a00df06200320083a00de06200320093b01dc062003200a3a00db062003200b3a00da062003200c3b01d8062003200d3a00d7062003200e3a00d6062003200f3b01d406200320103a00d306200320113a00d206200320123b01d006200320133a00cf06200320143a00ce06200320153b01cc06200320163a00cb06200320173a00ca06200320183b01c8060240200642808084fea6dee1115441002005501b0d00200320063703c001200320053703c8012003200341c8066a3602e0072003200341c8066a36028801200320034188016a360288032003200341e0076a360284032003200341c0016a36028003200341c0056a200341c8066a20034180036a108c030240024020032802c0054101470d0020032f00c50520032d00c705411074722101200341c8056a290300210720032d00c40521020c010b410421020240200341c0056a41086a2903004201520d00200341c0056a41106a29030021072003280288012101200341b8036a200341c0056a41186a290300370300200341b0036a200737030020034180036a41086a41003a000020034189036a200129000037000020034191036a200141086a29000037000020034199036a200141106a290000370000200341a1036a200141186a290000370000200341033a00800341b0b4cc00410020034180036a10d4010b0b0240200241ff01714104470d0041d9e3cb00ad428080808090018422071001220229000021192002290008211a2002103541bbe3cb00ad4280808080f00184221b10012202290000211c2002290008211d200210352003201d3701d8012003201c3701d0012003201a3701c801200320193701c001200341106a200341c0016a412010c001200328021421012003280210210820071001220229000021072002290008211920021035201b10012202290000211a2002290008211b200210352003201b3701d8012003201a3701d001200320193701c801200320073701c00120032001410020081b220841016a36028003200341c0016aad4280808080800484220720034180036aad4280808080c0008410022003200341c8066a3602c001200341c0056a200810ed0420033502c805211920032802c005210c411810332202450d4f2002200637000020022005370008200342988080808002370284032003200236028003410120034180036a107720032802c0012102200328028003210102400240200328028403220a20032802880322096b411f4d0d00200a210b0c010b200941206a220b2009490d3f200a410174220d200b200d200b4b1b220b4100480d3f0240200a0d000240200b0d00410121010c020b200b103322010d010c520b200a200b460d002001200a200b10372201450d510b200120096a220a2002290000370000200a41186a200241186a290000370000200a41106a200241106a290000370000200a41086a200241086a2900003700002019422086200cad84200941206aad4220862001ad8410020240200b450d00200110350b024020032802c405450d00200c10350b200341cc056a20034180026a41086a290300370200200341d4056a20034180026a41106a290300370200200341dc056a20034180026a41186a290300370200200341ec056a200341c8066a41086a290300370200200341f4056a200341c8066a41106a290300370200200341fc056a200341c8066a41186a290300370200200320083602c00520032003290380023702c405200320032903c8063702e4052003200341c0056a3602ac0141d9e3cb00ad42808080809001841001220229000021192002290008211a2002103541918dc500ad4280808080b0018410012202290000211b2002290008211c200210352003201c3701d8012003201b3701d0012003201a3701c801200320193701c00120034188016a2007100510c201024002402003280288010d00410410332202450d5120034204370284032003200236028003410020034180036a1077200341b8016a20032802880336020020032003290380033703b0010c010b200341b0016a41086a20034188016a41086a28020036020020032003290388013703b0010b200341b8076a41086a200341b0016a41086a2802002202360200200320032903b0013703b807024002402002450d0020034180036a20032802b80722012002410110f1042003280280034101470d0120032802bc07450d4e200110350c4e0b4101200341b8076a107720032802ac01200341b8076a108c050c4b0b200328028403210a02402003418c036a280200220120034180036a41086a2802002209460d002002200120096b6a220241046a220b417f4c0d4002400240200b0d004100210b4101210c0c010b200b1033220c450d510b2003200c3602c8072003200b3602cc07200320023602d0072003200341c8076a36028003200a20034180036a200110f20420022001490d1f20032802d007220a2002490d2020032802c007220a2009490d2120032802c807210b20032802b807210c2003200220016b22023602d8072003200a20096b220a3602dc072002200a470d22200b20016a200c20096a2002109d081a20032802ac01200341c8076a108c0520032802d007210120032802cc07210920032802c807210220032802bc07450d4c20032802b80710350c4c0b2003200341b8076a36028003200a20034180036a200910f20420032802ac01200341b8076a108c050c4a0b2003200737027c200320023a0078200320013b0079200320014110763a007b0c510b200341f8006a410110e80420032d00784104460d4c200329027c21070c500b200141046a280200211e2002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021180240024020022d0000450d00200320073702e407200320013a00e307200320083a00e207200320093b01e007410121020c010b20022d00012102200320073703e007200241ff017141014721020b200320073701d801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320133a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c001024002400240024020020d0020034180026a41186a200341c0016a41186a29010037030020034180026a41106a200341c0016a41106a29010037030020034180026a41086a200341c0016a41086a290100370300200320032901c00137038002200341c0016a201e10ed0420034180036a20032802c001220120032802c80110cc02200341c0056a41086a22082003419c036a28020036020020032003290294033703c00502402003280290032202450d0020034180036a41086a2903002107200329038003210520034188016a41086a2008280200360200200320032903c00537038801024020032802c401450d00200110350b200341dc066a200329038801370200200341e4066a20034190016a280200360200200320053703c806200320023602d806200320073703d006200320073703c801200320053703c001200320034180026a3602e007024020052007844200510d00200320034180026a36028801200320034188016a360288032003200341e0076a360284032003200341c0016a36028003200341c0056a20034180026a20034180036a108c030240024020032802c0054101470d0020032f00c50520032d00c705411074722108200341c8056a290300210720032d00c40521010c010b410421010240200341c0056a41086a2903004201520d00200341c0056a41106a29030021072003280288012108200341b8036a200341c0056a41186a290300370300200341b0036a200737030020034180036a41086a41003a000020034189036a200829000037000020034191036a200841086a29000037000020034199036a200841106a290000370000200341a1036a200841186a290000370000200341033a00800341b0b4cc00410020034180036a10d4010b0b200141ff01714104470d030b200329039802210720032d009702210820032d009602210920032f019402210a20032d009302210b20032d009202210c20032f019002210d20032d008f02210e20032d008e02210f20032f018c02211020032d008b02211120032d008a02211220032f018802211320032d008702211420032d008602211520032f018402211620032d008302211720032d008202211820032f018002211f0240200341c8066a41186a280200220120032802dc06470d00200341d8066a20014101108a0120032802d806210220032802e00621010b200220014105746a22022007370018200220083a0017200220093a00162002200a3b00142002200b3a00132002200c3a00122002200d3b00102002200e3a000f2002200f3a000e200220103b000c200220113a000b200220123a000a200220133b0008200220143a0007200220153a0006200220163b0004200220173a0003200220183a00022002201f3b00002003200141016a3602e00620034180036a41186a20032903e00637030020034180036a41106a200341c8066a41106a29030037030020034180036a41086a200341c8066a41086a290300370300200320032903c80637038003200341c0056a201e10ed0420032802c0052102200320032802c8053602c401200320023602c00120034180036a200341c0016a108d03024020032802c405450d00200210350b024020034194036a28020041ffffff3f71450d0020032802900310350b200341043a00c8070c500b024020032802c401450d00200110350b200341c8076a410210e80420032d00c8074104460d4f0c020b200341023a00c8070c020b200320073702cc07200320013a00c807200320083b00c907200320084110763a00cb0720032802dc0641ffffff3f71450d00200210350b20032902cc0721070b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c500b200141046a2802002108200341c0056a41206a200141286a290300370300200341c0056a41186a200141206a290300370300200341c0056a41106a200141186a290300370300200341c0056a41086a200141106a2903003703002003200141086a2903003703c0050240024002400240024020022d00000d0020022d000141ff01714101460d010b200341023a0080020c010b200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211e20032002411a6a2901003703e006200320013a00df06200320093a00de062003200a3b01dc062003200b3a00db062003200c3a00da062003200d3b01d8062003200e3a00d7062003200f3a00d606200320103b01d406200320113a00d306200320123a00d206200320133b01d006200320143a00cf06200320153a00ce06200320163b01cc06200320173a00cb06200320183a00ca062003201e3b01c80620034180036a41206a200341c0056a41206a29030037030020034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c0053703800320034180026a200341c8066a200820034180036a108d0520032d0080024104460d0120032902840221070b20032802800221032000411c6a2007370200200041186a2003360200420121070c010b420021070b200042003703080c4f0b200141046a2802002108200341c0056a41206a200141286a290300370300200341c0056a41186a200141206a290300370300200341c0056a41106a200141186a290300370300200341c0056a41086a200141106a2903003703002003200141086a2903003703c00520022d00000d1d20022d000141ff01714101470d1d2002411a6a2901002107200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021182003200241096a2d00003a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c0012003200e3a00cf012003200f3a00ce01200320103b01cc01200320113a00cb01200320123a00ca01200320133b01c801200320013a00d701200320093a00d6012003200a3b01d4012003200b3a00d3012003200c3a00d2012003200d3b01d001200320073701d801200341c8066a41186a2007370300200341c8066a41106a20032901d001370300200341c8066a41086a20032901c801370300200320032901c0013703c80620034180036a200341c8066a108e050240024020032d00800322024102460d0020024101470d0020034180036a41186a2d0000210220034197036a2d0000210120034195036a2f0000210920034194036a2d0000210a20034193036a2d0000210b20034191036a2f0000210c20034180036a41106a2d0000210d2003418f036a2d0000210e2003418d036a2f0000210f2003418c036a2d000021102003418b036a2d0000211120034189036a2f0000211220034180036a41086a2d0000211320032d008703211420032f008503211520032d008403211620032d008303211720032d008203211820032d008103211e200320034199036a29000037039802200320023a009702200320013a009602200320093b0194022003200a3a0093022003200b3a0092022003200c3b0190022003200d3a008f022003200e3a008e022003200f3b018c02200320103a008b02200320113a008a02200320123b018802200320133a008702200320143a008602200320153b018402200320163a008302200320173a008202200320183a0081022003201e3a00800220034180036a41206a200341c0056a41206a29030037030020034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c0053703800320034188016a20034180026a200820034180036a108d050c010b20034188016a410310e8040b024020032d0088014104460d00200329028c0121070c440b420021070c440b0240024020022d0000417f6a220841024b0d00200141046a2802002101024020080e03000102000b200241046a2d00000d00200241086a28020041036c2002410c6a2802004101744f0d010b200341023a00e0070c420b20034188016a200110f50420034180036a200328028801220820032802900110b30220032d0080032102200341c0056a20034180036a41017241e700109d081a0240024020024102460d00200341c8066a200341c0056a41e700109d081a0240200328028c01450d00200810350b20034180036a200341c8066a41e700109d081a2002450d0120034180026a411410e8040c410b0240200328028c01450d00200810350b20034180026a411410e8040c400b20034184026a20034187036a41e000109d081a20032f01bc02210220032d00be02210820032d00bf02210920032f01c002210a20032d00c202210b20032d00c302210c20032f01c402210d20032d00c602210e20032d00c702210f20032f01c802211020032d00ca02211120032d00cb02211220032f01cc02211320032d00ce02211420032d00cf02211520032f01d002211620032d00d202211720032d00d3022118200320032902d402220737039803200320183a009703200320173a009603200320163b019403200320153a009303200320143a009203200320133b019003200320123a008f03200320113a008e03200320103b018c032003200f3a008b032003200e3a008a032003200d3b0188032003200c3a0087032003200b3a0086032003200a3b018403200320093a008303200320083a008203200320023b018003200341c0056a20034180036a108f05200341186a20032802c005221f20032802c80541b0b4cc0041004100108a022003280218211e024020032802c405450d00201f10350b0240201e4101460d002003200737039803200320183a009703200320173a009603200320163b019403200320153a009303200320143a009203200320133b019003200320123a008f03200320113a008e03200320103b018c032003200f3a008b032003200e3a008a032003200d3b0188032003200c3a0087032003200b3a0086032003200a3b018403200320093a008303200320083a008203200320023b018003200341c0056a20034180036a108f0520032802c005210220033502c8052107200341013a00800320074220862002ad8420034180036aad428080808010841002024020032802c405450d00200210350b2003418c036a200136020020034188036a41063a0000200341063a00800341b0b4cc00410020034180036a10d40120034180036a200110f5042003350288034220862003280280032202ad8410070240200328028403450d00200210350b200341043a00e0070c490b200341e0076a410510e8040c400b200341d8056a200141196a290000370300200341d0056a200141116a290000370300200341c8056a200141096a290000370300200320012900013703c00502400240024020022d0000417f6a220141024b0d00024020010e03000102000b200241086a2802004101742002410c6a280200490d00200241046a28020041ff0171450d010b200341023a0080020c010b41d9e3cb00ad4280808080900184221a1001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341286a200341c0016a412041b0b4cc0041004100108a020240024020032802284101460d0020034180036a41186a2201200341c0056a41186a29030037030020034180036a41106a2208200341c0056a41106a29030037030020034180036a41086a2209200341c0056a41086a290300370300200320032903c00537038003201a100122022d000f210a20022d000e210b20022f000c210c20022d000b210d20022d000a210e20022f0008210f20022d0007211020022d0006211120022f0004211220022d0003211320022d0002211420022f000021152002103541b8a3c600ad428080808090018410012202290008210720022d0007211620022d0006211720022f0004211820022d0003211e20022d0002211f20022f0000212020021035412010332202450d4b2002200329038003370000200241186a2001290300370000200241106a2008290300370000200241086a2009290300370000412010332201450d4b20012002290000370000200141186a2208200241186a290000370000200141106a2209200241106a290000370000200141086a2221200241086a2900003700002002103541c00010332202450d4b20022007370018200220163a0017200220173a0016200220183b00142002201e3a00132002201f3a0012200220203b00102002200a3a000f2002200b3a000e2002200c3b000c2002200d3a000b2002200e3a000a2002200f3b0008200220103a0007200220113a0006200220123b0004200220133a0003200220143a0002200220153b0000200241386a2008290000370000200241306a2009290000370000200241286a2021290000370000200220012900003700202001103520034180036a200241c00010cd022003280280032109200329038803210720032802840321012002103502402001450d0020034180036a41186a420037030020034180036a41106a220a420037030020034180036a41086a22024200370300200342003703800341d1c4c700ad4280808080e000841001220829000021052002200841086a29000037030020032005370380032008103541e7c4c700ad4280808080e00084100122082900002105200341e0076a41086a220b200841086a290000370300200320053703e00720081035200a20032903e0072205370300200341c8066a41086a2002290300370300200341c8066a41106a2005370300200341c8066a41186a200b29030037030020032003290380033703c806200341206a200341c8066a412010c00102402003280224410020032802201b20094f0d0020034180026a410710e804200742ffffff3f83500d03200110350c030b200742ffffff3f83500d00200110350b20034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c00537038003200341003a00a00341d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341203602cc062003200341c0016a3602c80620034180036a200341c8066a109005200341043a0080020c4a0b20034180026a410610e8040b20032d0080024104460d4820032902840221070b20032802800221032000411c6a2007370200200041186a200336020020004200370308420121070c4c0b200341c0056a41186a200141196a290000370300200341d0056a200141116a290000370300200341c0056a41086a200141096a290000370300200320012900013703c0050240024020022d0000417f6a220141024b0d00024020010e03000102000b200241046a2d00000d00200241086a2802004102742002410c6a28020041036c4f0d010b20004200370308200041186a4102360200420121070c4c0b20034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c00537038003200341023a00a00341d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341203602cc062003200341c0016a3602c80620034180036a200341c8066a1090050c460b200341c0056a41186a200141196a290000370300200341d0056a200141116a290000370300200341c8056a200141096a290000370300200320012900013703c0050240024020022d0000417f6a220141024b0d00024020010e03000102000b200241086a2802002002410c6a280200490d00200241046a28020041ff0171450d010b20004200370308200041186a4102360200420121070c4b0b20034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c00537038003200341013a00a00341d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341203602cc062003200341c0016a3602c80620034180036a200341c8066a1090050c450b200141286a280200210d200141246a280200210820034188016a41086a220a2002411c6a2800003602002003200241146a290000370388012002410c6a280000210b200241086a280000210c200241046a280000210920022d0000210220034198026a200141196a29000037030020034190026a200141116a29000037030020034180026a41086a200141096a29000037030020032001290001370380020240024020084180a305490d00200341e0076a41086a200a28020036020020032003290388013703e00720024102470d01200941ff01710d3941002109200c41036c200b4101744f0d3a0c380b2002417e6a220241014b0d3820020e023739370b20024103470d370c380b20034198026a200141196a29000037030020034180026a41106a200141116a29000037030020034180026a41086a200141096a290000370300200320012900013703800220022d00004102470d18200241236a2d00002108200241216a2f000021092002411f6a2d0000210a2002411d6a2f0000210b2002410f6a2d0000210c2002410d6a2f0000210d2002410b6a2d0000210e200241096a2f0000210f200241076a2d00002110200241056a2f00002111200241246a2802002112200241206a2d00002113200241116a2900002107200241106a2d000021142002410c6a2d00002115200241086a2d00002116200241046a2d000021012003200241196a2800003602e807200320073703e00720014101470d182003200920084110747222023b01dc05200341de056a20024110763a00002003200b200a4110747222023b01d805200341da056a20024110763a00002003200d200c4110747222023b01c805200341c0056a410a6a20024110763a000020032007a722023b01cc05200341ce056a20024110763a0000200320123a00df05200320133a00db05200320032902e4073703d005200320143a00cb05200320153a00c705200320163a00c305200320074218883c00cf052003200f200e4110747222023b01c405200320024110763a00c6052003201120104110747222023b01c005200320024110763a00c20541d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c00120034180036a200341c0016a10c00202400240024020032d00a0034103460d0020032903800321072003290388032105200329039003210620032003290398033703980320032006370390032003200537038803200320073703800320034180026a20034180036a412010a008450d01200341c8076a410210e8040c020b200341c8076a410a10e8040c010b200341c8066a20034180026a10910520034180036a20032802c806220220032802d00610cd022003290388032107200328028403210e024020032802cc06450d00200210350b0240200e0d004100210f200341003602900120034201370388014101210e0c330b2003200e360288012003200737028c012007a7210f41002102024002402007422088a7220a41014b0d00200a0e023401340b200a210103402001410176220820026a22092002200e20094105746a200341c0056a412010a0084101481b2102200120086b220141014b0d000b0b0240200e20024105746a200341c0056a412010a0082201450d0020034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c005370380032001411f7620026a2208200a4b0d1b20034180036a21010c340b200341c8076a410b10e804200f41ffffff3f71450d00200e10350b20032d00c8074104460d4320032902cc0721070c300b20022d000120022d0000410047720d192003418c036a200141046a280200220236020020034188036a41063a0000200341063a00800341b0b4cc00410020034180036a10d40120034180036a200210f5042003350288034220862003280280032202ad841007200328028403450d42200210350c420b20022d000120022d0000410047720d19200141046a2802002102410c10332201450d4220012002360008200142e4cab5fbb6ccdcb0e3003700004189fec600ad4280808080900184100122022900002107200341c8066a41086a200241086a290000370300200320073703c8062002103541b489c500ad4280808080e00084100122022900002107200341c0056a41086a200241086a290000370300200320073703c00520021035411010332202450d4220034210370284032003200236028003410c20034180036a107702400240200328028403220a20032802880322086b410c490d002003280280032102200a21090c010b2008410c6a22022008490d32200a41017422092002200920024b1b22094100480d3202400240200a0d00024020090d00410121020c020b200910332202450d460c010b2003280280032102200a2009460d002002200a200910372202450d450b200320093602840320032002360280030b200220086a220a2001290000370000200a41086a200141086a28000036000020032008410c6a2208ad4220862002ad841003220a29000037038801200a103520034180036a410c6a200220086a3602002003200236028803200320034188016a41086a36028403200320034188016a3602800320034180026a20034180036a107b02402009450d00200210350b200328028802220b41206a2208417f4c0d32200328028002210c0240024020080d0041002109410121020c010b200810332202450d43200821090b024002402009410f4d0d002009210a0c010b2009410174220a4110200a41104b1b220a4100480d32024020090d00200a10332202450d450c010b2009200a460d0020022009200a10372202450d440b200220032903c806370000200241086a200341c8066a41086a29030037000002400240200a4170714110460d00200a21090c010b200a41017422094120200941204b1b22094100480d32200a2009460d002002200a200910372202450d440b200220032903c005370010200241186a200341c0056a41086a29030037000002400240200941606a200b490d002009210a0c010b200b415f4b0d322009410174220a2008200a20084b1b220a4100480d322009200a460d0020022009200a10372202450d440b200241206a200c200b109d081a0240200328028402450d00200c10350b20034180036a2002200810da0141012109024002402003280280034101460d00410021090c010b2008ad4220862002ad84100720032902840321070b0240200a450d00200210350b2001103502402009450d00200341c8066a2007a710c90420034180036a20032802c806220a20032802d006220110b8022003280280032202410820021b210902402007422088a72208200329028403420020021b2207422088a722024f0d002009200841d0026c6a220b450d002009200841d0026c6a220141bc026a210a024020012802bc024102460d00024020012802b002220c450d002009200841d0026c6a41b4026a280200450d00200c10350b200b10ba020b200b20034180036a41bc02109d081a200a4102360200200141c8026a200341c8056a290300370300200120032903c0053703c00220032802d006210120032802c806210a0b0240024020090d002001ad422086200aad8410070c010b20034180036a2009200210d9042001ad422086200aad842003350288034220862003280280032201ad8410020240200328028403450d00200110350b02402002450d00200241d0026c21012009210203400240200241bc026a2802004102460d000240200241b0026a2802002208450d00200241b4026a280200450d00200810350b200210bb020b200241d0026a2102200141b07d6a22010d000b0b2007a72202450d00200241d0026c450d00200910350b024020032802cc06450d00200a10350b200341043a00c0010c420b200341c0016a410210e80420032d00c0014104460d4120032902c40121070c2d0b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021180240024020022d0000450d00200320073702e407200320013a00e307200320083a00e207200320093b01e007410121020c010b20022d00012102200320073703e007200241ff017141014721020b200320073701d801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320133a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c00120020d19200341c0016a20034188016a10920520034180036a20032802c001221e20032802c801222010c402200341a0036a2d000021020240024020032d008003221f4102470d00200341023a0080020c010b200320032d0083033a008302200320032f0081033b0081022003200329028403370284022003201f3a008002200320034198036a2903003703980220032003418c036a29020037028c02200320034194036a280200360294020b200320013a00df06200320083a00de06200320093b01dc062003200a3a00db062003200b3a00da062003200c3b01d8062003200d3a00d7062003200e3a00d6062003200f3b01d406200320103a00d306200320113a00d206200320123b01d006200320133a00cf06200320143a00ce06200320153b01cc06200320163a00cb06200320173a00ca06200320183b01c806200320073703e00620034198036a20032903980237030020034180036a41206a20023a0000200341023a00c0052003200329039002370390032003200329038802370388032003200329038002220537038003200320032903d80537039802200320032903d00537039002200320032903c80537038802200320032903c00537038002024002402005a7410371417f6a220141014b0d0041192102024020010e020002000b410c21020c010b411a210220034180036a410172200341c8066a412010a0080d00200320032903c80637008102200341013a0080022003200341df066a290000370098022003200341d8066a290300370091022003200341d0066a290300370089022003200329039802370398032003200329039002370390032003200329038802370388032003200329038002220537038003024002402005a7220241ff01714102470d002020ad422086201ead8410070c010b410110332201450d44200120023a000020014101412110372202450d44200220032900810337000120022007423888a73a0020200241186a200329009803370000200241116a200329009103370000200241096a2003290089033700002020ad422086201ead842002ad42808080809004841002200210350b412621020b024020032802c401450d00201e10350b024020024126470d00200341043a00c8070c410b200341c8076a200210e80420032d00c8074104460d4020032902cc0721070c2b0b20022d00000d1920022d000141ff01714101470d19200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211820032002411a6a2901003703d805200320013a00d705200320083a00d605200320093b01d4052003200a3a00d3052003200b3a00d2052003200c3b01d0052003200d3a00cf052003200e3a00ce052003200f3b01cc05200320103a00cb05200320113a00ca05200320123b01c805200320133a00c705200320143a00c605200320153b01c405200320163a00c305200320173a00c205200320183b01c005200341c8066a200341c0056a10920520034180036a20032802c806220220032802d006220110c402024020032d0080034102460d00200341c0056a1099020b2001ad4220862002ad84100720032802cc06450d3f200210350c3f0b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021180240024020022d0000450d00200320073702e407200320013a00e307200320083a00e207200320093b01e007410121020c010b20022d00012102200320073703e007200241ff017141014721020b200320073701d801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320133a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c00120020d19200341c0016a20034188016a10920520034180036a20032802c001221e20032802c801222010c402200341a0036a2d000021020240024020032d008003221f4102470d00200341023a0080020c010b200320032d0083033a008302200320032f0081033b0081022003200329028403370284022003201f3a008002200320034198036a2903003703980220032003418c036a29020037028c02200320034194036a280200360294020b200320013a00df06200320083a00de06200320093b01dc062003200a3a00db062003200b3a00da062003200c3b01d8062003200d3a00d7062003200e3a00d6062003200f3b01d406200320103a00d306200320113a00d206200320123b01d006200320133a00cf06200320143a00ce06200320153b01cc06200320163a00cb06200320173a00ca06200320183b01c806200320073703e00620034198036a20032903980237030020034180036a41206a20023a0000200341023a00c0052003200329039002370390032003200329038802370388032003200329038002220537038003200320032903d80537039802200320032903d00537039002200320032903c80537038802200320032903c00537038002411b210202402005a741ff01714101470d00410d210220034180036a410172200341c8066a412010a0080d00200320032903c80637008102200341003a0080022003200341df066a290000370098022003200341d8066a290300370091022003200341d0066a290300370089022003200329039802370398032003200329039002370390032003200329038802370388032003200329038002220537038003024002402005a7220241ff01714102470d002020ad422086201ead8410070c010b410110332201450d42200120023a000020014101412110372202450d42200220032900810337000120022007423888a73a0020200241186a200329009803370000200241116a200329009103370000200241096a2003290089033700002020ad422086201ead842002ad42808080809004841002200210350b412621020b024020032802c401450d00201e10350b024020024126470d00200341043a00c8070c3f0b200341c8076a200210e80420032d00c8074104460d3e20032902cc0721070c280b200141306a2903002107200141286a2903002105200141216a2d00002108200341c8066a41186a200141196a290000370300200341c8066a41106a200141116a290000370300200341c8066a41086a200141096a290000370300200320012900013703c8060240024020022d00000d0020022d000141ff01714101470d002002411a6a2901002106200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021182003200241096a2d00003a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c0012003200e3a00cf012003200f3a00ce01200320103b01cc01200320113a00cb01200320123a00ca01200320133b01c801200320013a00d701200320093a00d6012003200a3b01d4012003200b3a00d3012003200c3a00d2012003200d3b01d001200320063701d801200341c0056a41186a2006370300200341c0056a41106a20032901d001370300200341c0056a41086a20032901c801370300200320032901c0013703c00520034180036a41186a200341c8066a41186a29030037030020034180036a41106a200341c8066a41106a29030037030020034180036a41086a200341c8066a41086a290300370300200320032903c8063703800320034180026a200341c0056a20034180036a20082005200710930520032d00800222024104460d3f20032f00810220032d00830241107472210120032902840221070c010b410221020b200042003703082000411c6a2007370200200041186a2001410874200272360200420121070c420b0240024020022d00000d0020022d000141ff01714101470d002002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f010021172003200241096a2d00003a00c701200320133a00c601200320143b01c401200320153a00c301200320163a00c201200320173b01c0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d001200320073701d80120034198036a200737030020034180036a41106a20032901d00137030020034188036a20032901c801370300200320032901c00137038003200341c0056a20034180036a10940520032d00c00522024104460d3e20032f00c10520032d00c30541107472210120032902c40521070c010b410221020b200042003703082000411c6a2007370200200041186a2001410874200272360200420121070c410b024020022d000120022d000041004772450d0020004200370308200041186a4102360200420121070c410b41d9e3cb00ad4280808080900184100122022900002107200229000821052002103541918dc500ad4280808080b001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341c0016aad428080808080048410070c3b0b200141086a2802002108200141046a280200210920022d00000d1620022d000141ff01714101470d162001410c6a2802002101200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d0000211e200241046a2d0000211f200241026a2f0100212020032002411a6a2901003703d8012003200a3a00d7012003200b3a00d6012003200c3b01d4012003200d3a00d3012003200e3a00d2012003200f3b01d001200320103a00cf01200320113a00ce01200320123b01cc01200320133a00cb01200320143a00ca01200320153b01c801200320163a00c701200320173a00c601200320183b01c4012003201e3a00c3012003201f3a00c201200320203b01c0012001ad22194220862009ad84100922022900002107200241086a2900002105200241106a290000210620034180026a41186a200241186a29000037030020034180026a41106a200637030020034180026a41086a200537030020032007370380022002103520034180036a20034180026a10ee04200341d8006a200328028003220a20032802880341b0b4cc0041004100108a02200328025821020240200328028403450d00200a10350b20024101460d17200341c8006a201942004280a094a58d1d42001084082003200341d0006a29030022073703d0062003200329034822053703c8062003200341c0016a3602c807024002402001450d002003200341c0016a3602e0072003200341e0076a360288032003200341c8076a360284032003200341c8066a36028003200341c0056a200341c0016a20034180036a108c030240024020032802c0054101470d0020032f00c50520032d00c70541107472210a200341c8056a290300210620032d00c40521020c010b410421020240200341c0056a41086a2903004201520d00200341c0056a41106a290300210620032802e007210a200341b8036a200341c0056a41186a290300370300200341b0036a200637030020034180036a41086a41003a000020034189036a200a29000037000020034191036a200a41086a29000037000020034199036a200a41106a290000370000200341a1036a200a41186a290000370000200341033a00800341b0b4cc00410020034180036a10d4010b0b200241ff01714104470d010b20034180036a41186a420037030020034180036a41106a220b420037030020034180036a41086a22024200370300200342003703800341d1c4c700ad4280808080e000841001220a29000021062002200a41086a2900003703002003200637038003200a103541e7c4c700ad4280808080e000841001220a2900002106200341e0076a41086a220c200a41086a290000370300200320063703e007200a1035200b20032903e0072206370300200341c8066a41086a2002290300370300200341c8066a41106a2006370300200341c8066a41186a200c29030037030020032003290380033703c806200341c0006a200341c8066a412010c0012003280244210a2003280240210b200341c0056a41186a20034180026a41186a220c290300370300200341c0056a41106a20034180026a41106a220d290300370300200341c0056a41086a20034180026a41086a220e29030037030020032003290380023703c005200341c8036a2007370300200341c0036a200537030020034189036a220f200341c0016a41086a221029030037000020034191036a2211200341c0016a41106a221229030037000020034199036a2213200341c0016a41186a2214290300370000200341b4036a4100360200200341b0036a200a4100200b1b360200200341ac036a2001360200200341a8036a2008360200200341a4036a2009360200200341013a008003200320032903c00137008103200341c0056a20034180036a109505200341d8036a2007370300200341d0036a20053703002002410b3a0000200f2003290380023700002011200e2903003700002013200d290300370000200341a1036a200c290300370000200341a9036a20032903c001370000200341b1036a2010290300370000200341b9036a2012290300370000200341c1036a2014290300370000200341063a00800341b0b4cc00410020034180036a10d401200341043a0088010c3b0b2003200637028c01200320023a0088012003200a3b0089012003200a4110763a008b010c230b200141086a2802002108200141046a280200210902400240024020022d00000d0020022d000141ff01714101470d002001410c6a2802002101200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d0000211e200241046a2d0000211f200241026a2f0100212020032002411a6a2901003701d8012003200a3a00d7012003200b3a00d6012003200c3b01d4012003200d3a00d3012003200e3a00d2012003200f3b01d001200320103a00cf01200320113a00ce01200320123b01cc01200320133a00cb01200320143a00ca01200320153b01c801200320163a00c701200320173a00c601200320183b01c4012003201e3a00c3012003201f3a00c201200320203b01c0012001ad4220862009ad84100922022900002107200241086a2900002105200241106a290000210620034180026a41186a200241186a29000037030020034180026a41106a200637030020034180026a41086a2005370300200320073703800220021035200341c0056a20034180026a10ee0420034180036a20032802c005220a20032802c80510d20220032802c4052102024002400240024020032d008003220b4102460d00200341a8036a280200210c200341a4036a280200210d200335028403210702402002450d00200a10350b200b450d014201210542801e2107200c450d02200d10350c020b02402002450d00200a10350b411021020c020b200742208642801e842107420021050b410f21022005200784a741ff01714101470d030b20034188016a200210e8040c010b200341023a0088010b02402008450d00200910350b20032d0088014104460d3a20032802880121022000411c6a200329028c01370200200041186a200236020020004200370308420121070c3f0b20034180036a41186a420037030020034180036a41106a220b420037030020034180036a41086a22024200370300200342003703800341d1c4c700ad4280808080e000841001220a29000021052002200a41086a2900003703002003200537038003200a103541e7c4c700ad4280808080e000841001220a2900002105200341e0076a41086a220c200a41086a290000370300200320053703e007200a1035200b20032903e0072205370300200341c8066a41086a2002290300370300200341c8066a41106a2005370300200341c8066a41186a200c29030037030020032003290380033703c806200341e0006a200341c8066a412010c0012003280264210a2003280260210b200341c0056a41186a20034180026a41186a220c290300370300200341c0056a41106a20034180026a41106a220d290300370300200341c0056a41086a20034180026a41086a220e29030037030020032003290380023703c005200341c8036a4200370300200341c0036a420037030020034189036a220f200341c0016a41086a221029010037000020034191036a2211200341c0016a41106a221229010037000020034199036a2213200341c0016a41186a2214290100370000200341b8036a20074220883e0200200341b4036a4101360200200341b0036a200a4100200b1b360200200341ac036a2001360200200341a8036a2008360200200341a4036a2009360200200341013a008003200320032901c00137008103200341c0056a20034180036a109505200341d8036a4200370300200341d0036a42003703002002410b3a0000200f2003290380023700002011200e2903003700002013200d290300370000200341a1036a200c290300370000200341a9036a20032901c001370000200341b1036a2010290100370000200341b9036a2012290100370000200341c1036a2014290100370000200341063a00800341b0b4cc00410020034180036a10d401200341043a0088010c390b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021180240024020022d0000450d00200320073702e407200320013a00e307200320083a00e207200320093b01e007410121020c010b20022d00012102200320073703e007200241ff017141014721020b200320073701d801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320133a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c0010240024020020d0020034180026a41186a200341c0016a41186a29010037030020034180026a41106a200341c0016a41106a29010037030020034180026a41086a200341c0016a41086a290100370300200320032901c00137038002200341c0056a20034188016a10ee0420034180036a20032802c005220120032802c80510d20220032802c40521020240024020032d00800322084102460d00200341c8036a2903002105200341c0036a2903002106200341b8036a2802002122200341b4036a2802002121200341b0036a280200210a200341a8036a280200210b200341a4036a280200212020034199036a290000210720034180036a41186a2d0000210c20034197036a2d0000210d20034195036a2f0000210e20034194036a2d0000210f20034193036a2d0000211020034191036a2f0000211120034180036a41106a2d000021122003418f036a2d000021132003418d036a2f000021142003418c036a2d000021152003418b036a2d0000211620034189036a2f0000211720034180036a41086a2d00002118200328028403210920032d008303211e20032f008103211f02402002450d00200110350b2008450d0120094118762102200941087621010240200b450d00202010350b200320073703d8052003200c3a00d7052003200d3a00d6052003200e3b01d4052003200f3a00d305200320103a00d205200320113b01d005200320123a00cf05200320133a00ce05200320143b01cc05200320153a00cb05200320163a00ca05200320173b01c805200320183a00c705200320023a00c605200320013b01c405200320093a00c3052003201e3a00c2052003201f3b01c00520034180036a41186a420037030020034180036a41106a2208420037030020034180036a41086a22024200370300200342003703800341d1c4c700ad4280808080e000841001220129000021072002200141086a29000037030020032007370380032001103541e7c4c700ad4280808080e00084100122012900002107200341e0076a41086a2209200141086a290000370300200320073703e00720011035200820032903e0072207370300200341c8066a41086a2002290300370300200341c8066a41106a2007370300200341c8066a41186a200929030037030020032003290380033703c806200341e8006a200341c8066a412010c001411121020240200328026c410020032802681b2201200a4180de34410020034180026a200341c0056a412010a0081b6a41809c316a490d002021450d0441122102200120224b0d040b200341c8076a200210e8040c230b2002450d00200110350b200341c8076a411310e8040c210b200341023a00c8070c210b20034180036a200341c0056a20034180026a20062005410010ef0220034180036a20034188016a10ee042003350288034220862003280280032202ad8410070240200328028403450d00200210350b20034180036a41086a410f3a000020034189036a200329038801370000200341a9036a20032903c00537000020034191036a20034188016a41086a29030037000020034199036a20034188016a41106a290300370000200341a1036a20034188016a41186a290300370000200341b1036a200341c0056a41086a290300370000200341b9036a200341c0056a41106a290300370000200341c1036a200341c0056a41186a290300370000200341063a008003200341f0036a2006370300200341f8036a2005370300200341e1036a20034180026a41186a290300370000200341d9036a20034180026a41106a290300370000200341d1036a20034180026a41086a290300370000200341c9036a20032903800237000041b0b4cc00410020034180036a10d401200341043a00c8070c380b20034180026a41186a200141196a29000037030020034190026a200141116a29000037030020034188026a200141096a29000037030020032001290001370380022002411a6a2901002107024020022d0000450d00200241166a2f01002101200241186a2d00002108200241196a2d00002102200320073702e407200320023a00e307200320083a00e207200320013b01e0070c1e0b20022d00012102200320073703e007200241ff01714101470d1d200341c0016a20034180026a10960520034180036a20032802c001220920032802c801220a10c90220032d0080032102200341c8066a20034180036a41017241ef00109d081a0240024020024102470d00200341d0056a4200370300200341d8056a4200370300200341e0056a4200370300200341e8056a4200370300200341f0056a4200370300200341f8056a42003703004100210220034180066a4100360200200341083602c405200341c0056a41086a4200370300200341003a00c0050c010b200320023a00c005200341c0056a410172200341c8066a41ef00109d081a200241014621020b20034180036a41186a420037030020034180036a41106a220b420037030020034180036a41086a22014200370300200342003703800341d1c4c700ad4280808080e000841001220829000021072001200841086a29000037030020032007370380032008103541e7c4c700ad4280808080e00084100122082900002107200341e0076a41086a220c200841086a290000370300200320073703e00720081035200b20032903e0072207370300200341c8066a41086a2001290300370300200341c8066a41106a2007370300200341c8066a41186a200c29030037030020032003290380033703c806200341f0006a200341c8066a412010c001024020034198066a200341f0056a20021b22012802102003280274410020032802701b4b0d0020014200370300200141106a4100360200200141086a42003703000b024002402002450d00200341f0056a2903002106200341e8056a29030021190c010b200341f8056a290300210620032903f0052119200341cc056a28020041306c2201450d0020032802c40541206a21020340200241706a22082903002105200841086a29030021070240200241686a2d00004101470d00427f2007200241086a2903007c200520022903007c221a2005542208ad7c22052008200520075420052007511b22081b2107427f201a20081b21050b200620072005201954200720065420072006511b22081b21062019200520081b2119200241306a2102200141506a22010d000b0b20034180036a200341c0056a41f000109d081a0240024020032d00800322024102470d00200aad4220862009ad8410070c010b200341c8066a20034180036a108005200aad4220862009ad8420033502d00642208620032802c8062201ad841002024020032802cc06450d00200110350b20020d0020034188036a2802002202450d00200241306c450d0020032802840310350b024020032802c401450d00200910350b02402019200684500d00200342e4cab5fbb6ccdcb0e3003703800320034180036a20034180026a2019200641021090020c380b200342e4cab5fbb6ccdcb0e3003703800320034180036a20034180026a1092020c370b20022d00000d1420022d000141ff01714101470d14200141196a2900002105200141186a2d00002109200141176a2d0000210a200141156a2f0000210b200141146a2d0000210c200141136a2d0000210d200141116a2f0000210e200141106a2d0000210f2001410f6a2d000021102001410d6a2f000021112001410c6a2d000021122001410b6a2d00002113200141096a2f00002114200141086a2d00002115200141076a2d00002116200141056a2f00002117200141046a2d00002118200141036a2d0000211e20012f00012101200241196a3100002106200241186a3100002119200241166a330100211a200241156a310000211b200241146a310000211c200241126a330100211d200241116a2d00002108200241106a2d0000211f2002410e6a2f010021202002410d6a2d000021212002410c6a2d000021222002410a6a2f01002123200241096a2d00002124200241086a2d00002125200241066a2f01002126200241056a2d00002127200241046a2d00002128200241026a2f01002129200341de056a2002411a6a29010022074230883c0000200341ce056a201f3a0000200341ca056a20223a000020032007a722023b01d805200341da056a20024110763a0000200320203b01cc05200320233b01c805200320253a00c605200320263b01c405200320283a00c205200320293b01c005200320083a00cf05200320213a00cb05200320243a00c705200320273a00c305200320074220883d01dc05200320074238883c00df05200320074218883c00db052003201d201c42108684201b42188684201a422086842019423086842006423886843703d005200341c8066a200341c0056a10920520034180036a20032802c806220820032802d006221f10c4020240024020032d0080034102460d0020032003290081033701c001200320034199036a2900003701d801200320034189036a2900003701c801200320034191036a2900003701d00120014180fe037141087621020c010b20014180fe03714108762102200341c0056a108d020b200320153a00c701200320163a00c601200320173b01c401200320183a00c3012003201e3a00c20120032002410874200141ff0171723b01c0012003200f3a00cf01200320103a00ce01200320113b01cc01200320123a00cb01200320133a00ca01200320143b01c801200320093a00d7012003200a3a00d6012003200b3b01d4012003200c3a00d3012003200d3a00d2012003200e3b01d001200320053701d80120034198036a200537030020034190036a20032901d00137030020034180036a41086a20032901c801370300200320032901c00137038003410110332202450d38200241003a000020024101412110372202450d382002200329038003370001200241196a20034198036a290300370000200241116a20034190036a290300370000200241096a20034188036a290300370000201fad4220862008ad842002ad428080808090048410022002103520032802cc06450d36200810350c360b0240024002400240024020022d00000d0020022d000141ff01714101460d010b200341023a00c0050c010b200141046a2802002101200241196a2d00002108200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211e20032002411a6a29010037039803200320083a009703200320093a0096032003200a3b0194032003200b3a0093032003200c3a0092032003200d3b0190032003200e3a008f032003200f3a008e03200320103b018c03200320113a008b03200320123a008a03200320133b018803200320143a008703200320153a008603200320163b018403200320173a008303200320183a0082032003201e3b018003200341c0056a20034180036a2001410010970520032d00c0054104460d0120032902c40521070b20032802c00521032000411c6a2007370200200041186a2003360200420121070c010b420021070b200042003703080c3a0b200141246a2802002108200341c0056a41186a200141196a290000370300200341c0056a41106a200141116a290000370300200341c0056a41086a200141096a290000370300200320012900013703c0050240024020022d00000d0020022d000141ff01714101470d00200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211e20032002411a6a29010037039803200320013a009703200320093a0096032003200a3b0194032003200b3a0093032003200c3a0092032003200d3b0190032003200e3a008f032003200f3a008e03200320103b018c03200320113a008b03200320123a008a03200320133b018803200320143a008703200320153a008603200320163b018403200320173a008303200320183a0082032003201e3b018003200341c8066a200341c0056a2008200341c0056a20034180036a412010a00841004710970520032d00c80622024104460d3620032f00c90620032d00cb0641107472210120032902cc0621070c010b410221020b200042003703082000411c6a2007370200200041186a2001410874200272360200420121070c390b200141306a2903002107200141286a2903002105200141216a2d00002108200341c8066a41186a200141196a290000370300200341c8066a41106a200141116a290000370300200341c8066a41086a200141096a290000370300200320012900013703c80620022d00000d1220022d000141ff01714101470d122002411a6a2901002106200241196a2d00002101200241186a2d00002109200241166a2f0100210a200241156a2d0000210b200241146a2d0000210c200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021182003200241096a2d00003a00c701200320143a00c601200320153b01c401200320163a00c301200320173a00c201200320183b01c0012003200e3a00cf012003200f3a00ce01200320103b01cc01200320113a00cb01200320123a00ca01200320133b01c801200320013a00d701200320093a00d6012003200a3b01d4012003200b3a00d3012003200c3a00d2012003200d3b01d001200320063701d801200341c0056a41186a2006370300200341c0056a41106a20032901d001370300200341c0056a41086a20032901c801370300200320032901c0013703c00520034180036a200341c0056a108e05024020032d00800322024102460d0020024101470d0020034180036a41186a2d0000210220034197036a2d0000210120034195036a2f0000210920034194036a2d0000210a20034193036a2d0000210b20034191036a2f0000210c20034180036a41106a2d0000210d2003418f036a2d0000210e2003418d036a2f0000210f2003418c036a2d000021102003418b036a2d0000211120034189036a2f0000211220034180036a41086a2d0000211320032d008703211420032f008503211520032d008403211620032d008303211720032d008203211820032d008103211e200320034199036a2900003703d805200320023a00d705200320013a00d605200320093b01d4052003200a3a00d3052003200b3a00d2052003200c3b01d0052003200d3a00cf052003200e3a00ce052003200f3b01cc05200320103a00cb05200320113a00ca05200320123b01c805200320133a00c705200320143a00c605200320153b01c405200320163a00c305200320173a00c205200320183a00c1052003201e3a00c00520034180036a41186a200341c8066a41186a29030037030020034180036a41106a200341c8066a41106a29030037030020034180036a41086a200341c8066a41086a290300370300200320032903c8063703800320034180026a200341c0056a20034180036a200820052007109305024020032d00800222024104470d00200341043a0088010c350b20032d008302210120032f00810221082003200329028402220737028c01200320023a0088012003200820014110747222023b008901200320024110763a008b010c190b20034188016a410310e80420032d0088014104460d33200329028c0121070c180b20022d00000d1220022d000141ff01714101470d122002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f010021172003200241096a2d00003a00c701200320133a00c601200320143b01c401200320153a00c301200320163a00c201200320173b01c0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d001200320073701d801200341c0056a41186a2007370300200341c0056a41106a20032901d001370300200341c0056a41086a20032901c801370300200320032901c0013703c00520034180036a200341c0056a108e05024020032d00800322024102460d0020024101470d0020034180036a41186a2d0000210220034197036a2d0000210120034195036a2f0000210820034194036a2d0000210920034193036a2d0000210a20034191036a2f0000210b20034180036a41106a2d0000210c2003418f036a2d0000210d2003418d036a2f0000210e2003418c036a2d0000210f2003418b036a2d0000211020034189036a2f0000211120034180036a41086a2d0000211220032d008703211320032f008503211420032d008403211520032d008303211620032d008203211720032d0081032118200320034199036a29000037039803200320023a009703200320013a009603200320083b019403200320093a0093032003200a3a0092032003200b3b0190032003200c3a008f032003200d3a008e032003200e3b018c032003200f3a008b03200320103a008a03200320113b018803200320123a008703200320133a008603200320143b018403200320153a008303200320163a008203200320173a008103200320183a008003200341c0056a20034180036a109405024020032d00c00522024104470d00200341043a00c8060c340b20032d00c305210120032f00c1052108200320032902c40522073702cc06200320023a00c8062003200820014110747222023b00c906200320024110763a00cb060c170b200341c8066a410310e80420032d00c8064104460d3220032902cc0621070c160b20022d00000d1220022d000141ff01714101470d12200141046a28020021182002411a6a2901002107200241196a2d00002101200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f010021172003200241096a2d00003a00c701200320133a00c601200320143b01c401200320153a00c301200320163a00c201200320173b01c0012003200d3a00cf012003200e3a00ce012003200f3b01cc01200320103a00cb01200320113a00ca01200320123b01c801200320013a00d701200320083a00d601200320093b01d4012003200a3a00d3012003200b3a00d2012003200c3b01d001200320073701d801200341c0056a41186a2007370300200341c0056a41106a20032901d001370300200341c0056a41086a20032901c801370300200320032901c0013703c00520034180036a200341c0056a108e050240024020032d00800322024102460d0020024101470d0020034180036a41186a2d0000210220034197036a2d0000210120034195036a2f0000210820034194036a2d0000210920034193036a2d0000210a20034191036a2f0000210b20034180036a41106a2d0000210c2003418f036a2d0000210d2003418d036a2f0000210e2003418c036a2d0000210f2003418b036a2d0000211020034189036a2f0000211120034180036a41086a2d0000211220032d008703211320032f008503211420032d008403211520032d008303211620032d008203211720032d008103211e200320034199036a2900003703e006200320023a00df06200320013a00de06200320083b01dc06200320093a00db062003200a3a00da062003200b3b01d8062003200c3a00d7062003200d3a00d6062003200e3b01d4062003200f3a00d306200320103a00d206200320113b01d006200320123a00cf06200320133a00ce06200320143b01cc06200320153a00cb06200320163a00ca06200320173a00c9062003201e3a00c80620034180026a200341c8066a201841001097050c010b20034180026a410310e8040b024020032d0080024104460d0020032902840221070c140b420021070c140b200141246a2802002108200341c0056a41186a2209200141196a290000370300200341c0056a41106a220a200141116a290000370300200341c0056a41086a220b200141096a290000370300200320012900013703c005024002400240024020022d000120022d000041004772450d00200341023a00c8060c010b20034180036a41186a200929030037030020034180036a41106a200a29030037030020034180036a41086a200b290300370300200320032903c00537038003200341c8066a20034180036a200810f40420032d00c8064104460d0120032902cc0621070b20032802c80621032000411c6a2007370200200041186a2003360200420121070c010b420021070b200042003703080c350b2001200241e88cc5001059000b2002200a41e88cc5001058000b2009200a41f88cc5001059000b20034188016a41146a410a36020020034194016a410c360200200341e0076a41146a41033602002003200341d8076a3602f8072003200341dc076a3602fc0720034180036a41146a4100360200200342033702e407200341a0b3cc003602e0072003410c36028c01200341b0b4cc00360290032003420137028403200341f4b3cc0036028003200320034188016a3602f007200320034180036a360298012003200341fc076a360290012003200341f8076a36028801200341e0076a41b0b4cc00104c000b200341023a0088010c250b200341023a00c8070c170b2008200a104d000b20004200370308200041186a4102360200420121070c2d0b200341023a00c0010c130b200341023a00c8070c110b20004200370308200041186a4102360200420121070c2a0b200341023a00c8070c0e0b200341023a0088010c0c0b20034188016a410f10e8040c0b0b20004200370308200041186a4102360200420121070c260b200341023a0088010c050b200341023a00c8060c030b200341023a0080020b20032802800221032000411c6a2007370200200041186a2003360200420121070b200042003703080c210b20032802c80621032000411c6a2007370200200041186a200336020020004200370308420121070c200b20032802880121032000411c6a2007370200200041186a200336020020004200370308420121070c1f0b200041186a410236020020004200370308420121070c1e0b20032d00c8074104460d1820032902cc0721070b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c1c0b02402008450d00200910350b20032d0088014104460d1620032802880121022000411c6a200329028c01370200200041186a200236020020004200370308420121070c1b0b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c1a0b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c190b20032802c00121032000411c6a2007370200200041186a200336020020004200370308420121070c180b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c170b20034180036a41186a200341c0056a41186a29030037030020034180036a41106a200341c0056a41106a29030037030020034180036a41086a200341c0056a41086a290300370300200320032903c005370380034100210a20034180036a2101410021080b0240200a200f470d0020034188016a200a4101108a01200328028c01210f200328028801210e0b200e20084105746a220241206a2002200a20086b410574109e081a20022001290000370000200241186a200141186a290000370000200241106a200141106a290000370000200241086a200141086a2900003700002003200a41016a22023602900120034180036a41186a420037030020034180036a41106a2209420037030020034180036a41086a22014200370300200342003703800341d1c4c700ad4280808080e000841001220829000021072001200841086a29000037030020032007370380032008103541e7c4c700ad4280808080e00084100122082900002107200341e0076a41086a220a200841086a290000370300200320073703e00720081035200920032903e0072207370300200341c8066a41086a2001290300370300200341c8066a41106a2007370300200341c8066a41186a200a29030037030020032003290380033703c806200341386a200341c8066a412010c001200328023c21092003280238210a200341c8066a20034180026a1091052002410574220b41047241046a2201417f4c0d0120033502d006210720032802c8062110200110332208450d112008200941809c316a41809c31200a1b2211360000200341043602880320032001360284032003200836028003200220034180036a10770240024020020d0020032802880321012003280284032109200328028003210d0c010b410020032802880322016b210a200328028003210d2003280284032109200e210c0340200c210202402009200a6a411f4b0d00200141206a22082001490d032009410174220c2008200c20084b1b22084100480d03024002400240024020090d00024020080d004101210d0c020b20081033210d0c030b20092008470d010b200821090c020b200d200920081037210d0b20082109200d450d150b200241206a210c200d20016a22082002290000370000200841186a200241186a290000370000200841106a200241106a290000370000200841086a200241086a290000370000200a41606a210a200141206a2101200b41606a220b0d000b200320093602840320032001360288032003200d360280030b20074220862010ad842001ad422086200dad84100202402009450d00200d10350b024020032802cc06450d00201010350b0240200f41ffffff3f71450d00200e10350b20034180036a41086a410a3a000020034189036a20032903c005370000200341a9036a20032903800237000020034191036a200341c0056a41086a29030037000020034199036a200341c0056a41106a290300370000200341a1036a200341c0056a41186a290300370000200341b1036a20034180026a41086a290300370000200341b9036a20034180026a41106a290300370000200341c1036a20034180026a41186a290300370000200341063a008003200341cc036a201136020041b0b4cc00410020034180036a10d40141d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c001200341c0016aad42808080808004841007200341043a00c8070c100b103e000b1044000b200941ff01710d00200c200b4f0d010b200341023a00c8070c010b41d9e3cb00ad42808080809001841001220229000021072002290008210520021035419c8dc500ad4280808080c001841001220229000021062002290008211920021035200320193701d801200320063701d001200320053701c801200320073701c00120034180036a200341c0016a10c0020240024020032d00a00322024103460d0020032f018003210120032d008203210920032d008303210a20032f018403210b20032d008603210c20032d008703210e20032f018803210f20032d008a03211020032d008b03211120032f018c03211220032d008e03211320032d008f03211420032f019003211520032d009203211620032d009303211720032f019403211820032d009603211e20032d009703211f20032003290398033703d8052003201f3a00d7052003201e3a00d605200320183b01d405200320173a00d305200320163a00d205200320153b01d005200320143a00cf05200320133a00ce05200320123b01cc05200320113a00cb05200320103a00ca052003200f3b01c8052003200e3a00c7052003200c3a00c6052003200b3b01c4052003200a3a00c305200320093a00c205200320013a00c00541082109200320014108763a00c10502402002450d004109210920034180026a200341c0056a412010a008450d040b200341c8076a200910e8040c010b200341c8076a410210e8040b20032d00c8074104460d0b20032902cc0721070b20032802c80721032000411c6a2007370200200041186a200336020020004200370308420121070c0f0b41d9e3cb00ad42808080809001841001220129000021072001290008210520011035419c8dc500ad4280808080c001841001220129000021062001290008211920011035200320193701d801200320063701d001200320053701c801200320073701c001200341c0016aad4280808080800484100720034180036a41186a220b420037030020034180036a41106a2209420037030020034180036a41086a22014200370300200342003703800341d1c4c700ad4280808080e000841001220a29000021072001200a41086a2900003703002003200737038003200a103541e7c4c700ad4280808080e000841001220a2900002107200341e0076a41086a220c200a41086a290000370300200320073703e007200a1035200920032903e0072207370300200341c8066a41086a2001290300370300200341c8066a41106a2007370300200341c8066a41186a200c29030037030020032003290380033703c806200341306a200341c8066a412010c0012003280234210a2003280230210c200b20034180026a41186a290300370300200920034180026a41106a290300370300200120034180026a41086a290300370300200320032903800237038003200a4100200c1b20086a20034180036a2002200d10e904200341043a00c8070c090b200341c0016a41086a20034180026a41086a2902002207370300200341c0016a41106a20034180026a41106a290200370300200341c0016a41186a20034180026a41186a290200370300200341c0016a41206a20034180026a41206a290200370300200341c0016a41286a20034180026a41286a290200370300200341c0016a41306a20034180026a41306a290200370300200341c0016a41386a20034180026a41386a280200360200200320032902800222053703c001200341e0076a41086a20073e0200200320053703e0070b20032d00e0074104460d0720032902e40721070b20032802e00721032000411c6a2007370200200041186a200336020020004200370308420121070c0b0b20032802880121032000411c6a2007370200200041186a2003360200420121070b200042003703080c090b20032802c007210120032802bc07210920032802b80721020b2002450d0020072001ad4220862002ad8410022009450d01200210350c010b41d9e3cb00ad42808080809001841001220229000021192002290008211a2002103541918dc500ad4280808080b0018410012202290000211b2002290008211c200210352003201c3701d8012003201b3701d0012003201a3701c801200320193701c001410810332202450d0220034208370284032003200236028003410120034180036a107720032802ac0120034180036a108c05200328028403210220072003350288034220862003280280032201ad8410022002450d00200110350b20034198036a200537030020034190036a20063703002003418c036a200836020020034188036a41003a0000200341063a00800341b0b4cc00410020034180036a10d401200341043a00780b42002107200042003703080c040b1045000b103c000b200341023a00780b200328027821032000411c6a2007370200200041186a200336020020004200370308420121070b20002007370300200424000b880101027f230041106b220224002002200028020036020c20012002410c6a4104107802404120103322030d001045000b20032000290004370000200341186a2000411c6a290000370000200341106a200041146a290000370000200341086a2000410c6a2900003700002001200341201078200310352001200041246a41201078200241106a24000bb91e06037f0d7e027f017e057f047e230041b0066b22042400200441d0036a200210f504200441d0046a20042802d003220520042802d80310b30220042d00d0042106200441e0036a200441d0046a41017241e700109d081a024002400240024020064102460d00200441c0056a200441e0036a41e700109d081a024020042802d403450d00200510350b200441e8026a200441c0056a41e700109d081a200441d0046a200441e8026a41e700109d081a2006450d01200441f8016a411410e8040c020b024020042802d403450d00200510350b200441f8016a411410e8040c010b200441fc016a200441d7046a41e000109d081a200441c8016a41206a200441cc026a2902002207370300200441c8016a41186a200441c4026a2902002208370300200441c8016a41106a200441bc026a2902002209370300200441c8016a41086a200441b4026a290200220a370300200441c8016a41286a2206200441d4026a290200370300200420042902ac02220b3703c80120044184026a290200210c20044194026a290200210d200441a4026a290200210e20042902fc01210f200429028c022110200429029c022111200441e8026a41086a200a370300200441e8026a41106a2009370300200441e8026a41186a2008370300200441e8026a41206a2007370300200441e8026a41286a20062903003703002004200b3703e802200341186a2903002112200341086a2903002108200341206a2903002113200341106a290300210720032d00002114200441e0036a2001108e02200441d0046a20042802e003221520042802e803108f02427f200720137c200820127c220a2008542206ad7c22092006200920075420092007511b22061b2007201441014622051b2109427f200a20061b200820051b210b200441d0046a41106a290300420020042903d00442015122061b210a20042903d804420020061b2116024020042802e403450d00201510350b0240024002400240024002400240024002400240200b2016562009200a562009200a511b0d00200441c8016a2001109605200441d0046a20042802c801221720042802d001221810c90220042d00d0042106200441c0056a200441d0046a41017241ef00109d081a0240024020064102470d00200441f0036a4200370300200441f8036a420037030020044180046a420037030020044188046a420037030020044190046a420037030020044198046a420037030041002106200441a0046a4100360200200441083602e403200441e0036a41086a4200370300200441003a00e0030c010b200420063a00e003200441e0036a410172200441c0056a41ef00109d081a0b411e210520060d0420042802e403211941002106024002400240024002400240200441ec036a280200221a41014b0d00201a0e020201020b201a2105034020062005410176221520066a221b2019201b41306c6a28020020024b1b2106200520156b220541014b0d000b0b2019200641306c6a28020022052002460d01200620052002496a21060b200441f4046a200341206a290200370200200441ec046a200341186a290200370200200441e4046a200341106a290200370200200441dc046a200341086a290200370200200420032902003702d404201a2006490d010240201a200441e0036a41086a280200470d00200441e0036a410472201a410110880120042802e40321190b2019200641306c6a220541306a2005201a20066b41306c109e081a20052002360200200520042902d0043702042005410c6a200441d8046a290200370200200541146a200441e0046a2902003702002005411c6a200441e8046a290200370200200541246a200441f0046a2902003702002005412c6a200441f8046a2802003602002004201a41016a3602ec030c060b201a20064d0d012019200641306c6a220641186a290300211c200641106a290300210a0240024020062d000822154101470d0041202105200441e8006a200641206a290300221d200641286a290300221e420a4200109808200441f8006a200a201c420a42001098082011200a7d221f201156200e201c7d2011200a54ad7d221c200e56201c200e511b0d08201f201d7d2216201f56201c201e7d201f201d54ad7d220a201c56200a201c511b0d08200f2004290378220e7d221f200f56200c200441f8006a41086a2903007d200f200e54ad7d221c200c56201c200c511b0d0920102004290368220e7d220f201056200d200441e8006a41086a2903007d2010200e54ad7d220c200d56200c200d511b450d010c0a0b200641096a2d0000211b024002402006410a6a2d0000220541ff0171450d00200441a8016a201c42002005ad42ff018322164200108408200441b8016a200a42002016420010840820044198016a42004200200a4200108408427f200441c0016a290300221620042903a8012004290398017c7c221f20042903b00120042903a00184420052201f2016547222051b211d427f20042903b80120051b211f0c010b20044188016a200a201c420a420010980820044190016a290300211d200429038801211f0b412021052011200a7d2216201156200e201c7d2011200a54ad7d220a200e56200a200e511b0d070240201b41ff01710d002010201f7d2211201056200d201d7d2010201f54ad7d220e200d56200e200d511b0d0920112110200e210d200f211e200c211c0c050b200f201f7d221e200f56200c201d7d200f201f54ad7d221c200c56201c200c511b450d040c080b20162111200a210e200f2110200c210d201f210f201c210c0c040b2006201a104d000b2006201a41ecc0c6001042000b2000412110e8040c0a0b0240024020150d00201b41ff01714102460d004200200a20044188046a2903007d201620044180046a290300221154ad7d220e201620117d2211201656200e200a56200e200a511b22051b210e4200201120051b2111200441f8036a290300211620042903f003210a0240201b4101710d004200200d20167d2010200a54ad7d22162010200a7d220a2010562016200d562016200d511b22051b210d4200200a20051b21100c020b4200201c20167d201e200a54ad7d2216201e200a7d220a201e562016201c562016201c511b22051b210c4200200a20051b210f0c020b20162111200a210e0b201e210f201c210c0b200641086a22062003290300370300200641206a200341206a290300370300200641186a200341186a290300370300200641106a200341106a290300370300200641086a200341086a2903003703000b0240024020144101470d00200441086a20122013420a4200109808200441186a20082007420a4200109808411f2105201120087c22082011542206200e20077c2006ad7c2207200e542007200e511b0d02200820127c22162008542206200720137c2006ad7c220a200754200a2007511b0d02200f20042903187c221f200f542206200c200441186a41086a2903007c2006ad7c221c200c54201c200c511b0d03201020042903087c22082010542206200d200441086a41086a2903007c2006ad7c2207200d542007200d511b0d040c010b20032d0001211502400240200341026a2d0000220641ff0171450d00200441c8006a200742002006ad42ff0183220a4200108408200441d8006a20084200200a4200108408200441386a4200420020084200108408427f200441e0006a290300220a200429034820042903387c7c221220042903502004290340844200522012200a547222061b2112427f200429035820061b21130c010b200441286a20082007420a4200109808200441306a2903002112200429032821130b411f2105201120087c22162011542206200e20077c2006ad7c220a200e54200a200e511b0d0102400240201541ff01710d00201020137c22082010542206200d20127c2006ad7c2207200d542007200d511b0d04200821102007210d200f211f200c211c0c010b200f20137c221f200f542206200c20127c2006ad7c221c200c54201c200c511b0d030b024020140d00201541ff01714102460d00427f200a20044188046a2903007c201620044180046a2903007c22082016542206ad7c220720062007200a542007200a511b22061b210a427f200820061b2116200441f8036a290300210720042903f0032108024020154101710d00427f200d20077c201020087c22082010542206ad7c220720062007200d542007200d511b22061b2107427f200820061b21080c020b427f201c20077c201f20087c2208201f542206ad7c220720062007201c542007201c511b22061b211c427f200820061b211f0b20102108200d21070b200441043a00f8010c040b20112116200e210a0b20102108200d2107200f211f200c211c0c010b20102108200d21070b200441f8016a200510e80420042d00f80122064104460d00200420042900f9013703c0052004200441f8016a41086a2800003600c70520042d00e0030d01200441e0036a41086a2802002203450d01200341306c450d0120042802e40310350c010b200441d0046a200441e0036a41f000109d081a0240024020042d00d00422064102470d002018ad4220862017ad8410070c010b200441c0056a200441d0046a1080052018ad4220862017ad8420043502c80542208620042802c0052203ad841002024020042802c405450d00200310350b20060d00200441d8046a2802002206450d00200641306c450d0020042802d40410350b200420042900f9013703c005200420044180026a2800003600c705410421060b024020042802cc01450d00201710350b200420042903c0053703d003200420042800c7053600d703024020064104470d00200442e4cab5fbb6ccdcb0e3003703e002200441e0026a2001200b200910ea0220044180056a200a370300200441d0046a41286a2016370300200441d0046a41206a2007370300200441d0046a41186a2008370300200441d0046a41106a201c37030020044188056a20042903e80237030020044190056a200441f0026a29030037030020044198056a200441e8026a41106a290300370300200441a0056a200441e8026a41186a290300370300200441a8056a200441e8026a41206a290300370300200441b0056a200441e8026a41286a2903003703002004201f3703d804200441003a00d004200441e0036a200210f50420042802e0032106200420042802e8033602c405200420063602c005200441d0046a200441c0056a10f604024020042802e403450d00200610350b200041043a00000c020b200020063a0000200020042903d003370001200041086a20042800d7033600000c010b20042802f8012106200041046a20042902fc01370200200020063602000b200441b0066a24000b810703047f017e027f23004180016b22022400200241186a2203200141186a290000370300200241106a2204200141106a290000370300200241086a2205200141086a2900003703002002200129000037030041d9e3cb00ad4280808080900184100122012900002106200241286a41086a200141086a290000370300200220063703282001103541e4a6cb00ad4280808080d00084100122012900002106200241386a41086a200141086a29000037030020022006370338200110350240024002400240412010332201450d0020012002290300370000200141186a2003290300370000200141106a2004290300370000200141086a200529030037000020022001ad42808080808004841003220329000037037820031035200241e4006a200141206a360200200220013602602002200241f8006a41086a36025c2002200241f8006a360258200241c8006a200241d8006a107b200110352002280250220741206a2203417f4c0d01200228024821080240024020030d0041002104410121010c010b200310332201450d01200321040b024002402004410f4d0d00200421050c010b200441017422054110200541104b1b22054100480d03024020040d002005103322010d010c050b20042005460d0020012004200510372201450d040b20012002290328370000200141086a200241286a41086a2903003700000240024020054170714110460d00200521040c010b200541017422044120200441204b1b22044100480d0320052004460d0020012005200410372201450d040b20012002290338370010200141186a200241386a41086a29030037000002400240200441606a2007490d00200421050c010b2007415f4b0d03200441017422052003200520034b1b22054100480d0320042005460d0020012004200510372201450d040b200141206a20082007109d081a0240200228024c450d00200810350b20022001200310c402200241e0006a2203200241096a290000370300200241e8006a2204200241116a290000370300200241f0006a2207200241196a290000370300200220022900013703580240024020022d000022084102470d00200041023a00000c010b200020083a000020002002290358370001200041096a2003290300370000200041116a2004290300370000200041196a20072903003700000b02402005450d00200110350b20024180016a24000f0b1045000b1044000b103e000b103c000b9f0303027f017e027f230041206b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a200341086a29000037030020022004370300200310354184a4c600ad4280808080d00184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000ba10202067f017e230041106b2202240002400240412010332203450d0020032000290000370000200341186a2204200041186a290000370000200341106a2205200041106a290000370000200341086a2206200041086a290000370000412010332207450d0120072003290000370000200741186a2004290000370000200741106a2005290000370000200741086a2006290000370000200310350240024020002d0020220341024d0d004280808080800421080c010b024002400240024020030e03000102000b410021030c020b410121030c010b410221030b200220033a000f2007412041c00010372207450d02200720033a00204280808080900421080b200129020020082007ad84100220071035200241106a24000f0b1045000b103c000b9f0303027f017e027f230041206b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a200341086a290000370300200220043703002003103541b8a3c600ad4280808080900184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000bb10503027f017e047f230041d0006b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541e4a6cb00ad4280808080d00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bfe2208047f027e047f077e037f087e157f017e23002206210720064180056b416071220624000240024020012002460d0020012002412010a008450d00200641a0016a2001108e0220064180046a20062802a001220820062802a801108f0220064190046a290300420020062903800442015122091b210a200629038804420020091b210b024020062802a401450d00200810350b200b200454200a200554200a2005511b450d012000412110e804200724000f0b2000412510e804200724000f0b20064190016a200110960520064180046a200628029001220c200628029801220d10c90220064190036a41026a220920062d0083043a0000200641c8036a41086a220820064180046a41e0006a290300370300200641c8036a41106a220e20064180046a41e8006a290300370300200620062f0081043b019003200620064180046a41d8006a2903003703c8030240024020062d008004220f4102470d00200641a0016a41c0006a220941003602004200210b200641a0016a41106a4200370300200641a0016a41186a4200370300200641a0016a41206a4200370300200641a0016a41286a4200370300200641a0016a41306a4200370300200641a0016a41386a4200370300200641083602a401200641a0016a41086a4200370300200641003a00a001200641a0016a41d0006a2903002110200641a0016a41c8006a2903002111200929030021124200210a42002113420021140c010b20064180046a41d0006a290300211020064180046a41c8006a290300211120064180046a41386a290300211420064180046a41286a290300210a20064180046a41206a290300210b20064180046a41186a290300211520064180046a41106a290300211620064180046a41306a290300211320064180046a410c6a280200211720064180046a41086a28020021182006280284042119200641a0016a41c0006a20064180046a41c0006a2903002212370300200641a0016a41386a2014370300200641a0016a41286a200a370300200641a0016a41206a200b370300200641a0016a41186a2015370300200641a0016a41106a2016370300200641a0016a41d0006a2010370300200641a0016a41c8006a2011370300200641a0016a41306a2013370300200641a0016a410c6a2017360200200641a0016a41086a2018360200200641a0016a41d8006a20062903c803370300200641a0016a41e0006a2008290300370300200641a0016a41e8006a200e2903003703002006200f3a00a001200620062f0190033b00a101200620193602a401200620092d00003a00a3010b2006200241106a2900003700b1022006200241176a2900003700b8022006200241086a2900003700a902200620022900003700a10220062903b802211a2006200641b8016a2209290300221b3703b80220062903b002211c200620062903b001221d3703b00220062903a802211e200620062903a801221f3703a802200641013a00a00220062903a0022116200620062903a00122153703a002200231001f2120200641d8016a4200370300200641d0016a2005370300200641c8016a20043703002009201a370300200620202003ad222142ff0183420886843703c0012006201c3703b0012006201e3703a801200620163703a001200641f8016a2209290300211a20094200370300200641f0016a4200370300200641e8016a4200370300200642003703e00120064188026a2208280200210f20064180026a220e290300211c20084100360200200e420037030002400240024002400240024002402015a741ff01714101460d002015422088a7210f201fa72108201f422088a70d02200641d8016a200641b0016a2016a741ff017141014622171b220e201b370308200e201d370300200e200b370310200e41186a200a3703002009200641a0016a41306a20171b22092012a736021020092014370308200920133703002008450d01200841306c450d01200f10350c010b20064180046a41176a200641a0026a410172220841176a29000037000020064180046a41106a200841106a29000037030020064180046a41086a200841086a2900003703002006200b3c009f04200620082900003703800402400240200b420888200a42388684220ba741ff0171450d00200641e0006a20134200200b42ff0183220b4200108408200641f0006a200a4200200b4200108408200641d0006a42004200200a4200108408427f200641f8006a290300220b200629036020062903507c7c221520062903682006290358844200522015200b547222081b210b427f200629037020081b21150c010b200641c0006a200a2013420a4200109808200641c8006a290300210b200629034021150b20064180046a2015200b200a2013109805200641d8016a200641b0016a20062d00a001410146220e1b2208201137031020082012370308200841186a2010370300200820143703002009200641d0016a200e1b2209201a3703002009201c3703082009200f3602100b02400240200341ff0171450d00200641206a20054200202142ff0183220a4200108408200641306a20044200200a4200108408200641106a4200420020044200108408427f200641386a290300220a200629032020062903107c7c220b2006290328200629031884420052200b200a547222031b2121427f200629033020031b211b0c010b200620042005420a4200109808200641086a29030021212006290300211b0b200641d0026a200210960520064180046a20062802d002222220062802d802222310c90220064190036a41026a220320062d0083043a000041082124200641c8036a41086a200641e0046a290300370300200641c8036a41106a2209200641e8046a290300370300200620062f0081043b0190032006200641d8046a2903003703c803200641d0046a290300211a200641c8046a290300211f0240024020062d00800422254102470d004200211041002126410021274200211c420021114200211e4200211d4200211242002120410021250c010b200641c0046a2903002120200641b8046a2903002112200641a8046a290300211e200641a0046a290300211120064198046a290300211c20064180046a41106a2903002110200641b0046a290300211d2006418c046a280200212720064180046a41086a28020021262006280284042124200641fc026a41026a20032d00003a0000200641e0026a41086a200641c8036a41086a290300370300200641e0026a41106a2009290300370300200620062f0190033b01fc02200620062903c8033703e0020b20254101460d01427f201e20057c201120047c220b2011542203ad7c220a2003200a201e54200a201e511b22031b211e427f200b20031b2111427f201c20217c2010201b7c220b2010542203ad7c220a2003200a201c54200a201c511b22031b211c427f200b20031b2110202741306c2203450d02202420036a2119200641b8046a210920064180046a410172222841036a2129202421030340200341306a21080240200341086a2d00004101710d00200341096a2d0000212a20064180036a200328020010f50420064180046a2006280280032203200628028803222b10b302200641c8036a41086a222c200941086a222d290000370300200641c8036a41106a222e200941106a222f290000370300200641c8036a41186a2230200941186a2231290000370300200641c8036a41206a2232200941206a2233290000370300200641c8036a41286a2234200941286a2235290000370300200620282800003602f803200620292800003600fb03200620092900003703c80320064180046a41306a210e20064180046a41206a210f20064180046a41106a2117024020062d00800422184102472236450d00200e290300210a200f29030021152017290300211320062903a804210b2006290398042114200629038804211620064190036a41086a202c29030037030020064190036a41106a202e29030037030020064190036a41186a203029030037030020064190036a41206a203229030037030020064190036a41286a2034290300370300200620062800fb033600c303200620062802f8033602c003200620062903c8033703900320180d00427f200a20057c200b20047c2237200b54222cad7c220b202c200b200a54200b200a511b222c1b210a427f2037202c1b210b0240202a4101710d00427f201520217c2014201b7c2237201454222cad7c2214202c201420155420142015511b222c1b2115427f2037202c1b21140c010b427f201320217c2016201b7c2237201654222cad7c2216202c201620135420162013511b222c1b2113427f2037202c1b21160b202820062802c0033600002009200629039003370300200e200a370300200f201537030020172013370300202920062800c303360000202d20064190036a41086a290300370300202f20064190036a41106a290300370300203120064190036a41186a290300370300203320064190036a41206a290300370300203520064190036a41286a2903003703002006200b3703a80420062014370398042006201637038804200620183a0080040240024020360d00202bad4220862003ad8410070c010b2006202b3602cc03200620033602c80320064180046a200641c8036a1099050b200628028403450d00200310350b2008210320192008470d000c030b0b20064190026a412310e80402402008450d00200841306c450d00200f10350b20062d00900222034104460d0220062006290091023703c803200620064190026a41086a2800003600cf0320062d00a0010d03200641a0016a41086a2802002209450d03200941306c450d0320062802a40110350c030b427f201a20057c201f20047c220b201f542203ad7c220a2003200a201a54200a201a511b22031b211a427f200b20031b211f427f202020217c2012201b7c220b2012542203ad7c220a2003200a202054200a2020511b22031b2120427f200b20031b21120b200641d0046a201a370300200641c8046a201f370300200641c0046a2020370300200641b8046a2012370300200641a8046a201e370300200641a0046a201137030020064198046a201c37030020064180046a41106a2010370300200641b0046a201d3703002006418c046a202736020020064180046a41086a2026360200200641d8046a20062903e002370300200641e0046a200641e0026a41086a290300370300200641e8046a200641e0026a41106a290300370300200620062f01fc023b00810420062024360284042006200641fc026a41026a2d00003a008304200620253a0080040240024020254102470d002023ad4220862022ad8410070c010b200641c8036a20064180046a1080052023ad4220862022ad8420063502d00342208620062802c8032203ad841002024020062802cc03450d00200310350b20250d002026450d00202641306c450d00202410350b024020062802d402450d00202210350b200642e4cab5fbb6ccdcb0e3003703c802200641c8026a20012004200510ea02200641043a0090020b20064180046a200641a0016a41f000109d081a0240024020062d00800422034102470d00200dad422086200cad8410070c010b200641c8036a20064180046a108005200dad422086200cad8420063502d00342208620062802c8032209ad841002024020062802cc03450d00200910350b20030d0020064188046a2802002203450d00200341306c450d0020062802840410350b20062006290091023703c803200620064198026a2800003600cf03410421030b0240200628029401450d00200c10350b200620062903c80337038001200620062800cf0336008701024020034104470d0020064180046a41086a41083a000020064189046a200129000037000020064191046a200141086a29000037000020064199046a200141106a290000370000200641a1046a200141186a290000370000200641a9046a2002290000370000200641b1046a200241086a290000370000200641b9046a200241106a290000370000200641c1046a200241186a290000370000200641063a00800441b0b4cc00410020064180046a10d401200041043a0000200724000f0b200020033a00002000200629038001370001200041086a200628008701360000200724000bc90e0b057f017e017f057e027f057e017f027e017f037e017f230022022103200241e0046b41607122022400200241e0006a2001109605200241d0036a200228026022042002280268220510c90220022d00d0032106200241f0016a200241d0036a41017241ef00109d081a0240024020064102470d004200210720024180016a420037030020024188016a420037030020024190016a420037030020024198016a4200370300200241a0016a4200370300200241a8016a420037030041002108200241b0016a410036020020024108360274200241f0006a41086a4200370300200241003a007042002109410021064200210a4200210b4200210c0c010b200220063a0070200241f0006a410172200241f0016a41ef00109d081a20024190016a290300220d420888a72106200241d0016a2903002109200241a0016a290300210b20024198016a290300210a200241a8016a290300210c200241d8016a280200210e200da72108420021070b200241a8016a4200370300200241f0006a41306a420037030020024198016a420037030020024188016a220f290300210d200f42003703002002410836028403200241003a008003200241003602e00220022903800121102002420037038001200229037821112002420037037820024200370390012002200d370398032002201037039003200220113703880320022903f80221122002200241c8016a220f29030022133703f80220022903f00221142002200241c0016a221529030022163703f00220022903e80221172002200241b8016a221829030022193703e802200229038003210d200220022903702210370380032002200d37037020022903e002211a200220022903b001221b3703e002200f201237030020152014370300201820173703002002201a3703b001200da7210f0240024002402010a741ff017122154101460d00200241e0016a412210e804024020150d002011a72206450d00200641306c450d002010422088a710350b20022d00e00122064104460d01200220022900e1013703f0012002200241e8016a2800003600f701200f41ff01710d0241010d0241010d02200d422088a710350c020b200241c7036a200229009803370000200241c0036a200229009103370300200241b0036a41086a20022900890337030020022002290081033703b003200220083a00cf0302400240200641ff0171450d00200241306a200b42002006ad42ff0183220d4200108408200241c0006a200a4200200d4200108408200241206a42004200200a4200108408427f200241c8006a290300220d200229033020022903207c7c221120022903382002290328844200522011200d547222151b210d427f200229034020151b21110c010b200241106a200a200b420a4200109808200241186a290300210d200229031021110b200241b0036a2011200d200a200b109805200241d0036a41186a4200370300200241d0036a41106a22084200370300200241d0036a41086a22154200370300200242003703d00341d1c4c700ad4280808080e0008410012218290000210d2015201841086a2900003703002002200d3703d0032018103541e7c4c700ad4280808080e0008410012218290000210d200241d0046a41086a221c201841086a2900003703002002200d3703d00420181035200820022903d004220d370300200241f0016a41086a2015290300370300200241f0016a41106a200d370300200241f0016a41186a201c290300370300200220022903d0033703f001200241086a200241f0016a412010c001200228020c211520022802082118200241a8016a200241f0006a41106a200f41ff017141014622081b220f41186a2016370300200f2019370310200f201b370308200f200c370300200241c8016a200241a0016a20081b220f2007201384220d200a200d200a562009200b562009200b511b22081b370300200f2009200b20081b370308200f200e20064118744118754102744184e4cb006a2802004180de346c2015410020181b6a2206200e20064b1b360210200241043a00e0010b200241d0036a200241f0006a41f000109d081a0240024020022d00d00322064102470d002005ad4220862004ad8410070c010b200241f0016a200241d0036a1080052005ad4220862004ad8420023502f80142208620022802f001220fad841002024020022802f401450d00200f10350b20060d00200241d8036a2802002206450d00200641306c450d0020022802d40310350b200220022900e1013703f0012002200241e8016a2800003600f701410421060b02402002280264450d00200410350b200220022903f001370350200220022800f7013600570240024020064104470d00200241d0036a41086a41093a0000200241d0036a41096a2001290000370000200241e1036a200141086a290000370000200241e9036a200141106a290000370000200241f1036a200141186a290000370000200241063a00d00341b0b4cc004100200241d0036a10d4010c010b20002002290350370001200041086a20022800573600000b200020063a0000200324000bb50403047f017e017f230041c0006b22022400200241186a2203200041186a290000370300200241106a2204200041106a290000370300200241086a2205200041086a2900003703002002200029000037030041d9e3cb00ad4280808080900184100122002900002106200241206a41086a200041086a290000370300200220063703202000103541888dc500ad4280808080900184100122002900002106200241306a41086a200041086a29000037030020022006370330200010350240412010332200450d0020002002290300370000200041186a2003290300370000200041106a2004290300370000200041086a2005290300370000412010332203450d0020032000290000370000200341186a2204200041186a290000370000200341106a2205200041106a290000370000200341086a2207200041086a2900003700002000103541c00010332200450d002000200229033037001020002002290320370000200041086a200241206a41086a290300370000200041186a200241306a41086a29030037000020002003290000370020200041286a2007290000370000200041306a2005290000370000200041386a20042900003700002003103520024100360208200242013703002001200210ef04200228020421032000ad4280808080800884200235020842208620022802002204ad84100202402003450d00200410350b20001035024020012d0000450d00200141286a280200450d00200141246a28020010350b200241c0006a24000f0b1045000bb10503027f017e047f230041d0006b2202240041d9e3cb00ad4280808080900184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541a4a1c600ad4280808080800184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bca1c08077f067e0a7f017e017f057e017f067e23004180046b2204240020044198026a200210f504200441c8026a200428029802220520042802a00210b302200441b8036a41086a220620044188036a290300370300200441b8036a41106a220720044190036a290300370300200441b8036a41186a220820044198036a290300370300200441b8036a41206a2209200441a0036a290300370300200441b8036a41286a220a200441a8036a290300370300200420044180036a2903003703b803200441f8026a290300210b200441c8026a41286a290300210c200441c8026a41206a290300210d200441c8026a41186a290300210e200441c8026a41106a290300210f200441c8026a41086a290300211020042802cc02211120042d00c9022112024020042d00c80222134102460d00200441e8006a41286a200a290300370300200441e8006a41206a2009290300370300200441e8006a41186a2008290300370300200441e8006a41106a2007290300370300200441e8006a41086a2006290300370300200420042903b8033703680b0240200428029c02450d00200510350b20044198016a41286a2205200441e8006a41286a29030037030020044198016a41206a2206200441e8006a41206a29030037030020044198016a41186a2207200441e8006a41186a29030037030020044198016a41106a2214200441e8006a41106a29030037030020044198016a41086a2215200441e8006a41086a2903003703002004200429036837039801200441c8016a2001109605200441c8026a20042802c801221620042802d00110c90220044198026a41026a220120042d00cb023a0000200441b8036a41086a20044194036a290200370300200441b8036a41106a22172004419c036a290200370300200441b8036a41186a2218200441a4036a290200370300200441b8036a41206a2219200441ac036a290200370300200441b8036a41286a221a200441b4036a280200360200200420042f00c9023b01980220042004418c036a2902003703b8030240024020042d00c80222094102470d004200211b4100210a4100211c4200211d4200211e4200211f42002120420021214100212241082108410021090c010b20044180036a2903002121200441f8026a2903002120200441c8026a41286a290300211f200441c8026a41206a290300211e200441c8026a41186a290300211d200441c8026a41106a290300211b20044188036a2802002122200441d4026a280200211c200441c8026a41086a280200210a20042802cc02210820044184026a41026a20012d00003a0000200441d8016a41086a200441b8036a41086a290300370300200441d8016a41106a2017290300370300200441d8016a41186a2018290300370300200441d8016a41206a2019290300370300200441d8016a41286a201a280200360200200420042f0198023b018402200420042903b8033703d8010b20044198026a41286a200529030037030020044198026a41206a200629030037030020044198026a41186a200729030037030020044198026a41106a201429030037030020044198026a41086a2015290300370300200420042903980137039802024002400240024020090d00410021010240024002400240024002400240024002400240201c41014b0d00201c0e020201020b201c2105034020012005410176220620016a22072008200741306c6a28020020024b1b2101200520066b220541014b0d000b0b2008200141306c6a2802002002470d00024002402013410371417f6a220541014b0d0020050e020109010b200441b8036a41286a20044198026a41286a290300370300200441b8036a41206a20044198026a41206a290300370300200441b8036a41186a20044198026a41186a290300370300200441b8036a41106a20044198026a41106a290300370300200441b8036a41086a20044198026a41086a29030037030020042004290398023703b803411d2106024020030d00201c20014d0d032008200141306c6a220541186a2903002123200541106a2903002124024020052d000822074101470d00412021062004200541206a2903002225200541286a2903002226420a4200109808200441106a20242023420a4200109808200c20247d2227200c56200b20237d200c202454ad7d2224200b562024200b511b0d01202720257d2228202756202420267d2027202554ad7d220c202456200c2024511b0d0120102004290310220b7d2224201056200f200441106a41086a2903007d2010200b54ad7d220b200f56200b200f511b0d01200e2004290300220f7d2210200e56200d200441086a2903007d200e200f54ad7d220f200d56200f200d511b0d010c090b200541096a2d00002114024002402005410a6a2d0000220541ff0171450d00200441c0006a202342002005ad42ff018322274200108408200441d0006a2024420020274200108408200441306a4200420020244200108408427f200441d8006a2903002227200429034020042903307c7c2228200429034820042903388442005220282027547222051b2125427f200429035020051b21270c010b200441206a20242023420a4200109808200441286a2903002125200429032021270b41202106200c20247d2228200c56200b20237d200c202454ad7d220c200b56200c200b511b0d000240201441ff01710d00200e20277d2226200e56200d20257d200e202754ad7d2223200d562023200d511b0d0120102124200f210b2026210e2023210d0c080b201020277d2224201056200f20257d2010202754ad7d220b200f56200b200f511b450d070b20044188026a200610e8040c050b201c20014d0d022008200141306c6a22052d00080d07201241ff0171410047200541096a2d00004573450d07200541186a290300210c200541106a290300210f2008200141306c6a410a6a2c00002107200441c8026a41186a4200370300200441c8026a41106a22024200370300200441c8026a41086a22054200370300200442003703c80241d1c4c700ad4280808080e0008410012206290000210b2005200641086a2900003703002004200b3703c8022006103541e7c4c700ad4280808080e0008410012206290000210b200441e8036a41086a2214200641086a2900003703002004200b3703e80320061035200220042903e803220b370300200441b8036a41086a2005290300370300200441b8036a41106a200b370300200441b8036a41186a2014290300370300200420042903c8023703b803200441e0006a200441b8036a412010c0012004280264410020042802601b20074102744184e4cb006a2802004180de346c20116a22054f0d0720030d032021200c2020200f562021200c562021200c511b22061b21212020200f20061b212020222005202220054b1b21220c070b20044188026a411c10e8040c030b2001201c4194c0c6001042000b2001201c41a4c0c6001042000b20044188026a411d10e8040b20042d00880222014104460d0420042004290089023703b803200420044190026a2800003600bf03200a450d05200a41306c450d05200810350c050b024020070d00201441ff01714102460d004200200c201f7d2028201e54ad7d220f2028201e7d2210202856200f200c56200f200c511b22051b210c4200201020051b2128024020144101710d004200200d201d7d200e201b54ad7d220f200e201b7d2210200e56200f200d56200f200d511b22051b210f4200201020051b21100c020b4200200b201d7d2024201b54ad7d220f2024201b7d2210202456200f200b56200f200b511b22051b210b4200201020051b21240b200e2110200d210f0b200441f8026a200c370300200441c8026a41286a2028370300200441c8026a41206a200f370300200441c8026a41186a2010370300200441c8026a41106a200b37030020044180036a20042903b80337030020044188036a200441c0036a29030037030020044190036a200441b8036a41106a29030037030020044198036a200441b8036a41186a290300370300200441a0036a200441b8036a41206a290300370300200441a8036a200441b8036a41286a290300370300200420243703d002200441003a00c802200441e8036a200210f50420042802e8032105200420042802f0033602fc03200420053602f803200441c8026a200441f8036a10f60420042802ec03450d00200510350b201c20014d0d032008200141306c6a2205200541306a201c2001417f736a41306c109e081a201c417f6a211c0b200441043a0088020b20044180036a2021370300200441f8026a2020370300200441c8026a41286a201f370300200441c8026a41206a201e370300200441c8026a41186a201d370300200441c8026a41106a201b37030020044188036a2022360200200441d4026a201c360200200441c8026a41086a200a3602002004418c036a20042903d80137020020044194036a200441d8016a41086a2903003702002004419c036a200441d8016a41106a290300370200200441a4036a200441d8016a41186a290300370200200441ac036a200441d8016a41206a290300370200200441b4036a200441d8016a41286a280200360200200420042f0184023b00c902200420083602cc02200420044184026a41026a2d00003a00cb02200420093a00c8020240024020094102470d0020043502d00142208620042802c8012216ad8410070c010b20043502d001212120042802c8012116200441b8036a200441c8026a10800520214220862016ad8420043502c00342208620042802b8032201ad84100220042802bc03450d00200110350b0240200a450d0020090d00200a41306c450d00200810350b20042004290089023703b803200420044190026a2800003600bf03410421010b024020042802cc01450d00201610350b200420042903b8033703c802200420042800bf033600cf02024020014104460d00200020042903c802370001200041086a20042800cf023600000b200020013a000020044180046a24000f0b2001201c104e000bdb0e08057f027e017f017e027f087e157f067e230041a0026b2205240020052000109605200541306a200528020022062005280208220710c902200541b0016a41026a220020052d00333a000041082108200541e8016a41086a20054190016a290300370300200541e8016a41106a220920054198016a290300370300200520052f00313b01b001200520054188016a2903003703e80120054180016a290300210a200541f8006a290300210b0240024020052d0030220c4102470d004200210d4100210e4100210f4200211042002111420021124200211342002114420021154100210c0c010b200541f0006a2903002115200541e8006a2903002114200541d8006a2903002112200541d0006a2903002111200541c8006a2903002110200541306a41106a290300210d200541e0006a29030021132005413c6a280200210f200541306a41086a280200210e200528023421082005412c6a41026a20002d00003a0000200541106a41086a200541e8016a41086a290300370300200541106a41106a2009290300370300200520052f01b0013b012c200520052903e8013703100b02400240200c4101460d004200201220047d2011200354ad7d2216201120037d2217201156201620125620162012511b22001b21124200201720001b21114200201020027d200d200154ad7d2216200d20017d2217200d56201620105620162010511b22001b21104200201720001b210d200f41306c2200450d01200820006a2118200541e8006a2109200541306a410172221941036a211a200821000340200041306a211b0240200041086a2d00004101710d00200041096a2d0000211c200541a0016a200028020010f504200541306a20052802a001220020052802a801221d10b302200541e8016a41086a221e200941086a221f290000370300200541e8016a41106a2220200941106a2221290000370300200541e8016a41186a2222200941186a2223290000370300200541e8016a41206a2224200941206a2225290000370300200541e8016a41286a2226200941286a222729000037030020052019280000360298022005201a28000036009b02200520092900003703e801200541306a41306a2128200541306a41206a2129200541306a41106a212a024020052d0030222b410247222c450d00202829030021172029290300212d202a290300212e200529035821162005290348212f20052903382130200541b0016a41086a201e290300370300200541b0016a41106a2020290300370300200541b0016a41186a2022290300370300200541b0016a41206a2024290300370300200541b0016a41286a20262903003703002005200528009b023600e30120052005280298023602e001200520052903e8013703b001202b0d004200201720047d2016200354ad7d2231201620037d2232201656203120175620312017511b221e1b211742002032201e1b21160240201c4101710d004200202d20027d202f200154ad7d2231202f20017d2232202f562031202d562031202d511b221e1b212d42002032201e1b212f0c010b4200202e20027d2030200154ad7d2231203020017d22322030562031202e562031202e511b221e1b212e42002032201e1b21300b201920052802e001360000200920052903b001370300202820173703002029202d370300202a202e370300201a20052800e301360000201f200541b0016a41086a2903003703002021200541b0016a41106a2903003703002023200541b0016a41186a2903003703002025200541b0016a41206a2903003703002027200541b0016a41286a290300370300200520163703582005202f370348200520303703382005202b3a003002400240202c0d00201dad4220862000ad8410070c010b2005201d3602ec01200520003602e801200541306a200541e8016a1099050b20052802a401450d00200010350b201b21002018201b470d000c020b0b4200200a20047d200b200354ad7d2216200b20037d2217200b562016200a562016200a511b22001b210a4200201720001b210b4200201520027d2014200154ad7d2216201420017d2217201456201620155620162015511b22001b21154200201720001b21140b20054180016a200a370300200541f8006a200b370300200541f0006a2015370300200541e8006a2014370300200541d8006a2012370300200541d0006a2011370300200541c8006a2010370300200541306a41106a200d370300200541e0006a20133703002005413c6a200f360200200541306a41086a200e36020020054188016a200529031037030020054190016a200541106a41086a29030037030020054198016a200541106a41106a290300370300200520052f012c3b00312005200836023420052005412c6a41026a2d00003a00332005200c3a003002400240200c4102470d002007ad4220862006ad8410070c010b200541e8016a200541306a1080052007ad4220862006ad8420053502f00142208620052802e8012200ad841002024020052802ec01450d00200010350b200c0d00200e450d00200e41306c450d00200810350b02402005280204450d00200610350b200541a0026a24000ba60203027f017e017f230041106b22022400200241003602082002420137030002400240024020002d00004101460d00410110332203450d02200341003a0000200220033602002002428180808010370204200041086a200210a406200235020842208621042002280204452103200228020021000c010b410110332203450d01200341013a000020024281808080103702042002200336020020002d0001210520034101410210372203450d01200320053a00012002428280808020370204200220033602002000280204210520034102410610372200450d01200020053600022002200036020020024286808080e000370204410021034280808080e00021040b200129020020042000ad841002024020030d00200010350b200241106a24000f0b103c000bd21f04067f027e027f017e230041f0006b220624000240024002402002410c6a280200200241106a28020010172207417f460d00410c103322080d010c020b109b05000b200820073602082008428180808010370200200641186a420037030020064280808080c000370310200642043703080240024002400240024002402008280200220741016a220941014d0d00200820093602002007417e460d002008200741026a3602000240200628021c22072006280218470d00200641146a20074101108601200628021c21070b200628021420074102746a20083602002006200628021c41016a36021c2008280208210a200641d0006a41a58ecc0041031050200641206a41a9bbca0041061050200641e4006a200641206a41086a22092802003602002006200629032037025c200641206a41106a220b200641d0006a41106a2903003703002009200641d0006a41086a29030037030020062006290350370320024020062802102207200628020c470d00200641086a20074101109101200628021021070b200628020820074105746a22074101360218200720062903203702002007411c6a200a360200200741106a200b290300370200200741086a20092903003702002006200628021041016a36021020082008280200417f6a2207360200024020070d002008280208101820082008280204417f6a220736020420070d00200810350b200641086a41a88ecc004103411110e604200641086a41c6dfcb00410f411210e604200641086a41d5dfcb004111411310e604200641086a41e6dfcb00410f411410e604200641086a41f5dfcb00410c411510e604200641086a4181e0cb004108411610e604200641086a4189e0cb00410f411710e604200641086a4198e0cb00410d411810e604200641086a41a5e0cb00410a411910e604200641086a41afe0cb00410a411a10e604200641086a41b9e0cb00410b411b10e604200641086a41c4e0cb00410d411c10e604200641086a41d1e0cb00410c411d10e604200641086a41dde0cb00410b411e10e604200641086a41e8e0cb004115411f10e604200641086a41fde0cb00410a412010e604200641086a4187e1cb004107412110e604200641086a418ee1cb004113412210e604200641086a41a1e1cb004115412310e604200641086a41b6e1cb004111412410e604200641086a41c7e1cb00410e412510e604200641086a41d5e1cb004110412610e604200641086a41e5e1cb004110412710e604200641086a41f5e1cb004111412810e604200641086a4186e2cb004111412910e604200641086a4197e2cb004116412a10e604200641086a41ade2cb004112412b10e604200641086a41bfe2cb00410b412c10e604200641086a41cae2cb004110412d10e604200641086a41dae2cb004117412e10e604200641086a41f1e2cb004111412f10e604200641086a4182e3cb004113413010e604200641086a4195e3cb004113413110e604200641086a41a8e3cb004113413210e604200641206a410c6a200441086a280200360200200620033602202006410336023c20062005360238200620083602342006200429020037022420062001280200360230200628021022084105744104722204417f4c0d01200241146a350200210c2002411c6a350200210d20062802082107200410332209450d022006410036025820062004360254200620093602502008200641d0006a10770240024020080d002006280258210820062802542103200628025021090c010b200720084105746a210a034020072802002103200741086a2802002208200641d0006a10770240024020062802542201200628025822046b2008490d00200628025021090c010b200420086a22092004490d06200141017422052009200520094b1b22054100480d060240024020010d00024020050d00410121090c020b200510332209450d0b0c010b2006280250210920012005460d0020092001200510372209450d0a0b20062005360254200620093602500b200920046a20032008109d081a2006200420086a3602582007410c6a2802002105200741146a2802002209200641d0006a10770240024020062802542203200628025822016b2009490d0020062802502104200321080c010b200120096a22082001490d06200341017422042008200420084b1b22084100480d060240024020030d00024020080d00410121040c020b200810332204450d0b0c010b2006280250210420032008460d0020042003200810372204450d0a0b20062008360254200620043602500b200420016a20052009109d081a2006200120096a220936025802400240200741186a2802004101460d000240024020082009460d00200921080c010b200841016a22092008490d08200841017422012009200120094b1b22094100480d080240024020080d0041002108024020090d00410121040c020b200910332204450d0d0c010b20082009460d0020042008200910372204450d0c0b20062009360254200620043602500b200420086a41013a00002006200841016a220836025820062007411c6a2802002201360268200641e8006a21050c010b0240024020082009460d00200921080c010b200841016a22092008490d07200841017422012009200120094b1b22094100480d070240024020080d0041002108024020090d00410121040c020b200910332204450d0c0c010b20082009460d0020042008200910372204450d0b0b20062009360254200620043602500b200420086a41023a00002006200841016a220836025820062007411c6a2802002201360268200641e8006a21050b024002402006280254220420086b4104490d0020062802502109200421030c010b200841046a22092008490d06200441017422012009200120094b1b22034100480d060240024020040d00024020030d00410121090c020b200310332209450d0b0c010b2006280250210920042003460d0020092004200310372209450d0a0b2006200336025420062009360250200528020021010b200920086a20013600002006200841046a2208360258200741206a2207200a470d000b0b02400240024002400240024002404133200d422086200c842008ad4220862009ad84200641206a1019220b41036a220841024b0d004100210120080e03010002010b200628021c220741ffffffff03712007470d0720074102742204417f4c0d07200628021421080240024020040d00410421010c010b200410332201450d090b200641003602582006200136025020062004410276360254200641d0006a410020071086012006280250210e2006280258210102402007450d0020074102742105200e20014102746a210703402008280200220428020041016a220a41014d0d08200841046a21082004200a36020020072004360200200141016a2101200741046a21072005417c6a22050d000b0b2006280254210f02402003450d00200910350b2002350204210c2002350200210d2006410036025820064208370350200641d0006a41004100109a01200628025822084104744104722207417f4c0d072006280254210920062802502104200710332203450d082006410036025820062007360254200620033602502008200641d0006a107702402008450d00200841047421072004210803402008200641d0006a10e504200841106a2108200741706a22070d000b0b2006350258211020062802542103200628025021070240200941ffffffff0071450d00200410350b410a10392208450d08200b200c422086200d8420104220862007ad842008410a200641206a101a41036a220441034b0d024101210520040e0404020203040b410221010b410121054100210a02402003450d00200910350b0c090b41cfa2cc00412841c086cc00103f000b2006410936026c410121052006200841016a36026820082d0000220441014b0d01410421090240024020040e020100010b200641d0006a200641e8006a10e404200628025022094104460d022006280254210a0b410021050b200810352003450d05200710350c050b20081035024020030d000c050b200710350c040b00000b1044000b1045000b103e000b200b101b02402001450d0020014102742107200e21080340200828020022042004280200417f6a3602000240200828020022042802000d0020042802081018200828020022042004280204417f6a360204200828020022042802040d00200410350b200841046a21082007417c6a22070d000b0b0240200f41ffffffff0371450d00200e10350b410221010b200641206a410c6a290200210c200641206a41086a280200210720062802342108200628022421040240024002400240024002400240024002400240200628023c0e0403020001030b20004101360204200041086a4200370200200041106a41003a00000c030b2005450d04200041003a0004200ca72109024020010d00200041b5c1c60036020820004101360200200041186a2009360200200041146a2007360200200041106a20043602002000410c6a41103602000c060b200041c5c1c60036020820004101360200200041186a2009360200200041146a2007360200200041106a20043602002000410c6a41213602000c050b200041003a000420004101360200200041186a200c3e0200200041146a2007360200200041106a20043602002000410c6a4128360200200041086a41fcc0c6003602000c020b200041106a41003a00002000410c6a200641c8006a2802003602002000200641c0006a2903003702040b200041003602002007450d00200410350b20082008280200417f6a220736020020070d032008280208101820082008280204417f6a220736020420070d030c020b0240200941044b0d000240024020090e050102020200010b2000200436020420004100360200200041106a41003a00002000410c6a4100360200200041086a20073602000c020b2000200436020420004100360200200041106a200a3a00002000410c6a200c3e0200200041086a20073602000c010b200041003a000420004101360200200041186a200c3e0200200041146a2007360200200041106a20043602002000410c6a4111360200200041086a41a4c1c6003602000b20082008280200417f6a220736020020070d012008280208101820082008280204417f6a220736020420070d010b200810350b024020062802102207450d00200628020821082007410574210703400240200841046a280200450d00200828020010350b0240200841106a280200450d002008410c6a28020010350b200841206a2108200741606a22070d000b0b0240200628020c41ffffff3f71450d00200628020810350b0240200628021c2207450d0020062802142108200741027421070340200828020022042004280200417f6a3602000240200828020022042802000d0020042802081018200828020022042004280204417f6a360204200828020022042802040d00200410350b200841046a21082007417c6a22070d000b0b0240200628021841ffffffff0371450d00200628021410350b200641f0006a24000f0b103c000b120041b1c6c60041fc0041c086cc00103f000b7201027f230041106b22042400024002402003450d002002280200450d010b41e6c1c60041f40341dcc5c6001064000b2001280210210320012802182105200228020421022004410036020020042002360204200041054104200520032001411c6a200410be051b360200200441106a24000bcb0501067f230041f0006b22042400024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d02410521030240200241246a280200220520012802002802182802402802b4014b0d0020022802042106200241146a2802002107200441186a4200370300200441106a4200370300200441086a420037030020044200370300200128021821022001280210210820044281808080800437034041052103200220082001411c6a2209200441c0006a10be050d00024002402001280214280208200620044120101c41026a220241024b0d0020020e03020001020b41cfa2cc00412841f8a2cc00103f000b20012802102102200128021821082004410136024020042005360244200820022009200441c0006a10be050d002005417f4c0d040240024020050d0041002108410121020c010b200510392202450d06200521080b0240024002402001280214280208200720022005101c41026a220641024b0d0020060e03010002010b41cfa2cc00412841f8a2cc00103f000b2008450d01200210350c010b20012802002101200441206a41186a2206200441186a290300370300200441206a41106a2209200441106a290300370300200441206a41086a2207200441086a290300370300200420042903003703200240200128021822012802402802b40120054f0d002008450d01200210350c010b200441c0006a41186a2006290300370300200441c0006a41106a2009290300370300200441c0006a41086a20072903003703002004200429032037034020042005ad4220862008ad8437026420042002360260200141186a200141d0006a200441c0006a200441e0006a10af04410421030b20002003360200200441f0006a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b1045000b860302037f047e230041f0006b2204240002402003450d0020022802000d0020022802042105200441186a4200370300200441106a4200370300200441086a4200370300200442003703002001280218210320012802102106200442818080808004370340410521020240200320062001411c6a200441c0006a10be050d00024002402001280214280208200520044120101c41026a220341024b0d0020030e03020001020b41cfa2cc00412841f8a2cc00103f000b20012802002101200441206a41186a200441186a2903002207370300200441206a41106a200441106a2903002208370300200441206a41086a200441086a290300220937030020042004290300220a37032020012802182101200441c0006a41186a2007370300200441c0006a41106a2008370300200441c0006a41086a20093703002004200a37034020044100360260200141186a200141d0006a200441c0006a200441e0006a10af04410421020b20002002360200200441f0006a24000f0b41e6c1c60041f40341dcc5c6001064000be60201027f230041306b2204240002402003450d0020022802000d0020022802042105200441186a4200370300200441106a4200370300200441086a420037030020044200370300200128021821022001280210210320044281808080800437032002400240200220032001411c6a200441206a10be050d00024002402001280214280208200520044120101c41026a220241024b0d0020020e03020001020b41cfa2cc00412841f8a2cc00103f000b200441206a2001280200280218220241186a200241d0006a2002410c6a4100200228020c1b2004109104024002402004280220450d00200141046a21020240200141086a280200450d00200228020010350b20022004290320370200200241086a200441206a41086a280200360200410021010c010b2001410c6a4100360200410121010b20004100360200200020013602040c010b200041053602000b200441306a24000f0b41e6c1c60041f40341dcc5c6001064000bdc0802087f027e23004190016b22042400024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d0320022802042105200241146a2802002106200241246a2802002107200241346a28020021082001280210210220012802182103200441013602482004200636024c02400240200320022001411c6a2209200441c8006a10be050d002006417f4c0d060240024002400240024002400240024020060d004100210a4101210b02402001280214280208200541014100101c41026a220241024b0d00200141146a210520020e03090002090b41cfa2cc00412841f8a2cc00103f000b20061039220b450d04024020012802142802082005200b2006101c41026a220241024b0d00200141146a21052006210a20020e03020001020b41cfa2cc00412841f8a2cc00103f000b41002102200441003a00680240034020062002460d01200441c8006a20026a200b20026a2d00003a00002004200241016a22033a00682003210220034120470d000b200441f0006a41186a2202200441c8006a41186a290300370300200441f0006a41106a2203200441c8006a41106a290300370300200441f0006a41086a2206200441c8006a41086a290300370300200420042903483703700240200a450d00200b10350b200441086a41086a2006290300370300200441086a41106a2003290300370300200441086a41186a2002290300370300200420042903703703082001280210210220012802182103200441013602482004200836024c200320022009200441c8006a10be050d072008417f4c0d0d20080d032005280200280208200741014100101c41026a220241024b0d0220020e03070207070b0240200241ff0171450d00200441003a00680b200a450d060b200b10350c050b41cfa2cc00412841f8a2cc00103f000b200810392202450d0002402005280200280208200720022008101c41026a220341024b0d0020030e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2008410f4d0d00200241086a290000210c2002290000210d200210352001280218210320012802002802182102200441f0006a41186a200441086a41186a290300370300200441f0006a41106a200441086a41106a290300370300200441f0006a41086a200441086a41086a29030037030020042004290308370370200441c8006a41186a200241e8006a290000370300200441c8006a41106a200241e0006a290000370300200441c8006a41086a200241d8006a29000037030020042002290050370348200441286a20034100200441c8006a200441f0006a200d200c200210bf0520042d0028210220004100360200200020024104473602040c020b200210350b200041053602000b20044190016a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000bfb0e04037f017e077f047e230041a0016b2204240002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802204101470d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620022802042105200241146a2802002106200241286a2903002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b2001280210210220012802182103200441013602682004200636026c02400240200320022001411c6a220c200441e8006a10be050d002006417f4c0d090240024002400240024002400240024020060d004100210d4101210e02402001280214280208200541014100101c41026a220241024b0d00200141146a210520020e03090002090b41cfa2cc00412841f8a2cc00103f000b20061039220e450d04024020012802142802082005200e2006101c41026a220241024b0d00200141146a21052006210d20020e03020001020b41cfa2cc00412841f8a2cc00103f000b41002102200441003a0088010240034020062002460d01200441e8006a20026a200e20026a2d00003a00002004200241016a22033a0088012003210220034120470d000b200441c8006a41186a2202200441e8006a41186a290300370300200441c8006a41106a2203200441e8006a41106a290300370300200441c8006a41086a2206200441e8006a41086a290300370300200420042903683703480240200d450d00200e10350b200441086a41086a2006290300370300200441086a41106a2003290300370300200441086a41186a2002290300370300200420042903483703082001280210210220012802182103200441013602682004200936026c20032002200c200441e8006a10be050d072009417f4c0d1020090d032005280200280208200841014100101c41026a220241024b0d0220020e03070207070b0240200241ff0171450d00200441003a0088010b200d450d060b200e10350c050b41cfa2cc00412841f8a2cc00103f000b200910392202450d0002402005280200280208200820022009101c41026a220341024b0d0020030e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2009410f4d0d00200241086a290000210f20022900002110200210352001280210210220012802182103200441013602682004200b36026c20032002200c200441e8006a10be050d0102400240200b2001410c6a220628020022034b0d00200b21020c010b02400240200141086a280200220220036b200b20036b2205490d002001280204210e200321020c010b200320056a220e2003490d0d20024101742209200e2009200e4b1b22094100480d0d0240024020020d00024020090d004101210e0c020b20091033220e0d010c100b2001280204210e20022009460d00200e200220091037220e450d0f0b2001200e360204200141086a20093602002001410c6a28020021020b200e20026a21090240024020054102490d0020094100200b2003417f7322036a2205109f081a200e200b20026a20036a6a2109200520026a21020c010b2005450d010b200941003a0000200241016a21020b20062002360200024002402001280214280208200a20012802042002101c41026a220241024b0d0020020e03030001030b41cfa2cc00412841f8a2cc00103f000b2001410c6a220228020021094100210520024100360200200141086a280200210220012802042103200142013702042001280218220629030822112112024002402007500d00418002210e2007211220112007540d010b2006201120127d3703082004201237033020042012370328200128020041186a280200210e200441e8006a41186a200441086a41186a290300370300200441e8006a41106a200441086a41106a290300370300200441e8006a41086a200441086a41086a29030037030020042004290308370368200420093602980120042002360294012004200336029001200441c8006a200e200441e8006a2010200f200441286a20044190016a10ef03410121090240024020042802484101470d00200441c8006a41186a280200210c200441dc006a2802002102200441c8006a41106a28020021034100210e0c010b200441c8006a41106a2d0000210e200441d4006a280200210c200441d0006a280200210241002109200428024c21030b2006200429033020062903087c370308200141086a280200210602402009450d00418002210e2006450d01200128020410350c010b02402006450d00200128020410350b200c21050b200120033602042001410c6a2005360200200141086a2002360200200041003602002000200e3602040c020b200210350b200041053602000b200441a0016a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b103e000b103c000b8a1004037f017e077f047e230041b0016b2204240002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802204101470d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620022802042105200241146a2802002106200241286a2903002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b2001280210210220012802182103200441013602782004200636027c02400240200320022001411c6a220c200441f8006a10be050d002006417f4c0d090240024002400240024002400240024020060d004100210d4101210e02402001280214280208200541014100101c41026a220241024b0d00200141146a210520020e03090002090b41cfa2cc00412841f8a2cc00103f000b20061039220e450d04024020012802142802082005200e2006101c41026a220241024b0d00200141146a21052006210d20020e03020001020b41cfa2cc00412841f8a2cc00103f000b41002102200441003a0098010240034020062002460d01200441f8006a20026a200e20026a2d00003a00002004200241016a22033a0098012003210220034120470d000b200441c8006a41186a2202200441f8006a41186a290300370300200441c8006a41106a2203200441f8006a41106a290300370300200441c8006a41086a2206200441f8006a41086a290300370300200420042903783703480240200d450d00200e10350b200441086a41086a2006290300370300200441086a41106a2003290300370300200441086a41186a2002290300370300200420042903483703082001280210210220012802182103200441013602782004200936027c20032002200c200441f8006a10be050d072009417f4c0d1020090d032005280200280208200841014100101c41026a220241024b0d0220020e03070207070b0240200241ff0171450d00200441003a0098010b200d450d060b200e10350c050b41cfa2cc00412841f8a2cc00103f000b200910392202450d0002402005280200280208200820022009101c41026a220341024b0d0020030e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2009410f4d0d00200241086a290000210f20022900002110200210352001280210210220012802182103200441013602782004200b36027c20032002200c200441f8006a10be050d01200141046a210e02400240200b2001410c6a220628020022034b0d00200b21020c010b02400240200141086a280200220220036b200b20036b2209490d00200e2802002105200321020c010b200320096a22052003490d0d2002410174220c2005200c20054b1b220c4100480d0d0240024020020d000240200c0d00410121050c020b200c103322050d010c100b200e28020021052002200c460d0020052002200c10372205450d0f0b20012005360204200141086a200c3602002001410c6a28020021020b200520026a210c0240024020094102490d00200c4100200b2003417f7322036a2209109f081a2005200b20026a20036a6a210c200920026a21020c010b2009450d010b200c41003a0000200241016a21020b20062002360200024002402001280214280208200a20012802042002101c41026a220241024b0d0020020e03030001030b41cfa2cc00412841f8a2cc00103f000b2001410c6a2202280200210520024100360200200141086a28020021022001280204210320014201370204200128021822062903082211211202400240024002402007500d002007211220112007540d010b2006201120127d3703082004201237037020042012370368200128020041186a2802002109200420053602502004200236024c20042003360248200441f8006a20092010200f200441e8006a200441086a200441c8006a10c005410121050240024020042802784101470d00200441f8006a41186a28020021092004418c016a280200210220044188016a28020021030c010b200441c8006a41086a200441f8006a41186a290300370300200441c8006a41106a20044198016a2802003602002004200441f8006a41106a290300370348200441a8016a2d0000210c2004419c016a290200210720044184016a2802002109200441f8006a41086a280200210241002105200428027c21030b2006200429037020062903087c370308200441286a41086a2206200441c8006a41086a290300370300200441286a41106a2208200441c8006a41106a280200360200200420042903483703282005450d01200141086a280200450d00200e28020010350b200120033602042001410c6a4100360200200141086a200236020041800221020c010b2004418c016a200629030037020020044194016a200828020036020020042009360280012004200236027c2004200336027820042004290328370284010240200141086a280200450d00200e28020010350b200120073702042001410c6a4100360200200c41ff017122020d00200e200441f8006a412010780b20004100360200200020023602040c020b200210350b200041053602000b200441b0016a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b103e000b103c000bf113020b7f047e230022042105200441e00c6b41607122042400024002402003450d0020022802000d00024020034101460d0020022802100d0020022802042106200241146a28020021072001280210210220012802182103200441013602e001200420073602e401200320022001411c6a200441e0016a10be050d0202402007417f4c0d00024002400240024002400240024020070d00410021084101210902402001280214280208200641014100101c41026a220241024b0d0020020e030b00020b0b41cfa2cc00412841f8a2cc00103f000b0240200710392209450d0002402001280214280208200620092007101c41026a220241024b0d002007210820020e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b41002102200441003a0080020240034020072002460d01200441e0016a20026a200920026a2d00003a00002004200241016a22033a0080022003210220034120470d000b200441800a6a41186a2202200441e0016a41186a290300370300200441800a6a41106a2203200441e0016a41106a290300370300200441800a6a41086a2207200441e0016a41086a290300370300200420042903e0013703800a02402008450d00200910350b200441206a41086a2007290300370300200441206a41106a2003290300370300200441206a41186a2002290300370300200420042903800a3703202001280218210a200441c0006a41186a2001280200280218220641e8006a290000370300200441c0006a41106a200641e0006a290000370300200441c0006a41086a200641d8006a29000037030020042006290050370340200628021841016a220b41004c0d052006200b3602182006411c6a220c2802002208450d03200641206a280200210d0340200841086a210320082f0106220e410574210241002107024003402002450d01200441c0006a2003412010a0082209450d05200241606a2102200741016a2107200341206a21032009417f4a0d000b2007417f6a210e0b200d450d04200d417f6a210d2008200e4102746a41880b6a28020021080c000b0b0240200241ff0171450d00200441003a0080020b2008450d080b200910350c070b2008200741e0006c6a220241c5036a310000200241e8026a290300220f200f5022031ba7450d004200200241f8026a29030020031b210f4200200241f0026a29030020031b21100c010b200441106a200641286a280200200441c0006a2006412c6a28020028021c110400200441186a290300210f2006280218210b200429031021100b2006200b417f6a360218024020062802082202450d00200241d0006a2203200441c0006a460d052003200441c0006a412010a008450d05034020022802082202450d01200441c0006a200241d0006a2203460d062003200441c0006a412010a0080d000c060b0b200441e0016a200a4102200441c0006a200441206a2010200f200610bf0520042d00e0014104470d04024020062802180d002006417f360218200441003a009c0120044100360298012004410036029001200441013a007d200441c0016a41186a200441c0006a41186a290300370300200441c0016a41106a200441c0006a41106a290300370300200441c0016a41086a200441c0006a41086a290300370300200420042903403703c001024002400240200628021c2209450d00200641206a280200210d0c010b200441800a6a410041e002109f081a200441e0016a410041a008109f081a41880b10332209450d014100210d200941003b010620094100360200200941086a200441800a6a41e002109d081a200941e8026a200441e0016a41a008109d081a200641206a41003602002006200936021c0b2004200c3602880a200420093602840a2004200d3602800a034020092f0106220b41057421084100210241002103024002400240034020082002460d010240200441c0016a200920026a41086a412010a00822070d0041002102200d21070c030b200241206a2102200341016a21032007417f4a0d000b2003417f6a210b0b200d0d014101210241002107200b21030b200441e0016a41106a2003360200200441ec016a200c360200200441e0016a41086a20093602002004200c3602880a200420093602840a2004200d3602800a200420073602e401200420023602e001024002402002450d00200441a0016a41186a200441c0016a41186a290300220f370300200441a0016a41106a200441c0016a41106a2903002210370300200441a0016a41086a200441c0016a41086a2903002211370300200420042903c00122123703a0012004419c0a6a2011370200200441800a6a41246a2010370200200441ac0a6a200f3702002004200641246a3602900a2004200336028c0a2004200c3602880a200420093602840a200420073602800a200420123702940a200441e0016a41186a4200370300200442003703e00120044198026a20042903980137030020044190026a20042903900137030020044188026a20042903880137030020044180026a200429038001370300200441b8026a2004290378370300200441b0026a2004290370370300200441a8026a2004290368370300200441a0026a2004290360370300200441800a6a200441e0016a1080031a4202210f0c010b2009200341e0006c6a22024190036a20042903880137030020024188036a200429038001370300200241c0036a2004290378370000200241b8036a2004290370370000200241b0036a2004290368370000200241a8036a200429036037000020024180036a4200370300200241e8026a2203290300210f20034200370300200241a0036a22032802002108200320042903980137030020024198036a2202290300211020022004290390013703002010a721092010422088a721030b0240200f4202510d000240024020090d0041002108200441f4016a4100360200200441003602e4010c010b0240024020030d00200921020c010b2003210220092107034020072802ec0321072002417f6a22020d000b200921020340200220022f01064102746a41ec036a28020021022003417f6a22030d000b200721090b200441fc016a20022f0106360200200441f8016a4100360200200441f4016a2002360200200441003602f001200442003703e801200420093602e401200441003602e0010b2004200836028002200441e0016a1081030b2006200628021841016a3602180240200128021c0d00200141246a280200450d00200141206a28020010350b2001410236021c200141206a20042902e001370200200141286a200441e8016a2802003602000c080b200d417f6a210d2009200b4102746a41880b6a28020021090c000b0b103c000b41a797cc004110200441e0016a41c8c1c30041c897cc001046000b41ac96cc004118200441e0016a41d8c1c30041d496cc001046000b1044000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b20004105360200200524000b940501077f230041106b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a2802002102200128021021032001280218210620044103360200200420023602040240200620032001411c6a2207200410be050d0020012802102103200128021821062004410136020020042002360204200620032007200410be050d000240024020022001410c6a220728020022064b0d00200221030c010b02400240200141086a280200220320066b200220066b2208490d0020012802042109200621030c010b200620086a22092006490d052003410174220a2009200a20094b1b220a4100480d050240024020030d000240200a0d00410121090c020b200a103322090d010c080b200128020421092003200a460d0020092003200a10372209450d070b20012009360204200141086a200a3602002001410c6a28020021030b200920036a210a0240024020084102490d00200a410020022006417f7322066a2208109f081a2009200220036a20066a6a210a200820036a21030c010b2008450d010b200a41003a0000200341016a21030b20072003360200024002402001280214280208200520012802042003101c41026a220241024b0d0020020e03020001020b41cfa2cc00412841f8a2cc00103f000b2001410c6a2202280200210320024100360200200141086a280200210220012802042106200142013702040240200128021c0d00200141246a280200450d00200141206a28020010350b2001410036021c200141286a2003360200200141246a2002360200200141206a20063602000b20004105360200200441106a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b103e000b103c000b24002001410c6a4100360200200141046a200128020041206a41201078200041043602000b28002001410c6a4100360200200141046a200128020028021841d0006a41201078200041043602000b5702017f017e230041206b220424002001410c6a41003602002004420110cf04200429030021052004200441086a29030037031820042005370310200141046a200441106a4110107820004104360200200441206a24000b4001017f230041106b220424002001410c6a410036020020042001280218290308370308200141046a200441086a4108107820004104360200200441106a24000ba403020b7f027e230041206b220424002001410c6a410036020002402001280200280218220528021841016a220641004c0d00200141046a2107200541d0006a210820052006360218024002402005411c6a2802002209450d00200541206a280200210a0340200941086a210b20092f0106220c41057421014100210d0240024003402001450d012008200b412010a008220e450d02200141606a2101200d41016a210d200b41206a210b200e417f4a0d000b200d417f6a210c0b200a450d02200a417f6a210a2009200c4102746a41880b6a28020021090c010b0b2009200d41e0006c6a220141c5036a310000200141e8026a290300220f200f50220b1ba7450d004200200141f8026a290300200b1b210f4200200141f0026a290300200b1b21100c010b2004200541286a28020020082005412c6a28020028021c110400200441086a290300210f20052802182106200429030021100b20052006417f6a3602182004200f370318200420103703102007200441106a4110107820004104360200200441206a24000f0b41ac96cc004118200441106a41d8c1c30041d496cc001046000b5202027f017e230041106b220424002001410c6a41003602002001280200220529030021062004200541086a29030037030820042006370300200141046a20044110107820004104360200200441106a24000bb60301057f230041206b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d01410521050240200241146a280200220320012802102206280284014b0d0020022802042107200128021821022004410136020020042003360204200220062001411c6a200410be050d002003417f4c0d0302400240024020030d00410021084101210602402001280214280208200741014100101c41026a220241024b0d0020020e03040002040b41cfa2cc00412841f8a2cc00103f000b200310392206450d0602402001280214280208200720062003101c41026a220241024b0d002003210820020e03020001020b41cfa2cc00412841f8a2cc00103f000b2001410c6a410036020020042006200310d503412010332202450d0520022004290300370000200241186a200441186a290300370000200241106a200441106a290300370000200241086a200441086a29030037000041042105200141046a200241201078200210352008450d010b200610350b20002005360200200441206a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b1045000b4001017f230041106b220424002001410c6a410036020020042001280200290310370308200141046a200441086a4108107820004104360200200441106a24000b5a02027f017e230041106b220424002001410c6a410036020020012802002802182802402205290390012106200420054198016a29030037030820042006370300200141046a20044110107820004104360200200441106a24000b5a02027f017e230041106b220424002001410c6a4100360200200128020028021828024022052903a00121062004200541a8016a29030037030820042006370300200141046a20044110107820004104360200200441106a24000bb00601047f230041e0096b220424000240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a28020021022001280210210320012802182106200441013602a807200420023602ac07024002400240200620032001411c6a2207200441a8076a10be050d002002417f4c0d0502400240024020020d00410021064101210302402001280214280208200541014100101c41026a220541024b0d0020050e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200210392203450d0002402001280214280208200520032002101c41026a220541024b0d002002210620050e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2004200236020c20042003360208200441a8076a200441086a10b902024020042802a8072202411b460d00200441f8046a200441a8076a41047241ac02109d081a02402006450d00200310350b200441b8026a200441f8046a41ac02109d081a20042002360208200441086a410472200441b8026a41ac02109d081a200441e8046a200441086a10d8032001280210210220012802182103200420042903e8043703b007200441043602a807200320022007200441a8076a10be05450d03200441086a10ba02410521020c040b2006450d010b200310350b410521020c010b20012802002102200441f8046a200441086a41b002109d081a200441c0026a22032002280218220241d8006a290000370300200441c8026a2206200241e0006a290000370300200441d0026a2205200241e8006a290000370300200420022900503703b802200441af076a200441f8046a41b002109d081a02402002413c6a2802002201200241386a280200470d00200241346a20014101109501200228023c21010b2002280234200141d8026c6a220141013a0000200120042903b802370001200141096a2003290300370000200141116a2006290300370000200141196a2005290300370000200141216a200441a8076a41b702109d081a2002200228023c41016a36023c410421020b20002002360200200441e0096a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b9315020c7f027e230041b0036b220424000240024002400240024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d0320034104460d0420022802400d0420034105460d0520022802500d0520034106460d0620022802600d0620034107460d0720022802700d0720022802042105200241146a2802002106200241246a2802002107200241346a2802002108200241c4006a2802002109200241d4006a280200210a200241e4006a280200210b200241f4006a280200210c2001280210210220012802182103200441013602b801200420063602bc010240024002400240024002400240200320022001411c6a220d200441b8016a10be050d002006417f4c0d0f02400240024020060d004100210e4101210f02402001280214280208200541014100101c41026a220241024b0d00200141146a210520020e03040002040b41cfa2cc00412841f8a2cc00103f000b20061039220f450d06024020012802142802082005200f2006101c41026a220241024b0d00200141146a21052006210e20020e03020001020b41cfa2cc00412841f8a2cc00103f000b41002102200441003a00d8010240034020062002460d01200441b8016a20026a200f20026a2d00003a00002004200241016a22033a00d8012003210220034120470d000b20044190036a41086a2202200441b8016a41086a29030037030020044190036a41106a2203200441b8016a41106a29030037030020044190036a41186a2206200441b8016a41186a290300370300200420042903b801370390030240200e450d00200f10350b200441086a41086a2002290300370300200441086a41106a2003290300370300200441086a41186a200629030037030020042004290390033703082001280210210220012802182103200441013602b801200420083602bc0120032002200d200441b8016a10be050d132008417f4c0d1120080d044100210f410121062005280200280208200741014100101c41026a220241024b0d0320020e03130305130b0240200241ff0171450d00200441003a00d8010b200e450d010b200f10350b200441c8006a41186a20044190036a41186a290300370300200441c8006a41106a20044190036a41106a290300370300200441c8006a41086a20044190036a41086a2903003703002004200429039003370348410521020c110b41cfa2cc00412841f8a2cc00103f000b200810392206450d0102402005280200280208200720062008101c41026a220241024b0d002008210f20020e030e00010e0b41cfa2cc00412841f8a2cc00103f000b41002102200441003a00d801024002400240034020082002460d01200441b8016a20026a200620026a2d00003a00002004200241016a22033a00d8012003210220034120470d000b20044190036a41086a2202200441b8016a41086a29030037030020044190036a41106a2203200441b8016a41106a29030037030020044190036a41186a2208200441b8016a41186a290300370300200420042903b801370390030240200f450d00200610350b200441286a41086a2002290300370300200441286a41106a2003290300370300200441286a41186a200829030037030020042004290390033703282001280210210320012802182106200441013602b8012004200a3602bc014105210220062003200d200441b8016a10be050d11200a417f4c0d0e200a0d022005280200280208200941014100101c41026a220341024b0d0120030e03110111110b0240200241ff0171450d00200441003a00d8010b200f0d0e0c0f0b41cfa2cc00412841f8a2cc00103f000b200a10392203450d000240200528020028020820092003200a101c41026a220641024b0d0020060e03020003020b41cfa2cc00412841f8a2cc00103f000b1045000b200310350c0c0b0240200a410f4b0d00200310350c0c0b200341086a2900002110200329000021112003103541002102200441003602a00120044201370398010240200c450d0020044190036a41186a210320044190036a41106a210620044190036a41086a210f4101210a03402003420037030020064200370300200f4200370300200442003703900320012802182108200128021021072004428180808080043703b8010240024020082007200d200441b8016a10be050d00024002402005280200280208200b20044190036a4120101c41026a220841024b0d0020080e03020001020b41cfa2cc00412841f8a2cc00103f000b200441b8016a41186a22072003290300370300200441b8016a41106a22092006290300370300200441b8016a41086a220e200f29030037030020042004290390033703b80102402002200428029c01470d0020044198016a20024101108a01200428029801210a20042802a00121020b200a20024105746a220820042903b801370000200841186a2007290300370000200841106a2009290300370000200841086a200e2903003700002004200241016a22023602a001200b41206a2208200b4f0d010b0240200428029c0141ffffff3f71450d00200a10350b410521020c0e0b2008210b200c417f6a220c0d000b0b200441e8006a41086a220220044198016a41086a2206280200360200200420042903980137036820062001280200280218220341d8006a29000037030020044198016a41106a2206200341e0006a29000037030020044198016a41186a2201200341e8006a2900003703002004200329005037039801200441f8006a41086a200441086a41086a290300370300200441f8006a41106a220f200441086a41106a290300370300200441f8006a41186a2208200441086a41186a2903003703002004200429030837037820044190036a41186a2205200441286a41186a29030037030020044190036a41106a220d200441286a41106a29030037030020044190036a41086a200441286a41086a2903003703002004200429032837039003200441d3006a20022802003600002004200429036837004b02402003413c6a2802002202200341386a280200470d00200341346a20024101109501200328023c21020b2003280234200241d8026c6a220241023a0000200220042903980137000120022004290378370021200241096a20044198016a41086a290300370000200241116a2006290300370000200241196a2001290300370000200241296a200441f8006a41086a290300370000200241316a200f290300370000200241396a200829030037000020022011370370200241f8006a20103703002002200429039003370041200241c9006a20044190036a41086a290300370000200241d1006a200d290300370000200241d9006a200529030037000020022004290048370061200241e8006a200441cf006a29000037000020024180016a200441b8016a41d801109d081a2003200328023c41016a36023c410421020c0b0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b200610350b410521020b20002002360200200441b0036a24000b16002000410036020020002001410c6a2802003602040ba50201067f230041106b220424000240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d024105210302402001410c6a2802002205200241146a2802002206490d00200520066b200241246a2802002205470d00200228020421072001280204210820012802182102200128021021092004410236020020042005360204200220092001411c6a200410be050d000240024020012802142802082007200820066a2005101d41026a220241024b0d0020020e03020001020b41cfa2cc00412841cca3cc00103f000b410421030b20002003360200200441106a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b820401087f230041106b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a280200210220012802102103200128021821062004410136020020042002360204410521070240200620032001411c6a200410be050d000240024020022001410c6a220828020022064b0d00200221030c010b02400240200141086a280200220320066b200220066b2209490d002001280204210a200621030c010b200620096a220a2006490d052003410174220b200a200b200a4b1b220b4100480d050240024020030d000240200b0d004101210a0c020b200b1033220a0d010c080b2001280204210a2003200b460d00200a2003200b1037220a450d070b2001200a360204200141086a200b3602002001410c6a28020021030b200a20036a210b0240024020094102490d00200b410020022006417f7322066a2209109f081a200a200220036a20066a6a210b200920036a21030c010b2009450d010b200b41003a0000200341016a21030b20082003360200024002402001280214280208200520012802042003101c41026a220141024b0d0020010e03020001020b41cfa2cc00412841f8a2cc00103f000b410421070b20002007360200200441106a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b103e000b103c000bf90803077f017e017f230041d0026b22042400024002400240024002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220034103460d0320022802300d03200241246a2802002105200241346a2802002106024002400240200241146a2802002203450d00200228020421072001280210210820012802182109200441013602082004200336020c41052102200920082001411c6a200441086a10be050d0a2003417f4c0d07200310392208450d08024002402001280214280208200720082003101c41026a220941024b0d0020090e03010003010b41cfa2cc00412841f8a2cc00103f000b200810350c0a0b41012107410021094100210a0c010b200420033602dc01200420083602d801200441086a200441d8016a10c301200441106a2802002109200429020c210b200428020c210a20042802082107200810352007450d082001280210280274200b422088a7490d070b20072009410041202009676b10c105024020094102490d00200721022009210303402002200241206a2208412010a008450d08200821022003417f6a220341024f0d000b0b2001280210210220012802182103200441013602082004200636020c200320022001411c6a2208200441086a10be050d062006417f4c0d040240024020060d0041002102410121030c010b200610392203450d06200621020b0240024002402001280214280208200520032006101c41026a220541024b0d0020050e03010002010b41cfa2cc00412841f8a2cc00103f000b2002450d07200310350c070b200128021021052001280218210c200441086a41086a20063602002004200936020c200441053602080240200c20052008200441086a10be05450d002002450d07200310350c070b2006ad4220862002ad84210b200441a8026a41086a2001280200280218220841d8006a290000370300200441b8026a2201200841e0006a290000370300200441c0026a2206200841e8006a290000370300200420082900503703a80202402008413c6a2802002202200841386a280200470d00200841346a20024101109501200828023c21020b2008280234200241d8026c6a220241003a0000200220042f00cd023b0001200241073a00102002200936000c2002200a36000820022007360004200220042903a802370011200241036a200441cd026a41026a2d00003a0000200241196a200441b0026a290300370000200241216a2001290300370000200241296a2006290300370000200220033600342002200b370038200220042f00a5023b0031200241336a200441a5026a41026a2d00003a0000200241c0006a200441d8016a41c800109d081a20024188016a200441086a41d001109d081a2008200828023c41016a36023c410421020c070b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b1045000b41052102200a41ffffff3f71450d00200710350b20002002360200200441d0026a24000bbd0a03047f027e037f230041d00b6b22042400024002402003450d0020022802000d00024020034101460d0020022802100d0020022802042105200241146a28020021022001280210210620012802182107200441013602502004200236025441052103200720062001411c6a200441d0006a10be050d0202402002417f4c0d00024020020d0002402001280214280208200541014100101c41026a220241024b0d0020020e03050005050b41cfa2cc00412841f8a2cc00103f000b024002400240200210392206450d0002402001280214280208200520062002101c41026a220741024b0d0020070e03020003020b41cfa2cc00412841f8a2cc00103f000b1045000b200610350c040b02402002410f4b0d00200610350c040b200641086a290000210820062900002109200610350240200128020028021822052802180d002005417f360218200441386a200541e8006a290000370300200441306a200541e0006a290000370300200441206a41086a200541d8006a290000370300200420052900503703200240024002402005411c6a220a2802002206450d00200541206a280200210b0c010b4100210b200441f0086a410041e002109f081a200441d0006a410041a008109f081a41880b10332206450d01200641003b010620064100360200200641086a200441f0086a41e002109d081a200641e8026a200441d0006a41a008109d081a200541206a41003602002005200636021c0b2004200a3602f808200420063602f4082004200b3602f008034020062f0106220c41057421074100210241002101024002400240034020072002460d010240200441206a200620026a41086a412010a00822030d0041002102200b21070c030b200241206a2102200141016a21012003417f4a0d000b2001417f6a210c0b200b0d014101210241002107200c21010b200441d0006a41106a2001360200200441dc006a200a360200200441d0006a41086a20063602002004200a3602f808200420063602f4082004200b3602f00820042007360254200420023602504101210302402002450d00200441186a200441206a41186a290300370300200441106a200441206a41106a290300370300200441086a200441206a41086a29030037030020042004290320370300410021030b0240024020030d002004418c096a200441086a29030037020020044194096a200441106a2903003702002004419c096a200441186a2903003702002004200541246a36028009200420013602fc082004200a3602f808200420063602f408200420073602f0082004200429030037028409200441f0006a2004290340370300200441f8006a200441c0006a41086a29030037030020044188016a41003602002004420037036820044200370350200441003a008c0120044100360280012004418d016a200429002037000020044195016a200441206a41086a2900003700002004419d016a200441206a41106a290000370000200441a5016a200441206a41186a290000370000200441003a00ad01200441f0086a200441d0006a10800321020c010b200441e4006a410036020020044100360270200441003602542006200141e0006c6a41e8026a2102200441d0006a1081030b200241286a2008370300200241206a2009370300200242013703182005200528021841016a360218410421030c070b200b417f6a210b2006200c4102746a41880b6a28020021060c000b0b103c000b41a797cc004110200441d0006a41c8c1c30041c897cc001046000b1044000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b20002003360200200441d00b6a24000b7d02027f017e230041306b220424002001410c6a4100360200200441086a2001280200280218220541186a200541d0006a109404200429031021062004200441086a41106a290300427f200428020822051b37032820042006427f20051b370320200141046a200441206a4110107820004104360200200441306a24000be30201047f230041106b220424000240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a280200210220012802102106200128021821072004410136020020042002360204410521030240200720062001411c6a200410be050d002002417f4c0d0302400240024020020d00410021074101210602402001280214280208200541014100101c41026a220141024b0d0020010e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200210392206450d0002402001280214280208200520062002101c41026a220141024b0d002002210720010e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2004200620021074024020042802000d00200429020410060b410421032007450d010b200610350b20002003360200200441106a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000b4001017f230041106b220424002001410c6a41003602002004200128020028021c36020c200141046a2004410c6a4104107820004104360200200441106a24000bce0502087f017e230041106b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120022802042105200241146a28020021022001280210210320012802182106200441013602002004200236020402400240200620032001411c6a200410be050d00200141046a21070240024020022001410c6a220828020022064b0d00200221030c010b02400240200141086a280200220320066b200220066b2209490d002007280200210a200621030c010b200620096a220a2006490d062003410174220b200a200b200a4b1b220b4100480d060240024020030d000240200b0d004101210a0c020b200b1033220a0d010c090b2007280200210a2003200b460d00200a2003200b1037220a450d080b2001200a360204200141086a200b3602002001410c6a28020021030b200a20036a210b0240024020094102490d00200b410020022006417f7322066a2209109f081a200a200220036a20066a6a210b200920036a21030c010b2009450d010b200b41003a0000200341016a21030b20082003360200024002402001280214280208200520012802042003101c41026a220241024b0d0020020e03020001020b41cfa2cc00412841f8a2cc00103f000b2001410c6a2202350200210c20024100360200200141086a2203280200210620012802042102200142013702042004200c4220862002ad84100510c20120032802002103024002402004280200450d0002402003450d00200728020010350b20072004290300370200200741086a200441086a280200360200410021012006450d01200210350c010b02402003450d00200728020010350b200120023602042001410c6a4100360200200141086a2006360200410121010b20004100360200200020013602040c010b200041053602000b200441106a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b103e000b103c000bc70402077f037e230041306b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220022802042105200241146a2802002103200241246a280200210620012802102107200128021821082004410136020020042003360204410521020240200820072001411c6a2209200410be050d002003417f4c0d0402400240024020030d00410021084101210702402001280214280208200541014100101c41026a220a41024b0d00200141146a2105200a0e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200310392207450d0002402001280214280208200520072003101c41026a220a41024b0d00200141146a210520032108200a0e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2003ad4220862007ad84101e2203290000210b200341086a290000210c200341106a290000210d200441186a200341186a290000370300200441106a200d370300200441086a200c3703002004200b37030020031035200128021821032001280210210120044282808080800437032002400240200320012009200441206a10be050d0002402005280200280208200620044120101d41026a220141024b0d0020010e03010002010b41cfa2cc00412841cca3cc00103f000b20080d010c020b410421022008450d010b200710350b20002002360200200441306a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000bc70402077f037e230041306b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220022802042105200241146a2802002103200241246a280200210620012802102107200128021821082004410136020020042003360204410521020240200820072001411c6a2209200410be050d002003417f4c0d0402400240024020030d00410021084101210702402001280214280208200541014100101c41026a220a41024b0d00200141146a2105200a0e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200310392207450d0002402001280214280208200520072003101c41026a220a41024b0d00200141146a210520032108200a0e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2003ad4220862007ad84101f2203290000210b200341086a290000210c200341106a290000210d200441186a200341186a290000370300200441106a200d370300200441086a200c3703002004200b37030020031035200128021821032001280210210120044282808080800437032002400240200320012009200441206a10be050d0002402005280200280208200620044120101d41026a220141024b0d0020010e03010002010b41cfa2cc00412841cca3cc00103f000b20080d010c020b410421022008450d010b200710350b20002002360200200441306a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000bc70402077f037e230041306b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220022802042105200241146a2802002103200241246a280200210620012802102107200128021821082004410136020020042003360204410521020240200820072001411c6a2209200410be050d002003417f4c0d0402400240024020030d00410021084101210702402001280214280208200541014100101c41026a220a41024b0d00200141146a2105200a0e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200310392207450d0002402001280214280208200520072003101c41026a220a41024b0d00200141146a210520032108200a0e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2003ad4220862007ad8410092203290000210b200341086a290000210c200341106a290000210d200441186a200341186a290000370300200441106a200d370300200441086a200c3703002004200b37030020031035200128021821032001280210210120044282808080800437032002400240200320012009200441206a10be050d0002402005280200280208200620044120101d41026a220141024b0d0020010e03010002010b41cfa2cc00412841cca3cc00103f000b20080d010c020b410421022008450d010b200710350b20002002360200200441306a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000ba20402077f017e230041206b2204240002400240024002402003450d0020022802000d0020034101460d0120022802100d0120034102460d0220022802200d0220022802042105200241146a2802002103200241246a280200210620012802102107200128021821082004410136021020042003360214410521020240200820072001411c6a2209200441106a10be050d002003417f4c0d0402400240024020030d00410021084101210702402001280214280208200541014100101c41026a220a41024b0d00200141146a2105200a0e03040002040b41cfa2cc00412841f8a2cc00103f000b0240200310392207450d0002402001280214280208200520072003101c41026a220a41024b0d00200141146a210520032108200a0e03030002030b41cfa2cc00412841f8a2cc00103f000b1045000b2003ad4220862007ad8410042203290000210b200441086a200341086a2900003703002004200b37030020031035200128021821032001280210210120044282808080800237031002400240200320012009200441106a10be050d0002402005280200280208200620044110101d41026a220141024b0d0020010e03010002010b41cfa2cc00412841cca3cc00103f000b20080d010c020b410421022008450d010b200710350b20002002360200200441206a24000f0b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b41e6c1c60041f40341dcc5c6001064000b1044000bc60304017f017e017f027e230041e0006b22042400200341086a2903002105200328020421060240024002400240024002400240024020032802000e06010203040005010b427f2107200520012903487c220820055a0d050c060b2006ad21080c040b2004200129035042002006ad4200108408427f210720042903084200520d04200429030021080c030b200441106a200129035842002006ad4200108408427f210720042903184200520d03200429031021080c020b200441206a200129031842002006ad4200108408427f210720042903284200520d02200429032021080c010b200441306a200129032842002006ad4200108408200441c0006a20012903204200200542ffffffff0f834200108408427f210720042903484200520d0120042903384200520d012004290340220820042903307c22052008540d01200520012903307c22082005540d010b200821070b200042002000290308220520077d220720072005561b37030841002103024020072005580d00024020022802000d00200241086a280200450d00200228020410350b4101210320024101360200200220042902543702042002410c6a200441dc006a2802003602000b200441e0006a240020030bd30e06017f017e017f017e077f067e230041e0026b2208240020014200200129030822092007280240220a41e8006a200a41e0006a200241ff01714101461b2903007d220b200b2009561b37030802400240200b2009580d00200041003a0000200041086a4122360200200041046a418496ca003602000c010b0240024002400240200728021841016a220c41004c0d00200741186a210d2007200c360218024002402007411c6a280200220e450d00200741206a280200210f0340200e41086a210a200e2f010622104105742101410021110240024003402001450d012003200a412010a0082212450d02200141606a2101201141016a2111200a41206a210a2012417f4a0d000b2011417f6a21100b200f450d02200f417f6a210f200e20104102746a41880b6a280200210e0c010b0b200e201141e0006c6a220141c5036a310000200141e8026a2903002209200950220a1ba7450d004200200141f8026a290300200a1b21094200200141f0026a290300200a1b210b0c010b200841106a200741286a28020020032007412c6a28020028021c110400200841186a29030021092007280218210c2008290310210b0b200d200c417f6a220f3602000240200b20057d2213200b56200920067d200b200554ad7d220b200956200b2009511b4101470d00200041003a0000200041086a411d360200200041046a41a696ca003602000c050b200c41004c0d012007200c36021802400240200728021c220e450d00200741206a280200210c0340200e41086a210a200e2f010622104105742101410021110240024003402001450d012004200a412010a0082212450d02200141606a2101201141016a2111200a41206a210a2012417f4a0d000b2011417f6a21100b200c450d02200c417f6a210c200e20104102746a41880b6a280200210e0c010b0b200e201141e0006c6a220141c5036a310000200141e8026a2903002209200950220a1ba7450d004200200141f8026a290300200a1b21144200200141f0026a290300200a1b21150c010b2008200741286a28020020042007412c6a28020028021c1104002007280218417f6a210f200841086a2903002114200829030021150b200d200f36020042002109024020152014844200520d00200728024022012903900120055820014198016a290300221620065820162006511b0d00200041003a0000200041086a411f360200200041046a41c396ca003602000c050b420021160240200241ff01714102460d00200728024022014198016a290300211620012903900121090b201320097d2217201356200b20167d2013200954ad7d2209200b562009200b511b0d0202402005200684500d00200841b8026a2003108e02200841206a20082802b802220a20082802c002108f02200841d0006a2903004200200829032042015122011b2116200841c8006a290300420020011b2118024020082802bc02450d00200a10350b2018201756201620095620162009511b0d040b0240201520057c22162015542201201420067c2001ad7c220920145420092014511b450d00200041003a0000200041086a412d360200200041046a418997ca003602000c050b024020032004460d0020032004412010a008450d00200d20032013200b10ae04200d20042016200910ae04200841b8026a41086a220a200341086a290000370300200841b8026a41106a2211200341106a290000370300200841b8026a41186a2212200341186a29000037030020084198026a41086a220e200441086a29000037030020084198026a41106a220c200441106a29000037030020084198026a41186a2202200441186a290000370300200820032900003703b802200820042900003703980202402007413c6a2802002201200741386a280200470d00200741346a20014101109501200728023c21010b2007280234200141d8026c6a220141003a0000200120082f00dd023b00012001420037000820014101360004200120082903b8023700112001200829039802370031200141036a200841df026a2d00003a0000200141106a41003a0000200141196a200a290300370000200141216a2011290300370000200141296a2012290300370000200141396a200e290300370000200141c1006a200c290300370000200141c9006a200229030037000020012005370358200141e0006a2006370300200141d4006a20084191026a41036a2800003600002001200828009102360051200120082903f001370368200141f0006a200841f0016a41086a290300370300200141f8006a200841f0016a41106a29030037030020014180016a200841f0016a41186a29030037030020014188016a200841206a41d001109d081a2007200728023c41016a36023c0b200041043a00000c040b41ac96cc004118200841206a41d8c1c30041d496cc001046000b41ac96cc004118200841206a41d8c1c30041d496cc001046000b200041003a0000200041086a4127360200200041046a41e296ca003602000c010b200041830c3b0100200041086a4115360000200041046a41a389c200360000200041026a41013a00000b200841e0026a24000b812f05027f027e087f037e017f230041f00d6b22072400024002400240024002400240024002402001280230200128024022082802b001460d002004420020042903082209200841c0006a2903007d220a200a20095622081b37030820080d02200741106a41186a200141e8006a290000370300200741106a41106a200141e0006a290000370300200741106a41086a200141d8006a29000037030020072001290050370310200741900b6a41186a20063502084220862006350200841009220841186a290000370300200741900b6a41106a200841106a290000370300200741900b6a41086a200841086a290000370300200720082900003703900b200810354120103322080d010c070b200041003a0004200041013602002000410c6a4129360200200041086a41aeb9ca00360200200041106a2006290200370200200041186a200641086a2802003602000c050b20082005290000370000200841186a200541186a290000370000200841106a200541106a290000370000200841086a200541086a2900003700002008412041c00010372208450d05200820072903900b370020200841386a200741900b6a41186a290300370000200841306a200741900b6a41106a290300370000200841286a200741900b6a41086a290300370000200841c00041800110372208450d0520082007290310370040200841d8006a200741106a41186a290300370000200841d0006a200741106a41106a290300370000200841c8006a200741106a41086a290300370000200741f0026a41186a220b2008ad4280808080800c841009220c41186a290000370300200741f0026a41106a220d200c41106a290000370300200741f0026a41086a220e200c41086a2900003703002007200c2900003703f002200c1035200741306a41186a220c200b290300370300200741306a41106a220b200d290300370300200741306a41086a220d200e290300370300200720072903f00237033020081035200741f0006a41d8006a200d290300370300200741d0016a200b290300370300200741d8016a200c2903003703004100210d200741ac016a41003602002007419c016a41d8b9ca0036020020074194016a410036020020072001360278200741f0006a41286a200141186a220f360200200720072903303703c001200742083702a40120074200370388012007410036027c200720012802483602b801200720012903403703b0012007200128023041016a3602a001200129030021092007200128024c3602bc0120072009370370200741f4016a41026a2208200641036a2d00003a0000200720062f00013b01f40120062d0000211020062902042109200741a8026a41186a200541186a290000370300200741a8026a41106a200541106a290000370300200741a8026a41086a200541086a290000370300200720052900003703a8022007410136028801200f200741306a10930421062007200728028801417f6a220c3602880120060d010240200c0d002007417f36028801200741f8016a41186a200741306a41186a290300370300200741f8016a41106a200741306a41106a290300370300200741f8016a41086a200741306a41086a290300370300200720072903303703f80102400240200728028c01220d450d0020074190016a280200210e0c010b4100210e200741900b6a410041e002109f081a200741f0026a410041a008109f081a41880b1033220d450d07200d41003b0106200d4100360200200d41086a200741900b6a41e002109d081a200d41e8026a200741f0026a41a008109d081a20074190016a41003602002007200d36028c010b20072007418c016a22113602980b2007200d3602940b2007200e3602900b0340200d41086a2108200d2f0106221241057421064100210c024002400240024003402006450d010240200741f8016a2008412010a008220b0d0041002106200e21080c030b200641606a2106200c41016a210c200841206a2108200b417f4a0d000b200c417f6a21120b200e0d0141012106410021082012210c0b200741f0026a41106a200c360200200741fc026a2011360200200741f0026a41086a200d360200200720113602980b2007200d3602940b2007200e3602900b200720083602f402200720063602f002024002402006450d00200741d0026a41186a200741f8016a41186a290300220a370300200741d0026a41106a200741f8016a41106a2903002213370300200741d0026a41086a200741f8016a41086a2903002214370300200720072903f80122153703d002200741ac0b6a2014370200200741900b6a41246a2013370200200741bc0b6a200a3702002007200741f0006a41246a3602a00b2007200c36029c0b200720113602980b2007200d3602940b200720083602900b200720153702a40b200741a8036a4100360200200741003a00ac03200742003703f002200741003a00cd03200741003602a0032007420037038803200741900b6a200741f0026a10800321060c010b200d200c41e0006c6a41e8026a21060b200741c0026a290300210a20064201370318200641013a003c200641286a427f370300200641206a427f3703002006413d6a20072903a802370000200641c5006a200741a8026a41086a290300370000200641cd006a200741b8026a290300370000200641d5006a200a370000200720072802880141016a36028801200741f0026a20044101200741106a200741306a20022003200741f0006a10bf05024020072d00f002220d4104460d00200741f0016a41026a20072d00f3023a0000200741ec016a41026a200741f4016a41026a2d00003a0000200720072f00f1023b01f001200720072f01f4013b01ec012009422088a72106200741f0026a41086a280200210420072802f40221052009a721010c080b200741f0026a200520072802b80128020010a306024020072802f0024101470d00200741ec016a41026a200741f4016a41026a2d00003a0000200720072f01f4013b01ec012009422088a72106200741f8026a280200210420072802f40221052009a721014100210d0c080b200741900b6a41186a200741f0026a410472220641186a2802002208360200200741f8016a41106a200641086a290200370300200741f8016a41186a200641106a29020037030020074198026a2008360200200741063602fc01200741ffd5cb003602f801200720062902003703800220072802b40121062007200741f0006a360288032007290370210a20072802bc01210820074198036a200741106a41086a290300370300200741a0036a200741106a41106a290300370300200741a8036a200741106a41186a290300370300200720033703f802200720023703f0022007200836028c032007200a370380032007200729031037039003200720103a00d002200720093702d402200720072f01f4013b00d1022007200741f4016a41026a2d00003a00d302200741900b6a2006200741f8016a200741f0026a200741d0026a2004109a05200741a8026a41026a220620072d00970b3a0000200741cc026a41026a2208200741a30b6a2d00003a0000200720072f00950b3b01a802200720072f00a10b3b01cc02200741900b6a41086a28020021052007419c0b6a280200210e200741900b6a41106a2d0000211020072d00940b2112024002400240024020072802900b4101460d00200741a4026a41026a20062d00003a0000200741a0026a41026a20082d00003a0000200720072f01a8023b01a402200720072f01cc023b01a00220072802880141016a221141004c0d05200720113602880102400240200728028c012204450d00200741f0006a41206a280200210d0340200441086a210820042f0106221641057421064100210c0240024003402006450d01200741306a2008412010a008220b450d02200641606a2106200c41016a210c200841206a2108200b417f4a0d000b200c417f6a21160b200d450d02200d417f6a210d200420164102746a41880b6a28020021040c010b0b2004200c41e0006c6a220641c5036a310000200641e8026a290300220220025022081ba7450d004200200641f8026a29030020081b21024200200641f0026a29030020081b21030c010b2007200728029801200741306a200728029c0128021c110400200741086a29030021022007290300210320072802880121110b20072011417f6a36028801200320072802b00122062903900154200220064198016a29030022035420022003511b0d01200741d0026a41086a2208200741106a41086a290300370300200741d0026a41106a220c200741106a41106a290300370300200741d0026a41186a220b200741106a41186a290300370300200741a8026a41086a2204200741306a41086a290300370300200741a8026a41106a220d200741306a41106a290300370300200741a8026a41186a2211200741306a41186a290300370300200720072903103703d002200720072903303703a802024020072802ac01220620072802a801470d00200741a4016a2006410110950120072802ac0121060b20072802a401200641d8026c6a220641003a0000200620072f00cc023b0001200641013a00102006410036000c20064201370004200620072903d002370011200620072903a802370031200641036a200741cc026a41026a2d00003a0000200641196a2008290300370000200641216a200c290300370000200641296a200b290300370000200641396a2004290300370000200641c1006a200d290300370000200641c9006a201129030037000020064180016a200741bf0b6a290000370000200641f9006a200741b80b6a290000370000200641f1006a200741900b6a41206a290000370000200641e9006a200741900b6a41186a290000370000200641e1006a200741900b6a41106a290000370000200641d9006a200741900b6a41086a290000370000200620072900900b37005120064188016a200741f0026a41d001109d081a200741f0016a41026a2208200741a4026a41026a2d00003a0000200741ec016a41026a220c200741a0026a41026a2d00003a0000200720072802ac0141016a22063602ac01200720072f01a4023b01f001200720072f01a0023b01ec010240200741f8016a41186a280200450d002007418c026a280200103520072802ac0121060b200741ec006a41026a20082d00003a0000200741e8006a41026a200c2d00003a0000200720072f01f0013b016c200720072f01ec013b0168200741f0006a41206a280200210b20072802a801211120072802a40121042007280294012116200728028c01210d0240200728027c2208450d0020074180016a280200450d00200810350b200741900b6a41026a2208200741ec006a41026a2d00003a0000200741f0006a41026a220c200741e8006a41026a2d00003a0000200720072f016c3b01900b200720072f01683b0170201041ff01710d02200720163602f8022007200b3602f4022007200d3602f002200f200741f0026a109504200141346a2001413c6a2208280200200641d8026c220641d8026d220c1095012001280234200828020041d8026c6a20042006109d081a20082008280200200c6a36020002402011450d00201141d8026c450d00200410350b200741e4006a41026a200741900b6a41026a2d00003a0000200741e0006a41026a200741f0006a41026a2d00003a0000200720072f01900b3b0164200720072f01703b01600c030b200741a40b6a2902002102200741f0016a41026a20062d00003a0000200741ec016a41026a20082d00003a0000200720072f01a8023b01f001200720072f01cc023b01ec012002422088a721062002a72101200e21042012210d0c090b200741ec016a41026a200741a4026a41026a2d00003a0000200720072f01a4023b01ec014100210d411e21042005210141fcb9ca00210520122110200e21060c080b200741e4006a41026a20082d00003a0000200741e0006a41026a200c2d00003a0000200720072f01900b3b0164200720072f01703b016002402006450d00200641d8026c210141002106034002400240200420066a22082d0000220c41014b0d0002400240200c0e020001000b0240200841086a28020041ffffff3f71450d00200841046a28020010350b200841106a2d00004107470d02200841386a280200450d02200841346a28020010350c020b200841286a10bb020c010b200841e8006a28020041ffffff3f71450d00200841e4006a28020010350b2001200641d8026a2206470d000b0b02402011450d00201141d8026c450d00200410350b02400240200d0d004100211620074184036a4100360200200741003602f4020c010b02400240200b0d00200d21060c010b200b2106200d2108034020082802880b21082006417f6a22060d000b200d21060340200620062f01064102746a41880b6a2802002106200b417f6a220b0d000b2008210d0b2007418c036a20062f010636020020074188036a410036020020074184036a20063602002007410036028003200742003703f8022007200d3602f402200741003602f0020b2007201636029003200741f0026a108f030b200741d4006a41026a2206200741e4006a41026a2d00003a0000200741d0006a41026a2208200741e0006a41026a2d00003a0000200720072f0164220c3b015c200720072f0160220b3b01582007200c3b01542007200b3b0150200041246a20123a00002000411c6a200741c8006a290300370000200041146a200741c0006a2903003700002000410c6a200741386a29030037000020002007290330370004200041306a20103a00002000412c6a200e360200200041286a2005360200200020072f01543b0025200041276a20062d00003a0000200020072f01503b0031200041336a20082d00003a0000200041003602000c080b200e417f6a210e200d20124102746a41880b6a280200210d0c010b0b41ac96cc004118200741f0026a41d8c1c30041d496cc001046000b41a797cc004110200741f0026a41c8c1c30041c897cc001046000b200041003a0004200041013602002000410c6a412a360200200041086a419abaca00360200200041106a2006290200370200200041186a200641086a2802003602000c030b200741ec016a41026a20082d00003a0000200720072f01f4013b01ec012009422088a721062009a72101419cc1c3002105412a21040c010b20074190026a280200450d002007418c026a28020010350b200741e4006a41026a200741f0016a41026a2d00003a0000200741e0006a41026a200741ec016a41026a2d00003a0000200720072f01f0013b0164200720072f01ec013b01600240200728027c2208450d0020074180016a280200450d00200810350b2006ad210202400240200728028c01220b0d004100210e20074184036a4100360200200741003602f4020c010b200728029401210e0240024020074190016a28020022080d00200b21060c010b20082106200b210c0340200c2802880b210c2006417f6a22060d000b200b21060340200620062f01064102746a41880b6a28020021062008417f6a22080d000b200c210b0b2007418c036a20062f010636020020074188036a410036020020074184036a20063602002007410036028003200742003703f8022007200b3602f402200741003602f0020b200242208621022001ad21032007200e36029003200741f0026a108f03024020072802ac012206450d0020072802a401210b200641d8026c210141002106034002400240200b20066a22082d0000220c41014b0d0002400240200c0e020001000b0240200841086a28020041ffffff3f71450d00200841046a28020010350b200841106a2d00004107470d02200841386a280200450d02200841346a28020010350c020b200841286a10bb020c010b200841e8006a28020041ffffff3f71450d00200841e4006a28020010350b2001200641d8026a2206470d000b0b20022003842102024020072802a8012206450d00200641d8026c450d0020072802a40110350b200741dc006a41026a200741e4006a41026a2d000022063a0000200741d8006a41026a2208200741e0006a41026a2d00003a0000200720072f0164220c3b015c200720072f01603b01582000200d3a00042000200c3b0005200041076a20063a0000200041106a20103a00002000410c6a2004360200200041086a2005360200200041146a200237020020004101360200200020072f01583b0011200041136a20082d00003a00000b200741f00d6a24000f0b103c000bf42003167f037e067f230041c0026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110fc062003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00200a200a417f6a220d2000200a4105746a2000200d4105746a412010a008220e410048220f1b2210200a41016a2211200d200a200f1b220a200020114105746a2000200a4105746a412010a00841004822111b220a2000200a4105746a200020104105746a412010a00822104100481b210a200c200c417f6a220d2000200c4105746a2000200d4105746a412010a008221241004822131b2214200c4101722215200d200c20131b220c200020154105746a2000200c4105746a412010a00822134100481b220c2000200c4105746a200020144105746a412010a00822144100481b210c200b200b417f6a220d2000200b4105746a2000200d4105746a412010a008221541004822161b2217200b41016a2218200d200b20161b220b200020184105746a2000200b4105746a412010a008220d4100481b220b2000200b4105746a200020174105746a412010a00822164100481b210b41024101200f1b200e411f7620111b2010411f766a2012411f766a2013411f766a2014411f766a2015411f766a200d411f766a2016411f766a210d0b2000200c4105746a2000200a4105746a412010a008220f411f76200d6a2000200b4105746a2000200a200c200f410048220f1b220e4105746a412010a0082210411f766a210d2000200b200e20104100481b220b4105746a2000200c200a200f1b22194105746a412010a008417f4c0d01200b21190c020b2000200110fd060c0f0b200d41016a220d410c490d0002402001410176220b450d00200020014105746a41606a210a2000210c0340200441206a41186a220d200c41186a220f290000370300200441206a41106a220e200c41106a2210290000370300200441206a41086a2211200c41086a22122900003703002004200c290000370320200a41086a2213290000211a200a41106a2214290000211b200a41186a2215290000211c200c200a290000370000200f201c3700002010201b3700002012201a3700002015200d2903003700002014200e29030037000020132011290300370000200a2004290320370000200a41606a210a200c41206a210c200b417f6a220b0d000b0b20012019417f736a21194101210a0c010b200d45210a0b0240200a452009724101710d002000200110fe060d0d0b2002450d02201920014f0d0102402002200020194105746a220a412010a00841004e0d0020002108200121070c040b200441206a41186a2212200041186a220e290000370300200441206a41106a2213200041106a2210290000370300200441206a41086a2214200041086a221129000037030020042000290000370320200a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2000200a290000370000200e201c3700002010201b3700002011201a370000200d2012290300370000200b2013290300370000200c2014290300370000200a2004290320370000200441c0016a41186a2217200e290000370300200441c0016a41106a22182010290000370300200441c0016a41086a22192011290000370300200420002900003703c001200041606a2115200041206a21164100210c2001210b03400240200c200b417f6a220d4f0d002016200c4105746a210a0340200441c0016a200a412010a008417f4c0d01200a41206a210a200d200c41016a220c470d000b200d210c0b2015200b4105746a210a02400340200c200b417f6a220b4f0d01200441c0016a200a412010a008210d200a41606a220f210a200d4100480d000b20122016200c4105746a220a41186a220d2900003703002013200a41106a221d2900003703002014200a41086a22062900003703002004200a290000370320200f41286a221e290000211a200f41306a221f290000211b200f41386a2220290000211c200a200f41206a220f290000370000200d201c370000201d201b3700002006201a37000020202012290300370000201f2013290300370000201e2014290300370000200f2004290320370000200c41016a210c0c010b0b200020042903c001370000200e2017290300370000201020182903003700002011201929030037000002402001200c41016a220a490d002000200a4105746a21002001200a6b220141154f0d010c0c0b0b200a200141e485cc001059000b2019200141d086cc001042000b2007450d010b201920074f0d01200441206a41186a2216200841186a221e290000370300200441206a41106a2217200841106a221f290000370300200441206a41086a2218200841086a222029000037030020042008290000370320200820194105746a220a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2008200a290000370000201e201c370000201f201b3700002020201a370000200d2016290300370000200b2017290300370000200c2018290300370000200a2004290320370000200441186a2205201e290000370300200441106a2209201f290000370300200441086a2221202029000037030020042008290000370300200841206a21014100211d2007417f6a220d450d022001210a0340200a2004412010a00841004e0d03200a41206a210a200d201d41016a221d470d000b200d211d0c020b4100410041f485cc001042000b20192007418486cc001042000b200820074105746a210c200d210b02400340200c2100200b220a201d4d22060d01200a417f6a210b200041606a220c2004412010a008417f4a0d000b0b0240200a201d490d00200d200a490d0241800121144100210f410021124100210d4100211141800121152001201d4105746a2222210103400240200020016b220a419fc0004b22190d00200a410576220a41807f6a200a2012200f492011200d49220c72220b1b210a0240200b450d002015200a200c1b2115200a2014200c1b21140c010b200a200a41017622156b21140b02402011200d470d00024020150d00200441c0006a220d21110c010b4100210a200441c0006a2211210d2001210c0340200d200a3a0000200d200c2004412010a008417f73411f766a210d200c41206a210c2015200a41016a220a470d000b0b02402012200f470d00024020140d00200441c0016a220f21120c010b200041606a210a4100210c200441c0016a2212210f0340200f200c3a0000200f200a2004412010a008411f766a210f200a41606a210a2014200c41016a220c470d000b0b0240200f20126b220a200d20116b220c200c200a4b1b2213450d002016200120112d00004105746a220a41186a2900003703002017200a41106a2900003703002018200a41086a2900003703002004200a290000370320200120112d00004105746a220a200020122d0000417f734105746a220c290000370000200a41186a200c41186a290000370000200a41106a200c41106a290000370000200a41086a200c41086a290000370000024020134101460d004100210a034020002012200a6a220e2d0000417f734105746a220c20012011200a6a41016a22102d00004105746a220b290000370000200c41186a200b41186a290000370000200c41106a200b41106a290000370000200c41086a200b41086a290000370000200120102d00004105746a220c2000200e41016a2d0000417f734105746a220b290000370000200c41186a200b41186a290000370000200c41106a200b41106a290000370000200c41086a200b41086a290000370000200a41026a210c200a41016a220b210a200c2013490d000b2012200b6a21122011200b6a21110b200020122d0000417f734105746a220a2004290320370000200a41186a2016290300370000200a41106a2017290300370000200a41086a2018290300370000201241016a2112201141016a21110b200020144105746b20002012200f461b2100200120154105746a20012011200d461b210120190d000b024002402011200d4f0d002000210a034020162001200d417f6a220d2d00004105746a220c41186a220b2900003703002017200c41106a220f2900003703002018200c41086a22002900003703002004200c290000370320200a41606a220a41086a220e290000211a200a41106a2210290000211b200a41186a2212290000211c200c200a290000370000200b201c370000200f201b3700002000201a3700002012201629030037000020102017290300370000200e2018290300370000200a20042903203700002011200d490d000c020b0b2001210a2012200f4f0d000340200f417f6a220f2d0000210c2016200a41186a220b2900003703002017200a41106a220d2900003703002018200a41086a22012900003703002004200a2900003703202000200c417f734105746a220c41086a220e290000211a200c41106a2210290000211b200c41186a2211290000211c200a200c290000370000200b201c370000200d201b3700002001201a3700002011201629030037000020102017290300370000200e2018290300370000200c2004290320370000200a41206a210a2012200f490d000b0b20082004290300370000201e2005290300370000201f2009290300370000202020212903003700002007200a20226b410576201d6a22014d0d032016201e2900003703002017201f2900003703002018202029000037030020042008290000370320200820014105746a220a41086a220c290000211a200a41106a220b290000211b200a41186a220d290000211c2008200a290000370000201e201c370000201f201b3700002020201a370000200d2016290300370000200b2017290300370000200c2018290300370000200a2004290320370000200720016b220c450d04200c20012001200c4b1b210b2007410376210d200a41206a2100024002402001200c417f6a220c490d002000200c200a200310c105200821000c010b200820012002200310c105200a2102200c21010b200b200d4f2105200141154f0d010c050b0b201d200a419486cc001059000b200a200d419486cc001058000b20012007418486cc001042000b41a486cc00411c41c086cc00103f000b20014102490d00200041606a210f4101210b0340200b410574210a200b417f6a210c200b41016a210b02402000200a6a220a2000200c4105746a220d412010a008417f4a0d00200441c0016a41186a220e200a41186a2210290000370300200441c0016a41106a2211200a41106a2212290000370300200441c0016a41086a2213200a41086a22142900003703002004200a2900003703c001200a200d2900003700002014200d41086a2900003700002012200d41106a2900003700002010200d41186a2900003700004100210d0240200c450d00200f210a03400240200441c0016a200a412010a0084100480d00200c210d0c020b200a41206a200a290000370000200a41386a200a41186a290000370000200a41306a200a41106a290000370000200a41286a200a41086a290000370000200a41606a210a200c417f6a220c0d000b0b2000200d4105746a220a20042903c001370000200a41186a200e290300370000200a41106a2011290300370000200a41086a20132903003700000b200f41206a210f200b2001470d000b0b200441c0026a24000b130020004103360204200041b0c7c6003602000b130020004125360204200041d8c9c6003602000b9e0303077f017e017f230041106b220224000240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a22063602042001200441016a3602002006450d0020042d0001210720012003417e6a22063602042001200441026a3602002006450d0020042d0002210820012003417d6a22063602042001200441036a36020020060d010b200041003602040c010b20042d0003210620012003417c6a3602042001200441046a360200200241086a200110c401024020022802080d002001280204200228020c2204490d002004417f4c0d02024002400240024020040d0042002109410121030c010b200410392203450d0120012802042004490d02200320012802002004109d081a2001280204220a2004490d062001200a20046b3602042001200128020020046a3602002004ad21090b2003450d02200020092004ad4220868437020820002003360204200020074108742005722008411074722006411874723602000c030b1045000b200310350b200041003602040b200241106a24000f0b1044000b2004200a41a4f0cb001059000bc20101047f230041106b220224002000280200220028020821032000280200210041012104200128021841d9a0c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d0003402002200036020c20022002410c6a41accfc70010701a200041016a21002003417f6a22030d000b20022d000421050b0240200541ff01710d002002280200220028021841d8a0c00041012000411c6a28020028020c11000021040b200241106a240020040bb70204027f017e027f037e230041106b220224000240024020012802082203ad42287e2204422088a70d002004a72205417f4c0d00200128020021010240024020050d00410821060c010b200510332206450d020b20024100360208200220063602002002200541286e360204200241002003108f012002280208210502402003450d00200341286c21062002280200200541286c6a21030340200141086a2903002104200141106a2903002107200141186a290300210820012903002109200341206a200141206a290300370300200341186a2008370300200341106a2007370300200341086a200437030020032009370300200341286a2103200541016a2105200141286a2101200641586a22060d000b0b20002002290300370200200041086a2005360200200241106a24000f0b1044000b1045000bbc0201057f024002400240200041046a2802002202200041086a28020022036b20012802042204200128020022056b22064f0d00200320066a22052003490d01200241017422042005200420054b1b22054100480d010240024020020d00024020050d00410121040c020b2005103322040d010c040b2000280200210420022005460d0020042002200510372204450d03200041086a28020021030b20002004360200200041046a200536020020012802002105200128020421040b024020052004460d00200028020021042001200541016a360200200420036a20052d00003a0000200341016a2103200128020022052001280204460d0003402001200541016a360200200420036a20052d00003a0000200341016a2103200128020022052001280204470d000b0b200041086a20033602000f0b103e000b103c000bc60303037f017e047f230041a0076b220224002002200110c40102400240024002402002280200450d00200041003602000c010b20022802042203200128020441b0026e2204200420034b1bad42b0027e2205422088a70d012005a72206417f4c0d010240024020060d00410821070c010b200610332207450d030b4100210420024100360210200220073602082002200641b0026e36020c024002402003450d00200241f0046a41047221080340200241f0046a200110b90220022802f0042106200241c4026a200841ac02109d081a2006411b460d02200241186a200241c4026a41ac02109d081a02402004200228020c470d00200241086a2004410110920120022802082107200228021021040b2007200441b0026c6a22092006360200200941046a200241186a41ac02109d081a2002200441016a22043602102003417f6a22030d000b0b20002002290308370200200041086a200241086a41086a2802003602000c010b2000410036020002402004450d00200441b0026c2106200721040340200410bb02200441b0026a2104200641d07d6a22060d000b0b200228020c2204450d00200441b0026c450d00200710350b200241a0076a24000f0b1044000b1045000ba90603067f017e047f230041f0006b22022400200241286a200141146a350200422086200135020c84102710c2010240024020022802282203450d00200241086a2104200141106a2105034002400240200141086a22062802002207200229022c2208422088a722094b0d002001280200220a2003460d01200a2003200710a008450d010b2008a7450d02200310350c020b02402005280200450d00200128020c10350b2001200336020c20052008370200200220032009109c020240024020022d00104102460d00200241186a41086a200441086a280200360200200220042902003703182002280204210b2002280200210c024020012d0018450d002001350214422086200135020c8410070b2001280214220920062802002203490d0102400240200920036b22094108490d00200941786a2107200128020c20036a41086a210a0c010b410021070240410028028cb54c0d0041b0b4cc00210a0c010b410021074100280298b54c21034100280294b54c21094100280290b54c2106200241e500360268200242b48080801037036020024187a1c00036025c20024213370254200241f4a0c0003602502002420037034841b0b4cc00210a200241b0b4cc0036024420024201370338200241eca0c00036023420024113360230200241f4a0c00036022c20024101360228200941aca2c000200641024622061b200241286a200341c4a2c00020061b2802101102000b41002103200241003a00480240034020072003460d01200241286a20036a200a20036a2d00003a00002002200341016a22093a00482009210320094120470d000b20002002290328370000200041186a200241286a41186a290300370000200041106a200241286a41106a290300370000200041086a200241286a41086a2903003700002000200b3602242000200c36022020002002290318370228200041306a200241186a41086a2802003602000c050b0240200341ff0171450d00200241003a00480b200b41ffffff3f71450d00200c10350b200241286a2001350214422086200135020c84102710c201200228022822030d010c020b0b2003200941889aca001059000b200041023a00300b200241f0006a24000bf707040c7f017e047f037e23004190016b220224000240024002400240200141086a220328020022042001410c6a2802002205460d002001280210220628020021072006280208220841014b210903402003200441206a220a360200200241f0006a41186a200441186a290000370300200241f0006a41106a200441106a290000370300200241f0006a41086a200441086a29000037030020022004290000370370410021040240024020090d0020080e020401040b2008210b0340200b410176220c20046a220d20042007200d4105746a200241f0006a412010a0084101481b2104200b200c6b220b41014b0d000b0b200720044105746a200241f0006a412010a0080d02200a2104200a2005470d000b0b2000410036020820004201370200200128020441ffffff3f71450d01200128020010350c010b200241d0006a41086a2204200241f0006a41086a290300370300200241d0006a41106a220b200241f0006a41106a290300370300200241d0006a41186a220c200241f0006a41186a29030037030020022002290370220e3703102002200e37035041201033220f450d01200f2002290350370000200f41186a200c290300370000200f41106a200b290300370000200f41086a200429030037000020024281808080103702042002200f36020020012802042110200128020021110240200a2005460d00410121120340200628020821032006280200210702400340200241f0006a41186a2208200a41186a290000370300200241f0006a41106a2209200a41106a290000370300200241f0006a41086a2201200a41086a2900003703002002200a290000370370200a41206a210a4100210402400240200341014b0d0020030e020301030b2003210b0340200b410176220c20046a220d20042007200d4105746a200241f0006a412010a0084101481b2104200b200c6b220b41014b0d000b0b200720044105746a200241f0006a412010a0080d01200a2005470d000c030b0b200241d0006a41086a2001290300220e370300200241d0006a41106a20092903002213370300200241d0006a41186a20082903002214370300200220022903702215370350200241106a41186a220b2014370300200241106a41106a220c2013370300200241106a41086a220d200e37030020022015370310024020122002280204470d00200220124101108a012002280200210f0b200f20124105746a22042002290310370000200441186a200b290300370000200441106a200c290300370000200441086a200d2903003700002002201241016a2212360208200a2005470d000b0b0240201041ffffff3f71450d00201110350b20002002290300370200200041086a200241086a2802003602000b20024190016a24000f0b1045000baa0704057f017e0a7f027e23004180016b22032400200341306a2001200228020c220411020002400240024002402003280230450d00200341d8006a41106a200341306a41106a290300370300200341d8006a41086a200341306a41086a290300370300200341d8006a41186a200341306a41186a290300370300200341d8006a41206a200341306a41206a280200360200200341106a41086a200341e4006a290200370300200341106a41106a200341ec006a290200370300200341106a41186a200341f4006a290200370300200320032903303703582003200329025c370310200341d8006a200120022802102205110200417f2003280258220641016a220720072006491bad42287e2208422088a70d022008a72206417f4c0d02200610332209450d032009200329031037030020094201370320200941186a200341106a41186a220a290300370300200941106a200341106a41106a220b290300370300200941086a200341106a41086a220c29030037030020034101360208200320093602002003200641286e2207360204200341306a2001200411020002402003280230450d00200341d8006a41047221064102210d41c800210e0340200341d8006a41206a200341306a41206a280200360200200341d8006a41186a220f200341306a41186a290300370300200341d8006a41106a2210200341306a41106a290300370300200341d8006a41086a2211200341306a41086a29030037030020032003290330370358200c200641086a290200370300200b200641106a290200370300200a200641186a29020037030020032006290200370310200f200a2903003703002010200b2903003703002011200c290300370300200320032903103703580240200d417f6a2007470d00200341306a2001200511020020032007417f2003280230221241016a220920092012491b108f01200328020021090b2009200e6a221241606a220720032903583703002011290300210820102903002113200f290300211420124201370300200741186a2014370300200741106a2013370300200741086a20083703002003200d360208200341306a200120041102002003280230450d01200e41286a210e200d41016a210d200328020421070c000b0b2001200228020011030002402002280204450d00200110350b20002003290300370200200041086a200341086a2802003602000c010b2000410036020820004208370200200120022802001103002002280204450d00200110350b20034180016a24000f0b1044000b1045000b1300200041053602042000418cc5c7003602000b130020004106360204200041f0f2c2003602000b130020004102360204200041b8b6c3003602000b130020004105360204200041f489c2003602000b3400200041e3efcb0036020420004100360200200041146a4101360200200041106a4198bfc700360200200041086a42123702000b130020004101360204200041f0bdc7003602000b130020004108360204200041c8aac0003602000b130020004101360204200041d0ebcb003602000b1300200041113602042000418cf9c4003602000b130020004107360204200041a0e0ca003602000b130020004105360204200041d890c2003602000b130020004106360204200041ccc9c7003602000b1300200041013602042000419cbcc7003602000b130020004102360204200041d0b9c7003602000b13002000410236020420004198b8c7003602000b130020004103360204200041d8e4cb003602000b13002000410b360204200041d4aec8003602000b3400200041f1d8cb0036020420004100360200200041146a4105360200200041106a41b8b1c700360200200041086a42093702000b130020004105360204200041a89fc7003602000b1300200041083602042000419492c7003602000b130020004108360204200041c083c7003602000b13002000410636020420004194fec6003602000b130020004103360204200041fc98c8003602000b130020004103360204200041a4c4c4003602000b130020004101360204200041bce8cb003602000b130020004107360204200041fcbac3003602000b13002000410f360204200041dc9dc8003602000b130020004106360204200041dcd8ca003602000b130020004102360204200041e8efc4003602000b130020004102360204200041bc89c5003602000b2e01017f02404104103322020d001045000b20004284808080c000370204200020023602002002418080013600000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241203600000b3a01017f02404110103322020d001045000b20024200370008200242808086bdbacdd21a370000200042908080808002370204200020023602000b3b01017f02404110103322020d001045000b200242003700082002428080a8ec85afd1b101370000200042908080808002370204200020023602000b3901017f02404110103322020d001045000b200242003700082002428080e983b1de16370000200042908080808002370204200020023602000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241083600000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241023600000b2201017f230041106b22022400200241003602002000200210e503200241106a24000bff0101017f230041a0016b22022400200241003a0088012002418080013602800120024280808480800237037820024280c2d72f37036820024280e1eb17370360200242a0c21e370358200242a0c21e370350200242e0ef9720370348200242e0c9dc29370340200242e0ef9720370338200242a0c21e370330200242a0c21e370328200242a0c21e370320200242a0c21e370318200242a0c21e370310200242a0c21e370308200242a0c21e37030020024280808080c000370370200241203602840120024100360298012002420137039001200220024190016a10f305200041086a2002280298013602002000200229039001370200200241a0016a24000bd00301017f230041106b22022400200220002802703602082001200241086a41041078200220002903003703082001200241086a41081078200220002903083703082001200241086a41081078200220002903103703082001200241086a41081078200220002903183703082001200241086a41081078200220002903203703082001200241086a41081078200220002903283703082001200241086a41081078200220002903303703082001200241086a41081078200220002903383703082001200241086a41081078200220002903403703082001200241086a41081078200220002903483703082001200241086a41081078200220002903503703082001200241086a41081078200220002903583703082001200241086a41081078200220002903603703082001200241086a41081078200220002903683703082001200241086a41081078200220002802743602082001200241086a41041078200220002802783602082001200241086a410410782002200028027c3602082001200241086a4104107820022000280280013602082001200241086a41041078200220002d0088013a00082001200241086a4101107820022000280284013602082001200241086a41041078200241106a24000b2d01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241e8073600000b2d01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241e5003600000b3701017f02404110103322020d001045000b2002420037000820024280c8afa025370000200042908080808002370204200020023602000b960202037f017e230041106b2202240020002802102103200041186a28020022042001107720012003200410782002200028021c36020020012002410410780240412010332203450d002003200029002c370000200341186a200041c4006a290000370000200341106a2000413c6a290000370000200341086a200041346a290000370000200120034120107820031035200029030021052002200041086a2903003703082002200537030020012002411010782002200028022036020020012002410410780240024020002802244101460d00200241003a000020012002410110780c010b200241013a000020012002410110782002200041286a28020036020020012002410410780b200241106a24000f0b1045000bf10203037f017e037f230041106b22022400200241003602082002420137030020002d00002103410110332104024002400240024020034101460d002004450d02200441003a0000200220043602002002428180808010370204200041086a200210f705200235020842208621052002280204452104200228020021000c010b2004450d01200441013a0000200220043602002002428180808010370204412010332203450d0220032000290001370000200341186a2206200041196a290000370000200341106a2207200041116a290000370000200341086a2208200041096a29000037000020044101412110372200450d0120002003290000370001200041096a2008290000370000200041116a2007290000370000200041196a200629000037000020022000360200200242a1808080900437020420031035410021044280808080900421050b200129020020052000ad841002024020040d00200010350b200241106a24000f0b103c000b1045000bc90402017f037e23004190016b22042400024002400240024020002d00000e03000102000b200441206a41186a200141186a290000370300200441206a41106a200141106a290000370300200441206a41086a200141086a29000037030020042001290000370320200041016a2003ad4220862002ad84200441206a102041014621000c020b200441206a41186a200141186a290000370300200441206a41106a200141106a290000370300200441206a41086a200141086a29000037030020042001290000370320200041016a2003ad4220862002ad84200441206a101541014621000c010b2003ad4220862002ad84100922022900002105200241086a2900002106200241106a2900002107200441186a200241186a290000370300200441106a2007370300200441086a2006370300200420053703002002103541012102200441206a200041016a200410fa054100210020042d00200d00200441c8006a41206a200441c1006a2d00003a0000200441c8006a41186a200441396a290000370300200441c8006a41106a200441316a290000370300200441c8006a41086a200441296a29000037030020042004290021370348200441c8006aad4280808080900484100922002900002105200041086a2900002106200041106a2900002107200441f0006a41186a200041186a290000370300200441f0006a41106a2007370300200441f0006a41086a200637030020042005370370200010350240200441f0006a2001460d00200441f0006a2001412010a0084521020b200221000b20044190016a240020000bcf0303017f017e037f230041d0006b22032400024020012002102f2204422088a72201450d002004a722052d0000220241014b0d002001417f6a210602400240024020020e020001000b41002101200341003a0049200541016a21070240034020062001460d01200341286a20016a200720016a2d00003a00002003200141016a22023a00492002210120024121470d000b200341106a200341316a290000370300200341186a200341396a290000370300200341206a200341c1006a2900003703002003200329002937030820032d0028210241002106200341086a21010c020b200141ff0171450d02200341003a00490c020b2006450d0120052d0001220241034f0d01200341086a41186a200341286a41186a290000370300200341086a41106a200341286a41106a290000370300200341086a41086a200341286a41086a2900003703002003200329002837030841012106200341086a21010b200020023a0001200020063a0000200041026a20012900003700002000410a6a200141086a290000370000200041126a200141106a2900003700002000411a6a200141186a29000037000020051035200341d0006a24000f0b41b89acc00412e200341286a41c09bcc0041e89acc001046000bd40303017f017e027f230041e0006b22022400024002402000290300220342c000540d00024002400240200342808001540d002003428080808004540d014108200379a741037622046b4104490d022002411320044102746b3a00482001200241c8006a41011078200220002903002203370308200441786a21000340200220033c00482001200241c8006a4101107820034208882103200041016a22042000492105200421002005450d000b200220033703082003500d04200241286a41146a410a360200200241346a4134360200200241106a41146a41033602002002200241086a36024020024180caca00360244200241c8006a41146a410036020020024203370214200241a0b3cc003602102002413436022c200241b0b4cc003602582002420137024c20024188caca003602482002200241286a3602202002200241c8006a3602382002200241c4006a3602302002200241c0006a360228200241106a41b0b4cc00104c000b20022003a74102744101723b01482001200241c8006a410210780c030b20022003a74102744102723602482001200241c8006a410410780c020b41c6c9ca00413641c086cc00103f000b20022003a74102743a00482001200241c8006a410110780b200241e0006a24000bc30101017f230041106b2202240002400240024020002d00004101470d00200041046a280200220041ffff034b0d010240200041ef014b0d00200220003a000b20012002410b6a410110780c030b200241fc013a000b20012002410b6a41011078200220003b01082001200241086a410210780c020b200241ff013a000b20012002410b6a410110782001200041016a412010780c010b200241fd013a000b20012002410b6a410110782002200036020c20012002410c6a410410780b200241106a24000bcb0102017f017e230041106b220224000240024020002d00004101460d00200241003a00002001200241011078200220002d0001410047410774200041026a2d0000723a00002001200241011078200029030821032002200041106a290300370308200220033703000c010b200241013a00002001200241011078200029030821032002200041106a290300370308200220033703002001200241101078200041186a29030021032002200041206a290300370308200220033703000b2001200241101078200241106a24000b960401037f230041106b220224000240024020002d0000417f6a220341044b0d000240024002400240024020030e050001020304000b200241003a000f20012002410f6a41011078200041246a28020021032000412c6a28020022042001107702402004450d002004410574210403402001200341201078200341206a2103200441606a22040d000b0b024020002d00014101460d00200241003a000f20012002410f6a410110780c050b200241013a000f20012002410f6a410110782001200041026a412010780c040b200241013a000f20012002410f6a41011078200041046a280200200110af030c030b200241023a000f20012002410f6a41011078200041046a200110e201200041086a280200200110af030c020b200241033a000f20012002410f6a41011078412010332203450d0220032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a290000370000200120034120107820031035200041246a200110e2012002200041216a2d00003a000f20012002410f6a410110780c010b200241043a000f20012002410f6a41011078412010332203450d0120032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a290000370000200120034120107820031035200041246a200110e2010b200241106a24000f0b1045000b4a01037f230041106b220124002001410036020820014201370300200110ff05200128020421022000200128020022032001280208107802402002450d00200310350b200141106a24000ba50303027f047e017f230041f0006b22032400200341106a20012802002204280210200441186a28020010f4032002ad42808080808004842205100922042900002106200441086a2900002107200441106a2900002108200341206a41186a200441186a290000370300200341206a41106a2008370300200341206a41086a200737030020032006370320200410352003200335021842208620032802102209ad84200341206aad4280808080800484101010c2010240024020032802000d00200041003602000c010b200341c0006a20012802002204280210200428021810f40320051009220441086a2900002106200441106a290000210720042900002108200341d0006a41186a200441186a290000370300200341d0006a41106a2007370300200341d0006a41086a20063703002003200837035020041035200335024842208620032802402204ad84200341d0006aad4280808080800484101302402003280244450d00200410350b20002002360200200020032903003702042000410c6a200341086a2802003602000b02402003280214450d00200910350b200341f0006a24000bf80201067f230041d0006b22022400024002400240410b10332203450d00200341edde91e3063600002003410b411610372204450d0120042001290000370004200441002800acb94836000c2004410f6a41002800afb948360000200241003a00484113210320042105410021060340200241003a0008200241086a200520034100472201109d081a024020030d00200241003a00080b20032001490d03200241286a20066a20022d00083a00002002200641016a22073a0048200320016b2103200520016a21052007210620074120470d000b200241086a41186a2203200241286a41186a290300370300200241086a41106a2201200241286a41106a290300370300200241086a41086a2205200241286a41086a2903003703002002200229032837030820041035200041186a2003290300370000200041106a2001290300370000200041086a200529030037000020002002290308370000200241d0006a24000f0b1045000b103c000b2001200341b89dcc001059000b964603027f017e027f230041106b220224000240024020002d0000220341154b0d00024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e16000102030405060708090a0b0c0d0e0f101112131415000b200241003a00002001200241011078200041086a2d0000220341044b0d150240024002400240024020030e050001020304000b200241003a000020012002410110782002200041106a29030037030020012002410810780240200041186a2d0000220341024b0d00024002400240024020030e03000102000b200241003a00000c020b200241013a00000c010b200241023a00000b20012002410110780b2002200041196a2d00003a000020012002410110780c190b200241013a00002001200241011078024002400240024002402000410c6a2d00000e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a0000200120024101107820022000410d6a2d00003a0000200120024101107820022000410e6a2d00003a00000b20012002410110782002200029031837030020012002410810780240200041206a2d0000220341024b0d00024002400240024020030e03000102000b200241003a00000c020b200241013a00000c010b200241023a00000b20012002410110780b2002200041216a2d00003a000020012002410110780c180b200241023a000020012002410110780c170b200241033a000020012002410110782001200041096a412010780c160b200241043a000020012002410110782001200041096a412010780c150b200241013a00002001200241011078200041046a2d0000220341054b0d1402400240024002400240024020030e06000102030405000b200241003a000020012002410110782002200041086a2802003602002001200241041078024002400240024002402000410c6a2d00000e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a0000200120024101107820022000410d6a2d00003a0000200120024101107820022000410e6a2d00003a00000b20012002410110780c190b200241013a000020012002410110780c180b200241023a000020012002410110782001200041056a412010782001200041256a412010782001200041c5006a412010780c170b200241033a000020012002410110782001200041056a412010782002200041e8006a28020036020020012002410410782002200041ec006a28020036020020012002410410782001200041256a412010782001200041c5006a412010780c160b200241043a000020012002410110782001200041056a412010782002200041e8006a28020036020020012002410410782002200041ec006a28020036020020012002410410782001200041256a412010782001200041c5006a412010780240200041f0006a2d00004104460d00200241013a000020012002410110780240024002400240024020002d00700e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a000020012002410110782002200041f1006a2d00003a000020012002410110782002200041f2006a2d00003a00000b20012002410110780c160b200241003a000020012002410110780c150b200241053a000020012002410110782001200041056a412010782002200041e8006a28020036020020012002410410782002200041ec006a28020036020020012002410410782001200041256a412010782001200041c5006a412010780c140b200241023a000020012002410110780240200041046a2d00004101460d00200241003a000020012002410110782001200041056a412010782002200041286a28020036020020012002410410780c140b200241013a000020012002410110782002200041086a28020036020020012002410410780c130b200241033a00002001200241011078200041086a2d0000220341044b0d1202400240024002400240024020030e050001020304000b200241003a000020012002410110782001200041096a41201078200041306a29030021042002200041386a290300370308200220043703000c040b200241013a000020012002410110782001200041096a41201078200041306a29030021042002200041386a290300370308200220043703000c030b200241023a000020012002410110782001200041096a412010782001200041296a41201078200041d0006a29030021042002200041d8006a290300370308200220043703000c020b200241033a000020012002410110782001200041096a41201078200041306a29030021042002200041386a290300370308200220043703002001200241101078200041c0006a29030021042002200041c8006a290300370308200220043703000c010b200241043a000020012002410110782001200041096a41201078200041306a29030021042002200041386a290300370308200220043703000b20012002411010780c120b200241043a0000200120024101107802400240024002400240024002400240200041086a2d00000e080001020304050607000b200241003a0000200120024101107820022000410c6a2802003602002001200241041078200041106a29030021042002200041186a290300370308200220043703002001200241101078200041206a29030021042002200041286a2903003703082002200437030020012002411010780c180b200241013a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c170b200241023a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c160b200241033a0000200120024101107820022000410c6a28020036020020012002410410780c150b200241043a00002001200241011078200041096a2d0000220041024b0d1402400240024020000e03000102000b200241003a000020012002410110780c160b200241013a000020012002410110780c150b200241023a000020012002410110780c140b200241053a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c130b200241063a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c120b200241073a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c110b200241053a00002001200241011078200241003a000020012002410110782002200041046a28020036020020012002410410780c100b200241063a00002001200241011078200041086a2d0000220341104b0d0f0240024002400240024002400240024002400240024002400240024002400240024020030e11000102030405060708090a0b0c0d0e0f10000b200241003a0000200120024101107820022000410c6a2802003602002001200241041078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c1f0b200241013a0000200120024101107820022000410c6a2802003602002001200241041078200041206a29030021042002200041286a290300370308200220043703002001200241101078200041106a2802002103200041186a2802002200200110772000450d1e2000410574210003402001200341201078200341206a2103200041606a22000d000c1f0b0b200241023a000020012002410110780c1d0b200241033a0000200120024101107820022000410c6a2802003602002001200241041078200041096a2d0000220041024b0d1c02400240024020000e03000102000b200241003a000020012002410110780c1e0b200241013a000020012002410110780c1d0b200241023a000020012002410110780c1c0b200241043a0000200120024101107820022000410c6a28020036020020012002410410780c1b0b200241053a0000200120024101107820022000410c6a28020036020020012002410410780c1a0b200241063a0000200120024101107820022000410c6a28020036020020012002410410780c190b200241073a0000200120024101107820022000410c6a28020036020020012002410410782002200041096a2d00003a000020012002410110780c180b200241083a000020012002410110782001200041096a412010782001200041296a412010780c170b200241093a000020012002410110782001200041096a412010780c160b2002410a3a000020012002410110782001200041096a41201078412010332203450d16200341186a200041c1006a290000370000200341106a200041396a290000370000200341086a200041316a2900003700002003200041296a2900003700002001200341201078200310352002200041cc006a28020036020020012002410410780c150b2002410b3a00002001200241011078412010332203450d15200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310352001200041296a41201078200041d0006a29030021042002200041d8006a2903003703082002200437030020012002411010780c140b2002410c3a00002001200241011078412010332203450d14200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310352001200041296a41201078200041d0006a29030021042002200041d8006a2903003703082002200437030020012002411010780c130b2002410d3a00002001200241011078412010332203450d13200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a29000037000020012003412010782003103520022000412c6a28020036020020012002410410780c120b2002410e3a00002001200241011078412010332203450d12200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a29000037000020012003412010782003103520022000412c6a28020036020020012002410410780c110b2002410f3a00002001200241011078412010332203450d11200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310352001200041296a41201078200041f0006a29030021042002200041f8006a2903003703082002200437030020012002411010782001200041c9006a412010780c100b200241103a000020012002410110782001200041096a412010780c0f0b200241073a00002001200241011078200041046a20011083060c0e0b200241083a00002001200241011078200041046a20011083060c0d0b200241093a00002001200241011078200041046a2d0000220341044b0d0c0240024002400240024020030e050001020304000b200241003a00002001200241011078200041086a2802002103200041106a2802002200200110772000450d102003200041306c6a210003402001200341201078200341206a29030021042002200341286a2903003703082002200437030020012002411010782000200341306a2203470d000c110b0b200241013a000020012002410110780c0f0b200241023a000020012002410110782001200041056a412010780c0e0b200241033a000020012002410110782001200041056a412010780c0d0b200241043a000020012002410110782001200041056a412010782001200041256a412010782002200041c5006a2d00003a000020012002410110780c0c0b2002410a3a0000200120024101107820002d0001220041054b0d0b024002400240024002400240024020000e06000102030405000b200241003a00000c050b200241013a00000c040b200241023a00000c030b200241033a00000c020b200241043a00000c010b200241053a00000b20012002410110780c0b0b2002410b3a00002001200241011078200041046a280200220341024b0d0a02400240024020030e03000102000b200241003a00002001200241011078200041086a2802002103200041106a2802002200200110772000450d0c2003200041286c6a2100034020012003412010782002200341206a29030037030020012002410810782000200341286a2203470d000c0d0b0b200241013a000020012002410110780c0b0b200241023a000020012002410110780c0a0b2002410c3a00002001200241011078200041086a2d00002203410a4b0d090240024002400240024002400240024002400240024020030e0b000102030405060708090a000b200241003a0000200120024101107820022000410c6a28020036020020012002410410780c130b200241013a00002001200241011078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c120b200241023a0000200120024101107820022000412c6a2802003602002001200241041078200041306a29030021042002200041386a2903003703082002200437030020012002411010782001200041096a412010780c110b200241033a0000200120024101107820022000410c6a2802003602002001200241041078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c100b200241043a00002001200241011078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c0f0b200241053a00002001200241011078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c0e0b200241063a00002001200241011078200041106a29030021042002200041186a2903003703082002200437030020012002411010780c0d0b200241073a00002001200241011078412010332203450d0d200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310350c0c0b200241083a00002001200241011078412010332203450d0c200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310350c0b0b200241093a00002001200241011078412010332203450d0b200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310352001200041296a41201078200041d0006a29030021042002200041d8006a2903003703082002200437030020012002411010780c0a0b2002410a3a00002001200241011078412010332203450d0a200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310350c090b2002410d3a0000200120024101107802400240024002400240024002400240200041086a2d00000e080001020304050607000b200241003a000020012002410110782001200041096a412010782001200041296a41201078200041d0006a29030021042002200041d8006a2903003703082002200437030020012002411010780c0f0b200241013a000020012002410110782001200041096a412010782001200041296a412010780c0e0b200241023a000020012002410110782001200041096a412010782002200041296a2d00003a000020012002410110780c0d0b200241033a000020012002410110782001200041096a412010782001200041296a41201078412010332203450d0d200341186a200041e1006a290000370000200341106a200041d9006a290000370000200341086a200041d1006a2900003700002003200041c9006a290000370000200120034120107820031035200041f0006a29030021042002200041f8006a2903003703082002200437030020012002411010782002200041e9006a2d00003a000020012002410110780c0c0b200241043a00002001200241011078412010332203450d0c200341186a200041216a290000370000200341106a200041196a290000370000200341086a200041116a2900003700002003200041096a2900003700002001200341201078200310350c0b0b200241053a0000200120024101107820022000410c6a28020036020020012002410410780c0a0b200241063a000020012002410110782001200041096a412010782002200041296a2d00003a000020012002410110780c090b200241073a000020012002410110782001200041096a412010782000412c6a2802002103200041346a28020022002001107720012003200010780c080b2002410e3a00002001200241011078200041046a2d0000220341024b0d0702400240024020030e03000102000b200241003a000020012002410110780240200041086a2d000022034104460d00200241013a000020012002410110780240024002400240024020030e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a000020012002410110782002200041096a2d00003a0000200120024101107820022000410a6a2d00003a00000b20012002410110780c0a0b200241003a000020012002410110780c090b200241013a000020012002410110782001200041056a412010780c080b200241023a000020012002410110782002200041056a2d00003a000020012002410110780c070b2002410f3a00002001200241011078200041046a2d0000220341024b0d0602400240024020030e03000102000b200241003a000020012002410110782001200041056a412010780c080b200241013a000020012002410110780c070b200241023a00002001200241011078200041086a2802002105200041106a2802002200200110772000450d062005200041d0006c6a2106034020012005412010782002200541206a3602002002200110cf012002200541306a3602002002200110cf01200528024021002005280248220320011077200541d0006a210502402003450d00200341306c210303402001200041106a41201078200220003602002002200110cf01200041306a2100200341506a22030d000b0b20062005470d000c070b0b200241103a00002001200241011078200241003a000020012002410110782001200041106a41101078200041046a28020021032000410c6a28020022052001107720012003200510782002200041206a2d00003a000020012002410110780c050b200241113a00002001200241011078200041086a2d0000220341064b0d04024002400240024002400240024020030e0700010203040506000b200241003a000020012002410110782001200041096a412010780c0a0b200241013a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c090b200241023a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c080b200241033a000020012002410110782001200041096a4120107820022000412c6a28020036020020012002410410780c070b200241043a000020012002410110782001200041096a4120107820022000412c6a28020036020020012002410410780c060b200241053a000020012002410110782001200041096a4120107820022000412c6a28020036020020012002410410780c050b200241063a0000200120024101107820022000410c6a28020036020020012002410410780c040b200241123a00002001200241011078200041086a2d00002203410e4b0d0302400240024002400240024002400240024002400240024002400240024020030e0f000102030405060708090a0b0c0d0e000b200241003a000020012002410110782001200041096a412010780c110b200241013a000020012002410110782001200041096a41201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c100b200241023a000020012002410110782001200041096a41201078200041d0006a29030021042002200041d8006a2903003703082002200437030020012002411010782001200041296a412010780c0f0b200241033a000020012002410110782001200041096a412010780c0e0b200241043a000020012002410110782001200041096a412010780c0d0b200241053a000020012002410110782001200041096a412010780c0c0b200241063a000020012002410110782001200041096a412010782000412c6a2802002103200041346a2802002200200110772000450d0b2000410574210003402001200341201078200341206a2103200041606a22000d000c0c0b0b200241073a000020012002410110782001200041096a412010782002200041296a2d00003a000020012002410110780c0a0b200241083a000020012002410110782001200041096a412010780c090b200241093a000020012002410110782001200041096a412010780c080b2002410a3a000020012002410110782001200041096a412010780c070b2002410b3a000020012002410110782001200041096a412010782001200041296a412010782002200041c9006a2d00003a000020012002410110780c060b2002410c3a000020012002410110782001200041096a412010782002200041296a2d00003a000020012002410110780c050b2002410d3a0000200120024101107820022000410c6a28020036020020012002410410780c040b2002410e3a000020012002410110782001200041096a412010780c030b200241133a0000200120024101107820002d0001220341054b0d02024002400240024002400240024020030e06000102030405000b200241003a00002001200241011078200041026a21000c050b200241013a000020012002410110782001200041026a41201078200041226a21000c040b200241023a000020012002410110782001200041026a412010782001200041226a41201078200041c2006a21000c030b200241033a000020012002410110782001200041026a41201078200041226a21000c020b200241043a000020012002410110782001200041026a41201078200041226a21000c010b200241053a00002001200241011078200041026a21000b20012000412010780c020b200241143a00002001200241011078200041096a21030240200041086a2d00004101460d00200241003a000020012002410110782001200341201078200041306a29030021042002200041386a2903003703082002200437030020012002411010780c020b200241013a0000200120024101107820012003412010780c010b200241153a000020012002410110780240200041046a2802004101460d00200241003a000020012002410110782002200041086a28020036020020012002410410780c010b200241013a000020012002410110782002200041086a280200360200200120024104107820022000410c6a280200360200200120024104107802400240200041106a28020022030d00200241003a000020012002410110780c010b200241013a00002001200241011078200041186a28020022052001107720012003200510780b024020002d001c22034104460d00200241013a000020012002410110780240024002400240024020030e0400010203000b200241003a00000c030b200241013a00000c020b200241023a00000c010b200241033a0000200120024101107820022000411d6a2d00003a0000200120024101107820022000411e6a2d00003a00000b20012002410110780c010b200241003a000020012002410110780b200241106a24000f0b1045000bf70701027f230041106b220224000240024020002d0000220341064b0d00024002400240024002400240024020030e0700010203040506000b200241003a000c20012002410c6a410110782001200041016a412010782002200041c4006a28020036020c20012002410c6a41041078412010332203450d07200341186a200041396a290000370000200341106a200041316a290000370000200341086a200041296a2900003700002003200041216a2900003700002001200341201078200310352002200041c8006a28020036020c20012002410c6a410410780c060b200241013a000c20012002410c6a410110782001200041016a41201078412010332203450d06200341186a200041396a290000370000200341106a200041316a290000370000200341086a200041296a2900003700002003200041216a2900003700002001200341201078200310352002200041c1006a2d00003a000c20012002410c6a410110782002200041c4006a28020036020c20012002410c6a410410782002200041c8006a28020036020c20012002410c6a410410780c050b200241023a000c20012002410c6a41011078412010332203450d0520032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201078200310350c040b200241033a000c20012002410c6a41011078412010332203450d0420032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201078200310350c030b200241043a000c20012002410c6a41011078412010332203450d0320032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201078200310352002200041216a2d00003a000c20012002410c6a410110780c020b200241053a000c20012002410c6a41011078412010332203450d0220032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201078200310352002200041216a2d00003a000c20012002410c6a410110780c010b200241063a000c20012002410c6a41011078412010332203450d0120032000290001370000200341186a200041196a290000370000200341106a200041116a290000370000200341086a200041096a2900003700002001200341201078200310352002200041246a28020036020c20012002410c6a410410782002200041286a28020036020c20012002410c6a410410780b200241106a24000f0b1045000b4d01017f230041206b22002400200041146a410136020020004201370204200041e8d4ca003602002000410436021c2000419cd5ca003602182000200041186a360210200041b0b4cc00104c000bec220a017f017e037f017e037f017e047f017e077f047e230041e0016b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402001280200417f6a0e0a00010203040506070809000b420021042000420037030820022d000120022d000041004772450d18200041186a41023602000c170b200141086a280200210520012802042101024020022d00000d0020022d000141ff01714101470d002005450d09200110350c090b02402005450d00200110350b20004200370308200041186a41023602000c160b024020022d000120022d0000410047720d00200141086a2903002104410810332201450d0b2001200437000041de92c800ad4280808080a001842001ad42808080808001841002200110350c080b20004200370308200041186a41023602000c150b200141086a280200210520012802042106024020022d000120022d000041004772450d00410221070c140b200341b0016a2001410c6a280200ad22044220862006ad220884102510c20120032802b0012201450d1220032802b40121022003200341b8016a2802003602ac01200320013602a801200341186a200341a8016a10c40120032802180d1120032802ac012209200328021c220a490d11200a417f4c0d0a02400240200a0d0041002109410121070c010b200a10392207450d0a200720032802a801220b200a109d081a20032009200a6b3602ac012003200b200a6a3602a801200a21090b2007450d11200341106a200341a8016a10c401200aad4220862009ad84220ca7210920032802100d0f20032802ac01220a2003280214220b490d0f200b417f4c0d0a02400240200b0d004100210b4101210d0c010b200b1039220d450d0a200d20032802a801220e200b109d081a2003200a200b6b220a3602ac012003200e200b6a3602a8010b200d450d0f02400240024002400240200a4104490d00200320032802a801220e41046a3602a8012003200a417c6a220f3602ac01200f4104490d012003200e41086a3602a801200e28000421102003200a41786a220f3602ac01200f4104490d032003200a41746a3602ac012003200e410c6a3602a801200341086a200341a8016a10c4012003280208450d020c130b0240200b450d00200d10350b20090d140c150b0240200b450d00200d10350b20090d130c140b200328020c220e20032802ac01410c6e220a200a200e4b1bad420c7e2211422088a70d0c2011a7220f417f4c0d0c02400240200f0d00410421120c010b200f10332212450d0c0b4100210a20034100360228200320123602202003200f410c6e36022402400240200e450d000340200341d0016a200341a8016a10ee0220032d00d0014101460d0220032802ac01220f4104490d0220032900d101211120032802a801221328000021142003200f417c6a3602ac012003201341046a3602a8010240200a2003280224470d00200341206a200a4101108701200328022021122003280228210a0b2012200a410c6c6a220f2014360208200f20113702002003200a41016a220a360228200e417f6a220e0d000b0b2012450d112003290224a7210e20032802ac0141044f0d020240200e450d00200e410c6c450d00201210350b0240200b450d00200d10350b2009450d140c130b2003280224220a450d10200a410c6c450d10201210350c100b0240200b450d00200d10350b20090d110c120b200c422088a7210f02402002450d00200110350b41b5c3c700210a410f210241002101200f4104470d0d024020074190e1c600460d00200728000041eede91ab06470d0e0b0240201041f6014f0d00419bc3c700210a411a2102410121010c0e0b02402009450d00200710350b0240200b450d00200d10350b0240200e450d00200e410c6c450d00201210350b41e892c800ad4280808080d0008420044220862008841002200341286a41023a0000200341003a002041b0b4cc004100200341206a10d4012005450d06200610350c060b200141086a280200210520012802042106024020022d000120022d0000410047720d0041e892c800ad4280808080d000842001410c6a3502004220862006ad841002200341206a41086a41023a0000200341003a002041b0b4cc004100200341206a10d4012005450d06200610350c060b02402005450d00200610350b20004200370308200041186a41023602000c130b20022d000120022d0000410047720d0a2001410c6a2802002105200141086a280200210702400240200128020422094101460d0041ed92c800ad4280808080d0018410070c010b410410332201450d0a2001200736000020014104410810372201450d0a2001200536000441ed92c800ad4280808080d001842001ad42808080808001841002200110350b200341206a41186a4200370300200341206a41106a22064200370300200341206a41086a220142003703002003420037032041d1c4c700ad4280808080e000841001220229000021042001200241086a29000037030020032004370320200210354185c5c700ad4280808080e00084100122022900002104200341d0016a41086a220a200241086a290000370300200320043703d00120021035200620032903d0012204370300200341b0016a41086a2001290300370300200341b0016a41106a2004370300200341b0016a41186a200a290300370300200320032903203703b001200341206a200341b0016a10ce0202400240200328022022060d004100210a200341003602d801200342043703d00141042106410021020c010b2003200329022422043702d401200320063602d0012004422088a721022004a7210a0b200341a8016a41026a220b200341a5016a41026a2d00003a0000200341206a41086a220d200341b0016a41086a290200370300200341206a41106a220e200341b0016a41106a280200360200200320032f00a5013b01a801200320032902b00137032002402002200a470d00200341d0016a200a4101108d0120032802d401210a20032802d001210620032802d80121020b2006200241246c220f6a220141043a00002001200536020c2001200736020820012009360204200141036a200b2d00003a0000200120032f01a8013b000120012003290320370210200141186a200d290300370200200141206a200e2802003602002003200241016a22013602d80141d1c4c700ad4280808080e0008410012205290000210420052900082108200510354185c5c700ad4280808080e0008410012205290000210c2005290008211120051035200320113701382003200c3701302003200837012820032004370120200341203602ac012003200341206a3602a80120062001200341a8016a109606024020012002490d00200f41246a21022006210103400240024020012d0000220541044b0d0002400240024020050e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012002415c6a22020d000b0b200a450d04200a41246c450d04200610350c040b2001410c6a2802002105200141086a28020021062001280204210a024020022d000120022d0000410047720d000240200541186c2201450d00200a20016a2102200a21010340200141086a350200422086200135020084200141146a3502004220862001410c6a350200841002200141186a22012002470d000b0b02402005450d00200541186c2102200a210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141186a2101200241686a22020d000b0b2006450d04200641186c450d04200a10350c040b02402005450d00200541186c2102200a210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141186a2101200241686a22020d000b0b02402006450d00200641186c450d00200a10350b20004200370308200041186a41023602000c110b2001410c6a2802002105200141086a28020021062001280204210a024020022d000120022d0000410047720d0002402005410c6c2201450d00200a20016a2102200a21010340200141086a35020042208620013502008410072001410c6a22012002470d000b0b02402005450d002005410c6c2102200a210103400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b2006450d032006410c6c450d03200a10350c030b02402005450d002005410c6c2102200a210103400240200141046a280200450d00200128020010350b2001410c6a2101200241746a22020d000b0b02402006450d002006410c6c450d00200a10350b20004200370308200041186a41023602000c100b200141086a280200210520012802042106024020022d000120022d0000410047720d002001410c6a3502004220862006ad8410082005450d02200610350c020b02402005450d00200610350b20004200370308200041186a41023602000c0f0b4102210120022d00000d014101210520022d00014101470d012002411a6a2901002104200241196a2d00002101200241186a2d00002106200241166a2f0100210a200241156a2d00002107200241146a2d00002109200241126a2f0100210b200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021132002410c6a2d000021142002410a6a2f01002112200241086a2d00002110200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021182003200241096a2d00003a0027200320103a0026200320153b0124200320163a0023200320173a0022200320183b01202003200d3a002f2003200e3a002e2003200f3b012c200320133a002b200320143a002a200320123b0128200320013a0037200320063a00362003200a3b0134200320073a0033200320093a00322003200b3b013020032004370138200341b0016a41186a2004370300200341b0016a41106a2003290130370300200341b8016a2003290128370300200320032901203703b001200341d0016a200341b0016a108e02200341206a20032802d001220120032802d801108f0242002104420021084200210c42002111420021194200211a4200211b4200211c024020032903204201520d0020032d006c452105200341206a41106a290300211c200341c0006a2903002108200341206a41186a2903002104200341d0006a2903002111200341c8006a290300210c200341e0006a290300211a200341d8006a29030021192003290328211b0b024020032802d401450d00200110350b024020050d0041dcc2c7002102410f2105418080102106410321010c030b0240200c200484201984201b842011200884201a84201c8484500d0041ebc2c7002102411321054180800c2106410321010c030b200341206a41186a200341b0016a41186a290300370300200341206a41106a200341b0016a41106a290300370300200341206a41086a200341b0016a41086a290300370300200320032903b001370320200341d0016a200341206a10ed0320033502d80142208620032802d0012201ad84100720032802d401450d00200110350b42002104200042003703080c0e0b410021060b20004200370308200041206a20053602002000411c6a2002360200200041186a20064180801c712001723602000c0b0b1045000b1044000b103c000b20004200370308200041186a41023602000c070b02402009450d00200710350b0240200b450d00200d10350b41032107200e450d05200e410c6c450d05201210350c050b200b450d00200d10350b2009450d010b200710350b2002450d00200110350b4103210741fec2c700210a411d2102410221010b200141ff0171411074210102402005450d00200610350b20004200370308200041206a20023602002000411c6a200a360200200041186a20012007723602000b420121040b20002004370300200341e0016a24000b971f03077f037e127f230041a0036b22042400200128020821052001280204210620012802002107410221080240024002400240024002400240200241ff01710d00200341ff01714102470d002005410a4b0d0120044188016a41186a2209420037030020044188016a41106a220a420037030020044188016a41086a2202420037030020044200370388014193d1cb00ad4280808080a00184220b10012203290000210c20044180036a41086a2201200341086a2900003703002004200c370380032003103520022001290300370300200420042903800337038801419dd1cb00ad4280808080c00184220d10012203290000210c2001200341086a2900003703002004200c3703800320031035200a200429038003220c370300200441206a41086a220e2002290300370300200441206a41106a220f200c370300200441206a41186a221020012903003703002004200429038801370320200441206a10bd02220341ff01714102460d02410321082003410171450d020b419fc8ca0021114110210f410121122005450d030c020b4192c8ca002111410d210f41032108410221120c010b20094200370300200a4200370300200242003703002004420037038801200b10012203290000210c2001200341086a2900003703002004200c370380032003103520022001290300370300200420042903800337038801200d10012203290000210c2001200341086a2900003703002004200c3703800320031035200a200429038003370000200a41086a2001290300370000200e2002290300370300200f200a290300370300201020092903003703002004200429038801370320200441013a008801200441206aad4280808080800484220d20044188016aad42808080801084100220044180036a41186a2208420037030020044180036a41106a2213420037030020014200370300200442003703800341d1c4c700ad4280808080e0008410012202290000210c2001200241086a2900003703002004200c370380032002103541e7c4c700ad4280808080e0008410012203290000210c200441f0026a41086a2202200341086a2900003703002004200c3703f00220031035201320042903f002220c370300200441d0026a41086a22092001290300370300200441d0026a41106a220e200c370300200441d0026a41186a220f200229030037030020042004290380033703d002200441086a200441d0026a412010c001200428020c2110200428020821142008420037030020134200370300200142003703002004420037038003200b10012203290000210b2001200341086a2900003703002004200b370380032003103541e0caca00ad4280808080e0008410012203290000210b2002200341086a2900003703002004200b3703f00220031035201320042903f002220b37030020092001290300370300200e200b370300200f200229030037030020042004290380033703d00220044188016a200441d0026a10b6020240024020042802880122150d0020044100360218200442043703104104211541002102410021010c010b2004200429028c01220b37021420042015360210200b422088a72102200ba721010b2010410020141b2103024020022001470d00200441106a20024101109f0120042802102115200428021821020b2015200241c4006c6a220141003a000020012003360204200141036a200441206a41026a2d00003a0000200120042f00203b00012001200429028801370208200141106a20044188016a41086a2216290200370200200141186a20044188016a41106a2217290200370200200141206a20044188016a41186a290200370200200141286a20044188016a41206a290200370200200141306a20044188016a41286a290200370200200141386a20044188016a41306a290200370200200141c0006a20044188016a41386a2802003602002004200241016a22183602182007200541f0006c22016a211902400240024020050d00200721080c010b200741f4006a2109200141907f6a210e41d1c4c700ad4280808080e00084210c20072108024003402008280204211a2008280200210320044188016a200841086a41e800109d081a200841f0006a2108201a450d02200441206a20044188016a41e800109d081a2004201a36028c0120042003360288012016200441206a41e800109d081a20044180036a41186a221b420037030020044180036a41106a221c420037030020044180036a41086a221042003703002004420037038003200c10012201290000210b2010200141086a2900003703002004200b370380032001103541e7c4c700ad4280808080e0008410012201290000210b200441f0026a41086a2202200141086a2900003703002004200b3703f00220011035201320042903f002370000201341086a2002290300370000200441d0026a41086a221d2010290300370300200441d0026a41106a221e201c290300370300200441d0026a41186a221f201b29030037030020042004290380033703d0022004200441d0026a412010c0012004280200210120042802042102200441d0026a20044188016a10d003410c210f024020030d00410321124186c8ca0021110c020b024020032002410020011b22014d0d004104211241fac7ca0021110c020b20044180036a2003417f6a10d103024020044180036a2017412010a008450d004100211241afc8ca0021114112210f0c020b0240200341002001417b6a2202200220014b1b4f0d004106211241dec7ca0021114108210f0c020b0240024020152015201841c4006c22026a460d00201541016a2101034002402001417f6a2d00004101470d0041012114200441d0026a2001460d032001200441d0026a412010a008450d030b200141c4006a2101200241bc7f6a22020d000b0b410021140b20044180036a200310d10320044180036a200441d0026a412010a00821014105211241e6c7ca0021114114210f20140d012001450d01200441f8016a41086a220f200441b0026a41086a2202290200370300200441f8016a41106a2214200441b0026a41106a22032f01003b0100200420042f018e023b018c02200420042902b0023703f80120044190026a20044188016a10d003200441b0026a41186a221142003703002003420037030020024200370300200442003703b002201f4200370300201e4200370300201d4200370300200442003703d002024041c80010332201450d0020044180036a10d004200141186a201b290300370200200141106a201c290300370200200141086a201029030037020020012004290380033702002001410236022020014101360244200120042903d0023700242001412c6a201d290300370000200141346a201e2903003700002001413c6a201f290300370000200420013602f00220044282808080203702f402200441f0026a10ab01201b2011290300370300201c200329030037030020102002290300370300200420042903b0023703800320044180036a10d304201020044190026a41086a290300370300201c20044190026a41106a290300370300201b20044190026a41186a290300370300201d200f290300370300201e20142f01003b0100200420042903900237038003200420042f018c023b01b002200420042903f8013703d002024020182004280214470d00200441106a20184101109f01200428021821180b20042802102215201841c4006c6a220141013a00002001200429038003370001200141003a0021200120042f01b0023b0022200120042903d002370030200141096a2010290300370000200141116a201c290300370000200141196a201b290300370000200141386a201d290300370000200141c0006a201e2f01003b00002004201841016a221836021802402004280294012201450d00200141246c2102201a210103400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012002415c6a22020d000b0b02402004280290012201450d00200141246c450d00201a10350b200e41907f6a210e200941f0006a210920082019470d010c040b0b103c000b02402004280294012201450d00200141246c2102201a210103400240024020012d0000220341044b0d0002400240024020030e050400010204040b2001410c6a280200450d03200141086a28020010350c030b2001410c6a280200450d02200141086a28020010350c020b2001410c6a280200450d01200141086a28020010350c010b200141086a280200450d00200141046a28020010350b200141246a21012002415c6a22020d000b0b02402004280290012201450d00200141246c450d00201a10350b024020192008460d000340200910b1030240200941046a2802002201450d00200141246c450d00200928020010350b200941f0006a2109200e41907f6a220e0d000b0b02402006450d00200641f0006c450d00200710350b024020042802142201450d00200141c4006c450d00201510350b410321080c040b20192008460d002007200541f0006c6a210303402008220141046a220210b103200141f0006a21080240200141086a2802002201450d00200141246c450d00200228020010350b20032008470d000b0b02402006450d00200641f0006c450d00200710350b20044188016a41186a2208420037030020044188016a41106a2209420037030020044188016a41086a2202420037030020044200370388014193d1cb00ad4280808080a0018410012203290000210b20044180036a41086a2201200341086a2900003703002004200b37038003200310352002200129030037030020042004290380033703880141e0caca00ad4280808080e0008410012203290000210b2001200341086a2900003703002004200b3703800320031035200a200429038003370000200a41086a2001290300370000200441206a41086a2002290300370300200441206a41106a2009290300370300200441206a41186a2008290300370300200420042903880137032020044188016a2015201810e006200d2004350290014220862004280288012201ad8410020240200428028c01450d00200110350b024020042802142201450d00200141c4006c450d00201510350b4200210b0c030b200541f0006c2102200741046a21010340200110b1030240200141046a2802002203450d00200341246c450d00200128020010350b200141f0006a2101200241907f6a22020d000b0b2006450d00200641f0006c450d00200710350b200041206a200f3602002000411c6a2011360200200041186a2012411074200872418008723602004201210b0b2000200b37030020004200370308200441a0036a24000be81c041c7f017e067f017e230041e0066b220324000240024002400240024002400240024002400240024020012802002204450d0020032001410c6a418001109d0821052001280204210602400240024020022d00000d0020022d00014101460d010b02402006450d00200410350b41022105410021020c010b200241196a2d00002101200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720052002411a6a29010037039801200520013a009701200520073a009601200520083b019401200520093a0093012005200a3a0092012005200b3b0190012005200c3a008f012005200d3a008e012005200e3b018c012005200f3a008b01200520103a008a01200520113b018801200520123a008701200520133a008601200520143b018401200520153a008301200520163a008201200520173b018001200541a0016a2005418001109d081a200541c0036a41186a200529039801370300200541c0036a41106a200529039001370300200541c8036a20052903880137030020052005290380013703c003200541d8056a200541c0036a10fc010240024020052d00d8054101470d00200541ef046a2202200541f1056a290000370000200541d8046a41106a2201200541ea056a290100370300200541a9026a200541e2056a290100370000200541b1026a2001290300370000200541a0026a41186a2002290000370000200520052d00d9053a00a002200520052901da053700a102200541c0026a200541a0016a418001109d081a200541c8046a200541a0026a10dd06200541d8056a20052802c804220120052802d00410c10220052d00d8052102200541d8046a200541d8056a410172418001109d081a0240024020024101460d00200541003a00c0030c010b200541013a00c003200541c0036a410172200541d8046a418001109d081a0b024020052802cc04450d00200110350b200541c0026a41206a211820054180036a2119200541a0036a211a200541e1036a211b20054181046a211c200541a1046a211d200541c0036a410172211e4170210803404100210141b0b4cc0021070240024002400240200841c4e2c6006a280000220241e6e485f3064a220b0d00200241e2c289ab06460d01200241e1ea91cb06470d0341202101201a21070c030b200241e9dabdf306460d01200241e7e485f306470d0241202101200541c0026a21070c020b41202101201821070c010b41202101201921070b200520013602e005200520073602dc05200520023602d805200541d8046a200541d8056a10f706200541d8056a20052802d804220a20052802e00410d50120052802dc0421090240024020052d00d8054101470d0020052900f105211f20052d00f005210c20052d00ef05210d20052f00ed05210e20052d00ec05210f20052d00eb05211020052f00e905211120052d00e805211220052d00e705211320052f00e505211420052d00e405211520052d00e305211620052f00e105211720052d00e005212020052d00df05212120052f00dd05212220052d00dc05212320052d00db05212420052f00d905212502402009450d00200a10350b2005201f3703f0052005200c3a00ef052005200d3a00ee052005200e3b01ec052005200f3a00eb05200520103a00ea05200520113b01e805200520123a00e705200520133a00e605200520143b01e405200520153a00e305200520163a00e205200520173b01e005200520203a00df05200520213a00de05200520223b01dc05200520233a00db05200520243a00da05200520253b01d805200541d8056a200541a0026a412010a008450d0141b193ca00ad211f4280808080d00121264180800821050c040b2009450d00200a10350b0240024020052d00c0034101470d004100210941b0b4cc00210a0240024002400240200b0d00200241e2c289ab06460d01200241e1ea91cb06470d0341202109201d210a0c030b200241e9dabdf306460d01200241e7e485f306470d0241202109201e210a0c020b41202109201b210a0c010b41202109201c210a0b024020012009470d002007200a460d022007200a200110a008450d020b200520093602e0052005200a3602dc05200520023602d805200541d8046a200541d8056a10f70620053502e00442208620052802d8042209ad84100720052802dc04450d00200910350b200520013602e005200520073602dc05200520023602d805200541d8046a200541d8056a10f70620052802d804210120053502e004211f412010332202450d0e200220052903a002370000200241186a200541a0026a41186a290300370000200241106a200541a0026a41106a290300370000200241086a200541a0026a41086a290300370000201f4220862001ad842002ad428080808080048410022002103520052802dc04450d00200110350b200841046a22080d000b200541d8056a200541a0026a10dd0620053502e005211f20052802d8052101412010332202450d0d200220052903c002370000200241186a200541c0026a41186a290300370000200241106a200541c0026a41106a290300370000200241086a200541c0026a41086a2903003700002002412041c00010372202450d0d200220052903e002370020200241386a200541c0026a41386a290300370000200241306a200541c0026a41306a290300370000200241286a200541c0026a41286a290300370000200241c00041800110372202450d0d2002200529038003370040200241d8006a200541c0026a41d8006a290300370000200241d0006a200541c0026a41d0006a290300370000200241c8006a200541c0026a41c8006a290300370000200220052903a003370060200241e8006a200541c0026a41e8006a290300370000200241f0006a200541c0026a41f0006a290300370000200241f8006a200541c0026a41f8006a290300370000201f4220862001ad842002ad4280808080801084100220021035024020052802dc05450d00200110350b024020052d00c0030d0020054180016a108d020b2006450d04200410350c040b41be93ca00ad211f4280808080f00221264180800421050b201f42ffffffff0f83211f20054180800c71210502402006450d00200410350b2026201f84211f2005418012722102410321050b200042003703082000411c6a201f370200200041186a20022005723602000c070b4102210520022d00000d0420022d00014101470d042002411a6a290100211f200241196a2d00002105200241186a2d00002101200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d000021042002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f010021142003200241096a2d00003a0007200320103a0006200320113b0104200320123a0003200320133a0002200320143b01002003200b3a000f200320043a000e2003200c3b010c2003200d3a000b2003200e3a000a2003200f3b0108200320053a0017200320013a0016200320073b0114200320083a0013200320093a00122003200a3b01102003201f370318200341c0036a41186a201f370300200341c0036a41106a2003290310370300200341c8036a2003290308370300200320032903003703c003200341d8056a200341c0036a10fc0120032d00d8054101470d02200341ef046a2205200341f1056a290000370000200341d8046a41106a2202200341ea056a290100370300200341a9016a200341e2056a290100370000200341b1016a2002290300370000200341a0016a41186a2005290000370000200320032d00d9053a00a001200320032901da053700a101200341a0026a200341a0016a10dd06200341d8056a20032802a002220520032802a802220110c102024020032d00d8052202450d002001ad4220862005ad8410070b20032d00d9052101200341d8046a200341d8056a41027241ff00109d081a200341d8056a200341d8046a41ff00109d081a20024101470d01200341c0026a200341d8056a41ff00109d081a024020032802a402450d00200510350b200320013a00c003200341c0036a410172200341c0026a41ff00109d081a200341e0056a4120360200200341e7e485f3063602d8052003200341c0036a3602dc05200341d8046a200341d8056a10f70620033502e00442208620032802d8042205ad841007024020032802dc04450d00200510350b200341e2c289ab063602d805200341203602e0052003200341c0036a41206a3602dc05200341d8046a200341d8056a10f70620033502e00442208620032802d8042205ad841007024020032802dc04450d00200510350b200341203602e005200320034180046a3602dc05200341e9dabdf3063602d805200341d8046a200341d8056a10f70620033502e00442208620032802d8042205ad841007024020032802dc04450d00200510350b200341203602e0052003200341a0046a3602dc05200341e1ea91cb063602d805200341d8046a200341d8056a10f70620033502e00442208620032802d8042205ad841007024020032802dc04450d00200510350b20031099020b4200211f200042003703080c060b024020032802a402450d00200510350b4180920c21024280808080e000211f41ab93ca0021050c010b4180920421024280808080f002211f41be93ca0021050b201f2005ad84211f410321050c010b410021020b200042003703082000411c6a201f370200200041186a20022005723602000b4201211f0b2000201f370300200341e0066a24000f0b1045000b103c000bf75d06067f017e027f017e0d7f047e230041a0046b2203240002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341e4016a4101360200200342013702d401200341e8d4ca003602d001200341043602ac012003419cd5ca003602a8012003200341a8016a3602e001200341d0016a41b0b4cc00104c000b2001412c6a2802002104200141286a2802002105200141246a280200210620012d00012107200341e0006a41186a2001411a6a290000370300200341e0006a41106a200141126a290000370300200341e0006a41086a2001410a6a2900003703002003200141026a290000370360024020022d000120022d0000410047720d002006200410ac06200341d0016a41186a4200370300200341d0016a41106a22024200370300200341d0016a41086a22014200370300200342003703d00141dad5ca00ad4280808080b002841001220829000021092001200841086a290000370300200320093703d001200810354189eaca00ad4280808080f00084100122082900002109200341306a41086a220a200841086a290000370300200320093703302008103520022003290330220937030020034180016a41086a200129030037030020034180016a41106a200937030020034180016a41186a200a290300370300200320032903d00137038001200341d0016a20034180016a10fe01200341d0016a2006200420032802d0012201410120011b220820032902d401420020011b2209422088a710a6022002280200210220032802d401210120032802d001210a20032802dc01220b200341e4016a2802002006200410a7020240200241ffffff3f71450d00200b10350b0240200141ffffff3f71450d00200a10350b20034180046a41186a2202200341e0006a41186a29030037030020034180046a41106a2201200341e0006a41106a29030037030020034180046a41086a2204200341e0006a41086a290300370300200320032903603703800402400240200741ff01710d0020034180016a41186a420037030020034180016a41106a2207420037030020034180016a41086a22014200370300200342003703800141dad5ca00ad4280808080b0028410012204290000210c200341d0006a41086a2202200441086a2900003703002003200c37035020041035200120022903003703002003200329035037038001419cdfca00ad4280808080d0008410012204290000210c2002200441086a2900003703002003200c3703502004103520072003290350220c370300200341a8016a41086a2001290300370300200341a8016a41106a200c370300200341a8016a41186a200229030037030020032003290380013703a801200341a8016aad428080808080048410070c010b200341a8016a41186a2002290300370300200341a8016a41106a2001290300370300200341a8016a41086a200429030037030020032003290380043703a801200341306a41186a4200370300200341306a41106a22074200370300200341306a41086a220242003703002003420037033041dad5ca00ad4280808080b0028410012201290000210c200341d0016a41086a2204200141086a2900003703002003200c3703d0012001103520022004290300370300200320032903d001370330419cdfca00ad4280808080d0008410012201290000210c20034180016a41086a220a200141086a2900003703002003200c37038001200110352007200329038001220c37030020042002290300370300200341d0016a41106a200c370300200341d0016a41186a200a290300370300200320032903303703d001412010332202450d06200220032903a801370000200241186a200341a8016a41186a290300370000200241106a200341a8016a41106a290300370000200241086a200341a8016a41086a290300370000200341d0016aad42808080808004842002ad42808080808004841002200210350b0240200942ffffff3f83500d00200810350b200541ffffff3f71450d0f200610350c0f0b0240200541ffffff3f71450d00200610350b20004200370308200041186a4102360200420121090c0f0b200141046a280200210520032002411a6a290100370398012003200241026a2901003703800120032002410a6a290100370388012003200241126a290100370390010240024020022d00014101470d0020022d000041ff01710d00200341e0006a41186a20034180016a41186a2206290300370300200341e0006a41106a20034180016a41106a2204290300370300200341e0006a41086a20034180016a41086a22072903003703002003200329038001370360200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d00141dad5ca00ad4280808080b002841001220129000021092002200141086a290000370300200320093703d001200110354189eaca00ad4280808080f00084100122012900002109200341306a41086a220a200141086a290000370300200320093703302001103520082003290330220937030020072002290300370300200420093703002006200a290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b2209422088a741057421012002410120021b2207210202400340024020010d00410021040c020b41012104200341e0006a2002460d01200141606a21012002200341e0006a412010a0082106200241206a210220060d000b0b0240200942ffffff3f83500d00200710350b41831621022004450d01200341003602d801200342013703d0012005200341d0016a10af0320032802d401210120034180046a41186a220620033502d80142208620032802d0012208ad841009220241186a29000037030020034180046a41106a2204200241106a29000037030020034180046a41086a2207200241086a29000037030020032002290000370380042002103502402001450d00200810350b200341d0016a200541b002109d081a200341a8016a410d6a200341e0006a41086a290300370000200341a8016a41156a200341e0006a41106a290300370000200341a8016a411d6a200341e0006a41186a290300370000200341013a00ac01200320032903603700ad01200341013a00a80120034180016a200341d0016a200341a8016a10ac032003290380012109200341d0016a410d6a2007290300370000200341d0016a41156a2004290300370000200341d0016a411d6a2006290300370000200341f5016a2009503a0000200341053a00d401200341073a00d00120032003290380043700d50141b0b4cc004100200341d0016a10d401200510350c0f0b41821621020b200510ba0220051035200041206a41093602002000411c6a41f2dfca00360200200041186a200236020020004200370308420121090c0e0b200141086a2802002105200141046a280200210d2002411a6a2901002109200241196a2d00002106200241186a2d00002104200241166a2f01002107200241156a2d00002108200241146a2d0000210a200241126a2f0100210b200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211941012101024020022d00000d0020022d000141014721010b200320093703c001200320063a00bf01200320043a00be01200320073b01bc01200320083a00bb012003200a3a00ba012003200b3b01b8012003200e3a00b7012003200f3a00b601200320103b01b401200320113a00b301200320123a00b201200320133b01b001200320143a00af01200320153a00ae01200320163b01ac01200320173a00ab01200320183a00aa01200320193b01a801024020010d00200341e0006a41186a200341a8016a41186a290300370300200341e0006a41106a200341a8016a41106a290300370300200341e0006a41086a200341a8016a41086a290300370300200320032903a801370360200341d0016a41186a4200370300200341d0016a41106a22074200370300200341d0016a41086a22024200370300200342003703d00141dad5ca00ad4280808080b002841001220129000021092002200141086a290000370300200320093703d001200110354189eaca00ad4280808080f00084100122012900002109200341306a41086a2206200141086a290000370300200320093703302001103520072003290330220937030020034180016a41086a200229030037030020034180016a41106a200937030020034180016a41186a2006290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b2209422088a741057421012002410120021b2208210202400340024020010d00410021040c020b41012104200341e0006a2002460d01200141606a21012002200341e0006a412010a0082106200241206a210220060d000b0b0240200942ffffff3f83500d00200810350b41032102024020040d0041f2dfca0021014109210641801621040c0c0b200341003602d801200342013703d0012005200341d0016a10af0320032802d401210620034180046a41186a220420033502d80142208620032802d001220bad841009220141186a29000037030020034180046a41106a2208200141106a29000037030020034180046a41086a220a200141086a29000037030020032001290000370380042001103502402006450d00200b10350b200341d0016a41186a2004290300370300200341d0016a41106a2008290300370300200341d0016a41086a200a29030037030020032003290380043703d001200341a8016a200341d0016a109907200341206a20032802a801220620032802b00141b0b4cc0041004100108a0220032802202101024020032802ac01450d00200610350b20014101460d040240200d4102490d0020034180016a41186a2208420037030020034180016a41106a2206420037030020034180016a41086a22014200370300200342003703800141dad5ca00ad4280808080b00284220910012204290000210c200341d0006a41086a2202200441086a2900003703002003200c37035020041035200120022903003703002003200329035037038001418ef0cb00ad4280808080d00184220c10012204290000211a2002200441086a2900003703002003201a3703502004103520062003290350221a370300200341306a41086a22042001290300370300200341306a41106a220a201a370300200341306a41186a220b20022903003703002003200329038001370330200341186a200341306a412010c001200328021c210f20032802182110200842003703002006420037030020014200370300200342003703800120091001220e290000211a2002200e41086a2900003703002003201a370350200e1035200120022903003703002003200329035037038001200c1001220e290000211a2002200e41086a2900003703002003201a370350200e103520062003290350221a37030020042001290300370300200a201a370300200b20022903003703002003200329038001370330200341106a200341306a412010c0012003280210211120032802142112200842003703002006420037030020014200370300200342003703800120091001220e290000211a2002200e41086a2900003703002003201a370350200e1035200120022903003703002003200329035037038001200c1001220e290000210c2002200e41086a2900003703002003200c370350200e103520062003290350220c37030020042001290300370300200a200c370300200b20022903003703002003200329038001370330410121022003201241016a410120111b3602d001200341306aad4280808080800484200341d0016aad4280808080c000841002200341d0016a41186a220e4200370300200341d0016a41106a22114200370300200341d0016a41086a220a4200370300200342003703d00120091001220b2900002109200a200b41086a290000370300200320093703d001200b10354180eaca00ad42808080809001841001220b29000021092004200b41086a29000037030020032009370330200b103520072003290330370000200741086a20042903003700002001200a290300370300200620112903003703002008200e290300370300200320032903d00137038001200341d0016a20034180016a412010b5020240024020032802d00122010d00200341003602b001200342013703a8014100210a410021060c010b200320032902d40122093702ac01200320013602a8012009422088a721062009a7210a200121020b200341306a41186a220b20034180046a41186a290300370300200341306a41106a220420034180046a41106a290300370300200341306a41086a220120034180046a41086a290300370300200320032903800437033002402006200a470d00200341a8016a200a4101108a0120032802ac01210a20032802a801210220032802b00121060b200220064105746a22082003290330370000200841186a200b290300370000200841106a2004290300370000200841086a20012903003700002003200641016a220e3602b001200b420037030020044200370300200142003703002003420037033041dad5ca00ad4280808080b00284100122082900002109200341d0006a41086a2206200841086a290000370300200320093703502008103520012006290300370300200320032903503703304180eaca00ad42808080809001841001220829000021092006200841086a290000370300200320093703502008103520042003290350220937030020034180016a41086a200129030037030020034180016a41106a200937030020034180016a41186a200629030037030020032003290330370380010240024020020d0020034180016aad428080808080048410070c010b200341203602d401200320034180016a3602d0012002200e200341d0016a10c504200a41ffffff3f71450d00200210350b200341d0016a200541b002109d081a200341a8016a41186a20034180046a41186a290300370300200341a8016a41106a20034180046a41106a290300370300200341a8016a41086a20034180046a41086a29030037030020032003290380043703a80120034180016a200341a8016a10990720032802800121022003350288012109200341003602b001200342013703a801200341d0016a200341a8016a10af0320032802ac01210120094220862002ad8420033502b00142208620032802a8012206ad84100202402001450d00200610350b0240200328028401450d00200210350b200341d0016a10ba02200341d0016a41186a22064200370300200341d0016a41106a22044200370300200341d0016a41086a22024200370300200342003703d00141d1c4c700ad4280808080e000841001220129000021092002200141086a290000370300200320093703d0012001103541e7c4c700ad4280808080e00084100122012900002109200341306a41086a2208200141086a290000370300200320093703302001103520072003290330370000200741086a200829030037000020034180016a41086a200229030037030020034180016a41106a200429030037030020034180016a41186a2006290300370300200320032903d00137038001200341086a20034180016a412010c001200328020c210120032802082106412010332202450d0620022003290360370000200241186a200341e0006a41186a290300370000200241106a200341e0006a41106a290300370000200241086a200341e0006a41086a290300370000200341ec016a4100360200200341dc016a428180808010370200200320014180e5086a4180e50820061b3602f001200342013702e401200320023602d8012003200d3602d4012003200f410020101b22063602d001200341a8016a41186a20034180046a41186a290300370300200341a8016a41106a20034180046a41106a290300370300200341a8016a41086a20034180046a41086a29030037030020032003290380043703a80120034180016a200341a8016a108c07200328028001210120032003280288013602ac01200320013602a801200341d0016a200341a8016a1092070240200328028401450d00200110350b20021035200341dd016a200341e0006a41086a290300370000200341e5016a200341e0006a41106a290300370000200341ed016a200341e0006a41186a290300370000200341f5016a200329038004370000200341fd016a20034180046a41086a29030037000020034185026a20034180046a41106a2903003700002003418d026a20034180046a41186a2903003700002003419c026a200d36020020034198026a2006360200200341003a00d401200341073a00d001200320032903603700d501200341d0016a21020c0d0b200341d0016a41186a22064200370300200341d0016a41106a22044200370300200341d0016a41086a22024200370300200342003703d00141dad5ca00ad4280808080b002841001220129000021092002200141086a290000370300200320093703d001200110354189eaca00ad4280808080f00084100122012900002109200341306a41086a2208200141086a290000370300200320093703302001103520072003290330370000200741086a200829030037000020034180016a41086a200229030037030020034180016a41106a200429030037030020034180016a41186a2006290300370300200320032903d00137038001200341a8016a20034180016a10fe010240024020032802a80122010d00410021020c010b20032902ac012209422088a72102200942ffffff3f83500d00200110350b200341d0016a200541b002109d081a200341b4016a2002360200200341a8016a41086a4101360200200341003a00ac01200341013a00a80120034180016a200341d0016a200341a8016a10ac032003290380012109200341dd016a20034180046a41086a290300370000200341e5016a20034190046a290300370000200341ed016a20034198046a290300370000200341f5016a2009503a0000200341043a00d401200341073a00d00120032003290380043700d501200341d0016a21020c0c0b4102210241801621040c0a0b200141216a2d0000210d200141246a2802002119200341e0006a41186a200141196a290000370300200341e0006a41106a200141116a290000370300200341e0006a41086a200141096a290000370300200320012900013703602002411a6a2901002109200241196a2d00002106200241186a2d00002104200241166a2f01002105200241156a2d00002107200241146a2d00002108200241126a2f0100210a200241116a2d0000210b200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012101024020022d00000d0020022d000141014721010b200320093703c001200320063a00bf01200320043a00be01200320053b01bc01200320073a00bb01200320083a00ba012003200a3b01b8012003200b3a00b7012003200e3a00b6012003200f3b01b401200320103a00b301200320113a00b201200320123b01b001200320133a00af01200320143a00ae01200320153b01ac01200320163a00ab01200320173a00aa01200320183b01a801024020010d0020034180046a41186a200341a8016a41186a29030037030020034180046a41106a200341a8016a41106a29030037030020034180046a41086a200341a8016a41086a290300370300200320032903a80137038004200341d0016a41186a4200370300200341d0016a41106a22054200370300200341d0016a41086a22024200370300200342003703d00141dad5ca00ad4280808080b002841001220129000021092002200141086a290000370300200320093703d001200110354189eaca00ad4280808080f00084100122012900002109200341306a41086a2206200141086a290000370300200320093703302001103520052003290330220937030020034180016a41086a200229030037030020034180016a41106a200937030020034180016a41186a2006290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b2209422088a741057421012002410120021b2207210202400340024020010d00410021040c020b4101210420034180046a2002460d01200141606a2101200220034180046a412010a0082106200241206a210220060d000b0b0240200942ffffff3f83500d00200710350b41032102024020040d004100210141f2dfca002106410921040c0a0b20034180016a200341e0006a109a07200341d0016a200328028001220620032802880110de0220032802840121010240024020032802d8012208450d00200341f0016a2802002102200341ec016a280200210b200341e8016a2802002110200341e4016a280200210f200341e0016a280200210a20032802dc01210e20032903d001210902402001450d00200610350b200341c4016a200b360200200341c0016a2010360200200341b8016a200a360200200341b4016a200e360200200320023602c8012003200f3602bc01200320083602b001200320093703a80120192009a7460d0141c8dfca002106410a21044180800c21010c0a0b02402001450d00200610350b41808008210141d2dfca002106410f21040c0a0b4100210141002106410021110240200a450d00200a410574210441002106200821020240034020034180046a2002460d012006200220034180046a412010a00822074100476a21062007450d01200241206a2102200441606a22040d000b410021110c010b410121110b410021020240200b450d00200b410574210441002101200f21020240034020034180046a2002460d012001200220034180046a412010a00822074100476a21012007450d01200241206a2102200441606a22040d000b410021020c010b410121020b024002400240200d41ff01710d002002450d010c0a0b20110d09200341306a41186a220420034180046a41186a290300370300200341306a41106a220720034180046a41106a290300370300200341306a41086a220b20034180046a41086a29030037030020032003290380043703300240200a200e470d00200341b0016a200e4101108a0120032802b801210a20032802b00121080b2008200a4105746a22062003290330370000200641186a2004290300370000200641106a2007290300370000200641086a200b2903003700002003200a41016a22073602b80120032802c40121042002450d01200420014d0d0720032802bc0122062004417f6a22044105746a220229000021092002290008210c2002290010211a200241186a290000211b200320043602c401200620014105746a220241186a201b3700002002201a3700102002200c370008200220093700000c010b20034180016a41186a220120034180046a41186a29030037030020034180016a41106a220420034180046a41106a29030037030020034180016a41086a220720034180046a41086a2903003703002003200329038004370380010240200b2010470d00200341bc016a20104101108a0120032802c401210b20032802bc01210f0b200f200b4105746a2202200329038001370000200241186a2001290300370000200241106a2004290300370000200241086a2007290300370000200320032802c40141016a22043602c40120032802b80121072011450d00200720064d0d0720032802b00122012007417f6a22074105746a220229000021092002290008210c2002290010211a200241186a290000211b200320073602b801200120064105746a220241186a201b3700002002201a3700102002200c370008200220093700000b200341f5016a2003290360370000200341dd016a20034180046a41086a290300370000200341e5016a20034180046a41106a290300370000200341ed016a20034180046a41186a290300370000200341fd016a200341e0006a41086a29030037000020034185026a200341e0006a41106a2903003700002003418d026a200341e0006a41186a290300370000200341013a00d401200341073a00d00120032003290380043700d5012003419c026a200436020020034198026a200736020020034195026a200d3a00004100210241b0b4cc004100200341d0016a10d401200341d0016a41186a22084200370300200341d0016a41106a220a4200370300200341d0016a41086a22014200370300200342003703d00141dad5ca00ad4280808080b002841001220629000021092001200641086a290000370300200320093703d001200610354189eaca00ad4280808080f00084100122062900002109200341306a41086a220b200641086a290000370300200320093703302006103520052003290330370000200541086a200b29030037000020034180016a41086a200129030037030020034180016a41106a200a29030037030020034180016a41186a2008290300370300200320032903d00137038001200341d0006a20034180016a10fe01024020032802502201450d0020032902542209422088a72102200942ffffff3f83500d00200110350b0240200720032802ac0122014f22060d004100200220046b2204200420024b1b2001490d00200341d0016a41206a200341a8016a41206a280200360200200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d00120034180016a200341e0006a109a072003280280012102200320032802880136023420032002360230200341d0016a200341306a1092070240200328028401450d00200210350b0240200341dc016a28020041ffffff3f71450d0020032802d80110350b200341e8016a28020041ffffff3f71450d0d20032802e40110350c0d0b200341d0016a41206a200341a8016a41206a280200360200200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d00120034180016a41186a200341e0006a41186a29030037030020034180016a41106a200341e0006a41106a29030037030020034180016a41086a200341e0006a41086a290300370300200320032903603703800120062002200341d0016a20034180016a109b070c0c0b41002101410221020c080b200141246a280200210620034198046a200141196a29000037030020034190046a200141116a29000037030020034188046a200141096a2900003703002003200129000137038004410221010240024002400240024020022d00000d0020022d00014101470d00200341a8016a20034180046a109a07200341d0016a20032802a801220120032802b00110de0220032802ac012102024020032802d8012205450d00200341f0016a280200210b200341ec016a280200210e200341e8016a2802002107200341e4016a280200210f200341e0016a280200210a20032802dc01210820032903d001210902402002450d00200110350b20062009a7460d0241c8dfca002106410a21024180800c21040c030b02402002450d00200110350b410321010b418080082104410f210241d2dfca0021060c020b200341d0016a41186a4200370300200341d0016a41106a2210420037030041082102200341d0016a41086a22014200370300200342003703d00141d1c4c700ad4280808080e0008410012206290000210c2001200641086a2900003703002003200c3703d0012006103541e7c4c700ad4280808080e0008410012206290000210c200341306a41086a2204200641086a2900003703002003200c3703302006103520102003290330220c37030020034180016a41086a200129030037030020034180016a41106a2201200c37030020034180016a41186a22062004290300370300200320032903d00137038001200341286a20034180016a412010c001200328022c410020032802281b200b4f0d0241a1dfca0021064180801821040b0240200841ffffff3f71450d00200510350b0240200741ffffff3f71450d00200f10350b410321010b20004200370308200041206a20023602002000411c6a2006360200200041186a20044180801c7120017241801672360200420121090c0c0b2009422088210c200642003703002001420037030020034180016a41086a22024200370300200342003703800141dad5ca00ad4280808080b0028410012211290000211a200341d0006a41086a2204201141086a2900003703002003201a37035020111035200220042903003703002003200329035037038001419cdfca00ad4280808080d0008410012211290000211a2004201141086a2900003703002003201a3703502011103520012003290350221a370300200341306a41086a2002290300370300200341306a41106a201a370300200341306a41186a20042903003703002003200329038001370330200341d0016a200341306a412010d50120032d00d00121042006200341e9016a2900003703002001200341e1016a2900003703002002200341d9016a290000370300200320032900d101370380010240024020044101460d00410021040c010b200341a8016a41186a20034180016a41186a290300221a370300200341a8016a41106a20034180016a41106a290300221b370300200341a8016a41086a2002290300221c3703002003200329038001221d3703a801200341d0016a41186a201a370300200341d0016a41106a201b370300200341d0016a41086a201c3703002003201d3703d001200a4105742101200521020340024020010d00410021040c020b41012104200341d0016a2002460d01200141606a21012002200341d0016a412010a0082106200241206a210220060d000b0b200ca72106200341d0016a41186a22114200370300200341d0016a41106a22124200370300200341d0016a41086a22024200370300200342003703d00141dad5ca00ad4280808080b0028410012201290000210c2002200141086a2900003703002003200c3703d001200110354189eaca00ad4280808080f0008410012201290000210c200341306a41086a2213200141086a2900003703002003200c3703302001103520102003290330370000201041086a201329030037000020034180016a41086a200229030037030020034180016a41106a201229030037030020034180016a41186a2011290300370300200320032903d00137038001200341a8016a20034180016a10fe010240024020032802a80122010d00410021020c010b20032902ac01220c422088a72102200c42ffffff3f83500d00200110350b200341dd016a20034180046a41086a2201290300370000200341e5016a20034180046a41106a2210290300370000200341ed016a20034180046a41186a2211290300370000200341fc016a41002002200e200a6a6b221220041b200e6a360200200341f8016a2012410020041b200a6a2204360200200341063a00d401200341073a00d00120032003290380043700d50141b0b4cc004100200341d0016a10d401200341ec016a200e360200200341d0016a41186a2007360200200341d0016a41106a200a360200200341dc016a20083602002003200b3602f0012003200f3602e401200320053602d801200320093703d001200341a8016a41186a2011290300370300200341a8016a41106a2010290300370300200341a8016a41086a200129030037030020032003290380043703a801200420064f2002200341d0016a200341a8016a109b070c0a0b1045000b41e1dfca002101411121064180960421040c060b103c000b20012004104a000b20062007104a000b41bbdfca002106410d21044180801021010b0240200e41ffffff3f71450d00200810350b0240201041ffffff3f71450d00200f10350b410321020b20004200370308200041206a20043602002000411c6a2006360200200041186a20014180801c7120027241801672360200420121090c030b200510ba0220051035200041206a20063602002000411c6a2001360200200041186a200420027236020020004200370308420121090c020b41b0b4cc004100200210d401200510350b42002109200042003703080b20002009370300200341a0046a24000bf55c04097f027e0c7f047e230041a0046b2203240002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e06000102030405000b200341e4016a4101360200200342013702d401200341e8d4ca003602d001200341043602ac012003419cd5ca003602a8012003200341a8016a3602e001200341d0016a41b0b4cc00104c000b2001412c6a2802002104200141286a2802002105200141246a280200210620012d00012107200341e0006a41186a22082001411a6a290000370300200341e0006a41106a2209200141126a290000370300200341e0006a41086a220a2001410a6a2900003703002003200141026a290000370360024020022d000120022d0000410047720d002006200410ac06200341d0016a41186a4200370300200341d0016a41106a220b4200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b00284220c10012201290000210d2002200141086a2900003703002003200d3703d001200110354189eaca00ad4280808080f0008410012201290000210d200341306a41086a220e200141086a2900003703002003200d37033020011035200b2003290330220d37030020034180016a41086a200229030037030020034180016a41106a200d37030020034180016a41186a200e290300370300200320032903d00137038001200341d0016a20034180016a10fe012006200420032802d0012202410120021b220b20032902d401420020021b220d422088a710ad0620034180046a41186a200829030037030020034180046a41106a200929030037030020034180046a41086a200a290300370300200320032903603703800402400240200741ff01710d0020034180016a41186a420037030020034180016a41106a2207420037030020034180016a41086a220142003703002003420037038001200c10012204290000210c200341d0006a41086a2202200441086a2900003703002003200c37035020041035200120022903003703002003200329035037038001419cdfca00ad4280808080d0008410012204290000210c2002200441086a2900003703002003200c3703502004103520072003290350220c370300200341a8016a41086a2001290300370300200341a8016a41106a200c370300200341a8016a41186a200229030037030020032003290380013703a801200341a8016aad428080808080048410070c010b200341a8016a41186a220720034180046a41186a290300370300200341a8016a41106a220820034180046a41106a290300370300200341a8016a41086a220920034180046a41086a29030037030020032003290380043703a801200341306a41186a4200370300200341306a41106a220a4200370300200341306a41086a2202420037030020034200370330200c10012201290000210c200341d0016a41086a2204200141086a2900003703002003200c3703d0012001103520022004290300370300200320032903d001370330419cdfca00ad4280808080d0008410012201290000210c20034180016a41086a220e200141086a2900003703002003200c3703800120011035200a200329038001220c37030020042002290300370300200341d0016a41106a200c370300200341d0016a41186a200e290300370300200320032903303703d001412010332202450d06200220032903a801370000200241186a2007290300370000200241106a2008290300370000200241086a2009290300370000200341d0016aad42808080808004842002ad42808080808004841002200210350b0240200d42ffffff3f83500d00200b10350b200541ffffff3f71450d0f200610350c0f0b0240200541ffffff3f71450d00200610350b20004200370308200041186a41023602004201210c0c0f0b200141046a280200210420032002411a6a290100370398012003200241026a2901003703800120032002410a6a290100370388012003200241126a290100370390010240024020022d00014101470d0020022d000041ff01710d00200341e0006a41186a20034180016a41186a2206290300370300200341e0006a41106a20034180016a41106a2205290300370300200341e0006a41086a20034180016a41086a22072903003703002003200329038001370360200341d0016a41186a4200370300200341d0016a41106a22084200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b0028410012201290000210c2002200141086a2900003703002003200c3703d001200110354189eaca00ad4280808080f0008410012201290000210c200341306a41086a2209200141086a2900003703002003200c3703302001103520082003290330220c370300200720022903003703002005200c37030020062009290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b220c422088a741057421012002410120021b2207210202400340024020010d00410021050c020b41012105200341e0006a2002460d01200141606a21012002200341e0006a412010a0082106200241206a210220060d000b0b0240200c42ffffff3f83500d00200710350b41831821022005450d01200341003602d801200342013703d0012004200341d0016a10af0320032802d401210120034180046a41186a220620033502d80142208620032802d0012208ad841009220241186a29000037030020034180046a41106a2205200241106a29000037030020034180046a41086a2207200241086a29000037030020032002290000370380042002103502402001450d00200810350b200341d0016a200441b002109d081a200341a8016a410d6a200341e0006a41086a290300370000200341a8016a41156a200341e0006a41106a290300370000200341a8016a411d6a200341e0006a41186a290300370000200341013a00ac01200320032903603700ad01200341023a00a80120034180016a200341d0016a200341a8016a10ac03200329038001210c200341d0016a410d6a2007290300370000200341d0016a41156a2005290300370000200341d0016a411d6a2006290300370000200341f5016a200c503a0000200341053a00d401200341083a00d00120032003290380043700d50141b0b4cc004100200341d0016a10d401200410350c0f0b41821821020b200410ba0220041035200041206a41093602002000411c6a41f2dfca00360200200041186a2002360200200042003703084201210c0c0e0b200141086a2802002104200141046a280200210f2002411a6a290100210c200241196a2d00002106200241186a2d00002105200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210e2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002117200241046a2d00002118200241026a2f0100211941012101024020022d00000d0020022d000141014721010b2003200c3703c001200320063a00bf01200320053a00be01200320073b01bc01200320083a00bb01200320093a00ba012003200a3b01b8012003200b3a00b7012003200e3a00b601200320103b01b401200320113a00b301200320123a00b201200320133b01b001200320143a00af01200320153a00ae01200320163b01ac01200320173a00ab01200320183a00aa01200320193b01a801024020010d00200341e0006a41186a200341a8016a41186a290300370300200341e0006a41106a200341a8016a41106a290300370300200341e0006a41086a200341a8016a41086a290300370300200320032903a801370360200341d0016a41186a4200370300200341d0016a41106a22074200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b0028410012201290000210c2002200141086a2900003703002003200c3703d001200110354189eaca00ad4280808080f0008410012201290000210c200341306a41086a2206200141086a2900003703002003200c3703302001103520072003290330220c37030020034180016a41086a200229030037030020034180016a41106a200c37030020034180016a41186a2006290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b220c422088a741057421012002410120021b2208210202400340024020010d00410021050c020b41012105200341e0006a2002460d01200141606a21012002200341e0006a412010a0082106200241206a210220060d000b0b0240200c42ffffff3f83500d00200810350b41032102024020050d0041f2dfca0021014109210641801821050c0c0b200341003602d801200342013703d0012004200341d0016a10af0320032802d401210620034180046a41186a220520033502d80142208620032802d001220aad841009220141186a29000037030020034180046a41106a2208200141106a29000037030020034180046a41086a2209200141086a29000037030020032001290000370380042001103502402006450d00200a10350b200341d0016a41186a2005290300370300200341d0016a41106a2008290300370300200341d0016a41086a200929030037030020032003290380043703d001200341a8016a200341d0016a109d07200341206a20032802a801220620032802b00141b0b4cc0041004100108a0220032802202101024020032802ac01450d00200610350b20014101460d040240200f4102490d0020034180016a41186a2208420037030020034180016a41106a2206420037030020034180016a41086a22014200370300200342003703800141c7d5ca00ad4280808080b00284220c10012205290000210d200341d0006a41086a2202200541086a2900003703002003200d37035020051035200120022903003703002003200329035037038001418ef0cb00ad4280808080d00184220d10012205290000211a2002200541086a2900003703002003201a3703502005103520062003290350221a370300200341306a41086a22052001290300370300200341306a41106a2209201a370300200341306a41186a220a20022903003703002003200329038001370330200341186a200341306a412010c001200328021c210e200328021821102008420037030020064200370300200142003703002003420037038001200c1001220b290000211a2002200b41086a2900003703002003201a370350200b1035200120022903003703002003200329035037038001200d1001220b290000211a2002200b41086a2900003703002003201a370350200b103520062003290350221a370300200520012903003703002009201a370300200a20022903003703002003200329038001370330200341106a200341306a412010c00120032802102111200328021421122008420037030020064200370300200142003703002003420037038001200c1001220b290000211a2002200b41086a2900003703002003201a370350200b1035200120022903003703002003200329035037038001200d1001220b290000210d2002200b41086a2900003703002003200d370350200b103520062003290350220d370300200520012903003703002009200d370300200a20022903003703002003200329038001370330410121022003201241016a410120111b3602d001200341306aad4280808080800484200341d0016aad4280808080c000841002200341d0016a41186a220b4200370300200341d0016a41106a22114200370300200341d0016a41086a22094200370300200342003703d001200c1001220a290000210c2009200a41086a2900003703002003200c3703d001200a10354180eaca00ad42808080809001841001220a290000210c2005200a41086a2900003703002003200c370330200a103520072003290330370000200741086a200529030037000020012009290300370300200620112903003703002008200b290300370300200320032903d00137038001200341d0016a20034180016a412010b5020240024020032802d00122010d00200341003602b001200342013703a80141002109410021060c010b200320032902d401220c3702ac01200320013602a801200c422088a72106200ca72109200121020b200341306a41186a220a20034180046a41186a290300370300200341306a41106a220520034180046a41106a290300370300200341306a41086a220120034180046a41086a2903003703002003200329038004370330024020062009470d00200341a8016a20094101108a0120032802ac01210920032802a801210220032802b00121060b200220064105746a22082003290330370000200841186a200a290300370000200841106a2005290300370000200841086a20012903003700002003200641016a220b3602b001200a420037030020054200370300200142003703002003420037033041c7d5ca00ad4280808080b0028410012208290000210c200341d0006a41086a2206200841086a2900003703002003200c3703502008103520012006290300370300200320032903503703304180eaca00ad428080808090018410012208290000210c2006200841086a2900003703002003200c3703502008103520052003290350220c37030020034180016a41086a200129030037030020034180016a41106a200c37030020034180016a41186a200629030037030020032003290330370380010240024020020d0020034180016aad428080808080048410070c010b200341203602d401200320034180016a3602d0012002200b200341d0016a10c504200941ffffff3f71450d00200210350b200341d0016a200441b002109d081a200341a8016a41186a20034180046a41186a290300370300200341a8016a41106a20034180046a41106a290300370300200341a8016a41086a20034180046a41086a29030037030020032003290380043703a80120034180016a200341a8016a109d072003280280012102200335028801210c200341003602b001200342013703a801200341d0016a200341a8016a10af0320032802ac012101200c4220862002ad8420033502b00142208620032802a8012206ad84100202402001450d00200610350b0240200328028401450d00200210350b200341d0016a10ba02200341d0016a41186a22064200370300200341d0016a41106a22054200370300200341d0016a41086a22024200370300200342003703d00141d1c4c700ad4280808080e0008410012201290000210c2002200141086a2900003703002003200c3703d0012001103541e7c4c700ad4280808080e0008410012201290000210c200341306a41086a2208200141086a2900003703002003200c3703302001103520072003290330370000200741086a200829030037000020034180016a41086a200229030037030020034180016a41106a200529030037030020034180016a41186a2006290300370300200320032903d00137038001200341086a20034180016a412010c001200328020c210120032802082106412010332202450d0620022003290360370000200241186a200341e0006a41186a290300370000200241106a200341e0006a41106a290300370000200241086a200341e0006a41086a290300370000200341ec016a4100360200200341dc016a428180808010370200200320014180e5086a4180e50820061b3602f001200342013702e401200320023602d8012003200f3602d4012003200e410020101b22063602d001200341a8016a41186a20034180046a41186a290300370300200341a8016a41106a20034180046a41106a290300370300200341a8016a41086a20034180046a41086a29030037030020032003290380043703a80120034180016a200341a8016a108a07200328028001210120032003280288013602ac01200320013602a801200341d0016a200341a8016a1092070240200328028401450d00200110350b20021035200341e5016a200341e0006a41106a290300370000200341ed016a200341e0006a41186a290300370000200341f5016a20032903800437000020034185026a20034180046a41106a2903003700002003418d026a20034180046a41186a2903003700002003419c026a200f36020020034198026a2006360200200341083a00d001200341dd016a200341e0006a41086a290300370000200341fd016a20034180046a41086a290300370000200341003a00d401200320032903603700d501200341d0016a21020c0d0b200341d0016a41186a22064200370300200341d0016a41106a22054200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b0028410012201290000210c2002200141086a2900003703002003200c3703d001200110354189eaca00ad4280808080f0008410012201290000210c200341306a41086a2208200141086a2900003703002003200c3703302001103520072003290330370000200741086a200829030037000020034180016a41086a200229030037030020034180016a41106a200529030037030020034180016a41186a2006290300370300200320032903d00137038001200341a8016a20034180016a10fe010240024020032802a80122010d00410021020c010b20032902ac01220c422088a72102200c42ffffff3f83500d00200110350b200341d0016a200441b002109d081a200341b4016a2002360200200341a8016a41086a4101360200200341003a00ac01200341023a00a80120034180016a200341d0016a200341a8016a10ac03200329038001210c200341dd016a20034180046a41086a290300370000200341e5016a20034190046a290300370000200341ed016a20034198046a290300370000200341f5016a200c503a0000200341043a00d401200341083a00d00120032003290380043700d501200341d0016a21020c0c0b4102210241801821050c0a0b200141216a2d0000210f200141246a2802002119200341e0006a41186a200141196a290000370300200341e0006a41106a200141116a290000370300200341e0006a41086a200141096a290000370300200320012900013703602002411a6a290100210c200241196a2d00002106200241186a2d00002105200241166a2f01002104200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210e2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012101024020022d00000d0020022d000141014721010b2003200c3703c001200320063a00bf01200320053a00be01200320043b01bc01200320073a00bb01200320083a00ba01200320093b01b8012003200a3a00b7012003200b3a00b6012003200e3b01b401200320103a00b301200320113a00b201200320123b01b001200320133a00af01200320143a00ae01200320153b01ac01200320163a00ab01200320173a00aa01200320183b01a801024020010d0020034180046a41186a200341a8016a41186a29030037030020034180046a41106a200341a8016a41106a29030037030020034180046a41086a200341a8016a41086a290300370300200320032903a80137038004200341d0016a41186a4200370300200341d0016a41106a22044200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b0028410012201290000210c2002200141086a2900003703002003200c3703d001200110354189eaca00ad4280808080f0008410012201290000210c200341306a41086a2206200141086a2900003703002003200c3703302001103520042003290330220c37030020034180016a41086a200229030037030020034180016a41106a200c37030020034180016a41186a2006290300370300200320032903d00137038001200341d0016a20034180016a10fe0120032902d401420020032802d00122021b220c422088a741057421012002410120021b2207210202400340024020010d00410021050c020b4101210520034180046a2002460d01200141606a2101200220034180046a412010a0082106200241206a210220060d000b0b0240200c42ffffff3f83500d00200710350b41032102024020050d004100210141f2dfca002106410921050c0a0b20034180016a200341e0006a109e07200341d0016a200328028001220620032802880110de0220032802840121010240024020032802d8012208450d00200341f0016a2802002102200341ec016a280200210a200341e8016a2802002110200341e4016a280200210e200341e0016a280200210920032802dc01210b20032903d001210c02402001450d00200610350b200341c4016a200a360200200341c0016a2010360200200341b8016a2009360200200341b4016a200b360200200320023602c8012003200e3602bc01200320083602b0012003200c3703a8012019200ca7460d0141c8dfca002106410a21054180800c21010c0a0b02402001450d00200610350b41808008210141d2dfca002106410f21050c0a0b41002101410021064100211102402009450d002009410574210541002106200821020240034020034180046a2002460d012006200220034180046a412010a00822074100476a21062007450d01200241206a2102200541606a22050d000b410021110c010b410121110b410021020240200a450d00200a410574210541002101200e21020240034020034180046a2002460d012001200220034180046a412010a00822074100476a21012007450d01200241206a2102200541606a22050d000b410021020c010b410121020b024002400240200f41ff01710d002002450d010c0a0b20110d09200341306a41186a220520034180046a41186a290300370300200341306a41106a220720034180046a41106a290300370300200341306a41086a220a20034180046a41086a290300370300200320032903800437033002402009200b470d00200341b0016a200b4101108a0120032802b801210920032802b00121080b200820094105746a22062003290330370000200641186a2005290300370000200641106a2007290300370000200641086a200a2903003700002003200941016a22073602b80120032802c40121052002450d01200520014d0d0720032802bc0122062005417f6a22054105746a2202290000210c2002290008210d2002290010211a200241186a290000211b200320053602c401200620014105746a220241186a201b3700002002201a3700102002200d3700082002200c3700000c010b20034180016a41186a220120034180046a41186a29030037030020034180016a41106a220520034180046a41106a29030037030020034180016a41086a220720034180046a41086a2903003703002003200329038004370380010240200a2010470d00200341bc016a20104101108a0120032802c401210a20032802bc01210e0b200e200a4105746a2202200329038001370000200241186a2001290300370000200241106a2005290300370000200241086a2007290300370000200320032802c40141016a22053602c40120032802b80121072011450d00200720064d0d0720032802b00122012007417f6a22074105746a2202290000210c2002290008210d2002290010211a200241186a290000211b200320073602b801200120064105746a220241186a201b3700002002201a3700102002200d3700082002200c3700000b200341f5016a2003290360370000200341e5016a20034180046a41106a290300370000200341ed016a20034180046a41186a29030037000020034185026a200341e0006a41106a2903003700002003418d026a200341e0006a41186a290300370000200341083a00d001200341dd016a20034180046a41086a290300370000200341fd016a200341e0006a41086a290300370000200341013a00d40120032003290380043700d5012003419c026a200536020020034198026a200736020020034195026a200f3a00004100210241b0b4cc004100200341d0016a10d401200341d0016a41186a22084200370300200341d0016a41106a22094200370300200341d0016a41086a22014200370300200342003703d00141c7d5ca00ad4280808080b0028410012206290000210c2001200641086a2900003703002003200c3703d001200610354189eaca00ad4280808080f0008410012206290000210c200341306a41086a220a200641086a2900003703002003200c3703302006103520042003290330370000200441086a200a29030037000020034180016a41086a200129030037030020034180016a41106a200929030037030020034180016a41186a2008290300370300200320032903d00137038001200341d0006a20034180016a10fe01024020032802502201450d002003290254220c422088a72102200c42ffffff3f83500d00200110350b0240200720032802ac0122014f22060d004100200220056b2205200520024b1b2001490d00200341d0016a41206a200341a8016a41206a280200360200200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d00120034180016a200341e0006a109e072003280280012102200320032802880136023420032002360230200341d0016a200341306a1092070240200328028401450d00200210350b0240200341dc016a28020041ffffff3f71450d0020032802d80110350b200341e8016a28020041ffffff3f71450d0d20032802e40110350c0d0b200341d0016a41206a200341a8016a41206a280200360200200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d00120034180016a41186a200341e0006a41186a29030037030020034180016a41106a200341e0006a41106a29030037030020034180016a41086a200341e0006a41086a290300370300200320032903603703800120062002200341d0016a20034180016a109f070c0c0b41002101410221020c080b200141246a280200210620034198046a200141196a29000037030020034190046a200141116a29000037030020034188046a200141096a2900003703002003200129000137038004410221010240024002400240024020022d00000d0020022d00014101470d00200341a8016a20034180046a109e07200341d0016a20032802a801220120032802b00110de0220032802ac012102024020032802d8012204450d00200341f0016a280200210a200341ec016a280200210b200341e8016a2802002107200341e4016a280200210e200341e0016a280200210920032802dc01210820032903d001210c02402002450d00200110350b2006200ca7460d0241c8dfca002106410a21024180800c21050c030b02402002450d00200110350b410321010b418080082105410f210241d2dfca0021060c020b200341d0016a41186a4200370300200341d0016a41106a2210420037030041082102200341d0016a41086a22014200370300200342003703d00141d1c4c700ad4280808080e0008410012206290000210d2001200641086a2900003703002003200d3703d0012006103541e7c4c700ad4280808080e0008410012206290000210d200341306a41086a2205200641086a2900003703002003200d3703302006103520102003290330220d37030020034180016a41086a200129030037030020034180016a41106a2201200d37030020034180016a41186a22062005290300370300200320032903d00137038001200341286a20034180016a412010c001200328022c410020032802281b200a4f0d0241a1dfca0021064180801821050b0240200841ffffff3f71450d00200410350b0240200741ffffff3f71450d00200e10350b410321010b20004200370308200041206a20023602002000411c6a2006360200200041186a20054180801c71200172418018723602004201210c0c0c0b200c422088210d200642003703002001420037030020034180016a41086a22024200370300200342003703800141c7d5ca00ad4280808080b0028410012211290000211a200341d0006a41086a2205201141086a2900003703002003201a37035020111035200220052903003703002003200329035037038001419cdfca00ad4280808080d0008410012211290000211a2005201141086a2900003703002003201a3703502011103520012003290350221a370300200341306a41086a2002290300370300200341306a41106a201a370300200341306a41186a20052903003703002003200329038001370330200341d0016a200341306a412010d50120032d00d00121052006200341e9016a2900003703002001200341e1016a2900003703002002200341d9016a290000370300200320032900d101370380010240024020054101460d00410021050c010b200341a8016a41186a20034180016a41186a290300221a370300200341a8016a41106a20034180016a41106a290300221b370300200341a8016a41086a2002290300221c3703002003200329038001221d3703a801200341d0016a41186a201a370300200341d0016a41106a201b370300200341d0016a41086a201c3703002003201d3703d00120094105742101200421020340024020010d00410021050c020b41012105200341d0016a2002460d01200141606a21012002200341d0016a412010a0082106200241206a210220060d000b0b200da72106200341d0016a41186a22114200370300200341d0016a41106a22124200370300200341d0016a41086a22024200370300200342003703d00141c7d5ca00ad4280808080b0028410012201290000210d2002200141086a2900003703002003200d3703d001200110354189eaca00ad4280808080f0008410012201290000210d200341306a41086a2213200141086a2900003703002003200d3703302001103520102003290330370000201041086a201329030037000020034180016a41086a200229030037030020034180016a41106a201229030037030020034180016a41186a2011290300370300200320032903d00137038001200341a8016a20034180016a10fe010240024020032802a80122010d00410021020c010b20032902ac01220d422088a72102200d42ffffff3f83500d00200110350b200341e5016a20034180046a41106a2201290300370000200341ed016a20034180046a41186a2210290300370000200341083a00d001200341dd016a20034180046a41086a2211290300370000200341fc016a41002002200b20096a6b221220051b200b6a360200200341f8016a2012410020051b20096a2205360200200341063a00d40120032003290380043700d50141b0b4cc004100200341d0016a10d401200341ec016a200b360200200341d0016a41186a2007360200200341d0016a41106a2009360200200341dc016a20083602002003200a3602f0012003200e3602e401200320043602d8012003200c3703d001200341a8016a41186a2010290300370300200341a8016a41106a2001290300370300200341a8016a41086a201129030037030020032003290380043703a801200520064f2002200341d0016a200341a8016a109f070c0a0b1045000b41e1dfca002101411121064180980421050c060b103c000b20012005104a000b20062007104a000b41bbdfca002106410d21054180801021010b0240200b41ffffff3f71450d00200810350b0240201041ffffff3f71450d00200e10350b410321020b20004200370308200041206a20053602002000411c6a2006360200200041186a20014180801c71200272418018723602004201210c0c030b200410ba0220041035200041206a20063602002000411c6a2001360200200041186a2005200272360200200042003703084201210c0c020b41b0b4cc004100200210d401200410350b4200210c200042003703080b2000200c370300200341a0046a24000bb65d07047f017e037f027e017f027e097f23004180036b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e080001020304050607000b20034194026a41013602002003420137028402200341e8d4ca0036028002200341043602dc012003419cd5ca003602d8012003200341d8016a3602900220034180026a41b0b4cc00104c000b200341d0016a200141196a290000370300200341b8016a41106a200141116a290000370300200341c0016a200141096a290000370300200320012900013703b801200241036a2d0000210420022f000121050240024020022d00002206417f6a220141024b0d00024020010e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200641004720052004411074727241ff01710d070b20034180026a41186a420037030020034180026a41106a2204420037030020034180026a41086a22014200370300200342003703800241fb8fc800ad4280808080b002841001220229000021072001200241086a2900003703002003200737038002200210354189eaca00ad4280808080f0008410012202290000210720034198016a41086a2205200241086a29000037030020032007370398012002103520042003290398012207370300200341d8016a41086a2001290300370300200341d8016a41106a2007370300200341d8016a41186a200529030037030020032003290380023703d801200341f8006a200341d8016a10fe010240200328027822060d00410021082003410036023020034201370328410121060c170b2003200329027c220737022c200320063602282007a7210841002101024002402007422088a7220941014b0d0020090e021801180b2009210203402002410176220420016a22052001200620054105746a200341b8016a412010a0084101481b2101200220046b220241014b0d000b0b0240200620014105746a200341b8016a412010a0082202450d0020034180026a41186a200341b8016a41186a29030037030020034180026a41106a200341b8016a41106a29030037030020034180026a41086a200341b8016a41086a290300370300200320032903b801370380022002411f7620016a220420094b0d0820034180026a21020c180b02402008450d00200841ffffff3f71450d00200610350b41831c21010c150b200341c0006a200141196a290000370300200341286a41106a200141116a290000370300200341306a200141096a2900003703002003200129000137032841022101200241036a2d0000210520022f0001210602400240024020022d00002209417f6a220441024b0d00024020040e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200941004720062005411074727241ff01710d010b20034180026a41186a420037030020034180026a41106a2204420037030020034180026a41086a22014200370300200342003703800241fb8fc800ad4280808080b002841001220229000021072001200241086a2900003703002003200737038002200210354189eaca00ad4280808080f0008410012202290000210720034198016a41086a2205200241086a29000037030020032007370398012002103520042003290398012207370300200341d8016a41086a2001290300370300200341d8016a41106a2007370300200341d8016a41186a200529030037030020032003290380023703d80120034180026a200341d8016a10fe012003280280022202410120021b210641002101024002400240200329028402420020021b2207422088a7220941014b0d0020090e020201020b2009210203402002410176220420016a22052001200620054105746a200341286a412010a0084101481b2101200220046b220241014b0d000b0b200620014105746a200341286a412010a0080d00200120094f0d09200620014105746a2202200241206a2001417f7320096a410574109e081a20034180026a41186a220a420037030020034180026a41106a2208420037030020034180026a41086a22054200370300200342003703800241fb8fc800ad4280808080b00284220b10012201290000210c20034198016a41086a2202200141086a2900003703002003200c3703980120011035200520022903003703002003200329039801370380024189eaca00ad4280808080f0008410012201290000210c2002200141086a2900003703002003200c37039801200110352008200329039801220c370300200341b8016a41086a22042005290300370300200341b8016a41106a200c370300200341b8016a41186a200229030037030020032003290380023703b80120034120360284022003200341b8016a3602800220062009417f6a220120034180026a109802200a200341286a41186a2903003703002008200341286a41106a2903003703002005200341286a41086a290300370300200320032903283703800220034180026a41012006200110aa06200341d8016a41186a220d4200370300200341d8016a41106a22084200370300200341d8016a41086a22054200370300200342003703d801200b1001220a290000210b2004200a41086a2900003703002003200b3703b801200a103520052004290300370300200320032903b8013703d801419cdfca00ad4280808080d000841001220a290000210b2004200a41086a2900003703002003200b3703b801200a1035200820032903b801220b3703002002200529030037030020034198016a41106a200b37030020034198016a41186a2004290300370300200320032903d8013703980120034180026a20034198016a412010d50120032d0080022102200d20034199026a290000370300200820034191026a290000370300200520034189026a29000037030020032003290081023703d801024020024101470d00200341f8006a41186a200d290300220b370300200341f8006a41106a2008290300220c370300200341f8006a41086a2005290300220e370300200320032903d801220f370378200d200b3703002008200c3703002005200e3703002003200f3703d8014100210202400240024002402009417f6a220441014b0d0020040e020201020b03402001410176220420026a22052002200620054105746a200341d8016a412010a0084101481b2102200120046b220141014b0d000b0b200620024105746a200341d8016a412010a008450d010b20034198016a41186a420037030020034198016a41106a2205420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012204290000210b200341e8006a41086a2201200441086a2900003703002003200b37036820041035200220012903003703002003200329036837039801419cdfca00ad4280808080d0008410012204290000210b2001200441086a2900003703002003200b3703682004103520052003290368220b370300200341c8006a41086a2002290300370300200341c8006a41106a200b370300200341c8006a41186a20012903003703002003200329039801370348200341c8006aad428080808080048410070c010b20034199026a200341f0016a29030037000020034191026a200341e8016a29030037000020034189026a200341e0016a290300370000200320032903d80137008102200341013a00800220034180026a10ab060b2003418a023b01800241b0b4cc00410020034180026a10d401200742ffffff3f83500d15200610350c150b02402007a72201450d00200141ffffff3f71450d00200610350b410321010b20004200370308200041206a41093602002000411c6a41f2dfca00360200200041186a200141809c0472360200420121070c180b200341086a41186a200141196a290000370300200341086a41106a200141116a290000370300200341086a41086a200141096a29000037030020032001290001370308200341286a41186a200141396a290000370300200341286a41106a200141316a290000370300200341286a41086a200141296a2900003703002003200141216a29000037032841022101200241036a2d0000210520022f000121060240024020022d00002209417f6a220441024b0d00024020040e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200941004720062005411074727241ff0171450d000c110b200341086a200341286a412010a008450d1220034180026a41186a420037030020034180026a41106a2204420037030020034180026a41086a22014200370300200342003703800241fb8fc800ad4280808080b002841001220229000021072001200241086a2900003703002003200737038002200210354189eaca00ad4280808080f0008410012202290000210720034198016a41086a2205200241086a29000037030020032007370398012002103520042003290398012207370300200341d8016a41086a2001290300370300200341d8016a41106a2007370300200341d8016a41186a200529030037030020032003290380023703d80120034180026a200341d8016a10fe014101210d2003280280022202410120021b210641f2dfca0021084109210a4100210102400240200329028402420020021b2207422088a7220941014b0d0020090e021101110b2009210203402002410176220420016a22052001200620054105746a200341086a412010a0084101481b2101200220046b220241014b0d000b0b200620014105746a2210200341086a412010a0080d0f410021020240200941014b0d0020090e02120f120b2009210403402004410176220520026a22082002200620084105746a200341286a412010a0084101481b2102200420056b220441014b0d000c0f0b0b200241036a2d0000210520022f000121062001410c6a2802002109200141086a280200210d200141046a280200210402400240024020022d00002208417f6a220141024b0d00024020010e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200841004720062005411074727241ff01710d010b2004200910ac0620034180026a41186a420037030020034180026a41106a2205420037030020034180026a41086a22024200370300200342003703800241fb8fc800ad4280808080b00284220710012201290000210b2002200141086a2900003703002003200b37038002200110354189eaca00ad4280808080f0008410012201290000210b20034198016a41086a2208200141086a2900003703002003200b37039801200110352005200329039801220b370300200341d8016a41086a22012002290300370300200341d8016a41106a2202200b370300200341d8016a41186a2205200829030037030020032003290380023703d80120034180026a200341d8016a10fe01200420092003280280022206410120061b2210200329028402420020061b220b422088a710ad06200542003703002002420037030020014200370300200342003703d80120071001220a2900002107200341b8016a41086a2206200a41086a290000370300200320073703b801200a103520012006290300370300200320032903b8013703d801419cdfca00ad4280808080d000841001220a29000021072006200a41086a290000370300200320073703b801200a1035200220032903b80122073703002008200129030037030020034198016a41106a200737030020034198016a41186a2006290300370300200320032903d8013703980120034180026a20034198016a412010d50120032d0080022106200520034199026a290000370300200220034191026a290000370300200120034189026a29000037030020032003290081023703d801024020064101470d00200341f8006a41186a20052903002207370300200341f8006a41106a2002290300220c370300200341f8006a41086a2001290300220e370300200320032903d801220f370378200520073703002002200c3703002001200e3703002003200f3703d801410021010240024002400240200941014b0d0020090e020201020b2009210203402002410176220520016a22062001200420064105746a200341d8016a412010a0084101481b2101200220056b220241014b0d000b0b200420014105746a200341d8016a412010a008450d010b20034198016a41186a420037030020034198016a41106a2206420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b00284100122052900002107200341e8006a41086a2201200541086a2900003703002003200737036820051035200220012903003703002003200329036837039801419cdfca00ad4280808080d000841001220529000021072001200541086a2900003703002003200737036820051035200620032903682207370300200341c8006a41086a2002290300370300200341c8006a41106a2007370300200341c8006a41186a20012903003703002003200329039801370348200341c8006aad428080808080048410070c010b20034199026a200341f0016a29030037000020034191026a200341e8016a29030037000020034189026a200341e0016a290300370000200320032903d80137008102200341013a00800220034180026a10ab060b0240200b42ffffff3f83500d00201010350b4200210720034198016a41186a420037030020034198016a41106a2206420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012205290000210b200341e8006a41086a2201200541086a2900003703002003200b370368200510352002200129030037030020032003290368370398014189eaca00ad4280808080f0008410012205290000210b2001200541086a2900003703002003200b3703682005103520062003290368220b370300200341c8006a41086a2002290300370300200341c8006a41106a200b370300200341c8006a41186a2001290300370300200320032903980137034820034120360284022003200341c8006a360280022004200920034180026a1098020240200d41ffffff3f71450d00200410350b2003418a063b01800241b0b4cc00410020034180026a10d4010c160b0240200d41ffffff3f71450d00200410350b20004200370308200041186a4102360200420121070c160b200341286a41186a200141196a290000370300200341286a41106a200141116a290000370300200341286a41086a200141096a2900003703002003200129000137032841022101024020022d00000d0020022d00014101470d002002411a6a2901002107200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002109200241126a2f01002108200241116a2d0000210a200241106a2d0000210d2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f010021182003200241096a2d00003a009f01200320143a009e01200320153b019c01200320163a009b01200320173a009a01200320183b0198012003200a3a00a7012003200d3a00a601200320103b01a401200320113a00a301200320123a00a201200320133b01a001200320013a00af01200320043a00ae01200320053b01ac01200320063a00ab01200320093a00aa01200320083b01a801200320073701b001200341f8006a41186a22012007370300200341f8006a41106a220220032901a801370300200341f8006a41086a220420032901a0013703002003200329019801370378200341b8016a41186a2001290300370300200341b8016a41106a2002290300370300200341b8016a41086a2004290300370300200320032903783703b801200341b8016a200341286a412010a008450d0920034180026a41186a420037030020034180026a41106a2204420037030020034180026a41086a22014200370300200342003703800241fb8fc800ad4280808080b002841001220229000021072001200241086a2900003703002003200737038002200210354189eaca00ad4280808080f0008410012202290000210720034198016a41086a2205200241086a29000037030020032007370398012002103520042003290398012207370300200341d8016a41086a2001290300370300200341d8016a41106a2007370300200341d8016a41186a200529030037030020032003290380023703d80120034180026a200341d8016a10fe01410121092003280280022202410120021b210641f2dfca0021084109210a4100210102400240200329028402420020021b2207422088a7220d41014b0d00200d0e020901090b200d210203402002410176220420016a22052001200620054105746a200341b8016a412010a0084101481b2101200220046b220241014b0d000b0b200620014105746a2210200341b8016a412010a0080d07410021020240200d41014b0d00200d0e020907090b200d210403402004410176220520026a22092002200620094105746a200341286a412010a0084101481b2102200420056b220441014b0d000c070b0b0c090b200341d0016a200141196a290000370300200341b8016a41106a200141116a290000370300200341c0016a200141096a290000370300200320012900013703b80141022101200241036a2d0000210520022f0001210602400240024020022d00002209417f6a220441024b0d00024020040e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200941004720062005411074727241ff01710d010b20034180026a41186a420037030020034180026a41106a2204420037030020034180026a41086a22014200370300200342003703800241fb8fc800ad4280808080b002841001220229000021072001200241086a2900003703002003200737038002200210354189eaca00ad4280808080f0008410012202290000210720034198016a41086a2205200241086a29000037030020032007370398012002103520042003290398012207370300200341d8016a41086a2001290300370300200341d8016a41106a2007370300200341d8016a41186a200529030037030020032003290380023703d80120034180026a200341d8016a10fe012003280280022202410120021b210641002101024002400240200329028402420020021b2207422088a7220241014b0d0020020e020201020b03402002410176220420016a22052001200620054105746a200341b8016a412010a0084101481b2101200220046b220241014b0d000b0b200620014105746a200341b8016a412010a0080d000240200742ffffff3f83500d00200610350b4200210720034198016a41186a420037030020034198016a41106a2205420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012204290000210b200341e8006a41086a2201200441086a2900003703002003200b37036820041035200220012903003703002003200329036837039801419cdfca00ad4280808080d0008410012204290000210b2001200441086a2900003703002003200b3703682004103520052003290368220b370300200341c8006a41086a2002290300370300200341c8006a41106a200b370300200341c8006a41186a20012903003703002003200329039801370348412010332201450d0c200120032903b801370000200141186a200341b8016a41186a2202290300370000200141106a200341b8016a41106a2204290300370000200141086a200341b8016a41086a2205290300370000200341c8006aad42808080808004842001ad428080808080048410022001103520034199026a200229030037000020034191026a200429030037000020034189026a2005290300370000200320032903b80137008102200341013a00800220034180026a10ab060c150b02402007a72201450d00200141ffffff3f71450d00200610350b410321010b20004200370308200041206a41093602002000411c6a41f2dfca00360200200041186a200141809c0472360200420121070c140b200241036a2d0000210420022f000121050240024020022d00002206417f6a220141024b0d00024020010e03000102000b200241086a2802004101742002410c6a2802004d0d00200241046a28020041ff0171450d010b200641004720052004411074727241ff0171450d0020004200370308200041186a4102360200420121070c140b4200210720034198016a41186a420037030020034198016a41106a2205420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012204290000210b200341e8006a41086a2201200441086a2900003703002003200b37036820041035200220012903003703002003200329036837039801419cdfca00ad4280808080d0008410012204290000210b2001200441086a2900003703002003200b3703682004103520052003290368220b370300200341c8006a41086a2002290300370300200341c8006a41106a200b370300200341c8006a41186a20012903003703002003200329039801370348200341c8006aad42808080808004841007200341003a00800220034180026a10ab060c120b41821c21010c0e0b20042009104d000b20012009104e000b200620024105746a200341286a412010a0080d0141ce9cc8002108410d210a410021090b02402007a722010d00410321010c030b0240200141ffffff3f71450d00200610350b410321010c020b200341d8016a41186a2202200341286a41186a290300370300200341d8016a41106a2204200341286a41106a290300370300200341d8016a41086a2205200341286a41086a290300370300200320032903283703d8012001200d4f0d02201020032903d801370000201041186a2002290300370000201041106a2004290300370000201041086a20052903003700002006200d10ac0620034198016a41186a2205420037030020034198016a41106a2204420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b00284220b10012209290000210c200341e8006a41086a2201200941086a2900003703002003200c370368200910352002200129030037030020032003290368370398014189eaca00ad4280808080f0008410012209290000210c2001200941086a2900003703002003200c3703682009103520042003290368220c370300200341c8006a41086a220a2002290300370300200341c8006a41106a2210200c370300200341c8006a41186a22112001290300370300200320032903980137034820034120360284022003200341c8006a360280022006200d20034180026a10980220034180026a41186a200341b8016a41186a29030037030020034180026a41106a200341b8016a41106a29030037030020034180026a41086a200341b8016a41086a290300370300200320032903b801370380024101210820034180026a41012006200d10aa062005420037030020044200370300200242003703002003420037039801200b10012209290000210b2001200941086a2900003703002003200b37036820091035200220012903003703002003200329036837039801419cdfca00ad4280808080d0008410012209290000210b2001200941086a2900003703002003200b3703682009103520042003290368220b370300200a20022903003703002010200b37030020112001290300370300200320032903980137034820034180026a200341c8006a412010d50120032d0080022101200520034180026a41196a290000370300200420034180026a41116a290000370300200220034180026a41096a2900003703002003200329008102370398010240024020014101460d0041002108200341003a00d8010c010b200341d8016a41096a200341a0016a290300370000200341d8016a41116a200341a8016a290300370000200341d8016a41196a200341b0016a290300370000200341013a00d80120032003290398013700d9010b20034199026a200341d0016a29030037000020034191026a200341c8016a29030037000020034189026a200341c0016a290300370000200320032903b80137008102200341013a00800202402008450d00200341d8016a41017220034180026a410172412010a0080d0020034198016a41186a2209420037030020034198016a41106a2208420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012205290000210b200341e8006a41086a2201200541086a2900003703002003200b37036820051035200220012903003703002003200329036837039801419cdfca00ad4280808080d0008410012205290000210b2001200541086a2900003703002003200b3703682005103520042003290368370000200441086a2001290300370000200341c8006a41086a2002290300370300200341c8006a41106a2008290300370300200341c8006a41186a20092903003703002003200329039801370348412010332201450d0420012003290328370000200141186a200341286a41186a2202290300370000200141106a200341286a41106a2204290300370000200141086a200341286a41086a2205290300370000200341c8006aad42808080808004842001ad428080808080048410022001103520034199026a200229030037000020034191026a200429030037000020034189026a20052903003700002003200329032837008102200341013a00800220034180026a10ab060b200742ffffff3f83500d00200610350b2003418a083b01800241b0b4cc00410020034180026a10d401420021070c0b0b20004200370308200041206a200a3602002000411c6a2008360200200041186a200941ff017141107420017241801c72360200420121070c0b0b2001200d419898c8001042000b1045000b200620024105746a200341286a412010a0080d0241ce9cc8002108410d210a4100210d0b02402007a72201450d00200141ffffff3f71450d00200610350b410321010b20004200370308200041206a200a3602002000411c6a2008360200200041186a200d41ff017141107420017241801c72360200420121070c060b20034180026a41186a2205200341286a41186a29030037030020034180026a41106a2208200341286a41106a29030037030020034180026a41086a220a200341286a41086a29030037030020032003290328370380020240200120094f0d002010200329038002370000201041186a2005290300370000201041106a2008290300370000201041086a200a2903003700002006200910ac06200341d8016a41186a4200370300200341d8016a41106a220d4200370300200341d8016a41086a22044200370300200342003703d80141fb8fc800ad4280808080b00284220b10012201290000210c200341b8016a41086a2202200141086a2900003703002003200c3703b8012001103520042002290300370300200320032903b8013703d8014189eaca00ad4280808080f0008410012201290000210c2002200141086a2900003703002003200c3703b80120011035200d20032903b801220c37030020034198016a41086a2201200429030037030020034198016a41106a2204200c37030020034198016a41186a220d2002290300370300200320032903d801370398012003412036028402200320034198016a360280022006200920034180026a1098022005200341086a41186a2903003703002008200341086a41106a290300370300200a200341086a41086a290300370300200320032903083703800220034180026a41012006200910aa06200d420037030020044200370300200142003703002003420037039801200b10012205290000210b200341e8006a41086a2202200541086a2900003703002003200b37036820051035200120022903003703002003200329036837039801419cdfca00ad4280808080d0008410012205290000210b2002200541086a2900003703002003200b3703682005103520042003290368220b370300200341c8006a41086a2001290300370300200341c8006a41106a200b370300200341c8006a41186a2002290300370300200320032903980137034820034180026a200341c8006a412010d50120032d0080022102200d20034199026a290000370300200420034191026a290000370300200120034189026a290000370300200320032900810237039801024020024101470d00200341b8016a41186a20034198016a41186a290300220b370300200341b8016a41106a20034198016a41106a290300220c370300200341b8016a41086a20034198016a41086a290300220e3703002003200329039801220f3703b801200341d8016a41186a200b370300200341d8016a41106a200c370300200341d8016a41086a200e3703002003200f3703d80141002101024020094101460d004100210103402009410176220220016a22042001200620044105746a200341d8016a412010a0084101481b2101200920026b220941014b0d000b0b0240200620014105746a200341d8016a412010a008450d00200341f8006a41186a4200370300200341f8006a41106a22054200370300200341f8006a41086a220242003703002003420037037841fb8fc800ad4280808080b0028410012204290000210b20034198016a41086a2201200441086a2900003703002003200b3703980120041035200220012903003703002003200329039801370378419cdfca00ad4280808080d0008410012204290000210b2001200441086a2900003703002003200b37039801200410352005200329039801220b37030020034180026a41086a200229030037030020034180026a41106a200b37030020034180026a41186a2001290300370300200320032903783703800220034180026aad428080808080048410070c010b20034199026a200341f0016a29030037000020034191026a200341e8016a29030037000020034189026a200341e0016a290300370000200320032903d80137008102200341013a00800220034180026a10ab060b2003418a043b01800241b0b4cc00410020034180026a10d401200742ffffff3f83500d0120061035420021070c050b20012009418898c8001042000b420021070c030b20004200370308200041206a410d3602002000411c6a41ce9cc800360200200041186a2001360200420121070c030b20034180026a41186a200341b8016a41186a29030037030020034180026a41106a200341b8016a41106a29030037030020034180026a41086a200341b8016a41086a290300370300200320032903b801370380024100210920034180026a2102410021040b024020092008470d00200341286a20094101108a01200328022c2108200328022821060b200620044105746a220141206a2001200920046b410574109e081a20012002290000370000200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a2900003700002003200941016a3602304200210720034198016a41186a420037030020034198016a41106a2205420037030020034198016a41086a22024200370300200342003703980141fb8fc800ad4280808080b0028410012204290000210b200341e8006a41086a2201200441086a2900003703002003200b370368200410352002200129030037030020032003290368370398014189eaca00ad4280808080f0008410012204290000210b2001200441086a2900003703002003200b3703682004103520052003290368220b370300200341c8006a41086a2002290300370300200341c8006a41106a200b370300200341c8006a41186a2001290300370300200320032903980137034820034120360284022003200341c8006a360280022003280228200328023020034180026a10980220034180026a41186a200341b8016a41186a29030037030020034180026a41106a200341b8016a41106a29030037030020034180026a41086a200341b8016a41086a290300370300200320032903b8013703800241b0b4cc00410020032802282201200328023010aa062003410a3b01800241b0b4cc00410020034180026a10d401200841ffffff3f71450d00200110350b200020073703080b2000200737030020034180036a24000b8b970107017f027e117f017e027f087e1d7f230041d0086b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0900010203040506070a000b200341d4076a4101360200200342013702c407200341e8d4ca003602c007200341043602b4062003419cd5ca003602b0062003200341b0066a3602d007200341c0076a41b0b4cc00104c000b200141306a2903002104200141286a2903002105200341b0066a41206a200141246a280200360200200341b0066a41186a2001411c6a290200370300200341b0066a41106a200141146a290200370300200341b0066a41086a2001410c6a2902003703002003200141046a2902003703b006418222210102400240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a29010037038804200320013a008704200320063a008604200320073b018404200320083a008304200320093a0082042003200a3b0180042003200b3a00ff032003200c3a00fe032003200d3b01fc032003200e3a00fb032003200f3a00fa03200320103b01f803200320113a00f703200320123a00f603200320133b01f403200320143a00f303200320153a00f203200320163b01f003200341c0076a41206a200341b0066a41206a280200360200200341c0076a41186a200341b0066a41186a290300370300200341c0076a41106a200341b0066a41106a290300370300200341c0076a41086a200341b0066a41086a290300370300200320032903b0063703c007200341f8046a200341c0076a108b02418122210120032d00f8044101460d00200341f8046a41086a2d0000210720034181056a2f0000210820034183056a2d0000210920034184056a2d0000210a20034185056a2f0000210b20034187056a2d0000210c200341f8046a41106a2d0000210d20034189056a2f0000210e2003418b056a2d0000210f2003418c056a2d000021102003418d056a2f000021112003418f056a2d00002112200341f8046a41186a2d0000211320034191056a290000211720032f00f904211420032d00fb04211520032d00fc04211620032f00fd04211820032d00ff042119200341286a2005200442c0843d4200109808200341186a2003290328221a200341286a41086a290300221b42c0fb42427f108408200341086a201a201b42d0860342001084082003200341086a41086a2903002003290308221b200520032903187c221a421480221ca7417f201a42d086037e221a428080808080c8d007541b201a201c42c0fb427e7c42a0c21e566aad7c221a201b54ad7c221b4200201a428080e983b1de1656201b420052201b501b22011b221b3703f0022003201a428080e983b1de1620011b221a3703e8022003200341f0036a360280062003200341f0036a3602e0012003200341e0016a3602c807200320034180066a3602c4072003200341e8026a3602c007200341f8046a200341f0036a200341c0076a108c0320032802f8044101470d01418322210120032d00fc044104460d020b200041206a411c3602002000411c6a41e3adc800360200200041186a200136020020004200370308420121050c160b200341f8046a41086a2903004201520d00200341f8046a41106a290300211c20032802e0012101200341f8076a200341f8046a41186a290300370300200341f0076a201c370300200341c0076a41086a41003a0000200341c9076a2001290000370000200341d1076a200141086a290000370000200341d9076a200141106a290000370000200341e1076a200141186a290000370000200341033a00c00741b0b4cc004100200341c0076a10d4010b4186f0cb00ad4280808080800184221c10012201290000211d2001290008211e20011035418ef0cb00ad4280808080d00184221f1001220129000021202001290008212120011035200320213703900520032020370388052003201e370380052003201d3703f8042003200341f8046a412010c0012003280204210220032802002106201c10012201290000211c2001290008211d20011035201f10012201290000211e2001290008211f200110352003201f370390052003201e370388052003201d370380052003201c3703f80420032002410020061b220241016a3602c007200341f8046aad4280808080800484200341c0076aad4280808080c000841002200341c0076a41186a2222200341f0036a41186a290300370300200341c0076a41106a2223200341f0036a41106a290300370300200341c0076a41086a2224200341f0036a41086a290300370300200320032903f0033703c007200341f8046a200210b506200335028005211c20032802f8042106412010332201450d15200120032903c007370000200141186a2022290300370000200141106a2023290300370000200141086a20242903003700002001412041c00010372201450d1520012005370020200141286a2004370000200141c00041800110372201450d152001201a37005020012017370048200120133a0047200120123a0046200120113b0044200120103a00432001200f3a00422001200e3b00402001200d3a003f2001200c3a003e2001200b3b003c2001200a3a003b200120093a003a200120083b0038200120073a0037200120193a0036200120183b0034200120163a0033200120153a0032200120143b0030200141d8006a201b370000201c4220862006ad842001ad4280808080800c84100220011035024020032802fc04450d00200610350b200341c8076a41003a00002003410c3a00c007200341c0076a410c6a200236020041b0b4cc004100200341c0076a10d4010c120b200241036a2d0000210620022f00012107200141046a28020021090240024002400240024020022d00002208417f6a220141024b0d00024020010e03000102000b200241086a2802004102490d00200241046a28020041ff0171450d010b4182a2042101200720064110747220084100477241ff01710d010b4186f0cb00ad4280808080800184100122012d000f210b20012d000e210c20012f000c210d20012d000b210e20012d000a210f20012f0008211020012d0007211120012d0006211220012f0004211320012d0003211420012d0002211520012f00002116200110354180eaca00ad428080808090018410012201290008210520012d0007211820012d0006211920012f0004212220012d0003212320012d0002212420012f0000212520011035200320093602c0012003200341c0016aad4280808080c00084100322012900003703800620011035200341cc076a200341c4016a360200200320034188066a3602c4072003200341c0016a3602c807200320034180066a3602c007200341f0036a200341c0076a107b20032802f803220841206a2202417f4c0d0c20032802f003210a0240024020020d0041002106410121010c010b200210332201450d0c200221060b024002402006410f4d0d00200621070c010b200641017422074110200741104b1b22074100480d0a024020060d002007103322010d010c190b20062007460d0020012006200710372201450d180b2001200b3a000f2001200c3a000e2001200d3b000c2001200e3a000b2001200f3a000a200120103b0008200120113a0007200120123a0006200120133b0004200120143a0003200120153a0002200120163b00000240024020074170714110460d00200721060c010b200741017422064120200641204b1b22064100480d0a20072006460d0020012007200610372201450d180b20012005370018200120183a0017200120193a0016200120223b0014200120233a0013200120243a0012200120253b001002400240200641606a2008490d00200621070c010b2008415f4b0d0a200641017422072002200720024b1b22074100480d0a20062007460d0020012006200710372201450d180b200141206a200a2008109d081a024020032802f403450d00200a10350b200341c0076a2001200210df02024020032903c00742015222060d002002ad4220862001ad8410070b200341f0036a200341c8076a41e000109d081a200341c0076a200341f0036a41e000109d081a024020060d00200341e8026a200341c0076a41e000109d081a02402007450d00200110350b200341b0066a41066a200341e8026a41e000109d081a200341f8046a200341b0066a41e600109d081a200341e0016a200341f8046a41066a41e000109d081a20032903f00121042003200341f8016a290300221a37038005200320043703f804024002402004201a844200520d00200342003703f803200342003703f0030c010b2003200341e0016a41206a22013602f003200341b0066a2001200341f8046a200341f0036a10a802200341b0066a41206a290300210520032903c806211b024020032903b0064201520d0020032903b806211c200341f8076a200341b0066a41106a290300370300200341f0076a201c370300200341c0076a41086a41003a0000200341c9076a2001290000370000200341d1076a200141086a290000370000200341d9076a200141106a290000370000200341e1076a200141186a290000370000200341033a00c00741b0b4cc004100200341c0076a10d4010b2003201b3703f003200320053703f803201b2005844200520d030b2003200341f0036a36028006200341f0036a21080c030b02402007450d00200110350b4183a20421010b20004200370308200041206a41143602002000411c6a41cfadc800360200200041186a2001360200420121050c150b200320053703f8032003201b3703f0032003200341f0036a36028006200341f0036a21080b42002105200341f8046a41186a220e4200370300200341f8046a41106a22024200370300200341f8046a41086a22014200370300200342003703f80441b6fdc600ad4280808080800184221c10012207290000211b200341b0066a41086a2206200741086a2900003703002003201b3703b0062007103520012006290300370300200320032903b0063703f80441e489c200ad4280808080d0018422171001220a290000211b200341e8026a41086a2207200a41086a2900003703002003201b3703e802200a1035200220032903e802221b370300200341c0076a41086a220a2001290300370300200341c0076a41106a220b201b370300200341c0076a41186a220c2007290300370300200320032903f8043703c007200341386a200341c0076a412010d701200341386a41106a290300211d2003290340211e2003280238210d200841086a290300211f2008290300211b200e42003703002002420037030020014200370300200342003703f804201c10012208290000211c2006200841086a2900003703002003201c3703b0062008103520012006290300370300200320032903b0063703f804201710012206290000211c2007200641086a2900003703002003201c3703e80220061035200220032903e802221c370300200a2001290300370300200b201c370300200c2007290300370300200320032903f8043703c00720034200201d4200200d1b221c201f7d201e4200200d1b2217201b54ad7d221d2017201b7d221b201756201d201c56201d201c511b22011b3703b80620034200201b20011b3703b006200341c0076aad4280808080800484200341b0066aad42808080808002841002200c201a370300200b2004370300200a41033a00002003410c3a00c007200341c0076a410c6a200936020041b0b4cc004100200341c0076a10d4010c120b200241036a2d0000210720022f00012108200141046a28020021010240024020022d00002209417f6a220641024b0d00024020060e03000102000b200241086a2802004104490d00200241046a28020041ff0171450d010b4182a2042102200820074110747220094100477241ff01710d050b200341c0076a200110b506200341d0006a20032802c007220220032802c80741b0b4cc0041004100108a0220032802502106024020032802c407450d00200210350b4183a204210220064101470d044186f0cb00ad42808080808001841001220229000021052002290008210420021035419bf0cb00ad428080808090018410012202290000211a2002290008211b200210352003201b370390052003201a370388052003200437038005200320053703f804200341c0076a200341f8046a10c50202400240024020032802c00722020d0041002107200341003602b806200342043703b0060c010b20032902c4072105200320023602b006200320053702b4062005422088a722062005a72207470d010b200341b0066a2007410110860120032802b406210720032802b006210220032802b80621060b200220064102746a20013602002003200641016a22063602b8064186f0cb00ad42808080808001841001220129000021052001290008210420011035419bf0cb00ad428080808090018410012201290000211a2001290008211b200110352003201b370390052003201a370388052003200437038005200320053703f804024020020d00200341f8046aad428080808080048410070c110b200341203602c4072003200341f8046a3602c00720022006200341c0076a109503200741ffffffff0371450d10200210350c100b2001412c6a280200210c200141286a2802002106200141246a280200210b200341e0016a41186a200141196a290000370300200341e0016a41106a200141116a290000370300200341e0016a41086a200141096a290000370300200320012900013703e0014102210120022d00000d0d20022d00014101470d0d200241196a2d00002101200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210d200241116a2d0000210e200241106a2d0000210f2002410e6a2f010021102002410d6a2d000021112002410c6a2d000021122002410a6a2f01002113200241096a2d00002114200241086a2d00002115200241066a2f01002116200241056a2d00002118200241046a2d00002119200241026a2f0100212220032002411a6a29010037038003200320013a00ff02200320073a00fe02200320083b01fc02200320093a00fb022003200a3a00fa022003200d3b01f8022003200e3a00f7022003200f3a00f602200320103b01f402200320113a00f302200320123a00f202200320133b01f002200320143a00ef02200320153a00ee02200320163b01ec02200320183a00eb02200320193a00ea02200320223b01e8020240200c41818001490d0041c3adc800210a410c21094103210141112108410221070c0f0b200cad221b422086200bad84100922012900002105200141086a2900002104200141106a290000211a200341f0036a41186a200141186a290000370300200341f0036a41106a201a370300200341f0036a41086a2004370300200320053703f00320011035200341c0076a200341f0036a10d206200341f0006a20032802c007220220032802c80741b0b4cc0041004100108a0220032802702101024020032802c407450d00200210350b20014101460d0c2003200341e0016a3602c4072003200341f0036a3602c007200341f8046a200341c0076a10a706200341c0076a200341f8046a10d306200341e8006a20032802c007220220032802c80741b0b4cc0041004100108a0220032802682101024020032802c407450d00200210350b20014101460d0c200341d8006a201b42004280a094a58d1d4200108408200320032903582204428080e983b1de167c2205370380062003200341d8006a41086a2903002005200454ad7c2204370388062003200341e8026a3602a0062003200341e8026a3602c0012003200341c0016a3602c8072003200341a0066a3602c407200320034180066a3602c007200341b0066a200341e8026a200341c0076a108c030240024020032802b0064101470d00200341bc066a2802002109200341b0066a41086a280200210a20032d00b706210220032d00b606210720032d00b506210820032d00b40621010c010b410421010240200341b0066a41086a2903004201520d00200341b0066a41106a290300211a20032802c0012102200341f8076a200341b0066a41186a290300370300200341f0076a201a370300200341c0076a41086a41003a0000200341c9076a2002290000370000200341d1076a200241086a290000370000200341d9076a200241106a290000370000200341e1076a200241186a290000370000200341033a00c00741b0b4cc004100200341c0076a10d4010b0b200141ff01714104470d0e200341c0076a200341f0036a10d20620032802c0072101200320032802c8073602b406200320013602b006200b200c200341b0066a109403024020032802c407450d00200110350b200341f0076a2004370300200341e8076a200537030020034188086a4100360200200341c0076a41106a200341e8026a41086a290300370300200341c0076a41186a200341e8026a41106a290300370300200341e0076a200341e8026a41186a29030037030020034194086a200341f0036a41086a2903003702002003419c086a200341f0036a41106a290300370200200341a4086a200341f0036a41186a290300370200200342013703c007200320032903e8023703c8072003420837038008200341003602f807200320032903f00337028c08200341c4086a200341e0016a41186a290300370200200341bc086a200341e0016a41106a290300370200200341b4086a200341e0016a41086a290300370200200320032903e0013702ac08200341b0066a200341f8046a10d30620032802b0062101200320032802b806360284062003200136028006200341c0076a20034180066a10cd06024020032802b406450d00200110350b200341c0076a41086a41073a0000200341c9076a20032903f804370000200341d1076a200341f8046a41086a290300370000200341d9076a200341f8046a41106a290300370000200341e1076a200341f8046a41186a2903003700002003410c3a00c00741b0b4cc004100200341c0076a10d4012006450d0f200b10350c0f0b200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c00141022101024002400240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a29010037039806200320013a009706200320063a009606200320073b019406200320083a009306200320093a0092062003200a3b0190062003200b3a008f062003200c3a008e062003200d3b018c062003200e3a008b062003200f3a008a06200320103b018806200320113a008706200320123a008606200320133b018406200320143a008306200320153a008206200320163b018006200341a0066a200341c0016a10d306200341c0076a20032802a006220120032802a80610b20220032903c0072105200341f8046a200341c8076a418801109d081a024020054202510d00200341f0036a200341f8046a418801109d081a024020032802a406450d00200110350b200341e8026a200341f0036a418801109d081a200341e0016a200341e8026a418801109d081a200320053703b006200341b0066a41086a200341e0016a418801109d081a200341f0036a41186a2201200341b0066a41206a290300370300200341f0036a41106a2202200341b0066a41186a290300370300200341f0036a41086a2206200341b0066a41106a290300370300200320032903b8063703f00320054201520d02200341e0066a2903002104200341d8066a290300211a200341c0076a410e6a2006290300370100200341c0076a41166a2002290300370100200341c0076a411e6a20012903002205370100200341f8046a411e6a22072005370100200320032903f0033701c607200341f8046a41086a200341c0076a41086a290100370300200341f8046a41106a200341c0076a41106a290100370300200341f8046a41186a200341c0076a41186a290100370300200320032901c0073703f804200120072901003703002002200341f8046a41166a2901003703002006200341f8046a410e6a290100370300200320032901fe043703f003200341f0036a20034180066a412010a0080d02200341c0076a200341fc066a10d20620033502c80742208620032802c0072201ad841007024020032802c407450d00200110350b200341c0076a200341c0016a10d30620033502c80742208620032802c0072201ad841007024020032802c407450d00200110350b2003201a3703e802200320043703f0020240201a200484500d00200320034180066a3602e001200341f8046a20034180066a200341e8026a200341e0016a10f00220032903f8044201520d002003290380052105200341f8076a200341f8046a41106a290300370300200341f0076a2005370300200341c0076a41086a41003a0000200341c9076a200329038006370000200341d1076a20034180066a41086a290300370000200341d9076a20034180066a41106a290300370000200341e1076a20034198066a290300370000200341033a00c00741b0b4cc004100200341c0076a10d4010b200341c0076a41086a410a3a0000200341c9076a20032903c001370000200341d1076a200341c0016a41086a290300370000200341d9076a200341d0016a290300370000200341e1076a200341d8016a2903003700002003410c3a00c00741b0b4cc004100200341c0076a10d401200341f4066a2802002201450d13200141306c450d1320032802f00610350c130b024020032802a406450d00200110350b41adadc8002102410a21064180801021070c020b410021070c020b41a4adc800210241092106418080142107200341f4066a2802002201450d00200141306c450d0020032802f00610350b410321010b20004200370308200041206a20063602002000411c6a2002360200200041186a20074180801c7120017241802272360200420121050c100b200141386a2903002105200141306a29030021042001412c6a2802002108200141286a2802002106200141246a280200210720034180036a200141196a290000370300200341f8026a200141116a290000370300200341f0026a200141096a290000370300200320012900013703e80220032002411a6a290100370390052003200241026a2901003703f80420032002410a6a290100370380052003200241126a290100370388050240024020022d00014101470d0020022d000041ff01710d00200341f0036a41186a200341f8046a41186a2202290300370300200341f0036a41106a200341f8046a41106a2209290300370300200341f0036a41086a200341f8046a41086a220a290300370300200320032903f8043703f0034182a20c2101200341f0036a10e902450d0b2008ad4220862007ad8410092201290000211a200141086a290000211b200141106a290000211c2002200141186a2900003703002009201c370300200a201b3703002003201a3703f80420011035200341c0076a200341f8046a10d206200341f8006a20032802c007220220032802c80741b0b4cc0041004100108a0220032802782101024020032802c407450d00200210350b20014101460d012003200341e8026a3602c4072003200341f8046a3602c007200341b0066a200341c0076a10a706200341c0076a200341f8046a10d20620032802c0072101200320032802c8073602e401200320013602e00120072008200341e0016a109403024020032802c407450d00200110350b20032903b006211a20032903b806211b20032903c006211c200341e1076a20032903c806370000200341d9076a201c370000200341d1076a201b370000200341c9076a201a370000200341c0076a41086a41073a00002003410c3a00c00741b0b4cc004100200341c0076a10d401413010332201450d1220012004370320200120032903f003370000200141286a2005370300200141186a200341f0036a41186a290300370000200141106a200341f0036a41106a290300370000200141086a200341f0036a41086a29030037000020034184086a42818080801037020020034194086a200341f8046a41086a2903003702002003419c086a200341f8046a41106a290300370200200341a4086a200341f8046a41186a2903003702002003200136028008200341003602f807200342003703c007200320032903f80437028c08200341b4086a200341e8026a41086a290300370200200341bc086a200341e8026a41106a290300370200200341c4086a200341e8026a41186a290300370200200320032903e8023702ac08200341e0016a200341b0066a10d30620032802e0012102200320032802e801360284062003200236028006200341c0076a20034180066a10cd06024020032802e401450d00200210350b200110352006450d0f200710350c0f0b4182a20c21010c0a0b4183a20c21010c090b200141306a2903002105200141286a2903002104200341c0016a41186a200141196a290000370300200341c0016a41106a200141116a290000370300200341c0016a41086a200141096a290000370300200320012900013703c0014182a21021010240024002400240024002400240024020022d00000d0020022d00014101470d00200241196a2d00002106200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211820032002411a6a29010037039806200320063a009706200320073a009606200320083b019406200320093a0093062003200a3a0092062003200b3b0190062003200c3a008f062003200d3a008e062003200e3b018c062003200f3a008b06200320103a008a06200320113b018806200320123a008706200320133a008606200320143b018406200320153a008306200320163a008206200320183b01800620034180066a10e902450d00200341f8046a41186a200341c0016a41186a290300370300200341f8046a41106a200341c0016a41106a290300370300200341f8046a41086a200341c0016a41086a290300370300200320032903c0013703f804200341a0066a200341f8046a10d406200341c0076a20032802a006220120032802a80610b20220032903c007211a200341f8046a200341c0076a41086a418801109d081a0240201a4202510d00200341f0036a200341f8046a418801109d081a024020032802a406450d00200110350b200341e8026a200341f0036a418801109d081a200341e0016a200341e8026a418801109d081a2003201a3703b006200341b0066a41086a200341e0016a418801109d081a200341f0036a41186a20034180066a41186a290300370300200341f0036a41106a20034180066a41106a290300370300200341f0036a41086a20034180066a41086a29030037030020032003290380063703f00320032802f006210841002101200341f8066a280200220d41014b0d020240200d0e020004000b200341c0076a41186a200341f0036a41186a290300370300200341c0076a41106a200341f0036a41106a290300370300200341c0076a41086a200341f0036a41086a290300370300200320032903f0033703c00741002106200341c0076a21020c040b024020032802a406450d00200110350b4183a21021010b200041206a410a3602002000411c6a41adadc800360200200041186a200136020020004200370308420121050c150b200d210203402002410176220620016a220720012008200741306c6a200341f0036a412010a0084101481b2101200220066b220241014b0d000b0b2008200141306c6a2202200341f0036a412010a0082206450d01200341c0076a41186a200341f0036a41186a290300370300200341c0076a41106a200341f0036a41106a290300370300200341c0076a41086a200341f0036a41086a290300370300200320032903f0033703c007200341c0076a2102200d2006411f7620016a2206490d040b0240200d200341f4066a280200470d00200341f0066a200d410110880120032802f00621080b2008200641306c6a220141306a2001200d20066b41306c109e081a200141286a200537030020012004370320200141186a200241186a290300370300200141106a200241106a290300370300200141086a200241086a290300370300200120022903003703002003200d41016a220d3602f8060c010b200d20014d0d0120032901f203211a20032901fa03211b200328018204210620032f0186042107200329038804211c200220032f01f0033b01002008200141306c6a220120043703202001201c370318200120073b0116200120063601122001201b37010a2001201a370102200141286a20053703000b200341c0076a10e80220032802c00721250240200d450d00202520032802c80722014105746a210920032802f006210e2025410020011b2102202541206a202520011b21014100210c4100210a0340200a220b41016a210a200e200b41306c6a2108024002400340024020020d00410021020c020b20022008412010a008220641004a0d0141002001200120094622071b21022001200141206a20071b2207210120064100480d000b024002400240200c0d004100210c0c010b200b200c6b2201200d4f0d01200341f8046a41286a2206200e200141306c6a220141286a220b290300370300200341f8046a41206a220f200141206a2210290300370300200341f8046a41186a2211200141186a2212290300370300200341f8046a41106a2213200141106a2214290300370300200341f8046a41086a2215200141086a2216290300370300200320012903003703f804200841086a22182903002105200841106a22192903002104200841186a2222290300211a200841206a2223290300211b2008290300211c200b200841286a22242903003703002010201b3703002012201a37030020142004370300201620053703002001201c370300202420062903003703002023200f290300370300202220112903003703002019201329030037030020182015290300370300200820032903f8043703000b200721010c020b2001200d41f485cc001042000b200c41016a210c0b200a200d470d000b200c417f6a200d4f0d002003200d200c6b3602f8060b024020032802c40741ffffff3f71450d00202510350b200341f8046a41186a4200370300200341f8046a41106a22064200370300200341f8046a41086a22014200370300200342003703f80441a0e4cb00ad42808080808002841001220229000021052001200241086a290000370300200320053703f804200210354189eaca00ad4280808080f00084100122022900002105200341e8026a41086a2207200241086a290000370300200320053703e80220021035200620032903e8022205370300200341c0076a41086a2001290300370300200341c0076a41106a2005370300200341c0076a41186a2007290300370300200320032903f8043703c007200341f8046a200341c0076a10a20220032802f804210120032902fc042105200341003602c807200342013703c007200341c0076a41002005420020011b2205422088a7220241306c220741306d108a012005a721082001410820011b210920032802c807210602402002450d0020032802c00720064105746a2101200921020340200241086a2900002105200241106a29000021042002290000211a200141186a200241186a290000370000200141106a2004370000200141086a20053700002001201a370000200641016a2106200141206a2101200241306a2102200741506a22070d000b0b200320063602c80702402008450d00200841306c450d00200910350b024020032802c40741ffffff3f71450d0020032802c00710350b024020032802f806200641016a410176490d0020032802e8064101460d00200341c0076a41186a4200370300200341c0076a41106a22064200370300200341c0076a41086a22014200370300200342003703c00741d1c4c700ad4280808080e000841001220229000021052001200241086a290000370300200320053703c0072002103541e7c4c700ad4280808080e00084100122022900002105200341e8026a41086a2207200241086a290000370300200320053703e80220021035200620032903e8022205370300200341f8046a41086a22022001290300370300200341f8046a41106a22062005370300200341f8046a41186a22082007290300370300200320032903c0073703f80420034180016a200341f8046a412010c001200341ec066a2003280284014180e1016a4180e1012003280280011b360200200341013602e8062008200341c0016a41186a22072903003703002006200341c0016a41106a22082903003703002002200341c0016a41086a2206290300370300200320032903c0013703f804200141083a00002003410c3a00c007200341c9076a20032903c001370000200341d1076a2006290300370000200341d9076a2008290300370000200341e1076a200729030037000041b0b4cc004100200341c0076a10d4010b200341c0076a200341b0066a419001109d081a200341f8046a200341c0016a10d30620032802f804210120032003280280053602f403200320013602f003200341c0076a200341f0036a10cd06024020032802fc04450d00200110350b20034184086a2802002201450d0e200141306c450d0e20032802800810350c0e0b2001200d41bc82ca001042000b2006200d104d000b20004200370308200041206a41143602002000411c6a41cfadc800360200200041186a2002360200420121050c0d0b103e000b4104210741adadc8002108410a2109410221060240024020022d00000d0020022d00014101470d00200141186a2d00002126200141176a2d00002127200141156a2f00002128200141146a2d00002129200141136a2d0000212a200141116a2f0000212b200141106a2d0000212c2001410f6a2d0000212d2001410d6a2f0000212e2001410c6a2d0000212f2001410b6a2d00002130200141096a2f00002131200141086a2d00002132200141076a2d00002133200141056a2f00002134200141046a2d00002135200141036a2d0000213620012f000121372003200141196a290000221737039005200320263a008f05200320273a008e05200320283b018c05200320293a008b052003202a3a008a052003202b3b0188052003202c3a0087052003202d3a0086052003202e3b0184052003202f3a008305200320303a008205200320313b018005200320323a00ff04200320333a00fe04200320343b01fc04200320353a00fb04200320363a00fa04200320373b01f80420034180066a200341f8046a10d406200341c0076a200328028006220120032802880610b20220032903c0072105200341f8046a200341c8076a418801109d081a024002400240024020054202510d00200341f0036a200341f8046a418801109d081a0240200328028406450d00200110350b200341e8026a200341f0036a418801109d081a200341e0016a200341e8026a418801109d081a200320053703b006200341b0066a41086a200341e0016a418801109d081a20032802e8064101460d01419badc8002108410621070c020b200328028406450d02200110350c020b200341c0076a41186a4200370300200341c0076a41106a22064200370300200341c0076a41086a22014200370300200342003703c00741d1c4c700ad4280808080e000841001220229000021052001200241086a290000370300200320053703c0072002103541e7c4c700ad4280808080e00084100122022900002105200341e8026a41086a2207200241086a290000370300200320053703e80220021035200620032903e8022205370300200341f8046a41086a2001290300370300200341f8046a41106a2005370300200341f8046a41186a2007290300370300200320032903c0073703f804200341b8016a200341f8046a412010c00120032802bc01410020032802b8011b200341ec066a2802004f0d034192adc8002108410721070b0240200341f4066a2802002201450d00200141306c450d0020032802f00610350b410921090b410321060b20004200370308200041206a20093602002000411c6a2008360200200041186a200741107420067241802272360200420121050c0c0b200341c0076a200341fc066a10d20620033502c80742208620032802c0072201ad841007024020032802c407450d00200110350b200320173703d807200320263a00d707200320273a00d607200320283b01d407200320293a00d3072003202a3a00d2072003202b3b01d0072003202c3a00cf072003202d3a00ce072003202e3b01cc072003202f3a00cb07200320303a00ca07200320313b01c807200320323a00c707200320333a00c607200320343b01c407200320353a00c307200320363a00c207200320373b01c007200341f8046a200341c0076a10d40620033502800542208620032802f8042201ad841007024020032802fc04450d00200110350b200341c0076a200341b0066a419001109d081a20034188086a280200211620034184086a28020021382003280280082112200341f0036a10e80220032802f00321250240024020160d00410021160c010b202520032802f80322014105746a21092025410020011b2102202541206a202520011b21014100210c4100210a0340200a220b41016a210a2012200b41306c6a2108024002400340024020020d00410021020c020b20022008412010a008220641004a0d0141002001200120094622071b21022001200141206a20071b2207210120064100480d000b024002400240200c0d004100210c0c010b200b200c6b220120164f0d01200341f8046a41286a22062012200141306c6a220141286a220b290300370300200341f8046a41206a220d200141206a220e290300370300200341f8046a41186a220f200141186a2210290300370300200341f8046a41106a2211200141106a2213290300370300200341f8046a41086a2214200141086a2215290300370300200320012903003703f804200841086a22182903002105200841106a22192903002104200841186a2222290300211a200841206a2223290300211b2008290300211c200b200841286a2224290300370300200e201b3703002010201a37030020132004370300201520053703002001201c370300202420062903003703002023200d2903003703002022200f2903003703002019201129030037030020182014290300370300200820032903f8043703000b200721010c020b2001201641f485cc001042000b200c41016a210c0b200a2016470d000b200c450d0020162016200c6b220120162001491b21160b024020032802f40341ffffff3f71450d00202510350b20164115490d032016410176ad42307e2205422088a70d012005a72239417f4c0d0120391033223a450d0041002102200341003602f803200342043703f003201241506a213b201241907f6a213c410421064100213d20162111034020112109410021114101210a02402009417f6a223e450d000240024002400240024002402012203e41306c6a220141206a290300200941306c220820126a41406a2207290300220454200141286a290300221a200741086a290300220554201a2005511b0d002009417e6a210c203c20086a2101410021114100210703400240200c2007470d002009210a0c080b20042001290300221b5a21082005200141086a290300221a51210a2005201a5a210b200141506a2101200741016a2107201b2104201a21052008200b200a1b0d000b200741016a210a2007417f7320096a21080c010b203c200941066c410374220c6a2101203e210802400340024020084101470d00410021080c020b20042001290300221b5421072005200141086a290300221a51210a2005201a54210b200141506a21012008417f6a2108201b2104201a21052007200b200a1b0d000b0b20092008490d02200920164b0d01200920086b220a410176220b450d00203b200c6a21012012200841306c6a21070340200341f8046a41286a220c200741286a220d290300370300200341f8046a41206a220e200741206a220f290300370300200341f8046a41186a2210200741186a2211290300370300200341f8046a41106a2213200741106a2214290300370300200341f8046a41086a2215200741086a2218290300370300200320072903003703f804200141086a22192903002105200141106a22222903002104200141186a2223290300211a200141206a2224290300211b200141286a2225290300211c20072001290300370300200d201c370300200f201b3703002011201a37030020142004370300201820053703002025200c2903003703002024200e290300370300202320102903003703002022201329030037030020192015290300370300200120032903f804370300200141506a2101200741306a2107200b417f6a220b0d000b0b024020080d00200821110c050b0240200a41094d0d00200821110c050b200920164b0d022012200841306c6a210d034020092008417f6a2211490d040240200920116b220a4102490d002012200841306c6a220141206a220b2903002012201141306c6a220741206a220c290300221a5a200141286a220e2903002204200741286a220f29030022055a20042005511b0d002007290300210420072001290300370300200341f8046a41186a2210200741186a2213290300370300200341f8046a41106a2214200741106a2215290300370300200341f8046a41086a2218200741086a22192903003703002019200141086a2903003703002015200141106a2903003703002013200141186a290300370300200c200b290300370300200f200e290300370300200320043703f8040240200a4103490d00203e210b200d210c20074180016a290300201a5a20074188016a290300220420055a20042005511b0d0002400340200c220141286a200141d8006a290300370300200141206a200141d0006a290300370300200141186a200141c8006a290300370300200141106a200141c0006a290300370300200141086a200141386a2903003703002001200141306a220c2903003703002008200b417f6a220b460d0120014180016a290300201a5a20014188016a290300220420055a20042005511b450d000b0b200141306a21010b2001201a370320200120032903f804370300200141286a2005370300200141186a2010290300370300200141106a2014290300370300200141086a20182903003703000b2011450d05200d41506a210d20112108200a410a4f0d050c000b0b2009201641eccfca001058000b2008200941eccfca001059000b20092008417f6a2211490d002009201641fccfca001058000b2011200941fccfca001059000b0240203d20032802f403470d00200341f0036a203d410110900120032802f003210620032802f8032202213d0b2006203d4103746a2201200a360204200120113602002003200241016a22023602f8032002213d024020024102490d000240024003400240024002400240024020062002417f6a4103746a2201280200450d00200241037420066a220941746a2802002208200128020422074b0d010b20024103490d022001280204210720062002417d6a220e4103746a28020421010c010b4102213d200241024d0d0620062002417d6a220e4103746a2802042201200720086a4d0d004103213d200241034d0d06200941646a280200200120086a4b0d050b20012007490d010b2002417e6a210e0b02400240024002400240024002402002200e41016a220f4d0d002002200e4d0d012006200e41037422136a2201280204221420012802006a22012006200f41037422156a22022802002210490d02200120164b0d032012201041306c6a220c2002280204220d41306c22026a2107200141306c2106200120106b2209200d6b2201200d4f0d04203a2007200141306c2202109d08220920026a2108200d4101480d0520014101480d05203b20066a21062007210103402006200141506a220a200841506a220b200841706a2202290300200141706a220729030054200241086a2903002205200741086a29030022045420052004511b22071b2202290300370300200641086a200241086a290300370300200641106a200241106a290300370300200641186a200241186a290300370300200641206a200241206a290300370300200641286a200241286a2903003703002008200b20071b21080240200c200a200120071b2201490d00200921020c080b200641506a21062009210220092008490d000c070b0b200f2002418cd0ca001042000b200e2002419cd0ca001042000b2010200141acd0ca001059000b2001201641acd0ca001058000b203a200c2002109d08220b20026a21080240200d4101480d002009200d4c0d00201220066a210a200b2102200c21010340200120072002200741206a290300200241206a29030054200741286a2903002205200241286a29030022045420052004511b22091b2206290300370300200141086a200641086a290300370300200141106a200641106a290300370300200141186a200641186a290300370300200141206a200641206a290300370300200141286a200641286a2903003703002002200241306a20091b2102200141306a2101200741306a200720091b2207200a4f0d03200820024b0d000c030b0b200c2101200b21020c010b20072101200921020b20012002200820026b220620064130706b109d081a024020032802f8032201200e4d0d0020032802f003220620136a22022014200d6a360204200220103602002001200f4d0d02200620156a2202200241086a2001200f417f736a410374109e081a20032001417f6a22023602f803200241014b0d010c030b0b200e200141bcd0ca001042000b200f2001104e000b2002213d0b2011450d030c000b0b1045000b1044000b024020032802f40341ffffffff0171450d00200610350b2039413070210120394130490d0120392001460d01203a10350c010b20164102490d002016417f6a21062012201641306c6a2108410021090340024002400240201620062201417f6a2206490d00201620066b22074102490d022012200141306c6a220141206a220a2903002012200641306c6a220241206a220b290300221a5a200141286a220c2903002204200241286a220d29030022055a20042005511b0d022002290300210420022001290300370300200341f8046a41186a220e200241186a220f290300370300200341f8046a41106a2210200241106a2211290300370300200341f8046a41086a2213200241086a22142903003703002014200141086a2903003703002011200141106a290300370300200f200141186a290300370300200b200a290300370300200d200c290300370300200320043703f80420074103490d01200921072008210a20024180016a290300201a5a20024188016a290300220420055a20042005511b0d010340200a220141506a22022001290300370300200241286a200141286a290300370300200241206a200141206a290300370300200241186a200141186a290300370300200241106a200141106a290300370300200241086a200141086a2903003703002007417f6a2207450d02200141306a210a200141d0006a290300201a5a200141d8006a290300220420055a20042005511b0d020c000b0b2006201641dccfca001059000b2001201a370320200120032903f804370300200141286a2005370300200141186a200e290300370300200141106a2010290300370300200141086a20132903003703000b200941016a2109200841506a210820060d000b0b200342f0f2bda1a7ee9cb9f9003703f804200341e0016a200341f8046a10e001200342f0f2bda1a7ee9cb9f9003703f804200341f0036a200341f8046a10e001200341e8026a200341f0036a108e02200341f8046a20032802e802220120032802f002108f0220032903f804210520034188056a2903002104200329038005211a024020032802ec02450d00200110350b02402016201641017622014d0d00420020044200200542015122021b2204201a420020021b2205428080e983b1de1654ad7d221a200542808097fccea1697c221b200556201a200456200542ffffe883b1de16561b22021b22052012200141306c6a220141286a29030022042001290320221a4200201b20021b221b56200420055620042005511b22011b2104201b201a20011b2105024020032903c0074201520d00200341e8026a41186a200341c0076a41206a290300370300200341e8026a41106a200341c0076a41186a290300370300200341f0026a200341c0076a41106a290300370300200320032903c8073703e802200341c0076a41286a290300211a2003200341c0076a41306a290300221b370388062003201a370380060240201a201b84500d002003200341e8026a3602c001200341f0036a200341e8026a20034180066a200341c0016a10f00220032903f0034201520d0020032903f803211a200341b0056a200341f0036a41106a290300370300200341a8056a201a370300200341f8046a41086a41003a000020034181056a20032903e80237000020034189056a200341e8026a41086a29030037000020034191056a200341e8026a41106a29030037000020034199056a20034180036a290300370000200341033a00f80441b0b4cc004100200341f8046a10d4010b200341e8026a200341ac086a412010a008450d00200341a8016a2005200442e400420010980820034198016a20032903a801221a200341a8016a41086a290300221b429c7f427f10840820034188016a201a201b42144200108408200341f8046a200341e0016a200341e8026a200329038801221b20052003290398017ca741ff0071220141056e2202200141146c2002419c7f6c6a41fcff037141324b6aad7c221a20034188016a41086a290300201a201b54ad7c221b410010e6022004201b7d2005201a54ad7d21042005201a7d21050b200341f8046a200341e0016a200341ac086a20052004410010e60220034199056a201737000020034198056a20263a000020034197056a20273a000020034195056a20283b000020034194056a20293a000020034193056a202a3a000020034191056a202b3b000020034190056a202c3a00002003418f056a202d3a00002003418d056a202e3b00002003418c056a202f3a00002003418b056a20303a000020034189056a20313b000020034188056a20323a000020034187056a20333a000020034185056a20343b000020034183056a20363a0000200341f8046a41096a20373b000020034180056a41093a00002003410c3a00f804200341f8046a410c6a20353a0000200341c8056a2005370300200341d0056a2004370300200341b9056a200341c4086a290200370000200341b1056a200341bc086a290200370000200341a9056a200341b4086a290200370000200341a1056a20032902ac0837000041b0b4cc004100200341f8046a10d4012038450d05203841306c450d05201210350c050b2001201641cc82ca001042000b02402006450d00200710350b20004200370308200041206a410c3602002000411c6a41b7adc800360200200041186a2001360200420121050c050b41b7adc800210a410c21094111210841032107410321010c010b0b02402006450d00200b10350b20004200370308200041206a20093602002000411c6a200a360200200041186a2002411874200741ff017141107472200841ff017141087472200141ff017172360200420121050c020b420021050b200020053703080b20002005370300200341d0086a24000f0b103c000bbd930106147f027e0c7f017e027f017e230041e0046b22042400200441c0036a20012002200310ed06200441c0036a41086a280200210520042802c40321060240024002400240024020042802c0034101460d00200441d4036a280200220741306c2108200441d8036a2802002109200441d0036a280200210a200441cc036a280200210b4100210c4100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004102470d000b200441d8006a200b200d6a41546a10bf032004280258210c200428025c21010b4100210e20014100200c1b210f200741306c2108200c41b0b4cc00200c1b21104100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004108470d000b200441d0006a200b200d6a41546a10bf032004280250210e200428025421010b4100211120014100200e1b2112200741306c2108200e41b0b4cc00200e1b210c4100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004104470d000b200441c8006a200b200d6a41546a10bf0320042802482111200428024c21010b4100210e2001410020111b2113200741306c2108201141b0b4cc0020111b21114100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004103470d000b200441c0006a200b200d6a41546a10bf032004280240210e200428024421010b41002102024020014100200e1b2201450d00200141286c2108200e41b0b4cc00200e1b41186a2101410021020340200220012d0000456a2102200141286a2101200841586a22080d000b0b024020120d00411e210120004185d6cb003602040c030b200c201241146c6a211241002114410021150240034041a3d6cb00210841382101200c41086a280200417c6a220e41024b0d01200c280200210d024002400240200e0e03000401000b41012115200d41fbd5cb00460d01200d28000041e3c2b1e306460d010c030b41012114200d41ffd5cb00460d00200d41ffd5cb00410610a0080d020b0240200c410c6a280200450d0041132101200041a1d7cb003602040c050b0240200c41106a280200220120026b220d20014d0d00412a2101200041b4d7cb003602040c050b41fbd6cb002108412621012013200d4d0d012011200d4102746a220d450d0141dbd6cb00210841202101200f200d280200220d4d0d012010200d4104746a220d450d0141ded7cb002108411f2101200d2802080d01200d2d000d220d41077141044b0d010240200d0e050002020200000b200c41146a220c2012470d000b20142015714101710d02411c411e201441017122021b2101200041fdd7cb004185d6cb0020021b3602040c030b200020083602040c020b2000200636020420004101360200200041086a20053602000c030b200741306c2108410021010240024002400240034020082001460d01200b20016a2102200141306a220d210120022d00004106470d000b200441386a200b200d6a41546a10bf03200428023c0d010b200741306c2108200328028001210c410021010240034020082001460d01200b20016a2102200141306a220d210120022d00004105470d000b200441306a200b200d6a41546a220110bf030240200428023441014d0d0041182101200041e8d3cb003602040c050b200441286a200110bf03200428022c450d0020042802282201450d002001280200200c4d0d004122210120004180d4cb003602040c040b200741306c2108410021010240034020082001460d01200b20016a2102200141306a220d210120022d00004107470d000b200441206a200b200d6a41546a10bf032004280220220120042802244104746a2108034020012008460d012001450d012001410c6a2102200141106a210120022d0000410271450d000b413221012000418cd5cb003602040c040b200741306c2108410021010240034020082001460d01200b20016a2102200141306a220d210120022d0000410c470d000b200b200d6a2201415c6a2802002202450d00200141546a280200220d200241186c6a210c0340200d220241186a210d2002280208410374210120022802002102024003402001450d01200141786a210120022d00042108200241086a21022008410271450d000b41312101200041dbd4cb003602040c060b200d200c470d000b0b200741306c2108410021010240034020082001460d01200b20016a2102200141306a220d210120022d00004102470d000b200441186a200b200d6a41546a10bf03200428021c2201450d002004280218220220014104746a210e03402002450d01200241106a210c200420022d000d22083a00c0032002280200220120022802086a210d4100200441c0036a20084104461b210802400340024002402001450d00200d2001460d0020012102200141016a21010c010b2008450d024100210120082102410021080b20022d0000410271450d000b41392101200041a2d4cb003602040c060b200c2102200c200e470d000b0b200741306c21084100210c4100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004102470d000b200441106a200b200d6a41546a10bf032004280210210c200428021421010b4100210e20014100200c1b2110200741306c2108200c41b0b4cc00200c1b21124100210102400340024020082001470d000c020b200b20016a2102200141306a220d210120022d00004103470d000b200441086a200b200d6a41546a10bf032004280208210e200428020c21010b200e41b0b4cc00200e1b220220014100200e1b41286c6a210d41002113034002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402002200d460d00412d210141ecbcca00210820022802084103470d0902402002280200220c41a58ecc00460d00200c41a58ecc00410310a0080d0a0b200241286a21114115210c41e5bbca00210e4114210141d8bcca0021080240024020022d00180e04010b0022010b412f21014199bdca00210820022802144106470d0a0240200228020c220c41a9bbca00460d00200c41a9bbca00410610a0080d0b0b2013450d02411f2101200041c8bdca003602040c270b4136210c41afbbca00210e2010200228021c22014d0d20201220014104746a220f450d202002280214210c200228020c2102024020092d0088010d00200c410b470d004138210141a0bcca002108200241bfe2cb00460d0a200241bfe2cb00410b10a008450d0a0c200b4126210141fabbca002108200c417d6a220c41144b0d09024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200c0e15003030301208300d46060b160118031f1430101d21000b200241a88ecc00460d2f200241a88ecc00410310a008450d2f41a88ecc002002410310a0080d2f41011033220e0d010c4d0b200241c6dfcb00460d0241c6dfcb002002410f10a008450d02200241e6dfcb00460d0541e6dfcb002002410f10a008450d05024020024189e0cb00460d004189e0cb002002410f10a0080d2f0b41071033220e450d4c200e4100360003200e41013a0002200e41003b0000200f2d000c41e000460d0a0c430b200e41003a0000200f2d000c41e000470d41200f2802084101470d410240200f2802002214200e460d0041002102034020024101460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d430c000b0b200f2d000d4104470d41200e1035201121020c460b200241d5dfcb00460d0141d5dfcb002002411110a008450d01200241b6e1cb00460d1341b6e1cb002002411110a008450d13200241f5e1cb00460d1841f5e1cb002002411110a008450d1820024186e2cb00460d1a4186e2cb002002411110a008450d1a0240200241f1e2cb00460d0041f1e2cb002002411110a0080d2d0b41031033220e450d4a200e41003a0002200e41003b0000200f2d000c41e000460d1f0c3f0b41031033220e450d49200e41003a0002200e41003b0000200f2d000c41e000470d3d200f2802084103470d3d0240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d3f0c000b0b200f2d000d4104470d3d200e1035201121020c440b41011033220e450d48200e41003a0000200f2d000c41e000470d3b200f2802084101470d3b0240200f2802002214200e460d0041002102034020024101460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d3d0c000b0b200f2d000d4104470d3b200e1035201121020c430b200241f5dfcb00460d0241f5dfcb002002410c10a008450d020240200241d1e0cb00460d0041d1e0cb002002410c10a0080d2a0b4126210c41fabbca00210e200f2d000c41e000470d40200f2802080d4020112102200f2d000d4104460d420c400b41011033220e450d46200e41003a0000200f2d000c41e000470d38200f2802084101470d38200f2802002214200e460d3741002102034020024101460d38200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d390c000b0b024020024181e0cb00460d00200229000042e5f0d1fbb5ac98b6ec00520d280b41071033220e450d45200e4100360003200e41013a0002200e41003b0000200f2d000c41e000460d010c350b41041033220e450d44200e4100360000200f2d000c41e000470d33200f2802084104470d33200f2802002214200e460d3241002102034020024104460d33200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d340c000b0b200f2802084107470d33200f2802002214200e460d3041002102034020024107460d31200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d340c000b0b20024198e0cb00460d024198e0cb002002410d10a008450d020240200241c4e0cb00460d0041c4e0cb002002410d10a0080d250b4126210c41fabbca00210e200f2d000c41e000470d3b200f2802080d3b20112102200f2d000d4104460d3d0c3b0b200f2802084107470d38200f2802002214200e460d2d41002102034020024107460d2e200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d390c000b0b200241a5e0cb00460d0141a5e0cb002002410a10a008450d010240200241afe0cb00460d0041afe0cb002002410a10a0080d040b4126210c41fabbca00210e200f2d000c41e000470d39200f2802080d3920112102200f2d000d4104460d3b0c390b41021033220e450d3f200e41003b0000200f2d000c41e000470d2a200f2802084102470d2a0240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d2c0c000b0b200f2d000d4104470d2a200e1035201121020c3a0b41021033220e450d3e200e41003b0000200f2d000c41e000470d28200f2802084102470d280240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d2a0c000b0b200f2d000d4104470d28200e1035201121020c390b0240200241e8e0cb00460d0041e8e0cb002002411510a0080d050b4126210c41fabbca00210e200f2d000c41e000470d36200f2802080d3620112102200f2d000d4104460d380c360b0240200241fde0cb00460d0041fde0cb002002410a10a0080d1f0b41021033220e450d3c200e41003b0000200f2d000c41e000460d010c250b024020024187e1cb00460d004187e1cb002002410710a0080d1e0b4126210c41fabbca00210e200f2d000c41e000470d34200f2802080d3420112102200f2d000d4104460d360c340b200f2802084102470d230240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d250c000b0b200f2d000d4104470d23200e1035201121020c350b02402002418ee1cb00460d00418ee1cb002002411310a0080d0e0b4126210c41fabbca00210e200f2d000c41e000470d32200f2802080d3220112102200f2d000d4104460d340c320b0240200241a1e1cb00460d0041a1e1cb002002411510a0080d1b0b4126210c41fabbca00210e200f2d000c41e000470d31200f2802080d3120112102200f2d000d4104460d330c310b0240200241c7e1cb00460d0041c7e1cb002002410e10a0080d1a0b41081033220e450d37200e4200370000200f2d000c41e000460d020c1f0b41021033220e450d36200e41003b0000200f2d000c41e000470d1d200f2802084102470d1d0240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d1f0c000b0b200f2d000d4104470d1d200e1035201121020c310b200241d5e1cb00460d0141d5e1cb002002411010a008450d01200241e5e1cb00460d0241e5e1cb002002411010a008450d020240200241cae2cb00460d0041cae2cb002002411010a0080d180b4126210c41fabbca00210e200f2d000c41e000470d2e200f2802080d2e20112102200f2d000d4104460d300c2e0b200f2802084108470d1c0240200f2802002214200e460d0041002102034020024108460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d1e0c000b0b200f2d000d4104470d1c200e1035201121020c2f0b4126210c41fabbca00210e200f2d000c41e000470d2c200f2802080d2c200f2d000d22014104460d2c20112102200141fb0171450d2e0c2c0b41031033220e450d32200e41003a0002200e41003b0000200f2d000c41e000470d18200f2802084103470d180240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d1a0c000b0b200f2d000d4104470d18200e1035201121020c2d0b41021033220e450d31200e41003b0000200f2d000c41e000470d16200f2802084102470d160240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d180c000b0b200f2d000d4104470d16200e1035201121020c2c0b024020024197e2cb00460d004197e2cb002002411610a0080d130b41021033220e450d30200e41003b0000200f2d000c41e000460d020c140b41041033220e450d2f200e4100360000200f2d000c41e000470d12200f2802084104470d120240200f2802002214200e460d0041002102034020024104460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d140c000b0b200f2d000d4104470d12200e1035201121020c2a0b0240200241ade2cb00460d0041ade2cb002002411210a0080d110b4126210c41fabbca00210e200f2d000c41e000470d27200f2802080d2720112102200f2d000d4104460d290c270b200f2802084102470d110240200f2802002214200e460d0041002102034020024102460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d130c000b0b200f2d000d4104470d11200e1035201121020c280b0240200241dae2cb00460d0041dae2cb002002411710a0080d0f0b410210332214450d2c201441003b0000200f2d000c41e000470d0d200f2802084102470d0d200f28020022152014460d0c41002102034020024102460d0d201420026a210c201520026a210e200241016a2102200e2d0000200c2d0000470d0e0c000b0b20024182e3cb00460d014182e3cb002002411310a008450d0120024195e3cb00460d024195e3cb002002411310a008450d020240200241a8e3cb00460d0041a8e3cb002002411310a0080d0e0b41031033220e450d2b200e41003a0002200e41003b0000200f2d000c41e000460d030c0a0b200f2802084103470d1f0240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d210c000b0b200f2d000d4104470d1f200e1035201121020c250b41031033220e450d29200e41003a0002200e41003b0000200f2d000c41e000470d07200f2802084103470d070240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d090c000b0b200f2d000d4104470d07200e1035201121020c240b41031033220e450d28200e41003a0002200e41003b0000200f2d000c41e000470d05200f2802084103470d050240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d070c000b0b200f2d000d4104470d05200e1035201121020c230b200f2802084103470d060240200f2802002214200e460d0041002102034020024103460d01200e20026a2108201420026a210c200241016a2102200c2d000020082d0000470d080c000b0b200f2d000d4104470d06200e1035201121020c220b410021164100211720130d010c020b2002411c6a2113201121020c200b024020132802040d00200041e7bdca00360204413221010c240b024020132802002216201341086a28020022174d0d0020004199beca0036020441c90021010c240b2017200328027c4d0d00200041e2beca0036020441c10021010c230b20092903082118200441c0036a410c6a22024100360200200441003602c4032009290310211920042018a7417f2018428080808010541b3602d00320042019a7417f2019428080808010541b3602c003200441c0036a4104722201410d10ee062001410c10ee062001410710ee062001410f10ee06200420042802c003360264200441c8036a220828020021122002280200211a20042802c403211320042802d003211b200441d0036a220d20073602002002200a3602002004200b3602c803200420053602c403200420063602c003200441e8006a200441c0036a10ef06410110332201450d23200141003a0000200420042f01c00322023b019002200d41e0083b01002008428180808010370300200420013602c403200441013602c003200420023b01d203200441e8006a200441c0036a10f006210c02400240410310332202450d00200241026a41002d00a78e4c3a0000200241002f00a58e4c3b0000410310332208450d00200841026a41002d00aa8e4c3a0000200841002f00a88e4c3b000020044190026a41026a200441c0036a41026a220b2d000022073a0000200420042f00c003220e3b019002200441fc006a280200210d200441e8006a41106a2802002101200b20073a00002004200e3b01c00302400240200d2001470d00200141016a220d2001490d012001410174220b200d200b200d4b1bad42287e2218422088a70d012018a7220d4100480d0102400240024020010d00200d0d014104210b0c020b2004280274210b200141286c2201200d460d01024020010d00200d0d014104210b0c020b200b2001200d1037220b450d290c010b200d1033220b450d280b2004200b3602742004200d41286e360278200428027c210d0b2004280274200d41286c6a220141003a00182001200836020c200142838080803037020420012002360200200141106a428380808030370200200141196a20042f01c0033b00002001411b6a200441c2036a2d00003a00002001411c6a200c3602002004200428027c41016a36027c200441c0036a200441e8006a418c01109d081a200441f8016a200441c0036a10f106200441f8016a41106a280200220e41306c2101200428028002220b41546a210202400340410021082001450d01200141506a21012002412c6a210d200241306a220c2102200d2d00004103470d000b200c41086a2802002201450d00200141286c2102200c28020041186a2101410021080340200820012d0000456a2108200141286a2101200241586a22020d000b0b200e41306c2101200b41546a21022008417f6a210d02400340410021082001450d01200141506a21012002412c6a210c200241306a22072102200c2d00004103470d000b200741086a2802002201450d00200141286c2102200728020041186a2101410021080340200820012d0000456a2108200141286a2101200241586a22020d000b0b200e41306c2101200b415c6a21020240034041002111024020010d00410021010c020b200141506a2101200241246a210c200241306a22072102200c2d00004104470d000b200728020021010b0240024002400240200e450d00200120086a211c200b200e41306c6a2115200441a0036a410c6a211d200441bc036a41046a211e200441a0036a41146a211f410021204100212103400240200b2d000041786a220141044b0d000240024002400240024020010e050301020500030b200b28020c2201450d04200b280204220c200141186c6a2122202021010340200121200240200c22082802144104742202450d00200828020c21010340024020012d0000410b470d00200141046a220c2802002207200d490d00200c200741016a3602000b200141106a2101200241706a22020d000b0b2008410c6a2106200442003703b00320044280808080c0003703a803200442043703a003200441a0036a41004101108c0120042802a00320042802a8034104746a22014200370200200141056a4200370000200420042802a80341016a3602a8030240024002400240024020082802142201450d002001ad21194200211803402018a721140240024002400240024002400240024020182001ad5a0d004110210202400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402006280200222320144104746a2d000022240eac010001020202020202020202020202020303030404050506060707080809090a0a0b0b0c0d0d0e0e0f0f1010111213131414151516161717181819191a1a1b1b1c1c1d1d1e1e1f1f2020212122222323242425252627272828292a2a2b2b2c2d2d2e2e2f2f303031313232333434353536363737383839393a3a3b3b3c3c3d3d3e3e3f3f40404141424243434444454546464747484a4a4a4a49494a4a4a4a4a4a4a4a4a4a4a4a4a4a4b4b4b4b000b411121020c4a0b411221020c490b410a21020c480b410821020c470b410821020c460b410421020c450b410421020c440b410421020c430b410421020c420b410421020c410b410421020c400b410421020c3f0b410521020c3e0b410521020c3d0b410521020c3c0b410521020c3b0b410521020c3a0b411321020c390b411421020c380b410621020c370b410721020c360b410b21020c350b410b21020c340b410b21020c330b410b21020c320b410b21020c310b410b21020c300b410b21020c2f0b410b21020c2e0b410b21020c2d0b410b21020c2c0b410b21020c2b0b410c21020c2a0b410c21020c290b410c21020c280b410c21020c270b410c21020c260b410c21020c250b410021020c240b410021020c230b410121020c220b410221020c210b410321020c200b410321020c1f0b410021020c1e0b410021020c1d0b410021020c1c0b410021020c1b0b410021020c1a0b410021020c190b410121020c180b410221020c170b410321020c160b410321020c150b410021020c140b410021020c130b410021020c120b410021020c110b410d21020c100b410d21020c0f0b410d21020c0e0b410d21020c0d0b410d21020c0c0b410d21020c0b0b410d21020c0a0b410d21020c090b410d21020c080b410d21020c070b410d21020c060b410d21020c050b410d21020c040b410d21020c030b410e21020c020b410e21020c010b410f21020b200441e4006a212502402013450d0020132107201221050340200741086a211020072f010621114100210c4100210102400240034020112001460d01201020016a210f200c41086a210c200141016a210102404100417f4101200f2d0000220f20024b1b200f2002461b41016a0e03000301000b0b2001417f6a21110b2005450d022005417f6a2105200720114102746a41ec006a28020021070c010b0b02402007200c6a2201410c6a2802000e0401140001010b200141106a21250b201842017c2118202528020021020240024002400240024002400240024002402024417e6a220141084b0d0020010e09010302050406060708010b20042802a8032201450d1a200141047420042802a0036a41786a220c280200220120026a22022001490d1a200c20023602000c0f0b20042802a8032201450d19200141047420042802a0036a41786a220c280200220120026a22022001490d19200c200236020020042802a8032202450d19200241047420042802a00322016a41746a28020021072002210c0240200220042802a403470d00200441a0036a20024101108c0120042802a803210c20042802a00321010b2001200c4104746a2201200e3b000d200141003a000c20012007360204200120023602002001410f6a200e4110763a0000200141086a4100360200200420042802a80341016a3602a8030c0e0b20042802a8032201450d18200141047420042802a0036a41786a220c280200220120026a22022001490d18200c200236020020042802a803220221010240200220042802a403470d00200441a0036a20024101108c0120042802a80321010b20042802a00320014104746a2201200e3b000d200141003a000c200120183e0204200120023602002001410f6a200e4110763a0000200141086a4100360200200420042802a80341016a3602a8030c0d0b20042802a8032201450d17200141047420042802a0036a41786a220c280200220120026a22022001490d17200c200236020020042802a803220221010240200220042802a403470d00200441a0036a20024101108c0120042802a80321010b20042802a00320014104746a2201200e3b000d200141013a000c200120183e0204200120023602002001410f6a200e4110763a0000200141086a4100360200200420042802a80341016a3602a8030c0c0b20042802a8032201450d16200141047420042802a0036a41746a22012902002126200120183702002026a7210c2026422088a7210202400240024020042802a80322014101460d002001450d0820042802a0032001417e6a4104746a2207280204200c470d00200741086a21010c010b2002450d01024020042802b403220120042802b003470d00201d2001410110900120042802b40321010b20042802ac0320014103746a220120023602042001200c36020041012102201f21010b2001200128020020026a36020020042802a8032201450d170b20042001417f6a22023602a80320042802a003220c20024104746a22072d000c4102460d162002450d0b2001410474200c6a41606a220c20072802002201200c280200220c200c20014b1b360200200120024f0d0b20042802a8032201450d16200141047420042802a0036a41746a22012902002126200120183702002026a7210c2026422088a72101024020042802a80322024101460d002002450d0720042802a0032002417e6a4104746a2202280204200c470d002002200228020820016a3602080c0c0b2001450d0b024020042802b403220220042802b003470d00201d2002410110900120042802b40321020b20042802ac0320024103746a220220013602042002200c360200200420042802b40341016a3602b4030c0b0b20042802a8032201450d15200141047420042802a0036a41746a22012902002126200120183702002026a7210c2026422088a72101024020042802a80322024101460d002002450d0720042802a0032002417e6a4104746a2202280204200c470d002002200228020820016a3602080c0b0b2001450d0a024020042802b403220220042802b003470d00201d2002410110900120042802b40321020b20042802ac0320024103746a220220013602042002200c360200200420042802b40341016a3602b4030c0a0b20042802a8032201450d14200141047420042802a0036a41786a220c280200220120026a22022001490d14202320144104746a41046a2802002107200c200236020020042802a8032201417f6a220c20014b0d14200c20076b2202200c4b0d14200141047420042802a0036a41746a22012902002126200120183702002026a721072026422088a7210c02400240024020042802a80322014101460d002001450d0920042802a0032001417e6a4104746a22112802042007470d00201141086a21010c010b200c450d01024020042802b403220120042802b003470d00201d2001410110900120042802b40321010b20042802ac0320014103746a2201200c360204200120073602004101210c201f21010b20012001280200200c6a36020020042802a80321010b200120024d0d1420042802a003220c20024104746a2d000c0d092001410474200c6a41706a2201200220012802002201200120024b1b3602000c090b20042802a8032201450d13200141047420042802a0036a41786a220c280200220120026a22022001490d13200c200236020020042802a8032202417f6a220120024b0d13200420013602b8032004202320144104746a41046a2202280200280208220c3602bc0320022802002207280200210220072802042107200441003a00cf042004200220074102746a36029c0220042002360298022004201e360294022004200441bc036a360290022004200441bc036a41046a360290022004200441cf046a3602a4022004200441b8036a3602a00202402001200c6b220220014d0d00200441013a00cf040c140b410410332201450d1b2001200236020020044281808080103702d404200420013602d004200441c0036a41106a20044190026a41106a290300370300200441c0036a41086a20044190026a41086a290300370300200420042903900222263703c00320042802d4032102024002402026a72201450d00024020042802c4032001460d002004200141046a3602c00320042802d003280200220720012802006b220c20074d0d02200241013a00000c0a0b200441003602c0030b20042802c8032201450d0820042802cc032001460d082004200141046a3602c80341012107024020042802d003280200221120012802006b220c20114d0d00200241013a0000410021070b2007417d71450d080b4101210220042802cc03211020042802d003211120042802c403210f20042802d4032105410121010340024020012002470d00200441d0046a200241011086010b20042802d00420014102746a200c3602002004200141016a3602d8040240024020042802c0032201450d000240200f2001460d002004200141046a3602c0032011280200220220012802006b220c20024d0d02200541013a00000c0b0b200441003602c0030b20042802c8032201450d0920102001460d092004200141046a3602c8034101210202402011280200220720012802006b220c20074d0d00200541013a0000410021020b2002417d71450d090b20042802d404210220042802d80421010c000b0b20042802a8032201450d12200141047420042802a0036a41786a220c280200220120026a22022001490d12200c200236020020042802a8032201450d12200141047420042802a0036a41746a22012902002126200120183702002026a7210c2026422088a7210102400240024020042802a80322024101460d002002450d0820042802a0032002417e6a4104746a2207280204200c470d00200741086a21020c010b2001450d01024020042802b403220220042802b003470d00201d2002410110900120042802b40321020b20042802ac0320024103746a220220013602042002200c36020041012101201f21020b2002200228020020016a36020020042802a8032202450d130b20042802a00322012d000c0d07200241047420016a41706a41003602000c070b2014200141fc8ecc001042000b41ab8ecc00413f41ec8ecc001064000b41ab8ecc00413f41ec8ecc001064000b41ab8ecc00413f41ec8ecc001064000b41ab8ecc00413f41ec8ecc001064000b41ab8ecc00413f41ec8ecc001064000b20042802d004210f20042802d4042105024020042d00cf04450d00200541ffffffff0371450d0c200f10350c0c0b200f450d0b0240024020042802a80322010d00410121100c010b20042802d8042102200141047420042802a0036a41746a22012902002126200120183702002026a721072026422088a7210102400240024020042802a803220c4101460d00200c450d0720042802a003200c417e6a4104746a220c2802042007470d00200c41086a210c0c010b2001450d01024020042802b403220c20042802b003470d00201d200c410110900120042802b403210c0b20042802ac03200c4103746a220c2001360204200c200736020041012101201f210c0b200c200c28020020016a3602000b410021102002450d002002410274210c200f21010340024020042802a8032207200128020022024b0d00410121100c020b024020042802a003221120024104746a2d000c0d00200741047420116a41706a2207200220072802002207200720024b1b3602000b200141046a2101200c417c6a220c0d000b0b0240200541ffffffff0371450d00200f10350b20100d0b0b20182019510d01200828021421010c000b0b20042802ac0320042802b4032201410041202001676b10f20620042903b003212620042802ac032124024020042802a40341ffffffff0071450d0020042802a00310350b024020240d00410121210c0a0b200828021422012026422088a7220c4101746a220241ffffffff00712002470d0120024104742202417f4c0d010240024020020d00410821070c010b200210332207450d11200828021421010b20084100360214200828020c21232008200736020c200841106a220f2802002127200f2002410476360200202320014104746a21112024200c4103746a212541022107024020010d0020242114202321010c030b41002102202421144100210c202321010340200141016a2f0000200141036a2d000041107472210e024020012d0000221041ac01470d00200141106a21010c040b200141086a2900002118200141046a28000021050240024020074102470d00024020142025470d0041002107202521140c020b20142902002219422088a721282019a7210a41012107201441086a21140b20074101470d00200c200a470d0002402002200f280200470d00200620024101109a01200828021421020b200828020c20024104746a220220042f00c0033b00012002412d3a000020022028360204200241036a200441c0036a41026a2d00003a00002008200828021441016a220236021402402002200f280200470d00200620024101109a01200828021421020b200828020c20024104746a220220042f00c0033b00012002410b3a00002002200d36020441022107200241036a200441c0036a41026a2d00003a00002008200828021441016a2202360214200c210a0b02402002200f280200470d00200620024101109a01200828021421020b200c41016a210c200828020c20024104746a22022018370308200220053602042002200e3b0001200220103a0000200241036a200e4110763a00002008200828021441016a2202360214200141106a22012011470d000c040b0b41ab8ecc00413f41ec8ecc001064000b1044000b20112001460d000340200141106a2102024020012d00004109470d000240200141046a220c280200220128020441ffffffff0371450d0020012802001035200c28020021010b200110350b2002210120112002470d000b0b0240202741ffffffff0071450d00202310350b2014202547200720074102461b21010240202642ffffffff0183500d00202410350b024020014101470d00410121210c060b200841186a210c02400240201b450d0020082802142202450d00200828020c210120024104742102410021080340024020012d0000412c470d002001410b3a0000200141046a201c360200200841016a21080b200141106a2101200241706a22020d000b4101210120080d010b202021010b200c2022470d000b200121200c040b200b2802042201200d490d03200b200141016a3602040c030b200b28020c2201450d02200b280204220c2001411c6c6a21070340200c2201411c6a210c024020012802182202450d0020012802102101200241027421020340024020012802002208200d490d002001200841016a3602000b200141046a21012002417c6a22020d000b0b200c2007460d030c000b0b200b28020c2201450d01200141146c2102200b28020441106a2101034002402001417c6a2802000d0020012802002208200d490d002001200841016a3602000b200141146a21012002416c6a22020d000c020b0b024020042802a40341ffffffff0071450d0020042802a00310350b024020042802b00341ffffffff0171450d0020042802ac0310350b410121210b200b41306a220b2015470d000b4101210f20214101710d0220204101710d012004280288022111200428028002210b0b20044184026a280200211020042802fc01210520042802f80121064100210f0c020b200441c0036a41106a200441f8016a41106a280200360200200441c0036a41086a200441f8016a41086a290300370300200420042903f8013703c00320044190026a200441c0036a10ef06411010332202450d28200241063a0000410110332201450d28200141003a000041011033220c450d28200c20012d00003a000020011035411010332208450d28200841063a000041f00010332201450d28200141063a00602001412c3b01502001200d3602442001410b3a0040200141d8003a00302001201b3602242001412d3a0020200141003602142001410f3a0010200141003602042001410f3a0000024020082d00004109470d0002402008280204220d28020441ffffffff0371450d00200d28020010352008280204210d0b200d10350b20081035024020022d00004109470d0002402002280204220828020441ffffffff0371450d0020082802001035200228020421080b200810350b20021035200441e4036a4287808080f000370200200441e0036a2001360200200441dc036a4100360200200441c0036a410c6a4281808080800c370200200441c8036a4101360200200441003602ec03200442043702d4032004200c3602c403200441013602c00320044190026a200441c0036a10f306200441c0036a20044190026a418c01109d081a200441a0036a200441c0036a10f106200441a0036a410c6a2802002110200441b0036a280200211120042802a003210620042802a403210520042802a803210b4100210f0c010b20044184026a2802002110200428028002220b200428028802221110f406411a210541bed5cb00210602402010450d00201041306c450d00200b10350b0b41002108410021014100210c02402013450d0002402012450d000340201328026c21132012417f6a22120d000b0b20132101201a210c0b024002400340200c450d012001450d024100210d02400240200820012f01064f0d00200121020c010b4100210d034002400240200128020022020d0041002108410021020c010b200d41016a210d20012f010421080b2001103520022101200820022f01064f0d000b0b200841016a2107200220084103746a41146a280200210e02400240200d0d0020022101200721080c010b200220074102746a41ec006a280200210141002108200d417f6a2202450d000340200128026c21012002417f6a22020d000b0b200c417f6a210c200e4103470d000b0b02402001450d0020012802002102200110352002450d00034020022802002101200210352001210220010d000b0b02400240200f0d0020044190026a41106a201136020020044190026a410c6a20103602002004200b3602980220042005360294022004200636029002200441c0036a20044190026a200928027810f50620042802c0034101470d010240200441c0036a41086a280200450d0020042802c40310350b200041d8d5cb0036020420004101360200200041086a41233602000c2a0b2000200636020420004101360200200041086a20053602000c290b200441d4036a2802002102200441c0036a41106a2802002110200441c0036a410c6a280200210f200441c8036a280200210c20042802c403210820032802702105200441003602a803200442013703a003410410332201450d27200441043602a403200420013602a00320012008360000200441043602a8030240024020042802a403220d417c714104460d004104210120042802a00321080c010b200d41017422014108200141084b1b220b4100480d0202400240200d0d0041042101200b10332208450d2a0c010b4104210120042802a0032108200d200b460d002008200d200b10372208450d2920042802a80321010b2004200b3602a403200420083602a0030b200820016a200c3600002004200141046a3602a803200f200241306c6a2113024020020d00200f21010c040b200441c0036a4101722102200441c0036a41276a210d200441c0036a41206a210c200441c0036a41186a210b200441c0036a41086a2107200f21010240034020012d00002108200d200141286a290000370000200c200141216a290000370300200b200141196a290000370300200441c0036a41106a220e200141116a2900003703002007200141096a2900003703002004200141016a2900003703c003024020084110470d00200141306a21010c060b20044190026a41276a2211200d29000037000020044190026a41206a2203200c29030037030020044190026a41186a200b290300221837030020044190026a41106a200e290300221937030020044190026a41086a20072903002226370300200420042903c00322293703900220022029370000200241086a2026370000200241106a2019370000200241186a2018370000200241206a2003290300370000200241276a2011290000370000200420083a00c003200441e8006a200441c0036a200441a0036a10f60620042d00682208411f470d01200141306a22012013470d000b201321010c040b200428026c210d20042802702102200141306a2201201320016b41306d10f40602402010450d00201041306c450d00200f10350b024020042802a403450d0020042802a00310350b024020084105470d002002450d00200d10350b20004199d8cb0036020420004101360200200041086a41253602000c280b41958dcc00412b41c08dcc00103f000b103e000b1045000b2001201320016b41306d10f40602402010450d00201041306c450d00200f10350b20042802a003210120042902a40321182000411c6a41003a0000200041146a2018370200200041106a20013602002000410c6a2017360200200041086a2016360200200020053602042000411d6a20042f00f8013b0000200041003602002000411f6a200441fa016a2d00003a00000c240b200e1035200041fabbca003602040c210b200e1035200041fabbca003602040c200b200e1035200041fabbca003602040c1f0b200f2d000d22024104460d00200241fb01710d0020141035201121020c1a0b201410350b200020083602040c1c0b200e1035200041fabbca003602040c1b0b200e1035200041fabbca003602040c1a0b200e1035200041fabbca003602040c190b200e1035200041fabbca003602040c180b200e1035200041fabbca003602040c170b200e1035200041fabbca003602040c160b200e1035200041fabbca003602040c150b200e1035200041fabbca003602040c140b200e1035200041fabbca003602040c130b200f2d000d22024104460d0a200241fb01710d0a200e1035201121020c0e0b200f2d000d22024104460d02200241fb01710d02200e1035201121020c0d0b200f2d000d22024104460d00200241fb01710d00200e1035201121020c0c0b200e1035200041fabbca003602040c0f0b200e1035200041fabbca003602040c0e0b200f2d000d22024104460d00200241fb01710d00200e1035201121020c090b200e1035200041fabbca003602040c0c0b200e1035200041fabbca003602040c0b0b200e1035200041fabbca003602040c0a0b200e1035200041fabbca003602040c090b200e1035200041fabbca003602040c080b200e1035200041fabbca003602040c070b02400240200241b9e0cb00460d0041b9e0cb002002410b10a0080d010b4126210c41fabbca00210e200f2d000c41e000470d01200f2802080d0120112102200f2d000d4104460d030c010b0240200241dde0cb00460d0041dde0cb002002410b10a0080d020b4126210c41fabbca00210e200f2d000c41e000470d00200f2802080d0020112102200f2d000d4104460d020b200c21012000200e3602040c050b0240200241bfe2cb00460d0041bfe2cb002002410b10a0080d040b41021033220c450d05200c41003b0000200f2d000c41e000470d02200f2802084102470d020240200f280200220e200c460d0041002101034020014102460d01200c20016a2102200e20016a2108200141016a210120082d000020022d0000470d040c000b0b200f2d000d4104470d02200c1035201121020c000b0b200041c9d3cb00360204411f21010c020b200c10350b41262101200041fabbca003602040b20004101360200200041086a200136020002402007450d00200b200741306c6a2111200b210703402007220041306a21070240024020002d00002201410e4b0d00024002400240024002400240024002400240024002400240024020010e0f0001020304050607080e090e0a0b0c000b200041086a280200450d0d200041046a28020010350c0d0b0240200041086a280200450d00200041046a28020010350b200041146a280200450d0c200041106a28020010350c0c0b02402000410c6a2802002202450d00200041046a28020021012002410474210203400240200141046a280200450d00200128020010350b200141106a2101200241706a22020d000b0b200041086a28020041ffffffff0071450d0b200028020410350c0b0b02402000410c6a2802002202450d00200041046a2802002101200241286c210203400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101200241586a22020d000b0b200041086a2802002201450d0a200141286c450d0a200028020410350c0a0b200041086a28020041ffffffff0371450d09200041046a28020010350c090b200041086a2802002201450d082001410c6c450d08200041046a28020010350c080b200041086a2802002201450d072001410c6c450d07200041046a28020010350c070b02402000410c6a2802002201450d00200041046a280200220c20014104746a210e03400240200c2802082202450d00200c2802002101200241047421020340024020012d00004109470d000240200141046a220d280200220828020441ffffffff0371450d0020082802001035200d28020021080b200810350b200141106a2101200241706a22020d000b0b200c41106a21010240200c41046a28020041ffffffff0071450d00200c28020010350b2001210c2001200e470d000b0b200041086a28020041ffffffff0071450d06200028020410350c060b02402000410c6a2802002202450d00200041046a2802002101200241146c210203400240200141046a280200450d00200128020010350b200141146a21012002416c6a22020d000b0b200041086a2802002201450d05200141146c450d05200028020410350c050b02402000410c6a2802002201450d00200041046a280200220c2001411c6c6a210e03400240200c2802042201450d000240200c410c6a2802002202450d00200241047421020340024020012d00004109470d000240200141046a220d280200220828020441ffffffff0371450d0020082802001035200d28020021080b200810350b200141106a2101200241706a22020d000b0b200c41086a28020041ffffffff0071450d00200c28020410350b200c411c6a21010240200c41146a28020041ffffffff0371450d00200c28021010350b2001210c2001200e470d000b0b200041086a2802002201450d042001411c6c450d04200028020410350c040b02402000410c6a2802002201450d00200041046a280200220c200141186c6a210e03400240200c41046a28020041ffffffff0171450d00200c28020010350b0240200c41146a2802002202450d00200c28020c2101200241047421020340024020012d00004109470d000240200141046a220d280200220828020441ffffffff0371450d0020082802001035200d28020021080b200810350b200141106a2101200241706a22020d000b0b200c41186a21010240200c41106a28020041ffffffff0071450d00200c28020c10350b2001210c2001200e470d000b0b200041086a2802002201450d03200141186c450d03200028020410350c030b02402000410c6a2802002201450d00200041046a280200220c2001411c6c6a210e03400240200c2802042201450d000240200c410c6a2802002202450d00200241047421020340024020012d00004109470d000240200141046a220d280200220828020441ffffffff0371450d0020082802001035200d28020021080b200810350b200141106a2101200241706a22020d000b0b200c41086a28020041ffffffff0071450d00200c28020410350b200c411c6a21010240200c41146a280200450d00200c28021010350b2001210c2001200e470d000b0b200041086a2802002201450d022001411c6c450d02200028020410350c020b0240200041046a2802002201450d00200041086a280200450d00200110350b0240200041146a2802002201450d0002402000411c6a2802002202450d002002410c6c21020340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101200241746a22020d000b0b200041186a2802002201450d002001410c6c450d00200028021410350b200041246a280200220c450d0102402000412c6a2802002201450d00200c20014104746a210e0340200c220d41106a210c0240200d2802042201450d000240200d410c6a2802002202450d002002410c6c21020340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101200241746a22020d000b0b200d41086a2802002201450d002001410c6c450d00200d28020410350b200c200e470d000b0b200041286a28020041ffffffff0071450d01200028022410350c010b0240200041086a280200450d00200041046a28020010350b0240200041146a2802002201450d00200041186a280200450d00200110350b200041246a28020041ffffffff0071450d00200041206a28020010350b20072011470d000b0b200a450d01200a41306c450d01200b10350c010b103c000b200441e0046a24000bf70a02147f027e23004190066b22022400024002400240024020012d00000e03010200010b200241b0056a41186a2203200141196a2200290000370300200241b0056a41106a2204200141116a2205290000370300200241b0056a41086a2206200141096a2207290000370300200220012900013703b005200241d0056a41186a2208200141396a2209290000370300200241d0056a41106a220a200141316a220b290000370300200241d0056a41086a220c200141296a220d2900003703002002200141216a220e2900003703d005200241b0026a41186a220f200141d9006a2210290000370300200241b0026a41106a2211200141d1006a2212290000370300200241b0026a41086a2213200141c9006a22142900003703002002200141c1006a22152900003703b002200141f8006a2903002116200141f0006a290300211720024188056a41186a200029000037030020024188056a41106a200529000037030020024188056a41086a20072900003703002002200129000137038805200241186a2009290000370300200241106a200b290000370300200241086a200d2900003703002002200e290000370300200241d8026a41186a2010290000370300200241d8026a41106a2012290000370300200241d8026a41086a22002014290000370300200220152900003703d80220024180066a41086a200141ec006a2802003602002002200141e4006a29020037038006200241f0056a20024188056a2002200241d8026a2017201620024180066a10f10320022d00f0052101200041033a0000200241d8026a41096a20022903b005370000200241d8026a41116a2006290300370000200241d8026a41196a2004290300370000200241d8026a41216a2003290300370000200241d8026a41296a20022903d005370000200241d8026a41316a200c290300370000200241d8026a41396a200a290300370000200241d8026a41c1006a20082903003700002002410d3a00d802200241d8026a41f8006a2016370300200241d8026a41f0006a2017370300200241c1036a20014104463a0000200241b9036a200f290300370000200241d8026a41d9006a2011290300370000200241d8026a41d1006a2013290300370000200241d8026a41c9006a20022903b00237000041b0b4cc004100200241d8026a10d4010c020b200141086a28020021002001410c6a2802002104200141046a2802002103200241076a200141106a41f800109d081a2002410d3a00d802200241d8026a410172200241ff00109d081a20032004200241d8026a10d401200041ffffff3f71450d01200310350c010b200241e8056a2204200141196a2205290000370300200241d0056a41106a2206200141116a2207290000370300200241d0056a41086a2208200141096a2209290000370300200220012900013703d0052002200141286a41b002109d08220341b0056a200310d803200341d8026a200341b002109d081a20034192056a20092900003701002003419a056a2007290000370100200341a2056a200529000037010020034180023b0188052003200129000137018a05200341b0026a200341d8026a20034188056a10ac032000280200280200210142002116024020032903b8024201520d00420020032903b0052216200341b0026a41106a2903007d221720172016561b21160b2001427f2001290308221720167c221620162017541b22162001290300221720162017561b37030820032903b0022116200341d8026a41086a41063a0000200341d8026a41096a20032903d005370000200341d8026a41116a2008290300370000200341d8026a41196a2006290300370000200341f9026a200429030037000020034181036a2016503a00002003410d3a00d80241b0b4cc004100200341d8026a10d4010b20024190066a24000bb22402137f067e23004190046b22032400024002400240024002400240024002400240024002400240024020012802000e0400010203000b200341cc016a4101360200200342013702bc01200341e8d4ca003602b801200341043602ec032003419cd5ca003602e8032003200341e8036a3602c801200341b8016a41b0b4cc00104c000b20012802042101418226210420022d00000d0420022d00014101470d04200241196a2d00002104200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520032002411a6a290100370320200320043a001f200320053a001e200320063b011c200320073a001b200320083a001a200320093b01182003200a3a00172003200b3a00162003200c3b01142003200d3a00132003200e3a00122003200f3b0110200320103a000f200320113a000e200320123b010c200320133a000b200320143a000a200320153b010841d5c3c800ad4280808080c00084100122022900002116200229000821172002103541b4c4c800ad428080808030841001220229000021182002290008211920021035200320193701a801200320183701a00120032017370198012003201637019001200341b8016a20034190016a412010d5010240024020032d00b8014101460d0020034180046a4200370300200341f8036a4200370300200341f0036a4200370300200342003703e8030c010b200320032900b9013703e8032003200341d1016a290000370380042003200341c1016a2900003703f0032003200341c9016a2900003703f8030b4183262104200341086a200341e8036a412010a0080d04200341b8016a200141b002109d081a200341003b01e80320034190016a200341b8016a200341e8036a10ac03200320032900a9013703b801200320034190016a41206a2800003600bf01024002402003290390014201510d00410421020c010b200341a8016a2d000021042003290398012116200320032800bf013600ef03200320032903b8013703e8034104210220164202510d00200320032800ef033600bf01200320032903e8033703b801200421020b200320032903b801370370200320032800bf01360077200341b8016a41086a20023a0000200341c1016a2003290370370000200341b8016a41106a2003280077360000200341003a00bc012003410e3a00b801200320032f00503b00bd012003200341d2006a2d00003a00bf01200341cc016a20032902e803370200200341d4016a200341e8036a41086a290200370200200341dc016a200341e8036a41106a28020036020041b0b4cc004100200341b8016a10d401200110350c020b200341e8036a41206a200141246a280200360200200341e8036a41186a2001411c6a290200370300200341e8036a41106a200141146a290200370300200341e8036a41086a2001410c6a290200370300200320012902043703e8034182262101024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a290100370348200320013a0047200320043a0046200320053b0144200320063a0043200320073a0042200320083b0140200320093a003f2003200a3a003e2003200b3b013c2003200c3a003b2003200d3a003a2003200e3b01382003200f3a0037200320103a0036200320113b0134200320123a0033200320133a0032200320143b013041d5c3c800ad4280808080c00084100122012900002116200129000821172001103541b4c4c800ad428080808030841001220129000021182001290008211920011035200320193701a801200320183701a00120032017370198012003201637019001200341b8016a20034190016a412010d5010240024020032d00b8014101460d00200341a8016a4200370300200341a0016a420037030020034198016a420037030020034200370390010c010b200320032900b901370390012003200341d1016a2900003703a8012003200341c1016a290000370398012003200341c9016a2900003703a0010b4183262101200341306a20034190016a412010a0080d00200341b8016a41206a200341e8036a41206a280200360200200341b8016a41186a200341e8036a41186a290300370300200341b8016a41106a200341e8036a41106a290300370300200341b8016a41086a200341e8036a41086a290300370300200320032903e8033703b80120034190016a200341b8016a108b02200341086a41086a220120034199016a290000370300200341086a41106a2202200341a1016a290000370300200341086a41186a2204200341a9016a2900003703002003200329009101370308024020032d0090014101460d00200341f0006a41186a2004290300370300200341f0006a41106a2002290300370300200341f0006a41086a20012903003703002003200329030837037041d5c3c800ad4280808080c000842216100122012900002117200129000821182001103541b4c4c800ad42808080803084221910012201290000211a2001290008211b200110352003201b3701a8012003201a3701a00120032018370198012003201737019001200341b8016a20034190016a412010d5010240024020032d00b8014101460d004200211741002101410021024100210441002105410021064100210741002108410021094100210a4100210b4100210c4100210d4100210e4100210f410021104100211141002112410021130c010b200341c0016a2d0000210e200341c1016a2f0000210d200341c3016a2d0000210c200341c4016a2d0000210b200341c5016a2f0000210a200341c7016a2d00002109200341c8016a2d00002108200341c9016a2f00002107200341cb016a2d00002106200341cc016a2d00002105200341cd016a2f00002104200341cf016a2d00002102200341d0016a2d00002101200341d1016a290000211720032f00b901211320032d00bb01211220032d00bc01211120032f00bd01211020032d00bf01210f0b200341d5016a2017370000200341d4016a20013a0000200341d3016a20023a0000200341d1016a20043b0000200341b8016a41186a220220053a0000200341cf016a20063a0000200341cd016a20073b0000200341cc016a20083a0000200341cb016a20093a0000200341c9016a200a3b0000200341b8016a41106a2204200b3a0000200341c7016a200c3a0000200341c5016a200d3b0000200341c4016a200e3a0000200341c3016a200f3a0000200341c1016a20103b0000200341b8016a41086a220520113a0000200320123a00bf01200320133b00bd01200341013a00bc012003410e3a00b80141b0b4cc004100200341b8016a10d4012002200341f0006a41186a2903003703002004200341f0006a41106a2903003703002005200341f0006a41086a290300370300200320032903703703b801201610012201290000211620012900082117200110352019100122012900002118200129000821192001103520032019370168200320183701602003201737015820032016370150412010332201450d06200120032903b801370000200141186a2002290300370000200141106a2004290300370000200141086a2005290300370000200341d0006aad42808080808004842001ad42808080808004841002200110350c030b41812621010b200041206a410b3602002000411c6a41de98c800360200200041186a2001360200200042003703080c080b200141286a2802002104200341286a200141246a280200360200200341086a41186a2001411c6a290200370300200341086a41106a200141146a290200370300200341086a41086a2001410c6a290200370300200320012902043703084102210120022d00000d0420022d00014101470d04200241196a2d00002101200241186a2d00002105200241166a2f01002106200241156a2d00002107200241146a2d00002108200241126a2f01002109200241116a2d0000210a200241106a2d0000210b2002410e6a2f0100210c2002410d6a2d0000210d2002410c6a2d0000210e2002410a6a2f0100210f200241096a2d00002110200241086a2d00002111200241066a2f01002112200241056a2d00002113200241046a2d00002114200241026a2f0100211520032002411a6a29010037038801200320013a008701200320053a008601200320063b018401200320073a008301200320083a008201200320093b0180012003200a3a007f2003200b3a007e2003200c3b017c2003200d3a007b2003200e3a007a2003200f3b0178200320103a0077200320113a0076200320123b0174200320133a0073200320143a0072200320153b017041d5c3c800ad4280808080c00084100122012900002116200129000821172001103541b4c4c800ad428080808030841001220129000021182001290008211920011035200320193701a801200320183701a00120032017370198012003201637019001200341b8016a20034190016a412010d5010240024020032d00b8014101460d0020034180046a4200370300200341f8036a4200370300200341f0036a4200370300200342003703e8030c010b200320032900b9013703e8032003200341d1016a290000370380042003200341c1016a2900003703f0032003200341c9016a2900003703f8030b200341f0006a200341e8036a412010a0080d05200341b8016a41206a200341086a41206a280200360200200341b8016a41186a200341086a41186a290300370300200341b8016a41106a200341086a41106a290300370300200341b8016a41086a200341086a41086a290300370300200320032903083703b801200341e8036a200341b8016a108b024101210120032d00e8034101460d01200341e8036a41086a2d00002102200341f1036a2f00002105200341f3036a2d00002106200341f4036a2d00002107200341f5036a2f00002108200341f7036a2d00002109200341e8036a41106a2d0000210a200341f9036a2f0000210b200341fb036a2d0000210c200341fc036a2d0000210d200341fd036a2f0000210e200341ff036a2d0000210f200341e8036a41186a2d0000211020032f00e903211120032d00eb03211220032d00ec03211320032f00ed03211420032d00ef032115200320034181046a290000370168200320103a00672003200f3a00662003200e3b01642003200d3a00632003200c3a00622003200b3b01602003200a3a005f200320093a005e200320083b015c200320073a005b200320063a005a200320053b0158200320023a0057200320153a0056200320143b0154200320133a0053200320123a0052200320113b0150200341b8016a200441b002109d081a200341f2036a2003290158370100200341fa036a200329016037010020034182046a200329016837010020034180023b01e803200320032901503701ea0320034190016a200341b8016a200341e8036a10ac0302402003290390014201520d00200341b8016a41186a200341b0016a290300370300200341b8016a41106a220120034190016a41186a290300370300200341c0016a20034190016a41106a29030037030020032003290398013703b801200110d10441c4e0c600ad4280808080a001841006419ea2c000ad4280808080e0018410060240024020032903b8014201510d004194a2c000ad4280808080a0018410060c010b20032903c00110260b410021010b200320013a00bd01200341023a00bc012003410e3a00b80141b0b4cc004100200341b8016a10d401200410350b42002116200042003703080c070b200410ba0220041035410121010c040b200110ba0220011035200041206a410b3602002000411c6a41de98c800360200200041186a2004360200200042003703080c040b1045000b200410ba02200410350c010b200410ba0220041035410321010b20004200370308200041206a410b3602002000411c6a41de98c800360200200041186a2001418026723602000b420121160b2000201637030020034190046a24000bb8c20105017f037e127f087e087f23004180046b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0d00011a13120c0b0a0605040302000b20034184036a4101360200200342013702f402200341e8d4ca003602f002200341043602b4012003419cd5ca003602b0012003200341b0016a36028003200341f0026a41b0b4cc00104c000b200141106a2903002104200141086a29030021052002411a6a2901002106200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012101024020022d00000d0020022d000141014721010b2003200637038001200320073a007f200320083a007e200320093b017c2003200a3a007b2003200b3a007a2003200c3b01782003200d3a00772003200e3a00762003200f3b0174200320103a0073200320113a0072200320123b0170200320133a006f200320143a006e200320153b016c200320163a006b200320173a006a200320183b016820010d1920034188016a41186a200341e8006a41186a29030037030020034188016a41106a200341e8006a41106a29030037030020034188016a41086a200341e8006a41086a2903003703002003200329036837038801200341f0026a20034188016a10cf06200341106a20032802f002220120032802f80241b0b4cc0041004100108a0220032802102102024020032802f402450d00200110350b4103210720024101460d1a200341f0026a20034188016a10b906200341086a20032802f002220120032802f80241b0b4cc0041004100108a0220032802082102024020032802f402450d00200110350b20024101460d1a200341f0026a41186a4200370300200341f0026a41106a220e4200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f000841001220129000021062002200141086a290000370300200320063703f00220011035419cbac800ad4280808080c00084100122012900002106200341e8006a41086a2207200141086a2900003703002003200637036820011035200e20032903682206370300200341c8026a41086a2002290300370300200341c8026a41106a2006370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b220f20032902f402420020021b2206422088a741e8006c6a210d200f210202400340024002402002200d460d0041e59bc8002108410a2109410321074119210a410c210b20034188016a200241c8006a2201470d010c030b200341f0026a41186a22074200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f000841001220129000021192002200141086a290000370300200320193703f0022001103541e1b8c800ad4280808080a00184100122012900002119200341e8006a41086a2209200141086a2900003703002003201937036820011035200e2003290368370000200e41086a2009290300370000200341c8026a41086a2002290300370300200341c8026a41106a2008290300370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b221020032902f402420020021b2219422088a741e8006c6a210d20102102024002400240024002400340024002402002200d460d0041d59bc800210841102109410321074119210a410d210b20034188016a200241c8006a2201470d010c070b200341f0026a41186a22074200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008410012201290000211a2002200141086a2900003703002003201a3703f002200110354189eaca00ad4280808080f0008410012201290000211a200341e8006a41086a2209200141086a2900003703002003201a37036820011035200e2003290368370000200e41086a2009290300370000200341c8026a41086a2002290300370300200341c8026a41106a2008290300370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10fe0120032802f0022201410120011b210d41002102024020032902f402420020011b221a422088a7220141014b0d0020010e020403040b03402001410176220720026a22082002200d20084105746a20034188016a412010a0084101481b2102200120076b220141014b0d000c030b0b200141206a2102200120034188016a412010a0080d000c050b0b200d20024105746a20034188016a412010a0080d0041ce9cc8002108410d2109410321074119210a4102210b0c010b200342003703d00220034280809aa6eaafe3013703c802200320034188016a360268200320034188016a36028002200320034180026a3602f8022003200341e8006a3602f4022003200341c8026a3602f002200341b0016a20034188016a200341f0026a108c030240024020032802b0014101470d00200341bc016a2802002109200341b8016a280200210820032d00b701210c20032d00b601210b20032d00b501210a20032d00b40121070c010b410421070240200341b0016a41086a2903004201520d00200341b0016a41106a290300211b2003280280022102200341a8036a200341b0016a41186a290300370300200341a0036a201b370300200341f0026a41086a41003a0000200341f9026a200229000037000020034181036a200241086a29000037000020034189036a200241106a29000037000020034191036a200241186a290000370000200341033a00f00241b0b4cc004100200341f0026a10d4010b0b200741ff01714104460d010b201a42ffffff3f83500d01200d10350c010b200320063702b4012003200f3602b001200341f0026a41106a4200370300200341f0026a41086a22024280809aa6eaafe301370300200341003a00f002200341b0016a20034188016a20052004200341f0026a10d606200341a8036a2004370300200341a0036a2005370300200241013a0000200341f9026a20032903880137000020034181036a20034188016a41086a29030037000020034189036a20034188016a41106a29030037000020034191036a200341a0016a290300370000200341123a00f00241b0b4cc004100200341f0026a10d4010240201a42ffffff3f83500d00200d10350b02402019a72202450d00200241e8006c450d00201010350b420021060c200b2019a72202450d02200241e8006c450d02201010350c020b200141206a2102200120034188016a412010a0080d000b0b2006a72202450d1b200241e8006c450d1b200f10350c1b0b4182b23c21070240024020022d000120022d0000410047720d004183b23c2107200141046a280200220241014b0d010b20004200370308200041206a410a3602002000411c6a41a99bc800360200200041186a2007360200420121060c1d0b42002106200341e8006a41186a4200370300200341e8006a41106a22094200370300200341e8006a41086a220742003703002003420037036841a29bc800ad4280808080f0008410012208290000210420034180026a41086a2201200841086a29000037030020032004370380022008103520072001290300370300200320032903800237036841a99bc800ad4280808080a001841001220829000021042001200841086a29000037030020032004370380022008103520092003290380022204370300200341c8026a41086a2007290300370300200341c8026a41106a2004370300200341c8026a41186a2001290300370300200320032903683703c802200320023602f002200341c8026aad4280808080800484200341f0026aad4280808080c000841002200341fc026a2002360200200341f0026a41086a410d3a0000200341123a00f00241b0b4cc004100200341f0026a10d4010c0b0b200141216a2d0000210820034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a2900003703002003200129000137038801200341f0026a41206a200241206a290200370300200341f0026a41186a200241186a290200370300200341f0026a41106a200241106a290200370300200341f0026a41086a200241086a290200370300200320022902003703f002200341b0016a200341f0026a10d70602400240024020032d00b0014101460d00200341e8006a20034188016a10cf06200328026821022003200328027022013602bc02200320023602b802200341c8026a2001ad4220862002ad84100510c2010240024020032802c80222070d00410221010c010b20032802cc0221092003200341c8026a41086a280200220136028402200320073602800202400240024020014110490d002003200141706a360284022003200741106a36028002200741086a290000210620072900002104200341f0026a20034180026a10bf0220032d00f00222014102470d010b200341003602b801200342013703b001200341093602f4032003200341b8026a3602f0032003200341b0016a3602fc0320034184036a4101360200200342013702f402200341c888c2003602f0022003200341f0036a36028003200341fc036a41e88ac500200341f0026a10431a20033502b80142208620033502b001841006024020032802b401450d0020032802b00110350b410221010c010b200341b0016a41086a20034190036a290300370300200320032800f4023600f303200320032800f1023602f003200320034188036a2903003703b00120034180036a2903002119200341f0026a41086a2903002105200341a0036a290300211a20034198036a290300211b0b2009450d00200710350b20034180026a41086a2207200341b0016a41086a290300370300200320032802f0033602f002200320032800f3033600f302200320032903b00137038002024020014102460d00200341a0026a41086a2007290300370300200320032800f3023600b302200320032802f0023602b00220032003290380023703a0020b0240200328026c450d00200210350b20014102470d0141b99cc8002101410c21074103210241192108410421090c020b410221020c010b200341b8026a41086a2207200341a0026a41086a290300370300200320032802b0023602f003200320032800b3023600f303200320032903a0023703b80241032102024002400240024002400240024020084103710e03000201000b200341f0026a41186a220a4200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008410012209290000211c2002200941086a2900003703002003201c3703f00220091035419cbac800ad4280808080c0008410012209290000211c200341e8006a41086a220b200941086a2900003703002003201c3703682009103520082003290368221c370300200341c8026a41086a2002290300370300200341c8026a41106a201c370300200341c8026a41186a200b290300370300200320032903f0023703c802200341f0026a200341c8026a10be02200320032902f402420020032802f00222091b3702b40120032009410820091b3602b0012008201937030020022005370300200341a0036a201a37030020034198036a201b370300200a20032903b80237030020034190036a2007290300370300200320013a00f002200320032802f0033600f102200320032800f3033600f402200341b0016a20034188016a20042006200341f0026a10d6060c020b200341e8006a41186a4200370300200341e8006a41106a4200370300200341e8006a41086a220742003703002003420037036841a29bc800ad4280808080f0008410012208290000211c20034180026a41086a2209200841086a2900003703002003201c370380022008103520072009290300370300200320032903800237036841ceb8c800ad428080808030841001220841086a290000211c2008290000211d20081035200341c8026a41106a201d370300200341c8026a41186a201c370300200341c8026a41086a2007290300370300200320032903683703c802200341d0006a200341c8026a412010d701024020032903584200200328025022071b221d2004542208200341d0006a41106a290300420020071b221c200654201c2006511b450d0041949cc8002101410f210741192108410721090c060b200341f0026a20034188016a10d806200341f0026a41086a2107024020032d00f00222024104460d002007280200210720032802f402210120032d00f302210a20032d00f202210920032d00f10221080c060b200341e8006a41186a4200370300200341e8006a41106a4200370300200341e8006a41086a220242003703002003420037036841a29bc800ad4280808080f00084221e10012209290000211f20034180026a41086a220a200941086a2900003703002003201f37038002200910352002200a290300370300200320032903800237036841ceb8c800ad428080808030841001220941086a290000211f2009290000212020091035200341c8026a41106a22092020370300200341c8026a41186a220a201f370300200341c8026a41086a220b2002290300370300200320032903683703c8022003201c20067d2008ad7d3703f8022003201d20047d3703f002200341c8026aad4280808080800484200341f0026aad42808080808002841002200341f0026a41186a220d4200370300200341f0026a41106a2208420037030020074200370300200342003703f00241d1c4c700ad4280808080e000841001220c290000211c2007200c41086a2900003703002003201c3703f002200c103541e7c4c700ad4280808080e000841001220c290000211c2002200c41086a2900003703002003201c370368200c103520082003290368221c370300200b20072903003703002009201c370300200a2002290300370300200320032903f0023703c802200341c8006a200341c8026a412010c001200328024c210e2003280248210f200d42003703002008420037030020074200370300200342003703f002201e1001220c290000211c2007200c41086a2900003703002003201c3703f002200c10354189eaca00ad4280808080f000841001220c290000211c2002200c41086a2900003703002003201c370368200c103520082003290368221c370300200b20072903003703002009201c370300200a2002290300370300200320032903f0023703c802200341f0026a200341c8026a10fe0120032902f402420020032802f00222021b221c422088a741f4036a2207450d02200341e4003a00f102200341e40041d0860320076e22076b3a00f002200e4100200f1b2108200341f0026a200741ff017141e4004b6a2d00004180fe126c21070240201c42ffffff3f83500d002002410120021b10350b200720086a210220034180026a41086a2207200341b8026a41086a290300370300200320032802f003360268200320032800f30336006b200320032903b802370380020240024020014101470d00200341ff026a20193700002003418f036a20072d00003a0000200320053700f7022003200328006b3600f302200320032802683602f002200320032903800237008703200341b0016a200341f0026a10d006024020032802b001220120032802b801220810d10241ff017122074102460d002008ad4220862001ad8410070b024020032802b401450d00200110350b20070d01200341f0026a20022004201b2004201b5422012006201a542006201a511b22071b2006201a20071b10b00642002006201a7d2001ad7d22052004201b7d2219200456200520065620052006511b22011b21064200201920011b21040c010b200320053703c802200320193703d0022005201984500d00200320034188016a3602fc03200341b0016a20034188016a200341c8026a200341fc036a10f00220032903b0014201520d0020032903b8012105200341a8036a200341b0016a41106a290300370300200341a0036a2005370300200341f0026a41086a41003a0000200341f9026a20032903880137000020034181036a20034188016a41086a29030037000020034189036a20034188016a41106a29030037000020034191036a200341a0016a290300370000200341033a00f00241b0b4cc004100200341f0026a10d4010b20034188016a20022004200610b0060c010b02402001410171450d00200341ff026a20193700002003418f036a200341c0026a2d00003a0000200320053700f702200320032800f3033600f302200320032802f0033602f002200320032903b80237008703200341b0016a200341f0026a10d00620033502b801210620032802b0012101410110332202450d16200241013a000020064220862001ad842002ad4280808080108410022002103520032802b401450d01200110350c010b200342f0f2bd99f7edd8b4e5003703b001200341f0026a200341b0016a10e001200341b0016a20034188016a200341f0026a20052019410010ef020b200341f0026a41186a220120034188016a41186a290300370300200341f0026a41106a220720034188016a41106a290300370300200341f0026a41086a220820034188016a41086a29030037030020032003290388013703f00241a29bc800ad4280808080f0008410012202290000210620034180026a41086a200241086a29000037030020032006370380022002103541e0aec900ad4280808080b00284100122022900002106200241086a290000210420021035412010332202450d07200220032903f002370000200241186a2001290300370000200241106a2007290300370000200241086a200829030037000020032002ad42808080808004841003220129000037036820011035200341bc016a200241206a360200200320023602b8012003200341e8006a41086a3602b4012003200341e8006a3602b001200341c8026a200341b0016a107b2002103520032802d002220941206a2201417f4c0d0120032802c802210a0240024020010d0041002107410121020c010b200110332202450d08200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322020d010c160b20072008460d0020022007200810372202450d150b2002200329038002370000200241086a20034180026a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020022008200710372202450d150b20022006370010200241186a200437000002400240200741606a2009490d00200721080c010b2009415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020022007200810372202450d150b200241206a200a2009109d081a024020032802cc02450d00200a10350b2001ad4220862002ad8410072008450d0d20021035420021060c0e0b41f0b8c8004119418cb9c800103f000b1044000b103e000b20004200370308200041206a20073602002000411c6a2001360200200041186a200a411874200941ff017141107472200841ff017141087472200272360200420121060c1b0b200141216a2d0000210720034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a2900003703002003200129000137038801200341f0026a41206a200241206a290200370300200341f0026a41186a200241186a290200370300200341f0026a41106a200241106a290200370300200341f0026a41086a200241086a290200370300200320022902003703f002200341b0016a200341f0026a10d706410221020240024020032d00b0014101460d00200341f0026a20034188016a10b906200341c0006a20032802f002220220032802f80241b0b4cc0041004100108a0220032802402101024020032802f402450d00200210350b4103210220014101470d000240024002400240200741ff01710d00200341f0026a20034188016a10b80620033502f80242208620032802f0022202ad841007024020032802f402450d00200210350b200341f0026a20034188016a10ba0620033502f80242208620032802f0022202ad841007024020032802f402450d00200210350b200341f0026a20034188016a10d006024020032802f002220220032802f802220810d10241ff017122014102460d002008ad4220862002ad8410070b024020032802f402450d00200210350b20010d03200341f0026a41186a4200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008422041001220129000021062002200141086a290000370300200320063703f00220011035419cbac800ad4280808080c000842205100122012900002106200341e8006a41086a220d200141086a2900003703002003200637036820011035200820032903682206370300200341c8026a41086a220c2002290300370300200341c8026a41106a220e2006370300200341c8026a41186a220f200d290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b210920032902f402420020021b2206422088a72210450d02201041037441786a41037641016a210a2009417f7320034188016a6a210b410021024100210103400240200920026a22082d0000450d00200b2002460d03200841016a20034188016a412010a008450d030b200241e8006a2102200a200141016a2201470d000c030b0b200341f0026a20034188016a10d80620032d00f00222024104460d02200341f0026a41086a280200210120032802f402210720032d00f102410874210820032d00f202411074210920032d00f302411874210a0c040b200341f0026a200841e800109d081a2008200841e8006a201041e8006c20026b41987f6a109e081a200341e0026a200341d0036a2903002219370300200341d8026a200341c8036a290300221a370300200341c8026a41086a200341c0036a290300221b370300200320032903b803221c3703c802200341f0026a41086a41053a0000200341f9026a201c37000020034181036a201b37000020034189036a201a37000020034191036a2019370000200341123a00f00241b0b4cc004100200341f0026a10d40120064280808080707c21060b200f4200370300200e4200370300200c4200370300200342003703c802200410012201290000210420034180026a41086a2202200141086a290000370300200320043703800220011035200c200229030037030020032003290380023703c80220051001220129000021042002200141086a290000370300200320043703800220011035200e2003290380022204370300200d200c290300370300200341e8006a41106a2004370300200341e8006a41186a2002290300370300200320032903c802370368024020090d00200341e8006aad428080808080048410070c010b200341f0026a20092006422088a710b106200341e8006aad428080808080048420033502f80242208620032802f0022202ad841002024020032802f402450d00200210350b2006a72202450d00200241e8006c450d00200910350b200341f0026a20034188016a10b90620033502f80242208620032802f0022202ad841007024020032802f402450d00200210350b200341f0026a41086a41073a0000200341f9026a20032903880137000020034199036a20073a000020034181036a20034188016a41086a29030037000020034189036a20034198016a29030037000020034191036a200341a0016a290300370000200341123a00f00241b0b4cc004100200341f0026a10d401420021060c0b0b41b99cc8002107410c210141803221084180801021094100210a0b20004200370308200041206a20013602002000411c6a2007360200200041186a200a200972200872200272360200420121060c1a0b4102210141803221070240024020022d00000d0020022d00014101470d002002411a6a2901002104200241196a2d0000210a200241186a2d0000210b200241166a2f0100210c200241156a2d0000210d200241146a2d0000210e200241126a2f0100210f200241116a2d00002110200241106a2d000021112002410e6a2f010021122002410d6a2d000021132002410c6a2d000021142002410a6a2f01002115200241096a2d00002116200241086a2d00002117200241066a2f01002118200241056a2d00002121200241046a2d00002122200241026a2f01002123200341e8006a41186a22094200370300200341e8006a41106a22074200370300200341e8006a41086a220242003703002003420037036841a29bc800ad4280808080f0008410012208290000210620034180026a41086a2201200841086a29000037030020032006370380022008103520022001290300370300200320032903800237036841ef9bc800ad4280808080f000841001220829000021062001200841086a29000037030020032006370380022008103520072003290380022206370300200341c8026a41086a2002290300370300200341c8026a41106a2006370300200341c8026a41186a2001290300370300200320032903683703c802200341f0026a200341c8026a412010d50120032d00f00221012009200341f0026a41196a2900003703002007200341f0026a41116a2900003703002002200341f0026a41096a290000370300200320032900f1023703680240024020014101460d0041002102200341003a00b0010c010b200341b0016a41096a2002290300370000200341b0016a41116a2007290300370000200341b0016a41196a200929030037000041012102200341013a00b001200320032903683700b1010b20034189036a200437000020034188036a200a3a000020034187036a200b3a000020034185036a200c3b000020034184036a200d3a000020034183036a200e3a000020034181036a200f3b000020034180036a20103a0000200341ff026a20113a0000200341fd026a20123b0000200341fc026a20133a0000200341fb026a20143a0000200341f9026a20153b0000200341f8026a20163a0000200320173a00f702200320183b00f502200320213a00f402200320223a00f302200320233b00f102200341013a00f002024020020d0041bf9bc8002108410a2102410321014180b2c00021070c020b410321010240200341b0016a410172200341f0026a410172412010a008450d0041bf9bc8002108410a21024180b2c00021070c020b200341e8006a41186a22094200370300200341e8006a41106a22244200370300200341e8006a41086a220242003703002003420037036841a29bc800ad4280808080f0008410012225290000210620034180026a41086a2208202541086a29000037030020032006370380022025103520022008290300370300200320032903800237036841f69bc800ad4280808080c000841001222529000021062008202541086a2900003703002003200637038002202510352007200329038002370000200741086a2008290300370000200341c8026a41086a2002290300370300200341c8026a41106a2024290300370300200341c8026a41186a2009290300370300200320032903683703c802200341f0026a200341c8026a412010d50120032d00f00221252009200341f0026a41196a2900003703002024200341f0026a41116a2900003703002002200341f0026a41096a290000370300200320032900f102370368410121080240024020254101460d0041002108200341003a00b0010c010b200341b0016a41096a2002290300370000200341b0016a41116a2024290300370000200341b0016a41196a2009290300370000200341013a00b001200320032903683700b1010b20034189036a200437000020034188036a200a3a000020034187036a200b3a000020034185036a200c3b000020034184036a200d3a000020034183036a200e3a000020034181036a200f3b000020034180036a20103a0000200341ff026a20113a0000200341fd026a20123b0000200341fc026a20133a0000200341fb026a20143a0000200341f9026a20153b0000200341f8026a20163a0000200320173a00f702200320183b00f502200320213a00f402200320223a00f302200320233b00f102200341013a00f002024002402008450d00200341b0016a410172200341f0026a410172412010a008450d010b41b89bc8002108410721024180b2c40021070c020b42002106200341e8006a41186a22084200370300200341e8006a41106a22094200370300200341e8006a41086a220142003703002003420037036841a29bc800ad4280808080f00084220510012224290000211920034180026a41086a2202202441086a2900003703002003201937038002202410352001200229030037030020032003290380023703684189eaca00ad4280808080f000841001222429000021192002202441086a2900003703002003201937038002202410352007200329038002370000200741086a22242002290300370000200341c8026a41086a22252001290300370300200341c8026a41106a22262009290300370300200341c8026a41186a22272008290300370300200320032903683703c802200341c8026aad42808080808004842219100720084200370300200942003703002001420037030020034200370368200510012228290000211a2002202841086a2900003703002003201a370380022028103520012002290300370300200320032903800237036841f69bc800ad4280808080c0008410012228290000211a2002202841086a2900003703002003201a3703800220281035200720032903800237000020242002290300370000202520012903003703002026200929030037030020272008290300370300200320032903683703c8022019100720084200370300200942003703002001420037030020034200370368200510012228290000211a2002202841086a2900003703002003201a370380022028103520012002290300370300200320032903800237036841ef9bc800ad4280808080f0008410012228290000211a2002202841086a2900003703002003201a3703800220281035200720032903800237000020242002290300370000202520012903003703002026200929030037030020272008290300370300200320032903683703c8022019100720084200370300200942003703002001420037030020034200370368200510012228290000211a2002202841086a2900003703002003201a37038002202810352001200229030037030020032003290380023703684188aec900ad4280808080d0008410012228290000211a2002202841086a2900003703002003201a3703800220281035200720032903800237000020242002290300370000202520012903003703002026200929030037030020272008290300370300200320032903683703c8022019100720084200370300200942003703002001420037030020034200370368200510012228290000211a2002202841086a2900003703002003201a370380022028103520012002290300370300200320032903800237036841e1b8c800ad4280808080a0018410012228290000211a2002202841086a2900003703002003201a3703800220281035200720032903800237000020242002290300370000202520012903003703002026200929030037030020272008290300370300200320032903683703c802201910072008420037030020094200370300200142003703002003420037036820051001222829000021052002202841086a29000037030020032005370380022028103520012002290300370300200320032903800237036841e0aec900ad4280808080b002841001222829000021052002202841086a290000370300200320053703800220281035200720032903800237000020242002290300370000202520012903003703002026200929030037030020272008290300370300200320032903683703c8022019100820034191036a2004370000200341f0026a41206a200a3a00002003418f036a200b3a00002003418d036a200c3b00002003418c036a200d3a00002003418b036a200e3a000020034189036a200f3b0000200341f0026a41186a20103a000020034187036a20113a000020034185036a20123b000020034184036a20133a000020034183036a20143a000020034181036a20153b0000200341f0026a41106a20163a0000200341ff026a20173a0000200341fd026a20183b0000200341fc026a20213a0000200341fb026a20223a0000200341f9026a20233b0000200341f0026a41086a410e3a0000200341123a00f00241b0b4cc004100200341f0026a10d4010c0a0b0b20004200370308200041206a20023602002000411c6a2008360200200041186a2007200172360200420121060c190b200141246a280200210f200341c8016a200141196a290000370300200341c0016a200141116a290000370300200341b8016a200141096a290000370300200320012900013703b0014102210a2001412c6a280200210c200141286a280200210e4100210b20022d0000417f6a220d41024b0d01200141306a3502002104410021094100210102400240200d0e03000401000b200241086a2802004101742002410c6a2802004d0d024100210941002101200241046a28020041ff01710d030b200341e8006a41186a4200370300200341e8006a41106a22074200370300200341e8006a41086a220142003703002003420037036841a29bc800ad4280808080f0008410012208290000210620034180026a41086a2202200841086a29000037030020032006370380022008103520012002290300370300200320032903800237036841f69bc800ad4280808080c000841001220829000021062002200841086a29000037030020032006370380022008103520072003290380022206370300200341c8026a41086a2001290300370300200341c8026a41106a2006370300200341c8026a41186a2002290300370300200320032903683703c8024100210b200341386a200341c8026a412041b0b4cc0041004100108a024103210a4180322101024020032802384101470d0041a39cc8002108410e21074180801821090c030b0240200f41024f0d0041a99bc8002108410a21074180803c21090c030b200341e8006a41186a22084200370300200341e8006a41106a22094200370300200341e8006a41086a220142003703002003420037036841a29bc800ad4280808080f0008422051001220a290000210620034180026a41086a2202200a41086a2900003703002003200637038002200a103520012002290300370300200320032903800237036841a99bc800ad4280808080a001841001220a29000021062002200a41086a2900003703002003200637038002200a10352007200329038002370000200741086a220b2002290300370000200341c8026a41086a220d2001290300370300200341c8026a41106a22102009290300370300200341c8026a41186a22112008290300370300200320032903683703c8022003200f3602f002200341c8026aad42808080808004842206200341f0026aad4280808080c000841002200341f0026a200341b0016a10d806024020032d00f002220a4104470d002008420037030020094200370300200142003703002003420037036820051001220a29000021052002200a41086a2900003703002003200537038002200a103520012002290300370300200320032903800237036841f69bc800ad4280808080c000841001220a29000021052002200a41086a2900003703002003200537038002200a10352007200329038002370000200b2002290300370000200d20012903003703002010200929030037030020112008290300370300200320032903683703c802412010332202450d01200220032903b001370000200241186a200341b0016a41186a220b290300370000200241106a200341b0016a41106a220d290300370000200241086a200341b0016a41086a220f29030037000020062002ad4280808080800484100220021035200341e8006a41186a22094200370300200341e8006a41106a220a4200370300200341e8006a41086a220842003703002003420037036841a29bc800ad4280808080f00084220510012201290000211920034180026a41086a2202200141086a29000037030020032019370380022001103520082002290300370300200320032903800237036841ef9bc800ad4280808080f000841001220129000021192002200141086a2900003703002003201937038002200110352007200329038002370000200741086a22102002290300370000200341c8026a41086a22112008290300370300200341c8026a41106a2212200a290300370300200341c8026a41186a22132009290300370300200320032903683703c802412010332201450d01200120032903b001370000200141186a200b290300370000200141106a200d290300370000200141086a200f29030037000020062001ad4280808080800484100220011035200341f0026a41186a2004422086200ead841009220141186a290000370300200341f0026a41106a200141106a290000370300200341f0026a41086a200141086a290000370300200320012900003703f0022001103520094200370300200a4200370300200842003703002003420037036820051001220129000021042002200141086a2900003703002003200437038002200110352008200229030037030020032003290380023703684188aec900ad4280808080d000841001220129000021042002200141086a290000370300200320043703800220011035200720032903800237000020102002290300370000201120082903003703002012200a29030037030020132009290300370300200320032903683703c802412010332202450d01200220032903f002370000200241186a200341f0026a41186a290300370000200241106a200341f0026a41106a290300370000200241086a200341f0026a41086a220129030037000020062002ad4280808080800484100220021035200141003a0000200341f9026a20032903b00137000020034181036a200341b0016a41086a29030037000020034189036a200341b0016a41106a29030037000020034191036a200341b0016a41186a290300370000200341123a00f00241b0b4cc004100200341f0026a10d401200c450d07200e1035420021060c080b200341f0026a41086a280200210720032802f402210820032d00f102410874210120032d00f202411074210920032d00f302411874210b0c020b1045000b41002109410021010b0240200c450d00200e10350b20004200370308200041206a20073602002000411c6a2008360200200041186a200b200972200172200a72360200420121060c150b20032002411a6a290100370380014102210a2003200241026a29010037036820032002410a6a2901003703702003200241126a2901003703784101210b410021010240024002400240024020022d000041004720022d0001410147720d00200341b0016a41186a200341e8006a41186a290300370300200341b0016a41106a200341e8006a41106a290300370300200341b0016a41086a200341e8006a41086a2202290300370300200320032903683703b001200341f0026a41186a4200370300200341f0026a41106a220f4200370300200341f0026a41086a22074200370300200342003703f00241a29bc800ad4280808080f000841001220829000021062007200841086a290000370300200320063703f002200810354189eaca00ad4280808080f000841001220829000021062002200841086a2900003703002003200637036820081035200f20032903682206370300200341c8026a41086a2007290300370300200341c8026a41106a2006370300200341c8026a41186a2002290300370300200320032903f0023703c802200341f0026a200341c8026a10fe0120032802f0022202410120021b210941f2dfca00210c4109210d4103210a4119210e0240024020032902f402420020021b2206422088a7220241014b0d0020020e020401040b4100210103402002410176220720016a22082001200920084105746a200341b0016a412010a0084101481b2101200220076b220241014b0d000b0b200920014105746a200341b0016a412010a0080d02200341f0026a200341b0016a10b806200341c8026a20032802f002220720032802f80210b40220032902cc02210420032802c8022201410820011b2102024020032802f402450d00200710350b2004420020011b210402402002450d002004422088a72210450d00200341f0026a41186a22084200370300200341f0026a41106a220a4200370300200341f0026a41086a22014200370300200342003703f00241d1c4c700ad4280808080e000841001220729000021052001200741086a290000370300200320053703f0022007103541e7c4c700ad4280808080e00084100122072900002105200341e8006a41086a220b200741086a2900003703002003200537036820071035200f2003290368370000200f41086a200b290300370000200341c8026a41086a22072001290300370300200341c8026a41106a200a290300370300200341c8026a41186a2008290300370300200320032903f0023703c802200341306a200341c8026a412010c00120022802002003280234410020032802301b4b0d00200342f0f2bd99f7edd8b4e5003703c802200341f0026a200341c8026a108106200341c8026a200341f0026a200341b0016a2002290308200241106a290300410110e6022007280200210d20032802cc02210c20032d00cb02210720032d00ca02210b20032d00c902210e024020032d00c802220a4104470d002002200241186a2010417f6a220141186c109e08210802402001450d00200341f0026a200341b0016a10b80620032802f0022102200320032802f8023602cc02200320023602c80220082001200341c8026a109603024020032802f402450d00200210350b4104210a2004a72202450d04200241186c450d04200810350c040b200341f0026a200341b0016a10b80620033502f80242208620032802f0022201ad841007024020032802f402450d00200110350b200442ffffffff0f8321044104210a0b2004a72201450d03200141186c450d03200210350c030b02402004a72201450d00200141186c450d00200210350b0240200642ffffff3f83500d00200910350b41b19cc800210c4108210d4103210a4119210e4105210b0c030b0c020b0b0240200642ffffff3f83500d00200910350b42002106200a4104460d010b200041206a200d3602002000411c6a200c360200200041186a2007411874200b41ff017141107472200e41ff017141087472200a72360200420121060b200042003703080c140b20012d0001210a20032002411a6a29010037038001410221012003200241026a29010037036820032002410a6a2901003703702003200241126a29010037037802400240024020022d00014101470d0020022d000041ff01710d00200341b0016a41186a200341e8006a41186a290300370300200341b0016a41106a200341e8006a41106a290300370300200341b0016a41086a200341e8006a41086a2202290300370300200320032903683703b001200341f0026a41186a4200370300200341f0026a41106a22084200370300200341f0026a41086a22014200370300200342003703f00241a29bc800ad4280808080f000841001220729000021062001200741086a290000370300200320063703f002200710354189eaca00ad4280808080f000841001220729000021062002200741086a2900003703002003200637036820071035200820032903682206370300200341c8026a41086a2001290300370300200341c8026a41106a2006370300200341c8026a41186a2002290300370300200320032903f0023703c802200341f0026a200341c8026a10fe0120032802f0022201410120011b21094100210202400240024020032902f402420020011b2206422088a7220141014b0d0020010e020201020b03402001410176220720026a22082002200920084105746a200341b0016a412010a0084101481b2102200120076b220141014b0d000b0b200920024105746a200341b0016a412010a0080d00200a41ff01710d02200341013a00c802200341f0026a200341b0016a10b30620033502f802210420032802f0022101410110332202450d0c200241013a000020044220862001ad842002ad4280808080108410022002103520032802f402450d03200110350c030b02402006a72202450d00200241ffffff3f71450d00200910350b410321010b20004200370308200041206a41093602002000411c6a41f2dfca00360200200041186a20014180b20472360200420121060c150b200341023a00c802200341f0026a200341b0016a10b30620033502f802210420032802f0022101410110332202450d09200241023a000020044220862001ad842002ad4280808080108410022002103520032802f402450d00200110350b200341f0026a41086a410c3a0000200341f9026a20032903b00137000020034181036a200341b0016a41086a29030037000020034189036a200341c0016a29030037000020034191036a200341c8016a29030037000020034199036a200a3a0000200341123a00f00241b0b4cc004100200341f0026a10d401200642ffffff3f83500d0120091035420021060c020b20012d0001210c200341b0016a41206a2208200141246a280200360200200341b0016a41186a22092001411c6a290200370300200341b0016a41106a220a200141146a290200370300200341b0016a41086a220b2001410c6a2902003703002003200141046a2902003703b00120032002411a6a2901003703e002410221012003200241026a2901003703c80220032002410a6a2901003703d0022003200241126a2901003703d80241002107024020022d000041004720022d000141014772450d000c050b20034180026a41186a200341c8026a41186a29030037030020034180026a41106a200341c8026a41106a29030037030020034180026a41086a200341c8026a41086a290300370300200320032903c80237038002200341f0026a41206a2008280200360200200341f0026a41186a2009290300370300200341f0026a41106a200a290300370300200341f0026a41086a200b290300370300200320032903b0013703f002200341c8026a200341f0026a108b02200341e8006a41086a200341d1026a290000370300200341e8006a41106a200341d9026a290000370300200341e8006a41186a200341e1026a290000370300200320032900c90237036820032d00c8024101460d0220034188016a41186a200341e8006a41186a29030037030020034188016a41106a200341e8006a41106a29030037030020034188016a41086a200341e8006a41086a22022903003703002003200329036837038801200341f0026a41186a4200370300200341f0026a41106a22084200370300200341f0026a41086a22014200370300200342003703f00241a29bc800ad4280808080f000841001220729000021062001200741086a290000370300200320063703f0022007103541e1b8c800ad4280808080a001841001220729000021062002200741086a2900003703002003200637036820071035200820032903682206370300200341c8026a41086a2001290300370300200341c8026a41106a2006370300200341c8026a41186a2002290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b220a20032902f402420020021b2206422088a741e8006c6a2107200a21020340024020022007470d0041c99bc8002108410c21024180803821070c050b024020034188016a200241c8006a2201460d00200141206a2102200120034188016a412010a0080d010b0b200341f0026a41186a22074200370300200341f0026a41106a22094200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f000841001220129000021042002200141086a290000370300200320043703f002200110354189eaca00ad4280808080f00084100122012900002104200341e8006a41086a220b200141086a290000370300200320043703682001103520082003290368370000200841086a200b290300370000200341c8026a41086a2002290300370300200341c8026a41106a2009290300370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10fe0120032802f0022201410120011b2109410021020240024002400240024020032902f402420020011b2204422088a7220141014b0d0020010e020201020b03402001410176220720026a22082002200920084105746a20034180026a412010a0084101481b2102200120076b220141014b0d000b0b200920024105746a20034180026a412010a0080d00200c41ff01710d01200341013a00c802200341f0026a20034188016a20034180026a10b20620033502f802210520032802f0022101410110332202450d0a200241013a000020054220862001ad842002ad4280808080108410022002103520032802f402450d02200110350c020b41f2dfca00210841092102418080042107200442ffffff3f83500d05200910350c050b200341023a00c802200341f0026a20034188016a20034180026a10b20620033502f802210520032802f0022101410110332202450d08200241023a000020054220862001ad842002ad4280808080108410022002103520032802f402450d00200110350b200341f0026a41086a410b3a0000200341f9026a20032903880137000020034181036a20034188016a41086a29030037000020034189036a20034188016a41106a29030037000020034191036a20034188016a41186a29030037000020034199036a200329038002370000200341a1036a20034180026a41086a290300370000200341a9036a20034180026a41106a290300370000200341b1036a20034180026a41186a290300370000200341123a00f002200341b9036a200c3a000041b0b4cc004100200341f0026a10d4010240200442ffffff3f83500d00200910350b2006a72202450d00200241e8006c450d00200a10350b420021060b200020063703080c100b410121010c010b410321012006a72209450d00200941e8006c450d00200a10350b200041206a20023602002000411c6a2008360200200041186a20074180803c712001724180327236020020004200370308420121060c0d0b4102210702400240024020022d00000d0020022d00014101470d00200141046a2802002118200241196a2d00002101200241186a2d00002107200241166a2f01002108200241156a2d00002109200241146a2d0000210a200241126a2f0100210b200241116a2d0000210c200241106a2d0000210d2002410e6a2f0100210e2002410d6a2d0000210f2002410c6a2d000021102002410a6a2f01002111200241096a2d00002112200241086a2d00002113200241066a2f01002114200241056a2d00002115200241046a2d00002116200241026a2f0100211720032002411a6a2901003703c801200320013a00c701200320073a00c601200320083b01c401200320093a00c3012003200a3a00c2012003200b3b01c0012003200c3a00bf012003200d3a00be012003200e3b01bc012003200f3a00bb01200320103a00ba01200320113b01b801200320123a00b701200320133a00b601200320143b01b401200320153a00b301200320163a00b201200320173b01b001200341f0026a200341b0016a10d00620032802f002220120032802f80210d10241ff01712102024020032802f402450d00200110350b4103210720020d00200341f0026a41186a4200370300200341f0026a41106a22074200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008422041001220129000021062002200141086a290000370300200320063703f00220011035419cbac800ad4280808080c000842205100122012900002106200341e8006a41086a220b200141086a2900003703002003200637036820011035200720032903682206370300200341c8026a41086a22082002290300370300200341c8026a41106a220c2006370300200341c8026a41186a2209200b290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022201410820011b210a410b210202400240201820032902f402420020011b2206422088a72201490d0041db9cc800210141833221070c010b41803221070240200a201841e8006c6a220d2d00000d0041e683ca0021010c010b0240200341b0016a200d41016a2202460d002002200341b0016a412010a008450d0041d483ca002101411221020c010b200341f0026a200341b0016a10d00620033502f80242208620032802f0022202ad841007024020032802f402450d00200210350b200341f0026a200a201841e8006c6a220241e800109d081a2002200241e8006a20012018417f736a41e8006c109e081a200341e0026a200341d0036a2903002219370300200341d8026a200341c8036a290300221a370300200341c8026a41086a200341c0036a290300221b370300200320032903b803221c3703c802200341f0026a41086a41053a0000200341f9026a201c37000020034181036a201b37000020034189036a201a37000020034191036a2019370000200341123a00f00241b0b4cc004100200341f0026a10d40120064280808080707c210641843221070b20094200370300200c420037030020084200370300200342003703c80220041001220d290000210420034180026a41086a2209200d41086a2900003703002003200437038002200d10352008200929030037030020032003290380023703c80220051001220d29000021042009200d41086a2900003703002003200437038002200d1035200c2003290380022204370300200b2008290300370300200341e8006a41106a2004370300200341e8006a41186a2009290300370300200320032903c80237036802400240200a0d00200341e8006aad428080808080048410070c010b200341f0026a200a2006422088a710b106200341e8006aad428080808080048420033502f80242208620032802f0022208ad841002024020032802f402450d00200810350b2006a72208450d00200841e8006c450d00200a10350b4180322108420021062007418432460d020c010b41fa9bc8002101410b21024180b22421080b200041206a20023602002000411c6a2001360200200041186a2008200741ff017172360200420121060b200042003703080c0c0b200141c0006a2903002119200141386a290300211a200141306a2903002104200141286a290300210520034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388012002411a6a2901002106200241196a2d00002107200241186a2d00002108200241166a2f01002109200241156a2d0000210a200241146a2d0000210b200241126a2f0100210c200241116a2d0000210d200241106a2d0000210e2002410e6a2f0100210f2002410d6a2d000021102002410c6a2d000021112002410a6a2f01002112200241096a2d00002113200241086a2d00002114200241066a2f01002115200241056a2d00002116200241046a2d00002117200241026a2f0100211841012101024020022d00000d0020022d000141014721010b2003200637038001200320073a007f200320083a007e200320093b017c2003200a3a007b2003200b3a007a2003200c3b01782003200d3a00772003200e3a00762003200f3b0174200320103a0073200320113a0072200320123b0170200320133a006f200320143a006e200320153b016c200320163a006b200320173a006a200320183b016802400240024020010d00200341b0016a41186a200341e8006a41186a290300370300200341b0016a41106a200341e8006a41106a290300370300200341b0016a41086a200341e8006a41086a290300370300200320032903683703b001200341f0026a20034188016a10cf06200341286a20032802f002220220032802f80241b0b4cc0041004100108a0220032802282101024020032802f402450d00200210350b4103210220014101460d01200341f0026a20034188016a10b906200341206a20032802f002220720032802f80241b0b4cc0041004100108a0220032802202101024020032802f402450d00200710350b20014101460d01200341f0026a41186a4200370300200341f0026a41106a220b4200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f000841001220129000021062002200141086a290000370300200320063703f00220011035419cbac800ad4280808080c00084100122012900002106200341e8006a41086a2207200141086a2900003703002003200637036820011035200b20032903682206370300200341c8026a41086a2002290300370300200341c8026a41106a2006370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b220c20032902f402420020021b2206422088a741e8006c6a210a200c2102024003402002200a460d0141e59bc8002108410a2109410c210720034188016a200241c8006a2201460d08200141206a2102200120034188016a412010a0080d000c080b0b200341f0026a41186a22074200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008410012201290000211b2002200141086a2900003703002003201b3703f0022001103541e1b8c800ad4280808080a0018410012201290000211b200341e8006a41086a2209200141086a2900003703002003201b37036820011035200b2003290368370000200b41086a2009290300370000200341c8026a41086a2002290300370300200341c8026a41106a2008290300370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f0022202410820021b220e20032902f402420020021b221b422088a741e8006c6a210a200e2102024003402002200a460d0141d59bc800210841102109410d210720034188016a200241c8006a2201460d07200141206a2102200120034188016a412010a0080d000c070b0b200341f0026a41186a22074200370300200341f0026a41106a22084200370300200341f0026a41086a22024200370300200342003703f00241a29bc800ad4280808080f0008410012201290000211c2002200141086a2900003703002003201c3703f002200110354189eaca00ad4280808080f0008410012201290000211c200341e8006a41086a2209200141086a2900003703002003201c37036820011035200b2003290368370000200b41086a2009290300370000200341c8026a41086a2002290300370300200341c8026a41106a2008290300370300200341c8026a41186a2007290300370300200320032903f0023703c802200341f0026a200341c8026a10fe014101210720032802f0022201410120011b210b41f2dfca0021084109210941002102024020032902f402420020011b221c422088a7220d41014b0d00200d0e020503050b200d210103402001410176220720026a220a2002200b200a4105746a20034188016a412010a0084101481b2102200120076b220141014b0d000c030b0b410221020b41c59cc800210841092109410321070c050b0240200b20024105746a20034188016a412010a0080d0041ce9cc8002108410d2109410221070c020b410121074100210202400240200d41014b0d00200d0e020301030b0340200d410176220120026a220a2002200b200a4105746a200341b0016a412010a0084101481b2102200d20016b220d41014b0d000b0b200b20024105746a200341b0016a412010a0080d01200341f0026a200341b0016a10d006200341186a20032802f002220120032802f80241b0b4cc0041004100108a0220032802182102024020032802f402450d00200110350b024020024101470d0041859cc8002108410f2109410821070c020b200341f0026a200341b0016a10d00620033502f802211d20032802f0022101410110332202450d00200241003a0000201d4220862001ad842002ad42808080801084100220021035024020032802f402450d00200110350b200320063702cc022003200c3602c802200341a0036a201937030020034189036a2202200341b0016a41186a220129030037000020034181036a2207200341b0016a41106a2208290300370000200341f9026a2209200341b0016a41086a220a2903003700002003201a37039803200320032903b0013700f102200341013a00f002200341c8026a20034188016a20052004200341f0026a10d606200341c8036a2004370300200341c0036a2005370300200341f0026a41086a41023a00002009200329038801370000200720034188016a41086a290300370000200220034188016a41106a29030037000020034191036a20034188016a41186a29030037000020034199036a20032903b001370000200341a1036a200a290300370000200341a9036a2008290300370000200341b1036a2001290300370000200341123a00f00241b0b4cc004100200341f0026a10d4010240201c42ffffff3f83500d00200b10350b0240201ba72202450d00200241e8006c450d00200e10350b420021060c050b103c000b201c42ffffff3f83500d00200b10350b201ba72202450d00200241e8006c450d00200e10350b02402006a72202450d00200241e8006c450d00200c10350b410321020b200041206a20093602002000411c6a2008360200200041186a200741107420027241803272360200420121060b200042003703080c050b410221070240024020022d00000d0020022d00014101470d002002411a6a2901002106200241196a2d00002108200241186a2d0000210a200241166a2f0100210b200241156a2d0000210c200241146a2d0000210d200241126a2f0100210e200241116a2d0000210f200241106a2d000021102002410e6a2f010021112002410d6a2d000021122002410c6a2d000021132002410a6a2f01002114200241096a2d00002115200241086a2d00002116200241066a2f01002117200241056a2d00002118200241046a2d00002121200241026a2f010021222003200141046a28020022093602a002200341f0026a41186a4200370300200341f0026a41106a22234200370300200341f0026a41086a22014200370300200342003703f00241a29bc800ad4280808080f0008422041001220229000021052001200241086a290000370300200320053703f00220021035419cbac800ad4280808080c000842205100122072900002119200341e8006a41086a2202200741086a2900003703002003201937036820071035202320032903682219370300200341c8026a41086a22232001290300370300200341c8026a41106a22242019370300200341c8026a41186a22252002290300370300200320032903f0023703c802200341f0026a200341c8026a10be0220032802f002210120032902f4022119200341a4016a2006370200200341a3016a20083a0000200341a2016a200a3a000020034188016a41186a200b3b01002003419f016a200c3a00002003419e016a200d3a00002003419c016a200e3b01002003419b016a200f3a00002003419a016a20103a000020034188016a41106a20113b010020034197016a20123a000020034196016a20133a000020034194016a20143b010020034193016a20153a000020034192016a20163a000020034188016a41086a20173b0100200320183a008f01200320213a008e01200320223b018c012001410820011b21082003200341a0026a360288014183322107024020092019420020011b2206422088a7220a4f0d0002402008200941e8006c6a220141c8006a220c20034188016a410472220b460d00200c200b412010a0080d010b20012d00002107200320012800013602682003200141046a28000036006b200141106a2903002119200141086a290300211a200341b0016a200141186a41d000109d081a2001200141e8006a2009417f73200a6a41e8006c109e081a0240024020074101470d00200341ff026a20193700002003418f036a200341b0016a41086a2d00003a00002003201a3700f7022003200328006b3600f302200320032802683602f002200320032903b00137008703200341c8026a200341f0026a10d00620033502d00242208620032802c8022201ad84100720032802cc02450d01200110350c010b2003201a370380022003201937038802201a201984500d002003200b3602b802200341c8026a200b20034180026a200341b8026a10f00220032903c8024201520d0020032903d0022119200341a8036a200341c8026a41106a290300370300200341a0036a2019370300200341f0026a41086a41003a0000200341f9026a200b29000037000020034181036a200b41086a29000037000020034189036a200b41106a29000037000020034191036a200b41186a290000370000200341033a00f00241b0b4cc004100200341f0026a10d4010b20064280808080707c2106200341f8026a41043a0000200341f9026a200329028c0137000020034181036a20034194016a29020037000020034189036a2003419c016a29020037000020034191036a200341a4016a290200370000200341123a00f00241b0b4cc004100200341f0026a10d40141843221070b200341e8006a41186a4200370300200341e8006a41106a220a42003703002002420037030020034200370368200410012209290000210420034180026a41086a2201200941086a29000037030020032004370380022009103520022001290300370300200320032903800237036820051001220929000021042001200941086a290000370300200320043703800220091035200a2003290380022204370300202320022903003703002024200437030020252001290300370300200320032903683703c8020240024020080d00200341c8026aad428080808080048410070c010b200341f0026a20082006422088a710b106200341c8026aad428080808080048420033502f80242208620032802f0022202ad841002024020032802f402450d00200210350b2006a72202450d00200241e8006c450d00200810350b420021062007418432460d010b2000411c6a41db9cc800ad4280808080b00184370200200041186a200741ff017141803272360200420121060b200042003703080c040b410221070b41c59cc8002108410921094119210a4103210b0b200041206a20093602002000411c6a2008360200200041186a200c411874200b41ff017141107472200a41ff017141087472200741ff017172360200420121060b200042003703080b2000200637030020034180046a24000bbb6504147f017e037f027e230041c0046b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e0a00010203040506070809000b200341e4016a4101360200200342013702d401200341e8d4ca003602d00120034104360284042003419cd5ca0036028004200320034180046a3602e001200341d0016a41b0b4cc00104c000b200141246a2802002104200341c8006a41186a200141196a290000370300200341c8006a41106a200141116a290000370300200341c8006a41086a200141096a29000037030020032001290001370348410a2105410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a29010037038001200320013a007f200320063a007e200320073b017c200320083a007b200320093a007a2003200a3b01782003200b3a00772003200c3a00762003200d3b01742003200e3a00732003200f3a0072200320103b0170200320113a006f200320123a006e200320133b016c200320143a006b200320153a006a200320163b0168200341a8046a200341e8006a109507200341d0016a20032802a804220120032802b00410d50120034180046a41086a2202200341da016a29010037030020034180046a41106a2206200341e2016a29010037030020034180046a41176a2207200341e9016a290000370000200320032901d201370380040240024020032d00d0014101470d0020032d00d1012108200341a8016a41176a2007290000370000200341a8016a41106a2006290300370300200341a8016a41086a200229030037030020032003290380043703a801024020032802ac04450d00200110350b20034191016a200341a8016a41086a29030037000020034199016a200341a8016a41106a29030037000020034188016a41186a200341bf016a290000370000200320083a008801200320032903a8013700890120034188016a200341c8006a412010a0080d01200341d0016a200441b002109d081a2003418a046a200341c8006a41086a29030037010020034192046a200341c8006a41106a2903003701002003419a046a200341c8006a41186a29030037010020034180023b0180042003200329034837018204200341a8016a200341d0016a20034180046a10ac0320032903a8014201510d030c250b20032802ac04450d00200110350b410321010b200410ba0241cdd7ca002108418034210741002102410021060c230b20032903b0014202510d21200341c8016a2802002105200341c4016a2802002108200341c0016a2802002201418080807871210220014180807c712106200141807e7121070c220b200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a80120034180046a41186a200141396a29000037030020034180046a41106a200141316a29000037030020034180046a41086a200141296a2900003703002003200141216a2900003703800420022d000120022d0000410047720d08200341d0016a20034180046a10950720033502d801211720032802d0012102412010332201450d07200120032903a801370000200141186a200341a8016a41186a2204290300370000200141106a200341a8016a41106a2205290300370000200141086a200341a8016a41086a220629030037000020174220862002ad842001ad4280808080800484100220011035024020032802d401450d00200210350b200341f2016a200329038004370100200341da016a2006290300370100200341e2016a2005290300370100200341ea016a2004290300370100200341fa016a20034180046a41086a29030037010020034182026a20034180046a41106a2903003701002003418a026a20034180046a41186a29030037010020034193083b01d001200320032903a8013701d20141b0b4cc004100200341d0016a10d4010c150b200141086a2802002107200141046a28020021094102210520022d00000d1d20022d00014101470d1d2001410c6a2802002118200141106a2802002119200141026a2f0100211a200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002108200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703c001200320013a00bf01200320043a00be01200320053b01bc01200320063a00bb01200320083a00ba012003200a3b01b8012003200b3a00b7012003200c3a00b6012003200d3b01b4012003200e3a00b3012003200f3a00b201200320103b01b001200320113a00af01200320123a00ae01200320133b01ac01200320143a00ab01200320153a00aa01200320163b01a801200341d0016a200341a8016a109607200341186a20032802d001220120032802d80141b0b4cc0041004100108a0220032802182102024020032802d401450d00200110350b4101210141032105411a2106024020024101470d0041fdd6ca00210441122102410621010c1f0b0240201a0d0041c0d7ca002104410d21020c1f0b41b0d7ca0021044110210241022101024020180d000c1f0b02402018201a4f0d000c1f0b410321050240201841094d0d0041a6d7ca002104410a2102410321010c1f0b201841016a210a2009210802400340200a417f6a220a4102490d012008200841206a220b412010a008210c419dd7ca0021044109210241042101200b2108200c4100480d000b0c1f0b200341086a2018ad42004280c0f4c198af0b420010840820032003290308221b4280808d93f5d7f1007c2217370388012003200341086a41086a2903002017201b54ad7c221b370390012003200341a8016a3602482003200341a8016a3602682003200341e8006a3602d8012003200341c8006a3602d401200320034188016a3602d00120034180046a200341a8016a200341d0016a108c03024002402003280280044101470d002003418c046a280200210220034180046a41086a280200210420032d008704210820032d008604210120032d008504210620032d00840421050c010b41042105024020034180046a41086a2903004201520d0020034180046a41106a290300211c2003280268210120034188026a20034180046a41186a29030037030020034180026a201c370300200341d0016a41086a41003a0000200341d9016a2001290000370000200341e1016a200141086a290000370000200341e9016a200141106a290000370000200341f1016a200141186a290000370000200341033a00d00141b0b4cc004100200341d0016a10d4010b0b200541ff01714104470d1e20034180046a200341a8016a109607200335028804211c200328028004210e200341003602d801200342013703d001410410332201450d1c200341043602d401200320013602d00120012019360000200341043602d80120014104411410372201450d1c200120173700042001410c6a201b370000200320013602d00120034294808080c0023702d4012018200341d0016a10772018410574210c410020032802d801220b6b210d20032802d401210541002106410021010340200b20016a210802400240200d20056a20066a4120490d0020032802d00121022005210a0c010b200841206a22022008490d0b200541017422042002200420024b1b220a4100480d0b0240024020050d000240200a0d00410121020c020b200a103322020d010c200b20032802d00121022005200a460d0020022005200a10372202450d1f0b2003200a3602d401200320023602d001200a21050b2002200b6a20016a2202200920016a2204290000370000200241186a200441186a290000370000200241106a200441106a290000370000200241086a200441086a2900003700002003200841206a3602d801200641606a2106200c200141206a2201470d000b200b20016a210502400240200a200b6b20016b4102490d0020032802d0012102200a21040c010b200541026a22022005490d0a200a41017422042002200420024b1b22044100480d0a02400240200a0d00024020040d00410121020c020b200410332202450d1f0c010b20032802d0012102200a2004460d002002200a200410372202450d1e0b200320043602d401200320023602d0010b2002200b6a20016a201a3b0000201c422086200ead84200541026aad4220862002ad84100202402004450d00200210350b0240200328028404450d00200e10350b0240200741ffffff3f71450d00200910350b200341da016a200341b0016a290300370100200341e2016a200341b8016a290300370100200341ea016a200341c0016a290300370100200341133b01d001200320032903a8013701d20141b0b4cc004100200341d0016a10d4010c140b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a29000037030020032001290001370388014102210120022d00000d1920022d00014101470d19200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703c001200320013a00bf01200320043a00be01200320053b01bc01200320063a00bb01200320073a00ba01200320083b01b801200320093a00b7012003200a3a00b6012003200b3b01b4012003200c3a00b3012003200d3a00b2012003200e3b01b0012003200f3a00af01200320103a00ae01200320113b01ac01200320123a00ab01200320133a00aa01200320143b01a801200341d0016a20034188016a109607200341306a20032802d001220120032802d80141b0b4cc0041004100108a0220032802302105024020032802d401450d00200110350b410e210441032101411a2102024020054101460d00418fd7ca002107410521060c1b0b200341d0016a20034188016a200341a8016a109707200341286a20032802d001220620032802d80141b0b4cc0041004100108a0220032802282105024020032802d401450d00200610350b024020054101470d0041efd6ca002107410721060c1b0b2003420037037020034280808d93f5d7f1003703682003200341a8016a3602a8042003200341a8016a3602482003200341c8006a3602d8012003200341a8046a3602d4012003200341e8006a3602d00120034180046a200341a8016a200341d0016a108c03024002402003280280044101470d002003418c046a280200210420034188046a280200210720032d008704210520032d008604210620032d008504210220032d00840421010c010b41042101024020034180046a41086a2903004201520d0020034180046a41106a29030021172003280248210220034188026a20034180046a41186a29030037030020034180026a2017370300200341d0016a41086a41003a0000200341d9016a2002290000370000200341e1016a200241086a290000370000200341e9016a200241106a290000370000200341f1016a200241186a290000370000200341033a00d00141b0b4cc004100200341d0016a10d4010b0b200141ff01714104470d1a42002117200341d0016a41186a4200370300200341d0016a41106a22044200370300200341d0016a41086a22014200370300200342003703d00141d1c4c700ad4280808080e0008410012202290000211b2001200241086a2900003703002003201b3703d0012002103541e7c4c700ad4280808080e0008410012202290000211b200341e8006a41086a2205200241086a2900003703002003201b3703682002103520042003290368221b37030020034180046a41086a200129030037030020034180046a41106a201b37030020034180046a41186a2005290300370300200320032903d00137038004200341206a20034180046a412010c0012003280224210120032802202102200341ec016a4100360200200342003703d80120034280808d93f5d7f1003703d001200342013702e40120032001410020021b3602e00120034180046a20034188016a200341a8016a1097072003280280042101200320032802880436026c20032001360268200341d0016a200341e8006a1094070240200328028404450d00200110350b200341da016a20034188016a41086a290300370100200341e2016a20034188016a41106a290300370100200341ea016a20034188016a41186a290300370100200341f2016a20032903a801370100200341fa016a200341a8016a41086a29030037010020034182026a200341a8016a41106a2903003701002003418a026a200341a8016a41186a29030037010020034193023b01d00120032003290388013701d20141b0b4cc004100200341d0016a10d4010c140b200341e8006a41186a200141196a290000370300200341e8006a41106a200141116a290000370300200341e8006a41086a200141096a2900003703002003200129000137036820034188016a41186a200141396a29000037030020034188016a41106a200141316a29000037030020034188016a41086a200141296a2900003703002003200141216a290000370388014102210120022d00000d1620022d00014101470d16200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703c001200320013a00bf01200320043a00be01200320053b01bc01200320063a00bb01200320073a00ba01200320083b01b801200320093a00b7012003200a3a00b6012003200b3b01b4012003200c3a00b3012003200d3a00b2012003200e3b01b0012003200f3a00af01200320103a00ae01200320113b01ac01200320123a00ab01200320133a00aa01200320143b01a80120034180046a200341e8006a109607200341d0016a200328028004220420032802880410e20220032802840421020240024020032802e4012207450d00200341ec016a280200210120032802e801210902402002450d00200410350b200341c8006a200341e8006a20034188016a109707200341d0016a20032802482202200328025010d00241082104200341d0016a41086a290300211b20032903d001211c20032903e801211720032802e401210820032802e00121050240200328024c450d00200210350b20080d0141e5d6ca002106410a21050c170b02402002450d00200410350b418fd7ca002106410e210541032101410521040c180b20034198046a20173703002003201c37038004200320083602940420032005360290042003201b370388042017a7210a41dcd6ca0021064100210202400240200141014b0d00410921044109210520010e021101110b03402001410176220420026a22052002200720054105746a200341a8016a412010a0084101481b2102200120046b220141014b0d000b0b4109210441092105200720024105746a200341a8016a412010a0080d0f4100210102402017422088a7220641014b0d00024020060e020010000b200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d00141002104200341d0016a21020c120b2006210203402002410176220420016a22052001200820054105746a200341a8016a412010a0084101481b2101200220046b220241014b0d000c0f0b0b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a2900003703002003200129000137038801410e210441052105410221010240024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002106200241166a2f01002107200241156a2d00002108200241146a2d00002109200241126a2f0100210a200241116a2d0000210b200241106a2d0000210c2002410e6a2f0100210d2002410d6a2d0000210e2002410c6a2d0000210f2002410a6a2f01002110200241096a2d00002111200241086a2d00002112200241066a2f01002113200241056a2d00002114200241046a2d00002115200241026a2f0100211620032002411a6a2901003703c001200320013a00bf01200320063a00be01200320073b01bc01200320083a00bb01200320093a00ba012003200a3b01b8012003200b3a00b7012003200c3a00b6012003200d3b01b4012003200e3a00b3012003200f3a00b201200320103b01b001200320113a00af01200320123a00ae01200320133b01ac01200320143a00ab01200320153a00aa01200320163b01a80120034180046a20034188016a109607200341d0016a200328028004220220032802880410e2022003280284042101024020032802e4012206450d00200341f0016a2f0100210920032802e801210720032802e001210802402001450d00200210350b20034180046a20034188016a200341a8016a109707200341d0016a200328028004220220032802880410d00220032903e801211720032802e401210120032802e00121050240200328028404450d00200210350b20010d0241e5d6ca002102410a2104410821050c0e0b02402001450d00200210350b410321010b418fd7ca0021020c0d0b200341d0016a200341a8016a109507200341c0006a20032802d001220420032802d80141b0b4cc0041004100108a0220032802402102024020032802d401450d00200410350b024020024101470d00419bd6ca002102410c2104410f21050c0b0b200341d0016a41186a4200370300200341d0016a41106a220b420037030041082104200341d0016a41086a22024200370300200342003703d00141d1c4c700ad4280808080e000841001220a290000211b2002200a41086a2900003703002003201b3703d001200a103541e7c4c700ad4280808080e000841001220a290000211b200341e8006a41086a220c200a41086a2900003703002003201b370368200a1035200b2003290368221b37030020034180046a41086a200229030037030020034180046a41106a201b37030020034180046a41186a200c290300370300200320032903d00137038004200341386a20034180046a412010c0010240200520086a220220054f0d0041a7d6ca002102410e21050c0b0b02402002200328023c410020032802381b4d0d0041d1d6ca002102410b2104410a21050c0b0b02402017422088a720094f0d0041bad6ca00210241092104410c21050c0b0b200341d0016a200341a8016a10950720033502d801211b20032802d0012104412010332202450d032002200329038801370000200241186a20034188016a41186a2205290300370000200241106a20034188016a41106a2208290300370000200241086a20034188016a41086a2209290300370000201b4220862004ad842002ad4280808080800484100220021035024020032802d401450d00200410350b200341a8016a108d02200341da016a2009290300370100200341e2016a2008290300370100200341ea016a2005290300370100200341f2016a20032903a801370100200341fa016a200341a8016a41086a29030037010020034182026a200341a8016a41106a2903003701002003418a026a200341a8016a41186a29030037010020034193083b01d00120032003290388013701d20141b0b4cc004100200341d0016a10d4010240201742ffffff3f83500d00200110350b200741ffffff3f71450d11200610350c110b200341a8016a41186a200141196a290000370300200341a8016a41106a200141116a290000370300200341a8016a41086a200141096a290000370300200320012900013703a8014182b4202101024020022d00000d0020022d00014101470d00200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a29010037039804200320013a009704200320043a009604200320053b019404200320063a009304200320073a009204200320083b019004200320093a008f042003200a3a008e042003200b3b018c042003200c3a008b042003200d3a008a042003200e3b0188042003200f3a008704200320103a008604200320113b018404200320123a008304200320133a008204200320143b01800420034188016a20034180046a200341a8016a109707200341d0016a2003280288012201200328029001220210d002024020032802e4012204450d002002ad4220862001ad841007200341d0016a41086a290300211720032903d001211b20032903e801211c0240200328028c01450d00200110350b200341d0016a200341a8016a20034180046a201b2017410010ef02200341da016a20034180046a41086a290300370100200341e2016a20034180046a41106a290300370100200341ea016a20034180046a41186a290300370100200341f2016a20032903a801370100200341fa016a200341a8016a41086a29030037010020034182026a200341a8016a41106a2903003701002003418a026a200341a8016a41186a29030037010020034193063b01d00120032003290380043701d20141b0b4cc004100200341d0016a10d401201c42ffffff3f83500d12200410350c120b0240200328028c01450d00200110350b4183b42021010b200041206a410a3602002000411c6a41e5d6ca00360200200041186a200136020020004200370308420121170c1d0b4102210120022d00000d0520022d00014101470d05200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703c001200320013a00bf01200320043a00be01200320053b01bc01200320063a00bb01200320073a00ba01200320083b01b801200320093a00b7012003200a3a00b6012003200b3b01b4012003200c3a00b3012003200d3a00b2012003200e3b01b0012003200f3a00af01200320103a00ae01200320113b01ac01200320123a00ab01200320133a00aa01200320143b01a80141f8a2cb00ad428080808080018410012201290000211720034180046a41086a200141086a29000037030020032017370380042001103541e8a5cb00ad428080808080028410012201280004210820012800002109200341ac046a2001410e6a2f00003b01002003200128000a3602a80420012f0008210a20011035412010332201450d01200120032903a801370000200141186a200341a8016a41186a290300370000200141106a200341a8016a41106a290300370000200141086a200341a8016a41086a29030037000020032001ad42808080808004841003220229000037034820021035200341dc016a200141206a360200200320013602d8012003200341c8006a41086a3602d4012003200341c8006a3602d001200341e8006a200341d0016a107b200110352003280270220641206a2202417f4c0d03200328026821070240024020020d0041002104410121010c010b200210332201450d02200221040b024002402004410f4d0d00200421050c010b200441017422054110200541104b1b22054100480d05024020040d00200510332201450d190c010b20042005460d0020012004200510372201450d180b2001200329038004370000200141086a20034180046a41086a2903003700000240024020054170714110460d00200521040c010b200541017422044120200441204b1b22044100480d0520052004460d0020012005200410372201450d180b2001200a3b00182001200836001420012009360010200120032802a80436001a2001411e6a200341ac046a2f01003b000002400240200441606a2006490d00200421050c010b2006415f4b0d05200441017422052002200520024b1b22054100480d0520042005460d0020012004200510372201450d180b200141206a20072006109d081a0240200328026c450d00200710350b0240024020020d0041002104410121070c010b200210332207450d02200221040b0240024020042002490d00200421060c010b200441017422062002200620024b1b22064100480d05024020040d00200610332207450d190c010b20042006460d0020072004200610372207450d180b200720012002109d0821042003419c016a200236020020034198016a2005360200200320013602940120032002360290012003200636028c012003200436028801200341d0016a2002ad4220862001ad84102710c20102400240024020032802d0012201450d0020032802d401210202400240200341d8016a28020022042003280290012205490d0020032802880122062001460d0120062001200510a008450d010b2002450d01200110350c010b20034194016a2105200320043602b004200320023602ac04200320013602a804200341d0016a2001200410d002024020032802e40122010d002003410036025020034201370348200341f4006a4135360200200320053602b4042003413536026c2003200341b8046a3602702003200341b4046a3602682003200341a8046a3602b8042003200341c8006a3602bc0420034194046a4102360200200342023702840420034180c9c400360280042003200341e8006a36029004200341bc046a41e88ac50020034180046a10431a20033502504220862003350248841006200328024c450d00200328024810350b20034180046a41086a2202200341a8046a41086a280200360200200320032903a804370380040240200328029801450d0020032802940110350b2005200329038004370200200541086a200228020036020020010d010b20034180046a200341a8016a109607200341d0016a2003280280042202200328028804220410e202024020032802e4012201450d002004ad4220862002ad8410070b200328028404210402402001450d00200341d8016a290300211720032903d001211b20032802e801210502402004450d00200210350b2003201b370368200320173703700240201b201784500d002003200341a8016a36024820034180046a200341a8016a200341e8006a200341c8006a10f0022003290380044201520d00200329038804211720034188026a20034180046a41106a29030037030020034180026a2017370300200341d0016a41086a41003a0000200341d9016a20032903a801370000200341e1016a200341a8016a41086a290300370000200341e9016a200341a8016a41106a290300370000200341f1016a200341c0016a290300370000200341033a00d00141b0b4cc004100200341d0016a10d4010b200341da016a200341b0016a290300370100200341e2016a200341b8016a290300370100200341ea016a200341c0016a290300370100200341930a3b01d001200320032903a8013701d20141b0b4cc004100200341d0016a10d4010240200541ffffff3f71450d00200110350b0240200328028c01450d0020032802880110350b200328029801450d1220032802940110350c120b02402004450d00200210350b418fd7ca002102410e21044180801421050c010b41afd6ca002102410b210441808034210520032802e80141ffffff3f71450d00200110350b0240200328028c01450d0020032802880110350b0240200328029801450d0020032802940110350b410321010c070b20034188016a41186a200141196a29000037030020034188016a41106a200141116a29000037030020034188016a41086a200141096a2900003703002003200129000137038801418234210120022d00000d0520022d00014101470d05200241196a2d00002101200241186a2d00002104200241166a2f01002105200241156a2d00002106200241146a2d00002107200241126a2f01002108200241116a2d00002109200241106a2d0000210a2002410e6a2f0100210b2002410d6a2d0000210c2002410c6a2d0000210d2002410a6a2f0100210e200241096a2d0000210f200241086a2d00002110200241066a2f01002111200241056a2d00002112200241046a2d00002113200241026a2f0100211420032002411a6a2901003703c001200320013a00bf01200320043a00be01200320053b01bc01200320063a00bb01200320073a00ba01200320083b01b801200320093a00b7012003200a3a00b6012003200b3b01b4012003200c3a00b3012003200d3a00b2012003200e3b01b0012003200f3a00af01200320103a00ae01200320113b01ac01200320123a00ab01200320133a00aa01200320143b01a801200341e8006a200341a8016a109507200341d0016a20032802682202200328027010d5010240024020032d00d0014101460d0041002101200341003a0080040c010b20034180046a41196a200341d0016a41196a29000037000020034180046a41096a200341d0016a41096a29000037000020034180046a41116a200341d0016a41116a29000037000041012101200341013a008004200320032900d101370081040b0240200328026c450d00200210350b200341e9016a200341a0016a290300370000200341e1016a20034198016a290300370000200341d9016a20034190016a29030037000020032003290388013700d101200341013a00d001024020010d0041833421010c060b418334210120034180046a410172200341d0016a410172412010a0080d05200341d0016a200341a8016a10950720033502d80142208620032802d0012201ad841007024020032802d401450d00200110350b200341a8016a1099020c0e0b1045000b200041186a410236020020004200370308420121170c190b1044000b103e000b410021050c010b200041206a410a3602002000411c6a41cdd7ca00360200200041186a200136020020004200370308420121170c150b20004200370308200041206a20043602002000411c6a2002360200200041186a20054180803c7120017241803472360200420121170c140b201742ffffff3f83500d00200110350b0240200741ffffff3f71450d00200610350b410321010b20004200370308200041206a20043602002000411c6a2002360200200041186a200541107420017241803472360200420121170c110b200820014105746a200341a8016a412010a00822040d0141c3d6ca002106410e2105410b21040b200a41ffffff3f71450d05200810350c050b200341d0016a41186a200341a8016a41186a290300370300200341d0016a41106a200341a8016a41106a290300370300200341d0016a41086a200341a8016a41086a290300370300200320032903a8013703d001200341d0016a21022004411f7620016a220420064b0d030b02402006200a470d0020034194046a20064101108a0120032802940421080b200820044105746a220141206a2001200620046b410574109e081a200141186a200241186a290000370000200141106a200241106a290000370000200141086a200241086a290000370000200120022900003700002003200641016a36029c04200341d0016a41186a220220034180046a41186a290300370300200341d0016a41106a20034180046a41106a290300370300200341d0016a41086a20034180046a41086a29030037030020032003290380043703d001200341c8006a200341e8006a20034188016a10970720032802482101200320032802503602ac04200320013602a804200341d0016a200341a8046a1094070240200328024c450d00200110350b0240200228020041ffffff3f71450d0020032802e40110350b200341f2016a200329038801370100200341da016a200341e8006a41086a290300370100200341e2016a200341e8006a41106a290300370100200341ea016a200341e8006a41186a290300370100200341fa016a20034188016a41086a29030037010020034182026a20034188016a41106a2903003701002003418a026a20034188016a41186a29030037010020034193043b01d001200320032903683701d201200341aa026a200341a8016a41186a290300370100200341a2026a200341a8016a41106a2903003701002003419a026a200341a8016a41086a29030037010020034192026a20032903a80137010041b0b4cc004100200341d0016a10d401200941ffffff3f71450d00200710350b420021170b200020173703080c0b0b20042006104d000b41032101200941ffffff3f71450d01200710350c010b0b200041206a20053602002000411c6a200636020020004200370308200041186a200441ff017141107420017241803472360200420121170c070b0b200041206a20043602002000411c6a200736020020004200370308200041186a2005411874200641ff017141107472200241ff017141087472200141ff017172360200420121170c050b103c000b0b0240200741ffffff3f71450d00200910350b20004200370308200041206a20023602002000411c6a2004360200200041186a2008411874200141ff017141107472200641ff017141087472200541ff017172360200420121170c020b410421014100210241002106410021070b20041035420021170240200141ff017122014104460d00200041206a20053602002000411c6a2008360200200041186a20022006418080fc07717220074180fe037172200172360200420121170b200042003703080b20002017370300200341c0046a24000bb50404057f017e017f017e0240024020012802042202450d00200128020022032d0000210420012002417f6a22053602042001200341016a3602000240200441037122064103460d00024002400240024020060e03000102000b2004410276ad21070c020b41012106024020050d000c050b20032d0001210520012002417e6a3602042001200341026a3602002005410874200472220141ffff0371418002490d04200141fcff0371410276ad21070c010b410121060240200541034f0d000c040b200341036a2d0000210520032f0001210820012002417c6a3602042001200341046a3602002008200541107472410874200472220141808004490d032001410276ad21070b410021060c020b02402004410276220841044b0d000240024020080e050002020201000b20054104490d022003350001210720012002417b6a3602042001200341056a36020020074280808080045421060c030b20054108490d01200329000121072001200241776a3602042001200341096a3602002007428080808080808080015421060c020b200841046a220541084b0d002002417e6a2102200341026a2103410021044200210741012106034002402002417f470d000c030b2003417f6a310000210920012002360204200120033602002002417f6a2102200341016a210320092004410374413871ad862007842107200441016a220441ff01712005490d000b2007427f412820084103746b413871ad885821060c010b410121060b2000200737030820002006ad3703000bf30601067f230041f0006b2102024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a2206360204410121072001200441016a360200200541f001490d06200541847e6a220541034b0d0120050e0402030405020b200041023a00000f0b200041023a00000f0b20064102490d0420042f0001210520012003417d6a3602042001200441036a3602000240200541ef014d0d00410121070c040b200041023a00000f0b20064104490d042004280001210520012003417b6a3602042001200441056a36020041012107200541ffff034b0d02200041023a00000f0b024020064104490d00200041023a000020012003417b6a3602042001200441056a3602000f0b200041023a00000f0b41002105200241003a00682003417f6a21062003417e6a210302400240034020062005460d01200241c8006a20056a200420056a220741016a2d00003a0000200120033602042001200741026a3602002002200541016a22073a00682003417f6a21032007210520074120470d000b200241c6006a20022d004a3a0000200241306a200241d7006a290000370300200241386a200241df006a290000370300200241c0006a200241e7006a2d00003a0000200220022f01483b01442002200229004f370328200228004b2105410021010c010b0240200541ff0171450d00200241003a00680b410121010b200241246a41026a2203200241c4006a41026a2d00003a0000200241086a41086a2207200241286a41086a290300370300200241086a41106a2204200241286a41106a290300370300200241086a41186a2206200241286a41186a2d00003a0000200220022f01443b01242002200229032837030820010d03200241286a41026a20032d00003a0000200241c8006a41086a2007290300370300200241c8006a41106a2004290300370300200241c8006a41186a20062d00003a0000200220022f01243b012820022002290308370348410021070b200020073a0000200020022f01283b0001200041046a2005360200200041086a2002290348370200200041036a2002412a6a2d00003a0000200041106a200241c8006a41086a290300370200200041186a200241c8006a41106a290300370200200041206a200241c8006a41186a2802003602000f0b200041023a00000f0b200041023a00000f0b200041023a00000b9f1002097f047e230041d0056b220224000240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541044b0d0620050e050102030405010b200041063a00000c090b200241a0036a200110c301024020022802a0032206450d0020022802a4032107024020012802042203450d00200241a8036a2802002108200128020022042d0000210520012003417f6a3602042001200441016a360200200541014b0d004100210902400240024020050e020100010b41002105200241003a00c0032003417f6a210a2003417e6a21030340200a2005460d02200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241f0006a41186a200241a0036a41186a290300370300200241f0006a41106a200241a0036a41106a290300370300200241f0006a41086a200241a0036a41086a290300370300200220022903a003370370410121090b200241206a41186a200241f0006a41186a290300220b370300200241206a41106a200241f0006a41106a290300220c370300200241206a41086a200241f0006a41086a290300220d37030020022002290370220e370320200020093a0001200041013a0000200041026a200e3700002000410a6a200d370000200041126a200c3700002000411a6a200b3700002000412c6a2008360100200041286a2007360100200041246a20063601000c0b0b200541ff0171450d00200241003a00c0030b200041063a0000200741ffffff3f71450d09200610350c090b200041063a00000c080b200241a0036a200110b90220022802a0032101200241f0006a200241a0036a41047241ac02109d081a024002402001411b460d00200241a0036a200241f0006a41ac02109d081a41b002103322050d010c080b200041063a00000c080b20052001360200200541046a200241a0036a41ac02109d081a200041023a0000200020022f00503b0001200041036a200241d0006a41026a2d00003a0000200041046a2005360200200041086a2002290220370200200041106a200241206a41086a290200370200200041186a200241206a41106a290200370200200041206a200241206a41186a290200370200200041286a200241206a41206a2902003702000c070b200241086a200110c401024020022802080d00200228020c2103200241a0036a200110b90220022802a0032101200241f0006a200241a0036a41047241ac02109d081a2001411b460d00200241a0036a200241f0006a41ac02109d081a41b00210332205450d0620052001360200200541046a200241a0036a41ac02109d081a200041033a0000200020022f00503b0001200041036a200241d2006a2d00003a0000200041086a2005360200200041046a20033602002000410c6a2002290220370200200041146a200241206a41086a2902003702002000411c6a200241306a290200370200200041246a200241386a2902003702002000412c6a200241c0006a2802003602000c070b200041063a00000c060b41002105200241003a00c0032003417f6a210a2003417e6a210302400240024002400340200a2005460d01200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241206a41086a200241a0036a41086a290300370300200241206a41106a200241a0036a41106a290300370300200241206a41186a200241a0036a41186a290300370300200220022903a003370320200241106a200110c40120022802100d0120012802042203450d0120022802142104200128020022092d0000210520012003417f6a3602042001200941016a360200200541014b0d014100210120050e020302030b200541ff0171450d00200241003a00c0030b200041063a00000c070b410121010b200241d0006a41186a200241206a41186a290300220b370300200241d0006a41106a200241206a41106a290300220c370300200241d0006a41086a200241206a41086a290300220d37030020022002290320220e370350200041043a00002000200e370001200041096a200d370000200041116a200c370000200041196a200b370000200041246a2004360200200041216a20013a00000c050b41002105200241003a00c0032003417f6a210a2003417e6a210302400340200a2005460d01200241a0036a20056a200420056a220941016a2d00003a0000200120033602042001200941026a3602002002200541016a22093a00c0032003417f6a21032009210520094120470d000b200241206a41086a2205200241a0036a41086a290300370300200241206a41106a2203200241a0036a41106a290300370300200241206a41186a2209200241a0036a41186a290300370300200220022903a003370320200241186a200110c4012002280218450d020c030b200541ff0171450d02200241003a00c0030c020b200041063a00000c030b200228021c2101200241d0006a41186a2009290300220b370300200241d0006a41106a2003290300220c370300200241d0006a41086a2005290300220d37030020022002290320220e370350200041053a00002000200e370001200041096a200d370000200041116a200c370000200041196a200b370000200041216a20022f004d3b0000200041236a200241cf006a2d00003a0000200041246a20013602000c020b200041063a00000c010b103c000b200241d0056a24000bc60702047f047e230041b0056b22022400024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541024b0d0320050e03010204010b200041043602000c050b20024180036a200110b9022002280280032101200241d0006a20024180036a41047241ac02109d081a024002402001411b460d0020024180036a200241d0006a41ac02109d081a41b002103322050d010c050b200041043602000c050b20052001360200200541046a20024180036a41ac02109d081a2000200536020420004101360200200041086a2002290228370200200041106a200241286a41086a290200370200200041186a200241286a41106a290200370200200041206a200241286a41186a290200370200200041286a200241286a41206a2802003602000c040b20024180036a2001109206024020022d0080034102460d00200241d0006a41206a20024180036a41206a2802002201360200200241d0006a41186a20024180036a41186a2903002206370300200241d0006a41106a20024180036a41106a2903002207370300200241d0006a41086a20024180036a41086a29030022083703002002200229038003220937035020004102360200200020093702042000410c6a2008370200200041146a20073702002000411c6a2006370200200041246a20013602000c040b200041043602000c030b200041043602000c020b20024180036a2001109206024020022d0080034102470d00200041043602000c020b200241286a41206a20024180036a41206a280200360200200241286a41186a20024180036a41186a290300370300200241286a41106a20024180036a41106a290300370300200241286a41086a20024180036a41086a290300370300200220022903800337032820024180036a200110b9022002280280032101200241d0006a20024180036a41047241ac02109d081a02402001411b460d0020024180036a200241d0006a41ac02109d081a41b00210332205450d0120052001360200200541046a20024180036a41ac02109d081a200241206a200241286a41206a2802002201360200200241186a200241286a41186a2903002206370300200241106a200241286a41106a2903002207370300200241086a200241286a41086a290300220837030020022002290328220937030020004103360200200020093702042000410c6a2008370200200041146a20073702002000411c6a2006370200200041246a2001360200200041286a20053602000c020b200041043602000c010b103c000b200241b0056a24000bbc1e03077f047e017f230041e0056b2202240002400240024002400240024002400240024002400240024020012802042203450d00200128020022042d0000210520012003417f6a3602042001200441016a360200200541084b0d0a20050e09010203040506070809010b2000410a3a00000c0a0b41002105200241003a00d0032003417f6a21062003417e6a2107024002400240034020062005460d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b200241c0006a41086a200241b0036a41086a290300370300200241c0006a41106a200241b0036a41106a290300370300200241c0006a41186a200241b0036a41186a290300370300200220022903b003370340200241b0036a200110b90220022802b003210120024180016a200241b0036a41047241ac02109d081a2001411b460d01200241b0036a20024180016a41ac02109d081a41b002103322040d02103c000b200541ff0171450d00200241003a00d0030b2000410a3a00000c0a0b20042001360200200441046a200241b0036a41ac02109d081a200241206a41186a200241c0006a41186a2903002209370300200241206a41106a200241c0006a41106a290300220a370300200241206a41086a200241c0006a41086a290300220b37030020022002290340220c370320200041013a00002000200c370001200041096a200b370000200041116a200a370000200041196a2009370000200041216a20022f001d3b0000200041236a2002411f6a2d00003a0000200041246a2004360200200041286a2002290200370200200041306a200241086a290200370200200041386a200241106a290200370200200041c0006a200241186a2802003602000c090b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041023a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c0b0b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c080b20024180016a200110c3010240024002402002280280012204450d002002280284012105200128020422074102490d0120024188016a2802002106200128020022082f0000210d20012007417e6a22033602042001200841026a36020020034104490d022008280002210320012007417a6a3602042001200841066a360200200041106a20033602002000410c6a2006360200200041086a2005360200200041046a2004360200200041026a200d3b0100200041033a0000200041146a20022902b0033702002000411c6a200241b0036a41086a290200370200200041246a200241b0036a41106a2902003702002000412c6a200241c8036a290200370200200041346a200241d0036a2902003702002000413c6a200241d8036a2902003702000c0a0b2000410a3a00000c090b2000410a3a0000200541ffffff3f71450d08200410350c080b2000410a3a0000200541ffffff3f71450d07200410350c070b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041043a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c070b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c060b41002105200241003a00d003410120036b21062003417e6a21070240024002400340200620056a450d01200241b0036a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00d0032007417f6a21072008210520084120470d000b20024180016a41086a200241b0036a41086a29030037030020024180016a41106a200241b0036a41106a29030037030020024180016a41186a200241b0036a41186a290300370300200220022903b0033703800141002105200241003a00d003200420086a2106200820036b41016a21080340200820056a450d02200241b0036a20056a200620056a220441016a2d00003a0000200120073602042001200441026a3602002002200541016a22043a00d0032007417f6a21072004210520044120470d000b200241206a41086a2201200241b0036a41086a290300370300200241206a41106a2204200241b0036a41106a290300370300200241206a41186a2205200241b0036a41186a290300370300200241c0006a41086a220720024180016a41086a290300370300200241c0006a41106a220820024180016a41106a290300370300200241c0006a41186a220320024180016a41186a290300370300200220022903b0033703202002200229038001370340200041053a000020002002290340370001200041096a2007290300370000200041116a2008290300370000200041196a2003290300370000200041216a2002290320370000200041296a2001290300370000200041316a2004290300370000200041396a2005290300370000200041c1006a20022f00003b0000200041c3006a200241026a2d00003a00000c080b200541ff0171450d01200241003a00d0030c010b200541ff0171450d00200241003a00d0030b2000410a3a00000c050b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041063a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c050b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c040b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041073a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c040b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c030b200041083a00000c020b41002105200241003a00a0012003417f6a21062003417e6a21070240034020062005460d0120024180016a20056a200420056a220841016a2d00003a0000200120073602042001200841026a3602002002200541016a22083a00a0012007417f6a21072008210520084120470d000b200241c0006a41086a20024180016a41086a2903002209370300200241c0006a41106a20024180016a41106a290300220a370300200241c0006a41186a20024180016a41186a290300220b3703002002200229038001220c370340200041093a00002000200c370001200041096a2009370000200041116a200a370000200041196a200b370000200041216a20022900b003370000200041296a200241b0036a41086a290000370000200041316a200241b0036a41106a290000370000200041396a200241b0036a41186a290000370000200041c0006a200241cf036a2800003600000c020b0240200541ff0171450d00200241003a00a0010b2000410a3a00000c010b2000410a3a00000b200241e0056a24000bab0301087f230041206b220324000240024002400240200141246c41046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b2003410036020820032005360200200320043602042001200310770240024020010d002003280208210420032802042106200328020021070c010b200141246c210820032802042105200328020821010340200341106a200010c0032003280210210902400240200520016b2003280218220a490d002001200a6a210420032802002107200521060c010b2001200a6a22042001490d05200541017422062004200620044b1b22064100480d050240024020050d00024020060d00410121070c020b2006103322070d010c080b2003280200210720052006460d0020072005200610372207450d070b20032006360204200320073602000b200720016a2009200a109d081a2003200436020802402003280214450d00200910350b200041246a210020062105200421012008415c6a22080d000b0b20022902002004ad4220862007ad84100202402006450d00200710350b200341206a24000f0b1044000b1045000b103e000b103c000bd20301037f0240024020002d0000220141144b0d00024002400240024002400240024020010e15080808080808000808010802080308040508060808080b200041086a2d00004101470d07200041146a28020041ffffff3f71450d07200041106a28020010350f0b200041046a2d00000d062000410c6a2802002201450d06200141306c450d06200041086a28020010350f0b200041046a2802000d052000410c6a2802002201450d05200141286c450d05200041086a28020010350f0b200041086a2d00004107470d04200041306a280200450d042000412c6a28020010350f0b200041046a2d00004102490d030240200041106a2802002201450d00200141d0006c2102200041086a28020041c4006a21010340024020012802002203450d00200341306c450d002001417c6a28020010350b200141d0006a2101200241b07f6a22020d000b0b2000410c6a2802002201450d03200141d0006c450d03200028020810350f0b200041086a280200450d02200041046a28020010350f0b200041086a2d00004106470d01200041306a28020041ffffff3f71450d012000412c6a28020010350c010b200041046a280200450d00200041106a2802002201450d00200041146a280200450d00200110350f0b0b13002000410a360204200041e0cfc7003602000b3400200041d1c4c70036020420004100360200200041146a410f360200200041106a4184e3c700360200200041086a42063702000b2b01017f02404101103322020d001045000b200042818080801037020420002002360200200241003a00000be00101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002400240412010332206450d0020062002290300370000200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000412010332203450d0120032006290000370000200341186a200641186a290000370000200341106a200641106a290000370000200341086a200641086a29000037000020061035200042a0808080800437020420002003360200200241206a24000f0b1045000b103c000bae0101017f0240410410332202450d002002410036000020024104410810372202450d00200241003a000420024108411510372202450d00200242003700052002410d6a420037000020024115412a10372202450d00200242003700152002411d6a42003700002002412a41d40010372202450d002002420037003520024200370025200042d4808080d008370204200020023602002002413d6a42003700002002412d6a42003700000f0b103c000b13002000410536020420004184fdc7003602000b2f01017f02404104103322020d001045000b20004284808080c000370204200020023602002002418080c0023600000b2f01017f02404108103322020d001045000b20004288808080800137020420002002360200200242c0b2cd3b3700000b3001017f02404108103322020d001045000b2000428880808080013702042000200236020020024280e497d0123700000b4801017f0240410810332202450d00200242c0f0f50b37000020024108411010372202450d002000429080808080023702042000200236020020024280c2d72f3700080f0b103c000b3101017f02404108103322020d001045000b2000428880808080013702042000200236020020024280c0a8ca9a3a3700000b861603027f017e0a7f230041b0016b2203240041f1d8cb00ad4280808080900184100122042900002105200341c8006a41086a200441086a290000370300200320053703482004103541a0e0c600ad4280808080b00184100122042900002105200341e8006a41086a200441086a29000037030020032005370368200410350240024002400240024002400240412010332204450d0020042001290000370000200441186a2206200141186a290000370000200441106a2207200141106a290000370000200441086a200141086a290000370000412010332208450d0020082004290000370000200841186a2006290000370000200841106a2007290000370000200841086a2206200441086a2900003700002004103541c00010332204450d002004200329036837001020042003290348370000200441086a200341c8006a41086a290300370000200441186a200341e8006a41086a29030037000020042008290000370020200441286a2006290000370000200441306a200841106a290000370000200441386a200841186a29000037000020081035200341c000360294012003200436029001200341206a2004ad4280808080800884100510c20102400240200328022022070d00410221080c010b200328022421092003200341286a28020036029c012003200736029801200341186a20034198016a10c40102400240024020032802180d00200328021c2106200341106a20034198016a10c40120032802100d002003280214210a200341086a20034198016a10c40120032802080d00200328029c012208450d00200328020c210b20032008417f6a36029c012003200328029801220841016a3602980120082d0000220c41014b0d004100210802400240200c0e020100010b410121080b200320034198016a10c40120032802000d00200328029c01220d2003280204220e490d00200e417f4c0d0502400240200e0d004100210d4101210c0c010b200e1039220c450d05200c200328029801220f200e109d081a2003200d200e6b36029c012003200f200e6a36029801200e210d0b200c0d010b2003410036025020034201370348200341093602a401200320034190016a3602a0012003200341c8006a3602ac01200341fc006a41013602002003420137026c200341c888c2003602682003200341a0016a360278200341ac016a41e88ac500200341e8006a10431a200335025042208620033502488410060240200328024c450d00200328024810350b410221080c010b200ead422086200dad8421052003418c016a41026a200341e8006a41026a2d00003a0000200320032f00683b018c010b2009450d00200710350b200341e8006a41026a2003418c016a41026a2d00003a0000200320032f018c013b01680240024020084102460d00200341c4006a41026a2207200341e8006a41026a2d00003a0000200320032f01683b014420041035200341c0006a41026a20072d000022043a0000200341306a220920053703002003413b6a20043a0000200320032f014422043b0140200320083a00382003200c36022c2003200b3602282003200a360224200320043b003920032006360220200341206a41086a2107200228027020064b0d010c070b20041035200041086a4111360200200041ef84c800360204200041013602000c070b41f1d8cb00ad4280808080900184100122042900002105200341c8006a41086a200441086a29000037030020032005370348200410354194e0c600ad4280808080c00184100122042900002105200341e8006a41086a200441086a2900003703002003200537036820041035412010332204450d0020042001290000370000200441186a2206200141186a290000370000200441106a220a200141106a290000370000200441086a220b200141086a290000370000412010332208450d0020082004290000370000200841186a2006290000370000200841106a200a290000370000200841086a200b2900003700002004103541c00010332204450d002004200329036837001020042003290348370000200441086a200341c8006a41086a290300370000200441186a200341e8006a41086a29030037000020042008290000370020200441286a200841086a290000370000200441306a200841106a290000370000200441386a200841186a29000037000020081035200341e8006a200441c00010e002200329026c2105200328026821062004103502400240024002402006450d00200341e8006a20062005422088a72002108c062005a7210220032802684101460d03200341c8006a41186a220a200341e8006a410472220441186a280200360200200341c8006a41106a220b200441106a290200370300200341c8006a41086a2208200441086a2902003703002003200429020037034802402003280230450d00200328022c10350b200341206a41186a200a280200360200200341206a41106a200b290300370300200341206a41086a20082903003703002003200329034837032041f1d8cb00ad42808080809001841001220429000021052008200441086a290000370300200320053703482004103541a0e0c600ad4280808080b00184100122042900002105200341e8006a41086a200441086a2900003703002003200537036820041035412010332204450d0420042001290000370000200441186a220a200141186a290000370000200441106a220b200141106a290000370000200441086a220c200141086a290000370000412010332208450d0420082004290000370000200841186a200a290000370000200841106a200b290000370000200841086a200c2900003700002004103541c00010332204450d042004200329036837001020042003290348370000200441086a200341c8006a41086a290300370000200441186a200341e8006a41086a29030037000020042008290000370020200441286a200841086a290000370000200441306a200841106a290000370000200441386a200841186a290000370000200810352003410036027020034201370368200341206a200341e8006a10e201200341206a410472200341e8006a10e2012007200341e8006a10e20120032d0038210a200328026c20032802702208460d01200328026821010c020b2000418085c80036020420004101360200200041086a411a3602000c070b200841016a22012008490d042008410174220b2001200b20014b1b220b4100480d040240024020080d00410021080240200b0d00410121010c020b200b103322010d010c070b200328026821012008200b460d0020012008200b10372201450d060b2003200b36026c200320013602680b200120086a200a3a00002003200841016a360270200328022c210e200341346a2802002208200341e8006a107702400240200328026c220c2003280270220a6b2008490d0020032802682101200c210b0c010b200a20086a2201200a490d04200c410174220b2001200b20014b1b220b4100480d0402400240200c0d000240200b0d00410121010c020b200b10332201450d070c010b20032802682101200c200b460d002001200c200b10372201450d060b2003200b36026c200320013602680b2001200a6a200e2008109d081a2004ad4280808080800884200a20086aad4220862001ad8410020240200b450d00200110350b200410352002450d06200610350c060b2000200329026c370204200041013602002002450d04200610350c040b1045000b1044000b103e000b103c000b2003280230450d01200328022c10350c010b20002003290320370204200041003602002000411c6a200341386a280200360200200041146a20092903003702002000410c6a20072903003702000b200341b0016a24000bc00202027f017e230041106b220224002002200028023036020020012002410410780240412010332203450d0020032000290038370000200341186a200041d0006a290000370000200341106a200041c8006a290000370000200341086a200041c0006a290000370000200120034120107820031035024020002d0058220341024b0d00024002400240024020030e03000102000b200241003a00000c020b200241013a00000c010b200241023a00000b20012002410110780b200220002802343602002001200241041078200029030021042002200041086a290300370308200220043703002001200241101078200029031021042002200041186a290300370308200220043703002001200241101078200029032021042002200041286a290300370308200220043703002001200241101078200241106a24000f0b1045000b1300200041073602042000419c85c8003602000b3400200041fb8fc80036020420004100360200200041146a4102360200200041106a419090c800360200200041086a42133702000bcb0202057f037e2001280200210202400240412010332203450d0020032002290000370000200341186a2204200241186a290000370000200341106a2205200241106a290000370000200341086a2206200241086a290000370000412010332202450d0120022003290000370000200241186a2004290000370000200241106a2005290000370000200241086a200629000037000020031035200128020421012002412041c00010372203450d0120032001290000370020200341386a200141186a290000370000200341306a200141106a290000370000200341286a200141086a2900003700002003ad4280808080800884100922022900002107200241086a2900002108200241106a2900002109200041186a200241186a290000370000200041106a2009370000200041086a20083700002000200737000020021035200310350f0b1045000b103c000ba30301067f230041106b22032400024020014105744104722204417f4c0d000240200410332205450d002003410036020820032004360204200320053602002001200310770240024020010d002003280208210520032802042106200328020021070c010b20014105742108200328020021072003280204210620032802082105034020002101024002402006200522046b4120490d00200441206a21050c010b024002400240200441206a22052004490d00200641017422002005200020054b1b22004100480d000240024020060d00024020000d00410121070c020b2000103321070c040b20062000470d020b200021060c030b103e000b200720062000103721070b2000210620070d00103c000b200141206a2100200720046a22042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a290000370000200841606a22080d000b2003200636020420032005360208200320073602000b20022902002005ad4220862007ad84100202402006450d00200710350b200341106a24000f0b1045000b1044000b130020004105360204200041fc92c8003602000be80f06087f017e047f017e057f077e230022042105200441a0016b41607122042400024002400240200141ffffff3f712001470d0020014105742206417f4c0d000240024020060d00410121070c010b200610332207450d020b41002108200441003602282004200736022020042006410576360224200441206a41002001108a012004280228210902402001450d002001410574210a200428022020094105746a210b0340200b20086a2206200020086a2207290000370000200641186a200741186a290000370000200641106a200741106a290000370000200641086a200741086a290000370000200a200841206a2208470d000b200141057441606a41057620096a41016a21090b200441086a200936020020042004290320220c370300200ca72009410041202009676b10c105200441206a41186a22014200370300200441206a41106a220d4200370300200441206a41086a220e42003703002004420037032041c7d5ca00ad4280808080b0028410012208290000210c200e200841086a2900003703002004200c370320200810354180eaca00ad428080808090018410012208290000210c200441e8006a41086a220f200841086a2900003703002004200c37036820081035200d2004290368220c37030020044180016a41086a200e29030037030020044180016a41106a200c37030020044180016a41186a200f2903003703002004200429032037038001200441206a20044180016a412010b50220042802202208410120081b21102004290224420020081b2211422088a72208450d022008410574210920044180016a410c722112200441206a410c6a2100200441206a4114722113200441206a41087221142010210803402001200841186a290000370300200d200841106a290000370300200e200841086a29000037030020042008290000370320200441106a200441206a108a07200441206a2004280210220b2004280218221510de02200f200041086a290200370300200441e8006a41106a220a200041106a2802003602002004200029020037036820042802402106024020042802282207450d002004290320210c20122004290368370200201241086a200f290300370200201241106a200a2802003602002004200c37038001200621160b200420073602880120044100360228200429039801211720042004290338221837039801200429039001211920042004290330221a37039001200429038001211b20042004290320221c37038001200429038801210c20042004290328221d37038801201da7210702400240200ca7220a0d00201d210c201a211920182117201621060c010b2004201b3703202004200c37032820042019370330200420173703382004200a2019a74105746a3602742004200a3602702004200c422088a736026c2004200a36026820042004360278200441d8006a200441e8006a10ca05201441086a200441d8006a41086a22162802003602002014200429035837020020042019422088a7220a2017422088a74105746a3602742004200a36027020042017a736026c2004200a36026820042004360278200441d8006a200441e8006a10ca05201341086a2016280200360200201320042903583702002004290328210c2004290320211c200429033821172004290330211902402007450d002018a7210a0240201d422088a741ffffff3f71450d00200710350b200a41ffffff3f71450d00201a422088a710350b2004201c370380012004200c3703880120042019370390012004201737039801200ca721070b2004200c37032820042019370330200120173703002004201c37032020042006360240200ca7210a0240024020070d002015ad422086200bad8410070c010b2004201536026c2004200b360268200441206a200441e8006a108b070b0240200a450d002017a721070240200c422088a741ffffff3f71450d00200a10350b200741ffffff3f71450d002019422088a710350b02402004280214450d00200b10350b200841206a210820062116200941606a22090d000c030b0b1044000b1045000b0240201142ffffff3f83500d00201010350b200441206a41186a220a4200370300200441206a41106a22074200370300200441206a41086a220642003703002004420037032041c7d5ca00ad4280808080b00284220c10012200290000211c200441e8006a41086a2208200041086a2900003703002004201c3703682000103520062008290300370300200420042903683703204189eaca00ad4280808080f0008410012200290000211c2008200041086a2900003703002004201c3703682000103520072004290368221c37030020044180016a41086a220b200629030037030020044180016a41106a2201201c37030020044180016a41186a22092008290300370300200420042903203703800120044120360224200420044180016a36022020022003200441206a10a806200a4200370300200742003703002006420037030020044200370320200c10012200290000210c2008200041086a2900003703002004200c370368200010352006200829030037030020042004290368370320419cdfca00ad4280808080d0008410012200290000210c2008200041086a2900003703002004200c3703682000103520072004290368220c370300200b20062903003703002001200c37030020092008290300370300200420042903203703800120044180016aad428080808080048410070240200428020441ffffff3f71450d00200428020010350b200524000bec0502057f017e23004190016b2201240020002d00002102200141186a2203200041196a290000370300200141106a2204200041116a290000370300200141086a2205200041096a2900003703002001200029000137030002400240024020020d00200141f0006a41186a4200370300200141f0006a41106a22034200370300200141f0006a41086a220042003703002001420037037041c7d5ca00ad4280808080b002841001220229000021062000200241086a2900003703002001200637037020021035419cdfca00ad4280808080d00084100122022900002106200141206a41086a2204200241086a2900003703002001200637032020021035200320012903202206370300200141c0006a41086a2000290300370300200141c0006a41106a2006370300200141c0006a41186a200429030037030020012001290370370340200141c0006aad428080808080048410070c010b200141206a41186a2003290300370300200141206a41106a2004290300370300200141206a41086a200529030037030020012001290300370320200141f0006a41186a4200370300200141f0006a41106a22034200370300200141f0006a41086a220042003703002001420037037041c7d5ca00ad4280808080b002841001220229000021062000200241086a2900003703002001200637037020021035419cdfca00ad4280808080d00084100122022900002106200141e0006a41086a2204200241086a2900003703002001200637036020021035200320012903602206370300200141c0006a41086a2000290300370300200141c0006a41106a2006370300200141c0006a41186a200429030037030020012001290370370340412010332200450d0120002001290320370000200041186a200141206a41186a290300370000200041106a200141206a41106a290300370000200041086a200141206a41086a290300370000200141c0006aad42808080808004842000ad42808080808004841002200010350b20014190016a24000f0b1045000bf61407157f017e017f017e017f017e017f230041306b220224000240024020014115490d00024002402001410176220341ffffff3f712003470d0020034105742204417f4c0d000240200410332205450d002002410036020820024204370300200041606a2106200041a07f6a210741042108410021094100210a2001210b0340200b210c4100210b4101210d0240200c417f6a220e450d000240024002400240024002402000200e4105746a200c410574220f20006a41406a412010a0084100480d004102200c6b210e2007200f6a21034101210d03400240200e200d6a4101470d004100210b200c210d0c080b200d41016a210d200341206a2003412010a0082110200341606a21032010417f4a0d000b200c200d6b210e0c010b2007200f6a2103024003400240200e4101470d004100210e0c020b200e417f6a210e200341206a2003412010a0082110200341606a210320104100480d000b0b200c200e490d01200c20014b0d02200c200e6b220d4101762211450d002006200f6a21032000200e4105746a21100340200241106a41186a220f201041186a2212290000370300200241106a41106a2213201041106a2214290000370300200241106a41086a2215201041086a221629000037030020022010290000370310200341086a220b2900002117200341106a22182900002119200341186a221a290000211b201020032900003700002012201b3700002014201937000020162017370000201a200f29030037000020182013290300370000200b201529030037000020032002290310370000200341606a2103201041206a21102011417f6a22110d000b0b0240200e0d00200e210b0c050b0240200d41094d0d00200e210b0c050b200c20014b0d02200c200e6b21112000200e4105746a210f0340200c200e417f6a220b490d040240200c200b6b220d4102490d002000200e4105746a22032000200b4105746a220e412010a008417f4a0d00200e2900002117200e2003290000370000200241106a41186a2215200e41186a2210290000370300200241106a41106a2216200e41106a2212290000370300200241106a41086a2218200e41086a22132900003703002013200341086a2900003700002012200341106a2900003700002010200341186a29000037000020022017370310410121140240200d4103490d00200e41c0006a200241106a412010a008417f4a0d0041022110200f210302400340200341186a200341386a290000370000200341106a200341306a290000370000200341086a200341286a2900003700002003200341206a221229000037000020112010460d01200341c0006a21132010211420122103201041016a21102013200241106a412010a008417f4a0d020c000b0b201021140b200e20144105746a22032002290310370000200341186a2015290300370000200341106a2016290300370000200341086a20182903003700000b200b450d05200f41606a210f201141016a2111200b210e200d410a4f0d050c000b0b200e200c41eccfca001059000b200c200141eccfca001058000b200c200e417f6a220b490d00200c200141fccfca001058000b200b200c41fccfca001059000b0240200a2002280204470d002002200a41011090012002280200210820022802082209210a0b2008200a4103746a2203200d3602042003200b3602002002200941016a22093602082009210a024020094102490d00034002400240024002400240200820092214417f6a22094103746a2203280200450d00201441037420086a221141746a280200220d200328020422104b0d010b20144103490d022003280204211020082014417d6a22034103746a280204210e0c010b4102210a0240201441024b0d0020142109200b450d090c060b20082014417d6a22034103746a280204220e2010200d6a4d0d004103210a0240201441034b0d0020142109200b450d090c060b201141646a280200200e200d6a4d0d00201421092014210a0c040b200e2010490d010b2014417e6a21030b02400240024002400240024002402014200341016a22184d0d00201420034d0d0120082003410374221a6a2203280204220a20032802006a220320082018410374221c6a22102802002216490d02200320014b0d03200020164105746a22132010280204221541057422106a210d2003410574210e200320166b220c20156b220320154f0d042005200d20034105742210109d08221220106a211120154101480d0520034101480d052006200e6a210e200d21030340200e200341606a220d201141606a220c200c200d412010a008410048220f1b2210290000370000200e41186a201041186a290000370000200e41106a201041106a290000370000200e41086a201041086a2900003700002011200c200f1b211102402013200d2003200f1b2203490d00201221100c080b200e41606a210e2012211020122011490d000c070b0b20182014418cd0ca001042000b20032014419cd0ca001042000b2016200341acd0ca001059000b2003200141acd0ca001058000b200520132010109d08221220106a2111024020154101480d00200c20154c0d002000200e6a210f201221102013210303402003200d2010200d2010412010a008410048220c1b220e290000370000200341186a200e41186a290000370000200341106a200e41106a290000370000200341086a200e41086a2900003700002010201041206a200c1b2110200341206a2103200d41206a200d200c1b220d200f4f0d03201120104b0d000c030b0b20132103201221100c010b200d2103201221100b20032010201120106b416071109d081a2008201a6a2203200a20156a360204200320163602002008201c6a2203200341086a20142018417f736a410374109e081a20022009360208200941014b0d000b2009210a200b450d040c010b200b450d030c000b0b1045000b1044000b0240200228020441ffffffff0171450d00200810350b2004450d01200510350c010b20014102490d002001417f6a2110200141057420006a41206a210f410121110340024002400240024020102203417f6a221020014b0d00200120106b220e4102490d03200020034105746a2203200020104105746a220c412010a008417f4a0d03200c2900002117200c2003290000370000200241106a41186a2213200c41186a220d290000370300200241106a41106a2214200c41106a2212290000370300200241106a41086a2208200c41086a22152900003703002015200341086a2900003700002012200341106a290000370000200d200341186a2900003700002002201737031041012103200e4103490d02200c41c0006a200241106a412010a008417f4a0d0241002112200f21030340200341406a220e200341606a220d290000370000200e41186a200d41186a290000370000200e41106a200d41106a290000370000200e41086a200d41086a29000037000020112012220e460d02200e417f6a21122003200241106a412010a008210d200341206a2103200d417f4a0d020c000b0b2010200141dccfca001059000b4102200e6b21030b200c20034105746a22032002290310370000200341186a2013290300370000200341106a2014290300370000200341086a20082903003700000b200f41606a210f2011417f6a211120100d000b0b200241306a24000bfc0701137f230041c0006b22042400200441003602082004420137030020044100360218200442013703102002410020031b21052000410020011b2106200241206a200220031b2107200041206a200020011b2108200020014105746a2109200220034105746a210a4101210b4101210c4100210d4101210e4101210f410021100340200b2111200e2112201021132007210320052102024002400340024020020d00410021052006450d020c030b02402006450d000240024020022006460d0020022006412010a00822140d010b2003200341206a2003200a4622021b210741002008200820094622141b21064100200320021b21052011210b2012210e201321102008200841206a20141b21080c050b02402014417f4c0d00200221050c040b200441206a41186a2214200241186a290000370300200441206a41106a2215200241106a290000370300200441206a41086a2216200241086a29000037030020042002290000370320024020132004280214470d00200441106a20134101108a01200428021821132004280210221121122011210f0b200f20134105746a22022004290320370000200241186a2014290300370000200241106a2015290300370000200241086a20162903003700002004201341016a2213360218410020032003200a4622141b21022003200341206a20141b21030c010b0b200441206a41186a2203200541186a290000370300200441206a41106a2213200541106a290000370300200441206a41086a2206200541086a29000037030020042005290000370320024020102004280214470d00200441106a20104101108a01200428021821102004280210220b210e0b200e20104105746a22022004290320370000200241186a2003290300370000200241106a2013290300370000200241086a20062903003700002004201041016a221036021841002106410020072007200a4622021b2105200e210f2007200741206a20021b21070c020b2004280204210220042802142103201120132000200110aa060240200341ffffff3f71450d00201110350b0240200241ffffff3f71450d00200c10350b200441c0006a24000f0b200441206a41186a2214200641186a290000370300200441206a41106a2215200641106a290000370300200441206a41086a2216200641086a290000370300200420062900003703200240200d2004280204470d002004200d4101108a012004280200210c2004280208210d0b200c200d4105746a22022004290320370000200241186a2014290300370000200241106a2015290300370000200241086a20162903003700002004200d41016a220d36020841002008200820094622021b21062011210b2012210e201321102008200841206a20021b2108200321070c000b0bee1604017f067e0e7f027e230041d0026b22032400200241c0006a2903002104200241306a2903002105200241286a2903002106200241106a2903002107200241086a29030021082002290338210920022d0000210a200341086a41186a200241e0006a290000370300200341086a41106a200241d8006a290000370300200341086a41086a200241d0006a29000037030020032002290048370308200341286a41086a200241206a290300370300200320022800013602382003200241046a28000036003b2003200241186a29030037032820012802002802002202280208220b410574210c2002280200210d024002400240200b0d0041032102200d210e0c010b200c210f200d210202400340200341a8016a200341086a2002220b10b20620032802a801220e20032802b00110e40241ff01712102024020032802ac01450d00200e10350b024020024103470d00200b41206a2102200f41606a220f450d020c010b0b200b41206a210e0c020b200b41206a210e410321020b0b4101211002400240024002400240024002400240200241ff0171417e6a220f41014b0d000240200f0e020200020b4100210f410421114100210b410021100c020b410021100b410810332211450d03200d200c6a210c2011200b360204201120023a000020034281808080103702840120032011360280014101210b034002400240200c200e2202470d002002210e4103210f0c010b200341a8016a200341086a200210b20620032802a801220e20032802b00110e40241ff0171210f024020032802ac01450d00200e10350b200241206a210e200f4103460d010b024002400240200f41ff0171220d4102470d00201041016a21100c010b200d4103460d010b0240200b200328028401470d0020034180016a200b410110900120032802800121110b2011200b4103746a220d2002360204200d200f3a00002003200b41016a220b360288010c010b0b200328028401210f200b450d002001280204200b417f6a10af062202200b4f0d04201120024103746a2d000022024103470d010b410121024100210d0c010b410241012002410246220d1b21020b200320023a003f2001280208210e200341c0026a200128020c360200200341bc026a200341c8026a36020020032011200b4103746a22023602b402200320113602b0022003200f3602ac02200320113602a80220032003413f6a3602b8022003200341b8026a220b3602a8010240034020112002460d012003201141086a3602b0022011280200220241ff01714103460d010240200b2002201128020410ce0622020d0020032802b402210220032802b00221110c010b0b20034180016a41086a2211200241086a29000037030020034180016a41106a220c200241106a29000037030020034180016a41186a2212200241186a2900003703002003200229000037038001200e41046a21130340200341a8016a41186a22142012290300370300200341a8016a41106a2215200c290300370300200341a8016a41086a2216201129030037030020032003290380013703a8010240200e41086a2217280200220f2013280200470d00200e200f4101108a010b200e280200200f4105746a220220032903a801370000200241186a2014290300370000200241106a2015290300370000200241086a20162903003700002017200f41016a3602002003200b3602a801034020032802b002220220032802b402460d022003200241086a3602b0022002280200220f41ff01714103460d02200b200f200228020410ce062202450d000b2011200241086a290000370300200c200241106a2900003703002012200241186a29000037030020032002290000370380010c000b0b024020032802ac0241ffffffff0171450d0020032802a80210350b02400240200d0d0020034180016a41086a200341286a41086a290300370300200320032802383602402003200328003b3600432003200329032837038001200341a8026a200341086a10cf0620033502b002211820032802a8022111411010332202450d0220022009370000200220043700082002411041201037210202400240200a41ff01714101460d002002450d06200241003a0010200320073703b001200320083703a801200341a8016a210e4111210b4120210f0c010b2002450d05200241013a001041c000210f2002412041c00010372202450d0520022008370018200220032802403600112002200329038001370028200241206a2007370000200241146a2003280043360000200241306a20034188016a2d00003a0000200320053703b001200320063703a801200341a8016a210e4131210b0b0240200f200b6b410f470d00200f200f410174220d200b41106a220c200d200c4b1b220d460d002002200f200d10372202450d050b2002200b6a220f200e290000370000200f41086a200e41086a29000037000020184220862011ad84200b41106aad4220862002ad84100220021035024020032802ac02450d00201110350b200341a8016a41086a41083a0000200341b1016a2003290308370000200341b9016a200341086a41086a290300370000200341c1016a200341086a41106a290300370000200341c9016a200341206a290300370000200341123a00a80141b0b4cc004100200341a8016a10d401200042003703000c010b20012802102202200228020020106a360200200128021422022002290300221820097c2219370300200241086a2202200229030020047c2019201854ad7c37030020012802002802002102200341a8016a41186a220f200341086a41186a290300370300200341a8016a41106a220e200341086a41106a290300370300200341a8016a41086a2211200341086a41086a290300370300200320032903083703a80102402002280208220b200241046a280200470d002002200b4101108a012002280208210b0b2002280200200b4105746a220b20032903a801370000200b41186a200f290300370000200b41106a200e290300370000200b41086a20112903003700002002200228020841016a360208200320032802383602502003200328003b360053200341c0006a41086a200341286a41086a290300370300200320032903283703402001280218280200210202400240200a41ff01714101470d00200341b7016a2007370000200341c7016a200341c8006a2d00003a0000200320083700af01200320032800533600ab01200320032802503602a801200320032903403700bf0120034180016a200341a8016a10d0060240200328028001220b200328028801220e10d10241ff0171220f4102460d00200ead422086200bad8410070b0240200328028401450d00200b10350b2009210720042108200f0d01200341a8016a2002200920062009200654220b200420055420042005511b220f1b20042005200f1b10b0064200200420057d200bad7d2207200920067d2205200956200720045620072004511b220b1b210842002005200b1b21070c010b200320083703a802200320073703b00202402008200784500d002003200341086a36027c20034180016a200341086a200341a8026a200341fc006a10f0022003290380014201520d002003290388012107200341e0016a20034180016a41106a290300370300200341d8016a2007370300200341a8016a41086a41003a0000200341b1016a2003290308370000200341b9016a200341086a41086a290300370000200341c1016a200341086a41106a290300370000200341c9016a200341206a290300370000200341033a00a80141b0b4cc004100200341a8016a10d4010b20092107200421080b200341086a20022007200810b006200041386a2004370300200041306a20093703002000410c6a2003290308370200200041146a200341106a2903003702002000411c6a200341186a290300370200200041246a200341206a29030037020020004201370300200020012802102802003602080b200341d0026a24000f0b1045000b2002200b419cb9c8001042000b103c000b992209027f017e027f017e2f7f017e1e7f077e017f0240200028028002220241c000490d00200041a0026a22032903002204a7210520004198026a22062903002207a721082004422088a721092007422088a7210a41e5f0c18b06210b41eec8819903210c41b2da88cb07210d41f4ca81d906210e410a21022006280200220f21102000419c026a28020022112112200328020022132114200041a4026a28020022152116200f211720112118201321192015211a200f211b2011211c2013211d2015211e20004194026a280200221f210320004190026a280200222021062000418c026a2802002221212220002802880222232124201f2125202021262021212720232128201f21292020212a2021212b2023212c201f212d2020212e2021212f20232130200041b0026a2903002204422088a7223121322004a722332134200041ac026a2802002235ad422086200041a8026a2802002236ad84223742037c2204422088a7223821392004a7223a213b2031213c2033213d203742027c2204422088a7223e213f2004a7224021412031214220332143203742017c2204422088a7224421452004a722462147203121482033214941f4ca81d906214a41b2da88cb07214b41eec8819903214c41e5f0c18b06214d41f4ca81d906214e41b2da88cb07214f41eec8819903215041e5f0c18b06215141f4ca81d906215241e5f0c18b06215341eec8819903215441b2da88cb0721550340200c20226a220cad422086200b20246a220bad842039ad422086203bad84852204a74110772239201b6a221bad2004422088a7411077223b201c6a221cad422086842022ad4220862024ad84852204a7410c772222200b6a2224ad2004422088a7410c77220b200c6a220cad422086842039ad203bad42208684852204a7410877223b201b6a221bad2004422088a74108772239201c6a221cad422086842022ad200bad42208684852204a74107772222200d20066a220bad200e20036a220dad422086842034ad2032ad42208684852207a7411077220e201d6a221dad2007422088a74110772232201e6a221ead422086842006ad2003ad42208684852207422088a7410c772203200d6a22066a2234ad4220862007a7410c77220d200b6a220bad2006ad42208684200ead2032ad42208684852207a74108772206201d6a221dad2007422088a74108772232201e6a221ead42208684200dad2003ad42208684852207422088a74107772203200b6a220bad842039ad2006ad42208684852256a74110772206201b6a221bad2056422088a74110772239201c6a221cad422086842022ad4220862003ad84852256a7410c772203200b6a220dad2056422088a7410c77222220346a220ead422086842006ad2039ad42208684852256a74108772239201b6a221bad2056422088a74108772234201c6a221cad422086842003ad2022ad42208684852256a741077721032004422088a7410777220620246a2222ad2007a74107772224200c6a220cad42208684203bad4220862032ad84852204a74110772232201d6a221dad2004422088a7411077223b201e6a221ead422086842006ad2024ad42208684852204a7410c77220620226a220bad2004422088a7410c772222200c6a220cad422086842032ad203bad42208684852204a74108772232201d6a221dad2004422088a7410877223b201e6a221ead422086842006ad2022ad42208684852204a74107772122204c20276a2206ad422086204d20286a2224ad84203fad4220862041ad84852207a7411077223f20176a2217ad2007422088a7411077224120186a2218ad422086842027ad4220862028ad84852207a7410c77222720246a2224ad2007422088a7410c77222820066a2206ad42208684203fad2041ad42208684852207a7410877224120176a2217ad2007422088a7410877223f20186a2218ad422086842027ad2028ad42208684852207a74107772227204b20266a2228ad204a20256a224aad42208684203dad203cad42208684852257a7411077223c20196a2219ad2057422088a7411077223d201a6a221aad422086842026ad2025ad42208684852257422088a7410c772225204a6a22266a224aad4220862057a7410c77224b20286a2228ad2026ad42208684203cad203dad42208684852257a7410877222620196a2219ad2057422088a7410877223c201a6a221aad42208684204bad2025ad42208684852257422088a7410777222520286a2228ad84203fad2026ad42208684852258a7411077222620176a2217ad2058422088a7411077223d20186a2218ad422086842027ad4220862025ad84852258a7410c77222520286a224bad2058422088a7410c772227204a6a224aad422086842026ad203dad42208684852258a7410877223f20176a2217ad2058422088a7410877223d20186a2218ad422086842025ad2027ad42208684852258a741077721252007422088a7410777222620246a2224ad2057a7410777222720066a2206ad422086842041ad422086203cad84852207a7411077222820196a2219ad2007422088a7411077223c201a6a221aad422086842026ad2027ad42208684852207a7410c77222620246a224dad2007422088a7410c77222420066a224cad422086842028ad203cad42208684852207a7410877223c20196a2219ad2007422088a74108772241201a6a221aad422086842026ad2024ad42208684852207a741077721272050202b6a2206ad4220862051202c6a2224ad842045ad4220862047ad84852257a7411077222620106a2228ad2057422088a7411077221020126a2212ad42208684202bad422086202cad84852257a7410c77222b20246a2224ad2057422088a7410c77222c20066a2206ad422086842026ad2010ad42208684852257a7410877222620286a2228ad2057422088a7410877221020126a2212ad42208684202bad202cad42208684852257a7410777222b204f202a6a222cad204e20296a2245ad422086842043ad2042ad42208684852259a7411077224220146a2214ad2059422088a7411077224320166a2216ad42208684202aad2029ad42208684852259422088a7410c77222920456a222a6a2245ad4220862059a7410c772247202c6a222cad202aad422086842042ad2043ad42208684852259a7410877222a20146a2214ad2059422088a7410877224220166a2216ad422086842047ad2029ad42208684852259422088a74107772229202c6a222cad842010ad202aad4220868485225aa7411077222a20286a2228ad205a422088a7411077221020126a2212ad42208684202bad4220862029ad8485225aa7410c772229202c6a224fad205a422088a7410c77222b20456a224ead42208684202aad2010ad4220868485225aa7410877224520286a2210ad205a422088a7410877224320126a2212ad422086842029ad202bad4220868485225aa741077721292057422088a7410777222820246a2224ad2059a7410777222a20066a2206ad422086842026ad4220862042ad84852257a7411077222620146a222bad2057422088a7411077222c20166a2216ad422086842028ad202aad42208684852257a7410c77222820246a2251ad2057422088a7410c77222420066a2250ad422086842026ad202cad42208684852257a74108772242202b6a2214ad2057422088a7410877224720166a2216ad422086842028ad2024ad42208684852257a7410777212b205320306a2206ad2054202f6a2224ad422086842035ad4220862036ad84852259a7411077222620086a2228ad2059422088a7411077222a200a6a222cad42208684202fad4220862030ad84852259a7410c77222f20066a2206ad2059422088a7410c77223020246a2224ad422086842026ad202aad42208684852259a7410877222620286a2228ad2059422088a7410877222a202c6a222cad42208684202fad2030ad42208684852259a7410777222f2052202d6a2230ad4220862055202e6a2208ad842049ad2048ad4220868485225ba7411077220a20056a2205ad205b422088a7411077223520096a2209ad42208684202ead202dad4220868485225b422088a7410c77222d20306a222e6a2230ad422086205ba7410c77223620086a2208ad202ead42208684200aad2035ad4220868485225ba7410877222e20056a2205ad205b422088a7410877224820096a2209ad422086842036ad202dad4220868485225b422088a7410777222d20086a2208ad84202aad202ead4220868485225ca7411077222a20286a2228ad205c422088a7411077222e202c6a222cad42208684202fad422086202dad8485225ca7410c77222d20086a2255ad205c422088a7410c77222f20306a2252ad42208684202aad202ead4220868485225ca7410877223520286a2208ad205c422088a74108772249202c6a220aad42208684202dad202fad4220868485225ca7410777212d2059422088a7410777222820066a2206ad205ba7410777222a20246a2224ad422086842026ad4220862048ad84852259a7411077222620056a222cad2059422088a7411077222e20096a222fad422086842028ad202aad42208684852259a7410c77222820066a2253ad2059422088a7410c77220620246a2254ad422086842026ad202ead42208684852259a74108772248202c6a2205ad2059422088a74108772236202f6a2209ad422086842028ad2006ad42208684852259a7410777212f2056422088a741077721242004422088a741077721062058422088a741077721282007422088a74107772126205a422088a7410777212c2057422088a7410777212a205c422088a741077721302059422088a7410777212e2002417f6a22020d000b41002102200041003602800220002802a802215d2000203742047c22043e02a8022000203220316a3602fc012000203420336a3602f8012000203920386a3602f4012000203b203a6a3602f0012000201e20156a3602ec012000201d20136a3602e8012000201c20116a3602e4012000201b200f6a3602e00120002003201f6a3602dc012000200620206a3602d8012000202220216a3602d4012000202420236a3602d0012000200e41f4ca81d9066a3602cc012000200d41b2da88cb076a3602c8012000200c41eec88199036a3602c4012000200b41e5f0c18b066a3602c0012000203c20316a3602bc012000203d20336a3602b8012000203f203e6a3602b4012000204120406a3602b0012000201a20156a3602ac012000201920136a3602a8012000201820116a3602a40120002017200f6a3602a00120002025201f6a36029c012000202620206a360298012000202720216a360294012000202820236a360290012000204a41f4ca81d9066a36028c012000204b41b2da88cb076a360288012000204c41eec88199036a360284012000204d41e5f0c18b066a360280012000204220316a36027c2000204320336a3602782000204520446a3602742000204720466a3602702000201620156a36026c2000201420136a3602682000201220116a36026420002010200f6a36026020002029201f6a36025c2000202a20206a3602582000202b20216a3602542000202c20236a3602502000204e41f4ca81d9066a36024c2000204f41b2da88cb076a3602482000205041eec88199036a3602442000205141e5f0c18b066a3602402000200920156a36022c2000200520136a3602282000200a20116a36022420002008200f6a3602202000202d201f6a36021c2000202e20206a3602182000202f20216a3602142000203020236a3602102000205241f4ca81d9066a36020c2000205541b2da88cb076a3602082000205441eec88199036a3602042000205341e5f0c18b066a36020020002802ac022103200020044220883e02ac02200020002802b40220486a36023c200020002802b00220496a3602382000200320356a3602342000205d20366a3602300b200020024102746a28020021032000200241016a360280020240200141016a220620014f0d004180bcc800413941bcbcc800103f000b20032006700bfb0303057f017e047f230041306b220424000240024002402002200384500d002004200010b806200441206a200428020022052004280208220610b402024002400240024002400240200428022022070d00410021002004410036021820044208370310410021080c010b200420042902242209370214200420073602102009a7210a410021000240024002402009422088a7220841014b0d0020080e020201020b2008210b03402000200b410176220c20006a220d2007200d41186c6a28020020014b1b2100200b200c6b220b41014b0d000b0b2007200041186c6a280200220b2001460d032000200b2001496a220020084b0d070b2008200a470d010b200441106a20084101109c012004280214210a200428021021070b2007200041186c6a220b41186a200b200820006b41186c109e081a200b41106a2003370300200b2002370308200b20013602002004200841016a220836021820070d012006ad4220862005ad8410070c020b200020084f0d042007200041186c6a22002000290308220920027c2202370308200041106a2200200029030020037c2002200954ad7c3703000b200420063602242004200536022020072008200441206a109603200a450d00200a41186c450d00200710350b2004280204450d00200510350b200441306a24000f0b20002008104d000b2000200841e0bbc8001042000be30202047f017e230041206b2203240002400240200241e8006c4104722204417f4c0d00200410332205450d0120034100360208200320043602042003200536020020022003107702402002450d00200241e8006c21064100210403402003200120046a220241c8006a412010780240024020022d00004101460d00200341003a00102003200341106a41011078200241086a29030021072003200241106a29030037031820032007370310200341106a21050c010b200341013a00102003200341106a410110782003200241016a41201078200241286a29030021072003200241306a29030037031820032007370310200341106a21050b2003200541101078200241386a29030021072003200241c0006a290300370318200320073703102003200341106a411010782006200441e8006a2204470d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1044000b1045000bdc0703027f017e067f230041e0006b2203240041a29bc800ad4280808080f00084100122042900002105200341086a41086a200441086a290000370300200320053703082004103541b39bc800ad4280808080d00084100122042900002105200341186a41086a200441086a29000037030020032005370318200410350240024002400240412010332204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad42808080808004841003220129000037034820011035200341dc006a2201200441206a360200200320043602582003200341c8006a41086a22063602542003200341c8006a360250200341286a200341d0006a107b20041035412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2201417f4c0d01200328023821092003280228210a0240024020010d004100210b410121040c010b200110332204450d012001210b0b02400240200b410f4d0d00200b21020c010b200b41017422024110200241104b1b22024100480d030240200b0d002002103322040d010c050b200b2002460d002004200b200210372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020024170714110460d002002210b0c010b2002410174220b4120200b41204b1b220b4100480d032002200b460d0020042002200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21020c010b2007415f4b0d03200b41017422022006200220064b1b22024100480d03200b2002460d002004200b200210372204450d040b200441206a200a2007109d081a02400240200220066b2008490d002002210b0c010b20012006490d032002410174220b2001200b20014b1b220b4100480d03024020020d000240200b0d00410121040c020b200b10332204450d050c010b2002200b460d0020042002200b10372204450d040b200420066a20092008109d081a200020013602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541d4bac800ad4280808080d00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b8c1004057f017e047f017e230041f0016b22012400200141d0006a41186a22024200370300200141d0006a41106a22034200370300200141d0006a41086a220442003703002001420037035041a29bc800ad4280808080f00084100122052900002106200141f0006a41086a2207200541086a2900003703002001200637037020051035200420072903003703002001200129037037035041f69bc800ad4280808080c000841001220529000021062007200541086a2900003703002001200637037020051035200320012903702206370300200141306a41086a2004290300370300200141306a41106a2006370300200141306a41186a200729030037030020012001290350370330200141f0006a200141306a412010d50120012d007021052002200141f0006a41196a2900003703002003200141f0006a41116a2900003703002004200141f0006a41096a29000037030020012001290071370350410121070240024020054101460d0041002107200141003a00080c010b200141086a41096a2004290300370000200141086a41116a2003290300370000200141086a41196a2002290300370000200141013a0008200120012903503700090b20014189016a200041186a29000037000020014181016a200041106a290000370000200141f9006a200041086a29000037000020012000290000370071200141013a00700240024002402007450d00200141086a410172200141f0006a410172412010a008450d010b200141d0006a41186a22054200370300200141d0006a41106a22024200370300200141d0006a41086a220442003703002001420037035041a29bc800ad4280808080f00084100122082900002106200141f0006a41086a2207200841086a2900003703002001200637037020081035200420072903003703002001200129037037035041ef9bc800ad4280808080f000841001220829000021062007200841086a290000370300200120063703702008103520032001290370370000200341086a2007290300370000200141306a41086a2004290300370300200141306a41106a2002290300370300200141306a41186a200529030037030020012001290350370330200141f0006a200141306a412010d50120012d007021082005200141f0006a41196a2900003703002002200141f0006a41116a2900003703002004200141f0006a41096a29000037030020012001290071370350410121070240024020084101460d0041002107200141003a00080c010b200141086a41096a2004290300370000200141086a41116a2002290300370000200141086a41196a2005290300370000200141013a0008200120012903503700090b20014189016a200041186a29000037000020014181016a200041106a290000370000200141f9006a200041086a29000037000020012000290000370071200141013a007002402007450d00200141086a410172200141f0006a410172412010a008450d010b200141f0006a41186a4200370300200141f0006a41106a22054200370300200141f0006a41086a220442003703002001420037037041a29bc800ad4280808080f000841001220729000021062004200741086a29000037030020012006370370200710354189eaca00ad4280808080f00084100122072900002106200141d0006a41086a2202200741086a2900003703002001200637035020071035200520012903502206370300200141086a41086a2004290300370300200141086a41106a2006370300200141086a41186a200229030037030020012001290370370308200141f0006a200141086a10fe0120012802702207410120071b21084100210402400240024002402001290274420020071b2206422088a7220941014b0d0020090e020201020b2009210703402007410176220520046a22022004200820024105746a2000412010a0084101481b2104200720056b220741014b0d000b0b200820044105746a2000412010a008450d010b200642ffffff3f83500d01200810350c010b200420094f0d01200820044105746a2207200741206a2004417f7320096a410574109e081a200141d0006a41186a22024200370300200141d0006a41106a220a4200370300200141d0006a41086a220742003703002001420037035041a29bc800ad4280808080f0008410012205290000210b200141f0006a41086a2204200541086a2900003703002001200b3703702005103520072004290300370300200120012903703703504189eaca00ad4280808080f0008410012205290000210b2004200541086a2900003703002001200b3703702005103520032001290370370000200341086a2004290300370000200141306a41086a2007290300370300200141306a41106a200a290300370300200141306a41186a200229030037030020012001290350370330200141203602742001200141306a36027020082009417f6a200141f0006a1098020240200642ffffff3f83500d00200810350b200141f0006a200010b9062001280270210420013502782106200141013a000820064220862004ad84200141086aad42808080801084100202402001280274450d00200410350b200141f0006a200010ba06200135027842208620012802702204ad84100702402001280274450d00200410350b200141f0006a41086a41093a0000200141f0006a41096a200029000037000020014181016a200041086a29000037000020014189016a200041106a29000037000020014191016a200041186a290000370000200141123a007041b0b4cc004100200141f0006a10d4010b200141f0016a24000f0b20042009104e000bfc0403027f017e057f230041d0006b220224004186f0cb00ad4280808080800184100122032900002104200241086a41086a200341086a29000037030020022004370308200310354180eaca00ad4280808080900184100122032900002104200241186a41086a200341086a2900003703002002200437031820031035200220013602342002200241346aad4280808080c000841003220329000037033820031035200241cc006a200241386a3602002002200241386a41086a3602442002200241346a3602482002200241386a360240200241286a200241c0006a107b02400240024002402002280230220541206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121080c010b200141017422084110200841104b1b22084100480d03024020010d002008103322030d010c050b20012008460d0020032001200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821010c010b200841017422014120200141204b1b22014100480d0320082001460d0020032008200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2005490d00200121080c010b200541206a22082005490d03200141017422092008200920084b1b22084100480d0320012008460d0020032001200810372203450d040b200341206a20072005109d081a2000200636020820002008360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000bf21201277f230041f0046b220324000240024002402001280200220420012802044f0d00200341d7036a210520034184026a21062003418c046a2107200341d0036a4101722108200341b1046a220941036a210a03402001200441016a360200200341c0026a200410f504200341d0036a20032802c002220b20032802c80210b302200341b8046a41086a220c200841086a290000370300200341b8046a41106a220d200841106a290000370300200341b8046a41186a220e200841186a290000370300200341b8046a41206a220f200841206a290000370300200341b8046a41286a2210200841286a290000370300200341b8046a412f6a22112008412f6a290000370000200341e8026a41086a2212200741086a290000370300200341e8026a41106a2213200741106a290000370300200341e8026a41186a2214200741186a290000370300200341e8026a41206a2215200741206a280000360200200320082900003703b804200320072900003703e802200328028804211620032d00d0032117200320092800003602d8012003200a2800003600db010240201741024622180d0020032d00b004211920034180026a412f6a201129000037000020034180026a41286a201029030037030020034180026a41206a200f29030037030020034180026a41186a200e29030037030020034180026a41106a200d29030037030020034180026a41086a200c290300370300200341a8036a41086a2012290300370300200341a8036a41106a2013290300370300200341a8036a41186a2014290300370300200341a8036a41206a2015280200360200200320032903b80437038002200320032903e8023703a803200320032800db013600a303200320032802d8013602a0032016211a0b024020032802c402450d00200b10350b200c20034180026a41086a221b290300370300200d20034180026a41106a221c290300370300200e20034180026a41186a221d290300370300200f20034180026a41206a221e290300370300201020034180026a41286a221f290300370300201120034180026a412f6a290000370000200341d8016a41086a2220200341a8036a41086a220b290300370300200341d8016a41106a2221200341a8036a41106a2216290300370300200341d8016a41186a2222200341a8036a41186a2223290300370300200341d8016a41206a2224200341a8036a41206a222528020036020020032003290380023703b804200320032903a8033703d801200320032800a3033600d301200320032802a0033602d001200341d0036a41086a2226200c290300370300200341d0036a41106a2227200d290300370300200341d0036a41186a220d200e290300370300200341d0036a41206a220e200f290300370300200341d0036a41286a220f2010290300370300200341d0036a412f6a2011290000370000200320032903b8043703d003200b2020290300370300201620212903003703002023202229030037030020252024280200360200200320032903d8013703a803200320032800d3013600a303200320032802d0013602a00302400240024020180d002017410171450d010b4103210c0c010b20062005290000370000200641286a200541286a290000370000200641206a200541206a290000370000200641186a200541186a290000370000200641106a200541106a290000370000200641086a200541086a290000370000200341c0026a41086a2210200b290300370300200341c0026a41106a22112016290300370300200341c0026a41186a22172023290300370300200341c0026a41206a220b2025280200360200200320032903a8033703c0022012201b2902003703002013201c2902003703002014201d2902003703002015201e290200370300200341e8026a41286a2216201f290200370300200341e8026a41306a222320034180026a41306a280200360200200320032800a3033600bb02200320032802a0033602b80220032003290280023703e8024103210c201941ff01714103460d002026201229030037030020272013290300370300200d2014290300370300200e2015290300370300200f2016290300370300200341d0036a41306a22162023280200360200201b2010290300370300201c2011290300370300201d2017290300370300201e200b280200360200200320032903e8023703d003200320032903c00237038002200320032800bb023600ab03200320032802b8023602a8034103210c201a2002280200280200470d0020034198016a41306a201628020036020020034198016a41286a200f29030037030020034198016a41206a200e29030037030020034198016a41186a200d29030037030020034198016a41106a202729030037030020034198016a41086a2026290300370300200341f0006a41086a201b290300370300200341f0006a41106a201c290300370300200341f0006a41186a201d290300370300200341f0006a41206a201e280200360200200320032903d003370398012003200329038002370370200320032800ab0336006b200320032802a80336026820042128201a21292019210c0b200c41ff01714103470d02200128020022042001280204490d000b0b200041033a00600c010b200341306a41306a220820034198016a41306a280200360200200341306a41286a220720034198016a41286a290300370300200341306a41206a220d20034198016a41206a290300370300200341306a41186a220e20034198016a41186a290300370300200341306a41106a220f20034198016a41106a290300370300200341306a41086a221020034198016a41086a290300370300200341086a41086a2211200341f0006a41086a290300370300200341086a41106a2201200341f0006a41106a290300370300200341086a41186a2204200341f0006a41186a290300370300200341086a41206a2205200341f0006a41206a2802003602002003200329039801370330200320032903703703082003200328006b3600032003200328026836020020002028360200200020032903303702042000410c6a2010290300370200200041146a200f2903003702002000411c6a200e290300370200200041246a200d2903003702002000412c6a2007290300370200200041346a2008280200360200200020293602382000200329030837023c200041c4006a2011290300370200200041cc006a2001290300370200200041d4006a2004290300370200200041dc006a20052802003602002000200c3a0060200041e4006a2003280003360000200020032802003600610b200341f0046a24000b81fc010d017f017e037f017e017f017e027f017e057f017e067f067e0b7f230041f00b6b2201240010ff0342d0a1f10221020240024002400240024002400240024020004101460d00200141c8056a41186a22034200370300200141c8056a41106a22044200370300200141c8056a41086a22054200370300200142003703c80541a9d1cb00ad4280808080c0008422061001220729000021082005200741086a290000370300200120083703c8052007103541cdd1cb00ad4280808080b0018410012207290000210820014198076a41086a2209200741086a29000037030020012008370398072007103520042001290398072208370300200141a8056a41086a2005290300370300200141a8056a41106a2008370300200141a8056a41186a2009290300370300200120012903c8053703a80520014188056a200141a8056a10e1022001290390052108200128028805210a200342003703002004420037030020054200370300200142003703c805200610012207290000210b2005200741086a2900003703002001200b3703c8052007103541add1cb00ad4280808080a001841001220c290000210b200141e8056a41086a2207200c41086a2900003703002001200b3703e805200c1035200420012903e805220b370300200141a0096a41086a220c2005290300370300200141a0096a41106a220d200b370300200141a0096a41186a220e2007290300370300200120012903c8053703a009200141f8046a200141a0096a10e10220012802f804210f200129038005210b200342003703002004420037030020054200370300200142003703c80520061001220329000021062005200341086a290000370300200120063703c8052003103541c2d1cb00ad4280808080b001841001220329000021062007200341086a290000370300200120063703e80520031035200420012903e8052206370300200c2005290300370300200d2006370300200e2007290300370300200120012903c8053703a009200141e8046a200141a0096a10e102420020084200200a1b220620012903f004420020012802e8041b200b42c8017e4200200f1b7c7d220820082006561b42c801540d00200141a00a6a41186a220a4200370300200141a00a6a41106a22104200370300200141a00a6a41086a22074200370300200142003703a00a41a3edcb00ad4280808080f000842211100122032900002102200141f8056a41086a2205200341086a290000370300200120023703f8052003103520072005290300370300200120012903f8053703a00a41a5ebcb00ad4280808080c001841001220329000021022005200341086a290000370300200120023703f80520031035201020012903f8052202370300200c2007290300370300200d2002370300200e2005290300370300200120012903a00a3703a009200141e0046a200141a0096a412010c00120012802e404210f20012802e0042112200a42003703002010420037030020074200370300200142003703a00a20111001220329000021022005200341086a290000370300200120023703f8052003103520072005290300370300200120012903f8053703a00a41b1ebcb00ad4280808080d001841001220329000021022005200341086a290000370300200120023703f80520031035201020012903f8052202370300200c2007290300370300200d2002370300200e2005290300370300200120012903a00a3703a009200141a0096a10bd02210310c00420014198076a41186a420037030020014198076a41106a2213420037030020094200370300200142003703980741f7edcb00ad4280808080f000841001220729000021022009200741086a29000037030020012002370398072007103541eeedcb00ad4280808080900184100122072900002102200c200741086a290000370300200120023703a00920071035201320012903a009220237030020052009290300370300200141f8056a41106a2002370300200141f8056a41186a200c29030037030020012001290398073703f8054100210c200f410020121b210f200141a00a6a200141f8056a10ac01024020012903a00a22024202510d0020012903a80a2106200141a00a6a2010280200220d41016a10b801200141d8046a20012802a00a220720012802a80a10c00120012802dc04210920012802d8042105024020012802a40a450d00200710350b20054101470d002009200f41016a470d0020024201520d00200141c8056a41186a22074200370300200141c8056a41106a22094200370300200141c8056a41086a22054200370300200142003703c80541d1efcb00ad42808080809001841001220e29000021022005200e41086a290000370300200120023703c805200e103541ebc3c400ad428080808030841001220a2900002102200141f8056a41086a220e200a41086a290000370300200120023703f805200a1035200420012903f805370000200441086a2212200e290300370000200141a8056a41086a22142005290300370300200141a8056a41106a22152009290300370300200141a8056a41186a22162007290300370300200120012903c8053703a805200141c8046a200141a8056a10e102200141a0046a20012903d004420020012802c8041b220242e807802208420042e8074200108408200141a00a6a200d10bd01200141b0046a20012802a00a221720012802a80a10d70120012903a004220b200220084298787e7c42ff07837c2202427f200141a0046a41086a2903002002200b54ad7c501b20067d2118200141b0046a41106a290300420020012802b004220a1b210220012903b8044200200a1b210b024020012802a40a450d00201710350b200742003703002009420037030020054200370300200142003703c80541b6fdc600ad42808080808001841001220a29000021062005200a41086a290000370300200120063703c805200a103541e489c200ad4280808080d001841001220a2900002106200e200a41086a290000370300200120063703f805200a1035200420012903f8053700002012200e290300370000201420052903003703002015200929030037030020162007290300370300200120012903c8053703a80520014188046a200141a8056a412010d701200141f8036a200129039004420020012802880422051b220620014188046a41106a290300420020051b2208428094ebdc034200109808200141e8036a20012903f8032219200141f8036a41086a290300221a4280ec94a37c427f10840820082002200b200656200220085620022008511b22051b21022006200b20051b210b20012903e80320067c211b2018428086ebc7f5002018428086ebc7f500541b42058842ffffffff0f83428094ebdc037e4298ac9fd60380211c4100210741d87d2105024002400340200141d8036a2019201a200541ece4c6006a350200220642001084082007200b20012903d80322082006201b7e2206428094ebdc03802218a7417f2006428080808080c0b2cd3b541b200620184280ec94a37c7e7c4280cab5ee01566aad7c22065a2002200141d8036a41086a2903002006200854ad7c22085a200220085122091b6a2107200b200654200220085420091b0d01200541086a22050d000b200141c8036a2019201a42e8aafa0b4200108408200141d0036a29030020012903c8032206201b42e8aafa0b7e2202428094ebdc03802208a7417f2002428080808080c0b2cd3b541b200220084280ec94a37c7e7c4280cab5ee01566aad7c2202200654ad7c21060c010b02402007417f6a220520074d0d00200141c8026a2019201a42c0f0f50b4200108408200141d0026a29030020012903c8022206201b4228802202a7417f201b42c0f0f50b7e2208428080808080c0b2cd3b541b200820024280ec94a37c7e7c4280cab5ee01566aad7c2202200654ad7c21060c010b02400240200541244b0d00200141b8036a2019201a2005410374220941c4e2c6006a280200220ead2206420010840820014198036a200b20012903b80322082006201b7e2206428094ebdc03802218a7417f2006428080808080c0b2cd3b541b200620184280ec94a37c7e7c4280cab5ee01566aad7c2206200b2006562002200141b8036a41086a2903002006200854ad7c22085620022008511b22051b22182006200b20051b22067d220b2002200820051b2008200220051b7d2018200654ad7d41002007410374220a41c4e2c6006a2802002207200e6b220e200e20074b1b22074101200741014b1bad2202420010980820014188036a200129039803220620014198036a41086a290300221820024200108408200141a8036a2019201a200941c8e2c6006a2802002207ad221d4200108408200141d8026a20184200200a41c8e2c6006a28020022092007200920074b220e1b20072009200e1b6bad22084200108408200141f8026a2006420020084200108408200141e8026a4200420020064200108408427f427f200141f8026a41086a290300220620012903d80220012903e8027c7c221820012903e00220012903f00284420052201820065472220e1b2218427f20012903f802200e1b2206200b2001290388037d20087e2002807c2202200654220ead7c2208200e2008201854200220065a1b220e1b210b427f2002200e1b2108200141a8036a41086a29030020012903a8032218201d201b7e2202428094ebdc03802206a7417f2002428080808080c0b2cd3b541b200220064280ec94a37c7e7c4280cab5ee01566aad7c2206201854ad7c2102200920074d2005730d0142002002200b7d2006200854ad7d220b200620087d2208200656200b200256200b2002511b22051b21064200200820051b21020c020b2005412541e4b8ca001042000b427f2002200b7c200620087c22082006542205ad7c22062005200620025420062002511b22051b2106427f200820051b21020b20014188026a2019201a4280c2d72f4200108408200141b8026a20022006428094ebdc034200109808200141f8016a2001290388022208201b420a802206a7417f201b4280c2d72f7e220b428080808080c0b2cd3b541b200b20064280ec94a37c7e7c4280cab5ee01566aad7c220620014188026a41086a2903002006200854ad7c428094ebdc034200109808200141a8026a20012903b8022208200141b8026a41086a290300220b4280ec94a37c427f10840820014198026a2008200b201c4200108408200141e8016a20012903f8012208200141f8016a41086a290300220b4280ec94a37c427f108408200141d8016a2008200b201c4200108408200141ac0a6a200d360200200141a00a6a41086a41003a0000200141b00a6a2001290398022208201c200220012903a8027c7e2202428094ebdc0380220ba7417f2002428080808080c0b2cd3b541b2002200b4280ec94a37c7e7c4280cab5ee01566aad7c2202370300200141b80a6a20014198026a41086a2903002002200854ad7c220b370300200141c80a6a4200200141d8016a41086a29030020012903d8012208201c200620012903e8017c7e2206428094ebdc03802218a7417f2006428080808080c0b2cd3b541b200620184280ec94a37c7e7c4280cab5ee01566aad7c2206200854ad7c2208200b7d2006200254ad7d2218200620027d221b200656201820085620182008511b22051b2206370300200141c00a6a4200201b20051b2208370300200141043a00a00a41b0b4cc004100200141a00a6a10d401200141f8056a200d10be0120012802f805210520013502800621182001200b3703a80a200120023703a00a20184220862005ad84200141a00a6aad220b42808080808002841002024020012802fc05450d00200510350b02400240024020082006844200520d002001420037038006200142003703f805200141a0096aad428080808080048421180c010b200141c8056a41186a22074200370300200141c8056a41106a22094200370300200141c8056a41086a22054200370300200142003703c80541b6fdc600ad428080808080018422021001220e290000211820014198076a41086a220d200e41086a2900003703002001201837039807200e10352005200d29030037030020012001290398073703c80541e489c200ad4280808080d0018422181001220a290000211b200141e8056a41086a220e200a41086a2900003703002001201b3703e805200a1035200420012903e805370000200441086a2214200e290300370000200141a0096a41086a22152005290300370300200141a0096a41106a22162009290300370300200141a0096a41186a22172007290300370300200120012903c8053703a009200141c0016a200141a0096a412010d701200141c0016a41106a290300211b20012903c801211920012802c001210a200742003703002009420037030020054200370300200142003703c8052002100122122900002102200d201241086a2900003703002001200237039807201210352005200d29030037030020012001290398073703c80520181001220d2900002102200e200d41086a290000370300200120023703e805200d1035200420012903e8053700002014200e290300370000201520052903003703002016200929030037030020172007290300370300200120012903c8053703a0092001427f201b4200200a1b220220067c20194200200a1b221b20087c2219201b542205ad7c22182005201820025420182002511b22051b3703a80a2001427f201920051b3703a00a200141a0096aad42808080808004842218200b42808080808002841002024020050d00200120083703f80520012006370380060c020b2001201b427f8522083703f80520012002427f85220637038006201b200283427f520d010b200141c8056a41186a22074200370300200141c8056a41106a22094200370300200141c8056a41086a22054200370300200142003703c80541b6fdc600ad428080808080018422021001220e290000210620014198076a41086a220d200e41086a2900003703002001200637039807200e10352005200d29030037030020012001290398073703c80541e489c200ad4280808080d0018422061001220a2900002108200141e8056a41086a220e200a41086a290000370300200120083703e805200a1035200420012903e805370000200441086a2214200e290300370000200141a0096a41086a22152005290300370300200141a0096a41106a22162009290300370300200141a0096a41186a22172007290300370300200120012903c8053703a009200141a8016a200141a0096a412010d701200141a8016a41106a290300210820012903b001211b20012802a801210a200742003703002009420037030020054200370300200142003703c8052002100122122900002102200d201241086a2900003703002001200237039807201210352005200d29030037030020012001290398073703c80520061001220d2900002102200e200d41086a290000370300200120023703e805200d1035200420012903e8053700002014200e290300370000201520052903003703002016200929030037030020172007290300370300200120012903c8053703a009200120084200200a1b3703a80a2001201b4200200a1b3703a00a2018200b428080808080028410020c010b200142f0f2bda1a7ee9cb9f9003703f805200141a00a6a200141f8056a10e001200141a00a6a2008200610df01200141b80a6a2006370300200141b00a6a2008370300200141a80a6a41063a00002001410c3a00a00a41b0b4cc004100200141a00a6a10d4010b200141a00a6a41186a220d4200370300200141a00a6a41106a220e4200370300200141a00a6a41086a22074200370300200142003703a00a2011100122092900002102200141f8056a41086a2205200941086a290000370300200120023703f8052009103520072005290300370300200120012903f8053703a00a41c897ca00ad4280808080a001841001220929000021022005200941086a290000370300200120023703f80520091035201020012903f805370000201041086a2005290300370000200141a0096a41086a2007290300370300200141a0096a41106a200e290300370300200141a0096a41186a200d290300370300200120012903a00a3703a009200141203602e40b2001200141a0096a3602e00b200141a8056a200141a0096aad221b42808080808004842211100510c2010240024020012802a805220d0d000c010b20012802ac05210e2001200141a8056a41086a2802003602ec052001200d3602e805200141a0016a200141e8056a10c4010240024020012802a0010d0020012802a401220a20012802ec05220941a0016e22052005200a4b1bad42a0017e2202422088a70d072002a72205417f4c0d070240024020050d004101210c0c010b20051033220c450d090b200141003602a8082001200c3602a0082001200541a0016e3602a4080240200a450d00200141a00a6a41206a211520014198076a410172211641002114410021120240034041002105200141003a00b807201241016a211202400340200141003a00d00b20092005460d0120014198076a20056a20012802e80522072d00003a00002001200741016a3602e8052001200541016a22073a00b8072007210520074120470d000b200141c8056a41086a220520014198076a41086a290300370300200141c8056a41106a221720014198076a41106a290300370300200141c8056a41186a221e20014198076a41186a29030037030020012001290398073703c8052001200920076b3602ec0520014198076a200141e8056a10c20220012d0098074101460d02200141a00a6a41186a201e290300370300200141a00a6a41106a2017290300370300200141a00a6a41086a2005290300370300200120012903c8053703a00a20152016418001109d081a200141f8056a200141a00a6a41a001109d081a0240201420012802a408470d00200141a0086a2014410110a00120012802a008210c20012802a80821140b200c201441a0016c6a200141f8056a41a001109d081a2001201441016a22143602a8082012200a460d0320012802ec0521090c010b0b200141003602ec05200541ff0171450d00200141003a00b8070b024020012802a4082205450d00200541a0016c450d00200c10350b0c010b20012902a4082102200c0d010b4100210c2001410036028006200142013703f8052001410936029c072001200141e00b6a360298072001200141f8056a3602a008200141b40a6a4101360200200142013702a40a200141c888c2003602a00a200120014198076a3602b00a200141a0086a41e88ac500200141a00a6a10431a20013502800642208620013502f80584100620012802fc05450d0020012802f80510350b200e450d00200d10350b2003200341ff017141024771211f200141003602a80a200142013703a00a200141a00a6a410020024200200c1b2219422088a7222041a0016c221241a0016e108a01200c4101200c1b211620012802a80a210c20012802a00a212102402020450d002021200c4105746a21052012210920162107034020052007290000370000200541186a200741186a290000370000200541106a200741106a290000370000200541086a200741086a290000370000200c41016a210c200541206a2105200741a0016a2107200941e07e6a22090d000b0b20012802a40a2122200141a00a6a41186a22034200370300200141a00a6a41106a22094200370300200141a00a6a41086a22074200370300200142003703a00a41a3edcb00ad4280808080f0008422021001220d2900002106200141f8056a41086a2205200d41086a290000370300200120063703f805200d103520072005290300370300200120012903f8053703a00a41f393ca00ad4280808080a001841001220d29000021062005200d41086a290000370300200120063703f805200d1035201020012903f805370000201041086a22142005290300370000200141a0096a41086a220d2007290300370300200141a0096a41106a220e2009290300370300200141a0096a41186a220a2003290300370300200120012903a00a3703a009200141203602a40a2001200141a0096a3602a00a2021200c200141a00a6a1098020240201f450d00200342003703002009420037030020074200370300200142003703a00a20021001220c29000021062005200c41086a290000370300200120063703f805200c103520072005290300370300200120012903f8053703a00a41beebcb00ad4280808080a002841001220c29000021062005200c41086a290000370300200120063703f805200c1035201020012903f80537000020142005290300370000200d2007290300370300200e2009290300370300200a2003290300370300200120012903a00a3703a009200141a00a6a200141a0096a10c50220012802a00a220c450d002011100720012902a40a42ffffffff0383500d00200c10350b200342003703002009420037030020074200370300200142003703a00a20021001220c29000021022005200c41086a290000370300200120023703f805200c103520072005290300370300200120012903f8053703a00a41a5ebcb00ad4280808080c001841001220c29000021022005200c41086a290000370300200120023703f805200c1035201020012903f80537000020142005290300370000200d2007290300370300200e2009290300370300200a2003290300370300200120012903a00a3703a0092001200f41016a22153602a00a2011200141a00a6aad22184280808080c000841002200141c8056a41186a220c4200370300200141c8056a41106a22034200370300200141c8056a41086a22054200370300200142003703c80541f7edcb00ad4280808080f000841001220729000021022005200741086a290000370300200120023703c8052007103541eeedcb00ad4280808080900184100122072900002102200141e8056a41086a2214200741086a290000370300200120023703e80520071035200420012903e805370000200441086a2014290300370000200d2005290300370300200e2003290300370300200a200c290300370300200120012903c8053703a009200141a00a6a200141a0096a10ac01200141a00a6a4100200928020041016a20012903a00a4202511b10b80120014198016a20012802a00a220c20012802a80a10c001200128029c0121072001280298012105024020012802a40a450d00200c10350b024020054101470d00024020072015460d00200720154f0d0141c3a6c000ad428080808080068410060b201510d8010b200141c8056a41186a220c4200370300200141c8056a41106a22094200370300200141c8056a41086a22054200370300200142003703c80541f7edcb00ad4280808080f0008410012207290000210220014198076a41086a2203200741086a2900003703002001200237039807200710352005200329030037030020012001290398073703c80541e4edcb00ad4280808080a00184100122072900002102200141e8056a41086a2203200741086a290000370300200120023703e80520071035200420012903e805370000200441086a2003290300370000200141a0096a41086a2005290300370300200141a0096a41106a2009290300370300200141a0096a41186a200c290300370300200120012903c8053703a00920014190016a200141a0096a412010c001200f41026a2105024002402001280290014101460d0020014198056a200510bf010c010b200141a00a6a20012802940110b80120014188016a20012802a00a220c20012802a80a10c001200128028c0121092001280288012107024020012802a40a450d00200c10350b024020070d0041fdb5c000ad4280808080e006841006410021090b200141c8056a41186a22034200370300200141c8056a41106a220d4200370300200141c8056a41086a22074200370300200142003703c80541f7edcb00ad4280808080f000841001220c290000210220014198076a41086a220e200c41086a2900003703002001200237039807200c10352007200e29030037030020012001290398073703c8054193eecb00ad42808080808001841001220c2900002102200141e8056a41086a220e200c41086a290000370300200120023703e805200c1035200420012903e805370000200441086a200e290300370000200141a0096a41086a2007290300370300200141a0096a41106a200d290300370300200141a0096a41186a2003290300370300200120012903c8053703a0094100200520096b2207200720054b1b210c0240024002404100200141a0096a10e5012207200741ff01714104461b41ff0171220741034b0d00024020070e0400020103000b200c41064f0d020b0240200c41016a4106490d00200141c8056a41186a220c4200370300200141c8056a41106a22094200370300200141c8056a41086a22054200370300200142003703c80541f7edcb00ad4280808080f0008410012207290000210220014198076a41086a2203200741086a2900003703002001200237039807200710352005200329030037030020012001290398073703c80541d9eecb00ad4280808080d00284100122072900002102200141e8056a41086a2203200741086a290000370300200120023703e80520071035200420012903e805370000200441086a2003290300370000200141a0096a41086a2005290300370300200141a0096a41106a2009290300370300200141a0096a41186a200c290300370300200120012903c8053703a009200141013a00d00b201b4280808080800484200141d00b6aad4280808080108410020b20014100360298050c020b200141c8056a41186a22094200370300200141c8056a41106a22034200370300200141c8056a41086a22074200370300200142003703c80541f7edcb00ad4280808080f000841001220c290000210220014198076a41086a220d200c41086a2900003703002001200237039807200c10352007200d29030037030020012001290398073703c8054193eecb00ad42808080808001841001220c2900002102200141e8056a41086a220d200c41086a290000370300200120023703e805200c1035200420012903e805370000200441086a200d290300370000200141a0096a41086a2007290300370300200141a0096a41106a2003290300370300200141a0096a41186a2009290300370300200120012903c8053703a009201b428080808080048410070b200141c8056a41186a22094200370300200141c8056a41106a22034200370300200141c8056a41086a22074200370300200142003703c80541f7edcb00ad4280808080f000841001220c290000210220014198076a41086a220d200c41086a2900003703002001200237039807200c10352007200d29030037030020012001290398073703c80541d9eecb00ad4280808080d002841001220c2900002102200141e8056a41086a220d200c41086a290000370300200120023703e805200c1035200420012903e805370000200441086a200d290300370000200141a0096a41086a2007290300370300200141a0096a41106a2003290300370300200141a0096a41186a2009290300370300200120012903c8053703a009200141003a00d00b201b4280808080800484200141d00b6aad42808080801084100220014198056a200510bf010b201620126a211e0240024020012802980522230d00200141a00a6a41186a4200370300200141a00a6a41106a220c4200370300200141a00a6a41086a22054200370300200142003703a00a41a3edcb00ad4280808080f000841001220729000021022005200741086a290000370300200120023703a00a2007103541f393ca00ad4280808080a0018410012207290000210220014198076a41086a2209200741086a290000370300200120023703980720071035200c2001290398072202370300200141f8056a41086a2005290300370300200141f8056a41106a2002370300200141f8056a41186a2009290300370300200120012903a00a3703f805200141a00a6a200141f8056a10fe0120012902a40a420020012802a00a22051b21022005410120051b2124410021250c010b41012125200129029c052102202321240b200120253a00c00b2001201e3602d40b200120163602d00b2001200141d00b6a3602e40b2001200141c00b6a3602e00b200141003602f005200142013703e805200141e8056a41002002422088a72205410574220741057510a00120012802f005211420012802e805211702402005450d002017201441a0016c6a210c2014200741606a4105766a2126200141a00a6a41206a210a200141a0086a41e0006a2127200141a0086a41c0006a2114200141a0086a41206a2112200141f8056a410172210f202421050340200141c8056a41186a2209200541186a290000370300200141c8056a41106a2204200541106a290000370300200141c8056a41086a2203200541086a290000370300200120052900003703c805200141a8056a200141c8056a10dd06200141f8056a20012802a805220e20012802b00510c10220012d00f805210d20014198076a200f418001109d081a02400240200d4101470d00200141a0096a20014198076a418001109d081a024020012802ac05450d00200e10350b200141a0086a200141a0096a418001109d081a0c010b024020012802ac05450d00200e10350b200141a0086a4100418001109f081a0b024020012802e00b2d00000d0020012802e40b220e280200220d200e280204460d00200e200d41a0016a36020002400240200141a0086a200d41206a220e460d00200e200141a0086a412010a0080d010b02402012200d41c0006a220e460d00200e2012412010a0080d010b02402014200d41e0006a220e460d00200e2014412010a0080d010b2027200d4180016a220d460d01200d2027412010a008450d010b20012802e00b41013a00000b200541206a2105200141a00a6a41186a2009290300370300200141a00a6a41106a2004290300370300200141a00a6a41086a2003290300370300200120012903c8053703a00a200a200141a0086a418001109d081a200c200141a00a6a41a001109d0841a0016a210c200741606a22070d000b202641016a21140b200120143602f0050240200242ffffff3f83500d00202410350b2014ad42a0017e2202422088a70d042002a72205417f4c0d0420012802ec05212820012d00c00b21240240024020050d00410121070c010b200510332207450d060b2001410036028006200120073602f8052001200541a0016e3602fc05200141f8056a4100201410a00120012802800621030240024020140d0020012802f805210f0c010b2017201441a0016c6a210e20012802f805220f200341a0016c6a210d200141a00a6a4180016a2107200141a00a6a41e0006a210c200141a00a6a41c0006a2109200141a00a6a41206a2104201721050340200141a00a6a41186a200541186a290000370300200141a00a6a41106a200541106a290000370300200141a00a6a41086a200541086a290000370300200120052900003703a00a200441186a200541386a290000370000200441106a200541306a290000370000200441086a200541286a2900003700002004200541206a2900003700002009200541c0006a290000370000200941086a200541c8006a290000370000200941106a200541d0006a290000370000200941186a200541d8006a290000370000200c200541e0006a290000370000200c41086a200541e8006a290000370000200c41106a200541f0006a290000370000200c41186a200541f8006a290000370000200720054180016a290000370000200741086a20054188016a290000370000200741106a20054190016a290000370000200741186a20054198016a290000370000200341016a2103200d200141a00a6a41a001109d0841a0016a210d200541a0016a2205200e470d000b0b20012802fc052127200141a00a6a41186a22094200370300200141a00a6a41106a22044200370300200141a00a6a41086a22074200370300200142003703a00a41a3edcb00ad4280808080f000841001220c2900002102200141f8056a41086a2205200c41086a290000370300200120023703f805200c103520072005290300370300200120012903f8053703a00a41c897ca00ad4280808080a001841001220c29000021022005200c41086a290000370300200120023703f805200c1035201020012903f805370000201041086a2005290300370000200141a0096a41086a2007290300370300200141a0096a41106a2004290300370300200141a0096a41186a2009290300370300200120012903a00a3703a009200341a0016c4104722205417f4c0d04200510332207450d05200141003602a80a200120053602a40a200120073602a00a2003200141a00a6a10770240024020030d0020012802a80a210520012802a40a210d20012802a00a21070c010b200f200341a0016c6a2112410020012802a80a22036b210920012802a40a210d4100210c03402003200c6a210402400240200d20096a4120490d0020012802a00a2107200d210e0c010b200441206a22052004490d04200d41017422072005200720054b1b220e4100480d0402400240200d0d000240200e0d00410121070c020b200e103322070d010c0c0b20012802a00a2107200d200e460d002007200d200e10372207450d0b0b2001200e3602a40a200120073602a00a0b200720036a200c6a220d200f200c6a2205290000370000200d41186a200541186a290000370000200d41106a200541106a290000370000200d41086a200541086a2900003700002001200441206a220d3602a80a02400240200e20096a41606a411f4d0d00200e210d0c010b200d41206a220a200d490d04200e410174220d200a200d200a4b1b220d4100480d0402400240200e0d000240200d0d00410121070c020b200d10332207450d0c0c010b200e200d460d002007200e200d10372207450d0b0b2001200d3602a40a200120073602a00a0b200720036a200c6a220e41206a200541206a290000370000200e41386a200541386a290000370000200e41306a200541306a290000370000200e41286a200541286a2900003700002001200441c0006a220e3602a80a02400240200d20096a41406a411f4d0d00200d210e0c010b200e41206a220a200e490d04200d410174220e200a200e200a4b1b220e4100480d0402400240200d0d000240200e0d00410121070c020b200e10332207450d0c0c010b200d200e460d002007200d200e10372207450d0b0b2001200e3602a40a200120073602a00a0b200720036a200c6a220d41c0006a200541c0006a290000370000200d41d8006a200541d8006a290000370000200d41d0006a200541d0006a290000370000200d41c8006a200541c8006a2900003700002001200441e0006a220d3602a80a02400240200e20096a41a07f6a411f4d0d00200e210a0c010b200d41206a220a200d490d04200e410174220d200a200d200a4b1b220a4100480d0402400240200e0d000240200a0d00410121070c020b200a10332207450d0c0c010b200e200a460d002007200e200a10372207450d0b0b2001200a3602a40a200120073602a00a0b200720036a200c6a220d41e0006a200541e0006a290000370000200d41f8006a200541f8006a290000370000200d41f0006a200541f0006a290000370000200d41e8006a200541e8006a290000370000200120044180016a220d3602a80a02400240200a20096a41807f6a411f4d0d00200a210d0c010b200d41206a220e200d490d04200a410174220d200e200d200e4b1b220d4100480d0402400240200a0d000240200d0d00410121070c020b200d10332207450d0c0c010b200a200d460d002007200a200d10372207450d0b0b2001200d3602a40a200120073602a00a0b200720036a200c6a220e4180016a20054180016a290000370000200e4198016a20054198016a290000370000200e4190016a20054190016a290000370000200e4188016a20054188016a2900003700002001200441a0016a3602a80a200941e07e6a2109200c41a0016a210c200541a0016a2012470d000b2003200c6a21050b20112005ad4220862007ad8410020240200d450d00200710350b02402027450d00202741a0016c450d00200f10350b200141a00a6a41186a22094200370300200141a00a6a41106a22044200370300200141a00a6a41086a22074200370300200142003703a00a41a3edcb00ad4280808080f000841001220c2900002102200141f8056a41086a2205200c41086a290000370300200120023703f805200c103520072005290300370300200120012903f8053703a00a41b1ebcb00ad4280808080d001841001220c29000021022005200c41086a290000370300200120023703f805200c1035201020012903f805370000201041086a2005290300370000200141a0096a41086a2007290300370300200141a0096a41106a2004290300370300200141a0096a41186a2009290300370300200120012903a00a3703a009200120243a00a00a20112018428080808010841002200120153602a40a200141053a00a00a41b0b4cc004100200141a00a6a10d40141081033220c450d07200c201e360204200c201636020002400240201f0d00200141a00a6a41186a22094200370300200141a00a6a41106a22044200370300200141a00a6a41086a22074200370300200142003703a00a41a8e7cb00ad4280808080f00184100122032900002102200141f8056a41086a2205200341086a290000370300200120023703f8052003103520072005290300370300200120012903f8053703a00a419ce7cb00ad4280808080c001841001220329000021022005200341086a290000370300200120023703f80520031035201020012903f805370000201041086a220d2005290300370000200141a0096a41086a220e2007290300370300200141a0096a41106a220a2004290300370300200141a0096a41186a220f2009290300370300200120012903a00a3703a009200141f8006a200141a0096a10e102200129038001210220012802782112200942003703002004420037030020074200370300200142003703a00a41a3edcb00ad4280808080f000841001220329000021062005200341086a290000370300200120063703f8052003103520072005290300370300200120012903f8053703a00a41a5ebcb00ad4280808080c001841001220329000021062005200341086a290000370300200120063703f80520031035201020012903f805370000200d2005290300370000200e2007290300370300200a2004290300370300200f2009290300370300200120012903a00a3703a009200141f0006a200141a0096a412010c0012002420020121b2001280274410020012802701b10de06200c10350c010b0240024002402020450d00200c201641a0016a360200200141003a00c00a201641206a2107410021050340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141f8056a41086a2205200141a00a6a41086a290300370300200141f8056a41106a2207200141a00a6a41106a290300370300200141f8056a41186a2209200141a00a6a41186a290300370300200120012903a00a22023703a009200120023703f8052016450d0020014198076a41186a200929030037030020014198076a41106a200729030037030020014198076a41086a2005290300370300200120012903f80537039807200c280204200c2802006b41a0016e41286c41286a2205417f4c0d08200510332204450d09200420012903980737030020044201370320200441186a20014198076a41186a290300370300200441106a20014198076a41106a290300370300200441086a20014198076a41086a29030037030041012109200141013602a808200120043602a0082001200541286e22073602a408200c2802002205200c280204460d01200c200541a0016a360200200141003a00c00a200541206a2109410021050340200141003a00d00b200141a00a6a20056a200920056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141a0096a41086a2215200141a00a6a41086a22272903002202370300200141f8056a41186a2203200141a00a6a41186a2220290300370300200141f8056a41106a220d200141a00a6a41106a2224290300370300200141f8056a41086a220e2002370300200120012903a00a22023703a009200120023703f80541012109034020014198076a41186a2003290300220237030020014198076a41106a200d290300220637030020014198076a41086a200e2903002208370300200120012903f805220b37039807200141c8056a41186a220a2002370300200141c8056a41106a220f2006370300200141c8056a41086a221220083703002001200b3703c805024020092007470d00200141a0086a2007200c280204200c2802006b41a0016e41016a108f0120012802a00821040b2004200941286c6a220520012903c80537030020122903002102200f2903002106200a290300210820054201370320200541186a2008370300200541106a2006370300200541086a20023703002001200941016a22093602a8080240200c2802002207200c280204470d0020012802a40821070c030b200c200741a0016a36020041002105200141003a00c00a200741206a21070340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b20152027290300220237030020032020290300370300200d2024290300370300200e2002370300200120012903a00a22023703a009200120023703f80520012802a40821070c000b0b200c10354108210441002109410021070c010b200c10350b200141a00a6a41186a220d4200370300200141a00a6a41106a220e4200370300200141a00a6a41086a220c4200370300200142003703a00a41a8e7cb00ad4280808080f00184100122032900002102200141f8056a41086a2205200341086a290000370300200120023703f80520031035200c2005290300370300200120012903f8053703a00a41d297ca00ad4280808080f000841001220329000021022005200341086a290000370300200120023703f80520031035201020012903f805370000201041086a2005290300370000200141a0096a41086a200c290300370300200141a0096a41106a200e290300370300200141a0096a41186a200d290300370300200120012903a00a3703a009200141a00a6a200141a0096a412010da010240024020012802a00a4101460d00200120093602a80a200120073602a40a200120043602a00a200141f8056a200141a00a6a41004100200110df060c010b2011100720012902a40a2102200120093602a80a200120073602a40a200120043602a00a200141f8056a200141a00a6a2002a741012002422088a710df060b200141a00a6a41186a220c4200370300200141a00a6a41106a22094200370300200141a00a6a41086a22074200370300200142003703a00a41a8e7cb00ad4280808080f001842202100122042900002106200141f8056a41086a2205200441086a290000370300200120063703f8052004103520072005290300370300200120012903f8053703a00a419ce7cb00ad4280808080c0018422061001220429000021082005200441086a290000370300200120083703f80520041035201020012903f805370000201041086a22042005290300370000200141a0096a41086a22032007290300370300200141a0096a41106a220d2009290300370300200141a0096a41186a220e200c290300370300200120012903a00a3703a009200141e0006a200141a0096a10e1022001280260210f20012903682108200c42003703002009420037030020074200370300200142003703a00a20021001220a29000021022005200a41086a290000370300200120023703f805200a103520072005290300370300200120012903f8053703a00a20061001220a29000021022005200a41086a290000370300200120023703f805200a1035201020012903f8053700002004200529030037000020032007290300370300200d2009290300370300200e200c290300370300200120012903a00a3703a0092001200842017c4201200f1b22023703a00a2011201842808080808001841002200c42003703002009420037030020074200370300200142003703a00a41a3edcb00ad4280808080f000841001220a29000021062005200a41086a290000370300200120063703f805200a103520072005290300370300200120012903f8053703a00a41a5ebcb00ad4280808080c001841001220a29000021062005200a41086a290000370300200120063703f805200a1035201020012903f8053700002004200529030037000020032007290300370300200d2009290300370300200e200c290300370300200120012903a00a3703a009200141d8006a200141a0096a412010c0012002200128025c410020012802581b10de060b410810332205450d072005201e36020420052016360200410810332207450d0720072017201441a0016c6a222436020420072017360200200141c00b6a200541dc97ca0010cb05200141d00b6a200741dc97ca0010cb0520012802c80b210420012802c40b211220012802c00b2110200141e00b6a41086a200141d00b6a41086a280200360200200120012903d00b3703e00b20014198076a41186a2207420037030020014198076a41106a220c420037030020014198076a41086a22054200370300200142003703980741a9d1cb00ad4280808080c0008422021001220929000021062005200941086a29000037030020012006370398072009103541add1cb00ad4280808080a001842206100122032900002108200141e8056a41086a2209200341086a290000370300200120083703e80520031035201320012903e805370000201341086a22032009290300370000200141f8056a41086a220d2005290300370300200141f8056a41106a220e200c290300370300200141f8056a41186a220a200729030037030020012001290398073703f805200141c8006a200141f8056a10e10202400240024002402001290350420020012802481b220b42017c2208200b540d0020074200370300200c420037030020054200370300200142003703980720021001220f290000210b2005200f41086a2900003703002001200b37039807200f103520061001220f29000021062009200f41086a290000370300200120063703e805200f1035201320012903e80537000020032009290300370000200d2005290300370300200e200c290300370300200a200729030037030020012001290398073703f805200120083703a00a200141f8056aad4280808080800484220620184280808080800184100220074200370300200c420037030020054200370300200142003703980720021001220f29000021022005200f41086a2900003703002001200237039807200f103541b7d1cb00ad4280808080b001841001220f29000021022009200f41086a290000370300200120023703e805200f1035201320012903e80537000020032009290300370000200d2005290300370300200e200c290300370300200a200729030037030020012001290398073703f805200441286c4104722205417f4c0d08200510332207450d09200141003602a80a200120053602a40a200120073602a00a2004200141a00a6a10770240024020040d0020012802a80a210520012802a00a21040c010b2010200441286c6a210d20012802a40a210c20012802a80a210520102107034002400240200c20056b4120490d0020012802a00a2104200c21090c010b200541206a22092005490d08200c41017422042009200420094b1b22094100480d0802400240200c0d00024020090d00410121040c020b200910332204450d100c010b20012802a00a2104200c2009460d002004200c200910372204450d0f0b200120093602a40a200120043602a00a0b200420056a220c2007290000370000200c41186a200741186a290000370000200c41106a200741106a290000370000200c41086a200741086a2900003700002001200541206a22033602a80a200741206a290300210202400240200920036b4108490d00200541286a21052009210c0c010b200341086a22052003490d082009410174220c2005200c20054b1b220c4100480d080240024020090d000240200c0d00410121040c020b200c10332204450d100c010b2009200c460d0020042009200c10372204450d0f0b2001200c3602a40a200120043602a00a0b200420036a2002370000200120053602a80a200d200741286a2207470d000b0b20012802a40a210720062005ad4220862004ad84100202402007450d00200410350b02402012450d00201241286c450d00201010350b200842017c22022008540d0120014198076a41186a220c420037030020014198076a41106a2209420037030020014198076a41086a22054200370300200142003703980741a9d1cb00ad4280808080c000841001220729000021082005200741086a29000037030020012008370398072007103541e2d1cb00ad4280808080e00184100122072900002108200141e8056a41086a2204200741086a290000370300200120083703e80520071035201320012903e805370000201341086a2004290300370000200141f8056a41086a2005290300370300200141f8056a41106a2009290300370300200141f8056a41186a200c29030037030020012001290398073703f805200141a00a6a200141f8056a10b10220012d00a00a2105200141c8056a41186a2207200141b90a6a290000370300200141c8056a41106a220c200141b10a6a290000370300200141c8056a41086a2209200141a90a6a290000370300200120012900a10a3703c8050240024020054101460d00200141a8056a41186a4200370300200141a8056a41106a4200370300200141a8056a41086a4200370300200142003703a8050c010b200141a8056a41186a2007290300370300200141a8056a41106a200c290300370300200141a8056a41086a2009290300370300200120012903c8053703a8050b20014198076a41186a2207420037030020014198076a41106a220c420037030020014198076a41086a22054200370300200142003703980741a9d1cb00ad4280808080c00084220810012209290000210b2005200941086a2900003703002001200b370398072009103541f0d1cb00ad4280808080c00184220b100122042900002111200141e8056a41086a2209200441086a290000370300200120113703e80520041035201320012903e805370000201341086a22032009290300370000200141f8056a41086a220d2005290300370300200141f8056a41106a220e200c290300370300200141f8056a41186a220a200729030037030020012001290398073703f805200141c0006a200141f8056a412010c0012001280244210f2001280240211220074200370300200c420037030020054200370300200142003703980720081001220429000021082005200441086a290000370300200120083703980720041035200b1001220429000021082009200441086a290000370300200120083703e80520041035201320012903e80537000020032009290300370000200d2005290300370300200e200c290300370300200a200729030037030020012001290398073703f805200141003602a00a200620184280808080c000841002200141a0096a41186a200141a8056a41186a290300370300200141a0096a41106a200141a8056a41106a290300370300200141a0096a41086a200141a8056a41086a290300370300200120012903a8053703a009417f200f410020121b220341016a220520052003491b410d74412872220a417f4c0d08200a1033220d450d09200d20012903a009370000200d2002370020200d41186a200141a0096a41186a290300370000200d41106a200141a0096a41106a290300370000200d41086a200141a0096a41086a2903003700004128210e410021074100210502400340024002402005450d00200c2009470d01200441ffffff3f71450d00200510350b200720034f0d02200141e8056a200710fe03200141a00a6a20012802e805220c20012802f005220910c302024020012802a00a2205450d002009ad422086200cad8410070b20012902a40a420020051b21022005410120051b2105024020012802ec05450d00200c10350b200741016a210720052002422088a74105746a21092002a721042005210c0c010b20014198076a41186a200c41186a220f29000037030020014198076a41106a200c41106a221229000037030020014198076a41086a200c41086a22102900003703002001200c290000370398072010290000210220122900002108200c290000210b200141f8056a41186a2212200f290000370300200141f8056a41106a220f2008370300200141f8056a41086a221020023703002001200b3703f805200141a00a6a41186a22142012290300370300200141a00a6a41106a2212200f290300370300200141a00a6a41086a22152010290300370300200120012903f8053703a00a0240200a200e6b411f4b0d00200e41206a220f200e490d08200a4101742210200f2010200f4b1b220f4100480d0802400240200a0d000240200f0d004101210d0c020b200f1033220d450d100c010b200a200f460d00200d200a200f1037220d450d0f0b200f210a0b200c41206a210c200d200e6a220f20012903a00a370000200f41186a2014290300370000200f41106a2012290300370000200f41086a2015290300370000200e41206a210e0c000b0b200ead422086200dad84100922052900002102200541086a2900002108200541106a290000210b200141c8056a41186a200541186a290000370300200141c8056a41106a200b370300200141c8056a41086a2008370300200120023703c805200510350240200a450d00200d10350b20014198076a41186a220c420037030020014198076a41106a2209420037030020014198076a41086a22054200370300200142003703980741a9d1cb00ad4280808080c0008422021001220729000021082005200741086a29000037030020012008370398072007103541e2d1cb00ad4280808080e00184100122072900002108200141e8056a41086a2204200741086a290000370300200120083703e80520071035201320012903e805370000201341086a2004290300370000200141f8056a41086a2005290300370300200141f8056a41106a2009290300370300200141f8056a41186a200c29030037030020012001290398073703f805412010332205450d09200520012903c805370000200541186a200141c8056a41186a2203290300370000200541106a200141c8056a41106a220d290300370000200541086a200141c8056a41086a220e29030037000020062005ad4280808080800484100220051035200141a0086a41186a200141a8056a41186a2903002208370300200141a0086a41106a200141a8056a41106a290300220b370300200141a0086a41086a200141a8056a41086a2903002211370300200120012903a805221a3703a008200141a00a6a41186a220a2008370300200141a00a6a41106a220f200b370300200141a00a6a41086a221220113703002001201a3703a00a20014198076a41186a220c420037030020014198076a41106a2209420037030020014198076a41086a22074200370300200142003703980720021001220529000021022007200541086a29000037030020012002370398072005103541d8d1cb00ad4280808080a00184100122052900002102200141e8056a41086a2204200541086a290000370300200120023703e80520051035201320012903e805370000201341086a22102004290300370000200141f8056a41086a22142007290300370300200141f8056a41106a22152009290300370300200141f8056a41186a2227200c29030037030020012001290398073703f805412010332205450d09200520012903a00a370000200541186a200a290300370000200541106a200f290300370000200541086a201229030037000020062005ad4280808080800484100220051035200c42003703002009420037030020074200370300200142003703980741a9d1cb00ad4280808080c000841001220529000021022007200541086a29000037030020012002370398072005103541e2d1cb00ad4280808080e001841001220529000021022004200541086a290000370300200120023703e80520051035201320012903e8053700002010200429030037000020142007290300370300201520092903003703002027200c29030037030020012001290398073703f805200141a00a6a200141f8056a10b10220012d00a00a21052003200141b90a6a290000370300200d200141b10a6a290000370300200e200141a90a6a290000370300200120012900a10a3703c8050240024020054101460d00200141b8096a4200370300200141b0096a4200370300200141a8096a4200370300200142003703a0090c010b200141a0096a41186a200141c8056a41186a290300370300200141a0096a41106a200141c8056a41106a290300370300200141a0096a41086a200141c8056a41086a290300370300200120012903c8053703a0090b200141f8056a41086a2205200141e00b6a41086a280200360200200141f8056a41246a200141a0096a41186a290300370200200141f8056a411c6a200141a0096a41106a290300370200200141f8056a41146a200141a0096a41086a290300370200200120012903e00b22023703f805200120012903a00937028406200141cc0a6a200141f8056a41286a280200360200200141a00a6a41246a20014198066a290300370200200141a00a6a411c6a200141f8056a41186a290300370200200141a00a6a41146a200141f8056a41106a290300370200200141a00a6a410c6a2005290300370200200120023702a40a200141003602a00a20014198076a200141a00a6a108104200141d3056a20014198076a41086a28020036000020012001290398073700cb0520014198076a410c6a200141cf056a290000370000200141c28289aa0436009907200141023a009807200120012900c80537009d0720014198076a1082040240200141a00a6a41086a2802002205450d00200541286c450d0020012802a40a10350b41081033220c450d0b200c201e360204200c2016360200410810332227450d0b2027202436020420272017360200200141f8056a41186a4200370300200141f8056a41106a22264200370300200141f8056a41086a22054200370300200142003703f80541d1c4c700ad4280808080e000841001220729000021022005200741086a290000370300200120023703f8052007103541e7c4c700ad4280808080e00084100122072900002102200141e8056a41086a2209200741086a290000370300200120023703e80520071035202620012903e8052202370300200141a0096a41086a2005290300370300200141a0096a41106a2002370300200141a0096a41186a2009290300370300200120012903f8053703a009200141386a200141a0096a412010c00120012802382104200128023c2103200141a00a6a41186a4200370300200141a00a6a41106a22204200370300200141a00a6a41086a22074200370300200142003703a00a4188e8cb00ad42808080808001841001220929000021022005200941086a290000370300200120023703f8052009103520072005290300370300200120012903f8053703a00a4194c4c400ad4280808080e0018410012205290000210220014198076a41086a2209200541086a29000037030020012002370398072005103520202001290398072202370300200141a0086a41086a2007290300370300200141a0086a41106a2002370300200141a0086a41186a2009290300370300200120012903a00a3703a0082001200341e4006a41e40020041b3602a00a200141a0086aad4280808080800484221120184280808080c0008410020240200c2802002205200c280204460d00200c200541a0016a360200200141003a00c00a200541e0006a2107410021050340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141f8056a41086a200141a00a6a41086a290300220237030020014198076a41186a2205200141a00a6a41186a29030037030020014198076a41106a2207200141a00a6a41106a29030037030020014198076a41086a22092002370300200120012903a00a22023703f8052001200237039807200c280204200c2802006b41a0016e41057441206a220410332212450d0a2012200129039807370000201241186a2005290300370000201241106a2007290300370000201241086a200929030037000041012109200141013602a808200120123602a00820012004410576220a3602a408200c2802002205200c280204460d03200c200541a0016a360200200141003a00c00a200541e0006a2107410021050340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141a0096a41086a2210200141a00a6a41086a22132903002202370300200141f8056a41186a2204200141a00a6a41186a2214290300370300200141f8056a41106a2203200141a00a6a41106a2215290300370300200141f8056a41086a220d2002370300200120012903a00a22023703a009200120023703f805410121090340200141a8056a41186a20042903002202370300200141a8056a41106a20032903002206370300200141a8056a41086a200d2903002208370300200120012903f805220b3703a805200141c8056a41186a22072002370300200141c8056a41106a220e2006370300200141c8056a41086a220f20083703002001200b3703c80502402009200a470d00200141a0086a200a200c280204200c2802006b41a0016e41016a108a0120012802a00821120b201220094105746a220520012903c805370000200541186a2007290300370000200541106a200e290300370000200541086a200f2903003700002001200941016a22093602a8080240200c2802002207200c280204470d0020012802a408210a0c050b200c200741a0016a36020041002105200141003a00c00a200741e0006a21070340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b2010201329030022023703002004201429030037030020032015290300370300200d2002370300200120012903a00a22023703a009200120023703f80520012802a408210a0c000b0b200c10354100210a41012112410021090c030b41e6dcc30041c90041b0ddc3001064000b41e6dcc30041c90041c0ddc3001064000b200c10350b200141a00a6a41186a220c4200370300200141a00a6a41106a22044200370300200141a00a6a41086a22054200370300200142003703a00a4188e8cb00ad4280808080800184100122072900002102200141f8056a41086a2203200741086a290000370300200120023703f8052007103520052003290300370300200120012903f8053703a00a418fd1cb00ad4280808080c0008410012207290000210220014198076a41086a2203200741086a2900003703002001200237039807200710352020200129039807370000202041086a2003290300370000200141a0086a41086a2005290300370300200141a0086a41106a2004290300370300200141a0086a41186a200c290300370300200120012903a00a3703a008200941057422034104722205417f4c0d04200510332207450d05200141003602a80a200120053602a40a200120073602a00a2009200141a00a6a10770240024020090d0020012802a80a210720012802a40a210920012802a00a210e0c010b410020012802a80a22076b210420012802a00a210e20012802a40a21092012210d0340200d21050240200920046a411f4b0d00200741206a220c2007490d042009410174220d200c200d200c4b1b220c4100480d04024002400240024020090d000240200c0d004101210e0c020b200c1033210e0c030b2009200c470d010b200c21090c020b200e2009200c1037210e0b200c2109200e450d0a0b200541206a210d200e20076a220c2005290000370000200c41186a200541186a290000370000200c41106a200541106a290000370000200c41086a200541086a290000370000200441606a2104200741206a2107200341606a22030d000b200120093602a40a200120073602a80a2001200e3602a00a0b20112007ad422086200ead84100202402009450d00200e10350b0240200a41ffffff3f71450d00201210350b2027103541081033220c450d07200c201e360204200c201636020041081033221e450d07201e2024360204201e20173602000240024002400240201f450d000240200c2802002205200c280204460d00200c200541a0016a360200200141003a00c00a20054180016a2107410021050340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141f8056a41086a200141a00a6a41086a290300220237030020014198076a41186a2205200141a00a6a41186a29030037030020014198076a41106a2207200141a00a6a41106a29030037030020014198076a41086a22092002370300200120012903a00a22023703f8052001200237039807200c280204200c2802006b41a0016e41057441206a220410332212450d0a2012200129039807370000201241186a2005290300370000201241106a2007290300370000201241086a200929030037000041012109200141013602a808200120123602a00820012004410576220a3602a408200c2802002205200c280204460d02200c200541a0016a360200200141003a00c00a20054180016a2107410021050340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b200141a0096a41086a2210200141a00a6a41086a22132903002202370300200141f8056a41186a2204200141a00a6a41186a2214290300370300200141f8056a41106a2203200141a00a6a41106a2215290300370300200141f8056a41086a220d2002370300200120012903a00a22023703a009200120023703f805410121090340200141a8056a41186a20042903002202370300200141a8056a41106a20032903002206370300200141a8056a41086a200d2903002208370300200120012903f805220b3703a805200141c8056a41186a22072002370300200141c8056a41106a220e2006370300200141c8056a41086a220f20083703002001200b3703c80502402009200a470d00200141a0086a200a200c280204200c2802006b41a0016e41016a108a0120012802a00821120b201220094105746a220520012903c805370000200541186a2007290300370000200541106a200e290300370000200541086a200f2903003700002001200941016a22093602a8080240200c2802002207200c280204470d0020012802a408210a0c040b200c200741a0016a36020041002105200141003a00c00a20074180016a21070340200141003a00d00b200141a00a6a20056a200720056a2d00003a00002001200541016a22053a00c00a20054120470d000b2010201329030022023703002004201429030037030020032015290300370300200d2002370300200120012903a00a22023703a009200120023703f80520012802a408210a0c000b0b200c10354100210a41012112410021090c020b201e1035200c10350c020b200c10350b200141f8056a41186a220c4200370300200141f8056a41106a22044200370300200141f8056a41086a22054200370300200142003703f80541fdd0cb00ad4280808080a002841001220729000021022005200741086a290000370300200120023703f80520071035418fd1cb00ad4280808080c00084100122072900002102200141e8056a41086a2203200741086a290000370300200120023703e80520071035202620012903e805370000202641086a2003290300370000200141a0096a41086a2005290300370300200141a0096a41106a2004290300370300200141a0096a41186a200c290300370300200120012903f8053703a009200941057422034104722205417f4c0d05200510332207450d06200141003602a80a200120053602a40a200120073602a00a2009200141a00a6a10770240024020090d0020012802a80a210720012802a40a210920012802a00a210e0c010b410020012802a80a22076b210420012802a00a210e20012802a40a21092012210d0340200d21050240200920046a411f4b0d00200741206a220c2007490d052009410174220d200c200d200c4b1b220c4100480d05024002400240024020090d000240200c0d004101210e0c020b200c1033210e0c030b2009200c470d010b200c21090c020b200e2009200c1037210e0b200c2109200e450d0b0b200541206a210d200e20076a220c2005290000370000200c41186a200541186a290000370000200c41106a200541106a290000370000200c41086a200541086a290000370000200441606a2104200741206a2107200341606a22030d000b200120093602a40a200120073602a80a2001200e3602a00a0b201b42808080808004842007ad422086200ead84100202402009450d00200e10350b0240200a41ffffff3f71450d00201210350b201e10350b02402028450d00202841a0016c450d00201710350b02402025202345720d00200128029c0541ffffff3f71450d00202310350b0240202241ffffff3f71450d00202110350b42d0e199cd9a3a21022019a72205450d00200541a0016c450d00201610350b20014198076a41186a2203420037030020014198076a41106a2207420037030020014198076a41086a22054200370300200142003703980741f7edcb00ad4280808080f0008422081001220c2900002106200141a00a6a41086a2209200c41086a290000370300200120063703a00a200c103520052009290300370300200120012903a00a3703980741b6aac000ad42808080809002841001220c2900002106200141a0096a41086a2204200c41086a290000370300200120063703a009200c1035200720012903a0092206370300200141f8056a41086a220c2005290300370300200141f8056a41106a220d2006370300200141f8056a41186a220e200429030037030020012001290398073703f805200141306a200141f8056a10f2012001280230417d710d02200342003703002007420037030020054200370300200142003703980720081001220a29000021062009200a41086a290000370300200120063703a00a200a103520052009290300370300200120012903a00a3703980741d9eecb00ad4280808080d002841001220929000021062004200941086a290000370300200120063703a00920091035200720012903a009370000200741086a2004290300370000200c2005290300370300200d2007290300370300200e200329030037030020012001290398073703f8050240200141f8056a10bd02220541ff01714102460d0020054101710d020b20014198076a41186a2209420037030020014198076a41106a2204420037030020014198076a41086a22054200370300200142003703980741f7edcb00ad4280808080f000841001220c2900002106200141a00a6a41086a2203200c41086a290000370300200120063703a00a200c103520052003290300370300200120012903a00a370398074193eecb00ad42808080808001841001220c2900002106200141a0096a41086a2203200c41086a290000370300200120063703a009200c1035200720012903a009370000200741086a2003290300370000200141f8056a41086a2005290300370300200141f8056a41106a2004290300370300200141f8056a41186a200929030037030020012001290398073703f8054100200141f8056a10e5012205200541ff01714104461b41ff01710e0402010201020b103e000b200141c8056a41186a22044200370300200141c8056a41106a220c4200370300200141c8056a41086a22054200370300200142003703c80541a9d1cb00ad4280808080c0008422061001220929000021082005200941086a290000370300200120083703c8052009103541add1cb00ad4280808080a0018410012203290000210820014198076a41086a2209200341086a290000370300200120083703980720031035200c2001290398072208370300200141a0096a41086a220d2005290300370300200141a0096a41106a220e2008370300200141a0096a41186a220a2009290300370300200120012903c8053703a009200141206a200141a0096a10e1022001280220210f2001290328210820044200370300200c420037030020054200370300200142003703c805200610012203290000210b2005200341086a2900003703002001200b3703c8052003103541c2d1cb00ad4280808080b0018410012203290000210b2009200341086a2900003703002001200b3703980720031035200c200129039807220b370300200d2005290300370300200e200b370300200a2009290300370300200120012903c8053703a009200141106a200141a0096a10e1022001290318210b2001280210210320044200370300200c420037030020054200370300200142003703c80520061001220929000021062005200941086a290000370300200120063703c8052009103541cdd1cb00ad4280808080b00184100122092900002106200141f8056a41086a2204200941086a290000370300200120063703f80520091035200c20012903f8052206370300200141a8056a41086a2005290300370300200141a8056a41106a2006370300200141a8056a41186a2004290300370300200120012903c8053703a8052001200141a8056a10e102427f200b420020031b200842c8017e4200200f1b7c220642c8017c220820082006541b22062001290308420020012802001b7d22082006560d00417f20002008a7417f2008428080808010541b6a220520052000491b220520006b220c20054b0d00200c417f6a41314b0d0041f7edcb00ad4280808080f00084100122052900002106200141a00a6a41086a220c200541086a290000370300200120063703a00a2005103541f393ca00ad4280808080a00184100122052900002106200141a0096a41086a2209200541086a290000370300200120063703a00920051035412010332205450d02200520012903a00a370000200520012903a009370010200541086a200c290300370000200541186a2204200929030037000041201033220c450d02200c2005290000370000200c41186a2004290000370000200c41106a200541106a290000370000200c41086a200541086a290000370000200141a8056a41026a2209200141a00a6a41026a2d00003a0000200120012f00a00a3b01a80520014198076a41106a42a08080808004370300200141003a00b007200120053602a407200142a0808080800437029c072001200c36029807200141b3076a20092d00003a0000200120012f01a8053b00b107200141a00a6a20014198076a10c7010240024020012802a00a4101470d00200141c8056a41186a2205200141bc0a6a290200370300200141c8056a41106a200141b40a6a290200370300200141c8056a41086a200141ac0a6a290200370300200120012902a40a3703c805412010332203450d04200320012903c805370000200341186a2005290300370000200341106a200141c8056a41106a220d290300370000200341086a200141c8056a41086a220e29030037000020014281808080103702a408200120033602a008200141f8056a41186a20014198076a41186a280200360200200141f8056a41106a20014198076a41106a290300370300200141f8056a41086a20014198076a41086a29030037030020012001290398073703f805200141a00a6a200141f8056a10c70141012109024020012802a00a4101470d00200141a00a6a410472210541022109412021044101210c0340200141a0096a41186a200541186a2902002206370300200141a0096a41106a200541106a2902002208370300200141a0096a41086a200541086a290200220b3703002001200529020022183703a009200141c8056a41186a220a2006370300200d2008370300200e200b370300200120183703c80502402009417f6a200c470d00200141a0086a200c4101108a0120012802a00821030b200320046a220c20012903c805370000200c41186a200a290300370000200c41106a200d290300370000200c41086a200e290300370000200120093602a808200141a00a6a200141f8056a10c70120012802a00a4101470d01200441206a2104200941016a210920012802a408210c0c000b0b024020012802fc05450d0020012802f80510350b024020014188066a280200450d0020012802840610350b20012802a40841ffffff3f7121130c010b0240200128029c07450d0020012802980710350b4100211341012103024020012802a807450d0020012802a40710350b410021090b41f7edcb00ad4280808080f00084100122052900002106200141a00a6a41086a220c200541086a290000370300200120063703a00a2005103541cca9c000ad4280808080a00184100122052900002106200141a0096a41086a2204200541086a290000370300200120063703a00920051035412010332205450d02200520012903a00a370000200520012903a009370010200541086a200c290300370000200541186a220d200429030037000041201033220c450d02200c2005290000370000200c41186a200d290000370000200c41106a200541106a290000370000200c41086a200541086a290000370000200141e8056a41026a2204200141a00a6a41026a2d00003a0000200120012f00a00a3b01e80520014198076a41106a42a08080808004370300200141003a00b007200120053602a407200142a0808080800437029c072001200c36029807200141b3076a20042d00003a0000200120012f01e8053b00b107200141a00a6a20014198076a10c9050240024020012d00d00a4102460d00200141c8056a41186a200141a00a6a41186a290300370300200141c8056a41106a200141a00a6a41106a290300370300200141c8056a41086a200141a00a6a41086a290300370300200120012903a00a3703c805024020012802c40a41ffffff3f71450d0020012802c00a10350b412010332210450d04201020012903c805370000201041186a200141c8056a41186a220d290300370000201041106a200141c8056a41106a220e290300370000201041086a200141c8056a41086a220a29030037000020014281808080103702a408200120103602a008200141f8056a41186a20014198076a41186a280200360200200141f8056a41106a20014198076a41106a290300370300200141f8056a41086a20014198076a41086a29030037030020012001290398073703f805200141a00a6a200141f8056a10c905024020012d00d00a4102460d00412021044101210c0340200141a0096a41186a2205200141a00a6a41186a290300370300200141a0096a41106a220f200141a00a6a41106a290300370300200141a0096a41086a2212200141a00a6a41086a290300370300200120012903a00a3703a009024020012802c40a41ffffff3f71450d0020012802c00a10350b200d2005290300370300200e200f290300370300200a2012290300370300200120012903a0093703c8050240200c20012802a408470d00200141a0086a200c4101108a0120012802a00821100b201020046a220520012903c805370000200541186a200d290300370000200541106a200e290300370000200541086a200a2903003700002001200c41016a220c3602a808200441206a2104200141a00a6a200141f8056a10c90520012d00d00a4102470d000b0b024020012802fc05450d0020012802f80510350b024020014188066a280200450d0020012802840610350b200141a8056a41086a200141a0086a41086a280200360200200120012903a0083703a8050c010b200141003602b005200142013703a8050240200128029c07450d0020012802980710350b20012802a807450d0020012802a40710350b0240200941808004490d00024020012802ac0541ffffff3f71450d0020012802a80510350b2013450d01200310350c010b20094105742205417f4c0d010240024020090d00200141003602a80a200142013703a00a200141a00a6a41004100108a0120012802a80a210c20012802a00a210d0c010b200510332205450d03200141003602a80a200120093602a40a200120053602a00a200141a00a6a41002009108a012009410574210420012802a00a220d20012802a80a220e4105746a21052003210c03402005200c290000370000200541186a200c41186a290000370000200541106a200c41106a290000370000200541086a200c41086a290000370000200541206a2105200c41206a210c200441606a22040d000b2001200941057441606a410576200e6a41016a220c3602a80a0b20012802a40a2105200141a8056a20012802b005200c410574220c4105752204108a0120012802a805220f20012802b005220e4105746a200d200c109d081a2001200e20046a22123602b0050240200541ffffff3f71450d00200d10350b20014198076a41186a220c420037030020014198076a41106a2204420037030020014198076a41086a22054200370300200142003703980741f7edcb00ad4280808080f0008422061001220e2900002108200141a00a6a41086a220d200e41086a290000370300200120083703a00a200e10352005200d290300370300200120012903a00a370398074192aac000ad4280808080a002841001220a2900002108200141a0096a41086a220e200a41086a290000370300200120083703a009200a1035200720012903a009370000200741086a220a200e290300370000200141f8056a41086a22102005290300370300200141f8056a41106a22142004290300370300200141f8056a41186a2215200c29030037030020012001290398073703f805200141203602a40a2001200141f8056a3602a00a20032009200141a00a6a10980202402013450d00200310350b20012802ac052103200c4200370300200442003703002005420037030020014200370398072006100122092900002106200d200941086a290000370300200120063703a00a200910352005200d290300370300200120012903a00a3703980741a4aac000ad4280808080a00284100122092900002106200e200941086a290000370300200120063703a00920091035200720012903a009370000200a200e29030037000020102005290300370300201420042903003703002015200c29030037030020012001290398073703f805200141203602a40a2001200141f8056a3602a00a200f2012200141a00a6a1098020240200341ffffff3f71450d00200f10350b20014198076a41186a2209420037030020014198076a41106a2204420037030020014198076a41086a22054200370300200142003703980741f7edcb00ad4280808080f000841001220c2900002106200141a00a6a41086a2203200c41086a290000370300200120063703a00a200c103520052003290300370300200120012903a00a3703980741b6aac000ad42808080809002841001220c2900002106200141a0096a41086a2203200c41086a290000370300200120063703a009200c1035200720012903a009370000200741086a2003290300370000200141f8056a41086a2005290300370300200141f8056a41106a2004290300370300200141f8056a41186a200929030037030020012001290398073703f805410110332205450d04200541013a000020054101410510372205450d0420052000360001200141f8056aad42808080808004842005ad4280808080d000841002200510350b02400240200041044b0d00200141a8056a21030c010b200141c8056a41186a4200370300200141c8056a41106a220c4200370300200141c8056a41086a22054200370300200142003703c8054193d1cb00ad4280808080a001841001220729000021062005200741086a290000370300200120063703c8052007103541e0caca00ad4280808080e0008410012207290000210620014198076a41086a2209200741086a290000370300200120063703980720071035200c2001290398072206370300200141a0096a41086a2005290300370300200141a0096a41106a2006370300200141a0096a41186a2009290300370300200120012903c8053703a009200141a00a6a200141a0096a10b60220012802a00a2205410420051b210d0240024020012902a40a420020051b2206422088a7220941c4006c22050d00410021040c010b2000417b6a210c200d20056a210741002104200d210502400340024020052d00004101460d00200541046a280200200c4f0d020b200441016a21042007200541c4006a2205470d000b0b200420094b0d040b200920046b210e200642ffffffff0f832106200d200441c4006c22076a2103200d210c02400340024020070d00200321050c020b200741bc7f6a2107200c2d00002109200c41c4006a2205210c20094102470d000b0b0240034020032005460d0120052d00002107200541c4006a210520074102470d000b0b0240200e450d0002402004450d00200d200d200441c4006c6a200e41c4006c109e081a0b200ead42208620068421060b200141c8056a41186a4200370300200141c8056a41106a220c4200370300200141c8056a41086a22054200370300200142003703c8054193d1cb00ad4280808080a00184100122072900002108200141e8056a41086a2209200741086a290000370300200120083703e8052007103520052009290300370300200120012903e8053703c80541e0caca00ad4280808080e00084100122072900002108200141f8056a41086a2209200741086a290000370300200120083703f80520071035200c20012903f8052208370300200141a8056a41086a2005290300370300200141a8056a41106a2008370300200141a8056a41186a2009290300370300200120012903c8053703a805200141a00a6a200d2006422088a710e006200141a8056aad428080808080048420013502a80a42208620012802a00a2207ad8410022006a72105024020012802a40a450d00200710350b200141a8056a21032005450d00200541c4006c450d00200d10350b200141c8056a41186a22044200370300200141c8056a41106a220c4200370300200141c8056a41086a22074200370300200142003703c8054193d1cb00ad4280808080a00184100122052900002106200141e8056a41086a2209200541086a290000370300200120063703e8052005103520072009290300370300200120012903e8053703c805419dd1cb00ad4280808080c00184100122052900002106200141f8056a41086a2209200541086a290000370300200120063703f80520051035200c20012903f8052206370300200141a8056a41086a2007290300370300200141a8056a41106a2006370300200141a8056a41186a2009290300370300200120012903c8053703a805200141003a00d00b2003ad4280808080800484200141d00b6aad428080808010841002200141f8056a10d0042004200141f8056a41186a2203290300370300200c200141f8056a41106a220d29030037030020072009290300370300200120012903f8053703c805412410332205450d03200520012903c80537000020054114360220200541186a2004290300370000200541106a200c290300370000200541086a200729030037000020014281808080103702a40a200120053602a00a200141a00a6a10ab01200141a00a6a41186a2003290300370300200141a00a6a41106a200d290300370300200141a00a6a41086a2009290300370300200120012903f8053703a00a200141a00a6a10d30410ff03200141f00b6a240020020f0b1044000b1045000b20042009104f000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541f0bbc800ad4280808080f00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541cebbc800ad4280808080800284100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541c7bbc800ad4280808080f00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b130020004103360204200041ccbcc8003602000b3400200041d5c3c80036020420004100360200200041146a4101360200200041106a41dcc3c800360200200041086a42043702000b910101057f230041206b22022400200241186a22034200370300200241106a22044200370300200241086a220542003703002002420037030002404120103322060d001045000b20062002290300370000200042a0808080800437020420002006360200200641186a2003290300370000200641106a2004290300370000200641086a2005290300370000200241206a24000b13002000410c36020420004180c7c8003602000b3400200041a29bc80036020420004100360200200041146a4110360200200041106a4180a3c900360200200041086a42073702000b130020004107360204200041c8b8c9003602000b3501017f02404108103322020d001045000b20004288808080800137020420002002360200200242f0f2bd99f7edd8b4e5003700000b2e01017f02404104103322020d001045000b20004284808080c0003702042000200236020020024180ee053600000b3b01017f02404110103322020d001045000b20024200370008200242808094f6c2d7e8d800370000200042908080808002370204200020023602000b2c01017f02404104103322020d001045000b20004284808080c000370204200020023602002002410a3600000b13002000410836020420004188c2c9003602000b340020004186f0cb0036020420004100360200200041146a4105360200200041106a41a0ebc900360200200041086a42083702000b130020004109360204200041e0f4c9003602000b3501017f02404108103322020d001045000b20004288808080800137020420002002360200200242f0f2bda1a7ee9cb9f9003700000b2b01017f02404101103322020d001045000b200042818080801037020420002002360200200241143a00000b2e01017f02404104103322020d001045000b20004284808080c0003702042000200236020020024180e1013600000b2e01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241a0c21e3600000b2e01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241d086033600000b900a030a7f027e017f230041106b220224002002410036020820024201370300024002400240412010332203450d002003200029004c370000200341186a2204200041e4006a290000370000200341106a2205200041dc006a290000370000200341086a2206200041d4006a290000370000412010332207450d02200241203602042002200736020020072003290000370000200741086a2006290000370000200741106a2005290000370000200741186a200429000037000020024120360208200310352007412041c00010372203450d022003200029006c370020200341286a200041f4006a290000370000200341306a200041fc006a290000370000200341386a20004184016a29000037000020022003360200200242c080808080083702040240024020002903004201510d00200341c00041800110372203450d04200341003a004020024180013602042002200336020041c10021070c010b200341c00041800110372203450d03200341013a00402003200041086a2207290000370041200341e9006a200041306a2903003700002003200041286a290300370061200341c9006a200741086a290000370000200341d1006a200741106a290000370000200341d9006a200741186a2900003700002002200336020020024280818080900c37020441f10021070b200220073602080240024020002802384101460d00200320076a41003a0000200741016a21030c010b200320076a41013a00002002200741016a22033602082000413c6a2802002106024002402002280204220520036b4104490d00200228020021040c010b41000d0320054101742204200341046a2208200420084b1b22084100480d030240024020050d002008103322040d010c060b2002280200210420052008460d0020042005200810372204450d050b20022008360204200220043602000b200420036a2006360000200741056a21030b2002200336020820002802402109200041c8006a2802002200200210770240024020000d002002280208210020022802042107200228020021050c010b2009200041306c6a210a41002002280208220b6b210620022802042107410021030340200b20036a210802400240200720066a4120490d0020022802002105200721040c010b200841206a22002008490d04200741017422042000200420004b1b22044100480d040240024020070d00024020040d00410121050c020b200410332205450d070c010b2002280200210520072004460d0020052007200410372205450d060b20022004360204200220053602000b2005200b6a20036a2207200920036a2200290000370000200741186a200041186a290000370000200741106a200041106a290000370000200741086a200041086a2900003700002002200841206a2207360208200041286a290300210c200041206a290300210d02400240200420066a41606a410f4d0d00200421070c010b200741106a220e2007490d0420044101742207200e2007200e4b1b22074100480d040240024020040d00024020070d00410121050c020b200710332205450d070c010b20042007460d0020052004200710372205450d060b20022007360204200220053602000b2005200b6a20036a220441286a200c370000200441206a200d3700002002200841306a360208200641506a2106200341306a2103200a200041306a470d000b200b20036a21000b20012902002000ad4220862005ad84100202402007450d00200510350b200241106a24000f0b1045000b103e000b103c000b990907027f027e017f017e027f047e047f230041306b2203240002400240024002400240024020002802002d0000200141ff0171460d0020002802082104200341206a200210b806200341106a20032802202201200328022810b4024200210520032902144200200328021022001b210602402003280224450d00200110350b2000410820001b2107428080d287e2bc2d210802402006422088a72209450d0002400240200941186c22000d0042002105428080d287e2bc2d2108410021010c010b200720006a210a4200210b428080d287e2bc2d210c4100210120072100024003400240200c200041086a290300220d7d2208200c56200b200041106a290300220e7d200c200d54ad7d2205200b562005200b511b450d00200041086a200d200c7d370300200041106a200e200b7d200d200c54ad7d37030042002108420021050c020b200141016a21012008210c2005210b200a200041186a2200470d000b0b200120094b0d030b200341106a200210b806200920016b220a41186c4104722200417f4c0d032003350218210d2003280210210f200010332210450d04200341003602282003200036022420032010360220200a200341206a10770240024020012009470d002003280228210020032802242101200328022021090c010b2007200141186c6a21102007200941186c6a2111200328022421012003280228210003402010280200211202400240200120006b4104490d00200328022021092001210a0c010b200041046a220a2000490d0820014101742209200a2009200a4b1b220a4100480d080240024020010d000240200a0d00410121090c020b200a103322090d010c0b0b200328022021092001200a460d0020092001200a10372209450d0a0b2003200a360224200320093602200b200920006a20123600002003200041046a2212360228201041106a290300210c201041086a290300210b02400240200a20126b4110490d00200041146a2100200a21010c010b201241106a22002012490d08200a41017422012000200120004b1b22014100480d0802400240200a0d00024020010d00410121090c020b200110332209450d0b0c010b200a2001460d002009200a200110372209450d0a0b20032001360224200320093602200b200920126a220a200c370008200a200b37000020032000360228201041186a22102011470d000b0b200d422086200fad842000ad4220862009ad84100202402001450d00200910350b2003280214450d00200f10350b2008428080d287e2bc2d56ad210c02402006a72200450d00200041186c450d00200710350b2005200c7c210b200341206a200210ba06200341086a200328022022002003280228220110c0012003200328020c41016a410120032802081b220a3602102001ad4220862000ad84200341106aad4280808080c00084100202402003280224450d00200010350b428080d287e2bc2d20087d210c4200200b7d210b0240200a410a490d00200210b4060b2004200c20042903007c2205370300200441086a2200200b20002903007c2005200c54ad7c370300410021020b200341306a240020020f0b2001200941ac82ca001059000b1044000b1045000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541e0aec900ad4280808080b00284100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041a29bc800ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541acb0c900ad4280808080800184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b802304057f017e037f037e230041c0036b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802000e1c00011302030405060708090a0b0c0d0e0f1011121313131415161713000b20024180016a200141086a109d0320004100360200200041106a20024180016a41086a290300370300200041086a2002290380013703000c170b20024180016a200141046a109a03200041013602002000413c6a200241b8016a280200360200200041346a200241b0016a2903003702002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c160b20004103360200200041086a200141086a2903003703000c150b20024180016a200141046a109e03200041043602002000410c6a20024188016a28020036020020002002290380013702040c140b02400240024002400240024020012d0004417f6a220341034b0d00200141046a210420030e0401020304010b41cfa2cc00412841c086cc00103f000b200141086a2802002103410121050c030b41022105200241026a200441036a2d00003a000020024180016a41086a200141146a29020037030020024190016a2001411c6a29020037030020024198016a200141246a2d00003a0000200220042f00013b010020022001410c6a29020037038001200141086a2802002103200141286a28020021010c020b200141086a2802002103410321050c010b200241026a200441036a2d00003a000020024180016a41086a200141146a29020037030020024190016a2001411c6a29020037030020024198016a200141246a2d00003a0000200220042f00013b010020022001410c6a29020037038001200141086a2802002103200141286a2802002101410421050b200020053a0004200020022f01003b000520004105360200200041086a20033602002000410c6a200229038001370200200041286a2001360200200041076a200241026a2d00003a0000200041146a20024180016a41086a2903003702002000411c6a20024190016a290300370200200041246a20024198016a2802003602000c130b20024180016a200141086a108503200041086a20024180016a41e000109d081a200041063602000c120b20024180016a200141086a108702200041086a20024180016a418802109d081a200041073602000c110b02400240200128020422060d00410021030c010b20024180016a41186a200141286a29000037030020024180016a41106a200141206a29000037030020024188016a200141186a29000037030020024180016a41286a200141386a29000037030020024180016a41306a200141c0006a29000037030020024180016a41386a200141c8006a29000037030020024180016a41c8006a200141d8006a29000037030020024180016a41d0006a200141e0006a29000037030020024180016a41d8006a200141e8006a2900003703002002200141106a290000370380012002200141306a2900003703a0012002200141d0006a2900003703c00120024180016a41f8006a20014188016a29000037030020024180016a41f0006a20014180016a29000037030020024180016a41e8006a200141f8006a2900003703002002200141f0006a2900003703e0012001410c6a2802002201417f4c0d120240024020010d0041002105410121030c010b200110332203450d14200121050b0240024020052001490d00200521040c010b200541017422042001200420014b1b22044100480d15024020050d002004103322030d010c170b20052004460d0020032005200410372203450d160b200320062001109d081a200220024180016a418001109d081a2001ad4220862004ad8421070b20002003360204200041086a2007370200200041106a2002418001109d081a200041083602000c100b20024180016a200141086a10a00320004109360200200041386a20024180016a41306a290300370300200041306a20024180016a41286a290300370300200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c0f0b20024180016a200141046a10a1032000410a3602002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c0e0b20024180016a200141046a10a1032000410b3602002000412c6a200241a8016a290300370200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c0d0b20024180016a200141086a1086032000410c360200200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c0c0b0240024002400240024002400240024020012d0004417f6a220441064b0d00200141046a21034107210520040e0701020304050607010b41cfa2cc00412841c086cc00103f000b20024198016a200341196a29000037030020024190016a200341116a29000037030020024188016a200341096a2900003703002002200329000137038001410121050c050b20024198016a200341196a29000037030020024190016a200341116a29000037030020024188016a200341096a2900003703002002200329000137038001410221050c040b20024180016a41186a200341196a29000037030020024180016a41106a200341116a29000037030020024180016a41086a200341096a290000370300200241086a200341296a290000370300200241106a200341316a290000370300200241186a200341396a29000037030020022003290001370380012002200341216a290000370300410321050c030b200141106a280200220841ffffff3f712008470d0f20084105742203417f4c0d0f200141086a28020021040240024020030d00410121050c010b200310332205450d110b41002101200241003602082002200536020020022003410576360204200241002008108a012002280208210902402008450d0020084105742106200228020020094105746a210a0340200a20016a2203200420016a2205290000370000200341186a200541186a290000370000200341106a200541106a290000370000200341086a200541086a2900003700002006200141206a2201470d000b200841057441606a41057620096a41016a21090b2002418b016a20093600002002200229030037008301410421050c020b20024198016a200341196a29000037030020024190016a200341116a29000037030020024188016a200341096a2900003703002002200329000137038001410521050c010b20024198016a200341196a29000037030020024190016a200341116a29000037030020024188016a200341096a2900003703002002200329000137038001410621050b200020053a0004200020022903800137000520002002290300370025200020022f00bc033b00452000410d6a20024180016a41086a290300370000200041156a20024180016a41106a2903003700002000411d6a20024180016a41186a2903003700002000412d6a200241086a290300370000200041356a200241106a2903003700002000413d6a200241186a290300370000200041c7006a200241be036a2d00003a00002000410d3602000c0b0b2000410e360200200020012802043602040c0a0b2001410c6a2802002203417f4c0d0a200128020421060240024020030d0041002101410121040c010b200310332204450d0c200321010b0240024020012003490d00200121050c010b200141017422052003200520034b1b22054100480d0d024020010d00200510332204450d0f0c010b20012005460d0020042001200510372204450d0e0b200420062003109d0821012000410c6a2003360200200041086a2005360200200020013602042000410f3602000c090b20024180016a200141086a10a30320004110360200200041c0006a20024180016a41386a290300370300200041386a20024180016a41306a290300370300200041306a20024180016a41286a290300370300200041286a20024180016a41206a290300370300200041206a20024180016a41186a290300370300200041186a20024180016a41106a290300370300200041106a20024180016a41086a290300370300200041086a2002290380013703000c080b20024180016a200141086a10a403200041086a20024180016a419801109d081a200041113602000c070b20024180016a200141046a10a503200041123602002000412c6a200241a8016a280200360200200041246a200241a0016a2903003702002000411c6a20024198016a290300370200200041146a20024190016a2903003702002000410c6a20024188016a29030037020020002002290380013702040c060b20024180016a200141046a10de04200041046a20024180016a41e800109d081a200041133602000c050b10a703000b20024180016a200141086a10a803200041086a20024180016a41a802109d081a200041173602000c030b20024180016a200141086a10a903200041086a20024180016a41c800109d081a200041183602000c020b20024180016a200141046a10aa03200041046a20024180016a41c400109d081a200041193602000c010b0240024002400240200141086a280200417f6a220a41024b0d0041012105200a0e03030102030b41cfa2cc00412841c086cc00103f000b41012103024002402001410c6a22052d00004101470d00200141106a28020021060c010b200241be036a200541036a2d00003a000020024188016a2001411c6a29020037030020024180016a41106a200141246a29020037030020024198016a2001412c6a2d00003a0000200220052f00013b01bc032002200141146a29020037038001200141106a2802002106410021030b41022105200241ac036a41026a200241bc036a41026a2d00003a0000200241086a20024180016a41086a290300370300200241106a20024180016a41106a290300370300200241186a20024180016a41186a280200360200200220022f01bc033b01ac0320022002290380013703000c010b41012103024002402001410c6a22052d00004101470d00200141106a28020021060c010b200241be036a200541036a2d00003a000020024188016a2001411c6a29020037030020024180016a41106a200141246a29020037030020024198016a2001412c6a2d00003a0000200220052f00013b01bc032002200141146a29020037038001200141106a2802002106410021030b200241ac036a41026a200241bc036a41026a2d00003a0000200241086a20024180016a41086a290300370300200241106a20024180016a41106a290300370300200241186a20024180016a41186a280200360200200220022f01bc033b01ac032002200229038001370300200141c8006a290300210b200141c0006a2903002107200141386a290300210c200141d0006a28020021042001290330210d410321050b200020022f01ac033b000d200041c8006a200b370300200041c0006a2007370300200041386a200c370300200041306a200d3703002000410c6a20033a0000200041086a2005360200200041106a2006360200200041146a2002290300370200200041d0006a20043602002000410f6a200241ae036a2d00003a00002000411c6a200241086a290300370200200041246a200241106a2903003702002000412c6a200241186a2802003602002000411a3602000b200241c0036a24000f0b1044000b1045000b103e000b103c000b9f0303027f017e027f230041206b220224004186f0cb00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003103541c0f0c900ad4280808080f00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000bb10503027f017e047f230041d0006b220224004186f0cb00ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541d8efc900ad4280808080c00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b220224004186f0cb00ad4280808080800184100122032900002104200241086a41086a200341086a290000370300200220043703082003103541d8efc900ad4280808080c00084100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b1300200041013602042000419083ca003602000bb31903077f027e067f230041a0026b22052400200028020021064100210702400240024002400240024002400240200041086a280200220841014b0d0020080e020201020b20082109034020072009410176220a20076a220b2006200b41e8006c6a220b41386a290300200256200b41c0006a290300220c200356200c2003511b1b21072009200a6b220941014b0d000b0b2006200741e8006c6a220941386a290300220d200285200941c0006a290300220c20038584500d012007200d200254200c200354200c2003511b6a21070b200541a0016a41086a200441086a290300370300200541a0016a41106a200441106a290300370300200541a0016a41186a200441186a290300370300200541a0016a41206a200441206a290300370300200541a0016a41286a200441286a290300370300200541a0016a41306a200441306a290300370300200541286a41086a200141086a290000370300200541286a41106a200141106a290000370300200541286a41186a200141186a290000370300200520042903003703a0012005200129000037032820082007490d0302402008200041046a280200470d00200020084101109601200028020021060b2006200741e8006c6a220941e8006a2009200820076b41e8006c109e081a200941c0006a200337030020092002370338200941306a200541a0016a41306a290300370300200941286a200541a0016a41286a290300370300200941206a200541a0016a41206a290300370300200941186a200541a0016a41186a290300370300200941106a200541a0016a41106a290300370300200941086a200541a0016a41086a290300370300200920052903a00137030020092005290328370348200941d0006a200541286a41086a290300370300200941d8006a200541286a41106a290300370300200941e0006a200541286a41186a290300370300200041086a200841016a22093602000c010b0240024002400240024020070d002006210a0c010b20082007417f6a22094d0d012006200941e8006c6a41e8006a210a0b200a2006200841e8006c6a460d00200820074d0d04200a290338200256200a41c0006a290300220c200356200c2003511b0d01200a41e8006a2109200841e8006c20066a200a6b41987f6a210a0340200a450d01200741016a21072009290338210c200941c0006a210b200a41987f6a210a200941e8006a2109200c200256200b290300220c200356200c2003511b0d020c000b0b200541286a41186a2209200141186a290000370300200541286a41106a220a200141106a290000370300200541286a41086a220b200141086a290000370300200541a0016a41086a220e200441086a290300370300200541a0016a41106a220f200441106a290300370300200541a0016a41186a2210200441186a290300370300200541a0016a41206a2211200441206a290300370300200541a0016a41286a2212200441286a290300370300200541a0016a41306a2213200441306a29030037030020052001290000370328200520042903003703a00102402008200041046a280200470d00200020084101109601200041086a2802002108200028020021060b2006200841e8006c6a22072002370338200720052903a00137030020072005290328370348200741c0006a2003370300200741306a2013290300370300200741286a2012290300370300200741206a2011290300370300200741186a2010290300370300200741106a200f290300370300200741086a200e290300370300200741d0006a200b290300370300200741d8006a200a290300370300200741e0006a20092903003703000c010b200541a0016a41086a200441086a290300370300200541a0016a41106a200441106a290300370300200541a0016a41186a200441186a290300370300200541a0016a41206a200441206a290300370300200541a0016a41286a200441286a290300370300200541a0016a41306a200441306a290300370300200541286a41086a200141086a290000370300200541286a41106a200141106a290000370300200541286a41186a200141186a290000370300200520042903003703a0012005200129000037032820082007490d0302402008200041046a280200470d00200020084101109601200028020021060b2006200741e8006c6a220941e8006a2009200820076b41e8006c109e081a200941c0006a200337030020092002370338200941306a200541a0016a41306a290300370300200941286a200541a0016a41286a290300370300200941206a200541a0016a41206a290300370300200941186a200541a0016a41186a290300370300200941106a200541a0016a41106a290300370300200941086a200541a0016a41086a290300370300200920052903a00137030020092005290328370348200941d0006a200541286a41086a290300370300200941d8006a200541286a41106a290300370300200941e0006a200541286a41186a2903003703000b200041086a200841016a22093602000b0240200941e907490d00200041086a2009417f6a22093602002006200941e8006c6a220741106a2903002103200741086a290300210c20072d0000210a20072800012101200741046a280000210e20054180016a41186a220b200741306a29030037030020054180016a41106a2204200741286a29030037030020054180016a41086a2208200741206a290300370300200741186a2903002102200541a0016a41286a220f200741e0006a290300370300200541a0016a41206a2210200741d8006a2903003703002005200237038001200541a0016a41186a2211200741d0006a290300370300200541a0016a41106a2212200741c8006a290300370300200541a0016a41086a2213200741c0006a2903003703002005200e36000320052001360200200520072903383703a001200a4102460d03200541d8006a41086a22072008290300370300200541d8006a41106a22012004290300370300200541d8006a41186a220e200b290300370300200541286a41086a2013290300370300200541286a41106a22132012290300370300200541286a41186a22122011290300370300200541286a41206a22112010290300370300200541286a41286a2210200f2903003703002005200528000336007b200520052802003602782005200529038001370358200520052903a001370328200541186a2010290300370300200541106a2011290300370300200541086a201229030037030020052013290300370300200520052802783602202005200528007b3600232008200729030037030020042001290300370300200b200e290300370300200520052903583703800102400240200a410171450d00200541af016a2003370000200541bf016a20054188016a2d00003a00002005200c3700a701200520052800233600a301200520052802203602a00120052005290380013700b701200541286a200541a0016a10d006200535023042208620052802282207ad841007200528022c450d01200710350c010b2005200c37035820052003370360200c200384500d0020052005360278200541286a2005200541d8006a200541f8006a10f00220052903284201520d0020052903302103200541d8016a200541286a41106a290300370300200541d0016a2003370300200541a0016a41086a41003a0000200541a9016a2005290300370000200541b1016a200541086a290300370000200541b9016a200541106a290300370000200541c1016a200541186a290300370000200541033a00a00141b0b4cc004100200541a0016a10d4010b200541a0016a41086a41033a0000200541a9016a2005290300370000200541b1016a200541086a290300370000200541b9016a200541106a290300370000200541c1016a200541186a290300370000200541123a00a00141b0b4cc004100200541a0016a10d4010b2000280204210b200541a0016a41186a4200370300200541a0016a41106a22044200370300200541a0016a41086a22074200370300200542003703a00141a29bc800ad4280808080f000841001220a29000021032007200a41086a290000370300200520033703a001200a1035419cbac800ad4280808080c000841001220a290000210320054180016a41086a2200200a41086a2900003703002005200337038001200a103520042005290380012203370300200541286a41086a2007290300370300200541286a41106a2003370300200541286a41186a2000290300370300200520052903a001370328200541a0016a2006200910b106200541286aad428080808080048420053502a80142208620052802a0012207ad841002024020052802a401450d00200710350b0240200b450d00200b41e8006c450d00200610350b200541a0026a24000f0b2007200841f483ca001042000b20072008104d000b418484ca004113419884ca001064000b810b031d7f017e017f230041b0016b2202240041012103024020012d00000d002001411d6a2d000021042001411c6a2d000021052001411a6a2f00002106200141196a2d00002107200141186a2d00002108200141166a2f00002109200141156a2d0000210a200141146a2d0000210b200141126a2f0000210c200141116a2d0000210d200141106a2d0000210e2001410e6a2f0000210f2001410d6a2d000021102001410c6a2d000021112001410a6a2f00002112200141096a2d00002113200141086a2d00002114200141066a2f00002115200141056a2d00002116200141046a2d00002117200141026a2f0000211820012d00012103200141206a2d00002119200141216a2d0000211a2001411e6a2f0000211b20024190016a41186a221c420037030020024190016a41106a221d420037030020024190016a41086a22014200370300200242003703900141a29bc800ad4280808080f000841001221e290000211f2001201e41086a2900003703002002201f37039001201e103541ef9bc800ad4280808080f000841001221e290000211f200241c8006a41086a2220201e41086a2900003703002002201f370348201e1035201d2002290348221f370300200241f0006a41086a2001290300370300200241f0006a41106a201f370300200241f0006a41186a20202903003703002002200229039001370370200241c8006a200241f0006a412010d50120022d0048211e201c200241c8006a41196a290000370300201d200241c8006a41116a2900003703002001200241c8006a41096a2900003703002002200229004937039001410021010240201e4101470d00200241f0006a41186a20024190016a41186a290300370300200241f0006a41106a20024190016a41106a290300370300200241f0006a41086a20024190016a41086a2903003703002002200229039001370370410121010b200241206a201a3a00002002411f6a20193a00002002411d6a201b3b00002002411c6a20043a00002002411b6a20053a0000200241196a20063b0000200241186a20073a0000200241176a20083a0000200241156a20093b0000200241146a200a3a0000200241136a200b3a0000200241116a200c3b0000200241106a200d3a00002002410f6a200e3a00002002410d6a200f3b00002002410c6a20103a00002002410b6a20113a0000200241096a20123b0000200241086a20133a0000200220013a0021200220143a0007200220153b0005200220163a0004200220173a0003200220183b0001200220033a00002002413a6a200241f0006a41186a290300370100200241326a200241f0006a41106a2903003701002002412a6a200241f0006a41086a290300370100200241226a221d20022903703701000240200341ff01714101470d002001450d0020024101722201201d412010a0080d00200241c8006a41026a200141026a2d000022033a0000200220012f000022013b01482002410a6a2f0100211d2002410e6a2f0100211e200241126a2f01002105200241166a2f010021082002411a6a2f0100210b2002411e6a2f0100210e20022f01062111200041036a20033a0000200020013b0001200041206a201a3a00002000411e6a200e3b00002000411d6a201b3a00002000411c6a20043a00002000411a6a200b3b0000200041196a20063a0000200041186a20073a0000200041166a20083b0000200041156a20093a0000200041146a200a3a0000200041126a20053b0000200041116a200c3a0000200041106a200d3a00002000410e6a201e3b00002000410d6a200f3a00002000410c6a20103a00002000410a6a201d3b0000200041096a20123a0000200041086a20133a0000200041066a20113b0000200041056a20153a0000200041046a20163a0000410021030c010b410121030b200020033a0000200241b0016a24000bba0a03047f017e057f230041f0006b22022400200241c0006a41186a4200370300200241c0006a41106a22034200370300200241c0006a41086a220442003703002002420037034041a29bc800ad4280808080f000841001220529000021062004200541086a29000037030020022006370340200510354189eaca00ad4280808080f00084100122052900002106200241e0006a41086a2207200541086a2900003703002002200637036020051035200320022903602206370300200241206a41086a2004290300370300200241206a41106a2006370300200241206a41186a200729030037030020022002290340370320200241c0006a200241206a10fe0102400240200228024022080d00410021092002410036021820024201370310410121084100210a0c010b200220022902442206370214200220083602102006422088a7210a2006a721090b200241c0006a41186a4200370300200241c0006a41106a220b4200370300200241c0006a41086a220542003703002002420037034041a29bc800ad4280808080f00084100122032900002106200241e0006a41086a2204200341086a2900003703002002200637036020031035200520042903003703002002200229036037034041a99bc800ad4280808080a001841001220329000021062004200341086a2900003703002002200637036020031035200b20022903602206370300200241206a41086a2005290300370300200241206a41106a2006370300200241206a41186a200429030037030020022002290340370320200241086a200241206a412010c00141002104024002400240024002400240200a200228020c410020022802081b4f0d00024002400240200a41014b0d00200a0e020201020b41002104200a210503402005410176220320046a22072004200820074105746a2001412010a0084101481b2104200520036b220541014b0d000b0b200820044105746a2001412010a0082205450d022005411f7620046a21040b200241c0006a41186a200141186a290000370300200241c0006a41106a200141106a290000370300200241c0006a41086a200141086a29000037030020022001290000370340200a2004490d040240200a2009470d00200241106a20094101108a0120022802142109200228021021080b200820044105746a220541206a2005200a20046b410574109e081a20052002290340370000200541186a200241c0006a41186a2203290300370000200541106a200241c0006a41106a2207290300370000200541086a200241c0006a41086a22042903003700002002200a41016a220a3602182003420037030020074200370300200442003703002002420037034041a29bc800ad4280808080f00084100122012900002106200241e0006a41086a2205200141086a290000370300200220063703602001103520042005290300370300200220022903603703404189eaca00ad4280808080f000841001220129000021062005200141086a2900003703002002200637036020011035200b2002290360370000200b41086a2005290300370000200241206a41086a2004290300370300200241206a41106a2007290300370300200241206a41186a200329030037030020022002290340370320200241203602442002200241206a3602402008200a200241c0006a109802200941ffffff3f710d020c030b20004183323b0100200041086a410a360200200041046a41a99bc800360200200041026a410f3a0000200941ffffff3f71450d04200810350c040b200941ffffff3f71450d010b200810350b200041043a00000c010b2004200a104d000b200241f0006a24000b130020004108360204200041a884ca003602000b130020004112360204200041c089ca003602000b8c0201037f024002400240024002400240024020012802000e0400010203000b41012102410110332201450d05200141003a0000410121030c040b410110332202450d04200241013a00002001280204210320024101410510372202450d042002200336000120012802082104410a210320024105410a10372201450d04200120043600050c020b41012102410110332201450d03200141023a0000410121030c020b410110332202450d02200241033a00002001280204210320024101410510372202450d022002200336000120012802082104410a210320024105410a10372201450d02200120043600050b410921020b2000200236020820002003360204200020013602000f0b103c000bf33010017f017e017f027e097f017e027f017e037f057e017f017e017f047e017f027e230041d0046b22052400200541d8016a4201427f420020032004844200521b2206200342005220044200552004501b22071b4200200620071b4201427f420020012002844200521b2206200142005220024200552002501b22071b4200200620071b108408200541d8016a41086a290300210820052903d801210902402002427f550d00200541003602d401200541c0016a20012002427f427f200541d4016a10850842ffffffffffffffffff00200541c0016a41086a29030020052802d40122071b2102427f20052903c00120071b21010b02402004427f550d00200541003602bc01200541a8016a20032004427f427f200541bc016a10850842ffffffffffffffffff00200541b0016a29030020052802bc0122071b2104427f20052903a80120071b21030b0240024002400240024002400240024002400240024002402002427f570d002004427f570d01200541f8006a2003420020014200108408200541e8006a200342002002420010840820054198016a200442002001420010840820054188016a20044200200242001084082005290388012204200529039801220220052903682203200541f8006a41086a2903007c22017c2206200254ad20054198016a41086a2903007c22022001200354ad200541e8006a41086a2903007c7c22037c2201200454ad20054188016a41086a2903007c22042003200254ad7c22022004540d0a2005290378210320054198026a4200370300200541a0026a42003703002005420037039002200542808090bbbad6adf00d37038802410021070340200741086a220a4128460d0b20054188026a20076a210b200a2107200b290300500d000b200520023703c002200520013703b802200520063703b002200520033703a802200541c8026a41186a20054188026a41186a290300370300200541c8026a41106a20054188026a41106a290300370300200541c8026a41086a20054188026a41086a29030037030020052005290388023703c802200541a8026a41186a2107200541a8026a41086a210c41c002210a024003400240200a41406a220a41c000470d002003210441c000210a0c020b20072903002104200741786a21072004500d000b0b200a200479a76b210b200541e0026a210741c002210a024002400340200a41406a220a41c000460d0120072903002104200741786a21072004500d000c020b0b41c000210a20052903c80221040b200a200479a76b2207450d02200b2007490d030240200741c100490d00200541e8026a41106a200c41106a290300370300200541e8026a41086a200c41086a2903003703002005200c2903003703e80220054180036a41186a220a200541c8026a41186a29030037030020054180036a41106a220c200541c8026a41106a29030037030020054180036a41086a220d200541c8026a41086a290300370300200520052903c802370380032007417f6a220e410676210f02400240024002400240200e41ff014b0d00200b417f6a4106762210200f6b210b200f41016a211120054180036a200f4103746a22122903002104200541a0036a41186a200a290300370300200541a0036a41106a200c290300370300200541a0036a41086a200d29030037030020052005290380033703a003200541e8036a41106a4200370300200541e8036a41186a4200370300200542003703f003200520047922133703e8032013a72114200541e8036a41086a210d4100210702400340200741086a220a4120460d01200d20076a210c200a2107200c290300500d000b418b80cc00412641dc80cc00103f000b200541a8046a4200370300200541a0046a420037030020054190046a41086a420037030020054200370390042014410676220d41037421072014413f71220cad2104200541a0036a210a034020054190046a20076a200a290300200486370300200a41086a210a200741086a22074120470d000b0240200c450d00200d4103742107420020137d423f83210420054190046a41086a210d200541a0036a210a0340200d20076a220c200c290300200a2903002004887c370300200a41086a210a200741086a22074118470d000b0b20054180036a41186a20054190046a41186a29030037030020054180036a41106a20054190046a41106a29030037030020054180036a41086a20054190046a41086a290300370300200520052903900437038003200541b0046a41106a200541e8026a41086a290300370300200541b0046a41186a200541e8026a41106a290300370300200520052903e8023703b804200520033703b004200541e8036a41106a4200370300200541e8036a41186a4200370300200542003703f003200541c00020146b2215ad22013703e80320032013423f832216862102200541e8036a41086a210d4100210702400340200741086a220a4120460d01200d20076a210c200a2107200c290300500d000b418b80cc00412641dc80cc00103f000b200541a8046a4200370300200541a0046a420037030020054190046a41086a420037030020054200370390042015413f71210c2015410676210d0240201541ff014b0d00200d4103742107200cad210420054190046a210a0340200a200541b0046a20076a290300200488370300200a41086a210a200741086a22074120470d000b0b0240200c450d00200d41016a41034b0d00200d410374210a420020017d423f832104200541b0046a41086a210c20054190046a2107034020072007290300200c200a6a2903002004867c370300200741086a2107200a41086a220a4118470d000b0b200520052903a8043703c003200520052903a0043703b80320052005290398043703b00320052005290390043703a803200520023703a003200541e0036a4200370300200541c8036a41106a4200370300200541c8036a41086a4200370300200542003703c803200f417f6a220741034b0d01200f41026a2117200541a0036a2010200f6b4103746a221841086a21192012290300221a201a792204423f83221b86221c42ffffffff0f83211d201c422088210120054180036a20074103746a290300211e41c0002004a76b221f413f71ad2120200541e8036a41106a21212005290398032122200529039003212320052903880321242005290380032125200e4180024921260340200b221520116a220741054f0d03427f21020240200541a0036a20074103746a22122903002204201a5a0d002015200f6a220a41044b0d052001500d0c200541a0036a200a4103746a2903002202201b86220342ffffffff0f8321062003422088210342002002202088201f413f4b1b2004201b868422272027200180220220017e7d2104024003400240200242ffffffff0f560d002002201d7e2004422086200384580d020b2002427f7c2102200420017c2204428080808010540d000b0b20274220862003842002201c7e7d22272027200180220320017e7d2104024003400240200342ffffffff0f560d002003201d7e2004422086200684580d020b2003427f7c2103200420017c220442ffffffff0f580d000b0b2007417e6a220741044b0d0d20274220862006842003201c7e7d201b882104200320024220867c2102200541a0036a20074103746a29030021060340200541d8006a20024200201e4200108408200620052903585a2004200541d8006a41086a29030022035a20042003511b0d012002427f7c21022004201a7c22032004542107200321042007450d000b0b200541c8006a2025420020024200108408200541386a2024420020024200108408200541286a2023420020024200108408200541186a20224200200242001084082005200529034822283703e803200520052903382203200541c8006a41086a2903007c22043703f003200520052903282206200541386a41086a2903002004200354ad7c7c22033703f803200520052903182227200541286a41086a2903002003200654ad7c7c2203370380042005200541186a41086a2903002003202754ad7c37038804201541064f0d0d2026450d0e024020174128201541037422106b410376220e200e20174b1b220d450d00200541a0036a20106a22072007290300220320287d22063703002006200356210c0240200d4101460d004102210a2021210b2019210703402007200729030022032004200cad4201837c22067d22273703002006200454202720035672210c200a200d4f0d01200a41016a210a200741086a2107200b2903002104200b41086a210b0c000b0b200c450d004100210b02402011200e200e20114b1b220d450d0020054180036a210a201821074100210c0340200720072903002204200a2903002203200bad42ff01837c22067c22273703002006200354202720045472210b200741086a2107200a41086a210a200c41016a220c200d490d000b0b2002427f7c210220122012290300200bad7c3703000b201541034b0d05201520154100476b210b200541c8036a20106a2002370300201841786a2118201941786a21192015450d0f0c000b0b200f410441dc80cc001042000b2007410441dc80cc001042000b2007410541dc80cc001042000b200a410541dc80cc001042000b2015410441dc80cc001042000b200541e8036a41186a200541a8026a41186a290300370300200541e8036a41106a200541a8026a41106a290300370300200541e8036a41086a200541a8026a41086a290300370300200520052903a8023703e80302400240024020052903c80222042004792203423f83221e86221a4220882204500d00201a42ffffffff0f832102200529038004210641c0002003a76b220741c000490d012004422086211d2006201e86220342ffffffff0f8321282003422088211b42002103420021064200212742002101024003400240200142ffffffff0f560d0020032006201b84580d020b200320027d21032006201d7c21062001427f7c2101202720047c2227428080808010540d000b0b201b2001201a7e7d22272027200480220320047e7d2106024003400240200342ffffffff0f560d00200320027e2006422086202884580d020b2003427f7c2103200620047c2206428080808010540d000b0b2005200320014220867c37038004427f201e8620274220862028842003201a7e7d83221d201d200480220320047e7d210120052903f803201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b2006201d422086842003201a7e7d221d201d200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703f803427f201e86201d4220862027842001201a7e7d83221d201d200480220320047e7d210120052903f003201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b2006201d422086842003201a7e7d221d201d200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703f003427f201e86201d4220862027842001201a7e7d83221d201d200480220320047e7d210120052903e803201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b2006201d422086842003201a7e7d22012001200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703e8030c020b41d0fecb00411941dc80cc00103f000b20062007413f71ad221d8822282028200480220320047e7d21012006201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b20284220862006842003201a7e7d22282028200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703800420052903f8032206201d88427f201e8620284220862027842001201a7e7d838422282028200480220320047e7d21012006201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b20284220862006842003201a7e7d22282028200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703f80320052903f0032206201d88427f201e8620284220862027842001201a7e7d838422282028200480220320047e7d21012006201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b20284220862006842003201a7e7d22282028200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703f00320052903e8032206201d88427f201e8620284220862027842001201a7e7d8384221d201d200480220320047e7d21012006201e86220642ffffffff0f83212720064220882106024003400240200342ffffffff0f560d00200320027e2001422086200684580d020b2003427f7c2103200120047c2201428080808010540d000b0b201d4220862006842003201a7e7d22012001200480220120047e7d2106024003400240200142ffffffff0f560d00200120027e2006422086202784580d020b2001427f7c2101200620047c2206428080808010540d000b0b2005200120034220867c3703e8030b20054190046a41186a200541e8036a41186a29030037030020054190046a41106a200541e8036a41106a29030037030020054190046a41086a200541e8036a41086a290300370300200520052903e803370390040c090b41e9fecb00413541dc80cc00103f000b41e9fecb00413541dc80cc00103f000b41fbffcb00411041dc80cc00103f000b200541a8046a4200370300200541a0046a420037030020054198046a420037030020054200370390040c050b41c080cc00411941dc80cc00103f000b2007410541dc80cc001042000b2015410541dc80cc001059000b2017410541dc80cc001058000b200541e8036a41206a200541a0036a41206a290300370300200541e8036a41186a200541a0036a41186a2903002204370300200541e8036a41106a200541a0036a41106a2903002202370300200541e8036a41086a200541a0036a41086a2903002203370300200520052903a00322013703e803200520012016883703b004200520032016883703b804200520022016883703c004200520042016883703c804024002402014450d00420020137d423f8321044101210703402007417f6a220a41034b0d02200541b0046a200a4103746a220a200a290300200541e8036a20074103746a29030020048684370300200720074104496a220a41044b0d01200741034b210b200a2107200b450d000b0b20054190046a41086a200541c8036a41086a29030037030020054190046a41106a200541c8036a41106a29030037030020054190046a41186a200541c8036a41186a290300370300200520052903c803370390040c010b200a410441dc80cc001042000b200541e8016a41086a20054190046a41086a2903002204370300200541e8016a41106a20054190046a41106a2903002202370300200541e8016a41186a20054190046a41186a2903002203370300200520052903900422013703e801200541e8036a41186a2003370300200541e8036a41106a220c2002370300200541e8036a41086a2004370300200520013703e8034100210702400340200741086a220a4118460d01200c20076a210b200a2107200b290300500d000c020b0b200541086a20092008422520052903e80320052903f003220442005322071b4200200420071b1084082004427f570d00200541106a2903002104200529030821020c010b428080808080808080807f42ffffffffffffffffff00200842005322071b21044200427f20071b21020b2000200237030020002004370308200541d0046a24000bb10503027f017e047f230041d0006b2202240041a3edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a290000370300200220043703082003103541fe99ca00ad4280808080800184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000b920503027f017e067f230041d0006b2202240041a8e7cb00ad4280808080f00184100122032900002104200241086a200341086a290000370300200220043703002003103541b7e7cb00ad4280808080c00184100122032900002104200241106a41086a200341086a2900003703002002200437031020031035200220003703302002200241306aad42808080808001841003220329000037033820031035200241cc006a200241306a41086a3602002002200241386a41086a3602442002200241306a3602482002200241386a360240200241206a200241c0006a107b02400240024002402002280228220541206a2206417f4c0d00200228022021070240024020060d0041002108410121030c010b200610332203450d02200621080b024002402008410f4d0d00200821090c010b200841017422094110200941104b1b22094100480d03024020080d002009103322030d010c050b20082009460d0020032008200910372203450d040b20032002290300370000200341086a200241086a2903003700000240024020094170714110460d00200921080c010b200941017422084120200841204b1b22084100480d0320092008460d0020032009200810372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200841606a2005490d00200821090c010b200541206a22092005490d032008410174220a2009200a20094b1b22094100480d0320082009460d0020032008200910372203450d040b200341206a20072005109d081a02402002280224450d00200710350b200220013602402006ad4220862003ad84200241c0006aad4280808080c00084100202402009450d00200310350b200241d0006a24000f0b1044000b1045000b103e000b103c000be91305057f017e047f027e037f230041f0006b22052400200541c0006a41186a22064200370300200541c0006a41106a22074200370300200541c0006a41086a220842003703002005420037034041a8e7cb00ad4280808080f0018410012209290000210a200541e0006a41086a220b200941086a2900003703002005200a370360200910352008200b2903003703002005200529036037034041b697ca00ad4280808080d0018410012209290000210a200b200941086a2900003703002005200a3703602009103520072005290360220a370300200541206a41086a22092008290300370300200541206a41106a220c200a370300200541206a41186a220d200b29030037030020052005290340370320200541186a200541206a412041b0b4cc0041004100108a02024002400240024002400240024020052802184101470d0041e192ca00210b410d2108410221070c010b2006420037030020074200370300200842003703002005420037034041d1c4c700ad4280808080e0008410012206290000210a2008200641086a2900003703002005200a3703402006103541e7c4c700ad4280808080e0008410012206290000210a200b200641086a2900003703002005200a3703602006103520072005290360220a37030020092008290300370300200c200a370300200d200b29030037030020052005290340370320200541106a200541206a412010c0012005280214410020052802101b2109024020034101460d00200541206a210e0c030b200541c0006a41186a22064200370300200541c0006a41106a220c4200370300200541c0006a41086a220842003703002005420037034041a8e7cb00ad4280808080f00184220f1001220d290000210a200541e0006a41086a220b200d41086a2900003703002005200a370360200d10352008200b2903003703002005200529036037034041f499ca00ad4280808080a0018422101001220d290000210a200b200d41086a2900003703002005200a370360200d103520072005290360370000200741086a220d200b290300370000200541206a41086a220e2008290300370300200541206a41106a2211200c290300370300200541206a41186a2212200629030037030020052005290340370320200541086a200541206a412010c0012005280208450d01200528020c20094d0d0141da92ca00210b41072108410321070b20004183203b0100200041086a2008360200200041046a200b360200200041026a20073a0000200141046a280200220b450d02200b41286c450d02200128020010350c020b20064200370300200c42003703002008420037030020054200370340200f10012213290000210a200b201341086a2900003703002005200a370360201310352008200b29030037030020052005290360370340201010012213290000210a200b201341086a2900003703002005200a3703602013103520072005290360370000200d200b290300370000200e20082903003703002011200c29030037030020122006290300370300200520052903403703202005200920024101746a360240200541206aad4280808080800484200541c0006aad4280808080c000841002200541206a210e0b200128020821082001280204210c2001280200210d200541c0006a41186a22114200370300200541c0006a41106a22124200370300200541c0006a41086a220142003703002005420037034041a8e7cb00ad4280808080f0018410012206290000210a200541e0006a41086a220b200641086a2900003703002005200a370360200610352001200b2903003703002005200529036037034041b697ca00ad4280808080d0018410012206290000210a200b200641086a2900003703002005200a3703602006103520072005290360370000200741086a200b290300370000200541206a41086a2001290300370300200541206a41106a2012290300370300200541206a41186a201129030037030020052005290340370320200541003602482005420137034041041033220b450d02200541043602442005200b360240200b200936000020054104360248200b410441081037220b450d0220054108360244200b20023600042005200b360240200541083602482008200541c0006a10772005280248210702402008450d00200d200841286c6a2106200d210b0340024002402005280244220220076b4120490d00200741206a210820052802402101200221090c010b200741206a22082007490d04200241017422012008200120084b1b22094100480d040240024020020d00024020090d00410121010c020b2009103322010d010c070b2005280240210120022009460d0020012002200910372201450d060b20052009360244200520013602400b200120076a2207200b290000370000200741186a200b41186a290000370000200741106a200b41106a290000370000200741086a200b41086a29000037000020052008360248200b41206a290300210a0240200920086b41074b0d00200841086a22072008490d04200941017422022007200220074b1b22074100480d040240024020090d00024020070d00410121010c020b200710332201450d070c010b20092007460d0020012009200710372201450d060b20052007360244200520013602400b200120086a200a3700002005200841086a22073602482006200b41286a220b470d000b0b2005280244210b0240024020034101460d0002400240200b2007460d00200528024021080c010b200741016a220b2007490d0420074101742208200b2008200b4b1b220b4100480d040240024020070d00410021070240200b0d00410121080c020b200b10332208450d070c010b200528024021082007200b460d0020082007200b10372208450d060b2005200b360244200520083602400b200820076a41003a00002005200741016a22073602480c010b02400240200b2007460d00200528024021080c010b200741016a220b2007490d0320074101742208200b2008200b4b1b220b4100480d030240024020070d00410021070240200b0d00410121080c020b200b10332208450d060c010b200528024021082007200b460d0020082007200b10372208450d050b2005200b360244200520083602400b200820076a41013a00002005200741016a22013602480240200b20016b41034b0d00200141046a22092001490d03200b41017422022009200220094b1b22094100480d0302400240200b0d00024020090d00410121080c020b200910332208450d060c010b200b2009460d002008200b200910372208450d050b20052009360244200520083602400b200820016a20043600002005200741056a22073602482005280244210b200528024021080b200ead42808080808004842007ad4220862008ad8410020240200b450d00200810350b0240200c450d00200c41286c450d00200d10350b200041043a00000b200541f0006a24000f0b103e000b103c000bff0201037f230041206b2203240002400240200241c4006c41046a2204417f4c0d000240024020040d0041012105410021040c010b200410332205450d020b20034100360208200320053602002003200436020420022003107702402002450d00200241c4006c210203400240024020012d00004101460d00200341003a00102003200341106a410110782003200141046a2802003602102003200341106a410410780c010b200341013a00102003200341106a41011078412010332204450d042003422037021420032004360210200341106a200141016a41201078200328021421042003200328021022052003280218107802402004450d00200510350b0240200141216a2d00004101460d00200341003a00102003200341106a410110780c010b200341013a00102003200341106a410110782003200141226a412010780b200141c4006a2101200241bc7f6a22020d000b0b20002003290300370200200041086a200341086a280200360200200341206a24000f0b1044000b1045000b290020004101360204200041086a200128020420012802006b41a0016e2201360200200020013602000ba50201057f230041d0006b21020240200128020022032001280204470d00200041003602000f0b2001200341a0016a3602002002200329004237012a2002200329004a370132200241086a41086a220120022903303703002002200329005237013a200241086a41106a220420022903383703002002200328005a360142200220032f005e3b0146200241086a41186a22052002290340370300200220032f00403b012820022002290328370308200241286a41186a22062005290300370300200241286a41106a22052004290300370300200241286a41086a220420012903003703002002200229030837032820002003360200200020022903283702042000410c6a2004290300370200200041146a20052903003702002000411c6a20062903003702000bf30801087f230041f0006b2103024002402001280200220420012802042205460d00200241016a210603402001200441a0016a2202360200200341003a0068200441c0006a2d00002107200341013a0068200320073a0048200441c1006a2d00002107200341023a0068200320073a0049200441c2006a2d00002107200341033a0068200320073a004a200441c3006a2d00002107200341043a0068200320073a004b200441c4006a2d00002107200341053a0068200320073a004c200441c5006a2d00002107200341063a0068200320073a004d200441c6006a2d00002107200341073a0068200320073a004e2003200441c7006a2d00003a004f200341083a0068200441c8006a2d00002107200341093a0068200320073a0050200441c9006a2d000021072003410a3a0068200320073a0051200441ca006a2d000021072003410b3a0068200320073a0052200441cb006a2d000021072003410c3a0068200320073a0053200441cc006a2d000021072003410d3a0068200320073a0054200441cd006a2d000021072003410e3a0068200320073a0055200441ce006a2d000021072003410f3a0068200320073a00562003200441cf006a2d00003a0057200341103a0068200441d0006a2d00002107200341113a0068200320073a0058200441d1006a2d00002107200341123a0068200320073a0059200441d2006a2d00002107200341133a0068200320073a005a200441d3006a2d00002107200341143a0068200320073a005b200441d4006a2d00002107200341153a0068200320073a005c200441d5006a2d00002107200341163a0068200320073a005d200441d6006a2d00002107200341173a0068200320073a005e2003200441d7006a2d00003a005f200341183a0068200441d8006a2d00002107200341193a0068200320073a0060200441d9006a2d000021072003411a3a0068200320073a0061200441da006a2d000021072003411b3a0068200320073a0062200441db006a2d000021072003411c3a0068200320073a0063200441dc006a2d000021072003411d3a0068200320073a0064200441dd006a2d000021072003411e3a0068200320073a0065200441de006a2d000021072003411f3a0068200320073a0066200441df006a2d00002107200341203a0068200320073a0067200341286a41086a22072003290350370300200341286a41106a22082003290358370300200341286a41186a2209200329036037030020032003290348370328200341086a41086a220a2007290300370300200341086a41106a22072008290300370300200341086a41186a2208200929030037030020032003290328370308200341c8006a41186a2008290300370300200341c8006a41106a2007290300370300200341c8006a41086a200a290300370300200320032903083703482006417f6a2206450d022002210420052002470d000b0b200041003602000f0b20002004360200200020032903483702042000410c6a200341d0006a290300370200200041146a200341d8006a2903003702002000411c6a200341e0006a2903003702000b130020004101360204200041e09aca003602000b3400200041a8e7cb0036020420004100360200200041146a4106360200200041106a41d49bca00360200200041086a420f3702000b2c01017f02404108103322020d001045000b20004288808080800137020420002002360200200242003700000b2201017f230041106b22022400200241003602002000200210db04200241106a24000b2201017f230041106b22022400200241003602002000200210db06200241106a24000b130020004102360204200041eca4ca003602000b3400200041a3edcb0036020420004100360200200041146a4107360200200041106a41b8adca00360200200041086a42073702000b2c01017f02404104103322020d001045000b20004284808080c00037020420002002360200200241003600000bec0101057f230041306b2201240002400240200028020422020d00410021032001411c6a41003602002001410036020c0c010b2000410c6a280200210302400240200041086a28020022040d00200221000c010b2004210020022105034020052802880b21052000417f6a22000d000b200221000340200020002f01064102746a41880b6a28020021002004417f6a22040d000b200521020b200141246a20002f0106360200200141206a41003602002001411c6a200036020020014100360218200142003703102001200236020c200141003602080b20012003360228200141086a108f03200141306a24000bd564030d7f017e0c7f230041d0036b220424004100210520044100360280012004200236027c200420013602784104210602400240024002400240024002400240024002400240024002400240024002400240024002400240024020024104490d00200441043602800120012800004180c2cdeb06460d0141012101410021070c030b200441013a00b801200441a4036a41013602002004420137029403200441acfdcb0036029003200441363602ec022004200441e8026a3602a0032004200441b8016a3602e80220044180026a20044190036a10410c010b4104210602400240024002402002417c714104460d00200241074d0d0220044108360280010240200128000422084101460d004102210141042106410021070c060b20044190036a200441f8006a10b107410421062004280290034101470d0141002105410021070c030b200441013a00b801200441a4036a41013602002004420137029403200441acfdcb0036029003200441363602ec022004200441e8026a3602a0032004200441b8016a3602e80220044180026a20044190036a10410c030b20044190036a4104722101410021094100210a41002105410021074100210b0340200441b8016a41286a220c200141286a290200370300200441b8016a41206a220d200141206a290200370300200441b8016a41186a220e200141186a290200370300200441b8016a41106a220f200141106a290200370300200441b8016a41086a2210200141086a2902003703002004200129020022113703b80102402011a741ff01712212417e6a410c4f0d0041002108024002400240024002400240024002400240024002400240024020120e100c0c000102030405060708090a0b0c0c0c0b410121080c0b0b410221080c0a0b410321080c090b410421080c080b410521080c070b410621080c060b410721080c050b410821080c040b410921080c030b410a21080c020b410b21080c010b410c21080b024002400240200b41ff0171221320084d0d00411321010c010b41002108024002400240024002400240024002400240024002400240024020120e100c0c000102030405060708090a0b0c0c0c0b410121080c0b0b410221080c0a0b410321080c090b410421080c080b410521080c070b410621080c060b410721080c050b410821080c040b410921080c030b410a21080c020b410b21080c010b410c21080b20132008470d01411421010b024002402012410e4b0d00024002400240024002400240024002400240024002400240024020120e0f0001020304050607080e090e0a0b0c000b200441c0016a280200450d0d20042802bc0110350c140b0240200441c0016a280200450d0020042802bc0110350b200441cc016a280200450d0c200441c8016a28020010350c130b20042802bc0121090240200441c4016a2802002212450d002012410474210a2009211203400240201241046a280200450d00201228020010350b201241106a2112200a41706a220a0d000b0b200441c0016a28020041ffffffff0071450d0b200910350c120b20042802bc0121090240200441b8016a410c6a2802002212450d00201241286c210a2009211203400240201241046a280200450d00201228020010350b0240201241106a280200450d002012410c6a28020010350b201241286a2112200a41586a220a0d000b0b200441c0016a2802002212450d0a201241286c450d0a200910350c110b200441c0016a28020041ffffffff0371450d0920042802bc0110350c100b200441c0016a2802002212450d082012410c6c450d0820042802bc0110350c0f0b200441c0016a2802002212450d072012410c6c450d0720042802bc0110350c0e0b20042802bc01210f0240200441c4016a2802002212450d00200f20124104746a210e200f210d03400240200d280208220a450d00200d2802002112200a410474210a0340024020122d00004109470d000240201241046a220c280200220928020441ffffffff0371450d0020092802001035200c28020021090b200910350b201241106a2112200a41706a220a0d000b0b200d41106a21120240200d41046a28020041ffffffff0071450d00200d28020010350b2012210d2012200e470d000b0b200441c0016a28020041ffffffff0071450d06200f10350c0d0b20042802bc0121090240200441c4016a2802002212450d00201241146c210a2009211203400240201241046a280200450d00201228020010350b201241146a2112200a416c6a220a0d000b0b200441c0016a2802002212450d05201241146c450d05200910350c0c0b200441b8016a41047210b207200441c0016a2802002212450d042012411c6c450d0420042802bc0110350c0b0b200441b8016a41047210b307200441c0016a2802002212450d03201241186c450d0320042802bc0110350c0a0b200441b8016a41047210b407200441c0016a2802002212450d022012411c6c450d0220042802bc0110350c090b024020042802bc012212450d00200441c0016a280200450d00201210350b0240200441cc016a280200220c450d000240200441d4016a2802002212450d002012410c6c210a200c21120340024020122802002209450d00201241046a280200450d00200910350b2012410c6a2112200a41746a220a0d000b0b200441d0016a2802002212450d002012410c6c450d00200c10350b200441dc016a280200220f450d010240200441e4016a2802002212450d00200f20124104746a210e200f210d0340200d220c41106a210d0240200c2802042212450d000240200c410c6a280200220a450d00200a410c6c210a0340024020122802002209450d00201241046a280200450d00200910350b2012410c6a2112200a41746a220a0d000b0b200c41086a2802002212450d002012410c6c450d00200c28020410350b200d200e470d000b0b200441e0016a28020041ffffffff0071450d01200f10350c080b0240200441c0016a280200450d0020042802bc0110350b0240200441cc016a2802002212450d00200441d0016a280200450d00201210350b200441dc016a28020041ffffffff0071450d00200441d8016a28020010350b0c060b4100210b02400240024002400240024002400240024002400240024020120e100c0c000102030405060708090a0b0c0c0c0b4101210b0c0b0b4102210b0c0a0b4103210b0c090b4104210b0c080b4105210b0c070b4106210b0c060b4107210b0c050b4108210b0c040b4109210b0c030b410a210b0c020b410b210b0c010b410c210b0b20044180026a41286a2208200c29030037030020044180026a41206a220c200d29030037030020044180026a41186a220d200e29030037030020044180026a41106a220e200f29030037030020044180026a41086a220f2010290300370300200420042903b80137038002024020052007470d00200541016a22122005490d0720092012200920124b1bad42307e2211422088a70d072011a722124100480d0702400240024020050d0020120d01410421060c020b200a2012460d010240200a0d0020120d01410421060c020b2006200a201210372206450d180c010b201210332206450d170b201241306e21070b2006200a6a2212200429038002370200201241286a2008290300370200201241206a200c290300370200201241186a200d290300370200201241106a200e290300370200201241086a200f290300370200200941026a2109200a41306a210a200541016a210520044190036a200441f8006a10b1072004280290034101460d020c000b0b4108200241c0fdcb001058000b0240024020042d0094030d002006200541306c6a210b20062101024003400240200b2001470d00410021090c020b20012d00002112200141306a220a21012012410c470d000b200a415c6a28020021090b2006200541306c6a210b20062101024003400240200b2001470d00410021010c020b20012d00002112200141306a220a210120124104470d000b200441f0006a200a41546a10bf03200428027421010b024020092001470d00410021014101210841e100210b41f3da01210a410021120c050b2006200510f40641012112411a21012007450d01200741306c450d01200610350c040b2004280294032201411076210a2001410876210b20044190036a41106a28020021092004419c036a280200210c20044190036a41086a28020021080c020b0c020b2004280280022108200428028402210c20042802880221094105210141002105410021074100210a4100210b0b2006200510f4064101211202402007450d00200741306c450d00200610350b20092107200c21060b200a411074200b41ff017141087472200141ff01717221100240024002402012450d00200621020c010b2004280280012002460d01200441003a00b801200441a4036a41013602002004420137029403200441acfdcb0036029003200441363602ec022004200441e8026a3602a0032004200441b8016a3602e80220044180026a20044190036a1041200428028002210820042802840221022006200510f406410521102007450d00200741306c450d00200610350b02402002450d00201041ff01714105470d00200810350b200041a0d3cb0036020420004101360200200041086a41163602000c0f0b4100210a200441b0016a4100360200200441a0016a420037030020044198016a4280808080c00037030020044188016a4200370300200442043703a801200442013703900120044280808080c0003703800120044204370378200541306c211241002102024002400340024020122002470d00410421124100210b0c020b200620026a2101200241306a220b210220012d00004102470d000b200441e8006a2006200b6a41546a10bf032004280268210b200428026c21012004410036029803200442043703900320044190036a41002001108c012004280290032102200428029803210c02402001450d002001410474210d2002200c4104746a21020340200b221241086a2802002201417f4c0d032012410c6a2d0000210e2012280200210f0240024020010d004100210b410121090c010b200110332209450d082001210b0b02400240200b2001490d00200b210a0c010b200b410174220a2001200a20014b1b220a4100480d050240200b0d00200a10332209450d150c010b0240200b200a470d00200b210a0c010b2009200b200a10372209450d140b201241106a210b2009200f2001109d0821092002410d6a2012410d6a2d00003a00002002410c6a200e3a0000200241086a2001360200200241046a200a360200200220093602002002410e6a20042f0180023b0100200241106a2102200c41016a210c200d41706a220d0d000b20042802900321020b200428029403410020021b210b200c410020021b210a2002410420021b21120b024020042802a4012201450d00200428029c0121022001410474210103400240200241046a280200450d00200228020010350b200241106a2102200141706a22010d000b0b024020042802a00141ffffffff0071450d00200428029c0110350b2004200a3602a4012004200b3602a0012004201236029c01200541306c2112410021094100210203404101210b20122002460d03200620026a2101200241306a220a210220012d00004103470d000b200441e0006a2006200a6a41546a10bf0320042802602202450d024100210f20042802642201450d03200141286c21012002411c6a2102200441f8006a410c6a2113410021094100210f4101210b034002400240024002400240024002402002417c6a2d00000e0401020300010b200441f8006a2002417d6a22122d00002002417e6a220a2d000041017110b507200a2d0000210a20122d0000210c2009200f470d04200941016a22122009490d082009410174220d2012200d20124b1b220e200e6a2212200e490d0820124100480d080240024020090d0020120d014101210b0c050b200d2012460d040240200d0d0020120d014101210b0c050b200b200d20121037220b450d180c040b20121033220b450d170c030b200441f8006a200228020010b6070c040b20044190036a41086a220a200241086a28020036020020042002290200370390030240200428028c012212200428028801470d00201320124101108701200428028c0121120b2004280284012012410c6c6a2212200429039003370200201241086a200a2802003602002004200428028c0141016a36028c010c030b20044190036a41086a220a200241086a280200360200200420022902003703900302402004280280012212200428027c470d00200441f8006a2012410110870120042802800121120b20042802782012410c6c6a2212200429039003370200201241086a200a280200360200200420042802800141016a360280010c020b2012410176210f0b200b20094101746a2212200a4101713a00012012200c3a0000200941016a21090b200241286a2102200141586a2201450d040c000b0b1044000b103e000b4100210f0b200541306c2112410021020240034020122002460d01200620026a2101200241306a220a210220012d00004104470d000b200441d8006a2006200a6a41546a10bf03200428025c2201450d0020042802582102200141027421010340200441f8006a200228020010b607200241046a21022001417c6a22010d000b0b200541306c2112410021020240034020122002460d01200620026a2101200241306a220a210220012d00004105470d000b200441d0006a2006200a6a41546a10bf032004280254410c6c2212450d0020042802502102200441f8006a410c6a210d0340200241086a2101024002400240200241046a2802004101470d0020042001280200220a3602e8022002280200220c200a4b0d010b200441003602b8010c010b200441023602a4032004420237029403200441d0aacc00360290032004410136028c0220044101360284022004200c3602f802200420044180026a3602a0032004200441f8026a360288022004200441e8026a36028002200441b8016a20044190036a104120042802b801450d00200441b8016a21020c0b0b2002290200211120044190036a41086a220a200128020036020020042011370390030240200428028c012201200428028801470d00200d20014101108701200428028c0121010b2002410c6a21022004280284012001410c6c6a2201200429039003370200200141086a200a2802003602002004200428028c0141016a36028c01201241746a22120d000b0b200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d00004106470d000b200441c8006a200a10bf03200428024c2201450d00200428024821022001410c6c2112034020044190036a200210b7070240200428029003450d0020044190036a21020c0b0b2002290200211120044190036a41086a220a200241086a280200360200200420113703900302402004280280012201200428027c470d00200441f8006a2001410110870120042802800121010b2002410c6a210220042802782001410c6c6a2201200429039003370200200141086a200a280200360200200420042802800141016a36028001201241746a22120d000b0b200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d00004107470d000b200441c0006a200a10bf0320042802442201450d002004280240220220014104746a210a20044190036a4104722112034020044190036a2002200b200910b80702400240024020042d0090034101460d00200420042d00910322013a00e802024020012002410c6a2d0000220c470d00200441003602b8010c030b200441023602a4032004420237029403200441e4abcc00360290032004413736028c0220044137360284022004200c3a00f802200420044180026a3602a0032004200441e8026a360288022004200441f8026a36028002200441b8016a20044190036a10410c010b200441b8016a41086a201241086a280200360200200420122902003703b8010b024020042802b801450d00200441b8016a21020c0c0b2002410c6a2d000021010b200441f8006a20012002410d6a2d000041017110b507200241106a2202200a470d000b0b20044190036a41386a2202200441f8006a41386a28020036020020044190036a41306a2201200441f8006a41306a29030037030020044190036a41286a200441f8006a41286a29030037030020044190036a41206a2212200441f8006a41206a29030037030020044190036a41186a220a200441f8006a41186a29030037030020044190036a41106a200441f8006a41106a29030037030020044190036a41086a200441f8006a41086a22092903003703002004200429037837039003200441b8016a41086a2009280200360200200420042903783703b801200441b8016a41146a20044190036a41146a2802003602002004200429029c033702c401200441b8016a41206a20122802003602002004200a2903003703d001200441b8016a412c6a20044190036a412c6a280200360200200420042902b4033702dc01200441b8016a41386a2002280200360200200420012903003703e801200541306c2102200641546a210102400340024020020d00410021090c020b200241506a21022001412c6a2112200141306a220a210120122d00004104470d000b200441386a200a10bf03200428023c21090b200420093602f401200541306c21022006415c6a210102400340024020020d00410021020c020b200241506a2102200141246a2112200141306a220a210120122d0000410c470d000b200a28020021020b200420023602f80120092002470d050240024002400240024002402009450d00200541306c2102200641546a210103402002450d04200241506a21022001412c6a2112200141306a220a210120122d00004104470d000b200541306c2102200641546a210103402002450d03200241506a21022001412c6a2112200141306a220c210120122d0000410c470d000b200441306a200a10bf0320042802342202450d002004280230220e20024102746a211420044190036a41286a2115200c41086a2113200441b0026a2116200441b8026a21174100210d03402004200d3602fc0120132802002102200c2802002101200442013702940320044198dbcb0036029003200441013602fc02200441013602a4032004200441f8026a3602a0032004200441fc016a3602f80220044180026a20044190036a1041200428028002211220042902840221112002200d4d0d0e02402011a7450d00201210350b2004200e28020022023602e802024002400240024020042802e40120024d0d000240024002402001200d41186c6a22012802142218450d0020042802dc0120024104746a22122d000d21192012280200211a200128020c21022001280200211b2012280208221c210a024002402001280208221d450d00201d4103742109201c2101201b21120340200120122802006a220a2001490d02201241086a2112200a2101200941786a22090d000b0b200420193a00c803200442808080808080103703c003200442043703b803200442808080808080103703b003200442013703a8032004201a360294032004200aad422086201dad843703a0032004201bad422086201cad84370398032004200441b8016a36029003410021012015410010ba0720042802b80320042802c00322124103746a2019ad42ff018342288637020020044180026a41086a20042903980337030020044180026a41106a20042903a00337030020044180026a41186a20042903a80337030020044180026a41206a20042903b00337030020044180026a41286a20042903b8033703002004201241016a3602c003201620042903c003370300201720042802c803360200200420042903900337038002201841047421120340200420013602c002200420023602c402200441c8026a20044180026a200210bb07024020042802c802450d00200441e8026a41086a200441c8026a41086a280200360200200420042903c8023703e8022004410336028c03200442033702fc02200441c4d2cb003602f802200441383602a4032004410136029c032004413936029403200420044190036a360288032004200441e8026a3602a0032004200441c0026a360298032004200441c4026a36029003200441d8026a200441f8026a1041024020042802ec02450d0020042802e80210350b20042802d802220a0d040b200241106a2102200141016a2101201241706a22120d000b20042802b0020d030240200428029c02450d0020042802980210350b20042802ac0241ffffffff0171450d0720042802a80210350c070b41201033220a450d0e200a41186a41002900c0b24c370000200a41106a41002900b8b24c370000200a41086a41002900b0b24c370000200a41002900a8b24c37000042a0808080800421110c040b41201033220a450d0d200a41186a41002900bad24b370000200a41106a41002900b2d24b370000200a41086a41002900aad24b370000200a41002900a2d24b37000042a0808080800421110c030b20042902dc0221110240200428029c02450d0020042802980210350b20042802ac0241ffffffff0171450d0320042802a80210350c030b41dcd2cb00413041c086cc00103f000b200441013602a4032004420237029403200441f0aecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a1041200428028002210a20042902840221110b200a450d010b200420113702fc022004200a3602f8022004200441f8026a3602d802200441023602a4032004420237029403200441a0dbcb00360290032004413a36028c022004410136028402200420044180026a3602a0032004200441d8026a360288022004200441fc016a36028002200441e8026a20044190036a1041024020042802fc02450d0020042802f80210350b20042802e80222120d030b200d41016a210d200e41046a220e2014470d000b0b200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d00004109470d000b2004200a28020022023602d80202400240200441f0016a28020020024d0d00200420042802e80120024102746a28020022023602e802200441e4016a28020020024b0d01200441a4036a41013602002004420237029403200441f0aecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c090b200441a4036a41013602002004420237029403200441ccaecc0036029003200441013602fc022004200441f8026a3602a0032004200441d8026a3602f80220044180026a20044190036a10410c080b20042802dc0120024104746a220231000d4220862002350208844280808080c000510d00412d10332212450d06201241256a41002900d5db4b370000201241206a41002900d0db4b370000201241186a41002900c8db4b370000201241106a41002900c0db4b370000201241086a41002900b8db4b370000201241002900b0db4b37000042ad808080d00521110c0d0b200541306c2102200641546a210103402002450d05200241506a21022001412c6a2112200141306a220a210120122d00004108470d000b200441286a200a10bf0320042802282102200428022c21122004410036029803200442043703900320044190036a41002012109001200428029803210c200428029003210e02402012450d002002201241146c6a2109200e200c4103746a21012012410274417c6a410276210d034020022802002112200141046a200241086a28020036020020012012360200200141086a2101200241146a22022009470d000b200c200d6a41016a210c0b2004280294032113200e200c20044190036a41004120200c676b10be070240200c450d00200e200c4103746a210941012112200e2102200e21010340024002402012450d00200920026b41037620124d0d03200220124103746a21020c010b20092002460d020b200420013602e8020240200141046a2802002212200241046a280200470d002001280200220c2002280200220d460d0a200c200d201210a008450d0a0b200241086a210241002112200141086a22012009470d000b0b200441206a200a10bf0320042802242202450d03200241146c2101200428022041106a210203400240024002400240024002402002417c6a2802000e0400030201000b2004200228020022123602d802024020042802f00120124d0d00200420042802e80120124102746a28020022123602e80220042802e40120124b0d05200441013602a4032004420237029403200441f0aecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c0f0b200441a4036a41013602002004420237029403200441ccaecc0036029003200441013602fc022004200441f8026a3602a0032004200441d8026a3602f80220044180026a20044190036a10410c0e0b2004200228020022123602d80220042802d80120124d0d0220042802d00120124101746a2d0001450d03200441a4036a41013602002004420237029403200441b0afcc0036029003200441013602fc022004200441f8026a3602a0032004200441d8026a3602f80220044180026a20044190036a10410c0d0b2004200228020022123602e80220042802c00120124b0d02200441013602a4032004420237029403200441fcadcc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a104120042802800222120d0d0c020b2004200228020022123602e80220042802cc0120124b0d01200441a4036a41013602002004420237029403200441acaecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c0b0b200441a4036a4101360200200442023702940320044190afcc0036029003200441013602fc022004200441f8026a3602a0032004200441d8026a3602f80220044180026a20044190036a10410c0a0b200241146a21022001416c6a22010d000c040b0b20042902ec0221110c0b0b41c0dacb0041c8004188dbcb001064000b4190dacb00411e41b0dacb001064000b201341ffffffff0171450d00200e10350b200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d00004103470d000b200441186a200a10bf03200428021c2202450d002004280218210a200241286c210941002102034002400240024002400240200a20026a220141186a2d00000e0401000302010b200141206a2802004101470d032001411c6a28020021122004200141246a28020022013602d802201220014d0d03200441023602a4032004420237029403200441d0aacc00360290032004410136028c022004410136028402200420123602e802200420044180026a3602a0032004200441e8026a360288022004200441d8026a36028002200441f8026a20044190036a104120042802f80222120d0c0c030b20042001411c6a28020022013602e80220042802e40120014b0d02200441a4036a41013602002004420237029403200441f0aecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c060b2001411a6a2d0000450d012001410c6a2802002102200141146a280200210120044190036a41146a4101360200200420013602fc02200420023602f802200441043602ec022004420137029403200441e8dbcb00360290032004200441f8026a3602e8022004200441e8026a3602a00320044180026a20044190036a10410c050b20044190036a2001411c6a10b7072004280290032212450d0020042902940321110c0a0b2009200241286a2202470d000b0b024002400240200441b8016a41146a280200220241014b0d0020042802c001220241014b0d01200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d0000410d470d000b200441106a200a10bf03200428021022022004280214411c6c6a210a0240024003402002200a460d032004200228020022013602e802024020042802c00120014b0d00200441013602a4032004420237029403200441fcadcc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10412004280280022212450d0020042902840221110c0f0b200241046a2202280200450d0120044190036a200220042802d00120042802d80110b80720042d0090034101460d02200241186a210220042d009103450d000b412010332212450d06201241186a41002900c1dc4b370000201241106a41002900b9dc4b370000201241086a41002900b1dc4b370000201241002900a9dc4b37000042a0808080800421110c0d0b412910332212450d05201241286a41002d00a8dc4b3a0000201241206a41002900a0dc4b370000201241186a4100290098dc4b370000201241106a4100290090dc4b370000201241086a4100290088dc4b37000020124100290080dc4b37000042a9808080900521110c0c0b20044198036a290300211120042802940321120c0b0b200541306c2102200641546a2101024003402002450d01200241506a21022001412c6a2112200141306a220a210120122d0000410a470d000b200441086a200a10bf03200428020c2202450d00200428020822092002411c6c6a210c024002400240024003402009450d052004200928020022023602e80220042802cc0120024d0d082009280204450d0120044190036a200941046a20042802d00120042802d80110b80720042d0090034101460d0220042d0091030d032004200910bf070240024020042802042202450d00200428020021012002410274211220042802f001210a03402004200128020022023602d802200a20024d0d07200420042802e80120024102746a28020022023602e80220042802e40120024d0d02200141046a21012012417c6a22120d000b0b2009411c6a2209200c460d060c010b0b200441013602a4032004420237029403200441f0aecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c090b412a10332212450d07201241286a41002f00f1dc4b3b0000201241206a41002900e9dc4b370000201241186a41002900e1dc4b370000201241106a41002900d9dc4b370000201241086a41002900d1dc4b370000201241002900c9dc4b37000042aa808080a00521110c0e0b20044198036a290300211120042802940321120c0d0b412010332212450d05201241186a41002900c1dc4b370000201241106a41002900b9dc4b370000201241086a41002900b1dc4b370000201241002900a9dc4b37000042a0808080800421110c0c0b200441a4036a41013602002004420237029403200441ccaecc0036029003200441013602fc022004200441f8026a3602a0032004200441d8026a3602f80220044180026a20044190036a10410c050b024020042802bc012202450d002002410c6c450d0020042802b80110350b0240200441c8016a2802002202450d002002410c6c450d0020042802c40110350b0240200441d4016a28020041808080807872418080808078460d0020042802d00110350b0240200441e4016a2802002201450d0020042802dc0121022001410474210103400240200241046a280200450d00200228020010350b200241106a2102200141706a22010d000b0b0240200441e0016a28020041ffffffff0071450d0020042802dc0110350b0240200441ec016a28020041ffffffff0371450d0020042802e80110350b200f41808080807872418080808078460d0d200b10350c0d0b20044190036a41146a41013602002004420137029403200441f0dbcb0036029003200441013602fc02200420023602e8022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c030b200441a4036a41013602002004420137029403200441f8dbcb0036029003200441013602fc02200420023602e8022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c020b200441a4036a41013602002004420237029403200441acaecc0036029003200441013602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410c010b1045000b200428028002211220042902840221110c050b200441a4036a41013602002004420137029403200441e0dbcb00360290032004413b3602fc022004200441f8026a3602a0032004200441e8026a3602f80220044180026a20044190036a10410b20042802800221120b2004290284022111201341ffffffff0171450d02200e10350c020b200441a4036a41023602002004418c026a4101360200200442023702940320044180dacb00360290032004410136028402200420044180026a3602a0032004200441f8016a360288022004200441f4016a36028002200441f8026a20044190036a104120042802f80221120b20042902fc0221110b024020042802bc012202450d002002410c6c450d0020042802b80110350b0240200441c8016a2802002202450d002002410c6c450d0020042802c40110350b0240200441d4016a28020041808080807872418080808078460d0020042802d00110350b0240200441e4016a2802002201450d0020042802dc0121022001410474210103400240200241046a280200450d00200228020010350b200241106a2102200141706a22010d000b0b0240200441e0016a28020041ffffffff0071450d0020042802dc0110350b0240200441ec016a28020041ffffffff0371450d0020042802e80110350b200f41808080807872418080808078460d01200b10350c010b20022902042111200228020021120240200f41808080807872418080808078460d00200b10350b0240200428027c2202450d002002410c6c450d00200428027810350b02402004280288012202450d002002410c6c450d0020042802840110350b024020042802940141808080807872418080808078460d0020042802900110350b024020042802a4012201450d00200428029c0121022001410474210103400240200241046a280200450d00200228020010350b200241106a2102200141706a22010d000b0b024020042802a00141ffffffff0071450d00200428029c0110350b20042802ac0141ffffffff0371450d0020042802a80110350b2012450d0002402011a7450d00201210350b200041b6d3cb0036020420004101360200200041086a41133602002006200510f4062007450d01200741306c450d01200610350c010b2000201036020420004100360200200041186a2003360200200041146a2005360200200041106a20073602002000410c6a2006360200200041086a20083602000b200441d0036a24000f0b103c000bc31401187f23004190026b220224000240024002400240024020002802002203450d00200028020421040c010b41002104200241216a410041d800109f081a200241076a220542003700002002420037010241ec0010332203450d0120034100360200200320022902003702042003410b6a2005290000370000200341136a200241206a41d900109d081a20004100360204200020033602000b200220003602282002200336022420022004360220200141ff017121060240024002400340200341066a210720032f01062108410c2109410021050240034020082005460d01200320056a210a200941086a2109200541016a210502404100417f4101200a41086a2d0000220a20064b1b200a2006461b41016a0e03000401000b0b2005417f6a21080b02402004450d002004417f6a2104200320084102746a41ec006a28020021030c010b0b200241c0016a2008360200200241bc016a2000360200200241b0016a41086a20033602002002200036022820022003360224200241003602b4012000200028020841016a36020802400240024020032f01062205410b490d00200241206a41016a410041d800109f081a200241003a001141ec0010332206450d06200641003602002006410036000f20064200370007200620022f01103b0005200641136a200241206a41d900109d081a2003410e6a2d0000210b2003280248210c2003280244210d200641086a2003410f6a20032f010641796a2205109d082109200641146a200341cc006a2005410374109d082104200341063b0106200620053b010620084107490d0120092008417a6a220a6a2009200841796a22086a2209200541ffff037120086b109e081a200920013a00002004200a4103746a200420084103746a2205200641066a22072f010020086b410374109e081a2005410136020020072f010021050c020b200341086a2209200841016a22066a200920086a2209200520086b2200109e081a200920013a0000200341146a220920064103746a200920084103746a22092000410374109e081a200941013602002003200541016a3b01060c040b200341086a2205200841016a22096a200520086a220420072f0100220520086b220a109e081a200420013a0000200341146a220420094103746a200420084103746a2209200a410374109e081a200941013602000b2007200541016a3b01000240200328020022050d00410021010c020b200241206a41016a210e200241a8016a210f200241a0016a211020024198016a211120024190016a211220024180016a41086a211341002101034020062114200c2115200d2116200b211720032f01042104024002400240200522032f01062205410b490d00200e410041d800109f081a200241003a0011200220022f01103b0100200241b0016a200241206a41d900109d081a200f4200370300201042003703002011420037030020124200370300201342003703002002420037038001419c0110332206450d07200641003602002006410036000f20064200370007200620022f01003b0005200641136a200241b0016a41d900109d081a20064194016a200f2903003702002006418c016a201029030037020020064184016a2011290300370200200641fc006a2012290300370200200641f4006a2013290300370200200620022903800137026c2003410e6a2d0000210b2003280248210c2003280244210d200641086a2003410f6a20032f0106220941796a2205109d082118200641146a200341cc006a2005410374109d082119200641ec006a20034188016a2009417a6a220a410274109d082107200341063b0106200620053b01060240200a450d00410021052007210903402009280200220820053b010420082006360200200941046a2109200a200541016a2205470d000b0b20044107490d0120182004417a6a22096a2018200441796a22056a220820062f010620056b109e081a200820173a0000201920094103746a201920054103746a220820062f010620056b410374109e081a2008201636020020082015360204200620062f010641016a22083b01062004410274221520076a416c6a200720094102746a220a200841ffff0371220420096b410274109e081a200a201436020020042009490d02200620156a41d4006a2109034020092802002208200541016a22053b010420082006360200200941046a210920052004490d000c030b0b200341086a2206200441016a22096a200620046a2206200520046b2208109e081a200620173a0000200341146a220620094103746a200620044103746a22062008410374109e081a20062016360200200620153602042003200541016a22053b01062004410274200341ec006a22066a41086a200620094102746a2206200541ffff0371220820096b410274109e081a20062014360200200420084f0d0520032009417f6a22054102746a41f0006a2109034020092802002206200541016a22053b010420062003360200200941046a210920052008490d000c060b0b200341086a2209200441016a22056a200920046a220920032f0106220820046b220a109e081a200920173a0000200341146a220920054103746a200920044103746a2209200a410374109e081a20092016360200200920153602042003200841016a22093b010620044102742207200341ec006a22086a41086a200820054102746a220a200941ffff0371220820056b410274109e081a200a2014360200200420084f0d00200320076a41f0006a2105034020052802002209200441016a22043b010420092003360200200541046a210520082004470d000b0b200141016a210120032802002205450d020c000b0b200241c0016a2005417f6a360200200241bc016a2000360200200241b8016a20033602002002200036022820022003360224200220043602b401200320096a42013702000c010b200241206a41016a410041d800109f081a200241076a22034200370000200242003701022002200229020037031020022003290000370017200241b0016a200241206a41d900109d081a200241a8016a22054200370300200241a0016a2209420037030020024198016a2208420037030020024190016a2204420037030020024188016a220a42003703002002420037038001419c0110332203450d0120034100360200200320022903103702042003410b6a2002290017370000200341136a200241b0016a41d900109d081a20034194016a20052903003702002003418c016a200929030037020020034184016a2008290300370200200341fc006a2004290300370200200341f4006a200a290300370200200320022903800137026c20032000280200220536026c2000200336020020002000280204220941016a360204200541003b01042005200336020020092001470d0220032f01062205410a4b0d03200320054103746a220941186a200c360200200941146a200d360200200320056a41086a200b3a00002003200541016a22054102746a41ec006a2006360200200320053b0106200620053b0104200620033602000b20024190026a24000f0b103c000b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000bf42a11017f017e097f017e017f017e037f017e017f017e017f017e017f017e0c7f037e017f230041b0026b220224004200210320024184016a4200370200200241fc006a4280808080c000370200200241ec006a4200370200200241e4006a4280808080c000370200200241d0006a4200370300200241c0006a4200370300200241386a4280808080c000370300200241286a4200370300200241206a4280808080c000370300200241106a4200370300200242043702742002420437025c20024204370348200242043703302002420437031820024280808080c00037030820024204370300200141106a28020021042001410c6a280200210520012802082106410021072002410036029001200241003602a001200241003602b0010240024020040d004104210841002101410021094100210a4100210b4104210c4200210d4104210e4200210f41042110410021114100210441042112420021134104211442002115410421164200211741042118420021190c010b200241f0016a410172211a200241f0016a410472211b200241c0016a41086a2109200241c0016a41186a210a200241c0016a41206a210b200241c0016a41276a211c4100211d4100211e4100211f4100212041002121410021224100211102400340200920062004417f6a220441306c6a220141096a290000370300200241c0016a41106a2223200141116a290000370300200a200141196a290000370300200b200141216a290000370300201c200141286a290000370000200220012900013703c00120012d000022014110460d01201a20022903c001370000201a41086a2009290300370000201a41106a2023290300370000201a41186a200a290300370000201a41206a200b290300370000201a41276a201c290000370000200220013a00f001410121160240024002400240024002400240024002402001417e6a2214410b4d0d00410121120c010b410121124101210e410121104101210c410121244101210141012123410121084101212502400240024002400240024002400240024002400240024002400240024002400240024020140e0c000102030405060a07190809000b20022903f801211520022802f40121082022450d1002402026422088a72201450d00200141047421232022210103400240200141046a280200450d00200128020010350b200141106a2101202341706a22230d000b0b202642ffffffff0083500d10202210350c100b4100212520022903f801211520022802f40121082021450d0e02402027422088a72201450d00200141286c21232021210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101202341586a22230d000b0b2027a72201450d0e200141286c450d0e202110350c0e0b4100211220022903f801211520022802f40121012020450d0c200f42ffffffff0383500d0c202010350c0c0b4100210e20022903f801211520022802f4012101201f450d0a2013a72223450d0a2023410c6c450d0a201f10350c0a0b4100211020022903f801211520022802f4012101201e450d08200da72223450d082023410c6c450d08201e10350c080b4100210c20022903f801211520022802f4012110201d450d0602402028422088a72201450d00201d20014104746a210e201d21240340024020242802082223450d0020242802002101202341047421230340024020012d00004109470d000240200141046a2225280200220828020441ffffffff0371450d0020082802001035202528020021080b200810350b200141106a2101202341706a22230d000b0b202441106a21010240202441046a28020041ffffffff0071450d00202428020010350b200121242001200e470d000b0b202842ffffffff0083500d06201d10350c060b4100212420022903f801211520022802f40121082007450d0402402003422088a72201450d00200141146c21232007210103400240200141046a280200450d00200128020010350b200141146a21012023416c6a22230d000b0b2003a72201450d04200141146c450d04200710350c040b200241a0026a41086a2201201b41086a2802003602002002201b2902003703a00202402002280290012223450d0020024190016a10b2072002280294012208450d002008411c6c450d00202310350b20024190016a41086a2001280200360200200220022903a0023703900141002101410121124101210e410121104101210c410121240c0f0b200241a0026a41086a2201201b41086a2802003602002002201b2902003703a002024020022802a0012223450d00200241a0016a10b30720022802a4012208450d00200841186c450d00202310350b200241a0016a41086a2001280200360200200220022903a0023703a00141002123410121124101210e410121104101210c41012124410121010c0f0b200241a0026a41086a2201201b41086a2802003602002002201b2902003703a002024020022802b0012223450d00200241b0016a10b40720022802b4012208450d002008411c6c450d00202310350b200241b0016a41086a2001280200360200200220022903a0023703b00141002108410121124101210e410121104101210c410121244101210141012123410121250c0f0b4101211220022802f40121294101210e410121104101210c410121244101210141012123410121084101212541012116410121110c0e0b2015210320082107410121124101210e410121104101210c0c0a0b201521282010211d410121124101210e410121100c080b2015210d2001211e410121124101210e0c060b201521132001211f410121120c040b2015210f200121200c020b2015212720082121410121124101210e410121104101210c410121244101210141012123410121080c080b2015212620082122410121124101210e410121104101210c4101212441012101410121234101210841012125410021160c070b4101210e0b410121100b4101210c0b410121240b410121010b410121230b41012108410121250b02400240024002400240024002400240024002400240024020022d00f0012218417e6a2214410b4b0d0020140e0c0a09080706050400030002010a0b02402018410e4b0d00024002400240024002400240024002400240024002400240024020180e0f0001020304050607081809180a0b0c000b20022802f801450d1720022802f40110350c170b024020022802f801450d0020022802f40110350b200228028402450d1620022802800210350c160b20022802f4012108024020022802fc012201450d00200141047421232008210103400240200141046a280200450d00200128020010350b200141106a2101202341706a22230d000b0b20022802f80141ffffffff0071450d15200810350c150b20022802f4012108024020022802fc012201450d00200141286c21232008210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101202341586a22230d000b0b20022802f8012201450d14200141286c450d14200810350c140b20022802f80141ffffffff0371450d1320022802f40110350c130b20022802f8012201450d122001410c6c450d1220022802f40110350c120b20022802f8012201450d112001410c6c450d1120022802f40110350c110b20022802f401210e024020022802fc012201450d00200e20014104746a210c200e21240340024020242802082223450d0020242802002101202341047421230340024020012d00004109470d000240200141046a2225280200220828020441ffffffff0371450d0020082802001035202528020021080b200810350b200141106a2101202341706a22230d000b0b202441106a21010240202441046a28020041ffffffff0071450d00202428020010350b200121242001200c470d000b0b20022802f80141ffffffff0071450d10200e10350c100b20022802f4012108024020022802fc012201450d00200141146c21232008210103400240200141046a280200450d00200128020010350b200141146a21012023416c6a22230d000b0b20022802f8012201450d0f200141146c450d0f200810350c0f0b201b10b20720022802f8012201450d0e2001411c6c450d0e20022802f40110350c0e0b201b10b30720022802f8012201450d0d200141186c450d0d20022802f40110350c0d0b201b10b40720022802f8012201450d0c2001411c6c450d0c20022802f40110350c0c0b024020022802f4012201450d0020022802f801450d00200110350b02402002280284022225450d000240200228028c022201450d002001410c6c2123202521010340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101202341746a22230d000b0b2002280288022201450d002001410c6c450d00202510350b200228029402220e450d0b0240200228029c022201450d00200e20014104746a210c200e212403402024222541106a2124024020252802042201450d0002402025410c6a2802002223450d002023410c6c21230340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101202341746a22230d000b0b202541086a2802002201450d002001410c6c450d00202528020410350b2024200c470d000b0b20022802980241ffffffff0071450d0b200e10350c0b0b024020022802f801450d0020022802f40110350b02402002280284022201450d00200228028802450d00200110350b20022802940241ffffffff0071450d0a20022802900210350c0a0b2008450d09201b10b40720022802f8012201450d092001411c6c450d0920022802f40110350c090b2023450d08201b10b30720022802f8012201450d08200141186c450d0820022802f40110350c080b2001450d07201b10b20720022802f8012201450d072001411c6c450d0720022802f40110350c070b2024450d0620022802f4012108024020022802fc012201450d00200141146c21232008210103400240200141046a280200450d00200128020010350b200141146a21012023416c6a22230d000b0b20022802f8012201450d06200141146c450d06200810350c060b200c450d0520022802f401210e024020022802fc012201450d00200e20014104746a210c200e21240340024020242802082223450d0020242802002101202341047421230340024020012d00004109470d000240200141046a2225280200220828020441ffffffff0371450d0020082802001035202528020021080b200810350b200141106a2101202341706a22230d000b0b202441106a21010240202441046a28020041ffffffff0071450d00202428020010350b200121242001200c470d000b0b20022802f80141ffffffff0071450d05200e10350c050b2010450d0420022802f8012201450d042001410c6c450d0420022802f40110350c040b200e450d0320022802f8012201450d032001410c6c450d0320022802f40110350c030b2012450d0220022802f80141ffffffff0371450d0220022802f40110350c020b2025450d0120022802f4012108024020022802fc012201450d00200141286c21232008210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101202341586a22230d000b0b20022802f8012201450d01200141286c450d01200810350c010b2016450d0020022802f4012108024020022802fc012201450d00200141047421232008210103400240200141046a280200450d00200128020010350b200141106a2101202341706a22230d000b0b20022802f80141ffffffff0071450d00200810350b20040d000b410021040b2003420020071b211920284200201d1b2103200d4200201e1b211720134200201f1b210d200f420020201b21152027420020211b210f2026420020221b21132007410420071b2118201d4104201d1b210c201e4104201e1b2116201f4104201f1b210e2020410420201b21142021410420211b21102022410420221b2112200228020821012002280200210820022902b401212820022802b001210920022902a401212720022802a001210a2002290294012126200228029001210b0b02402001450d00200141047421232008210103400240200141046a280200450d00200128020010350b200141106a2101202341706a22230d000b0b0240200228020441ffffffff0071450d00200810350b200228020c2108024020022802142201450d00200141286c21232008210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101202341586a22230d000b0b024020022802102201450d00200141286c450d00200810350b0240200228021c41ffffffff0371450d00200228021810350b024020022802282201450d002001410c6c450d00200228022410350b024020022802342201450d002001410c6c450d00200228023010350b200228023c211c024020022802442201450d00201c20014104746a2124201c211a03400240201a2802082223450d00201a2802002101202341047421230340024020012d00004109470d000240200141046a2225280200220828020441ffffffff0371450d0020082802001035202528020021080b200810350b200141106a2101202341706a22230d000b0b201a41106a21010240201a41046a28020041ffffffff0071450d00201a28020010350b2001211a20012024470d000b0b0240200228024041ffffffff0071450d00201c10350b20022802482108024020022802502201450d00200141146c21232008210103400240200141046a280200450d00200128020010350b200141146a21012023416c6a22230d000b0b0240200228024c2201450d00200141146c450d00200810350b200241dc006a10b207024020022802602201450d002001411c6c450d00200228025c10350b200241e8006a10b3070240200228026c2201450d00200141186c450d00200228026810350b200241f4006a10b407024020022802782201450d002001411c6c450d00200228027410350b2028420020091b212820274200200a1b212720264200200b1b21262009410420091b2101200a4104200a1b2123200b4104200b1b2108200228028001221a20022802880110f40602402002280284012225450d00202541306c450d00201a10350b200241d8006a202936020020022004360288012002200536028401200220063602800120022028370378200220013602742002202737026c20022023360268200220263703602002200836025c200220113602542002201937024c20022018360248200220033703402002200c36023c20022017370234200220163602302002200d3703282002200e3602242002201537021c200220143602182002200f3703102002201036020c200220133702042002201236020020002002418c01109d081a200241b0026a24000bd60401107f230041106b220224000240024020012802004101460d00200128020421030c010b200141106a2d000021042001410c6a2802002105200141086a280200210620012f0112210720012d0011210820012802042109200241086a200010bf0302400240200228020c220a450d0020022802082101200a41047441706a410476210b0240200841ff0171220c4104460d004100210a200441ff0171210d0340200a2103024020012d000c200d470d0020012802082005470d0002402001280200220a2009460d002005210e2009210f0340200e450d01200e417f6a210e200f2d00002110200a2d00002111200f41016a210f200a41016a210a20112010460d000c020b0b20012d000d220a200c470d00200a4104470d040b200141106a2101200341016a210a2003200b470d000c020b0b4100210a200441ff0171210d0340200a2103024020012d000c200d470d0020012802082005470d0002402001280200220a2009460d002005210e2009210f0340200e450d01200e417f6a210e200f2d00002110200a2d00002111200f41016a210f200a41016a210a20112010460d000c020b0b20012d000d4104460d030b200141106a2101200341016a210a2003200b470d000b0b024020002802082201200041046a280200470d00200020014101108c01200028020821010b200028020020014104746a220120073b010e200120083a000d200120043a000c2001200536020820012006360204200120093602002000200028020841016a3602082002200010bf032002280204417f6a21030c010b2006450d00200910350b200241106a240020030b9d1901217f23004180016b2202240041002103200241003602102002420437030820012802042104200128020021054101210641012107024020012802082208450d0041002107200241086a410041011089012002280208200228021041306c6a2203200836000c2003200436000820032005360004200341023a00002002200228021041016a22033602100b200141106a2802002109200128020c210a0240200141146a280200220b450d0002402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341033a00002003200b36000c200320093600082003200a36000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241206a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a2203360210410021060b2001411c6a280200210c2001280218210d4100210e02400240200141206a280200220f0d00410021100c010b02402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341043a00002003200f36000c2003200c3600082003200d36000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241206a290200370200200341206a200241286a290200370200200341286a200241186a41186a290200370200410121102002200228021041016a22033602100b200141286a28020021112001280224211202402001412c6a280200220f450d0002402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341053a00002003200f36000c200320113600082003201236000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241206a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702004101210e2002200228021041016a22033602100b200141346a28020021132001280230211402400240200141386a280200220f0d00410021150c010b02402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341063a00002003200f36000c200320133600082003201436000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241206a290200370200200341206a200241286a290200370200200341286a200241186a41186a290200370200410121152002200228021041016a22033602100b200141c0006a2802002116200128023c21174101211802400240200141c4006a28020022190d004101211a0c010b02402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341073a00002003201936000c200320163600082003201736000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241206a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a22033602104100211a0b200141cc006a280200211b2001280248211c0240200141d0006a280200221d450d0002402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341083a00002003201d36000c2003201b3600082003201c36000420032002290218370210200341036a200241f3006a2d00003a0000200341186a200241186a41086a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a2203360210410021180b4101211e024020012802544101470d00200141d8006a280200210f02402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022f00713b0001200341093a00002003200f36020420032002290218370208200341036a200241f3006a2d00003a0000200341106a200241206a290200370200200341186a200241186a41106a290200370200200341206a200241186a41186a290200370200200341286a200241186a41206a2902003702002002200228021041016a22033602100b200241c0006a41086a221f200141e4006a280200220f3602002002200129025c3703400240200f450d00200241fc006a201f2802003600002002200229034037007402402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022900713700012003410a3a000020032002290218370210200341086a200241f8006a290000370000200341186a200241186a41086a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a22033602104100211e0b200241d0006a41086a200141f0006a280200220f3602002002200129026837035002400240200f0d00410121200c010b200241fc006a200241d0006a41086a2802003600002002200229035037007402402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022900713700012003410c3a000020032002290218370210200341086a200241f8006a290000370000200341186a200241186a41086a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a2203360210410021200b200241e8006a221f200141fc006a280200220f3602002002200129027437036002400240200f0d00410121210c010b200241fc006a201f2802003600002002200229036037007402402003200228020c470d00200241086a20034101108901200228021021030b2002280208200341306c6a220320022900713700012003410d3a000020032002290218370210200341086a200241f8006a290000370000200341186a200241186a41086a290200370200200341206a200241286a290200370200200341286a200241186a41186a2902003702002002200228021041016a2203360210410021210b20014184016a280200210f200128028001211f200241086a200320014188016a28020041306c220141306d222210890120022802082002280210220341306c6a201f2001109d081a2002200320226a3602100240200f450d00200f41306c450d00201f10350b200241186a41086a2201200241086a41086a280200360200200220022903083703180240024041800610332203450d0020004280c2cdeb1637020020002002290318370208200041106a2001280200360200200310352021450d01200241e0006a10b40720022802642201450d012001411c6c450d01200228026010350c010b1045000b02402020450d00200241d0006a10b30720022802542201450d00200141186c450d00200228025010350b0240201e450d00200241c0006a10b20720022802442201450d002001411c6c450d00200228024010350b02402018450d000240201d450d00201d41146c2103201c210103400240200141046a280200450d00200128020010350b200141146a21012003416c6a22030d000b0b201b450d00201b41146c450d00201c10350b0240201a450d0002402019450d00201720194104746a211e201721180340024020182802082203450d0020182802002101200341047421030340024020012d00004109470d000240200141046a220f280200220028020441ffffffff0371450d0020002802001035200f28020021000b200010350b200141106a2101200341706a22030d000b0b201841106a21010240201841046a28020041ffffffff0071450d00201828020010350b200121182001201e470d000b0b201641ffffffff0071450d00201710350b02402013452015720d002013410c6c450d00201410350b0240201145200e720d002011410c6c450d00201210350b0240200c41ffffffff0371410047201041017371450d00200d10350b02402006450d000240200b450d00200b41286c2103200a210103400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101200341586a22030d000b0b2009450d00200941286c450d00200a10350b02402007450d0002402008450d00200841047421032005210103400240200141046a280200450d00200128020010350b200141106a2101200341706a22030d000b0b200441ffffffff0071450d00200510350b20024180016a24000ba01302147f027e23004180026b220424000240024020014115490d0041012105410121060240024002400340200121072000210820052006714101732109024002400240024002400240034002400240024002402003450d00024020054101710d002000200110c8072003417f6a21030b2001410276220a41036c210b200a410174210c4100210d024020014132490d00200b200b417f6a220d2000200b4103746a280200220e2000200d4103746a280200220f4922101b2211200b41016a2212200d200b20101b200020124103746a280200220b200f200e20101b220d49220f1b200b200d200f1b200020114103746a2802004922131b210b200c200c417f6a220d2000200c4103746a28020022112000200d4103746a280200221249220e1b2214200c4101722206200d200c200e1b200020064103746a280200220c20122011200e1b220d4922111b200c200d20111b200020144103746a2802004922141b210c200a200a417f6a22122000200a4103746a2802002206200020124103746a280200221549220d1b2216200a41016a22172012200a200d1b200020174103746a280200220a20152006200d1b22064922121b200a200620121b200020164103746a2802004922061b210a41024101200d1b200d20121b20066a200e6a20116a20146a20106a200f6a20136a210d0b200d2000200c4103746a280200220e2000200a4103746a280200220f4922106a2000200b4103746a280200220d200f200e20101b221149220f6a210e200d2011200f1b2000200c200a20101b220d4103746a280200490d01200b200a200c20101b200f1b210d0c020b2000200110d9070c0f0b200e41016a220e410c490d0002402001410176220b450d00200020014103746a41786a210a2000210c0340200c2902002118200c200a290200370200200a2018370200200c41086a210c200a41786a210a200b417f6a220b0d000b0b2001200d417f736a210d4101210a0c010b200e45210a0b0240200a452009724101710d002000200110da070d0d0b2002450d02200d20014f0d01024020022802002000200d4103746a220a2802004f0d0020002108200121070c040b200029020021182000200a290200370200200a2018370200200041786a210f200041086a211120002902002218a721104100210c2001210b03400240200c200b417f6a220d4f0d002011200c4103746a210a0340200a28020020104b0d01200a41086a210a200d200c41016a220c470d000b200d210c0b200f200b4103746a210a02400340200c200b417f6a220b4f0d01200a280200210d200a41786a220e210a200d20104b0d000b2011200c4103746a220a2902002119200a200e41086a220d290200370200200d2019370200200c41016a210c0c010b0b2000201837020002402001200c41016a220a490d002000200a4103746a21002001200a6b220141154f0d010c0c0b0b200a200141e485cc001059000b200d200141d086cc001042000b2007450d010b200d20074f0d012008290200211820082008200d4103746a220a290200370200200a2018370200200841086a210e20082902002219a72111410021142007417f6a2210450d02200e210a0340200a28020020114f0d03200a41086a210a2010201441016a2214470d000b201021140c020b4100410041f485cc001042000b200d2007418486cc001042000b200820074103746a210c2010210b02400340200c210d200b220a20144d22060d01200a417f6a210b200d41786a220c28020020114f0d000b0b0240200a2014490d002010200a490d0241800121054100210b410021014100210c4100210f4180012109200e20144103746a2215211003400240200d20106b220a4187104b22130d00200a410376220a41807f6a200a2001200b49200f200c49220e7222001b210a02402000450d002009200a200e1b2109200a2005200e1b21050c010b200a200a41017622096b21050b0240200f200c470d00024020090d002004220c210f0c010b4100210a2004220f210c2010210e0340200c200a3a0000200c200e28020020114f6a210c200e41086a210e2009200a41016a220a470d000b0b02402001200b470d00024020050d0020044180016a220b21010c010b200d41786a210a4100210e20044180016a2201210b0340200b200e3a0000200b200a2802002011496a210b200a41786a210a2005200e41016a220e470d000b0b0240200b20016b220a200c200f6b220e200e200a4b1b2212450d002010200f2d00004103746a220a2902002118200a200d20012d0000417f734103746a290200370200024020124101460d004100210a0340200d2001200a6a220e2d0000417f734103746a2010200f200a6a41016a22002d00004103746a290200370200201020002d00004103746a200d200e41016a2d0000417f734103746a290200370200200a41026a210e200a41016a2200210a200e2012490d000b200120006a2101200f20006a210f0b200d20012d0000417f734103746a2018370200200141016a2101200f41016a210f0b200d20054103746b200d2001200b461b210d201020094103746a2010200f200c461b211020130d000b02400240200f200c4f0d00200d210a03402010200c417f6a220c2d00004103746a220b2902002118200b200a41786a220a290200370200200a2018370200200f200c490d000c020b0b2010210a2001200b4f0d000340200a2902002118200a200d200b417f6a220b2d0000417f734103746a220c290200370200200c2018370200200a41086a210a2001200b490d000b0b200820193702002007200a20156b41037620146a22014d0d032008200820014103746a220a290200370200200a2019370200200720016b220c450d04200c20012001200c4b1b210b2007410376210d200a41086a2100024002402001200c417f6a220c490d002000200c200a200310f206200821000c010b200820012002200310f206200a2102200c21010b200b200d4f2105200141154f0d010c050b0b2014200a419486cc001059000b200a2010419486cc001058000b20012007418486cc001042000b41a486cc00411c41c086cc00103f000b20014102490d00200041786a21104100210e4101210b0340200b410374210c200b417f6a210a200b41016a210b02402000200c6a220d2802002000200a4103746a220f2802004f0d00200d2902002118200d200f2902003702000240200a450d00200e210c2010210a200d41706a2802002018a7220d4d0d00024002400340200a41086a200a290200370200200c4101460d01200c417f6a210c200a41786a220a280200200d4b0d000c020b0b4100210c0b2000200c4103746a210f0b200f20183702000b200e41016a210e201041086a2110200b2001470d000b0b20044180026a24000b9c0402077f017e230041306b22022400200241106a2203200141246a290200370300200241086a22042001411c6a29020037030020022001290214370300200241186a41106a2205200141106a280200360200200241186a41086a2206200141086a290200370300200220012902003703182000200241186a10f00621070240200041206a28020022082000411c6a280200470d00200041186a20084101108601200028022021080b200028021820084102746a20073602002000200028022041016a3602202005200329030037030020062004290300370300200220022903003703180240200041f0006a22032802002208200041ec006a280200470d000240024002400240200841016a22042008490d00200841017422052004200520044b1bad42187e2209422088a70d002009a722044100480d00024020080d0020040d02410421050c040b20002802682105200841186c22082004460d03024020080d0020040d02410421050c040b20052008200410372205450d020c030b103e000b2004103322050d010b103c000b20002005360268200041ec006a200441186e360200200041f0006a28020021080b2000280268200841186c6a22082002290318370200200841106a200241186a41106a290300370200200841086a200241186a41086a29030037020020032003280200220841016a360200024020012d002c450d0020004101360254200041d8006a20083602000b200241306a24000bcf0f01077f02402001450d002000200141306c6a210203402000220341306a21000240024020032d00002201410e4b0d00024002400240024002400240024002400240024002400240024020010e0f0001020304050607080e090e0a0b0c000b200341086a280200450d0d200341046a28020010350c0d0b0240200341086a280200450d00200341046a28020010350b200341146a280200450d0c200341106a28020010350c0c0b02402003410c6a2802002204450d00200341046a28020021012004410474210403400240200141046a280200450d00200128020010350b200141106a2101200441706a22040d000b0b200341086a28020041ffffffff0071450d0b200328020410350c0b0b02402003410c6a2802002204450d00200341046a2802002101200441286c210403400240200141046a280200450d00200128020010350b0240200141106a280200450d002001410c6a28020010350b200141286a2101200441586a22040d000b0b200341086a2802002201450d0a200141286c450d0a200328020410350c0a0b200341086a28020041ffffffff0371450d09200341046a28020010350c090b200341086a2802002201450d082001410c6c450d08200341046a28020010350c080b200341086a2802002201450d072001410c6c450d07200341046a28020010350c070b02402003410c6a2802002201450d00200341046a280200220520014104746a21060340024020052802082204450d0020052802002101200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d0020082802001035200728020021080b200810350b200141106a2101200441706a22040d000b0b200541106a21010240200541046a28020041ffffffff0071450d00200528020010350b2001210520012006470d000b0b200341086a28020041ffffffff0071450d06200328020410350c060b02402003410c6a2802002204450d00200341046a2802002101200441146c210403400240200141046a280200450d00200128020010350b200141146a21012004416c6a22040d000b0b200341086a2802002201450d05200141146c450d05200328020410350c050b02402003410c6a2802002201450d00200341046a28020022052001411c6c6a21060340024020052802042201450d0002402005410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d0020082802001035200728020021080b200810350b200141106a2101200441706a22040d000b0b200541086a28020041ffffffff0071450d00200528020410350b2005411c6a21010240200541146a28020041ffffffff0371450d00200528021010350b2001210520012006470d000b0b200341086a2802002201450d042001411c6c450d04200328020410350c040b02402003410c6a2802002201450d00200341046a2802002205200141186c6a210603400240200541046a28020041ffffffff0171450d00200528020010350b0240200541146a2802002204450d00200528020c2101200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d0020082802001035200728020021080b200810350b200141106a2101200441706a22040d000b0b200541186a21010240200541106a28020041ffffffff0071450d00200528020c10350b2001210520012006470d000b0b200341086a2802002201450d03200141186c450d03200328020410350c030b02402003410c6a2802002201450d00200341046a28020022052001411c6c6a21060340024020052802042201450d0002402005410c6a2802002204450d00200441047421040340024020012d00004109470d000240200141046a2207280200220828020441ffffffff0371450d0020082802001035200728020021080b200810350b200141106a2101200441706a22040d000b0b200541086a28020041ffffffff0071450d00200528020410350b2005411c6a21010240200541146a280200450d00200528021010350b2001210520012006470d000b0b200341086a2802002201450d022001411c6c450d02200328020410350c020b0240200341046a2802002201450d00200341086a280200450d00200110350b0240200341146a2802002201450d0002402003411c6a2802002204450d002004410c6c21040340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101200441746a22040d000b0b200341186a2802002201450d002001410c6c450d00200328021410350b200341246a2802002205450d0102402003412c6a2802002201450d00200520014104746a210603402005220741106a2105024020072802042201450d0002402007410c6a2802002204450d002004410c6c21040340024020012802002208450d00200141046a280200450d00200810350b2001410c6a2101200441746a22040d000b0b200741086a2802002201450d002001410c6c450d00200728020410350b20052006470d000b0b200341286a28020041ffffffff0071450d01200328022410350c010b0240200341086a280200450d00200341046a28020010350b0240200341146a2802002201450d00200341186a280200450d00200110350b200341246a28020041ffffffff0071450d00200341206a28020010350b20002002470d000b0b0b8f7205077f017e277f047e077f23002203210420034180096b416071220324000240411010332205450d00200541063a0000412010332206450d00200641063a001020064100360204200620032f00e0043b00012006412d3a0000200641036a200341e2046a2d00003a0000024020052d00004109470d0002402005280204220728020441ffffffff0371450d0020072802001035200528020421070b200710350b20051035200141106a28020041306c2105200128020841546a21070240024002400240024002400240024002400340024020050d00411010332207450d0b20074180023b010c200742828080802037020420072006360200200720032f01d0033b010e200128021022052001410c6a280200470d03200541016a22082005490d05200541017422092008200920084b1bad42307e220a422088a70d05200aa722084100480d050240024020050d0020080d01410421090c040b20012802082109200541306c22052008460d03024020050d0020080d01410421090c040b20092005200810372209450d0c0c030b2008103322090d020c0b0b200541506a21052007412c6a2108200741306a2209210720082d00004107470d000b200320032f01d0033b01e0040240200941086a22072802002205200941046a280200470d00200920054101108c01200728020021050b200928020020054104746a22054180023b010c200542828080802037020420052006360200200520032f01e0043b010e2007200728020041016a360200200341306a200910bf032003280234417f6a210b2001280210210c0c020b200120093602082001410c6a200841306e360200200128021021050b2001280208200541306c6a220520032f00f0073b0001200541073a0000200542818080801037000820052007360004200520032902e004370210200541036a200341f2076a2d00003a0000200541186a200341e8046a290200370200200541206a200341f0046a290200370200200541286a200341e0046a41186a2902003702002001200128021041016a220c3602104100210b0b200c41306c21052001280208220d41546a210702400340410021082005450d01200541506a21052007412c6a2109200741306a2206210720092d00004103470d000b200641086a2802002205450d00200541286c2107200628020041186a2105410021080340200820052d0000456a2108200541286a2105200741586a22070d000b0b200c41306c2105200d41546a210702400340410021092005450d01200541506a21052007412c6a2106200741306a220e210720062d00004103470d000b200e41086a2802002205450d00200541286c2107200e28020041186a2105410021090340200920052d0000456a2109200541286a2105200741586a22070d000b0b200c41306c2105200d415c6a210702400340024020050d00410021050c020b200541506a2105200741246a2106200741306a220e210720062d00004104470d000b200e28020021050b200341003602d00302400240200520096a220d0d004104210f41002110410021110c010b0240024002402008450d00200342003703e004410021050c010b200341e0046a4100200110e40720032802e404210520032802e0044101470d00200341e8046a290300210a024020032802d0032207450d0020032802d403450d00200710350b2003200a3702d403200320053602d003410021114104210f410021100c010b41041033220c450d07200c200536020020034281808080103702f4072003200c3602f0070240200d4102490d0002400240024020084102490d00200342003703e0044100210e0c010b200341e0046a4101200110e40720032802e404210e20032802e0044101470d00200341e8046a290300210a024020032802d003450d0020032802d403450d0020032802d00310350b2003200a3702d4030c010b4104210941012106410121070340200741016a2105024020072006470d00200341f0076a2006410110860120032802f007210c0b200c20096a200e360200200320053602f8072005200d4f0d0202400240200820054d0d00200342003703e0044100210e0c010b200341e0046a2005200110e40720032802e404210e20032802e0044101470d0020032903e804210a024020032802d003450d0020032802d403450d0020032802d00310350b2003200a3702d4030c020b200941046a210920032802f4072106200521070c000b0b2003200e3602d0030b20032802d003210520032802f807211020032802f407211120032802f007210f0b2005450d0020032902d403210a0240201141ffffffff0371450d00200f10350b2000200536020420004101360200200041086a200a3702000c040b024020012802102205450d0020012802082212200541306c6a2113200341e0046a41106a2114200341d0066a210e20034184056a211520034194056a2116200341a4056a2117200341b4056a2118200341c4056a2119200341d4056a211a200341e4056a211b200341f4056a211c20034184066a211d20034194066a211e200341a4066a211f200341b4066a2120200341c4066a21210340024020122d0000410c470d00201228020c2205450d0020122802042206200541186c6a212203400240200641146a22232802002205450d002006410c6a21244100210c034002400240024002400240200c20054f0d00410121052024280200200c410474220d6a22072d0000410b470d042003200741046a22073602c0022007280200220720104f0d01200f20074102746a2802002208450d042003200b3602c406200341133a00c006200341d7003a00b006200320083602a4062003412d3a00a0062003200b36029406200341123a00900620032007360284062003410b3a008006200341063a00f005200341003a00e00520034184083b01d005200341373a00c005200320023602b4052003412d3a00b0052003200b3602a405200341123a00a0052003200b36029405200341133a009005200341d6003a008005200320083602f4042003412d3a00f0042003200b3602e404200341123a00e004200c41016a212520232802002226200c4d0d022023200c360200200628020c2205202541047422276a2108024002402005200d6a22282d0000220941ac01470d00202841106a21090c010b4100210502400340202820056a21070240200941ff01714109470d000240200741046a280200220928020441ffffffff0371450d00200928020010350b200910350b2005450d01200541106a2105200741106a2d0000220941ac01470d000b202820056a41106a21090c010b200741106a21090b202620256b212920082107024020092008460d0002400340200922052d0000220741ac01460d01024020074109470d000240200541046a280200220728020441ffffffff0371450d00200728020010350b200710350b200541106a22092008470d000b0b200541106a21070b02400240024002402029450d00200341e0046a21050240202520062802142209460d00200d200941047422056b41106a210d200628020c20056a2109200341e0046a21050340200341f0076a41002005200e200546222a1b10e30720032d00f00741ac01460d052005200541106a202a1b2105200920032903f007370300200941086a200341f0076a41086a2903003703002006200628021441016a360214200941106a2109200d41706a220d0d000b0b200e20056b220d41047621090240200d450d00202420262009109a01200628020c222a202520096a22254104746a202a20276a2029410474109e081a20252006280214222a460d00200c200d4104766a410474202a41047422096b41106a210d200628020c20096a21090340200341f0076a41002005200e200546222a1b10e30720032d00f00741ac01460d052005200541106a202a1b2105200920032903f007370300200941086a200341f0076a41086a2903003703002006200628021441016a360214200941106a2109200d41706a220d0d000b200e20056b41047621090b200341003602d803200342083703d003200341d0036a41002009109a0120032802d803210d20032802d003212b200341f0076a41002005200e20054622091b10e307024020032d00f00741ac01460d002005200541106a20091b2105202b200d4104746a21090340200920032903f007370300200941086a200341f0076a41086a290300370300200341f0076a41002005200e200546222a1b10e3072005200541106a202a1b2105200d41016a210d200941106a210920032d00f00741ac01470d000b0b202b200d41047422266a212a20032802d403212c200d0d01202b21050c020b20242023280200410f109a012023280200210d200628020c2105200341f0076a200341e0046a10e307024020032d00f00741ac01460d002005200d4104746a2109201421050340200920032903f007370300200941086a200341f0076a41086a290300370300200341f0076a41002005200e200546222a1b10e3072005200541106a202a1b2105200d41016a210d200941106a210920032d00f00741ac01470d000b0b2023200d3602000c020b2024202920256a20264104752205109a0120254104742109200628020c220d202520056a222541047422056a200d20096a2029410474109e081a0240202520062802142209470d00202b21050c010b200628020c220d20056a212d200d20094104746a210d202b21090340024020260d00202a21050c020b200341f0076a41026a2205200941036a2d00003a0000200320092f00013b01f007024020092d0000222741ac01470d00200941106a21050c020b200941046a280200212e200941086a290300210a200d20273a0000200d41086a200a370300200d41046a202e36020020032f01f0072127200d41036a20052d00003a0000200d41016a20273b00002006200628021441016a360214202641706a2126200941106a22052109200d41106a220d202d470d000b0b0240202a2005460d000340200541106a2109024020052d00004109470d000240200541046a220d280200220528020441ffffffff0371450d0020052802001035200d28020021050b200510350b20092105202a2009470d000b0b202c41ffffffff0071450d00202b10350b20072008460d0303400240024020072d000022054109460d00200541ac01470d0120282007460d06200741106a2105034020052d0000220741ac01460d07024020074109470d000240200541046a280200220728020441ffffffff0371450d00200728020010350b200710350b200541106a22052008470d000c070b0b0240200741046a280200220528020441ffffffff0371450d00200528020010350b200510350b200741106a22072008470d000c040b0b200c2005418490cc001042000b200341013602f404200342013702e4042003419490cc003602e0042003413c3602d4032003200341d0036a3602f0042003200341c0026a3602d003200341f0076a200341e0046a104120032802f0072205450d0420032902f407210a2000200536020420004101360200200041086a200a370200201141ffffffff0371450d0c200f10350c0c0b20252026104f000b02402029450d000240202520232802002205460d002024280200220720054104746a200720254104746a2029410474109e081a0b2023202920056a3602000b024020032d00e0044109470d00024020032802e404220528020441ffffffff0371450d002005280200103520032802e40421050b200510350b024020032d00f0044109470d000240200341e0046a41146a280200220528020441ffffffff0371450d002005280200103520032802f40421050b200510350b024020032d0080054109470d0002402015280200220528020441ffffffff0371450d002005280200103520032802840521050b200510350b024020032d0090054109470d0002402016280200220528020441ffffffff0371450d002005280200103520032802940521050b200510350b024020032d00a0054109470d0002402017280200220528020441ffffffff0371450d002005280200103520032802a40521050b200510350b024020032d00b0054109470d0002402018280200220528020441ffffffff0371450d002005280200103520032802b40521050b200510350b024020032d00c0054109470d0002402019280200220528020441ffffffff0371450d002005280200103520032802c40521050b200510350b024020032d00d0054109470d000240201a280200220528020441ffffffff0371450d002005280200103520032802d40521050b200510350b024020032d00e0054109470d000240201b280200220528020441ffffffff0371450d002005280200103520032802e40521050b200510350b024020032d00f0054109470d000240201c280200220528020441ffffffff0371450d002005280200103520032802f40521050b200510350b024020032d0080064109470d000240201d280200220528020441ffffffff0371450d002005280200103520032802840621050b200510350b024020032d0090064109470d000240201e280200220528020441ffffffff0371450d002005280200103520032802940621050b200510350b024020032d00a0064109470d000240201f280200220528020441ffffffff0371450d002005280200103520032802a40621050b200510350b024020032d00b0064109470d0002402020280200220528020441ffffffff0371450d002005280200103520032802b40621050b200510350b024020032d00c0064109470d0002402021280200220528020441ffffffff0371450d002005280200103520032802c40621050b200510350b410f21050b2005200c6a220c20232802002205490d000b0b200641186a22062022470d000b0b201241306a22122013470d000b0b200341386a41106a200141106a280200220c360200200341386a41086a200141086a290200220a37030020032001290200370338410021062003410036025820034204370350200c41306c2105200aa7220d41546a210702400340024020050d000c020b200541506a21052007412c6a2108200741306a2209210720082d00004108470d000b200341286a200910bf0320032802282106200328022c21050b4100210e2005410020061b212a200c41306c2105200d41546a2108200641b0b4cc0020061b210702400340024020050d000c020b200541506a21052008412c6a2109200841306a2206210820092d0000410a470d000b200341206a200610bf032003280220210e200328022421050b20054100200e1b2128200c41306c2105200d41546a2109200e41b0b4cc00200e1b210802400340024020050d004200210a0c020b200541506a21052009412c6a2106200941306a220e210920062d00004109470d000b200e28020021054201210a0b20034100360278200341003602702007202a41146c6a212520082028411c6c6a21242005ad422086200a84210a200341f0076a410272221541266a2116201541206a2117201541186a2118201541106a2119201541086a211a200341f0076a41286a211b4100212a410121260240024003400240024002400240024020264102460d000240024002402007450d0020252007460d000340200741146a21092007410c6a280200450d022009210720252009470d000b0b4100210720264101470d02202a2105034002402005450d004100212a20052028460d00200541046a212a410121264100210720050d030c040b20242008460d03200341186a200810bf072008411c6a210820032802182205450d032005200328021c4102746a21282005212a0c000b0b200741106a2105200921070b200528020021050c010b0240200aa722054102460d002005450d00200a422088a721054200210a410221260c010b200341e0006a41086a200341f0006a41086a280200360200200320032903703703602003280248220e41306c21052003280240220c41546a210702400340410021082005450d01200541506a21052007412c6a2109200741306a2206210720092d00004103470d000b200641086a2802002205450d00200541286c2107200628020041186a2105410021080340200820052d0000456a2108200541286a2105200741586a22070d000b0b200e41306c2105200c415c6a210702400340024020050d00410021050c020b200541506a2105200741246a2109200741306a2206210720092d00004104470d000b200628020021050b200341e0046a41106a2229200341386a41106a280200360200200341e0046a41086a200341386a41086a290300370300200320032903383703e004200341b0016a200341e0046a10ef062003280250212f20032802542130024020032802582207450d00202f20074102746a2124200520086a212a200341e0046a41e0016a2126200341e0046a41d0016a2127200341e0046a41c0016a212e200341e0046a41b0016a2110200341e0046a41a0016a212b200341e0046a4190016a212d200341e0046a4180016a212c200341e0046a41f0006a2115200341e0046a41e0006a2116200341e0046a41d0006a2117200341e0046a41c0006a2118200341e0046a41306a2119200341e0046a41206a211a200341f7076a211b20034194056a211c200341a4056a211d200341b4056a211e200341c4056a211f200341d4056a2120200341e4056a2121200341f4056a212220034184066a211420034194066a2112200341a4066a2101200341b4066a2113200341c4066a2131202f21050240034020032802602207450d01200541046a2123200528020021062003280264210d034020072f01062225410274210c41002109417f210841002105024003400240200c2005470d00202521080c020b200720056a210e200841016a2108200941206a2109200541046a21050240417f200e41086a280200220e200647200e20064b1b41016a0e03020001020b0b200720096a220e412c6a2802002107200e41306a28020021052003200b3602c406200341133a00c006200341d7003a00b006200320053602a4062003412d3a00a0062003200b36029406200341123a00900620032007360284062003410b3a008006200341063a00f005200341003a00e00520034184083b01d005200341373a00c005200320023602b4052003412d3a00b0052003200b3602a405200341123a00a0052003200b36029405200341133a009005200341d6003a008005200320053602f4042003412d3a00f0042003200b3602e404200341123a00e004200e411c6a220c280200220841106a220541ffffffff00712005470d0620054104742207417f4c0d060240024020070d00410821090c010b200710332209450d12200c28020021080b41002105200341003602880120032009360280012003200741047622073602840102402008450d002008417f6a210641002105410021080340024020052007470d0020034180016a20074101109a01200328028001210920032802880121050b200920054104746a2207410f3a000020072008360204200720032f01f0073b0001200741036a200341f0076a41026a2d00003a00002003200541016a22053602880120062008460d01200841016a210820032802840121070c000b0b20034180016a2005410f109a0120032802880121092003280280012108200341f0076a200341e0046a10d707200820094104746a220541086a200341f0076a41086a2207290300370300200520032903f007370300200341f0076a202910d707200541186a2007290300370300200520032903f007370310200341f0076a201a10d707200541286a2007290300370300200541206a20032903f007370300200341f0076a201910d707200541386a2007290300370300200541306a20032903f007370300200341f0076a201810d707200541c8006a2007290300370300200541c0006a20032903f007370300200341f0076a201710d707200541d8006a2007290300370300200541d0006a20032903f007370300200341f0076a201610d707200541e8006a2007290300370300200541e0006a20032903f007370300200341f0076a201510d707200541f8006a2007290300370300200541f0006a20032903f007370300200341f0076a202c10d70720054188016a200729030037030020054180016a20032903f007370300200341f0076a202d10d70720054198016a200729030037030020054190016a20032903f007370300200341f0076a202b10d707200541a8016a2007290300370300200541a0016a20032903f007370300200341f0076a201010d707200541b8016a2007290300370300200541b0016a20032903f007370300200341f0076a202e10d707200541c8016a2007290300370300200541c0016a20032903f007370300200341f0076a202710d707200541d8016a2007290300370300200541d0016a20032903f007370300200341f0076a202610d707200541e0016a20032903f007370300200541e8016a200729030037030020032009410f6a22053602880102402005200328028401470d0020034180016a20054101109a01200328028001210820032802880121050b200820054104746a220720032900f007370001200741063a0000200741086a201b2900003700002003200541016a36028801200341f0076a200341b0016a418c01109d081a411010332207450d12200741063a0000200341d0036a200341f0076a418c01109d081a200c2802002205417f4c0d06200e41146a280200210c0240024020050d0041002108410121060c010b200510332206450d12200521080b0240024020082005490d00200821090c010b200841017422092005200920054b1b22094100480d0d024020080d00200910332206450d140c010b20082009460d0020062008200910372206450d130b2006200c2005109d0821080240024020050d00410021064101210c0c010b20051033220c450d13200521060b200c20082005109d08210c02402009450d00200810350b200341c0026a200341d0036a418c01109d081a200e41216a3100002132200341f0076a200341c0026a418c01109d081a200341d0036a200341f0076a418c01109d081a411010332208450d12202841807e712128200a428080808080804083220a2005ad842032422886844280808080800c842132200841063a000020032802880121052003280284012109200328028001210d20081035200341c0026a200341d0036a418c01109d081a200341f0076a200341c0026a418c01109d081a024020072d00004109470d0002402007280204220828020441ffffffff0371450d0020082802001035200728020421080b200810350b20071035200341d0036a200341f0076a418c01109d081a200341f0076a200341d0036a418c01109d081a200320283602ec02200320053602e802200320093602e4022003200d3602e002200341003602dc02200342043702d402200320323702cc02200320063602c8022003200c3602c402200341013602c002200341f0076a200341c0026a10f306200341b0016a200341f0076a418c01109d081a200e41286a202a360200200e41246a4101360200024020032d00e0044109470d00024020032802e404220528020441ffffffff0371450d002005280200103520032802e40421050b200510350b024020032d00f0044109470d000240200341e0046a41146a280200220528020441ffffffff0371450d002005280200103520032802f40421050b200510350b024020032d0080054109470d000240200341e0046a41246a280200220528020441ffffffff0371450d002005280200103520032802840521050b200510350b024020032d0090054109470d000240201c280200220528020441ffffffff0371450d002005280200103520032802940521050b200510350b024020032d00a0054109470d000240201d280200220528020441ffffffff0371450d002005280200103520032802a40521050b200510350b024020032d00b0054109470d000240201e280200220528020441ffffffff0371450d002005280200103520032802b40521050b200510350b024020032d00c0054109470d000240201f280200220528020441ffffffff0371450d002005280200103520032802c40521050b200510350b024020032d00d0054109470d0002402020280200220528020441ffffffff0371450d002005280200103520032802d40521050b200510350b024020032d00e0054109470d0002402021280200220528020441ffffffff0371450d002005280200103520032802e40521050b200510350b024020032d00f0054109470d0002402022280200220528020441ffffffff0371450d002005280200103520032802f40521050b200510350b024020032d0080064109470d0002402014280200220528020441ffffffff0371450d002005280200103520032802840621050b200510350b024020032d0090064109470d0002402012280200220528020441ffffffff0371450d002005280200103520032802940621050b200510350b024020032d00a0064109470d0002402001280200220528020441ffffffff0371450d002005280200103520032802a40621050b200510350b024020032d00b0064109470d0002402013280200220528020441ffffffff0371450d002005280200103520032802b40621050b200510350b024020032d00c0064109470d0002402031280200220528020441ffffffff0371450d002005280200103520032802c40621050b200510350b200a4280808080808c0184210a202a41016a212a2023210520232024470d020c040b200d450d02200d417f6a210d200720084102746a4194036a28020021070c000b0b0b41a081cc0041800141a082cc001064000b0240203041ffffffff0371450d00202f10350b200341e0046a200341b0016a418c01109d081a200341f0076a200341e0046a10f106024020034180086a2802002205450d0020032802f8072226200541306c6a21272003280264210b200328026021280340024020262d000041786a220541024b0d0002400240024020050e03000102000b202628020c2207450d0220262802042205200741146c6a212a03400240200528020c0d002028450d002005280210210d20282106200b21230340200641286a2109200641086a210820062f010622254102742107417f210e02400340024020070d002025210e0c020b2008280200210c200e41016a210e200941206a21092007417c6a2107200841046a21080240417f200c200d47200c200d4b1b41016a0e03020001020b0b02402009417c6a280200450d00200520092802003602100c030b41b082cc00413541e882cc001064000b2023450d012023417f6a21232006200e4102746a4194036a28020021060c000b0b200541146a2205202a470d000c030b0b2028450d012026280204210c20282109200b210d0340200941286a2108200941086a210720092f0106222a4102742105417f210602400340024020050d00202a21060c020b2007280200210e200641016a2106200841206a21082005417c6a2105200741046a21070240417f200e200c47200e200c4b1b41016a0e03020001020b0b02402008417c6a280200450d00202620082802003602040c040b41b082cc00413541e882cc001064000b200d450d02200d417f6a210d200920064102746a4194036a28020021090c000b0b202628020c2205450d00202628020422292005411c6c6a21240340024020292802182205450d002029280210220d20054102746a2125034002402028450d00200d280200210c20282109200b212a0340200941286a2108200941086a210720092f010622234102742105417f210602400340024020050d00202321060c020b2007280200210e200641016a2106200841206a21082005417c6a2105200741046a21070240417f200e200c47200e200c4b1b41016a0e03020001020b0b02402008417c6a280200450d00200d20082802003602000c030b41b082cc00413541e882cc001064000b202a450d01202a417f6a212a200920064102746a4194036a28020021090c000b0b200d41046a220d2025470d000b0b2029411c6a22292024470d000b0b202641306a22262027470d000b0b20032902f4072232422088a72105200341fc076a290200210a20032802f0072129200341e0006a10e1072032a7212b410021070c090b2003200536027c0240024002400240200520104f0d00200f20054102746a280200220e450d070240200328025822092003280254470d00200341d0006a20094101108601200328025821090b200328025020094102746a20053602002003200941016a360258200341e0046a200328027c2223200341386a10e00720032802e804212b20032802e404212920032802e004222c4101460d0320292802082205417f4c0d042029280200210d20292d000c212720050d01410021094101210c0c020b200341013602f404200342023702e4042003419081cc003602e004200341013602d4032003200341d0036a3602f0042003200341fc006a3602d003200341f0076a200341e0046a104120032902f407220a422088a7210520032802f0072129200aa7212b0c0a0b20051033220c450d0d200521090b0240024020092005490d00200921060c010b200941017422062005200620054b1b22064100480d08024020090d0020061033220c450d0f0c010b024020092006470d00200921060c010b200c200920061037220c450d0e0b200c200d2005109d082109200320273a008c01200320053602880120032006360284012003200936028001200320292d000d3a008d012003200e36029c012003200328027c360298012003410036029001200320032f01f0073b018e010240024020032802702205450d00200328027421270c010b20164200370100201742003701002018420037010020194200370100201a420037010020154200370100200341e0046a410041e002109f081a41940310332205450d0e4100212720054100360200200520032903f0073702042005410c6a200341f0076a41086a290300370200200541146a200341f0076a41106a2903003702002005411c6a200341f0076a41186a290300370200200541246a200341f0076a41206a2903003702002005412c6a201b290300370200200541346a200341e0046a41e002109d081a20034100360274200320053602700b0340200541146a2109200541086a210e200541066a212d20052f0106222e4102742106417f210c02400340024020060d00202e210c0c020b200e280200210d200c41016a210c200941206a21092006417c6a2106200e41046a210e0240417f200d202347200d20234b1b41016a0e03020001020b0b200929020021322009200329038001370200200941186a200329039801370200200941106a220529020021332005200329039001370200200941086a200329038801370200203342ffffffff0f83420285500d05203242808080807083500d052032a710350c050b02402027450d002027417f6a21272005200c4102746a4194036a28020021050c010b0b2003200328027841016a36027820032903980121322003290390012133200329038801213420032903800121350240202d2f01002206410b490d0020164200370100201742003701002018420037010020194200370100201a420037010020154200370100200341e0046a410041e002109f081a41940310332209450d0e20094100360200200920032903f0073702042009410c6a200341f0076a41086a221e290300370200200941146a200341f0076a41106a221f2903003702002009411c6a200341f0076a41186a2220290300370200200941246a200341f0076a41206a22362903003702002009412c6a201b290300370200200941346a200341e0046a41e002109d08210e200341e0046a41086a2227200541fc016a290200370300200341e0046a41106a222e20054184026a290200370300200341e0046a41186a221c2005418c026a290200370300200320052902f4013703e00420052802202112200941086a200541246a20052f010641796a2206410274109d08210d200e20054194026a2006410574109d08210e200541063b0106200920063b01062020201c290300370300201f202e290300370300201e2027290300370300200320032903e0043703f00702400240200c4107490d00200d200c417a6a222d4102746a200d200c41796a220c4102746a220d200641ffff0371200c6b410274109e081a200d2023360200200e202d4105746a200e200c4105746a2206200941066a222d2f0100200c6b410574109e081a200641186a2032370200200620333702102006203437020820062035370200202d2f0100210e0c010b200541086a2206200c41016a220d4102746a2006200c4102746a2206202d2f0100220e200c6b221d410274109e081a20062023360200200541346a2206200d4105746a2006200c4105746a2206201d410574109e081a200641186a20323702002006203337021020062034370208200620353702000b202d200e41016a3b0100200341d0036a41186a222120202903002232370300200341d0036a41106a2222201f2903002233370300200341d0036a41086a2214201e2903002234370300200341b0016a41186a22012032370300200341b0016a41106a22132033370300200341b0016a41086a22312034370300200320032903f00722323703d003200320323703b00102402005280200220d0d004100212f200921060c040b20052f0104212d4100212f200921300340200341c0026a41186a22372001290300370300200341c0026a41106a22382013290300370300200341c0026a41086a22392031290300370300200320032903b0013703c002202d41ffff0371210c024002400240200d2f01062205410b490d0020164200370100201742003701002018420037010020194200370100201a4200370100201542003701002014201e2903003703002022201f29030037030020212020290300370300200341d0036a41206a22052036290300370300200341d0036a41286a2209201b290300370300200320032903f0073703d003200341e0046a4100419003109f081a41c40310332206450d1220064100360200200620032903d0033702042006410c6a2014290300370200200641146a20222903003702002006411c6a2021290300370200200641246a20052903003702002006412c6a2009290300370200200641346a200341e0046a419003109d082109200d280220213a201c200d418c026a290200370300202e200d4184026a2902003703002027200d41fc016a2902003703002003200d2902f4013703e004200641086a200d41246a200d2f0106220e41796a2205410274109d08213b2009200d4194026a2005410574109d08213c20064194036a200d41b0036a200e417a6a2223410274109d08211d200d41063b0106200620053b010602402023450d0041002105201d210903402009280200220e20053b0104200e2006360200200941046a21092023200541016a2205470d000b0b2020201c2903002232370300201f202e2903002233370300201e20272903002234370300200320032903e00422353703f007201c2032370300202e203337030020272034370300200320353703e004202d41ffff037122094107490d01203b200c417a6a220e41027422236a203b200c41796a22054102746a220920062f010620056b410274109e081a20092012360200203c200e4105746a203c20054105746a220920062f010620056b410574109e081a200941186a2037290300370200200941106a2038290300370200200941086a2039290300370200200920032903c002370200200620062f010641016a22093b0106200c410274222d201d6a416c6a201d20236a2223200941ffff0371220c200e6b410274109e081a20232030360200200c200e490d022006202d6a41fc026a210903402009280200220e200541016a22053b0104200e2006360200200941046a21092005200c490d000c030b0b200d41086a2209200c41016a2206410274220e6a2009200c41027422236a22092005200c6b2227410274109e081a20092012360200200d41346a220920064105746a2009200c4105746a22092027410574109e081a200941186a2037290300370200200941106a2038290300370200200941086a2039290300370200200920032903c002370200200d200541016a22053b01062023200d4194036a22096a41086a2009200e6a2209200541ffff0371220e20066b410274109e081a20092030360200200c200e4f0d07200d2006417f6a22054102746a4198036a2109034020092802002206200541016a22053b01042006200d360200200941046a21092005200e490d000c080b0b200d41086a2205200c41016a2223410274220e6a2005200c410274222d6a2205200d2f0106221d200c6b223b410274109e081a20052012360200200d41346a220520234105746a2005200c4105746a2205203b410574109e081a200541186a2037290300370200200541106a2038290300370200200541086a2039290300370200200520032903c002370200200d201d41016a22053b0106202d200d4194036a221d6a41086a201d200e6a221d200541ffff0371220e20236b410274109e081a201d20303602002009200e4f0d00200d202d6a4198036a2105034020052802002209200c41016a220c3b01042009200d360200200541046a2105200e200c470d000b0b202f41016a212f2001201c2903003703002013202e29030037030020312027290300370300200320032903e0043703b0010240200d28020022050d00203a21120c050b200d2f0104212d2005210d203a2112200621300c000b0b200541086a2209200c41016a220e4102746a2009200c4102746a22092006200c6b220d410274109e081a20092023360200200541346a2209200e4105746a2009200c4105746a2209200d410574109e081a200941186a20323702002009203337021020092034370208200920353702002005200641016a3b01060c030b20032802ec0421050c070b1044000b20164200370100201742003701002018420037010020194200370100201a4200370100201542003701002014201e2903003703002022201f29030037030020212020290300370300200341d0036a41206a22092036290300370300200341d0036a41286a220e201b290300370300200320032903f0073703d003200341e0046a4100419003109f081a41c40310332205450d0a20054100360200200520032903d0033702042005410c6a2014290300370200200541146a20222903003702002005411c6a2021290300370200200541246a20092903003702002005412c6a200e290300370200200541346a200341e0046a419003109d08210e2005200328027022093602940320032003280274220c41016a360274200941003b01042003200536027020092005360200201c2001290300370300202e201329030037030020272031290300370300200320032903b0013703e004200c202f470d0220052f01062209410a4b0d03200e20094105746a220e20032903e004370200200e41086a2027290300370200200e41106a202e290300370200200e41186a201c290300370200200520094102746a41086a20123602002005200941016a22094102746a4194036a2006360200200520093b0106200620093b0104200620053602000b202c450d00202b450d00202910350c000b0b41ff83cc00413041c086cc00103f000b41af84cc00412741c086cc00103f000b103e000b200341f0006a10e1070240200328025441ffffffff0371450d00200328025010350b20032802402208200328024810f406410121070240200341c4006a2802002203450d00200341306c450d00200810350b0b20002029360204200041086a2005ad422086202bad843702000240024020070d0020004100360200200041106a200a370200201141ffffffff03710d010c030b20004101360200201141ffffffff0371450d020b200f10350c010b2001280208200128021010f4062001410c6a2802002203450d00200341306c450d0020012802081035200424000f0b200424000f0b1045000b103c000bf6c70103017f037e1b7f230041e0006b220324000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000e10010002161514131211100e0f0d0c0403010b200141046a29020021042001410c6a2902002105200141146a2902002106200341003a00002002200341011078200341106a20063703002003200537030820032004370300200341d0006a2003200210c10720032d0050411f460d1c20002003290350370200200041086a200341d0006a41086a2903003702000c1d0b200141086a28020021072001410c6a2802002108200141046a2802002109200320012d00013a0000200220034101107820022009200810782007450d1b200910350c1b0b200141086a280200210a200141046a280200210b2001410c6a280200210c200341013a00002002200341011078200b200c4104746a210d41002107410021094101210e200c210803400240024020072009460d00200921010c010b200941016a22012009490d162009410174220f2001200f20014b1b22014100480d160240024020090d00024020010d004101210e0c020b20011033220e0d010c200b20092001460d00200e200920011037220e450d1f0b200121090b200e20076a200841807f72200841ff00712008410776220f1b3a0000200741016a2107200f2108200f0d000b0240200c0d00200b21100c190b200b21090340200941106a211020092d000d22114105460d1920092d000c2108200928020821122009280204211320092802002114024020012007470d00200741016a22012007490d16200741017422092001200920014b1b22014100480d16024020070d00024020010d004101210e0c020b20011033220e450d1f0c010b20072001460d00200e200720011037220e450d1e0b200e20076a20083a0000200741016a2109200741017441046a21152012210703402015210c0240024020092001460d002001210f0c010b200141016a22082001490d172001410174220f2008200f20084b1b220f4100480d170240024020010d000240200f0d004101210e0c020b200f1033220e450d210c010b2001200f460d00200e2001200f1037220e450d200b200f21010b200e20096a200741807f72200741ff0071200741077622081b3a0000200c41026a2115200941016a21092008210720080d000b0240024020120d00200921070c010b410021010340200920016a210741fc0021080240024002400240201420016a2d00000e050200010305020b41fe0021080c020b41fd0021080c010b41ff0021080b200320083a000002402007200f470d00200741016a220f2007490d18200c200f200c200f4b1b220f4100480d18024020070d000240200f0d004101210e0c020b200f1033220e450d210c010b2007200f460d00200e2007200f1037220e450d200b200e20096a20016a20083a0000200c41026a210c2012200141016a2201470d000b200920016a21070b02402013450d00201410350b41002109024020114104460d000240200f2007470d00200741016a22012007490d17200741017422092001200920014b1b220f4100480d17024020070d000240200f0d004101210e0c020b200f1033220e450d200c010b2007200f460d00200e2007200f1037220e450d1f0b200e20076a41013a0000200741016a2107201141077141ff007321090b02400240200f2007460d00200f21010c010b200741016a22012007490d16200741017422082001200820014b1b22014100480d16024020070d00024020010d004101210e0c020b20011033220e450d1f0c010b20072001460d00200e200720011037220e450d1e0b200e20076a20093a0000200741016a2107201021092010200d470d000c1a0b0b200141286a2802002112200141246a280200210a200141206a280200210d2001411c6a2802002114200141186a2802002113200141146a2802002110200141086a280200210b200141046a28020021112001410c6a2902002104200341003a00002002200341011078200341d0006a410c6a410036020020034201370254200320023602502004a7221541017441026a21092004422088a7210f41002107410021012015210803400240024020012007460d002003280254210c0c010b200741016a220c2007490d032007410174220e200c200e200c4b1b220e4100480d030240024020070d000240200e0d004101210c0c020b200e1033220c450d0b0c010b2003280254210c2007200e460d00200c2007200e1037220c450d0a0b2003200e3602582003200c3602540b200c20016a200841807f72200841ff00712008410776220c1b3a00002003200141016a220136025c200941026a210920032802582107200c2108200c0d000b02400240200720016b2015490d002003280254210c200721080c010b200120156a22082001490d022007410174220c2008200c20084b1b22084100480d020240024020070d00024020080d004101210c0c020b20081033220c450d0a0c010b2003280254210c20072008460d00200c200720081037220c450d090b200320083602582003200c3602540b200c20016a20112015109d081a2003201520016a36025c0240200b450d00201110350b034002400240201520016a220c2008460d00200328025421070c010b200841016a22072008490d032008410174220e2007200e20074b1b220e4100480d030240024020080d000240200e0d00410121070c020b200e10332207450d0b0c010b200328025421072008200e460d0020072008200e10372207450d0a0b2003200e360258200320073602540b200720156a20016a200f41807f72200f41ff0071200f41077622071b3a00002003200c41016a36025c02402007450d00200941026a2109200141016a2101200328025821082007210f0c010b0b0240024020100d00200c41016a2101410121020c010b2015417f732102201541016a210c20142107034002400240200c20016a22082003280258460d002003280254210f0c010b200841016a220f2008490d042009200f2009200f4b1b220e4100480d040240024020022001470d000240200e0d004101210f0c020b200e1033220f450d0c0c010b2003280254210f2008200e460d00200f2008200e1037220f450d0b0b2003200e3602582003200f3602540b200f200c6a20016a200741807f72200741ff00712007410776220f1b3a00002003200841016a36025c200941026a2109200141016a2101200f2107200f0d000b024002402001417f732003280258220720156b6a2014490d00200328025421090c010b201520016a41016a220820146a22092008490d03200741017422082009200820094b1b22084100480d030240024020070d00024020080d00410121090c020b200810332209450d0b0c010b2003280254210920072008460d0020092007200810372209450d0a0b20032008360258200320093602540b201520096a20016a41016a20102014109d081a2003201420156a20016a41016a220136025c410021022013450d00201010350b20014101742107200d20124104746a210e2012210903400240024020012003280258460d00200328025421080c010b200141016a22082001490d0320072008200720084b1b220f4100480d030240024020010d000240200f0d00410121080c020b200f10332208450d0b0c010b200328025421082001200f460d0020082001200f10372208450d0a0b2003200f360258200320083602540b200820016a200941807f72200941ff0071200941077622081b3a00002003200141016a220136025c200741026a21072008210920080d000b024002402012450d00200d210c0340200c410c6a2802002115200c41086a2802002101200c28020421090240024002400240024002400240024002400240200c2802000e0900010203040506070b000b200341003a0000024002402003280258200328025c2207460d004100210f200328025421080c010b200741016a22082007490d0e2007410174220f2008200f20084b1b220f4100480d0e0240024020070d000240200f0d00410121080c020b200f10332208450d160c010b200328025421082007200f460d0020082007200f10372208450d150b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0f2007410174220f2009200f20094b1b220f4100480d0f0240024020070d000240200f0d00410121090c020b200f10332209450d170c010b200328025421092007200f460d0020092007200f10372209450d160b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0f200741017422082001200820014b1b22084100480d0f0240024020070d00024020080d00410121010c020b200810332201450d170c010b2003280254210120072008460d0020012007200810372201450d160b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c2009210120090d000c090b0b200341013a0000024002402003280258200328025c2207460d004101210f200328025421080c010b200741016a22082007490d0d2007410174220f2008200f20084b1b220f4100480d0d0240024020070d000240200f0d00410121080c020b200f10332208450d150c010b200328025421082007200f460d0020082007200f10372208450d140b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0e2007410174220f2009200f20094b1b220f4100480d0e0240024020070d000240200f0d00410121090c020b200f10332209450d160c010b200328025421092007200f460d0020092007200f10372209450d150b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0e200741017422082001200820014b1b22084100480d0e0240024020070d00024020080d00410121010c020b200810332201450d160c010b2003280254210120072008460d0020012007200810372201450d150b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c200921012009450d080c000b0b200341023a0000024002402003280258200328025c2207460d004102210f200328025421080c010b200741016a22082007490d0c2007410174220f2008200f20084b1b220f4100480d0c0240024020070d000240200f0d00410121080c020b200f10332208450d140c010b200328025421082007200f460d0020082007200f10372208450d130b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0d2007410174220f2009200f20094b1b220f4100480d0d0240024020070d000240200f0d00410121090c020b200f10332209450d150c010b200328025421092007200f460d0020092007200f10372209450d140b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0d200741017422082001200820014b1b22084100480d0d0240024020070d00024020080d00410121010c020b200810332201450d150c010b2003280254210120072008460d0020012007200810372201450d140b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c200921012009450d070c000b0b200341033a0000024002402003280258200328025c2207460d004103210f200328025421080c010b200741016a22082007490d0b2007410174220f2008200f20084b1b220f4100480d0b0240024020070d000240200f0d00410121080c020b200f10332208450d130c010b200328025421082007200f460d0020082007200f10372208450d120b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0c2007410174220f2009200f20094b1b220f4100480d0c0240024020070d000240200f0d00410121090c020b200f10332209450d140c010b200328025421092007200f460d0020092007200f10372209450d130b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0c200741017422082001200820014b1b22084100480d0c0240024020070d00024020080d00410121010c020b200810332201450d140c010b2003280254210120072008460d0020012007200810372201450d130b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c2009210120090d000b20032015200341d0006a10a50720032d00002201411f460d0520032f000120032d00034110747221090c040b200341043a0000024002402003280258200328025c2207460d004104210f200328025421080c010b200741016a22082007490d0a2007410174220f2008200f20084b1b220f4100480d0a0240024020070d000240200f0d00410121080c020b200f10332208450d120c010b200328025421082007200f460d0020082007200f10372208450d110b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0b2007410174220f2009200f20094b1b220f4100480d0b0240024020070d000240200f0d00410121090c020b200f10332209450d130c010b200328025421092007200f460d0020092007200f10372209450d120b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0b200741017422082001200820014b1b22084100480d0b0240024020070d00024020080d00410121010c020b200810332201450d130c010b2003280254210120072008460d0020012007200810372201450d120b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c2009210120090d000b20032015200341d0006a10a50720032d00002201411f460d0420032f000120032d00034110747221090c030b200341053a0000024002402003280258200328025c2207460d004105210f200328025421080c010b200741016a22082007490d092007410174220f2008200f20084b1b220f4100480d090240024020070d000240200f0d00410121080c020b200f10332208450d110c010b200328025421082007200f460d0020082007200f10372208450d100b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d0a2007410174220f2009200f20094b1b220f4100480d0a0240024020070d000240200f0d00410121090c020b200f10332209450d120c010b200328025421092007200f460d0020092007200f10372209450d110b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d0a200741017422082001200820014b1b22084100480d0a0240024020070d00024020080d00410121010c020b200810332201450d120c010b2003280254210120072008460d0020012007200810372201450d110b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c2009210120090d000b20032015200341d0006a10a50720032d00002201411f460d0320032f000120032d00034110747221090c020b200341063a0000024002402003280258200328025c2207460d004106210f200328025421080c010b200741016a22082007490d082007410174220f2008200f20084b1b220f4100480d080240024020070d000240200f0d00410121080c020b200f10332208450d100c010b200328025421082007200f460d0020082007200f10372208450d0f0b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d092007410174220f2009200f20094b1b220f4100480d090240024020070d000240200f0d00410121090c020b200f10332209450d110c010b200328025421092007200f460d0020092007200f10372209450d100b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d09200741017422082001200820014b1b22084100480d090240024020070d00024020080d00410121010c020b200810332201450d110c010b2003280254210120072008460d0020012007200810372201450d100b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c200921012009450d030c000b0b200341073a0000024002402003280258200328025c2207460d004107210f200328025421080c010b200741016a22082007490d072007410174220f2008200f20084b1b220f4100480d070240024020070d000240200f0d00410121080c020b200f10332208450d0f0c010b200328025421082007200f460d0020082007200f10372208450d0e0b2003200f3602582003200836025420032d0000210f200328025c21070b200820076a200f3a00002003200741016a220736025c200341003a000003402003200941807f72200941ff0071200941077622081b220f3a00000240024020032802582007460d00200328025421090c010b200741016a22092007490d082007410174220f2009200f20094b1b220f4100480d080240024020070d000240200f0d00410121090c020b200f10332209450d100c010b200328025421092007200f460d0020092007200f10372209450d0f0b2003200f3602582003200936025420032d0000210f200328025c21070b200920076a200f3a00002003200741016a220736025c2008210920080d000b200341003a000003402003200141807f72200141ff0071200141077622091b22083a00000240024020032802582007460d00200328025421010c010b200741016a22012007490d08200741017422082001200820014b1b22084100480d080240024020070d00024020080d00410121010c020b200810332201450d100c010b2003280254210120072008460d0020012007200810372201450d0f0b200320083602582003200136025420032d00002108200328025c21070b200120076a20083a00002003200741016a220736025c200921012009450d020c000b0b200328020c210f20032802082108200328020421070240200a41ffffffff0071450d00200d10350b2003280258450d03200328025410350c030b200c41106a220c200e470d000b0b0240200a41ffffffff0071450d00200d10350b200328025c21082003280258210c2003280254210f20032802502107200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f200810780240200c450d00200f10350b2010450d1a2002450d1a2013450d1a201010350c1a0b02402010450d002002450d002013450d00201010350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a200f360000200041086a2008360000200041046a20073600000c1a0b2001412c6a2802002116200141286a2802002117200141246a280200210d200141206a28020021182001411c6a2802002119200141186a280200211a200141146a280200210b2001410c6a2902002104200141086a280200211b200141046a280200211341002112200341003a000041012108200220034101107802400240024041041033220a450d00200a41eec2b5ab06360000024020130d00410021114100211c0c030b200341003a00004101210c41002101410021092004a72215210703402003200741807f72200741ff0071200741077622081b22073a00000240024020012009460d002001210f0c010b200141016a22092001490d172001410174220f2009200f20094b1b220f4100480d170240024020010d00410021090240200f0d004101210c0c020b200f1033220c450d210c010b02402001200f470d00200121090c010b20012109200c2001200f1037220c450d200b200f21010b200c20096a20073a0000200941016a21092008210720080d000b02400240200f20096b2015490d00200f21100c010b200920156a22012009490d04200f41017422072001200720014b1b22104100480d040240200f0d00024020100d004101210c0c020b20101033220c450d1f0c010b200f2010460d00200c200f20101037220c450d0a0b200c20096a20132015109d081a0240201b450d00201310350b200341003a0000410110332208450d09200841003a0000200341003a0000410121014101210f200920156a220e210903402003200941807f72200941ff0071200941077622071b22093a00000240200f2001470d00200141016a220f2001490d0520014101742215200f2015200f4b1b220f4100480d05024020010d00410021010240200f0d00410121080c020b200f103322080d010c0c0b2001200f460d0020082001200f10372208450d0b0b200820016a20093a0000200141016a21012007210920070d000b0240200f20016b200e490d00200f21110c020b2001200e6a22092001490d03200f41017422072009200720094b1b22114100480d030240200f0d00024020110d00410121080c030b201110332208450d0a0c020b200f2011460d012008200f201110372208450d090c010b1045000b200820016a200c200e109d081a2001200e6a21124101211c2010450d00200c10350b02400240200b0d004101211d0c010b4100211d20034100360240200342013703382003410c6a2019360200200341086a201a3602002003200b360204200320044220883e0200200341d0006a2003200341386a10c20720032d0050411f470d04200341013a00000240024020112012460d002011210f0c010b201241016a22012012490d02201241017422092001200920014b1b220f4100480d02024020120d00410021120240200f0d00410121080c020b200f10332208450d090c010b2012200f460d0020082012200f10372208450d080b200820126a41013a000020032802402115200341003a0000201241016a21012015210903402003200941807f72200941ff0071200941077622071b22093a00000240200f2001470d00200141016a220f2001490d032001410174220c200f200c200f4b1b220f4100480d03024020010d00410021010240200f0d00410121080c020b200f10332208450d0a0c010b2001200f460d0020082001200f10372208450d090b200820016a20093a0000200141016a21012007210920070d000b2003280238210902400240200f20016b2015490d00200f21110c010b200120156a22072001490d02200f410174220c2007200c20074b1b22114100480d020240200f0d00024020110d00410121080c020b201110332208450d090c010b200f2011460d002008200f201110372208450d080b200820016a20092015109d081a0240200328023c450d00200910350b200120156a21124100211d0b0240200d0d004100210f0c030b2003410036024020034201370338200341003a00004101210c41002109410021012018210703402003200741807f72200741ff00712007410776220f1b22153a0000024020092001470d00200941016a22012009490d02200941017422072001200720014b1b22074100480d020240024020090d0041002101024020070d004101210c0c020b20071033220c450d0a0c010b024020092007470d00200921010c010b20092101200c200920071037220c450d090b2003200736023c2003200c360238200721090b200c20016a20153a00002003200141016a2201360240200f2107200f0d000b200d20164104746a211002400240024020160d00200d210c0c010b200d210c2018450d00201041706a211e41002101200d211f02400340201f210f02400340200f41046a28020022140d01200141016a21012010200f41106a220f470d000c050b0b200f41086a2902002104200f2802002120200341003a0000200f41106a211f200141016a21212018417f6a2118200328023c21072003280240210903402003200141807f72200141ff00712001410776220c1b220e3a00000240024020072009460d00200328023821010c010b200741016a22012007490d06200741017422092001200920014b1b22154100480d060240024020070d0041002109024020150d00410121010c020b201510332201450d0e0c010b20032802382101024020072015470d00200721090c010b2007210920012007201510372201450d0d0b2003201536023c20032001360238201521070b200120096a200e3a00002003200941016a2209360240200c2101200c0d000b200320043703082003201436020420032020360200200341d0006a2003200341386a10c207024020032d0050220e411f470d00201e200f460d022021210120180d010c020b0b20032d0053211520032f005121202003280254211f20032802582118200328025c21140240201041706a200f460d00200f41106a210c0340200c220f41106a210c0240200f2802042201450d000240200f410c6a2802002209450d002009410c6c21090340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b200f41086a2802002201450d002001410c6c450d00200f28020410350b200c2010470d000b0b201541107421010240201741ffffffff0071450d00200d10350b202020017221104101210f200328023c450d07200328023810350c070b200f41106a210c0b2010200c460d000340200c220f41106a210c0240200f2802042201450d000240200f410c6a2802002209450d002009410c6c21090340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b200f41086a2802002201450d002001410c6c450d00200f28020410350b200c2010470d000b0b0240201741ffffffff0071450d00200d10350b200341023a00000240024020112012460d002011210f0c010b201241016a22012012490d01201241017422092001200920014b1b220f4100480d01024020120d00410021120240200f0d00410121080c020b200f10332208450d080c010b2012200f460d0020082012200f10372208450d070b200820126a41023a000020032802402115200341003a0000201241016a21012015210903402003200941807f72200941ff0071200941077622071b22093a00000240200f2001470d00200141016a220f2001490d022001410174220c200f200c200f4b1b220f4100480d02024020010d00410021010240200f0d00410121080c020b200f10332208450d090c010b2001200f460d0020082001200f10372208450d080b200820016a20093a0000200141016a21012007210920070d000b200328023821090240200f20016b2015490d00200f21110c020b200120156a22072001490d00200f410174220c2007200c20074b1b22114100480d000240200f0d00024020110d00410121080c030b201110332208450d070c020b200f2011460d012008200f201110372208450d060c010b103e000b200820016a20092015109d081a0240200328023c450d00200910350b200120156a21124101210f0b0240201345201c720d00201b450d00201310350b0240200b450d00201d4101730d0002402019450d002019410c6c2109200b21010340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b201a450d00201a410c6c450d00200b10350b200d45200f720d0202402016450d00200d20164104746a2115200d210c0340200c220f41106a210c0240200f2802042201450d000240200f410c6a2802002209450d002009410c6c21090340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b200f41086a2802002201450d002001410c6c450d00200f28020410350b200c2015470d000b0b201741ffffffff0071450d02200d10350c020b2003280250220e4108762110200341d0006a410c6a2802002114200341d0006a41086a28020021182003280254211f0240200328023c450d00200328023810350b4100210f0b0240201c201345720d00201b450d00201310350b0240200b450d00201d4101730d0002402019450d002019410c6c2109200b21010340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b201a450d00201a410c6c450d00200b10350b0240200d45200f720d0002402016450d00200d20164104746a2115200d210c0340200c220f41106a210c0240200f2802042201450d000240200f410c6a2802002209450d002009410c6c21090340024020012802002207450d00200141046a280200450d00200710350b2001410c6a2101200941746a22090d000b0b200f41086a2802002201450d002001410c6c450d00200f28020410350b200c2015470d000b0b201741ffffffff0071450d00200d10350b200e41ff01712201411f460d002010410874200172210102402011450d00200810350b200020013602002000410c6a2014360200200041086a2018360200200041046a201f360200200a10350c140b200341146a2012360200200341106a20113602002003200836020c20034284808080c0003702042003200a360200200341d0006a2003200210c10720032d0050411f460d1220002003290350370200200041086a200341d0006a41086a2903003702000c130b103c000b200141086a280200210e200141046a28020021152001410c6a280200210c2003410b3a00002002200341011078200341386a410c6a41003602002003420137023c200320023602382015200c411c6c6a210d4100210141002109200c210703400240024020092001460d00200328023c21080c010b200141016a22082001490d0c2001410174220f2008200f20084b1b220f4100480d0c0240024020010d000240200f0d00410121080c020b200f10332208450d160c010b200328023c21082001200f460d0020082001200f10372208450d150b2003200f3602402003200836023c0b200820096a200741807f72200741ff0071200741077622071b3a00002003200941016a220936024402402007450d0020032802402101200721070c010b0b2003200d36025c200320153602582003200e360254200320153602500240200c450d000340200320152201411c6a22153602582001280210220e450d012001410c6a2802002102200141086a28020021102001280204210c200141146a290200210420012802002109200341003a00002003280244210103402003200941807f72200941ff0071200941077622071b22083a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0e200141017422082009200820094b1b22084100480d0e0240024020010d00024020080d00410121090c020b200810332209450d180c010b200328023c210920012008460d0020092001200810372209450d170b200320083602402003200936023c20032d00002108200328024421010b200920016a20083a00002003200141016a22013602442007210920070d000b024002400240200c0d00410121140c010b200320023602302003201036022c2003200c3602282003200341286a200341386a10a20720032d00002201411f470d0141002114200328024421010b200341003a00002004a721122004422088a7220f210903402003200941807f72200941ff0071200941077622071b22083a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0f200141017422082009200820094b1b22084100480d0f0240024020010d00024020080d00410121090c020b200810332209450d190c010b200328023c210920012008460d0020092001200810372209450d180b200320083602402003200936023c20032d00002108200328024421010b200920016a20083a00002003200141016a22013602442007210920070d000b024002402003280240220720016b200f490d00200328023c21090c010b2001200f6a22092001490d0e200741017422012009200120094b1b22014100480d0e0240024020070d00024020010d00410121090c020b200110332209450d180c010b200328023c210920072001460d0020092007200110372209450d170b200320013602402003200936023c200328024421010b200920016a200e200f109d081a20032001200f6a36024402402012450d00200e10350b0240200c450d002014450d0002402002450d0020024104742109200c21010340024020012d00004109470d000240200141046a2208280200220728020441ffffffff0371450d0020072802001035200828020021070b200710350b200141106a2101200941706a22090d000b0b201041ffffffff0071450d00200c10350b2015200d470d010c020b0b20032d0003411074210920032f00012107200328020c21082003280208210f2003280204210c02402004a7450d00200e10350b20072009722109200341d0006a10c30702402003280240450d00200328023c10350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a2008360000200041086a200f360000200041046a200c3600000c120b200341d0006a10c30720032802382107200328023c210f2003280240210c20032802442108200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d10200f10350c100b200141086a280200210e200141046a280200210f2001410c6a28020021152003410a3a00002002200341011078200341186a410c6a41003602002003420137021c20032002360218200f201541186c6a210b41002101410021092015210703400240024020092001460d00200328021c21080c010b200141016a22082001490d0b2001410174220c2008200c20084b1b220c4100480d0b0240024020010d000240200c0d00410121080c020b200c10332208450d150c010b200328021c21082001200c460d0020082001200c10372208450d140b2003200c3602202003200836021c0b200820096a200741807f72200741ff0071200741077622071b3a00002003200941016a220936022402402007450d0020032802202101200721070c010b0b2003200b3602342003200f3602302003200e36022c2003200f36022802402015450d0020034101722102200341026a210e03402003200f41186a2214360230200f2802002210450d01200f41146a280200210d200f41106a2802002111200f28020c2112200f2802082107200f280204211341002109200341003602442003420137023c201020074103746a21152003200341186a3602384100210103400240024020092001460d00200328023c21080c010b200941016a22012009490d0d200941017422082001200820014b1b22014100480d0d0240024020090d00024020010d00410121080c020b200110332208450d170c010b200328023c210820092001460d0020082009200110372208450d160b200320013602402003200836023c200328024421010b200820016a200741807f72200741ff0071200741077622071b3a00002003200141016a220136024402402007450d0020032802402109200721070c010b0b024020152010460d002010210f0340200f2902002204422088a7220941ff01714104460d01200f41086a210f2009411874411875210c200341003a00002004a7210903402003200941807f72200941ff0071200941077622071b22083a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0f200141017422082009200820094b1b22084100480d0f0240024020010d00024020080d00410121090c020b200810332209450d190c010b200328023c210920012008460d0020092001200810372209450d180b200320083602402003200936023c20032d00002108200328024421010b200920016a20083a00002003200141016a22013602442007210920070d000b2003200c417f732209413f7141c000722009200c417f4a1b22073a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0e200141017422072009200720094b1b22074100480d0e0240024020010d00024020070d00410121090c020b200710332209450d180c010b200328023c210920012007460d0020092001200710372209450d170b200320073602402003200936023c20032d00002107200328024421010b200920016a20073a00002003200141016a2201360244200f2015470d000b0b0240201341ffffffff0171450d00201010350b2012200d41047422016a21070240024002400240200d0d00201221010c010b200141706a210820122101034020012d00002109200e200141036a2d00003a00002003200141016a2f00003b01000240200941ac01470d00200141106a21010c020b200341cc006a41026a200e2d0000220f3a0000200320032f0100220c3b014c200141046a2802002115200141086a29030021042002200c3b0000200241026a200f3a0000200320093a00002003200437030820032015360204200341d0006a2003200341386a10ac07024020032d0050220c411f47220f0d00200841706a2108200141106a22012007470d010c030b0b20032d0053211020032f0051210d200328025421132003280258210a200328025c211602402008450d004100210903400240200120096a220741106a2d00004109470d000240200741146a2215280200220728020441ffffffff0371450d0020072802001035201528020021070b200710350b2008200941106a2209470d000b0b0240201141ffffffff0071450d00201210350b02402003280240450d00200328023c10350b200f450d02200d2010411074722101200341286a10c40702402003280220450d00200328021c10350b200020013b00012000200c3a0000200041036a20014110763a00002000410c6a2016360000200041086a200a360000200041046a20133600000c150b20072001460d000340200141106a2109024020012d00004109470d000240200141046a2208280200220128020441ffffffff0371450d0020012802001035200828020021010b200110350b2009210120072009470d000b0b0240201141ffffffff0071450d00201210350b200328024421102003280240210d200328023c21122003280238210f200341003a0000200f410c6a220c28020021012010210903402003200941807f72200941ff0071200941077622071b22083a000002400240200f41086a22152802002001460d00200f28020421090c010b200141016a22092001490d0e200141017422082009200820094b1b22084100480d0e0240024020010d00024020080d00410121090c020b200810332209450d180c010b200f280204210920012008460d0020092001200810372209450d170b200f200936020420152008360200200c280200210120032d000021080b200920016a20083a0000200c200141016a22013602002007210920070d000b024002402015280200220720016b2010490d00200f28020421090c010b200120106a22092001490d0d200741017422012009200120094b1b22014100480d0d0240024020070d00024020010d00410121090c020b200110332209450d170c010b200f280204210920072001460d0020092007200110372209450d160b200f200936020420152001360200200c28020021010b200920016a20122010109d081a200c200120106a360200200d450d00201210350b2014210f2014200b470d000b0b200341286a10c40720032802182107200328021c210f2003280220210c20032802242108200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d0f200f10350c0f0b200141086a2802002115200141046a28020021102001410c6a280200210c200341093a00002002200341011078200341386a410c6a41003602002003420137023c200320023602382010200c411c6c6a210d4100210141002109200c210703400240024020092001460d00200328023c21080c010b200141016a22082001490d0a2001410174220f2008200f20084b1b220f4100480d0a0240024020010d000240200f0d00410121080c020b200f10332208450d140c010b200328023c21082001200f460d0020082001200f10372208450d130b2003200f3602402003200836023c0b200820096a200741807f72200741ff0071200741077622071b3a00002003200941016a220936024402402007450d0020032802402101200721070c010b0b2003200d36025c2003201036025820032015360254200320103602500240200c450d000340200320102201411c6a221036025820012802102215450d012001410c6a2802002102200141086a28020021122001280204210e200141146a2902002104200128020021092003280244210103400240024020032802402001460d00200328023c21070c010b200141016a22072001490d0c200141017422082007200820074b1b22084100480d0c0240024020010d00024020080d00410121070c020b200810332207450d160c010b200328023c210720012008460d0020072001200810372207450d150b200320083602402003200736023c200328024421010b200720016a200941807f72200941ff0071200941077622071b3a00002003200141016a22013602442007210920070d000b024002400240200e0d00410121140c010b200320023602302003201236022c2003200e3602282003200341286a200341386a10a20720032d00002201411f470d0141002114200328024421010b200341003a000020152004422088a722094102746a210c03402003200941807f72200941ff0071200941077622071b22083a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0d200141017422082009200820094b1b22084100480d0d0240024020010d00024020080d00410121090c020b200810332209450d170c010b200328023c210920012008460d0020092001200810372209450d160b200320083602402003200936023c20032d00002108200328024421010b200920016a20083a00002003200141016a22013602442007210920070d000b0240200c2015460d002015210f0340200f2802002109200341003a000003402003200941807f72200941ff0071200941077622071b22083a00000240024020032802402001460d00200328023c21090c010b200141016a22092001490d0f200141017422082009200820094b1b22084100480d0f0240024020010d00024020080d00410121090c020b200810332209450d190c010b200328023c210920012008460d0020092001200810372209450d180b200320083602402003200936023c20032d00002108200328024421010b200920016a20083a00002003200141016a22013602442007210920070d000b200f41046a220f200c470d000b0b0240200442ffffffff0383500d00201510350b0240200e450d002014450d0002402002450d0020024104742109200e21010340024020012d00004109470d000240200141046a2208280200220728020441ffffffff0371450d0020072802001035200828020021070b200710350b200141106a2101200941706a22090d000b0b201241ffffffff0071450d00200e10350b2010200d470d010c020b0b20032d0003411074210920032f00012107200328020c21082003280208210f2003280204210c0240200442ffffffff0383500d00201510350b20072009722109200341d0006a10c50702402003280240450d00200328023c10350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a2008360000200041086a200f360000200041046a200c3600000c100b200341d0006a10c50720032802382107200328023c210f2003280240210c20032802442108200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d0e200f10350c0e0b200141046a28020021072003410c3a00002002200341011078200341003a000041002109410021014101210c03402003200741807f72200741ff0071200741077622081b22073a00000240024020092001460d002001210f0c010b200141016a220f2001490d0920014101742215200f2015200f4b1b220f4100480d090240024020010d000240200f0d004101210c0c020b200f1033220c450d130c010b2001200f460d00200c2001200f1037220c450d120b200f21010b200c20096a20073a0000200941016a21092008210720080d000b200341003a00002009210103402003200141800172200141ff0071200141077622071b3a000020022003410110782007210120070d000b2002200c20091078200f450d0d200c10350c0d0b200141046a2802002107200341083a00002002200341011078200341003a000041002109410021014101210c03402003200741807f72200741ff0071200741077622081b22073a00000240024020092001460d002001210f0c010b200141016a220f2001490d0820014101742215200f2015200f4b1b220f4100480d080240024020010d000240200f0d004101210c0c020b200f1033220c450d120c010b2001200f460d00200c2001200f1037220c450d110b200f21010b200c20096a20073a0000200941016a21092008210720080d000b200341003a00002009210103402003200141800172200141ff0071200141077622071b3a000020022003410110782007210120070d000b2002200c20091078200f450d0c200c10350c0c0b200141086a280200210b200141046a28020021132001410c6a280200210e200341073a00002002200341011078200341003a00002013200e41146c6a211441002101410021074101210f200e210803402003200841807f72200841ff00712008410776220c1b22083a00000240024020012007460d00200721090c010b200741016a22092007490d07200741017422152009201520094b1b22094100480d070240024020070d00024020090d004101210f0c020b20091033220f450d110c010b20072009460d00200f200720091037220f450d100b200921070b200f20016a20083a0000200141016a2101200c2108200c0d000b024002400240200e0d002013210e0c010b201321070340200741146a210e200728020c220d4104460d0120072802042111200741106a28020021082007280200211220072802082210210703400240024020012009460d00200921150c010b200941016a220c2009490d0a20094101742215200c2015200c4b1b22154100480d0a0240024020090d00024020150d004101210f0c020b20151033220f450d140c010b20092015460d00200f200920151037220f450d130b201521090b200f20016a200741807f72200741ff00712007410776220c1b3a0000200141016a2101200c2107200c0d000b02400240201520016b2010490d00201521090c010b200120106a22092001490d09201541017422072009200720094b1b22094100480d09024020150d00024020090d004101210f0c020b20091033220f450d120c010b20152009460d00200f201520091037220f450d110b200f20016a20122010109d081a201020096b20016a210702402011450d00201210350b024002402007450d00200921070c010b200941016a22072009490d092009410174220c2007200c20074b1b22074100480d09024020090d00024020070d004101210f0c020b20071033220f450d120c010b20092007460d00200f200920071037220f450d110b200f20106a20016a200d3a0000201020016a41016a210103400240024020012007460d00200721090c010b200741016a22092007490d0a2007410174220c2009200c20094b1b22094100480d0a0240024020070d00024020090d004101210f0c020b20091033220f450d140c010b20072009460d00200f200720091037220f450d130b200921070b200f20016a200841807f72200841ff00712008410776220c1b3a0000200141016a2101200c2108200c0d000b200e2107200e2014470d000c020b0b2014200e460d000340200e41146a21070240200e41046a280200450d00200e28020010350b2007210e20142007470d000b0b0240200b450d00200b41146c450d00201310350b200341003a00002001210703402003200741800172200741ff0071200741077622081b3a000020022003410110782008210720080d000b2002200f200110782009450d0b200f10350c0b0b200141086a280200210e200141046a280200210c2001410c6a2802002115200341063a00002002200341011078200341386a410c6a41003602002003420137023c20032002360238200c20154104746a210241002101410021092015210703400240024020092001460d00200328023c21080c010b200141016a22082001490d062001410174220f2008200f20084b1b220f4100480d060240024020010d000240200f0d00410121080c020b200f10332208450d100c010b200328023c21082001200f460d0020082001200f10372208450d0f0b2003200f3602402003200836023c0b200820096a200741807f72200741ff0071200741077622071b3a00002003200941016a220936024402402007450d0020032802402101200721070c010b0b2003200236025c2003200c3602582003200e3602542003200c36025002402015450d00024003400240200c410d6a2d000022094102470d00200c41106a21020c020b200c41086a280200210f200c41046a2802002115200c280200210e2003200c410c6a2d000041ff007322083a000002400240200328024020032802442201460d00200328023c21070c010b200141016a22072001490d08200141017422082007200820074b1b22084100480d080240024020010d00024020080d00410121070c020b200810332207450d120c010b200328023c210720012008460d0020072001200810372207450d110b200320083602402003200736023c20032d00002108200328024421010b200720016a20083a00002003200141016a2201360244200320093a00000240024020032802402001460d00200328023c21070c010b200141016a22092001490d08200141017422072009200720094b1b22094100480d080240024020010d00024020090d00410121070c020b200910332207450d120c010b200328023c210720012009460d0020072001200910372207450d110b200320093602402003200736023c20032d00002109200328024421010b200720016a20093a00002003200141016a3602442003200f3602302003201536022c2003200e3602282003200341286a200341386a10a207024020032d00002201411f470d00200c41106a220c2002470d010c020b0b20032f000120032d00034110747221092003280204210720032802082108200328020c210f2003200c41106a360258200341d0006a10c60702402003280240450d00200328023c10350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a200f360000200041086a2008360000200041046a20073600000c0d0b200320023602580b200341d0006a10c60720032802382107200328023c210f2003280240210c20032802442108200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d0a200f10350c0a0b2001410c6a2802002110200141086a2802002112200141046a280200210e200341053a00002002200341011078200341d0006a410c6a41003602002003420137025420032002360250200341003a0000410021014101210f4100210920102107034020032007220741807f72200741ff0071200741077622071b22083a0000024020012009470d00200941016a220c2009490d0520094101742215200c2015200c4b1b220c4100480d05024002400240024020090d000240200c0d004101210f0c020b200c1033210f0c030b2009200c470d010b200c21090c020b200f2009200c1037210f0b200c2109200f450d0d0b200f20016a20083a0000200141016a210120070d000b2003200136025c2003200f36025420032009360258024002402010450d002010410c6c2108410021010340200e20016a220941046a28020022074102460d01200320092802002007200941086a280200200341d0006a10af0720032d00002209411f470d0220082001410c6a2201470d000b0b02402012450d002012410c6c450d00200e10350b200328025c21082003280258210c2003280254210f20032802502107200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d0a200f10350c0a0b20032d0003411074210120032f00012107200328020c21082003280208210f2003280204210c02402012450d002012410c6c450d00200e10350b2007200172210102402003280258450d00200328025410350b200020013b0001200020093a0000200041036a20014110763a00002000410c6a2008360000200041086a200f360000200041046a200c3600000c0a0b2001410c6a2802002115200141086a2802002110200141046a280200210e200341043a00002002200341011078200341d0006a410c6a4100360200200342013702542003200236025041002101410121084100210920152107034020072107024020012009470d00200941016a220f2009490d042009410174220c200f200c200f4b1b220f4100480d04024002400240024020090d000240200f0d00410121080c020b200f103321080c030b2009200f470d010b200f21090c020b20082009200f103721080b200f21092008450d0c0b200820016a200741807f72200741ff0071200741077622071b3a0000200141016a210120070d000b2003200136025c2003200836025420032009360258024002402015450d002015410c6c2102410021090340200e20096a220141046a28020022084102460d012001280200210f200141086a280200210c200341f0003a0000024002402003280258200328025c2201460d0041f0002115200328025421070c010b200141016a22072001490d06200141017422152007201520074b1b22154100480d060240024020010d00024020150d00410121070c020b201510332207450d100c010b2003280254210720012015460d0020072001201510372207450d0f0b200320153602582003200736025420032d000021150b200720016a20153a00002003200141016a36025c2003200f2008200c200341d0006a10af0720032d00002201411f470d0220022009410c6a2209470d000b0b02402010450d002010410c6c450d00200e10350b200328025c21082003280258210c2003280254210f20032802502107200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d09200f10350c090b20032d0003411074210920032f00012107200328020c21082003280208210f2003280204210c02402010450d002010410c6c450d00200e10350b2007200972210902402003280258450d00200328025410350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a2008360000200041086a200f360000200041046a200c3600000c090b200141086a2802002114200141046a28020021122001410c6a280200210e200341033a00002002200341011078200341003a00002012200e4102746a211041002109410021074101210c200e210803402003200841807f72200841ff00712008410776220f1b22083a00000240024020092007460d00200721010c010b200741016a22012007490d03200741017422152001201520014b1b22014100480d030240024020070d00024020010d004101210c0c020b20011033220c450d0d0c010b20072001460d00200c200720011037220c450d0c0b200121070b200c20096a20083a0000200941016a2109200f2108200f0d000b02400240200e0d002001210f0c010b2012210e0340200e2802002107200341003a000003402003200741807f72200741ff0071200741077622081b22073a00000240024020092001460d002001210f0c010b200141016a220f2001490d0520014101742215200f2015200f4b1b220f4100480d050240024020010d000240200f0d004101210c0c020b200f1033220c450d0f0c010b2001200f460d00200c2001200f1037220c450d0e0b200f21010b200c20096a20073a0000200941016a21092008210720080d000b200f2101200e41046a220e2010470d000b0b0240201441ffffffff0371450d00201210350b200341003a00002009210103402003200141800172200141ff0071200141077622071b3a000020022003410110782007210120070d000b2002200c20091078200f450d07200c10350c070b200141086a280200211a200141046a28020021162001410c6a2802002115200341023a00002002200341011078200341d0006a410c6a410036020020034201370254200320023602502016201541286c6a210241002101410021092015210703400240024020092001460d00200328025421080c010b200141016a22082001490d022001410174220f2008200f20084b1b220f4100480d020240024020010d000240200f0d00410121080c020b200f10332208450d0c0c010b200328025421082001200f460d0020082001200f10372208450d0b0b2003200f360258200320083602540b200820096a200741807f72200741ff0071200741077622071b3a00002003200941016a220936025c02402007450d0020032802582101200721070c010b0b2016210c2015450d02201541286c41586a21102016210c0340200c220941286a210c20092d0018220d4104460d03200941206a29000021042009411c6a280000210f2009411a6a2d0000210a200941196a2c0000210b200941146a2802002115200941106a2802002111200928020c21122009280204211320092802002114200328025c21012009280208220e210903400240024020032802582001460d00200328025421070c010b200141016a22072001490d03200141017422082007200820074b1b22084100480d030240024020010d00024020080d00410121070c020b200810332207450d0d0c010b2003280254210720012008460d0020072001200810372207450d0c0b2003200836025820032007360254200328025c21010b200720016a200941807f72200941ff0071200941077622071b3a00002003200141016a220136025c2007210920070d000b024002402003280258220720016b200e490d00200328025421090c010b2001200e6a22092001490d02200741017422012009200120094b1b22014100480d020240024020070d00024020010d00410121090c020b200110332209450d0c0c010b2003280254210920072001460d0020092007200110372209450d0b0b2003200136025820032009360254200328025c21010b200920016a2014200e109d081a20032001200e6a220136025c02402013450d0020141035200328025c21010b2015210903400240024020032802582001460d00200328025421070c010b200141016a22072001490d03200141017422082007200820074b1b22084100480d030240024020010d00024020080d00410121070c020b200810332207450d0d0c010b2003280254210720012008460d0020072001200810372207450d0c0b2003200836025820032007360254200328025c21010b200720016a200941807f72200941ff0071200941077622071b3a00002003200141016a220136025c2007210920070d000b024002402003280258220720016b2015490d00200328025421090c010b200120156a22092001490d02200741017422012009200120094b1b22014100480d020240024020070d00024020010d00410121090c020b200110332209450d0c0c010b2003280254210920072001460d0020092007200110372209450d0b0b2003200136025820032009360254200328025c21010b200920016a20122015109d081a2003200120156a36025c02402011450d00201210350b02400240024002400240200d0e0400010203000b200341003a0000024002402003280258200328025c2201460d0041002107200328025421090c010b200141016a22092001490d06200141017422072009200720094b1b22074100480d060240024020010d00024020070d00410121090c020b200710332209450d100c010b2003280254210920012007460d0020092001200710372209450d0f0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a220136025c200341003a000003402003200f41807f72200f41ff0071200f41077622091b22083a00000240024020032802582001460d00200328025421070c010b200141016a22072001490d07200141017422082007200820074b1b22084100480d070240024020010d00024020080d00410121070c020b200810332207450d110c010b2003280254210720012008460d0020072001200810372207450d100b200320083602582003200736025420032d00002108200328025c21010b200720016a20083a00002003200141016a220136025c2009210f20090d000c040b0b200341013a0000024002402003280258200328025c2201460d0041012107200328025421090c010b200141016a22092001490d05200141017422072009200720094b1b22074100480d050240024020010d00024020070d00410121090c020b200710332209450d0f0c010b2003280254210920012007460d0020092001200710372209450d0e0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a220136025c200341f0003a00000240024020032802582001460d0041f0002107200328025421090c010b200141016a22092001490d05200141017422072009200720094b1b22074100480d050240024020010d00024020070d00410121090c020b200710332209450d0f0c010b2003280254210920012007460d0020092001200710372209450d0e0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a36025c2003200f2004a72004422088a7200341d0006a10af0720032d00002201411f460d0220032f000120032d00034110747221090c050b200341023a0000024002402003280258200328025c2201460d0041022107200328025421090c010b200141016a22092001490d04200141017422072009200720094b1b22074100480d040240024020010d00024020070d00410121090c020b200710332209450d0e0c010b2003280254210920012007460d0020092001200710372209450d0d0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a36025c2003200f2004a72004422088a7200341d0006a10af0720032d00002201411f460d0120032f000120032d00034110747221090c040b200341033a0000024002402003280258200328025c2201460d0041032107200328025421090c010b200141016a22092001490d03200141017422072009200720094b1b22074100480d030240024020010d00024020070d00410121090c020b200710332209450d0d0c010b2003280254210920012007460d0020092001200710372209450d0c0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a220136025c2003200b417f732209413f7141c000722009200b417f4a1b22073a00000240024020032802582001460d00200328025421090c010b200141016a22092001490d03200141017422072009200720094b1b22074100480d030240024020010d00024020070d00410121090c020b200710332209450d0d0c010b2003280254210920012007460d0020092001200710372209450d0c0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a220136025c2003200a41ff017141004722073a00000240024020032802582001460d00200328025421090c010b200141016a22092001490d03200141017422072009200720094b1b22074100480d030240024020010d00024020070d00410121090c020b200710332209450d0d0c010b2003280254210920012007460d0020092001200710372209450d0c0b200320073602582003200936025420032d00002107200328025c21010b200920016a20073a00002003200141016a36025c0b201041586a2110200c2002470d000c040b0b103e000b200328020c2107200328020821082003280204210f02402002200c460d0003400240200c41046a280200450d00200c28020010350b0240200c41106a280200450d00200c410c6a28020010350b200c41286a210c201041586a22100d000b0b0240201a450d00201a41286c450d00201610350b02402003280258450d00200328025410350b200020093b0001200020013a0000200041036a20094110763a00002000410c6a2007360000200041086a2008360000200041046a200f3600000c050b2002200c460d0003400240200c41046a280200450d00200c28020010350b200c41286a21010240200c41106a280200450d00200c410c6a28020010350b2001210c20022001470d000b0b0240201a450d00201a41286c450d00201610350b200328025c21082003280258210c2003280254210f20032802502107200341003a00002008210103402003200141800172200141ff0071200141077622091b3a000020072003410110782009210120090d000b2007200f20081078200c450d02200f10350c020b200d2010460d000340201041106a21090240201041046a280200450d00201028020010350b20092110200d2009470d000b0b0240200a41ffffffff0071450d00200b10350b200341003a00002007210903402003200941800172200941ff0071200941077622081b3a000020022003410110782008210920080d000b2002200e200710782001450d00200e10350b2000411f3a00000b200341e0006a24000f0b103c000be60703027f017e057f230041d0006b2202240041a3edcb00ad4280808080f00084100122032900002104200241086a41086a200341086a2900003703002002200437030820031035419cb4ca00ad4280808080800184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240200141086a28020041046a2203417f4c0d000240024020030d0041012105410021030c010b200310332205450d020b2002410036024820022005360240200220033602440240200341034b0d00200341017422064104200641044b1b22064100480d030240024020030d002006103322050d010c060b20032006460d0020052003200610372205450d050b20022006360244200220053602400b2005200128000036000020024104360248200141046a2802002107200141086a2802002201200241c0006a10770240024020022802442208200228024822056b2001490d0020022802402103200821060c010b200520016a22032005490d03200841017422062003200620034b1b22064100480d030240024020080d00024020060d00410121030c020b200610332203450d060c010b2002280240210320082006460d0020032008200610372203450d050b20022006360244200220033602400b200320056a20072001109d081a2002200520016a2201ad4220862003ad841003220529000037033820051035200241cc006a200320016a360200200220033602482002200241c0006a3602442002200241386a360240200241286a200241c0006a107b02402006450d00200310350b2002280230220841206a2206417f4c0d00200228022821070240024020060d0041002101410121030c010b200610332203450d02200621010b024002402001410f4d0d00200121050c010b200141017422054110200541104b1b22054100480d03024020010d00200510332203450d050c010b20012005460d0020032001200510372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020054170714110460d00200521010c010b200541017422014120200141204b1b22014100480d0320052001460d0020032005200110372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200141606a2008490d00200121050c010b200841206a22052008490d03200141017422092005200920054b1b22054100480d0320012005460d0020032001200510372203450d040b200341206a20072008109d081a2000200636020820002005360204200020033602000240200228022c450d00200710350b200241d0006a24000f0b1044000b1045000b103e000b103c000b130020004104360204200041a4bfca003602000b1300200041043602042000418cc3ca003602000b130020004101360204200041e8caca003602000b340020004193d1cb0036020420004100360200200041146a4103360200200041106a41e8cbca00360200200041086a420a3702000beb050a067f017e017f017e017f017e017f017e017f017e230041206b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200020044105746a22042900002108200020054105746a220541086a2209290000210a200541106a220b290000210c200541186a220d290000210e20042005290000370000200441186a220f2900002110200f200e370000200441106a220f290000210e200f200c370000200441086a2204290000210c2004200a370000200d2010370000200b200e3700002009200c37000020052008370000024020032001490d00200321040c030b2006410d7420067322054111762005732205410574200573220620077122054100200120052001491b6b220520014f0d01200020034105746a22042900002108200020054105746a220541086a2209290000210a200541106a220b290000210c200541186a220d290000210e20042005290000370000200441186a220f2900002110200f200e370000200441106a220f290000210e200f200c370000200441086a2204290000210c2004200a370000200d2010370000200b200e3700002009200c370000200520083700002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200020044105746a22012900002108200020054105746a220041086a2205290000210a200041106a2204290000210c200041186a2203290000210e20012000290000370000200141186a220629000021102006200e370000200141106a2206290000210e2006200c370000200141086a2201290000210c2001200a370000200320103700002004200e3700002005200c370000200020083700000b200241206a24000f0b20052001418486cc001042000b2004200141f485cc001042000be90609067f017e017f017e017f027e017f017e027f230041206b22022400024020014101762203450d0003402003417f6a2203210402400240024003402004410174220541017221060240200541026a220520014f0d00200620014f0d0220052006200020064105746a200020054105746a412010a0084100481b21060b200620014f0d03200420014f0d02200020044105746a2204200020064105746a2205412010a00841004e0d03200541086a22072900002108200541106a2209290000210a200541186a220b290000210c2004290000210d20042005290000370000200441186a220e290000210f200e200c370000200441106a220e290000210c200e200a370000200441086a2204290000210a20042008370000200b200f3700002009200c3700002007200a3700002005200d370000200621040c000b0b2006200141f487cc001042000b20042001418488cc001042000b20030d000b0b0240024020014102490d002001210703402007417f6a220720014f0d02200241186a2209200041186a2204290000370300200241106a220b200041106a2205290000370300200241086a220e200041086a2203290000370300200020074105746a220641086a2900002108200641106a290000210a200641186a290000210c2000290000210d200020062900003700002004200c3700002005200a370000200320083700002002200d37030041002105024002400240034020062002290300370000200641186a2009290300370000200641106a200b290300370000200641086a200e2903003700002005410174220641017221040240200641026a220620074f0d00200420074f0d0220062004200020044105746a200020064105746a412010a0084100481b21040b200420074f0d03200520074f0d02200020054105746a2205200020044105746a2206412010a00841004e0d032009200541186a2203290000370300200b200541106a2210290000370300200e200541086a2211290000370300200641086a2900002108200641106a290000210a200641186a290000210c2005290000210d200520062900003700002003200c3700002010200a370000201120083700002002200d370300200421050c000b0b2004200741f487cc001042000b20052007418488cc001042000b200741014b0d000b0b200241206a24000f0b20072001418486cc001042000bdb08030a7f017e0a7f230041c0006b22022400200041a07f6a21032001417f6a2104200141324921054101210641002107024003400240024020062001490d00410021080c010b41012108200020064105746a2209200941606a412010a0084100480d0003404101210a20042006460d03200641016a2106200941206a220a2009412010a0082108200a21092008417f4a0d000b200620014921080b2006200146210a20050d0120062001460d0102400240024002402006417f6a220920014f0d002008450d0120002006410574220b6a220a290000210c200a200020094105746a22092900003700002009200c370000200a41086a220d290000210c200d200941086a220e290000370000200e200c370000200a41106a220f290000210c200f200941106a22102900003700002010200c370000200a41186a2211290000210c2011200941186a22122900003700002012200c37000020064102490d03200920002006417e6a22084105746a2213412010a008417f4a0d032009290000210c20092013290000370000200241206a41186a22142012290000370300200241206a41106a22152010290000370300200241206a41086a2216200e290000370300200e201341086a2900003700002010201341106a2900003700002012201341186a2900003700002002200c3703204100210e2008450d022003200b6a210903400240200241206a2009412010a0084100480d002008210e0c040b200941206a2009290000370000200941386a200941186a290000370000200941306a200941106a290000370000200941286a200941086a290000370000200941606a21092008417f6a22080d000c030b0b2009200141f485cc001042000b20062001418486cc001042000b2000200e4105746a22092002290320370000200941186a2014290300370000200941106a2015290300370000200941086a20162903003700000b200741016a21070240200120066b22104102490d00200a41206a2209200a412010a008417f4a0d00200a290000210c200a2009290000370000200241206a41186a22122011290000370300200241206a41106a2213200f290000370300200241206a41086a220b200d290000370300200d200941086a290000370000200f200941106a2900003700002011200941186a2900003700002002200c3703204101210d024020104103490d00200a41c0006a200241206a412010a008417f4a0d00410321084102210e0340200a200e4105746a220941606a220d2009290000370000200d41186a200941186a290000370000200d41106a200941106a290000370000200d41086a200941086a290000370000024020082010490d00200e210d0c020b20084105742109200e210d2008210e200841016a2108200a20096a200241206a412010a0084100480d000b0b200a200d4105746a22092002290320370000200941186a2012290300370000200941106a2013290300370000200941086a200b2903003700000b20074105470d000b4100210a0b200241c0006a2400200a0b88090b107f017e017f017e017f017e017f017e017f017e017f230041306b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200241286a22082000200441306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e2903003703002013201029030037030020052002290300370300024020032001490d00200321040c030b2006410d7420067322044111762004732204410574200473220620077122044100200120042001491b6b220520014f0d01200241286a22082000200341306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e29030037030020132010290300370300200520022903003703002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200241286a22032000200441306c6a220141286a2204290300370300200241206a2206200141206a2207290300370300200241186a2208200141186a2209290300370300200241106a220a200141106a220b290300370300200241086a220c200141086a220d290300370300200220012903003703002000200541306c6a22002903002112200041086a22052903002114200041106a220e2903002116200041186a220f2903002118200041206a2210290300211a2004200041286a22112903003703002007201a37030020092018370300200b2016370300200d2014370300200120123703002011200329030037030020102006290300370300200f2008290300370300200e200a2903003703002005200c290300370300200020022903003703000b200241306a24000f0b20052001418486cc001042000b2004200141f485cc001042000bf30a020e7f027e02402000280200220428020028020028020028020028020022052802002206450d0020012802002107200428020428020022082002280200220941306c6a210a2005280204210b2006210c02400340200c41086a210d200c2f0106220e410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210e0b0240200b0d0042002112420021130c030b200b417f6a210b200c200e4102746a41c8056a280200210c0c010b0b200c20104105746a220f41f0026a2903002113200f41e8026a29030021120b2006450d002008200741306c6a210a2005280204210b2006210c02400340200c41086a210d200c2f0106220e410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210e0b200b450d02200b417f6a210b200c200e4102746a41c8056a280200210c0c010b0b2012200c20104105746a220f41e8026a2903005a2013200f41f0026a29030022125a20132012511b0d0020012009360200200220073602002004280208220f200f28020041016a360200200228020021092000280200220428020428020021082004280200280200280200280200280200220528020021060b2006450d0020082003280200220741306c6a210a2005280204210b2006210c02400340200c41086a210d200c2f0106220e410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210e0b0240200b0d0042002112420021130c030b200b417f6a210b200c200e4102746a41c8056a280200210c0c010b0b200c20104105746a220f41f0026a2903002113200f41e8026a29030021120b2006450d002008200941306c6a210a2005280204210b2006210c02400340200c41086a210d200c2f0106220e410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210e0b200b450d02200b417f6a210b200c200e4102746a41c8056a280200210c0c010b0b2012200c20104105746a220f41e8026a2903005a2013200f41f0026a29030022125a20132012511b0d0020022007360200200320093602002004280208220f200f28020041016a360200200228020021092000280200220428020428020021082004280200280200280200280200280200220528020021060b2006450d00200128020021002008200941306c6a210a2005280204210b2006210c02400340200c41086a210d200c2f0106220e410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210e0b0240200b0d0042002112420021130c030b200b417f6a210b200c200e4102746a41c8056a280200210c0c010b0b200c20104105746a220f41f0026a2903002113200f41e8026a29030021120b2006450d002008200041306c6a210a2005280204210c0340200641086a210d20062f0106220b410574210f41002110024002400340200f450d01200a200d412010a0082211450d02200f41606a210f201041016a2110200d41206a210d2011417f4a0d000b2010417f6a210b0b200c450d02200c417f6a210c2006200b4102746a41c8056a28020021060c010b0b2012200620104105746a220f41e8026a2903005a2013200f41f0026a29030022125a20132012511b0d0020012009360200200220003602002004280208220f200f28020041016a3602000b0bfe030a0d7f017e017f017e017f017e017f017e017f017e230041c0006b22032400200320023602082003200341086a36020c024020014101762202450d002003410c6a200020012002417f6a1084072002417e6a210203402002417f460d012003410c6a2000200120021084072002417f6a21020c000b0b0240024020014102490d00200141306c20006a41506a21022001210403402004417f6a220520014f0d02200341106a41286a2204200041286a2206290300370300200341106a41206a2207200041206a2208290300370300200341106a41186a2209200041186a220a290300370300200341106a41106a220b200041106a220c290300370300200341106a41086a220d200041086a220e29030037030020032000290300370310200241086a220f2903002110200241106a22112903002112200241186a22132903002114200241206a22152903002116200241286a22172903002118200020022903003703002006201837030020082016370300200a2014370300200c2012370300200e20103703002017200429030037030020152007290300370300201320092903003703002011200b290300370300200f200d290300370300200220032903103703002003410c6a200020054100108407200241506a210220052104200541014b0d000b0b200341c0006a24000f0b2004417f6a2001418486cc001042000bf20f03107f027e0a7f230041306b22032400410021042001413249210541012106024003400240024020062001490d00410021070c010b20022802002802002802002208280200210941012107034002402009450d002006417f6a210a2000200641306c6a210b2008280204210c2009210d02400340200d41086a210e200d2f0106220f4105742110410021110240024003402010450d01200b200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a210f0b0240200c0d0042002113420021140c030b200c417f6a210c200d200f4102746a41c8056a280200210d0c010b0b200d20114105746a221041f0026a2903002114201041e8026a29030021130b2009450d002000200a41306c6a210b2008280204210c2009210d0340200d41086a210e200d2f0106220f4105742110410021110240024003402010450d01200b200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a210f0b200c450d02200c417f6a210c200d200f4102746a41c8056a280200210d0c010b0b2013200d20114105746a221041e8026a2903005a2014201041f0026a29030022135a20142013511b450d020b41012110200641016a2206200149210720062001470d000c030b0b2006200146211020050d0120062001460d0102400240024002402006417f6a221020014f0d002007410171450d01200441016a21042000201041306c6a2210290300211420102000200641306c6a220b290300370300200341286a2209201041286a220e290300370300200341206a2207201041206a2211290300370300200341186a2208201041186a2212290300370300200341106a220a201041106a220d290300370300200341086a2215201041086a22102903003703002010200b41086a2216290300370300200d200b41106a22172903003703002012200b41186a22182903003703002011200b41206a2219290300370300200e200b41286a221a29030037030020032014370300200b2003290300370300201a200929030037030020192007290300370300201820082903003703002017200a29030037030020162015290300370300200020062002108307200120066b221b4102490d032002280200280200280200221c280200220f450d03200b41306a210d201c280204211d200f210c02400340200c41086a210e200c2f0106221e4105742110410021110240024003402010450d01200d200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a211e0b0240201d0d0042002113420021140c030b201d417f6a211d200c201e4102746a41c8056a280200210c0c010b0b200c20114105746a221041f0026a2903002114201041e8026a29030021130b200f450d03201c280204210c0340200f41086a210e200f2f0106221d4105742110410021110240024003402010450d01200b200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a211d0b200c450d05200c417f6a210c200f201d4102746a41c8056a280200210f0c010b0b2013200f20114105746a221041e8026a2903005a2014201041f0026a29030022135a20142013511b0d03200b2903002114200b200d2903003703002009201a2903003703002007201929030037030020082018290300370300200a2017290300370300201520162903003703002016200d41086a2903003703002017200d41106a2903003703002018200d41186a2903003703002019200d41206a290300370300201a200d41286a290300370300200320143703004101211e201b4103490d02410321184102211a4101211e034020022802002802002802002219280200220c450d03200b201a41306c6a210d2018211d20192802042116200c210f02400340200f41086a210e200f2f010622174105742110410021110240024003402010450d01200d200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a21170b024020160d0042002113420021140c030b2016417f6a2116200f20174102746a41c8056a280200210f0c010b0b200f20114105746a221041f0026a2903002114201041e8026a29030021130b200c450d032019280204210f0340200c41086a210e200c2f010622164105742110410021110240024003402010450d012003200e412010a0082212450d02201041606a2110201141016a2111200e41206a210e2012417f4a0d000b2011417f6a21160b200f450d05200f417f6a210f200c20164102746a41c8056a280200210c0c010b0b2013200c20114105746a221041e8026a290300542014201041f0026a29030022135420142013511b450d03200d41506a2210200d290300370300201041286a200d41286a290300370300201041206a200d41206a290300370300201041186a200d41186a290300370300201041106a200d41106a290300370300201041086a200d41086a29030037030002402018201b4f0d00201841016a2118201a211e201d211a0c010b0b201a211e0c020b2010200141f485cc001042000b20062001418486cc001042000b200b201e41306c6a22102003290300370300201041286a2009290300370300201041206a2007290300370300201041186a2008290300370300201041106a200a290300370300201041086a20152903003703000b20044105470d000b410021100b200341306a240020100bc709030c7f027e057f230041306b22032400024020014102490d00200228020028020028020022042802002205450d002001417e6a2106200141306c20006a220141a07f6a2107200141506a2108200428020421092005210a02400340200a41086a210b200a2f0106220c41057421014100210d0240024003402001450d012008200b412010a008220e450d02200141606a2101200d41016a210d200b41206a210b200e417f4a0d000b200d417f6a210c0b024020090d004200210f420021100c030b2009417f6a2109200a200c4102746a41c8056a280200210a0c010b0b200a200d4105746a220141f0026a2903002110200141e8026a290300210f0b2005450d002004280204210a0340200541086a210b20052f0106220941057421014100210d0240024003402001450d012007200b412010a008220e450d02200141606a2101200d41016a210d200b41206a210b200e417f4a0d000b200d417f6a21090b200a450d02200a417f6a210a200520094102746a41c8056a28020021050c010b0b200f2005200d4105746a220141e8026a2903005a2010200141f0026a290300220f5a2010200f511b0d002008290300211020082007290300370300200341286a2211200841286a2201290300370300200341206a2212200841206a220b290300370300200341186a2213200841186a220d290300370300200341106a2214200841106a220e290300370300200341086a2215200841086a22082903003703002008200741086a290300370300200e200741106a290300370300200d200741186a290300370300200b200741206a2903003703002001200741286a290300370300200320103703000240024020060d00410021060c010b03402002280200280200280200220c2802002207450d0120002006417f6a220441306c6a2108200c28020421052007210a02400340200a41086a210b200a2f0106220941057421014100210d0240024003402001450d012003200b412010a008220e450d02200141606a2101200d41016a210d200b41206a210b200e417f4a0d000b200d417f6a21090b024020050d004200210f420021100c030b2005417f6a2105200a20094102746a41c8056a280200210a0c010b0b200a200d4105746a220141f0026a2903002110200141e8026a290300210f0b2007450d01200c280204210a0340200741086a210b20072f0106220541057421014100210d0240024003402001450d012008200b412010a008220e450d02200141606a2101200d41016a210d200b41206a210b200e417f4a0d000b200d417f6a21050b200a450d03200a417f6a210a200720054102746a41c8056a28020021070c010b0b200f2007200d4105746a220141e8026a290300542010200141f0026a290300220f542010200f511b450d012000200641306c6a22012008290300370300200141286a200841286a290300370300200141206a200841206a290300370300200141186a200841186a290300370300200141106a200841106a290300370300200141086a200841086a2903003703002004210620040d000b410021060b2000200641306c6a22012003290300370300200141286a2011290300370300200141206a2012290300370300200141186a2013290300370300200141106a2014290300370300200141086a20152903003703000b200341306a24000bd20907067f027e077f027e047f017e017f230041306b2204240003402003410174220541017221060240200541026a220720024f0d00024002400240200620024f0d0002402000280200280200280200280200280200220828020022090d004200210a4200210b0c020b2001200641306c6a210c2008280204210d2009210e02400340200e41086a210f200e2f010622104105742105410021110240024003402005450d01200c200f412010a0082212450d02200541606a2105201141016a2111200f41206a210f2012417f4a0d000b2011417f6a21100b0240200d0d004200210a4200210b0c030b200d417f6a210d200e20104102746a41c8056a280200210e0c010b0b200e20114105746a220541f0026a290300210b200541e8026a290300210a0b2009450d012001200741306c6a210c2008280204210e0340200941086a210f20092f0106220d4105742105410021110240024003402005450d01200c200f412010a0082212450d02200541606a2105201141016a2111200f41206a210f2012417f4a0d000b2011417f6a210d0b200e450d03200e417f6a210e2009200d4102746a41c8056a28020021090c010b0b200920114105746a220541f0026a2903002113200541e8026a29030021140c020b2006200241f487cc001042000b42002114420021130b20072006200a201454200b201354200b2013511b1b21060b024002400240200620024f0d00200320024f0d0120002802002802002802002802002802002210280200220e450d002001200341306c6a210c20102802042109200e210302400340200341086a210f20032f0106220d4105742105410021110240024003402005450d01200c200f412010a0082212450d02200541606a2105201141016a2111200f41206a210f2012417f4a0d000b2011417f6a210d0b024020090d00420021134200210b0c030b2009417f6a21092003200d4102746a41c8056a28020021030c010b0b200320114105746a220541f0026a290300210b200541e8026a29030021130b200e450d002001200641306c6a2103201028020421090340200e41086a210f200e2f0106220d4105742105410021110240024003402005450d012003200f412010a0082212450d02200541606a2105201141016a2111200f41206a210f2012417f4a0d000b2011417f6a210d0b2009450d022009417f6a2109200e200d4102746a41c8056a280200210e0c010b0b2013200e20114105746a220541e8026a29030054200b200541f0026a290300221354200b2013511b0d020b200441306a24000f0b20032002418488cc001042000b200441286a2205200c41286a220f290300370300200441206a2211200c41206a2212290300370300200441186a220e200c41186a2209290300370300200441106a220d200c41106a2210290300370300200441086a2207200c41086a22082903003703002004200c2903003703002003290300210b200341086a22152903002113200341106a2216290300210a200341186a22172903002114200341206a22182903002119200f200341286a221a29030037030020122019370300200920143703002010200a37030020082013370300200c200b370300201a2005290300370300201820112903003703002017200e2903003703002016200d2903003703002015200729030037030020032004290300370300200621030c000b0b88090b107f017e017f017e017f017e017f017e017f017e017f230041306b2202240002400240024020014108490d00200141017641feffffff07712203417f6a220420014f0d022001410d74200173220541117620057322054105742005732206417f2001417f6a677622077122054100200120052001491b6b220520014f0d01200241286a22082000200441306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e2903003703002013201029030037030020052002290300370300024020032001490d00200321040c030b2006410d7420067322044111762004732204410574200473220620077122044100200120042001491b6b220520014f0d01200241286a22082000200341306c6a220441286a2209290300370300200241206a220a200441206a220b290300370300200241186a220c200441186a220d290300370300200241106a220e200441106a220f290300370300200241086a2210200441086a2211290300370300200220042903003703002000200541306c6a22052903002112200541086a22132903002114200541106a22152903002116200541186a22172903002118200541206a2219290300211a2009200541286a221b290300370300200b201a370300200d2018370300200f20163703002011201437030020042012370300201b20082903003703002019200a2903003703002017200c2903003703002015200e29030037030020132010290300370300200520022903003703002003410172220420014f0d022006410d742006732205411176200573220541057420057320077122054100200120052001491b6b220520014f0d01200241286a22032000200441306c6a220141286a2204290300370300200241206a2206200141206a2207290300370300200241186a2208200141186a2209290300370300200241106a220a200141106a220b290300370300200241086a220c200141086a220d290300370300200220012903003703002000200541306c6a22002903002112200041086a22052903002114200041106a220e2903002116200041186a220f2903002118200041206a2210290300211a2004200041286a22112903003703002007201a37030020092018370300200b2016370300200d2014370300200120123703002011200329030037030020102006290300370300200f2008290300370300200e200a2903003703002005200c290300370300200020022903003703000b200241306a24000f0b20052001418486cc001042000b2004200141f485cc001042000bf20907077f027e0b7f017e017f027e017f230041306b22022400024020014101762203450d0003402003417f6a2203210402400240024003402004410174220541017221060240200541026a220520014f0d00200620014f0d02200520062000200641306c6a22072903002000200541306c6a220829030056200741086a2903002209200841086a290300220a562009200a511b1b21060b200620014f0d03200420014f0d022000200441306c6a22042903002000200641306c6a220529030056200441086a22072903002209200541086a2208290300220a562009200a511b450d03200241286a220b200441286a220c290300370300200241206a220d200441206a220e290300370300200241186a220f200441186a2210290300370300200241106a2211200441106a2212290300370300200241086a221320072903003703002002200429030037030020082903002109200541106a2214290300210a200541186a22152903002116200541206a2217290300211820052903002119200c200541286a221a290300370300200e2018370300201020163703002012200a3703002007200937030020042019370300201a200b2903003703002017200d2903003703002015200f290300370300201420112903003703002008201329030037030020052002290300370300200621040c000b0b2006200141f487cc001042000b20042001418488cc001042000b20030d000b0b0240024020014102490d002001210703402007417f6a220720014f0d02200241286a220b200041286a2205290300370300200241206a220c200041206a2206290300370300200241186a220d200041186a2208290300370300200241106a220e200041106a2210290300370300200241086a220f200041086a2211290300370300200220002903003703002000200741306c6a22042903002109200441086a290300210a200441106a2903002116200441186a2903002118200441206a29030021192005200441286a2903003703002006201937030020082018370300201020163703002011200a3703002000200937030041002105024002400240034020042002290300370300200441286a200b290300370300200441206a200c290300370300200441186a200d290300370300200441106a200e290300370300200441086a200f2903003703002005410174220441017221060240200441026a220420074f0d00200620074f0d02200420062000200641306c6a22082903002000200441306c6a221029030056200841086a2903002209201041086a290300220a562009200a511b1b21060b200620074f0d03200520074f0d022000200541306c6a22052903002000200641306c6a220429030056200541086a22082903002209200441086a2210290300220a562009200a511b450d03200b200541286a2211290300370300200c200541206a2212290300370300200d200541186a2213290300370300200e200541106a2214290300370300200f20082903003703002002200529030037030020102903002109200441106a290300210a200441186a2903002116200441206a2903002118200429030021192011200441286a29030037030020122018370300201320163703002014200a3703002008200937030020052019370300200621050c000b0b2006200741f487cc001042000b20052007418488cc001042000b200741014b0d000b0b200241306a24000f0b20072001418486cc001042000bb80c050a7f017e017f037e0f7f230041306b22022400200041c07e6a21032001417f6a2104200041306a2105410021062001413249210741012108024003400240024020082001490d00410021090c010b410121092000200841306c220a6a220b290300220c200b41506a220d29030056200b41086a290300220e200d41086a290300220f56200e200f511b0d002005200a6a210903404101210b20042008460d03200841016a210820092903002210200c58210b200941086a290300220f200e51210d200f200e58210a200941306a21092010210c200f210e200b200a200d1b0d000b200820014921090b2008200146210b20070d0120082001460d010240024002400240024002402008417f6a220b20014f0d002009450d012000200b41306c6a2209290300210e20092000200841306c22116a220b290300370300200241286a220a200941286a2212290300370300200241206a2213200941206a2214290300370300200241186a2215200941186a2216290300370300200241106a2217200941106a2218290300370300200241086a2219200941086a220d290300370300200d200b41086a221a2903003703002018200b41106a221b2903003703002016200b41186a221c2903003703002014200b41206a221d2903003703002012200b41286a221e2903003703002002200e370300200b2002290300370300201e200a290300370300201d2013290300370300201c2015290300370300201b2017290300370300201a201929030037030020084102490d052009290300220c20002008417e6a221341306c6a220a29030058200d290300220e200a41086a221f290300220f58200e200f511b0d052009200a290300370300200d201f2903003703002009290310210f2018200a41106a2903003703002015201229030037030020172014290300370300201920162903003703002016200a41186a2903003703002014200a41206a2903003703002012200a41286a2903003703002002200f370300024020130d00410021130c050b200c20002008417d6a220d41306c6a220929030058200e200941086a290300220f58200e200f511b0d04200320116a2109034020094188016a200941d8006a29030037030020094180016a200941d0006a290300370300200941f8006a200941c8006a290300370300200941f0006a200941c0006a290300370300200941e8006a200941386a290300370300200941e0006a200941306a290300370300200d450d032009290300210f200941086a210a200941506a2109200d417f6a210d200c200f56200e200a290300220f56200e200f511b0d000b200d41016a21130c030b200b200141f485cc001042000b20082001418486cc001042000b410021130b2000201341306c6a210a0b200a200c370300200a200e3703082000201341306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b200641016a21060240200120086b22144102490d00200b290330200b290300220c58200b41386a290300220f201a290300220e58200f200e511b0d00200b200b41306a2212290300370300201a201241086a290300370300200b290310210f201b201241106a2903003703002015201e2903003703002017201d2903003703002019201c290300370300201c201241186a290300370300201d201241206a290300370300201e201241286a2903003703002002200f3703004101211a024020144103490d00200b290360200c58200b41e8006a290300220f200e58200f200e511b0d00200b41e0006a21094103210a4102210d0340200d221a41306c200b6a221241506a220d2009290300370300200d41286a200941286a290300370300200d41206a200941206a290300370300200d41186a200941186a290300370300200d41106a200941106a290300370300200d41086a200941086a290300370300200a20144f0d01200a41306c2109200a210d200a41016a210a200b20096a2209290300200c56200941086a290300220f200e56200f200e511b0d000b0b2012200c3703002012200e370308200b201a41306c6a22092002290300370310200941286a2015290300370300200941206a2017290300370300200941186a20192903003703000b20064105470d000b4100210b0b200241306a2400200b0b13002000410736020420004194d1ca003602000b130020004100360204200041b0b4cc003602000b9f0303027f017e027f230041206b2202240041c7d5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354190eaca00ad4280808080e00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000ba10701087f230041106b220224002002410036020820024201370300200028020021030240410410332204450d00200241043602042002200436020020042003360000200241043602082000280204210320044104410810372204450d002002410836020420042003360004200220043602002002410836020820002802082104200041106a280200220320021077024002402003450d00200341057421052002280204210620022802082103034002400240200620036b4120490d00200341206a2107200228020021080c010b200341206a22072003490d03200641017422082007200820074b1b22094100480d030240024020060d00024020090d00410121080c020b2009103322080d010c060b2002280200210820062009460d0020082006200910372208450d050b2002200936020420022008360200200921060b200820036a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002002200736020820072103200441206a2104200541606a22050d000b0b200028021421042000411c6a2802002203200210770240024020030d0020022802042109200228020821030c010b200341057421054100200228020822036b210820022802042106034002400240200620086a4120490d0020022802002107200621090c010b200341206a22072003490d03200641017422092007200920074b1b22094100480d030240024020060d00024020090d00410121070c020b200910332207450d060c010b2002280200210720062009460d0020072006200910372207450d050b2002200936020420022007360200200921060b200720036a22072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a2900003700002002200341206a2203360208200841606a2108200441206a2104200541606a22050d000b0b2000280220210602400240200920036b4104490d0020022802002104200921070c010b200341046a22042003490d01200941017422072004200720044b1b22074100480d010240024020090d00024020070d00410121040c020b200710332204450d040c010b2002280200210420092007460d0020042009200710372204450d030b20022007360204200220043602000b200420036a20063600002001290200200341046aad4220862004ad84100202402007450d00200410350b200241106a24000f0b103e000b103c000b9f0303027f017e027f230041206b2202240041dad5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354190eaca00ad4280808080e00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b130020004109360204200041a8eaca003602000b3400200041f8a2cb0036020420004100360200200041146a4103360200200041106a4180a3cb00360200200041086a42083702000b130020004105360204200041b4a9cb003602000b3400200041c7d5ca0036020420004100360200200041146a4106360200200041106a41f8bbcb00360200200041086a42133702000b3400200041dad5ca0036020420004100360200200041146a4106360200200041106a41f8bbcb00360200200041086a42133702000ba10701087f230041106b220224002002410036020820024201370300200028020021030240410410332204450d00200241043602042002200436020020042003360000200241043602082000280204210320044104410810372204450d002002410836020420042003360004200220043602002002410836020820002802082104200041106a280200220320021077024002402003450d00200341057421052002280204210620022802082103034002400240200620036b4120490d00200341206a2107200228020021080c010b200341206a22072003490d03200641017422082007200820074b1b22094100480d030240024020060d00024020090d00410121080c020b2009103322080d010c060b2002280200210820062009460d0020082006200910372208450d050b2002200936020420022008360200200921060b200820036a22032004290000370000200341186a200441186a290000370000200341106a200441106a290000370000200341086a200441086a2900003700002002200736020820072103200441206a2104200541606a22050d000b0b200028021421042000411c6a2802002203200210770240024020030d0020022802042109200228020821030c010b200341057421054100200228020822036b210820022802042106034002400240200620086a4120490d0020022802002107200621090c010b200341206a22072003490d03200641017422092007200920074b1b22094100480d030240024020060d00024020090d00410121070c020b200910332207450d060c010b2002280200210720062009460d0020072006200910372207450d050b2002200936020420022007360200200921060b200720036a22072004290000370000200741186a200441186a290000370000200741106a200441106a290000370000200741086a200441086a2900003700002002200341206a2203360208200841606a2108200441206a2104200541606a22050d000b0b2000280220210602400240200920036b4104490d0020022802002104200921070c010b200341046a22042003490d01200941017422072004200720044b1b22074100480d010240024020090d00024020070d00410121040c020b200710332204450d040c010b2002280200210420092007460d0020042009200710372204450d030b20022007360204200220043602000b200420036a20063600002001290200200341046aad4220862004ad84100202402007450d00200410350b200241106a24000f0b103e000b103c000b340020004182e9ca0036020420004100360200200041146a4101360200200041106a41b8c0cb00360200200041086a42183702000bfd0303037f027e047f230041106b220224002002410036020820024201370300200028021021030240410410332204450d0020024104360204200220043602002004200336000020024104360208200041086a29030021052000290300210620044104411410372204450d00200420063700042004410c6a200537000020024294808080c00237020420022004360200200028021421072000411c6a2802002200200210770240024020000d002002280208210320022802042108200228020021090c010b2000410574210a200228020021092002280204210820022802082103034020072100024002402008200322046b4120490d00200441206a21030c010b024002400240200441206a22032004490d00200841017422072003200720034b1b22074100480d000240024020080d00024020070d00410121090c020b2007103321090c040b20082007470d020b200721080c030b103e000b200920082007103721090b200721082009450d030b200041206a2107200920046a22042000290000370000200441186a200041186a290000370000200441106a200041106a290000370000200441086a200041086a290000370000200a41606a220a0d000b2002200836020420022003360208200220093602000b20012902002003ad4220862009ad84100202402008450d00200910350b200241106a24000f0b103c000bc20503027f017e047f230041d0006b2202240041f8a2cb00ad4280808080800184100122032900002104200241086a200341086a290000370300200220043703002003103541e4a6cb00ad4280808080d00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a2900003700002003ad4280808080800484100422012900002104200241306a41086a200141086a2900003703002002200437033020011035200241cc006a200341206a360200200220033602482002200241306a41106a3602442002200241306a360240200241206a200241c0006a107b200310352002280228220541206a2201417f4c0d01200228022021060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290300370000200341086a200241086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290310370010200341186a200241106a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a20002001360208200020083602042000200336020002402002280224450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bb10503027f017e047f230041d0006b2202240041f8a2cb00ad4280808080800184100122032900002104200241086a41086a200341086a29000037030020022004370308200310354188a5cb00ad4280808080b00184100122032900002104200241186a41086a200341086a29000037030020022004370318200310350240024002400240412010332203450d0020032001290000370000200341186a200141186a290000370000200341106a200141106a290000370000200341086a200141086a29000037000020022003ad42808080808004841003220129000037033820011035200241cc006a200341206a360200200220033602482002200241386a41086a3602442002200241386a360240200241286a200241c0006a107b200310352002280230220541206a2201417f4c0d01200228022821060240024020010d0041002107410121030c010b200110332203450d01200121070b024002402007410f4d0d00200721080c010b200741017422084110200841104b1b22084100480d03024020070d002008103322030d010c050b20072008460d0020032007200810372203450d040b20032002290308370000200341086a200241086a41086a2903003700000240024020084170714110460d00200821070c010b200841017422074120200741204b1b22074100480d0320082007460d0020032008200710372203450d040b20032002290318370010200341186a200241186a41086a29030037000002400240200741606a2005490d00200721080c010b2005415f4b0d03200741017422082001200820014b1b22084100480d0320072008460d0020032007200810372203450d040b200341206a20062005109d081a2000200136020820002008360204200020033602000240200228022c450d00200610350b200241d0006a24000f0b1045000b1044000b103e000b103c000bdc0703027f017e067f230041e0006b2203240041f8a2cb00ad4280808080800184100122042900002105200341086a41086a200441086a290000370300200320053703082004103541e8a5cb00ad4280808080800284100122042900002105200341186a41086a200441086a29000037030020032005370318200410350240024002400240412010332204450d0020042001290000370000200441186a200141186a290000370000200441106a200141106a290000370000200441086a200141086a29000037000020032004ad42808080808004841003220129000037034820011035200341dc006a2201200441206a360200200320043602582003200341c8006a41086a22063602542003200341c8006a360250200341286a200341d0006a107b20041035412010332204450d0020042002290000370000200441186a200241186a290000370000200441106a200241106a290000370000200441086a200241086a29000037000020032004ad428080808080048410032202290000370348200210352001200441206a36020020032004360258200320063602542003200341c8006a360250200341386a200341d0006a107b200410352003280230220741206a2206200328024022086a2201417f4c0d01200328023821092003280228210a0240024020010d004100210b410121040c010b200110332204450d012001210b0b02400240200b410f4d0d00200b21020c010b200b41017422024110200241104b1b22024100480d030240200b0d002002103322040d010c050b200b2002460d002004200b200210372204450d040b20042003290308370000200441086a200341086a41086a2903003700000240024020024170714110460d002002210b0c010b2002410174220b4120200b41204b1b220b4100480d032002200b460d0020042002200b10372204450d040b20042003290318370010200441186a200341186a41086a29030037000002400240200b41606a2007490d00200b21020c010b2007415f4b0d03200b41017422022006200220064b1b22024100480d03200b2002460d002004200b200210372204450d040b200441206a200a2007109d081a02400240200220066b2008490d002002210b0c010b20012006490d032002410174220b2001200b20014b1b220b4100480d03024020020d000240200b0d00410121040c020b200b10332204450d050c010b2002200b460d0020042002200b10372204450d040b200420066a20092008109d081a200020013602082000200b360204200020043602000240200328023c450d00200910350b0240200328022c450d00200a10350b200341e0006a24000f0b1045000b1044000b103e000b103c000b130020004110360204200041fcc2cb003602000b9f0303027f017e027f230041206b2202240041dad5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354188b8cb00ad4280808080a00184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b9f0303027f017e027f230041206b2202240041dad5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354190eaca00ad4280808080e00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b9b0c08057f037e057f017e077f017e017f017e230041c0076b220424000240024020000d00200441e0026a2003109c0720043502e80242208620042802e0022200ad841007024020042802e402450d00200010350b200441ed026a200341086a290000370000200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441033a00e402200441073a00e002200420032900003700e50241b0b4cc004100200441e0026a10d4010c010b200441ed026a200341086a290000370000200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441023a00e402200441073a00e002200420032900003700e50241b0b4cc004100200441e0026a10d401200441b8026a2003109c07200441e0026a20042802b802220520042802c00210e30220042802e002210020044190056a200441e0026a41047241ac02109d081a02402000411b470d0020042802bc02450d01200510350c010b200441086a20044190056a41ac02109d081a024020042802bc02450d00200510350b20022802042105200420003602e002200441e0026a410472200441086a41ac02109d081a2004419c056a200136020020044190056a41086a2005360200200441003a009405200441013a009005200441b8026a200441e0026a20044190056a10ac0320044185036a20042903b802503a0000200441ed026a200341086a290000370000200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441043a00e402200441073a00e002200420032900003700e50241b0b4cc004100200441e0026a10d4010b200441e0026a2003109a0720043502e80242208620042802e0022200ad841007024020042802e402450d00200010350b20044190056a41186a2206420037030020044190056a41106a2207420037030020044190056a41086a22084200370300200442003703900541dad5ca00ad4280808080b00284220910012200290000210a2008200041086a2900003703002004200a37039005200010354180eaca00ad4280808080900184220b10012200290000210a200441086a41086a220c200041086a2900003703002004200a3703082000103520072004290308220a370300200441e0026a41086a220d2008290300370300200441e0026a41106a220e200a370300200441e0026a41186a220f200c29030037030020042004290390053703e00220044190056a200441e0026a412010b5022004280290052200410120001b21100240200429029405420020001b2211422088a72212450d0041002101201021004100210502400240034002400240024020032000460d0020002003412010a008450d0020010d01410021010c020b200141016a21010c010b200520016b221320124f0d022006200020014105746b221341186a22142900003703002007201341106a22152900003703002008201341086a22162900003703002004201329000037039005200041086a2217290000210a200041106a22182900002119200041186a221a290000211b201320002900003700002014201b370000201520193700002016200a370000201a2006290300370000201820072903003700002017200829030037000020002004290390053700000b200041206a21002012200541016a2205460d020c000b0b2013201241f485cc001042000b2001417f6a20124f0d00201220016bad422086201142ffffffff0f838421110b200f4200370300200e4200370300200d4200370300200442003703e002200910012200290000210a200d200041086a2900003703002004200a3703e00220001035200b10012200290000210a200c200041086a2900003703002004200a37030820001035200e2004290308220a3703002008200d2903003703002007200a3703002006200c290300370300200420042903e002370390050240024020100d0020044190056aad428080808080048410070c010b200441203602e402200420044190056a3602e00220102011422088a7200441e0026a10c504201142ffffff3f83500d00201010350b02402002410c6a28020041ffffff3f71450d00200228020810350b0240200241186a28020041ffffff3f71450d00200228021410350b200441c0076a24000b9f0303027f017e027f230041206b2202240041dad5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354188b8cb00ad4280808080a00184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b9f0303027f017e027f230041206b2202240041c7d5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354188b8cb00ad4280808080a00184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b9f0303027f017e027f230041206b2202240041c7d5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354190eaca00ad4280808080e00084100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b9b0c08057f037e057f017e077f017e017f017e230041c0076b220424000240024020000d00200441e0026a200310a00720043502e80242208620042802e0022200ad841007024020042802e402450d00200010350b200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441083a00e002200441ed026a200341086a290000370000200441033a00e402200420032900003700e50241b0b4cc004100200441e0026a10d4010c010b200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441083a00e002200441ed026a200341086a290000370000200441023a00e402200420032900003700e50241b0b4cc004100200441e0026a10d401200441b8026a200310a007200441e0026a20042802b802220520042802c00210e30220042802e002210020044190056a200441e0026a41047241ac02109d081a02402000411b470d0020042802bc02450d01200510350c010b200441086a20044190056a41ac02109d081a024020042802bc02450d00200510350b20022802042105200420003602e002200441e0026a410472200441086a41ac02109d081a2004419c056a200136020020044190056a41086a2005360200200441003a009405200441023a009005200441b8026a200441e0026a20044190056a10ac0320044185036a20042903b802503a0000200441ed026a200341086a290000370000200441f5026a200341106a290000370000200441fd026a200341186a290000370000200441043a00e402200441083a00e002200420032900003700e50241b0b4cc004100200441e0026a10d4010b200441e0026a2003109e0720043502e80242208620042802e0022200ad841007024020042802e402450d00200010350b20044190056a41186a2206420037030020044190056a41106a2207420037030020044190056a41086a22084200370300200442003703900541c7d5ca00ad4280808080b00284220910012200290000210a2008200041086a2900003703002004200a37039005200010354180eaca00ad4280808080900184220b10012200290000210a200441086a41086a220c200041086a2900003703002004200a3703082000103520072004290308220a370300200441e0026a41086a220d2008290300370300200441e0026a41106a220e200a370300200441e0026a41186a220f200c29030037030020042004290390053703e00220044190056a200441e0026a412010b5022004280290052200410120001b21100240200429029405420020001b2211422088a72212450d0041002101201021004100210502400240034002400240024020032000460d0020002003412010a008450d0020010d01410021010c020b200141016a21010c010b200520016b221320124f0d022006200020014105746b221341186a22142900003703002007201341106a22152900003703002008201341086a22162900003703002004201329000037039005200041086a2217290000210a200041106a22182900002119200041186a221a290000211b201320002900003700002014201b370000201520193700002016200a370000201a2006290300370000201820072903003700002017200829030037000020002004290390053700000b200041206a21002012200541016a2205460d020c000b0b2013201241f485cc001042000b2001417f6a20124f0d00201220016bad422086201142ffffffff0f838421110b200f4200370300200e4200370300200d4200370300200442003703e002200910012200290000210a200d200041086a2900003703002004200a3703e00220001035200b10012200290000210a200c200041086a2900003703002004200a37030820001035200e2004290308220a3703002008200d2903003703002007200a3703002006200c290300370300200420042903e002370390050240024020100d0020044190056aad428080808080048410070c010b200441203602e402200420044190056a3602e00220102011422088a7200441e0026a10c504201142ffffff3f83500d00201010350b02402002410c6a28020041ffffff3f71450d00200228020810350b0240200241186a28020041ffffff3f71450d00200228021410350b200441c0076a24000b9f0303027f017e027f230041206b2202240041c7d5ca00ad4280808080b00284100122032900002104200241086a200341086a29000037030020022004370300200310354188b8cb00ad4280808080a00184100122032900002104200241106a41086a200341086a29000037030020022004370310200310350240412010332203450d0020032001290000370000200341186a2205200141186a290000370000200341106a2206200141106a290000370000200341086a200141086a290000370000412010332201450d0020012003290000370000200141186a2005290000370000200141106a2006290000370000200141086a2205200341086a2900003700002003103541c00010332203450d002003200229031037001020032002290300370000200341086a200241086a290300370000200341186a200241106a41086a290300370000200042c080808080083702042000200336020020032001290000370020200341286a2005290000370000200341306a200141106a290000370000200341386a200141186a29000037000020011035200241206a24000f0b1045000b130020004107360204200041accdcb003602000bcc04020d7f017e230041c0006b22032400200128020822044104742105200128020421062001280200220721010240024002402004450d00200341306a410172210841002104200341306a41026a2109200341206a410172220a41076a210b03402009200720046a220141036a2d00003a00002003200141016a2f00003b0130024020012d0000220c41ac01470d00200141106a21010c020b2003410c6a41026a20092d0000220d3a0000200320032f0130220e3b010c200141046a280200210f200141086a29030021102008200e3b0000200841026a200d3a00002003200c3a0030200320103703382003200f360234200341206a200341306a200210a3072003200a2900003703102003200b290000370017024020032d0020220c411f470d002005200441106a2204470d010c030b0b2000200c3a000020002003290310370001200041086a20032900173700000240200541706a2004460d00200141146a2101200520046b41706a2104034002402001417c6a2d00004109470d0002402001280200220928020441ffffffff0371450d0020092802001035200128020021090b200910350b200141106a2101200441706a22040d000b0b200641ffffffff0071450d02200710350c020b200720056a22092001460d000340200141106a2104024020012d00004109470d000240200141046a2208280200220128020441ffffffff0371450d0020012802001035200828020021010b200110350b2004210120092004470d000b0b0240200641ffffffff0071450d00200710350b2000411f3a00000b200341c0006a24000b9bee0202097f017e230041106b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000eac01000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab01000b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dad01200441017422062005200620054b1b22064100480dad010240024020040d00024020060d00410121050c020b2006103322050d010cb9010b2002280204210520042006460d0020052004200610372205450db8010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41003a00002002410c6a200441016a3602000cab010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dac01200441017422062005200620054b1b22064100480dac010240024020040d00024020060d00410121050c020b200610332205450db8010c010b2002280204210520042006460d0020052004200610372205450db7010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41013a00002002410c6a200441016a3602000caa010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d00024020080d00410121050c020b200810332205450db7010c010b2006280200210520042008460d0020052004200810372205450db6010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41023a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d00024020080d00410121050c020b200810332205450db7010c010b2006280200210520042008460d0020052004200810372205450db6010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca9010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d00024020080d00410121050c020b200810332205450db6010c010b2006280200210520042008460d0020052004200810372205450db5010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41033a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d00024020080d00410121050c020b200810332205450db6010c010b2006280200210520042008460d0020052004200810372205450db5010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca8010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490da901200441017422082005200820054b1b22084100480da9010240024020040d00024020080d00410121050c020b200810332205450db5010c010b2006280200210520042008460d0020052004200810372205450db4010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41043a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490da901200441017422082005200820054b1b22084100480da9010240024020040d00024020080d00410121050c020b200810332205450db5010c010b2006280200210520042008460d0020052004200810372205450db4010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca7010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da801200441017422062005200620054b1b22064100480da8010240024020040d00024020060d00410121050c020b200610332205450db4010c010b2002280204210520042006460d0020052004200610372205450db3010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41053a00002002410c6a200441016a3602000ca6010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da701200441017422062005200620054b1b22064100480da7010240024020040d00024020060d00410121050c020b200610332205450db3010c010b2002280204210520042006460d0020052004200610372205450db2010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410b3a00002002410c6a200441016a3602000ca5010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d00024020070d00410121060c020b200710332206450db2010c010b2009280200210620042007460d0020062004200710372206450db1010b20022006360204200241086a20073602002002410c6a28020021040b200620046a410c3a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da701200441017422072006200720064b1b22074100480da7010240024020040d00024020070d00410121060c020b200710332206450db3010c010b2009280200210620042007460d0020062004200710372206450db2010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca5010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da501200441017422072006200720064b1b22074100480da5010240024020040d00024020070d00410121060c020b200710332206450db1010c010b2009280200210620042007460d0020062004200710372206450db0010b20022006360204200241086a20073602002002410c6a28020021040b200620046a410d3a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d00024020070d00410121060c020b200710332206450db2010c010b2009280200210620042007460d0020062004200710372206450db1010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca4010b0b200241046a210902400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da401200441017422062005200620054b1b22064100480da4010240024020040d00024020060d00410121050c020b200610332205450db0010c010b2009280200210520042006460d0020052004200610372205450daf010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410e3a00002002410c6a2208200441016a360200200320012802042204280204220520042802002204200420054102746a200210a4072003210420032d0000411f470dab012008280200210420012802042802082105200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da501200441017422072006200720064b1b22074100480da5010240024020040d00024020070d00410121060c020b200710332206450db1010c010b2009280200210620042007460d0020062004200710372206450db0010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca3010b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da301200441017422062005200620054b1b22064100480da3010240024020040d00024020060d00410121050c020b200610332205450daf010c010b2002280204210520042006460d0020052004200610372205450dae010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410f3a00002002410c6a200441016a3602000ca1010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d00024020070d00410121060c020b200710332206450dae010c010b2009280200210620042007460d0020062004200710372206450dad010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41103a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da301200441017422072006200720064b1b22074100480da3010240024020040d00024020070d00410121060c020b200710332206450daf010c010b2009280200210620042007460d0020062004200710372206450dae010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca1010b0b200241046a2109200141046a280200210520012d0001210b02400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da101200441017422072006200720064b1b22074100480da1010240024020040d00024020070d00410121060c020b200710332206450dad010c010b2009280200210620042007460d0020062004200710372206450dac010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41113a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d00024020070d00410121060c020b200710332206450dae010c010b2009280200210620042007460d0020062004200710372206450dad010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000b02400240200241086a2802002004460d00200928020021050c010b200441016a22052004490da101200441017422062005200620054b1b22064100480da1010240024020040d00024020060d00410121050c020b200610332205450dad010c010b2009280200210520042006460d0020052004200610372205450dac010b20022005360204200241086a20063602002002410c6a28020021040b200520046a200b3a00002002410c6a200441016a3602000c9f010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da001200441017422062005200620054b1b22064100480da0010240024020040d00024020060d00410121050c020b200610332205450dac010c010b2002280204210520042006460d0020052004200610372205450dab010b20022005360204200241086a20063602002002410c6a28020021040b200520046a411a3a00002002410c6a200441016a3602000c9e010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d9f01200441017422062005200620054b1b22064100480d9f010240024020040d00024020060d00410121050c020b200610332205450dab010c010b2002280204210520042006460d0020052004200610372205450daa010b20022005360204200241086a20063602002002410c6a28020021040b200520046a411b3a00002002410c6a200441016a3602000c9d010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d00024020070d00410121060c020b200710332206450daa010c010b2009280200210620042007460d0020062004200710372206450da9010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41203a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9f01200441017422072006200720064b1b22074100480d9f010240024020040d00024020070d00410121060c020b200710332206450dab010c010b2009280200210620042007460d0020062004200710372206450daa010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9d010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d00024020070d00410121060c020b200710332206450da9010c010b2009280200210620042007460d0020062004200710372206450da8010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41213a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d00024020070d00410121060c020b200710332206450daa010c010b2009280200210620042007460d0020062004200710372206450da9010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9c010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d00024020070d00410121060c020b200710332206450da8010c010b2009280200210620042007460d0020062004200710372206450da7010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41223a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d00024020070d00410121060c020b200710332206450da9010c010b2009280200210620042007460d0020062004200710372206450da8010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9b010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d00024020070d00410121060c020b200710332206450da7010c010b2009280200210620042007460d0020062004200710372206450da6010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41233a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d00024020070d00410121060c020b200710332206450da8010c010b2009280200210620042007460d0020062004200710372206450da7010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9a010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9a01200441017422072006200720064b1b22074100480d9a010240024020040d00024020070d00410121060c020b200710332206450da6010c010b2009280200210620042007460d0020062004200710372206450da5010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41243a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d00024020070d00410121060c020b200710332206450da7010c010b2009280200210620042007460d0020062004200710372206450da6010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c99010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d00024020080d00410121070c020b200810332207450da5010c010b200a280200210720042008460d0020072004200810372207450da4010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41283a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9a01200441017422082007200820074b1b22084100480d9a010240024020040d00024020080d00410121070c020b200810332207450da6010c010b200a280200210720042008460d0020072004200810372207450da5010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9a01200441017422072005200720054b1b22074100480d9a010240024020040d00024020070d00410121050c020b200710332205450da6010c010b200a280200210520042007460d0020052004200710372205450da5010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c98010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d00024020080d00410121070c020b200810332207450da4010c010b200a280200210720042008460d0020072004200810372207450da3010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41293a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d00024020080d00410121070c020b200810332207450da5010c010b200a280200210720042008460d0020072004200810372207450da4010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9901200441017422072006200720064b1b22074100480d99010240024020040d00024020070d00410121060c020b200710332206450da5010c010b200a280200210620042007460d0020062004200710372206450da4010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c97010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d00024020080d00410121070c020b200810332207450da3010c010b200a280200210720042008460d0020072004200810372207450da2010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412a3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d00024020080d00410121070c020b200810332207450da4010c010b200a280200210720042008460d0020072004200810372207450da3010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9801200441017422072006200720064b1b22074100480d98010240024020040d00024020070d00410121060c020b200710332206450da4010c010b200a280200210620042007460d0020062004200710372206450da3010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c96010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b200810332207450da2010c010b200a280200210720042008460d0020072004200810372207450da1010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412b3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d00024020080d00410121070c020b200810332207450da3010c010b200a280200210720042008460d0020072004200810372207450da2010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9701200441017422072005200720054b1b22074100480d97010240024020040d00024020070d00410121050c020b200710332205450da3010c010b200a280200210520042007460d0020052004200710372205450da2010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c95010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b200810332207450da1010c010b200a280200210720042008460d0020072004200810372207450da0010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412c3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b200810332207450da2010c010b200a280200210720042008460d0020072004200810372207450da1010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9601200441017422072006200720064b1b22074100480d96010240024020040d00024020070d00410121060c020b200710332206450da2010c010b200a280200210620042007460d0020062004200710372206450da1010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c94010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b200810332207450da0010c010b200a280200210720042008460d0020072004200810372207450d9f010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412d3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b2008103322070d010c9e010b200a280200210720042008460d0020072004200810372207450d9c010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9601200441017422072006200720064b1b22074100480d96010240024020040d00024020070d00410121060c020b2007103322060d010c9e010b200a280200210620042007460d0020062004200710372206450d9c010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c93010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d00024020080d00410121070c020b2008103322070d010c9c010b200a280200210720042008460d0020072004200810372207450d9a010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412e3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b2008103322070d010c9d010b200a280200210720042008460d0020072004200810372207450d9b010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9501200441017422072006200720064b1b22074100480d95010240024020040d00024020070d00410121060c020b2007103322060d010c9d010b200a280200210620042007460d0020062004200710372206450d9b010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c92010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d00024020080d00410121070c020b2008103322070d010c9b010b200a280200210720042008460d0020072004200810372207450d99010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412f3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d00024020080d00410121070c020b2008103322070d010c9c010b200a280200210720042008460d0020072004200810372207450d9a010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9401200441017422072006200720064b1b22074100480d94010240024020040d00024020070d00410121060c020b2007103322060d010c9c010b200a280200210620042007460d0020062004200710372206450d9a010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c91010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d00024020080d00410121070c020b2008103322070d010c9a010b200a280200210720042008460d0020072004200810372207450d98010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41303a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d00024020080d00410121070c020b2008103322070d010c9b010b200a280200210720042008460d0020072004200810372207450d99010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9301200441017422072005200720054b1b22074100480d93010240024020040d00024020070d00410121050c020b2007103322050d010c9b010b200a280200210520042007460d0020052004200710372205450d99010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c90010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d00024020080d00410121070c020b2008103322070d010c99010b200a280200210720042008460d0020072004200810372207450d97010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41313a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d00024020080d00410121070c020b2008103322070d010c9a010b200a280200210720042008460d0020072004200810372207450d98010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9201200441017422072006200720064b1b22074100480d92010240024020040d00024020070d00410121060c020b2007103322060d010c9a010b200a280200210620042007460d0020062004200710372206450d98010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8f010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d00024020080d00410121070c020b2008103322070d010c98010b200a280200210720042008460d0020072004200810372207450d96010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41323a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d00024020080d00410121070c020b2008103322070d010c99010b200a280200210720042008460d0020072004200810372207450d97010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9101200441017422072006200720064b1b22074100480d91010240024020040d00024020070d00410121060c020b2007103322060d010c99010b200a280200210620042007460d0020062004200710372206450d97010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8e010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d00024020080d00410121070c020b2008103322070d010c97010b200a280200210720042008460d0020072004200810372207450d95010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41333a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d00024020080d00410121070c020b2008103322070d010c98010b200a280200210720042008460d0020072004200810372207450d96010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9001200441017422072006200720064b1b22074100480d90010240024020040d00024020070d00410121060c020b2007103322060d010c98010b200a280200210620042007460d0020062004200710372206450d96010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8d010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d00024020080d00410121070c020b2008103322070d010c96010b200a280200210720042008460d0020072004200810372207450d94010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41343a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d00024020080d00410121070c020b2008103322070d010c97010b200a280200210720042008460d0020072004200810372207450d95010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8f01200441017422072005200720054b1b22074100480d8f010240024020040d00024020070d00410121050c020b2007103322050d010c97010b200a280200210520042007460d0020052004200710372205450d95010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c8c010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d00024020080d00410121070c020b2008103322070d010c95010b200a280200210720042008460d0020072004200810372207450d93010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41353a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d00024020080d00410121070c020b2008103322070d010c96010b200a280200210720042008460d0020072004200810372207450d94010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8e01200441017422072006200720064b1b22074100480d8e010240024020040d00024020070d00410121060c020b2007103322060d010c96010b200a280200210620042007460d0020062004200710372206450d94010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8b010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d00024020080d00410121070c020b2008103322070d010c94010b200a280200210720042008460d0020072004200810372207450d92010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41363a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d00024020080d00410121070c020b2008103322070d010c95010b200a280200210720042008460d0020072004200810372207450d93010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8d01200441017422072005200720054b1b22074100480d8d010240024020040d00024020070d00410121050c020b2007103322050d010c95010b200a280200210520042007460d0020052004200710372205450d93010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c8a010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d00024020080d00410121070c020b2008103322070d010c93010b200a280200210720042008460d0020072004200810372207450d91010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41373a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d00024020080d00410121070c020b2008103322070d010c94010b200a280200210720042008460d0020072004200810372207450d92010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8c01200441017422072006200720064b1b22074100480d8c010240024020040d00024020070d00410121060c020b2007103322060d010c94010b200a280200210620042007460d0020062004200710372206450d92010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c89010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d00024020080d00410121070c020b2008103322070d010c92010b200a280200210720042008460d0020072004200810372207450d90010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41383a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d00024020080d00410121070c020b2008103322070d010c93010b200a280200210720042008460d0020072004200810372207450d91010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8b01200441017422072005200720054b1b22074100480d8b010240024020040d00024020070d00410121050c020b2007103322050d010c93010b200a280200210520042007460d0020052004200710372205450d91010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c88010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d00024020080d00410121070c020b2008103322070d010c91010b200a280200210720042008460d0020072004200810372207450d8f010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41393a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d00024020080d00410121070c020b2008103322070d010c92010b200a280200210720042008460d0020072004200810372207450d90010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8a01200441017422072006200720064b1b22074100480d8a010240024020040d00024020070d00410121060c020b2007103322060d010c92010b200a280200210620042007460d0020062004200710372206450d90010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c87010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d00024020080d00410121070c020b2008103322070d010c90010b200a280200210720042008460d0020072004200810372207450d8e010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413a3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d00024020080d00410121070c020b2008103322070d010c91010b200a280200210720042008460d0020072004200810372207450d8f010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8901200441017422072006200720064b1b22074100480d89010240024020040d00024020070d00410121060c020b2007103322060d010c91010b200a280200210620042007460d0020062004200710372206450d8f010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c86010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d00024020080d00410121070c020b2008103322070d010c8f010b200a280200210720042008460d0020072004200810372207450d8d010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413b3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d00024020080d00410121070c020b2008103322070d010c90010b200a280200210720042008460d0020072004200810372207450d8e010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8801200441017422072006200720064b1b22074100480d88010240024020040d00024020070d00410121060c020b2007103322060d010c90010b200a280200210620042007460d0020062004200710372206450d8e010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c85010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d00024020080d00410121070c020b2008103322070d010c8e010b200a280200210720042008460d0020072004200810372207450d8c010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413c3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d00024020080d00410121070c020b2008103322070d010c8f010b200a280200210720042008460d0020072004200810372207450d8d010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8701200441017422072006200720064b1b22074100480d87010240024020040d00024020070d00410121060c020b2007103322060d010c8f010b200a280200210620042007460d0020062004200710372206450d8d010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c84010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d00024020080d00410121070c020b2008103322070d010c8d010b200a280200210720042008460d0020072004200810372207450d8b010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413d3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d00024020080d00410121070c020b2008103322070d010c8e010b200a280200210720042008460d0020072004200810372207450d8c010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8601200441017422072005200720054b1b22074100480d86010240024020040d00024020070d00410121050c020b2007103322050d010c8e010b200a280200210520042007460d0020052004200710372205450d8c010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c83010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8401200441017422082007200820074b1b22084100480d84010240024020040d00024020080d00410121070c020b2008103322070d010c8c010b200a280200210720042008460d0020072004200810372207450d8a010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413e3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d00024020080d00410121070c020b2008103322070d010c8d010b200a280200210720042008460d0020072004200810372207450d8b010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8501200441017422072005200720054b1b22074100480d85010240024020040d00024020070d00410121050c020b2007103322050d010c8d010b200a280200210520042007460d0020052004200710372205450d8b010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c82010b0b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8b010b2006280200210520042008460d0020052004200810372205450d89010b20022005360204200241086a20083602002002410c6a28020021040b200520046a413f3a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8b010b2006280200210520042008460d0020052004200810372205450d89010b20022005360204200241086a20083602002002410c6a28020021040b200520046a20073a00002002410c6a200441016a3602000c80010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8201200441017422082005200820054b1b22084100480d82010240024020040d00024020080d00410121050c020b2008103322050d010c8a010b2006280200210520042008460d0020052004200810372205450d88010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41c0003a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8a010b2006280200210520042008460d0020052004200810372205450d88010b20022005360204200241086a20083602002002410c6a28020021040b200520046a20073a00002002410c6a200441016a3602000c7f0b200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8201200441017422072005200720054b1b22074100480d82010240024020040d00024020070d00410121050c020b2007103322050d010c89010b2002280204210520042007460d0020052004200710372205450d84010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c1003a00002002410c6a200441016a36020020032006200210a5072003210420032d0000411f470d87010c7e0b200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8101200441017422062005200620054b1b22064100480d81010240024020040d00024020060d00410121050c020b2006103322050d010c88010b2002280204210520042006460d0020052004200610372205450d83010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c2003a00002002410c6a200441016a3602002003200c200210a6072003210420032d0000411f470d86010c7d0b200241046a2106200141046a280200210802400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8001200441017422072005200720054b1b22074100480d80010240024020040d00024020070d00410121050c020b2007103322050d010c87010b2006280200210520042007460d0020052004200710372205450d82010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c3003a00002002410c6a200441016a220436020002400240200241086a280200220720046b4104490d00200628020021050c010b200441046a22052004490d8001200741017422042005200420054b1b22044100480d80010240024020070d00024020040d00410121050c020b2004103322050d010c87010b2006280200210520072004460d0020052007200410372205450d82010b20022005360204200241086a20043602002002410c6a28020021040b200520046a20083600002002410c6a200441046a3602000c7c0b200241046a2106200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d7f200441017422072005200720054b1b22074100480d7f0240024020040d00024020070d00410121050c020b2007103322050d010c86010b2006280200210520042007460d0020052004200710372205450d81010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c4003a00002002410c6a200441016a220436020002400240200241086a280200220720046b4108490d00200628020021050c010b200441086a22052004490d7f200741017422042005200420054b1b22044100480d7f0240024020070d00024020040d00410121050c020b2004103322050d010c86010b2006280200210520072004460d0020052007200410372205450d81010b20022005360204200241086a20043602002002410c6a28020021040b200520046a200c3700002002410c6a200441086a3602000c7b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7e200441017422062005200620054b1b22064100480d7e0240024020040d00024020060d00410121050c020b2006103322050d010c85010b2002280204210520042006460d0020052004200610372205450d80010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c5003a00002002410c6a200441016a3602000c7a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7d200441017422062005200620054b1b22064100480d7d0240024020040d00024020060d00410121050c020b2006103322050d010c84010b2002280204210520042006460d0020052004200610372205450d7f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c6003a00002002410c6a200441016a3602000c790b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7c200441017422062005200620054b1b22064100480d7c0240024020040d00024020060d00410121050c020b2006103322050d010c83010b2002280204210520042006460d0020052004200610372205450d7e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c7003a00002002410c6a200441016a3602000c780b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7b200441017422062005200620054b1b22064100480d7b0240024020040d00024020060d00410121050c020b2006103322050d010c82010b2002280204210520042006460d0020052004200610372205450d7d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c8003a00002002410c6a200441016a3602000c770b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7a200441017422062005200620054b1b22064100480d7a0240024020040d00024020060d00410121050c020b2006103322050d010c81010b2002280204210520042006460d0020052004200610372205450d7c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c9003a00002002410c6a200441016a3602000c760b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d79200441017422062005200620054b1b22064100480d790240024020040d00024020060d00410121050c020b2006103322050d010c80010b2002280204210520042006460d0020052004200610372205450d7b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ca003a00002002410c6a200441016a3602000c750b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d78200441017422062005200620054b1b22064100480d780240024020040d00024020060d00410121050c020b2006103322050d010c7f0b2002280204210520042006460d0020052004200610372205450d7a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cb003a00002002410c6a200441016a3602000c740b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d77200441017422062005200620054b1b22064100480d770240024020040d00024020060d00410121050c020b2006103322050d010c7e0b2002280204210520042006460d0020052004200610372205450d790b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cc003a00002002410c6a200441016a3602000c730b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d76200441017422062005200620054b1b22064100480d760240024020040d00024020060d00410121050c020b2006103322050d010c7d0b2002280204210520042006460d0020052004200610372205450d780b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cd003a00002002410c6a200441016a3602000c720b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d75200441017422062005200620054b1b22064100480d750240024020040d00024020060d00410121050c020b2006103322050d010c7c0b2002280204210520042006460d0020052004200610372205450d770b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ce003a00002002410c6a200441016a3602000c710b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d74200441017422062005200620054b1b22064100480d740240024020040d00024020060d00410121050c020b2006103322050d010c7b0b2002280204210520042006460d0020052004200610372205450d760b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cf003a00002002410c6a200441016a3602000c700b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d73200441017422062005200620054b1b22064100480d730240024020040d00024020060d00410121050c020b2006103322050d010c7a0b2002280204210520042006460d0020052004200610372205450d750b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d0003a00002002410c6a200441016a3602000c6f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d72200441017422062005200620054b1b22064100480d720240024020040d00024020060d00410121050c020b2006103322050d010c790b2002280204210520042006460d0020052004200610372205450d740b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d1003a00002002410c6a200441016a3602000c6e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d71200441017422062005200620054b1b22064100480d710240024020040d00024020060d00410121050c020b2006103322050d010c780b2002280204210520042006460d0020052004200610372205450d730b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d2003a00002002410c6a200441016a3602000c6d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d70200441017422062005200620054b1b22064100480d700240024020040d00024020060d00410121050c020b2006103322050d010c770b2002280204210520042006460d0020052004200610372205450d720b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d3003a00002002410c6a200441016a3602000c6c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6f200441017422062005200620054b1b22064100480d6f0240024020040d00024020060d00410121050c020b2006103322050d010c760b2002280204210520042006460d0020052004200610372205450d710b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d4003a00002002410c6a200441016a3602000c6b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6e200441017422062005200620054b1b22064100480d6e0240024020040d00024020060d00410121050c020b2006103322050d010c750b2002280204210520042006460d0020052004200610372205450d700b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d5003a00002002410c6a200441016a3602000c6a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6d200441017422062005200620054b1b22064100480d6d0240024020040d00024020060d00410121050c020b2006103322050d010c740b2002280204210520042006460d0020052004200610372205450d6f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d6003a00002002410c6a200441016a3602000c690b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6c200441017422062005200620054b1b22064100480d6c0240024020040d00024020060d00410121050c020b2006103322050d010c730b2002280204210520042006460d0020052004200610372205450d6e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d7003a00002002410c6a200441016a3602000c680b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6b200441017422062005200620054b1b22064100480d6b0240024020040d00024020060d00410121050c020b2006103322050d010c720b2002280204210520042006460d0020052004200610372205450d6d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d8003a00002002410c6a200441016a3602000c670b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6a200441017422062005200620054b1b22064100480d6a0240024020040d00024020060d00410121050c020b2006103322050d010c710b2002280204210520042006460d0020052004200610372205450d6c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d9003a00002002410c6a200441016a3602000c660b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d69200441017422062005200620054b1b22064100480d690240024020040d00024020060d00410121050c020b2006103322050d010c700b2002280204210520042006460d0020052004200610372205450d6b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41da003a00002002410c6a200441016a3602000c650b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d68200441017422062005200620054b1b22064100480d680240024020040d00024020060d00410121050c020b2006103322050d010c6f0b2002280204210520042006460d0020052004200610372205450d6a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41db003a00002002410c6a200441016a3602000c640b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d67200441017422062005200620054b1b22064100480d670240024020040d00024020060d00410121050c020b2006103322050d010c6e0b2002280204210520042006460d0020052004200610372205450d690b20022005360204200241086a20063602002002410c6a28020021040b200520046a41dc003a00002002410c6a200441016a3602000c630b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d66200441017422062005200620054b1b22064100480d660240024020040d00024020060d00410121050c020b2006103322050d010c6d0b2002280204210520042006460d0020052004200610372205450d680b20022005360204200241086a20063602002002410c6a28020021040b200520046a41dd003a00002002410c6a200441016a3602000c620b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d65200441017422062005200620054b1b22064100480d650240024020040d00024020060d00410121050c020b2006103322050d010c6c0b2002280204210520042006460d0020052004200610372205450d670b20022005360204200241086a20063602002002410c6a28020021040b200520046a41de003a00002002410c6a200441016a3602000c610b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d64200441017422062005200620054b1b22064100480d640240024020040d00024020060d00410121050c020b2006103322050d010c6b0b2002280204210520042006460d0020052004200610372205450d660b20022005360204200241086a20063602002002410c6a28020021040b200520046a41df003a00002002410c6a200441016a3602000c600b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d63200441017422062005200620054b1b22064100480d630240024020040d00024020060d00410121050c020b2006103322050d010c6a0b2002280204210520042006460d0020052004200610372205450d650b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e0003a00002002410c6a200441016a3602000c5f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d62200441017422062005200620054b1b22064100480d620240024020040d00024020060d00410121050c020b2006103322050d010c690b2002280204210520042006460d0020052004200610372205450d640b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e1003a00002002410c6a200441016a3602000c5e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d61200441017422062005200620054b1b22064100480d610240024020040d00024020060d00410121050c020b2006103322050d010c680b2002280204210520042006460d0020052004200610372205450d630b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e2003a00002002410c6a200441016a3602000c5d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d60200441017422062005200620054b1b22064100480d600240024020040d00024020060d00410121050c020b2006103322050d010c670b2002280204210520042006460d0020052004200610372205450d620b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e3003a00002002410c6a200441016a3602000c5c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5f200441017422062005200620054b1b22064100480d5f0240024020040d00024020060d00410121050c020b2006103322050d010c660b2002280204210520042006460d0020052004200610372205450d610b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e4003a00002002410c6a200441016a3602000c5b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5e200441017422062005200620054b1b22064100480d5e0240024020040d00024020060d00410121050c020b2006103322050d010c650b2002280204210520042006460d0020052004200610372205450d600b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e5003a00002002410c6a200441016a3602000c5a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5d200441017422062005200620054b1b22064100480d5d0240024020040d00024020060d00410121050c020b2006103322050d010c640b2002280204210520042006460d0020052004200610372205450d5f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e6003a00002002410c6a200441016a3602000c590b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d00024020060d00410121050c020b2006103322050d010c630b2002280204210520042006460d0020052004200610372205450d5e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e7003a00002002410c6a200441016a3602000c580b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d00024020060d00410121050c020b2006103322050d010c620b2002280204210520042006460d0020052004200610372205450d5d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e8003a00002002410c6a200441016a3602000c570b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5a200441017422062005200620054b1b22064100480d5a0240024020040d00024020060d00410121050c020b2006103322050d010c610b2002280204210520042006460d0020052004200610372205450d5c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e9003a00002002410c6a200441016a3602000c560b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d59200441017422062005200620054b1b22064100480d590240024020040d00024020060d00410121050c020b2006103322050d010c600b2002280204210520042006460d0020052004200610372205450d5b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ea003a00002002410c6a200441016a3602000c550b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d58200441017422062005200620054b1b22064100480d580240024020040d00024020060d00410121050c020b2006103322050d010c5f0b2002280204210520042006460d0020052004200610372205450d5a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41eb003a00002002410c6a200441016a3602000c540b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d57200441017422062005200620054b1b22064100480d570240024020040d00024020060d00410121050c020b2006103322050d010c5e0b2002280204210520042006460d0020052004200610372205450d590b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ec003a00002002410c6a200441016a3602000c530b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d56200441017422062005200620054b1b22064100480d560240024020040d00024020060d00410121050c020b2006103322050d010c5d0b2002280204210520042006460d0020052004200610372205450d580b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ed003a00002002410c6a200441016a3602000c520b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d55200441017422062005200620054b1b22064100480d550240024020040d00024020060d00410121050c020b2006103322050d010c5c0b2002280204210520042006460d0020052004200610372205450d570b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ee003a00002002410c6a200441016a3602000c510b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d54200441017422062005200620054b1b22064100480d540240024020040d00024020060d00410121050c020b2006103322050d010c5b0b2002280204210520042006460d0020052004200610372205450d560b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ef003a00002002410c6a200441016a3602000c500b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d53200441017422062005200620054b1b22064100480d530240024020040d00024020060d00410121050c020b2006103322050d010c5a0b2002280204210520042006460d0020052004200610372205450d550b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f0003a00002002410c6a200441016a3602000c4f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d52200441017422062005200620054b1b22064100480d520240024020040d00024020060d00410121050c020b2006103322050d010c590b2002280204210520042006460d0020052004200610372205450d540b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f1003a00002002410c6a200441016a3602000c4e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d51200441017422062005200620054b1b22064100480d510240024020040d00024020060d00410121050c020b2006103322050d010c580b2002280204210520042006460d0020052004200610372205450d530b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f2003a00002002410c6a200441016a3602000c4d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d50200441017422062005200620054b1b22064100480d500240024020040d00024020060d00410121050c020b2006103322050d010c570b2002280204210520042006460d0020052004200610372205450d520b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f3003a00002002410c6a200441016a3602000c4c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4f200441017422062005200620054b1b22064100480d4f0240024020040d00024020060d00410121050c020b2006103322050d010c560b2002280204210520042006460d0020052004200610372205450d510b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f4003a00002002410c6a200441016a3602000c4b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4e200441017422062005200620054b1b22064100480d4e0240024020040d00024020060d00410121050c020b2006103322050d010c550b2002280204210520042006460d0020052004200610372205450d500b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f5003a00002002410c6a200441016a3602000c4a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4d200441017422062005200620054b1b22064100480d4d0240024020040d00024020060d00410121050c020b2006103322050d010c540b2002280204210520042006460d0020052004200610372205450d4f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f6003a00002002410c6a200441016a3602000c490b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4c200441017422062005200620054b1b22064100480d4c0240024020040d00024020060d00410121050c020b2006103322050d010c530b2002280204210520042006460d0020052004200610372205450d4e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f7003a00002002410c6a200441016a3602000c480b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4b200441017422062005200620054b1b22064100480d4b0240024020040d00024020060d00410121050c020b2006103322050d010c520b2002280204210520042006460d0020052004200610372205450d4d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f8003a00002002410c6a200441016a3602000c470b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4a200441017422062005200620054b1b22064100480d4a0240024020040d00024020060d00410121050c020b2006103322050d010c510b2002280204210520042006460d0020052004200610372205450d4c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f9003a00002002410c6a200441016a3602000c460b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d49200441017422062005200620054b1b22064100480d490240024020040d00024020060d00410121050c020b2006103322050d010c500b2002280204210520042006460d0020052004200610372205450d4b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fa003a00002002410c6a200441016a3602000c450b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d48200441017422062005200620054b1b22064100480d480240024020040d00024020060d00410121050c020b2006103322050d010c4f0b2002280204210520042006460d0020052004200610372205450d4a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fb003a00002002410c6a200441016a3602000c440b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d47200441017422062005200620054b1b22064100480d470240024020040d00024020060d00410121050c020b2006103322050d010c4e0b2002280204210520042006460d0020052004200610372205450d490b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fc003a00002002410c6a200441016a3602000c430b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d46200441017422062005200620054b1b22064100480d460240024020040d00024020060d00410121050c020b2006103322050d010c4d0b2002280204210520042006460d0020052004200610372205450d480b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fd003a00002002410c6a200441016a3602000c420b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d45200441017422062005200620054b1b22064100480d450240024020040d00024020060d00410121050c020b2006103322050d010c4c0b2002280204210520042006460d0020052004200610372205450d470b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fe003a00002002410c6a200441016a3602000c410b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d44200441017422062005200620054b1b22064100480d440240024020040d00024020060d00410121050c020b2006103322050d010c4b0b2002280204210520042006460d0020052004200610372205450d460b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ff003a00002002410c6a200441016a3602000c400b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d43200441017422062005200620054b1b22064100480d430240024020040d00024020060d00410121050c020b2006103322050d010c4a0b2002280204210520042006460d0020052004200610372205450d450b20022005360204200241086a20063602002002410c6a28020021040b200520046a4180013a00002002410c6a200441016a3602000c3f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d42200441017422062005200620054b1b22064100480d420240024020040d00024020060d00410121050c020b2006103322050d010c490b2002280204210520042006460d0020052004200610372205450d440b20022005360204200241086a20063602002002410c6a28020021040b200520046a4181013a00002002410c6a200441016a3602000c3e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d41200441017422062005200620054b1b22064100480d410240024020040d00024020060d00410121050c020b2006103322050d010c480b2002280204210520042006460d0020052004200610372205450d430b20022005360204200241086a20063602002002410c6a28020021040b200520046a4182013a00002002410c6a200441016a3602000c3d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d40200441017422062005200620054b1b22064100480d400240024020040d00024020060d00410121050c020b2006103322050d010c470b2002280204210520042006460d0020052004200610372205450d420b20022005360204200241086a20063602002002410c6a28020021040b200520046a4183013a00002002410c6a200441016a3602000c3c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3f200441017422062005200620054b1b22064100480d3f0240024020040d00024020060d00410121050c020b2006103322050d010c460b2002280204210520042006460d0020052004200610372205450d410b20022005360204200241086a20063602002002410c6a28020021040b200520046a4184013a00002002410c6a200441016a3602000c3b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3e200441017422062005200620054b1b22064100480d3e0240024020040d00024020060d00410121050c020b2006103322050d010c450b2002280204210520042006460d0020052004200610372205450d400b20022005360204200241086a20063602002002410c6a28020021040b200520046a4185013a00002002410c6a200441016a3602000c3a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d00024020060d00410121050c020b2006103322050d010c440b2002280204210520042006460d0020052004200610372205450d3f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4186013a00002002410c6a200441016a3602000c390b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d00024020060d00410121050c020b2006103322050d010c430b2002280204210520042006460d0020052004200610372205450d3e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4187013a00002002410c6a200441016a3602000c380b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d00024020060d00410121050c020b2006103322050d010c420b2002280204210520042006460d0020052004200610372205450d3d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4188013a00002002410c6a200441016a3602000c370b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d00024020060d00410121050c020b2006103322050d010c410b2002280204210520042006460d0020052004200610372205450d3c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4189013a00002002410c6a200441016a3602000c360b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d00024020060d00410121050c020b2006103322050d010c400b2002280204210520042006460d0020052004200610372205450d3c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418a013a00002002410c6a200441016a3602000c350b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d00024020060d00410121050c020b2006103322050d010c3f0b2002280204210520042006460d0020052004200610372205450d3b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418b013a00002002410c6a200441016a3602000c340b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3a200441017422062005200620054b1b22064100480d3a0240024020040d00024020060d00410121050c020b2006103322050d010c3e0b2002280204210520042006460d0020052004200610372205450d3a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418c013a00002002410c6a200441016a3602000c330b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d39200441017422062005200620054b1b22064100480d390240024020040d00024020060d00410121050c020b2006103322050d010c3d0b2002280204210520042006460d0020052004200610372205450d390b20022005360204200241086a20063602002002410c6a28020021040b200520046a418d013a00002002410c6a200441016a3602000c320b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d38200441017422062005200620054b1b22064100480d380240024020040d00024020060d00410121050c020b2006103322050d010c3c0b2002280204210520042006460d0020052004200610372205450d380b20022005360204200241086a20063602002002410c6a28020021040b200520046a418e013a00002002410c6a200441016a3602000c310b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d37200441017422062005200620054b1b22064100480d370240024020040d00024020060d00410121050c020b2006103322050d010c3b0b2002280204210520042006460d0020052004200610372205450d370b20022005360204200241086a20063602002002410c6a28020021040b200520046a418f013a00002002410c6a200441016a3602000c300b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d36200441017422062005200620054b1b22064100480d360240024020040d00024020060d00410121050c020b2006103322050d010c3a0b2002280204210520042006460d0020052004200610372205450d360b20022005360204200241086a20063602002002410c6a28020021040b200520046a4190013a00002002410c6a200441016a3602000c2f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d35200441017422062005200620054b1b22064100480d350240024020040d00024020060d00410121050c020b2006103322050d010c390b2002280204210520042006460d0020052004200610372205450d350b20022005360204200241086a20063602002002410c6a28020021040b200520046a4191013a00002002410c6a200441016a3602000c2e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d34200441017422062005200620054b1b22064100480d340240024020040d00024020060d00410121050c020b2006103322050d010c380b2002280204210520042006460d0020052004200610372205450d340b20022005360204200241086a20063602002002410c6a28020021040b200520046a4192013a00002002410c6a200441016a3602000c2d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d33200441017422062005200620054b1b22064100480d330240024020040d00024020060d00410121050c020b2006103322050d010c370b2002280204210520042006460d0020052004200610372205450d330b20022005360204200241086a20063602002002410c6a28020021040b200520046a4193013a00002002410c6a200441016a3602000c2c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d32200441017422062005200620054b1b22064100480d320240024020040d00024020060d00410121050c020b2006103322050d010c360b2002280204210520042006460d0020052004200610372205450d320b20022005360204200241086a20063602002002410c6a28020021040b200520046a4194013a00002002410c6a200441016a3602000c2b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d31200441017422062005200620054b1b22064100480d310240024020040d00024020060d00410121050c020b2006103322050d010c350b2002280204210520042006460d0020052004200610372205450d310b20022005360204200241086a20063602002002410c6a28020021040b200520046a4195013a00002002410c6a200441016a3602000c2a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d30200441017422062005200620054b1b22064100480d300240024020040d00024020060d00410121050c020b2006103322050d010c340b2002280204210520042006460d0020052004200610372205450d300b20022005360204200241086a20063602002002410c6a28020021040b200520046a4196013a00002002410c6a200441016a3602000c290b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2f200441017422062005200620054b1b22064100480d2f0240024020040d00024020060d00410121050c020b2006103322050d010c330b2002280204210520042006460d0020052004200610372205450d2f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4197013a00002002410c6a200441016a3602000c280b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2e200441017422062005200620054b1b22064100480d2e0240024020040d00024020060d00410121050c020b2006103322050d010c320b2002280204210520042006460d0020052004200610372205450d2e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4198013a00002002410c6a200441016a3602000c270b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2d200441017422062005200620054b1b22064100480d2d0240024020040d00024020060d00410121050c020b2006103322050d010c310b2002280204210520042006460d0020052004200610372205450d2d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4199013a00002002410c6a200441016a3602000c260b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2c200441017422062005200620054b1b22064100480d2c0240024020040d00024020060d00410121050c020b2006103322050d010c300b2002280204210520042006460d0020052004200610372205450d2c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419a013a00002002410c6a200441016a3602000c250b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2b200441017422062005200620054b1b22064100480d2b0240024020040d00024020060d00410121050c020b2006103322050d010c2f0b2002280204210520042006460d0020052004200610372205450d2b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419b013a00002002410c6a200441016a3602000c240b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2a200441017422062005200620054b1b22064100480d2a0240024020040d00024020060d00410121050c020b2006103322050d010c2d0b2002280204210520042006460d0020052004200610372205450d2a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419c013a00002002410c6a200441016a3602000c230b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d29200441017422062005200620054b1b22064100480d290240024020040d00024020060d00410121050c020b200610332205450d2c0c010b2002280204210520042006460d0020052004200610372205450d290b20022005360204200241086a20063602002002410c6a28020021040b200520046a419d013a00002002410c6a200441016a3602000c220b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d28200441017422062005200620054b1b22064100480d280240024020040d00024020060d00410121050c020b200610332205450d2b0c010b2002280204210520042006460d0020052004200610372205450d280b20022005360204200241086a20063602002002410c6a28020021040b200520046a419e013a00002002410c6a200441016a3602000c210b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d27200441017422062005200620054b1b22064100480d270240024020040d00024020060d00410121050c020b200610332205450d2a0c010b2002280204210520042006460d0020052004200610372205450d270b20022005360204200241086a20063602002002410c6a28020021040b200520046a419f013a00002002410c6a200441016a3602000c200b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d26200441017422062005200620054b1b22064100480d260240024020040d00024020060d00410121050c020b200610332205450d290c010b2002280204210520042006460d0020052004200610372205450d260b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a0013a00002002410c6a200441016a3602000c1f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d25200441017422062005200620054b1b22064100480d250240024020040d00024020060d00410121050c020b200610332205450d280c010b2002280204210520042006460d0020052004200610372205450d250b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a1013a00002002410c6a200441016a3602000c1e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d24200441017422062005200620054b1b22064100480d240240024020040d00024020060d00410121050c020b200610332205450d270c010b2002280204210520042006460d0020052004200610372205450d240b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a2013a00002002410c6a200441016a3602000c1d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d23200441017422062005200620054b1b22064100480d230240024020040d00024020060d00410121050c020b200610332205450d260c010b2002280204210520042006460d0020052004200610372205450d230b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a3013a00002002410c6a200441016a3602000c1c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d22200441017422062005200620054b1b22064100480d220240024020040d00024020060d00410121050c020b200610332205450d250c010b2002280204210520042006460d0020052004200610372205450d220b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a4013a00002002410c6a200441016a3602000c1b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d21200441017422062005200620054b1b22064100480d210240024020040d00024020060d00410121050c020b200610332205450d240c010b2002280204210520042006460d0020052004200610372205450d210b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a5013a00002002410c6a200441016a3602000c1a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d20200441017422062005200620054b1b22064100480d200240024020040d00024020060d00410121050c020b200610332205450d230c010b2002280204210520042006460d0020052004200610372205450d200b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a6013a00002002410c6a200441016a3602000c190b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1f200441017422062005200620054b1b22064100480d1f0240024020040d00024020060d00410121050c020b200610332205450d220c010b2002280204210520042006460d0020052004200610372205450d1f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a7013a00002002410c6a200441016a3602000c180b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1e200441017422062005200620054b1b22064100480d1e0240024020040d00024020060d00410121050c020b200610332205450d210c010b2002280204210520042006460d0020052004200610372205450d1e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a8013a00002002410c6a200441016a3602000c170b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1d200441017422062005200620054b1b22064100480d1d0240024020040d00024020060d00410121050c020b200610332205450d200c010b2002280204210520042006460d0020052004200610372205450d1d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a9013a00002002410c6a200441016a3602000c160b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1c200441017422062005200620054b1b22064100480d1c0240024020040d00024020060d00410121050c020b200610332205450d1f0c010b2002280204210520042006460d0020052004200610372205450d1c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41aa013a00002002410c6a200441016a3602000c150b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1b200441017422062005200620054b1b22064100480d1b0240024020040d00024020060d00410121050c020b200610332205450d1e0c010b2002280204210520042006460d0020052004200610372205450d1b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ab013a00002002410c6a200441016a3602000c140b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1a200441017422062005200620054b1b22064100480d1a0240024020040d00024020060d00410121050c020b200610332205450d1d0c010b2002280204210520042006460d0020052004200610372205450d1a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ac013a00002002410c6a200441016a3602000c130b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d19200441017422062005200620054b1b22064100480d190240024020040d00024020060d00410121050c020b200610332205450d1c0c010b2002280204210520042006460d0020052004200610372205450d190b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ad013a00002002410c6a200441016a3602000c120b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d18200441017422062005200620054b1b22064100480d180240024020040d00024020060d00410121050c020b200610332205450d1b0c010b2002280204210520042006460d0020052004200610372205450d180b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ae013a00002002410c6a200441016a3602000c110b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d17200441017422062005200620054b1b22064100480d170240024020040d00024020060d00410121050c020b200610332205450d1a0c010b2002280204210520042006460d0020052004200610372205450d170b20022005360204200241086a20063602002002410c6a28020021040b200520046a41af013a00002002410c6a200441016a3602000c100b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d16200441017422062005200620054b1b22064100480d160240024020040d00024020060d00410121050c020b200610332205450d190c010b2002280204210520042006460d0020052004200610372205450d160b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b0013a00002002410c6a200441016a3602000c0f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d15200441017422062005200620054b1b22064100480d150240024020040d00024020060d00410121050c020b200610332205450d180c010b2002280204210520042006460d0020052004200610372205450d150b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b1013a00002002410c6a200441016a3602000c0e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d00024020060d00410121050c020b200610332205450d170c010b2002280204210520042006460d0020052004200610372205450d140b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b2013a00002002410c6a200441016a3602000c0d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d00024020060d00410121050c020b200610332205450d160c010b2002280204210520042006460d0020052004200610372205450d130b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b3013a00002002410c6a200441016a3602000c0c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d00024020060d00410121050c020b200610332205450d150c010b2002280204210520042006460d0020052004200610372205450d120b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b4013a00002002410c6a200441016a3602000c0b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d11200441017422062005200620054b1b22064100480d110240024020040d00024020060d00410121050c020b200610332205450d140c010b2002280204210520042006460d0020052004200610372205450d110b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b5013a00002002410c6a200441016a3602000c0a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d10200441017422062005200620054b1b22064100480d100240024020040d00024020060d00410121050c020b200610332205450d130c010b2002280204210520042006460d0020052004200610372205450d100b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b6013a00002002410c6a200441016a3602000c090b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0f200441017422062005200620054b1b22064100480d0f0240024020040d00024020060d00410121050c020b200610332205450d120c010b2002280204210520042006460d0020052004200610372205450d0f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b7013a00002002410c6a200441016a3602000c080b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0e200441017422062005200620054b1b22064100480d0e0240024020040d00024020060d00410121050c020b200610332205450d110c010b2002280204210520042006460d0020052004200610372205450d0e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b8013a00002002410c6a200441016a3602000c070b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0d200441017422062005200620054b1b22064100480d0d0240024020040d00024020060d00410121050c020b200610332205450d100c010b2002280204210520042006460d0020052004200610372205450d0d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b9013a00002002410c6a200441016a3602000c060b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0c200441017422062005200620054b1b22064100480d0c0240024020040d00024020060d00410121050c020b200610332205450d0f0c010b2002280204210520042006460d0020052004200610372205450d0c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ba013a00002002410c6a200441016a3602000c050b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0b200441017422062005200620054b1b22064100480d0b0240024020040d00024020060d00410121050c020b200610332205450d0e0c010b2002280204210520042006460d0020052004200610372205450d0b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bb013a00002002410c6a200441016a3602000c040b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0a200441017422062005200620054b1b22064100480d0a0240024020040d00024020060d00410121050c020b200610332205450d0d0c010b2002280204210520042006460d0020052004200610372205450d0a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bc013a00002002410c6a200441016a3602000c030b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d09200441017422062005200620054b1b22064100480d090240024020040d00024020060d00410121050c020b200610332205450d0c0c010b2002280204210520042006460d0020052004200610372205450d090b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bd013a00002002410c6a200441016a3602000c020b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d08200441017422062005200620054b1b22064100480d080240024020040d00024020060d00410121050c020b200610332205450d0b0c010b2002280204210520042006460d0020052004200610372205450d080b20022005360204200241086a20063602002002410c6a28020021040b200520046a41be013a00002002410c6a200441016a3602000c010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d07200441017422062005200620054b1b22064100480d070240024020040d00024020060d00410121050c020b200610332205450d0a0c010b2002280204210520042006460d0020052004200610372205450d070b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bf013a00002002410c6a200441016a3602000b2000411f3a000020012d00004109470d090240200141046a280200220228020441ffffffff0371450d0020022802001035200128020421020b200210350c090b103e000b103e000b103e000b103c000b103c000b103e000b103c000b103c000b20002004290200370200200041086a200441086a29020037020020012d00004109470d000240200141046a280200220228020441ffffffff0371450d0020022802001035200128020421020b200210350b200341106a24000f0b103c000bd80301057f2004410c6a22052802002106200441086a21070240024003400240024020072802002006460d00200428020421080c010b200641016a22082006490d02200641017422092008200920084b1b22094100480d020240024020060d00024020090d00410121080c020b2009103322080d010c050b2004280204210820062009460d0020082006200910372208450d040b2004200836020420072009360200200528020021060b200820066a200141807f72200141ff0071200141077622081b3a00002005200641016a22063602002008210120080d000b024020022003460d00200441086a21052004410c6a210703402002280200210103400240024020052802002006460d00200428020421080c010b200641016a22082006490d04200641017422092008200920084b1b22094100480d040240024020060d00024020090d00410121080c020b200910332208450d070c010b2004280204210820062009460d0020082006200910372208450d060b2004200836020420052009360200200728020021060b200820066a200141807f72200141ff0071200141077622081b3a00002007200641016a22063602002008210120080d000b200241046a22022003470d000b0b2000411f3a00000f0b103e000b103c000bdb0301067f024002400240024020014107752203200141c00071220472452003417f4720044572470d002002410c6a28020021040c010b2002410c6a22052802002104200241086a210603400240024020062802002004460d00200228020421070c010b200441016a22072004490d03200441017422082007200820074b1b22084100480d030240024020040d00024020080d00410121070c020b2008103322070d010c060b2002280204210720042008460d0020072004200810372207450d050b2002200736020420062008360200200528020021040b200720046a200141807f723a00002005200441016a2204360200200341c000712107200321012003410775220821032008200772452008417f4720074572470d000b0b02400240200241086a2802002004460d00200228020421030c010b200441016a22032004490d01200441017422072003200720034b1b22074100480d010240024020040d00024020070d00410121030c020b200710332203450d040c010b2002280204210320042007460d0020032004200710372203450d030b20022003360204200241086a20073602002002410c6a28020021040b200320046a200141ff00713a00002000411f3a00002002410c6a200441016a3602000f0b103e000b103c000bdf0302017e067f024002400240024020014207872203502001a7220441c00071452205712003427f52200572470d002002410c6a28020021050c010b2002410c6a22062802002105200241086a210703400240024020072802002005460d00200228020421080c010b200541016a22082005490d03200541017422092008200920084b1b22094100480d030240024020050d00024020090d00410121080c020b2009103322080d010c060b2002280204210820052009460d0020082005200910372208450d050b2002200836020420072009360200200628020021050b200820056a200441807f723a00002006200541016a22053602002003a72104200342078722012103200150200441c00071452208712001427f52200872470d000b0b02400240200241086a2802002005460d00200228020421080c010b200541016a22082005490d01200541017422092008200920084b1b22094100480d010240024020050d00024020090d00410121080c020b200910332208450d040c010b2002280204210820052009460d0020082005200910372208450d030b20022008360204200241086a20093602002002410c6a28020021050b200820056a200441ff00713a00002000411f3a00002002410c6a200541016a3602000f0b103e000b103c000bc40301077f230041d0006b22022400410021032002410036021020024208370308200241c1006a220441076a210541082106024002400340200241386a200110a807200220042900003703282002200529000037002f20022d0040210720022802384101460d012002200229002f37001f200220022903283703182002200229001f37003f2002200229031837033802402003200228020c470d00200241086a200310a90720022802082106200228021021030b200620034104746a220820073a000020082002290338370001200841086a200229003f3700002002200341016a2203360210200741ff01714106470d000b20002002290308370204200041003602002000410c6a200241106a2802003602000c010b2000200228023c3602042000200229032837000920004101360200200041086a20073a0000200041106a200228002f36000002402003450d0020034104742107200621030340024020032d00004109470d000240200341046a2201280200220828020441ffffffff0371450d0020082802001035200128020021080b200810350b200341106a2103200741706a22070d000b0b200228020c41ffffffff0071450d00200610350b200241d0006a24000bc1ba0102097f017e230041f0006b2202240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012802082203200128020c2204460d00200441016a22052004490dab0120032005490dac012001280200220620046a2d000021072001410c6a22082005360200200741bf014b0d0120070ec001b402b402020304b402010101010105060708090a0b01010101010101010c0d010101010e0f101112010101131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01b4020b200241013a0048200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a1041200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000cb6020b2000410b3a000420004101360200200041056a20073a00000cb5020b024002400240024002400240024020032005460d00200441026a21092005417f460db10120032009490db201200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410221070cb9020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a1041200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb8020b4101210a410221070cb4020b4102210a410221070cb3020b4103210a0b410221070cb1020b024002400240024002400240024020032005460d00200441026a21092005417f460db20120032009490db301200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410321070cb8020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a1041200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb7020b4101210a410321070cb3020b4102210a410321070cb2020b4103210a0b410321070cb0020b024002400240024002400240024020032005460d00200441026a21092005417f460db30120032009490db401200620056a2c00002101200820093602004100210a0240200141004e0d00411921090c020b0240200141017441807f71200172220141ff0171220541847e6a220941034d0d0041062109200541c001470d034104210a410421070cb7020b20090e0405040306050b200241013a0047200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c7006a360238200241c8006a200241d8006a1041200241326a200241d0006a2802003601002002200229034837012a2002200229012837031820022002412e6a29010037011e410521090b2002200229011e37010e200220022903183703080b200020013a0005200020093a000420002002290308370106200041013602002000410c6a200229010e3701000cb6020b4101210a410421070cb2020b4102210a410421070cb1020b4103210a0b410421070caf020b410621070cae020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df701200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410721070caf020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cb0020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460daf012003200541016a2207490df701200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410821070cae020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000caf020b200241d8006a200110ab07200241d8006a410c6a2802002109200241d8006a41086a2802002107200228025c210420022802584101460daf012002410036026020024204370358200241d8006a4100200941027422034102751086012002280260210602402009450d002003417c6a410276210a200228025820064102746a210920042105034020092005280200360200200941046a2109200541046a21052003417c6a22030d000b2006200a6a41016a21060b200220063602600240200741ffffffff0371450d00200410350b2002280258210a0240200228025c22092006460d0020092006490dad012009450d002009410274220520064102742209460d00024020090d00024020050d004104210a0c020b200a10354104210a0c010b200a200520091037220a450dae010b410021094100210402400240034002402009411f4d0d00410f21010c030b20012802082207200128020c2205460d01200541016a22032005490db10120072003490df701200128020020056a2d0000210520082003360200200541ff00712009411f71742004722104200941076a21092005418001710d000b024020094120490d00410d21012005410f4b0d020b410c10332209450daf0120092004360208200920063602042009200a360200410921070cad020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a280200360200200641ffffffff0371450dae02200a10350cae020b410a21070caa020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db1012003200541016a2207490df601200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410b21070cab020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cac020b410021014100210902400240024002400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db4012003200541016a2204490df901200620056a2d0000210720082004360200200741ff00712001411f71742009722109200141076a2101200421052007418001710d000b024020014120490d00410d21012007410f4b0d020b20032004460d03200441016a22012004490db401200320014f0d022001200341c0fdcb001058000b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000cae020b200620046a2d000021052008200136020020050d01410c21074100210a0caa020b200241013a0048200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a1041200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000cac020b200041163a000420004101360200200041056a20053a00000cab020b410d21070ca7020b410e21070ca6020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b410f21070ca7020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca8020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411021070ca6020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca7020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411121070ca5020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca6020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411221070ca4020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca5020b410021014100210902400240034002402001411f4d0d00410f21010c030b20032005460d012005417f460db0012003200541016a2207490df401200620056a2d0000210420082007360200200441ff00712001411f71742009722109200141076a2101200721052004418001710d000b024020014120490d00410d21012004410f4b0d020b411321070ca3020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca4020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db20120032001490df601200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db3012003200141016a2207490df701200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411421070ca4020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca5020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca3020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db30120032001490df701200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db4012003200141016a2207490df801200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411521070ca3020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca4020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca2020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db40120032001490df801200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db5012003200141016a2207490df901200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411621070ca2020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca3020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca1020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db50120032001490df901200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db6012003200141016a2207490dfa01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411721070ca1020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca2020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000ca0020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db60120032001490dfa01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db7012003200141016a2207490dfb01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411821070ca0020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca1020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9f020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db70120032001490dfb01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db8012003200141016a2207490dfc01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411921070c9f020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000ca0020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9e020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db80120032001490dfc01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460db9012003200141016a2207490dfd01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411a21070c9e020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9f020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9d020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450db90120032001490dfd01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dba012003200141016a2207490dfe01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411b21070c9d020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9e020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9c020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dba0120032001490dfe01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbb012003200141016a2207490dff01200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411c21070c9c020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9d020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9b020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbb0120032001490dff01200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbc012003200141016a2207490d8002200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411d21070c9b020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282103200228022c210520022802302109410521010b2000200136020420004101360200200041106a20093602002000410c6a2005360200200041086a20033602000c9c020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c9a020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbc0120032001490d8002200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbd012003200141016a2207490d8102200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411e21070c9a020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c9b020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c99020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbd0120032001490d8102200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbe012003200141016a2207490d8202200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b411f21070c99020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c9a020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c98020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbe0120032001490d8202200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dbf012003200141016a2207490d8302200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b41202107024020054120490d00410d21012004410f4b0d040b200aad210b0c98020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c99020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c97020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dbf0120032001490d8302200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc0012003200141016a2207490d8402200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412121070c97020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c98020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c96020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc00120032001490d8402200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc1012003200141016a2207490d8502200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412221070c96020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c97020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c95020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc10120032001490d8502200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc2012003200141016a2207490d8602200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412321070c95020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c96020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c94020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc20120032001490d8602200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc3012003200141016a2207490d8702200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412421070c94020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c95020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c93020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc30120032001490d8702200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc4012003200141016a2207490d8802200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412521070c93020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c94020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c92020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc40120032001490d8802200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc5012003200141016a2207490d8902200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412621070c92020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c93020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c91020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc50120032001490d8902200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc6012003200141016a2207490d8a02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412721070c91020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c92020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c90020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc60120032001490d8a02200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc7012003200141016a2207490d8b02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412821070c90020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c91020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8f020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc70120032001490d8b02200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc8012003200141016a2207490d8c02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412921070c8f020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c90020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8e020b410120036b2107200441026a210141002105410021090240024002400240034002402005411f4d0d00410f21010c030b200720016a4102460d012001450dc80120032001490d8c02200620016a417f6a2d0000210420082001360200200441ff00712005411f71742009722109200141016a2101200541076a21052004418001710d000b024020054120490d002004410f4d0d00410d21010c020b2001417f6a2101410021054100210a034002402005411f4d0d00410f21010c050b20032001460d032001417f460dc9012003200141016a2207490d8d02200620016a2d0000210420082007360200200441ff00712005411f7174200a72210a200541076a2105200721012004418001710d000b024020054120490d00410d21012004410f4b0d040b200aad210b412a21070c8e020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120022802282109200228022c210520022802302103410521010b2000200136020420004101360200200041106a20033602002000410c6a2005360200200041086a20093602000c8f020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a1041410521010b2000200136020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8d020b0240024020032005460d00200441026a21012005417f460dc60120032001490dc701200620056a2d000021092008200136020020090d01412b21074100210a0c8b020b200241013a0048200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a1041200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000c8d020b200041153a000420004101360200200041056a20093a00000c8c020b0240024020032005460d00200441026a21012005417f460dc70120032001490dc801200620056a2d000021092008200136020020090d01412c21074100210a0c8a020b200241013a0048200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241c8006a360238200241086a200241d8006a1041200241336a200241106a2802003600002002200229030837002b2002200229002837031820022002412f6a29000037001f200041053a0004200020022903183700052000410c6a200229001f370000200041013602000c8c020b200041153a000420004101360200200041056a20093a00000c8b020b4100210141002109024002400340410d210a2001411f4b0d0220032005460d012005417f460dc9012003200541016a2207490d8902200620056a2c0000210420082007360200200441ff00712001411f71742009722109200141076a21012007210520044100480d000b200441c00071210502402001411f4b0d0020050dca010b02400240024020014120490d0020050d010b200441ff01714108490d0120014120490d0120050d010c030b20044180017241ff017141f801490d020b412d21070c89020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a10414105210a0b2000200a36020420004101360200200041086a2002290328370200200041106a200241286a41086a2802003602000c8a020b4200210b4100210102400340410e21072001413f4b0d890220032005460d012005417f460dc9012003200541016a2209490dca01200620056a2d0000210420082009360200200441ff0071220aad2001413f71ad86200b84210b200141076a21012009210520044118744118752209417f4c0d000b200941c0007121050240024002402001413f4b0d0020050d010b02400240200141c000490d0020050d010b200141c000490d022009450d020c8b020b200a41ff00470d8a020c010b200b428080808080808080807f427f2001413f712201ad862001413f461b84210b0b412e21070c87020b200241013a0008200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241086a360238200241286a200241d8006a10412002290328210b20022802302101410521070c88020b0240200320056b4104490d00200441056a21012005417b4b0dc90120032001490dca01200620056a280000210920082001360200412f21070c86020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a104120004281808080d000370300200041086a2002290328370200200041106a200241286a41086a2802003602000c88020b0240200320056b4108490d00200441096a2101200541774b0dca0120032001490dcb01200620056a290000210b20082001360200413021070c85020b200241013a0018200241ec006a41013602002002420137025c200241acfdcb003602582002413636023c2002200241386a3602682002200241186a360238200241286a200241d8006a10412002290328210b200041106a2002280230360200200041086a200b37020020004281808080d0003703000c87020b413121070c83020b413221070c82020b413321070c81020b413421070c80020b413521070cff010b413621070cfe010b413721070cfd010b413821070cfc010b413921070cfb010b413a21070cfa010b413b21070cf9010b413c21070cf8010b413d21070cf7010b413e21070cf6010b413f21070cf5010b41c00021070cf4010b41c10021070cf3010b41c20021070cf2010b41c30021070cf1010b41c40021070cf0010b41c50021070cef010b41c60021070cee010b41c70021070ced010b41c80021070cec010b41c90021070ceb010b41ca0021070cea010b41cb0021070ce9010b41cc0021070ce8010b41cd0021070ce7010b41ce0021070ce6010b41cf0021070ce5010b41d00021070ce4010b41d10021070ce3010b41d20021070ce2010b41d30021070ce1010b41d40021070ce0010b41d50021070cdf010b41d60021070cde010b41d70021070cdd010b41d80021070cdc010b41d90021070cdb010b41da0021070cda010b41db0021070cd9010b41dc0021070cd8010b41dd0021070cd7010b41de0021070cd6010b41df0021070cd5010b41e00021070cd4010b41e10021070cd3010b41e20021070cd2010b41e30021070cd1010b41e40021070cd0010b41e50021070ccf010b41e60021070cce010b41e70021070ccd010b41e80021070ccc010b41e90021070ccb010b41ea0021070cca010b41eb0021070cc9010b41ec0021070cc8010b41ed0021070cc7010b41ee0021070cc6010b41ef0021070cc5010b41f00021070cc4010b41f10021070cc3010b41f20021070cc2010b41f30021070cc1010b41f40021070cc0010b41f50021070cbf010b41f60021070cbe010b41f70021070cbd010b41f80021070cbc010b41f90021070cbb010b41fa0021070cba010b41fb0021070cb9010b41fc0021070cb8010b41fd0021070cb7010b41fe0021070cb6010b41ff0021070cb5010b41800121070cb4010b41810121070cb3010b41820121070cb2010b41830121070cb1010b41840121070cb0010b41850121070caf010b41860121070cae010b41870121070cad010b41880121070cac010b41890121070cab010b418a0121070caa010b418b0121070ca9010b418c0121070ca8010b418d0121070ca7010b418e0121070ca6010b418f0121070ca5010b41900121070ca4010b41910121070ca3010b41920121070ca2010b41930121070ca1010b41940121070ca0010b41950121070c9f010b41960121070c9e010b41970121070c9d010b41980121070c9c010b41990121070c9b010b419a0121070c9a010b419b0121070c99010b419c0121070c98010b419d0121070c97010b419e0121070c96010b419f0121070c95010b41a00121070c94010b41a10121070c93010b41a20121070c92010b41a30121070c91010b41a40121070c90010b41a50121070c8f010b41a60121070c8e010b41a70121070c8d010b41a80121070c8c010b41a90121070c8b010b41aa0121070c8a010b41ab0121070c89010b417f200541c0fdcb001059000b2005200341c0fdcb001058000b417f200941c0fdcb001059000b2009200341c0fdcb001058000b417f200941c0fdcb001059000b2009200341c0fdcb001058000b417f200941c0fdcb001059000b2009200341c0fdcb001058000b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b41ec80cc00412441c086cc00103f000b103c000b417f200341c0fdcb001059000b200241d8006a41106a28020021012000200436020420004101360200200041106a20013602002000410c6a2009360200200041086a20073602000c7e0b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200541016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b2001200341c0fdcb001058000b417f200141c0fdcb001059000b2001200341c0fdcb001058000b417f200541016a41c0fdcb001059000b2009417f2001411f7174722109412d21070c3f0b417f200541016a41c0fdcb001059000b200541016a200341c0fdcb001058000b2005200141c0fdcb001059000b2001200341c0fdcb001058000b2005200141c0fdcb001059000b2001200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b2003200741c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b200541016a200341c0fdcb001058000b20004100360200200041106a200b3703002000410c6a2009360200200041096a200a3a0000200041086a20073a00000c020b0b200020073a0004200020022f00183b000520004101360200200041106a2001360200200041086a200b370200200041076a2002411a6a2d00003a00000b200241f0006a24000bbb0101027f0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1b220241ffffffff00712002470d00200241047422024100480d00024020010d0020020d02410821030c040b20002802002103200141047422012002460d03024020010d0020020d02410821030c040b20032001200210372203450d020c030b103e000b2002103322030d010b103c000b20002003360200200041046a20024104763602000b0bd30101017f230041106b22022400024002400240024020002d00000e03010200010b2002200128021841a9fecb00410b2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c020b2002200128021841b4fecb00410c2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b2002200128021841c0fecb00410d2001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040b200241106a240020000bff06020c7f017e230041e0006b220224004100210341002104024002400240024002400240034002402003411f4d0d00410f21030c060b20012802082205200128020c2206460d04200641016a22072006490d0120052007490d03200128020020066a2d000021062001200736020c200641ff00712003411f71742004722104200341076a21032006418001710d000b024020034120490d00410d21032006410f4b0d050b410021082002410036021020024204370308024002402004450d00410421094100210a0340200a41016a210a4100210341002105024003404101210b02402003411f4d0d00410f21030c020b024002402001280208220c200128020c2206460d00200641016a22072006490d08200c20074f0d012007200c41c0fdcb001058000b4101210b200241013a00472002410136025c2002420137024c200241acfdcb003602482002413636023c2002200241386a3602582002200241c7006a360238200241286a200241c8006a10414100210d410521030c020b200128020020066a2d000021062001200736020c200641ff00712003411f71742005722105200341076a21032006418001710d000b024020034120490d00410d21032006410f4b0d010b2005410876210d4100210b200521030b200241186a41086a200241286a41086a28020036020020022002290328370318200d410874200341ff0171722103200b0d0202402008200228020c470d00200241086a2008410110860120022802082109200228021021080b200920084102746a20033602002002200841016a2208360210200a2004470d000b0b20002002290308370204200041003602002000410c6a200241106a2802003602000c060b2000200336020420004101360200200041086a2002290318370200200041106a200241186a41086a280200360200200228020c41ffffffff0371450d05200910350c050b417f200741c0fdcb001059000b417f200741c0fdcb001059000b2007200541c0fdcb001058000b200241013a0008200241dc006a41013602002002420137024c200241acfdcb003602482002413636023c2002200241386a3602582002200241086a360238200241286a200241c8006a1041410521030b200241186a41086a200241286a41086a280200220136020020022002290328220e37031820002003360204200041086a200e370200200041106a2001360200200041013602000b200241e0006a24000b9bee0202097f017e230041106b22032400024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020012d00000eac01000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab01000b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dad01200441017422062005200620054b1b22064100480dad010240024020040d00024020060d00410121050c020b2006103322050d010cb9010b2002280204210520042006460d0020052004200610372205450db8010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41003a00002002410c6a200441016a3602000cab010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490dac01200441017422062005200620054b1b22064100480dac010240024020040d00024020060d00410121050c020b200610332205450db8010c010b2002280204210520042006460d0020052004200610372205450db7010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41013a00002002410c6a200441016a3602000caa010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d00024020080d00410121050c020b200810332205450db7010c010b2006280200210520042008460d0020052004200810372205450db6010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41023a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490dab01200441017422082005200820054b1b22084100480dab010240024020040d00024020080d00410121050c020b200810332205450db7010c010b2006280200210520042008460d0020052004200810372205450db6010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca9010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d00024020080d00410121050c020b200810332205450db6010c010b2006280200210520042008460d0020052004200810372205450db5010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41033a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490daa01200441017422082005200820054b1b22084100480daa010240024020040d00024020080d00410121050c020b200810332205450db6010c010b2006280200210520042008460d0020052004200810372205450db5010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca8010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490da901200441017422082005200820054b1b22084100480da9010240024020040d00024020080d00410121050c020b200810332205450db5010c010b2006280200210520042008460d0020052004200810372205450db4010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41043a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490da901200441017422082005200820054b1b22084100480da9010240024020040d00024020080d00410121050c020b200810332205450db5010c010b2006280200210520042008460d0020052004200810372205450db4010b20022005360204200241086a20083602002002410c6a28020021040b200520046a42c0818386fcdffffe7c2007410473ad42078342038688a7413f7141c000723a00002002410c6a200441016a3602000ca7010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da801200441017422062005200620054b1b22064100480da8010240024020040d00024020060d00410121050c020b200610332205450db4010c010b2002280204210520042006460d0020052004200610372205450db3010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41053a00002002410c6a200441016a3602000ca6010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da701200441017422062005200620054b1b22064100480da7010240024020040d00024020060d00410121050c020b200610332205450db3010c010b2002280204210520042006460d0020052004200610372205450db2010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410b3a00002002410c6a200441016a3602000ca5010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d00024020070d00410121060c020b200710332206450db2010c010b2009280200210620042007460d0020062004200710372206450db1010b20022006360204200241086a20073602002002410c6a28020021040b200620046a410c3a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da701200441017422072006200720064b1b22074100480da7010240024020040d00024020070d00410121060c020b200710332206450db3010c010b2009280200210620042007460d0020062004200710372206450db2010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca5010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da501200441017422072006200720064b1b22074100480da5010240024020040d00024020070d00410121060c020b200710332206450db1010c010b2009280200210620042007460d0020062004200710372206450db0010b20022006360204200241086a20073602002002410c6a28020021040b200620046a410d3a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da601200441017422072006200720064b1b22074100480da6010240024020040d00024020070d00410121060c020b200710332206450db2010c010b2009280200210620042007460d0020062004200710372206450db1010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca4010b0b200241046a210902400240200241086a2802002002410c6a2802002204460d00200928020021050c010b200441016a22052004490da401200441017422062005200620054b1b22064100480da4010240024020040d00024020060d00410121050c020b200610332205450db0010c010b2009280200210520042006460d0020052004200610372205450daf010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410e3a00002002410c6a2208200441016a360200200320012802042204280204220520042802002204200420054102746a200210a4072003210420032d0000411f470dab012008280200210420012802042802082105200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da501200441017422072006200720064b1b22074100480da5010240024020040d00024020070d00410121060c020b200710332206450db1010c010b2009280200210620042007460d0020062004200710372206450db0010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca3010b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da301200441017422062005200620054b1b22064100480da3010240024020040d00024020060d00410121050c020b200610332205450daf010c010b2002280204210520042006460d0020052004200610372205450dae010b20022005360204200241086a20063602002002410c6a28020021040b200520046a410f3a00002002410c6a200441016a3602000ca1010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d00024020070d00410121060c020b200710332206450dae010c010b2009280200210620042007460d0020062004200710372206450dad010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41103a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da301200441017422072006200720064b1b22074100480da3010240024020040d00024020070d00410121060c020b200710332206450daf010c010b2009280200210620042007460d0020062004200710372206450dae010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000ca1010b0b200241046a2109200141046a280200210520012d0001210b02400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490da101200441017422072006200720064b1b22074100480da1010240024020040d00024020070d00410121060c020b200710332206450dad010c010b2009280200210620042007460d0020062004200710372206450dac010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41113a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490da201200441017422072006200720064b1b22074100480da2010240024020040d00024020070d00410121060c020b200710332206450dae010c010b2009280200210620042007460d0020062004200710372206450dad010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000b02400240200241086a2802002004460d00200928020021050c010b200441016a22052004490da101200441017422062005200620054b1b22064100480da1010240024020040d00024020060d00410121050c020b200610332205450dad010c010b2009280200210520042006460d0020052004200610372205450dac010b20022005360204200241086a20063602002002410c6a28020021040b200520046a200b3a00002002410c6a200441016a3602000c9f010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490da001200441017422062005200620054b1b22064100480da0010240024020040d00024020060d00410121050c020b200610332205450dac010c010b2002280204210520042006460d0020052004200610372205450dab010b20022005360204200241086a20063602002002410c6a28020021040b200520046a411a3a00002002410c6a200441016a3602000c9e010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d9f01200441017422062005200620054b1b22064100480d9f010240024020040d00024020060d00410121050c020b200610332205450dab010c010b2002280204210520042006460d0020052004200610372205450daa010b20022005360204200241086a20063602002002410c6a28020021040b200520046a411b3a00002002410c6a200441016a3602000c9d010b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d00024020070d00410121060c020b200710332206450daa010c010b2009280200210620042007460d0020062004200710372206450da9010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41203a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9f01200441017422072006200720064b1b22074100480d9f010240024020040d00024020070d00410121060c020b200710332206450dab010c010b2009280200210620042007460d0020062004200710372206450daa010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9d010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d00024020070d00410121060c020b200710332206450da9010c010b2009280200210620042007460d0020062004200710372206450da8010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41213a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9e01200441017422072006200720064b1b22074100480d9e010240024020040d00024020070d00410121060c020b200710332206450daa010c010b2009280200210620042007460d0020062004200710372206450da9010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9c010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d00024020070d00410121060c020b200710332206450da8010c010b2009280200210620042007460d0020062004200710372206450da7010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41223a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9d01200441017422072006200720064b1b22074100480d9d010240024020040d00024020070d00410121060c020b200710332206450da9010c010b2009280200210620042007460d0020062004200710372206450da8010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9b010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d00024020070d00410121060c020b200710332206450da7010c010b2009280200210620042007460d0020062004200710372206450da6010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41233a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9c01200441017422072006200720064b1b22074100480d9c010240024020040d00024020070d00410121060c020b200710332206450da8010c010b2009280200210620042007460d0020062004200710372206450da7010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c9a010b0b200241046a2109200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200928020021060c010b200441016a22062004490d9a01200441017422072006200720064b1b22074100480d9a010240024020040d00024020070d00410121060c020b200710332206450da6010c010b2009280200210620042007460d0020062004200710372206450da5010b20022006360204200241086a20073602002002410c6a28020021040b200620046a41243a00002002410c6a2208200441016a2204360200200241086a210a034002400240200a2802002004460d00200928020021060c010b200441016a22062004490d9b01200441017422072006200720064b1b22074100480d9b010240024020040d00024020070d00410121060c020b200710332206450da7010c010b2009280200210620042007460d0020062004200710372206450da6010b20022006360204200a2007360200200828020021040b200620046a200541807f72200541ff0071200541077622061b3a00002008200441016a22043602002006210520060d000c99010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d00024020080d00410121070c020b200810332207450da5010c010b200a280200210720042008460d0020072004200810372207450da4010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41283a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9a01200441017422082007200820074b1b22084100480d9a010240024020040d00024020080d00410121070c020b200810332207450da6010c010b200a280200210720042008460d0020072004200810372207450da5010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9a01200441017422072005200720054b1b22074100480d9a010240024020040d00024020070d00410121050c020b200710332205450da6010c010b200a280200210520042007460d0020052004200710372205450da5010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c98010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d00024020080d00410121070c020b200810332207450da4010c010b200a280200210720042008460d0020072004200810372207450da3010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41293a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9901200441017422082007200820074b1b22084100480d99010240024020040d00024020080d00410121070c020b200810332207450da5010c010b200a280200210720042008460d0020072004200810372207450da4010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9901200441017422072006200720064b1b22074100480d99010240024020040d00024020070d00410121060c020b200710332206450da5010c010b200a280200210620042007460d0020062004200710372206450da4010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c97010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d00024020080d00410121070c020b200810332207450da3010c010b200a280200210720042008460d0020072004200810372207450da2010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412a3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9801200441017422082007200820074b1b22084100480d98010240024020040d00024020080d00410121070c020b200810332207450da4010c010b200a280200210720042008460d0020072004200810372207450da3010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9801200441017422072006200720064b1b22074100480d98010240024020040d00024020070d00410121060c020b200710332206450da4010c010b200a280200210620042007460d0020062004200710372206450da3010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c96010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b200810332207450da2010c010b200a280200210720042008460d0020072004200810372207450da1010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412b3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9701200441017422082007200820074b1b22084100480d97010240024020040d00024020080d00410121070c020b200810332207450da3010c010b200a280200210720042008460d0020072004200810372207450da2010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9701200441017422072005200720054b1b22074100480d97010240024020040d00024020070d00410121050c020b200710332205450da3010c010b200a280200210520042007460d0020052004200710372205450da2010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c95010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b200810332207450da1010c010b200a280200210720042008460d0020072004200810372207450da0010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412c3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b200810332207450da2010c010b200a280200210720042008460d0020072004200810372207450da1010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9601200441017422072006200720064b1b22074100480d96010240024020040d00024020070d00410121060c020b200710332206450da2010c010b200a280200210620042007460d0020062004200710372206450da1010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c94010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b200810332207450da0010c010b200a280200210720042008460d0020072004200810372207450d9f010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412d3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9601200441017422082007200820074b1b22084100480d96010240024020040d00024020080d00410121070c020b2008103322070d010c9e010b200a280200210720042008460d0020072004200810372207450d9c010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9601200441017422072006200720064b1b22074100480d96010240024020040d00024020070d00410121060c020b2007103322060d010c9e010b200a280200210620042007460d0020062004200710372206450d9c010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c93010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d00024020080d00410121070c020b2008103322070d010c9c010b200a280200210720042008460d0020072004200810372207450d9a010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412e3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9501200441017422082007200820074b1b22084100480d95010240024020040d00024020080d00410121070c020b2008103322070d010c9d010b200a280200210720042008460d0020072004200810372207450d9b010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9501200441017422072006200720064b1b22074100480d95010240024020040d00024020070d00410121060c020b2007103322060d010c9d010b200a280200210620042007460d0020062004200710372206450d9b010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c92010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d00024020080d00410121070c020b2008103322070d010c9b010b200a280200210720042008460d0020072004200810372207450d99010b20022007360204200241086a20083602002002410c6a28020021040b200720046a412f3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9401200441017422082007200820074b1b22084100480d94010240024020040d00024020080d00410121070c020b2008103322070d010c9c010b200a280200210720042008460d0020072004200810372207450d9a010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9401200441017422072006200720064b1b22074100480d94010240024020040d00024020070d00410121060c020b2007103322060d010c9c010b200a280200210620042007460d0020062004200710372206450d9a010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c91010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d00024020080d00410121070c020b2008103322070d010c9a010b200a280200210720042008460d0020072004200810372207450d98010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41303a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9301200441017422082007200820074b1b22084100480d93010240024020040d00024020080d00410121070c020b2008103322070d010c9b010b200a280200210720042008460d0020072004200810372207450d99010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d9301200441017422072005200720054b1b22074100480d93010240024020040d00024020070d00410121050c020b2007103322050d010c9b010b200a280200210520042007460d0020052004200710372205450d99010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c90010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d00024020080d00410121070c020b2008103322070d010c99010b200a280200210720042008460d0020072004200810372207450d97010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41313a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9201200441017422082007200820074b1b22084100480d92010240024020040d00024020080d00410121070c020b2008103322070d010c9a010b200a280200210720042008460d0020072004200810372207450d98010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9201200441017422072006200720064b1b22074100480d92010240024020040d00024020070d00410121060c020b2007103322060d010c9a010b200a280200210620042007460d0020062004200710372206450d98010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8f010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d00024020080d00410121070c020b2008103322070d010c98010b200a280200210720042008460d0020072004200810372207450d96010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41323a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9101200441017422082007200820074b1b22084100480d91010240024020040d00024020080d00410121070c020b2008103322070d010c99010b200a280200210720042008460d0020072004200810372207450d97010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9101200441017422072006200720064b1b22074100480d91010240024020040d00024020070d00410121060c020b2007103322060d010c99010b200a280200210620042007460d0020062004200710372206450d97010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8e010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d00024020080d00410121070c020b2008103322070d010c97010b200a280200210720042008460d0020072004200810372207450d95010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41333a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d9001200441017422082007200820074b1b22084100480d90010240024020040d00024020080d00410121070c020b2008103322070d010c98010b200a280200210720042008460d0020072004200810372207450d96010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d9001200441017422072006200720064b1b22074100480d90010240024020040d00024020070d00410121060c020b2007103322060d010c98010b200a280200210620042007460d0020062004200710372206450d96010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8d010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d00024020080d00410121070c020b2008103322070d010c96010b200a280200210720042008460d0020072004200810372207450d94010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41343a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8f01200441017422082007200820074b1b22084100480d8f010240024020040d00024020080d00410121070c020b2008103322070d010c97010b200a280200210720042008460d0020072004200810372207450d95010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8f01200441017422072005200720054b1b22074100480d8f010240024020040d00024020070d00410121050c020b2007103322050d010c97010b200a280200210520042007460d0020052004200710372205450d95010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c8c010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d00024020080d00410121070c020b2008103322070d010c95010b200a280200210720042008460d0020072004200810372207450d93010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41353a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8e01200441017422082007200820074b1b22084100480d8e010240024020040d00024020080d00410121070c020b2008103322070d010c96010b200a280200210720042008460d0020072004200810372207450d94010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8e01200441017422072006200720064b1b22074100480d8e010240024020040d00024020070d00410121060c020b2007103322060d010c96010b200a280200210620042007460d0020062004200710372206450d94010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c8b010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d00024020080d00410121070c020b2008103322070d010c94010b200a280200210720042008460d0020072004200810372207450d92010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41363a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8d01200441017422082007200820074b1b22084100480d8d010240024020040d00024020080d00410121070c020b2008103322070d010c95010b200a280200210720042008460d0020072004200810372207450d93010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8d01200441017422072005200720054b1b22074100480d8d010240024020040d00024020070d00410121050c020b2007103322050d010c95010b200a280200210520042007460d0020052004200710372205450d93010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c8a010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d00024020080d00410121070c020b2008103322070d010c93010b200a280200210720042008460d0020072004200810372207450d91010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41373a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8c01200441017422082007200820074b1b22084100480d8c010240024020040d00024020080d00410121070c020b2008103322070d010c94010b200a280200210720042008460d0020072004200810372207450d92010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8c01200441017422072006200720064b1b22074100480d8c010240024020040d00024020070d00410121060c020b2007103322060d010c94010b200a280200210620042007460d0020062004200710372206450d92010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c89010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d00024020080d00410121070c020b2008103322070d010c92010b200a280200210720042008460d0020072004200810372207450d90010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41383a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8b01200441017422082007200820074b1b22084100480d8b010240024020040d00024020080d00410121070c020b2008103322070d010c93010b200a280200210720042008460d0020072004200810372207450d91010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8b01200441017422072005200720054b1b22074100480d8b010240024020040d00024020070d00410121050c020b2007103322050d010c93010b200a280200210520042007460d0020052004200710372205450d91010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c88010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d00024020080d00410121070c020b2008103322070d010c91010b200a280200210720042008460d0020072004200810372207450d8f010b20022007360204200241086a20083602002002410c6a28020021040b200720046a41393a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8a01200441017422082007200820074b1b22084100480d8a010240024020040d00024020080d00410121070c020b2008103322070d010c92010b200a280200210720042008460d0020072004200810372207450d90010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8a01200441017422072006200720064b1b22074100480d8a010240024020040d00024020070d00410121060c020b2007103322060d010c92010b200a280200210620042007460d0020062004200710372206450d90010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c87010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d00024020080d00410121070c020b2008103322070d010c90010b200a280200210720042008460d0020072004200810372207450d8e010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413a3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8901200441017422082007200820074b1b22084100480d89010240024020040d00024020080d00410121070c020b2008103322070d010c91010b200a280200210720042008460d0020072004200810372207450d8f010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8901200441017422072006200720064b1b22074100480d89010240024020040d00024020070d00410121060c020b2007103322060d010c91010b200a280200210620042007460d0020062004200710372206450d8f010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c86010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d00024020080d00410121070c020b2008103322070d010c8f010b200a280200210720042008460d0020072004200810372207450d8d010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413b3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8801200441017422082007200820074b1b22084100480d88010240024020040d00024020080d00410121070c020b2008103322070d010c90010b200a280200210720042008460d0020072004200810372207450d8e010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8801200441017422072006200720064b1b22074100480d88010240024020040d00024020070d00410121060c020b2007103322060d010c90010b200a280200210620042007460d0020062004200710372206450d8e010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c85010b0b200241046a210a200141086a2802002105200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d00024020080d00410121070c020b2008103322070d010c8e010b200a280200210720042008460d0020072004200810372207450d8c010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413c3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8701200441017422082007200820074b1b22084100480d87010240024020040d00024020080d00410121070c020b2008103322070d010c8f010b200a280200210720042008460d0020072004200810372207450d8d010b20022007360204200b2008360200200928020021040b200720046a200641807f72200641ff0071200641077622071b3a00002009200441016a22043602002007210620070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021060c010b200441016a22062004490d8701200441017422072006200720064b1b22074100480d87010240024020040d00024020070d00410121060c020b2007103322060d010c8f010b200a280200210620042007460d0020062004200710372206450d8d010b2002200636020420082007360200200928020021040b200620046a200541807f72200541ff0071200541077622061b3a00002009200441016a22043602002006210520060d000c84010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d00024020080d00410121070c020b2008103322070d010c8d010b200a280200210720042008460d0020072004200810372207450d8b010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413d3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8601200441017422082007200820074b1b22084100480d86010240024020040d00024020080d00410121070c020b2008103322070d010c8e010b200a280200210720042008460d0020072004200810372207450d8c010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8601200441017422072005200720054b1b22074100480d86010240024020040d00024020070d00410121050c020b2007103322050d010c8e010b200a280200210520042007460d0020052004200710372205450d8c010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c83010b0b200241046a210a200141086a2802002106200141046a280200210502400240200241086a2802002002410c6a2802002204460d00200a28020021070c010b200441016a22072004490d8401200441017422082007200820074b1b22084100480d84010240024020040d00024020080d00410121070c020b2008103322070d010c8c010b200a280200210720042008460d0020072004200810372207450d8a010b20022007360204200241086a20083602002002410c6a28020021040b200720046a413e3a00002002410c6a2209200441016a2204360200200241086a210b034002400240200b2802002004460d00200a28020021070c010b200441016a22072004490d8501200441017422082007200820074b1b22084100480d85010240024020040d00024020080d00410121070c020b2008103322070d010c8d010b200a280200210720042008460d0020072004200810372207450d8b010b20022007360204200b2008360200200928020021040b200720046a200541807f72200541ff0071200541077622071b3a00002009200441016a22043602002007210520070d000b200241086a21082002410c6a210903400240024020082802002004460d00200a28020021050c010b200441016a22052004490d8501200441017422072005200720054b1b22074100480d85010240024020040d00024020070d00410121050c020b2007103322050d010c8d010b200a280200210520042007460d0020052004200710372205450d8b010b2002200536020420082007360200200928020021040b200520046a200641807f72200641ff0071200641077622051b3a00002009200441016a22043602002005210620050d000c82010b0b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8b010b2006280200210520042008460d0020052004200810372205450d89010b20022005360204200241086a20083602002002410c6a28020021040b200520046a413f3a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8b010b2006280200210520042008460d0020052004200810372205450d89010b20022005360204200241086a20083602002002410c6a28020021040b200520046a20073a00002002410c6a200441016a3602000c80010b200241046a210620012d0001210702400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8201200441017422082005200820054b1b22084100480d82010240024020040d00024020080d00410121050c020b2008103322050d010c8a010b2006280200210520042008460d0020052004200810372205450d88010b20022005360204200241086a20083602002002410c6a28020021040b200520046a41c0003a00002002410c6a200441016a220436020002400240200241086a2802002004460d00200628020021050c010b200441016a22052004490d8301200441017422082005200820054b1b22084100480d83010240024020040d00024020080d00410121050c020b2008103322050d010c8a010b2006280200210520042008460d0020052004200810372205450d88010b20022005360204200241086a20083602002002410c6a28020021040b200520046a20073a00002002410c6a200441016a3602000c7f0b200141046a280200210602400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8201200441017422072005200720054b1b22074100480d82010240024020040d00024020070d00410121050c020b2007103322050d010c89010b2002280204210520042007460d0020052004200710372205450d84010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c1003a00002002410c6a200441016a36020020032006200210a5072003210420032d0000411f470d87010c7e0b200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d8101200441017422062005200620054b1b22064100480d81010240024020040d00024020060d00410121050c020b2006103322050d010c88010b2002280204210520042006460d0020052004200610372205450d83010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c2003a00002002410c6a200441016a3602002003200c200210a6072003210420032d0000411f470d86010c7d0b200241046a2106200141046a280200210802400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d8001200441017422072005200720054b1b22074100480d80010240024020040d00024020070d00410121050c020b2007103322050d010c87010b2006280200210520042007460d0020052004200710372205450d82010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c3003a00002002410c6a200441016a220436020002400240200241086a280200220720046b4104490d00200628020021050c010b200441046a22052004490d8001200741017422042005200420054b1b22044100480d80010240024020070d00024020040d00410121050c020b2004103322050d010c87010b2006280200210520072004460d0020052007200410372205450d82010b20022005360204200241086a20043602002002410c6a28020021040b200520046a20083600002002410c6a200441046a3602000c7c0b200241046a2106200141086a290300210c02400240200241086a2802002002410c6a2802002204460d00200628020021050c010b200441016a22052004490d7f200441017422072005200720054b1b22074100480d7f0240024020040d00024020070d00410121050c020b2007103322050d010c86010b2006280200210520042007460d0020052004200710372205450d81010b20022005360204200241086a20073602002002410c6a28020021040b200520046a41c4003a00002002410c6a200441016a220436020002400240200241086a280200220720046b4108490d00200628020021050c010b200441086a22052004490d7f200741017422042005200420054b1b22044100480d7f0240024020070d00024020040d00410121050c020b2004103322050d010c86010b2006280200210520072004460d0020052007200410372205450d81010b20022005360204200241086a20043602002002410c6a28020021040b200520046a200c3700002002410c6a200441086a3602000c7b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7e200441017422062005200620054b1b22064100480d7e0240024020040d00024020060d00410121050c020b2006103322050d010c85010b2002280204210520042006460d0020052004200610372205450d80010b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c5003a00002002410c6a200441016a3602000c7a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7d200441017422062005200620054b1b22064100480d7d0240024020040d00024020060d00410121050c020b2006103322050d010c84010b2002280204210520042006460d0020052004200610372205450d7f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c6003a00002002410c6a200441016a3602000c790b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7c200441017422062005200620054b1b22064100480d7c0240024020040d00024020060d00410121050c020b2006103322050d010c83010b2002280204210520042006460d0020052004200610372205450d7e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c7003a00002002410c6a200441016a3602000c780b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7b200441017422062005200620054b1b22064100480d7b0240024020040d00024020060d00410121050c020b2006103322050d010c82010b2002280204210520042006460d0020052004200610372205450d7d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c8003a00002002410c6a200441016a3602000c770b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d7a200441017422062005200620054b1b22064100480d7a0240024020040d00024020060d00410121050c020b2006103322050d010c81010b2002280204210520042006460d0020052004200610372205450d7c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41c9003a00002002410c6a200441016a3602000c760b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d79200441017422062005200620054b1b22064100480d790240024020040d00024020060d00410121050c020b2006103322050d010c80010b2002280204210520042006460d0020052004200610372205450d7b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ca003a00002002410c6a200441016a3602000c750b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d78200441017422062005200620054b1b22064100480d780240024020040d00024020060d00410121050c020b2006103322050d010c7f0b2002280204210520042006460d0020052004200610372205450d7a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cb003a00002002410c6a200441016a3602000c740b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d77200441017422062005200620054b1b22064100480d770240024020040d00024020060d00410121050c020b2006103322050d010c7e0b2002280204210520042006460d0020052004200610372205450d790b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cc003a00002002410c6a200441016a3602000c730b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d76200441017422062005200620054b1b22064100480d760240024020040d00024020060d00410121050c020b2006103322050d010c7d0b2002280204210520042006460d0020052004200610372205450d780b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cd003a00002002410c6a200441016a3602000c720b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d75200441017422062005200620054b1b22064100480d750240024020040d00024020060d00410121050c020b2006103322050d010c7c0b2002280204210520042006460d0020052004200610372205450d770b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ce003a00002002410c6a200441016a3602000c710b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d74200441017422062005200620054b1b22064100480d740240024020040d00024020060d00410121050c020b2006103322050d010c7b0b2002280204210520042006460d0020052004200610372205450d760b20022005360204200241086a20063602002002410c6a28020021040b200520046a41cf003a00002002410c6a200441016a3602000c700b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d73200441017422062005200620054b1b22064100480d730240024020040d00024020060d00410121050c020b2006103322050d010c7a0b2002280204210520042006460d0020052004200610372205450d750b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d0003a00002002410c6a200441016a3602000c6f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d72200441017422062005200620054b1b22064100480d720240024020040d00024020060d00410121050c020b2006103322050d010c790b2002280204210520042006460d0020052004200610372205450d740b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d1003a00002002410c6a200441016a3602000c6e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d71200441017422062005200620054b1b22064100480d710240024020040d00024020060d00410121050c020b2006103322050d010c780b2002280204210520042006460d0020052004200610372205450d730b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d2003a00002002410c6a200441016a3602000c6d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d70200441017422062005200620054b1b22064100480d700240024020040d00024020060d00410121050c020b2006103322050d010c770b2002280204210520042006460d0020052004200610372205450d720b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d3003a00002002410c6a200441016a3602000c6c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6f200441017422062005200620054b1b22064100480d6f0240024020040d00024020060d00410121050c020b2006103322050d010c760b2002280204210520042006460d0020052004200610372205450d710b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d4003a00002002410c6a200441016a3602000c6b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6e200441017422062005200620054b1b22064100480d6e0240024020040d00024020060d00410121050c020b2006103322050d010c750b2002280204210520042006460d0020052004200610372205450d700b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d5003a00002002410c6a200441016a3602000c6a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6d200441017422062005200620054b1b22064100480d6d0240024020040d00024020060d00410121050c020b2006103322050d010c740b2002280204210520042006460d0020052004200610372205450d6f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d6003a00002002410c6a200441016a3602000c690b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6c200441017422062005200620054b1b22064100480d6c0240024020040d00024020060d00410121050c020b2006103322050d010c730b2002280204210520042006460d0020052004200610372205450d6e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d7003a00002002410c6a200441016a3602000c680b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6b200441017422062005200620054b1b22064100480d6b0240024020040d00024020060d00410121050c020b2006103322050d010c720b2002280204210520042006460d0020052004200610372205450d6d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d8003a00002002410c6a200441016a3602000c670b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d6a200441017422062005200620054b1b22064100480d6a0240024020040d00024020060d00410121050c020b2006103322050d010c710b2002280204210520042006460d0020052004200610372205450d6c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41d9003a00002002410c6a200441016a3602000c660b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d69200441017422062005200620054b1b22064100480d690240024020040d00024020060d00410121050c020b2006103322050d010c700b2002280204210520042006460d0020052004200610372205450d6b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41da003a00002002410c6a200441016a3602000c650b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d68200441017422062005200620054b1b22064100480d680240024020040d00024020060d00410121050c020b2006103322050d010c6f0b2002280204210520042006460d0020052004200610372205450d6a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41db003a00002002410c6a200441016a3602000c640b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d67200441017422062005200620054b1b22064100480d670240024020040d00024020060d00410121050c020b2006103322050d010c6e0b2002280204210520042006460d0020052004200610372205450d690b20022005360204200241086a20063602002002410c6a28020021040b200520046a41dc003a00002002410c6a200441016a3602000c630b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d66200441017422062005200620054b1b22064100480d660240024020040d00024020060d00410121050c020b2006103322050d010c6d0b2002280204210520042006460d0020052004200610372205450d680b20022005360204200241086a20063602002002410c6a28020021040b200520046a41dd003a00002002410c6a200441016a3602000c620b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d65200441017422062005200620054b1b22064100480d650240024020040d00024020060d00410121050c020b2006103322050d010c6c0b2002280204210520042006460d0020052004200610372205450d670b20022005360204200241086a20063602002002410c6a28020021040b200520046a41de003a00002002410c6a200441016a3602000c610b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d64200441017422062005200620054b1b22064100480d640240024020040d00024020060d00410121050c020b2006103322050d010c6b0b2002280204210520042006460d0020052004200610372205450d660b20022005360204200241086a20063602002002410c6a28020021040b200520046a41df003a00002002410c6a200441016a3602000c600b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d63200441017422062005200620054b1b22064100480d630240024020040d00024020060d00410121050c020b2006103322050d010c6a0b2002280204210520042006460d0020052004200610372205450d650b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e0003a00002002410c6a200441016a3602000c5f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d62200441017422062005200620054b1b22064100480d620240024020040d00024020060d00410121050c020b2006103322050d010c690b2002280204210520042006460d0020052004200610372205450d640b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e1003a00002002410c6a200441016a3602000c5e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d61200441017422062005200620054b1b22064100480d610240024020040d00024020060d00410121050c020b2006103322050d010c680b2002280204210520042006460d0020052004200610372205450d630b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e2003a00002002410c6a200441016a3602000c5d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d60200441017422062005200620054b1b22064100480d600240024020040d00024020060d00410121050c020b2006103322050d010c670b2002280204210520042006460d0020052004200610372205450d620b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e3003a00002002410c6a200441016a3602000c5c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5f200441017422062005200620054b1b22064100480d5f0240024020040d00024020060d00410121050c020b2006103322050d010c660b2002280204210520042006460d0020052004200610372205450d610b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e4003a00002002410c6a200441016a3602000c5b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5e200441017422062005200620054b1b22064100480d5e0240024020040d00024020060d00410121050c020b2006103322050d010c650b2002280204210520042006460d0020052004200610372205450d600b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e5003a00002002410c6a200441016a3602000c5a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5d200441017422062005200620054b1b22064100480d5d0240024020040d00024020060d00410121050c020b2006103322050d010c640b2002280204210520042006460d0020052004200610372205450d5f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e6003a00002002410c6a200441016a3602000c590b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5c200441017422062005200620054b1b22064100480d5c0240024020040d00024020060d00410121050c020b2006103322050d010c630b2002280204210520042006460d0020052004200610372205450d5e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e7003a00002002410c6a200441016a3602000c580b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5b200441017422062005200620054b1b22064100480d5b0240024020040d00024020060d00410121050c020b2006103322050d010c620b2002280204210520042006460d0020052004200610372205450d5d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e8003a00002002410c6a200441016a3602000c570b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d5a200441017422062005200620054b1b22064100480d5a0240024020040d00024020060d00410121050c020b2006103322050d010c610b2002280204210520042006460d0020052004200610372205450d5c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41e9003a00002002410c6a200441016a3602000c560b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d59200441017422062005200620054b1b22064100480d590240024020040d00024020060d00410121050c020b2006103322050d010c600b2002280204210520042006460d0020052004200610372205450d5b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ea003a00002002410c6a200441016a3602000c550b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d58200441017422062005200620054b1b22064100480d580240024020040d00024020060d00410121050c020b2006103322050d010c5f0b2002280204210520042006460d0020052004200610372205450d5a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41eb003a00002002410c6a200441016a3602000c540b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d57200441017422062005200620054b1b22064100480d570240024020040d00024020060d00410121050c020b2006103322050d010c5e0b2002280204210520042006460d0020052004200610372205450d590b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ec003a00002002410c6a200441016a3602000c530b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d56200441017422062005200620054b1b22064100480d560240024020040d00024020060d00410121050c020b2006103322050d010c5d0b2002280204210520042006460d0020052004200610372205450d580b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ed003a00002002410c6a200441016a3602000c520b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d55200441017422062005200620054b1b22064100480d550240024020040d00024020060d00410121050c020b2006103322050d010c5c0b2002280204210520042006460d0020052004200610372205450d570b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ee003a00002002410c6a200441016a3602000c510b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d54200441017422062005200620054b1b22064100480d540240024020040d00024020060d00410121050c020b2006103322050d010c5b0b2002280204210520042006460d0020052004200610372205450d560b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ef003a00002002410c6a200441016a3602000c500b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d53200441017422062005200620054b1b22064100480d530240024020040d00024020060d00410121050c020b2006103322050d010c5a0b2002280204210520042006460d0020052004200610372205450d550b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f0003a00002002410c6a200441016a3602000c4f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d52200441017422062005200620054b1b22064100480d520240024020040d00024020060d00410121050c020b2006103322050d010c590b2002280204210520042006460d0020052004200610372205450d540b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f1003a00002002410c6a200441016a3602000c4e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d51200441017422062005200620054b1b22064100480d510240024020040d00024020060d00410121050c020b2006103322050d010c580b2002280204210520042006460d0020052004200610372205450d530b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f2003a00002002410c6a200441016a3602000c4d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d50200441017422062005200620054b1b22064100480d500240024020040d00024020060d00410121050c020b2006103322050d010c570b2002280204210520042006460d0020052004200610372205450d520b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f3003a00002002410c6a200441016a3602000c4c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4f200441017422062005200620054b1b22064100480d4f0240024020040d00024020060d00410121050c020b2006103322050d010c560b2002280204210520042006460d0020052004200610372205450d510b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f4003a00002002410c6a200441016a3602000c4b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4e200441017422062005200620054b1b22064100480d4e0240024020040d00024020060d00410121050c020b2006103322050d010c550b2002280204210520042006460d0020052004200610372205450d500b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f5003a00002002410c6a200441016a3602000c4a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4d200441017422062005200620054b1b22064100480d4d0240024020040d00024020060d00410121050c020b2006103322050d010c540b2002280204210520042006460d0020052004200610372205450d4f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f6003a00002002410c6a200441016a3602000c490b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4c200441017422062005200620054b1b22064100480d4c0240024020040d00024020060d00410121050c020b2006103322050d010c530b2002280204210520042006460d0020052004200610372205450d4e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f7003a00002002410c6a200441016a3602000c480b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4b200441017422062005200620054b1b22064100480d4b0240024020040d00024020060d00410121050c020b2006103322050d010c520b2002280204210520042006460d0020052004200610372205450d4d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f8003a00002002410c6a200441016a3602000c470b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d4a200441017422062005200620054b1b22064100480d4a0240024020040d00024020060d00410121050c020b2006103322050d010c510b2002280204210520042006460d0020052004200610372205450d4c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41f9003a00002002410c6a200441016a3602000c460b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d49200441017422062005200620054b1b22064100480d490240024020040d00024020060d00410121050c020b2006103322050d010c500b2002280204210520042006460d0020052004200610372205450d4b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fa003a00002002410c6a200441016a3602000c450b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d48200441017422062005200620054b1b22064100480d480240024020040d00024020060d00410121050c020b2006103322050d010c4f0b2002280204210520042006460d0020052004200610372205450d4a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fb003a00002002410c6a200441016a3602000c440b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d47200441017422062005200620054b1b22064100480d470240024020040d00024020060d00410121050c020b2006103322050d010c4e0b2002280204210520042006460d0020052004200610372205450d490b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fc003a00002002410c6a200441016a3602000c430b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d46200441017422062005200620054b1b22064100480d460240024020040d00024020060d00410121050c020b2006103322050d010c4d0b2002280204210520042006460d0020052004200610372205450d480b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fd003a00002002410c6a200441016a3602000c420b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d45200441017422062005200620054b1b22064100480d450240024020040d00024020060d00410121050c020b2006103322050d010c4c0b2002280204210520042006460d0020052004200610372205450d470b20022005360204200241086a20063602002002410c6a28020021040b200520046a41fe003a00002002410c6a200441016a3602000c410b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d44200441017422062005200620054b1b22064100480d440240024020040d00024020060d00410121050c020b2006103322050d010c4b0b2002280204210520042006460d0020052004200610372205450d460b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ff003a00002002410c6a200441016a3602000c400b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d43200441017422062005200620054b1b22064100480d430240024020040d00024020060d00410121050c020b2006103322050d010c4a0b2002280204210520042006460d0020052004200610372205450d450b20022005360204200241086a20063602002002410c6a28020021040b200520046a4180013a00002002410c6a200441016a3602000c3f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d42200441017422062005200620054b1b22064100480d420240024020040d00024020060d00410121050c020b2006103322050d010c490b2002280204210520042006460d0020052004200610372205450d440b20022005360204200241086a20063602002002410c6a28020021040b200520046a4181013a00002002410c6a200441016a3602000c3e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d41200441017422062005200620054b1b22064100480d410240024020040d00024020060d00410121050c020b2006103322050d010c480b2002280204210520042006460d0020052004200610372205450d430b20022005360204200241086a20063602002002410c6a28020021040b200520046a4182013a00002002410c6a200441016a3602000c3d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d40200441017422062005200620054b1b22064100480d400240024020040d00024020060d00410121050c020b2006103322050d010c470b2002280204210520042006460d0020052004200610372205450d420b20022005360204200241086a20063602002002410c6a28020021040b200520046a4183013a00002002410c6a200441016a3602000c3c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3f200441017422062005200620054b1b22064100480d3f0240024020040d00024020060d00410121050c020b2006103322050d010c460b2002280204210520042006460d0020052004200610372205450d410b20022005360204200241086a20063602002002410c6a28020021040b200520046a4184013a00002002410c6a200441016a3602000c3b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3e200441017422062005200620054b1b22064100480d3e0240024020040d00024020060d00410121050c020b2006103322050d010c450b2002280204210520042006460d0020052004200610372205450d400b20022005360204200241086a20063602002002410c6a28020021040b200520046a4185013a00002002410c6a200441016a3602000c3a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d00024020060d00410121050c020b2006103322050d010c440b2002280204210520042006460d0020052004200610372205450d3f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4186013a00002002410c6a200441016a3602000c390b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d00024020060d00410121050c020b2006103322050d010c430b2002280204210520042006460d0020052004200610372205450d3e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4187013a00002002410c6a200441016a3602000c380b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d00024020060d00410121050c020b2006103322050d010c420b2002280204210520042006460d0020052004200610372205450d3d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4188013a00002002410c6a200441016a3602000c370b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3d200441017422062005200620054b1b22064100480d3d0240024020040d00024020060d00410121050c020b2006103322050d010c410b2002280204210520042006460d0020052004200610372205450d3c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4189013a00002002410c6a200441016a3602000c360b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3c200441017422062005200620054b1b22064100480d3c0240024020040d00024020060d00410121050c020b2006103322050d010c400b2002280204210520042006460d0020052004200610372205450d3c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418a013a00002002410c6a200441016a3602000c350b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3b200441017422062005200620054b1b22064100480d3b0240024020040d00024020060d00410121050c020b2006103322050d010c3f0b2002280204210520042006460d0020052004200610372205450d3b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418b013a00002002410c6a200441016a3602000c340b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d3a200441017422062005200620054b1b22064100480d3a0240024020040d00024020060d00410121050c020b2006103322050d010c3e0b2002280204210520042006460d0020052004200610372205450d3a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a418c013a00002002410c6a200441016a3602000c330b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d39200441017422062005200620054b1b22064100480d390240024020040d00024020060d00410121050c020b2006103322050d010c3d0b2002280204210520042006460d0020052004200610372205450d390b20022005360204200241086a20063602002002410c6a28020021040b200520046a418d013a00002002410c6a200441016a3602000c320b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d38200441017422062005200620054b1b22064100480d380240024020040d00024020060d00410121050c020b2006103322050d010c3c0b2002280204210520042006460d0020052004200610372205450d380b20022005360204200241086a20063602002002410c6a28020021040b200520046a418e013a00002002410c6a200441016a3602000c310b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d37200441017422062005200620054b1b22064100480d370240024020040d00024020060d00410121050c020b2006103322050d010c3b0b2002280204210520042006460d0020052004200610372205450d370b20022005360204200241086a20063602002002410c6a28020021040b200520046a418f013a00002002410c6a200441016a3602000c300b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d36200441017422062005200620054b1b22064100480d360240024020040d00024020060d00410121050c020b2006103322050d010c3a0b2002280204210520042006460d0020052004200610372205450d360b20022005360204200241086a20063602002002410c6a28020021040b200520046a4190013a00002002410c6a200441016a3602000c2f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d35200441017422062005200620054b1b22064100480d350240024020040d00024020060d00410121050c020b2006103322050d010c390b2002280204210520042006460d0020052004200610372205450d350b20022005360204200241086a20063602002002410c6a28020021040b200520046a4191013a00002002410c6a200441016a3602000c2e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d34200441017422062005200620054b1b22064100480d340240024020040d00024020060d00410121050c020b2006103322050d010c380b2002280204210520042006460d0020052004200610372205450d340b20022005360204200241086a20063602002002410c6a28020021040b200520046a4192013a00002002410c6a200441016a3602000c2d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d33200441017422062005200620054b1b22064100480d330240024020040d00024020060d00410121050c020b2006103322050d010c370b2002280204210520042006460d0020052004200610372205450d330b20022005360204200241086a20063602002002410c6a28020021040b200520046a4193013a00002002410c6a200441016a3602000c2c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d32200441017422062005200620054b1b22064100480d320240024020040d00024020060d00410121050c020b2006103322050d010c360b2002280204210520042006460d0020052004200610372205450d320b20022005360204200241086a20063602002002410c6a28020021040b200520046a4194013a00002002410c6a200441016a3602000c2b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d31200441017422062005200620054b1b22064100480d310240024020040d00024020060d00410121050c020b2006103322050d010c350b2002280204210520042006460d0020052004200610372205450d310b20022005360204200241086a20063602002002410c6a28020021040b200520046a4195013a00002002410c6a200441016a3602000c2a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d30200441017422062005200620054b1b22064100480d300240024020040d00024020060d00410121050c020b2006103322050d010c340b2002280204210520042006460d0020052004200610372205450d300b20022005360204200241086a20063602002002410c6a28020021040b200520046a4196013a00002002410c6a200441016a3602000c290b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2f200441017422062005200620054b1b22064100480d2f0240024020040d00024020060d00410121050c020b2006103322050d010c330b2002280204210520042006460d0020052004200610372205450d2f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4197013a00002002410c6a200441016a3602000c280b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2e200441017422062005200620054b1b22064100480d2e0240024020040d00024020060d00410121050c020b2006103322050d010c320b2002280204210520042006460d0020052004200610372205450d2e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4198013a00002002410c6a200441016a3602000c270b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2d200441017422062005200620054b1b22064100480d2d0240024020040d00024020060d00410121050c020b2006103322050d010c310b2002280204210520042006460d0020052004200610372205450d2d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a4199013a00002002410c6a200441016a3602000c260b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2c200441017422062005200620054b1b22064100480d2c0240024020040d00024020060d00410121050c020b2006103322050d010c300b2002280204210520042006460d0020052004200610372205450d2c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419a013a00002002410c6a200441016a3602000c250b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2b200441017422062005200620054b1b22064100480d2b0240024020040d00024020060d00410121050c020b2006103322050d010c2f0b2002280204210520042006460d0020052004200610372205450d2b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419b013a00002002410c6a200441016a3602000c240b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d2a200441017422062005200620054b1b22064100480d2a0240024020040d00024020060d00410121050c020b2006103322050d010c2d0b2002280204210520042006460d0020052004200610372205450d2a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a419c013a00002002410c6a200441016a3602000c230b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d29200441017422062005200620054b1b22064100480d290240024020040d00024020060d00410121050c020b200610332205450d2c0c010b2002280204210520042006460d0020052004200610372205450d290b20022005360204200241086a20063602002002410c6a28020021040b200520046a419d013a00002002410c6a200441016a3602000c220b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d28200441017422062005200620054b1b22064100480d280240024020040d00024020060d00410121050c020b200610332205450d2b0c010b2002280204210520042006460d0020052004200610372205450d280b20022005360204200241086a20063602002002410c6a28020021040b200520046a419e013a00002002410c6a200441016a3602000c210b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d27200441017422062005200620054b1b22064100480d270240024020040d00024020060d00410121050c020b200610332205450d2a0c010b2002280204210520042006460d0020052004200610372205450d270b20022005360204200241086a20063602002002410c6a28020021040b200520046a419f013a00002002410c6a200441016a3602000c200b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d26200441017422062005200620054b1b22064100480d260240024020040d00024020060d00410121050c020b200610332205450d290c010b2002280204210520042006460d0020052004200610372205450d260b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a0013a00002002410c6a200441016a3602000c1f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d25200441017422062005200620054b1b22064100480d250240024020040d00024020060d00410121050c020b200610332205450d280c010b2002280204210520042006460d0020052004200610372205450d250b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a1013a00002002410c6a200441016a3602000c1e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d24200441017422062005200620054b1b22064100480d240240024020040d00024020060d00410121050c020b200610332205450d270c010b2002280204210520042006460d0020052004200610372205450d240b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a2013a00002002410c6a200441016a3602000c1d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d23200441017422062005200620054b1b22064100480d230240024020040d00024020060d00410121050c020b200610332205450d260c010b2002280204210520042006460d0020052004200610372205450d230b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a3013a00002002410c6a200441016a3602000c1c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d22200441017422062005200620054b1b22064100480d220240024020040d00024020060d00410121050c020b200610332205450d250c010b2002280204210520042006460d0020052004200610372205450d220b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a4013a00002002410c6a200441016a3602000c1b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d21200441017422062005200620054b1b22064100480d210240024020040d00024020060d00410121050c020b200610332205450d240c010b2002280204210520042006460d0020052004200610372205450d210b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a5013a00002002410c6a200441016a3602000c1a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d20200441017422062005200620054b1b22064100480d200240024020040d00024020060d00410121050c020b200610332205450d230c010b2002280204210520042006460d0020052004200610372205450d200b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a6013a00002002410c6a200441016a3602000c190b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1f200441017422062005200620054b1b22064100480d1f0240024020040d00024020060d00410121050c020b200610332205450d220c010b2002280204210520042006460d0020052004200610372205450d1f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a7013a00002002410c6a200441016a3602000c180b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1e200441017422062005200620054b1b22064100480d1e0240024020040d00024020060d00410121050c020b200610332205450d210c010b2002280204210520042006460d0020052004200610372205450d1e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a8013a00002002410c6a200441016a3602000c170b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1d200441017422062005200620054b1b22064100480d1d0240024020040d00024020060d00410121050c020b200610332205450d200c010b2002280204210520042006460d0020052004200610372205450d1d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41a9013a00002002410c6a200441016a3602000c160b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1c200441017422062005200620054b1b22064100480d1c0240024020040d00024020060d00410121050c020b200610332205450d1f0c010b2002280204210520042006460d0020052004200610372205450d1c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41aa013a00002002410c6a200441016a3602000c150b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1b200441017422062005200620054b1b22064100480d1b0240024020040d00024020060d00410121050c020b200610332205450d1e0c010b2002280204210520042006460d0020052004200610372205450d1b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ab013a00002002410c6a200441016a3602000c140b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d1a200441017422062005200620054b1b22064100480d1a0240024020040d00024020060d00410121050c020b200610332205450d1d0c010b2002280204210520042006460d0020052004200610372205450d1a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ac013a00002002410c6a200441016a3602000c130b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d19200441017422062005200620054b1b22064100480d190240024020040d00024020060d00410121050c020b200610332205450d1c0c010b2002280204210520042006460d0020052004200610372205450d190b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ad013a00002002410c6a200441016a3602000c120b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d18200441017422062005200620054b1b22064100480d180240024020040d00024020060d00410121050c020b200610332205450d1b0c010b2002280204210520042006460d0020052004200610372205450d180b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ae013a00002002410c6a200441016a3602000c110b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d17200441017422062005200620054b1b22064100480d170240024020040d00024020060d00410121050c020b200610332205450d1a0c010b2002280204210520042006460d0020052004200610372205450d170b20022005360204200241086a20063602002002410c6a28020021040b200520046a41af013a00002002410c6a200441016a3602000c100b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d16200441017422062005200620054b1b22064100480d160240024020040d00024020060d00410121050c020b200610332205450d190c010b2002280204210520042006460d0020052004200610372205450d160b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b0013a00002002410c6a200441016a3602000c0f0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d15200441017422062005200620054b1b22064100480d150240024020040d00024020060d00410121050c020b200610332205450d180c010b2002280204210520042006460d0020052004200610372205450d150b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b1013a00002002410c6a200441016a3602000c0e0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d14200441017422062005200620054b1b22064100480d140240024020040d00024020060d00410121050c020b200610332205450d170c010b2002280204210520042006460d0020052004200610372205450d140b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b2013a00002002410c6a200441016a3602000c0d0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d13200441017422062005200620054b1b22064100480d130240024020040d00024020060d00410121050c020b200610332205450d160c010b2002280204210520042006460d0020052004200610372205450d130b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b3013a00002002410c6a200441016a3602000c0c0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d12200441017422062005200620054b1b22064100480d120240024020040d00024020060d00410121050c020b200610332205450d150c010b2002280204210520042006460d0020052004200610372205450d120b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b4013a00002002410c6a200441016a3602000c0b0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d11200441017422062005200620054b1b22064100480d110240024020040d00024020060d00410121050c020b200610332205450d140c010b2002280204210520042006460d0020052004200610372205450d110b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b5013a00002002410c6a200441016a3602000c0a0b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d10200441017422062005200620054b1b22064100480d100240024020040d00024020060d00410121050c020b200610332205450d130c010b2002280204210520042006460d0020052004200610372205450d100b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b6013a00002002410c6a200441016a3602000c090b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0f200441017422062005200620054b1b22064100480d0f0240024020040d00024020060d00410121050c020b200610332205450d120c010b2002280204210520042006460d0020052004200610372205450d0f0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b7013a00002002410c6a200441016a3602000c080b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0e200441017422062005200620054b1b22064100480d0e0240024020040d00024020060d00410121050c020b200610332205450d110c010b2002280204210520042006460d0020052004200610372205450d0e0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b8013a00002002410c6a200441016a3602000c070b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0d200441017422062005200620054b1b22064100480d0d0240024020040d00024020060d00410121050c020b200610332205450d100c010b2002280204210520042006460d0020052004200610372205450d0d0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41b9013a00002002410c6a200441016a3602000c060b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0c200441017422062005200620054b1b22064100480d0c0240024020040d00024020060d00410121050c020b200610332205450d0f0c010b2002280204210520042006460d0020052004200610372205450d0c0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41ba013a00002002410c6a200441016a3602000c050b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0b200441017422062005200620054b1b22064100480d0b0240024020040d00024020060d00410121050c020b200610332205450d0e0c010b2002280204210520042006460d0020052004200610372205450d0b0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bb013a00002002410c6a200441016a3602000c040b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d0a200441017422062005200620054b1b22064100480d0a0240024020040d00024020060d00410121050c020b200610332205450d0d0c010b2002280204210520042006460d0020052004200610372205450d0a0b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bc013a00002002410c6a200441016a3602000c030b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d09200441017422062005200620054b1b22064100480d090240024020040d00024020060d00410121050c020b200610332205450d0c0c010b2002280204210520042006460d0020052004200610372205450d090b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bd013a00002002410c6a200441016a3602000c020b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d08200441017422062005200620054b1b22064100480d080240024020040d00024020060d00410121050c020b200610332205450d0b0c010b2002280204210520042006460d0020052004200610372205450d080b20022005360204200241086a20063602002002410c6a28020021040b200520046a41be013a00002002410c6a200441016a3602000c010b02400240200241086a2802002002410c6a2802002204460d00200228020421050c010b200441016a22052004490d07200441017422062005200620054b1b22064100480d070240024020040d00024020060d00410121050c020b200610332205450d0a0c010b2002280204210520042006460d0020052004200610372205450d070b20022005360204200241086a20063602002002410c6a28020021040b200520046a41bf013a00002002410c6a200441016a3602000b2000411f3a000020012d00004109470d090240200141046a280200220228020441ffffffff0371450d0020022802001035200128020421020b200210350c090b103e000b103e000b103e000b103c000b103c000b103e000b103c000b103c000b20002004290200370200200041086a200441086a29020037020020012d00004109470d000240200141046a280200220228020441ffffffff0371450d0020022802001035200128020421020b200210350b200341106a24000f0b103c000ba907010c7f230041d0086b22022400410021034100210402400240024002400240024002400240024002400240034002402003411f4d0d00410f21030c030b20012802082205200128020c2206460d01200641016a22072006490d0420052007490d082001280200220820066a2d000021062001200736020c200641ff00712003411f71742004722104200341076a21032006418001710d000b024020034120490d00410d21032006410f4b0d020b20040d022000428080808010370200200041086a42003702000c0a0b200241013a0089082002411c6a41013602002002420137020c200241acfdcb003602082002413636029c08200220024198086a360218200220024189086a36029808200241b8086a200241086a1041410521030b2000200336020420004101360200200041086a20022903b808370200200041106a200241b8086a41086a2802003602000c080b200241086a4100418008109f081a41002106410021094101210a4100210b02400340200520076b2004200b6b22034180082003418008491b2203490d01200720036a220c2007490d032005200c490d04200241086a200820076a2003109d081a2001200c36020c02400240200920066b2003490d00200620036a210c2009210d0c010b200620036a220c2006490d0620094101742207200c2007200c4b1b220d4100480d06024020090d000240200d0d004101210a0c020b200d1033220a0d010c090b2009200d460d00200a2009200d1037220a450d080b200a20066a200241086a2003109d081a20042003200b6a220b4d0d08200128020c21072001280208210520012802002108200c2106200d21090c000b0b200241013a00a708200241cc086a4101360200200242013702bc08200241acfdcb003602b8082002413636029c08200220024198086a3602c8082002200241a7086a36029808200241a8086a200241b8086a104120024194086a200241b0086a280200360000200220022903a80837008c08200041053a000420002002290089083700052000410c6a20024190086a290000370000200041013602002009450d07200a10350c070b417f200741c0fdcb001059000b2007200c41c0fdcb001059000b200c200541c0fdcb001058000b103e000b2007200541c0fdcb001058000b103c000b200241086a200a200c1074024020022802084101470d000240200d450d00200a10350b200041083a0004200041013602000c010b2000200a3602042000410c6a200c360200200041086a200d360200200041003602000b200241d0086a24000b15002001200028020022002802002000280208105a0bf90401067f200441046a21050240024002400240200441086a2802002004410c6a2802002206460d00200528020021070c010b200641016a22072006490d01200641017422082007200820074b1b22084100480d010240024020060d00024020080d00410121070c020b2008103322070d010c040b2005280200210720062008460d0020072006200810372207450d030b20042007360204200441086a20083602002004410c6a28020021060b200720066a20024101463a00002004410c6a2209200641016a2206360200200441086a210a034002400240200a2802002006460d00200528020021070c010b200641016a22072006490d02200641017422082007200820074b1b22084100480d020240024020060d00024020080d00410121070c020b200810332207450d050c010b2005280200210720062008460d0020072006200810372207450d040b20042007360204200a2008360200200928020021060b200720066a200141807f72200141ff0071200141077622071b3a00002009200641016a22063602002007210120070d000b024020024101470d00200441086a21082004410c6a210903400240024020082802002006460d00200528020021010c010b200641016a22012006490d03200641017422072001200720014b1b22074100480d030240024020060d00024020070d00410121010c020b200710332201450d060c010b2005280200210120062007460d0020012006200710372201450d050b2004200136020420082007360200200928020021060b200120066a200341807f72200341ff0071200341077622011b3a00002009200641016a22063602002001210320010d000b0b2000411f3a00000f0b103e000b103c000bc807010a7f230041d0006b220224000240024002400240024002400240024002400240024020012802082203200128020c2204460d00200441016a22052004490d0220032005490d032001280200220620046a2d000021072001200536020c20074102490d01200041173a000420004101360200200041056a20073a00000c0a0b200241013a001f200241cc006a41013602002002420137023c200241acfdcb00360238200241363602342002200241306a36024820022002411f6a360230200241206a200241386a10412002411b6a200241286a28020036000020022002290320370013200220022900103703002002200241176a290000370007200041053a0004200020022903003700052000410c6a2002290007370000200041013602000c090b410120036b2108200441026a21044100210541002109034002402005411f4d0d00410f21050c090b200820046a4102460d072004450d0320032004490d05200620046a417f6a2d0000210a2001200436020c200a41ff00712005411f71742009722109200441016a2104200541076a2105200a418001710d000b024020054120490d00410d2105200a410f4b0d080b410021050240024002402007410171450d002004417f6a2104410021054100210b034002402005411f4d0d00410f21040c040b20032004460d022004417f460d072003200441016a2208490d09200620046a2d0000210a2001200836020c200a41ff00712005411f7174200b72210b200541076a210520082104200a418001710d000b024020054120490d00410d2104200a410f4b0d030b410121050b20002009360204200041003602002000410c6a200b360200200041086a20053602000c0a0b200241013a0000200241cc006a41013602002002420137023c200241acfdcb00360238200241363602342002200241306a36024820022002360230200241106a200241386a1041410521040b2000200436020420004101360200200041086a2002290310370200200041106a200241106a41086a2802003602000c080b417f200541c0fdcb001059000b2005200341c0fdcb001058000b417f200441c0fdcb001059000b417f200441016a41c0fdcb001059000b2004200341c0fdcb001058000b200441016a200341c0fdcb001058000b200241013a0000200241cc006a41013602002002420137023c200241acfdcb00360238200241363602342002200241306a36024820022002360230200241106a200241386a1041410521050b2000200536020420004101360200200041086a2002290310370200200041106a200241106a41086a2802003602000b200241d0006a24000bc4c901040b7f027e147f017e230041e081046b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002402001280204220320012802082204460d00200441016a22052004490d0720032005490d06200128020020046a2d00002104200120053602082004410c4b0d0120040e0d02031211100f0e0d0c0b0a0908020b200241013a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022802c88104210420022802cc8104210120004101360200200041003a00042001450d1c200410350c1c0b200041123a000420004101360200200041056a20043a00000c1b0b200241b8016a200110c0074101210620022802bc012107024020022802b8014101460d0041002108200241b8016a410041808001109f081a41002103410021092007450d13410021054100210a410121064100210b024003402001280204220c200128020822036b2007200b6b220441808001200441808001491b2204490d01200320046a22092003490d05200c2009490d04200241b8016a200128020020036a2004109d081a2001200936020802400240200a20056b2004490d00200520046a2103200a21090c010b200520046a22032005490d19200a41017422092003200920034b1b22094100480d1902400240200a0d00024020090d00410121060c020b200910332206450d1f0c010b200a2009460d002006200a200910372206450d1e0b2009210a0b200620056a200241b8016a2004109d081a2003210520072004200b6a220b4b0d000c150b0b200241013a00b88104200241dc81046a4101360200200242013702cc8104200241acfdcb003602c881042002413636022c2002200241286a3602d881042002200241b881046a360228200241e0006a200241c881046a10412002290360210d2002280268210141052107200a450d15200610350c150b200241c8016a2802002101200241c0016a290300210d0c140b200241b8016a200110c707200241b8016a41086a290300220d422088210e200241c8016a280200210120022802bc01210a20022802b8014101460d0f200ea72103200241cc016a280200210f200da72110410021044100210b024002400240024002400240024002400240034002402004411f4d0d00410f21090c030b20032001460d012001417f460d09200141016a220820034b0d08200a20016a2d0000220541ff00712004411f7174200b72210b200441076a2104200821012005418001710d000b024020044120490d00410d21092005410f4b0d020b200241003602c08104200242043703b88104200b0d02410421040c030b200241013a00c88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241c881046a36022820024198016a200241b8016a1041410521090b20024188016a41086a20024198016a41086a28020022013602002002200229039801220d370388010c030b410020036b21114104210441002112410021130340024002400240024002400240024002400240024002400240024020082003460d00200841016a22052008490d01200520034b0d020240200a20086a2d0000220741e000460d004118211441002115200521080c0c0b200841036a2107410021084100210602400240024003402007210902402008411f4d0d00410f21140c030b20032005460d012005417f460d07200541016a220c20034b0d09200a20056a2d0000221641ff00712008411f71742006722106200941016a2107200841076a2108200c21052016418001710d000b024020084120490d00410d21142016410f4d0d00200c21050c020b41002117200241003602682002420137036020060d02410121144100211841002116200c21050c0c0b200241013a0060200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a1041200241306a41086a200241c881046a41086a280200360200200220022903c8810437033041052114200321050b200241c0006a41086a200241306a41086a280200221936020020022002290330220d370340200da72116410021074101211720022802442118410021150c0b0b200a200c6a211a2011200c6a211b410021164101211441002115410021180240034020162108201b201822056a450d012009450d060240200920034d0d002009200341c0fdcb001058000b0240201a20056a2c0000220741004e0d004119211c201d2116201e2118201f21190c0a0b4106211c200741c00071450d08200741807f72220741ff017141fc01490d080240024020052015460d00200821160c010b024020082015460d0020082116200821150c010b200841016a22162008490d2b200841017422182016201820164b1b22164100480d2b0240024020080d00024020160d00410121140c020b201610332214450d310c010b20082016460d0020142008201610372214450d300b2002201636026420022014360260201621150b201420056a2007417f733a00002002200541016a2218360268200941016a210920062018460d0a0c000b0b200241013a00a801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241a8016a360228200241c881046a200241b8016a10414105211c20022802c881042216211d20022802cc81042218211e20022802d081042219211f200321090c070b200241013a0060200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022802c88104211620022802cc8104211820022d00d08104210920022d00d18104210620022f01d2810421014105211441002115200321080c0a0b417f200541c0fdcb001059000b2005200341c0fdcb001058000b417f200541016a41c0fdcb001059000b417f200941c0fdcb001059000b200541016a200341c0fdcb001058000b2020211620212118202221190b410021154101211702402008450d00201410350b201c2114201621202018212120192122200921050c020b200c20186a21050b20144110762115201441087621070b0240024002400240024002400240024020170d002015411074200741ff017141087472201441ff017172211b410021174100210941002106034002402009411f4d0d00410f21140c080b0240024020032005460d002005417f460d05200541016a220820034d0d01200541016a200341c0fdcb001058000b200241013a0060200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022802c88104210720022802cc8104211820022d00d08104210920022d00d18104210620022f01d28104210141052114200321050c090b200a20056a2d0000220c41ff00712009411f71742006722106200941076a210920082105200c418001710d000b20094120490d01200c410f4d0d0120082105410d21140c060b201941107621012019410876210620052108201921090c070b024002400240200641014b0d00024020060e020002000b410421090c020b4104211441bed8cb00210741242118200821050c060b0240024020032008460d00200841016a22052008490d04200520034b0d05200a20086a2c0000221741004e0d01411921140c070b200241013a0060200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022802c88104210720022802cc8104211820022d00d08104210920022d00d18104210620022f01d28104210141052114200321050c070b201741c00071450d04201741807f72221741ff017141fc01490d042017417f732109200521080b20014180807c71200941ff01714108747241e000722101410021050c070b417f200541016a41c0fdcb001059000b417f200841016a41c0fdcb001059000b200841016a200341c0fdcb001058000b410621140b0b4100211502402016450d00201b10350b2005210820072116201721070b200641ff0171410874200941ff0171722001411074722101410121050b2015411074200741ff017141087472201441ff01717221092018ad4220862016ad84210d20050d02201341016a21130240201220022802bc8104470d00200241b881046a20124101108c0120022802b88104210420022802c0810421120b200420124104746a2205200136020c2005200d370204200520093602002002201241016a22123602c081042013200b470d000b0b2008200f46210120022902bc8104212302402010450d00200a10350b410221032001450d020c170b02402012450d00201241047421052004210303400240200341046a280200450d00200328020010350b200341106a2103200541706a22050d000b0b20022802bc810441ffffffff0071450d00200410350b200d422088210e20094108762103024020100d002009210a0c140b200a10352009210a0c130b20024103410220011b3a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022903c88104210d20022802d08104210102402023422088a72203450d00200341047421052004210303400240200341046a280200450d00200328020010350b200341106a2103200541706a22050d000b0b200d422088210e4105210a41002103202342ffffffff0083500d12200410350c120b200141016a200341c0fdcb001058000b417f200141016a41c0fdcb001059000b2009200c41c0fdcb001058000b2003200941c0fdcb001059000b2005200341c0fdcb001058000b417f200541c0fdcb001059000b200241b8016a200110c707200241b8016a41106a2802002101200241b8016a410c6a2802002105200241b8016a41086a280200210920022802bc01210b0240024020022802b8014101460d00200241cc016a280200210641002103410021040240024002400240034002402003411f4d0d00410f21010c030b20052001460d012001417f460d042005200141016a220a490d06200b20016a2d0000220841ff00712003411f71742004722104200341076a2103200a21012008418001710d000b024020034120490d00410d21012008410f4b0d020b2006200a46210102402009450d00200b10350b2001450d02410b21030c130b200241013a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a1041410521010b2000200136020420004101360200200041086a20022903c88104370200200041106a200241c881046a41086a2802003602002009450d18200b10350c180b20024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241d381046a200241e8006a280200360000200220022903603700cb8104200041053a0004200020022900c881043700052000410c6a200241cf81046a290000370000200041013602000c170b417f200141016a41c0fdcb001059000b2000200b36020420004101360200200041106a20013602002000410c6a2005360200200041086a20093602000c150b200141016a200541c0fdcb001058000b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b024002400240024020022802b8014101460d002002200241cc016a2802003602702002200136026c2002200b3602602002200d370264200d422088a72108410021044100210a02400240024002400240034002402004411f4d0d00410f210b0c030b20082001460d012001417f460d05200141016a220520084b0d04200b20016a2d000021032002200536026c200341ff00712004411f7174200a72210a200441076a2104200521012003418001710d000b024020044120490d00410d210b2003410f4b0d020b200241003602800120024204370378200a0d02410421040c070b200241013a00c88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241c881046a36022820024198016a200241b8016a10414105210b0b20024188016a41086a20024198016a41086a28020022013602002002200229039801220d370388010c040b410021070340200741016a21074100210141002105024002400240024002400240024002400240034002402001411f4d0d00410f210b0c030b20022802682208200228026c2204460d01200441016a22032004490d0520082003490d06200228026020046a2d000021042002200336026c200441ff00712001411f71742005722105200141076a21012004418001710d000b20014120490d022004410f4d0d02410d210b0c010b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a1041200241c0006a41086a200241c881046a41086a280200360200200220022903c88104220d370340200da7210a4105210b0b20022802482101200228024421090c010b200241b8016a200241e0006a10a70720022802c401211820022802c001211520022802bc01211420022802b8014101470d0320022802c80121012014210b2015210a201821090b200241d0006a41086a20024198016a41086a28020036020020022002290398013703500c030b417f200341c0fdcb001059000b2003200841c0fdcb001058000b410021044100210b02400240024002400240024002400240034002402004411f4d0d00410f210b0c030b20022802682208200228026c2203460d01200341016a22012003490d0420082001490d072002280260220920036a2d000021032002200136026c200341ff00712004411f7174200b72210b200441076a21042003418001710d000b024020044120490d002003410f4d0d00410d210b0c020b41002112200241b8016a410041808004109f081a200b0d02410121134100210c0c090b200241013a00b88104200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a1041200241306a41086a200241c881046a41086a280200360200200220022903c88104220d370330200da7210a4105210b0b20022802382101200228023421090c050b4100210641012113410021034100211602400340200820016b200b20166b220441808004200441808004491b2204490d01200120046a220c2001490d032008200c490d04200241b8016a200920016a2004109d081a2002200c36026c02400240200620036b2004490d00200320046a210c200621120c010b200320046a220c2003490d1f20064101742201200c2001200c4b1b22124100480d1f024020060d00024020120d00410121130c020b201210332213450d240c010b20062012460d0020132006201210372213450d230b201320036a200241b8016a2004109d081a200b200420166a22164d0d08200228026c2101200228026821082002280260210920122106200c21030c000b0b200241013a0040200241013602dc8104200242013702cc8104200241acfdcb003602c881042002413636022c2002200241286a3602d881042002200241c0006a360228200241b881046a200241c881046a104120022802b88104210a20022802bc8104210920022802c0810421014105210b2006450d04201310350c040b417f200141c0fdcb001059000b2001200c41c0fdcb001059000b200c200841c0fdcb001058000b2001200841c0fdcb001058000b02402018450d0020184104742103201421040340024020042d00004109470d000240200441046a2208280200220528020441ffffffff0371450d0020052802001035200828020021050b200510350b200441106a2104200341706a22030d000b0b0240201541ffffffff0071450d00201410350b200241d0006a41086a20024198016a41086a28020036020020022002290398013703500b2009ad422086200aad84210d200241f8006a10b407200228027c2204450d052004411c6c450d05200228027810350c050b200241d0006a41086a200c36020020024188016a41086a2208200c360200200220123602ac01200220133602a801200220022903a801220d3703502002200d370388012015ad4220862014ad84210d02402002280280012203200228027c470d00200241f8006a2003410110f90120022802800121030b200228027822042003411c6c6a2201200d3702042001200536020020012002290388013702102001410c6a2018360200200141186a20082802003602002002200341016a360280012007200a460d050c000b0b200141016a200841c0fdcb001058000b417f200141016a41c0fdcb001059000b200d422088210e200b41087621040c020b200d422088210e200b41087621042002280264450d01200228026010350c010b2002200229027c222337021c20022004360218200228026c200228027046210102402002280264450d00200228026010350b024020010d0020024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a104120022903c88104210d20022802d081042101200241186a10b40702402023a72203450d002003411c6c450d00200410350b200d422088210e4105210b410021040c010b410d21030c0d0b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002004410874200b41ff0171723602040c130b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b0240024002400240024002400240024002400240024002400240024020022802b8014101460d00200241cc016a2802002112200d422088a72105200da72106410021044100210802400240024002400240034002402004411f4d0d00410f21090c030b20052001460d012001417f460d05200141016a220320054b0d04200b20016a2d0000220a41ff00712004411f71742008722108200441076a210420032101200a418001710d000b024020044120490d00410d2109200a410f4b0d020b200241003602b001200242043703a80120080d02410421040c110b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a1041410521090b200241e0006a41086a200241c881046a41086a2802002201360200200220022903c88104220d3703600c0e0b410021150340201541016a2115410021014100210a024002400240024002400240024002400240024002400240024002400240034002402001411f4d0d00410f210920022802a00121010c1d0b20052003460d012003417f460d04200341016a220420054b0d0b200b20036a2d0000220941ff00712001411f7174200a72210a200141076a2101200421032009418001710d000b024020014120490d002009410f4d0d00410d210920022802a00121010c1c0b4100210c200241b8016a410041808001109f081a200a0d01410121182004210341002114410021090c020b200241013a00c88104200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241c881046a36022820024198016a200241b8016a104141052109200229039801210d20022802a00121010c1a0b410021164101211841002107410021130340200520046b200a20136b220141808001200141808001491b2201490d19200420016a22032004490d03200320054b0d04200241b8016a200b20046a2001109d081a02400240201620076b2001490d00200720016a2109201621140c010b200720016a22092007490d2d201641017422042009200420094b1b22144100480d2d0240024020160d00024020140d00410121180c020b201410332218450d330c010b20162014460d0020182016201410372218450d320b201421160b201820076a200241b8016a2001109d081a2003210420092107200a200120136a22134b0d000b0b200220093602702002410036026c2002201836026020022009ad4220862014ad84370264410021014100210702400240024002400240024002400240034002402001411f4d0d00410f21090c030b2009200c460d01200c417f460d0c200c41016a220a20094b0d112018200c6a2d000021042002200a36026c200441ff00712001411f71742007722107200141076a2101200a210c2004418001710d000b024020014120490d002004410f4d0d00410d21090c020b4100210c200241003602c08104200242043703b8810420070d024104211441002110410021180c030b200241013a00b88104200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a1041200241306a41086a200241c881046a41086a280200360200200220022903c88104370330410521090b200241c0006a41086a200241306a41086a280200220136020020022002290330220d370340200da722044108762105200228024421030c1b0b4100211041042114410021190340201941016a21194100210141002116034002402001411f4d0d00410f21090c050b20022802682213200228026c2204460d03200441016a220a2004490d0b2013200a490d102002280260221820046a2d000021092002200a36026c200941ff00712001411f71742016722116200141076a21012009418001710d000b024020014120490d002009410f4d0d00410d21090c040b2013200a460d04200441026a2101200a417f460d0b20132001490d0c2018200a6a2c0000210a2002200136026c0240200a41004e0d00411921090c1a0b41062109200a41c00071450d18200a41807f72220a41ff017141fb014d0d18200a417f7321010240201020022802bc8104470d00200241b881046a2010410110900120022802b88104211420022802c0810421100b201420104103746a220420013a0004200420163602002002201041016a22103602c0810420192007470d000b20022802bc810421180b201420104103746a210920142101034020092001460d04200c20012802006a2204200c49210a200141086a21012004210c200a450d000b200229038801220d422088a7210320024190016a2802002101200da72104411c21090c150b200241013a00c88104200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241c881046a36022820024198016a200241b8016a10414105210920022802980121040b2004410876210520022802a0012101200228029c0121034100210a0c160b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241c881046a200241b8016a104120022802c88104210420022802cc8104210320022802d081042101410521090c140b4100210a200241003602d08104200242083703c881044101210c410821130340200241b8016a200241e0006a10a80720022802c001210420022903c801210d20022802c4012116024002400240024020022802b8014101460d00200441ff017122014106460d022001417e6a41034f0d03200c41016a2201200c4f21092001210c20090d03200441ff0171210141152103418dd2cb0021044104210920014109460d010c150b20022802bc012109200da72101201621030c140b0240201628020441ffffffff0371450d00201628020010350b201610350c130b200c417f6a210c0b2004410876210702400240200a20022802cc8104460d00200a21090c010b200241c881046a200a10a90720022802c88104211320022802d0810421090b201320094104746a2201200d37030820012016360204200120073b0001200120043a0000200141036a20074110763a00002002200941016a220a3602d08104200c0d000b200228026c200228027046210120022802cc8104210702402002280264450d00200228026010350b024020010d0020024103410220011b3a00b88104200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a104120022903c88104210d20022802d0810421010240200a450d00200941047441106a2103201321040340024020042d00004109470d000240200441046a2208280200220528020441ffffffff0371450d0020052802001035200828020021050b200510350b200441106a2104200341706a22030d000b0b200d422088210e0240200741ffffffff0071450d00201310350b200ea72103200da7210441052109201841ffffffff0171450d1a201410350c1a0b20022802b001220120022802ac01470d0b200141016a22042001490d2a200141017422092004200920044b1bad42187e220d422088a70d2a200da722044100480d2a0240024020010d0020040d01410421090c0c0b20022802a8012109200141186c220c2004460d0b0240200c0d0020040d01410421090c0c0b2009200c200410372209450d2f0c0b0b200410332209450d2e0c0a0b417f200341016a41c0fdcb001059000b2004200341c0fdcb001059000b2003200541c0fdcb001058000b417f200c41016a41c0fdcb001059000b417f200a41c0fdcb001059000b417f200141c0fdcb001059000b2001201341c0fdcb001058000b200341016a200541c0fdcb001058000b200c41016a200941c0fdcb001058000b200a201341c0fdcb001058000b200220093602a8012002200441186e3602ac010b20022802a8012204200141186c6a2209201336020c20092010ad4220862018ad8437020420092014360200200941106a200aad4220862007ad843702002002200141016a3602b00120152008460d0f0c000b0b200141016a200541c0fdcb001058000b417f200141016a41c0fdcb001059000b200d422088210e200b41087621040c0c0b0240200a450d00200a4104742108201321050340024020052d00004109470d000240200541046a2207280200220a28020441ffffffff0371450d00200a28020010352007280200210a0b200a10350b200541106a2105200841706a22080d000b0b20022802cc810441ffffffff0071450d00201310350b201841ffffffff0171450d04201410350c040b0b200441087621050b200a41ff0171410874200972210920022802bc810441ffffffff0171450d00201410350b2005410874200441ff01717221040b2002280264450d02200228026010350c020b200241013a009801200241013602dc8104200242013702cc8104200241acfdcb003602c881042002413636022c2002200241286a3602d88104200220024198016a360228200241b881046a200241c881046a104120022903b88104210d20022802c081042101410521092016450d00201810350b200d422088a72103200da721040b200241a8016a10b3072003ad4220862004ad84210d20022802ac012204450d00200441186c450d0020022802a80110350b200d422088210e20094108762104024020060d002009210b0c020b200b10352009210b0c010b200220022902ac01222337027c200220043602782003201246210102402006450d00200b10350b024020010d0020024103410220011b3a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022903c88104210d20022802d081042101200241f8006a10b30702402023a72203450d00200341186c450d00200410350b200d422088210e4105210b410021040c010b410c21030c0c0b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002004410874200b41ff0171723602040c120b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b02400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d481042002200b3602c881042002200d3702cc8104200d422088a72108410021044100210a024002400240024002400240034002402004411f4d0d00410f210b0c030b20082001460d012001417f460d06200141016a220520084b0d05200b20016a2d00002103200220053602d48104200341ff00712004411f7174200a72210a200441076a2104200521012003418001710d000b024020044120490d00410d210b2003410f4b0d020b200241003602a0012002420437039801200a0d02410421040c030b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241c0006a41086a200241e0006a41086a280200360200200220022903603703404105210b0b20024198016a41086a200241c0006a41086a280200220136020020022002290340220d370398010c050b41042104410021090340200941016a21094100210141002108024002400240024002400240024002400240034002402001411f4d0d00410f210b0c030b20022802d08104220b20022802d481042203460d01200341016a22052003490d07200b2005490d0820022802c8810420036a2d00002103200220053602d48104200341ff00712001411f71742008722108200141076a21012003418001710d000b20014120490d022003410f4d0d02410d210b0c010b200241013a0078200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241f8006a360228200241e0006a200241b8016a1041200241306a41086a200241e0006a41086a28020036020020022002290360220d370330200da721064105210b0b20022802382101200228023421030c010b200241b8016a200241c881046a10a70720022802c401210c20022802c001211220022802bc01211620022802b8014101470d0120022802c80121012016210b20122106200c21030b200241d0006a41086a200241b881046a41086a280200360200200220022903b881043703500c010b200241b8016a200241c881046a10ab0720022802c401210320022802c001210620022802bc01210b20022802b8014101470d0320022802c80121010240200c450d00200c4104742108201621050340024020052d00004109470d000240200541046a2209280200220a28020441ffffffff0371450d00200a28020010352009280200210a0b200a10350b200541106a2105200841706a22080d000b0b0240201241ffffffff0071450d00201610350b200241d0006a41086a200241b881046a41086a280200360200200220022903b881043703500b2003ad4220862006ad84210d20024198016a10b207200228029c012203450d082003411c6c450d08200410350c080b417f200541c0fdcb001059000b2005200b41c0fdcb001058000b200241003602c001200242043703b801200241b8016a41002003410274220541027510860120022802c001210702402003450d002005417c6a410276211320022802b80120074102746a2101200b2103034020012003280200360200200141046a2101200341046a21032005417c6a22050d000b200720136a41016a21070b200220073602c0010240200641ffffffff0371450d00200b10350b200241d0006a41086a200241b8016a41086a2802002201360200200241a8016a41086a22052001360200200220022903b801220d3703502002200d3703a8012012ad4220862016ad84210d024020022802a0012203200228029c01470d0020024198016a2003410110f901200228029801210420022802a00121030b20042003411c6c6a2201200d370204200120083602002001410c6a200c360200200120022903a801370210200141186a20052802003602002002200341016a3602a0012009200a470d000b0b2002200229029c01222337028c01200220043602880120022802d4810420022802d88104462101024020022802cc8104450d0020022802c8810410350b024020010d0020024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360210d2002280268210120024188016a10b20702402023a72203450d002003411c6c450d00200410350b200d422088210e4105210b410021040c050b410a21030c0f0b200141016a200841c0fdcb001058000b417f200141016a41c0fdcb001059000b200d422088210e200b41087621040c010b200d422088210e200b410876210420022802cc8104450d0020022802c8810410350b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002004410874200b41ff0171723602040c110b200241b8016a200110c707200241b8016a41106a2802002101200241b8016a410c6a2802002105200241b8016a41086a280200210920022802bc01210b0240024020022802b8014101460d00200241cc016a280200210641002103410021040240024002400240034002402003411f4d0d00410f21010c030b20052001460d012001417f460d042005200141016a220a490d06200b20016a2d0000220841ff00712003411f71742004722104200341076a2103200a21012008418001710d000b024020034120490d00410d21012008410f4b0d020b2006200a46210102402009450d00200b10350b2001450d02410921030c0f0b200241013a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a1041410521010b2000200136020420004101360200200041086a20022903c88104370200200041106a200241c881046a41086a2802003602002009450d14200b10350c140b20024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241d381046a200241e8006a280200360000200220022903603700cb8104200041053a0004200020022900c881043700052000410c6a200241cf81046a290000370000200041013602000c130b417f200141016a41c0fdcb001059000b2000200b36020420004101360200200041106a20013602002000410c6a2005360200200041086a20093602000c110b200141016a200541c0fdcb001058000b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b02400240024002400240024002400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d481042002200b3602c881042002200d3702cc8104200d422088a72108410021044100210a024002400240024002400240034002402004411f4d0d00410f210b0c030b20082001460d012001417f460d06200141016a220520084b0d05200b20016a2d00002103200220053602d48104200341ff00712004411f7174200a72210a200441076a2104200521012003418001710d000b024020044120490d00410d210b2003410f4b0d020b200241003602b001200242043703a801200a0d02410421040c030b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241306a41086a200241e0006a41086a280200360200200220022903603703304105210b0b200241c0006a41086a200241306a41086a280200220136020020022002290330220d3703400c0b0b410021070340200241b8016a200241c881046a10ad0720022802c401211620022802c001210c20022802bc01210b0240024002400240024002400240024002400240024020022802b8014101460d0002400240024002400240024020022802d08104220420022802d481042203460d00200341016a22012003490d0920042001490d0a20022802c88104220520036a2d00002103200220013602d48104200341034b0d0720030e0401020304010b200220073602b001200241013a009801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c180b410021084100210303402008411f4b0d150240024020042001460d002001417f460d0c2004200141016a22064f0d01200141016a200441c0fdcb001058000b200220073602b001200241013a009801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c190b200520016a2d00002109200220063602d48104200941ff00712008411f71742003722103200841076a2108200621012009418001710d000b4100210420084120490d032009410f4d0d030c150b410021084100210303402008411f4b0d140240024020042001460d002001417f460d0c2004200141016a22064f0d01200141016a200441c0fdcb001058000b200220073602b001200241013a009801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c180b200520016a2d00002109200220063602d48104200941ff00712008411f71742003722103200841076a2108200621012009418001710d000b4101210420084120490d022009410f4b0d140c020b410021084100210303402008411f4b0d130240024020042001460d002001417f460d0c2004200141016a22064f0d01200141016a200441c0fdcb001058000b200220073602b001200241013a009801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c170b200520016a2d00002109200220063602d48104200941ff00712008411f71742003722103200841076a2108200621012009418001710d000b4102210420084120490d012009410f4b0d130c010b410021084100210303402008411f4b0d120240024020042001460d002001417f460d0c2004200141016a22064f0d01200141016a200441c0fdcb001058000b200220073602b001200241013a009801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c160b200520016a2d00002109200220063602d48104200941ff00712008411f71742003722103200841076a2108200621012009418001710d000b4103210420084120490d002009410f4b0d120b200220163602bc81042002200c3602b8810420022903b88104210d200720022802ac01470d0a20074101742201200741016a2205200120054b1bad42147e220e422088a70d22200ea7220141004e0d020c220b200220022802c80122013602c08104200220163602bc81042002200c3602b88104200220073602b0010c140b200220073602b00120034108742103410a21040c100b0240024020070d0020010d01410421050c080b20022802a8012105200741146c22082001460d07024020080d0020010d01410421050c080b20052008200110372205450d240c070b200110332205450d230c060b417f200141c0fdcb001059000b2001200441c0fdcb001058000b417f200141016a41c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141016a41c0fdcb001059000b417f200141016a41c0fdcb001059000b200220053602a8012002200141146e3602ac010b20022802a801200741146c6a2201200436020c2001200d3702042001200b360200200141106a2003360200200741016a220121072001200a470d000b200220013602b00120022802a80121040b20022802d4810420022802d8810446210120022902ac012123024020022802cc8104450d0020022802c8810410350b024020010d002023a7210820024103410220011b3a00b88104200241b8016a41146a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360210d2002280268210102402023422088a72203450d00200341146c21052004210303400240200341046a280200450d00200328020010350b200341146a21032005416c6a22050d000b0b200d422088210e4105210b410021032008450d0b200841146c450d0b200410350c0b0b410821030c130b200141016a200841c0fdcb001058000b417f200141016a41c0fdcb001059000b200d422088210e200b41087621030c070b200220073602b001410f2104410021030c010b200220073602b001410d2104410021030b0c010b200228026021012002290264210d41052104410021030b200220013602b881042002200d3702bc8104200d422088210d0240200c450d00200b10350b2004200372210b200da7210120022802b00121070b20022903b88104210d02402007450d0020022802a8012104200741146c210303400240200441046a280200450d00200428020010350b200441146a21042003416c6a22030d000b0b20022802ac012204450d00200441146c450d0020022802a80110350b200d422088210e200b410876210320022802cc8104450d0020022802c8810410350b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200b41ff0171723602040c0f0b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b0240024002400240024002400240024002400240024002400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d481042002200b3602c881042002200d3702cc8104200d422088a72108410021044100210a024002400240034002402004411f4d0d00410f21040c030b20082001460d012001417f460d05200141016a220320084b0d0a200b20016a2d00002105200220033602d48104200541ff00712004411f7174200a72210a200441076a2104200321012005418001710d000b024020044120490d00410d21042005410f4b0d020b200241003602b001200242043703a801200a0d02410421040c0f0b200241013a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a36022820024188016a200241b8016a1041410521040b200241b881046a41086a20024188016a41086a28020022013602002002200229038801220d3703b881040c0c0b200a417f6a2106200241b8016a410472210741042104410421124104210a4100210903400240024020082003460d00200341016a22052003490d0520082005490d06200b20036a2c00002101200220053602d48104200141004e0d01411921160c0a0b200241013a008801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024188016a360228200241e0006a200241b8016a10410c0a0b41062116200141c00071450d080240200141807f72220c41ff017141fc014f0d00200c21010c090b02400240024020082005460d00200341026a21032005417f460d0820082003490d09200b20056a2d00002101200220033602d481040240200141014d0d00410c21160c0c0b4100210320010e020201020b200241013a008801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024188016a360228200241e0006a200241b8016a10410c0b0b410121030b200241b8016a200241c881046a10a707200241306a41086a200741086a2802002201360200200241c0006a41086a2205200136020020022007290200370340024020022802b8014101470d0020022d00c801210420022d00c901210320022f01ca0121010c0c0b200c417f73210820024198016a41086a20052802002201360200200241b881046a41086a2205200136020020022002290340220d370398012002200d3703b881040240200920022802ac01470d00200241a8016a20094101108c0120022802b001210920022802a801220421122004210a0b2005280200210520022903b88104210d200a20094104746a220120083a000c2001200d3702002001410d6a20033a0000200141086a20053602002002200941016a22093602b0012006450d0d2006417f6a210620022802d48104210320022802d08104210820022802c88104210b0c000b0b200d422088210e200b41087621030c0c0b417f200141016a41c0fdcb001059000b417f200541c0fdcb001059000b2005200841c0fdcb001058000b417f200341c0fdcb001059000b2003200841c0fdcb001058000b200141016a200841c0fdcb001058000b0c010b200228026021032002280264210520022802682104410521160b2002200536024820022003360244200220013a0041200220163a004020044110762101200441087621030b20024198016a41086a200241c0006a41086a28020036020020022002290340220e37039801200341ff0171410874200441ff017172210b20014110742106200229029c01210d02402009450d00200a20094104746a210803400240200a2802082204450d00200a2802002101200441047421040340024020012d00004109470d000240200141046a2205280200220328020441ffffffff0371450d0020032802001035200528020021030b200310350b200141106a2101200441706a22040d000b0b200a41106a21010240200a41046a28020041ffffffff0071450d00200a28020010350b2001210a20012008470d000b0b200b2006722101200ea7210420022802ac0141ffffffff0071450d00201210350b200d422088210e20044108762103024020022802cc81040d002004210b0c020b20022802c8810410352004210b0c010b20022802d4810420022802d8810446210120022902ac012123024020022802cc8104450d0020022802c8810410350b024020010d0020024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360210d2002280268210102402023422088a72203450d00200420034104746a21092004210b03400240200b2802082205450d00200b2802002103200541047421050340024020032d00004109470d000240200341046a220a280200220828020441ffffffff0371450d0020082802001035200a28020021080b200810350b200341106a2103200541706a22050d000b0b200b41106a21030240200b41046a28020041ffffffff0071450d00200b28020010350b2003210b20032009470d000b0b200d422088210e4105210b41002103202342ffffffff0083500d01200410350c010b410721030c080b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200b41ff0171723602040c0e0b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210802400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d48104200220083602c881042002200d3702cc8104200d422088a7210541002104410021030240024002400240024003402004411f4b0d010240024020052001460d002001417f460d0a200141016a220a20054d0d01200141016a200541c0fdcb001058000b200220053602d48104200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241306a41086a200241e0006a41086a28020036020020022002290360370330410521080c030b200820016a2d0000220b41ff00712004411f71742003722103200441076a2104200a2101200b418001710d000b2002200a3602d48104024020044120490d00410d2108200b410f4b0d020b4100210120024100360268200242043703604104210402402003450d000340200241b8016a200241c881046a10b00720022903c001210d20022802bc01210820022802b8014101460d04024020012002280264470d00200241e0006a2001410110870120022802602104200228026821010b20042001410c6c6a2205200d370204200520083602002002200141016a22013602682003417f6a22030d000b0b20022802d4810420022802d8810446210120022902642123024020022802cc8104450d0020022802c8810410350b20010d0420024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360220d422088210e2002280268210141052108410021032023a72205450d062005410c6c450d06200410350c060b200220013602d48104410f21080b200241c0006a41086a200241306a41086a280200220136020020022002290330220d3703400c010b200241c8016a280200210120022802642203450d002003410c6c450d00200410350b200d422088210e2008410876210320022802cc8104450d0220022802c8810410350c020b410621030c090b200d422088210e200841087621030b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200841ff0171723602040c0e0b417f200141016a41c0fdcb001059000b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b02400240024002400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d481042002200b3602c881042002200d3702cc8104200d422088a721034100210441002108024002400240024003402004411f4b0d010240024020032001460d002001417f460d08200141016a220520034d0d01200141016a200341c0fdcb001058000b200220033602d48104200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241306a41086a200241e0006a41086a28020036020020022002290360370330410521090c030b200b20016a2d0000220a41ff00712004411f71742008722108200441076a210420052101200a418001710d000b200220053602d48104024020044120490d00410d2109200a410f4b0d020b4100210a200241003602c08104200242043703b8810420080d02410421040c080b200220013602d48104410f21090b200241c0006a41086a200241306a41086a280200220136020020022002290330220d3703400c010b2008417f6a21084104210402400240034020032005460d01200541016a22012005490d0620032001490d07200b20056a2c00002103200220013602d48104410021090240200341004e0d00411921060c030b410721060240200341c000710d000c030b200341807f7222034170470d02200241b8016a200241c881046a10b00720022802bc012101024020022802b8014101470d00200141ff0171210620014180807c7121092001410876210320022903c001220d422088a7210b200241c8016a2802002101200da721050c030b20022903c001210d0240200a20022802bc8104470d00200241b881046a200a410110870120022802b88104210420022802c08104210a0b2004200a410c6c6a2203200d370204200320013602002002200a41016a220a3602c081042008450d082008417f6a210820022802d48104210520022802d08104210320022802c88104210b0c000b0b200241013a00a801200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241a8016a360228200241e0006a200241b8016a1041200228026021052002280264210b2002280268210141002109410521060b200bad4220862005ad84210d2009200341ff017141087472200672210920022802bc81042203450d002003410c6c450d00200410350b200d422088210e20094108762103024020022802cc81040d002009210b0c060b20022802c8810410352009210b0c050b200d422088210e200b41087621030c040b417f200141016a41c0fdcb001059000b417f200141c0fdcb001059000b2001200341c0fdcb001058000b20022802d4810420022802d8810446210120022902bc81042123024020022802cc8104450d0020022802c8810410350b024020010d0020024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360220d422088210e200228026821014105210b410021032023a72205450d012005410c6c450d01200410350c010b410521030c060b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200b41ff0171723602040c0c0b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b024002400240024002400240024002400240024020022802b8014101460d00200241cc016a280200210c200d422088a72103200da721074100210441002108034002402004411f4d0d00410f21090c090b20032001460d072001417f460d03200141016a220520034b0d05200b20016a2d0000220a41ff00712004411f71742008722108200441076a210420052101200a418001710d000b024020044120490d00410d2109200a410f4b0d080b410021122002410036026820024204370360410421040240024002402008450d00410021160340201641016a21164100210a200521014100210903400240200a411f4d0d00410f21090c050b20032001460d032001417f460d08200141016a220520034b0d0a200b20016a2d0000220641ff0071200a411f71742009722109200a41076a210a200521012006418001710d000b0240200a4120490d002006410f4d0d00410d21090c040b20024198016a41086a200241c0006a41086a2802003602002002200229034037039801024020122002280264470d00200241e0006a2012410110860120022802602104200228026821120b200420124102746a20093602002002201241016a221236026820162008470d000b0b2005200c4621012002290264212302402007450d00200b10350b2001450d03410421030c100b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241c881046a200241b8016a1041200241306a41086a200241c881046a41086a280200360200200220022903c88104370330410521090b200241386a28020021012002290330210d200228026441ffffffff0371450d08200410350c080b200d422088210e200b41087621030c080b20024103410220011b3a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a104120022903c88104220d422088210e20022802d0810421014105210b41002103202342ffffffff0383500d07200410350c070b417f200141016a41c0fdcb001059000b417f200141016a41c0fdcb001059000b200141016a200341c0fdcb001058000b200141016a200341c0fdcb001058000b200241013a00c88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241c881046a36022820024188016a200241b8016a1041410521090b200241b881046a41086a20024188016a41086a28020022013602002002200229038801220d3703b881040b200d422088210e41002103024020070d002009210b0c010b200b10352009210b0b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200b41ff0171723602040c0b0b200241b8016a200110c707200241c8016a2802002101200241b8016a41086a290300210d20022802bc01210b024002400240024002400240024020022802b8014101460d002002200241cc016a2802003602d88104200220013602d481042002200b3602c881042002200d3702cc8104200d422088a7210a4100210441002108024002400240024002400240034002402004411f4d0d00410f210b0c030b200a2001460d012001417f460d06200141016a2205200a4b0d05200b20016a2d00002103200220053602d48104200341ff00712004411f71742008722108200441076a2104200521012003418001710d000b024020044120490d00410d210b2003410f4b0d020b200241003602b001200242043703a80120080d02410421040c030b200241013a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a1041200241306a41086a200241e0006a41086a280200360200200220022903603703304105210b0b200241c0006a41086a200241306a41086a280200220136020020022002290330220d3703400c090b20022802ac01210620022802b001210c410021150340200241b8016a200241c881046a10ad0720022802c401211420022802c001211320022802bc01210b024002400240024002400240024002400240024002400240024002400240024002400240024020022802b8014101460d00200241b8016a200241c881046a10ad0720022802c401211020022802c001211820022802bc012116024002400240024020022802b8014101460d000240024002400240024020022802d08104220320022802d481042205460d00200541016a22012005490d0a20032001490d0b20022802c88104220720056a2d00002104200220013602d481040240200441034d0d00410921090c230b20040e0401020304010b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c200b410021124100210441002109034002402004411f4d0d00410f2109410021040c080b20032001460d062001417f460d0b2003200141016a220a490d12200720016a2d000021052002200a3602d48104200541ff00712004411f71742009722109200441076a2104200a21012005418001710d000b4100211220044120490d172005410f4d0d17410d2109410021040c060b0240024020032001460d00200541026a21042001417f460d0c20032004490d0d200720016a2c00002101200220043602d4810402402001417f4a0d00411921030c160b200141c00071450d14200141807f7222014170470d14200241b8016a200241c881046a10b00720022903c001210d20022802bc01210920022802b8014101470d0120022802c80121040c160b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10412002290360210d20022802682104410521030c140b410121120c180b200241b8016a200241c881046a10b00720022903c001210d20022802bc012109024020022802b8014101460d00410221120c180b200220022802c8013602c0012009411876210320094110762112200941087621040c140b0240024020032001460d00200541026a210a2001417f460d0c2003200a490d0d200720016a2c000021042002200a3602d481040240200441004e0d0041192109410021030c200b200441c000710d010c110b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a1041410521092002290264210e20022802602101410021030c1e0b200441807f72220441ff017141fb014d0d0f02402003200a460d00200541036a2101200a417f460d0d20032001490d0e2007200a6a2d00002105200220013602d481040240200541014d0d00410c2109200521040c1f0b2004417f73210a410321124100210320050e021702170b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a10410c1c0b200220022802c80122013602c08104200220103602bc8104200220183602b881042016411876210320164110762112201641087621040c1d0b410121030c130b200241013a009801200241013602cc01200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c801200220024198016a360228200241e0006a200241b8016a1041200228026021012002290264210e41052109410021040b410021030c190b20022802c8012101200220143602bc8104200220133602b88104200220063602ac012002200c3602b0010c1a0b417f200141c0fdcb001059000b2001200341c0fdcb001058000b417f200141016a41c0fdcb001059000b417f200441c0fdcb001059000b2004200341c0fdcb001058000b417f200a41c0fdcb001059000b200a200341c0fdcb001058000b417f200141c0fdcb001059000b2001200341c0fdcb001058000b200141016a200341c0fdcb001058000b410621090c0d0b410721030b200141ff017141087420037221090b200220043602c0012009411876210320094110762112200941087621040b2002200d3703b80120022902bc01210e200da721010c090b0b0b200220143602bc8104200220133602b8810420022903b88104210e02400240200c2006460d0020062105200c21060c010b200641016a22012006490d11200641017422042001200420014b1bad42287e2223422088a70d112023a722014100480d1102400240024020060d0020010d01410421040c020b20022802a8012104200641286c22052001460d01024020050d0020010d01410421040c020b20042005200110372204450d170c010b200110332204450d160b200220043602a801200141286e21050b20022802a8012204200641286c6a220120123a00182001201636020c2001200e3702042001200b360200200141206a200d3702002001411c6a20093602002001411a6a20033a0000200141196a200a3a0000200141146a2010360200200141106a2018360200200641016a210c20052106201541016a22152008470d000b200220053602ac012002200c3602b0010b20022802d4810420022802d8810446210120022902ac012123024020022802cc8104450d0020022802c8810410350b024020010d002023a7210820024103410220011b3a00b88104200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241b881046a360228200241e0006a200241b8016a10412002290360210d2002280268210102402023422088a72203450d00200341286c21052004210303400240200341046a280200450d00200328020010350b0240200341106a280200450d002003410c6a28020010350b200341286a2103200541586a22050d000b0b200d422088210e4105210b410021032008450d09200841286c450d09200410350c090b410321030c0c0b200141016a200a41c0fdcb001058000b417f200141016a41c0fdcb001059000b200d422088210e200b41087621030c050b200228026021012002290264210e410521090b200220013602b881042002200e3702bc8104200e422088a72101024020180d00200921160c010b20161035200921160b02402013450d00200b10350b2002200c3602b001200220063602ac012003411874201241ff017141107472200441ff017141087472201641ff017172210b0b20022903b88104210d20022802a80121050240200c450d00200c41286c21032005210403400240200441046a280200450d00200428020010350b0240200441106a280200450d002004410c6a28020010350b200441286a2104200341586a22030d000b0b2006450d00200641286c450d00200510350b200d422088210e200b410876210320022802cc8104450d0020022802c8810410350b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200b41ff0171723602040c0a0b200a41087621030b20004101360200200041106a2001360200200041086a200e422086200d42ffffffff0f838437020020002003410874200a41ff0171723602040c080b4100210141002104024002400240024002400240024002400340024020084105470d00410f21070c030b20032008460d01200320084d0d04200620086a2d0000220541ff00712001411f71742004722104200141076a2101200841016a220a21082005418001710d000b024020014120490d002005410f4d0d00410d21070c020b20040d024101211641002107410021054100210b0c070b200241013a0060200241cc016a4101360200200242013702bc01200241acfdcb003602b8012002413636022c2002200241286a3602c8012002200241e0006a360228200241c881046a200241b8016a1041200241306a41086a200241c881046a41086a280200360200200220022903c88104220d370330410521070b200d422088a7210520022802382101200da7210b0c030b200241b8016a4100418008109f081a4100210541002108410121164100210702400240024003402003200a6b200420076b22014180082001418008491b2201490d01200a20016a220c200a490d022003200c490d03200241b8016a2006200a6a2001109d081a02400240200820056b2001490d002008210b0c010b200520016a220a2005490d0c2008410174220b200a200b200a4b1b220b4100480d0c0240024020080d000240200b0d00410121160c020b200b103322160d010c120b2008200b460d0020162008200b10372216450d110b200b21080b201620056a200241b8016a2001109d081a200520016a2105200c210a2004200120076a22074d0d050c000b0b200241013a00b88104200241dc81046a4101360200200242013702cc8104200241acfdcb003602c881042002413636022c2002200241286a3602d881042002200241b881046a360228200241e0006a200241c881046a10412002290360220d422088a7210520022802682101200da7210b410521072008450d04201610350c040b200a200c41c0fdcb001059000b200c200341c0fdcb001058000b200841016a200341c0fdcb001058000b200241b8016a20162005107420022802b8014101470d01410821070240200b450d00201610350b0b2005ad422086200bad84210d2009450d03200610350c030b201641807e712107200c210a0b2003200a490d052003200a6b2203417f4c0d030240024020030d0041002104410121010c010b200310332201450d05200321040b0240024020042003490d00200421080c010b200441017422082003200820034b1b22084100480d03024020040d00200810332201450d080c010b20042008460d0020012004200810372201450d070b2007201641ff01717221042005ad422086200bad84212320012006200a6a2003109d081a2003ad4220862008ad84210d410121032009450d00200610350b200020033a000420004100360200200041056a20022f00153b0000200041186a200d370200200041146a20013602002000410c6a2023370200200041086a2004360200200041206a2002290200370200200041076a200241176a2d00003a0000200041286a200241086a290200370200200041306a200241106a2802003602000c060b2000200736020420004101360200200041106a2001360200200041086a200d3702000c050b103e000b1044000b1045000b200a20034188d9cb001059000b103c000b200241e081046a24000bdc0101057f024020002802082201450d00200028020022022001411c6c6a21030340024020022802042200450d0002402002410c6a2802002201450d00200141047421010340024020002d00004109470d000240200041046a2204280200220528020441ffffffff0371450d0020052802001035200428020021050b200510350b200041106a2100200141706a22010d000b0b200241086a28020041ffffffff0071450d00200228020410350b2002411c6a21000240200241146a28020041ffffffff0371450d00200228021010350b2000210220002003470d000b0b0bd90101057f024020002802082201450d0020002802002202200141186c6a210303400240200241046a28020041ffffffff0171450d00200228020010350b0240200241146a2802002201450d00200228020c2100200141047421010340024020002d00004109470d000240200041046a2204280200220528020441ffffffff0371450d0020052802001035200428020021050b200510350b200041106a2100200141706a22010d000b0b200241186a21000240200241106a28020041ffffffff0071450d00200228020c10350b2000210220002003470d000b0b0bd50101057f024020002802082201450d00200028020022022001411c6c6a21030340024020022802042200450d0002402002410c6a2802002201450d00200141047421010340024020002d00004109470d000240200041046a2204280200220528020441ffffffff0371450d0020052802001035200428020021050b200510350b200041106a2100200141706a22010d000b0b200241086a28020041ffffffff0071450d00200228020410350b2002411c6a21000240200241146a280200450d00200228021010350b2000210220002003470d000b0b0be40101047f0240200041206a28020022032000411c6a280200470d000240024002400240200341016a22042003490d00200341017422052004200520044b1b220620066a22042006490d0020044100480d00024020030d0020040d02410121030c040b2000280218210320052004460d03024020050d0020040d02410121030c040b20032005200410372203450d020c030b103e000b2004103322030d010b103c000b200020033602182000411c6a2004410176360200200028022021030b200028021820034101746a220320023a0001200320013a00002000200028022041016a3602200be70101037f0240200041386a2802002202200041346a280200470d000240024002400240200241016a22032002490d00200241017422042003200420034b1b220341ffffffff03712003470d00200341027422034100480d00024020020d0020030d02410421040c040b20002802302104200241027422022003460d03024020020d0020030d02410421040c040b20042002200310372204450d020c030b103e000b2003103322040d010b103c000b20002004360230200041346a2003410276360200200028023821020b200028023020024102746a20013602002000200028023841016a3602380b8d0302037f017e230041c0006b22022400200141086a28020021032001280204210420022001280200220136020002400240024002402001418080044b0d002004450d022002200336020402400240200120034b0d002003418080044d0d042002413c6a41013602002002420237022c200241e0aacc003602282002410136020c200241bcaacc003602082002200241086a360238200241186a200241286a1041200241186a21010c010b2002413c6a4102360200200241246a41013602002002420237022c200241d0aacc003602282002410136021c2002200241186a360238200220023602202002200241046a360218200241086a200241286a1041200241086a21010b20012902042105200128020021010c010b2002413c6a41013602002002420237022c200241c0aacc003602282002410136020c200241bcaacc003602082002200241086a360238200241186a200241286a104120022802182101200229021c21050b2001450d0020002005370204200020013602000c010b200041003602000b200241c0006a24000be00501037f230041f0006b2204240002400240024020012802084102460d00412e10332201450d01200041013a0000200141266a41002900d4ac4c370000200141206a41002900ceac4c370000200141186a41002900c6ac4c370000200141106a41002900beac4c370000200141086a41002900b6ac4c370000200141002900aeac4c370000200041086a42ae808080e005370200200041046a20013602000c020b0240024002400240024002400240200128020022052d0000416e6a2201411e4b0d004100210620010e1f03000000000000000000000000000000000000000000000000000006040102030b412010332201450d06200041013a0000200141186a41002900f4ac4c370000200141106a41002900ecac4c370000200141086a41002900e4ac4c370000200141002900dcac4c370000200041086a42a08080808004370200200041046a20013602000c070b410221060c040b410321060c030b20042005280204220136020c0240024020012003490d0041fcaccc002105200441e8006a2103200441d0006a2101200441c0006a21020c010b200220014101746a22012d0001450d02418cadcc002105200441386a2103200441206a2101200441106a21020b20034101360204200141146a410136020020012003360210200142023702042001200536020020032004410c6a360200200220011041200041013a00002000410c6a200241086a280200360200200041046a20022902003702000c040b410121060c010b20012d000021060b0240200541106a2d00004106470d00200041003a0000200020063a00010c020b412910332201450d00200041013a0000200141286a41002d00c4ad4c3a0000200141206a41002900bcad4c370000200141186a41002900b4ad4c370000200141106a41002900acad4c370000200141086a41002900a4ad4c3700002001410029009cad4c370000200041086a42a98080809005370200200041046a20013602000c010b1045000b200441f0006a24000b8f0201017f230041106b220224000240024002400240024020002d00000e0401020300010b200220012802184180fdcb0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c030b200220012802184183fdcb0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c020b200220012802184186fdcb0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b200220012802184189fdcb0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040b200241106a240020000bbb0101027f0240200041046a2802002001470d000240024002400240200141016a22022001490d00200141017422032002200320024b1b220241ffffffff01712002470d00200241037422024100480d00024020010d0020020d02410421030c040b20002802002103200141037422012002460d03024020010d0020020d02410421030c040b20032001200210372203450d020c030b103e000b2002103322030d010b103c000b20002003360200200041046a20024103763602000b0bbbcb0203047f017e057f230041a0016b2203240002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020022d00000eac0101cc0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa0100010b20034188016a200141186a2204200141286a410110f207024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490dcb01200241017422062005200620054b1b22054100480dcb010240024020020d002005103322040d010cd2010b2004280200210420022005460d0020042002200510372204450dd1010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000ccd010b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450dcc012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dcc010ccb010b200328028c012201450dcb0120034190016a29030021070cca010b200141306a2802002202450da90102400240200241037420012802286a41786a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d002001280218210a200221010c010b200220096a220a2002490dc9012008410174220b200a200b200a4b1b220b4100480dc9010240024020080d000240200b0d004101210a0c020b200b1033220a450dd0010c010b2001280218210a2008200b460d00200a2008200b1037220a450dcf010b2001200a3602182001411c6a200b360200200141206a28020021010b200a20016a21080240024020094102490d002008410420042002417f736a2202109f081a200a200220016a22016a21080c010b2009450d010b200841043a0000200141016a21010b20062001360200200541013a00060cca010b0240200141306a2802002204200141346a22052802004f0d002002310001422886200141206a350200842107024020042001412c6a280200470d00200141286a200410ba07200141306a28020021040b200128022820044103746a2007370200200141306a2201200128020041016a3602000cca010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc9012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dc90120002007370204200020013602000cca010b0240200141306a2802002204200141346a22052802004f0d002002310001422886200141206a35020084428080808030842107024020042001412c6a280200470d00200141286a200410ba07200141306a28020021040b200128022820044103746a2007370200200141306a2201200128020041016a3602000cc9010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc8012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dc80120002007370204200020013602000cc9010b2002310001210720034188016a200141186a200141286a2204410010f20720032d0088014101460da7010240200141306a2802002202200141346a22052802004f0d002007422886200141206a35020084428080808010842107024020022001412c6a280200470d002004200210ba07200141306a28020021020b200128022820024103746a2007370200200141306a2201200128020041016a3602000cc8010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc7012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dc70120002007370204200020013602000cc8010b200141306a2802002202450da70102400240200141286a22042802002002417f6a4103746a22022d00044101470d002002310005210720034188016a200141186a200410f307200328028801450d012000200329038801370200200041086a20034188016a41086a2802003602000cc9010b411a10332201450da901200141186a41002f00b0a54c3b0000200141106a41002900a8a54c370000200141086a41002900a0a54c37000020014100290098a54c3700002000429a808080a003370204200020013602000cc8010b0240200141306a2802002202200141346a22052802004f0d002007422886200141206a35020084428080808020842107024020022001412c6a280200470d002004200210ba07200141306a28020021020b200128022820024103746a2007370200200141306a2201200128020041016a3602000cc7010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc6012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dc60120002007370204200020013602000cc7010b200141306a2802002202450da8012002410374200141286a22062802006a2204417d6a220a2d0000210502402004417c6a2d00004101470d00200541ff01714104470daa010b02400240024002400240024020024101460d0020034188016a200141186a2202200610f3072003280288010d01200541ff01714104460dcb01200141206a2802002204200141246a22062802004f0d0520042001411c6a280200470d04200441016a22062004490dc8012004410174220a2006200a20064b1b22064100480dc80120040d02200610332202450dcd010c030b024020012d003822024104460d0020034188016a200141186a2006200210f407200328028801450d002000200329038801370200200041086a20034188016a41086a2802003602000ccc010b20034188016a200141186a200610f307200328028801450dca012000200329038801370200200041086a20034188016a41086a2802003602000ccb010b2000200329038801370200200041086a20034188016a41086a2802003602000cca010b2002280200210220042006460d0020022004200610372202450dca010b200120023602182001411c6a2006360200200141206a28020021040b200128021820046a20053a0000200141206a2201200128020041016a3602000cc6010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320063602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc5012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450dc50120002007370204200020013602000cc6010b2003200241046a2802002202360278024002400240200141306a280200220420024d0d0020042002417f736a220220044f0dac01200141286a220428020020024103746a22022d00044103460d0220022d0005220241ff01714104460d0220034188016a200141186a2004200210f4072003280288012202450d02200329028c0121070c010b2003419c016a22024102360200200341cc006a41013602002003420237028c0120034198b0cc003602880120034101360244200320043602302003200341c0006a360298012003200341306a3602482003200341f8006a360240200341e8006a20034188016a1041200328026821042003200329026c37026c20032004360268200241013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402102200329024421070240200328026c450d00200328026810350b2002450d010b20002007370204200020023602000cc6010b200141306a2802002202450daa0102400240200241037420012802286a41786a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d002001280218210a200221010c010b200220096a220a2002490dc3012008410174220b200a200b200a4b1b220b4100480dc3010240024020080d000240200b0d004101210a0c020b200b1033220a450dca010c010b2001280218210a2008200b460d00200a2008200b1037220a450dc9010b2001200a3602182001411c6a200b360200200141206a28020021010b200a20016a21080240024020094102490d002008410420042002417f736a2202109f081a200a200220016a22016a21080c010b2009450d010b200841043a0000200141016a21010b20062001360200200541013a00060cc4010b200241046a280200210220034188016a200141186a2205200141286a2204410010f20702400240024020032d0088014101460d00200141306a2802002101200320023602780240200120024d0d0020012002417f736a220220014f0db401200428020020024103746a22012d00044103460dc70120012d0005220141ff01714104460dc70120034188016a20052004200110f4072003280288012201450dc701200329028c0121070c030b2003419c016a22024102360200200341cc006a41013602002003420237028c0120034198b0cc003602880120034101360244200320013602302003200341c0006a360298012003200341306a3602482003200341f8006a360240200341e8006a20034188016a1041200328026821012003200329026c37026c20032001360268200241013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a10412003280240210120032902442107200328026c450d01200328026810350c010b20034190016a2903002107200328028c0121010b2001450dc4010b20002007370204200020013602000cc4010b200241046a2802002202280204210620022802002104200320022802082205360278200141306a280200220220054d0dbd0120022005417f736a220520024f0da901410421080240200141286a220c280200220a20054103746a22052d00044103460d0020052d000521080b200320083a00602006450db701200841ff0171220b4104460db601200641027421060340200320042802002205360278200220054d0db90120022005417f736a220520024f0dc101200a20054103746a22052d00044103460dba0120052d000522094104460dba01200b2009470dba01200441046a21042006417c6a22060d000cb8010b0b024020012d003822024104460d0020034188016a200141186a200141286a200210f407200328028801450d002000200329038801370200200041086a20034188016a41086a2802003602000cc3010b200141306a2802002202450da90102400240200241037420012802286a41786a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d002001280218210a200221010c010b200220096a220a2002490dc0012008410174220b200a200b200a4b1b220b4100480dc0010240024020080d000240200b0d004101210a0c020b200b1033220a450dc7010c010b2001280218210a2008200b460d00200a2008200b1037220a450dc6010b2001200a3602182001411c6a200b360200200141206a28020021010b200a20016a21080240024020094102490d002008410420042002417f736a2202109f081a200a200220016a22016a21080c010b2009450d010b200841043a0000200141016a21010b20062001360200200541013a00060cc1010b200128020021042003200241046a280200220236028401024002400240024002400240024002400240200441386a28020020024d0d002003200428023020024102746a2802002202360230024002402004412c6a28020020024d0d00200341cc006a200428022420024104746a22042d000d220a3a0000200341c8006a2004280208220236020020042802002104410021050c010b410121052003419c016a41013602002003420237028c01200341f0aecc00360288012003410136027c2003200341f8006a360298012003200341306a360278200341e8006a20034188016a1041200341c8006a200329026c22073703002007422088a7210a200328026821042007a721020b200320053602402003200436024420050d0102402002450d002004417f6a2104200141286a2105200141186a2106034020034188016a20062005200420026a2d000010f20720032d0088014101460d082002417f6a22020d000b0b200a41ff01714104460dc901200141206a2802002202200141246a22042802004f0d0520022001411c6a280200470d04200241016a22042002490dc601200241017422052004200520044b1b22044100480dc60120020d02200410332205450dcb010c030b2003419c016a41013602002003420237028c01200341ccaecc0036028801200341013602642003200341e0006a36029801200320034184016a360260200341e8006a20034188016a1041200341c8006a200329026c370300200341013602402003200328026822043602440b200341c8006a21010c050b2001280218210520022004460d0020052002200410372205450dc8010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a200a3a0000200141206a2201200128020041016a3602000cc4010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450dc3012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402104200329024421070240200328026c450d00200328026810350b20040d020cc3010b20034190016a2101200328028c0121040b2004450dc101200129020021070b20002007370204200020043602000cc1010b200241046a28020021062001280200210220034100360268200241146a280200450da80120034188016a200141186a2204200141286a2205410010f20720032d0088014101460da9012001280200220a412c6a28020021022003200636026802400240024002400240200220064d0d00200a28022420064104746a22062d000d210a024020062802082202450d002006280200417f6a2106034020034188016a20042005200620026a2d000010f20720032d0088014101460db1012002417f6a22020d000b0b200a41ff01714104460dc401200141206a2802002202200141246a22052802004f0d0420022001411c6a280200470d03200241016a22052002490dc101200241017422062005200620054b1b22054100480dc10120020d01200510332204450dc6010c020b2003419c016a41013602002003420237028c01200341f0aecc0036028801200341013602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a10410cb5010b2004280200210420022005460d0020042002200510372204450dc4010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a200a3a0000200141206a2201200128020041016a3602000cc0010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dbf012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a10412003280240210120032902442107200328026c450db201200328026810350cb2010b20034188016a200141186a200141286a410410f20720032d0088014101470dbe01200328028c012201450dbe01200020034190016a290300370204200020013602000cbf010b20034188016a200141186a2204200141286a2205410010f20720034188016a21020240024020032d0088014101460d0020034188016a20042005410410f20720034188016a210220032d0088014101460d0020034188016a2004200520032d008901220610f20720034188016a210220032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490dbe012002410174220a2005200a20054b1b22054100480dbe010240024020020d00200510332204450dc5010c010b2004280200210420022005460d0020042002200510372204450dc4010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a20063a0000200141206a2201200128020041016a3602000cc0010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450dbf012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010cbf010b200241046a2802002201450dbe01200241086a29020021070b20002007370204200020013602000cbe010b20034188016a200141046a200241046a28020010f5070240024020032d0088014101460d000240200141206a2802002202200141246a22042802004f0d0020032d0089012104024020022001411c6a280200470d00200241016a22052002490dbd01200241017422062005200620054b1b22054100480dbd010240024020020d00200510332206450dc4010c010b2001280218210620022005460d0020062002200510372206450dc3010b200120063602182001411c6a2005360200200141206a28020021020b200128021820026a20043a0000200141206a2201200128020041016a3602000cbf010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450dbe012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010cbe010b200328028c012201450dbd0120034190016a29030021070b20002007370204200020013602000cbd010b2003200241046a280200220236023020034188016a200141046a200210f5070240024020032d0088014101460d00200320032d00890122023a006020034188016a200141186a200141286a410410f2070240024020032d0088014101460d00200320032d00890122013a007820014104460dbf01200241ff01712001460dbf01200341c0006a41146a413d360200200341cc006a413736020020034188016a41146a41033602002003420337028c01200341d4a5cc0036028801200341013602442003200341c0006a360298012003200341f8006a3602502003200341e0006a3602482003200341306a360240200341e8006a20034188016a10410c010b200341f0006a20034194016a2802003602002003200329028c013703680b200329026c2107200328026821010c010b2003200328028c012201360268200320034190016a290300220737026c0b2001450dbb0120002007370204200020013602000cbc010b20034188016a200141046a200241046a28020010f5070240024020032d0088014101460d0020034188016a200141186a200141286a20032d00890110f4072003280288012201450dbc01200329028c0121070c010b200328028c012201450dbb0120034190016a29030021070b20002007370204200020013602000cbb010b200128020021042003200241046a280200220236026802400240200441206a28020020024d0d000240200141206a2802002205200141246a22062802004f0d00200428021820024101746a2d00002102024020052001411c6a280200470d00200541016a22042005490dba01200541017422062004200620044b1b22044100480dba010240024020050d00200410332206450dc1010c010b2001280218210620052004460d0020062005200410372206450dc0010b200120063602182001411c6a2004360200200141206a28020021050b200128021820056a20023a0000200141206a2201200128020041016a3602000cbc010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320063602302003200341306a36029801200341c0006a20034188016a104120032802402202450dbb012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010cbb010b2003419c016a41013602002003420237028c0120034190afcc00360288012003410136027c2003200341f8006a360298012003200341e8006a360278200341c0006a20034188016a104120032802402201450dba01200329024421070b20002007370204200020013602000cba010b2003200241046a2802002202360258200128020021042003200236028401024002400240200441206a28020020024d0d00200428021820024101746a22022d00010d022003419c016a41013602002003420237028c01200341a0afcc0036028801200341013602342003200341306a36029801200320034184016a360230200341c0006a20034188016a10410c010b2003419c016a41013602002003420237028c0120034190afcc00360288012003410136027c2003200341f8006a36029801200320034184016a360278200341c0006a20034188016a10410b2003280240210120032003290244220737026c200320013602680caa010b200320022d000022023a005f20034188016a200141186a200141286a410410f20720032d0088014101470da701200341f0006a20034194016a2802003602002003200329028c013703680ca8010b20034188016a2001200241046a2802004104410010f707200328028801450db7012000200329038801370200200041086a20034188016a41086a2802003602000cb8010b20034188016a2001200241046a2802004108410110f707200328028801450db6012000200329038801370200200041086a20034188016a41086a2802003602000cb7010b20034188016a2001200241046a2802004104410210f707200328028801450db5012000200329038801370200200041086a20034188016a41086a2802003602000cb6010b20034188016a2001200241046a2802004108410310f707200328028801450db4012000200329038801370200200041086a20034188016a41086a2802003602000cb5010b20034188016a2001200241046a2802004101410010f707200328028801450db3012000200329038801370200200041086a20034188016a41086a2802003602000cb4010b20034188016a2001200241046a2802004101410010f707200328028801450db2012000200329038801370200200041086a20034188016a41086a2802003602000cb3010b20034188016a2001200241046a2802004102410010f707200328028801450db1012000200329038801370200200041086a20034188016a41086a2802003602000cb2010b20034188016a2001200241046a2802004102410010f707200328028801450db0012000200329038801370200200041086a20034188016a41086a2802003602000cb1010b20034188016a2001200241046a2802004101410110f707200328028801450daf012000200329038801370200200041086a20034188016a41086a2802003602000cb0010b20034188016a2001200241046a2802004101410110f707200328028801450dae012000200329038801370200200041086a20034188016a41086a2802003602000caf010b20034188016a2001200241046a2802004102410110f707200328028801450dad012000200329038801370200200041086a20034188016a41086a2802003602000cae010b20034188016a2001200241046a2802004102410110f707200328028801450dac012000200329038801370200200041086a20034188016a41086a2802003602000cad010b20034188016a2001200241046a2802004104410110f707200328028801450dab012000200329038801370200200041086a20034188016a41086a2802003602000cac010b20034188016a2001200241046a2802004104410110f707200328028801450daa012000200329038801370200200041086a20034188016a41086a2802003602000cab010b20034188016a2001200241046a2802004104410010f807200328028801450da9012000200329038801370200200041086a20034188016a41086a2802003602000caa010b20034188016a2001200241046a2802004108410110f807200328028801450da8012000200329038801370200200041086a20034188016a41086a2802003602000ca9010b20034188016a2001200241046a2802004104410210f807200328028801450da7012000200329038801370200200041086a20034188016a41086a2802003602000ca8010b20034188016a2001200241046a2802004108410310f807200328028801450da6012000200329038801370200200041086a20034188016a41086a2802003602000ca7010b20034188016a2001200241046a2802004101410010f807200328028801450da5012000200329038801370200200041086a20034188016a41086a2802003602000ca6010b20034188016a2001200241046a2802004102410010f807200328028801450da4012000200329038801370200200041086a20034188016a41086a2802003602000ca5010b20034188016a2001200241046a2802004101410110f807200328028801450da3012000200329038801370200200041086a20034188016a41086a2802003602000ca4010b20034188016a2001200241046a2802004102410110f807200328028801450da2012000200329038801370200200041086a20034188016a41086a2802003602000ca3010b20034188016a2001200241046a2802004104410110f807200328028801450da1012000200329038801370200200041086a20034188016a41086a2802003602000ca2010b20012802002102200341003602680240024020022802080d002003419c016a41013602002003420237028c01200341fcadcc0036028801200341013602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402202450d00200329024421070c010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490da001200241017422052004200520044b1b22044100480da0010240024020020d00200410332205450da7010c010b2001280218210520022004460d0020052002200410372205450da6010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000ca2010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450da1012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402102200329024421070240200328026c450d00200328026810350b2002450da1010b20002007370204200020023602000ca1010b20012802002102200341003602680240024020022802080d002003419c016a41013602002003420237028c01200341fcadcc0036028801200341013602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402202450d00200329024421070c010b20034188016a200141186a2204200141286a410010f207024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490da001200241017422062005200620054b1b22054100480da0010240024020020d00200510332204450da7010c010b2004280200210420022005460d0020042002200510372204450da6010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000ca2010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320053602302003200341306a36029801200341c0006a20034188016a104120032802402202450da1012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402102200329024421070240200328026c450d00200328026810350b20020d010ca1010b200328028c012202450da00120034190016a29030021070b20002007370204200020023602000ca0010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9d01200241017422052004200520044b1b22044100480d9d010240024020020d00200410332205450da4010c010b2001280218210520022004460d0020052002200410372205450da3010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c9f010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450d9e012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450d9e0120002007370204200020013602000c9f010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9c01200241017422052004200520044b1b22044100480d9c010240024020020d00200410332205450da3010c010b2001280218210520022004460d0020052002200410372205450da2010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c9e010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450d9d012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450d9d0120002007370204200020013602000c9e010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9b01200241017422052004200520044b1b22044100480d9b010240024020020d00200410332205450da2010c010b2001280218210520022004460d0020052002200410372205450da1010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c9d010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450d9c012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450d9c0120002007370204200020013602000c9d010b0240200141206a2802002202200141246a22042802004f0d00024020022001411c6a280200470d00200241016a22042002490d9a01200241017422052004200520044b1b22044100480d9a010240024020020d00200410332205450da1010c010b2001280218210520022004460d0020052002200410372205450da0010b200120053602182001411c6a2004360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c9c010b2003419c016a220141013602002003420137028c01200341e8b1cc003602880120034101360234200320043602302003200341306a36029801200341c0006a20034188016a104120032802402202450d9b012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b2001450d9b0120002007370204200020013602000c9c010b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d9b01200241017422062005200620054b1b22054100480d9b010240024020020d00200510332204450da2010c010b2004280200210420022005460d0020042002200510372204450da1010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c9d010b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d9c012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c9c010b200328028c012201450d9b0120034190016a29030021070b20002007370204200020013602000c9b010b20034188016a2001410010f907200328028801450d99012000200329038801370200200041086a20034188016a41086a2802003602000c9a010b20034188016a2001410010f907200328028801450d98012000200329038801370200200041086a20034188016a41086a2802003602000c99010b20034188016a2001410010f907200328028801450d97012000200329038801370200200041086a20034188016a41086a2802003602000c98010b20034188016a2001410010f907200328028801450d96012000200329038801370200200041086a20034188016a41086a2802003602000c97010b20034188016a2001410010f907200328028801450d95012000200329038801370200200041086a20034188016a41086a2802003602000c96010b20034188016a2001410010f907200328028801450d94012000200329038801370200200041086a20034188016a41086a2802003602000c95010b20034188016a2001410010f907200328028801450d93012000200329038801370200200041086a20034188016a41086a2802003602000c94010b20034188016a2001410010f907200328028801450d92012000200329038801370200200041086a20034188016a41086a2802003602000c93010b20034188016a2001410010f907200328028801450d91012000200329038801370200200041086a20034188016a41086a2802003602000c92010b20034188016a2001410010f907200328028801450d90012000200329038801370200200041086a20034188016a41086a2802003602000c91010b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d9001200241017422062005200620054b1b22054100480d90010240024020020d00200510332204450d97010c010b2004280200210420022005460d0020042002200510372204450d96010b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c92010b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d91012003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c91010b200328028c012201450d900120034190016a29030021070b20002007370204200020013602000c90010b20034188016a2001410110f907200328028801450d8e012000200329038801370200200041086a20034188016a41086a2802003602000c8f010b20034188016a2001410110f907200328028801450d8d012000200329038801370200200041086a20034188016a41086a2802003602000c8e010b20034188016a2001410110f907200328028801450d8c012000200329038801370200200041086a20034188016a41086a2802003602000c8d010b20034188016a2001410110f907200328028801450d8b012000200329038801370200200041086a20034188016a41086a2802003602000c8c010b20034188016a2001410110f907200328028801450d8a012000200329038801370200200041086a20034188016a41086a2802003602000c8b010b20034188016a2001410110f907200328028801450d89012000200329038801370200200041086a20034188016a41086a2802003602000c8a010b20034188016a2001410110f907200328028801450d88012000200329038801370200200041086a20034188016a41086a2802003602000c89010b20034188016a2001410110f907200328028801450d87012000200329038801370200200041086a20034188016a41086a2802003602000c88010b20034188016a2001410110f907200328028801450d86012000200329038801370200200041086a20034188016a41086a2802003602000c87010b20034188016a2001410110f907200328028801450d85012000200329038801370200200041086a20034188016a41086a2802003602000c86010b20034188016a2001410210f907200328028801450d84012000200329038801370200200041086a20034188016a41086a2802003602000c85010b20034188016a2001410210f907200328028801450d83012000200329038801370200200041086a20034188016a41086a2802003602000c84010b20034188016a2001410210f907200328028801450d82012000200329038801370200200041086a20034188016a41086a2802003602000c83010b20034188016a2001410210f907200328028801450d81012000200329038801370200200041086a20034188016a41086a2802003602000c82010b20034188016a2001410210f907200328028801450d80012000200329038801370200200041086a20034188016a41086a2802003602000c81010b20034188016a2001410210f907200328028801450d7f2000200329038801370200200041086a20034188016a41086a2802003602000c80010b20034188016a2001410310f907200328028801450d7e2000200329038801370200200041086a20034188016a41086a2802003602000c7f0b20034188016a2001410310f907200328028801450d7d2000200329038801370200200041086a20034188016a41086a2802003602000c7e0b20034188016a2001410310f907200328028801450d7c2000200329038801370200200041086a20034188016a41086a2802003602000c7d0b20034188016a2001410310f907200328028801450d7b2000200329038801370200200041086a20034188016a41086a2802003602000c7c0b20034188016a2001410310f907200328028801450d7a2000200329038801370200200041086a20034188016a41086a2802003602000c7b0b20034188016a2001410310f907200328028801450d792000200329038801370200200041086a20034188016a41086a2802003602000c7a0b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d79200241017422062005200620054b1b22054100480d790240024020020d00200510332204450d80010c010b2004280200210420022005460d0020042002200510372204450d7f0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c7b0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d7a2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c7a0b200328028c012201450d7920034190016a29030021070b20002007370204200020013602000c790b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d78200241017422062005200620054b1b22054100480d780240024020020d00200510332204450d7f0c010b2004280200210420022005460d0020042002200510372204450d7e0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c7a0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d792003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c790b200328028c012201450d7820034190016a29030021070b20002007370204200020013602000c780b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d77200241017422062005200620054b1b22054100480d770240024020020d00200510332204450d7e0c010b2004280200210420022005460d0020042002200510372204450d7d0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c790b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d782003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c780b200328028c012201450d7720034190016a29030021070b20002007370204200020013602000c770b20034188016a2001410010fa07200328028801450d752000200329038801370200200041086a20034188016a41086a2802003602000c760b20034188016a2001410010fa07200328028801450d742000200329038801370200200041086a20034188016a41086a2802003602000c750b20034188016a2001410010fa07200328028801450d732000200329038801370200200041086a20034188016a41086a2802003602000c740b20034188016a2001410010fa07200328028801450d722000200329038801370200200041086a20034188016a41086a2802003602000c730b20034188016a2001410010fa07200328028801450d712000200329038801370200200041086a20034188016a41086a2802003602000c720b20034188016a2001410010fa07200328028801450d702000200329038801370200200041086a20034188016a41086a2802003602000c710b20034188016a2001410010fa07200328028801450d6f2000200329038801370200200041086a20034188016a41086a2802003602000c700b20034188016a2001410010fa07200328028801450d6e2000200329038801370200200041086a20034188016a41086a2802003602000c6f0b20034188016a2001410010fa07200328028801450d6d2000200329038801370200200041086a20034188016a41086a2802003602000c6e0b20034188016a2001410010fa07200328028801450d6c2000200329038801370200200041086a20034188016a41086a2802003602000c6d0b20034188016a2001410010fa07200328028801450d6b2000200329038801370200200041086a20034188016a41086a2802003602000c6c0b20034188016a2001410010fa07200328028801450d6a2000200329038801370200200041086a20034188016a41086a2802003602000c6b0b20034188016a2001410010fa07200328028801450d692000200329038801370200200041086a20034188016a41086a2802003602000c6a0b20034188016a2001410010fa07200328028801450d682000200329038801370200200041086a20034188016a41086a2802003602000c690b20034188016a2001410010fa07200328028801450d672000200329038801370200200041086a20034188016a41086a2802003602000c680b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d67200241017422062005200620054b1b22054100480d670240024020020d00200510332204450d6e0c010b2004280200210420022005460d0020042002200510372204450d6d0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c690b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d682003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c680b200328028c012201450d6720034190016a29030021070b20002007370204200020013602000c670b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d66200241017422062005200620054b1b22054100480d660240024020020d00200510332204450d6d0c010b2004280200210420022005460d0020042002200510372204450d6c0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c680b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d672003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c670b200328028c012201450d6620034190016a29030021070b20002007370204200020013602000c660b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d65200241017422062005200620054b1b22054100480d650240024020020d00200510332204450d6c0c010b2004280200210420022005460d0020042002200510372204450d6b0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c670b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d662003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c660b200328028c012201450d6520034190016a29030021070b20002007370204200020013602000c650b20034188016a2001410110fa07200328028801450d632000200329038801370200200041086a20034188016a41086a2802003602000c640b20034188016a2001410110fa07200328028801450d622000200329038801370200200041086a20034188016a41086a2802003602000c630b20034188016a2001410110fa07200328028801450d612000200329038801370200200041086a20034188016a41086a2802003602000c620b20034188016a2001410110fa07200328028801450d602000200329038801370200200041086a20034188016a41086a2802003602000c610b20034188016a2001410110fa07200328028801450d5f2000200329038801370200200041086a20034188016a41086a2802003602000c600b20034188016a2001410110fa07200328028801450d5e2000200329038801370200200041086a20034188016a41086a2802003602000c5f0b20034188016a2001410110fa07200328028801450d5d2000200329038801370200200041086a20034188016a41086a2802003602000c5e0b20034188016a2001410110fa07200328028801450d5c2000200329038801370200200041086a20034188016a41086a2802003602000c5d0b20034188016a2001410110fa07200328028801450d5b2000200329038801370200200041086a20034188016a41086a2802003602000c5c0b20034188016a2001410110fa07200328028801450d5a2000200329038801370200200041086a20034188016a41086a2802003602000c5b0b20034188016a2001410110fa07200328028801450d592000200329038801370200200041086a20034188016a41086a2802003602000c5a0b20034188016a2001410110fa07200328028801450d582000200329038801370200200041086a20034188016a41086a2802003602000c590b20034188016a2001410110fa07200328028801450d572000200329038801370200200041086a20034188016a41086a2802003602000c580b20034188016a2001410110fa07200328028801450d562000200329038801370200200041086a20034188016a41086a2802003602000c570b20034188016a2001410110fa07200328028801450d552000200329038801370200200041086a20034188016a41086a2802003602000c560b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d55200241017422062005200620054b1b22054100480d550240024020020d00200510332204450d5c0c010b2004280200210420022005460d0020042002200510372204450d5b0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c570b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d562003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c560b200328028c012201450d5520034190016a29030021070b20002007370204200020013602000c550b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d54200241017422062005200620054b1b22054100480d540240024020020d00200510332204450d5b0c010b2004280200210420022005460d0020042002200510372204450d5a0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c560b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d552003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c550b200328028c012201450d5420034190016a29030021070b20002007370204200020013602000c540b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d53200241017422062005200620054b1b22054100480d530240024020020d00200510332204450d5a0c010b2004280200210420022005460d0020042002200510372204450d590b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c550b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d542003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c540b200328028c012201450d5320034190016a29030021070b20002007370204200020013602000c530b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d52200241017422062005200620054b1b22054100480d520240024020020d00200510332204450d590c010b2004280200210420022005460d0020042002200510372204450d580b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c540b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d532003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c530b200328028c012201450d5220034190016a29030021070b20002007370204200020013602000c520b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d51200241017422062005200620054b1b22054100480d510240024020020d00200510332204450d580c010b2004280200210420022005460d0020042002200510372204450d570b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c530b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d522003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c520b200328028c012201450d5120034190016a29030021070b20002007370204200020013602000c510b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d50200241017422062005200620054b1b22054100480d500240024020020d00200510332204450d570c010b2004280200210420022005460d0020042002200510372204450d560b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c520b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d512003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c510b200328028c012201450d5020034190016a29030021070b20002007370204200020013602000c500b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d4f200241017422062005200620054b1b22054100480d4f0240024020020d00200510332204450d560c010b2004280200210420022005460d0020042002200510372204450d550b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c510b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d502003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c500b200328028c012201450d4f20034190016a29030021070b20002007370204200020013602000c4f0b20034188016a2001410210fa07200328028801450d4d2000200329038801370200200041086a20034188016a41086a2802003602000c4e0b20034188016a2001410210fa07200328028801450d4c2000200329038801370200200041086a20034188016a41086a2802003602000c4d0b20034188016a2001410210fa07200328028801450d4b2000200329038801370200200041086a20034188016a41086a2802003602000c4c0b20034188016a2001410210fa07200328028801450d4a2000200329038801370200200041086a20034188016a41086a2802003602000c4b0b20034188016a2001410210fa07200328028801450d492000200329038801370200200041086a20034188016a41086a2802003602000c4a0b20034188016a2001410210fa07200328028801450d482000200329038801370200200041086a20034188016a41086a2802003602000c490b20034188016a2001410210fa07200328028801450d472000200329038801370200200041086a20034188016a41086a2802003602000c480b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d47200241017422062005200620054b1b22054100480d470240024020020d00200510332204450d4e0c010b2004280200210420022005460d0020042002200510372204450d4d0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c490b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d482003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c480b200328028c012201450d4720034190016a29030021070b20002007370204200020013602000c470b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d46200241017422062005200620054b1b22054100480d460240024020020d00200510332204450d4d0c010b2004280200210420022005460d0020042002200510372204450d4c0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c480b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d472003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c470b200328028c012201450d4620034190016a29030021070b20002007370204200020013602000c460b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d45200241017422062005200620054b1b22054100480d450240024020020d00200510332204450d4c0c010b2004280200210420022005460d0020042002200510372204450d4b0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c470b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d462003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c460b200328028c012201450d4520034190016a29030021070b20002007370204200020013602000c450b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d44200241017422062005200620054b1b22054100480d440240024020020d00200510332204450d4b0c010b2004280200210420022005460d0020042002200510372204450d4a0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c460b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d452003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c450b200328028c012201450d4420034190016a29030021070b20002007370204200020013602000c440b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d43200241017422062005200620054b1b22054100480d430240024020020d00200510332204450d4a0c010b2004280200210420022005460d0020042002200510372204450d490b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c450b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d442003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c440b200328028c012201450d4320034190016a29030021070b20002007370204200020013602000c430b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d42200241017422062005200620054b1b22054100480d420240024020020d00200510332204450d490c010b2004280200210420022005460d0020042002200510372204450d480b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c440b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d432003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c430b200328028c012201450d4220034190016a29030021070b20002007370204200020013602000c420b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d41200241017422062005200620054b1b22054100480d410240024020020d00200510332204450d480c010b2004280200210420022005460d0020042002200510372204450d470b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c430b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d422003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c420b200328028c012201450d4120034190016a29030021070b20002007370204200020013602000c410b20034188016a2001410310fa07200328028801450d3f2000200329038801370200200041086a20034188016a41086a2802003602000c400b20034188016a2001410310fa07200328028801450d3e2000200329038801370200200041086a20034188016a41086a2802003602000c3f0b20034188016a2001410310fa07200328028801450d3d2000200329038801370200200041086a20034188016a41086a2802003602000c3e0b20034188016a2001410310fa07200328028801450d3c2000200329038801370200200041086a20034188016a41086a2802003602000c3d0b20034188016a2001410310fa07200328028801450d3b2000200329038801370200200041086a20034188016a41086a2802003602000c3c0b20034188016a2001410310fa07200328028801450d3a2000200329038801370200200041086a20034188016a41086a2802003602000c3b0b20034188016a2001410310fa07200328028801450d392000200329038801370200200041086a20034188016a41086a2802003602000c3a0b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d39200241017422062005200620054b1b22054100480d390240024020020d00200510332204450d400c010b2004280200210420022005460d0020042002200510372204450d3f0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c3b0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d3a2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c3a0b200328028c012201450d3920034190016a29030021070b20002007370204200020013602000c390b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d38200241017422062005200620054b1b22054100480d380240024020020d00200510332204450d3f0c010b2004280200210420022005460d0020042002200510372204450d3e0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c3a0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d392003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c390b200328028c012201450d3820034190016a29030021070b20002007370204200020013602000c380b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d37200241017422062005200620054b1b22054100480d370240024020020d00200510332204450d3e0c010b2004280200210420022005460d0020042002200510372204450d3d0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c390b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d382003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c380b200328028c012201450d3720034190016a29030021070b20002007370204200020013602000c370b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d36200241017422062005200620054b1b22054100480d360240024020020d00200510332204450d3d0c010b2004280200210420022005460d0020042002200510372204450d3c0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c380b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d372003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c370b200328028c012201450d3620034190016a29030021070b20002007370204200020013602000c360b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d35200241017422062005200620054b1b22054100480d350240024020020d00200510332204450d3c0c010b2004280200210420022005460d0020042002200510372204450d3b0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c370b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d362003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c360b200328028c012201450d3520034190016a29030021070b20002007370204200020013602000c350b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d34200241017422062005200620054b1b22054100480d340240024020020d00200510332204450d3b0c010b2004280200210420022005460d0020042002200510372204450d3a0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c360b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d352003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c350b200328028c012201450d3420034190016a29030021070b20002007370204200020013602000c340b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d33200241017422062005200620054b1b22054100480d330240024020020d00200510332204450d3a0c010b2004280200210420022005460d0020042002200510372204450d390b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c350b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d342003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c340b200328028c012201450d3320034190016a29030021070b20002007370204200020013602000c330b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d21200241017422062005200620054b1b22054100480d210240024020020d002005103322040d010c250b2004280200210420022005460d0020042002200510372204450d240b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c340b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d332003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c330b200328028c012201450d3220034190016a29030021070b20002007370204200020013602000c320b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d20200241017422062005200620054b1b22054100480d200240024020020d00200510332204450d240c010b2004280200210420022005460d0020042002200510372204450d230b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c330b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d322003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c320b200328028c012201450d3120034190016a29030021070b20002007370204200020013602000c310b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1f200241017422062005200620054b1b22054100480d1f0240024020020d00200510332204450d230c010b2004280200210420022005460d0020042002200510372204450d220b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c320b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d312003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c310b200328028c012201450d3020034190016a29030021070b20002007370204200020013602000c300b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1e200241017422062005200620054b1b22054100480d1e0240024020020d00200510332204450d220c010b2004280200210420022005460d0020042002200510372204450d210b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c310b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d302003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c300b200328028c012201450d2f20034190016a29030021070b20002007370204200020013602000c2f0b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1d200241017422062005200620054b1b22054100480d1d0240024020020d00200510332204450d210c010b2004280200210420022005460d0020042002200510372204450d200b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c300b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2f2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2f0b200328028c012201450d2e20034190016a29030021070b20002007370204200020013602000c2e0b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1c200241017422062005200620054b1b22054100480d1c0240024020020d00200510332204450d200c010b2004280200210420022005460d0020042002200510372204450d1f0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2f0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2e2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2e0b200328028c012201450d2d20034190016a29030021070b20002007370204200020013602000c2d0b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1b200241017422062005200620054b1b22054100480d1b0240024020020d00200510332204450d1f0c010b2004280200210420022005460d0020042002200510372204450d1e0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2e0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2d2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2d0b200328028c012201450d2c20034190016a29030021070b20002007370204200020013602000c2c0b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d1a200241017422062005200620054b1b22054100480d1a0240024020020d00200510332204450d1e0c010b2004280200210420022005460d0020042002200510372204450d1d0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2d0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2c2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2c0b200328028c012201450d2b20034190016a29030021070b20002007370204200020013602000c2b0b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d19200241017422062005200620054b1b22054100480d190240024020020d00200510332204450d1d0c010b2004280200210420022005460d0020042002200510372204450d1c0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c2c0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2b2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2b0b200328028c012201450d2a20034190016a29030021070b20002007370204200020013602000c2a0b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d18200241017422062005200620054b1b22054100480d180240024020020d00200510332204450d1c0c010b2004280200210420022005460d0020042002200510372204450d1b0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c2b0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d2a2003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c2a0b200328028c012201450d2920034190016a29030021070b20002007370204200020013602000c290b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d17200241017422062005200620054b1b22054100480d170240024020020d00200510332204450d1b0c010b2004280200210420022005460d0020042002200510372204450d1a0b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c2a0b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d292003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c290b200328028c012201450d2820034190016a29030021070b20002007370204200020013602000c280b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d16200241017422062005200620054b1b22054100480d160240024020020d00200510332204450d1a0c010b2004280200210420022005460d0020042002200510372204450d190b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c290b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d282003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c280b200328028c012201450d2720034190016a29030021070b20002007370204200020013602000c270b20034188016a200141186a2204200141286a410110f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d15200241017422062005200620054b1b22054100480d150240024020020d00200510332204450d190c010b2004280200210420022005460d0020042002200510372204450d180b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c280b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d272003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c270b200328028c012201450d2620034190016a29030021070b20002007370204200020013602000c260b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d14200241017422062005200620054b1b22054100480d140240024020020d00200510332204450d180c010b2004280200210420022005460d0020042002200510372204450d170b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41033a0000200141206a2201200128020041016a3602000c270b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d262003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c260b200328028c012201450d2520034190016a29030021070b20002007370204200020013602000c250b20034188016a200141186a2204200141286a410210f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d13200241017422062005200620054b1b22054100480d130240024020020d00200510332204450d170c010b2004280200210420022005460d0020042002200510372204450d160b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c260b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d252003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c250b200328028c012201450d2420034190016a29030021070b20002007370204200020013602000c240b20034188016a200141186a2204200141286a410310f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d12200241017422062005200620054b1b22054100480d120240024020020d00200510332204450d160c010b2004280200210420022005460d0020042002200510372204450d150b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41013a0000200141206a2201200128020041016a3602000c250b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d242003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c240b200328028c012201450d2320034190016a29030021070b20002007370204200020013602000c230b20034188016a200141186a2204200141286a410010f2070240024020032d0088014101460d000240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d11200241017422062005200620054b1b22054100480d110240024020020d00200510332204450d150c010b2004280200210420022005460d0020042002200510372204450d140b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41023a0000200141206a2201200128020041016a3602000c240b2003419c016a220141013602002003420137028c01200341e8b1cc00360288012003410136026c200320053602682003200341e8006a36029801200341c0006a20034188016a104120032802402202450d232003200329024437026c20032002360268200141013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402101200329024421070240200328026c450d00200328026810350b20010d010c230b200328028c012201450d2220034190016a29030021070b20002007370204200020013602000c220b2003411810fb072003410036029001200320032903003703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141f7a3cc00413b20034188016a41b4a4cc0041c4a4cc001046000b2000200329028c01370200200041086a20034194016a2802003602000c200b200341086a411810fb072003410036029001200320032903083703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141d4a4cc00413420034188016a41b4a4cc004188a5cc001046000b1045000b200341106a411810fb072003410036029001200320032903103703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141d4a4cc00413420034188016a41b4a4cc004188a5cc001046000b2003419c016a41013602002003420237028c01200341b4a5cc00360288012003413e36026c2003200a3602682003200341e8006a36029801200341c0006a20034188016a1041200041086a200341c0006a41086a280200360200200020032903403702000c1c0b41dab0cc00411d41f8b0cc001064000b200341186a411810fb072003410036029001200320032903183703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141f7a3cc00413b20034188016a41b4a4cc0041c4a4cc001046000b41dab0cc00411d41f8b0cc001064000b200341286a411810fb072003410036029001200320032903283703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141f7a3cc00413b20034188016a41b4a4cc0041c4a4cc001046000b20034188016a41146a41013602002003420237028c01200341acaecc0036028801200341013602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a10410c080b20034190016a2903002107200328028c0121010c080b20034190016a2903002107200328028c0121010c070b103e000b41dab0cc00411d41f8b0cc001064000b103c000b200320032d00890122013a00302001200241ff0171460d1020014104460d10200341c0006a41146a413d360200200341cc006a413d36020020034188016a41146a41033602002003420337028c01200341eca5cc0036028801200341013602442003200341c0006a360298012003200341306a3602502003200341df006a3602482003200341d8006a360240200341e8006a20034188016a10410b200329026c2107200328026821010b2001450d0e20002007370204200020013602000c0f0b20032802402101200329024421070b2001450d0c20002007370204200020013602000c0d0b200641027421060340200320042802002205360278200220054d0d0220022005417f736a220520024f0d0a0240200a20054103746a22052d00044103460d0020052d00054104470d040b200441046a21042006417c6a22060d000b410421080b20034188016a200141186a2202200c410010f20720032d0088014101460d02200841ff01714104470d030c040b2003419c016a22044102360200200341cc006a41013602002003420237028c0120034198b0cc003602880120034101360244200320023602302003200341c0006a360298012003200341306a3602482003200341f8006a360240200341e8006a20034188016a1041200328026821022003200329026c37026c20032002360268200441013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402102200329024421070240200328026c450d00200328026810350b20032007370234200320023602300c050b200341cc006a413e3602002003419c016a41023602002003420237028c01200341c4a5cc00360288012003200541056a3602482003413e3602442003200341c0006a360298012003200341e0006a360240200341306a20034188016a10410c040b200341386a20034194016a2802003602002003200329028c013703300c030b20034188016a2002200c200810f407200328028801450d00200341306a41086a20034188016a41086a28020036020020032003290388013703300c020b200341003602300c010b2003419c016a22044102360200200341cc006a41013602002003420237028c0120034198b0cc003602880120034101360244200320023602302003200341c0006a360298012003200341306a3602482003200341f8006a360240200341e8006a20034188016a1041200328026821022003200329026c37026c20032002360268200441013602002003420137028c01200341acaacc0036028801200341383602342003200341306a360298012003200341e8006a360230200341c0006a20034188016a104120032802402102200329024421070240200328026c450d00200328026810350b20032007370234200320023602300b02400240200328023022020d00200141306a2802002202450d0102400240200241037420012802286a41786a22052802002204200141206a220628020022024b0d00200421010c010b024002402001411c6a280200220820026b200420026b2209490d002001280218210a200221010c010b200220096a220a2002490d042008410174220b200a200b200a4b1b220b4100480d040240024020080d000240200b0d004101210a0c020b200b1033220a450d0b0c010b2001280218210a2008200b460d00200a2008200b1037220a450d0a0b2001200a3602182001411c6a200b360200200141206a28020021010b200a20016a21080240024020094102490d002008410420042002417f736a2202109f081a200a200220016a22016a21080c010b2009450d010b200841043a0000200141016a21010b20062001360200200541013a00060c050b20002003290234370204200020023602000c050b200341206a411810fb072003410036029001200320032903203703880120034188016a4100411810fc07200328028801220120032802900122006a411841feafcc00411810fd072003200041186a360290012003200329028c0137028c01200320013602880141f7a3cc00413b20034188016a41b4a4cc0041c4a4cc001046000b103e000b41dab0cc00411d41f8b0cc001064000b20002007370204200020013602000c010b200041003602000b200341a0016a24000f0b103c000b6401017f230041206b220224002002413f360204200220003602002001411c6a2802002100200128021821012002411c6a41013602002002420137020c20024188b2cc003602082002200236021820012000200241086a10432101200241206a240020010b0c002000280200200110cd070b8f1f03127f017e037f23004180026b220524000240024020014115490d00410121064101210702400240034020012108200021092006200771410173210a024002400240034002400240024002402004450d00024020064101710d002000200110c8072004417f6a21040b2001410276220741036c210b2007410174210c4100210d20014132490d03200741016a210e200020074103746a220f28020020002007417f6a220d4103746a2210280200201041046a2802002210200f41046a280200220f200f20104b1b10a0082211450d01417f410120114100481b21100c020b2000200110c9070c0b0b417f200f201047200f2010491b21100b2007200d2010417f4622101b210f024002402000200e4103746a22112802002000200d200720101b22124103746a2207280200200741046a2802002207201141046a280200220d200d20074b1b10a0082211450d00417f410120114100481b21070c010b417f200d200747200d2007491b21070b4102410120101b20102007417f4622071b210d024002402000200e201220071b22114103746a22102802002000200f4103746a2207280200200741046a2802002207201041046a2802002210201020074b1b10a008220e450d00417f4101200e4100481b21100c010b417f201020074720102007491b21100b200c4101722107200d2010417f4622126a2113024002402000200c4103746a220d2802002000200c417f6a22104103746a220e280200200e41046a280200220e200d41046a280200220d200d200e4b1b10a0082214450d00417f410120144100481b210e0c010b417f200d200e47200d200e491b210e0b200c2010200e417f46220e1b210d2013200e6a211302400240200020074103746a221428020020002010200c200e1b220e4103746a220c280200200c41046a280200220c201441046a28020022102010200c4b1b10a0082214450d00417f410120144100481b210c0c010b417f2010200c472010200c491b210c0b2013200c417f46220c6a21100240024020002007200e200c1b22134103746a220c2802002000200d4103746a2207280200200741046a2802002207200c41046a280200220c200c20074b1b10a008220e450d00417f4101200e4100481b210c0c010b417f200c200747200c2007491b210c0b200b41016a21072010200c417f4622146a2115024002402000200b4103746a220e2802002000200b417f6a220c4103746a2210280200201041046a2802002210200e41046a280200220e200e20104b1b10a0082216450d00417f410120164100481b21100c010b417f200e201047200e2010491b21100b200b200c2010417f4622101b210e201520106a211502400240200020074103746a22162802002000200c200b20101b22104103746a220c280200200c41046a280200220c201641046a280200220b200b200c4b1b10a0082216450d00417f410120164100481b210c0c010b417f200b200c47200b200c491b210c0b2015200c417f46220c6a211502400240200020072010200c1b220b4103746a220c2802002000200e4103746a2207280200200741046a2802002207200c41046a280200220c200c20074b1b10a0082210450d00417f410120104100481b21100c010b417f200c200747200c2007491b21100b200f201120121b2107200d201320141b210c200e200b2010417f4622101b210b201520106a210d0b024002402000200c4103746a220e280200200020074103746a2210280200201041046a2802002210200e41046a280200220e200e20104b1b10a008220f450d00417f4101200f4100481b21100c010b417f200e201047200e2010491b21100b200c20072010417f46220e1b2110200d200e6a210d024002402000200b4103746a220f28020020002007200c200e1b220e4103746a2207280200200741046a2802002207200f41046a280200220c200c20074b1b10a008220f450d00417f4101200f4100481b21070c010b417f200c200747200c2007491b21070b200d2007417f46220c6a2107024002400240024002402000200b200e200c1b220d4103746a220b280200200020104103746a220c280200200c41046a280200220c200b41046a280200220b200b200c4b1b10a008220e450d00200e4100480d010c020b200b200c4f0d010b200741016a2207410c490d0102402001410176220b450d00200020014103746a41786a21072000210c0340200c2902002117200c200729020037020020072017370200200c41086a210c200741786a2107200b417f6a220b0d000b0b20012010417f736a2110410121070c020b200d21100b20074521070b0240200745200a724101710d002000200110ca070d090b2003450d010240201020014f0d00024002402003280200200020104103746a2207280200200741046a280200220c200341046a280200220b200b200c4b1b10a008220e450d00200e41004e0d010c050b200b200c490d040b200029020021172000200729020037020020072017370200200041786a21122000410c6a2113200041086a2114200028020421072000280200210d4100210b2001210e0340024002400240200b200e417f6a22114f0d002013200b4103746a210c034002400240200d200c417c6a280200200c28020022102007200720104b1b10a008220f450d00200f4100480d030c010b20072010490d020b200c41086a210c2011200b41016a220b470d000c020b0b0240200b20114f0d002012200e4103746a210c2011210e034002400240200d200c280200200c41046a28020022102007200720104b1b10a008220f450d00200f4100480d010c050b200720104f0d040b200c41786a210c200b200e417f6a220e490d000b0b200b21110b200020073602042000200d36020002402001201141016a2207490d00200020074103746a2100200120076b220141154f0d040c0b0b2007200141e485cc001059000b2014200b4103746a221029020021172010200c290200370200200c2017370200200b41016a210b0c000b0b0b2010200141d086cc001042000b20080d014100410041f485cc001042000b20002109200121080b201020084f0d02200929020021172009200920104103746a2207290200370200200720173702002009280204210c200928020021124100210e410021184100211902402008417f6a2200450d002009410c6a21074100211803400240024002402007417c6a2802002012200c2007280200220b200b200c4b1b10a0082210450d00201041004e0d010c020b200b200c490d010b200021190240200020184d0d00200920084103746a41786a21072000211903400240024020072802002012200c200741046a280200220b200b200c4b1b10a0082210450d00201041004e0d010c030b200b200c490d020b200741786a21072019417f6a221920184b0d000b0b0240024020192018490d0020002019490d010c040b20182019419486cc001059000b20192000419486cc001058000b200741086a21072000201841016a2218470d000b20002118200021190b200941086a220720194103746a210041800121144100211141002110410021014180012106200720184103746a221a210d034002402000200d6b22074187104b220a0d002007410376220741807f6a20072011200e492001201049220b72220f1b21070240200f450d0020062007200b1b210620072014200b1b21140c010b2007200741017622066b21140b024020012010470d00024020060d002005221021010c010b4100210720052110200d210b0340201020073a0000200741016a210702400240200b2802002012200c200b41046a280200220f200f200c4b1b10a0082201450d00417f410120014100481b210f0c010b417f200f200c47200f200c491b210f0b200b41086a210b2010200f417f476a211020062007470d000b200521010b02402011200e470d00024020140d0020054180016a220e21110c010b200041786a21074100210b20054180016a210e0340200e200b3a0000200b41016a210b0240024020072802002012200c200741046a280200220f200f200c4b1b10a0082211450d00417f410120114100481b210f0c010b417f200f200c47200f200c491b210f0b200741786a2107200e200f417f466a210e2014200b470d000b20054180016a21110b0240200e20116b2207201020016b220b200b20074b1b2213450d00200d20012d00004103746a22072802042115200728020021162007200020112d0000417f734103746a290200370200024020134101460d004100210703402000201120076a220b2d0000417f734103746a200d200120076a41016a220f2d00004103746a290200370200200d200f2d00004103746a2000200b41016a2d0000417f734103746a290200370200200741026a210b200741016a220f2107200b2013490d000b2011200f6a21112001200f6a21010b200020112d0000417f734103746a2207201536020420072016360200201141016a2111200141016a21010b200020144103746b20002011200e461b2100200d20064103746a200d20012010461b210d200a0d000b02400240200120104f0d00200021070340200d2010417f6a22102d00004103746a220b2902002117200b200741786a22072902003702002007201737020020012010490d000c020b0b200d21072011200e4f0d0003402007290200211720072000200e417f6a220e2d0000417f734103746a220b290200370200200b2017370200200741086a21072011200e490d000b0b2009200c36020420092012360200024020082007201a6b41037620186a22014d0d00200929020021172009200920014103746a220729020037020020072017370200200820016b220c450d02200c20012001200c4b1b210b20084103762110200741086a2100024002402001200c417f6a220c490d002000200c20022007200410be07200921000c010b2009200120022003200410be0720072103200c21010b200b20104f2106201920184d2107200141154f0d010c040b0b20012008418486cc001042000b41a486cc00411c41c086cc00103f000b20102008418486cc001042000b20014102490d00200041786a2111410021124101210f0340200f4103742107200f417f6a210c200f41016a210f024002400240200020076a2210280200220d2000200c4103746a2207280200200741046a280200220e201041046a280200220b200b200e4b1b10a0082213450d0020134100480d010c020b200b200e4f0d010b201020072902003702000240200c450d002012210c201121070240034002400240200d2007280200200741046a2802002210200b200b20104b1b10a008220e450d00200e41004e0d030c010b200b20104f0d020b200741086a2007290200370200200741786a2107200c41016a2210200c49210e2010210c200e450d000b0b200741086a21070b2007200d3602002007200b3602040b2012417f6a2112201141086a2111200f2001470d000b0b20054180026a24000b19002000200141186a280200360204200020012802103602000bf80201067f230041c0006b2202240041002103410021040240024003400240024002402003411f4b0d002001280204220520012802082206460d01200641016a22072006490d04200520074f0d022007200541c0fdcb001058000b200041013602002000410f3a00040c040b200241013a000f200241346a410136020020024201370224200241acfdcb003602202002413636023c2002200241386a36023020022002410f6a360238200241106a200241206a10412002410b6a200241186a28020036000020022002290310370003200041053a0004200020022900003700052000410c6a200241076a290000370000200041013602000c030b200128020020066a2d0000210620012007360208200641ff00712003411f71742004722104200341076a21032006418001710d000b0240024020034120490d002006410f4b0d010b20004100360200200020043602040c020b200041013602002000410d3a00040c010b417f200741c0fdcb001059000b200241c0006a24000be704010a7f230041106b22032400200128020421042001280200210541002106410121074100210820012802082209210a0240024003400240024020082006460d002006210b0c010b200641016a220c2006490d022006410174220b200c200b200c4b1b220b4100480d020240024020060d000240200b0d00410121070c020b200b103322070d010c050b2006200b460d0020072006200b10372207450d040b200b21060b200720086a200a41807f72200a41ff0071200a410776220c1b3a0000200841016a2108200c210a200c0d000b02400240200b20086b2009490d00200b21060c010b200820096a22062008490d01200b410174220a2006200a20064b1b22064100480d010240200b0d00024020060d00410121070c020b200610332207450d030c010b200b2006460d002007200b200610372207450d020b200720086a20052009109d081a02402004450d00200510350b200128020c210502400240200620096b20086b200141146a280200220c490d002009200c6a20086a210a2006210b0c010b200920086a220b200c6a220a200b490d012006410174220b200a200b200a4b1b220b4100480d01024020060d000240200b0d00410121070c020b200b10332207450d030c010b2006200b460d0020072006200b10372207450d020b200720096a20086a2005200c109d081a200341003a000f200a210603402003200641800172200641ff0071200641077622081b3a000f20022003410f6a410110782008210620080d000b20022007200a10780240200b450d00200710350b2000411f3a00000240200141106a280200450d00200510350b200341106a24000f0b103e000b103c000bde03030a7f017e027f230041106b2203240020012802002104200341003a000e2004210503402003200541800172200541ff0071200541077622061b3a000e20022003410e6a410110782006210520060d000b200128020422072001410c6a2802002206410c6c6a2108200141086a280200210920072105024002402006450d00200721052004450d00200841746a210a410021052007210b0340200b2106024003402006280200220c0d01200541016a210520082006410c6a2206470d000c040b0b200641046a290200210d200341003a000e2006410c6a210b200541016a210e03402003200541800172200541ff0071200541077622011b3a000e20022003410e6a410110782001210520010d000b200341003a000f200d422088a7220f210503402003200541800172200541ff0071200541077622011b3a000f20022003410f6a410110782001210520010d000b2002200c200f10780240200da7450d00200c10350b0240200a2006460d00200e21052004417f6a22040d010b0b2006410c6a21050b20082005460d00034020052206410c6a2105024020062802002202450d00200641046a280200450d00200210350b20082005470d000b0b02402009450d002009410c6c450d00200710350b2000411f3a0000200341106a24000bfe0101067f2000410c6a280200200028020822016b2202411c6d210302402002450d0020012003411c6c6a21040340024020012802042202450d0002402001410c6a2802002203450d00200341047421030340024020022d00004109470d000240200241046a2205280200220628020441ffffffff0371450d0020062802001035200528020021060b200610350b200241106a2102200341706a22030d000b0b200141086a28020041ffffffff0071450d00200128020410350b2001411c6a21020240200141146a280200450d00200128021010350b2002210120022004470d000b0b024020002802042202450d002002411c6c450d00200028020010350b0b820201067f2000410c6a280200200028020822016b220241186d210302402002450d002001200341186c6a210403400240200141046a28020041ffffffff0171450d00200128020010350b0240200141146a2802002203450d00200128020c2102200341047421030340024020022d00004109470d000240200241046a2205280200220628020441ffffffff0371450d0020062802001035200528020021060b200610350b200241106a2102200341706a22030d000b0b200141186a21020240200141106a28020041ffffffff0071450d00200128020c10350b2002210120022004470d000b0b024020002802042202450d00200241186c450d00200028020010350b0b850201067f2000410c6a280200200028020822016b2202411c6d210302402002450d0020012003411c6c6a21040340024020012802042202450d0002402001410c6a2802002203450d00200341047421030340024020022d00004109470d000240200241046a2205280200220628020441ffffffff0371450d0020062802001035200528020021060b200610350b200241106a2102200341706a22030d000b0b200141086a28020041ffffffff0071450d00200128020410350b2001411c6a21020240200141146a28020041ffffffff0371450d00200128021010350b2002210120022004470d000b0b024020002802042202450d002002411c6c450d00200028020010350b0bcf0101067f02402000410c6a2802002201200028020822026b450d000340024020022802082203450d0020022802002104200341047421030340024020042d00004109470d000240200441046a2205280200220628020441ffffffff0371450d0020062802001035200528020021060b200610350b200441106a2104200341706a22030d000b0b200241106a21040240200241046a28020041ffffffff0071450d00200228020010350b2004210220042001470d000b0b0240200028020441ffffffff0071450d00200028020010350b0b8f05010b7f230041c080016b220224002002200110c007410121030240024020022802004101460d00200228020421042002410041808001109f08210541002106410021070240024002400240024002402004450d004100210841002109410121034100210a03402001280204220b200128020822076b2004200a6b220c41808001200c41808001491b220c490d022007200c6a22062007490d03200b2006490d042005200128020020076a200c109d08210b2001200636020802400240200920086b200c490d002008200c6a2107200921060c010b2008200c6a22072008490d06200941017422062007200620074b1b22064100480d060240024020090d00024020060d00410121030c020b2006103322030d010c090b20092006460d0020032009200610372203450d080b200621090b200320086a200b200c109d081a200721082004200c200a6a220a4b0d000b0b2000200336020420004100360200200041146a2007360200200041106a41003602002000410c6a2007360200200041086a20063602000c060b200541013a008f8001200541b480016a4101360200200542013702a48001200541acfdcb003602a08001200541363602bc80012005200541b880016a3602b0800120052005418f80016a3602b880012005419080016a200541a080016a10412005418b80016a2005419880016a2802003600002005200529039080013700838001200041053a00042000200529008080013700052000410c6a2005418780016a290000370000200041013602002009450d05200310350c050b2007200641c0fdcb001059000b2006200b41c0fdcb001058000b103e000b103c000b20002002290204370204200041013602002000410c6a2002410c6a2902003702000b200241c080016a24000bf50202057f017e02400240024020014108490d00200141017641feffffff07712202417f6a220320014f0d022001410d74200173220441117620047322044105742004732205417f2001417f6a677622067122044100200120042001491b6b220420014f0d01200020034103746a220329020021072003200020044103746a220429020037020020042007370200024020022001490d00200221030c030b2005410d7420057322044111762004732204410574200473220520067122044100200120042001491b6b220420014f0d01200020024103746a220329020021072003200020044103746a2204290200370200200420073702002002410172220320014f0d022005410d742005732204411176200473220441057420047320067122044100200120042001491b6b220420014f0d01200020034103746a220129020021072001200020044103746a2200290200370200200020073702000b0f0b20042001418486cc001042000b2003200141f485cc001042000bb20102037f017e024020014101762202450d00200020012002417f6a10cb072002417e6a210203402002417f460d0120002001200210cb072002417f6a21020c000b0b0240024020014102490d00200141037420006a41786a21022001210303402003417f6a220420014f0d0220002902002105200020022902003702002002200537020020002004410010cb07200241786a210220042103200441014b0d000b0b0f0b2003417f6a2001418486cc001042000b8f06050a7f017e017f017e037f200041686a2102200041786a210320014132492104410121054100210602400240024003400240024020052001490d00410021070c010b200320054103746a210841012107034002400240200841086a22092802002008280200200841046a280200220a2008410c6a28020022082008200a4b1b10a008220b450d00200b4100480d030c010b2008200a490d020b4101210a200541016a220520014921072009210820012005470d000c030b0b2005200146210a20040d0120052001460d012005417f6a220820014f0d032007410171450d02200020084103746a2208290200210c200820002005410374220d6a2209290200220e3702002009200c370200024020054102490d0002400240200ea7220f20002005417e6a22074103746a220b280200200b41046a2802002210200841046a280200220a200a20104b1b10a0082211450d0020114100480d010c020b200a20104f0d010b2008200b29020037020002402007450d002002200d6a21080240034002400240200f2008280200200841046a280200220b200a200a200b4b1b10a0082210450d00201041004e0d030c010b200a200b4f0d020b200841086a2008290200370200200841786a21082007417f6a22070d000b0b200841086a210b0b200b200f360200200b200a3602040b200641016a21060240200120056b220f4102490d000240024020092802082009280200220d200941046a280200220b2009410c6a28020022082008200b4b1b10a008220a450d00200a4100480d010c020b2008200b4f0d010b200941086a2111200920092902083702000240200f4103490d004103210a41022107034002400240200920074103746a2208280200200d200b200841046a28020022072007200b4b1b10a0082210450d00201041004e0d030c010b2007200b4f0d020b200841786a20082902003702000240200a200f4f0d00200a2107200a41016a210a200821110c010b0b200821110b2011200d3602002011200b3602040b20064105470d000b4100210a0b200a0f0b20052001418486cc001042000b2008200141f485cc001042000bb60202057f017e03402002410174220341017221040240024002400240200341026a220320014f0d00200420014f0d0102400240200020044103746a2205280200200020034103746a2206280200200641046a2802002206200541046a2802002205200520064b1b10a0082207450d00417f410120074100481b21060c010b417f200520064720052006491b21060b200320042006417f461b21040b0240200420014f0d00200220014f0d020240200020024103746a2202280200200020044103746a2203280200200341046a2802002206200241046a2802002205200520064b1b10a0082207450d00200741004e0d010c040b20052006490d030b0f0b2004200141f487cc001042000b20022001418488cc001042000b200229020021082002200329020037020020032008370200200421020c000b0b830401097f200141096a2d0000210220012802042103200128020021040240024002400240024002400240024020012d000822014102470d0020040d010c050b20014101462105024020040d00200521060c020b2005200320046b6a220620054f0d01410021074100210541002106410121080340024002400240200141ff01714102470d00200221090c010b410021092001410171450d00410021010c010b2004450d0820042003460d0820042d0000210241022101200441016a21040b024020052006470d002005417f200320046b410020041b220641016a220a200a2006491b6a22062005490d0420072006200720064b1b22064100480d04024020050d00024020060d00410121080c020b2006103322080d010c060b20052006460d0020082005200610372208450d050b200820056a20023a0000200741026a2107200541016a2105200921020c000b0b200320046b21060b2006450d0220064100480d00200610332208450d010c030b103e000b103c000b41012108410021060b02400240200141037122074103460d00410021052008210120070e03010001010b200820023a000041012105200841016a21010b2004450d0020032004460d00200421020340200120022d00003a0000200141016a21012003200241016a2202470d000b2003200520046b6a21050b2000200536020820002006360204200020083602000bc76501037f230041206b220224000240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020002d00000eac010102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80018101820183018401850186018701880189018a018b018c018d018e018f0190019101920193019401950196019701980199019a019b019c019d019e019f01a001a101a201a301a401a501a601a701a801a901aa01ab0100010b2002200128021841cff1cb0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000cab010b2002200128021841e0f1cb00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000caa010b2002200128021841ebf1cb0041032001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca9010b2002200128021841eef1cb0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41f4f1cb00106f21000ca8010b200220012802184184f2cb0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41f4f1cb00106f21000ca7010b200220012802184188f2cb0041022001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41f4f1cb00106f21000ca6010b20022001280218418af2cb0041042001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca5010b20022001280218418ef2cb0041032001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca4010b200220012802184191f2cb0041022001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000ca3010b200220012802184193f2cb0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000ca2010b200220012802184197f2cb0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41a0f2cb00106f21000ca1010b2002200128021841b0f2cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000ca0010b2002200128021841b6f2cb0041042001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c9f010b2002200128021841baf2cb00410c2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041016a36020c20012002410c6a41c8f2cb00106f21000c9e010b2002200128021841d8f2cb0041042001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c9d010b2002200128021841dcf2cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c9c010b2002200128021841e2f2cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c9b010b2002200128021841eaf2cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c9a010b2002200128021841f2f2cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c99010b2002200128021841faf2cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c98010b200220012802184183f3cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c97010b20022001280218418cf3cb0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c96010b200220012802184193f3cb0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c95010b20022001280218419af3cb0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c94010b2002200128021841a1f3cb0041072001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c93010b2002200128021841a8f3cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c92010b2002200128021841b1f3cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c91010b2002200128021841baf3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c90010b2002200128021841c4f3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8f010b2002200128021841cef3cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8e010b2002200128021841d7f3cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8d010b2002200128021841e0f3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8c010b2002200128021841eaf3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8b010b2002200128021841f4f3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c8a010b2002200128021841fef3cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c89010b200220012802184188f4cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c88010b200220012802184190f4cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c87010b200220012802184198f4cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c86010b2002200128021841a0f4cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c85010b2002200128021841a8f4cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c84010b2002200128021841b1f4cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c83010b2002200128021841bbf4cb0041092001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c82010b2002200128021841c4f4cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c81010b2002200128021841cef4cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21012002200041086a36020c20012002410c6a4198f1cb00106f21000c80010b2002200128021841d8f4cb00410d2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41c8f2cb00106f21000c7f0b2002200128021841e5f4cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041016a36020c200241106a2002410c6a41c8f2cb00106f21000c7e0b2002200128021841eff4cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a41f8f4cb00106f21000c7d0b200220012802184188f5cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041086a36020c200241106a2002410c6a4190f5cb00106f21000c7c0b2002200128021841a0f5cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041046a36020c200241106a2002410c6a4198f1cb00106f21000c7b0b2002200128021841a8f5cb0041082001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200041086a36020c200241106a2002410c6a41b0f5cb00106f21000c7a0b2002200128021841c0f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c790b2002200128021841c6f5cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c780b2002200128021841cbf5cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c770b2002200128021841d0f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c760b2002200128021841d6f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c750b2002200128021841dcf5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c740b2002200128021841e2f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c730b2002200128021841e8f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c720b2002200128021841eef5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c710b2002200128021841f4f5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c700b2002200128021841faf5cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6f0b200220012802184180f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6e0b200220012802184186f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6d0b20022001280218418bf6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6c0b200220012802184190f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6b0b200220012802184196f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c6a0b20022001280218419cf6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c690b2002200128021841a2f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c680b2002200128021841a8f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c670b2002200128021841aef6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c660b2002200128021841b4f6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c650b2002200128021841baf6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c640b2002200128021841c0f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c630b2002200128021841c5f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c620b2002200128021841caf6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c610b2002200128021841cff6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c600b2002200128021841d4f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5f0b2002200128021841d9f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5e0b2002200128021841def6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5d0b2002200128021841e3f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5c0b2002200128021841e8f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5b0b2002200128021841edf6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c5a0b2002200128021841f2f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c590b2002200128021841f7f6cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c580b2002200128021841fcf6cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c570b200220012802184182f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c560b200220012802184188f7cb0041092001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c550b200220012802184191f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c540b200220012802184197f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c530b20022001280218419df7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c520b2002200128021841a3f7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c510b2002200128021841aaf7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c500b2002200128021841b1f7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4f0b2002200128021841b8f7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4e0b2002200128021841bff7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4d0b2002200128021841c5f7cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4c0b2002200128021841caf7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4b0b2002200128021841d0f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c4a0b2002200128021841d6f7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c490b2002200128021841ddf7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c480b2002200128021841e4f7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c470b2002200128021841ebf7cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c460b2002200128021841f2f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c450b2002200128021841f8f7cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c440b2002200128021841fef7cb0041092001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c430b200220012802184187f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c420b20022001280218418df8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c410b200220012802184193f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c400b200220012802184199f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3f0b2002200128021841a0f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3e0b2002200128021841a7f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3d0b2002200128021841aef8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3c0b2002200128021841b5f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3b0b2002200128021841bbf8cb0041052001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c3a0b2002200128021841c0f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c390b2002200128021841c6f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c380b2002200128021841ccf8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c370b2002200128021841d3f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c360b2002200128021841daf8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c350b2002200128021841e1f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c340b2002200128021841e8f8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c330b2002200128021841eef8cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c320b2002200128021841f4f8cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c310b2002200128021841fbf8cb0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c300b200220012802184183f9cb0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2f0b20022001280218418bf9cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2e0b200220012802184195f9cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2d0b20022001280218419cf9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2c0b2002200128021841a2f9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2b0b2002200128021841a8f9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c2a0b2002200128021841aef9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c290b2002200128021841b4f9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c280b2002200128021841baf9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c270b2002200128021841c0f9cb00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c260b2002200128021841cbf9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c250b2002200128021841d1f9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c240b2002200128021841d7f9cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c230b2002200128021841def9cb0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c220b2002200128021841e6f9cb0041082001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c210b2002200128021841eef9cb00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c200b2002200128021841f8f9cb0041072001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1f0b2002200128021841fff9cb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1e0b200220012802184185facb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1d0b20022001280218418bfacb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1c0b200220012802184191facb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1b0b200220012802184197facb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c1a0b20022001280218419dfacb0041062001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c190b2002200128021841a3facb00410b2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c180b2002200128021841aefacb00410a2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c170b2002200128021841b8facb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c160b2002200128021841c4facb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c150b2002200128021841d0facb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c140b2002200128021841dcfacb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c130b2002200128021841e8facb00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c120b2002200128021841f5facb00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c110b200220012802184182fbcb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c100b20022001280218418efbcb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0f0b20022001280218419afbcb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0e0b2002200128021841a6fbcb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0d0b2002200128021841b2fbcb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0c0b2002200128021841c0fbcb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0b0b2002200128021841cefbcb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c0a0b2002200128021841dcfbcb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c090b2002200128021841eafbcb00410c2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c080b2002200128021841f6fbcb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c070b200220012802184184fccb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c060b200220012802184192fccb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c050b2002200128021841a0fccb00410e2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c040b2002200128021841aefccb00410d2001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c030b2002200128021841bbfccb0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c020b2002200128021841ccfccb0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000c010b2002200128021841ddfccb0041112001411c6a28020028020c1100003a001820022001360210200241003a001920024100360214200241106a21000b20002d00082101024020002802042203450d00200141ff0171210441012101024020040d00024020034101470d0020002d0009450d00200028020022042d00004104710d0041012101200428021841d6a0c00041012004411c6a28020028020c1100000d010b2000280200220128021841cca6cc0041012001411c6a28020028020c11000021010b200020013a00080b200241206a2400200141ff01714100470bcc0101047f230041106b220224002000280200220041046a28020021032000280200210041012104200128021841d9a0c00041012001411c6a28020028020c1100002105200241003a0005200220053a00042002200136020002402003450d002003410274210103402002200036020c20022002410c6a41f0fccb0010701a200041046a21002001417c6a22010d000b20022d000421050b0240200541ff01710d002002280200220028021841d8a0c00041012000411c6a28020028020c11000021040b200241106a240020040b8a0201027f230041106b2202240020002802002802002100200128021841a8f1cb00410b2001411c6a28020028020c1100002103200241003a0005200220033a0004200220013602002002200036020c200241b3f1cb0041052002410c6a41b8f1cb00106921012002200041086a36020c200141c8f1cb0041072002410c6a4198f1cb0010691a20022d00042101024020022d0005450d00200141ff0171210041012101024020000d0020022802002201411c6a28020028020c210020012802182103024020012d00004104710d00200341d0a0c0004102200011000021010c010b200341d2a0c0004101200011000021010b200220013a00040b200241106a2400200141ff01714100470b0c002000280200200110b9070bc50201037f230041206b2202240002400240200028020022002d00004104470d0020022001280218419cfdcb0041082001411c6a28020028020c11000022003a001820022001360210200241003a0019200241003602140c010b2002200128021841a4fdcb0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200036020c200241106a2002410c6a418cfdcb00106f210120022d0018210020022802142203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d0041012100200428021841d6a0c00041012004411c6a28020028020c1100000d010b2001280200220028021841cca6cc0041012000411c6a28020028020c11000021000b200120003a00080b200241206a2400200041ff01714100470bc00201037f230041206b220224000240024020002d00004104470d0020022001280218419cfdcb0041082001411c6a28020028020c11000022003a001820022001360210200241003a0019200241003602140c010b2002200128021841a4fdcb0041052001411c6a28020028020c1100003a001820022001360210200241003a0019200241003602142002200036020c200241106a2002410c6a418cfdcb00106f210120022d0018210020022802142203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d0041012100200428021841d6a0c00041012004411c6a28020028020c1100000d010b2001280200220028021841cca6cc0041012000411c6a28020028020c11000021000b200120003a00080b200241206a2400200041ff01714100470bd70203027f017e017f23004180016b220224002000280200210002400240024002400240200128020022034110710d002000280200210020034120710d012000ac22042004423f8722047c2004852000417f73411f762001105221000c020b20002802002103410021000340200220006a41ff006a2003410f712205413072200541d7006a2005410a491b3a00002000417f6a2100200341047622030d000b20004180016a22034181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021030340200220036a41ff006a2000410f712205413072200541376a2005410a491b3a00002003417f6a2103200041047622000d000b20034180016a22004181014f0d022001410141d88bc0004102200220036a4180016a410020036b105621000b20024180016a240020000f0b200341800141c88bc0001059000b200041800141c88bc0001059000bca0201037f23004180016b220224002000280200210002400240024002400240200128020022034110710d0020002d0000210420034120710d012004ad42ff018341012001105221000c020b20002d00002104410021000340200220006a41ff006a2004410f712203413072200341d7006a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021000340200220006a41ff006a2004410f712203413072200341376a2003410a491b3a00002000417f6a21002004410476410f7122040d000b20004180016a22044181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000b20024180016a240020000f0b200441800141c88bc0001059000b200441800141c88bc0001059000bd70202027f027e23004180016b220224002000280200210002400240024002400240200128020022034110710d002000290300210420034120710d0120042004423f8722057c2005852004427f552001105221000c020b20002903002104410021000340200220006a41ff006a2004a7410f712203413072200341d7006a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000c010b410021000340200220006a41ff006a2004a7410f712203413072200341376a2003410a491b3a00002000417f6a2100200442048822044200520d000b20004180016a22034181014f0d022001410141d88bc0004102200220006a4180016a410020006b105621000b20024180016a240020000f0b200341800141c88bc0001059000b200341800141c88bc0001059000b940201047f230041106b220324000240024002400240200241ffffffff03712002470d0020024102742204417f4c0d000240024020040d00410421050c010b200410332205450d020b20034100360208200320053602002003200441027636020420034100200210860120032802002205200328020822064102746a20012002410274109d081a024020032802042204200620026a2202460d0020042002490d032004450d002004410274220120024102742204460d00024020040d00024020010d00410421050c020b20051035410421050c010b20052001200410372205450d040b2000200236020420002005360200200341106a24000f0b1044000b1045000b41ec80cc00412441c086cc00103f000b103c000bab0902027f017e230041106b220224000240024020012d00002203414f6a41fb00490d0002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e312a2a0001022a2a0304052a06072a2a08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a0b200020012d00013a0001410221030c290b200020012d00013a0001410321030c280b200020012d00013a0001410421030c270b200041046a200141046a280200360200410721030c260b200041046a200141046a280200360200410821030c250b200141046a2802002103410c10332201450d25200241086a2003280200200341046a28020010d607200229030821042001200328020836020820012004370200200041046a2001360200410921030c240b200041046a200141046a280200360200410b21030c230b200020012d00013a0001200041046a200141046a280200360200410c21030c220b200041046a200141046a280200360200410f21030c210b200041046a200141046a280200360200411021030c200b200041046a200141046a280200360200411121030c1f0b200041046a200141046a280200360200411221030c1e0b200041046a200141046a280200360200411321030c1d0b200041046a200141046a290200370200411421030c1c0b200041046a200141046a290200370200411521030c1b0b200041046a200141046a290200370200411621030c1a0b200041046a200141046a290200370200411721030c190b200041046a200141046a290200370200411821030c180b200041046a200141046a290200370200411921030c170b200041046a200141046a290200370200411a21030c160b200041046a200141046a290200370200411b21030c150b200041046a200141046a290200370200411c21030c140b200041046a200141046a290200370200411d21030c130b200041046a200141046a290200370200411e21030c120b200041046a200141046a290200370200411f21030c110b200041046a200141046a290200370200412021030c100b200041046a200141046a290200370200412121030c0f0b200041046a200141046a290200370200412221030c0e0b200041046a200141046a290200370200412321030c0d0b200041046a200141046a290200370200412421030c0c0b200041046a200141046a290200370200412521030c0b0b200041046a200141046a290200370200412621030c0a0b200041046a200141046a290200370200412721030c090b200041046a200141046a290200370200412821030c080b200041046a200141046a290200370200412921030c070b200041046a200141046a290200370200412a21030c060b200020012d00013a0001412b21030c050b200020012d00013a0001412c21030c040b200041046a200141046a280200360200412d21030c030b200041086a200141086a290300370300412e21030c020b200041046a200141046a280200360200412f21030c010b200041086a200141086a290300370300413021030b200020033a0000200241106a24000f0b103c000bcc0201027f230041106b22022400200028020028020021002001280218418b85cc0041052001411c6a28020028020c1100002103200241003a0005200220033a00042002200136020020022000410c6a36020c2002419085cc00410e2002410c6a41a085cc00106921012002200036020c200141b085cc0041092002410c6a41bc85cc00106921012002200041046a36020c200141cc85cc00410c2002410c6a41bc85cc00106921012002200041086a36020c200141d885cc00410c2002410c6a41bc85cc0010691a20022d00042100024020022d0005450d00200041ff0171210141012100024020010d0020022802002200411c6a28020028020c210120002802182103024020002d00004104710d00200341d0a0c0004102200111000021000c010b200341d2a0c0004101200111000021000b200220003a00040b200241106a2400200041ff01714100470bd50302047f017e024020014101762202450d0003402002417f6a2202210302400240024003402003410174220441017221050240200441026a220420014f0d00200520014f0d0220042005200020054103746a280200200020044103746a280200491b21050b200520014f0d03200320014f0d02200020034103746a2203280200200020054103746a22042802004f0d03200329020021062003200429020037020020042006370200200521030c000b0b2005200141f487cc001042000b20032001418488cc001042000b20020d000b0b0240024020014102490d002001210403402004417f6a220420014f0d02200029020021062000200020044103746a2205290200370200200520063702004100210302400240024003402003410174220241017221050240200241026a220220044f0d00200520044f0d0220022005200020054103746a280200200020024103746a280200491b21050b200520044f0d03200320044f0d02200020034103746a2203280200200020054103746a22022802004f0d03200329020021062003200229020037020020022006370200200521030c000b0b2005200441f487cc001042000b20032004418488cc001042000b200441014b0d000b0b0f0b20042001418486cc001042000bea04050a7f017e017f017e027f200041686a21022001417f6a2103200041086a2104410021052001413249210641012107024003400240024020072001490d00410021080c010b410121082000200741037422096a220a280200220b200a41786a280200490d00200420096a210803404101210a20032007460d03200741016a21072008280200220a200b4f2109200841086a2108200a210b20090d000b200720014921080b2007200146210a20060d0120072001460d010240024002400240024002402007417f6a220b20014f0d002008450d012000200b4103746a220b290200210c200b20002007410374220d6a2208290200220e3702002008200c37020020074102490d0520002007417e6a220a4103746a220f280200200ea722094d0d05200b200f290200370200200a450d0420002007417d6a220a4103746a28020020094d0d042002200d6a210b0340200b41086a200b290200370200200a450d03200a417f6a210a200b41786a220b28020020094b0d000b200a41016a210b0c030b200b200141f485cc001042000b20072001418486cc001042000b4100210b0b2000200b4103746a210f0b200f200e3702000b200541016a21050240200120076b220a4102490d00200828020820082802004f0d002008290200210c20082008290208370200200841086a210f0240200a4103490d002008280210200ca722104f0d00200841106a21094103210b4102210d0340200d41037420086a220f41786a2009290200370200200b200a4f0d01200b4103742109200b210d200b41016a210b200820096a22092802002010490d000b0b200f200c3702000b20054105470d000b4100210a0b200a0bcc5e010c7f230041a0016b22032400200320013602242002280208220441546a2105200241106a280200220641306c21010240024002400240024002400240024002400240024003402001450d01200141506a21012005412c6a2107200541306a2208210520072d00004104470d000b200641306c2101200441546a210503402001450d02200141506a21012005412c6a2107200541306a2209210520072d0000410c470d000b200641306c2101200441546a210503402001450d03200141506a21012005412c6a2107200541306a2204210520072d00004102470d000b0240410028028cb54c4105490d00200341013602442003200341246a3602404100280298b54c21014100280294b54c21054100280290b54c210720034198016a41980136020020034190016a42ee808080103703002003418c016a41b88acc0036020020034184016a422537020020034180016a41ee8bcc00360200200341f8006a4201370300200341e8006a4201370300200341e0006a410a360200200341f4006a200341c0006a360200200341c888cc00360264200341e48bcc0036025c20034105360258200541aca2c000200741024622071b200341d8006a200141c4a2c00020071b2802101102000b200341186a200810bf03200328021c200328022422014d0d03200328021820014102746a2201450d03200341106a200410bf032003280214200128020022014d0d04200328021020014104746a2201450d04200941086a280200200328022422054d0d0820092802002109200341286a41086a420037030020034280808080c00037032820012d000d2101410021072003410036024820032001410447220a3602442003200a360240200341003a004c410028028cb54c41044b0d05200341d8006a41086a200341c0006a41086a29030037030020032003290340370358200341286a410472210b200341d8006a21010c060b411310332201450d082001410f6a41002800a3884c360000200141086a410029009c884c37000020014100290094884c370000200041086a4293808080b00237020020002001360204200041013602000c090b410f10332201450d07200141076a41002900ae884c370000200141002900a7884c370000200041086a428f808080f00137020020002001360204200041013602000c080b410f10332201450d06200141076a41002900bd884c370000200141002900b6884c370000200041086a428f808080f00137020020002001360204200041013602000c070b412510332201450d052001411d6a41002900ed884c370000200141186a41002900e8884c370000200141106a41002900e0884c370000200141086a41002900d8884c370000200141002900d0884c370000200041086a42a5808080d00437020020002001360204200041013602000c060b412510332201450d042001411d6a41002900ed884c370000200141186a41002900e8884c370000200141106a41002900e0884c370000200141086a41002900d8884c370000200141002900d0884c370000200041086a42a5808080d00437020020002001360204200041013602000c050b200341c0003602542003200341c0006a3602504100280298b54c21014100280294b54c21074100280290b54c210820034198016a41cb0036020020034190016a42ee808080103703002003418c016a41b88acc0036020020034184016a422537020020034180016a41ee8bcc00360200200341f8006a4201370300200341e8006a4201370300200341d8006a41086a2206410a360200200341f4006a200341d0006a360200200341f888cc00360264200341e48bcc0036025c20034105360258200741aca2c000200841024622081b200341d8006a200141c4a2c00020081b28021011020020032802342108200328023021072006200341c0006a41086a29030037030020032003290340370358200341286a410472210b200341d8006a210120082007470d010b200b20074101108c01200328023421080b200b28020020084104746a22072001290200370200200741086a200141086a2902003702002003200328023441016a3602344100210702402009200541186c6a2201280214450d002009200541186c6a410c6a2109200141146a2108200341d8006a410472210c41002107410021010240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240034002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240200328022820074d0d00200341d8006a200341286a410010dd0720032802584101460d0120072003280228200328025c2d000c1b21070b2001200828020022054f0d1e2003200928020020014104746a220536023c0240410028028cb54c4105490d002003413936024420032003413c6a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341c90136029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc0036028001200342013703782003420137036820034188b2cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328023c21050b20052d000022060eac01031b0101011b020405060708090a0b0c0d0e0f10111111111111111111111111111112121212121212121213141515151516171717171717171717171617171717171717171717171717171717171717171717181818191919191919191919191919191919181818191919191919191919191919191919181818181818181919191919191918181818181818191919191919191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a030b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c340b20052d000121052003200328022836024820032005410447220536024020032006410347200571360244200341003a004c0240410028028cb54c4105490d00200341c0003602542003200341c0006a3602504100280298b54c21054100280294b54c21064100280290b54c210d200341cb0036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341f888cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341d0006a360274200641aca2c000200d1b200341d8006a20051102000b200341d8006a41086a2206200341c0006a41086a290300370300200320032903403703580240200328023422052003280230470d00200b20054101108c01200328023421050b200b28020020054104746a22052003290358370200200541086a20062903003702002003200328023441016a3602340c190b0240410028028cb54c4105490d00200b2802002105200341c10036025420032005200328023422064104746a41706a410020061b3602402003200341c0006a3602504100280298b54c21054100280294b54c21064100280290b54c210d200341d30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341a889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341d0006a360274200641aca2c000200d1b200341d8006a20051102000b024020032802342205450d0020032005417f6a2205360234200b28020020054104746a22052d000c4102460d00200528020021062003200528020822053602400240410028028cb54c4105490d00200341013602542003200341c0006a3602504100280298b54c21054100280294b54c210d4100280290b54c210e200341db0036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b089cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200e410246220e1b28021021052003200341d0006a360274200d41aca2c000200e1b200341d8006a2005110200200328024021050b20032005360228200320063602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a200511020020032802282105200328025021060b0240200520066a22062005490d00200320063602280c1a0b410e10332201450d36200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c330b411710332201450d352001410f6a41002900dd894c370000200141086a41002900d6894c370000200141002900ce894c370000200041086a4297808080f00237020020002001360204200041013602000c320b0240410028028cb54c4105490d004100280298b54c21054100280294b54c21064100280290b54c210d200341c10036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc003602800120034200370378200341b0b4cc0036027420034201370368200341e889cc003602642003410a360260200341e48bcc0036025c20034105360258200641aca2c000200d410246220d1b200341d8006a200541c4a2c000200d1b2802101102000b024020032802342205450d002005410474200b2802006a417c6a41013a00000c180b411710332201450d342001410f6a41002900dd894c370000200141086a41002900d6894c370000200141002900ce894c370000200041086a4297808080f00237020020002001360204200041013602000c310b200341d8006a200341286a200541046a28020010dd0720032802584101460d1a200341d8006a200341286a200328025c28020410df0720032802580d1b0240410028028cb54c4105490d004100280298b54c21054100280294b54c21064100280290b54c210d200341c10036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc003602800120034200370378200341b0b4cc0036027420034201370368200341e889cc003602642003410a360260200341e48bcc0036025c20034105360258200641aca2c000200d410246220d1b200341d8006a200541c4a2c000200d1b2802101102000b024020032802342205450d002005410474200b2802006a417c6a41013a00000c170b411710332201450d332001410f6a41002900dd894c370000200141086a41002900d6894c370000200141002900ce894c370000200041086a4297808080f00237020020002001360204200041013602000c300b200341d8006a200341286a200541046a28020010dd0720032802584101460d1b200341d8006a200341286a200328025c280204220510df0720032802580d1c200341d8006a200341286a410110df0720032802580d1d200320053602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c160b410e10332201450d32200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c2f0b200341d8006a200341286a200541046a28020028020810dd0720032802584101460d1d200328025c280204210d2005280204220628020441027421052006280200210602400340024020050d00200341d8006a200341286a200d10df0720032802580d220240410028028cb54c4105490d004100280298b54c21054100280294b54c21064100280290b54c210d200341c10036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc003602800120034200370378200341b0b4cc0036027420034201370368200341e889cc003602642003410a360260200341e48bcc0036025c20034105360258200641aca2c000200d410246220d1b200341d8006a200541c4a2c000200d1b2802101102000b20032802342205450d022005410474200b2802006a417c6a41013a00000c170b200341d8006a200341286a200628020010dd0720032802584101460d202005417c6a2105200641046a2106200328025c280204200d460d000b412710332201450d322001411f6a410029008f8a4c370000200141186a41002900888a4c370000200141106a41002900808a4c370000200141086a41002900f8894c370000200141002900f0894c370000200041086a42a7808080f00437020020002001360204200041013602000c2f0b411710332201450d312001410f6a41002900dd894c370000200141086a41002900d6894c370000200141002900ce894c370000200041086a4297808080f00237020020002001360204200041013602000c2e0b200341d8006a200341286a200a10df0720032802580d1f0240410028028cb54c4105490d004100280298b54c21054100280294b54c21064100280290b54c210d200341c10036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc003602800120034200370378200341b0b4cc0036027420034201370368200341e889cc003602642003410a360260200341e48bcc0036025c20034105360258200641aca2c000200d410246220d1b200341d8006a200541c4a2c000200d1b2802101102000b024020032802342205450d002005410474200b2802006a417c6a41013a00000c140b411710332201450d302001410f6a41002900dd894c370000200141086a41002900d6894c370000200141002900ce894c370000200041086a4297808080f00237020020002001360204200041013602000c2d0b200341d8006a200541046a280200200210e00720032802584101460d1f200341d8006a200341286a200328025c220528020810df0720032802580d20200320052d000d41044722053602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c130b410e10332201450d2f200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c2c0b200341086a200410bf0302400240200328020c200541046a28020022054d0d002003280208220620054104746a220d450d00200341d8006a200341286a200620054104746a28020810df0720032802580d222003200d2d000d41044722053602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b2003280228220620056a22052006490d01200320053602280c130b410e10332201450d2f200141066a410029009d8a4c370000200141002900978a4c370000200041086a428e808080e00137020020002001360204200041013602000c2c0b410e10332201450d2e200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c2b0b200341d8006a200341286a410110df072003280258450d1020002003290358370204200041013602002000410c6a200341e0006a2802003602000c2a0b200341d8006a200341286a410210df0720032802580d1f41012105200341d8006a200341286a410110df0720032802580d20200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c100b410e10332201450d2c200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c290b41012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c0f0b410e10332201450d2b200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c280b200341d8006a200341286a410110df072003280258450d0d20002003290358370204200041013602002000410c6a200341e0006a2802003602000c270b41012105200341d8006a200341286a410110df0720032802580d1e200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c0d0b410e10332201450d29200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c260b41012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c0c0b410e10332201450d28200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c250b200341d8006a200341286a410110df072003280258450d0a20002003290358370204200041013602002000410c6a200341e0006a2802003602000c240b41012105200341d8006a200341286a410110df0720032802580d1c200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c0a0b410e10332201450d26200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c230b200341d8006a200341286a410210df072003280258450d0820002003290358370204200041013602002000410c6a200341e0006a2802003602000c220b41012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c080b410e10332201450d24200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c210b41012105200341d8006a200341286a410110df0720032802580d1a200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c070b410e10332201450d23200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c200b41012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c060b410e10332201450d22200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c1f0b41012105200341d8006a200341286a410110df0720032802580d19200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c050b410e10332201450d21200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c1e0b200341d8006a200341286a410210df0720032802580d1941012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c040b410e10332201450d20200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c1d0b41012105200341d8006a200341286a410110df0720032802580d19200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c030b410e10332201450d1f200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c1c0b200341d8006a200341286a410210df0720032802580d1941012105200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b02402003280228220620056a22052006490d00200320053602280c020b410e10332201450d1e200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c1b0b41012105200341d8006a200341286a410110df0720032802580d19200341013602500240410028028cb54c4105490d00200341013602442003200341d0006a3602404100280298b54c21054100280294b54c21064100280290b54c210d200341e30036029801200342ee8080801037039001200341b88acc0036028c012003422537028401200341ee8bcc00360280012003420137037820034201370368200341b889cc003602642003410a360260200341e48bcc0036025c20034105360258200541c4a2c000200d410246220d1b28021021052003200341c0006a360274200641aca2c000200d1b200341d8006a2005110200200328025021050b2003280228220620056a22052006490d02200320053602280b200141016a22012008280200490d000c1a0b0b410e10332201450d1a200141066a41002900c6894c370000200141002900c0894c370000200041086a428e808080e00137020020002001360204200041013602000c170b2001200541a88acc001042000b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c150b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c140b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c130b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c120b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c110b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c100b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c0f0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0e0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0d0b200041013602002000200c2902003702042000410c6a200c41086a2802003602000c0c0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0b0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c0a0b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c090b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c080b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c070b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c060b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c050b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c040b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c030b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c020b20002003290358370204200041013602002000410c6a200341e0006a2802003602000c010b20002003290358370204200041013602002000410c6a200341e0006a2802003602000b200328023041ffffffff0071450d03200b28020010350c030b2000410036020020002007360204200328023041ffffffff0071450d02200b28020010350c020b412710332201450d002001411f6a410029009f894c370000200141186a4100290098894c370000200141106a4100290090894c370000200141086a4100290088894c37000020014100290080894c370000200041086a42a7808080f00437020020002001360204200041013602000c010b1045000b200341a0016a24000bc20201027f230041106b220224002001280218418b85cc0041052001411c6a28020028020c1100002103200241003a0005200220033a00042002200136020020022000410c6a36020c2002419085cc00410e2002410c6a41a085cc00106921012002200036020c200141b085cc0041092002410c6a41bc85cc00106921012002200041046a36020c200141cc85cc00410c2002410c6a41bc85cc00106921012002200041086a36020c200141d885cc00410c2002410c6a41bc85cc0010691a20022d00042100024020022d0005450d00200041ff0171210141012100024020010d0020022802002200411c6a28020028020c210120002802182103024020002d00004104710d00200341d0a0c0004102200111000021000c010b200341d2a0c0004101200111000021000b200220003a00040b200241106a2400200041ff01714100470b8d0201027f024002400240024002402001410c6a2802002203417f6a220420034b0d00200420026b220220044b0d01200320024d0d032000200128020420024104746a360204200041003602000f0b411610332201450d01200020013602042001410e6a41002900c98c4c370000200141086a41002900c38c4c370000200141002900bb8c4c370000200041086a4296808080e0023702000c030b411b10332201450d0020002001360204200141176a41002800fb8c4c360000200141106a41002900f48c4c370000200141086a41002900ec8c4c370000200141002900e48c4c370000200041086a429b808080b0033702000c020b1045000b2002200341d48ccc001042000b200041013602000bba0201037f230041106b220224000240024020002802000d002002200128021841ee8fcc0041042001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b2002200128021841ea8fcc0041042001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a41f48fcc00106f210120022d0008210020022802042203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d0041012100200428021841d6a0c00041012004411c6a28020028020c1100000d010b2001280200220028021841cca6cc0041012000411c6a28020028020c11000021000b200120003a00080b200241106a2400200041ff01714100470bcd0401037f230041e0006b220324002003200236020c0240410028028cb54c4105490d002003410136021420032003410c6a3602104100280298b54c21024100280294b54c21044100280290b54c2105200341d8006a41ef00360200200341d0006a42ee80808010370300200341cc006a41b88acc00360200200341c4006a4225370200200341c0006a41ee8bcc00360200200341386a4201370300200341286a4201370300200341206a410a360200200341346a200341106a360200200341a88bcc00360224200341e48bcc0036021c20034105360218200441aca2c000200541024622051b200341186a200241c4a2c00020051b280210110200200328020c21020b0240024002400240024002402002450d00200341186a2001410010dd0720032802184101460d0120012802002202200328021c2204280208460d022002200328020c6b220420024b0d0320004100360200200120043602000c050b200041003602000c040b2000200341186a4104722202290200370200200041086a200241086a2802003602000c030b024020042d000c0d00412510332202450d02200042a5808080d004370204200020023602002002411d6a41002900cd8b4c370000200241186a41002900c88b4c370000200241106a41002900c08b4c370000200241086a41002900b88b4c370000200241002900b08b4c3700000c030b200041003602000c020b410f10332202450d002000428f808080f00137020420002002360200200241076a41002900dc8b4c370000200241002900d58b4c3700000c010b1045000b200341e0006a24000bb107010a7f230041e0006b22032400200320013602202002280208220441546a2105200241106a280200220641306c210202400340024020020d00410021070c020b200241506a21022005412c6a2107200541306a2208210520072d00004102470d000b200341186a200810bf0320032802182107200328021c21020b2002410020071b2109200641306c2102200441546a2105200741b0b4cc0020071b210a02400340024020020d004100210b0c020b200241506a21022005412c6a2107200541306a2208210520072d00004104470d000b200341106a200810bf032003280210210b2003280214210c0b200641306c2102200441546a210502400240024002400240024002400240024003402002450d01200241506a21022005412c6a2107200541306a2208210520072d00004103470d000b200841086a2802002202450d00200241286c2107200828020041186a2102410021050340200520022d0000456a2105200241286a2102200741586a22070d000b200520014d0d01200641306c2102200441546a210503402002450d07200241506a21022005412c6a2107200541306a2208210520072d00004103470d000b200341086a200810bf03200328020c220441286c210520032802082206210703402005450d08200541586a2105200741186a2108200741286a2202210720082d00000d000b20010d02200241586a21020c030b410021050b0240200c4100200b1b200120056b22024d0d00200b41b0b4cc00200b1b20024102746a22020d030b200341dc006a41013602002003420237024c200341d093cc003602482003410136022c2003200341286a3602582003200341206a360228200341386a200341c8006a1041200341386a21020c030b2006200441286c6a210803402001417f6a2101034020082002460d06200241186a2105200241286a2207210220052d00000d000b2007210220010d000b200741586a21020b2002411c6a21020b2003200228020022023602240240200920024d0d00200a20024104746a2202450d0020002002360204410021020c040b200341dc006a4102360200200341c4006a41013602002003420337024c200341e093cc003602482003410136023c2003200341386a3602582003200341206a3602402003200341246a360238200341286a200341c8006a1041200341286a21020b20022802002105200041086a200229020437020020002005360204410121020c020b419e92cc0041c20041e092cc001064000b41f092cc0041dd0041e092cc001064000b20002002360200200341e0006a24000bec0201087f024020002802002201450d0020002802082102024020002802042200450d00034020012802940321012000417f6a22000d000b0b02402002450d0041002103024003402001450d01410021040240200320012f0106490d00034002400240200128020022000d0041002103410021000c010b200441016a210420012f010421030b2001103520002101200320002f01064f0d000b200021010b200341016a2105200120034105746a220041c4006a2802002106200041386a2802002107200041346a28020021080240024020040d00200521030c010b200120054102746a4194036a2802002101410021032004417f6a2200450d00034020012802940321012000417f6a22000d000b0b20064102460d022002417f6a210202402007450d00200810350b20020d000c020b0b41958dcc00412b41c08dcc00103f000b2001450d0020012802002100200110352000450d00034020002802002101200010352001210020010d000b0b0b2600024020002802002d00000d002001419d9fc0004105105a0f0b200141a29fc0004104105a0b8c0902047f017e230041106b2202240002400240024020010d00200041ac013a00000c010b024002400240024020012d00002203414f6a41fb004f0d000c010b02400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024002400240024020030e312c2c0001022c2c0304052c06072c2c08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292c0b20012d00012104410221030c2b0b20012d00012104410321030c2a0b20012d00012104410421030c290b200141046a2802002105410721030c270b200141046a2802002105410821030c260b200141046a2802002101410c10332205450d28200241086a2001280200200141046a28020010d607200229030821062005200128020836020820052006370200410921030c250b200141046a2802002105410b21030c240b200141046a280200210520012d00012104410c21030c240b200141046a2802002105410f21030c220b200141046a2802002105411021030c210b200141046a2802002105411121030c200b200141046a2802002105411221030c1f0b200141046a2802002105411321030c1e0b200141046a280200210520013502082106411421030c1d0b200141046a280200210520013502082106411521030c1c0b200141046a280200210520013502082106411621030c1b0b200141046a280200210520013502082106411721030c1a0b200141046a280200210520013502082106411821030c190b200141046a280200210520013502082106411921030c180b200141046a280200210520013502082106411a21030c170b200141046a280200210520013502082106411b21030c160b200141046a280200210520013502082106411c21030c150b200141046a280200210520013502082106411d21030c140b200141046a280200210520013502082106411e21030c130b200141046a280200210520013502082106411f21030c120b200141046a280200210520013502082106412021030c110b200141046a280200210520013502082106412121030c100b200141046a280200210520013502082106412221030c0f0b200141046a280200210520013502082106412321030c0e0b200141046a280200210520013502082106412421030c0d0b200141046a280200210520013502082106412521030c0c0b200141046a280200210520013502082106412621030c0b0b200141046a280200210520013502082106412721030c0a0b200141046a280200210520013502082106412821030c090b200141046a280200210520013502082106412921030c080b200141046a280200210520013502082106412a21030c070b20012d00012104412b21030c070b20012d00012104412c21030c060b200141046a2802002105412d21030c040b20012903082106412e21030c020b200141046a2802002105412f21030c020b20012903082106413021030b0b0b200020043a0001200020033a0000200041086a2006370300200041046a20053602000b200241106a24000f0b103c000bc60501087f230041106b220324002002280208220441546a2105200241106a280200220641306c210702400340410021082007450d01200741506a21072005412c6a2109200541306a220a210520092d00004103470d000b200a41086a2802002207450d00200741286c2105200a28020041186a2107410021080340200820072d0000456a2108200741286a2107200541586a22050d000b0b024002400240024002400240200120086b220a20014b0d00200641306c2107200441546a210503402007450d02200741506a21072005412c6a2108200541306a2209210520082d0000410c470d000b200941086a280200200a4b0d03411e10332207450d052000200736020420004101360200200741166a4100290096924c370000200741106a4100290090924c370000200741086a4100290088924c37000020074100290080924c370000200041086a429e808080e0033702000c040b412c103322070d010c040b412c10332207450d032000200736020420004101360200200741286a41002800fc914c360000200741206a41002900f4914c370000200741186a41002900ec914c370000200741106a41002900e4914c370000200741086a41002900dc914c370000200741002900d4914c370000200041086a42ac808080c0053702000c020b2000200736020420004101360200200741286a41002800d0914c360000200741206a41002900c8914c370000200741186a41002900c0914c370000200741106a41002900b8914c370000200741086a41002900b0914c370000200741002900a8914c370000200041086a42ac808080c0053702000c010b2009280200200a41186c6a28020821072003200a200210db07024020032802004101470d0020002003290204370204200041013602002000410c6a2003410c6a2802003602000c010b20032802042105200041003602002000200520076a3602040b200341106a24000f0b1045000b100020002802003502004101200110520b8903010a7f230041206b220124000240024002400240200041086a2802002202450d00410020024102746b2103417f210420002802002205210603402003450d01200441016a2104200341046a210320062802002107200641046a21062007450d000b4100200741004741016a41017122066b2004460d002002200620046a2208490d012002200741004741016a4101716b20046b220641ffffffff03712006470d0220064102742209417f4c0d024104210a02402009450d0020091033220a450d040b200141003602182001200a36021020012009410276360214200141106a410020061086012001280210200128021822064102746a200520084102746a4104200741004741016a410171220741027420036a6b109d081a200141086a22032002200620076b6a20046b360200200120012903103703000240200041046a28020041ffffffff0371450d00200028020010350b20002001290300370200200041086a20032802003602000b200141206a24000f0b2008200241cc95cc001059000b1044000b1045000bb90403077f017e097f02400240024002400240200141086a2802002203200241086a2802002204200320044b1b220541016a22064101200641014b1b220741ffffffff03712007470d0020074102742208417f4c0d00200810392209450d01024020050d004200210a0c040b2004417f6a220b20044b210c2002280200210d2003417f6a220e20034b0d022001280200210f2007417f6a2102200820096a417c6a2110410021064200210a03404100211102402003200e20066b22124d0d00410021112012200e4b0d00200f20124102746a28020021110b410021120240200c0d002004200b20066b22134d0d002013200b4b0d00200d20134102746a28020021120b200720024d0d052010200a2011ad7c2012ad7c220a3e02002010417c6a21102002417f6a2102200a422088210a200641016a22062005490d000c040b0b1044000b1045000b2007417f6a2102200820096a417c6a2111410021104200210a0340410021060240200c0d00410021062004200b20106b22124d0d00410021062012200b4b0d00200d20124102746a28020021060b200720024d0d022011200a2006ad7c220a3e02002011417c6a21112002417f6a2102200a422088210a201041016a22102005490d000b0b024020072005417f736a220220074f0d00200020073602082000200841027636020420002009360200200920024102746a200a3e02000240200141046a28020041ffffffff0371450d00200128020010350b0f0b2002200741bc95cc001042000b2002200741bc95cc001042000bb404030e7f017e017f02400240200241086a2802002203200141086a28020022046a22054101200541014b1b220641ffffffff03712006470d0020064102742207417f4c0d000240200710392208450d002004450d022001280200210902400240024020030d002006417f6a2105200720086a417c6a210a20092004417f6a22024102746a21030340200420024d0d0302402003280200450d00200620054d0d03200a41003602000b2003417c6a2103200a417c6a210a2005417f6a21052002417f6a2202417f470d000c060b0b200720086a417c6a210b200341027420022802006a417c6a210c4100210d2006210e03402004200d417f736a220220044f0d020240200920024102746a220f2802002210450d0042002111417f2102200b2105200c210a024003402006200e20026a22124d0d012005200a3502002010ad7e20117c20053502007c22113e0200201142208821110240200320026a0d002006200d20036a417f736a220520064f0d05200820054102746a20113e02000c030b2005417c6a2105200a417c6a210a200f280200211020032002417f6a22026a22122003490d000b2012200341ac95cc001042000b2012200641ac95cc001042000b200b417c6a210b200e417f6a210e200d41016a220d2004460d050c000b0b2005200641bc95cc001042000b2002200441ac95cc001042000b1045000b1044000b2000200636020820002007410276360204200020083602000240200141046a28020041ffffffff0371450d00200128020010350b0bca0302097f017e230041106b2201240002400240024002400240024002402000280200220228020041016a41004c0d002000280204220328020041016a41004c0d012000280208220441086a28020022054101200028020c22062802006b22076a220820054f0d02200720002802142802006b22052000280210220741086a28020022006a220920054f0d03024002402002290308220a42ffffffff0f560d0041002100200a200428020020084102746a3502007e2003290308422086200728020020094102746a35020084580d010b20022802000d052002410036020020022002290308427f7c370308200441086a2802002200200020062802006b22024d0d0620032802000d07200428020020024102746a350200210a200341003602002003200a20032903087c370308410121000b200141106a240020000f0b41ac96cc004118200141086a41c496cc0041d496cc001046000b41ac96cc004118200141086a41c496cc0041d496cc001046000b2008200541ac95cc001042000b2009200041ac95cc001042000b41a797cc004110200141086a41b897cc0041c897cc001046000b2002200041ac95cc001042000b41a797cc004110200141086a41b897cc0041c897cc001046000ba80301087f200028020822024102742103410021042000280200220521000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410121072004417f73200641004741016a4101716a21080c010b41002107410020046b21080b200128020822094102742103410021042001280200220121000240024003402003450d012004417f6a21042003417c6a210320002802002106200041046a21002006450d000b410021032004417f73200641004741016a4101716a21000c010b410020046b2100410121030b024020070d00410020034101736b0f0b4101210402400240024020030d0020022008490d0120092000490d02417f200220086b2203200920006b22064720032006491b22040d0020062003200320064b1b2107200120004102746a2103200520084102746a2100417f210103400240200141016a22012007490d0041000f0b2003280200210420002802002106200341046a2103200041046a2100417f200620044720062004491b2204450d000b0b20040f0b2008200241dc95cc001059000b2000200941ec95cc001059000b100020002802002000280204200110720bcd04010a7f230041106b220224002002410036020820024204370300200128000c2103410021040240024002400240024002400240024020012802042205200128020022064920012d00084100477222010d004100200520066b2204200420054b1b220741016a220420074f0d00200341086a21084100210441042109410021010340200828020022072005417f736a220a20074f0d02200620054f2107200520062005496b21052003280200200a4102746a280200210a024020012002280204470d0020022001417f41004100417f4100200520066b2209200920054b1b220941016a220b200b2009491b20071b20052006491b220941016a220b200b2009491b108601200228020021090b200920046a200a3602002002200141016a2201360208200441046a21042005200649200772450d000c070b0b2002410020041086012002280208210b20010d042002280200200b4102746a2104200520064d0d012005417f732101200341086a21092005210703402001200928020022086a220a20014f0d0320042003280200200a4102746a280200360200200141016a2101200441046a210420062007417f6a2207490d000b200520066b200b6a210b0c030b200a200741ac95cc001042000b20052006460d010c020b200a200841ac95cc001042000b200341086a28020022052006417f736a220620054f0d022004200328020020064102746a280200360200200b41016a210b0b2002200b3602080b20002002290300370200200041086a200241086a280200360200200241106a24000f0b2006200541ac95cc001042000b1c00200128021841ed9dcc00410f2001411c6a28020028020c1100000bb00301047f230041c0006b2202240020002802002103410121000240200128021841e29ec000410c2001411c6a28020028020c1100000d0002400240200328020822000d0020032802002200200328020428020c11070042e4aec285979ba58811520d012002200036020c2002413b36021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241f09ec0003602282002200241106a36023820042005200241286a10430d020c010b2002200036020c2002410836021420022002410c6a36021020012802182104200128021c2105410121002002413c6a41013602002002420237022c200241f09ec0003602282002200241106a36023820042005200241286a10430d010b200328020c2100200241106a41146a4101360200200241106a410c6a410136020020022000410c6a3602202002200041086a360218200241043602142002200036021020012802182100200128021c2101200241286a41146a41033602002002420337022c200241809fc0003602282002200241106a36023820002001200241286a104321000b200241c0006a240020000b21002000417f6a41ff01712002ad4220862001ad842004ad4220862003ad8410000b1c00200128021841ed9dcc00410f2001411c6a28020028020c1100000b1c00200128021841ed9dcc00410f2001411c6a28020028020c1100000b9a0601037f230041d0006b22042400200420033a000f02400240024020022802082205450d00200141086a2802002106200541037420022802006a41786a220528020021020240024020052d0006450d0020062002460d010b024002400240200620024d0d00200141086a2006417f6a2202360200200128020020026a2d00002201417c6a220241014b0d0220020e020301030b412b10332202450d04200041013a0000200241276a41002800e5a94c360000200241206a41002900dea94c370000200241186a41002900d6a94c370000200241106a41002900cea94c370000200241086a41002900c6a94c370000200241002900bea94c370000200041086a42ab808080b005370200200041046a20023602000c050b411810332202450d03200241106a410029008eb04c370000200241086a4100290086b04c370000200241002900feaf4c37000020044298808080800337022420042002360220200441c4006a410136020020044201370234200441acaacc003602302004413836024c2004200441c8006a3602402004200441206a360248200441106a200441306a104102402004280224450d00200428022010350b200041013a0000200041046a20042903103702002000410c6a200441106a41086a2802003602000c040b02400240200341ff017122024104460d0020012002470d010b200041003a0000200020013a00010c040b200420013a0048200441c4006a4102360200200441206a410c6a413d36020020044202370234200441eca9cc003602302004413d3602242004200441206a3602402004200441c8006a36022820042004410f6a360220200441106a200441306a10412000410c6a200441186a280200360200200041046a2004290310370200200041013a00000c030b20004180083b01000c020b2004411810fb072004410036023820042004290300370330200441306a4100411810fc0720042802302202200428023822006a411841feafcc00411810fd072004200041186a360238200420042902343702342004200236023041d4a4cc004134200441306a41b4a4cc004188a5cc001046000b1045000b200441d0006a24000be40502047f017e230041d0006b220324000240024002400240024002400240200241086a2802002204450d00200228020022052004417f6a22044103746a2d000522064104460d02200341386a20012002200610f20720032d00384101470d012000200329023c370200200041086a200341c4006a2802003602000c060b411810332202450d04200241106a410029008eb04c370000200241086a4100290086b04c370000200241002900feaf4c37000020034298808080800337021420032002360210200341cc006a41013602002003420137023c200341acaacc00360238200341383602342003200341306a3602482003200341106a360230200341206a200341386a1041200041086a200341206a41086a280200360200200020032903203702002003280214450d05200328021010350c050b200241086a2802002204450d012004417f6a2104200228020021050b200241086a2004360200200520044103746a290200220742808080808080c0ff0083428080808080808001510d00200141086a28020021022003200737030820022007a7470d01200041003602000c030b411810332202450d01200241106a410029008eb04c370000200241086a4100290086b04c370000200241002900feaf4c37000020034298808080800337021420032002360210200341cc006a41013602002003420137023c200341acaacc00360238200341383602342003200341306a3602482003200341106a360230200341206a200341386a1041200041086a200341206a41086a280200360200200020032903203702002003280214450d02200328021010350c020b200341cc006a41023602002003412c6a41013602002003420237023c200341aca8cc0036023820034101360224200320023602302003200341206a3602482003200341086a3602282003200341306a360220200341106a200341386a1041200041086a200341106a41086a280200360200200020032903103702000c010b1045000b200341d0006a24000bef0302037f017e230041c0006b22042400200441286a20012002200310f2070240024002400240024020042d00284101460d0002400240200141086a2802002202200128020c4f0d0002402002200141046a280200470d00200241016a22052002490d05200241017422062005200620054b1b22054100480d050240024020020d002005103322060d010c090b2001280200210620022005460d0020062002200510372206450d080b20012006360200200141046a2005360200200141086a28020021020b200128020020026a20033a0000200141086a2201200128020041016a3602000c010b2004413c6a220341013602002004420137022c200441e8b1cc003602282004410136021420042001410c6a3602102004200441106a360238200441186a200441286a104120042802182201450d002004200429021c37020420042001360200200341013602002004420137022c200441acaacc00360228200441383602142004200441106a36023820042004360210200441186a200441286a104120042802182101200429021c210702402004280204450d00200428020010350b20010d020b200041003602000c030b2000200429022c370200200041086a200441346a2802003602000c020b20002007370204200020013602000c010b103e000b200441c0006a24000f0b103c000ba80301057f230041c0006b2203240020032002360200024002402001280204220420024b0d002001280208417c6a21052001410c6a280200410374210102400340024020010d00200320043602042003412c6a4102360200200341306a410c6a41013602002003420337021c200341c8b2cc00360218200341013602342003200341306a3602282003200341046a36023820032003360230200341086a200341186a10412000410c6a200341106a280200360200200041046a2003290308370200200041013a00000c040b2004200541046a2802006a22062004490d01200141786a2101200541086a2105200420024b21072006210420070d0020062104200620024d0d000b20052d00002104200041003a0000200020043a00010c020b0240412010332204450d00200041013a0000200441186a41002900c0b24c370000200441106a41002900b8b24c370000200441086a41002900b0b24c370000200441002900a8b24c370000200041086a42a08080808004370200200041046a20043602000c020b1045000b200041003a00002000200128020020026a2d00003a00010b200341c0006a24000bbd0201037f230041106b220224000240024020002d00004104470d002002200128021841a0a7cc0041032001411c6a28020028020c11000022003a000820022001360200200241003a0009200241003602040c010b200220012802184185a7cc0041082001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a4190a7cc00106f210120022d0008210020022802042203450d00200041ff0171210441012100024020040d00024020034101470d0020012d0009450d00200128020022042d00004104710d0041012100200428021841d6a0c00041012004411c6a28020028020c1100000d010b2001280200220028021841cca6cc0041012000411c6a28020028020c11000021000b200120003a00080b200241106a2400200041ff01714100470b930602037f017e230041d0006b22052400200520023602082005200336020c024002400240417f41012002411f71742002411f4b1b20034b0d00200541386a200141186a2203200141286a410010f20720052d00384101470d012000200529023c370200200041086a200541c4006a2802003602000c020b200541cc006a41023602002005411c6a41013602002005420337023c20054184a6cc00360238200541013602142005200541106a36024820052005410c6a3602182005200541086a360210200541206a200541386a1041200041086a200541206a41086a280200360200200020052903203702000c010b200128020021022005410036022002400240024020022802080d00200541cc006a41013602002005420237023c200541fcadcc00360238200541013602342005200541306a3602482005200541206a360230200541106a200541386a1041200528021022020d010b0240024002400240200141206a2802002202200141246a22062802004f0d00024020022001411c6a280200470d00200241016a22062002490d04200241017422072006200720064b1b22064100480d040240024020020d002006103322030d010c080b2003280200210320022006460d0020032002200610372203450d070b200120033602182001411c6a2006360200200141206a28020021020b200128021820026a20043a0000200141206a2202200228020041016a3602000c010b200541cc006a220241013602002005420137023c200541e8b1cc0036023820054101360234200520063602302005200541306a360248200541106a200541386a104120052802102201450d002005200529021437022420052001360220200241013602002005420137023c200541acaacc00360238200541383602342005200541306a3602482005200541206a360230200541106a200541386a1041200528021021022005290214210802402005280224450d00200528022010350b20020d010b200041003602000c040b20002008370204200020023602000c030b103e000b20002005290214370204200020023602000c010b103c000b200541d0006a24000bb00301017f230041d0006b22052400200520023602082005200336020c02400240024002400240417f41012002411f71742002411f4b1b20034b0d002001280200210220054100360234024020022802080d00200541cc006a41013602002005420237023c200541fcadcc00360238200541013602142005200541106a3602482005200541346a360210200541206a200541386a1041200528022022020d020b200541386a200141186a2202200141286a2203200410f20720052d00384101460d02200541386a20022003410010f20720052d00384101460d03200041003602000c040b200541cc006a41023602002005412c6a41013602002005420337023c20054184a6cc00360238200541013602242005200541206a36024820052005410c6a3602282005200541086a360220200541106a200541386a1041200041086a200541106a41086a280200360200200020052903103702000c030b20002005290224370204200020023602000c020b2000200529023c370200200041086a200541c4006a2802003602000c010b2000200529023c370200200041086a200541c4006a2802003602000b200541d0006a24000bb10402047f017e230041c0006b22032400200341286a200141186a2204200141286a2205200210f20702400240024020032d00284101460d00200341286a20042005200210f20720032d00284101470d012000200329022c370200200041086a200341346a2802003602000c020b2000200329022c370200200041086a200341346a2802003602000c010b02400240024002400240200141206a2802002202200141246a22052802004f0d00024020022001411c6a280200470d00200241016a22052002490d04200241017422062005200620054b1b22054100480d040240024020020d002005103322040d010c070b2004280200210420022005460d0020042002200510372204450d060b200120043602182001411c6a2005360200200141206a28020021020b200128021820026a41003a0000200141206a2201200128020041016a3602000c010b2003413c6a220141013602002003420137022c200341e8b1cc0036022820034101360214200320053602102003200341106a360238200341186a200341286a104120032802182202450d002003200329021c37020420032002360200200141013602002003420137022c200341acaacc00360228200341383602142003200341106a36023820032003360210200341186a200341286a104120032802182101200329021c210702402003280204450d00200328020010350b20010d010b200041003602000c030b20002007370204200020013602000c020b103e000b103c000b200341c0006a24000bb10402057f017e230041c0006b22032400200341286a200141186a2204200141286a2205200210f20702400240024020032d00284101460d00200341286a20042005200210f20720032d00284101470d012000200329022c370200200041086a200341346a2802003602000c020b2000200329022c370200200041086a200341346a2802003602000c010b02400240024002400240200141206a2802002205200141246a22062802004f0d00024020052001411c6a280200470d00200541016a22062005490d04200541017422072006200720064b1b22064100480d040240024020050d002006103322040d010c070b2004280200210420052006460d0020042005200610372204450d060b200120043602182001411c6a2006360200200141206a28020021050b200128021820056a20023a0000200141206a2201200128020041016a3602000c010b2003413c6a220141013602002003420137022c200341e8b1cc0036022820034101360214200320063602102003200341106a360238200341186a200341286a104120032802182202450d002003200329021c37020420032002360200200141013602002003420137022c200341acaacc00360228200341383602142003200341106a36023820032003360210200341186a200341286a104120032802182101200329021c210802402003280204450d00200328020010350b20010d010b200041003602000c030b20002008370204200020013602000c020b103e000b103c000b200341c0006a24000b3101017f0240024020010d0041002101410121020c010b2001103322020d001045000b20002002360200200020013602040b950101017f024002400240200041046a280200220320016b20024f0d00200120026a22022001490d01200341017422012002200120024b1b22014100480d010240024020030d00024020010d00410121020c020b2001103322020d010c040b2000280200210220032001460d0020022003200110372202450d030b20002002360200200041046a20013602000b0f0b103e000b103c000bea0101017f230041e0006b22042400200420013602082004200336020c024020012003470d00200020022001109d081a200441e0006a24000f0b200441286a41146a410a360200200441346a410c360200200441106a41146a41033602002004200441086a36024020042004410c6a360244200441c8006a41146a410036020020044203370214200441a0b3cc003602102004410c36022c200441b0b4cc003602582004420137024c200441f4b3cc003602482004200441286a3602202004200441c8006a3602382004200441c4006a3602302004200441c0006a360228200441106a41b0b4cc00104c000b17000240200041046a280200450d00200028020010350b0b1500200028020022002802002000280208200110720b1000200120002802002000280208105a0bfb0101027f230041106b22022400200220012802184190b2cc0041052001411c6a28020028020c1100003a000820022001360200200241003a0009200241003602042002200036020c20022002410c6a4198b2cc00106f1a20022d00082101024020022802042203450d00200141ff0171210041012101024020000d00024020034101470d0020022d000941ff0171450d00200228020022002d00004104710d0041012101200028021841d6a0c00041012000411c6a28020028020c1100000d010b2002280200220128021841cca6cc0041012001411c6a28020028020c11000021010b200220013a00080b200241106a2400200141ff01714100470b8a0202017f037e230041106b220524002001200210950842ffffffff0f832003200410950842ffffffff0f83108d082106200120021095084220882003200410950842ffffffff0f83108d0820064220887c220742208810890821082005200320041095084220882001200210950842ffffffff0f83108d08200742ffffffff0f837c2207422086200642ffffffff0f8384200820074220881089087c2001200210950842208820032004109508422088108d081089087c2001200210960820032004109508108908108d08108c082001200210950810890820032004109608108d08108c08109708200529030021032000200541086a29030037030820002003370300200541106a24000bdc0302017f057e230041f0006b2206240020054100360200200641e0006a2001200220032004109208200641e0006a41086a290300210720062903602108200641d0006a10910802400240024002402006290350200185200641d0006a41086a29030020028584500d00200641c0006a1091082006290340200385200641c0006a41086a29030020048584500d012002423f872209200185220120097d220a420254200920028520097d2001200954ad7d22014200532001501b0d032004423f872202200385220320027d220b420254200220048520027d2003200254ad7d22044200532004501b0d0320092002852202200284500d02200641306a109108200641206a2006290330200641306a41086a2903004200200b7d42002004200b420052ad7c7d109408200a2006290320562001200641206a41086a29030022025520012002511b450d03200541013602000c030b200342025441002004501b0d02200541013602000c020b200142025441002002501b0d01200541013602000c010b200641106a10900820062006290310200641106a41086a290300200b2004109408200a2006290300582001200641086a29030022025720012002511b0d00200541013602000b2000200837030020002007370308200641f0006a24000b3c01017f230041106b2205240020052001200220032004108208200529030021012000200541086a29030037030820002001370300200541106a24000b3e01017f230041106b22062400200620012002200320042005108308200629030021012000200641086a29030037030820002001370300200641106a24000b3c01017f230041106b2205240020052001200220032004109b08200529030021012000200541086a29030037030820002001370300200541106a24000b040000000b8c0202017f027e230041e0006b22052400200541d0006a2002423f872206200185200620028520062006109308200541d0006a41086a290300210120052903502107200541c0006a2004423f872202200385200220048520022002109308200541c0006a41086a290300210420052903402103200541306a20072001108e08200541306a41086a290300210120052903302107200541206a20032004108e08200541106a200720012005290320200541206a41086a290300108f0820052005290310200541106a41086a290300108e08200541086a2903002104200020052903002002200685220685220220067d3703002000200420068520067d2002200654ad7d370308200541e0006a24000b040020000b1500024020014200520d00108708000b20002001800b1500024020014200520d00108708000b20002001820b0700200120007c0b0700200120007e0b100020002002370308200020013703000b4901017f230041106b22052400024020032004844200520d00108708000b200520012002200320041098082000200541086a29030037030820002005290300370300200541106a24000b1900200042ffffffffffffffffff003703082000427f3703000b19002000428080808080808080807f370308200042003703000b3801017f230041106b22052400200520032004200120021084082000200541086a29030037030820002005290300370300200541106a24000b1d002000200120037d3703002000200220047d2001200354ad7d3703080b6a01017f230041106b22052400024002402003200484500d0020012002428080808080808080807f85844200520d012003200483427f520d010b108708000b20052001200220032004109c082000200541086a29030037030820002005290300370300200541106a24000b040020000b040020010b100020002002370308200020013703000b3c01017f230041106b2205240020052001200220032004109908200529030021012000200541086a29030037030820002001370300200541106a24000b3e01017f230041106b22052400200520012002200320044100109a08200529030021012000200541086a29030037030820002001370300200541106a24000bc00704017f027e027f047e230041d0006b22062400024002400240024002400240024002400240024020012002109608500d002003200410950821072003200410960821082007500d012008500d022003200410960879a72001200210960879a76b2209413f4b0d0341ff0020096b210a200941016a21090c080b024020032004109608500d0020050d040c060b02402005450d002001200210950820032004109508108b08210720054200370308200520073703000b2001200210950820032004109508108a0821010c060b2008500d0302400240024020012002109508500d00200320041096087b4201510d012003200410960879a72001200210960879a76b2209413e4b0d0241ff0020096b210a200941016a21090c090b02402005450d00200642002001200210960820032004109608108b08109708200629030021072005200641086a290300370308200520073703000b2001200210960820032004109608108a0821010c070b02402005450d00200641106a200120021095082001200210960820032004109608427f7c83109708200629031021072005200641186a290300370308200520073703000b20012002109608200320041096087a423f838821010c060b2005450d040c020b0240200320041095087b4201510d0041bf7f2003200410950879a72001200210960879a76b22096b210a200941c1006a21090c060b02402005450d0020012002109508210720032004109508210820054200370308200520072008427f7c833703000b200320041095084201510d06200641c0006a20012002200320041095087aa710a408200641c8006a2903002102200629034021010c060b2005450d020b2005200137030020052002370308420021010c020b108708000b420021010b420021020c010b200641206a20012002200a41ff007110a308200641306a20012002200941ff007110a408200641206a41086a2903002102200641306a41086a290300210b20062903202101200629033021070240024020090d00420021084200210c0c010b4200210c4200210d0340200b4201862007423f888422082008427f8520047c20074201862002423f88842207427f85220820037c200854ad7c423f8722082004837d20072008200383220e54ad7d210b2007200e7d2107420020024201862001423f8884842102200d200142018684210120084201832208210d2009417f6a22090d000b0b02402005450d00200520073703002005200b3703080b200c20024201862001423f8884842102200820014201868421010b2000200137030020002002370308200641d0006a24000b4c01017f230041206b22052400200542003703182005420037031020052001200220032004200541106a109a08200529031021012000200529031837030820002001370300200541206a24000b3c01017f230041106b2205240020052001200220032004108808200529030021012000200541086a29030037030820002001370300200541106a24000b3601017f02402002450d00200021030340200320012d00003a0000200341016a2103200141016a21012002417f6a22020d000b0b20000b7101017f0240024020012000490d002002450d01200021030340200320012d00003a0000200141016a2101200341016a21032002417f6a22020d000c020b0b2002450d002001417f6a21012000417f6a21030340200320026a200120026a2d00003a00002002417f6a22020d000b0b20000b2c01017f02402002450d00200021030340200320013a0000200341016a21032002417f6a22020d000b0b20000b4a01037f4100210302402002450d000240034020002d0000220420012d00002205470d01200041016a2100200141016a21012002417f6a2202450d020c000b0b200420056b21030b20030bac0102017f037e230041206b2204240002400240200341c000710d002003450d01200120021095082105200120021096082106200420052003413f71ad22078620012002109508410020036b413f71ad88200620078684109708200441086a2903002102200429030021010c010b200441106a4200200120021095082003413f71ad86109708200441186a2903002102200429031021010b2000200137030020002002370308200441206a24000b9e0102017f027e230041106b22042400024002400240200341c000710d002003450d02200120021096082105200120021095082003413f71ad2206882005410020036b413f71ad868421052001200210960820068821010c010b200120021096082003413f71ad882105420021010b200420052001109708200441086a2903002102200429030021010b2000200137030020002002370308200441106a24000b3a01017f230041106b22042400200420012002200310a108200429030021012000200441086a29030037030820002001370300200441106a24000b3a01017f230041106b22042400200420012002200310a208200429030021012000200441086a29030037030820002001370300200441106a24000b0bb4b50c0300418080c0000b89b50c6361706163697479206f766572666c6f7700000024001000170000006e020000050000007372632f6c6962616c6c6f632f7261775f7665632e727300cb0010004600000068010000130000004200000004000000040000004300000044000000450000006120666f726d617474696e6720747261697420696d706c656d656e746174696f6e2072657475726e656420616e206572726f720042000000000000000100000046000000b8001000130000004a020000050000007372632f6c6962616c6c6f632f666d742e72732f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f666d742f6d6f642e72730000004f0110001600000065011000160000004c131300010000003c01100013000000ca0300000d0000007372632f6c6962616c6c6f632f7665632e7273737761705f72656d6f766520696e6465782028697320292073686f756c64206265203c206c656e202869732000a401100014000000b8011000170000004c131300010000003c01100013000000f10300000d000000696e73657274696f6e20696e6465782028697320292073686f756c64206265203c3d206c656e202869732000f80110001200000065011000160000004c131300010000003c01100013000000210400000d00000072656d6f76616c20696e646578202869732000003402100014000000b8011000170000004c131300010000003c01100013000000330500000d000000656e6420647261696e20696e6465782028697320010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002020202020202020202020202020202020202020202020202020202020203030303030303030303030303030303040404040400000000000000000000006803100020000000880310001200000042000000000000000100000047000000696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e646578206973203030303130323033303430353036303730383039313031313132313331343135313631373138313932303231323232333234323532363237323832393330333133323333333433353336333733383339343034313432343334343435343634373438343935303531353235333534353535363537353835393630363136323633363436353636363736383639373037313732373337343735373637373738373938303831383238333834383538363837383838393930393139323933393439353936393739383939000074041000060000007a04100022000000696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820ac04100016000000c20410000d000000736c69636520696e64657820737461727473206174202062757420656e64732061742000330f100016000000040800002f0000005b2e2e2e5d000000480510000b0000001d0f1000160000008705100001000000fb0e10000e000000090f1000040000000d0f1000100000008705100001000000480510000b00000053051000260000007905100008000000810510000600000087051000010000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e7369646520202862797465732029206f66206060c605100002000000b0051000160000005604000024000000b0051000160000004c040000110000007372632f6c6962636f72652f666d742f6d6f642e72732e2eda05100016000000540000001400000030787372632f6c6962636f72652f666d742f6e756d2e727300010305050606030706080809110a1c0b190c140d100e0d0f0410031212130916011705180219031a071c021d011f1620032b032c022d0b2e01300331023201a702a902aa04ab08fa02fb05fd04fe03ff09ad78798b8da23057588b8c901c1ddd0e0f4b4cfbfc2e2f3f5c5d5fb5e2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d112945495764658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cecfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff800d6d71dedf0e0f1f6e6f1c1d5f7d7eaeafbbbcfa16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f7475962f5f262e2fa7afb7bfc7cfd7df9a409798308f1fc0c1ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091feff536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab35280b80e003190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15053a0311070605100757070207150d500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd035907150b1709140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a06213f4c042d0374083c030f033c0738082b0582ff1118082f112d032010210f808c048297190b158894052f053b07020e180980b32d740c80d61a0c0580ff0580df0cee0d03848d033709815c1480b80880cb2a38030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a511816d1078282a064c04808d0480be031b030f0d0006010103010402080809020a050b020e041001110212051311140115021702190d1c051d0824016a036b02bc02d102d40cd509d602d702da01e005e102e802ee20f004f802f902fa02fb010c273b3e4e4f8f9e9e9f060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64655cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f926f5feeef5a629a9b2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf79cc6e6f935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b018090813709160a088098390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a8126524e28082a561c1417094e041e0f430e19070a0648082709750b3f412a063b050a0651060105100305808b621e48080a80a65e22450b0a060d1339070a362c041080c03c64530c48090a46451b4808531d398107460a1d03474937030e080a0639070a81361980b7010f320d839b66750b80c48abc842f8fd18247a1b98239072a040260260a460a28051382b05b654b0439071140050b020e97f80884d62a09a2f7811f3103110408818c89046b050d03090710936080f60a73086e1746809a140c570919808781470385420f1585502b80d52d031a040281703a0501850080d7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d8080d030d03740c59070c140c0438080a062808224e81540c15030305070919070709030d072980cb250a840600580b1000200000000a0000001c000000580b1000200000001a000000280000007372632f6c6962636f72652f756e69636f64652f7072696e7461626c652e72730003000083042000910560005d13a0001217a01e0c20e01eef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fea0359effe035fd016136010aa136240d6137ab0ee1382f182139301c6146f31ea14af06a614e4f6fa14e9dbc214f65d1e14f00da215000e0e15130e16153ece2a154d0e8e15420002e55f001bf55d80e100023000000520000003e00000000700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b03770f0120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c0109012801030139030503010407020b021d013a01020102010301050207020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b064a021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300031d031d021e02400201070801020b09012d03770222017603040209010603db0202013a010107010101010208060a020130113f0430070101050128090c0220040202010338010102030101033a0802029803010d0107040106010302c63a01050001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b2e0330010204020227014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a50200040002990bb001360f3803310402024503240501083e010c0234090a0402015f03020101020601a0010308150239020101010116010e070305c308020301011701510102060101020101020102eb010204060201021b025508020101026a0101010206010165030204010500090102f5010a0201010401900402020401200a280602040801090602032e0d010200070106010152160207010201027a060301010201070101480203010101000200053b0700013f0451010002000101030405080802071e0494030037043208010e011605010f000701110207010201050007000400076d07006080f000000000d80e1000230000004b00000028000000d80e10002300000057000000160000007372632f6c6962636f72652f756e69636f64652f756e69636f64655f646174612e7273626567696e203c3d20656e642028203c3d2029207768656e20736c6963696e672060206973206f7574206f6620626f756e6473206f6620607372632f6c6962636f72652f7374722f6d6f642e7273426f72726f774572726f72426f72726f774d75744572726f7270616e69636b6564206174200000990f1000010000009a0f100003000000301a130000000000980f100001000000980f1000010000003a27272c2066616c736574727565202020200000cc0f10001a0000008b01000026000000330f100016000000c30700002f0000007372632f6c6962636f72652f7374722f7061747465726e2e72730000f80f10001b00000052000000050000007372632f6c6962636f72652f736c6963652f6d656d6368722e7273207b202c20207b0a00420000000c0000000400000048000000490000004a0000002c0a00004200000004000000040000004b0000004c0000004d000000207d7d28280a2c0a5d5b0000330f100016000000800700002f000000bb101000260000006672616d655f737570706f72743a3a686173682f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f737570706f72742f7372632f686173682e7273496e76616c696420726576657273653a2068617368206c656e67746820746f6f2073686f72740000004200000004000000040000004e0000004f000000500000004200000000000000010000005100000052000000530000006d61782d77656967687461637475616c5f7765696768743d42000000000000000100000054000000550000005300000042000000000000000100000054000000550000005300000043616c6c4e6f74416c6c6f77656450687261676d656e426f67757353636f726550687261676d656e426f6775734564676550687261676d656e426f67757353656c66566f746550687261676d656e536c61736865644e6f6d696e6174696f6e50687261676d656e426f6775734e6f6d696e6174696f6e50687261676d656e426f6775734e6f6d696e61746f7250687261676d656e426f677573436f6d7061637450687261676d656e426f67757357696e6e657250687261676d656e426f67757357696e6e6572436f756e74536e617073686f74556e617661696c61626c6550687261676d656e5765616b5375626d697373696f6e50687261676d656e4561726c795375626d697373696f6e416c7265616479436c61696d65644e6f74536f72746564416e64556e69717565496e76616c69644e756d6265724f664e6f6d696e6174696f6e73496e76616c6964457261546f52657761726446756e6465645461726765744e6f556e6c6f636b4368756e6b4e6f4d6f72654368756e6b73496e73756666696369656e7456616c7565496e76616c6964536c617368496e6465784475706c6963617465496e646578456d70747954617267657473416c7265616479506169726564416c7265616479426f6e6465644e6f7453746173684e6f74436f6e74726f6c6c65725761726e696e673a20412073657373696f6e206170706561727320746f2068617665206265656e20736b69707065642e626f6e64626f6e645f6578747261756e626f6e6477697468647261775f756e626f6e64656476616c69646174656e6f6d696e6174656368696c6c7365745f70617965657365745f636f6e74726f6c6c65727365745f76616c696461746f725f636f756e74666f7263655f6e6f5f65726173666f7263655f6e65775f6572617365745f696e76756c6e657261626c6573666f7263655f756e7374616b65666f7263655f6e65775f6572615f616c7761797363616e63656c5f64656665727265645f736c6173687061796f75745f6e6f6d696e61746f727061796f75745f76616c696461746f727061796f75745f7374616b6572737265626f6e647365745f686973746f72795f6465707468726561705f73746173687375626d69745f656c656374696f6e5f736f6c7574696f6e7375626d69745f656c656374696f6e5f736f6c7574696f6e5f756e7369676e6564426f6e6465644c65646765724e6f6d696e61746f727356616c696461746f72536c617368496e4572614e6f6d696e61746f72536c617368496e457261536c617368696e675370616e735370616e536c617368536e617073686f7456616c696461746f7273536e617073686f744e6f6d696e61746f7273457261456c656374696f6e5374617475730000000000a81610000900000000000000b4161000030000000000000000000000cc161000020000000000000000000000dc161000060000000000000084111200020000000000000000000000e4161000010000000000000000000000ec161000050000000000000084111200020000000000000000000000f4161000010000000000000000000000fc1610001a0000000000000008f6120001000000000000000000000018171000020000000000000000000000281710000f000000000000003817100001000000000000000000000040171000010000000000000000000000c0141000060000000000000084111200020000000000000000000000481710000400000000000000000000006817100008000000000000008411120002000000000000000000000070171000010000000000000000000000781710000900000000000000841112000200000000000000000000008417100002000000000000004572615061796f7574000000b51a100008000000f615120007000000f6151200070000002e1a100056000000841a1000310000005265776172640000df1910004f000000536c61736800000096191000490000004f6c64536c617368696e675265706f727444697363617264656400003d1910004700000084191000120000005374616b696e67456c656374696f6e002e1910000f000000ea181000440000002a18100023000000301a1300000000004d18100054000000a118100049000000556e626f6e646564051810002500000057697468647261776e0000009417100057000000eb1710001a00000020416e206163636f756e74206861732063616c6c6564206077697468647261775f756e626f6e6465646020616e642072656d6f76656420756e626f6e64696e67206368756e6b7320776f727468206042616c616e6365602066726f6d2074686520756e6c6f636b696e672071756575652e20416e206163636f756e742068617320756e626f6e646564207468697320616d6f756e742e20416e206163636f756e742068617320626f6e646564207468697320616d6f756e742e204e4f54453a2054686973206576656e74206973206f6e6c7920656d6974746564207768656e2066756e64732061726520626f6e64656420766961206120646973706174636861626c652e204e6f7461626c792c2069742077696c6c206e6f7420626520656d697474656420666f72207374616b696e672072657761726473207768656e20746865792061726520616464656420746f207374616b652e2041206e657720736574206f66207374616b6572732077617320656c656374656420776974682074686520676976656e20636f6d7075746174696f6e206d6574686f642e456c656374696f6e436f6d7075746520416e206f6c6420736c617368696e67207265706f72742066726f6d2061207072696f72206572612077617320646973636172646564206265636175736520697420636f756c64206e6f742062652070726f6365737365642e204f6e652076616c696461746f722028616e6420697473206e6f6d696e61746f72732920686173206265656e20736c61736865642062792074686520676976656e20616d6f756e742e20546865207374616b657220686173206265656e207265776172646564206279207468697320616d6f756e742e20604163636f756e7449646020697320746865207374617368206163636f756e742e2054686520657261207061796f757420686173206265656e207365743b207468652066697273742062616c616e6365206973207468652076616c696461746f722d7061796f75743b20746865207365636f6e64206973207468652072656d61696e6465722066726f6d20746865206d6178696d756d20616d6f756e74206f66207265776172642e457261496e6465785374616b696e674f6666636861696e45726173526577617264506f696e74734572617356616c696461746f7252657761726445726173546f74616c5374616b654572726f723a2073746172745f73657373696f6e5f696e646578206d7573742062652073657420666f722063757272656e745f657261517565756564456c65637465644572617356616c696461746f725072656673457261735374616b657273436c6970706564457261735374616b657273556e6170706c696564536c61736865730000000000731310000400000000000000a01f1000030000000000000000000000e81f1000110000000000000000000000771310000a00000000000000702010000100000000000000000000008820100011000000000000000000000081131000060000000000000010211000010000000000000000000000282110001b0000000000000000000000871310001100000000000000301a13000000000000000000000000000022100013000000000000000000000098131000080000000000000098221000010000000000000000000000b02210000c0000000000000000000000a0131000080000000000000010231000010000000000000000000000282310000d0000000000000000000000a81310000500000000000000301a1300000000000000000000000000902310000c0000000000000000000000ad1310000900000000000000f0231000010000000000000000000000082410000b0000000000000000000000b61310000e0000000000000060241000010000000000000000000000782410000b0000000000000000000000c41310001300000000000000d0241000010000000000000000000000e8241000010000000000000000000000d71310000d00000000000000301a1300000000000000000000000000f0241000050000000000000000000000e41310000d00000000000000301a130000000000000000000000000018251000060000000000000000000000f113100011000000000000004825100001000000000000000000000060251000010000000000000000000000021410000d0000000000000068251000010000000000000000000000802510000100000000000000000000000f1410001400000000000000301a130000000000000000000000000088251000050000000000000000000000231410001500000000000000b0251000020000000000000000000000e025100007000000000000000000000038141000100000000000000018261000020000000000000000000000482610001e00000000000000000000004814100010000000000000003827100001000000000000000000000050271000130000000000000000000000581410000e00000000000000e8271000020000000000000000000000182810000f000000000000000000000066141000060000000000000010211000010000000000000000000000902810000900000000000000000000006c1410001100000000000000d8281000010000000000000000000000f02810000300000000000000000000007d1410000a00000000000000682510000100000000000000000000000829100007000000000000000000000087141000180000000000000040291000040000000000000000000000a02910004a00000000000000000000009f141000210000000000000040291000040000000000000000000000f02b1000050000000000000000000000674810000a00000000000000f32012002300000000000000aa4d12000500000000000000807512001500000000000000f44810000500000000000000f94810001100000038531000590000009153100021000000301a130000000000b25310004c000000301a130000000000fe53100049000000301a1300000000001a53100010000000301a130000000000f5bd12000b000000475410003500000085201200080000007c5410001a000000301a1300000000009654100054000000ea5410005000000044be12000c000000000000002a5310000e0000000000000080751200150000005e51100059000000b75110000d000000301a130000000000c45110005400000018521000590000007152100013000000301a1300000000008452100058000000dc5210003e000000301a1300000000001a53100010000000301a130000000000f5bd12000b000000d54710003a0000008520120008000000ee8811001000000044be12000c00000000000000aa4d1200050000000000000080751200150000006f4d100055000000c44d100040000000044e100049000000301a1300000000004d4e1000520000009f4e100030000000301a130000000000cf4e10004f0000001e4f10004f0000006d4f10003f000000301a1300000000009f481000550000003c49100043000000301a130000000000ac4f100012000000301a130000000000be4f100026000000301a130000000000f5bd12000b000000e44f1000500000000f4810002600000034501000590000008d5010005c000000e9501000540000003d51100017000000ee88110010000000545110000a000000554b10004b000000301a130000000000a04b10004d000000ed4b100013000000301a1300000000009f481000550000003c49100043000000301a130000000000004c100013000000301a130000000000134c10001b000000301a130000000000f5bd12000b0000002e4c100055000000834c100051000000d44c10003d000000114d10005e000000354810003200000044be12000c00000000000000424b10000500000000000000474b10000e000000084b10003a000000301a1300000000004947100037000000301a1300000000009f481000550000003c49100043000000301a130000000000f5bd12000b000000d54710003a0000000f48100026000000354810003200000044be12000c00000000000000d94a10000700000000000000e04a1000280000009449100044000000301a130000000000d849100054000000233b100023000000301a1300000000009f481000550000003c49100043000000301a130000000000f5bd12000b0000002c4a100049000000754a10002e000000a34a10003600000044be12000c0000000a49100032000000301a1300000000004947100037000000301a1300000000009f481000550000003c49100043000000301a130000000000f5bd12000b000000d54710003a0000007f49100015000000354810003200000044be12000c00000000000000f44810000500000000000000f948100011000000714810002e000000301a1300000000004947100037000000301a1300000000009f48100055000000301a130000000000f5bd12000b000000d54710003a0000000f48100026000000354810003200000044be12000c00000000000000674810000a00000000000000f3201200230000002547100024000000301a1300000000004947100037000000301a1300000000008047100055000000301a130000000000f5bd12000b000000d54710003a0000000f48100026000000354810003200000044be12000c00000000000000842112000300000000000000194710000c000000f946100020000000cd4610002c000000301a130000000000f5bd12000b000000bd4610001000000044be12000c00000042461000530000009546100028000000301a130000000000f5bd12000b000000bd4610001000000044be12000c00000000000000804410000a00000000000000ddce1200110000000f46100033000000000000000a46100005000000000000007ac312000c000000c7451000430000007245100041000000301a130000000000f5bd12000b000000b34510001400000044be12000c00000000000000093910000300000000000000b51a10000800000000000000654510000d00000000000000c499120008000000a244100051000000f34410001c0000000f45100041000000301a130000000000f5bd12000b000000504510001500000044be12000c00000000000000093910000300000000000000b51a10000800000000000000804410000a000000000000008a44100018000000f03d100058000000483e1000570000009f3e100031000000301a130000000000ac40100029000000301a130000000000d54010003f000000383f100059000000913f10004c00000014411000560000006a41100049000000b341100022000000d54110004200000017421000480000005f42100028000000301a130000000000dd3f100057000000344010000e000000301a1300000000004240100051000000301a130000000000f5bd12000b0000008742100057000000de42100027000000054310004e00000053431000370000008a43100050000000da431000520000002c4410005400000044be12000c00000000000000093910000300000000000000b51a100008000000f03d100058000000483e1000570000009f3e100031000000301a130000000000d03e100029000000301a130000000000f93e10003f000000383f100059000000913f10004c000000301a130000000000dd3f100057000000344010000e000000301a1300000000004240100051000000301a130000000000f5bd12000b00000093401000190000009f9510003100000044be12000c00000000000000e13d10000f000000000000007ac312000c00000000000000093910000300000000000000b51a100008000000bf3b100044000000301a130000000000033c100053000000563c10004a000000a03c10004d000000301a130000000000ed3c100056000000433d10001e000000301a130000000000613d100040000000301a130000000000f5bd12000b000000a13d1000400000009f9510003100000044be12000c000000963a100038000000301a130000000000ce3a100055000000233b100023000000301a130000000000f5bd12000b000000463b10003c000000823b10003d00000044be12000c00000000000000743a10001100000000000000853a100011000000463a100019000000301a1300000000005f3a1000150000000c3910004e0000005a39100058000000b239100030000000301a130000000000e239100024000000301a130000000000063a10004000000000000000b83810000700000000000000bf3810001300000000000000d23810001300000000000000e53810001200000000000000f73810000500000000000000fc3810000d00000000000000093910000300000000000000b51a100008000000112d100038000000301a130000000000492d10000d000000562d100045000000301a1300000000009b2d100021000000301a130000000000bc2d10002b000000301a130000000000e72d10003d000000242e100054000000782e10000c000000301a130000000000842e10004a000000301a130000000000ce2e10002a000000301a130000000000f82e100032000000301a1300000000002a2f1000530000007d2f100047000000c42f10004c00000010301000540000006430100058000000bc30100026000000301a130000000000e230100018000000301a130000000000fa30100039000000333110003e000000713110002b0000009c31100055000000f131100057000000483210001000000058321000430000009b3210001b000000301a130000000000b632100030000000301a130000000000e6321000590000003f331000590000009833100050000000e833100027000000301a130000000000f5bd12000b0000000f341000590000006834100039000000301a130000000000a134100059000000fa34100052000000301a1300000000004c35100038000000301a1300000000008435100027000000ab35100026000000d135100027000000f835100037000000301a1300000000002f36100045000000743610003f000000b336100042000000f536100045000000301a1300000000003a3710004f000000893710005a000000301a130000000000e3371000230000000638100022000000301a130000000000283810002b0000005338100027000000301a1300000000007a3810003e00000044be12000c000000182c100030000000301a130000000000482c1000570000009f2c100058000000f72c10001a00000020556e7369676e65642076657273696f6e206f6620607375626d69745f656c656374696f6e5f736f6c7574696f6e602e204e6f746520746861742074686973206d757374207061737320746865205b6056616c6964617465556e7369676e6564605d20636865636b207768696368206f6e6c7920616c6c6f7773207472616e73616374696f6e732066726f6d20746865206c6f63616c206e6f646520746f20626520696e636c756465642e20496e206f7468657220776f7264732c206f6e6c792074686520626c6f636b20617574686f722063616e20696e636c7564652061207472616e73616374696f6e20696e2074686520626c6f636b2e205375626d697420612070687261676d656e20726573756c7420746f2074686520636861696e2e2049662074686520736f6c7574696f6e3a20312e2069732076616c69642e20322e206861732061206265747465722073636f7265207468616e206120706f74656e7469616c6c79206578697374696e6720736f6c7574696f6e206f6e20636861696e2e207468656e2c2069742077696c6c206265205f7075745f206f6e20636861696e2e204120736f6c7574696f6e20636f6e7369737473206f662074776f20706965636573206f6620646174613a20312e206077696e6e657273603a206120666c617420766563746f72206f6620616c6c207468652077696e6e657273206f662074686520726f756e642e20322e206061737369676e6d656e7473603a2074686520636f6d706163742076657273696f6e206f6620616e2061737369676e6d656e7420766563746f72207468617420656e636f64657320746865206564676520202020776569676874732e20426f7468206f66207768696368206d617920626520636f6d7075746564207573696e67205b6070687261676d656e605d2c206f7220616e79206f7468657220616c676f726974686d2e204164646974696f6e616c6c792c20746865207375626d6974746572206d7573742070726f766964653a202d20546865206073636f7265602074686174207468657920636c61696d20746865697220736f6c7574696f6e206861732e20426f74682076616c696461746f727320616e64206e6f6d696e61746f72732077696c6c20626520726570726573656e74656420627920696e646963657320696e2074686520736f6c7574696f6e2e2054686520696e64696365732073686f756c6420726573706563742074686520636f72726573706f6e64696e6720747970657320285b6056616c696461746f72496e646578605d20616e64205b604e6f6d696e61746f72496e646578605d292e204d6f72656f7665722c20746865792073686f756c642062652076616c6964207768656e207573656420746f20696e64657820696e746f205b60536e617073686f7456616c696461746f7273605d20616e64205b60536e617073686f744e6f6d696e61746f7273605d2e20416e7920696e76616c696420696e6465782077696c6c2063617573652074686520736f6c7574696f6e20746f2062652072656a65637465642e2054686573652074776f2073746f72616765206974656d73206172652073657420647572696e672074686520656c656374696f6e2077696e646f7720616e64206d6179206265207573656420746f2064657465726d696e652074686520696e64696365732e204120736f6c7574696f6e2069732076616c69642069663a20302e204974206973207375626d6974746564207768656e205b60457261456c656374696f6e537461747573605d20697320604f70656e602e20312e2049747320636c61696d65642073636f726520697320657175616c20746f207468652073636f726520636f6d7075746564206f6e2d636861696e2e20322e2050726573656e74732074686520636f7272656374206e756d626572206f662077696e6e6572732e20332e20416c6c20696e6465786573206d7573742062652076616c7565206163636f7264696e6720746f2074686520736e617073686f7420766563746f72732e20416c6c20656467652076616c756573206d75737420202020616c736f20626520636f727265637420616e642073686f756c64206e6f74206f766572666c6f7720746865206772616e756c6172697479206f662074686520726174696f20747970652028692e652e20323536202020206f722062696c6c696f6e292e20342e20466f72206561636820656467652c20616c6c2074617267657473206172652061637475616c6c79206e6f6d696e617465642062792074686520766f7465722e20352e2048617320636f72726563742073656c662d766f7465732e204120736f6c7574696f6e732073636f726520697320636f6e736973746564206f66203320706172616d65746572733a20312e20606d696e207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d6178696d697a65642e20322e206073756d207b20737570706f72742e746f74616c207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265206d696e696d697a65642e20332e206073756d207b20737570706f72742e746f74616c5e32207d6020666f72206561636820737570706f7274206f6620612077696e6e65722e20546869732076616c75652073686f756c64206265202020206d696e696d697a65642028746f20656e73757265206c6573732076617269616e63652920453a206e756d626572206f662065646765732e206d3a2073697a65206f662077696e6e657220636f6d6d69747465652e206e3a206e756d626572206f66206e6f6d696e61746f72732e20643a2065646765206465677265652028313620666f72206e6f772920763a206e756d626572206f66206f6e2d636861696e2076616c696461746f722063616e646964617465732e204e4f54453a20676976656e206120736f6c7574696f6e20776869636820697320726564756365642c2077652063616e20656e61626c652061206e657720636865636b2074686520656e7375726520607c457c203c206e202b206d602e20576520646f6e277420646f2074686973205f7965745f2c20627574206f7572206f6666636861696e20776f726b657220636f6465206578656375746573206974206e6f6e657468656c6573732e206d616a6f722073746570732028616c6c20646f6e6520696e2060636865636b5f616e645f7265706c6163655f736f6c7574696f6e60293a202d2053746f726167653a204f28312920726561642060456c656374696f6e537461747573602e202d2053746f726167653a204f2831292072656164206050687261676d656e53636f7265602e202d2053746f726167653a204f2831292072656164206056616c696461746f72436f756e74602e202d2053746f726167653a204f283129206c656e67746820726561642066726f6d2060536e617073686f7456616c696461746f7273602e202d2053746f726167653a204f287629207265616473206f6620604163636f756e7449646020746f2066657463682060736e617073686f745f76616c696461746f7273602e202d204d656d6f72793a204f286d2920697465726174696f6e7320746f206d61702077696e6e657220696e64657820746f2076616c696461746f722069642e202d2053746f726167653a204f286e2920726561647320604163636f756e7449646020746f2066657463682060736e617073686f745f6e6f6d696e61746f7273602e202d204d656d6f72793a204f286e202b206d2920726561647320746f206d617020696e64657820746f20604163636f756e7449646020666f7220756e2d636f6d706163742e202d2053746f726167653a204f286529206163636f756e7469642072656164732066726f6d20604e6f6d696e6174696f6e6020746f207265616420636f7272656374206e6f6d696e6174696f6e732e202d2053746f726167653a204f2865292063616c6c7320696e746f2060736c61736861626c655f62616c616e63655f6f665f766f74655f7765696768746020746f20636f6e7665727420726174696f20746f207374616b65642e202d204d656d6f72793a206275696c645f737570706f72745f6d61702e204f2865292e202d204d656d6f72793a206576616c756174655f737570706f72743a204f2845292e202d2053746f726167653a204f2865292077726974657320746f2060517565756564456c6563746564602e202d2053746f726167653a204f28312920777269746520746f206051756575656453636f7265602054686520776569676874206f6620746869732063616c6c20697320312f31307468206f662074686520626c6f636b7320746f74616c207765696768742e77696e6e6572735665633c56616c696461746f72496e6465783e636f6d706163745f61737369676e6d656e7473436f6d7061637441737369676e6d656e747373636f726550687261676d656e53636f72656572612052656d6f766520616c6c20646174612073747275637475726520636f6e6365726e696e672061207374616b65722f7374617368206f6e6365206974732062616c616e6365206973207a65726f2e205468697320697320657373656e7469616c6c79206571756976616c656e7420746f206077697468647261775f756e626f6e64656460206578636570742069742063616e2062652063616c6c656420627920616e796f6e6520616e6420746865207461726765742060737461736860206d7573742068617665206e6f2066756e6473206c6566742e20546869732063616e2062652063616c6c65642066726f6d20616e79206f726967696e2e202d20607374617368603a20546865207374617368206163636f756e7420746f20726561702e204974732062616c616e6365206d757374206265207a65726f2e2053657420686973746f72795f64657074682076616c75652e204f726967696e206d75737420626520726f6f742e6e65775f686973746f72795f6465707468436f6d706163743c457261496e6465783e205265626f6e64206120706f7274696f6e206f6620746865207374617368207363686564756c656420746f20626520756e6c6f636b65642e20546865206469737061746368206f726967696e206d757374206265207369676e65642062792074686520636f6e74726f6c6c65722c20616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a204f2831292e20426f756e64656420627920604d41585f554e4c4f434b494e475f4348554e4b53602e202d2053746f72616765206368616e6765733a2043616e277420696e6372656173652073746f726167652c206f6e6c792064656372656173652069742e20506179206f757420616c6c20746865207374616b65727320626568696e6420612073696e676c652076616c696461746f7220666f7220612073696e676c65206572612e202d206076616c696461746f725f73746173686020697320746865207374617368206163636f756e74206f66207468652076616c696461746f722e205468656972206e6f6d696e61746f72732c20757020746f20202060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602c2077696c6c20616c736f207265636569766520746865697220726577617264732e202d206065726160206d617920626520616e7920657261206265747765656e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e20546865206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e20416e79206163636f756e742063616e2063616c6c20746869732066756e6374696f6e2c206576656e206966206974206973206e6f74206f6e65206f6620746865207374616b6572732e20546869732063616e206f6e6c792062652063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d2054696d6520636f6d706c65786974793a206174206d6f7374204f284d61784e6f6d696e61746f72526577617264656450657256616c696461746f72292e76616c696461746f725f7374617368202a2a546869732065787472696e7369632077696c6c2062652072656d6f76656420616674657220604d6967726174696f6e457261202b20486973746f727944657074686020686173207061737365642c20676976696e67206f70706f7274756e69747920666f7220757365727320746f20636c61696d20616c6c2072657761726473206265666f7265206d6f76696e6720746f2053696d706c65205061796f7574732e20416674657220746869732074696d652c20796f752073686f756c642075736520607061796f75745f7374616b6572736020696e73746561642e2a2a204d616b65206f6e652076616c696461746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f66207468652076616c696461746f7220746f20706179206f75742e202d206065726160206d6179206e6f74206265206c6f776572207468616e206f6e6520666f6c6c6f77696e6720746865206d6f737420726563656e746c792070616964206572612e204966206974206973206869676865722c2020207468656e20697420696e6469636174657320616e20696e737472756374696f6e20746f20736b697020746865207061796f7574206f6620616c6c2070726576696f757320657261732e205741524e494e473a206f6e636520616e2065726120697320706179656420666f7220612076616c696461746f7220737563682076616c696461746f722063616e277420636c61696d20746865207061796f7574206f662070726576696f7573206572612e205741524e494e473a20496e636f727265637420617267756d656e747320686572652063616e20726573756c7420696e206c6f7373206f66207061796f75742e2042652076657279206361726566756c2e202d2054696d6520636f6d706c65786974793a204f2831292e204d616b65206f6e65206e6f6d696e61746f722773207061796f757420666f72206f6e65206572612e202d206077686f602069732074686520636f6e74726f6c6c6572206163636f756e74206f6620746865206e6f6d696e61746f7220746f20706179206f75742e202d206076616c696461746f72736020697320746865206c697374206f6620616c6c2076616c696461746f72732074686174206077686f6020686164206578706f7375726520746f20647572696e672060657261602c202020616c6f6e67736964652074686520696e646578206f66206077686f6020696e2074686520636c6970706564206578706f73757265206f66207468652076616c696461746f722e202020492e652e206561636820656c656d656e742069732061207475706c65206f66202020602876616c696461746f722c20696e646578206f66206077686f6020696e20636c6970706564206578706f73757265206f662076616c696461746f7229602e202020496620697420697320696e636f6d706c6574652c207468656e206c657373207468616e207468652066756c6c207265776172642077696c6c2062652070616964206f75742e2020204974206d757374206e6f742065786365656420604d41585f4e4f4d494e4154494f4e53602e202d204e756d626572206f662073746f726167652072656164206f6620604f2876616c696461746f727329603b206076616c696461746f7273602069732074686520617267756d656e74206f66207468652063616c6c2c202020616e6420697320626f756e64656420627920604d41585f4e4f4d494e4154494f4e53602e202d20456163682073746f72616765207265616420697320604f284e29602073697a6520616e64206465636f646520636f6d706c65786974793b20604e602069732074686520206d6178696d756d2020206e6f6d696e6174696f6e7320746861742063616e20626520676976656e20746f20612073696e676c652076616c696461746f722e202d20436f6d7075746174696f6e20636f6d706c65786974793a20604f284d41585f4e4f4d494e4154494f4e53202a206c6f674e29603b20604d41585f4e4f4d494e4154494f4e5360206973207468652020206d6178696d756d206e756d626572206f662076616c696461746f72732074686174206d6179206265206e6f6d696e6174656420627920612073696e676c65206e6f6d696e61746f722c206974206973202020626f756e646564206f6e6c792065636f6e6f6d6963616c6c792028616c6c206e6f6d696e61746f72732061726520726571756972656420746f20706c6163652061206d696e696d756d207374616b65292e76616c696461746f72735665633c28543a3a4163636f756e7449642c20753332293e2043616e63656c20656e6163746d656e74206f66206120646566657272656420736c6173682e2043616e2062652063616c6c6564206279206569746865722074686520726f6f74206f726967696e206f72207468652060543a3a536c61736843616e63656c4f726967696e602e2070617373696e67207468652065726120616e6420696e6469636573206f662074686520736c617368657320666f7220746861742065726120746f206b696c6c2e202d204f6e652073746f726167652077726974652e736c6173685f696e646963657320466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f662073657373696f6e7320696e646566696e6974656c792e202d204f6e652073746f7261676520777269746520466f72636520612063757272656e74207374616b657220746f206265636f6d6520636f6d706c6574656c7920756e7374616b65642c20696d6d6564696174656c792e737461736820536574207468652076616c696461746f72732077686f2063616e6e6f7420626520736c61736865642028696620616e79292e20466f72636520746865726520746f2062652061206e6577206572612061742074686520656e64206f6620746865206e6578742073657373696f6e2e20416674657220746869732c2069742077696c6c20626520726573657420746f206e6f726d616c20286e6f6e2d666f7263656429206265686176696f75722e202d204e6f20617267756d656e74732e20466f72636520746865726520746f206265206e6f206e6577206572617320696e646566696e6974656c792e2054686520696465616c206e756d626572206f662076616c696461746f72732e436f6d706163743c7533323e202852652d297365742074686520636f6e74726f6c6c6572206f6620612073746173682e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c65722e202d20496e646570656e64656e74206f662074686520617267756d656e74732e20496e7369676e69666963616e7420636f6d706c65786974792e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732e202d2057726974657320617265206c696d6974656420746f2074686520606f726967696e60206163636f756e74206b65792e636f6e74726f6c6c6572202852652d2973657420746865207061796d656e742074617267657420666f72206120636f6e74726f6c6c65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2062792074686520636f6e74726f6c6c65722c206e6f74207468652073746173682e706179656552657761726444657374696e6174696f6e204465636c617265206e6f2064657369726520746f206569746865722076616c6964617465206f72206e6f6d696e6174652e20416e642c2069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e202d20436f6e7461696e73206f6e6520726561642e204465636c617265207468652064657369726520746f206e6f6d696e6174652060746172676574736020666f7220746865206f726967696e20636f6e74726f6c6c65722e20456666656374732077696c6c2062652066656c742061742074686520626567696e6e696e67206f6620746865206e657874206572612e20546869732063616e206f6e6c792062652063616c6c6564207768656e202d20546865207472616e73616374696f6e277320636f6d706c65786974792069732070726f706f7274696f6e616c20746f207468652073697a65206f66206074617267657473602c2077686963682069732063617070656420617420436f6d7061637441737369676e6d656e74733a3a4c494d49542e202d20426f74682074686520726561647320616e642077726974657320666f6c6c6f7720612073696d696c6172207061747465726e2e746172676574735665633c3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263653e204465636c617265207468652064657369726520746f2076616c696461746520666f7220746865206f726967696e20636f6e74726f6c6c65722e707265667356616c696461746f7250726566732052656d6f766520616e7920756e6c6f636b6564206368756e6b732066726f6d207468652060756e6c6f636b696e67602071756575652066726f6d206f7572206d616e6167656d656e742e205468697320657373656e7469616c6c7920667265657320757020746861742062616c616e636520746f206265207573656420627920746865207374617368206163636f756e7420746f20646f2077686174657665722069742077616e74732e20456d697473206057697468647261776e602e2053656520616c736f205b6043616c6c3a3a756e626f6e64605d2e202d20436f756c6420626520646570656e64656e74206f6e2074686520606f726967696e6020617267756d656e7420616e6420686f77206d7563682060756e6c6f636b696e6760206368756e6b732065786973742e2020497420696d706c6965732060636f6e736f6c69646174655f756e6c6f636b656460207768696368206c6f6f7073206f76657220604c65646765722e756e6c6f636b696e67602c2077686963682069732020696e6469726563746c7920757365722d636f6e74726f6c6c65642e20536565205b60756e626f6e64605d20666f72206d6f72652064657461696c2e202d20436f6e7461696e732061206c696d69746564206e756d626572206f662072656164732c20796574207468652073697a65206f6620776869636820636f756c64206265206c61726765206261736564206f6e20606c6564676572602e205363686564756c65206120706f7274696f6e206f662074686520737461736820746f20626520756e6c6f636b656420726561647920666f72207472616e73666572206f75742061667465722074686520626f6e6420706572696f6420656e64732e2049662074686973206c656176657320616e20616d6f756e74206163746976656c7920626f6e646564206c657373207468616e20543a3a43757272656e63793a3a6d696e696d756d5f62616c616e636528292c207468656e20697420697320696e6372656173656420746f207468652066756c6c20616d6f756e742e204f6e63652074686520756e6c6f636b20706572696f6420697320646f6e652c20796f752063616e2063616c6c206077697468647261775f756e626f6e6465646020746f2061637475616c6c79206d6f7665207468652066756e6473206f7574206f66206d616e6167656d656e7420726561647920666f72207472616e736665722e204e6f206d6f7265207468616e2061206c696d69746564206e756d626572206f6620756e6c6f636b696e67206368756e6b73202873656520604d41585f554e4c4f434b494e475f4348554e4b5360292063616e20636f2d657869737473206174207468652073616d652074696d652e20496e207468617420636173652c205b6043616c6c3a3a77697468647261775f756e626f6e646564605d206e65656420746f2062652063616c6c656420666972737420746f2072656d6f766520736f6d65206f6620746865206368756e6b732028696620706f737369626c65292e20456d6974732060556e626f6e646564602e2053656520616c736f205b6043616c6c3a3a77697468647261775f756e626f6e646564605d2e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204c696d697465642062757420706f74656e7469616c6c79206578706c6f697461626c6520636f6d706c65786974792e202d20456163682063616c6c20287265717569726573207468652072656d61696e646572206f662074686520626f6e6465642062616c616e636520746f2062652061626f766520606d696e696d756d5f62616c616e6365602920202077696c6c2063617573652061206e657720656e74727920746f20626520696e73657274656420696e746f206120766563746f722028604c65646765722e756e6c6f636b696e676029206b65707420696e2073746f726167652e202020546865206f6e6c792077617920746f20636c65616e207468652061666f72656d656e74696f6e65642073746f72616765206974656d20697320616c736f20757365722d636f6e74726f6c6c6564207669612020206077697468647261775f756e626f6e646564602e203c2f7765696768743e2041646420736f6d6520657874726120616d6f756e742074686174206861766520617070656172656420696e207468652073746173682060667265655f62616c616e63656020696e746f207468652062616c616e636520757020666f72207374616b696e672e20557365207468697320696620746865726520617265206164646974696f6e616c2066756e647320696e20796f7572207374617368206163636f756e74207468617420796f75207769736820746f20626f6e642e20556e6c696b65205b60626f6e64605d206f72205b60756e626f6e64605d20746869732066756e6374696f6e20646f6573206e6f7420696d706f736520616e79206c696d69746174696f6e206f6e2074686520616d6f756e7420746861742063616e2062652061646465642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f206279207468652073746173682c206e6f742074686520636f6e74726f6c6c657220616e642069742063616e206265206f6e6c792063616c6c6564207768656e205b60457261456c656374696f6e537461747573605d2069732060436c6f736564602e20456d6974732060426f6e646564602e6d61785f6164646974696f6e616c2054616b6520746865206f726967696e206163636f756e74206173206120737461736820616e64206c6f636b207570206076616c756560206f66206974732062616c616e63652e2060636f6e74726f6c6c6572602077696c6c20626520746865206163636f756e74207468617420636f6e74726f6c732069742e206076616c756560206d757374206265206d6f7265207468616e2074686520606d696e696d756d5f62616c616e636560207370656369666965642062792060543a3a43757272656e6379602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20627920746865207374617368206163636f756e742e202d20496e646570656e64656e74206f662074686520617267756d656e74732e204d6f64657261746520636f6d706c65786974792e202d20546872656520657874726120444220656e74726965732e204e4f54453a2054776f206f66207468652073746f726167652077726974657320286053656c663a3a626f6e646564602c206053656c663a3a7061796565602920617265205f6e657665725f20636c65616e656420756e6c6573732074686520606f726967696e602066616c6c732062656c6f77205f6578697374656e7469616c206465706f7369745f20616e6420676574732072656d6f76656420617320647573742e000000000000b5f612000c000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a13009c6110000000000000000000ac61100007000000000000000100000000000000c1f612000e000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a1300e46110000000000000000000f461100001000000000000000100000000000000cff6120015000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a1300fc61100000000000000000000c62100001000000000000000100000000000000146210000d0000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a13002462100000000000000000003462100003000000000000000100000000000000c01410000600000001050000000000007ac312000c000000000000007ac312000c00000000000000000000000000000000000000301a13002067100000000000000000004c62100001000000000000000000000000000000c61410000600000001020000000000007ac312000c00000000000000546210002900000000000000000000000000000000000000301a13002067100000000000000000008062100001000000000000000000000000000000886210000500000001050000000000007ac312000c00000000000000f94810001100000000000000000000000000000000000000301a1300906210000000000000000000a062100001000000000000000100000000000000f38912000a00000001050000000000007ac312000c00000000000000474b10000e00000000000000000000000000000000000000301a1300086410000000000000000000a862100001000000000000000100000000000000cc1410000a00000001050000000000007ac312000c00000000000000b06210001900000000000000000000000000000000000000301a1300cc6210000000000000000000dc62100001000000000000000000000000000000e4f612000a0000000000000000000000b51a10000800000000000000000000000000000000000000000000000000000000000000301a1300c86710000000000000000000e462100004000000000000000000000000000000eef61200090000000000000000000000046310000d00000000000000000000000000000000000000000000000000000000000000301a13001463100000000000000000002463100004000000000000000000000000000000fef61200150000000105000000000000b51a1000080000000000000097f612000c00000000000000000000000000000000000000301a1300c867100000000000000000004463100001000000000000000000000000000000641b10000b0000000205050000000000b51a100008000000000000007ac312000c000000000000004c6310002400000000000000301a1300a063100000000000000000007063100006000000000000000100000000000000521b1000120000000205050000000000b51a100008000000000000007ac312000c000000000000004c6310002400000000000000301a1300a06310000000000000000000b06310000b000000000000000100000000000000401b1000120000000205050000000000b51a100008000000000000007ac312000c00000000000000474b10000e00000000000000301a13000864100000000000000000001864100005000000000000000100000000000000dc1a1000130000000105000000000000b51a10000800000000000000b66c12000c00000000000000000000000000000000000000301a1300f465100000000000000000004064100003000000000000000000000000000000cc1a1000100000000105000000000000b51a10000800000000000000586410001d00000000000000000000000000000000000000301a13007864100000000000000000008864100002000000000000000100000000000000ef1a10000e0000000105000000000000b51a10000800000000000000b66c12000c00000000000000000000000000000000000000301a1300046510000000000000000000986410000200000000000000010000000000000013f71200080000000000000000000000a86410000700000000000000000000000000000000000000000000000000000000000000301a1300b06410000000000000000000c0641000010000000000000001000000000000001bf712001300000000000000000000007df111000700000000000000000000000000000000000000000000000000000000000000301a1300c86410000000000000000000d864100003000000000000000100000000000000f0641000130000000000000000000000b66c12000c00000000000000000000000000000000000000000000000000000000000000301a130004651000000000000000000014651000020000000000000001000000000000006f1b1000100000000105000000000000b51a10000800000000000000246510002f00000000000000000000000000000000000000301a130054651000000000000000000064651000010000000000000001000000000000002ef712000a00000000000000000000006c6510001d00000000000000000000000000000000000000000000000000000000000000301a13008c65100000000000000000009c65100004000000000000000100000000000000d6141000130000000205050000000000b51a100008000000000000007ac312000c00000000000000bc6510001700000000000000301a1300d46510000000000000000000e465100002000000000000000000000000000000e9141000130000000205050000000000b51a100008000000000000007ac312000c00000000000000b66c12000c00000000000000301a1300f465100000000000000000000466100001000000000000000000000000000000fc1410000d00000001050000000000007ac312000c000000000000000c6610001700000000000000000000000000000000000000301a13002466100000000000000000003466100001000000000000000000000000000000091510000900000001050000000000003c66100023000000000000005f6610002200000000000000000000000000000000000000301a1300846610000000000000000000946610000200000000000000010000000000000038f71200160000000000000000000000b51a10000800000000000000000000000000000000000000000000000000000000000000301a1300c86710000000000000000000a46610000100000000000000000000000000000012151000120000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a1300bc6610000000000000000000ac6610000200000000000000000000000000000024151000120000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a1300bc6610000000000000000000cc66100002000000000000000000000000000000331b10000d0000000000000000000000dc6610002a00000000000000000000000000000000000000000000000000000000000000301a130020671000000000000000000008671000030000000000000000000000000000004ef712000b0000000000000000000000fc3810000d00000000000000000000000000000000000000000000000000000000000000301a1300206710000000000000000000306710000100000000000000000000000000000036151000110000000000000000000000386710001e00000000000000000000000000000000000000000000000000000000000000301a1300586710000000000000000000686710000200000000000000010000000000000059f71200150000000000000000000000a1f512000400000000000000000000000000000000000000000000000000000000000000301a130078671000000000000000000088671000020000000000000001000000000000005c9d10000e00000000000000000000006a9d10000800000000000000000000000000000000000000000000000000000000000000301a1300986710000000000000000000a8671000040000000000000001000000000000006ef712000a0000000000000000000000b51a10000800000000000000000000000000000000000000000000000000000000000000301a1300c86710000000000000000000d8671000010000000000000000000000420000000000000001000000560000004b77100023000000301a1300000000006e7710004e000000301a130000000000bc77100043000000ff7710002b0000002a7810004400000042000000000000000100000057000000217710002a00000042000000000000000100000058000000d176100050000000496e76756c6e657261626c657300000042000000000000000100000059000000fd751000560000005376100053000000a67610002b000000bd751000400000005374616b696e674c65646765723c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e0000006c7510005100000050617965650000004200000000000000010000005a0000003375100039000000e2741000510000004e6f6d696e6174696f6e733c543a3a4163636f756e7449643e0000004200000000000000010000005b0000008974100059000000f973100017000000301a13000000000010741000590000006974100020000000416374697665457261496e666f0000004200000000000000010000005b0000004a73100036000000301a130000000000807310002e000000ae7310004b000000fe7210004c0000004578706f737572653c543a3a4163636f756e7449642c2042616c616e63654f663c543e3ee07210001e000000301a1300000000008070100058000000301a130000000000d87010002a00000090721000500000004200000000000000010000005c0000000271100026000000301a13000000000028711000560000007e71100037000000b571100047000000fc7110003d000000301a1300000000003972100057000000301a130000000000d87010002a00000090721000500000004200000000000000010000005d0000003c70100044000000301a1300000000008070100058000000301a130000000000d87010002a000000b26f100042000000301a130000000000f46f100048000000457261526577617264506f696e74733c543a3a4163636f756e7449643e0000004200000000000000010000005e0000003e6f10002b000000696f100049000000bc6e10003b000000f76e100047000000466f7263696e67004200000000000000010000005a000000a76e10001500000042000000000000000100000057000000306e10003e000000301a1300000000006e6e10003900000043616e63656c6564536c6173685061796f7574004200000000000000010000005f000000b06d100045000000f56d10003b0000005665633c556e6170706c696564536c6173683c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e3e00420000000000000001000000590000007f6d1000310000005665633c28457261496e6465782c2053657373696f6e496e646578293e00000042000000000000000100000059000000d56c100049000000301a1300000000001e6d100032000000506d10002f0000002850657262696c6c2c2042616c616e63654f663c543e29004200000000000000010000005b000000686c100051000000b96c10001c0000004200000000000000010000005b000000106c100058000000736c617368696e673a3a536c617368696e675370616e73004200000000000000010000005b000000ed6b10002300000028543a3a4163636f756e7449642c20736c617368696e673a3a5370616e496e64657829736c617368696e673a3a5370616e5265636f72643c42616c616e63654f663c543e3e00000042000000000000000100000060000000706b10004f000000bf6b10002e000000316b10003f000000d86a100059000000926a1000460000004200000000000000010000005b000000396a100059000000926a100046000000456c656374696f6e526573756c743c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e00007b69100059000000d4691000580000002c6a10000d0000004200000000000000010000005b0000004f6910002c000000456c656374696f6e5374617475733c543a3a426c6f636b4e756d6265723e00004200000000000000010000005a000000e268100052000000346910001b0000004200000000000000010000005b0000007968100053000000cc68100016000000420000000000000001000000610000001e681000330000009c9d10001f000000301a13000000000051681000280000004200000000000000010000005b000000e06710003e0000002054686520657261207768657265207765206d696772617465642066726f6d204c617a79205061796f75747320746f2053696d706c65205061796f7574732054727565206966206e6574776f726b20686173206265656e20757067726164656420746f20746869732076657273696f6e2e20546869732069732073657420746f2076332e302e3020666f72206e6577206e6574776f726b732e2054727565206966207468652063757272656e74202a2a706c616e6e65642a2a2073657373696f6e2069732066696e616c2e204e6f74652074686174207468697320646f6573206e6f742074616b652065726120666f7263696e6720696e746f206163636f756e742e20466c616720746f20636f6e74726f6c2074686520657865637574696f6e206f6620746865206f6666636861696e20656c656374696f6e2e205768656e20604f70656e285f29602c2077652061636365707420736f6c7574696f6e7320746f206265207375626d69747465642e205468652073636f7265206f66207468652063757272656e74205b60517565756564456c6563746564605d2e20546865206e6578742076616c696461746f72207365742e2041742074686520656e64206f6620616e206572612c206966207468697320697320617661696c61626c652028706f74656e7469616c6c792066726f6d2074686520726573756c74206f6620616e206f6666636861696e20776f726b6572292c20697420697320696d6d6564696174656c7920757365642e204f74686572776973652c20746865206f6e2d636861696e20656c656374696f6e2069732065786563757465642e20536e617073686f74206f66206e6f6d696e61746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c79206861766520612076616c7565207768656e205b60457261456c656374696f6e537461747573605d203d3d2060456c656374696f6e5374617475733a3a4f70656e285f29602e20536e617073686f74206f662076616c696461746f72732061742074686520626567696e6e696e67206f66207468652063757272656e7420656c656374696f6e2077696e646f772e20546869732073686f756c64206f6e6c7920546865206561726c696573742065726120666f72207768696368207765206861766520612070656e64696e672c20756e6170706c69656420736c6173682e205265636f72647320696e666f726d6174696f6e2061626f757420746865206d6178696d756d20736c617368206f6620612073746173682077697468696e206120736c617368696e67207370616e2c2061732077656c6c20617320686f77206d7563682072657761726420686173206265656e2070616964206f75742e20536c617368696e67207370616e7320666f72207374617368206163636f756e74732e20416c6c20736c617368696e67206576656e7473206f6e206e6f6d696e61746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682076616c7565206f6620746865206572612e20416c6c20736c617368696e67206576656e7473206f6e2076616c696461746f72732c206d61707065642062792065726120746f20746865206869676865737420736c6173682070726f706f7274696f6e20616e6420736c6173682076616c7565206f6620746865206572612e2041206d617070696e672066726f6d207374696c6c2d626f6e646564206572617320746f207468652066697273742073657373696f6e20696e646578206f662074686174206572612e204d75737420636f6e7461696e7320696e666f726d6174696f6e20666f72206572617320666f72207468652072616e67653a20605b6163746976655f657261202d20626f756e64696e675f6475726174696f6e3b206163746976655f6572615d6020416c6c20756e6170706c69656420736c61736865732074686174206172652071756575656420666f72206c617465722e2054686520616d6f756e74206f662063757272656e637920676976656e20746f207265706f7274657273206f66206120736c617368206576656e74207768696368207761732063616e63656c65642062792065787472616f7264696e6172792063697263756d7374616e6365732028652e672e20676f7665726e616e6365292e205468652070657263656e74616765206f662074686520736c617368207468617420697320646973747269627574656420746f207265706f72746572732e205468652072657374206f662074686520736c61736865642076616c75652069732068616e646c6564206279207468652060536c617368602e204d6f6465206f662065726120666f7263696e672e2054686520746f74616c20616d6f756e74207374616b656420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620746f74616c206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207374616b652069732072657475726e65642e205265776172647320666f7220746865206c6173742060484953544f52595f44455054486020657261732e20496620726577617264206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e2030207265776172642069732072657475726e65642e2054686520746f74616c2076616c696461746f7220657261207061796f757420666f7220746865206c6173742060484953544f52595f44455054486020657261732e2045726173207468617420686176656e27742066696e697368656420796574206f7220686173206265656e2072656d6f76656420646f65736e27742068617665207265776172642e2053696d696c617220746f2060457261735374616b657273602c207468697320686f6c64732074686520707265666572656e636573206f662076616c696461746f72732e2054686973206973206b65796564206669727374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e2049732069742072656d6f7665642061667465722060484953544f52595f44455054486020657261732e20436c6970706564204578706f73757265206f662076616c696461746f72206174206572612e20546869732069732073696d696c617220746f205b60457261735374616b657273605d20627574206e756d626572206f66206e6f6d696e61746f7273206578706f736564206973207265647563656420746f207468652060543a3a4d61784e6f6d696e61746f72526577617264656450657256616c696461746f72602062696767657374207374616b6572732e20284e6f74653a20746865206669656c642060746f74616c6020616e6420606f776e60206f6620746865206578706f737572652072656d61696e7320756e6368616e676564292e2054686973206973207573656420746f206c696d69742074686520692f6f20636f737420666f7220746865206e6f6d696e61746f72207061796f75742e2054686973206973206b657965642066697374206279207468652065726120696e64657820746f20616c6c6f772062756c6b2064656c6574696f6e20616e64207468656e20746865207374617368206163636f756e742e204966207374616b657273206861736e2774206265656e20736574206f7220686173206265656e2072656d6f766564207468656e20656d707479206578706f737572652069732072657475726e65642e204578706f73757265206f662076616c696461746f72206174206572612e205468652073657373696f6e20696e646578206174207768696368207468652065726120737461727420666f7220746865206c6173742060484953544f52595f44455054486020657261732e20546865206163746976652065726120696e666f726d6174696f6e2c20697420686f6c647320696e64657820616e642073746172742e20546865206163746976652065726120697320746865206572612063757272656e746c792072657761726465642e2056616c696461746f7220736574206f66207468697320657261206d75737420626520657175616c20746f206053657373696f6e496e746572666163653a3a76616c696461746f7273602e205468652063757272656e742065726120696e6465782e205468697320697320746865206c617465737420706c616e6e6564206572612c20646570656e64696e67206f6e20686f77207468652053657373696f6e2070616c6c657420717565756573207468652076616c696461746f72207365742c206974206d6967687420626520616374697665206f72206e6f742e20546865206d61702066726f6d206e6f6d696e61746f72207374617368206b657920746f2074686520736574206f66207374617368206b657973206f6620616c6c2076616c696461746f727320746f206e6f6d696e6174652e20546865206d61702066726f6d202877616e6e616265292076616c696461746f72207374617368206b657920746f2074686520707265666572656e636573206f6620746861742076616c696461746f722e2057686572652074686520726577617264207061796d656e742073686f756c64206265206d6164652e204b657965642062792073746173682e204d61702066726f6d20616c6c2028756e6c6f636b6564292022636f6e74726f6c6c657222206163636f756e747320746f2074686520696e666f20726567617264696e6720746865207374616b696e672e204d61702066726f6d20616c6c206c6f636b65642022737461736822206163636f756e747320746f2074686520636f6e74726f6c6c6572206163636f756e742e20416e792076616c696461746f72732074686174206d6179206e6576657220626520736c6173686564206f7220666f726369626c79206b69636b65642e20497427732061205665632073696e63652074686579277265206561737920746f20696e697469616c697a6520616e642074686520706572666f726d616e636520686974206973206d696e696d616c2028776520657870656374206e6f206d6f7265207468616e20666f757220696e76756c6e657261626c65732920616e64207265737472696374656420746f20746573746e6574732e204d696e696d756d206e756d626572206f66207374616b696e67207061727469636970616e7473206265666f726520656d657267656e637920636f6e646974696f6e732061726520696d706f7365642e2054686520696465616c206e756d626572206f66207374616b696e67207061727469636970616e74732e204e756d626572206f66206572617320746f206b65657020696e20686973746f72792e20496e666f726d6174696f6e206973206b65707420666f72206572617320696e20605b63757272656e745f657261202d20686973746f72795f64657074683b2063757272656e745f6572615d602e204d757374206265206d6f7265207468616e20746865206e756d626572206f6620657261732064656c617965642062792073657373696f6e206f74686572776973652e20492e652e2061637469766520657261206d75737420616c7761797320626520696e20686973746f72792e20492e652e20606163746976655f657261203e2063757272656e745f657261202d20686973746f72795f646570746860206d7573742062652067756172616e746565642e000000000000e07810000e0000000000000097f612000c00000000000000301a1300f0781000000000000000000000791000010000000000000000000000087910000f00000000000000b51a10000800000000000000301a130018791000000000000000000028791000010000000000000053657373696f6e73506572457261000042000000000000000100000062000000697910001c000000426f6e64696e674475726174696f6e00420000000000000001000000630000003079100039000000204e756d626572206f6620657261732074686174207374616b65642066756e6473206d7573742072656d61696e20626f6e64656420666f722e204e756d626572206f662073657373696f6e7320706572206572612e65786163746c79206f6e65206f6620606d617962655f76616c696461746f726020616e6420606d617962655f6e6f6d696e6174696f6e2e69735f736f6d656020697320747275652e2069735f76616c696461746f722069732066616c73653b206d617962655f6e6f6d696e6174696f6e20697320736f6d653b207165640000147a1000330000005c090000220000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f7374616b696e672f7372632f6c69622e72730000000000361310000d00000000000000587d10000100000000000000000000002e1310000800000000000000607d1000010000000000000000000000211310000d00000000000000687d1000010000000000000000000000141310000d00000000000000707d1000010000000000000000000000081310000c00000000000000787d1000010000000000000000000000fa1210000e00000000000000807d1000010000000000000000000000e91210001100000000000000887d1000010000000000000000000000d81210001100000000000000907d1000010000000000000000000000cc1210000c00000000000000987d1000010000000000000000000000bf1210000d00000000000000a07d1000010000000000000000000000b31210000c00000000000000a87d1000010000000000000000000000a11210001200000000000000b07d1000010000000000000000000000871210001a00000000000000b87d1000010000000000000000000000751210001200000000000000c07d1000010000000000000000000000671210000e00000000000000c87d1000010000000000000000000000501210001700000000000000d07d10000100000000000000000000003a1210001600000000000000d87d1000010000000000000000000000271210001300000000000000e07d10000100000000000000000000000f1210001800000000000000e87d1000010000000000000000000000fc1110001300000000000000f07d1000020000000000000000000000e81110001400000000000000007e1000020000000000000000000000d21110001600000000000000107e1000010000000000000000000000bb1110001700000000000000187e1000010000000000000000000000a21110001900000000000000207e10000200000000000000000000008d1110001500000000000000307e10000100000000000000000000007c1110001100000000000000387e10000100000000000000000000006a1110001200000000000000407e10000100000000000000000000005c1110000e00000000000000487e100001000000000000002d8410001a0000001884100015000000ff83100019000000e18310001e000000c883100019000000b783100011000000958310002200000062831000330000003d831000250000001483100029000000e182100033000000ca82100017000000ab8210001f0000008a8210002100000047821000430000000e82100039000000ce811000400000009a811000340000006e8110002c0000000881100058000000608110000e0000008780100057000000de8010002a0000004280100045000000ef7f100053000000827f100058000000da7f100015000000397f100049000000e87e100051000000a27e100046000000507e100052000000205468652063616c6c206973206e6f7420616c6c6f7765642061742074686520676976656e2074696d652064756520746f207265737472696374696f6e73206f6620656c656374696f6e20706572696f642e2054686520636c61696d65642073636f726520646f6573206e6f74206d61746368207769746820746865206f6e6520636f6d70757465642066726f6d2074686520646174612e20546865207375626d697474656420726573756c742068617320756e6b6e6f776e206564676573207468617420617265206e6f7420616d6f6e67207468652070726573656e7465642077696e6e6572732e20412073656c6620766f7465206d757374206f6e6c79206265206f726967696e617465642066726f6d20612076616c696461746f7220746f204f4e4c59207468656d73656c7665732e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e2065646765207768696368206973207375626d6974746564206265666f726520746865206c617374206e6f6e2d7a65726f20736c617368206f6620746865207461726765742e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f72732068617320616e206564676520746f20776869636820746865792068617665206e6f7420766f746564206f6e20636861696e2e204f6e65206f6620746865207375626d6974746564206e6f6d696e61746f7273206973206e6f7420616e20616374697665206e6f6d696e61746f72206f6e20636861696e2e204572726f72207768696c65206275696c64696e67207468652061737369676e6d656e7420747970652066726f6d2074686520636f6d706163742e20546869732063616e2068617070656e20696620616e20696e64657820697320696e76616c69642c206f72206966207468652077656967687473205f6f766572666c6f775f2e204f6e65206f6620746865207375626d69747465642077696e6e657273206973206e6f7420616e206163746976652063616e646964617465206f6e20636861696e2028696e646578206973206f7574206f662072616e676520696e20736e617073686f74292e20496e636f7272656374206e756d626572206f662077696e6e65727320776572652070726573656e7465642e2054686520736e617073686f742064617461206f66207468652063757272656e742077696e646f77206973206d697373696e672e20546865207375626d697474656420726573756c74206973206e6f7420617320676f6f6420617320746865206f6e652073746f726564206f6e20636861696e2e20546865207375626d697474656420726573756c74206973207265636569766564206f7574206f6620746865206f70656e2077696e646f772e205265776172647320666f72207468697320657261206861766520616c7265616479206265656e20636c61696d656420666f7220746869732076616c696461746f722e204974656d7320617265206e6f7420736f7274656420616e6420756e697175652e20496e76616c6964206e756d626572206f66206e6f6d696e6174696f6e732e20496e76616c69642065726120746f207265776172642e20417474656d7074696e6720746f2074617267657420612073746173682074686174207374696c6c206861732066756e64732e2043616e206e6f74207265626f6e6420776974686f757420756e6c6f636b696e67206368756e6b732e2043616e206e6f74207363686564756c65206d6f726520756e6c6f636b206368756e6b732e2043616e206e6f7420626f6e6420776974682076616c7565206c657373207468616e206d696e696d756d2062616c616e63652e20536c617368207265636f726420696e646578206f7574206f6620626f756e64732e204475706c696361746520696e6465782e20546172676574732063616e6e6f7420626520656d7074792e20436f6e74726f6c6c657220697320616c7265616479207061697265642e20537461736820697320616c726561647920626f6e6465642e204e6f742061207374617368206163636f756e742e204e6f74206120636f6e74726f6c6c6572206163636f756e742e00508410001a0000004552524f523a20436f7272757074656420737461746520617420446561644163636f756e744b656570416c6976654578697374656e7469616c4465706f736974496e73756666696369656e7442616c616e63654c69717569646974795265737472696374696f6e7356657374696e6742616c616e63657365745f62616c616e63657472616e736665725f6b6565705f616c697665546f74616c49737375616e636500000000000000d0851000070000000000000084111200020000000000000000000000d8851000010000000000000000000000e0851000080000000000000084111200020000000000000000000000e885100002000000000000000000000074ca110008000000000000007cca1100030000000000000000000000f8851000010000000000000000000000008610000a000000000000000c86100003000000000000000000000024861000010000000000000000000000c81912000700000000000000841112000200000000000000000000002c8610000100000000000000456e646f77656400318710002f000000447573744c6f7374c286100050000000128710001f0000009c8610002600000042616c616e6365536574000020af120009000000f615120007000000f6151200070000006b86100031000000348610003700000020536f6d6520616d6f756e7420776173206465706f73697465642028652e672e20666f72207472616e73616374696f6e2066656573292e20412062616c616e6365207761732073657420627920726f6f74202877686f2c20667265652c207265736572766564292e205472616e7366657220737563636565646564202866726f6d2c20746f2c2076616c7565292e20416e206163636f756e74207761732072656d6f7665642077686f73652062616c616e636520776173206e6f6e2d7a65726f206275742062656c6f77204578697374656e7469616c4465706f7369742c20726573756c74696e6720696e20616e206f75747269676874206c6f73732e20416e206163636f756e74207761732063726561746564207769746820736f6d6520667265652062616c616e63652e496e76616c69644f726967696e496e73756666696369656e7443616e64696461746546756e647352756e6e65725375626d69744d656d6265725375626d69744475706c69636174656443616e6469646174655265706f727453656c664d7573744265566f746572556e61626c65546f506179426f6e644c6f7742616c616e63654d6178696d756d566f7465734578636565646564546f6f4d616e79566f7465734e6f566f746573556e61626c65546f566f746572656d6f76655f766f7465727265706f72745f646566756e63745f766f7465727375626d69745f63616e64696461637972656e6f756e63655f63616e646964616379000000000000003489100007000000000000003c89100001000000000000000000000044891000040000000000000000000000648910000900000000000000301a130000000000000000000000000070891000020000000000000000000000808910000c0000000000000074ad12000100000000000000000000008c8910000200000000000000000000009c8910000f0000000000000074ad1200010000000000000000000000ac891000010000000000000000000000b48910000d00000000000000ac121200030000000000000000000000c489100002000000000000004e65775465726d00ad8c100019000000538b100056000000a98b100056000000ff8b100058000000578c100056000000456d7074795465726d000000d58a10004d000000228b1000310000004d656d6265724b69636b6564778a100051000000c88a10000d0000004d656d62657252656e6f756e636564004f8a100028000000566f7465725265706f72746564000000d4891000580000002c8a100023000000204120766f7465722028666972737420656c656d656e742920776173207265706f72746564202862797420746865207365636f6e6420656c656d656e742920776974682074686520746865207265706f7274206265696e67207375636365737366756c206f72206e6f742028746869726420656c656d656e74292e2041206d656d626572206861732072656e6f756e6365642074686569722063616e6469646163792e2041206d656d62657220686173206265656e2072656d6f7665642e20546869732073686f756c6420616c7761797320626520666f6c6c6f7765642062792065697468657220604e65775465726d60206f742060456d7074795465726d602e204e6f20286f72206e6f7420656e6f756768292063616e64696461746573206578697374656420666f72207468697320726f756e642e205468697320697320646966666572656e742066726f6d20604e65775465726d285b5d29602e2053656520746865206465736372697074696f6e206f6620604e65775465726d602e2041206e6577207465726d2077697468206e6577206d656d626572732e205468697320696e64696361746573207468617420656e6f7567682063616e64696461746573206578697374656420746f2072756e2074686520656c656374696f6e2c206e6f74207468617420656e6f756768206861766520686173206265656e20656c65637465642e2054686520696e6e65722076616c7565206d757374206265206578616d696e656420666f72207468697320707572706f73652e204120604e65775465726d285b5d296020696e64696361746573207468617420736f6d652063616e6469646174657320676f7420746865697220626f6e6420736c617368656420616e64206e6f6e65207765726520656c65637465642c207768696c73742060456d7074795465726d60206d65616e732074686174206e6f2063616e64696461746573206578697374656420746f20626567696e20776974682e5665633c284163636f756e7449642c2042616c616e6365293e52756e6e657273557000a48a12003e00000003030000190000003c8e10003c00000071000000130000003c8e10003c00000088000000180000003c8e10003c000000b4000000190000003c8e10003c000000ff000000420000003c8e10003c00000013010000420000004475706c696361746520766f74657220286f72206f7468657220636f727275707420696e707574292e0000003c8e10003c00000057010000150000003c8e10003c0000005c0100001e000000420000000000000001000000640000003c8e10003c0000005f0000001a0000003c8e10003c0000005f0000002c0000003c8e10003c000000cc010000240000003c8e10003c000000cd010000240000003c8e10003c000000f3010000240000003c8e10003c00000020020000240000003c8e10003c00000043020000350000003c8e10003c000000580200002b0000003c8e10003c00000059020000280000003c8e10003c000000630200002b0000003c8e10003c00000064020000280000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f70687261676d656e2f7372632f7265647563652e72730000000013db10000800000000000000288f1000020000000000000000000000588f10001b0000000000000000000000c68410000b0000000000000030901000030000000000000000000000789010001000000000000000000000001fdb10000e00000000000000f890100003000000000000000000000040911000060000000000000000000000d18410001300000000000000288f1000020000000000000000000000709110000b0000000000000000000000b2d311000400000000000000f32012002300000000000000aa4d120005000000000000000a941000130000003896100036000000301a1300000000006e96100042000000b096100048000000f8961000450000003d9710002d000000301a1300000000006a97100046000000301a130000000000f5bd12000b000000b09710004c000000fc971000330000002f9810005a000000301a1300000000008998100013000000301a1300000000009c98100054000000f09810004b0000003b991000350000007099100058000000c8991000520000001a9a10003e000000589a1000220000007a9a10004e000000c89a100037000000ff9a10004500000044be12000c00000000000000f02012000300000000000000f320120023000000000000002496100008000000000000000a94100013000000000000002c9610000c000000000000000a941000130000001d94100025000000301a13000000000042941000480000008a94100042000000cc941000460000001295100040000000301a130000000000529510002d000000301a130000000000f5bd12000b0000007f951000200000009f95100031000000d095100016000000e695100018000000fe9510002600000044be12000c00000000000000049410000600000000000000f32012002300000000000000b2d311000400000000000000f32012002300000000000000aa4d120005000000000000000a941000130000003193100054000000859310000b000000f5bd12000b0000009093100050000000e09310002400000044be12000c000000c8911000540000001c92100010000000301a1300000000002c9210002f000000301a1300000000005b92100031000000f5bd12000b0000008c9210003a000000c692100019000000df92100047000000269310000b0000002053616d6520617320746865205b607472616e73666572605d2063616c6c2c206275742077697468206120636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e20393925206f66207468652074696d6520796f752077616e74205b607472616e73666572605d20696e73746561642e205b607472616e73666572605d3a207374727563742e4d6f64756c652e68746d6c236d6574686f642e7472616e73666572202d2043686561706572207468616e207472616e736665722062656361757365206163636f756e742063616e6e6f74206265206b696c6c65642e202d2042617365205765696768743a2035372e333620c2b573202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374202873656e64657220697320696e206f7665726c617920616c72656164792920233c2f7765696768743e2045786163746c7920617320607472616e73666572602c2065786365707420746865206f726967696e206d75737420626520726f6f7420616e642074686520736f75726365206163636f756e74206d6179206265207370656369666965642e202d2053616d65206173207472616e736665722c20627574206164646974696f6e616c207265616420616e6420777269746520626563617573652074686520736f75726365206163636f756e742069732020206e6f7420617373756d656420746f20626520696e20746865206f7665726c61792e736f75726365436f6d706163743c543a3a42616c616e63653e20536574207468652062616c616e636573206f66206120676976656e206163636f756e742e20546869732077696c6c20616c74657220604672656542616c616e63656020616e642060526573657276656442616c616e63656020696e2073746f726167652e2069742077696c6c20616c736f2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d202860546f74616c49737375616e636560292e20496620746865206e65772066726565206f722072657365727665642062616c616e63652069732062656c6f7720746865206578697374656e7469616c206465706f7369742c2069742077696c6c20726573657420746865206163636f756e74206e6f6e63652028606672616d655f73797374656d3a3a4163636f756e744e6f6e636560292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c2069732060726f6f74602e202d20496e646570656e64656e74206f662074686520617267756d656e74732e202d20436f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e64207772697465732e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2033322e3620c2b573202d204442205765696768743a203120526561642c203120577269746520746f206077686f606e65775f667265656e65775f7265736572766564205472616e7366657220736f6d65206c697175696420667265652062616c616e636520746f20616e6f74686572206163636f756e742e20607472616e73666572602077696c6c207365742074686520604672656542616c616e636560206f66207468652073656e64657220616e642072656365697665722e2049742077696c6c2064656372656173652074686520746f74616c2069737375616e6365206f66207468652073797374656d2062792074686520605472616e73666572466565602e204966207468652073656e6465722773206163636f756e742069732062656c6f7720746865206578697374656e7469616c206465706f736974206173206120726573756c74206f6620746865207472616e736665722c20746865206163636f756e742077696c6c206265207265617065642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605369676e65646020627920746865207472616e736163746f722e202d20446570656e64656e74206f6e20617267756d656e747320627574206e6f7420637269746963616c2c20676976656e2070726f70657220696d706c656d656e746174696f6e7320666f72202020696e70757420636f6e6669672074797065732e205365652072656c617465642066756e6374696f6e732062656c6f772e202d20497420636f6e7461696e732061206c696d69746564206e756d626572206f6620726561647320616e642077726974657320696e7465726e616c6c7920616e64206e6f20636f6d706c657820636f6d7075746174696f6e2e2052656c617465642066756e6374696f6e733a2020202d2060656e737572655f63616e5f77697468647261776020697320616c776179732063616c6c656420696e7465726e616c6c792062757420686173206120626f756e64656420636f6d706c65786974792e2020202d205472616e7366657272696e672062616c616e63657320746f206163636f756e7473207468617420646964206e6f74206578697374206265666f72652077696c6c20636175736520202020202060543a3a4f6e4e65774163636f756e743a3a6f6e5f6e65775f6163636f756e746020746f2062652063616c6c65642e2020202d2052656d6f76696e6720656e6f7567682066756e64732066726f6d20616e206163636f756e742077696c6c20747269676765722060543a3a4475737452656d6f76616c3a3a6f6e5f756e62616c616e636564602e2020202d20607472616e736665725f6b6565705f616c6976656020776f726b73207468652073616d652077617920617320607472616e73666572602c206275742068617320616e206164646974696f6e616c2020202020636865636b207468617420746865207472616e736665722077696c6c206e6f74206b696c6c20746865206f726967696e206163636f756e742e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a20383020c2b5732c20776f7273742063617365207363656e6172696f20286163636f756e7420637265617465642c206163636f756e742072656d6f76656429202d204442205765696768743a2031205265616420616e64203120577269746520746f2064657374696e6174696f6e206163636f756e74202d204f726967696e206163636f756e7420697320616c726561647920696e206d656d6f72792c20736f206e6f204442206f7065726174696f6e7320666f72207468656d2e00000000e48410000d0000000000000000000000a49c10000a00000000000000000000000000000000000000000000000000000000000000301a1300b09c10000000000000000000c09c10000100000000000000010000000000000057e211000700000001020000000000007ac312000c00000000000000c89c10001700000000000000000000000000000000000000301a1300e09c10000000000000000000f09c100006000000000000000100000000000000389111000500000001020000000000007ac312000c00000000000000209d10001c00000000000000000000000000000000000000301a13003c9d100000000000000000004c9d1000020000000000000001000000000000005c9d10000e00000000000000000000006a9d10000800000000000000000000000000000000000000000000000000000000000000301a1300749d10000000000000000000849d1000030000000000000001000000543a3a42616c616e636500004200000000000000010000005f0000004b9f1000260000004163636f756e74446174613c543a3a42616c616e63653e00420000000000000001000000650000005a9e10001b000000301a130000000000759e100056000000cb9e100030000000301a130000000000fb9e1000500000005665633c42616c616e63654c6f636b3c543a3a42616c616e63653e3e42000000000000000100000059000000e39d10002e000000119e10004900000053746f7261676556657273696f6e52656c656173657300004200000000000000010000005a0000009c9d10001f000000301a130000000000bb9d1000280000002053746f726167652076657273696f6e206f66207468652070616c6c65742e20546869732069732073657420746f2076322e302e3020666f72206e6577206e6574776f726b732e20416e79206c6971756964697479206c6f636b73206f6e20736f6d65206163636f756e742062616c616e6365732e204e4f54453a2053686f756c64206f6e6c79206265206163636573736564207768656e2073657474696e672c206368616e67696e6720616e642066726565696e672061206c6f636b2e205468652062616c616e6365206f6620616e206163636f756e742e204e4f54453a2054484953204d4159204e4556455220424520494e204558495354454e434520414e4420594554204841564520412060746f74616c28292e69735f7a65726f2829602e2049662074686520746f74616c2069732065766572207a65726f2c207468656e2074686520656e747279202a4d5553542a2062652072656d6f7665642e204e4f54453a2054686973206973206f6e6c79207573656420696e20746865206361736520746861742074686973206d6f64756c65206973207573656420746f2073746f72652062616c616e6365732e2054686520746f74616c20756e6974732069737375656420696e207468652073797374656d2e000000000000007e8410001200000000000000a49c10000a00000000000000301a1300d4b110000000000000000000ac9f10000100000000000000b49f10003500000020546865206d696e696d756d20616d6f756e7420726571756972656420746f206b65657020616e206163636f756e74206f70656e2e0000000000000014b012000400000000000000f4a0100002000000000000000000000024a110000f0000000000000000000000138810000c00000000000000301a13000000000000000000000000009ca110000700000000000000000000001f8810001400000000000000b4471100010000000000000000000000d4a110000d0000000000000000000000338810001000000000000000301a13000000000000000000000000003ca210000d0000000000000000000000438810001200000000000000301a1300000000000000000000000000a4a2100009000000000000000000000087e411000d00000000000000eca2100001000000000000000000000004a310000d000000000000000000000052ac10000500000000000000ddce12001100000000000000aa4d120005000000000000008075120015000000b8aa100041000000301a130000000000f9aa1000140000000dab1000120000001fab10002b000000301a1300000000004aab100057000000a1ab100057000000f8ab100028000000301a130000000000f5bd12000b000000c7a410000b000000acaa10000c00000020ac10003200000044be12000c00000064aa100048000000301a130000000000f5bd12000b000000c7a410000b000000acaa10000c000000aba810000d00000044be12000c000000b8a81000570000000fa910005700000066a9100017000000301a1300000000007da91000220000009fa9100053000000f2a910002d000000301a130000000000f5bd12000b000000c7a410000b0000001faa100045000000aba810000d00000044be12000c00000069a710001e000000301a13000000000087a7100019000000a0a710003b000000dba710004b00000026a81000550000007ba810000d000000301a130000000000f5bd12000b000000c7a410000b00000088a8100023000000aba810000d00000044be12000c000000ffa410005400000053a510001000000063a5100050000000b3a510003d000000f0a510005600000046a610002100000067a6100053000000baa610005600000010a710005900000000000000f02012000300000000000000f3201200230000006ca3100057000000c3a3100020000000301a130000000000e3a310005600000039a410003d000000301a13000000000076a4100051000000301a130000000000f5bd12000b000000c7a410000b000000d2a4100016000000e8a410001700000044be12000c0000002052656d6f7665206120706172746963756c6172206d656d6265722066726f6d20746865207365742e20546869732069732065666665637469766520696d6d6564696174656c7920616e642074686520626f6e64206f6620746865206f7574676f696e67206d656d62657220697320736c61736865642e20496620612072756e6e65722d757020697320617661696c61626c652c207468656e2074686520626573742072756e6e65722d75702077696c6c2062652072656d6f76656420616e64207265706c6163657320746865206f7574676f696e67206d656d6265722e204f74686572776973652c2061206e65772070687261676d656e20726f756e6420697320737461727465642e204e6f74652074686174207468697320646f6573206e6f7420616666656374207468652064657369676e6174656420626c6f636b206e756d626572206f6620746865206e65787420656c656374696f6e2e20232323232053746174652052656164733a204f28646f5f70687261676d656e29205772697465733a204f28646f5f70687261676d656e292052656e6f756e6365206f6e65277320696e74656e74696f6e20746f20626520612063616e64696461746520666f7220746865206e65787420656c656374696f6e20726f756e642e203320706f74656e7469616c206f7574636f6d65732065786973743a202d20606f726967696e6020697320612063616e64696461746520616e64206e6f7420656c656374656420696e20616e79207365742e20496e207468697320636173652c2074686520626f6e64206973202020756e72657365727665642c2072657475726e656420616e64206f726967696e2069732072656d6f76656420617320612063616e6469646174652e202d20606f726967696e6020697320612063757272656e742072756e6e65722075702e20496e207468697320636173652c2074686520626f6e6420697320756e72657365727665642c2072657475726e656420616e642020206f726967696e2069732072656d6f76656420617320612072756e6e65722e202d20606f726967696e6020697320612063757272656e74206d656d6265722e20496e207468697320636173652c2074686520626f6e6420697320756e726573657276656420616e64206f726967696e20697320202072656d6f7665642061732061206d656d6265722c20636f6e73657175656e746c79206e6f74206265696e6720612063616e64696461746520666f7220746865206e65787420726f756e6420616e796d6f72652e20202053696d696c617220746f205b6072656d6f76655f766f746572605d2c206966207265706c6163656d656e742072756e6e657273206578697374732c20746865792061726520696d6d6564696174656c7920757365642e205375626d6974206f6e6573656c6620666f722063616e6469646163792e20412063616e6469646174652077696c6c206569746865723a2020202d204c6f73652061742074686520656e64206f6620746865207465726d20616e6420666f7266656974207468656972206465706f7369742e2020202d2057696e20616e64206265636f6d652061206d656d6265722e204d656d626572732077696c6c206576656e7475616c6c7920676574207468656972207374617368206261636b2e2020202d204265636f6d6520612072756e6e65722d75702e2052756e6e6572732d75707320617265207265736572766564206d656d6265727320696e2063617365206f6e65206765747320666f72636566756c6c79202020202072656d6f7665642e2052656164733a204f284c6f674e2920476976656e204e2063616e646964617465732e205772697465733a204f283129205265706f727420607461726765746020666f72206265696e6720616e20646566756e637420766f7465722e20496e2063617365206f6620612076616c6964207265706f72742c20746865207265706f727465722069732072657761726465642062792074686520626f6e6420616d6f756e74206f662060746172676574602e204f74686572776973652c20746865207265706f7274657220697473656c662069732072656d6f76656420616e6420746865697220626f6e6420697320736c61736865642e204120646566756e637420766f74657220697320646566696e656420746f2062653a2020202d206120766f7465722077686f73652063757272656e74207375626d697474656420766f7465732061726520616c6c20696e76616c69642e20692e652e20616c6c206f66207468656d20617265206e6f20202020206c6f6e67657220612063616e646964617465206e6f7220616e20616374697665206d656d6265722e2052656164733a204f284e4c6f674d2920676976656e204d2063757272656e742063616e6469646174657320616e64204e20766f74657320666f722060746172676574602e2052656d6f766520606f726967696e60206173206120766f7465722e20546869732072656d6f76657320746865206c6f636b20616e642072657475726e732074686520626f6e642e2052656164733a204f28312920566f746520666f72206120736574206f662063616e6469646174657320666f7220746865207570636f6d696e6720726f756e64206f6620656c656374696f6e2e205468652060766f746573602073686f756c643a2020202d206e6f7420626520656d7074792e2020202d206265206c657373207468616e20746865206e756d626572206f662063616e646964617465732e2055706f6e20766f74696e672c206076616c75656020756e697473206f66206077686f6027732062616c616e6365206973206c6f636b656420616e64206120626f6e6420616d6f756e742069732072657365727665642e2049742069732074686520726573706f6e736962696c697479206f66207468652063616c6c657220746f206e6f7420706c61636520616c6c206f662074686569722062616c616e636520696e746f20746865206c6f636b20616e64206b65657020736f6d6520666f722066757274686572207472616e73616374696f6e732e205772697465733a204f28562920676976656e2060566020766f7465732e205620697320626f756e6465642062792031362e766f746573000000000009b5120007000000000000000000000010ae10002100000000000000000000000000000000000000000000000000000000000000301a13003cae1000000000000000000034ae100001000000000000000100000000000000c68c100009000000000000000000000010ae10002100000000000000000000000000000000000000000000000000000000000000301a13003cae100000000000000000004cae10000100000000000000010000000000000030f212000e000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a130054ae1000000000000000000064ae10000100000000000000010000000000000010b512000600000001050000000000007ac312000c00000000000000a48f11002100000000000000000000000000000000000000301a13006cae100000000000000000007cae100001000000000000000100000000000000611c12000a0000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a130084ae1000000000000000000094ae10000200000000000000010000005665633c28543a3a4163636f756e7449642c2042616c616e63654f663c543e293e0000001ab010003c00000042000000000000000100000059000000c8af1000520000004200000000000000010000005700000078af100050000000420000000000000001000000660000004aaf10002e00000042000000000000000100000059000000a4ae100056000000faae100050000000205468652070726573656e742063616e646964617465206c6973742e20536f72746564206261736564206f6e206163636f756e742d69642e20412063757272656e74206d656d626572206f722072756e6e65722d75702063616e206e6576657220656e746572207468697320766563746f7220616e6420697320616c7761797320696d706c696369746c7920617373756d656420746f20626520612063616e6469646174652e20566f74657320616e64206c6f636b6564207374616b65206f66206120706172746963756c617220766f7465722e2054686520746f74616c206e756d626572206f6620766f746520726f756e6473207468617420686176652068617070656e65642c206578636c7564696e6720746865207570636f6d696e67206f6e652e205468652063757272656e742072756e6e6572735f75702e20536f72746564206261736564206f6e206c6f7720746f2068696768206d657269742028776f72736520746f20626573742072756e6e6572292e205468652063757272656e7420656c6563746564206d656d626572736869702e20536f72746564206261736564206f6e206163636f756e742069642e000000000000a8b110000d00000000000000b66c12000c00000000000000301a1300b8b110000000000000000000301a1300000000000000000000000000c8b110000a00000000000000b66c12000c00000000000000301a1300d4b110000000000000000000301a1300000000000000000000000000e4b110000e0000000000000060dc12000300000000000000301a1300f4b110000000000000000000301a130000000000000000000000000004b21000100000000000000060dc12000300000000000000301a130014b210000000000000000000301a130000000000000000000000000024b210000c0000000000000006cf12000e00000000000000301a130030b210000000000000000000301a1300000000000000000000000000cc5e1200080000000000000040b210000e00000000000000301a130050b210000000000000000000301a1300000000000000000043616e646964616379426f6e6400000042000000000000000100000067000000566f74696e67426f6e64000042000000000000000100000068000000446573697265644d656d626572730000420000000000000001000000690000004465736972656452756e6e65727355704200000000000000010000006a0000005465726d4475726174696f6e4200000000000000010000006b0000004c6f636b4964656e74696669657200004200000000000000010000006c00000000000000b88410000e0000000000000040b31000010000000000000000000000a3841000150000000000000048b3100001000000000000000000000027ab1200080000000000000050b3100001000000000000000000000090841000130000000000000058b310000100000000000000000000007e841000120000000000000060b3100001000000000000000000000075841000090000000000000068b31000010000000000000000000000aa371100170000000000000070b310000100000000000000000000006a8410000b0000000000000078b310000100000000000000a2b410002700000070b410003200000053b410001d00000035b410001e000000fab310003b000000d6b3100024000000a3b310003300000080b31000230000002042656e6566696369617279206163636f756e74206d757374207072652d657869737420412076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e74205472616e736665722f7061796d656e7420776f756c64206b696c6c206163636f756e742056616c756520746f6f206c6f7720746f20637265617465206163636f756e742064756520746f206578697374656e7469616c206465706f7369742042616c616e636520746f6f206c6f7720746f2073656e642076616c756520476f7420616e206f766572666c6f7720616674657220616464696e67204163636f756e74206c6971756964697479207265737472696374696f6e732070726576656e74207769746864726177616c2056657374696e672062616c616e636520746f6f206869676820746f2073656e642076616c756500000000000000078810000c0000000000000054b610000100000000000000000000000088100007000000000000005cb61000010000000000000000000000f48710000c0000000000000064b61000010000000000000000000000e087100014000000000000006cb61000010000000000000000000000d68710000a0000000000000074b61000010000000000000000000000c78710000f000000000000007cb61000010000000000000000000000bc8710000b0000000000000084b61000010000000000000000000000b28710000a000000000000008cb610000100000000000000000000009f871000130000000000000094b61000010000000000000000000000938710000c000000000000009cb61000010000000000000000000000878710000c00000000000000a4b610000100000000000000000000006d8710001a00000000000000acb61000010000000000000000000000608710000d00000000000000b4b61000010000000000000000000000f2af12000900000000000000bcb61000010000000000000076b810003100000050b81000260000002eb810002200000007b8100027000000d5b7100032000000b6b710001f000000a5b710001100000091b710001400000070b71000210000004db71000230000002ab710002300000004b7100026000000d2b6100032000000c4b610000e000000204e6f742061206d656d6265722e204f726967696e206973206e6f7420612063616e6469646174652c206d656d626572206f7220612072756e6e65722075702e2043616e64696461746520646f6573206e6f74206861766520656e6f7567682066756e64732e2052756e6e65722063616e6e6f742072652d7375626d69742063616e6469646163792e204d656d6265722063616e6e6f742072652d7375626d69742063616e6469646163792e204475706c6963617465642063616e646964617465207375626d697373696f6e2e2043616e6e6f74207265706f72742073656c662e204d757374206265206120766f7465722e20566f7465722063616e206e6f742070617920766f74696e6720626f6e642e2043616e6e6f7420766f74652077697468207374616b65206c657373207468616e206d696e696d756d2062616c616e63652e2043616e6e6f7420766f7465206d6f7265207468616e206d6178696d756d20616c6c6f7765642e2043616e6e6f7420766f7465206d6f7265207468616e2063616e646964617465732e204d75737420766f746520666f72206174206c65617374206f6e652063616e6469646174652e2043616e6e6f7420766f7465207768656e206e6f2063616e64696461746573206f72206d656d626572732065786973742e556e657870656374656454696d65706f696e7457726f6e6754696d65706f696e744e6f54696d65706f696e7453656e646572496e5369676e61746f726965735369676e61746f726965734f75744f664f72646572546f6f4d616e795369676e61746f72696573546f6f4665775369676e61746f726965734e6f417070726f76616c734e6565646564416c7265616479417070726f766564626174636861735f73756261735f6d756c7469617070726f76655f61735f6d756c746963616e63656c5f61735f6d756c74690000000078ba1000100000000000000088ba100002000000000000000000000098ba1000020000000000000000000000a8ba10000e00000000000000301a1300000000000000000000000000b8ba1000010000000000000000000000c0ba10000b00000000000000ccba1000030000000000000000000000e4ba1000020000000000000000000000f4ba1000100000000000000004bb100004000000000000000000000024bb100002000000000000000000000034bb1000100000000000000044bb10000500000000000000000000006cbb10000200000000000000000000007cbb1000110000000000000004bb100004000000000000000000000090bb100002000000000000004261746368496e74657272757074656460dc120003000000e00e13000d0000004dbe100056000000a3be1000130000004261746368436f6d706c6574656400001abe1000330000004e65774d756c74697369670020af12000900000020af120009000000e9bc1000080000008dbd100052000000dfbd10003b0000004d756c7469736967417070726f76616c20af120009000000d3bc10001600000020af120009000000e9bc100008000000f1bc10005600000047bd1000460000004d756c7469736967457865637574656420af120009000000d3bc10001600000020af120009000000e9bc100008000000940d12000e00000033bc10004b0000007ebc1000550000004d756c746973696743616e63656c6c6564000000a0bb10004c000000ecbb1000470000002041206d756c7469736967206f7065726174696f6e20686173206265656e2063616e63656c6c65642e20466972737420706172616d20697320746865206163636f756e7420746861742069732063616e63656c6c696e672c20746869726420697320746865206d756c7469736967206163636f756e742c20666f757274682069732068617368206f66207468652063616c6c2e2041206d756c7469736967206f7065726174696f6e20686173206265656e2065786563757465642e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c20746869726420697320746865206d756c7469736967206163636f756e742c20666f757274682069732068617368206f66207468652063616c6c20746f2062652065786563757465642e54696d65706f696e743c426c6f636b4e756d6265723e43616c6c486173682041206d756c7469736967206f7065726174696f6e20686173206265656e20617070726f76656420627920736f6d656f6e652e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c20746869726420697320746865206d756c7469736967206163636f756e742c20666f757274682069732068617368206f66207468652063616c6c2e2041206e6577206d756c7469736967206f7065726174696f6e2068617320626567756e2e20466972737420706172616d20697320746865206163636f756e74207468617420697320617070726f76696e672c207365636f6e6420697320746865206d756c7469736967206163636f756e742c2074686972642069732068617368206f66207468652063616c6c2e204261746368206f66206469737061746368657320636f6d706c657465642066756c6c792077697468206e6f206572726f722e204261746368206f66206469737061746368657320646964206e6f7420636f6d706c6574652066756c6c792e20496e646578206f66206669727374206661696c696e6720646973706174636820676976656e2c2061732077656c6c20617320746865206572726f722e0000000000003eb91000050000000000000094bf1000010000000000000000000000acbf100013000000000000000000000043b91000060000000000000044c0100002000000000000000000000074c0100008000000000000000000000049b910000800000000000000b4c0100004000000000000000000000014c1100032000000000000000000000051b910001000000000000000a4c2100004000000000000000000000004c3100027000000000000000000000061b910000f000000000000003cc410000400000000000000000000009cc410001b00000000000000000000000bd41000050000000000000010d410001700000071d1100020000000301a13000000000091d110003b000000301a130000000000ccd110001f000000301a130000000000ebd110003c000000301a130000000000f5bd12000b00000027d21000240000004bd210002e00000079d210003100000044be12000c000000301a130000000000aad210005600000000d310004d0000004dd3100056000000a3d3100054000000f7d31000140000000000000098d912000500000000000000f7ce12000300000000000000fbea1200040000000000000061d112001700000000d1100038000000301a13000000000098c9120034000000301a130000000000f5bd12000b00000038d110001900000051d110002000000044be12000c00000000000000eece12000900000000000000f7ce120003000000000000005ec910001100000000000000ddce1200110000000000000092cd10000f00000000000000a1cd10002100000000000000fbea1200040000000000000061d1120017000000a2c9100056000000f8c910003f000000301a130000000000c2cd10002d000000301a13000000000037ca1000540000008bca100058000000e3ca10000e000000301a13000000000098c9120034000000301a130000000000fcc510005600000052c6100051000000a3c610001c000000f1ca10005700000048cb1000550000009dcb100036000000efcd100023000000301a13000000000012ce1000480000005ace100047000000301a130000000000a1ce100057000000f8ce1000560000004ecf100038000000301a130000000000f5bd12000b00000086cf1000150000006ac71000340000009ec7100050000000eec71000520000009bcf10004900000040c810003000000021cc10003600000057cc10003f0000002bc112000d000000e4cf10001c00000096cc10004c000000e2cc10002400000006cd10003d00000000d010002000000043cd10000f00000020d010002300000043d010002400000067d0100025000000f2c810000d0000008cd0100030000000bcd0100031000000edd010001300000044be12000c00000000000000eece12000900000000000000f7ce120003000000000000005ec910001100000000000000ddce1200110000000000000092cd10000f00000000000000a1cd1000210000000000000091c9100009000000000000009ac9100008000000a2c9100056000000f8c910003f000000301a13000000000037ca1000540000008bca100058000000e3ca10000e000000301a13000000000098c9120034000000301a130000000000fcc510005600000052c6100051000000a3c610001c000000f1ca10005700000048cb1000550000009dcb10003600000036c7100034000000301a130000000000d3cb10004e000000301a130000000000f5bd12000b000000af8811000a0000006ac71000340000009ec7100050000000eec710005200000040c810003000000021cc10003600000057cc10003f0000002bc112000d00000096cc10004c000000e2cc10002400000006cd10003d000000afc810002300000043cd10000f00000052cd10001f00000071cd100021000000f2c810000d000000ffc810002f0000002ec910003000000044be12000c00000000000000eece12000900000000000000f7ce120003000000000000005ec910001100000000000000ddce120011000000000000006fc91000090000000000000078c91000190000000000000091c9100009000000000000009ac910000800000074c5100056000000cac5100032000000301a13000000000098c9120034000000301a130000000000fcc510005600000052c6100051000000a3c610001c000000bfc610005800000017c710001f00000036c7100034000000301a130000000000f5bd12000b000000af8811000a0000006ac71000340000009ec7100050000000eec710005200000040c81000300000002bc112000d00000070c810002200000092c810001d000000afc8100023000000d2c8100020000000f2c810000d000000ffc810002f0000002ec910003000000044be12000c0000002043616e63656c2061207072652d6578697374696e672c206f6e2d676f696e67206d756c7469736967207472616e73616374696f6e2e20416e79206465706f7369742072657365727665642070726576696f75736c7920666f722074686973206f7065726174696f6e2077696c6c20626520756e7265736572766564206f6e20737563636573732e202d20607468726573686f6c64603a2054686520746f74616c206e756d626572206f6620617070726f76616c7320666f722074686973206469737061746368206265666f72652069742069732065786563757465642e202d20606f746865725f7369676e61746f72696573603a20546865206163636f756e747320286f74686572207468616e207468652073656e646572292077686f2063616e20617070726f766520746869732064697370617463682e204d6179206e6f7420626520656d7074792e202d206074696d65706f696e74603a205468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e20666f7220746869732064697370617463682e202d206063616c6c5f68617368603a205468652068617368206f66207468652063616c6c20746f2062652065786563757465642e202d20557020746f206f6e652062616c616e63652d72657365727665206f7220756e72657365727665206f7065726174696f6e2e202d204f6e6520706173737468726f756768206f7065726174696f6e2c206f6e6520696e736572742c20626f746820604f285329602077686572652060536020697320746865206e756d626572206f662020207369676e61746f726965732e206053602069732063617070656420627920604d61785369676e61746f72696573602c207769746820776569676874206265696e672070726f706f7274696f6e616c2e202d204f6e6520656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285329602e202d20492f4f3a2031207265616420604f285329602c206f6e652072656d6f76652e202d2053746f726167653a2072656d6f766573206f6e65206974656d2e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d202d2042617365205765696768743a2034362e3731202b20302e3039202a2053202d204442205765696768743a20202020202d20526561643a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d20202020202d2057726974653a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d6f746865725f7369676e61746f7269657374696d65706f696e7454696d65706f696e743c543a3a426c6f636b4e756d6265723e63616c6c5f686173685b75383b2033325d20526567697374657220617070726f76616c20666f72206120646973706174636820746f206265206d6164652066726f6d20612064657465726d696e697374696320636f6d706f73697465206163636f756e7420696620617070726f766564206279206120746f74616c206f6620607468726573686f6c64202d203160206f6620606f746865725f7369676e61746f72696573602e205061796d656e743a20604d756c74697369674465706f73697442617365602077696c6c20626520726573657276656420696620746869732069732074686520666972737420617070726f76616c2c20706c757320607468726573686f6c64602074696d657320604d756c74697369674465706f736974466163746f72602e2049742069732072657475726e6564206f6e636520746869732064697370617463682068617070656e73206f722069732063616e63656c6c65642e202d20606d617962655f74696d65706f696e74603a20496620746869732069732074686520666972737420617070726f76616c2c207468656e2074686973206d75737420626520604e6f6e65602e204966206974206973206e6f742074686520666972737420617070726f76616c2c207468656e206974206d7573742062652060536f6d65602c2077697468207468652074696d65706f696e742028626c6f636b206e756d62657220616e64207472616e73616374696f6e20696e64657829206f662074686520666972737420617070726f76616c207472616e73616374696f6e2e204e4f54453a2049662074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2077616e7420746f20757365206061735f6d756c74696020696e73746561642e202d20557020746f206f6e652062696e6172792073656172636820616e6420696e736572742028604f286c6f6753202b20532960292e202d20492f4f3a2031207265616420604f285329602c20757020746f2031206d757461746520604f285329602e20557020746f206f6e652072656d6f76652e202d2053746f726167653a20696e7365727473206f6e65206974656d2c2076616c75652073697a6520626f756e64656420627920604d61785369676e61746f72696573602c207769746820612020206465706f7369742074616b656e20666f7220697473206c69666574696d65206f66202020604d756c74697369674465706f73697442617365202b207468726573686f6c64202a204d756c74697369674465706f736974466163746f72602e202d2042617365205765696768743a20202020202d204372656174653a2035362e33202b20302e313037202a205320202020202d20417070726f76653a2033392e3235202b20302e313231202a20536d617962655f74696d65706f696e744f7074696f6e3c54696d65706f696e743c543a3a426c6f636b4e756d6265723e3e2049662074686572652061726520656e6f7567682c207468656e206469737061746368207468652063616c6c2e202d206063616c6c603a205468652063616c6c20746f2062652065786563757465642e204e4f54453a20556e6c6573732074686973206973207468652066696e616c20617070726f76616c2c20796f752077696c6c2067656e6572616c6c792077616e7420746f207573652060617070726f76655f61735f6d756c74696020696e73746561642c2073696e6365206974206f6e6c7920726571756972657320612068617368206f66207468652063616c6c2e20526573756c74206973206571756976616c656e7420746f20746865206469737061746368656420726573756c7420696620607468726573686f6c64602069732065786163746c79206031602e204f7468657277697365206f6e20737563636573732c20726573756c7420697320604f6b6020616e642074686520726573756c742066726f6d2074686520696e746572696f722063616c6c2c206966206974207761732065786563757465642c206d617920626520666f756e6420696e20746865206465706f736974656420604d756c7469736967457865637574656460206576656e742e202d20604f2853202b205a202b2043616c6c29602e202d204f6e652063616c6c20656e636f6465202620686173682c20626f7468206f6620636f6d706c657869747920604f285a296020776865726520605a602069732074782d6c656e2e202d2054686520776569676874206f6620746865206063616c6c602e202d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d20202020202d204372656174653a2035392e32202b20302e303936202a205320c2b57320202020202d20417070726f76653a2034322e3237202b202e313136202a205320c2b57320202020202d20436f6d706c6574653a2035302e3931202b202e323332202a205320c2b57320202020202d2052656164733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d20202020202d205772697465733a204d756c74697369672053746f726167652c205b43616c6c6572204163636f756e745d202d20506c75732043616c6c205765696768742053656e6420612063616c6c207468726f75676820616e20696e64657865642070736575646f6e796d206f66207468652073656e6465722e202d2042617365207765696768743a20322e38363320c2b573202d20506c75732074686520776569676874206f6620746865206063616c6c602053656e642061206261746368206f662064697370617463682063616c6c732e20546869732077696c6c206578656375746520756e74696c20746865206669727374206f6e65206661696c7320616e64207468656e2073746f702e204d61792062652063616c6c65642066726f6d20616e79206f726967696e2e202d206063616c6c73603a205468652063616c6c7320746f20626520646973706174636865642066726f6d207468652073616d65206f726967696e2e202d2042617365207765696768743a2031352e3634202b202e393837202a206320c2b573202d20506c7573207468652073756d206f66207468652077656967687473206f6620746865206063616c6c73602e202d20506c7573206f6e65206164646974696f6e616c206576656e742e202872657065617420726561642f77726974652920546869732077696c6c2072657475726e20604f6b6020696e20616c6c2063697263756d7374616e6365732e20546f2064657465726d696e65207468652073756363657373206f66207468652062617463682c20616e206576656e74206973206465706f73697465642e20496620612063616c6c206661696c656420616e64207468652062617463682077617320696e7465727275707465642c207468656e2074686520604261746368496e74657272757074656460206576656e74206973206465706f73697465642c20616c6f6e67207769746820746865206e756d626572206f66207375636365737366756c2063616c6c73206d61646520616e6420746865206572726f72206f6620746865206661696c65642063616c6c2e20496620616c6c2077657265207375636365737366756c2c207468656e2074686520604261746368436f6d706c6574656460206576656e74206973206465706f73697465642e63616c6c735665633c3c542061732054726169743e3a3a43616c6c3e000000000080d410000900000002050200000000007ac312000c000000000000009ac91000080000000000000089d410003400000000000000301a1300c0d410000000000000000000d0d410000100000000000000000000004d756c7469736967734d756c74697369673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000004200000000000000010000005b000000d8d41000250000002054686520736574206f66206f70656e206d756c7469736967206f7065726174696f6e732e6d6f646c70792f7574696c697375626100000000000000c0ab12000d0000000000000060d610000100000000000000000000002fb910000f0000000000000068d610000100000000000000000000001eb91000110000000000000070d610000100000000000000000000000db91000110000000000000078d61000010000000000000000000000fbb81000120000000000000080d61000010000000000000000000000e6b81000150000000000000088d61000010000000000000000000000d3b81000130000000000000090d61000010000000000000000000000d0dc1000080000000000000098d61000010000000000000000000000fbda10000800000000000000a0d61000010000000000000000000000c8b810000b00000000000000a8d61000010000000000000000000000bab810000e00000000000000b0d61000010000000000000000000000a7b810001300000000000000b8d61000010000000000000049d910001d0000001dd910002c000000f5d8100028000000cad810002b0000009ed810002c0000005ad810004400000016d8100044000000ded710003800000092d710004c0000004ad7100048000000fed610004c000000c0d610003e00000020412074696d65706f696e742077617320676976656e2c20796574206e6f206d756c7469736967206f7065726174696f6e20697320756e6465727761792e204120646966666572656e742074696d65706f696e742077617320676976656e20746f20746865206d756c7469736967206f7065726174696f6e207468617420697320756e6465727761792e204e6f2074696d65706f696e742077617320676976656e2c2079657420746865206d756c7469736967206f7065726174696f6e20697320616c726561647920756e6465727761792e204f6e6c7920746865206163636f756e742074686174206f726967696e616c6c79206372656174656420746865206d756c74697369672069732061626c6520746f2063616e63656c2069742e204d756c7469736967206f7065726174696f6e206e6f7420666f756e64207768656e20617474656d7074696e6720746f2063616e63656c2e205468652073656e6465722077617320636f6e7461696e656420696e20746865206f74686572207369676e61746f726965733b2069742073686f756c646e27742062652e20546865207369676e61746f7269657320776572652070726f7669646564206f7574206f66206f726465723b20746865792073686f756c64206265206f7264657265642e2054686572652061726520746f6f206d616e79207369676e61746f7269657320696e20746865206c6973742e2054686572652061726520746f6f20666577207369676e61746f7269657320696e20746865206c6973742e2043616c6c20646f65736e2774206e65656420616e7920286d6f72652920617070726f76616c732e2043616c6c20697320616c726561647920617070726f7665642062792074686973207369676e61746f72792e205468726573686f6c6420697320746f6f206c6f7720287a65726f292e0000abd910000d00000090d910001b0000005c09120002000000a2a3120036000000e20200000100000042616420696e70757420646174612070726f766964656420746f20657865637574655f626c6f636bc0d9100010000000696e697469616c697a655f626c6f636bd8d910000f0000006170706c795f65787472696e73696300f0d9100013000000696e686572656e745f65787472696e73696373000cda10000f000000636865636b5f696e686572656e74730024da10001400000076616c69646174655f7472616e73616374696f6e40da10000f0000006f6666636861696e5f776f726b65720058da10000d0000006163636f756e745f6e6f6e6365000000fbea12000400000078da10000b0000006765745f73746f72616765008cda10000f00000072656e745f70726f6a656374696f6e00a4da10000a00000071756572795f696e666f0000b8da10001500000067656e65726174655f73657373696f6e5f6b657973000000d8da1000130000006465636f64655f73657373696f6e5f6b6579734e6f745472616e73666572496e5573654e6f744f776e65724e6f7441737369676e6564636c61696d7472616e7366657266726565666f7263655f7472616e736665724163636f756e74730000000000000090db10000d00000000000000a0db1000020000000000000000000000b0db1000010000000000000000000000b8db10000a00000000000000c4db1000010000000000000000000000ccdb10000100000000000000496e64657841737369676e656400000020af12000900000004dc10000c00000010dc10001e000000496e6465784672656564000004dc10000c000000d4db1000300000002041206163636f756e7420696e64657820686173206265656e2066726565642075702028756e61737369676e6564292e4163636f756e74496e6465782041206163636f756e7420696e646578207761732061737369676e65642e7061726974792f7374616b696e672d656c656374696f6e2f546f6f4d616e7952656769737472617273546f6f4d616e794669656c6473496e76616c6964546172676574496e76616c6964496e646578496e76616c69644a756467656d656e744a756467656d656e74476976656e537469636b794a756467656d656e744e6f4964656e746974794665654368616e676564456d707479496e6465784e6f744e616d65644e6f74466f756e64546f6f4d616e795375624163636f756e74736164645f7265676973747261727365745f6964656e746974797365745f73756273636c6561725f6964656e74697479726571756573745f6a756467656d656e7463616e63656c5f726571756573747365745f6665657365745f6163636f756e745f69647365745f6669656c647370726f766964655f6a756467656d656e746b696c6c5f6964656e7469747953757065724f6600000000b0de10000b0000000000000074ad1200010000000000000000000000bcde1000010000000000000000000000c4de10000f0000000000000084111200020000000000000000000000d4de1000010000000000000000000000dcde10000e0000000000000084111200020000000000000000000000ecde1000010000000000000000000000f4de1000120000000000000008df100002000000000000000000000018df100001000000000000000000000020df1000140000000000000008df100002000000000000000000000034df10000100000000000000000000008ddc10000e0000000000000008df10000200000000000000000000003cdf100001000000000000000000000044df10000e0000000000000054df10000100000000000000000000005cdf100001000000000000004964656e746974795365740060e010003c0000004964656e74697479436c6561726564002ce01000340000004964656e746974794b696c6c65640000fadf1000320000004a756467656d656e74526571756573746564000020af1200090000007bdf10000e000000d2df1000280000004a756467656d656e74556e726571756573746564afdf10002300000089df100026000000526567697374726172416464656400007bdf10000e00000064df100017000000204120726567697374726172207761732061646465642e526567697374726172496e6465782041206a756467656d656e742077617320676976656e2062792061207265676973747261722e2041206a756467656d656e74207265717565737420776173207265747261637465642e2041206a756467656d656e74207761732061736b65642066726f6d2061207265676973747261722e2041206e616d65207761732072656d6f76656420616e642074686520676976656e2062616c616e636520736c61736865642e2041206e616d652077617320636c65617265642c20616e642074686520676976656e2062616c616e63652072657475726e65642e2041206e616d652077617320736574206f72207265736574202877686963682077696c6c2072656d6f766520616c6c206a756467656d656e7473292e416c69766520636f6e7472616374206f7220746f6d6273746f6e6520616c72656164792065786973747300004200000000000000010000006d0000004200000000000000010000006400000074696d657374616d702073657420696e20626c6f636b20646f65736e2774206d6174636820736c6f7420696e207365616c4c6174656e657373636f6e74726163742073756273797374656d20726573756c74696e6720696e20706f73697469766520696d62616c616e63652100000000ade812000a000000000000000000000010f111000300000000000000000000000000000000000000000000000000000000000000301a13001ce510000000000000000000c4e4100001000000000000000100000000000000b7e812000b0000000000000000000000cce410002700000000000000000000000000000000000000000000000000000000000000301a1300f4e41000000000000000000004e5100001000000000000000100000000000000c2e812000b000000000000000000000010f111000300000000000000000000000000000000000000000000000000000000000000301a13001ce5100000000000000000000ce5100002000000000000000100000000000000cde812000b000000000000000000000010f111000300000000000000000000000000000000000000000000000000000000000000301a13001ce5100000000000000000002ce5100001000000000000000100000000000000d8e812000a000000000000000000000034e510001600000000000000000000000000000000000000000000000000000000000000301a13009ce5100000000000000000004ce510000a000000000000000100000000000000e2e812000e000000000000000000000034e510001600000000000000000000000000000000000000000000000000000000000000301a13009ce510000000000000000000ace5100001000000000000000100000000000000f0e812000c000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a130054e610000000000000000000b4e5100009000000000000000100000000000000fce8120011000000010500000000000060dc12000300000000000000fce510001d00000000000000000000000000000000000000301a13001ce610000000000000000000301a1300000000000000000001000000000000004df212000b00000000000000000000002ce610000800000000000000000000000000000000000000000000000000000000000000301a130034e61000000000000000000044e610000200000000000000000000000000000019e1100008000000000000000000000006cf12000e00000000000000000000000000000000000000000000000000000000000000301a130054e61000000000000000000064e61000050000000000000001000000b2eb1000150000005665633c28417574686f7269747949642c2042616265417574686f72697479576569676874293e004200000000000000010000005900000097eb10001b00000035eb10003e00000073eb1000240000004200000000000000010000006e00000020eb1000150000007363686e6f72726b656c3a3a52616e646f6d6e65737300005ae910002e000000301a13000000000088e910000b000000301a13000000000093e9100041000000d4e910003e00000012ea10004500000057ea1000450000009cea100041000000ddea1000430000004200000000000000010000006f00000043e9100017000000fee710001f000000301a1300000000001de810003d0000005ae81000400000009ae8100025000000301a130000000000bfe810003b000000fae81000420000003ce91000070000005665633c7363686e6f72726b656c3a3a5261775652464f75747075743e000000420000000000000001000000590000004d617962655672664200000000000000010000005b00000077e7100040000000b7e7100047000000420000000000000001000000570000008ce6100036000000301a130000000000c2e610004500000007e71000440000004be710002c00000020486f77206c617465207468652063757272656e7420626c6f636b20697320636f6d706172656420746f2069747320706172656e742e205468697320656e74727920697320706f70756c617465642061732070617274206f6620626c6f636b20657865637574696f6e20616e6420697320636c65616e6564207570206f6e20626c6f636b2066696e616c697a6174696f6e2e205175657279696e6720746869732073746f7261676520656e747279206f757473696465206f6620626c6f636b20657865637574696f6e20636f6e746578742073686f756c6420616c77617973207969656c64207a65726f2e2054656d706f726172792076616c75652028636c656172656420617420626c6f636b2066696e616c697a6174696f6e292077686963682069732060536f6d6560206966207065722d626c6f636b20696e697469616c697a6174696f6e2068617320616c7265616479206265656e2063616c6c656420666f722063757272656e7420626c6f636b2e2052616e646f6d6e65737320756e64657220636f6e737472756374696f6e2e205765206d616b6520612074726164656f6666206265747765656e2073746f7261676520616363657373657320616e64206c697374206c656e6774682e2057652073746f72652074686520756e6465722d636f6e737472756374696f6e2072616e646f6d6e65737320696e207365676d656e7473206f6620757020746f2060554e4445525f434f4e535452554354494f4e5f5345474d454e545f4c454e475448602e204f6e63652061207365676d656e7420726561636865732074686973206c656e6774682c20776520626567696e20746865206e657874206f6e652e20576520726573657420616c6c207365676d656e747320616e642072657475726e20746f206030602061742074686520626567696e6e696e67206f662065766572792065706f63682e204e6578742065706f63682072616e646f6d6e6573732e205468652065706f63682072616e646f6d6e65737320666f7220746865202a63757272656e742a2065706f63682e20232053656375726974792054686973204d555354204e4f54206265207573656420666f722067616d626c696e672c2061732069742063616e20626520696e666c75656e6365642062792061206d616c6963696f75732076616c696461746f7220696e207468652073686f7274207465726d2e204974204d4159206265207573656420696e206d616e792063727970746f677261706869632070726f746f636f6c732c20686f77657665722c20736f206c6f6e67206173206f6e652072656d656d626572732074686174207468697320286c696b652065766572797468696e6720656c7365206f6e2d636861696e29206974206973207075626c69632e20466f72206578616d706c652c2069742063616e20626520757365642077686572652061206e756d626572206973206e656564656420746861742063616e6e6f742068617665206265656e2063686f73656e20627920616e206164766572736172792c20666f7220707572706f7365732073756368206173207075626c69632d636f696e207a65726f2d6b6e6f776c656467652070726f6f66732e2043757272656e7420736c6f74206e756d6265722e2054686520736c6f74206174207768696368207468652066697273742065706f63682061637475616c6c7920737461727465642e2054686973206973203020756e74696c2074686520666972737420626c6f636b206f662074686520636861696e2e2043757272656e742065706f636820617574686f7269746965732e2043757272656e742065706f636820696e6465782e000000000038ec10000d0000000000000010f111000300000000000000301a130048ec1000000000000000000058ec100002000000000000000000000068ec10001100000000000000383311000900000000000000301a13007cec100000000000000000008cec1000050000000000000045706f63684475726174696f6e00000042000000000000000100000070000000e4ed10004300000027ee10003f0000004578706563746564426c6f636b54696d6500000042000000000000000100000071000000b4ec100041000000f5ec10004400000039ed1000410000007aed100042000000bced10002800000020546865206578706563746564206176657261676520626c6f636b2074696d6520617420776869636820424142452073686f756c64206265206372656174696e6720626c6f636b732e2053696e636520424142452069732070726f626162696c6973746963206974206973206e6f74207472697669616c20746f20666967757265206f7574207768617420746865206578706563746564206176657261676520626c6f636b2074696d652073686f756c64206265206261736564206f6e2074686520736c6f74206475726174696f6e20616e642074686520736563757269747920706172616d657465722060636020287768657265206031202d20636020726570726573656e7473207468652070726f626162696c697479206f66206120736c6f74206265696e6720656d707479292e20546865206e756d626572206f66202a2a736c6f74732a2a207468617420616e2065706f63682074616b65732e20576520636f75706c652073657373696f6e7320746f2065706f6368732c20692e652e2077652073746172742061206e65772073657373696f6e206f6e636520746865206e65772065706f636820626567696e732e65706f636820696e64696365732077696c6c206e6576657220726561636820325e3634206265666f726520746865206465617468206f662074686520756e6976657273653b2071656400d0ee100030000000790100001b000000d0ee10003000000081010000200000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f626162652f7372632f6c69622e7273000000000edb10000500000000000000b0ef1000010000000000000000000000c8ef100010000000000000000000000013db1000080000000000000048f0100002000000000000000000000078f010001000000000000000000000001bdb10000400000000000000b0ef1000010000000000000000000000f8f010001000000000000000000000001fdb10000e0000000000000048f0100002000000000000000000000078f1100010000000000000000000000098d912000500000000000000e6f510000f000000f5f5100027000000301a1300000000001cf6100038000000301a13000000000098c9120034000000301a13000000000054f610003d000000301a1300000000003df3100025000000301a130000000000f5bd12000b000000184a11000a00000062f3100027000000e2f41000190000002bc112000d00000044be12000c000000000000008421120003000000000000007ac312000c0000000000000098d912000500000000000000e6f510000f000000fbf410005800000053f510002f000000301a13000000000098c9120034000000301a13000000000082f510004a000000e5f2100058000000301a1300000000003df3100025000000301a130000000000f5bd12000b000000184a11000a00000062f3100027000000ccf510001a0000002bc112000d00000044be12000c000000a8f3100026000000301a130000000000cef3100058000000301a13000000000026f4100056000000301a1300000000007cf4100044000000301a130000000000c0f4100022000000301a130000000000f5bd12000b000000184a11000a00000062f3100027000000e2f41000190000002bc112000d00000044be12000c000000f8f11000560000004ef210003b000000301a13000000000089f2100032000000301a130000000000bbf210002a000000e5f2100058000000301a1300000000003df3100025000000301a130000000000f5bd12000b000000184a11000a00000062f310002700000089f310001f0000002bc112000d00000044be12000c00000020466f72636520616e20696e64657820746f20616e206163636f756e742e205468697320646f65736e277420726571756972652061206465706f7369742e2049662074686520696e64657820697320616c72656164792068656c642c207468656e20616e79206465706f736974206973207265696d62757273656420746f206974732063757272656e74206f776e65722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f2e202d2060696e646578603a2074686520696e64657820746f206265202872652d2961737369676e65642e202d20606e6577603a20746865206e6577206f776e6572206f662074686520696e6465782e20546869732066756e6374696f6e2069732061206e6f2d6f7020696620697420697320657175616c20746f2073656e6465722e20456d6974732060496e64657841737369676e656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202d20557020746f206f6e652072657365727665206f7065726174696f6e2e204672656520757020616e20696e646578206f776e6564206279207468652073656e6465722e205061796d656e743a20416e792070726576696f7573206465706f73697420706c6163656420666f722074686520696e64657820697320756e726573657276656420696e207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206f776e2074686520696e6465782e202d2060696e646578603a2074686520696e64657820746f2062652066726565642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e20456d6974732060496e646578467265656460206966207375636365737366756c2e202d204f6e652072657365727665206f7065726174696f6e2e2041737369676e20616e20696e64657820616c7265616479206f776e6564206279207468652073656e64657220746f20616e6f74686572206163636f756e742e205468652062616c616e6365207265736572766174696f6e206973206566666563746976656c79207472616e7366657272656420746f20746865206e6577206163636f756e742e202d2060696e646578603a2074686520696e64657820746f2062652072652d61737369676e65642e2054686973206d757374206265206f776e6564206279207468652073656e6465722e202d204f6e65207472616e73666572206f7065726174696f6e2e543a3a4163636f756e74496e6465782041737369676e20616e2070726576696f75736c7920756e61737369676e656420696e6465782e205061796d656e743a20604465706f736974602069732072657365727665642066726f6d207468652073656e646572206163636f756e742e202d2060696e646578603a2074686520696e64657820746f20626520636c61696d65642e2054686973206d757374206e6f7420626520696e207573652e000000000000002ddb1000080000000102000000000000e6f510000f00000000000000ecf610001c00000000000000000000000000000000000000301a130008f71000000000000000000018f7100001000000000000000000000028543a3a4163636f756e7449642c2042616c616e63654f663c543e294200000000000000010000005b00000020f710002200000020546865206c6f6f6b75702066726f6d20696e64657820746f206163636f756e742e000000000000eadc10000d0000000000000004b9120001000000000000000000000028f910000e0000000000000000000000f7dc10000c0000000000000098f91000010000000000000000000000b0f9100014000000000000000000000003dd1000080000000000000050fa100001000000000000000000000068fa10001600000000000000000000000bdd10000e00000000000000301a130000000000000000000000000018fb100015000000000000000000000019dd10001100000000000000c0fb1000020000000000000000000000f0fb10001800000000000000000000002add10000e00000000000000b0fc1000010000000000000000000000c8fc100012000000000000000000000038dd1000070000000000000058fd100002000000000000000000000088fd10000d00000000000000000000003fdd10000e00000000000000f0fd100002000000000000000000000020fe10000d00000000000000000000004ddd10000a0000000000000088fe1000020000000000000000000000b8fe10000d000000000000000000000057dd1000110000000000000020ff100003000000000000000000000068ff100014000000000000000000000068dd10000d00000000000000b4471100010000000000000000000000080011001400000000000000841311001f000000301a130000000000a313110047000000301a130000000000ea1311002b000000301a1300000000001514110026000000301a130000000000f5bd12000b0000003b1411004a00000085141100270000002bc112000d000000ac1411003900000044be12000c00000000000000741311000400000000000000781311000c000000341111004b000000301a1300000000007f11110056000000d511110015000000301a13000000000098c9120034000000301a130000000000ea11110024000000301a1300000000000e12110023000000301a130000000000f5bd12000b000000311211001200000043121100480000008b12110039000000c412110021000000e5121100490000002bc112000d0000002e1311004600000044be12000c000000000000001711110004000000000000001b11110019000000a10e110024000000301a130000000000c50e1100560000001b0f11004c000000301a1300000000005b0c110059000000b40c11000a000000301a130000000000670f11002d000000301a130000000000f5bd12000b000000940f11000d000000a10f11003a0000002a0d110036000000db0f110022000000fd0f11000600000003101100380000003b101100300000006b101100310000009c10110035000000d11011004600000044be12000c000000d00b11004f000000301a1300000000001f0c11003c000000301a1300000000005b0c110059000000b40c11000a000000301a130000000000be0c110027000000301a130000000000f5bd12000b000000e50c110011000000f60c1100340000002a0d110036000000600d110049000000a90d110023000000cc0d1100330000002bc112000d000000ff0d11000e0000000d0e11004b000000580e11004900000044be12000c000000000000008c0511000900000000000000950511001700000000000000c90b110007000000000000008075120015000000cb09110026000000301a130000000000f109110056000000470a110007000000301a130000000000810811004e000000cf08110015000000301a1300000000004e0a110048000000960a110056000000301a130000000000ec0a11000d000000f90a11002f000000280b110004000000301a1300000000002c0b11002a000000301a130000000000f5bd12000b000000c10411000e000000bd02110021000000560b11002f0000002bc112000d000000850b11004400000044be12000c000000000000008c05110009000000000000007bdf10000e000000270811001b000000301a130000000000420811003f000000301a130000000000810811004e000000cf08110015000000301a130000000000e408110052000000301a130000000000360911002c000000301a130000000000f5bd12000b000000c10411000e000000bd0211002100000062091100230000002bc112000d000000850911004600000044be12000c0000000000000098d91200050000000000000095051100170000000000000024081100030000000000000080751200150000008d07110047000000301a1300000000007c03110056000000ee05110029000000301a130000000000170611003e000000d407110016000000301a130000000000f5bd12000b0000006c8711000a000000990611001f000000ea0711003a00000044be12000c0000000000000098d9120005000000000000009505110017000000000000008421120003000000000000007ac312000c0000000607110030000000301a1300000000007c03110056000000ee05110029000000301a130000000000170611003e000000360711001d000000301a130000000000f5bd12000b0000006c8711000a000000990611001f000000530711003a00000044be12000c0000000000000098d912000500000000000000950511001700000000000000f20611000600000000000000f80611000e000000c30511002b000000301a1300000000007c03110056000000ee05110029000000301a130000000000170611003e0000005506110044000000301a130000000000f5bd12000b0000006c8711000a000000990611001f000000b80611003a00000044be12000c000000000000008c0511000900000000000000950511001700000000000000834b11000600000000000000f320120023000000000000004e3712000900000000000000ac051100170000004d0311002f000000301a1300000000007c03110056000000d20311002d000000301a130000000000ff031100490000001102110056000000670211001e0000004804110053000000301a1300000000009b04110026000000301a130000000000f5bd12000b000000c10411000e000000cf04110022000000f104110026000000170511002f0000002bc112000d000000460511004600000044be12000c000000a800110051000000301a130000000000f9001100590000005201110052000000a401110021000000301a130000000000c50111004c000000301a1300000000001102110056000000670211001e000000301a1300000000008502110026000000301a130000000000f5bd12000b000000ab02110012000000bd02110021000000de0211001d0000002bc112000d000000fb0211005200000044be12000c0000002052656d6f766520616e206163636f756e742773206964656e7469747920616e64207375622d6163636f756e7420696e666f726d6174696f6e20616e6420736c61736820746865206465706f736974732e205061796d656e743a2052657365727665642062616c616e6365732066726f6d20607365745f737562736020616e6420607365745f6964656e74697479602061726520736c617368656420616e642068616e646c65642062792060536c617368602e20566572696669636174696f6e2072657175657374206465706f7369747320617265206e6f742072657475726e65643b20746865792073686f756c642062652063616e63656c6c6564206d616e75616c6c79207573696e67206063616e63656c5f72657175657374602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f526f6f745f206f72206d617463682060543a3a466f7263654f726967696e602e202d2060746172676574603a20746865206163636f756e742077686f7365206964656e7469747920746865206a756467656d656e742069732075706f6e2e2054686973206d75737420626520616e206163636f756e742020207769746820612072656769737465726564206964656e746974792e20456d69747320604964656e746974794b696c6c656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602e202d204f6e652062616c616e63652d72657365727665206f7065726174696f6e2e202d206053202b2032602073746f72616765206d75746174696f6e732e202d2042656e63686d61726b3a203130312e39202b2052202a20302e303931202b2053202a20322e353839202b2058202a20302e38373120c2b57320286d696e207371756172657320616e616c79736973292050726f766964652061206a756467656d656e7420666f7220616e206163636f756e742773206964656e746974792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420626520746865206163636f756e74206f6620746865207265676973747261722077686f736520696e64657820697320607265675f696e646578602e202d20607265675f696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206265696e67206d6164652e202d20606a756467656d656e74603a20746865206a756467656d656e74206f662074686520726567697374726172206f6620696e64657820607265675f696e646578602061626f75742060746172676574602e20456d69747320604a756467656d656e74476976656e60206966207375636365737366756c2e202d20604f2852202b205829602e202d204f6e652062616c616e63652d7472616e73666572206f7065726174696f6e2e202d20557020746f206f6e65206163636f756e742d6c6f6f6b7570206f7065726174696f6e2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2852202b205829602e202d2042656e63686d61726b3a2034372e3737202b2052202a20302e333336202b2058202a20312e36363420c2b57320286d696e207371756172657320616e616c79736973297265675f696e646578436f6d706163743c526567697374726172496e6465783e4a756467656d656e743c42616c616e63654f663c543e3e2053657420746865206669656c6420696e666f726d6174696f6e20666f722061207265676973747261722e206f6620746865207265676973747261722077686f736520696e6465782069732060696e646578602e202d2060696e646578603a2074686520696e646578206f6620746865207265676973747261722077686f73652066656520697320746f206265207365742e202d20606669656c6473603a20746865206669656c64732074686174207468652072656769737472617220636f6e6365726e73207468656d73656c76657320776974682e202d204f6e652073746f72616765206d75746174696f6e20604f285229602e202d2042656e63686d61726b3a20382e393835202b2052202a20302e34313320c2b57320286d696e207371756172657320616e616c79736973296669656c64734964656e746974794669656c6473204368616e676520746865206163636f756e74206173736f63696174656420776974682061207265676973747261722e202d20606e6577603a20746865206e6577206163636f756e742049442e202d2042656e63686d61726b3a2031302e3035202b2052202a20302e34333820c2b57320286d696e207371756172657320616e616c797369732920536574207468652066656520726571756972656420666f722061206a756467656d656e7420746f206265207265717565737465642066726f6d2061207265676973747261722e202d2060666565603a20746865206e6577206665652e202d2042656e63686d61726b3a20382e383438202b2052202a20302e34323520c2b57320286d696e207371756172657320616e616c79736973296665652043616e63656c20612070726576696f757320726571756573742e205061796d656e743a20412070726576696f75736c79207265736572766564206465706f7369742069732072657475726e6564206f6e20737563636573732e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973206e6f206c6f6e676572207265717565737465642e20456d69747320604a756467656d656e74556e72657175657374656460206966207375636365737366756c2e202d204f6e652073746f72616765206d75746174696f6e20604f2852202b205829602e202d2042656e63686d61726b3a2035302e3035202b2052202a20302e333231202b2058202a20312e36383820c2b57320286d696e207371756172657320616e616c797369732920526571756573742061206a756467656d656e742066726f6d2061207265676973747261722e205061796d656e743a204174206d6f737420606d61785f666565602077696c6c20626520726573657276656420666f72207061796d656e7420746f2074686520726567697374726172206966206a756467656d656e7420676976656e2e202d20607265675f696e646578603a2054686520696e646578206f6620746865207265676973747261722077686f7365206a756467656d656e74206973207265717565737465642e202d20606d61785f666565603a20546865206d6178696d756d206665652074686174206d617920626520706169642e20546869732073686f756c64206a757374206265206175746f2d706f70756c617465642061733a206060606e6f636f6d70696c652053656c663a3a7265676973747261727328292e676574287265675f696e646578292e756e7772617028292e6665652060606020456d69747320604a756467656d656e7452657175657374656460206966207375636365737366756c2e202d2053746f726167653a2031207265616420604f285229602c2031206d757461746520604f2858202b205229602e202d2042656e63686d61726b3a2035392e3032202b2052202a20302e343838202b2058202a20312e3720c2b57320286d696e207371756172657320616e616c79736973296d61785f66656520436c65617220616e206163636f756e742773206964656e7469747920696e666f20616e6420616c6c207375622d6163636f756e747320616e642072657475726e20616c6c206465706f736974732e205061796d656e743a20416c6c2072657365727665642062616c616e636573206f6e20746865206163636f756e74206172652072657475726e65642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d757374206861766520612072656769737465726564206964656e746974792e20456d69747320604964656e74697479436c656172656460206966207375636365737366756c2e202d20604f2852202b2053202b205829602020202d20776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e646564292e2020202d2077686572652060536020737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e2020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652062616c616e63652d756e72657365727665206f7065726174696f6e2e202d206032602073746f7261676520726561647320616e64206053202b2032602073746f726167652064656c6574696f6e732e202d2042656e63686d61726b733a2020202d2035372e3336202b2052202a20302e303139202b2053202a20322e353737202b2058202a20302e38373420c2b57320286d656469616e20736c6f70657320616e616c79736973292020202d2035372e3036202b2052202a20302e303036202b2053202a20322e353739202b2058202a20302e38373820c2b57320286d696e207371756172657320616e616c79736973292053657420746865207375622d6163636f756e7473206f66207468652073656e6465722e205061796d656e743a20416e79206167677265676174652062616c616e63652072657365727665642062792070726576696f757320607365745f73756273602063616c6c732077696c6c2062652072657475726e656420616e6420616e20616d6f756e7420605375624163636f756e744465706f736974602077696c6c20626520726573657276656420666f722065616368206974656d20696e206073756273602e202d206073756273603a20546865206964656e74697479277320286e657729207375622d6163636f756e74732e202d20604f2850202b205329602020202d20776865726520605060206f6c642d737562732d636f756e742028686172642d20616e64206465706f7369742d626f756e646564292e202d204174206d6f7374206f6e652062616c616e6365206f7065726174696f6e732e202d2044423a2020202d206050202b2053602073746f72616765206d75746174696f6e732028636f64656320636f6d706c657869747920604f28312960292020202d204f6e652073746f7261676520726561642028636f64656320636f6d706c657869747920604f28502960292e2020202d204f6e652073746f726167652077726974652028636f64656320636f6d706c657869747920604f28532960292e2020202d204f6e652073746f726167652d6578697374732028604964656e746974794f663a3a636f6e7461696e735f6b657960292e202d2042656e63686d61726b3a2033392e3433202b2050202a20322e353232202b2053202a20332e36393820c2b57320286d696e207371756172657320616e616c7973697329737562735665633c28543a3a4163636f756e7449642c2044617461293e2053657420616e206163636f756e742773206964656e7469747920696e666f726d6174696f6e20616e6420726573657276652074686520617070726f707269617465206465706f7369742e20496620746865206163636f756e7420616c726561647920686173206964656e7469747920696e666f726d6174696f6e2c20746865206465706f7369742069732074616b656e2061732070617274207061796d656e7420666f7220746865206e6577206465706f7369742e202d2060696e666f603a20546865206964656e7469747920696e666f726d6174696f6e2e20456d69747320604964656e7469747953657460206966207375636365737366756c2e202d20604f2858202b205827202b205229602020202d20776865726520605860206164646974696f6e616c2d6669656c642d636f756e7420286465706f7369742d626f756e64656420616e6420636f64652d626f756e646564292020202d20776865726520605260206a756467656d656e74732d636f756e7420287265676973747261722d636f756e742d626f756e64656429202d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e202d204f6e652073746f72616765206d75746174696f6e2028636f6465632d7265616420604f285827202b205229602c20636f6465632d777269746520604f2858202b20522960292e202d2042656e63686d61726b3a2035392e3434202b2052202a20302e333839202b2058202a20312e34333420c2b57320286d696e207371756172657320616e616c7973697329696e666f4964656e74697479496e666f2041646420612072656769737472617220746f207468652073797374656d2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d75737420626520605265676973747261724f726967696e60206f722060526f6f74602e202d20606163636f756e74603a20746865206163636f756e74206f6620746865207265676973747261722e20456d6974732060526567697374726172416464656460206966207375636365737366756c2e202d20604f2852296020776865726520605260207265676973747261722d636f756e742028676f7665726e616e63652d626f756e64656420616e6420636f64652d626f756e646564292e202d204f6e652073746f72616765206d75746174696f6e2028636f64656320604f28522960292e202d2042656e63686d61726b3a2032342e3633202b2052202a20302e353320c2b57320286d696e207371756172657320616e616c797369732900000000000000481611000a00000001050000000000007ac312000c00000000000000521611001a00000000000000000000000000000000000000301a13006c16110000000000000000007c1611000100000000000000000000000000000075dd10000700000001020000000000007ac312000c00000000000000841611001400000000000000000000000000000000000000301a1300981611000000000000000000a816110002000000000000000000000000000000b81611000600000001050000000000007ac312000c00000000000000a48f11002100000000000000000000000000000000000000301a1300c01611000000000000000000d016110003000000000000000100000000000000e81611000a0000000000000000000000f21611003600000000000000000000000000000000000000000000000000000000000000301a1300281711000000000000000000381711000400000000000000010000004964656e746974794f66526567697374726174696f6e3c42616c616e63654f663c543e3e4200000000000000010000005b000000401911004800000028543a3a4163636f756e7449642c2044617461294200000000000000010000005b0000009418110058000000ec18110054000000537562734f660000420000000000000001000000660000001f1811002e000000301a1300000000004d18110047000000526567697374726172735665633c4f7074696f6e3c526567697374726172496e666f3c42616c616e63654f663c543e2c20543a3a4163636f756e7449643e3e3e420000000000000001000000590000005817110053000000ab1711002a000000301a130000000000d51711004a0000002054686520736574206f6620726567697374726172732e204e6f7420657870656374656420746f206765742076657279206269672061732063616e206f6e6c79206265206164646564207468726f7567682061207370656369616c206f726967696e20286c696b656c79206120636f756e63696c206d6f74696f6e292e2054686520696e64657820696e746f20746869732063616e206265206361737420746f2060526567697374726172496e6465786020746f2067657420612076616c69642076616c75652e20416c7465726e6174697665202273756222206964656e746974696573206f662074686973206163636f756e742e20546865206669727374206974656d20697320746865206465706f7369742c20746865207365636f6e64206973206120766563746f72206f6620746865206163636f756e74732e205468652073757065722d6964656e74697479206f6620616e20616c7465726e6174697665202273756222206964656e7469747920746f676574686572207769746820697473206e616d652c2077697468696e207468617420636f6e746578742e20496620746865206163636f756e74206973206e6f7420736f6d65206f74686572206163636f756e742773207375622d6964656e746974792c207468656e206a75737420604e6f6e65602e20496e666f726d6174696f6e20746861742069732070657274696e656e7420746f206964656e746966792074686520656e7469747920626568696e6420616e206163636f756e742e00000000d81a11000c00000000000000b66c12000c00000000000000301a1300e41a11000000000000000000f41a1100010000000000000000000000fc1a11000c00000000000000b66c12000c00000000000000301a1300081b11000000000000000000181b1100010000000000000000000000201b11001100000000000000b66c12000c00000000000000301a1300341b11000000000000000000441b11000300000000000000000000005c1b11000e0000000000000060dc12000300000000000000301a1300881b110000000000000000006c1b1100010000000000000000000000741b1100130000000000000060dc12000300000000000000301a1300881b11000000000000000000981b1100020000000000000000000000a81b11000d0000000000000060dc12000300000000000000301a1300b81b11000000000000000000c81b1100020000000000000042617369634465706f73697442000000000000000100000067000000691e1100360000004669656c644465706f736974420000000000000001000000720000001e1e11004b0000005375624163636f756e744465706f736974000000420000000000000001000000730000001f1d110059000000781d11005c000000d41d11004a0000004d61785375624163636f756e74730000dc1c1100430000004d61784164646974696f6e616c4669656c647300420000000000000001000000740000004b1c110059000000a41c1100380000004d61785265676973747261727300000042000000000000000100000075000000d81b1100540000002c1c11001f000000204d61786d696d756d206e756d626572206f66207265676973747261727320616c6c6f77656420696e207468652073797374656d2e204e656564656420746f20626f756e642074686520636f6d706c6578697479206f662c20652e672e2c207570646174696e67206a756467656d656e74732e204d6178696d756d206e756d626572206f66206164646974696f6e616c206669656c64732074686174206d61792062652073746f72656420696e20616e2049442e204e656564656420746f20626f756e642074686520492f4f20726571756972656420746f2061636365737320616e206964656e746974792c206275742063616e2062652070726574747920686967682e20546865206d6178696d756d206e756d626572206f66207375622d6163636f756e747320616c6c6f77656420706572206964656e746966696564206163636f756e742e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564207375626163636f756e742e20546869732073686f756c64206163636f756e7420666f722074686520666163742074686174206f6e652073746f72616765206974656d27732076616c75652077696c6c20696e637265617365206279207468652073697a65206f6620616e206163636f756e742049442c20616e642074686572652077696c6c20626520616e6f746865722074726965206974656d2077686f73652076616c7565206973207468652073697a65206f6620616e206163636f756e7420494420706c75732033322062797465732e2054686520616d6f756e742068656c64206f6e206465706f73697420706572206164646974696f6e616c206669656c6420666f7220612072656769737465726564206964656e746974792e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220612072656769737465726564206964656e746974792e00d4f31200340000004a0300001d000000d4f31200340000001e0400003600000000000000d8dc100012000000000000002c201100010000000000000000000000d0dc1000080000000000000034201100010000000000000000000000c8dc100008000000000000003c201100010000000000000000000000bedc10000a0000000000000044201100010000000000000000000000b4dc10000a000000000000004c201100010000000000000000000000aadc10000a00000000000000542011000100000000000000000000009bdc10000f000000000000005c2011000100000000000000000000008ddc10000e00000000000000642011000100000000000000000000007ddc100010000000000000006c20110001000000000000000000000071dc10000c000000000000007420110001000000000000000000000064dc10000d000000000000007c20110001000000000000000000000057dc10000d000000000000008420110001000000000000000000000046dc100011000000000000008c2011000100000000000000a82111001800000093211100150000007e21110015000000712111000d00000061211100100000004e211100130000003c211100120000002b2111001100000018211100130000000221110016000000eb20110017000000cf2011001c000000942011003b000000204d6178696d756d20616d6f756e74206f66207265676973747261727320726561636865642e2043616e6e6f742061646420616e79206d6f72652e20546f6f206d616e79206164646974696f6e616c206669656c64732e205468652074617267657420697320696e76616c69642e2054686520696e64657820697320696e76616c69642e20496e76616c6964206a756467656d656e742e204a756467656d656e7420676976656e2e20537469636b79206a756467656d656e742e204e6f206964656e7469747920666f756e642e20466565206973206368616e6765642e20456d70747920696e6465782e204163636f756e742069736e2774206e616d65642e204163636f756e742069736e277420666f756e642e20546f6f206d616e7920737562732d6163636f756e74732e54696d657374616d70206d7573742062652075706461746564206f6e636520696e2074686520626c6f636b4e6f774475706c696361746564486561727462656174496e76616c69644b65796865617274626561744865617274626561744166746572000000000000a82211001100000000000000bc221100010000000000000000000000c4221100010000000000000000000000cc2211000700000000000000301a1300000000000000000000000000d4221100010000000000000000000000dc2211000b00000000000000e8221100010000000000000000000000f022110001000000000000004865617274626561745265636569766564000000c12311000b0000009123110030000000416c6c476f6f64005c23110035000000536f6d654f66666c696e65004423110018000000f82211004c0000002041742074686520656e64206f66207468652073657373696f6e2c206174206c65617374206f6e63652076616c696461746f722077617320666f756e6420746f206265206f66666c696e652e5665633c4964656e74696669636174696f6e5475706c653e2041742074686520656e64206f66207468652073657373696f6e2c206e6f206f6666656e63652077617320636f6d6d69747465642e2041206e657720686561727462656174207761732072656365697665642066726f6d2060417574686f72697479496460417574686f72697479496473657400617474656d707420746f20646976696465206279207a65726f000000760000001000000004000000770000000b221100090000004765747320616e64206465636f6465732074696d657374616d7020696e686572656e7420646174613c24110035000000e80000001f0000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f74696d657374616d702f7372632f6c69622e7273417574686f726564426c6f636b7300902411002e000000be2411000d0000004552524f523a2072657475726e6564206e6578745f6b657920686173206e6f2076616c75653a0a6b6579206973200a6e6578745f6b6579206973200039251100160000005c0912000200000039251100160000004f25110012000000696d6f6e6c696e6570616c6c65745f696d5f6f6e6c696e652f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f696d2d6f6e6c696e652f7372632f6c69622e7273536b697070696e6720686561727462656174206174202e204e6f7420612076616c696461746f722e000000732611001c000000452611002e000000132611001a0000002d26110018000000f72511000a0000000126110012000000df25110018000000c925110016000000ac2511001d0000004661696c656420746f206665746368206e6574776f726b2073746174654661696c656420746f2061637175697265206c6f636b4661696c656420746f207369676e20686561727462656174417574686f726974792020697320616c7265616479206f6e6c696e6548656172746265617420616c72656164792073656e74206174202e2057616974696e6720666f7220696e636c7573696f6e2e546f6f206561726c7920746f2073656e64206865617274626561742c206e657874206578706563746564206174204661696c656420746f207375626d6974207472616e73616374696f6e00042511003500000026020000340000007061726974792f696d2d6f6e6c696e652d6865617274626561742f00dc26110008000000e426110020000000042711000b0000009de91200030000005b696e6465783a205d205265706f7274696e6720696d2d6f6e6c696e6520617420626c6f636b3a20202873657373696f6e3a2000301a130000000000301a1300000000004200000004000000040000007800000042000000040000000400000078000000506172656e7420686173682073686f756c642062652076616c69642e5472616e73616374696f6e207472696520726f6f74206d7573742062652076616c69642ef527110032000000446967657374206974656d206d757374206d6174636820746861742063616c63756c617465642e53746f7261676520726f6f74206d757374206d6174636820746861742063616c63756c617465642e5369676e617475726520766572696669636174696f6e206661696c65642e4e756d626572206f6620646967657374206974656d73206d757374206d6174636820746861742063616c63756c617465642e00000000000b221100090000000000000054281100020000000000000000000000842811000a00000000000000000000000b22110009000000000000001f2a11001900000000000000382a11000a00000000000000422a11002f000000f5bd12000b000000d4281100480000001c2911002d000000301a13000000000049291100230000006c2911002c000000982911004f000000e729110017000000fe2911002100000044be12000c000000202d20436f6d706c65786974793a20604f284b202b20452960207768657265204b206973206c656e677468206f6620604b6579736020616e642045206973206c656e677468206f66202020604865617274626561742e6e6574776f726b5f73746174652e65787465726e616c5f61646472657373602020202d20604f284b29603a206465636f64696e67206f66206c656e67746820604b602020202d20604f284529603a206465636f64696e672f656e636f64696e67206f66206c656e67746820604560202d20446252656164733a2070616c6c65745f73657373696f6e206056616c696461746f7273602c2070616c6c65745f73657373696f6e206043757272656e74496e646578602c20604b657973602c2020206052656365697665644865617274626561747360202d2044625772697465733a2060526563656976656448656172746265617473604865617274626561743c543a3a426c6f636b4e756d6265723e5f7369676e61747572653c543a3a417574686f7269747949642061732052756e74696d654170705075626c69633e3a3a5369676e617475726500000000000000142211000e000000000000000000000006cf12000e00000000000000000000000000000000000000000000000000000000000000301a13005c2c11000000000000000000d42b1100060000000000000001000000000000008fe81200040000000000000000000000042c11001300000000000000000000000000000000000000000000000000000000000000301a1300182c11000000000000000000282c11000100000000000000010000000000000010f4120012000000020505000000000097f612000c00000000000000302c11000900000000000000cc8d12000700000000000000301a13003c2c110000000000000000004c2c110002000000000000000000000000000000712411000e000000020505000000000097f612000c00000000000000f49912000e0000000000000060dc12000300000000000000301a13005c2c110000000000000000006c2c1100020000000000000001000000832d11004c000000301a130000000000cf2d110044000000132e110034000000472e110040000000872e11004e0000005665633c543a3a417574686f7269747949643e00420000000000000001000000590000004f2d11003400000041757468496e6465780000004200000000000000010000005b000000f32c11003c0000002f2d110020000000420000000000000001000000570000007c2c110045000000c12c11003200000020466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f662060543a3a56616c696461746f7249646020746f20746865206e756d626572206f6620626c6f636b7320617574686f7265642062792074686520676976656e20617574686f726974792e20466f7220656163682073657373696f6e20696e6465782c207765206b6565702061206d617070696e67206f66206041757468496e6465786020746f20606f6666636861696e3a3a4f70617175654e6574776f726b5374617465602e205468652063757272656e7420736574206f66206b6579732074686174206d61792069737375652061206865617274626561742e2054686520626c6f636b206e756d6265722061667465722077686963682069742773206f6b20746f2073656e64206865617274626561747320696e2063757272656e742073657373696f6e2e2041742074686520626567696e6e696e67206f6620656163682073657373696f6e20776520736574207468697320746f20612076616c756520746861742073686f756c642066616c6c20726f7567686c7920696e20746865206d6964646c65206f66207468652073657373696f6e206475726174696f6e2e20546865206964656120697320746f206669727374207761697420666f72207468652076616c696461746f727320746f2070726f64756365206120626c6f636b20696e207468652063757272656e742073657373696f6e2c20736f20746861742074686520686561727462656174206c61746572206f6e2077696c6c206e6f74206265206e65636573736172792e00000000000000cc2311000300000000000000042f11000100000000000000000000001c2f11001200000000000000000000007232110003000000000000007532110012000000ac2f110016000000301a130000000000c22f1100560000001830110036000000301a1300000000004e301100510000009f30110011000000301a130000000000b030110036000000301a130000000000f5bd12000b000000e6301100340000001a31110068000000823111002d000000af3111002a000000d931110060000000393211003900000044be12000c00000020536574207468652063757272656e742074696d652e20546869732063616c6c2073686f756c6420626520696e766f6b65642065786163746c79206f6e63652070657220626c6f636b2e2049742077696c6c2070616e6963206174207468652066696e616c697a6174696f6e2070686173652c20696620746869732063616c6c206861736e2774206265656e20696e766f6b656420627920746861742074696d652e205468652074696d657374616d702073686f756c642062652067726561746572207468616e207468652070726576696f7573206f6e652062792074686520616d6f756e742073706563696669656420627920604d696e696d756d506572696f64602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652060496e686572656e74602e202d20604f285429602077686572652060546020636f6d706c6578697479206f6620606f6e5f74696d657374616d705f73657460202d20312073746f72616765207265616420616e6420312073746f72616765206d75746174696f6e2028636f64656320604f28312960292e202862656361757365206f6620604469645570646174653a3a74616b656020696e20606f6e5f66696e616c697a656029202d2031206576656e742068616e646c657220606f6e5f74696d657374616d705f7365746020604f285429602e202d2042656e63686d61726b3a20382e35323320286d696e207371756172657320616e616c79736973292020202d204e4f54453a20546869732062656e63686d61726b2077617320646f6e6520666f7220612072756e74696d65207769746820696e7369676e69666963616e7420606f6e5f74696d657374616d705f736574602068616e646c6572732e20202020204e65772062656e63686d61726b696e67206973206e6565646564207768656e20616464696e67206e65772068616e646c6572732e6e6f77436f6d706163743c543a3a4d6f6d656e743e0000000000eb211100030000000000000000000000383311000900000000000000000000000000000000000000000000000000000000000000301a13004433110000000000000000005433110001000000000000000100000000000000daf71200090000000000000000000000a1f512000400000000000000000000000000000000000000000000000000000000000000301a13005c33110000000000000000006c331100010000000000000001000000543a3a4d6f6d656e740000004200000000000000010000006e000000a1331100240000004200000000000000010000005b000000743311002d00000020446964207468652074696d657374616d7020676574207570646174656420696e207468697320626c6f636b3f2043757272656e742074696d6520666f72207468652063757272656e7420626c6f636b2e00000000000000003411000d00000000000000383311000900000000000000301a13001034110000000000000000002034110004000000000000004d696e696d756d506572696f6400000042000000000000000100000079000000403411005a0000009a3411005a000000f4341100590000004d3511001c00000020546865206d696e696d756d20706572696f64206265747765656e20626c6f636b732e204265776172652074686174207468697320697320646966666572656e7420746f20746865202a65787065637465642a20706572696f6420746861742074686520626c6f636b2070726f64756374696f6e206170706172617475732070726f76696465732e20596f75722063686f73656e20636f6e73656e7375732073797374656d2077696c6c2067656e6572616c6c7920776f726b2077697468207468697320746f2064657465726d696e6520612073656e7369626c6520626c6f636b2074696d652e20652e672e20466f7220417572612c2069742077696c6c20626520646f75626c65207468697320706572696f64206f6e2064656661756c742073657474696e67732e54696d657374616d7020746f6f2066617220696e2066757475726520746f2061636365707454696d657374616d70206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b54696d657374616d70206d75737420696e6372656d656e74206279206174206c65617374203c4d696e696d756d506572696f643e206265747765656e2073657175656e7469616c20626c6f636b7300000000012211000a0000000000000044361100010000000000000000000000ee21110013000000000000004c36110001000000000000006a361100190000005436110016000000204475706c696361746564206865617274626561742e204e6f6e206578697374656e74207075626c6963206b65792e00000000000000000000000000617474656d707420746f20646976696465206279207a65726f0000004200000008000000040000007a00000071202f206365696c28712f246d617829203c20246d61782e204d6163726f2070726576656e747320616e792074797065206265696e672063726561746564207468617420646f6573206e6f74207361746973667920746869733b2071656400002c3711004200000064010000270000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f7065725f7468696e67732e727300002c371100420000006b010000270000002c3711004200000076010000210000004661696c656420746f20636f6e76657274416d6f756e744c6f774578697374696e6756657374696e675363686564756c654e6f7456657374696e6776657374766573745f6f746865727665737465645f7472616e7366657200000000403811000e00000000000000841112000200000000000000000000005038110002000000000000000000000060381100100000000000000074ad120001000000000000000000000070381100010000000000000056657374696e67557064617465640000c338110056000000193911004600000056657374696e67436f6d706c65746564783811004b00000020416e206163636f756e742028676976656e2920686173206265636f6d652066756c6c79207665737465642e204e6f20667572746865722076657374696e672063616e2068617070656e2e2054686520616d6f756e742076657374656420686173206265656e20757064617465642e205468697320636f756c6420696e646963617465206d6f72652066756e64732061726520617661696c61626c652e205468652062616c616e636520676976656e2069732074686520616d6f756e74207768696368206973206c65667420756e7665737465642028616e642074687573206c6f636b6564292e5265706f72747344656665727265644f6666656e6365734e6f6e73656e7365496e7374616e744e6f74416c6c6f776564566f74657345786973744e6f7444656c65676174696e67496e73756666696369656e7446756e6473556e646572666c6f77416c726561647944656c65676174696e674e6f5065726d697373696f6e4e6f74566f7465724e6f7441637469766557726f6e674f70656e4e6f744f70656e4e6f74457870697265644e6f744c6f636b65644e6f6e6557616974696e67507265696d616765496e76616c69645265666572656e64756d496e76616c6964507265696d6167654d697373696e67496d6d696e656e744e6f74496d6d696e656e744475706c6963617465507265696d6167654e6f7444656c65676174656457726f6e6750726f7879416c72656164795665746f65644e6f50726f706f73616c496e76616c6964486173684e6f7453696d706c654d616a6f7269747950726f706f73616c426c61636b6c6973746564416c726561647943616e63656c6564426164496e6465784e6f7450726f787956616c75654c6f777365636f6e6470726f78795f766f7465656d657267656e63795f63616e63656c65787465726e616c5f70726f706f736565787465726e616c5f70726f706f73655f6d616a6f7269747965787465726e616c5f70726f706f73655f64656661756c74666173745f747261636b7665746f5f65787465726e616c63616e63656c5f7265666572656e64756d63616e63656c5f71756575656461637469766174655f70726f7879636c6f73655f70726f7879646561637469766174655f70726f787964656c6567617465756e64656c6567617465636c6561725f7075626c69635f70726f706f73616c736e6f74655f707265696d6167656e6f74655f696d6d696e656e745f707265696d616765726561705f707265696d616765756e6c6f636b6f70656e5f70726f787972656d6f76655f766f746572656d6f76655f6f746865725f766f746570726f78795f64656c656761746570726f78795f756e64656c656761746570726f78795f72656d6f76655f766f7465656e6163745f70726f706f73616c4465706f7369744f665265666572656e64756d496e666f4f66000000000054b112000800000000000000783f1100020000000000000000000000883f1100010000000000000000000000903f11000600000000000000983f1100030000000000000000000000b03f1100010000000000000000000000b83f11000e00000000000000301a1300000000000000000000000000c83f1100010000000000000000000000d03f11000700000000000000d83f1100020000000000000000000000e83f1100010000000000000000000000f03f11000600000000000000f83f110001000000000000000000000000401100010000000000000000000000084011000900000000000000f83f1100010000000000000000000000144011000100000000000000000000001c4011000900000000000000f83f110001000000000000000000000028401100010000000000000000000000f8b112000800000000000000304011000200000000000000000000004040110001000000000000000000000048401100090000000000000098ad1200020000000000000000000000544011000100000000000000000000005c4011000b0000000000000074ad1200010000000000000000000000684011000100000000000000000000007040110006000000000000007840110003000000000000000000000090401100010000000000000000000000984011000d00000000000000081a1200030000000000000000000000a8401100010000000000000000000000b04011000c00000000000000081a1200030000000000000000000000bc4011000100000000000000000000001c3a11000f00000000000000c4401100020000000000000000000000d44011000100000000000000000000003c3a11000f00000000000000c4401100020000000000000000000000dc401100010000000000000000000000e44011000e00000000000000f4401100040000000000000000000000144111000100000000000000000000001c411100080000000000000074ad12000100000000000000000000002441110001000000000000007b44110009000000f61512000700000084441100300000005461626c656400007b44110009000000f615120007000000a81412000e000000444411003700000045787465726e616c5461626c656400001e441100260000005374617274656400344211000f000000114411000d000000f9431100180000005061737365640000344211000f000000cd4311002c0000004e6f74506173736564000000a14311002c00000043616e63656c6c65640000008043110021000000344211000f000000a1f5120004000000634311001d00000044656c6567617465640000002b43110038000000556e64656c65676174656400f14211003a0000005665746f6564000020af12000900000089b2120004000000e64211000b000000c042110026000000507265696d6167654e6f7465640000008842110038000000507265696d61676555736564434211004500000089b2120004000000344211000f000000f141110043000000ae41110043000000507265696d616765526561706564000089b212000400000020af120009000000f61512000700000020af1200090000005741110057000000556e6c6f636b65642c4111002b00000020416e206163636f756e7420686173206265656e20756e6c6f636b6564207375636365737366756c6c792e2041207265676973746572656420707265696d616765207761732072656d6f76656420616e6420746865206465706f73697420636f6c6c6563746564206279207468652072656170657220286c617374206974656d292e20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d61676520776173206d697373696e672e20412070726f706f73616c20636f756c64206e6f7420626520657865637574656420626563617573652069747320707265696d6167652077617320696e76616c69642e5265666572656e64756d496e64657820412070726f706f73616c20707265696d616765207761732072656d6f76656420616e6420757365642028746865206465706f736974207761732072657475726e6564292e20412070726f706f73616c277320707265696d61676520776173206e6f7465642c20616e6420746865206465706f7369742074616b656e2e20416e2065787465726e616c2070726f706f73616c20686173206265656e207665746f65642e426c6f636b4e756d62657220416e206163636f756e74206861732063616e63656c6c656420612070726576696f75732064656c65676174696f6e206f7065726174696f6e2e20416e206163636f756e74206861732064656c65676174656420746865697220766f746520746f20616e6f74686572206163636f756e742e20412070726f706f73616c20686173206265656e20656e61637465642e2041207265666572656e64756d20686173206265656e2063616e63656c6c65642e20412070726f706f73616c20686173206265656e2072656a6563746564206279207265666572656e64756d2e20412070726f706f73616c20686173206265656e20617070726f766564206279207265666572656e64756d2e2041207265666572656e64756d2068617320626567756e2e566f74655468726573686f6c6420416e2065787465726e616c2070726f706f73616c20686173206265656e207461626c65642e2041207075626c69632070726f706f73616c20686173206265656e207461626c656420666f72207265666572656e64756d20766f74652e50726f70496e6465782041206d6f74696f6e20686173206265656e2070726f706f7365642062792061207075626c6963206163636f756e742e4c6f6f6b757000000000000014451100090000000000000020451100010000000000000000000000301a13000000000000000000000000008ccb11000a0000000000000028451100030000000000000000000000301a130000000000000000005363686564756c6564000000e64211000b0000004045110018000000584511000f000000940d12000e0000005461736b416464726573733c426c6f636b4e756d6265723e4f7074696f6e3c5665633c75383e3e004200000004000000040000007b0000007c0000007d00000042000000000000000100000064000000420000000000000001000000460000004200000000000000010000006d00000073657269616c697a656420617267732073686f756c642062652070726f7669646564206279207468652072756e74696d653b0a090909636f72726563746c792073657269616c697a656420646174612073686f756c6420626520646573657269616c697a61626c653b0a0909097165648811130043000000ba000000100000004c4f474943204552524f523a2062616b655f7265666572656e64756d2f7363686564756c655f6e616d6564206661696c65644167656e64615ca412006a000000a7000000090000005ca412006a000000a700000035000000507265696d616765735075626c696350726f70734e65787445787465726e616c00000000cb3711000400000000000000301a13000000000000000000000000002c471100110000000000000000000000cf3711000a00000000000000b4471100010000000000000000000000cc471100130000000000000000000000d93711000f0000000000000064481100020000000000000000000000944811001200000000000000ec4d11002f000000301a1300000000001b4e110058000000364c11001a000000301a130000000000504c110035000000301a130000000000f5bd12000b000000184a11000a000000734e11001e000000914e11003f000000d04e110040000000004d11000d000000104f11003a0000004a4f110039000000814d11006b00000044be12000c00000000000000834b11000600000000000000f320120023000000b24b11002f000000301a13000000000098c9120034000000301a130000000000e14b110055000000364c11001a000000301a130000000000504c110035000000301a130000000000f5bd12000b000000184a11000a000000224a11001e000000854c11003d000000c24c11003e000000004d11000d0000000d4d11003b000000484d110039000000814d11006b00000044be12000c00000000000000834b11000600000000000000f32012002300000000000000a8d811000800000000000000894b110029000000244911001a000000301a13000000000098c9120034000000301a1300000000003e491100450000008349110040000000c34911003d000000301a130000000000004a110018000000301a130000000000f5bd12000b000000184a11000a000000224a11001e000000404a11004f0000008f4a110050000000df4a110038000000174b11006c00000044be12000c00000020437265617465206120766573746564207472616e736665722e202d2060746172676574603a20546865206163636f756e7420746861742073686f756c64206265207472616e7366657272656420746865207665737465642066756e64732e202d2060616d6f756e74603a2054686520616d6f756e74206f662066756e647320746f207472616e7366657220616e642077696c6c206265207665737465642e202d20607363686564756c65603a205468652076657374696e67207363686564756c6520617474616368656420746f20746865207472616e736665722e20456d697473206056657374696e6743726561746564602e202d20604f283129602e202d2044625765696768743a20332052656164732c20332057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e742c205b53656e646572204163636f756e745d202d2042656e63686d61726b3a203131312e34202b202e333435202a206c20c2b57320286d696e2073717561726520616e616c7973697329202d205573696e672031313520c2b5732066697865642e20417373756d696e67206c657373207468616e203530206c6f636b73206f6e20616e7920757365722c20656c7365207765206d61792077616e7420666163746f7220696e206e756d626572206f66206c6f636b732e74617267657456657374696e67496e666f3c42616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e20556e6c6f636b20616e79207665737465642066756e6473206f662061206074617267657460206163636f756e742e202d2060746172676574603a20546865206163636f756e742077686f7365207665737465642066756e64732073686f756c6420626520756e6c6f636b65642e204d75737420686176652066756e6473207374696c6c206c6f636b656420756e6465722074686973206d6f64756c652e20456d69747320656974686572206056657374696e67436f6d706c6574656460206f72206056657374696e6755706461746564602e20202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e7420202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c20546172676574204163636f756e74202d2042656e63686d61726b3a20202020202d20556e6c6f636b65643a2035382e3039202b202e313034202a206c20c2b57320286d696e2073717561726520616e616c797369732920202020202d204c6f636b65643a2035352e3335202b202e323535202a206c20c2b57320286d696e2073717561726520616e616c7973697329202d205573696e6720363020c2b5732066697865642e20417373756d696e67206c657373207468616e203530206c6f636b73206f6e20616e7920757365722c20656c7365207765206d61792077616e7420666163746f7220696e206e756d626572206f66206c6f636b732e20556e6c6f636b20616e79207665737465642066756e6473206f66207468652073656e646572206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e6473207374696c6c202d2044625765696768743a20322052656164732c20322057726974657320202020202d2052656164733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d20202020202d205772697465733a2056657374696e672053746f726167652c2042616c616e636573204c6f636b732c205b53656e646572204163636f756e745d20202020202d20556e6c6f636b65643a2035362e31202b202e303938202a206c20c2b57320286d696e2073717561726520616e616c797369732920202020202d204c6f636b65643a2035342e3337202b202e323534202a206c20c2b57320286d696e2073717561726520616e616c7973697329000000000002bf11000700000001020000000000007ac312000c00000000000000894b11002900000000000000000000000000000000000000301a1300dc4f11000000000000000000ec4f11000100000000000000000000004200000000000000010000005b000000f44f11003600000020496e666f726d6174696f6e20726567617264696e67207468652076657374696e67206f66206120676976656e206163636f756e742e000000000000645011001100000000000000b66c12000c00000000000000301a1300549a110000000000000000007850110001000000000000004d696e5665737465645472616e73666572000000805011004700000020546865206d696e696d756d20616d6f756e7420746f206265207472616e7366657272656420746f206372656174652061206e65772076657374696e67207363686564756c652e00000000005f391100070000000105000000000000285211000d00000000000000355211003400000000000000000000000000000000000000301a13008891110000000000000000006c5211000100000000000000000000000000000066391100100000000000000000000000745211001900000000000000000000000000000000000000000000000000000000000000301a1300905211000000000000000000a052110002000000000000000100000000000000b05211001600000002050500000000008ff51200040000000000000093f512000e00000000000000c65211001200000000000000301a1300d85211000000000000000000e8521100010000000000000001000000000000002af412001200000001050000000000008ff512000400000000000000cc8d12000700000000000000000000000000000000000000301a1300f05211000000000000000000005311000600000000000000010000005265706f727449644f663c543e4f6666656e636544657461696c733c543a3a4163636f756e7449642c20543a3a4964656e74696669636174696f6e5475706c653e00000003551100520000005665633c44656665727265644f6666656e63654f663c543e3e000000420000000000000001000000590000009954110059000000f254110011000000436f6e63757272656e745265706f727473496e6465785665633c5265706f727449644f663c543e3e420000000000000001000000590000004f5411004a000000420000000000000001000000590000003053110044000000301a130000000000745311002f000000301a130000000000a353110052000000f55311005a00000020456e756d65726174657320616c6c207265706f727473206f662061206b696e6420616c6f6e672077697468207468652074696d6520746865792068617070656e65642e20416c6c207265706f7274732061726520736f72746564206279207468652074696d65206f66206f6666656e63652e204e6f74652074686174207468652061637475616c2074797065206f662074686973206d617070696e6720697320605665633c75383e602c207468697320697320626563617573652076616c756573206f6620646966666572656e7420747970657320617265206e6f7420737570706f7274656420617420746865206d6f6d656e7420736f2077652061726520646f696e6720746865206d616e75616c2073657269616c697a6174696f6e2e204120766563746f72206f66207265706f727473206f66207468652073616d65206b696e6420746861742068617070656e6564206174207468652073616d652074696d6520736c6f742e204465666572726564207265706f72747320746861742068617665206265656e2072656a656374656420627920746865206f6666656e63652068616e646c657220616e64206e65656420746f206265207375626d69747465642061742061206c617465722074696d652e20546865207072696d61727920737472756374757265207468617420686f6c647320616c6c206f6666656e6365207265636f726473206b65796564206279207265706f7274206964656e746966696572732e000000000000000db012000700000000000000545a1100020000000000000000000000845a11000f0000000000000000000000f23a11000600000000000000fc5a1100010000000000000000000000145b11000c000000000000000000000014b012000400000000000000745b1100020000000000000000000000a45b11000d0000000000000000000000f83a11000a00000000000000745b11000200000000000000000000000c5c11000c0000000000000000000000023b110010000000000000006c5c1100010000000000000000000000845c11000a0000000000000000000000123b11001000000000000000d45c1100010000000000000000000000ec5c11000b0000000000000000000000223b11001900000000000000d45c1100010000000000000000000000445d11000e00000000000000000000003b3b11001800000000000000d45c1100010000000000000000000000b45d11000e0000000000000000000000533b11000a00000000000000245e11000300000000000000000000006c5e11001300000000000000000000005d3b11000d00000000000000d45c1100010000000000000000000000045f11000f00000000000000000000006a3b110011000000000000007c5f1100010000000000000000000000945f11000900000000000000000000007b3b11000d00000000000000dc5f1100010000000000000000000000f45f11000a0000000000000000000000883b11000e00000000000000446011000100000000000000000000005c6011000b0000000000000000000000963b11000b00000000000000301a1300000000000000000000000000b4601100090000000000000000000000a13b1100100000000000000044601100010000000000000000000000fc6011000d0000000000000000000000b13b1100080000000000000064611100030000000000000000000000ac611100140000000000000000000000b93b11000a00000000000000301a13000000000000000000000000004c6211000d0000000000000000000000c33b11001600000000000000301a1300000000000000000000000000b4621100080000000000000000000000d93b11000d00000000000000f46211000100000000000000000000000c6311000d0000000000000000000000e63b11001600000000000000f4621100010000000000000000000000746311000c0000000000000000000000fc3b11000d00000000000000d45c1100010000000000000000000000d46311000f0000000000000000000000093c110006000000000000004c641100010000000000000000000000646411000900000000000000000000000f3c11000a000000000000004c641100010000000000000000000000ac6411000d0000000000000000000000193c11000b00000000000000146511000100000000000000000000002c6511001c0000000000000000000000243c110011000000000000000c6611000200000000000000000000003c661100100000000000000000000000353c11000e0000000000000064611100030000000000000000000000bc661100170000000000000000000000433c11001000000000000000301a1300000000000000000000000000746711000d0000000000000000000000533c1100110000000000000014651100010000000000000000000000dc6711000d0000000000000000000000643c11000e000000000000004468110002000000000000000000000074681100010000000000000000000000d06811000d0000000000000091d912000700000000000000aa4d1200050000000000000080751200150000001089110028000000301a13000000000038891100460000007e89110021000000301a1300000000009f89110036000000d589110046000000301a1300000000001b8a110012000000301a130000000000f5bd12000b0000002d8a110009000000368a1100360000006c8a11002000000044be12000c0000000000000089d912000800000000000000fe88110012000000c88711002e000000301a130000000000f6871100410000003788110045000000301a1300000000007c88110033000000301a130000000000f5bd12000b000000af8811000a000000b988110035000000ee8811001000000044be12000c000000000000004f7e11000900000000000000587e1100180000000000000014b012000400000000000000af87110019000000b88611004d000000058711002f000000301a130000000000f370110033000000301a13000000000034871100380000007786110022000000301a130000000000f5bd12000b0000006c8711000a0000007687110039000000998611001f00000044be12000c000000a885110054000000fc8511003d000000301a130000000000f370110033000000301a130000000000398611003e0000007786110022000000301a130000000000f5bd12000b000000184a11000a000000998611001f00000044be12000c000000000000004f7e11000900000000000000344211000f000000e084110054000000998411000c000000301a130000000000348511003f000000301a1300000000007385110035000000301a130000000000f5bd12000b000000184a11000a00000044be12000c00000000000000d06811000d0000000000000091d91200070000004d8411004c000000998411000c000000301a130000000000a58411003b000000301a130000000000f382110036000000301a130000000000f5bd12000b000000184a11000a000000732112001100000044be12000c000000a383110056000000f983110018000000301a130000000000118411003c000000301a130000000000f382110036000000301a13000000000029831100530000007c83110027000000301a130000000000f5bd12000b000000184a11000a000000732112001100000044be12000c00000045821100520000009782110021000000301a130000000000b88211003b000000301a130000000000f382110036000000301a13000000000029831100530000007c83110027000000301a130000000000f5bd12000b000000184a11000a000000732112001100000044be12000c00000000000000d06811000d0000000000000091d912000700000000000000338211000d0000000000000006cf12000e0000000000000040821100050000000000000006cf12000e000000c57f1100540000001980110059000000728011003b000000301a130000000000ad80110035000000301a130000000000e28011003e000000208111005800000078811100260000009e81110055000000f38111002f000000301a1300000000002282110011000000301a130000000000f5bd12000b000000db7711001000000073211200110000000d7611001600000044be12000c000000707e11002f000000301a1300000000009f7e110037000000301a130000000000d67e11004c000000301a130000000000227f110010000000301a130000000000f5bd12000b000000327f110012000000db77110010000000447f110042000000867f110011000000977f11002e00000044be12000c000000000000004f7e11000900000000000000587e110018000000047e110015000000301a130000000000217a110031000000301a130000000000197e110036000000301a130000000000f5bd12000b000000184a11000a00000044be12000c00000000000000ff7d11000500000000000000344211000f000000727d110028000000301a130000000000217a110031000000301a1300000000009a7d110032000000301a130000000000f5bd12000b0000007321120011000000cc7d11003300000044be12000c000000000000006d7d110005000000000000007ac312000c000000cf7c110041000000301a130000000000107d110025000000301a130000000000f370110033000000301a130000000000357d110038000000301a130000000000f5bd12000b0000000d7611001600000044be12000c000000817c110026000000301a130000000000a77c110028000000301a130000000000f370110033000000301a130000000000f5bd12000b000000db7711001000000044be12000c000000b27b11004b000000301a130000000000fd7b110022000000301a1300000000001f7c110028000000301a130000000000f370110033000000301a130000000000477c11003a000000301a130000000000f5bd12000b000000db7711001000000044be12000c00000000000000957b110002000000000000007ac312000c00000000000000977b11000a00000000000000a17b11000a00000000000000ab7b11000700000000000000b66c12000c000000ee7a11004f000000301a1300000000000a6c110056000000606c110033000000301a1300000000003d7b110058000000886d11001e000000a66d110057000000fd6d110026000000301a130000000000236e110052000000756e110056000000cb6e1100510000001c6f110055000000716f110032000000301a130000000000a36f110013000000301a130000000000f5bd12000b00000044be12000c000000527a110034000000301a130000000000dc6a110058000000346b110038000000301a130000000000867a110052000000d87a110016000000301a130000000000a86b110015000000301a130000000000f5bd12000b000000852012000800000044be12000c000000047a11001d000000301a130000000000217a110031000000301a130000000000f5bd12000b000000184a11000a000000db7711001000000044be12000c00000000000000f47911001000000000000000cc8d120007000000fe781100580000005679110049000000301a130000000000f370110033000000301a1300000000006978110032000000301a1300000000009b78110017000000301a130000000000f5bd12000b0000009f79110041000000e07911001400000044be12000c000000eb771100510000003c7811002d000000301a130000000000f370110033000000301a1300000000006978110032000000301a1300000000009b78110017000000301a130000000000f5bd12000b000000b27811004c00000044be12000c0000007b7611003d000000301a130000000000f370110033000000301a130000000000b876110034000000301a130000000000ec761100540000004077110057000000977711002c000000301a130000000000c377110018000000301a130000000000f5bd12000b000000db7711001000000044be12000c00000000000000834b110006000000000000007ac312000c0000002376110029000000301a130000000000f370110033000000301a1300000000004c7611002f000000301a130000000000f5bd12000b000000184a11000a00000044be12000c0000003075110010000000301a1300000000004075110037000000301a1300000000007775110019000000301a130000000000907511003b000000301a130000000000cb75110042000000301a130000000000f5bd12000b0000000d7611001600000044be12000c0000000000000098d912000500000000000000344211000f000000b66f110020000000301a13000000000090711100040000009471110023000000b771110020000000d771110025000000fc711100400000003c7211003600000072721100220000009472110058000000ec72110017000000301a130000000000037311002b0000002e7311003c0000006a73110038000000a273110030000000d2731100570000002974110057000000807411003a000000301a130000000000ba741100530000000d75110023000000301a1300000000001c6a11003e000000301a130000000000f5bd12000b0000005a6a11005000000044be12000c00000000000000834b110006000000000000007ac312000c0000000000000098d912000500000000000000344211000f000000b66f110020000000301a130000000000d66f1100540000002a7011004c0000007670110056000000cc70110027000000301a130000000000f370110033000000301a13000000000026711100540000007a711100160000001c6a11003e000000301a130000000000f5bd12000b0000005a6a11005000000044be12000c000000bd6b11004d000000301a1300000000000a6c110056000000606c110033000000301a130000000000936c110055000000e86c11002c000000301a130000000000146d1100580000006c6d11001c000000886d11001e000000a66d110057000000fd6d110026000000236e110052000000756e110056000000cb6e1100510000001c6f110055000000716f110032000000301a130000000000a36f110013000000301a130000000000f5bd12000b00000044be12000c000000aa6a110032000000301a130000000000dc6a110058000000346b110038000000301a13000000000070691100540000006c6b11003c000000301a130000000000a86b110015000000301a130000000000f5bd12000b000000852012000800000044be12000c000000dd68110028000000301a13000000000005691100540000005969110017000000301a1300000000007069110054000000c469110058000000301a1300000000001c6a11003e000000301a130000000000f5bd12000b0000005a6a11005000000044be12000c00000000000000d06811000d0000000000000091d91200070000000000000098d912000500000000000000344211000f0000007c6811005400000020456e61637420612070726f706f73616c2066726f6d2061207265666572656e64756d2e20466f72206e6f77207765206a757374206d616b65207468652077656967687420626520746865206d6178696d756d2e70726f706f73616c5f686173682052656d6f766520612070726f7869656420766f746520666f722061207265666572656e64756d2e2045786163746c79206571756976616c656e7420746f206072656d6f76655f766f746560206578636570742074686174206974206f70657261746573206f6e20746865206163636f756e742074686174207468652073656e64657220697320612070726f787920666f722e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d75737420626520612070726f787920666f7220736f6d65206f74686572206163636f756e74207768696368206861732061207265676973746572656420766f746520666f7220746865207265666572656e64756d206f662060696e646578602e202d2060696e646578603a2054686520696e646578206f66207265666572656e64756d206f662074686520766f746520746f2062652072656d6f7665642e202d20604f2852202b206c6f6720522960207768657265205220697320746865206e756d626572206f66207265666572656e646120746861742060746172676574602068617320766f746564206f6e2e20556e64656c65676174652074686520766f74696e6720706f776572206f6620612070726f78696564206163636f756e742e20546f6b656e73206d617920626520756e6c6f636b656420666f6c6c6f77696e67206f6e636520616e20616d6f756e74206f662074696d6520636f6e73697374656e74207769746820746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e2077697468207768696368207468652064656c65676174696f6e20776173206973737565642e2070726f787920666f7220736f6d65206f74686572206163636f756e742077686963682069732063757272656e746c792064656c65676174696e672e20456d6974732060556e64656c656761746564602e2044656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f6620612070726f78696564206163636f756e742e205468652062616c616e63652064656c656761746564206973206c6f636b656420666f72206173206c6f6e6720617320697427732064656c6567617465642c20616e64207468657265616674657220666f72207468652074696d6520617070726f70726961746520666f722074686520636f6e76696374696f6e2773206c6f636b20706572696f642e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d7573742068617665206265656e20736574206173207468652070726f7879206163636f756e7420666f722060746172676574602e202d2060746172676574603a20546865206163636f756e742077686f6c6520766f74696e6720706f776572207368616c6c2062652064656c65676174656420616e642077686f73652062616c616e6365206c6f636b65642e20202054686973206163636f756e74206d757374206569746865723a2020202d2062652064656c65676174696e6720616c72656164793b206f722020202d2068617665206e6f20766f74696e67206163746976697479202869662074686572652069732c207468656e2069742077696c6c206e65656420746f2062652072656d6f7665642f636f6e736f6c69646174656420202020207468726f7567682060726561705f766f746560206f722060756e766f746560292e202d2060746f603a20546865206163636f756e742077686f736520766f74696e6720746865206074617267657460206163636f756e74277320766f74696e6720706f7765722077696c6c20666f6c6c6f772e202d2060636f6e76696374696f6e603a2054686520636f6e76696374696f6e20746861742077696c6c20626520617474616368656420746f207468652064656c65676174656420766f7465732e205768656e207468652020206163636f756e7420697320756e64656c6567617465642c207468652066756e64732077696c6c206265206c6f636b656420666f722074686520636f72726573706f6e64696e6720706572696f642e202d206062616c616e6365603a2054686520616d6f756e74206f6620746865206163636f756e7427732062616c616e636520746f206265207573656420696e2064656c65676174696e672e2054686973206d7573742020206e6f74206265206d6f7265207468616e20746865206163636f756e7427732063757272656e742062616c616e63652e20456d697473206044656c656761746564602e2052656d6f7665206120766f746520666f722061207265666572656e64756d2e2049662074686520607461726765746020697320657175616c20746f20746865207369676e65722c207468656e20746869732066756e6374696f6e2069732065786163746c79206571756976616c656e7420746f206072656d6f76655f766f7465602e204966206e6f7420657175616c20746f20746865207369676e65722c207468656e2074686520766f7465206d757374206861766520657870697265642c20656974686572206265636175736520746865207265666572656e64756d207761732063616e63656c6c65642c20626563617573652074686520766f746572206c6f737420746865207265666572656e64756d206f7220626563617573652074686520636f6e76696374696f6e20706572696f64206973206f7665722e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2e202d2060746172676574603a20546865206163636f756e74206f662074686520766f746520746f2062652072656d6f7665643b2074686973206163636f756e74206d757374206861766520766f74656420666f722020207265666572656e64756d2060696e646578602e2049663a202d20746865207265666572656e64756d207761732063616e63656c6c65642c206f72202d20746865207265666572656e64756d206973206f6e676f696e672c206f72202d20746865207265666572656e64756d2068617320656e646564207375636820746861742020202d2074686520766f7465206f6620746865206163636f756e742077617320696e206f70706f736974696f6e20746f2074686520726573756c743b206f722020202d20746865726520776173206e6f20636f6e76696374696f6e20746f20746865206163636f756e74277320766f74653b206f722020202d20746865206163636f756e74206d61646520612073706c697420766f7465202e2e2e7468656e2074686520766f74652069732072656d6f76656420636c65616e6c7920616e64206120666f6c6c6f77696e672063616c6c20746f2060756e6c6f636b60206d617920726573756c7420696e206d6f72652066756e6473206265696e6720617661696c61626c652e2049662c20686f77657665722c20746865207265666572656e64756d2068617320656e64656420616e643a202d2069742066696e697368656420636f72726573706f6e64696e6720746f2074686520766f7465206f6620746865206163636f756e742c20616e64202d20746865206163636f756e74206d6164652061207374616e6461726420766f7465207769746820636f6e76696374696f6e2c20616e64202d20746865206c6f636b20706572696f64206f662074686520636f6e76696374696f6e206973206e6f74206f766572202e2e2e7468656e20746865206c6f636b2077696c6c206265206167677265676174656420696e746f20746865206f766572616c6c206163636f756e742773206c6f636b2c207768696368206d617920696e766f6c7665202a6f7665726c6f636b696e672a20287768657265207468652074776f206c6f636b732061726520636f6d62696e656420696e746f20612073696e676c65206c6f636b207468617420697320746865206d6178696d756d206f6620626f74682074686520616d6f756e74206c6f636b656420616e64207468652074696d65206973206974206c6f636b656420666f72292e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e6572206d7573742068617665206120766f7465207265676973746572656420666f72207265666572656e64756d2060696e646578602e204265636f6d6520612070726f78792e2054686973206d7573742062652063616c6c6564207072696f7220746f2061206c61746572206061637469766174655f70726f7879602e204f726967696e206d7573742062652061205369676e65642e202d2060746172676574603a20546865206163636f756e742077686f736520766f7465732077696c6c206c617465722062652070726f786965642e2060636c6f73655f70726f787960206d7573742062652063616c6c6564206265666f726520746865206163636f756e742063616e2062652064657374726f7965642e202d204f6e6520657874726120444220656e7472792e20556e6c6f636b20746f6b656e732074686174206861766520616e2065787069726564206c6f636b2e202d2060746172676574603a20546865206163636f756e7420746f2072656d6f766520746865206c6f636b206f6e2e2052656d6f766520616e20657870697265642070726f706f73616c20707265696d61676520616e6420636f6c6c65637420746865206465706f7369742e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f6620612070726f706f73616c2e20546869732077696c6c206f6e6c7920776f726b2061667465722060566f74696e67506572696f646020626c6f636b732066726f6d207468652074696d6520746861742074686520707265696d61676520776173206e6f7465642c2069662069742773207468652073616d65206163636f756e7420646f696e672069742e2049662069742773206120646966666572656e74206163636f756e742c207468656e206974276c6c206f6e6c7920776f726b20616e206164646974696f6e616c2060456e6163746d656e74506572696f6460206c617465722e20456d6974732060507265696d616765526561706564602e202d204f6e6520444220636c6561722e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e2054686973207265717569726573207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652e204e6f206465706f736974206973206e65656465642e202d2060656e636f6465645f70726f706f73616c603a2054686520707265696d616765206f6620612070726f706f73616c2e20456d6974732060507265696d6167654e6f746564602e202d20446570656e64656e74206f6e207468652073697a65206f662060656e636f6465645f70726f706f73616c6020616e64206c656e677468206f662064697370617463682071756575652e2052656769737465722074686520707265696d61676520666f7220616e207570636f6d696e672070726f706f73616c2e205468697320646f65736e27742072657175697265207468652070726f706f73616c20746f20626520696e207468652064697370617463682071756575652062757420646f657320726571756972652061206465706f7369742c2072657475726e6564206f6e636520656e61637465642e202d20446570656e64656e74206f6e207468652073697a65206f662060656e636f6465645f70726f706f73616c60206275742070726f74656374656420627920612020207265717569726564206465706f7369742e656e636f6465645f70726f706f73616c20436c6561727320616c6c207075626c69632070726f706f73616c732e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f526f6f745f2e20556e64656c65676174652074686520766f74696e6720706f776572206f66207468652073656e64696e67206163636f756e742e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652063757272656e746c792064656c65676174696e672e2044656c65676174652074686520766f74696e6720706f77657220287769746820736f6d6520676976656e20636f6e76696374696f6e29206f66207468652073656e64696e67206163636f756e742e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f2c20616e6420746865207369676e696e67206163636f756e74206d757374206569746865723a746f636f6e76696374696f6e436f6e76696374696f6e62616c616e63652044656163746976617465207468652070726f78792c20627574206c65617665206f70656e20746f2074686973206163636f756e742e2043616c6c6564206279207468652073746173682e205468652070726f7879206d75737420616c7265616479206265206163746976652e204e4f54453a205573656420746f2062652063616c6c6564206072656d6f76655f70726f7879602e202d206070726f7879603a20546865206163636f756e7420746861742077696c6c2062652064656163746976617465642061732070726f78792e20436c656172207468652070726f78792e2043616c6c6564206279207468652070726f78792e204e4f54453a205573656420746f2062652063616c6c6564206072657369676e5f70726f7879602e205370656369667920612070726f7879207468617420697320616c7265616479206f70656e20746f2075732e2043616c6c6564206279207468652073746173682e204e4f54453a205573656420746f2062652063616c6c656420607365745f70726f7879602e202d206070726f7879603a20546865206163636f756e7420746861742077696c6c206265206163746976617465642061732070726f78792e70726f78792043616e63656c20612070726f706f73616c2071756575656420666f7220656e6163746d656e742e202d20607768696368603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e202d204f286429207768657265206420697320746865206974656d7320696e207468652064697370617463682071756575652e77686963682052656d6f76652061207265666572656e64756d2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e7265665f696e646578436f6d706163743c5265666572656e64756d496e6465783e205665746f20616e6420626c61636b6c697374207468652065787465726e616c2070726f706f73616c20686173682e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d75737420626520605665746f4f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c20746f207665746f20616e6420626c61636b6c6973742e20456d69747320605665746f6564602e202d2054776f20444220656e74726965732e202d20506572666f726d7320612062696e61727920736561726368206f6e20606578697374696e675f7665746f657273602077686963682073686f756c64206e6f7420202062652076657279206c617267652e202d204f286c6f672076292c2076206973206e756d626572206f6620606578697374696e675f7665746f65727360205363686564756c65207468652063757272656e746c792065787465726e616c6c792d70726f706f736564206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c656420696d6d6564696174656c792e204966207468657265206973206e6f2065787465726e616c6c792d70726f706f736564207265666572656e64756d2063757272656e746c792c206f72206966207468657265206973206f6e6520627574206974206973206e6f742061206d616a6f726974792d63617272696573207265666572656e64756d207468656e206974206661696c732e20546865206469737061746368206f6620746869732063616c6c206d757374206265206046617374547261636b4f726967696e602e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652063757272656e742065787465726e616c2070726f706f73616c2e202d2060766f74696e675f706572696f64603a2054686520706572696f64207468617420697320616c6c6f77656420666f7220766f74696e67206f6e20746869732070726f706f73616c2e20496e6372656173656420746f2020206046617374547261636b566f74696e67506572696f646020696620746f6f206c6f772e202d206064656c6179603a20546865206e756d626572206f6620626c6f636b20616674657220766f74696e672068617320656e64656420696e20617070726f76616c20616e6420746869732073686f756c64206265202020656e61637465642e205468697320646f65736e277420686176652061206d696e696d756d20616d6f756e742e20456d697473206053746172746564602e766f74696e675f706572696f6464656c6179205363686564756c652061206e656761746976652d7475726e6f75742d62696173207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c44656661756c744f726967696e602e202d206070726f706f73616c5f68617368603a2054686520707265696d6167652068617368206f66207468652070726f706f73616c2e20556e6c696b65206065787465726e616c5f70726f706f7365602c20626c61636b6c697374696e6720686173206e6f20656666656374206f6e207468697320616e64206974206d6179207265706c6163652061207072652d7363686564756c6564206065787465726e616c5f70726f706f7365602063616c6c2e205363686564756c652061206d616a6f726974792d63617272696573207265666572656e64756d20746f206265207461626c6564206e657874206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f6620746869732063616c6c206d757374206265206045787465726e616c4d616a6f726974794f726967696e602e205363686564756c652061207265666572656e64756d20746f206265207461626c6564206f6e6365206974206973206c6567616c20746f207363686564756c6520616e2065787465726e616c207265666572656e64756d2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206045787465726e616c4f726967696e602e205363686564756c6520616e20656d657267656e63792063616e63656c6c6174696f6e206f662061207265666572656e64756d2e2043616e6e6f742068617070656e20747769636520746f207468652073616d6520546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265206043616e63656c6c6174696f6e4f726967696e602e202d607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2063616e63656c2e20566f746520696e2061207265666572656e64756d206f6e20626568616c66206f6620612073746173682e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f2070726f787920766f746520666f722e202d2060766f7465603a2054686520766f746520636f6e66696775726174696f6e2e202d204f6e65204442206368616e67652c206f6e6520444220656e7472792e20566f746520696e2061207265666572656e64756d2e2049662060766f74652e69735f6179652829602c2074686520766f746520697320746f20656e616374207468652070726f706f73616c3b206f7468657277697365206974206973206120766f746520746f206b65657020746865207374617475732071756f2e202d20607265665f696e646578603a2054686520696e646578206f6620746865207265666572656e64756d20746f20766f746520666f722e202d20604f285229602e202d205220697320746865206e756d626572206f66207265666572656e64756d732074686520766f7465722068617320766f746564206f6e2e4163636f756e74566f74653c42616c616e63654f663c543e3e205369676e616c732061677265656d656e742077697468206120706172746963756c61722070726f706f73616c2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742c20657175616c20746f20746865206f726967696e616c206465706f7369742e202d206070726f706f73616c603a2054686520696e646578206f66207468652070726f706f73616c20746f207365636f6e642e202d20604f285329602e202d205320697320746865206e756d626572206f66207365636f6e647320612070726f706f73616c20616c7265616479206861732e202d204f6e6520444220656e7472792e436f6d706163743c50726f70496e6465783e2050726f706f736520612073656e73697469766520616374696f6e20746f2062652074616b656e2e20546865206469737061746368206f726967696e206f6620746869732063616c6c206d757374206265205f5369676e65645f20616e64207468652073656e646572206d75737420686176652066756e647320746f20636f76657220746865206465706f7369742e202d206070726f706f73616c5f68617368603a205468652068617368206f66207468652070726f706f73616c20707265696d6167652e202d206076616c7565603a2054686520616d6f756e74206f66206465706f73697420286d757374206265206174206c6561737420604d696e696d756d4465706f73697460292e20456d697473206050726f706f736564602e202d20604f28502960202d205020697320746865206e756d6265722070726f706f73616c7320696e2074686520605075626c696350726f707360207665632e202d2054776f204442206368616e6765732c206f6e6520444220656e7472792e00000000bbf112000f00000000000000000000007b4411000900000000000000000000000000000000000000000000000000000000000000301a13003490110000000000000000005c8f110001000000000000000100000000000000914611000b0000000000000000000000648f11002700000000000000000000000000000000000000000000000000000000000000301a13008c8f110000000000000000009c8f110001000000000000000100000000000000723c11000900000001050000000000007b4411000900000000000000a48f11002100000000000000000000000000000000000000301a1300c88f11000000000000000000d88f1100010000000000000000000000000000008846110009000000010600000000000091d912000700000000000000e08f11003a00000000000000000000000000000000000000301a13008891110000000000000000001c90110002000000000000000000000000000000caf112000f0000000000000000000000344211000f00000000000000000000000000000000000000000000000000000000000000301a13003490110000000000000000002c90110001000000000000000100000000000000e2f112000d0000000000000000000000344211000f00000000000000000000000000000000000000000000000000000000000000301a130034901100000000000000000044901100020000000000000001000000000000007b3c1100100000000105000000000000344211000f00000000000000549011003500000000000000000000000000000000000000301a13008c90110000000000000000009c90110001000000000000000000000000000000a49011000800000001050000000000007ac312000c00000000000000ac9011003200000000000000000000000000000000000000301a1300e09011000000000000000000f09011000200000000000000010000000000000064d312000500000001050000000000007ac312000c00000000000000009111001800000000000000000000000000000000000000301a13001891110000000000000000002891110002000000000000000000000000000000389111000500000001050000000000007ac312000c0000000000000006cf12000e00000000000000000000000000000000000000301a13004091110000000000000000005091110002000000000000000000000000000000eff11200150000000000000000000000a1f512000400000000000000000000000000000000000000000000000000000000000000301a130014921100000000000000000060911100020000000000000001000000000000009c4611000c0000000000000000000000709111001800000000000000000000000000000000000000000000000000000000000000301a13008891110000000000000000009891110004000000000000000000000000000000b891110009000000010600000000000091d912000700000000000000c19111002300000000000000000000000000000000000000301a1300e49111000000000000000000f491110002000000000000000000000000000000049211000d000000010600000000000091d912000700000000000000a1f512000400000000000000000000000000000000000000301a1300149211000000000000000000249211000100000000000000010000000c9811003d0000005665633c2850726f70496e6465782c20543a3a486173682c20543a3a4163636f756e744964293e0042000000000000000100000059000000c4971100480000002842616c616e63654f663c543e2c205665633c543a3a4163636f756e7449643e290000004200000000000000010000007e000000a397110021000000507265696d6167655374617475733c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265723e000012971100580000006a97110039000000c69611004c0000004200000000000000010000005700000046961100490000008f961100370000005265666572656e64756d496e666f3c543a3a426c6f636b4e756d6265722c20543a3a486173682c2042616c616e63654f663c543e3e0000004200000000000000010000005b000000199611002d000000566f74696e674f66566f74696e673c42616c616e63654f663c543e2c20543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e00004200000000000000010000007f0000006b95110057000000c29511005700000050726f787953746174653c543a3a4163636f756e7449643e4200000000000000010000005b000000fd9411004c00000049951100220000004c6f636b730000004200000000000000010000005b0000005294110057000000a994110054000000f293110056000000489411000a00000028543a3a486173682c20566f74655468726573686f6c64294200000000000000010000005b00000004931100560000005a93110055000000af93110029000000d89311001a000000426c61636b6c69737428543a3a426c6f636b4e756d6265722c205665633c543a3a4163636f756e7449643e294200000000000000010000007e0000007692110054000000ca9211003a00000043616e63656c6c6174696f6e730000004200000000000000010000005b0000002c9211004a000000205265636f7264206f6620616c6c2070726f706f73616c7320746861742068617665206265656e207375626a65637420746f20656d657267656e63792063616e63656c6c6174696f6e2e2041207265636f7264206f662077686f207665746f656420776861742e204d6170732070726f706f73616c206861736820746f206120706f737369626c65206578697374656e7420626c6f636b206e756d6265722028756e74696c207768656e206974206d6179206e6f742062652072657375626d69747465642920616e642077686f207665746f65642069742e20546865207265666572656e64756d20746f206265207461626c6564207768656e6576657220697420776f756c642062652076616c696420746f207461626c6520616e2065787465726e616c2070726f706f73616c2e20546869732068617070656e73207768656e2061207265666572656e64756d206e6565647320746f206265207461626c656420616e64206f6e65206f662074776f20636f6e646974696f6e7320617265206d65743a202d20604c6173745461626c656457617345787465726e616c60206973206066616c7365603b206f72202d20605075626c696350726f70736020697320656d7074792e205472756520696620746865206c617374207265666572656e64756d207461626c656420776173207375626d69747465642065787465726e616c6c792e2046616c7365206966206974207761732061207075626c69632070726f706f73616c2e204163636f756e747320666f7220776869636820746865726520617265206c6f636b7320696e20616374696f6e207768696368206d61792062652072656d6f76656420617420736f6d6520706f696e7420696e20746865206675747572652e205468652076616c75652069732074686520626c6f636b206e756d62657220617420776869636820746865206c6f636b206578706972657320616e64206d61792062652072656d6f7665642e2057686f2069732061626c6520746f20766f746520666f722077686f6d2e2056616c7565206973207468652066756e642d686f6c64696e67206163636f756e742c206b65792069732074686520766f74652d7472616e73616374696f6e2d73656e64696e67206163636f756e742e20416c6c20766f74657320666f72206120706172746963756c617220766f7465722e2057652073746f7265207468652062616c616e636520666f7220746865206e756d626572206f6620766f74657320746861742077652068617665207265636f726465642e20546865207365636f6e64206974656d2069732074686520746f74616c20616d6f756e74206f662064656c65676174696f6e732c20746861742077696c6c2062652061646465642e20496e666f726d6174696f6e20636f6e6365726e696e6720616e7920676976656e207265666572656e64756d2e20546865206c6f77657374207265666572656e64756d20696e64657820726570726573656e74696e6720616e20756e62616b6564207265666572656e64756d2e20457175616c20746f20605265666572656e64756d436f756e74602069662074686572652069736e2774206120756e62616b6564207265666572656e64756d2e20546865206e6578742066726565207265666572656e64756d20696e6465782c20616b6120746865206e756d626572206f66207265666572656e6461207374617274656420736f206661722e204d6170206f662068617368657320746f207468652070726f706f73616c20707265696d6167652c20616c6f6e6720776974682077686f207265676973746572656420697420616e64207468656972206465706f7369742e2054686520626c6f636b206e756d6265722069732074686520626c6f636b20617420776869636820697420776173206465706f73697465642e2054686f73652077686f2068617665206c6f636b65642061206465706f7369742e20546865207075626c69632070726f706f73616c732e20556e736f727465642e20546865207365636f6e64206974656d206973207468652070726f706f73616c277320686173682e20546865206e756d626572206f6620287075626c6963292070726f706f73616c7320746861742068617665206265656e206d61646520736f206661722e00000000000000d49911000f0000000000000006cf12000e00000000000000301a1300e49911000000000000000000f49911000500000000000000000000001c9a11000c0000000000000006cf12000e00000000000000301a1300ac9a11000000000000000000289a1100010000000000000000000000309a11000c0000000000000006cf12000e00000000000000301a1300ac9a110000000000000000003c9a1100010000000000000000000000449a11000e00000000000000b66c12000c00000000000000301a1300549a11000000000000000000649a11000100000000000000000000006c9a1100150000000000000006cf12000e00000000000000301a1300849a11000000000000000000949a11000100000000000000000000009c9a11000d0000000000000006cf12000e00000000000000301a1300ac9a11000000000000000000bc9a1100010000000000000000000000c49a11001300000000000000b66c12000c00000000000000301a1300d89a11000000000000000000e89a11000100000000000000456e6163746d656e74506572696f640042000000000000000100000080000000819c11005c000000301a130000000000dd9c11004c000000299d11005a000000839d1100270000004c61756e6368506572696f64489c110039000000566f74696e67506572696f641a9c11002e0000004d696e696d756d4465706f736974000042000000000000000100000081000000cd9b11004d00000046617374547261636b566f74696e67506572696f6400000042000000000000000100000082000000929b11003b000000436f6f6c6f6666506572696f64000000420000000000000001000000830000003a9b110058000000507265696d616765427974654465706f7369740042000000000000000100000084000000f09a11004a0000002054686520616d6f756e74206f662062616c616e63652074686174206d757374206265206465706f7369746564207065722062797465206f6620707265696d6167652073746f7265642e20506572696f6420696e20626c6f636b7320776865726520616e2065787465726e616c2070726f706f73616c206d6179206e6f742062652072652d7375626d6974746564206166746572206265696e67207665746f65642e204d696e696d756d20766f74696e6720706572696f6420616c6c6f77656420666f7220616e20656d657267656e6379207265666572656e64756d2e20546865206d696e696d756d20616d6f756e7420746f20626520757365642061732061206465706f73697420666f722061207075626c6963207265666572656e64756d2070726f706f73616c2e20486f77206f6674656e2028696e20626c6f636b732920746f20636865636b20666f72206e657720766f7465732e20486f77206f6674656e2028696e20626c6f636b7329206e6577207075626c6963207265666572656e646120617265206c61756e636865642e20546865206d696e696d756d20706572696f64206f66206c6f636b696e6720616e642074686520706572696f64206265747765656e20612070726f706f73616c206265696e6720617070726f76656420616e6420656e61637465642e2049742073686f756c642067656e6572616c6c792062652061206c6974746c65206d6f7265207468616e2074686520756e7374616b6520706572696f6420746f20656e73757265207468617420766f74696e67207374616b657273206861766520616e206f70706f7274756e69747920746f2072656d6f7665207468656d73656c7665732066726f6d207468652073797374656d20696e207468652063617365207768657265207468657920617265206f6e20746865206c6f73696e672073696465206f66206120766f74652e0000000000006246110006000000010500000000000006cf12000e000000000000005c9e11003a00000000000000000000000000000000000000301a1300989e11000000000000000000a89e110001000000000000000100000000000000b4441100060000000105000000000000cc8d12000700000000000000b09e11001b00000000000000000000000000000000000000301a1300cc9e11000000000000000000dc9e11000100000000000000000000005665633c4f7074696f6e3c5363686564756c65643c3c542061732054726169743e3a3a43616c6c2c20543a3a426c6f636b4e756d6265723e3e3e000042000000000000000100000059000000249f1100530000005461736b416464726573733c543a3a426c6f636b4e756d6265723e0042000000000000000100000085000000e49e110040000000204c6f6f6b75702066726f6d206964656e7469747920746f2074686520626c6f636b206e756d62657220616e6420696e646578206f6620746865207461736b2e204974656d7320746f2062652065786563757465642c20696e64657865642062792074686520626c6f636b206e756d626572207468617420746865792073686f756c64206265206578656375746564206f6e2e00696d2d6f6e6c696e653a6f66666c696e7573657220646f6573206e6f74206861766520616e206578697374696e672076657374696e67207363686564756c653b20712e652e642e00420000000c0000000400000086000000e09f110033000000080100000d0000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f76657374696e672f7372632f6c69622e72730034a0110035000000730500002d00000034a01100350000007a050000400000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f64656d6f63726163792f7372632f6c69622e727300000034a0110035000000460500002d00000072616e206f7574206f662067617320647572696e6720636f6e747261637420657865637574696f6e72657475726e2074797065206572726f7276616c69646174696f6e206572726f72636f6e7472616374207472617070656420647572696e6720657865637574696f6e707265636f6e646974696f6e3a20616c6c20696d706f7274732073686f756c6420626520636865636b656420616761696e737420746865207369676e617475726573206f6620636f72726573706f6e64696e670a09090909090966756e6374696f6e7320646566696e65642062792060646566696e655f656e762160206d6163726f206279207468652075736572206f6620746865206d6163726f3b0a0909090909097369676e617475726573206f662074686573652066756e6374696f6e7320646566696e6564206279206024706172616d73603b0a09090909090963616c6c7320616c77617973206d616465207769746820617267756d656e7473207479706573206f662077686963682061726520646566696e65642062792074686520636f72726573706f6e64696e6720696d706f7274733b0a09090909090974687573207479706573206f6620617267756d656e74732073686f756c6420626520657175616c20746f2074797065206c69737420696e206024706172616d736020616e640a0909090909096c656e677468206f6620617267756d656e74206c69737420616e642024706172616d732073686f756c6420626520657175616c3b0a0909090909097468757320746869732063616e206e6576657220626520604e6f6e65603b0a0909090909097165643b0a0909090909090000eca211004500000046000000110000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f636f6e7472616374732f7372632f7761736d2f656e765f6465662f6d6163726f732e7273657865632e7072656661625f6d6f64756c652e696e697469616c2063616e27742062652067726561746572207468616e20657865632e7072656661625f6d6f64756c652e6d6178696d756d3b0a09090909090974687573204d656d6f72793a3a6e6577206d757374206e6f74206661696c3b0a09090909090971656400000000000000c13711000a0000000000000004a41100010000000000000000000000aa37110017000000000000000ca41100010000000000000000000000a1371100090000000000000014a411000100000000000000b5a41100220000005ea41100570000001ca411004200000020416d6f756e74206265696e67207472616e7366657272656420697320746f6f206c6f7720746f2063726561746520612076657374696e67207363686564756c652e20416e206578697374696e672076657374696e67207363686564756c6520616c72656164792065786973747320666f722074686973206163636f756e7420746861742063616e6e6f7420626520636c6f6262657265642e20546865206163636f756e7420676976656e206973206e6f742076657374696e672e0000000000ea3a11000800000000000000e4a81100010000000000000000000000d2af12000f00000000000000eca81100010000000000000000000000e23a11000800000000000000f4a81100010000000000000000000000da3a11000800000000000000fca81100010000000000000000000000cb3a11000f0000000000000004a91100010000000000000000000000e1af120011000000000000000ca91100010000000000000000000000b83a1100130000000000000014a91100010000000000000000000000a73a110011000000000000001ca911000100000000000000000000009c3a11000b0000000000000024a91100010000000000000000000000923a11000a000000000000002ca91100010000000000000000000000853a11000d0000000000000034a911000100000000000000000000001bab12000c000000000000003ca911000100000000000000000000007b3a11000a0000000000000044a911000100000000000000000000006f3a11000c000000000000004ca911000100000000000000000000005e3a1100110000000000000054a91100010000000000000000000000533a11000b000000000000005ca91100010000000000000000000000a1af1200080000000000000064a911000100000000000000000000004b3a110008000000000000006ca911000100000000000000000000003c3a11000f0000000000000074a911000100000000000000000000002b3a110011000000000000007ca911000100000000000000000000001c3a11000f0000000000000084a91100010000000000000000000000113a11000b000000000000008ca91100010000000000000000000000083a1100090000000000000094a91100010000000000000000000000fe3911000a000000000000009ca91100010000000000000000000000f73911000700000000000000a4a91100010000000000000000000000ee3911000900000000000000aca91100010000000000000000000000e53911000900000000000000b4a91100010000000000000000000000dd3911000800000000000000bca91100010000000000000000000000d13911000c00000000000000c4a91100010000000000000000000000c03911001100000000000000cca9110001000000000000000000000027ab12000800000000000000d4a91100010000000000000000000000b73911000900000000000000dca91100010000000000000000000000a63911001100000000000000e4a91100010000000000000000000000993911000d00000000000000eca911000100000000000000000000008f3911000a00000000000000f4a911000200000000000000000000007e391100110000000000000004aa11000100000000000000000000007639110008000000000000000caa1100010000000000000035af11000e0000001daf11001800000011af11000c00000003af11000e000000ddae110026000000c7ae110016000000acae11001b00000081ae11002b00000074ae11000d0000005fae11001500000038ae11002700000028ae1100100000001cae11000c0000000eae11000e000000f7ad110017000000eaad11000d000000e0ad11000a000000d7ad110009000000c4ad110013000000a2ad11002200000091ad1100110000007cad11001500000053ad11002900000017ad11003c000000d8ac11003f0000008aac11004e00000046ac11004400000014ac110032000000e1ab110033000000beab11002300000095ab1100290000006bab11002a0000002bab11004000000002ab11002900000071aa110056000000c7aa11003b0000003aaa11003700000014aa1100260000002044656c65676174696f6e20746f206f6e6573656c66206d616b6573206e6f2073656e73652e2054686520696e7374616e74207265666572656e64756d206f726967696e2069732063757272656e746c7920646973616c6c6f7765642e20546865206163636f756e742063757272656e746c792068617320766f74657320617474616368656420746f20697420616e6420746865206f7065726174696f6e2063616e6e6f74207375636365656420756e74696c207468657365206172652072656d6f7665642c20656974686572207468726f7567682060756e766f746560206f722060726561705f766f7465602e20546865206163636f756e74206973206e6f742063757272656e746c792064656c65676174696e672e20546f6f206869676820612062616c616e6365207761732070726f7669646564207468617420746865206163636f756e742063616e6e6f74206166666f72642e20416e20756e657870656374656420696e746567657220756e646572666c6f77206f636375727265642e20416e20756e657870656374656420696e7465676572206f766572666c6f77206f636375727265642e20546865206163636f756e7420697320616c72656164792064656c65676174696e672e20546865206163746f7220686173206e6f207065726d697373696f6e20746f20636f6e647563742074686520616374696f6e2e2054686520676976656e206163636f756e7420646964206e6f7420766f7465206f6e20746865207265666572656e64756d2e20412070726f78792d64652d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206e6f74206163746976652e20412070726f78792d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206f70656e20746f20616e6f74686572206163636f756e742e20412070726f78792d70616972696e672077617320617474656d7074656420746f20616e206163636f756e74207468617420776173206e6f74206f70656e2e20546865206c6f636b206f6e20746865206163636f756e7420746f20626520756e6c6f636b656420686173206e6f742079657420657870697265642e2054686520746172676574206163636f756e7420646f6573206e6f7420686176652061206c6f636b2e204e6f2070726f706f73616c732077616974696e6720496e76616c696420707265696d61676520566f746520676976656e20666f7220696e76616c6964207265666572656e64756d20507265696d616765206e6f7420666f756e6420496d6d696e656e7420546f6f206561726c79204e6f7420696d6d696e656e7420507265696d61676520616c7265616479206e6f746564204e6f742064656c6567617465642057726f6e672070726f787920416c726561647920612070726f7879204964656e74697479206d6179206e6f74207665746f20612070726f706f73616c207477696365204e6f2065787465726e616c2070726f706f73616c20496e76616c69642068617368204e6578742065787465726e616c2070726f706f73616c206e6f742073696d706c65206d616a6f726974792050726f706f73616c207374696c6c20626c61636b6c69737465642050726f706f73616c20616c7265616479206d6164652043616e6e6f742063616e63656c207468652073616d652070726f706f73616c20747769636520556e6b6e6f776e20696e646578204e6f7420612070726f78792050726f706f73616c20646f6573206e6f742065786973742056616c756520746f6f206c6f77617373657274696f6e206661696c65643a2073656c662e686569676874203e2030617373657274696f6e206661696c65643a2073656c662e6c656e2829203e203094af110056000000a5040000520000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962616c6c6f632f636f6c6c656374696f6e732f62747265652f6e6f64652e7273000094af110056000000b60400004c0000004368617267655472616e73616374696f6e5061796d656e745072697374696e65436f6465436f646553746f72616765436f6e7472616374496e666f4f66526563656e7448696e7473506f7374496e666f3a2000000000000090b0110004000000000000000000000094b011000e000000000000000a000000f50000000300000000000000a4b011000c00000000000000010000006e6f64657375627374726174652d6e6f64650000df6acb689907609b0300000037e397fc7c91f5e40100000040fe3ad401f8959a04000000d2bc9897eed08f1502000000f78b278be53f454c02000000ed99c5acb25eedf502000000cbca25e39f14238702000000687ad44ad37f03c201000000bc9d89904f5b923f0100000068b66ba122c93fa70100000037c8bb1350a9a2a801000000ab3c0572291feb8b010000006772616e62616265696d6f6e617564690000000040787d010065cd1d00e1f505d85aae1ec0542205b0508f1f38e4750488467020d853e903603c5121d0bf760338323222a8591903402013236039cd02480ef423a82a8f0268f8d42470955c02b8dab525c05a3302d8c4962648bd1102e0b27727a855f601e8a05828e8fedf0180773929c0cacd01586d1a2af8f1be019053fb2a50d8b201d00edc2be0fca80138edbc2c48f2a001e06d9d2d80669a01c80d7e2e500f9501c0575e2f08b6900140323f30e0278d0148202031b0418a0108a3ff3120e8870120bedf32f0fb85013856c03398698401f0fda03478218301b8d87f35d8178201d8c26036183d8101b8223e37508d800188d21c38c8fc7f0168b5f93898877f01a829d139d8297f0120d6ab3ab8db7e0168ae803b389d7e0100ca9a3b68957e010000000051e211000600000000000000870000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000890000000000000000000000000000008a0000000000000000000000000000008b000000000000000000000000000000a8be110007000000000000008c000000000000000000000000000000000000000000000000000000000000008d0000000000000000000000000000008e0000000000000000000000000000008f00000000000000000000000000000090000000000000000000000000000000a9e81200040000000000000091000000000000000000000000000000000000000000000000000000000000008f00000000000000000000000200000000000000000000000000000000000000920000000000000000000000000000008f000000000000000000000000000000d1f71200090000000000000093000000000000000000000000000000000000000000000000000000000000009400000000000000000000000200000000000000000000000000000000000000950000000000000000000000000000008f00000000000000000000000000000093e812000a00000000000000960000000000000000000000000000000000000000000000000000000000000097000000000000000000000002000000000000000000000000000000000000008f00000000000000000000000000000098000000000000000000000000000000afbe1100070000000000000099000000000000000000000000000000000000000000000000000000000000009a0000000000000000000000000000009b0000000000000000000000000000008f0000000000000000000000000000008f000000000000000000000000000000b6be110008000000000000009c000000000000000000000000000000000000000000000000000000000000009d0000000000000000000000000000009e0000000000000000000000000000009f000000000000000000000000000000a0000000000000000000000000000000e3f712001200000000000000a1000000000000000000000000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000000a20000000000000000000000000000008f000000000000000000000000000000f7f612000700000000000000a300000000000000000000000000000000000000000000000000000000000000a4000000000000000000000000000000a5000000000000000000000000000000a6000000000000000000000000000000a7000000000000000000000000000000a3f612000700000000000000a800000000000000000000000000000000000000000000000000000000000000a9000000000000000000000000000000aa0000000000000000000000000000008f000000000000000000000000000000ab000000000000000000000000000000d9f112000900000000000000ac00000000000000000000000000000000000000000000000000000000000000ad000000000000000000000000000000ae000000000000000000000000000000af000000000000000000000000000000b0000000000000000000000000000000bebe11000700000000000000b100000000000000000000000000000000000000000000000000000000000000b2000000000000000000000000000000b30000000000000000000000000000008f000000000000000000000000000000b4000000000000000000000000000000c5be11001200000000000000b500000000000000000000000000000000000000000000000000000000000000b2000000000000000000000000000000b30000000000000000000000000000008f000000000000000000000000000000b4000000000000000000000000000000d7be11000900000000000000b600000000000000000000000000000000000000000000000000000000000000b7000000000000000000000000000000b8000000000000000000000000000000b9000000000000000000000000000000ba000000000000000000000000000000e0be11001300000000000000bb00000000000000000000000000000000000000000000000000000000000000bc000000000000000000000000000000bd0000000000000000000000000000008f0000000000000000000000000000008f0000000000000000000000000000003ef212000f000000020000000000000000000000000000000000000000000000000000000000000000000000be00000000000000000000000200000000000000000000000000000000000000bf000000000000000000000000000000c0000000000000000000000000000000f3be11000700000000000000c100000000000000000000000000000000000000000000000000000000000000c2000000000000000000000000000000c30000000000000000000000000000008f000000000000000000000000000000c400000000000000000000000000000006f812000800000000000000c500000000000000000000000000000000000000000000000000000000000000c6000000000000000000000000000000c7000000000000000000000000000000c8000000000000000000000000000000c900000000000000000000000000000071ec12000900000000000000ca00000000000000000000000000000000000000000000000000000000000000cb000000000000000000000000000000cc000000000000000000000000000000cd000000000000000000000000000000ce000000000000000000000000000000d52112000400000000000000cf00000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000d10000000000000000000000000000008f000000000000000000000000000000d200000000000000000000000000000008f412000800000000000000d300000000000000000000000000000000000000000000000000000000000000d4000000000000000000000000000000d50000000000000000000000000000008f000000000000000000000000000000d60000000000000000000000000000007de81200120000000200000000000000000000000000000000000000000000000000000000000000000000008f000000000000000000000002000000000000000000000000000000000000008f0000000000000000000000000000008f00000000000000000000000000000022f412000800000000000000d7000000000000000000000000000000000000000000000000000000000000008f000000000000000000000000000000d80000000000000000000000000000008f0000000000000000000000000000008f00000000000000000000000000000082b412001800000000000000d9000000000000000000000000000000000000000000000000000000000000008f000000000000000000000002000000000000000000000000000000000000008f0000000000000000000000000000008f000000000000000000000000000000fabe11000800000000000000da00000000000000000000000000000000000000000000000000000000000000db000000000000000000000000000000dc000000000000000000000000000000dd000000000000000000000000000000de000000000000000000000000000000a20d12000700000000000000df00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000e1000000000000000000000000000000e2000000000000000000000000000000e300000000000000000000000000000078d112000800000000000000e400000000000000000000000000000000000000000000000000000000000000e5000000000000000000000000000000e60000000000000000000000000000008f000000000000000000000000000000e700000000000000000000000000000002bf11000700000000000000e800000000000000000000000000000000000000000000000000000000000000e9000000000000000000000000000000ea000000000000000000000000000000eb000000000000000000000000000000ec00000000000000000000000000000009bf11000900000000000000ed000000000000000000000000000000000000000000000000000000000000008f000000000000000000000000000000ee0000000000000000000000000000008f0000000000000000000000000000008f00000000000000000000005574696c697479496e646963657342616c616e636573436f756e63696c546563686e6963616c436f6d6d6974746565456c656374696f6e73546563686e6963616c4d656d626572736869704772616e6470614964656e7469747956657374696e675363686564756c6572000000000000bcbf11001600000000000000d4bf1100010000000000000000000000dcbf11001500000000000000f4bf1100010000000000000000000000fcbf1100150000000000000014c011000100000000000000000000001cc011001a0000000000000038c0110001000000000000000000000040c01100100000000000000050c0110001000000000000000000000058c01100150000000000000070c011000100000000000000496e76616c69645363686564756c6556657273696f6e00007cc1110041000000496e76616c6964537572636861726765436c61696d00000027c1110055000000496e76616c6964536f75726365436f6e7472616374000000f0c0110037000000496e76616c696444657374696e6174696f6e436f6e74726163740000bfc0110031000000496e76616c6964546f6d6273746f6e65a7c0110018000000496e76616c6964436f6e74726163744f726967696e00000078c011002f00000020416e206f726967696e20547269654964207772697474656e20696e207468652063757272656e7420626c6f636b2e20546f6d6273746f6e657320646f6e2774206d617463682e2043616e6e6f7420726573746f726520746f206e6f6e6578697374696e67206f7220616c69766520636f6e74726163742e2043616e6e6f7420726573746f72652066726f6d206e6f6e6578697374696e67206f7220746f6d6273746f6e6520636f6e74726163742e20416e206f726967696e206d757374206265207369676e6564206f7220696e686572656e7420616e6420617578696c696172792073656e646572206f6e6c792070726f7669646564206f6e20696e686572656e742e2041206e6577207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652063757272656e74206f6e652e0000000000000080c31100130000000000000006cf12000e00000000000000301a130094c311000000000000000000a4c31100040000000000000000000000c4c311001000000000000000b66c12000c00000000000000301a13001cc411000000000000000000d4c31100010000000000000000000000dcc31100110000000000000060dc12000300000000000000301a1300f0c31100000000000000000000c4110002000000000000000000000010c411000b00000000000000b66c12000c00000000000000301a13001cc4110000000000000000002cc4110001000000000000000000000034c411001100000000000000b66c12000c00000000000000301a130048c41100000000000000000058c4110007000000000000000000000090c411000f00000000000000b66c12000c00000000000000301a1300a0c411000000000000000000b0c41100020000000000000000000000c0c41100080000000000000060dc12000300000000000000301a1300c8c411000000000000000000d8c41100020000000000000000000000e8c411000c0000000000000060dc12000300000000000000301a1300f4c41100000000000000000004c5110001000000000000005369676e6564436c61696d48616e646963617000420000000000000001000000ef0000007fc8110038000000301a130000000000b7c8110043000000fac811001a000000546f6d6273746f6e654465706f7369744ac811003500000053746f7261676553697a654f6666736574000000420000000000000001000000f0000000ccc711005500000021c811002900000052656e744279746546656500420000000000000001000000680000007fc711004d00000052656e744465706f7369744f6666736574000000420000000000000001000000f100000007c611004100000048c6110016000000301a1300000000005ec611005a000000b8c61100560000000ec711005300000061c711001e00000053757263686172676552657761726400420000000000000001000000f2000000b4c5110039000000edc511001a0000004d61784465707468420000000000000001000000f30000005ac511004c000000a6c511000e0000004d617856616c756553697a65420000000000000001000000f40000000cc511004e00000020546865206d6178696d756d2073697a65206f6620612073746f726167652076616c756520696e2062797465732e204120726561736f6e61626c652064656661756c74206973203136204b69422e20546865206d6178696d756d206e657374696e67206c6576656c206f6620612063616c6c2f696e7374616e746961746520737461636b2e204120726561736f6e61626c652064656661756c742076616c7565206973203130302e205265776172642074686174206973207265636569766564206279207468652070617274792077686f736520746f75636820686173206c656420746f2072656d6f76616c206f66206120636f6e74726163742e2054686520616d6f756e74206f662066756e6473206120636f6e74726163742073686f756c64206465706f73697420696e206f7264657220746f206f66667365742074686520636f7374206f66206f6e6520627974652e204c6574277320737570706f736520746865206465706f73697420697320312c303030204255202862616c616e636520756e697473292f6279746520616e64207468652072656e7420697320312042552f627974652f6461792c207468656e206120636f6e7472616374207769746820312c3030302c3030302042552074686174207573657320312c303030206279746573206f662073746f7261676520776f756c6420706179206e6f2072656e742e20427574206966207468652062616c616e6365207265647563656420746f203530302c30303020425520616e64207468652073746f7261676520737461796564207468652073616d6520617420312c3030302c207468656e20697420776f756c6420706179203530302042552f6461792e205072696365206f6620612062797465206f662073746f7261676520706572206f6e6520626c6f636b20696e74657276616c2e2053686f756c642062652067726561746572207468616e20302e2053697a65206f66206120636f6e7472616374206174207468652074696d65206f6620696e7374616e74696174696f6e2e205468697320697320612073696d706c652077617920746f20656e73757265207468617420656d70747920636f6e747261637473206576656e7475616c6c7920676574732064656c657465642e20546865206d696e696d756d20616d6f756e7420726571756972656420746f2067656e6572617465206120746f6d6273746f6e652e204e756d626572206f6620626c6f636b2064656c617920616e2065787472696e73696320636c61696d20737572636861726765206861732e205768656e20636c61696d207375726368617267652069732063616c6c656420627920616e2065787472696e736963207468652072656e7420697320636865636b656420666f722063757272656e745f626c6f636b202d2064656c61790000000074ca110008000000000000007cca110003000000000000000000000094ca11000100000000000000000000009cca11000c0000000000000098ad1200020000000000000000000000a8ca1100010000000000000000000000b0ca1100070000000000000048121200020000000000000000000000b8ca1100060000000000000000000000e8ca11000800000000000000f0ca110005000000000000000000000018cb110009000000000000000000000060cb11000a00000000000000d4b112000100000000000000000000006ccb110001000000000000000000000074cb11000f00000000000000f012120001000000000000000000000084cb11000100000000000000000000008ccb11000a000000000000004812120002000000000000000000000098cb1100020000000000000000000000a8cb11001100000000000000bccb1100020000000000000000000000cccb110001000000000000005472616e7366657220af12000900000020af120009000000f6151200070000004bcf11005a000000496e7374616e74696174656414cf11003700000045766963746564004bce110039000000301a1300000000000ecd110009000000301a13000000000084ce110043000000c7ce11004d000000526573746f72656420af12000900000020af12000900000089b2120004000000f615120007000000a1f5120004000000dfcc11002f000000301a1300000000000ecd110009000000301a13000000000017cd11003d00000054cd11003b0000008fcd11003a000000c9cd1100460000000fce11003c000000436f646553746f7265640000b1cc11002e0000005363686564756c65557064617465640081cc11003000000044697370617463686564000016cc11004e00000064cc11001d000000436f6e7472616374457865637574696f6e00000020af120009000000cc8d120007000000d4cb11004200000020416e206576656e74206465706f73697465642075706f6e20657865637574696f6e206f66206120636f6e74726163742066726f6d20746865206163636f756e742e20412063616c6c2077617320646973706174636865642066726f6d2074686520676976656e206163636f756e742e2054686520626f6f6c207369676e616c73207768657468657220697420776173207375636365737366756c20657865637574696f6e206f72206e6f742e20547269676765726564207768656e207468652063757272656e74207363686564756c6520697320757064617465642e20436f646520776974682074686520737065636966696564206861736820686173206265656e2073746f7265642e20526573746f726174696f6e20666f72206120636f6e747261637420686173206265656e20696e697469617465642e202320506172616d73202d2060646f6e6f72603a20604163636f756e744964603a204163636f756e74204944206f662074686520726573746f72696e6720636f6e7472616374202d206064657374603a20604163636f756e744964603a204163636f756e74204944206f662074686520726573746f72656420636f6e7472616374202d2060636f64655f68617368603a206048617368603a20436f64652068617368206f662074686520726573746f72656420636f6e7472616374202d206072656e745f616c6c6f77616e63653a206042616c616e6365603a2052656e7420616c6c6f77616e6365206f662074686520726573746f72656420636f6e7472616374202d206073756363657373603a2060626f6f6c603a20547275652069662074686520726573746f726174696f6e20776173207375636365737366756c20436f6e747261637420686173206265656e206576696374656420616e64206973206e6f7720696e20746f6d6273746f6e652073746174652e202d2060636f6e7472616374603a20604163636f756e744964603a20546865206163636f756e74204944206f6620746865206576696374656420636f6e74726163742e202d2060746f6d6273746f6e65603a2060626f6f6c603a205472756520696620746865206576696374656420636f6e7472616374206c65667420626568696e64206120746f6d6273746f6e652e20436f6e7472616374206465706c6f7965642062792061646472657373206174207468652073706563696669656420616464726573732e205472616e736665722068617070656e6564206066726f6d6020746f2060746f60207769746820676976656e206076616c7565602061732070617274206f662061206063616c6c60206f722060696e7374616e7469617465602e0000000000000084d011000f0000000000000094d01100010000000000000000000000acd01100030000000000000000000000c4d01100080000000000000040ea1100010000000000000000000000ccd01100020000000000000000000000fbea12000400000000000000dcd011000400000000000000000000003cd1110007000000000000000000000074d111000b0000000000000080d11100040000000000000000000000e0d111000a000000000000000000000030d211000f0000000000000040d2110002000000000000000000000070d2110005000000000000007570646174655f7363686564756c650000000000a8d811000800000000000000b0d811000800000038d811002d000000301a13000000000065d81100430000007075745f636f6465acd711005700000003d811003500000000000000b2d311000400000000000000f32012002300000000000000aa4d12000500000000000000807512001500000000000000ead511000900000000000000f3d511000c0000000000000013d611000400000000000000cc8d12000700000017d6110042000000301a13000000000059d611004a000000a3d611002c000000cfd611004600000015d711005200000067d7110045000000696e7374616e74696174650000000000e1d511000900000000000000807512001500000000000000ead511000900000000000000f3d511000c00000000000000ffd51100090000000000000008d611000b0000000000000013d611000400000000000000cc8d120007000000c0d311006f000000301a1300000000002fd4110026000000301a13000000000055d4110050000000a5d4110041000000e6d411005b00000041d511005700000098d511002a000000c2d511001f000000636c61696d5f7375726368617267650000000000b2d3110004000000000000007ac312000c00000000000000b6d311000a00000000000000dddb12001400000098d211005c000000f4d2110045000000301a13000000000039d311004e00000087d311002b00000020416c6c6f777320626c6f636b2070726f64756365727320746f20636c61696d206120736d616c6c2072657761726420666f72206576696374696e67206120636f6e74726163742e204966206120626c6f636b2070726f6475636572206661696c7320746f20646f20736f2c206120726567756c61722075736572732077696c6c20626520616c6c6f77656420746f20636c61696d20746865207265776172642e20496620636f6e7472616374206973206e6f742065766963746564206173206120726573756c74206f6620746869732063616c6c2c206e6f20616374696f6e73206172652074616b656e20616e64207468652073656e646572206973206e6f7420656c696769626c6520666f7220746865207265776172642e646573746175785f73656e64657220496e7374616e7469617465732061206e657720636f6e74726163742066726f6d207468652060636f646568617368602067656e65726174656420627920607075745f636f6465602c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e20496e7374616e74696174696f6e20697320657865637574656420617320666f6c6c6f77733a202d205468652064657374696e6174696f6e206164647265737320697320636f6d7075746564206261736564206f6e207468652073656e64657220616e642068617368206f662074686520636f64652e202d2054686520736d6172742d636f6e7472616374206163636f756e7420697320637265617465642061742074686520636f6d707574656420616464726573732e202d20546865206063746f725f636f64656020697320657865637574656420696e2074686520636f6e74657874206f6620746865206e65776c792d63726561746564206163636f756e742e204275666665722072657475726e656420202061667465722074686520657865637574696f6e206973207361766564206173207468652060636f646560206f6620746865206163636f756e742e205468617420636f64652077696c6c20626520696e766f6b656420202075706f6e20616e792063616c6c2072656365697665642062792074686973206163636f756e742e202d2054686520636f6e747261637420697320696e697469616c697a65642e656e646f776d656e746761735f6c696d6974436f6d706163743c4761733e636f64655f68617368436f6465486173683c543e64617461204d616b657320612063616c6c20746f20616e206163636f756e742c206f7074696f6e616c6c79207472616e7366657272696e6720736f6d652062616c616e63652e202a20496620746865206163636f756e74206973206120736d6172742d636f6e7472616374206163636f756e742c20746865206173736f63696174656420636f64652077696c6c20626520657865637574656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e202a20496620746865206163636f756e74206973206120726567756c6172206163636f756e742c20616e792076616c75652077696c6c206265207472616e736665727265642e202a204966206e6f206163636f756e742065786973747320616e64207468652063616c6c2076616c7565206973206e6f74206c657373207468616e20606578697374656e7469616c5f6465706f736974602c206120726567756c6172206163636f756e742077696c6c206265206372656174656420616e6420616e792076616c75652077696c6c206265207472616e736665727265642e2053746f7265732074686520676976656e2062696e617279205761736d20636f646520696e746f2074686520636861696e27732073746f7261676520616e642072657475726e73206974732060636f646568617368602e20596f752063616e20696e7374616e746961746520636f6e747261637473206f6e6c7920776974682073746f72656420636f64652e205570646174657320746865207363686564756c6520666f72206d65746572696e6720636f6e7472616374732e20546865207363686564756c65206d7573742068617665206120677265617465722076657273696f6e207468616e207468652073746f726564207363686564756c652e7363686564756c655363686564756c650000000062ec12000f0000000000000000000000b0d811000800000000000000000000000000000000000000000000000000000000000000301a130070da1100000000000000000080da11000100000000000000010000000000000014b011000c000000010600000000000008d611000b00000000000000cc8d12000700000000000000000000000000000000000000301a130088da1100000000000000000098da11000100000000000000000000000000000020b011000b000000010600000000000008d611000b00000000000000a0da11001600000000000000000000000000000000000000301a1300e8da11000000000000000000b8da1100010000000000000000000000000000007aec12000e000000000000000000000010f111000300000000000000000000000000000000000000000000000000000000000000301a1300c0da11000000000000000000d0da1100010000000000000001000000000000002bb011000e00000001050000000000007ac312000c00000000000000d8da11000f00000000000000000000000000000000000000301a1300e8da11000000000000000000f8da1100010000000000000000000000420000000000000001000000f5000000f1db110025000000420000000000000001000000f600000098db1100590000007761736d3a3a5072656661625761736d4d6f64756c6500003fdb1100590000004200000000000000010000006e0000002adb110015000000436f6e7472616374496e666f3c543e004200000000000000010000005b00000000db11002a0000002054686520636f6465206173736f6369617465642077697468206120676976656e206163636f756e742e20546865207375627472696520636f756e7465722e2041206d617070696e67206265747765656e20616e206f726967696e616c20636f6465206861736820616e6420696e737472756d656e746564207761736d20636f64652c20726561647920666f7220657865637574696f6e2e2041206d617070696e672066726f6d20616e206f726967696e616c20636f6465206861736820746f20746865206f726967696e616c20636f64652c20756e746f756368656420627920696e737472756d656e746174696f6e2e2043757272656e7420636f7374207363686564756c6520666f7220636f6e7472616374732e00000000000050dc11000e0000000000000060dc110001000000000000000000000068dc1100070000000000000070dc11000100000000000000416c72656164795570646174656400009cdc11003200000042616448696e740078dc1100240000002046696e616c697a6564206865696768742061626f766520626c6f636b206e756d6265722046696e616c2068696e74206d7573742062652075706461746564206f6e6c79206f6e636520696e2074686520626c6f636b00000000000040dd11000a0000000000000006cf12000e00000000000000301a13004cdd110000000000000000005cdd110001000000000000000000000064dd11000d0000000000000006cf12000e00000000000000301a130074dd1100000000000000000084dd1100010000000000000057696e646f7753697a650000420000000000000001000000f7000000d3dd1100460000005265706f72744c6174656e6379000000420000000000000001000000f80000008cdd110047000000205468652064656c617920616674657220776869636820706f696e74207468696e6773206265636f6d6520737573706963696f75732e2044656661756c7420697320313030302e20546865206e756d626572206f6620726563656e742073616d706c657320746f206b6565702066726f6d207468697320636861696e2e2044656661756c74206973203130312e0000000000000048de11000a0000000000000054de11000100000000000000000000006cde1100020000000000000066696e616c5f68696e74000000000000d4de11000400000000000000d8de1100170000007cde11003d000000b9de11001b0000002048696e7420746861742074686520617574686f72206f66207468697320626c6f636b207468696e6b732074686520626573742066696e616c697a656420626c6f636b2069732074686520676976656e206e756d6265722e68696e74436f6d706163743c543a3a426c6f636b4e756d6265723e000000000028df11001200000000000000b66c12000c00000000000000301a13003cdf110000000000000000004cdf110001000000000000005472616e73616374696f6e427974654665650000420000000000000001000000f900000054df110043000000205468652066656520746f206265207061696420666f72206d616b696e672061207472616e73616374696f6e3b20746865207065722d6279746520706f7274696f6e2e0000000000f5f71200110000000000000000000000f0df11000a00000000000000000000000000000000000000000000000000000000000000301a1300fcdf11000000000000000000301a13000000000000000000010000004d756c7469706c69657200004200000000000000010000005f0000005570646174654f72646572656448696e74734d656469616e616c77617973206174206c65617374206f6e6520726563656e742073616d706c653b20716564000020e111003c0000006f0000002b000000726563656e7420616e64206f72646572656420636f6e7461696e207468652073616d65206974656d733b2071656400004200000004000000040000000d00000020e111003c0000007a0000001b0000007072756e696e672064696374617465642062792077696e646f775f73697a6520776869636820697320616c776179732073617475726174656420617420313b207165640020e111003c000000950000001100000020e111003c0000008f0000001900000020e111003c00000090000000190000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f66696e616c6974792d747261636b65722f7372632f6c69622e72734e6f6e5a65726f526566436f756e744e6f6e44656661756c74436f6d706f736974654661696c6564546f4578747261637452756e74696d6556657273696f6e5370656356657273696f6e4e65656473546f496e637265617365496e76616c6964537065634e616d653a65787472696e7369635f696e64657866696c6c5f626c6f636b72656d61726b7365745f686561705f70616765737365745f636f64657365745f636f64655f776974686f75745f636865636b737365745f6368616e6765735f747269655f636f6e6669677365745f73746f726167656b696c6c5f73746f726167656b696c6c5f7072656669787375696369646553797374656d4163636f756e74426c6f636b486173684e756d626572506172656e744861736845787472696e73696373526f6f74446967657374000000000068e31100100000000000000078e3110001000000000000000000000080e3110001000000000000000000000088e311000f0000000000000098e31100020000000000000000000000a8e31100010000000000000000000000b0e311000b00000000000000301a1300000000000000000000000000bce31100010000000000000000000000c4e311000a0000000000000074ad1200010000000000000000000000d0e31100010000000000000000000000d8e311000d0000000000000074ad1200010000000000000000000000e8e31100010000000000000045787472696e736963537563636573734ce411000c00000058e411002500000045787472696e7369634661696c656400e00e13000d0000004ce411000c00000037e4110015000000436f6465557064617465640022e41100150000004e65774163636f756e74000007e411001b0000004b696c6c65644163636f756e74000000f0e311001700000020416e206163636f756e7420776173207265617065642e2041206e6577206163636f756e742077617320637265617465642e20603a636f6465602077617320757064617465642e20416e2065787472696e736963206661696c65642e4469737061746368496e666f20416e2065787472696e73696320636f6d706c65746564207375636365737366756c6c792e6164645f6d656d62657272656d6f76655f6d656d626572737761705f6d656d62657272657365745f6d656d626572736368616e67655f6b65797365745f7072696d65636c6561725f7072696d65000000000000d4e511000b00000000000000301a1300000000000000000000000000e0e51100010000000000000000000000e8e511000d00000000000000301a1300000000000000000000000000f8e5110001000000000000000000000000e611000e00000000000000301a130000000000000000000000000010e6110001000000000000000000000018e611000c00000000000000301a130000000000000000000000000024e61100010000000000000000000000180d12000a00000000000000301a13000000000000000000000000002ce6110001000000000000000000000034e6110005000000000000003ce6110001000000000000000000000044e6110001000000000000004d656d62657241646465640071e71100390000004d656d62657252656d6f76656400000036e711003b0000004d656d62657273537761707065640000ffe61100370000004d656d626572735265736574b9e611004600000097e611002200000044756d6d7900000068e611002f0000004ce611001c000000205068616e746f6d206d656d6265722c206e6576657220757365642e73705f7374643a3a6d61726b65723a3a5068616e746f6d446174613c284163636f756e7449642c204576656e74293e204f6e65206f6620746865206d656d6265727327206b657973206368616e6765642e20546865206d656d62657273686970207761732072657365743b2073656520746865207472616e73616374696f6e20666f722077686f20746865206e6577207365742069732e2054776f206d656d62657273207765726520737761707065643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732072656d6f7665643b2073656520746865207472616e73616374696f6e20666f722077686f2e2054686520676976656e206d656d626572207761732061646465643b2073656520746865207472616e73616374696f6e20666f722077686f2e0000420000000400000004000000fa000000420000000000000001000000460000004576656e74734576656e74546f7069637300000000000000d4e111000a0000000000000098e91100010000000000000000000000b0e91100010000000000000000000000dee111000600000000000000b8e91100010000000000000000000000d0e91100050000000000000000000000e4e111000e00000000000000f8e9110001000000000000000000000010ea1100060000000000000000000000f2e11100080000000000000040ea110001000000000000000000000058ea1100080000000000000000000000fae11100170000000000000040ea110001000000000000000000000098ea110007000000000000000000000011e211001700000000000000d0ea1100010000000000000000000000e8ea110007000000000000000000000028e211000b0000000000000020eb110001000000000000000000000038eb110006000000000000000000000033e211000c0000000000000068eb110001000000000000000000000080eb11000600000000000000000000003fe211000b00000000000000b0eb1100010000000000000000000000c8eb11000600000000000000000000004ae211000700000000000000301a1300000000000000000000000000f8eb110007000000000000000000000077f1110006000000000000007df111000700000035f1110042000000000000002ef111000700000000000000cc8d12000700000013f111001b000000301a130000000000f5bd12000b000000adec11000900000044be12000c000000000000000bf11100050000000000000010f1110003000000b9f011003f000000301a130000000000f5bd12000b000000adec110009000000f8f011001300000044be12000c00000000000000b5f011000400000000000000cc8d120007000000f0ef11001a000000301a130000000000f5bd12000b0000000af011004d000000c3ef11002200000057f011005e000000e5ef11000b00000044be12000c00000058ef110047000000301a130000000000f5bd12000b0000009fef110024000000c3ef110022000000e5ef11000b00000044be12000c0000000000000025ef1100130000000000000038ef1100200000005fee110028000000301a130000000000f5bd12000b00000087ee110026000000adee11002c000000d9ee11004c00000044be12000c000000000000004dee1100050000000000000052ee11000d000000eeed11001b000000301a130000000000f5bd12000b00000009ee1100250000002eee11001f00000044be12000c00000000000000a79612000400000000000000e6ed11000800000070ed11001e000000301a130000000000f5bd12000b0000008eed11003f000000cded11001900000044be12000c000000000000006aed110006000000000000003422120003000000d5ec110045000000301a130000000000f5bd12000b0000001aed11003700000051ed11001900000044be12000c00000030ec11005900000089ec110024000000301a130000000000f5bd12000b000000adec110009000000b6ec11001f00000044be12000c000000204b696c6c207468652073656e64696e67206163636f756e742c20617373756d696e6720746865726520617265206e6f207265666572656e636573206f75747374616e64696e6720616e642074686520636f6d706f73697465206461746120697320657175616c20746f206974732064656661756c742076616c75652e202d20604f28312960202d20312073746f72616765207265616420616e642064656c6574696f6e2e204b696c6c20616c6c2073746f72616765206974656d7320776974682061206b657920746861742073746172747320776974682074686520676976656e207072656669782e202d20604f285029602077686572652060506020616d6f756e74206f66206b657973207769746820707265666978206070726566697860202d206050602073746f726167652064656c6574696f6e732e707265666978204b696c6c20736f6d65206974656d732066726f6d2073746f726167652e202d20604f28564b296020776865726520605660206c656e677468206f6620606b6579736020616e6420604b60206c656e677468206f66206f6e65206b6579202d206056602073746f726167652064656c6574696f6e732e5665633c4b65793e2053657420736f6d65206974656d73206f662073746f726167652e202d20604f2849296020776865726520604960206c656e677468206f6620606974656d7360202d206049602073746f72616765207772697465732028604f28312960292e6974656d735665633c4b657956616c75653e2053657420746865206e6577206368616e676573207472696520636f6e66696775726174696f6e2e202d20604f2844296020776865726520604460206c656e677468206f66206044696765737460202d20312073746f72616765207772697465206f722064656c6574652028636f64656320604f28312960292e202d20312063616c6c20746f20606465706f7369745f6c6f67603a20604f284429602028776869636820646570656e6473206f6e20746865206c656e677468206f66206044696765737460296368616e6765735f747269655f636f6e6669674f7074696f6e3c4368616e67657354726965436f6e66696775726174696f6e3e2053657420746865206e65772072756e74696d6520636f646520776974686f757420646f696e6720616e7920636865636b73206f662074686520676976656e2060636f6465602e202d20604f2843296020776865726520604360206c656e677468206f662060636f646560202d20312073746f726167652077726974652028636f64656320604f28432960292e202d2031206576656e742e2053657420746865206e65772072756e74696d6520636f64652e202d20604f2843202b2053296020776865726520604360206c656e677468206f662060636f64656020616e642060536020636f6d706c6578697479206f66206063616e5f7365745f636f646560202d20312063616c6c20746f206063616e5f7365745f636f6465603a20604f28532960202863616c6c73206073705f696f3a3a6d6973633a3a72756e74696d655f76657273696f6e6020776869636820697320657870656e73697665292e636f64652053657420746865206e756d626572206f6620706167657320696e2074686520576562417373656d626c7920656e7669726f6e6d656e74277320686561702e202d20312073746f726167652077726974652e7061676573753634204d616b6520736f6d65206f6e2d636861696e2072656d61726b2e5f72656d61726b204120646973706174636820746861742077696c6c2066696c6c2074686520626c6f636b2077656967687420757020746f2074686520676976656e20726174696f2e5f726174696f50657262696c6c0000000057e211000700000001020000000000007ac312000c00000000000000acf611002500000000000000000000000000000000000000301a1300d4f611000000000000000000e4f6110001000000000000000100000000000000ecf611000e000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a130048f711000000000000000000fcf611000100000000000000000000000000000004f7110013000000000000000000000017f711000600000000000000000000000000000000000000000000000000000000000000301a130020f71100000000000000000030f711000100000000000000000000000000000038f7110010000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a130048f71100000000000000000058f71100010000000000000000000000000000005ee2110009000000010500000000000006cf12000e0000000000000091d912000700000000000000000000000000000000000000301a1300a0f71100000000000000000060f711000100000000000000010000000000000068f711000d000000010500000000000060dc12000300000000000000cc8d12000700000000000000000000000000000000000000301a130078f71100000000000000000088f711000100000000000000010000000000000067e2110006000000000000000000000006cf12000e00000000000000000000000000000000000000000000000000000000000000301a13002cf81100000000000000000090f71100010000000000000001000000000000006de211000a000000000000000000000091d912000700000000000000000000000000000000000000000000000000000000000000301a1300a0f71100000000000000000098f711000100000000000000010000000000000077e211000e000000000000000000000091d912000700000000000000000000000000000000000000000000000000000000000000301a1300a0f711000000000000000000b0f711000100000000000000010000000000000085e21100060000000000000000000000b8f711000b00000000000000000000000000000000000000000000000000000000000000301a1300c4f711000000000000000000d4f7110001000000000000000100000000000000cce71100060000000000000000000000dcf711002300000000000000000000000000000000000000000000000000000000000000301a130000f81100000000000000000010f811000100000000000000010000000000000018f811000a000000000000000000000022f811000a00000000000000000000000000000000000000000000000000000000000000301a13002cf8110000000000000000003cf8110001000000000000000100000000000000d2e711000b000000010200000000000091d91200070000000000000044f811002100000000000000000000000000000000000000301a130068f81100000000000000000078f811000a000000000000000100000000000000c8f81100120000000000000000000000daf811001600000000000000000000000000000000000000000000000000000000000000301a1300f0f81100000000000000000000f911000100000000000000000000000000000008f911000e000000000000000000000016f911000500000000000000000000000000000000000000000000000000000000000000301a13001cf9110000000000000000002cf911000100000000000000000000004163636f756e74496e666f3c543a3a496e6465782c20543a3a4163636f756e74446174613e000000420000000000000001000000fb0000004afe11003a00000045787472696e736963436f756e7400001cfe11002e000000416c6c45787472696e736963735765696768745765696768740000004200000000000000010000005b000000d7fd110045000000416c6c45787472696e736963734c656e4200000000000000010000005b00000087fd11005000000061fd11002600000045787472696e736963446174610000004200000000000000010000005900000012fd11004f000000d0fc110042000000b4fc11001c000000420000000000000001000000fc0000006ffc1100450000004469676573744f663c543e004200000000000000010000005900000033fc11003c0000005665633c4576656e745265636f72643c543a3a4576656e742c20543a3a486173683e3e00420000000000000001000000590000000bfc1100280000004576656e74436f756e744576656e74496e64657842000000000000000100000057000000ddfb11002e0000005665633c28543a3a426c6f636b4e756d6265722c204576656e74496e646578293e00000042000000000000000100000059000000abf9110049000000f4f9110025000000301a13000000000019fa1100540000006dfa110051000000befa110039000000301a130000000000f7fa1100530000004afb1100530000009dfb1100400000004c61737452756e74696d65557067726164654c61737452756e74696d6555706772616465496e666f4200000000000000010000005b00000056f9110055000000457865637574696f6e50686173655068617365004200000000000000010000005b00000034f91100220000002054686520657865637574696f6e207068617365206f662074686520626c6f636b2e2053746f726573207468652060737065635f76657273696f6e6020616e642060737065635f6e616d6560206f66207768656e20746865206c6173742072756e74696d6520757067726164652068617070656e65642e204d617070696e67206265747765656e206120746f7069632028726570726573656e74656420627920543a3a486173682920616e64206120766563746f72206f6620696e6465786573206f66206576656e747320696e2074686520603c4576656e74733c543e3e60206c6973742e20416c6c20746f70696320766563746f727320686176652064657465726d696e69737469632073746f72616765206c6f636174696f6e7320646570656e64696e67206f6e2074686520746f7069632e205468697320616c6c6f7773206c696768742d636c69656e747320746f206c6576657261676520746865206368616e67657320747269652073746f7261676520747261636b696e67206d656368616e69736d20616e6420696e2063617365206f66206368616e67657320666574636820746865206c697374206f66206576656e7473206f6620696e7465726573742e205468652076616c756520686173207468652074797065206028543a3a426c6f636b4e756d6265722c204576656e74496e646578296020626563617573652069662077652075736564206f6e6c79206a7573742074686520604576656e74496e64657860207468656e20696e20636173652069662074686520746f70696320686173207468652073616d6520636f6e74656e7473206f6e20746865206e65787420626c6f636b206e6f206e6f74696669636174696f6e2077696c6c20626520747269676765726564207468757320746865206576656e74206d69676874206265206c6f73742e20546865206e756d626572206f66206576656e747320696e2074686520604576656e74733c543e60206c6973742e204576656e7473206465706f736974656420666f72207468652063757272656e7420626c6f636b2e20446967657374206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2045787472696e7369637320726f6f74206f66207468652063757272656e7420626c6f636b2c20616c736f2070617274206f662074686520626c6f636b206865616465722e2048617368206f66207468652070726576696f757320626c6f636b2e205468652063757272656e7420626c6f636b206e756d626572206265696e672070726f6365737365642e205365742062792060657865637574655f626c6f636b602e2045787472696e73696373206461746120666f72207468652063757272656e7420626c6f636b20286d61707320616e2065787472696e736963277320696e64657820746f206974732064617461292e204d6170206f6620626c6f636b206e756d6265727320746f20626c6f636b206861736865732e20546f74616c206c656e6774682028696e2062797465732920666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2077656967687420666f7220616c6c2065787472696e736963732070757420746f6765746865722c20666f72207468652063757272656e7420626c6f636b2e20546f74616c2065787472696e7369637320636f756e7420666f72207468652063757272656e7420626c6f636b2e205468652066756c6c206163636f756e7420696e666f726d6174696f6e20666f72206120706172746963756c6172206163636f756e742049442e000000009cff1100120000000000000017f711000600000000000000301a1300b0ff11000000000000000000c0ff1100010000000000000000000000c8ff11000800000000000000d0ff11000f00000000000000301a1300e0ff11000000000000000000f0ff1100010000000000000000000000f8ff1100140000000000000017f711000600000000000000301a13000c00120000000000000000001c00120001000000000000000000000024001200130000000000000017f711000600000000000000301a13003800120000000000000000004800120001000000000000000000000050001200120000000000000060dc12000300000000000000301a13006400120000000000000000007400120001000000000000004d6178696d756d426c6f636b5765696768740000420000000000000001000000fd0000009a0112001f000000446257656967687452756e74696d65446257656967687400420000000000000001000000fe0000005801120042000000426c6f636b457865637574696f6e576569676874420000000000000001000000ff000000040112005400000045787472696e736963426173655765696768740042000000000000000100000000010000a60012005e0000004d6178696d756d426c6f636b4c656e6774680000420000000000000001000000010100007c0012002a00000020546865206d6178696d756d206c656e677468206f66206120626c6f636b2028696e206279746573292e20546865206261736520776569676874206f6620616e2045787472696e73696320696e2074686520626c6f636b2c20696e646570656e64656e74206f6620746865206f662065787472696e736963206265696e672065786563757465642e20546865206261736520776569676874206f6620657865637574696e67206120626c6f636b2c20696e646570656e64656e74206f6620746865207472616e73616374696f6e7320696e2074686520626c6f636b2e2054686520776569676874206f662072756e74696d65206461746162617365206f7065726174696f6e73207468652072756e74696d652063616e20696e766f6b652e20546865206d6178696d756d20776569676874206f66206120626c6f636b2e4e6f646520697320636f6e6669677572656420746f20757365207468652073616d6520686173683b207165640000000802120032000000ce0300001c0000000802120032000000d6030000110000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f73797374656d2f7372632f6c69622e7273436865636b56657273696f6e436865636b47656e65736973436865636b457261436865636b4e6f6e6365436865636b576569676874636f6465206973206e6f7420666f756e647072697374696e6520636f6465206973206e6f7420666f756e640000000000007de411000a00000000000000d0031200010000000000000000000000e803120003000000000000000000000087e411000d00000000000000d00312000100000000000000000000000004120003000000000000000000000094e411000b0000000000000018041200020000000000000000000000480412000500000000000000000000009fe411000d000000000000007004120001000000000000000000000088041200040000000000000000000000ace411000a00000000000000a8041200010000000000000000000000c0041200050000000000000000000000b6e411000900000000000000d0031200010000000000000000000000e8041200010000000000000000000000bfe411000b00000000000000301a1300000000000000000000000000f0041200010000000000000000000000f020120003000000000000007ac312000c000000af0712001f000000301a130000000000ce0712002d0000005b07120024000000301a1300000000007f07120030000000000000005207120006000000000000007ac312000c000000000000005807120003000000000000007ac312000c000000b006120030000000301a130000000000e00612002e000000301a1300000000000e0712004400000000000000a90612000700000000000000ddce12001100000009061200560000005f0612001b000000301a1300000000007a0612002f000000000000008421120003000000000000007ac312000c0000004e05120036000000301a130000000000840512003d000000301a130000000000c1051200480000001e05120030000000f8041200260000002052656d6f766520746865207072696d65206d656d626572206966206974206578697374732e2053657420746865207072696d65206d656d6265722e204d75737420626520612063757272656e74206d656d6265722e2053776170206f7574207468652073656e64696e67206d656d62657220666f7220736f6d65206f74686572206b657920606e6577602e204d6179206f6e6c792062652063616c6c65642066726f6d20605369676e656460206f726967696e206f6620612063757272656e74206d656d6265722e205072696d65206d656d62657273686970206973207061737365642066726f6d20746865206f726967696e206163636f756e7420746f20606e6577602c20696620657874616e742e204368616e676520746865206d656d6265727368697020746f2061206e6577207365742c20646973726567617264696e6720746865206578697374696e67206d656d626572736869702e204265206e69636520616e64207061737320606d656d6265727360207072652d736f727465642e204d6179206f6e6c792062652063616c6c65642066726f6d206052657365744f726967696e60206f7220726f6f742e6d656d626572732053776170206f7574206f6e65206d656d626572206072656d6f76656020666f7220616e6f746865722060616464602e204d6179206f6e6c792062652063616c6c65642066726f6d2060537761704f726967696e60206f7220726f6f742e205072696d65206d656d62657273686970206973202a6e6f742a207061737365642066726f6d206072656d6f76656020746f2060616464602c20696620657874616e742e72656d6f76656164642052656d6f76652061206d656d626572206077686f602066726f6d20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d206052656d6f76654f726967696e60206f7220726f6f742e204164642061206d656d626572206077686f6020746f20746865207365742e204d6179206f6e6c792062652063616c6c65642066726f6d20604164644f726967696e60206f7220726f6f742e496e7374616e6365314d656d6265727368697000000000000009b51200070000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a1300c00812000000000000000000d0081200010000000000000001000000000000009caf12000500000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a1300d80812000000000000000000e80812000100000000000000000000004200000000000000010000005900000019091200320000004200000000000000010000005b000000f008120029000000205468652063757272656e74207072696d65206d656d6265722c206966206f6e65206578697374732e205468652063757272656e74206d656d626572736869702c2073746f72656420617320616e206f726465726564205665632e00301a1300000000005c091200020000003a203a6865617070616765733a636f64653a6368616e6765735f74726965000000000000b5e111000f00000000000000080a12000200000000000000000000009be111001a00000000000000180a12000200000000000000000000007ee111001d00000000000000280a12000300000000000000000000006be111001300000000000000400a12000100000000000000000000005ce111000f00000000000000480a12000100000000000000c30b120045000000ae0b1200150000005d0b120051000000ae0b120015000000de0a12003c000000301a1300000000001a0b1200430000009e0a120040000000500a12004e0000002054686572652069732061206e6f6e2d7a65726f207265666572656e636520636f756e742070726576656e74696e6720746865206163636f756e742066726f6d206265696e67207075726765642e20537569636964652063616c6c6564207768656e20746865206163636f756e7420686173206e6f6e2d64656661756c7420636f6d706f7369746520646174612e204661696c656420746f2065787472616374207468652072756e74696d652076657273696f6e2066726f6d20746865206e65772072756e74696d652e204569746865722063616c6c696e672060436f72655f76657273696f6e60206f72206465636f64696e67206052756e74696d6556657273696f6e60206661696c65642e205468652073706563696669636174696f6e2076657273696f6e206973206e6f7420616c6c6f77656420746f206465637265617365206265747765656e207468652063757272656e742072756e74696d6520616e6420746865206e65772072756e74696d652e20546865206e616d65206f662073706563696669636174696f6e20646f6573206e6f74206d61746368206265747765656e207468652063757272656e742072756e74696d65280c120036000000ac0000000d000000280c120036000000dd000000110000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f6d656d626572736869702f7372632f6c69622e7273526571756972655375646f7375646f7365745f6b65797375646f5f61730000000000000d12000500000000000000080d1200010000000000000000000000100d1200010000000000000000000000180d12000a0000000000000074ad1200010000000000000000000000240d12000100000000000000000000002c0d12000a00000000000000380d1200010000000000000000000000100d120001000000000000005375646964000000940d12000e0000007c0d1200180000004b65794368616e6765640000400d12003c0000005375646f4173446f6e650000a1f512000400000020546865207375646f6572206a757374207377697463686564206964656e746974793b20746865206f6c64206b657920697320737570706c6965642e2041207375646f206a75737420746f6f6b20706c6163652e4469737061746368526573756c74536f63696574794d61784d656d62657273566f7465734e6f74486561644e6f74466f756e6465724e6f7443616e646964617465416c726561647943616e646964617465416c7265616479426964466f756e646572486561644e6f74566f756368696e67416c7265616479566f756368696e67496e73756666696369656e74506f74416c7265616479466f756e6465644e6f5061796f75744e6f7453757370656e64656453757370656e646564416c72656164794d656d626572426164506f736974696f6e626964756e626964766f756368746970756e766f756368646566656e6465725f766f74657061796f7574666f756e64756e666f756e646a756467655f73757370656e6465645f6d656d6265726a756467655f73757370656e6465645f63616e6469646174657365745f6d61785f6d656d6265727300000000000070111200070000000000000074ad1200010000000000000000000000781112000100000000000000000000008011120003000000000000008411120002000000000000000000000094111200020000000000000000000000a41112000500000000000000ac111200030000000000000000000000c4111200020000000000000000000000d4111200090000000000000074ad1200010000000000000000000000e0111200010000000000000000000000e8111200050000000000000074ad1200010000000000000000000000f0111200010000000000000000000000f8111200070000000000000074ad1200010000000000000000000000001212000100000000000000000000000812120008000000000000001012120002000000000000000000000020121200020000000000000000000000301212001800000000000000481212000200000000000000000000005812120001000000000000000000000060121200120000000000000074ad1200010000000000000000000000741212000100000000000000000000007c1212000f0000000000000074ad12000100000000000000000000008c121200010000000000000000000000941212000a0000000000000074ad1200010000000000000000000000a0121200010000000000000000000000a81212000400000000000000ac121200030000000000000000000000c4121200010000000000000000000000cc1212000c0000000000000048121200020000000000000000000000d8121200010000000000000000000000e01212000d00000000000000f0121200010000000000000000000000f812120001000000000000000000000000131200090000000000000074ad12000100000000000000000000000c1312000100000000000000466f756e64656400641612002e0000004269640020af120009000000f615120007000000fd15120058000000551612000f000000566f75636800000020af120009000000f61512000700000020af1200090000006215120058000000ba1512003c0000004175746f556e6269640000002015120042000000556e626964000000f41412002c000000556e766f75636800b61412003e000000496e64756374656420af120009000000a81412000e00000035141200560000008b1412001d00000053757370656e6465644d656d6265724a756467656d656e7420af120009000000a1f5120004000000121412002300000043616e64696461746553757370656e6465640000f31312001f0000004d656d62657253757370656e64656400d71312001c0000004368616c6c656e6765640000ba1312001d000000566f746520af12000900000020af120009000000a1f51200040000008a13120030000000446566656e646572566f74654e1312003c0000004e65774d61784d656d6265727300000060dc1200030000002a13120024000000556e666f756e646564000000141312001600000020536f636965747920697320756e666f756e6465642e2041206e6577206d6178206d656d62657220636f756e7420686173206265656e20736574204120766f746520686173206265656e20706c6163656420666f72206120646566656e64696e67206d656d6265722028766f7465722c20766f746529204120766f746520686173206265656e20706c61636564202863616e6469646174652c20766f7465722c20766f7465292041206d656d62657220686173206265656e206368616c6c656e6765642041206d656d62657220686173206265656e2073757370656e64656420412063616e64696461746520686173206265656e2073757370656e64656420412073757370656e646564206d656d62657220686173206265656e206a756467656420412067726f7570206f662063616e646964617465732068617665206265656e20696e6475637465642e205468652062617463682773207072696d617279206973207468652066697273742076616c75652c2074686520626174636820696e2066756c6c20697320746865207365636f6e642e5665633c4163636f756e7449643e20412063616e646964617465207761732064726f70706564202862792072657175657374206f662077686f20766f756368656420666f72207468656d292e20412063616e646964617465207761732064726f70706564202862792074686569722072657175657374292e20412063616e646964617465207761732064726f70706564202864756520746f20616e20657863657373206f66206269647320696e207468652073797374656d292e2041206d656d6265727368697020626964206a7573742068617070656e656420627920766f756368696e672e2054686520676976656e206163636f756e74206973207468652063616e646964617465277320494420616e64207468656972206f6666657220697320746865207365636f6e642e2054686520766f756368696e67207061727479206973207468652074686972642e42616c616e63652041206d656d6265727368697020626964206a7573742068617070656e65642e2054686520676976656e206163636f756e74206973207468652063616e646964617465277320494420616e64207468656972206f6666657220697320746865207365636f6e642e2054686520736f636965747920697320666f756e6465642062792074686520676976656e206964656e746974792e5072656d61747572655374696c6c4f70656e4e6f7446696e646572556e6b6e6f776e546970416c72656164794b6e6f776e526561736f6e546f6f426967496e76616c696450726f706f73616c496e646578496e73756666696369656e7450726f706f7365727342616c616e636570726f706f73655f7370656e6472656a6563745f70726f706f73616c617070726f76655f70726f706f73616c7265706f72745f617765736f6d65726574726163745f7469707469705f6e6577636c6f73655f7469700000000054b11200080000000000000038191200010000000000000000000000401912000100000000000000000000004819120008000000000000005019120001000000000000000000000058191200010000000000000000000000601912000700000000000000681912000300000000000000000000008019120001000000000000000000000088191200080000000000000090191200020000000000000000000000a0191200010000000000000000000000a8191200050000000000000050191200010000000000000000000000b0191200010000000000000000000000b8191200080000000000000050191200010000000000000000000000c0191200010000000000000000000000c8191200070000000000000050191200010000000000000000000000d0191200010000000000000000000000d81912000600000000000000d4b11200010000000000000000000000e0191200010000000000000000000000e81912000a00000000000000d4b11200010000000000000000000000f4191200010000000000000000000000fc1912000900000000000000081a1200030000000000000000000000201a1200010000000000000000000000281a12000c00000000000000d4b11200010000000000000000000000341a1200010000000000000075b412000d000000f61b12000e0000005370656e64696e67f615120007000000bc1b12003a000000417761726465640075b412000d000000f61512000700000020af1200090000009c1b12002000000052656a656374656475b412000d000000f6151200070000006f1b12002d0000004275726e740000004c1b120023000000526f6c6c6f766572001b12004c0000004465706f73697400e01a1200200000004e65775469700000ba1a120026000000546970436c6f73696e670000831a120037000000546970436c6f73656400000089b212000400000020af120009000000f615120007000000611a1200220000005469705265747261637465643c1a1200250000002041207469702073756767657374696f6e20686173206265656e207265747261637465642e2041207469702073756767657374696f6e20686173206265656e20636c6f7365642e2041207469702073756767657374696f6e206861732072656163686564207468726573686f6c6420616e6420697320636c6f73696e672e2041206e6577207469702073756767657374696f6e20686173206265656e206f70656e65642e20536f6d652066756e64732068617665206265656e206465706f73697465642e205370656e64696e67206861732066696e69736865643b20746869732069732074686520616d6f756e74207468617420726f6c6c73206f76657220756e74696c206e657874207370656e642e20536f6d65206f66206f75722066756e64732068617665206265656e206275726e742e20412070726f706f73616c207761732072656a65637465643b2066756e6473207765726520736c61736865642e20536f6d652066756e64732068617665206265656e20616c6c6f63617465642e205765206861766520656e6465642061207370656e6420706572696f6420616e642077696c6c206e6f7720616c6c6f636174652066756e64732e204e65772070726f706f73616c2e496e636f6e73697374656e74207374617465202d20636f756c646e277420736574746c6520696d62616c616e636520666f722066756e6473207370656e74206279207472656173757279506f74736f63696574795f726f746174696f6e43616e646964617465730000000000617474656d707420746f20646976696465206279207a65726f000000941d120033000000390600001d000000941d1200330000008d0400000f0000007061796f757473652e31206f662066696e616c206974656d203d3d20746f74616c5f617070726f76616c733b20776f72737420636173652066696e642077696c6c20616c776179732072657475726e2074686174206974656d3b207165640000941d120033000000840500001f00000042696473657869746564206966206d656d6265727320656d7074793b20716564941d120033000000a30500001f000000446566656e646572446566656e646572566f746573736f63696574795f6368616c6c656e67650000941d1200330000001a06000033000000941d1200330000001a0600001e0000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f736f63696574792f7372632f6c69622e7273537472696b657353757370656e6465644d656d626572730000941d120033000000c60500001e0000005061796f757473000000000000000000617474656d707420746f2063616c63756c617465207468652072656d61696e646572207769746820612064697669736f72206f66207a65726f000000941d120033000000940400000500000000000000690c12000400000000000000d01e1200010000000000000000000000e81e12000a00000000000000000000006d0c12000700000000000000381f1200010000000000000000000000501f1200090000000000000000000000740c12000700000000000000981f1200020000000000000000000000c81f12000b0000000000000000000000fbea1200040000000000000061d1120017000000872112004e000000301a13000000000098c9120034000000301a130000000000f5bd12000b00000085201200080000008d20120019000000a620120018000000be2012003200000044be12000c00000000000000842112000300000000000000f320120023000000162112005d000000301a13000000000098c9120034000000301a130000000000f5bd12000b00000085201200080000008d20120019000000732112001100000044be12000c00000000000000f02012000300000000000000f32012002300000000000000fbea1200040000000000000061d112001700000020201200540000007420120011000000301a13000000000098c9120034000000301a130000000000f5bd12000b00000085201200080000008d20120019000000a620120018000000be2012003200000044be12000c0000002041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c207769746820605369676e656460206f726967696e2066726f6d206120676976656e206163636f756e742e202d204f2831292e202d204c696d697465642073746f726167652072656164732e202d204f6e6520444220777269746520286576656e74292e202d20576569676874206f662064657269766174697665206063616c6c6020657865637574696f6e202b2031302c3030302e77686f3c543a3a4c6f6f6b7570206173205374617469634c6f6f6b75703e3a3a536f757263652041757468656e74696361746573207468652063757272656e74207375646f206b657920616e6420736574732074686520676976656e204163636f756e7449642028606e6577602920617320746865206e6577207375646f206b65792e202d204f6e65204442206368616e67652e6e65772041757468656e7469636174657320746865207375646f206b657920616e64206469737061746368657320612066756e6374696f6e2063616c6c20776974682060526f6f7460206f726967696e2e5375646f00000000000000342212000300000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a1300382212000000000000000000482212000100000000000000010000004b6579004200000000000000010000000201000050221200210000002054686520604163636f756e74496460206f6620746865207375646f206b65792e000000b4a21200390000009d0100001e000000b4a2120039000000fb01000029000000a422120048000000bb0100002d0000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f6f70732f61726974682e7273766563746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d61783b20716564b4a2120039000000c5020000190000006974657261746f72207769746820706f736974697665206c656e6774682077696c6c20686176652061206d696e3b207165640000b4a2120039000000c902000019000000b4a2120039000000f40200001600000000000000660e1200030000000000000090251200010000000000000000000000a8251200210000000000000000000000690e12000500000000000000b0261200010000000000000000000000c82612001300000000000000000000006e0e1200050000000000000060271200030000000000000000000000a82712002c0000000000000000000000760e12000700000000000000b02612000100000000000000000000000829120011000000000000000000000014b01200040000000000000090291200020000000000000000000000c02912001300000000000000000000007d0e12000d00000000000000582a1200010000000000000000000000702a12001000000000000000000000008a0e12000600000000000000301a1300000000000000000000000000f02a1200140000000000000000000000900e12000500000000000000902b1200030000000000000000000000d82b1200130000000000000000000000950e12000700000000000000301a1300000000000000000000000000702c12000d00000000000000000000009c0e12001600000000000000d82c1200020000000000000000000000082d12001b0000000000000000000000b20e12001900000000000000e02d1200020000000000000000000000102e1200280000000000000000000000cb0e12000f00000000000000502f1200010000000000000000000000682f12000e0000000000000000000000aa4d12000500000000000000af4d12000f000000f94f120038000000301a130000000000315012004e0000007f5012003c000000301a13000000000098c9120034000000301a130000000000a3bd12000c000000bb50120056000000301a130000000000f5bd12000b00000011511200550000006749120011000000ec4912003b000000274a1200380000005f4a120037000000964a12003d0000007849120032000000d34a120012000000284b120060000000884b120040000000c84b1200170000000f4c12004b0000005a4c1200310000008b4c12001e000000a94c120027000000d04c120048000000184d12000a000000665112001a0000003a4d12003f000000301a130000000000794d12003100000044be12000c00000000000000f64f1200030000000000000060dc120003000000be4d120036000000f44d120040000000344e120021000000301a130000000000554e12003f000000301a130000000000944e120041000000301a130000000000a3bd12000c000000d54e120046000000301a130000000000f5bd12000b0000001b4f12002c000000474f1200430000008a4f1200510000002bc112000d000000301a130000000000db4f12001b00000044be12000c00000000000000f020120003000000000000007ac312000c00000000000000aa4d12000500000000000000af4d12000f00000000000000730e12000300000000000000af4d12000f000000f945120051000000301a1300000000004a461200550000009f46120057000000f646120050000000301a13000000000046471200560000009c47120054000000301a1300000000007b41120041000000301a130000000000a3bd12000c000000f047120033000000234812005400000077481200190000009048120052000000e248120045000000301a130000000000f5bd12000b000000274912004000000067491200110000007849120032000000aa49120042000000ec4912003b000000274a1200380000005f4a120037000000964a12003d000000d34a120012000000e54a120043000000284b120060000000884b120040000000c84b120017000000df4b1200300000000f4c12004b0000005a4c1200310000008b4c12001e000000a94c120027000000d04c120048000000184d12000a000000224d1200180000003a4d12003f000000301a130000000000794d12003100000044be12000c000000264412004b0000007144120025000000301a130000000000964412004a000000301a130000000000a3bd12000c000000e04412004b000000301a130000000000f5bd12000b0000002b451200150000004045120042000000824512003b000000bd451200250000002bc112000d000000301a130000000000e24512001700000044be12000c000000000000001d4412000900000000000000f320120023000000000000002bda12000700000000000000a1f5120004000000d042120022000000301a1300000000007b41120041000000301a130000000000a3bd12000c000000f242120043000000bc4112003d0000003543120036000000301a130000000000f5bd12000b0000006b4312002f0000003c421200470000009a43120016000000b04312004b000000834212002f0000002bc112000d000000301a130000000000fb4312002200000044be12000c000000000000002bda12000700000000000000a1f51200040000005841120023000000301a1300000000007b41120041000000301a130000000000a3bd12000c000000bc4112003d000000f941120029000000301a130000000000f5bd12000b000000224212001a0000003c42120047000000834212002f0000002bc112000d000000301a130000000000b24212001e00000044be12000c000000603e120051000000301a130000000000b13e12005a000000301a1300000000000b3f120048000000533f12001e000000301a130000000000713f120045000000b63f120013000000301a130000000000f5bd12000b000000c93f120047000000104012004900000059401200390000009240120039000000cb40120023000000ee40120044000000301a130000000000324112002600000044be12000c00000000000000493e120007000000000000007ac312000c00000000000000503e12000b0000000000000060dc120003000000000000005b3e12000500000000000000cc8d120007000000303c120013000000301a130000000000433c12003c0000007f3c120046000000301a130000000000c53c120047000000301a130000000000a3bd12000c0000000c3d120046000000523d120045000000973d12003d000000301a130000000000f5bd12000b000000d43d1200380000000c3e12003d0000002bc112000d000000301a130000000000e83012001700000044be12000c000000203b120023000000301a130000000000433b1200570000009a3b120056000000f03b120008000000301a130000000000f5bd12000b000000f83b12001a000000123c12001e0000002bc112000d000000301a130000000000e83012001700000044be12000c00000000000000f020120003000000000000007ac312000c00000000000000193b12000700000000000000a1f5120004000000603712004b000000301a130000000000ab371200560000000138120033000000301a13000000000034381200520000008638120040000000301a130000000000d832120050000000301a130000000000a3bd12000c000000c63812002d000000f33812004d0000004039120049000000301a130000000000f5bd12000b0000008939120029000000b23912003e000000f03912005c0000004c3a12003e0000008a3a120051000000bd36120035000000db3a12001c000000093712001f000000301a130000000000f73a12002200000044be12000c00000000000000f020120003000000000000007ac312000c000000000000004e37120009000000000000005737120009000000023112004d000000301a1300000000004f31120057000000a63112001d000000301a130000000000c3311200550000001832120044000000301a1300000000005c32120057000000b332120025000000301a130000000000d832120050000000301a130000000000a3bd12000c00000028331200300000005833120031000000301a130000000000f5bd12000b000000893312003d000000c63312003c0000000234120032000000343412001000000044341200450000008934120037000000c03412003a000000fa3412002d00000027351200280000004f3512002c0000007b35120053000000ce3512000f000000dd35120037000000143612004b0000005f3612000e0000006d36120050000000bd36120035000000f236120017000000093712001f000000301a130000000000283712002600000044be12000c00000000000000ff301200030000000000000060dc120003000000d82f1200470000001f3012002d000000301a1300000000004c30120037000000301a130000000000a3bd12000c0000008330120039000000301a130000000000f5bd12000b000000bc3012002c0000002bc112000d000000301a130000000000e83012001700000044be12000c00000020416c6c6f777320726f6f74206f726967696e20746f206368616e676520746865206d6178696d756d206e756d626572206f66206d656d6265727320696e20736f63696574792e204d6178206d656d6265727368697020636f756e74206d7573742062652067726561746572207468616e20312e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d205f524f4f545f2e202d20606d617860202d20546865206d6178696d756d206e756d626572206f66206d656d6265727320666f722074686520736f63696574792e202d204f6e652073746f7261676520777269746520746f2075706461746520746865206d61782e204f28312920546f74616c20436f6d706c65786974793a204f2831296d617820416c6c6f772073757370656e646564206a756467656d656e74206f726967696e20746f206d616b65206a756467656d656e74206f6e20612073757370656e6465642063616e6469646174652e20496620746865206a756467656d656e742069732060417070726f7665602c20776520616464207468656d20746f20736f63696574792061732061206d656d62657220776974682074686520617070726f707269617465207061796d656e7420666f72206a6f696e696e6720736f63696574792e20496620746865206a756467656d656e74206973206052656a656374602c2077652065697468657220736c61736820746865206465706f736974206f6620746865206269642c20676976696e67206974206261636b20746f2074686520736f63696574792074726561737572792c206f722077652062616e2074686520766f75636865722066726f6d20766f756368696e6720616761696e2e20496620746865206a756467656d656e7420697320605265626964602c20776520707574207468652063616e646964617465206261636b20696e207468652062696420706f6f6c20616e64206c6574207468656d20676f207468726f7567682074686520696e64756374696f6e2070726f6365737320616761696e2e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d20746865205f53757370656e73696f6e4a756467656d656e744f726967696e5f2e202d206077686f60202d205468652073757370656e6465642063616e64696461746520746f206265206a75646765642e202d20606a756467656d656e7460202d2060417070726f7665602c206052656a656374602c206f7220605265626964602e204b65793a204220286c656e206f662062696473292c204d20286c656e206f66206d656d62657273292c2058202862616c616e636520616374696f6e29202d204f6e652073746f72616765207265616420746f20636865636b206077686f6020697320612073757370656e6465642063616e6469646174652e202d204f6e652073746f726167652072656d6f76616c206f66207468652073757370656e6465642063616e6469646174652e202d20417070726f7665204c6f67696320092d204f6e652073746f72616765207265616420746f206765742074686520617661696c61626c6520706f7420746f2070617920757365727320776974682e204f28312920092d204f6e652073746f7261676520777269746520746f207570646174652074686520617661696c61626c6520706f742e204f28312920092d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f28312920092d204f6e652073746f72616765207265616420746f2067657420616c6c206d656d626572732e204f284d2920092d20557020746f206f6e6520756e726573657276652063757272656e637920616374696f6e2e20092d20557020746f2074776f206e65772073746f726167652077726974657320746f207061796f7574732e20092d20557020746f206f6e652073746f726167652077726974652077697468204f286c6f67204d292062696e6172792073656172636820746f206164642061206d656d62657220746f20736f63696574792e202d2052656a656374204c6f67696320092d20557020746f206f6e6520726570617472696174652072657365727665642063757272656e637920616374696f6e2e204f28582920092d20557020746f206f6e652073746f7261676520777269746520746f2062616e2074686520766f756368696e67206d656d6265722066726f6d20766f756368696e6720616761696e2e202d205265626964204c6f67696320092d2053746f72616765206d75746174652077697468204f286c6f672042292062696e6172792073656172636820746f20706c616365207468652075736572206261636b20696e746f20626964732e202d20557020746f206f6e65206164646974696f6e616c206576656e7420696620756e766f7563682074616b657320706c6163652e202d204f6e652073746f726167652072656d6f76616c2e202d204f6e65206576656e7420666f7220746865206a756467656d656e742e20546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b2042202b2058296a756467656d656e744a756467656d656e7420416c6c6f772073757370656e73696f6e206a756467656d656e74206f726967696e20746f206d616b65206a756467656d656e74206f6e20612073757370656e646564206d656d6265722e20496620612073757370656e646564206d656d62657220697320666f72676976656e2c2077652073696d706c7920616464207468656d206261636b2061732061206d656d6265722c206e6f7420616666656374696e6720616e79206f6620746865206578697374696e672073746f72616765206974656d7320666f722074686174206d656d6265722e20496620612073757370656e646564206d656d6265722069732072656a65637465642c2072656d6f766520616c6c206173736f6369617465642073746f72616765206974656d732c20696e636c7564696e67207468656972207061796f7574732c20616e642072656d6f766520616e7920766f7563686564206269647320746865792063757272656e746c7920686176652e202d206077686f60202d205468652073757370656e646564206d656d62657220746f206265206a75646765642e202d2060666f726769766560202d204120626f6f6c65616e20726570726573656e74696e672077686574686572207468652073757370656e73696f6e206a756467656d656e74206f726967696e202020202020202020202020202020666f726769766573202860747275656029206f722072656a6563747320286066616c7365602920612073757370656e646564206d656d6265722e204b65793a204220286c656e206f662062696473292c204d20286c656e206f66206d656d6265727329202d204f6e652073746f72616765207265616420746f20636865636b206077686f6020697320612073757370656e646564206d656d6265722e204f283129202d20557020746f206f6e652073746f72616765207772697465204f284d292077697468204f286c6f67204d292062696e6172792073656172636820746f206164642061206d656d626572206261636b20746f20736f63696574792e202d20557020746f20332073746f726167652072656d6f76616c73204f28312920746f20636c65616e20757020612072656d6f766564206d656d6265722e202d20557020746f206f6e652073746f72616765207772697465204f2842292077697468204f2842292073656172636820746f2072656d6f766520766f7563686564206269642066726f6d20626964732e202d204f6e652073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b204229666f726769766520416e6e756c2074686520666f756e64696e67206f662074686520736f63696574792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205369676e65642c20616e6420746865207369676e696e67206163636f756e74206d75737420626520626f7468207468652060466f756e6465726020616e6420746865206048656164602e205468697320696d706c6965732074686174206974206d6179206f6e6c7920626520646f6e65207768656e207468657265206973206f6e65206d656d6265722e202d2054776f2073746f72616765207265616473204f2831292e202d20466f75722073746f726167652072656d6f76616c73204f2831292e20466f756e642074686520736f63696574792e205468697320697320646f6e65206173206120646973637265746520616374696f6e20696e206f7264657220746f20616c6c6f7720666f7220746865206d6f64756c6520746f20626520696e636c7564656420696e746f20612072756e6e696e6720636861696e20616e642063616e206f6e6c7920626520646f6e65206f6e63652e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d7573742062652066726f6d20746865205f466f756e6465725365744f726967696e5f2e202d2060666f756e64657260202d20546865206669727374206d656d62657220616e642068656164206f6620746865206e65776c7920666f756e64656420736f63696574792e202d20606d61785f6d656d6265727360202d2054686520696e697469616c206d6178206e756d626572206f66206d656d6265727320666f722074686520736f63696574792e202d206072756c657360202d205468652072756c6573206f66207468697320736f636965747920636f6e6365726e696e67206d656d626572736869702e202d2054776f2073746f72616765206d75746174657320746f207365742060486561646020616e642060466f756e646572602e204f283129202d204f6e652073746f7261676520777269746520746f2061646420746865206669727374206d656d62657220746f20736f63696574792e204f283129666f756e6465726d61785f6d656d6265727372756c6573205472616e7366657220746865206669727374206d617475726564207061796f757420666f72207468652073656e64657220616e642072656d6f76652069742066726f6d20746865207265636f7264732e204e4f54453a20546869732065787472696e736963206e6565647320746f2062652063616c6c6564206d756c7469706c652074696d657320746f20636c61696d206d756c7469706c65206d617475726564207061796f7574732e205061796d656e743a20546865206d656d6265722077696c6c20726563656976652061207061796d656e7420657175616c20746f207468656972206669727374206d617475726564207061796f757420746f20746865697220667265652062616c616e63652e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206d656d6265722077697468207061796f7574732072656d61696e696e672e204b65793a204d20286c656e206f66206d656d62657273292c205020286e756d626572206f66207061796f75747320666f72206120706172746963756c6172206d656d62657229202d204f6e652073746f726167652072656164204f284d2920616e64204f286c6f67204d292073656172636820746f20636865636b207369676e65722069732061206d656d6265722e202d204f6e652073746f726167652072656164204f28502920746f2067657420616c6c207061796f75747320666f722061206d656d6265722e202d204f6e652073746f726167652072656164204f28312920746f20676574207468652063757272656e7420626c6f636b206e756d6265722e202d204f6e652063757272656e6379207472616e736665722063616c6c2e204f285829202d204f6e652073746f72616765207772697465206f722072656d6f76616c20746f2075706461746520746865206d656d6265722773207061796f7574732e204f28502920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b2050202b2058292041732061206d656d6265722c20766f7465206f6e2074686520646566656e6465722e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206d656d6265722e202d2060617070726f7665603a204120626f6f6c65616e2077686963682073617973206966207468652063616e6469646174652073686f756c6420626520617070726f766564202860747275656029206f722072656a656374656420286066616c736560292e202d204b65793a204d20286c656e206f66206d656d6265727329202d204f6e652073746f726167652072656164204f284d2920616e64204f286c6f67204d292073656172636820746f20636865636b20757365722069732061206d656d6265722e202d204f6e652073746f7261676520777269746520746f2061646420766f746520746f20766f7465732e204f28312920546f74616c20436f6d706c65786974793a204f284d202b206c6f674d292041732061206d656d6265722c20766f7465206f6e20612063616e6469646174652e202d206063616e646964617465603a205468652063616e646964617465207468617420746865206d656d62657220776f756c64206c696b6520746f20626964206f6e2e2020202020202020202020202020617070726f766564202860747275656029206f722072656a656374656420286066616c736560292e204b65793a204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d6265727329202d204f6e65206163636f756e74206c6f6f6b75702e202d204f6e652073746f726167652072656164204f28432920616e64204f2843292073656172636820746f20636865636b2074686174207573657220697320612063616e6469646174652e20546f74616c20436f6d706c65786974793a204f284d202b206c6f674d202b20432963616e646964617465204173206120766f756368696e67206d656d6265722c20756e766f7563682061206269642e2054686973206f6e6c7920776f726b73207768696c6520766f75636865642075736572206973206f6e6c792061206269646465722028616e64206e6f7420612063616e646964617465292e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206120766f756368696e67206d656d6265722e202d2060706f73603a20506f736974696f6e20696e207468652060426964736020766563746f72206f6620746865206269642077686f2073686f756c6420626520756e766f75636865642e204b65793a204220286c656e206f66206269647329202d204f6e652073746f726167652072656164204f28312920746f20636865636b20746865207369676e6572206973206120766f756368696e67206d656d6265722e202d204f6e652073746f72616765206d757461746520746f20726574726965766520616e64207570646174652074686520626964732e204f284229202d204f6e6520766f756368696e672073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f2842292041732061206d656d6265722c20766f75636820666f7220736f6d656f6e6520746f206a6f696e20736f636965747920627920706c6163696e67206120626964206f6e20746865697220626568616c662e205468657265206973206e6f206465706f73697420726571756972656420746f20766f75636820666f722061206e6577206269642c206275742061206d656d6265722063616e206f6e6c7920766f75636820666f72206f6e652062696420617420612074696d652e2049662074686520626964206265636f6d657320612073757370656e6465642063616e64696461746520616e6420756c74696d6174656c792072656a6563746564206279207468652073757370656e73696f6e206a756467656d656e74206f726967696e2c20746865206d656d6265722077696c6c2062652062616e6e65642066726f6d20766f756368696e6720616761696e2e204173206120766f756368696e67206d656d6265722c20796f752063616e20636c61696d206120746970206966207468652063616e6469646174652069732061636365707465642e2054686973207469702077696c6c2062652070616964206173206120706f7274696f6e206f66207468652072657761726420746865206d656d6265722077696c6c207265636569766520666f72206a6f696e696e672074686520736f63696574792e202d206077686f603a2054686520757365722077686f20796f7520776f756c64206c696b6520746f20766f75636820666f722e202d206076616c7565603a2054686520746f74616c2072657761726420746f2062652070616964206265747765656e20796f7520616e64207468652063616e6469646174652069662074686579206265636f6d652061206d656d62657220696e2074686520736f63696574792e202d2060746970603a20596f757220637574206f662074686520746f74616c206076616c756560207061796f7574207768656e207468652063616e64696461746520697320696e64756374656420696e746f2074686520736f63696574792e2054697073206c6172676572207468616e206076616c7565602077696c6c206265207361747572617465642075706f6e207061796f75742e204b65793a204220286c656e206f662062696473292c204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d6265727329202d2053746f726167652052656164733a20092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c206d656d626572732e204f284d2920092d204f6e652073746f72616765207265616420746f20636865636b206d656d626572206973206e6f7420616c726561647920766f756368696e672e204f28312920092d204f6e652073746f72616765207265616420746f20636865636b20666f722073757370656e6465642063616e6469646174652e204f28312920092d204f6e652073746f72616765207265616420746f20636865636b20666f722073757370656e646564206d656d6265722e204f28312920092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c2063757272656e7420626964732e204f28422920092d204f6e652073746f72616765207265616420746f20726574726965766520616c6c2063757272656e742063616e646964617465732e204f284329202d2053746f72616765205772697465733a20092d204f6e652073746f7261676520777269746520746f20696e7365727420766f756368696e672073746174757320746f20746865206d656d6265722e204f28312920092d204f6e652073746f72616765206d757461746520746f206164642061206e65772062696420746f2074686520766563746f72204f2842292028544f444f3a20706f737369626c65206f7074696d697a6174696f6e20772f20726561642920092d20557020746f206f6e652073746f726167652072656d6f76616c206966206269642e6c656e2829203e204d41585f4249445f434f554e542e204f283129202d204e6f7461626c6520436f6d7075746174696f6e3a20092d204f286c6f67204d292073656172636820746f20636865636b2073656e6465722069732061206d656d6265722e20092d204f2842202b2043202b206c6f67204d292073656172636820746f20636865636b2075736572206973206e6f7420616c726561647920612070617274206f6620736f63696574792e20092d204f286c6f672042292073656172636820746f20696e7365727420746865206e65772062696420736f727465642e202d2045787465726e616c204d6f64756c65204f7065726174696f6e733a20092d204f6e652062616c616e63652072657365727665206f7065726174696f6e2e204f28582920092d20557020746f206f6e652062616c616e636520756e72657365727665206f7065726174696f6e20696620626964732e6c656e2829203e204d41585f4249445f434f554e542e202d204576656e74733a20092d204f6e65206576656e7420666f7220766f7563682e20092d20557020746f206f6e65206576656e7420666f72204175746f556e626964206966206269642e6c656e2829203e204d41585f4249445f434f554e542e20546f74616c20436f6d706c65786974793a204f284d202b2042202b2043202b206c6f674d202b206c6f6742202b20582976616c756542616c616e63654f663c542c20493e2041206269646465722063616e2072656d6f76652074686569722062696420666f7220656e74727920696e746f20736f63696574792e20427920646f696e6720736f2c20746865792077696c6c20686176652074686569722063616e646964617465206465706f7369742072657475726e6564206f7220746865792077696c6c20756e766f75636820746865697220766f75636865722e205061796d656e743a2054686520626964206465706f73697420697320756e7265736572766564206966207468652075736572206d6164652061206269642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642061206269646465722e202d2060706f73603a20506f736974696f6e20696e207468652060426964736020766563746f72206f6620746865206269642077686f2077616e747320746f20756e6269642e204b65793a204220286c656e206f662062696473292c2058202862616c616e636520756e7265736572766529202d204f6e652073746f72616765207265616420616e6420777269746520746f20726574726965766520616e64207570646174652074686520626964732e204f284229202d20456974686572206f6e6520756e726573657276652062616c616e636520616374696f6e204f285829206f72206f6e6520766f756368696e672073746f726167652072656d6f76616c2e204f28312920546f74616c20436f6d706c65786974793a204f2842202b205829706f7320412075736572206f757473696465206f662074686520736f63696574792063616e206d616b6520612062696420666f7220656e7472792e205061796d656e743a206043616e6469646174654465706f736974602077696c6c20626520726573657276656420666f72206d616b696e672061206269642e2049742069732072657475726e6564207768656e2074686520626964206265636f6d65732061206d656d6265722c206f7220696620746865206269642063616c6c732060756e626964602e202d206076616c7565603a2041206f6e652074696d65207061796d656e74207468652062696420776f756c64206c696b6520746f2072656365697665207768656e206a6f696e696e672074686520736f63696574792e204b65793a204220286c656e206f662062696473292c204320286c656e206f662063616e64696461746573292c204d20286c656e206f66206d656d62657273292c2058202862616c616e636520726573657276652920092d204f6e65206576656e7420666f72206e6577206269642e00000000ef0d12000700000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a130018781200000000000000000000571200010000000000000000000000000000000857120005000000000000000000000091d912000700000000000000000000000000000000000000000000000000000000000000301a13001057120000000000000000002057120002000000000000000000000000000000611c12000a0000000000000000000000305712002700000000000000000000000000000000000000000000000000000000000000301a13001458120000000000000000005857120001000000000000000100000000000000605712001300000001050000000000007ac312000c00000000000000735712003900000000000000000000000000000000000000301a1300ac5712000000000000000000bc571200010000000000000000000000000000004e1c1200030000000000000000000000af4d12000f00000000000000000000000000000000000000000000000000000000000000301a1300c45712000000000000000000d457120001000000000000000100000000000000f60d12000400000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a1300187812000000000000000000dc5712000100000000000000000000000000000009b51200070000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a1300e45712000000000000000000f457120001000000000000000100000000000000ce1d12001000000001050000000000007ac312000c00000000000000a1f512000400000000000000000000000000000000000000301a1300fc57120000000000000000000c581200010000000000000001000000000000001c1d1200040000000000000000000000305712002700000000000000000000000000000000000000000000000000000000000000301a130014581200000000000000000024581200010000000000000001000000000000002c5812000800000001050000000000007ac312000c00000000000000345812000e00000000000000000000000000000000000000301a13004458120000000000000000005458120001000000000000000000000000000000f01d12000700000001050000000000007ac312000c000000000000005c5812002600000000000000000000000000000000000000301a13008458120000000000000000009458120001000000000000000100000000000000c71d12000700000001050000000000007ac312000c000000000000009c5812000b00000000000000000000000000000000000000301a1300587712000000000000000000a858120001000000000000000100000000000000b30d12000500000002050500000000007ac312000c000000000000007ac312000c00000000000000a81212000400000000000000301a1300c05812000000000000000000b0581200010000000000000000000000000000004c1d12000800000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a1300187812000000000000000000b858120001000000000000000000000000000000541d12000d00000001050000000000007ac312000c00000000000000a81212000400000000000000000000000000000000000000301a1300c05812000000000000000000d058120001000000000000000000000000000000a90d12000a000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a1300587712000000000000000000d8581200010000000000000001000000365c12001200000052756c65730000004200000000000000010000005b000000cd5b120054000000215c1200150000005665633c4269643c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e3e007f5b12004e00000053757370656e64656443616e646964617465732842616c616e63654f663c542c20493e2c204269644b696e643c543a3a4163636f756e7449642c2042616c616e63654f663c542c20493e3e294200000000000000010000005b0000005e5b1200210000004200000000000000010000005f0000000e5b120050000000d45a12003a00000042000000000000000100000059000000af5a1200250000004200000000000000010000005b000000915a12001e00000042000000000000000100000059000000575a12003a000000566f756368696e67566f756368696e6753746174757300004200000000000000010000005b0000001e5a1200390000005665633c28543a3a426c6f636b4e756d6265722c2042616c616e63654f663c542c20493e293e000042000000000000000100000059000000cb59120053000000537472696b65436f756e7400945912003700000060591200340000002f591200310000004200000000000000010000005b0000001759120018000000e05812003700000020546865206d6178206e756d626572206f66206d656d6265727320666f722074686520736f6369657479206174206f6e652074696d652e20566f74657320666f722074686520646566656e6465722e2054686520646566656e64696e67206d656d6265722063757272656e746c79206265696e67206368616c6c656e6765642e20446f75626c65206d61702066726f6d2043616e646964617465202d3e20566f746572202d3e20284d617962652920566f74652e20546865206f6e676f696e67206e756d626572206f66206c6f73696e6720766f746573206361737420627920746865206d656d6265722e2050656e64696e67207061796f7574733b206f72646572656420627920626c6f636b206e756d6265722c20776974682074686520616d6f756e7420746861742073686f756c642062652070616964206f75742e204d656d626572732063757272656e746c7920766f756368696e67206f722062616e6e65642066726f6d20766f756368696e6720616761696e205468652063757272656e7420626964732c2073746f726564206f726465726564206279207468652076616c7565206f6620746865206269642e2054686520736574206f662073757370656e646564206d656d626572732e205468652063757272656e7420736574206f66206d656d626572732c206f7264657265642e20546865206d6f7374207072696d6172792066726f6d20746865206d6f737420726563656e746c7920617070726f766564206d656d626572732e20416d6f756e74206f66206f7572206163636f756e742062616c616e63652074686174206973207370656369666963616c6c7920666f7220746865206e65787420726f756e642773206269642873292e2054686520736574206f662073757370656e6465642063616e646964617465732e205468652063757272656e7420736574206f662063616e646964617465733b206269646465727320746861742061726520617474656d7074696e6720746f206265636f6d65206d656d626572732e20412068617368206f66207468652072756c6573206f66207468697320736f636965747920636f6e6365726e696e67206d656d626572736869702e2043616e206f6e6c7920626520736574206f6e636520616e64206f6e6c792062792074686520666f756e6465722e20546865206669727374206d656d6265722e00000000d05d12001000000000000000af4d12000f00000000000000301a1300e05d12000000000000000000f05d1200010000000000000000000000f85d12001200000000000000af4d12000f00000000000000301a13000c5e120000000000000000001c5e12000200000000000000000000002c5e12000a0000000000000060dc12000300000000000000301a1300385e12000000000000000000485e1200020000000000000000000000585e12000b00000000000000af4d12000f00000000000000301a1300645e12000000000000000000745e12000100000000000000000000007c5e12000e0000000000000006cf12000e00000000000000301a13008c5e120000000000000000009c5e1200010000000000000000000000a45e12000f0000000000000006cf12000e00000000000000301a1300b45e12000000000000000000c45e1200010000000000000000000000cc5e12000800000000000000cc5e12000800000000000000301a1300d45e12000000000000000000e45e1200010000000000000043616e6469646174654465706f73697442000000000000000100000067000000c96012003f00000057726f6e6753696465446564756374696f6e000042000000000000000100000073000000446012005500000099601200300000004d6178537472696b6573000042000000000000000100000003010000c95f12005d000000266012001e000000506572696f645370656e6400420000000000000001000000040100007e5f12004b000000526f746174696f6e506572696f640000420000000000000001000000050100003a5f1200440000004368616c6c656e6765506572696f64004200000000000000010000006b000000065f1200340000004d6f64756c65496442000000000000000100000006010000ec5e12001a0000002054686520736f636965746965732773206d6f64756c6520696420546865206e756d626572206f6620626c6f636b73206265747765656e206d656d62657273686970206368616c6c656e6765732e20546865206e756d626572206f6620626c6f636b73206265747765656e2063616e6469646174652f6d656d6265727368697020726f746174696f6e20706572696f64732e2054686520616d6f756e74206f6620696e63656e7469766520706169642077697468696e206561636820706572696f642e20446f65736e277420696e636c75646520566f7465725469702e20546865206e756d626572206f662074696d65732061206d656d626572206d617920766f7465207468652077726f6e672077617920286f72206e6f7420617420616c6c2c207768656e207468657920617265206120736b657074696329206265666f72652074686579206265636f6d652073757370656e6465642e2054686520616d6f756e74206f662074686520756e70616964207265776172642074686174206765747320646564756374656420696e207468652063617365207468617420656974686572206120736b657074696320646f65736e277420766f7465206f7220736f6d656f6e6520766f74657320696e207468652077726f6e67207761792e20546865206d696e696d756d20616d6f756e74206f662061206465706f73697420726571756972656420666f7220612062696420746f206265206d6164652e00000000ff1612000d0000000000000068621200020000000000000000000000986212000900000000000000000000000c1712000f00000000000000e0621200010000000000000000000000f86212000700000000000000000000001b1712001000000000000000e0621200010000000000000000000000306312000800000000000000000000002b1712000e0000000000000070631200020000000000000000000000a0631200130000000000000000000000391712000b000000000000003864120001000000000000000000000050641200130000000000000000000000441712000700000000000000e864120003000000000000000000000030651200160000000000000000000000730e12000300000000000000e0651200020000000000000000000000106612001900000000000000000000004b171200090000000000000038641200010000000000000000000000d8661200110000000000000000000000aa4d12000500000000000000807512001500000000000000957512000b00000000000000f3201200230000006b7412004b000000b67412004d0000000375120015000000301a130000000000f5bd12000b000000e473120013000000187512002d000000457512003b00000044be12000c00000000000000607412000b000000000000009dd9120016000000a57312003f000000301a130000000000f5bd12000b000000e473120013000000f7731200340000002b7412003500000044be12000c000000d4721200570000002b7312002b000000301a130000000000f5bd12000b00000056731200140000006a731200240000008e7312001700000044be12000c00000000000000486f12000600000000000000cc8d12000700000000000000f020120003000000000000007ac312000c0000004371120057000000301a13000000000098c9120034000000301a1300000000009a71120055000000ef71120035000000301a130000000000ff6c120058000000576d1200170000006e6d12003b000000301a130000000000a96d12001e000000301a130000000000f5bd12000b000000247212003300000057721200250000007c72120031000000ad7212002700000044be12000c00000000000000a96c1200040000000000000091d91200070000004e6f120055000000301a130000000000a36f120038000000301a130000000000db6f1200540000002f701200510000008070120014000000301a130000000000be671200590000001768120058000000301a1300000000009470120024000000301a130000000000f5bd12000b000000ea95120015000000b870120037000000ef70120024000000137112003000000044be12000c00000000000000486f12000600000000000000cc8d12000700000000000000f020120003000000000000007ac312000c00000000000000ad6c12000900000000000000b66c12000c000000c26c12003d000000301a130000000000df69120055000000346a12001d000000301a130000000000ff6c120058000000576d1200170000006e6d12003b000000b76a1200540000000b6b120036000000301a130000000000a96d12001e000000301a130000000000f5bd12000b000000c76d1200550000001c6e1200300000004c6e1200420000008e6e120043000000d16e1200390000000a6f1200200000002a6f12001e00000044be12000c00000000000000a96c1200040000000000000091d912000700000000000000ad6c12000900000000000000b66c12000c000000b26912002d000000301a130000000000df69120055000000346a12001d000000301a130000000000be67120059000000516a120058000000a96a12000e000000b76a1200540000000b6b120036000000301a130000000000416b1200590000009a6b12000d000000301a130000000000f5bd12000b0000006f68120039000000a76b120045000000cf681200400000000f69120041000000301a130000000000ec6b120058000000446c120035000000796c12001d000000966c12001300000044be12000c0000006067120018000000301a13000000000098c9120034000000301a1300000000007867120046000000301a130000000000be671200590000001768120058000000301a130000000000f5bd12000b0000006f68120039000000a868120027000000cf681200400000000f69120041000000506912002b0000007b6912003700000044be12000c00000020436c6f736520616e64207061796f75742061207469702e2054686520746970206964656e74696669656420627920606861736860206d75737420686176652066696e69736865642069747320636f756e74646f776e20706572696f642e202d206068617368603a20546865206964656e74697479206f6620746865206f70656e2074697020666f722077686963682061207469702076616c7565206973206465636c617265642e205468697320697320666f726d65642020206173207468652068617368206f6620746865207475706c65206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e6566696369617279206163636f756e742049442e202d20436f6d706c65786974793a20604f285429602077686572652060546020697320746865206e756d626572206f6620746970706572732e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602e202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e2020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e202d20446252656164733a206054697073602c206054697070657273602c20607469702066696e64657260202d2044625772697465733a2060526561736f6e73602c206054697073602c206054697070657273602c20607469702066696e64657260204465636c6172652061207469702076616c756520666f7220616e20616c72656164792d6f70656e207469702e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e6420746865207369676e696e67206163636f756e74206d7573742062652061206d656d626572206f662074686520605469707065727360207365742e2020206173207468652068617368206f6620746865207475706c65206f66207468652068617368206f6620746865206f726967696e616c207469702060726561736f6e6020616e64207468652062656e65666963696172792020206163636f756e742049442e202d20607469705f76616c7565603a2054686520616d6f756e74206f66207469702074686174207468652073656e64657220776f756c64206c696b6520746f20676976652e20546865206d656469616e2074697020202076616c7565206f662061637469766520746970706572732077696c6c20626520676976656e20746f20746865206077686f602e20456d6974732060546970436c6f73696e676020696620746865207468726573686f6c64206f66207469707065727320686173206265656e207265616368656420616e642074686520636f756e74646f776e20706572696f642068617320737461727465642e2020206465636f64696e6720605469707065726020766563206f66206c656e677468206054602c20696e736572742074697020616e6420636865636b20636c6f73696e672c20202041637475616c6c792077656967687420636f756c64206265206c6f77657220617320697420646570656e6473206f6e20686f77206d616e7920746970732061726520696e20604f70656e5469706020627574206974202020697320776569676874656420617320696620616c6d6f73742066756c6c20692e65206f66206c656e6774682060542d31602e202d20446252656164733a206054697070657273602c20605469707360202d2044625772697465733a20605469707360686173687469705f76616c756542616c616e63654f663c543e204769766520612074697020666f7220736f6d657468696e67206e65773b206e6f2066696e6465722773206665652077696c6c2062652074616b656e2e202d2060726561736f6e603a2054686520726561736f6e20666f722c206f7220746865207468696e6720746861742064657365727665732c20746865207469703b2067656e6572616c6c7920746869732077696c6c20626520202061205554462d382d656e636f6465642055524c2e202d206077686f603a20546865206163636f756e742077686963682073686f756c6420626520637265646974656420666f7220746865207469702e20456d69747320604e657754697060206966207375636365737366756c2e202d20436f6d706c65786974793a20604f2852202b2054296020776865726520605260206c656e677468206f662060726561736f6e602c2060546020697320746865206e756d626572206f6620746970706572732e2020202d20604f285429603a206465636f64696e6720605469707065726020766563206f66206c656e677468206054602020202020605460206973206368617267656420617320757070657220626f756e6420676976656e2062792060436f6e7461696e734c656e677468426f756e64602e20202020205468652061637475616c20636f737420646570656e6473206f6e2074686520696d706c656d656e746174696f6e206f662060543a3a54697070657273602e2020202d20604f285229603a2068617368696e6720616e6420656e636f64696e67206f6620726561736f6e206f66206c656e67746820605260202d20446252656164733a206054697070657273602c2060526561736f6e7360202d2044625772697465733a2060526561736f6e73602c20605469707360726561736f6e20526574726163742061207072696f72207469702d7265706f72742066726f6d20607265706f72745f617765736f6d65602c20616e642063616e63656c207468652070726f63657373206f662074697070696e672e204966207375636365737366756c2c20746865206f726967696e616c206465706f7369742077696c6c20626520756e72657365727665642e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e642074686520746970206964656e74696669656420627920606861736860206d7573742068617665206265656e207265706f7274656420627920746865207369676e696e67206163636f756e74207468726f75676820607265706f72745f617765736f6d65602028616e64206e6f74207468726f75676820607469705f6e657760292e20456d697473206054697052657472616374656460206966207375636365737366756c2e2020202d20446570656e6473206f6e20746865206c656e677468206f662060543a3a48617368602077686963682069732066697865642e202d20446252656164733a206054697073602c20606f726967696e206163636f756e7460202d2044625772697465733a2060526561736f6e73602c206054697073602c20606f726967696e206163636f756e7460205265706f727420736f6d657468696e672060726561736f6e60207468617420646573657276657320612074697020616e6420636c61696d20616e79206576656e7475616c207468652066696e6465722773206665652e205061796d656e743a20605469705265706f72744465706f73697442617365602077696c6c2062652072657365727665642066726f6d20746865206f726967696e206163636f756e742c2061732077656c6c20617320605469705265706f72744465706f736974506572427974656020666f722065616368206279746520696e2060726561736f6e602e202d20436f6d706c65786974793a20604f2852296020776865726520605260206c656e677468206f662060726561736f6e602e2020202d20656e636f64696e6720616e642068617368696e67206f662027726561736f6e27202d20446252656164733a2060526561736f6e73602c206054697073602c206077686f206163636f756e74206461746160202d2044625772697465733a206054697073602c206077686f206163636f756e7420646174616020417070726f766520612070726f706f73616c2e2041742061206c617465722074696d652c207468652070726f706f73616c2077696c6c20626520616c6c6f636174656420746f207468652062656e656669636961727920616e6420746865206f726967696e616c206465706f7369742077696c6c2062652072657475726e65642e202d20436f6d706c65786974793a204f2831292e202d20446252656164733a206050726f706f73616c73602c2060417070726f76616c7360202d20446257726974653a2060417070726f76616c73602052656a65637420612070726f706f736564207370656e642e20546865206f726967696e616c206465706f7369742077696c6c20626520736c61736865642e202d20436f6d706c65786974793a204f283129202d20446252656164733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e7460202d2044625772697465733a206050726f706f73616c73602c206072656a65637465642070726f706f736572206163636f756e746070726f706f73616c5f69642050757420666f727761726420612073756767657374696f6e20666f72207370656e64696e672e2041206465706f7369742070726f706f7274696f6e616c20746f207468652076616c756520697320726573657276656420616e6420736c6173686564206966207468652070726f706f73616c2069732072656a65637465642e2049742069732072657475726e6564206f6e6365207468652070726f706f73616c20697320617761726465642e202d20446252656164733a206050726f706f73616c436f756e74602c20606f726967696e206163636f756e7460202d2044625772697465733a206050726f706f73616c436f756e74602c206050726f706f73616c73602c20606f726967696e206163636f756e7460436f6d706163743c42616c616e63654f663c543e3e62656e6566696369617279000000000ef812000d000000000000000000000075b412000d00000000000000000000000000000000000000000000000000000000000000301a1300587712000000000000000000687712000100000000000000010000000000000000b5120009000000010500000000000075b412000d00000000000000707712002400000000000000000000000000000000000000301a1300947712000000000000000000a4771200010000000000000000000000000000001bf81200090000000000000000000000ac7712001200000000000000000000000000000000000000000000000000000000000000301a1300c07712000000000000000000d077120001000000000000000100000000000000d877120004000000010500000000000091d912000700000000000000dc7712003c00000000000000000000000000000000000000301a130018781200000000000000000028781200030000000000000000000000000000004078120007000000010600000000000091d912000700000000000000cc8d12000700000000000000000000000000000000000000301a13004878120000000000000000005878120002000000000000000000000042000000000000000100000057000000347a12002900000050726f706f73616c3c543a3a4163636f756e7449642c2042616c616e63654f663c543e3e4200000000000000010000005b000000157a12001f0000005665633c50726f706f73616c496e6465783e000042000000000000000100000059000000d77912003e000000546970734f70656e5469703c543a3a4163636f756e7449642c2042616c616e63654f663c543e2c20543a3a426c6f636b4e756d6265722c20543a3a486173683e4200000000000000010000005b0000001279120056000000687912004f000000b779120020000000526561736f6e7300420000000000000001000000f60000006878120052000000ba781200580000002053696d706c6520707265696d616765206c6f6f6b75702066726f6d2074686520726561736f6e2773206861736820746f20746865206f726967696e616c20646174612e20416761696e2c2068617320616e20696e73656375726520656e756d657261626c6520686173682073696e636520746865206b65792069732067756172616e7465656420746f2062652074686520726573756c74206f6620612073656375726520686173682e2054697073207468617420617265206e6f742079657420636f6d706c657465642e204b65796564206279207468652068617368206f66206028726561736f6e2c2077686f29602066726f6d207468652076616c75652e2054686973206861732074686520696e73656375726520656e756d657261626c6520686173682066756e6374696f6e2073696e636520746865206b657920697473656c6620697320616c72656164792067756172616e7465656420746f20626520612073656375726520686173682e2050726f706f73616c20696e646963657320746861742068617665206265656e20617070726f76656420627574206e6f742079657420617761726465642e2050726f706f73616c7320746861742068617665206265656e206d6164652e204e756d626572206f662070726f706f73616c7320746861742068617665206265656e206d6164652e00000000000000587c12000c00000000000000647c12000700000000000000301a13006c7c120000000000000000007c7c12000200000000000000000000008c7c12001300000000000000b66c12000c00000000000000301a13003c7d12000000000000000000a07c1200010000000000000000000000a87c12000b0000000000000006cf12000e00000000000000301a1300e47c12000000000000000000b47c1200010000000000000000000000bc7c12000400000000000000647c12000700000000000000301a1300c07c12000000000000000000d07c1200010000000000000000000000d87c12000c0000000000000006cf12000e00000000000000301a1300e47c12000000000000000000f47c1200010000000000000000000000fc7c12000d00000000000000097d12000700000000000000301a1300107d12000000000000000000207d1200010000000000000000000000287d12001400000000000000b66c12000c00000000000000301a13003c7d120000000000000000004c7d1200010000000000000000000000547d12001700000000000000b66c12000c00000000000000301a13006c7d120000000000000000007c7d1200010000000000000000000000cc5e12000800000000000000cc5e12000800000000000000301a1300847d12000000000000000000947d1200010000000000000050726f706f73616c426f6e645065726d696c6c0042000000000000000100000007010000ae7f120055000000038012004400000050726f706f73616c426f6e644d696e696d756d005c7f1200520000005370656e64506572696f64003a7f1200220000004275726e42000000000000000100000008010000f67e120044000000546970436f756e74646f776e42000000000000000100000009010000a57e12005100000054697046696e6465727346656550657263656e744200000000000000010000000a010000597e12004c0000005469705265706f72744465706f7369744261736542000000000000000100000068000000247e1200350000005469705265706f72744465706f736974506572427974650042000000000000000100000084000000e27d1200420000004200000000000000010000000b0100009c7d120046000000205468652074726561737572792773206d6f64756c652069642c207573656420666f72206465726976696e672069747320736f7665726569676e206163636f756e742049442e2054686520616d6f756e742068656c64206f6e206465706f7369742070657220627974652077697468696e2074686520746970207265706f727420726561736f6e2e2054686520616d6f756e742068656c64206f6e206465706f73697420666f7220706c6163696e67206120746970207265706f72742e2054686520616d6f756e74206f66207468652066696e616c2074697020776869636820676f657320746f20746865206f726967696e616c207265706f72746572206f6620746865207469702e2054686520706572696f6420666f722077686963682061207469702072656d61696e73206f70656e20616674657220697320686173206163686965766564207468726573686f6c6420746970706572732e2050657263656e74616765206f662073706172652066756e64732028696620616e7929207468617420617265206275726e7420706572207370656e6420706572696f642e20506572696f64206265747765656e2073756363657373697665207370656e64732e204d696e696d756d20616d6f756e74206f662066756e647320746861742073686f756c6420626520706c6163656420696e2061206465706f73697420666f72206d616b696e6720612070726f706f73616c2e204672616374696f6e206f6620612070726f706f73616c27732076616c756520746861742073686f756c6420626520626f6e64656420696e206f7264657220746f20706c616365207468652070726f706f73616c2e20416e2061636365707465642070726f706f73616c2067657473207468657365206261636b2e20412072656a65637465642070726f706f73616c20646f6573206e6f742e74686520636f6e74726163742065786973747320616e6420696e2074686520616c6976652073746174653b0a090974686520757064617465642062616c616e6365206d7573742062652067726561746572207468616e2073756273697374656e6365206465706f7369743b0a0909746869732066756e6374696f6e20646f65736e27742072657475726e20604e6f6e65603b0a09097165640a09090000f48012003600000074010000170000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f636f6e7472616374732f7372632f72656e742e72730000941d120033000000bd0500002b0000005c8112003400000070020000180000005c811200340000009c0200001a0000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f74726561737572792f7372632f6c69622e7273000000005e0c12000b00000000000000ac8112000100000000000000b4811200200000002053656e646572206d75737420626520746865205375646f206163636f756e74696e636f7272656374206964656e746974796e6f7420766f7563686564000000941d120033000000ac04000035000000622e6c656e2829203e20313030303b2071656400941d120033000000c80400003100000000000000e31612001c0000000000000008831200010000000000000000000000cf161200140000000000000010831200010000000000000000000000c31612000c0000000000000018831200010000000000000000000000b71612000c0000000000000020831200010000000000000000000000ad1612000a0000000000000028831200010000000000000000000000a41612000900000000000000308312000100000000000000000000009b161200090000000000000038831200010000000000000000000000921612000900000000000000408312000100000000000000a18412001f000000868412001b000000648412002200000041841200230000002884120019000000e083120048000000958312004b000000488312004d00000020546865207469702063616e6e6f7420626520636c61696d65642f636c6f73656420626563617573652069742773207374696c6c20696e2074686520636f756e74646f776e20706572696f642e20546865207469702063616e6e6f7420626520636c61696d65642f636c6f736564206265636175736520746865726520617265206e6f7420656e6f7567682074697070657273207965742e20546865206163636f756e7420617474656d7074696e6720746f20726574726163742074686520746970206973206e6f74207468652066696e646572206f6620746865207469702e2054686520746970206861736820697320756e6b6e6f776e2e20546865207469702077617320616c726561647920666f756e642f737461727465642e2054686520726561736f6e20676976656e206973206a75737420746f6f206269672e204e6f2070726f706f73616c206174207468617420696e6465782e2050726f706f73657227732062616c616e636520697320746f6f206c6f772e000000005b0e12000b00000000000000b8861200010000000000000000000000f2af12000900000000000000c08612000100000000000000000000004e0e12000d00000000000000c8861200010000000000000000000000450e12000900000000000000d0861200010000000000000000000000390e12000c00000000000000d8861200010000000000000000000000310e12000800000000000000e0861200010000000000000000000000230e12000e00000000000000e8861200010000000000000000000000140e12000f00000000000000f0861200010000000000000000000000050e12000f00000000000000f8861200010000000000000000000000fa0d12000b0000000000000000871200010000000000000000000000f60d1200040000000000000008871200010000000000000000000000ef0d1200070000000000000010871200010000000000000000000000e50d12000a0000000000000018871200010000000000000000000000d50d1200100000000000000020871200010000000000000000000000c90d12000c0000000000000028871200010000000000000000000000a90d12000a0000000000000030871200010000000000000000000000bf0d12000a0000000000000038871200010000000000000000000000b80d1200070000000000000040871200010000000000000036891200240000002089120016000000068912001a000000f388120013000000dc88120017000000c988120013000000b08812001900000089881200270000004f8812003a00000037881200180000001288120025000000f78712001b000000da8712001d000000bd8712001d000000a4871200190000008387120021000000648712001f000000488712001c000000205468652063616c6c6572206973206e6f742074686520686561642e205468652063616c6c6572206973206e6f742074686520666f756e6465722e20546f6f206d616e79206d656d6265727320696e2074686520736f63696574792e2055736572206973206e6f7420612063616e6469646174652e205573657220697320616c726561647920612063616e6469646174652e20557365722068617320616c7265616479206d6164652061206269642e2043616e6e6f742072656d6f76652074686520666f756e6465722e2043616e6e6f742072656d6f7665207468652068656164206f662074686520636861696e2e204d656d626572206973206e6f7420766f756368696e672e204d656d62657220697320616c726561647920766f756368696e67206f722062616e6e65642066726f6d20766f756368696e6720616761696e2e204e6f7420656e6f75676820696e20706f7420746f206163636570742063616e6469646174652e20536f636965747920616c726561647920666f756e6465642e204e6f7468696e6720746f207061796f75742e2055736572206973206e6f742073757370656e6465642e20557365722069732073757370656e6465642e205573657220697320616c72656164792061206d656d6265722e2055736572206973206e6f742061206d656d6265722e20416e20696e636f727265637420706f736974696f6e207761732070726f76696465642e546f6f536f6f6e4368616e676550656e64696e67526573756d654661696c656450617573654661696c65647265706f72745f6d69736265686176696f723a6772616e6470615f617574686f7269746965734e6f4b6579734475706c6963617465644b65794e6f4173736f63696174656456616c696461746f724964496e76616c696450726f6f667365745f6b65797370757267655f6b65797356616c696461746f7273666f726b2e726563656e746c792065786563757465642e4200000000000000010000000c0100000d0100000e0100000f0100001001000011010000656e74697265206e65775f7365742077617320676976656e20746f206275696c645f737570706f72745f6d61703b20656e20656e747279206d757374206265206372656174656420666f722065616368206974656d3b207165640000a48a12003e000000eb020000230000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f656c656374696f6e732d70687261676d656e2f7372632f6c69622e7273000042000000000000000100000064000000756e636c6573303066696e616c6e756d6e6f7420656e6f7567682067617320746f20706179207472616e736665722066656562616c616e636520746f6f206c6f7720746f2073656e642076616c756576616c756520746f6f206c6f7720746f20637265617465206163636f756e746272696e67732073656e6465722062656c6f77206578697374656e7469616c206465706f73697464657374696e6174696f6e2062616c616e636520746f6f206869676820746f20726563656976652076616c756550656e64696e674368616e676553746174655175657565644b6579735374616c6c6564000000420000000800000004000000120100001301000000000000000000001401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e657874466f726365644e6578744b6579730000188d12004500000075000000450000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f737570706f72742f7372632f73746f726167652f67656e657261746f722f6d61702e7273000000000000008589120012000000000000008c8d1200010000000000000000000000a48d1200010000000000000000000000c58d12000700000000000000cc8d120007000000ac8d120019000000205265706f727420736f6d65206d69736265686176696f722e5f7265706f72745665633c75383e0000000000c38b1200050000000000000000000000e48f12001b00000000000000000000000000000000000000000000000000000000000000301a13000090120000000000000000001090120001000000000000000100000000000000b68b12000d0000000000000000000000189012002300000000000000000000000000000000000000000000000000000000000000301a1300389a120000000000000000003c90120001000000000000000000000000000000f48c12000a000000000000000000000006cf12000e00000000000000000000000000000000000000000000000000000000000000301a1300ac90120000000000000000004490120001000000000000000000000000000000d28b12000700000000000000000000004c9012002000000000000000000000000000000000000000000000000000000000000000301a13006c90120000000000000000007c901200010000000000000000000000000000009cf312000c0000000000000000000000849012000500000000000000000000000000000000000000000000000000000000000000301a13008c90120000000000000000009c90120002000000000000000100000000000000b7f312000c000000010500000000000084901200050000000000000097f612000c00000000000000000000000000000000000000301a1300ac9012000000000000000000bc90120002000000000000000000000053746f72656453746174653c543a3a426c6f636b4e756d6265723e0042000000000000000100000015010000489212002400000053746f72656450656e64696e674368616e67653c543a3a426c6f636b4e756d6265723e001792120031000000e89112002f00000028543a3a426c6f636b4e756d6265722c20543a3a426c6f636b4e756d6265722942000000000000000100000085000000c49112002400000053657449640000004200000000000000010000006e0000003c9112005700000093911200310000004200000000000000010000005b000000cc90120056000000229112001a0000002041206d617070696e672066726f6d206772616e6470612073657420494420746f2074686520696e646578206f6620746865202a6d6f737420726563656e742a2073657373696f6e20666f7220776869636820697473206d656d62657273207765726520726573706f6e7369626c652e20546865206e756d626572206f66206368616e6765732028626f746820696e207465726d73206f66206b65797320616e6420756e6465726c79696e672065636f6e6f6d696320726573706f6e736962696c69746965732920696e20746865202273657422206f66204772616e6470612076616c696461746f72732066726f6d2067656e657369732e20607472756560206966207765206172652063757272656e746c79207374616c6c65642e206e65787420626c6f636b206e756d6265722077686572652077652063616e20666f7263652061206368616e67652e2050656e64696e67206368616e67653a20287369676e616c65642061742c207363686564756c6564206368616e6765292e205374617465206f66207468652063757272656e7420617574686f72697479207365742e00000000e18912000800000000000000c4921200020000000000000000000000f49212000e0000000000000000000000e98912000a00000000000000301a1300000000000000000000000000649312000c0000000000000000000000a79612000400000000000000ab9612000700000000000000b29612000500000000000000cc8d120007000000689512003a000000a295120048000000f793120031000000301a1300000000002894120035000000301a130000000000f5bd12000b000000ea951200150000008a94120056000000ff9512003c0000003b961200290000006496120021000000859612002200000044be12000c000000c493120033000000f793120031000000301a1300000000002894120035000000301a130000000000f5bd12000b0000005d9412002d0000008a94120056000000e09412003c0000001c95120029000000459512002300000044be12000c0000002052656d6f76657320616e792073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c65722e205468697320646f65736e27742074616b652065666665637420756e74696c20746865206e6578742073657373696f6e2e20546865206469737061746368206f726967696e206f6620746869732066756e6374696f6e206d757374206265207369676e65642e202d20436f6d706c65786974793a20604f2831296020696e206e756d626572206f66206b65792074797065732e20202041637475616c20636f737420646570656e6473206f6e20746865206e756d626572206f66206c656e677468206f662060543a3a4b6579733a3a6b65795f6964732829602077686963682069732066697865642e202d20446252656164733a2060543a3a56616c696461746f7249644f66602c20604e6578744b657973602c20606f726967696e206163636f756e7460202d2044625772697465733a20604e6578744b657973602c20606f726967696e206163636f756e7460202d20446257726974657320706572206b65792069643a20604b65794f776e646572602053657473207468652073657373696f6e206b6579287329206f66207468652066756e6374696f6e2063616c6c657220746f20606b657973602e20416c6c6f777320616e206163636f756e7420746f20736574206974732073657373696f6e206b6579207072696f7220746f206265636f6d696e6720612076616c696461746f722e202d20436f6d706c65786974793a20604f28312960202d20446252656164733a20606f726967696e206163636f756e74602c2060543a3a56616c696461746f7249644f66602c20604e6578744b65797360202d2044625772697465733a20606f726967696e206163636f756e74602c20604e6578744b65797360202d204462526561647320706572206b65792069643a20604b65794f776e657260202d20446257726974657320706572206b65792069643a20604b65794f776e6572606b657973543a3a4b65797370726f6f660000000000f38912000a0000000000000000000000209912001300000000000000000000000000000000000000000000000000000000000000301a13003499120000000000000000004499120001000000000000000100000000000000a5f512000c000000000000000000000097f612000c00000000000000000000000000000000000000000000000000000000000000301a13004c99120000000000000000005c99120001000000000000000100000000000000b1f512000d0000000000000000000000a1f512000400000000000000000000000000000000000000000000000000000000000000301a13006499120000000000000000007499120002000000000000000100000000000000c88b12000a0000000000000000000000849912001e00000000000000000000000000000000000000000000000000000000000000301a1300a49912000000000000000000b499120002000000000000000100000000000000bef51200120000000000000000000000c49912000800000000000000000000000000000000000000000000000000000000000000301a1300cc9912000000000000000000dc99120003000000000000000100000000000000fe8c1200080000000105000000000000f49912000e00000000000000ab9612000700000000000000000000000000000000000000301a1300049a12000000000000000000149a1200010000000000000000000000000000001c9a1200080000000105000000000000249a12001400000000000000f49912000e00000000000000000000000000000000000000301a1300389a12000000000000000000489a12000100000000000000000000005665633c543a3a56616c696461746f7249643e0042000000000000000100000059000000429c12001f00000042000000000000000100000057000000249c12001e0000004200000000000000010000005b000000ad9b12004e000000fb9b1200290000005665633c28543a3a56616c696461746f7249642c20543a3a4b657973293e000042000000000000000100000059000000269b12004f000000759b1200380000005665633c7533323e42000000000000000100000059000000b99a120020000000301a130000000000d99a12004d000000543a3a56616c696461746f72496400004200000000000000010000005b000000929a1200270000004b65794f776e6572284b65795479706549642c205665633c75383e294200000000000000010000005b000000509a12004200000020546865206f776e6572206f662061206b65792e20546865206b65792069732074686520604b657954797065496460202b2074686520656e636f646564206b65792e20546865206e6578742073657373696f6e206b65797320666f7220612076616c696461746f722e20496e6469636573206f662064697361626c65642076616c696461746f72732e205468652073657420697320636c6561726564207768656e20606f6e5f73657373696f6e5f656e64696e67602072657475726e732061206e657720736574206f66206964656e7469746965732e2054686520717565756564206b65797320666f7220746865206e6578742073657373696f6e2e205768656e20746865206e6578742073657373696f6e20626567696e732c207468657365206b6579732077696c6c206265207573656420746f2064657465726d696e65207468652076616c696461746f7227732073657373696f6e206b6579732e20547275652069662074686520756e6465726c79696e672065636f6e6f6d6963206964656e746974696573206f7220776569676874696e6720626568696e64207468652076616c696461746f727320686173206368616e67656420696e20746865207175657565642076616c696461746f72207365742e2043757272656e7420696e646578206f66207468652073657373696f6e2e205468652063757272656e7420736574206f662076616c696461746f72732e000000749c12003a00000033000000120000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f72756e74696d652f7372632f63757276652e727372656163686564206d6178696d756d2064657074682c2063616e6e6f7420696e7374616e7469617465001601000018000000040000001701000018010000190100001a0100001b0100001c010000696e73756666696369656e742072656d61696e696e672062616c616e63656e6f7420656e6f7567682067617320746f20706179206261736520696e7374616e74696174652066656572656163686564206d6178696d756d2064657074682c2063616e6e6f74206d616b6520612063616c6c6e6f7420656e6f7567682067617320746f2070617920626173652063616c6c20666565636f6e747261637420686173206265656e20657669637465646d656d6f727976616c69646174696f6e3a20696d706f727420656e74727920706f696e747320746f2061206e6f6e2d6578697374656e74207479706543616e6e6f7420696d706f727420676c6f62616c736d6f64756c6520696d706f7274732061206e6f6e2d6578697374656e742066756e6374696f6e6d6f64756c6520696d706f72747320606578745f7072696e746c6e60206275742064656275672066656174757265732064697361626c656443616e6e6f7420696d706f7274207461626c65736d6f64756c652068617320696d706f7274732066726f6d2061206e6f6e2d27656e7627206e616d6573706163654d656d6f727920696d706f7274206d757374206861766520746865206669656c64206e616d6520276d656d6f7279274d756c7469706c65206d656d6f727920696d706f72747320646566696e65644d6178696d756d206e756d626572206f662070616765732073686f756c6420626520616c77617973206465636c617265642e52657175657374656420696e697469616c206e756d626572206f662070616765732073686f756c64206e6f74206578636565642074686520726571756573746564206d6178696d756d4d6178696d756d206e756d626572206f662070616765732073686f756c64206e6f74206578636565642074686520636f6e66696775726564206d6178696d756d2e00000000007a8912000b0000000000000014a012000200000000000000000000006e8912000c0000000000000024a01200020000000000000000000000618912000d0000000000000034a012000100000000000000000000005a89120007000000000000003ca0120001000000000000001da11200420000005fa112002a000000afa0120045000000f4a012002900000074a012003b00000044a01200300000002043616e6e6f74207369676e616c20666f72636564206368616e676520736f20736f6f6e206166746572206c6173742e20417474656d707420746f207369676e616c204752414e445041206368616e67652077697468206f6e6520616c72656164792070656e64696e672e20417474656d707420746f207369676e616c204752414e44504120726573756d65207768656e2074686520617574686f72697479207365742069736e2774207061757365642028656974686572206c697665206f7220616c72656164792070656e64696e6720726573756d65292e20417474656d707420746f207369676e616c204752414e445041207061757365207768656e2074686520617574686f72697479207365742069736e2774206c697665202865697468657220706175736564206f7220616c72656164792070656e64696e67207061757365292e00000000000000d58912000c00000000000000fca11200010000000000000000000000be891200170000000000000004a21200010000000000000000000000b18912000d000000000000000ca21200010000000000000000000000ab891200060000000000000014a21200010000000000000088a212001900000060a212002800000046a212001a0000001ca212002a000000204e6f206b65797320617265206173736f63696174656420776974682074686973206163636f756e742e2052656769737465726564206475706c6963617465206b65792e204e6f206173736f6369617465642076616c696461746f7220494420666f72206163636f756e742e20496e76616c6964206f776e6572736869702070726f6f662e000000b4a212003900000077010000330000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f70687261676d656e2f7372632f6c69622e72734469676573744974656d206e6f7420657175616c5468657265206973206f6e6c79206f6e6520666174616c206572726f723b20716564004200000008000000040000001d010000a2a3120036000000a0020000010000004e6f206f74686572206572726f72732061726520616363657074656420616674657220616e2068617264206572726f7221496e686572656e7420776974682073616d65206964656e74696669657220616c726561647920657869737473212f686f6d652f6461766964642f6465762f7375627374726174652f62696e2f6e6f64652f72756e74696d652f7372632f6c69622e7273417574686f724f6c64556e636c65556e636c65416c7265616479496e636c75646564546f6f48696768556e636c6547656e65736973556e636c65546f6f4d616e79556e636c6573556e636c6573416c7265616479536574496e76616c6964556e636c65506172656e747365745f756e636c6573005ca412006a000000910000000d0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e302f7372632f656e636f64655f617070656e642e727350726576696f7573206d617463682061726d206d61746368657320616e7974696e67206c657373207468616e20325e33303b2071656400000000000000000000000010a512003d000000736869667465642073756666696369656e74206269747320726967687420746f206c656164206f6e6c79206c656164696e67207a65726f733b2071656400000000000000000000000000000000000000556e636c657300000000000041a412000a0000000000000094a51200010000000000000000000000aca51200010000000000000000000000cda512000a00000000000000d7a512000e000000b4a51200190000002050726f76696465206120736574206f6620756e636c65732e6e65775f756e636c65735665633c543a3a4865616465723e0000000000000060a51200060000000000000000000000f0a612003a00000000000000000000000000000000000000000000000000000000000000301a13002ca7120000000000000000003ca7120001000000000000000100000000000000d8a312000600000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a130044a71200000000000000000054a71200010000000000000000000000000000009de812000c0000000000000000000000a1f512000400000000000000000000000000000000000000000000000000000000000000301a13005ca7120000000000000000006ca712000100000000000000010000005665633c556e636c65456e7472794974656d3c543a3a426c6f636b4e756d6265722c20543a3a486173682c20543a3a4163636f756e7449643e3e000042000000000000000100000059000000bca71200070000004200000000000000010000005b000000a3a71200190000004200000000000000010000005b00000074a712002f000000205768657468657220756e636c6573207765726520616c72656164792073657420696e207468697320626c6f636b2e20417574686f72206f662063757272656e7420626c6f636b2e20556e636c6573000100000001000000000000000000000000000000010000004ca8120045000000c1030000220000004ca8120045000000dd030000150000004ca8120045000000eb0300001e0000004ca8120045000000f4030000180000004ca8120045000000f5030000190000004ca8120045000000f80300001a0000004ca8120045000000fe0300000d0000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962616c6c6f632f736c6963652e7273000000000000002fa41200120000000000000058a912000100000000000000000000001fa41200100000000000000060a9120001000000000000000000000012a412000d0000000000000068a9120001000000000000000000000006a412000c0000000000000070a91200010000000000000000000000faa312000c0000000000000078a91200010000000000000000000000e6a31200140000000000000080a91200010000000000000000000000dea31200080000000000000088a91200010000000000000045aa12002300000024aa12002100000013aa120011000000fda9120016000000dda9120020000000bea912001f00000090a912002e0000002054686520756e636c652069736e277420726563656e7420656e6f75676820746f20626520696e636c756465642e2054686520756e636c6520697320616c726561647920696e636c756465642e2054686520756e636c6520697320746f6f206869676820696e20636861696e2e2054686520756e636c652069732067656e657369732e20546f6f206d616e7920756e636c65732e20556e636c657320616c72656164792073657420696e2074686520626c6f636b2e2054686520756e636c6520706172656e74206e6f7420696e2074686520636861696e2e70aa12002a000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64653a200000a4aa1200230000005f5f5068616e746f6d4974656d2073686f756c64206e6576657220626520757365642e496e7374616e636532436f6c6c656374697665496e7374616e636531436f6c6c656374697665000000f8aa120023000000605f5f49676e6f7265602063616e206e6576657220626520636f6e7374727563746564416c726561647950726f78794f766572666c6f775374696c6c4163746976655468726573686f6c64416c7265616479566f756368656444656c6179506572696f644e6f74467269656e644e6f7453746172746564416c726561647953746172746564416c72656164795265636f76657261626c654e6f745265636f76657261626c654e6f74536f727465644d6178467269656e64734e6f74456e6f756768467269656e64735a65726f5468726573686f6c644e6f74416c6c6f77656461735f7265636f76657265647365745f7265636f76657265646372656174655f7265636f76657279696e6974696174655f7265636f76657279766f7563685f7265636f76657279636c61696d5f7265636f76657279636c6f73655f7265636f7665727972656d6f76655f7265636f7665727963616e63656c5f7265636f76657265640000000000000064ad12000f0000000000000074ad12000100000000000000000000007cad120001000000000000000000000084ad1200110000000000000098ad1200020000000000000000000000a8ad1200010000000000000000000000b0ad12000f00000000000000c0ad1200030000000000000000000000d8ad1200010000000000000000000000e0ad12000e0000000000000098ad1200020000000000000000000000f0ad1200010000000000000000000000f8ad1200100000000000000098ad120002000000000000000000000008ae120001000000000000000000000010ae12000f0000000000000074ad120001000000000000000000000020ae120001000000000000005265636f76657279437265617465640020af1200090000006aaf1200320000005265636f76657279496e6974696174656400000020af12000900000020af12000900000029af1200410000005265636f76657279566f75636865640020af12000900000020af12000900000020af120009000000d0ae1200500000005265636f76657279436c6f736564000092ae12003e0000004163636f756e745265636f76657265645bae1200370000005265636f7665727952656d6f7665640028ae1200330000002041207265636f766572792070726f6365737320686173206265656e2072656d6f76656420666f7220616e206163636f756e74204163636f756e745f3120686173206265656e207375636365737366756c6c79207265636f7665726564206279206163636f756e745f322041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20636c6f7365642041207265636f766572792070726f6365737320666f72206163636f756e745f31206279206163636f756e745f3220686173206265656e20766f756368656420666f72206279206163636f756e745f334163636f756e7449642041207265636f766572792070726f6365737320686173206265656e20696e6974696174656420666f72206163636f756e745f31206279206163636f756e745f322041207265636f766572792070726f6365737320686173206265656e2073657420757020666f7220616e206163636f756e745072696d65546f6f4561726c79416c7265616479496e697469616c697a65644475706c6963617465566f746557726f6e67496e64657850726f706f73616c4d697373696e674475706c696361746550726f706f73616c4e6f744d656d6265727365745f6d656d626572736578656375746570726f706f7365766f7465636c6f73650000000000000054b1120008000000000000005cb112000400000000000000000000007cb112000200000000000000000000008cb11200050000000000000094b11200050000000000000000000000bcb11200020000000000000000000000ccb112000800000000000000d4b11200010000000000000000000000dcb11200010000000000000000000000e4b112000b00000000000000d4b11200010000000000000000000000f0b11200010000000000000000000000f8b11200080000000000000000b2120002000000000000000000000010b2120001000000000000000000000018b212000e0000000000000000b2120002000000000000000000000028b2120001000000000000000000000030b21200060000000000000038b2120003000000000000000000000050b21200010000000000000050726f706f73656420af12000900000075b412000d00000089b21200040000008db212000b00000012b412005300000065b4120010000000566f74656400000020af12000900000089b2120004000000a1f51200040000008db212000b0000008db212000b0000008ab3120042000000ccb3120046000000417070726f76656489b212000400000059b3120031000000446973617070726f7665640024b3120035000000457865637574656489b2120004000000a1f5120004000000e3b21200410000004d656d6265724578656375746564000098b212004b000000436c6f736564000089b21200040000008db212000b0000008db212000b00000058b212003100000020412070726f706f73616c2077617320636c6f73656420616674657220697473206475726174696f6e207761732075702e486173684d656d626572436f756e7420412073696e676c65206d656d6265722064696420736f6d6520616374696f6e3b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e2041206d6f74696f6e207761732065786563757465643b2060626f6f6c6020697320747275652069662072657475726e656420776974686f7574206572726f722e2041206d6f74696f6e20776173206e6f7420617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2077617320617070726f76656420627920746865207265717569726564207468726573686f6c642e2041206d6f74696f6e2028676976656e20686173682920686173206265656e20766f746564206f6e20627920676976656e206163636f756e742c206c656176696e6720612074616c6c79202879657320766f74657320616e64206e6f20766f74657320676976656e20726573706563746976656c7920617320604d656d626572436f756e7460292e2041206d6f74696f6e2028676976656e20686173682920686173206265656e2070726f706f7365642028627920676976656e206163636f756e742920776974682061207468726573686f6c642028676976656e20604d656d626572436f756e7460292e50726f706f73616c496e64657852616e646f6d6e657373436f6c6c656374697665466c697052616e646f6d4d6174657269616c2f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f72616e646f6d6e6573732d636f6c6c6563746976652d666c69702f7372632f6c69622e72730000a8b4120046000000540000001100000050726f706f73616c734d656d62657273566f74696e67486973746f726963616c53657373696f6e7300000000d7ab12000c00000000000000b4b61200020000000000000000000000e4b612000d0000000000000000000000e3ab12000d000000000000004cb712000200000000000000000000007cb712000d0000000000000000000000f0ab12000f00000000000000e4b712000300000000000000000000002cb812001b0000000000000000000000ffab1200110000000000000004b912000100000000000000000000001cb9120016000000000000000000000010ac12000e000000000000004cb71200020000000000000000000000ccb912001900000000000000000000001eac12000e0000000000000004b9120001000000000000000000000094ba12001400000000000000000000002cac12000e0000000000000034bb12000100000000000000000000004cbb12001400000000000000000000003aac12000f00000000000000301a1300000000000000000000000000ecbb120015000000000000000000000049ac1200100000000000000004b9120001000000000000000000000094bc12000b000000000000000000000025cb120007000000000000007ac312000c00000000000000fbea1200040000000000000061d112001700000048d0120029000000301a13000000000024bd12004500000069bd12003a000000301a130000000000a3bd12000c00000071d0120049000000bad0120040000000301a130000000000f5bd12000b000000fad01200250000001fd112004200000044be12000c0000000000000044d0120004000000000000007ac312000c0000000000000073c3120007000000000000007ac312000c00000014cf1200470000005bcf12001d000000301a13000000000078cf120032000000301a130000000000a3bd12000c000000aacf12002e000000d8cf120047000000301a130000000000f5bd12000b0000001fd012001900000038d012000c00000044be12000c00000000000000d6ce12000700000000000000ddce12001100000000000000eece12000900000000000000f7ce12000300000000000000face12000c0000000000000006cf12000e0000002ccb120057000000301a13000000000083cb12004c000000cfcb12005200000021cc12002f000000301a13000000000098c9120034000000301a130000000000a3bd12000c00000050cc12004900000099cc120035000000cecc12004c0000001acd12004700000061cd12002500000086cd12004f000000d5cd12003a000000301a130000000000f5bd12000b0000000fce12001a00000029ce12004b00000074ce12003b000000e3ca120027000000afce1200270000002bc112000d000000301a13000000000038c112001b00000044be12000c0000000000000025cb120007000000000000007ac312000c0000009fc812003b000000301a130000000000dac812004700000021c91200490000006ac912002e000000301a13000000000098c9120034000000301a130000000000a3bd12000c000000ccc912004500000011ca120040000000301a130000000000f5bd12000b00000051ca12003e0000008fca120054000000e3ca120027000000cec51200390000000acb12001b0000002bc112000d000000301a13000000000038c112001b00000044be12000c00000049c612004a00000093c612001a000000301a130000000000adc612004a000000f7c612001d000000301a130000000000a3bd12000c00000014c712003500000049c71200440000008dc7120015000000301a130000000000a2c7120049000000ebc7120009000000301a130000000000f5bd12000b00000000c512003f0000003fc512004700000086c5120048000000f4c712003b0000002fc812004700000007c61200270000002bc112000d000000301a13000000000076c812002900000044be12000c00000086c312003d000000301a130000000000c3c312004b0000000ec412004700000055c412004c000000301a130000000000a3bd12000c000000a1c412004b000000ecc4120014000000301a130000000000f5bd12000b00000000c512003f0000003fc512004700000086c5120048000000cec512003900000007c61200270000002bc112000d000000301a1300000000002ec612001b00000044be12000c0000000000000073c3120007000000000000007ac312000c00000053c112004500000098c112001a000000301a130000000000b2c1120048000000fac112003e000000301a130000000000dabf12004100000038c212003c000000301a130000000000a3bd12000c00000074c2120044000000301a130000000000f5bd12000b000000b8c2120021000000d9c212004f00000028c31200300000002bc112000d000000301a13000000000058c312001b00000044be12000c00000050be120057000000301a130000000000a7be120045000000ecbe120042000000301a1300000000002ebf12004900000077bf1200260000009dbf12003d000000301a130000000000dabf1200410000001bc0120039000000301a130000000000f5bd12000b00000054c01200180000006cc012004a000000b6c012004e00000004c11200270000002bc112000d000000301a13000000000038c112001b00000044be12000c000000ecbc120038000000301a13000000000024bd12004500000069bd12003a000000301a130000000000a3bd12000c000000afbd120046000000301a130000000000f5bd12000b00000000be12004400000044be12000c0000002043616e63656c20746865206162696c69747920746f20757365206061735f7265636f76657265646020666f7220606163636f756e74602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64207265676973746572656420746f2062652061626c6520746f206d616b652063616c6c73206f6e20626568616c66206f6620746865207265636f7665726564206163636f756e742e20506172616d65746572733a202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f75206172652061626c6520746f2063616c6c206f6e2d626568616c662d6f662e2023203c7765696768743e202d204f6e652073746f72616765206d75746174696f6e20746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f2831292023203c2f7765696768743e2052656d6f766520746865207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205265636f7665726564206163636f756e747320617265207374696c6c2061636365737369626c652e204e4f54453a205468652075736572206d757374206d616b65207375726520746f2063616c6c2060636c6f73655f7265636f7665727960206f6e20616c6c20616374697665207265636f7665727920617474656d707473206265666f72652063616c6c696e6720746869732066756e6374696f6e20656c73652069742077696c6c206661696c2e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e20746865207265636f76657261626c65206163636f756e742077696c6c20756e72657365727665207468656972207265636f7665727920636f6e66696775726174696f6e206465706f7369742e202860436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732920546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061207265636f76657261626c65206163636f756e742028692e652e206861732061207265636f7665727920636f6e66696775726174696f6e292e204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f206765742074686520707265666978206974657261746f7220666f7220616374697665207265636f7665726965732e204f283129202d204f6e652073746f7261676520726561642f72656d6f766520746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652062616c616e63652063616c6c20746f20756e72657365727665642e204f285829202d204f6e65206576656e742e20546f74616c20436f6d706c65786974793a204f2846202b2058292041732074686520636f6e74726f6c6c6572206f662061207265636f76657261626c65206163636f756e742c20636c6f736520616e20616374697665207265636f766572792070726f6365737320666f7220796f7572206163636f756e742e205061796d656e743a2042792063616c6c696e6720746869732066756e6374696f6e2c20746865207265636f76657261626c65206163636f756e742077696c6c207265636569766520746865207265636f76657279206465706f73697420605265636f766572794465706f7369746020706c616365642062792074686520726573637565722e207265636f76657261626c65206163636f756e74207769746820616e20616374697665207265636f766572792070726f6365737320666f722069742e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f207265736375652074686973207265636f76657261626c65206163636f756e742e204b65793a205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f7261676520726561642f72656d6f766520746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652062616c616e63652063616c6c20746f20726570617472696174652072657365727665642e204f28582920546f74616c20436f6d706c65786974793a204f2856202b20582972657363756572543a3a4163636f756e74496420416c6c6f772061207375636365737366756c207265736375657220746f20636c61696d207468656972207265636f7665726564206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d7573742062652061202272657363756572222077686f20686173207375636365737366756c6c7920636f6d706c6574656420746865206163636f756e74207265636f766572792070726f636573733a20636f6c6c656374656420607468726573686f6c6460206f72206d6f726520766f75636865732c20776169746564206064656c61795f706572696f646020626c6f636b732073696e636520696e6974696174696f6e2e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f20636c61696d20686173206265656e207375636365737366756c6c792020207265636f766572656420627920796f752e204b65793a204620286c656e206f6620667269656e647320696e20636f6e666967292c205620286c656e206f6620766f756368696e6720667269656e647329202d204f6e652073746f72616765207265616420746f2067657420746865207265636f7665727920636f6e66696775726174696f6e2e204f2831292c20436f646563204f284629202d204f6e652073746f72616765207265616420746f206765742074686520616374697665207265636f766572792070726f636573732e204f2831292c20436f646563204f285629202d204f6e652073746f72616765207265616420746f20676574207468652063757272656e7420626c6f636b206e756d6265722e204f283129202d204f6e652073746f726167652077726974652e204f2831292c20436f646563204f2856292e20546f74616c20436f6d706c65786974793a204f2846202b20562920416c6c6f7720612022667269656e6422206f662061207265636f76657261626c65206163636f756e7420746f20766f75636820666f7220616e20616374697665207265636f766572792070726f6365737320666f722074686174206163636f756e742e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f20616e64206d75737420626520612022667269656e642220666f7220746865207265636f76657261626c65206163636f756e742e202d20606c6f7374603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e202d206072657363756572603a20546865206163636f756e7420747279696e6720746f2072657363756520746865206c6f7374206163636f756e74207468617420796f7520202077616e7420746f20766f75636820666f722e2054686520636f6d62696e6174696f6e206f662074686573652074776f20706172616d6574657273206d75737420706f696e7420746f20616e20616374697665207265636f766572792070726f636573732e202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c6572206973206120667269656e642e204f286c6f674629202d204f6e652062696e6172792073656172636820746f20636f6e6669726d2063616c6c657220686173206e6f7420616c726561647920766f75636865642e204f286c6f67562920546f74616c20436f6d706c65786974793a204f2846202b206c6f6746202b2056202b206c6f67562920496e697469617465207468652070726f6365737320666f72207265636f766572696e672061207265636f76657261626c65206163636f756e742e205061796d656e743a20605265636f766572794465706f736974602062616c616e63652077696c6c20626520726573657276656420666f7220696e6974696174696e6720746865207265636f766572792070726f636573732e2054686973206465706f7369742077696c6c20616c7761797320626520726570617472696174656420746f20746865206163636f756e7420747279696e6720746f206265207265636f76657265642e205365652060636c6f73655f7265636f76657279602e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f5369676e65645f2e202d20606163636f756e74603a20546865206c6f7374206163636f756e74207468617420796f752077616e7420746f207265636f7665722e2054686973206163636f756e742020206e6565647320746f206265207265636f76657261626c652028692e652e20686176652061207265636f7665727920636f6e66696775726174696f6e292e202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973207265636f76657261626c652e204f284629202d204f6e652073746f72616765207265616420746f20636865636b20746861742074686973207265636f766572792070726f63657373206861736e277420616c726561647920737461727465642e204f283129202d204f6e652063757272656e63792072657365727665206f7065726174696f6e2e204f285829202d204f6e652073746f726167652077726974652e204f2831292e6163636f756e74204372656174652061207265636f7665727920636f6e66696775726174696f6e20666f7220796f7572206163636f756e742e2054686973206d616b657320796f7572206163636f756e74207265636f76657261626c652e205061796d656e743a2060436f6e6669674465706f7369744261736560202b2060467269656e644465706f736974466163746f7260202a20235f6f665f667269656e64732062616c616e63652077696c6c20626520726573657276656420666f722073746f72696e6720746865207265636f7665727920636f6e66696775726174696f6e2e2054686973206465706f7369742069732072657475726e656420696e2066756c6c207768656e2074686520757365722063616c6c73206072656d6f76655f7265636f76657279602e202d2060667269656e6473603a2041206c697374206f6620667269656e647320796f7520747275737420746f20766f75636820666f72207265636f7665727920617474656d7074732e20202053686f756c64206265206f72646572656420616e6420636f6e7461696e206e6f206475706c69636174652076616c7565732e202d20607468726573686f6c64603a20546865206e756d626572206f6620667269656e64732074686174206d75737420766f75636820666f722061207265636f7665727920617474656d70742020206265666f726520746865206163636f756e742063616e206265207265636f76657265642e2053686f756c64206265206c657373207468616e206f7220657175616c20746f202020746865206c656e677468206f6620746865206c697374206f6620667269656e64732e202d206064656c61795f706572696f64603a20546865206e756d626572206f6620626c6f636b732061667465722061207265636f7665727920617474656d707420697320696e697469616c697a656420202074686174206e6565647320746f2070617373206265666f726520746865206163636f756e742063616e206265207265636f76657265642e202d204b65793a204620286c656e206f6620667269656e647329202d204f6e652073746f72616765207265616420746f20636865636b2074686174206163636f756e74206973206e6f7420616c7265616479207265636f76657261626c652e204f2831292e202d204120636865636b20746861742074686520667269656e6473206c69737420697320736f7274656420616e6420756e697175652e204f284629202d204f6e652073746f726167652077726974652e204f2831292e20436f646563204f2846292e667269656e64735665633c543a3a4163636f756e7449643e7468726573686f6c6475313664656c61795f706572696f64543a3a426c6f636b4e756d62657220416c6c6f7720524f4f5420746f2062797061737320746865207265636f766572792070726f6365737320616e642073657420616e20612072657363756572206163636f756e7420666f722061206c6f7374206163636f756e74206469726563746c792e20546865206469737061746368206f726967696e20666f7220746869732063616c6c206d757374206265205f524f4f545f2e202d20606c6f7374603a2054686520226c6f7374206163636f756e742220746f206265207265636f76657265642e202d206072657363756572603a20546865202272657363756572206163636f756e74222077686963682063616e2063616c6c20617320746865206c6f7374206163636f756e742e202d204f6e652073746f72616765207772697465204f283129202d204f6e65206576656e746c6f73742053656e6420612063616c6c207468726f7567682061207265636f7665726564206163636f756e742e202d20606163636f756e74603a20546865207265636f7665726564206163636f756e7420796f752077616e7420746f206d616b6520612063616c6c206f6e2d626568616c662d6f662e202d206063616c6c603a205468652063616c6c20796f752077616e7420746f206d616b65207769746820746865207265636f7665726564206163636f756e742e202d2054686520776569676874206f6620746865206063616c6c60202b2031302c3030302e202d204f6e652073746f72616765206c6f6f6b757020746f20636865636b206163636f756e74206973207265636f7665726564206279206077686f602e204f283129426f783c3c542061732054726169743e3a3a43616c6c3e5265636f766572790000000088d212000b00000001050000000000007ac312000c0000000000000093d212003a00000000000000000000000000000000000000301a1300d0d212000000000000000000e0d2120001000000000000000000000000000000e8d212001000000002050500000000007ac312000c000000000000007ac312000c00000000000000f8d212003a00000000000000301a130034d31200000000000000000044d312000400000000000000000000000000000064d312000500000001020000000000007ac312000c000000000000007ac312000c00000000000000000000000000000000000000301a130028e0120000000000000000006cd312000300000000000000000000005265636f76657261626c655265636f76657279436f6e6669673c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e0000004200000000000000010000005b00000070d41200420000004163746976655265636f7665726965734163746976655265636f766572793c543a3a426c6f636b4e756d6265722c2042616c616e63654f663c543e2c20543a3a4163636f756e7449643e00004200000000000000010000005b000000e6d312001a000000301a13000000000000d412004500000045d412002b00000050726f787900000084d3120024000000301a130000000000a8d312003e00000020546865206c697374206f6620616c6c6f7765642070726f7879206163636f756e74732e204d61702066726f6d2074686520757365722077686f2063616e2061636365737320697420746f20746865207265636f7665726564206163636f756e742e20416374697665207265636f7665727920617474656d7074732e204669727374206163636f756e7420697320746865206163636f756e7420746f206265207265636f76657265642c20616e6420746865207365636f6e64206163636f756e7420697320746865207573657220747279696e6720746f207265636f76657220746865206163636f756e742e2054686520736574206f66207265636f76657261626c65206163636f756e747320616e64207468656972207265636f7665727920636f6e66696775726174696f6e2e000000000000fbaf12000b0000000000000090d51200020000000000000000000000c0d5120006000000000000000000000006b012000700000000000000f0d5120001000000000000000000000008d612000300000000000000000000000db01200070000000000000020d6120002000000000000000000000050d6120004000000000000000000000014b01200040000000000000070d61200030000000000000000000000b8d6120004000000000000000000000018b012000500000000000000d8d6120002000000000000000000000008d712000d0000000000000000000000cddb12000b00000000000000ddce12001100000000000000d8db12000500000000000000dddb1200140000001edb120021000000301a1300000000003fdb12003f0000007edb120039000000301a130000000000b7db1200160000000000000089d91200080000000000000098da12001e000000b6da12003d000000301a130000000000f3da12002b00000000000000eece1200090000000000000084da1200140000000000000089d91200080000000000000098da12001e000000f5bd12000b00000032da12002400000056da12002e00000044be12000c0000000000000089d91200080000000000000091d91200070000000000000098d9120005000000000000009dd9120016000000000000002bda12000700000000000000a1f5120004000000f5bd12000b000000b3d9120023000000d6d912005500000044be12000c0000000000000089d91200080000000000000091d91200070000000000000098d9120005000000000000009dd912001600000070d7120054000000c4d7120026000000301a130000000000ead712005700000041d8120019000000301a1300000000005ad81200250000007fd81200200000009fd8120043000000e2d812002c0000000ed912001e0000002cd912002700000053d9120036000000204d61792062652063616c6c656420627920616e79207369676e6564206163636f756e742061667465722074686520766f74696e67206475726174696f6e2068617320656e64656420696e206f7264657220746f2066696e69736820766f74696e6720616e6420636c6f7365207468652070726f706f73616c2e2041627374656e74696f6e732061726520636f756e7465642061732072656a656374696f6e7320756e6c6573732074686572652069732061207072696d65206d656d6265722073657420616e6420746865207072696d65206d656d626572206361737420616e20617070726f76616c2e202d2074686520776569676874206f66206070726f706f73616c6020707265696d6167652e202d20757020746f207468726565206576656e7473206465706f73697465642e202d206f6e6520726561642c2074776f2072656d6f76616c732c206f6e65206d75746174696f6e2e2028706c7573207468726565207374617469632072656164732e29202d20636f6d7075746174696f6e20616e6420692f6f20604f2850202b204c202b204d29602077686572653a2020202d20604d60206973206e756d626572206f66206d656d626572732c2020202d20605060206973206e756d626572206f66206163746976652070726f706f73616c732c2020202d20604c602069732074686520656e636f646564206c656e677468206f66206070726f706f73616c6020707265696d6167652e70726f706f73616c543a3a48617368696e646578436f6d706163743c50726f706f73616c496e6465783e202d20426f756e6465642073746f72616765207265616420616e64207772697465732e202d2057696c6c20626520736c696768746c792068656176696572206966207468652070726f706f73616c20697320617070726f766564202f20646973617070726f7665642061667465722074686520766f74652e617070726f7665202d20426f756e6465642073746f7261676520726561647320616e64207772697465732e202d20417267756d656e7420607468726573686f6c6460206861732062656172696e67206f6e207765696768742e436f6d706163743c4d656d626572436f756e743e426f783c3c542061732054726169743c493e3e3a3a50726f706f73616c3e20446973706174636820612070726f706f73616c2066726f6d2061206d656d626572207573696e672074686520604d656d62657260206f726967696e2e204f726967696e206d7573742062652061206d656d626572206f662074686520636f6c6c6563746976652e205365742074686520636f6c6c6563746976652773206d656d626572736869702e202d20606e65775f6d656d62657273603a20546865206e6577206d656d626572206c6973742e204265206e69636520746f2074686520636861696e20616e64202d20607072696d65603a20546865207072696d65206d656d6265722077686f736520766f74652073657473207468652064656661756c742e20526571756972657320726f6f74206f726967696e2e6e65775f6d656d626572737072696d654f7074696f6e3c543a3a4163636f756e7449643e5665633c543a3a486173683e000000d4dd12002400000050726f706f73616c4f663c542061732054726169743c493e3e3a3a50726f706f73616c00a1dd120033000000566f7465733c543a3a4163636f756e7449642c20543a3a426c6f636b4e756d6265723e0074dd12002d0000007533320062dd12001200000014dd12004e00000084dc120057000000dbdc12003900000020546865206d656d6265722077686f2070726f7669646573207468652064656661756c7420766f746520666f7220616e79206f74686572206d656d62657273207468617420646f206e6f7420766f7465206265666f7265207468652074696d656f75742e204966204e6f6e652c207468656e206e6f206d656d6265722068617320746861742070726976696c6567652e205468652063757272656e74206d656d62657273206f662074686520636f6c6c6563746976652e20546869732069732073746f72656420736f7274656420286a7573742062792076616c7565292e2050726f706f73616c7320736f206661722e20566f746573206f6e206120676976656e2070726f706f73616c2c206966206974206973206f6e676f696e672e2041637475616c2070726f706f73616c20666f72206120676976656e20686173682c20696620697427732063757272656e742e2054686520686173686573206f6620746865206163746976652070726f706f73616c732e0000000000b51200090000000000000000000000f1db12000c00000000000000000000000000000000000000000000000000000000000000301a130090e01200000000000000000000dc12000100000000000000010000000000000008dc12000a000000010600000000000091d91200070000000000000012dc12001900000000000000000000000000000000000000301a130028e0120000000000000000002cdc12000100000000000000000000000000000010b5120006000000010600000000000091d91200070000000000000034dc12002300000000000000000000000000000000000000301a130028e01200000000000000000058dc1200010000000000000000000000000000000ef812000d000000000000000000000060dc12000300000000000000000000000000000000000000000000000000000000000000301a130008e01200000000000000000064dc12000100000000000000010000000000000009b51200070000000000000000000000ddce12001100000000000000000000000000000000000000000000000000000000000000301a130018e0120000000000000000006cdc1200010000000000000001000000000000009caf12000500000000000000000000007ac312000c00000000000000000000000000000000000000000000000000000000000000301a130028e01200000000000000000074dc120002000000000000000000000042000000000000000100000057000000420000000000000001000000590000004200000000000000010000005b000000000000009ab412000e0000000000000000000000f1db12000c00000000000000000000000000000000000000000000000000000000000000301a130090e012000000000000000000a0e0120003000000000000000100000042000000000000000100000059000000b8e012005800000010e112005800000068e112001100000020536572696573206f6620626c6f636b20686561646572732066726f6d20746865206c61737420383120626c6f636b73207468617420616374732061732072616e646f6d2073656564206d6174657269616c2e205468697320697320617272616e67656420617320612072696e672062756666657220776974682060626c6f636b5f6e756d626572202520383160206265696e672074686520696e64657820696e746f20746865206056656360206f6620746865206f6c6465737420686173682e00000000000000cdab12000a000000000000003ce31200010000000000000000000000c0ab12000d0000000000000044e31200010000000000000000000000b0ab120010000000000000004ce31200010000000000000000000000a6ab12000a0000000000000054e312000100000000000000000000009dab120009000000000000005ce312000100000000000000000000008fab12000e0000000000000064e312000100000000000000000000007dab120012000000000000006ce312000100000000000000000000006fab12000e0000000000000074e3120001000000000000000000000065ab12000a000000000000007ce312000100000000000000000000005cab1200090000000000000084e3120001000000000000000000000051ab12000b000000000000008ce3120001000000000000000000000043ab12000e0000000000000094e312000100000000000000000000003aab120009000000000000009ce312000100000000000000000000002fab12000b00000000000000a4e3120001000000000000000000000027ab12000800000000000000ace312000100000000000000000000001bab12000c000000000000006ce3120001000000000000006fe612003d0000004be612002400000016e6120035000000ebe512002b000000b8e512003300000090e512002800000064e512002c0000002ce5120038000000f8e4120034000000cde412002b00000086e412004700000056e41200300000001be412003b000000dbe3120040000000b4e31200270000002054686572652077617320616e206f766572666c6f7720696e20612063616c63756c6174696f6e20546865726520617265207374696c6c20616374697665207265636f7665727920617474656d7074732074686174206e65656420746f20626520636c6f73656420546865207468726573686f6c6420666f72207265636f766572696e672074686973206163636f756e7420686173206e6f74206265656e206d6574205468697320757365722068617320616c726561647920766f756368656420666f722074686973207265636f766572792054686520667269656e64206d757374207761697420756e74696c207468652064656c617920706572696f6420746f20766f75636820666f722074686973207265636f766572792054686973206163636f756e74206973206e6f74206120667269656e642077686f2063616e20766f7563682041207265636f766572792070726f6365737320686173206e6f74207374617274656420666f72207468697320726573637565722041207265636f766572792070726f636573732068617320616c7265616479207374617274656420666f722074686973206163636f756e742054686973206163636f756e7420697320616c72656164792073657420757020666f72207265636f766572792054686973206163636f756e74206973206e6f742073657420757020666f72207265636f7665727920467269656e6473206c697374206d75737420626520736f7274656420616e642066726565206f66206475706c69636174657320467269656e6473206c697374206d757374206265206c657373207468616e206d617820667269656e647320467269656e6473206c697374206d7573742062652067726561746572207468616e207a65726f20616e64207468726573686f6c64205468726573686f6c64206d7573742062652067726561746572207468616e207a65726f2055736572206973206e6f7420616c6c6f77656420746f206d616b6520612063616c6c206f6e20626568616c66206f662074686973206163636f756e7400000000f2af1200090000000000000070e71200010000000000000000000000e1af1200110000000000000078e71200010000000000000000000000d2af12000f0000000000000080e71200010000000000000000000000c8af12000a0000000000000088e71200010000000000000000000000bbaf12000d0000000000000090e71200010000000000000000000000a9af1200120000000000000098e71200010000000000000000000000a1af12000800000000000000a0e71200010000000000000065e812001800000045e812002000000031e812001400000020e812001100000009e8120017000000e8e7120021000000a8e71200400000002054686520636c6f73652063616c6c206973206d61646520746f6f206561726c792c206265666f72652074686520656e64206f662074686520766f74696e672e204d656d626572732061726520616c726561647920696e697469616c697a656421204475706c696361746520766f74652069676e6f726564204d69736d61746368656420696e6465782050726f706f73616c206d757374206578697374204475706c69636174652070726f706f73616c73206e6f7420616c6c6f776564204163636f756e74206973206e6f742061206d656d626572417574686f72697479446973636f766572794b657973417574686f7273686970446964536574556e636c65734261626545706f6368496e646578417574686f72697469657347656e65736973536c6f7443757272656e74536c6f7452616e646f6d6e6573734e65787452616e646f6d6e6573735365676d656e74496e646578556e646572436f6e737472756374696f6e746f6f206d616e7920696e737472756374696f6e734e6f6e2d656d7074792066756e6374696f6e20626f647920657870656374656400008ce912000f0000009be91200020000009de9120003000000617373657274696f6e206661696c65643a20636f6e746578742e6672616d655f737461636b2e69735f656d7074792829417420696e737472756374696f6e202840293a2043616e2774206465636f6465207761736d20636f64654d6f64756c65206973206e6f742076616c69646d6f64756c65206465636c6172657320696e7465726e616c206d656d6f72796d756c7469706c65207461626c6573206465636c617265647461626c652065786365656473206d6178696d756d2073697a6520616c6c6f776564757365206f6620666c6f6174696e6720706f696e74207479706520696e2066756e6374696f6e20747970657320697320666f7262696464656e757365206f6620666c6f6174696e6720706f696e74207479706520696e206c6f63616c7320697320666f7262696464656e757365206f6620666c6f6174696e6720706f696e74207479706520696e20676c6f62616c7320697320666f7262696464656e67617320696e737472756d656e746174696f6e206661696c6564737461636b2068656967687420696e737472756d656e746174696f6e206661696c656463616c6c6465706c6f796465706c6f792066756e6374696f6e2069736e2774206578706f72746564756e6b6e6f776e206578706f72743a20657870656374696e67206f6e6c79206465706c6f7920616e642063616c6c2066756e6374696f6e7366756e6374696f6e206861732061206e6f6e2d6578697374656e7420747970656578706f72742072656665727320746f206e6f6e2d6578697374656e742066756e6374696f6e657870656374656420612066756e6374696f6e656e74727920706f696e7420706f696e747320746f20616e20696d706f727465642066756e6374696f6e656e74727920706f696e74206861732077726f6e67207369676e617475726563616c6c2066756e6374696f6e2069736e2774206578706f727465646572726f722073657269616c697a696e6720696e737472756d656e746564206d6f64756c6552657475726e207479706573206c656e6774682073686f756c642062652030206f72203143757272656e745363686564756c65436f6e7472616374734163636f756e74436f756e74657298ec12006700000051010000170000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7761736d2d302e34312e302f7372632f656c656d656e74732f73656374696f6e2e72730089ef12001e000000a7ef12001f00000066756e6374696f6e5f73656374696f6e5f6c656e20213d20303b2071656400002bef12005e000000d10000002000000066756e6374696f6e5f73656374696f6e5f6c656e20213d20303b2066756e6374696f6e5f73656374696f6e5f6c656e203d3d20636f64655f73656374696f6e5f6c656e3b207165642bef12005e000000d40000001c00000011ef12001a000000ecee12000a000000f6ee12001b00000073746172742066756e6374696f6e20657870656374656420746f20686176652074797065205b5d202d3e205b5d000000dbee120011000000bbee1200200000009bee12002000000073ee12002800000070617373697665206d656d6f7279207365676d656e747320617265206e6f7420737570706f727465647365676d656e74206f66667365742073686f756c642072657475726e204933327061737369766520656c656d656e74207365676d656e747320617265206e6f7420737570706f72746564746f6f206d616e79206d656d6f727920726567696f6e7320696e20696e6465782073706163653a20746f6f206d616e79207461626c657320696e20696e6465782073706163653a20747279696e6720746f20696d706f7274206d757461626c6520676c6f62616c206475706c6963617465206578706f72742046756e6374696f6e20232072656164696e672f76616c69646174696f6e206572726f723a204d697373696e6720626f647920666f722066756e6374696f6e202f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f6c69622e72736c656e677468206f662066756e6374696f6e2073656374696f6e206973202c207768696c65206c656e206f6620636f64652073656374696f6e206973206578745f7365745f73746f726167656578745f636c6561725f73746f726167656578745f6765745f73746f726167656578745f7472616e736665726578745f63616c6c6578745f696e7374616e74696174656578745f7465726d696e6174656578745f72657475726e6578745f63616c6c65726578745f616464726573736578745f6761735f70726963656578745f6761735f6c6566746578745f62616c616e63656578745f76616c75655f7472616e736665727265646578745f72616e646f6d6578745f6e6f776578745f6d696e696d756d5f62616c616e63656578745f746f6d6273746f6e655f6465706f7369746578745f64697370617463685f63616c6c6578745f726573746f72655f746f6578745f736372617463685f73697a656578745f736372617463685f726561646578745f736372617463685f77726974656578745f6465706f7369745f6576656e746578745f7365745f72656e745f616c6c6f77616e63656578745f72656e745f616c6c6f77616e63656578745f7072696e746c6e6578745f626c6f636b5f6e756d6265726578745f6765745f72756e74696d655f73746f726167656578745f686173685f736861325f3235366578745f686173685f6b656363616b5f3235366578745f686173685f626c616b65325f3235366578745f686173685f626c616b65325f3132385075626c696350726f70436f756e745265666572656e64756d436f756e7444656d6f63726163794c6f77657374556e62616b65644c6173745461626c656457617345787465726e616c0000000001000000020000000400000008000000100000002000000050687261676d656e456c656374696f6e456c656374696f6e526f756e647346696e616c697479547261636b6572496e697469616c697a656400000000dcf212000e00000000000000ecf21200010000000000000000000000f4f21200010000000000000000000000fcf212000600000000000000301a130000000000000000000000000004f312000100000000000000000000000cf312000700000000000000301a130000000000000000000000000014f3120001000000000000004e6577417574686f72697469657300008ff312000d0000006bf3120024000000506175736564000044f3120027000000526573756d6564001cf31200280000002043757272656e7420617574686f726974792073657420686173206265656e20726573756d65642e2043757272656e7420617574686f726974792073657420686173206265656e207061757365642e204e657720617574686f726974792073657420686173206265656e206170706c6965642e417574686f726974794c69737443757272656e7453657449644772616e64706146696e616c697479536574496453657373696f6e00d4f3120034000000b00000002e0000002f686f6d652f6461766964642f6465762f7375627374726174652f6672616d652f6964656e746974792f7372632f6c69622e7273496d4f6e6c696e655265636569766564486561727462656174734f6666656e6365735265706f72747342794b696e64496e6465780000000068f41200070000000000000070f4120003000000000000000000000088f4120003000000000000004f6666656e6365008ff512000400000093f512000e000000a1f5120004000000a0f4120055000000f5f412005300000048f512004700000020546865726520697320616e206f6666656e6365207265706f72746564206f662074686520676976656e20606b696e64602068617070656e656420617420746865206073657373696f6e5f696e6465786020616e6420286b696e642d7370656369666963292074696d6520736c6f742e2054686973206576656e74206973206e6f74206465706f736974656420666f72206475706c696361746520736c61736865732e206c61737420656c656d656e7420696e64696361746573206f6620746865206f6666656e636520776173206170706c69656420287472756529206f7220717565756564202866616c7365292e4b696e644f706171756554696d65536c6f74626f6f6c43757272656e74496e6465785175657565644368616e67656444697361626c656456616c696461746f727300000000fcf512000a0000000000000008f6120001000000000000000000000010f6120002000000000000004e657753657373696f6e000097f612000c00000020f612005500000075f6120022000000204e65772073657373696f6e206861732068617070656e65642e204e6f746520746861742074686520617267756d656e74206973207468652073657373696f6e20696e6465782c206e6f742074686520626c6f636b206e756d626572206173207468652074797065206d6967687420737567676573742e53657373696f6e496e64657853657373696f6e53746f72656452616e6765486973746f7279446570746856616c696461746f72436f756e744d696e696d756d56616c696461746f72436f756e7443757272656e744572614163746976654572615374616b696e6745726173537461727453657373696f6e496e646578466f726365457261536c6173685265776172644672616374696f6e426f6e646564457261734561726c69657374556e6170706c696564536c61736851756575656453636f7265497343757272656e7453657373696f6e46696e616c4d69677261746545726174696d737461703054696d657374616d7020696e686572656e742064617461206973206e6f742070726f76696465642e496e76616c69642074696d657374616d7020696e686572656e74206461746120656e636f64696e672e54696d657374616d704469645570646174655472616e73616374696f6e5061796d656e744e6578744665654d756c7469706c696572547265617375727950726f706f73616c436f756e74417070726f76616c7334f812006200000088000000120000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7363616c652d636f6465632d312e332e302f7372632f636f6465632e727300004200000004000000040000000c00000042725461626c65446174617461626c654200000004000000040000001e01000064656661756c744636345265696e74657270726574493634556e726561636861626c654e6f70426c6f636b004200000004000000040000001f0100004c6f6f704966456c7365456e6442724272496642725461626c6500004200000004000000040000002001000052657475726e43616c6c43616c6c496e6469726563740000420000000400000004000000fa00000044726f7053656c6563744765744c6f63616c5365744c6f63616c5465654c6f63616c476574476c6f62616c536574476c6f62616c4933324c6f61644936344c6f61644633324c6f61644636344c6f61644933324c6f616438534933324c6f616438554933324c6f61643136534933324c6f61643136554936344c6f616438534936344c6f616438554936344c6f61643136534936344c6f61643136554936344c6f61643332534936344c6f616433325549333253746f726549363453746f726546333253746f726546363453746f726549333253746f72653849333253746f7265313649363453746f72653849363453746f7265313649363453746f7265333243757272656e744d656d6f727947726f774d656d6f7279493332436f6e73740042000000040000000400000021010000493634436f6e737442000000040000000400000022010000463332436f6e7374463634436f6e73744200000004000000040000003400000049333245717a49333245714933324e654933324c74534933324c74554933324774534933324774554933324c65534933324c655549333247655349333247655549363445717a49363445714936344e654936344c74534936344c74554936344774534936344774554936344c65534936344c655549363447655349363447655546333245714633324e654633324c7446333247744633324c65463332476546363445714636344e654636344c7446363447744636344c654636344765493332436c7a49333243747a493332506f70636e744933324164644933325375624933324d756c493332446976534933324469765549333252656d5349333252656d55493332416e644933324f72493332586f7249333253686c4933325368725349333253687255493332526f746c493332526f7472493634436c7a49363443747a493634506f70636e744936344164644936345375624936344d756c493634446976534936344469765549363452656d5349363452656d55493634416e644936344f72493634586f7249363453686c4936345368725349363453687255493634526f746c493634526f74724633324162734633324e65674633324365696c463332466c6f6f724633325472756e634633324e656172657374463332537172744633324164644633325375624633324d756c4633324469764633324d696e4633324d6178463332436f70797369676e4636344162734636344e65674636344365696c463634466c6f6f724636345472756e634636344e656172657374463634537172744636344164644636345375624636344d756c4636344469764636344d696e4636344d6178463634436f70797369676e493332577261704936344933325472756e63534633324933325472756e63554633324933325472756e63534636344933325472756e6355463634493634457874656e6453493332493634457874656e64554933324936345472756e63534633324936345472756e63554633324936345472756e63534636344936345472756e6355463634463332436f6e7665727453493332463332436f6e7665727455493332463332436f6e7665727453493634463332436f6e766572745549363446333244656d6f7465463634463634436f6e7665727453493332463634436f6e7665727455493332463634436f6e7665727453493634463634436f6e766572745549363446363450726f6d6f74654633324933325265696e746572707265744633324936345265696e746572707265744636344633325265696e7465727072657449333200004200000004000000040000000c000000463634493332493634463332420000000400000004000000230100004e6f526573756c7456616c7565000000b4fe12000b000000492f4f204572726f723a2000d0fe120059000000450000001e0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7061726974792d7761736d2d302e34312e302f7372632f696f2e7273496e76616c696444617461547261696c696e6744617461556e6578706563746564456f66000000617474656d707420746f20646976696465206279207a65726f556e7369676e656420696e74656765722063616e277420626520637265617465642066726f6d206e656761746976652076616c75652f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7072696d69746976652d74797065732d302e372e302f7372632f6c69622e72736469766973696f6e206279207a65726f496e7465676572206f766572666c6f77207768656e2063617374696e6720746f207573697a65000000000000000000000000000000617474656d707420746f20646976696465206279207a65726f0000009eff12005d0000002000000001000000547269656420746f20736872696e6b20746f2061206c6172676572206361706163697479e101130012000000f30113000c0000006066756e635f696478602073686f756c6420636f6d652066726f6d20606e6565645f7468756e6b73603b0a09090909606e6565645f7468756e6b736020697320706f70756c617465642077697468207468652073616d65206974656d73207468617420696e20607265706c6163656d656e745f6d6170603b0a09090909716564780113006900000050000000190000004174207468697320706f696e7420616e20696e646578206d7573742062652061737369676e656420746f2065616368207468756e6b0000007801130069000000890000001d0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f7468756e6b2e727366756e6374696f6e207769746820696478202069736e277420666f756e64617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e686569676874202d2031617373657274696f6e206661696c65643a2073656c662e6c656e2829203c204341504143495459617373657274696f6e206661696c65643a20656467652e686569676874203d3d2073656c662e6e6f64652e686569676874202d20314672616d6569735f706f6c796d6f7270686963000042000000040000000400000024010000656e645f61726974790000004200000004000000040000000c0000006272616e63685f617269747973746172745f6865696768746003130049000000920200001a000000a9031300480000000002000023000000a90313004800000001020000230000006003130049000000a301000027000000617373657274696f6e206661696c65643a206d6964203c3d206c656e401a1300490000000a0000000900000060031300490000008e0200001d0000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f736c6963652f736f72742e72732f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f736c6963652f6d6f642e72730000006003130049000000a1000000300000006003130049000000a4000000300000004e6f2066756e6374696f6e2073656374696f6e4e6f20636f64652073656374696f6e4e6f20747970652073656374696f6e0000008b0613000a00000046756e6374696f6e206973206e6f7420666f756e6420696e2066756e632073656374696f6e0000007f0613000c00000046756e6374696f6e20626f647920666f722074686520696e6465782069736e277420666f756e6400300613000b00000029061300070000002306130006000000737461636b206f766572666c6f77737461636b206d757374206265206e6f6e2d656d707479000000180613000b0000004172697479206f6620616c6c206a756d702d74617267657473206d75737420626520657175616c54797065206e6f7420666f756e64000000380513006e000000c8000000170000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f6d61785f6865696768742e727300001306130005000000747279696e6720746f20706f70206d6f72652076616c756573207468616e20707573686564737461636b20756e646572666c6f776d61785f686569676874707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f686569676874706f703a20756e726561636861626c65707573683a207472756e633a20706f705f6672616d653a20636f6e74726f6c20737461636b20697320656d707479000000380513006e0000003a0000000d000000636f6e74726f6c20737461636b206f75742d6f662d626f756e6473707573685f6672616d653a2066756e635f6964783a2063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565d006130055000000480600001b0000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962616c6c6f632f636f6c6c656374696f6e732f62747265652f6d61702e7273656e766761736c6173745f696e6465782069732067726561746572207468616e20303b206c6173745f696e64657820697320737461636b2073697a65202d20313b2071656400008c0713005e000000a6000000260000008c0713005e000000120100001c0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f6761732f6d6f642e7273536f6d654e6f6e65000042000000040000000400000025010000410813006700000010010000200000001c0813002500000043616c6c20746f2066756e6374696f6e2074686174206f75742d6f662d626f756e64733a202f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f707761736d2d7574696c732d302e31322e302f7372632f737461636b5f6865696768742f6d6f642e7273546869732073686f756c64206265206120696e646578206f66206120646566696e65642066756e6374696f6e44756520746f2076616c69646174696f6e20636f64652073656374696f6e2073686f756c642065786973747346756e6374696f6e20626f6479206973206f7574206f6620626f756e647366756e6374696f6e20696d706f727420636f756e74206973206e6f74207a65726f3b20696d706f72742073656374696f6e206d757374206578697374733b207165644108130067000000590100000900000066756e635f696478206973206c657373207468616e2066756e6374696f6e20696d706f72747320636f756e743b0a090909096e74682066756e6374696f6e20696d706f7274206d7573742062652060536f6d65603b0a090909097165640000005c17130012000000250a13000f000000f80913000a000000020a130014000000160a13000f0000005369676e61747572652020287370656369666965642062792066756e6320292069736e277420646566696e6564206973206e6f7420646566696e6564440a13003f000000440000000d0000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f62696775696e742e727300000000000000000000000000617474656d707420746f20646976696465206279207a65726f000000440a13003f0000006d00000009000000440a13003f0000007e00000009000000440a13003f0000009c0000001b000000440a13003f000000d40100001c000000440a13003f000000d50100001c00000063616e6e6f74206669742061206e756d62657220696e746f2075313238000000440a13003f0000009000000009000000616c7265616479206d757461626c7920626f72726f77656442000000000000000100000064000000640b1300430000001e030000090000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f63656c6c2e7273616c726561647920626f72726f776564004200000000000000010000006d000000640b1300430000006e0300000900000072656d696e646572206f6620646976206279206320697320616c77617973206c657373207468616e20633b20716564004200000008000000040000007a000000410c130046000000680000001b000000726573756c742063616e6e6f742066697420696e20753132382f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f61726974686d657469632f7372632f68656c706572735f3132386269742e727362616265736c6f74436f756c64206e6f74206465636f64652072657175657374656420696e686572656e742074797065214241424520696e686572656e742064617461206e6f7420666f756e64e40c130044000000cd0000000d0000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f696d706c732e727342000000000000000100000046000000486f737420746f207761736d2076616c7565732061726520656e636f64656420636f72726563746c793b207165640000780d13004600000008010000090000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f72756e74696d652d696e746572666163652f7372632f706173735f62792e727300004200000000000000010000004600000072756e74696d6552756e74696d65206d656d6f7279206578686175737465642e2041626f7274696e6700000000000000617474656d707420746f20646976696465206279207a65726f0000002c0e1300400000005f0000002b0000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f72756e74696d652f7372632f67656e657269632f6572612e727348617368206e6f7420657175616c2f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f72756e74696d652f7372632f7472616974732e72730000007a0e13003b0000000504000013000000426164206f726967696e43616e206e6f74206c6f6f6b757044697370617463684572726f723c7761736d3a73747269707065643e5472616e616374696f6e206469737061746368206973206d616e6461746f72793b207472616e73616374696f6e73206d6179206e6f742068617665206d616e6461746f727920646973706174636865732e412063616c6c20776173206c6162656c6c6564206173206d616e6461746f72792c2062757420726573756c74656420696e20616e204572726f722e5472616e73616374696f6e20776f756c642065786861757374732074686520626c6f636b206c696d6974735472616e73616374696f6e2068617320616e20616e6369656e7420626972746820626c6f636b5472616e73616374696f6e20686173206120626164207369676e61747572655472616e73616374696f6e206973206f757464617465645472616e73616374696f6e2077696c6c2062652076616c696420696e2074686520667574757265496e6162696c69747920746f2070617920736f6d6520666565732028652e672e206163636f756e742062616c616e636520746f6f206c6f77295472616e73616374696f6e2063616c6c206973206e6f74206578706563746564496e76616c69645472616e73616374696f6e20637573746f6d206572726f72436f756c64206e6f742066696e6420616e20756e7369676e65642076616c696461746f7220666f722074686520756e7369676e6564207472616e73616374696f6e436f756c64206e6f74206c6f6f6b757020696e666f726d6174696f6e20726571756972656420746f2076616c696461746520746865207472616e73616374696f6e556e6b6e6f776e5472616e73616374696f6e20637573746f6d206572726f72696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64650088111300430000005a000000120000002f686f6d652f6461766964642f6465762f7375627374726174652f7072696d6974697665732f73616e64626f782f7372632f2e2e2f776974686f75745f7374642e727300881113004300000068000000120000004475706c69636174655265706f72744f6666656e63654572726f726d616b655f746f705f6672616d655f706f6c796d6f72706869632069732063616c6c6564207769746820656d707479206672616d6520737461636b0000260100000c00000004000000270100005f1413005f0000004204000011000000746869732066756e6374696f6e2063616e27742062652063616c6c6564207769746820656d707479206672616d6520737461636b5f1413005f000000b2040000050000004d6973706c6163656420656c736520696e737472756374696f6e0000df131300470000002614130005000000a313130037000000da131300050000006e1313001700000065131300090000001a161300140000004d1313001800000065131300090000001a161300140000001c1313001d00000039131300130000004c13130001000000546f6f206c61726765206d656d6f727920616c69676e6d656e7420325e20286578706563746564206174206d6f73742029547279696e6720746f2075706461746520676c6f62616c20206f66207479706520547279696e6720746f20757064617465206c6f63616c20537065636966696300000042000000040000000400000023010000416e794c6162656c7320696e2062725f7461626c6520706f696e747320746f20626c6f636b206f6620646966666572656e742074797065733a2020616e6420496620626c6f636b20776974686f757420656c736520726571756972656420746f2068617665204e6f526573756c7420626c6f636b20747970652e2042757420697420686173202074797065003c14130018000000541413000b000000556e657870656374656420737461636b20686569676874202c206578706563746564202f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f66756e632e7273547279696e6720746f2061636365737320706172656e74206672616d6520737461636b2076616c7565732e000000fc14130017000000131513001600000045787065637465642076616c7565206f66207479706520206f6e20746f70206f6620737461636b2e20476f74200000003415130007000000537461636b3a200000000100be1513002400000094151300060000009a1513000e000000a815130016000000701513002400000094151300060000006d6178696d756d206d656d6f72792073697a65206d757374206265206174206d6f7374202070616765736d6178696d756d206c696d697420206973206c657373207468616e206d696e696d756d20696e697469616c206d656d6f72792073697a65206d757374206265206174206d6f7374200000f4151300260000001a16130014000000547279696e6720746f20696e697469616c697a65207661726961626c65206f6620747970652020776974682076616c7565206f66207479706520496e69742065787072657373696f6e2073686f756c6420616c776179732062652077697468206c656e67746820324e6f6e20636f6e7374616e74206f70636f646520696e20696e69742065787072c516130007000000d716130022000000c516130007000000cc1613000b00000045787072657373696f6e20646f65736e277420656e647320776974682060656e6460206f70636f6465476c6f62616c20206973206d757461626c6520646f65736e277420657869737473206f72206e6f742079657420646566696e65640000000c171300100000001c1713000f0000004d656d6f727920617420696e6465782020646f65736e277420657869737473003c1713000f0000001c1713000f0000005461626c6520617420696e64657820005c171300120000001c1713000f00000046756e6374696f6e20617420696e646578200000801713000e0000001c1713000f0000005479706520617420696e646578200000ee171300100000001c1713000f000000c017130010000000e01713000e000000c017130010000000d017130010000000457870656374656420676c6f62616c2020746f20626520696d6d757461626c6520746f206265206d757461626c65476c6f62616c20617420696e646578206e6f6e2d656d70747920737461636b206578706563746564000028181300200000004818130012000000747279696e6720746f206765742076616c756520617420706f736974696f6e20206f6e20737461636b206f662073697a6520636865636b656420636f75706c65206f66206c696e65732061626f76650088181300600000004b0000000c0000002f686f6d652f6461766964642f2e636172676f2f72656769737472792f7372632f6769746875622e636f6d2d316563633632393964623965633832332f7761736d692d76616c69646174696f6e2d302e332e302f7372632f737461636b2e7273f018130015000000657863656564656420737461636b206c696d697420000000301a1300000000004572726f72000000420000000400000004000000280100004c6f63616c732072616e6765206e6f7420696e2033322d6269742072616e6765601913002200000082191300150000009719130007000000547279696e6720746f20616363657373206c6f63616c207769746820696e64657820207768656e20746865726520617265206f6e6c7920206c6f63616c730000b81913002d000000e51913000c000000f119130003000000617373657274696f6e206661696c65643a2060286c656674203d3d20726967687429600a20206c6566743a2060602c0a2072696768743a2060603a20fc1913003400000064657374696e6174696f6e20616e6420736f7572636520736c69636573206861766520646966666572656e74206c656e67746873401a13004900000010000000090000002f72757374632f666135316638313065356239323534393034623932363630653732383062376436613436663131322f7372632f6c6962636f72652f6d6163726f732f6d6f642e727300418cb5cc000b080000000000000000004194b5cc000b082c1110002c11100000e1b605046e616d6501d8b605a50800196578745f6c6f6767696e675f6c6f675f76657273696f6e5f31011e6578745f68617368696e675f74776f785f3132385f76657273696f6e5f3102196578745f73746f726167655f7365745f76657273696f6e5f31031d6578745f68617368696e675f74776f785f36345f76657273696f6e5f3104206578745f68617368696e675f626c616b65325f3132385f76657273696f6e5f3105196578745f73746f726167655f6765745f76657273696f6e5f31061d6578745f6d6973635f7072696e745f757466385f76657273696f6e5f31071b6578745f73746f726167655f636c6561725f76657273696f6e5f3108226578745f73746f726167655f636c6561725f7072656669785f76657273696f6e5f3109206578745f68617368696e675f626c616b65325f3235365f76657273696f6e5f310a1c6578745f6d6973635f7072696e745f6865785f76657273696f6e5f310b276578745f63727970746f5f73746172745f62617463685f7665726966795f76657273696f6e5f310c286578745f63727970746f5f66696e6973685f62617463685f7665726966795f76657273696f6e5f310d236578745f6f6666636861696e5f69735f76616c696461746f725f76657273696f6e5f310e286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f6765745f76657273696f6e5f310f346578745f6f6666636861696e5f6c6f63616c5f73746f726167655f636f6d706172655f616e645f7365745f76657273696f6e5f3110276578745f64656661756c745f6368696c645f73746f726167655f6765745f76657273696f6e5f3111306578745f64656661756c745f6368696c645f73746f726167655f73746f726167655f6b696c6c5f76657273696f6e5f3112276578745f64656661756c745f6368696c645f73746f726167655f7365745f76657273696f6e5f3113296578745f64656661756c745f6368696c645f73746f726167655f636c6561725f76657273696f6e5f3114226578745f6f6666636861696e5f72616e646f6d5f736565645f76657273696f6e5f3115236578745f63727970746f5f737232353531395f7665726966795f76657273696f6e5f3216286578745f6f6666636861696e5f6c6f63616c5f73746f726167655f7365745f76657273696f6e5f3117206578745f73616e64626f785f6d656d6f72795f6e65775f76657273696f6e5f3118256578745f73616e64626f785f6d656d6f72795f74656172646f776e5f76657273696f6e5f3119216578745f73616e64626f785f696e7374616e74696174655f76657273696f6e5f311a1c6578745f73616e64626f785f696e766f6b655f76657273696f6e5f311b276578745f73616e64626f785f696e7374616e63655f74656172646f776e5f76657273696f6e5f311c206578745f73616e64626f785f6d656d6f72795f6765745f76657273696f6e5f311d206578745f73616e64626f785f6d656d6f72795f7365745f76657273696f6e5f311e1e6578745f68617368696e675f736861325f3235365f76657273696f6e5f311f206578745f68617368696e675f6b656363616b5f3235365f76657273696f6e5f3120236578745f63727970746f5f656432353531395f7665726966795f76657273696f6e5f3121286578745f64656661756c745f6368696c645f73746f726167655f726f6f745f76657273696f6e5f31221c6578745f73746f726167655f617070656e645f76657273696f6e5f31231a6578745f73746f726167655f726f6f745f76657273696f6e5f3124226578745f73746f726167655f6368616e6765735f726f6f745f76657273696f6e5f3125226578745f6d6973635f72756e74696d655f76657273696f6e5f76657273696f6e5f31261c6578745f6d6973635f7072696e745f6e756d5f76657273696f6e5f31271e6578745f73746f726167655f6e6578745f6b65795f76657273696f6e5f31282a6578745f747269655f626c616b65325f3235365f6f7264657265645f726f6f745f76657273696f6e5f3129246578745f6f6666636861696e5f6e6574776f726b5f73746174655f76657273696f6e5f312a296578745f6f6666636861696e5f7375626d69745f7472616e73616374696f6e5f76657273696f6e5f312b1a6578745f73746f726167655f726561645f76657273696f6e5f312c1e6578745f616c6c6f6361746f725f6d616c6c6f635f76657273696f6e5f312d1c6578745f616c6c6f6361746f725f667265655f76657273696f6e5f312e256578745f63727970746f5f656432353531395f67656e65726174655f76657273696f6e5f312f376578745f63727970746f5f736563703235366b315f65636473615f7265636f7665725f636f6d707265737365645f76657273696f6e5f3130256578745f63727970746f5f737232353531395f67656e65726174655f76657273696f6e5f3131286578745f63727970746f5f737232353531395f7075626c69635f6b6579735f76657273696f6e5f3132216578745f63727970746f5f737232353531395f7369676e5f76657273696f6e5f31330c5f5f727573745f616c6c6f63340a5f5f72675f616c6c6f63350e5f5f727573745f6465616c6c6f63360c5f5f72675f6465616c6c6f63370e5f5f727573745f7265616c6c6f63380c5f5f72675f7265616c6c6f6339135f5f727573745f616c6c6f635f7a65726f65643a115f5f72675f616c6c6f635f7a65726f65643b09686173685f746573743c33616c6c6f633a3a616c6c6f633a3a68616e646c655f616c6c6f635f6572726f723a3a68353163623932333763613366353463663d08727573745f6f6f6d3e34616c6c6f633a3a7261775f7665633a3a63617061636974795f6f766572666c6f773a3a68636633313064393836323166623433303f29636f72653a3a70616e69636b696e673a3a70616e69633a3a683030363437306536303862656439353040673c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c26542c636f72653a3a736c6963653a3a497465723c543e3e3e3a3a737065635f657874656e643a3a68663630333566303732643235353538394125616c6c6f633a3a666d743a3a666f726d61743a3a68353162646564663733633836333235354236636f72653a3a70616e69636b696e673a3a70616e69635f626f756e64735f636865636b3a3a68393562303464643938363539313862364323636f72653a3a666d743a3a77726974653a3a68303831356161306566383061653962354448616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a7b7b636c6f737572657d7d3a3a68303037343834663462386361636666364548616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a7b7b636c6f737572657d7d3a3a68303135633362643336363064376362304633636f72653a3a6f7074696f6e3a3a6578706563745f6e6f6e655f6661696c65643a3a6836383432633035363039613131616134473a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6862356535663530653539386135316130483b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6834383533323037383764313363643164493a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68323565373337646265363866313463314a41616c6c6f633a3a7665633a3a5665633c543e3a3a737761705f72656d6f76653a3a6173736572745f6661696c65643a3a68633031623332663963663337653963314b4e636f72653a3a666d743a3a6e756d3a3a696d703a3a3c696d706c20636f72653a3a666d743a3a446973706c617920666f72207533323e3a3a666d743a3a68663135303861353562323463646664644c2d636f72653a3a70616e69636b696e673a3a70616e69635f666d743a3a68313231656364656237656134313664664d3c616c6c6f633a3a7665633a3a5665633c543e3a3a696e736572743a3a6173736572745f6661696c65643a3a68613934373131623037663536363065634e3c616c6c6f633a3a7665633a3a5665633c543e3a3a72656d6f76653a3a6173736572745f6661696c65643a3a68303739623034626265643466336234324f3f616c6c6f633a3a7665633a3a5665633c543e3a3a647261696e3a3a656e645f6173736572745f6661696c65643a3a6835643131373130356238363638376435504b3c616c6c6f633a3a7665633a3a5665633c75383e20617320636f72653a3a636f6e766572743a3a46726f6d3c267374723e3e3a3a66726f6d3a3a68386463303336393566373236363031305139636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653a3a63616c6c5f6f6e63653a3a6862393936313139646531313231346565522f636f72653a3a666d743a3a6e756d3a3a696d703a3a666d745f7536343a3a68366533616365353734346466643033645311727573745f626567696e5f756e77696e64542b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a683031343036616161383432343565306555313c5420617320636f72653a3a616e793a3a416e793e3a3a747970655f69643a3a68303661353130333961616237383235345635636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a68653932373262646363616336306465615743636f72653a3a666d743a3a466f726d61747465723a3a7061645f696e74656772616c3a3a77726974655f7072656669783a3a68643738323237356538303230633037345834636f72653a3a736c6963653a3a736c6963655f696e6465785f6c656e5f6661696c3a3a68313938373562666436383834646638635936636f72653a3a736c6963653a3a736c6963655f696e6465785f6f726465725f6661696c3a3a68316465333637626133373764636538645a2c636f72653a3a666d743a3a466f726d61747465723a3a7061643a3a68313636656363363539373163643363635b2e636f72653a3a7374723a3a736c6963655f6572726f725f6661696c3a3a68623233363366646233303032316536665c323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68383435353735636630376666363164325d4a3c636f72653a3a6f70733a3a72616e67653a3a52616e67653c4964783e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68353536393033316138643865383531325e323c6368617220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68376161336631343238396430386261365f47636f72653a3a756e69636f64653a3a756e69636f64655f646174613a3a6772617068656d655f657874656e643a3a6c6f6f6b75703a3a68613835323132396535396333363565616032636f72653a3a756e69636f64653a3a7072696e7461626c653a3a636865636b3a3a68393165333839386434396631656236396149636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207573697a653e3a3a666d743a3a683236383537666231363037623539353362453c636f72653a3a63656c6c3a3a426f72726f774572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a683065623838643135356633303964303763483c636f72653a3a63656c6c3a3a426f72726f774d75744572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862333335646536383631323063633233642e636f72653a3a6f7074696f6e3a3a6578706563745f6661696c65643a3a683633646465376666396462376438623465303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686230333265336361626166646339613166323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683061643362663132396338323533363767533c636f72653a3a666d743a3a6275696c646572733a3a5061644164617074657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6836306236656363373161626162353536682e636f72653a3a736c6963653a3a6d656d6368723a3a6d656d6368723a3a6832336130393365346464623739333531693a636f72653a3a666d743a3a6275696c646572733a3a44656275675374727563743a3a6669656c643a3a68663330616534613631356331363839626a2f636f72653a3a666d743a3a57726974653a3a77726974655f636861723a3a68356261336366363138313565373762666b2e636f72653a3a666d743a3a57726974653a3a77726974655f666d743a3a68663435363732306637616333343265356c3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68383834636237333035363965623265616d3b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68656433643766613065316262373331326e3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68666434323965346239656338393933366f39636f72653a3a666d743a3a6275696c646572733a3a44656275675475706c653a3a6669656c643a3a68613533333665666163353734656238627037636f72653a3a666d743a3a6275696c646572733a3a44656275675365743a3a656e7472793a3a686637353538653961373662616632373071443c636f72653a3a666d743a3a417267756d656e747320617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683362303935626162663933396632636272313c73747220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6862306565323536613538376662373638738001636f72653a3a7374723a3a7472616974733a3a3c696d706c20636f72653a3a736c6963653a3a536c696365496e6465783c7374723e20666f7220636f72653a3a6f70733a3a72616e67653a3a52616e67653c7573697a653e3e3a3a696e6465783a3a7b7b636c6f737572657d7d3a3a68376438313835366161663932613237397427636f72653a3a7374723a3a66726f6d5f757466383a3a6830613066313562666632633634383831753e3c636f72653a3a666d743a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a686130313939333562376233613364346576693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6836633839313338393962326465613731776c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a683131636162386431306239626630303878493c616c6c6f633a3a7665633a3a5665633c75383e206173207061726974795f7761736d3a3a696f3a3a57726974653e3a3a77726974653a3a686538303463366336346431303063636479693c6672616d655f6d657461646174613a3a4465636f6465446966666572656e743c422c4f3e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68326335306536343564623663653564667a483c5b545d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a68633561613262653264646332633533397b513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a68366331646231303461373464363865327c3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a68336662333236333863616364353236377d3b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a68363239653634316237613866396631307e3a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a68653539373662636463313735623361617f503c6672616d655f737570706f72743a3a64656275673a3a57726974657220617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a683864616337306630633162323838346580014d3c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68386236316431323364646263636566388101493c6672616d655f737570706f72743a3a64656275673a3a52756e74696d654c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68353338633737353131616136353964338201323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a68333439613737636530353865613237308301383c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a656e61626c65643a3a68633239643832333162626531343461648401343c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a6c6f673a3a68373561656236636535666332353064388501363c6c6f673a3a4e6f704c6f67676572206173206c6f673a3a4c6f673e3a3a666c7573683a3a6832333664393961633239333539356465860137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830306233616230316365303566353762870137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830313138336261353330663735376166880137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830313539356333616532386461336132890137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68303938313666656635363836373464348a0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68306130376261626533643332346335328b0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68306233646536613136313166646435308c0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68306265633839663034633230333335368d0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68306565346266623164666664633131398e0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68313833636462623733303532343237358f0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831633138383230343530626239653433900137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831636632633661666363653535343962910137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831643436663636626232336533383666920137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832303637333966373536346132336662930137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832346536633636363337653535393631940137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832616634616331623438646438396664950137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6832653933356538333434386234303034960137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6833383237316431623266633831663666970137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834303333643664613139306665626463980137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6834383232383630643736613163353732990137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68346362313561313938626162373534339a0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68353937376632376461343466386164359b0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68356561396138313961356231613439619c0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68363439363836303666353664613035669d0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68373535626135646537663936313539659e0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a68383365633066633261353739653164329f0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6838363836623239313566613066333130a00137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839353032353630636139636166623661a10137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839383265313132666366646234303661a20137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862363539333836366361323837653837a30137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6862383861646232303966323232656231a40137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6864616238346263393430363538613437a50137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865623161653131333435316565643934a60137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865663038666639336337353237303066a70137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866303862623863643834643632396636a80137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866306631373136336237626238303865a90137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866363864656237353365313461663162aa0137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6866663363303663636265343764333434ab013b70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7265776172645f62795f6964733a3a6864636139643036343738323164633830ac01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834313139373062343437616531373362ad015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833333833633533663066646563643133ae01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862353832613638383661383164353732af014b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6839663061363539663838363338616262b001723c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6865323164343931373636326632646637b101613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6861356134346131616263636163636231b201706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6863663737636432363464396364633937b301706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6866346136633935396164626166363165b4015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831653164393839653161396135636530b5015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831666665373833303935306535353935b6015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832366334363936643039313539383762b7015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839396664303737346630666363383262b8015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862363264353235666237303932376562b9015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864376231326534373839353535313930ba015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864643435393335393231646238356666bb01746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a6866303330336532366636323661626533bc01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864616163323265636339303261363938bd015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831343835353666343531396234366532be015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863366366353362303065386236633237bf013570616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6e65775f6572613a3a6838363865613135646461396139356263c001386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831663165396231656266303064373036c1014370616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636c6561725f6572615f696e666f726d6174696f6e3a3a6864633566356431343030633634663137c2017c3c73705f72756e74696d655f696e746572666163653a3a706173735f62793a3a436f6465633c543e2061732073705f72756e74696d655f696e746572666163653a3a706173735f62793a3a506173734279496d706c3c543e3e3a3a66726f6d5f6666695f76616c75653a3a6838333637393936366666373735343431c301543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833643235366261663161383635393630c4016b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6835626539633733323632656564623437c501860170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a4578706f737572653c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a6862373263363130643764383364653562c601303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830356263646666653963363038383638c7018b013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61704974657261746f723c4b2c562c4861736865723e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835343634353665383630663135313332c8014e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a736c61736861626c655f62616c616e63655f6f665f766f74655f7765696768743a3a6834313166656532323136366431613466c901533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6837623066653764653564346663623934ca012573705f70687261676d656e3a3a656c6563743a3a6866333332326333306366633538383839cb014473705f70687261676d656e3a3a41737369676e6d656e743c4163636f756e7449642c543e3a3a696e746f5f7374616b65643a3a6830373431333861393335346132663361cc013173705f70687261676d656e3a3a6275696c645f737570706f72745f6d61703a3a6861333435313631653635393138303863cd01513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6839353934343839393133303633336265ce01706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6832353738303831353236383565323662cf01723c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6833386432653937633831393637393337d0012d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6865623630613835366464666230666437d101706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6834613934623137323135656561356361d201386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833386539373537643037376334383863d301706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6837316633396462396563613464666338d401416672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6576656e745f696e64657865643a3a6835346130353631613439363261623365d501386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830306464643131313032633630666435d601386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839393762383537626662636237363433d701386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862333265356161663330663030663162d8013770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746172745f6572613a3a6862363233363862303235626162646133d901386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839303237343363373866363065363637da01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862303837626538313962323139383562db014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6865363264373431313561666261666230dc015c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833316130313665656135376230336162dd01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863373031383135303633303237353534de013570616c6c65745f7374616b696e673a3a736c617368696e673a3a646f5f736c6173683a3a6839316164393039633461386266393130df01446672616d655f737570706f72743a3a7472616974733a3a43757272656e63793a3a7265736f6c76655f6372656174696e673a3a6837366665613630346362386236313466e0014873705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3a3a696e746f5f6163636f756e743a3a6830633633383531633435626139366235e1014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6833653833343163646234376638656165e201713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6837303032646133353961356264666234e3013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834643530636536383061383537613339e4013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a656e737572655f6e65775f6572613a3a6830393732666433646632643436643261e501386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831356536346137356531373461323034e6013e70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863363264663833376135313732656632e701723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637453746f7261676556657273696f6e3c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833336135666263633530626133303430e801753c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261456c656374696f6e5374617475733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862333831326230663835386563666334e9016d3c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563745370616e536c6173683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865346430383431333761653038643161ea013c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866383035616566303437346163313730eb01723c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173546f74616c5374616b653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835326435363136643765613563383631ec01743c70616c6c65745f7374616b696e673a3a5f5f4765744279746553747275637445726173526577617264506f696e74733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836653530663432343764373132653937ed01763c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744572617356616c696461746f7250726566733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835323234373938363964373462356662ee01763c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374457261735374616b657273436c69707065643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863303930616637366532613763363534ef01793c70616c6c65745f7374616b696e673a3a5f5f476574427974655374727563744d696e696d756d56616c696461746f72436f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862343734326261636139373865353332f001703c70616c6c65745f7374616b696e673a3a5f5f47657442797465537472756374486973746f727944657074683c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834376231663234316131333837383530f1014170616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a7072655f64697370617463685f636865636b733a3a6830376139616237313539316231303132f201386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861653030333130303931663063613330f3014770616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6866333435643531316437306262313931f4019b013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426f6e64696e674475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862333038356136333062623933653730f5019a013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53657373696f6e7350657245726144656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861303430396462303330346461356163f6016c3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c753132383e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6864363635653835623335616132663537f7018e0170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e3e3a3a656e636f64655f746f3a3a6837313136666235333362323266656661f8018b0170616c6c65745f7374616b696e673a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e3e3a3a6465636f64653a3a6863353762383663653866656635353130f90137616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6831353437633033383734353136373230fa012b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6830343835653435366166613339343432fb015b70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c41636375726163793e3a3a66726f6d5f61737369676e6d656e743a3a6838383732373863613233333934396261fc01ba013c70616c6c65745f7374616b696e673a3a53746173684f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3e3a3a636f6e766572743a3a6830616638363432323131623162326637fd01f3013c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e2061732073705f7374616b696e673a3a6f6666656e63653a3a4f6e4f6666656e636548616e646c65723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c283c542061732070616c6c65745f73657373696f6e3a3a54726169743e3a3a56616c696461746f7249642c3c542061732070616c6c65745f73657373696f6e3a3a686973746f726963616c3a3a54726169743e3a3a46756c6c4964656e74696669636174696f6e293e3e3a3a6f6e5f6f6666656e63653a3a6832656633633339663131363538393637fe01386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863346231663334366631316233376163ff014a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a683330303135333935663033353664653280024970616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a6572615f7370616e3a3a686637666534373739663439626634366481024470616c6c65745f7374616b696e673a3a736c617368696e673a3a536c617368696e675370616e733a3a656e645f7370616e3a3a686131613338303033663362343434323582023570616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a64697361626c653a3a683662663838313764666333626235666183025e70616c6c65745f7374616b696e673a3a736c617368696e673a3a496e7370656374696e675370616e733c543e3a3a636f6d706172655f616e645f7570646174655f7370616e5f736c6173683a3a68356662646462613166316638626462648402d3023c70616c6c65745f7374616b696e673a3a4578706f737572654f663c543e2061732073705f72756e74696d653a3a7472616974733a3a436f6e766572743c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c70616c6c65745f7374616b696e673a3a4578706f737572653c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c3c542061732070616c6c65745f7374616b696e673a3a54726169743e3a3a43757272656e6379206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a42616c616e63653e3e3e3e3a3a636f6e766572743a3a68366165633732636137343538356537328502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a686561373263643463313939383833653786026a636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4f6e63653c413e20666f7220266d757420463e3a3a63616c6c5f6f6e63653a3a68646461313137386666616564376263308702493c70616c6c65745f7374616b696e673a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68643538653432356363326333303736388802623c70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c573e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a686230643338376132663535346235633589025a3c70616c6c65745f7374616b696e673a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68376139646535393235356236623761378a024373705f696f3a3a73746f726167653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a726561643a3a68356631316666663034633234346237368b025a3c70616c6c65745f696e64696365733a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a5374617469634c6f6f6b75703e3a3a6c6f6f6b75703a3a68363637616632356366663931613162338c025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68383836343239393966323134653135358d02336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e635f7265663a3a68306235396665366132366334643530398e025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68643639653335623838326465313837368f02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a683133333464633934343966353631313390028d013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7365745f6c6f636b3a3a683337623739646161613263303430633691023870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6b696c6c5f73746173683a3a6864326365663735666432363461363533920290013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a72656d6f76655f6c6f636b3a3a683739616636313835633566656230373793024870616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a636865636b5f616e645f7265706c6163655f736f6c7574696f6e3a3a68303831346461353136633534306661369402746672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6765743a3a683132666433336539326564633833363395025273705f61726974686d657469633a3a7065725f7468696e67733a3a50657262696c6c3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a686630666536323262646132323831626696023970616c6c65745f7374616b696e673a3a4d6f64756c653c543e3a3a6d616b655f7061796f75743a3a68303632316136623964616133663734649702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68383837653464393332303634306330329802437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68373261376638666436643338303831359902336672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465635f7265663a3a68373363386664363463323763653433389a02b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a68343864623564623262323538663163329b025b70616c6c65745f7374616b696e673a3a47656e65726963436f6d7061637441737369676e6d656e74733c562c542c41636375726163793e3a3a696e746f5f61737369676e6d656e743a3a68633432613962666466633334363131399c02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a68363663616538386266323333613932329d02633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a666f6c643a3a68663239656236333235643336633234649e02613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a68623532636466636630306166373430639f025f3c70616c6c65745f7374616b696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831316434303430363132373532383830a002613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6839396432663639626232396434363662a1024470616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a646f5f70687261676d656e3a3a6832313836663665366438613036636565a202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6865363430383138323931386434353163a3028b013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61704974657261746f723c4b2c562c4861736865723e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6839343366613839663730633763623066a402443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6830646335343235663931366265336535a502633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a666f6c643a3a6838363764336163343130306534396663a6024d6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a636f6d707574655f6d656d626572735f646966663a3a6839353666666563636639663165616533a70299013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a6834656335643432313562353635623333a802b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6831373338623865633332343562373765a902437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830396535326137613665323663643336aa02543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6831663262353933303961386238636532ab022e73705f70687261676d656e3a3a7265647563653a3a7265647563653a3a6866613839333933386335633064303363ac0248616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a456e7472793c4b2c563e3a3a6f725f696e736572743a3a6832363936366166363363626338383663ad023373705f70687261676d656e3a3a6e6f64653a3a4e6f64653c413e3a3a726f6f743a3a6832313162326230633165643831393031ae022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837646430346163656532393739306635af023b73705f70687261676d656e3a3a6e6f64653a3a4e6f64653c413e3a3a69735f706172656e745f6f663a3a6838656537333833373639333435636461b002b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6866633538393636646663356335623934b102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830303663376135636264323163623164b202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830346365656166336533313736373839b302386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6830396164366265643431623365333866b402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831326238663365323232373534313765b502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831353138626163323830343836383939b602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831626530663065356638343261306131b702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6831666234306230623362313530353464b802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832383436613537373538383536313062b9026b6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206e6f64655f72756e74696d653a3a43616c6c3e3a3a6465636f64653a3a6833303331316332393734623531313537ba022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837626530343537633261323562366639bb022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837626530343537633261323562366639bc02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6832653466383037646162323536646363bd02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833326362393833393534356432663763be02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833353064666630323434646466666339bf02850170616c6c65745f736f63696574793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f736f63696574793a3a4269644b696e643c4163636f756e7449642c42616c616e63653e3e3a3a6465636f64653a3a6866313235363563313165623962613634c002386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833626365633832626135653635626530c102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6833666539333037396566343139363235c202726e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72206e6f64655f72756e74696d653a3a53657373696f6e4b6579733e3a3a6465636f64653a3a6839353939313966326534633236316632c302386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834336466636238346637343730653239c402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6834623236373432613535373633633038c502386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835343638336563333961313639613737c602386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6835346432346363353461363437383562c702960173705f7374616b696e673a3a6f6666656e63653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7374616b696e673a3a6f6666656e63653a3a4f6666656e636544657461696c733c5265706f727465722c4f6666656e6465723e3e3a3a6465636f64653a3a6831653765323661336635613461383461c8022b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6836646335333530646333613065383137c902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836353263323130333635656163303636ca028f0170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a6465636f64653a3a6861633539363439666333356636393939cb02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836363464646364623162396564333038cc02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6836623833306538313430383264633566cd02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6837363362306534326565313733363539ce02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838316166653732346534303035396535cf02543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6866306166393161396338646231373539d002386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838336538616661363836613730363065d102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6838613564366633633165316665663834d202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839313063323861313964653537386663d302386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6839396663356535633130633832633832d402386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6861393462353839616266346234666435d5026b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7533323e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6833336365616132373739326638656135d602573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861333165363237333335636235633762d702386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862373538343730653262376463373837d802386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6862373632303636666338356631393438d902386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863303639643361393036623066636437da02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863306130653734346233653862646133db027770616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6e7472616374733a3a5363686564756c653e3a3a6465636f64653a3a6863336630356437396561363133623233dc02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863373162373832383237366363303838dd02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863376530396264636637353036363634de02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6863643332333865303439386236333131df02386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864323832313030306333376432366536e002386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864613738363534623466316330353965e102386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6864626232653333663964366537343837e202386672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a6765743a3a6866633435643532643461343937393632e302396672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a74616b653a3a6832386461633638616133626338393631e402396672616d655f737570706f72743a3a73746f726167653a3a756e6861736865643a3a74616b653a3a6835343632383862373566316635383163e5025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6839323562306339353930386331613735e60285013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a43757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7472616e736665723a3a6864343663333266353861633533633431e7024a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6835343932373162623464663939613461e80293013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a436f6e7461696e733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a736f727465645f6d656d626572733a3a6838383335633266313832663030666466e9024270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a69735f6d656d6265723a3a6838643735333232303465643539303231ea0290013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4c6f636b61626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a657874656e645f6c6f636b3a3a6834623132343665623938396134326233eb023670616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6c6f636b733a3a6862303366643032636131623430623863ec023d70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a7570646174655f6c6f636b733a3a6836613463346231616439316536393666ed025c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864303533343130383539663065303032ee02483c5b543b20385d206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6832666363313466303830323838336630ef029a013c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a52657365727661626c6543757272656e63793c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a726570617472696174655f72657365727665643a3a6863333161396136356539393537383538f002b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6862616238343766663637326630623339f1023f70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6866326461336234333831366166653936f2024170616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6837646666346166316365353262303238f3026e3c70616c6c65745f62616c616e6365733a3a5f5f476574427974655374727563744163636f756e743c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836323038326136323863393464373639f4024a70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6863343165313633613436316538663061f5024770616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6835346438633035363837303735643862f6024970616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6836396330346162666638316161386364f702753c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a5f5f47657442797465537472756374566f74696e673c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865626363316535343431303637353433f8023c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6837383031373637633031366335316135f9025270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6838313061353662383030333963326362fa029f013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865303833336237356336313633386666fb02a3013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5465726d4475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864326263376435386134663365643564fc02a7013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4465736972656452756e6e657273557044656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866343038326364626630333661633336fd02a5013c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446573697265644d656d6265727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830313564663038333234636630656564fe02fa01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4c6561663e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a6862306530653564613066326339353763ff02fe01616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a48616e646c653c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a4e6f64655265663c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a4d75742c4b2c562c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a496e7465726e616c3e2c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6e6f64653a3a6d61726b65723a3a456467653e3a3a696e736572743a3a683566643663326365336639623734356380034b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a68393330616266633430343738623461348103613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a686462393761386332663332663562333282034b616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a566163616e74456e7472793c4b2c563e3a3a696e736572743a3a6837653937333561643437646535376431830348616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6836643136353039383966373231353561840348616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a686632643433303933666533653030626385034c3c70616c6c65745f62616c616e6365733a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68386130383931393238383833643463618603543c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a686139666231633135666162666562653987035d3c70616c6c65745f62616c616e6365733a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68613035613537306163393530303263358803623c70616c6c65745f62616c616e6365733a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68626136396533323639643933633430328903653c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68356432326632396564343834633936378a03393c54206173206672616d655f737570706f72743a3a7472616974733a3a4c656e3e3a3a6c656e3a3a68396633306466656136386663646331328b03393c54206173206672616d655f737570706f72743a3a7472616974733a3a4c656e3e3a3a6c656e3a3a68613034306564333636643737613766338c03b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a68303235326339343361363263386331338d03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68353335303433356532306162393531398e035270616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e3a3a72656d6f76655f616e645f7265706c6163655f6d656d6265723a3a68323036303636626432356466343566348f03613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a496e746f497465723c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a683236656435323766326637666531656590036a3c70616c6c65745f656c656374696f6e735f70687261676d656e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68343737393833333664393536623737639103456672616d655f737570706f72743a3a7472616974733a3a5369676e6564496d62616c616e63653c422c503e3a3a6d657267653a3a683565373432613166323763623765333592033c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a683165373139393235373033613539363593033e70616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68366264613134316162616566633165619403437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68303962653065306334356236326338349503437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68313632316364613131363533373363309603437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68326333323665666639333932303766349703437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68383731393832336466356432353338329803437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a686131346166366162663430333231363999034a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68366631633135393734643031633335389a03493c70616c6c65745f7574696c6974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68663462306134316331353163626234619b03493c6e6f64655f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68333736613635376637383866316639642e323036329c03443c6e6f64655f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68333736613635376637383866316639649d03473c6672616d655f73797374656d3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68663532646138393065373263323462399e03443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68633634343962653363613331313336399f03443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864323032313031353031396634303934a0034b3c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6838666336653532613337343966636361a1034e3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6861623763636361336138303334346538a2034e3c70616c6c65745f6d656d626572736869703a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832636337346331373936626566666335a3034a3c70616c6c65745f74726561737572793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863623639343032643235386531626236a4034b3c70616c6c65745f636f6e7472616374733a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6834346537393330616533373636613663a503463c70616c6c65745f7375646f3a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6864353065613531666464656538623564a603443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836306663313039343964343862333534a703463c70616c6c65745f626162653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836623738656336353333316431343666a8034a3c70616c6c65745f6964656e746974793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836623362396564656461313531303039a9034b3c70616c6c65745f736f63696574793a3a43616c6c3c542c493e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831633536343162356636303762326231aa034a3c70616c6c65745f7265636f766572793a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6836336537623530653866326531366634ab035a3c70616c6c65745f7574696c6974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6832653138653265666336356565663837ac03553c6e6f64655f72756e74696d653a3a43616c6c2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6830386530613933623532393731393261ad034670616c6c65745f7574696c6974793a3a4d6f64756c653c543e3a3a656e737572655f736f727465645f616e645f696e736572743a3a6835383039313964346538363430666266ae03437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6861613162323539663533333232333564af036e6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206e6f64655f72756e74696d653a3a43616c6c3e3a3a656e636f64655f746f3a3a6839326661326535376432653361363236b003706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6834353039326334313066366132323361b103463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6832353936316464316532343531396566b2035f3c70616c6c65745f7574696c6974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6863653832363264636461653031313665b3030c436f72655f76657273696f6eb4036b3c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e67206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6830353936316638653965663866343037b50312436f72655f657865637574655f626c6f636bb6039a0173705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a426c6f636b3c4865616465722c45787472696e7369633e3e3a3a6465636f64653a3a6836633664366533643238323565383166b70384016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65732c434f6e52756e74696d65557067726164653e3a3a696e697469616c697a655f626c6f636b3a3a6838393534336262666334333534303062b8035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838636465383435303864653034626362b9033e73705f72756e74696d653a3a67656e657269633a3a656e636f64655f776974685f7665635f7072656669783a3a6836616639306563633236343262396566ba035373705f696f3a3a747269653a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a626c616b65325f3235365f6f7264657265645f726f6f743a3a6838626166303166646138346239643638bb038c016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65732c434f6e52756e74696d65557067726164653e3a3a6170706c795f65787472696e7369635f776974685f6c656e3a3a6837626533313430336232346436353961bc03446672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6e6f74655f66696e69736865645f65787472696e736963733a3a6834663565633735623365366462643935bd03713c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e46696e616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f66696e616c697a653a3a6837356431383837323432663037626232be03346672616d655f73797374656d3a3a4d6f64756c653c543e3a3a66696e616c697a653a3a6834306363643339316338633733393866bf03467061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a436f646553656374696f6e3a3a626f646965733a3a6865666236393637346665636463336532c0036f3c73705f72756e74696d653a3a67656e657269633a3a6469676573743a3a4469676573744974656d3c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6861653631333134316431633734656430c103363c5420617320636f72653a3a636f6e766572743a3a496e746f3c553e3e3a3a696e746f3a3a6831653531663063306165653439623266c203303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832333239626366396430636261636135c30315436f72655f696e697469616c697a655f626c6f636bc403723c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c4e756d6265722c486173683e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836353732656635373330626338323535c503114d657461646174615f6d65746164617461c603d9053c6e6f64655f72756e74696d653a3a52756e74696d652061732073705f6170693a3a72756e74696d655f6465636c5f666f725f4d657461646174613a3a4d657461646174613c73705f72756e74696d653a3a67656e657269633a3a626c6f636b3a3a426c6f636b3c73705f72756e74696d653a3a67656e657269633a3a6865616465723a3a4865616465723c7533322c73705f72756e74696d653a3a7472616974733a3a426c616b6554776f3235363e2c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c3c70616c6c65745f696e64696365733a3a4d6f64756c653c6e6f64655f72756e74696d653a3a52756e74696d653e2061732073705f72756e74696d653a3a7472616974733a3a5374617469634c6f6f6b75703e3a3a536f757263652c6e6f64655f72756e74696d653a3a43616c6c2c73705f72756e74696d653a3a4d756c74695369676e61747572652c286672616d655f73797374656d3a3a436865636b56657273696f6e3c6e6f64655f72756e74696d653a3a52756e74696d653e2c6672616d655f73797374656d3a3a436865636b47656e657369733c6e6f64655f72756e74696d653a3a52756e74696d653e2c6672616d655f73797374656d3a3a436865636b4572613c6e6f64655f72756e74696d653a3a52756e74696d653e2c6672616d655f73797374656d3a3a436865636b4e6f6e63653c6e6f64655f72756e74696d653a3a52756e74696d653e2c6672616d655f73797374656d3a3a436865636b5765696768743c6e6f64655f72756e74696d653a3a52756e74696d653e2c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4368617267655472616e73616374696f6e5061796d656e743c6e6f64655f72756e74696d653a3a52756e74696d653e293e3e3e3e3a3a6d657461646174613a3a6839373832303465333938323838636637c7031c426c6f636b4275696c6465725f6170706c795f65787472696e736963c8039c013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838633366316637643336313964326631c903aa0173705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a5472616e73616374696f6e56616c69646974794572726f723e3a3a656e636f64655f746f3a3a6837616630643436316630373732653336ca031b426c6f636b4275696c6465725f66696e616c697a655f626c6f636bcb035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6864666365313231316532383232373936cc0320426c6f636b4275696c6465725f696e686572656e745f65787472696e73696373cd036f3c636f72653a3a697465723a3a61646170746572733a3a526573756c745368756e743c492c453e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6837383030326161646637346638343330ce033a70616c6c65745f74696d657374616d703a3a657874726163745f696e686572656e745f646174613a3a6831316537336434343339363134626430cf03543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6837393561656339316661343637336666d003437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6862316366653033333662363463663133d103366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a626c6f636b5f686173683a3a6834616266626433393131633436333032d2031c426c6f636b4275696c6465725f636865636b5f696e686572656e7473d303453c737472206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6866613461623063393161366331636337d40318426c6f636b4275696c6465725f72616e646f6d5f73656564d50390013c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a52616e646f6d6e6573733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a486173683e3e3a3a72616e646f6d3a3a6830663032613736303538393733646663d6032b5461676765645472616e73616374696f6e51756575655f76616c69646174655f7472616e73616374696f6ed7039f013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a6832323837393033373663643437333663d803653c6e6f64655f72756e74696d653a3a43616c6c206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a6834646464643866306463633231393133d9035373705f72756e74696d653a3a7472616e73616374696f6e5f76616c69646974793a3a56616c69645472616e73616374696f6e3a3a636f6d62696e655f776974683a3a6835303633363533356261326534313839da03436672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a636865636b5f626c6f636b5f6c656e6774683a3a6839616436343133613033373137376362db034570616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a636f6d707574655f6665653a3a6866373362323964633264663765616638dc03b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6863313236303339373534623933336233dd036b3c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732073705f72756e74696d653a3a7472616974733a3a56616c6964617465556e7369676e65643e3a3a76616c69646174655f756e7369676e65643a3a6837336534646664383430316138633162de03214f6666636861696e576f726b65724170695f6f6666636861696e5f776f726b6572df0386016672616d655f6578656375746976653a3a4578656375746976653c53797374656d2c426c6f636b2c436f6e746578742c556e7369676e656456616c696461746f722c416c6c4d6f64756c65732c434f6e52756e74696d65557067726164653e3a3a657874726163745f7072655f6469676573743a3a6833633036653934333837323364316438e003366672616d655f73797374656d3a3a4d6f64756c653c543e3a3a696e697469616c697a653a3a6862353039623233376562656265333134e1035173705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7075626c69635f6b6579733a3a6836343533373533326262646661653531e20347636f72653a3a666d743a3a6e756d3a3a3c696d706c20636f72653a3a666d743a3a446562756720666f72207533323e3a3a666d743a3a6831633835623037353066633565353230e303633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6862353438336361646236356530656662e403583c70616c6c65745f696d5f6f6e6c696e653a3a4f6666636861696e4572723c426c6f636b4e756d6265723e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863623733323834383634623336613164e5033c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6830336530383365663037633565323135e6034f70616c6c65745f7374616b696e673a3a6f6666636861696e5f656c656374696f6e3a3a636f6d707574655f6f6666636861696e5f656c656374696f6e3a3a6837366430386564363432653765616166e7031e4772616e6470614170695f6772616e6470615f617574686f726974696573e803543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6838616534643735326134636663633836e90315426162654170695f636f6e66696775726174696f6eea031b426162654170695f63757272656e745f65706f63685f7374617274eb0321417574686f72697479446973636f766572794170695f617574686f726974696573ec031d4163636f756e744e6f6e63654170695f6163636f756e745f6e6f6e6365ed035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6838333634626337663438643432626536ee0311436f6e7472616374734170695f63616c6cef034870616c6c65745f636f6e7472616374733a3a657865633a3a457865637574696f6e436f6e746578743c542c562c4c3e3a3a63616c6c3a3a6830366364393161376464663131303334f003783c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6d6d69743a3a6865373930646264376132643939306532f1033a70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a726573746f72655f746f3a3a6835323066363264363537326337656139f20318436f6e7472616374734170695f6765745f73746f72616765f3035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837346439313964636132303135343433f4033470616c6c65745f636f6e7472616374733a3a6368696c645f747269655f696e666f3a3a6832613034653636333861626539363636f5031c436f6e7472616374734170695f72656e745f70726f6a656374696f6ef6033870616c6c65745f636f6e7472616374733a3a72656e743a3a636f6e73696465725f636173653a3a6830303562333937373330646164633432f7033870616c6c65745f636f6e7472616374733a3a72656e743a3a656e6163745f766572646963743a3a6864643361303261343738326136646332f803205472616e73616374696f6e5061796d656e744170695f71756572795f696e666ff9032153657373696f6e4b6579735f67656e65726174655f73657373696f6e5f6b657973fa034e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a656432353531395f67656e65726174653a3a6861663766653465303739306335326632fb034e73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f67656e65726174653a3a6864343036646464383438353830636663fc031f53657373696f6e4b6579735f6465636f64655f73657373696f6e5f6b657973fd038f0173705f6170706c69636174696f6e5f63727970746f3a3a737232353531393a3a3c696d706c2073705f6170706c69636174696f6e5f63727970746f3a3a7472616974733a3a52756e74696d655075626c696320666f722073705f636f72653a3a737232353531393a3a5075626c69633e3a3a746f5f7261775f7665633a3a6834313030303530383533656362626532fe035c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831393936653735363032656131383631ff033870616c6c65745f626162653a3a4d6f64756c653c543e3a3a646f5f696e697469616c697a653a3a68633338386661663832363234383361628004a30173705f636f6e73656e7375735f626162653a3a646967657374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f636f6e73656e7375735f626162653a3a646967657374733a3a5261775072654469676573743c5652464f75747075742c56524650726f6f663e3e3a3a6465636f64653a3a686130646632326430623236643163656481043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68313165336635633266343039316364398204376672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6465706f7369745f6c6f673a3a686630363362653331366338626237333883047d3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f62616c616e63653a3a686564363866316535633066653734663984047d3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f73746f726167653a3a683938306661326366633937353864356285047f3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f636f64655f686173683a3a6833613766373162343832633964306361860481013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6e74726163745f6578697374733a3a6864313439303833363664313538303233870484013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4469726563744163636f756e7444622061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f72656e745f616c6c6f77616e63653a3a68623766623738363236663665613963358804b2013c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f737570706f72743a3a7472616974733a3a53746f7265644d61703c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449642c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e74446174613e3e3a3a7472795f6d75746174655f6578697374733a3a6865333236306265366637666530353662890496013c70616c6c65745f636f6e7472616374733a3a54726965496446726f6d506172656e74436f756e7465723c543e2061732070616c6c65745f636f6e7472616374733a3a54726965496447656e657261746f723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a747269655f69643a3a68306430306531353533613839656338638a04437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a68663833616235613935626232353935328b043b70616c6c65745f626162653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68373736396466303265633361353862368c046b3c70616c6c65745f626162653a3a5f5f4765744279746553747275637452616e646f6d6e6573733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68643037353937653665626139643666318d044470616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68613465636330363035336538613934648e049a013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4578706563746564426c6f636b54696d6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68663132623135316637333065646564318f0496013c70616c6c65745f626162653a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45706f63684475726174696f6e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864303939323866636538356432363165900481013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f62616c616e63653a3a6835346134663936366639613335613333910481013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f73746f726167653a3a6831333761343332373762393038393930920483013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f636f64655f686173683a3a6863363330343066363363346238383664930485013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6e74726163745f6578697374733a3a6861613235386264623031366636323334940488013c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a6765745f72656e745f616c6c6f77616e63653a3a683465633732623862343635643365356195047c3c70616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e2061732070616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4163636f756e7444623c543e3e3a3a636f6d6d69743a3a686139353036663666623136363539363896045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683232353165633664623062396134326397045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683763613265633161393362616636613198043c70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a683730393262316634353134333762346199043e70616c6c65745f696e64696365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68663735376536623033353530613163659a04633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a666f6c643a3a68333033316564326565666233343036329b044673705f61726974686d657469633a3a68656c706572735f3132386269743a3a6d756c7469706c795f62795f726174696f6e616c3a3a68393031626331333565356638666566329c04533c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a68616362613234623435383430376330329d04583c73705f61726974686d657469633a3a726174696f6e616c3132383a3a526174696f6e616c31323820617320636f72653a3a636d703a3a5061727469616c45713e3a3a65713a3a68343232666636626366653836633466619e042d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a68396534323465363362383761366161669f047a3c73705f61726974686d657469633a3a7065725f7468696e67733a3a5065725531362061732073705f61726974686d657469633a3a7065725f7468696e67733a3a5065725468696e673e3a3a66726f6d5f726174696f6e616c5f617070726f78696d6174696f6e3a3a6861383037316235323863656163643538a0045273705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a7375626d69745f7472616e73616374696f6e3a3a6834363464333661636234303335376461a1043d70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6861396537356666336265643832313831a2043f70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865616338323362343237373934623033a3042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6832393232323238633938316134356636a4044870616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6839326137653733326333633064323064a5049a013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785265676973747261727344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6861326337656361656162356462383565a6049b013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d61785375624163636f756e747344656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838666537313832346431326331663036a7049e013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5375624163636f756e744465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838633039343264643061663732613163a80499013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4669656c644465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863663461663934613235356665303065a90499013c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a42617369634465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864333333633633656637633635306135aa04820170616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4a756467656d656e743c42616c616e63653e3e3a3a656e636f64655f746f3a3a6862343963306633303230306635653635ab047c70616c6c65745f6964656e746974793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f6964656e746974793a3a4964656e74697479496e666f3e3a3a656e636f64655f746f3a3a6832323837376662666234346564353236ac04573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64653a3a6837616237303239366439623865346535ad04573c70616c6c65745f6964656e746974793a3a44617461206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6836373039623532623961643239646633ae045170616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e3a3a7365745f62616c616e63653a3a6863386335363437633837386434663335af045170616c6c65745f636f6e7472616374733a3a6163636f756e745f64623a3a4f7665726c61794163636f756e7444623c543e3a3a7365745f73746f726167653a3a6834343931643963656639383037386463b004437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6839646263306437626664393831653038b1045a3c70616c6c65745f696e64696365733a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6830326163366530316334613661303063b2044a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6832326565616262356163633664323730b3045b3c70616c6c65745f6964656e746974793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a6866633337643032386261626630633739b4043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6837383037623265343638316565666461b5045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865343462623363643664396463353034b6045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6862313338636132333030313665643536b704603c70616c6c65745f6964656e746974793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835383261646132356362633639623135b8042b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6837356239656266393732333739373237b9043d70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a69735f6f6e6c696e655f6175783a3a6833633636653065386335386366303261ba04706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6865393964373537383363333162663138bb044d73705f696f3a3a6f6666636861696e3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6e6574776f726b5f73746174653a3a6864363436393861636139303262366232bc044a73705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a737232353531395f7369676e3a3a6838643263316630613033363163383862bd04473c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839636435616364366236316564356130be04373c285431302c5431312920617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6833323134383937343237336366333637bf04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830363734343637326239636663623838c00496013c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e2061732070616c6c65745f73657373696f6e3a3a4f6e6553657373696f6e48616e646c65723c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6f6e5f6265666f72655f73657373696f6e5f656e64696e673a3a6862396661323234346664313931633363c104443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6865653039373465616162386365386134c2045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834316463613531376539363937633637c304706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6864666564653639646361353935623239c4045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833383837656164613662646236373964c504437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6865376337336564626436393965356639c604443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6835643031373934636661633266383865c7043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6833333966366463656630356665663331c8044b6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a72656769737465725f65787472615f7765696768745f756e636865636b65643a3a6830363637653030653263383333383865c9045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833303063393962386634303565353535ca04693c636f72653a3a697465723a3a61646170746572733a3a46696c7465724d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6866343130663637613761373036356665cb0481016672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a617070656e645f6f725f696e736572743a3a6831343462303635666137353430356262cc04753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6865353261323135343036663731653664cd04437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830363561373534326135373733623533ce04406672616d655f73797374656d3a3a436865636b5765696768743c543e3a3a646f5f7072655f64697370617463683a3a6863646164363235623432616530386333cf045770616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a7765696768745f746f5f6665655f776974685f61646a7573746d656e743a3a6864313735373932323233353063623536d0043770616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a617574686f723a3a6866393463636564386561313039646364d104563c73705f72756e74696d653a3a44697370617463684572726f722061732073705f72756e74696d653a3a7472616974733a3a5072696e7461626c653e3a3a7072696e743a3a6863346566383637626639386531386236d2043e70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6837626466653761376130393937323932d3043f70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a6e6f74655f617574686f72736869703a3a6836383334633136353461333264623062d4044070616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6861653831363333396361316265383064d5043e70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6835393730656335653436363337613935d6044070616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6865353864396564363730396166666565d7044970616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6862336631393833396163353133663035d8049b013c70616c6c65745f74696d657374616d703a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833616533613339373230373764306237d9043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834643932316134343239626133323166da048d0170616c6c65745f7363686564756c65723a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f7363686564756c65723a3a5363686564756c65643c43616c6c2c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6863646237646465323139356636646462db043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6831306436353761386661656266653430dc04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831643133313534366161663930316465dd04303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832356635323932333764633036323530de044b3c70616c6c65745f696d5f6f6e6c696e653a3a43616c6c3c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6832303562383065666232313537653534df04613c70616c6c65745f696d5f6f6e6c696e653a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6866356637323433663232336634336536e0043a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f7374723a3a6831616635653663383338626233653235e1043b3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f636861723a3a6861643534346239663235663461656264e2043a3c266d7574205720617320636f72653a3a666d743a3a57726974653e3a3a77726974655f666d743a3a6835366534336430616634633936666337e3043273705f73616e64626f783a3a696d703a3a64697370617463685f7468756e6b3a3a6866376564613431343138656534343638e4047673705f7761736d5f696e746572666163653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722073705f7761736d5f696e746572666163653a3a56616c75653e3a3a6465636f64653a3a6835393366313463636336656639626339e5047973705f7761736d5f696e746572666163653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722073705f7761736d5f696e746572666163653a3a56616c75653e3a3a656e636f64655f746f3a3a6839313534646335623637376664313034e6045273705f73616e64626f783a3a696d703a3a456e7669726f6e6d656e74446566696e6974696f6e4275696c6465723c543e3a3a6164645f686f73745f66756e633a3a6838373336363164663163303463316637e7043f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f65787465726e616c3a3a6836643536353630643663653737303936e8047f70616c6c65745f64656d6f63726163793a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c70616c6c65745f64656d6f63726163793a3a4572726f723c543e3e20666f722073705f72756e74696d653a3a44697370617463684572726f723e3a3a66726f6d3a3a6835326237626330383633613465643362e9044170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a696e6a6563745f7265666572656e64756d3a3a6834623037666463353162383939383938ea043d70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6c61756e63685f7075626c69633a3a6833633034346631383532336235666139eb043b70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6261636b696e675f666f723a3a6864386130376463356365613739663666ec043c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6863373565363961353434643862303132ed045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6830353866623530366539396665336136ee045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6836323630376138623937616561333436ef049f0170616c6c65745f64656d6f63726163793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a507265696d6167655374617475733c4163636f756e7449642c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6833643935623264323734656539306466f0045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865353132616361303662316134313330f104497061726974795f7363616c655f636f6465633a3a656e636f64655f617070656e643a3a657874726163745f6c656e6774685f646174613a3a6831623937383962616439613065656536f204703c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6830626465626632353966633031623962f3047b6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a6465636f64655f6c656e3a3a6833336433396564623631626530643738f4044170616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a646f5f656e6163745f70726f706f73616c3a3a6864633334633535663465646232656166f5045c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837653263386666386330663931376132f604437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830313931363539336464323665303865f7043c70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6838663561313062313565616238386461f8043e70616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6839613731373863376632353762646634f9044770616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6864363630313832323364363538663163fa049c013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d696e696d756d4465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839653936343061373563363536663035fb043f70616c6c65745f6f6666656e6365733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6833306633643931663932353732613065fc043e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6830343063663230333563633164666362fd044070616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6831663536323832656232656537376239fe046f3c70616c6c65745f64656d6f63726163793a3a5f5f47657442797465537472756374426c61636b6c6973743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6864306132616435366164656331653433ff046e3c70616c6c65745f64656d6f63726163793a3a5f5f47657442797465537472756374566f74696e674f663c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686333323734333335646336633331373180053c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a68396131393765386363666230363339338105713c70616c6c65745f64656d6f63726163793a3a5f5f476574427974655374727563745075626c696350726f70733c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683033343339626338313964326538326282054970616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68393236393765383731653465663431618305a1013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a507265696d616765427974654465706f73697444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a686132326330646635646132663032313884059a013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4c61756e6368506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68393231633964636166666239653732398505a3013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a46617374547261636b566f74696e67506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683639393965326138316466656531623586059d013c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a456e6163746d656e74506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a683965633966363866326532613463643387054070616c6c65745f7363686564756c65723a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683931643066343566313138646535643488053c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a683165633030613065306137323031356189053970616c6c65745f76657374696e673a3a4d6f64756c653c543e3a3a7570646174655f6c6f636b3a3a68306237323332303437353837333333328a055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68353736613565353061386434623762368b055c3c70616c6c65745f64656d6f63726163793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68303234626133366332633361613636348c0582017061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72202850302c51302c5230293e3a3a656e636f64655f746f3a3a68393135336435643966623834353661618d053870616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f766f74653a3a68313064326433636461376361613330618e053570616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a70726f78793a3a68323739353238313538613963653139648f055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68376562323737656265643432336362659005437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a683433656363366261643662646365333291055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683635663434326137303864373762616592055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a686131373466313939383037313862396593053c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f64656c65676174653a3a683038363531333431346631363130326194053e70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f756e64656c65676174653a3a68306339343637393337616166396437329505776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a686335346231616266633734653139383896055c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a683638323938316364336131643631353897053f70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7472795f72656d6f76655f766f74653a3a686565663931356636626466383631656198054a70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e3a3a7265647563655f757073747265616d5f64656c65676174696f6e3a3a683064643061373065313139336239386499054a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68363162616132623433303539393361669a055d3c70616c6c65745f636f6e7472616374733a3a7761736d3a3a5761736d566d2061732070616c6c65745f636f6e7472616374733a3a657865633a3a566d3c543e3e3a3a657865637574653a3a68376233376537336562663732363061359b056a3c70616c6c65745f636f6e7472616374733a3a7761736d3a3a5761736d566d2061732070616c6c65745f636f6e7472616374733a3a657865633a3a566d3c543e3e3a3a657865637574653a3a7b7b636c6f737572657d7d3a3a68383534646339396665386631643930339c0581013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6761733a3a68303335303838633964666332303034319d058d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7365745f73746f726167653a3a68656662643636666432363932376636379e058f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f636c6561725f73746f726167653a3a68626363646632316562636235653533399f058d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6765745f73746f726167653a3a6837356265373535653466313263373765a0058a013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7472616e736665723a3a6830643733383935356564303664316230a10586013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f63616c6c3a3a6862313262663739333865353762393637a2058d013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f696e7374616e74696174653a3a6839656562636264333262376438373839a3058b013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7465726d696e6174653a3a6830373334386163386135373838386364a40588013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72657475726e3a3a6863363638623230373537623538373562a50588013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f63616c6c65723a3a6865386461323932333434376432393864a60589013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f616464726573733a3a6834373335333764656535303064663730a7058b013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6761735f70726963653a3a6836616461373632366133643864306266a8058a013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6761735f6c6566743a3a6833666430316438366336393639306664a90589013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f62616c616e63653a3a6830336533383862613463396637636132aa0593013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f76616c75655f7472616e736665727265643a3a6834646462653665616561396438313866ab0588013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72616e646f6d3a3a6835303266313663336230376132646362ac0585013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6e6f773a3a6863353638323331646463336533373936ad0591013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6d696e696d756d5f62616c616e63653a3a6839326561396436653266353635663632ae0593013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f746f6d6273746f6e655f6465706f7369743a3a6839653962666535396261383662303930af058f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f64697370617463685f63616c6c3a3a6863643336353634643830633133376164b0058c013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f726573746f72655f746f3a3a6838386534336132646530336464623934b1058e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f73697a653a3a6837303139636333623961353864393633b2058e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f726561643a3a6835343832623336393563373937303134b3058f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f736372617463685f77726974653a3a6839633461373430343739393032623836b4058f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6465706f7369745f6576656e743a3a6866333961343935306630386338323034b50594013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7365745f72656e745f616c6c6f77616e63653a3a6864306636613538623864636264666338b60590013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f72656e745f616c6c6f77616e63653a3a6838353134653630343839393530346161b70589013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f7072696e746c6e3a3a6862303738623262643435383035343662b8058e013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f626c6f636b5f6e756d6265723a3a6861356662313538373065386461313535b90595013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f6765745f72756e74696d655f73746f726167653a3a6830623930616465383335616464646463ba058f013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f686173685f736861325f3235363a3a6866356635646634623262393263656439bb0591013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f686173685f6b656363616b5f3235363a3a6837666539323932666233353837643334bc0591013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f686173685f626c616b65325f3235363a3a6832366432373238613734623064663831bd0591013c70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a456e762061732070616c6c65745f636f6e7472616374733a3a7761736d3a3a656e765f6465663a3a46756e6374696f6e496d706c50726f76696465723c453e3e3a3a696d706c733a3a6578745f686173685f626c616b65325f3132383a3a6836353664656638373130303166336330be053e70616c6c65745f636f6e7472616374733a3a7761736d3a3a72756e74696d653a3a6368617267655f6761733a3a6833343264326238626337633764303261bf053370616c6c65745f636f6e7472616374733a3a657865633a3a7472616e736665723a3a6839353065616664303466613631633736c0054f70616c6c65745f636f6e7472616374733a3a657865633a3a457865637574696f6e436f6e746578743c542c562c4c3e3a3a696e7374616e74696174653a3a6837326333393439373130303337383537c1052d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6833303639646365353332316537326664c2055f3c70616c6c65745f76657374696e673a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6836396637383763643730633564646231c305613c70616c6c65745f64656d6f63726163793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6863343035386338336531623237393362c4057c7061726974795f7363616c655f636f6465633a3a636f6465633a3a696e6e65725f7475706c655f696d706c3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f72202851302c5230293e3a3a6465636f64653a3a6837613662633666663530623563616432c505303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6838363134356262326635306231306634c605443c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6866643934383032333264636662306439c705533c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a737065635f657874656e643a3a6863653938353838666331663533653265c805543c616c6c6f633a3a7665633a3a5665633c543e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a6861643939656561356336613366313236c9058b013c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61704974657261746f723c4b2c562c4861736865723e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835333064343834303262373132633962ca05513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6830316233366132363737356365623639cb05513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6864316636633833373835616238313737cc05466e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f6672616d655f73797374656d3a3a6865623161613639353762323132663936cd05486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7574696c6974793a3a6863616530373132333564336166616335ce05486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696e64696365733a3a6865323739323066323238376263366633cf05496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f62616c616e6365733a3a6863383661383130666332396536643662d0054a70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6834666639316130643838646266343337d1055370616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6839333563346561333134323263623932d205486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7374616b696e673a3a6864316365643130336365643636363531d305486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f73657373696f6e3a3a6839333339383162343430633764326435d4054a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f64656d6f63726163793a3a6839656639373339613833636639623831d505556e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6c6c6563746976655f496e7374616e6365313a3a6833643664373237376330363634393766d605536e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f656c656374696f6e735f70687261676d656e3a3a6834336130633465666138323766343239d705556e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6d656d626572736869705f496e7374616e6365313a3a6834656264313639383432376235313532d8054570616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6866656531656332393265316135633063d9055070616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6836393634623035643963626363323166da05683c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835323637386639303932326239343030db05486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6772616e6470613a3a6830656631386162363435316532383066dc05496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f74726561737572793a3a6838386238326464633734636436303838dd054070616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6863363536326163326638616465363566de053e70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6832646562663438626638656135663734df054a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f636f6e7472616374733a3a6830643036326139336330303036323732e0054970616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6861376639386461353463316338356335e105613c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6832323661383965343737646336663631e205456e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7375646f3a3a6865376131336161623435313138323466e3054a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f696d5f6f6e6c696e653a3a6864623130613939343133383966393236e405496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6f6666656e6365733a3a6861333137626439666532363932363063e505496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f6964656e746974793a3a6831633965636538353139383065633563e605486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f736f63696574793a3a6837366239313665353030366435376633e705496e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7265636f766572793a3a6831396435633835636466346536663032e805486e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f76657374696e673a3a6836303936386161396662336636653962e9054a6e6f64655f72756e74696d653a3a52756e74696d653a3a5f5f6d6f64756c655f6576656e74735f70616c6c65745f7363686564756c65723a3a6863346264306238656532396239353963ea059a013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d617856616c756553697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863393438343731653466633666303030eb0596013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178446570746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6830333864356532323234303632323362ec059d013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53757263686172676552657761726444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836343830653436366165336364303937ed059f013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a52656e744465706f7369744f666673657444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839626530363830656562376135663336ee0599013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a52656e744279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6836663961393366386466613437636564ef059f013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a53746f7261676553697a654f666673657444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838643633303139303332616634633336f005a1013c70616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5369676e6564436c61696d48616e646963617044656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863346466383466376635316164343366f105723c70616c6c65745f636f6e7472616374733a3a5f5f476574427974655374727563745072697374696e65436f64653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839393763623030653134396439313736f205753c70616c6c65745f636f6e7472616374733a3a5f5f4765744279746553747275637443757272656e745363686564756c653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866393832333137383262633461326433f3057a70616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6e7472616374733a3a5363686564756c653e3a3a656e636f64655f746f3a3a6832376466393964366137383130313132f405a2013c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5265706f72744c6174656e637944656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6833393932333966643833396664313862f5059f013c70616c6c65745f66696e616c6974795f747261636b65723a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a57696e646f7753697a6544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862306365323463633437653563363365f605aa013c70616c6c65745f7472616e73616374696f6e5f7061796d656e743a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5472616e73616374696f6e4279746546656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862656437356130663137626439343838f705a40170616c6c65745f636f6e7472616374733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6e7472616374733a3a526177416c697665436f6e7472616374496e666f3c436f6465486173682c42616c616e63652c426c6f636b4e756d6265723e3e3a3a656e636f64655f746f3a3a6834393036313261313163303935356662f8054a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6830343339333663613334336566363630f905ac013c73705f72756e74696d653a3a67656e657269633a3a756e636865636b65645f65787472696e7369633a3a556e636865636b656445787472696e7369633c416464726573732c43616c6c2c5369676e61747572652c45787472613e2061732073705f72756e74696d653a3a7472616974733a3a436865636b61626c653c4c6f6f6b75703e3e3a3a636865636b3a3a7b7b636c6f737572657d7d3a3a6835313732306465363738346439346362fa056073705f696f3a3a63727970746f3a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a736563703235366b315f65636473615f7265636f7665725f636f6d707265737365643a3a6830303331353463306265636239363333fb05713c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163745265663c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6834343239616463383933393563666663fc057d3c70616c6c65745f696e64696365733a3a616464726573733a3a416464726573733c4163636f756e7449642c4163636f756e74496e6465783e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a656e636f64655f746f3a3a6863303838393935643661633831383431fd05920170616c6c65745f64656d6f63726163793a3a766f74653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a766f74653a3a4163636f756e74566f74653c42616c616e63653e3e3a3a656e636f64655f746f3a3a6865666438373135663161313033393764fe057d70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a656e636f64655f746f3a3a6833383035363664353437343365656365ff053f7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64655f746f3a3a6831303138393062613431346139333432800668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a68616431343631393831616133613130348106573c49642061732073705f72756e74696d653a3a7472616974733a3a4163636f756e744964436f6e76657273696f6e3c543e3e3a3a696e746f5f7375625f6163636f756e743a3a686563316364626431313036666232653882066f6e6f64655f72756e74696d653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f72206e6f64655f72756e74696d653a3a4576656e743e3a3a656e636f64655f746f3a3a686636653666393138643662376334356183068e0170616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f636f6c6c6563746976653a3a5261774576656e743c486173682c4163636f756e7449642c493e3e3a3a656e636f64655f746f3a3a68326331303235313933333662396166628406763c70616c6c65745f617574686f726974795f646973636f766572793a3a43616c6c3c543e206173206672616d655f737570706f72743a3a776569676874733a3a4765744469737061746368496e666f3e3a3a6765745f64697370617463685f696e666f3a3a68376239316539663635616365623730398506583c6672616d655f73797374656d3a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a686631356263383935616364623033363486065d3c70616c6c65745f617574686f72736869703a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683365336433353465333864363733333187065a3c70616c6c65745f73657373696f6e3a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683361336639313562353663343735356388065f3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683131393766356464313431393763363989065f3c70616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68363561363031306463626432333664398a065f3c70616c6c65745f6d656d626572736869703a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68333831376537613764316438393663348b065b3c70616c6c65745f74726561737572793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68646136656437623533653762383937338c064470616c6c65745f636f6e7472616374733a3a7761736d3a3a707265706172653a3a707265706172655f636f6e74726163743a3a68306562636136353464356463346135368d064970616c6c65745f636f6e7472616374733a3a4d6f64756c653c543e3a3a657865637574655f7761736d3a3a7b7b636c6f737572657d7d3a3a68613037633433343761656339663165378e06573c70616c6c65745f7375646f3a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a68656235333666653835313961623535398f065c3c70616c6c65745f736f63696574793a3a43616c6c3c542c493e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683837643638326638366266643433353990065b3c70616c6c65745f7265636f766572793a3a43616c6c3c543e2061732073705f72756e74696d653a3a7472616974733a3a446973706174636861626c653e3a3a64697370617463683a3a683737626163353439376530613934346491066b3c7061726974795f7363616c655f636f6465633a3a636f6d706163743a3a436f6d706163743c7536343e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a686435323433616462323264653362616692067a3c70616c6c65745f696e64696365733a3a616464726573733a3a416464726573733c4163636f756e7449642c4163636f756e74496e6465783e206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f64653e3a3a6465636f64653a3a683334613364393661333031323938636293067a70616c6c65745f636f6c6c6563746976653a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f636f6c6c6563746976653a3a43616c6c3c542c493e3e3a3a6465636f64653a3a686464386233316238633161316437383894066c70616c6c65745f7375646f3a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7375646f3a3a43616c6c3c543e3e3a3a6465636f64653a3a686665366230643061623361653539363295067470616c6c65745f7265636f766572793a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a4465636f646520666f722070616c6c65745f7265636f766572793a3a43616c6c3c543e3e3a3a6465636f64653a3a68343130636536643031343038393037649606437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6830383438343261386137346565316564970630636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a68646563306531626466306138343965312e3130373098063a6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a683831376537383834613661633166386599063c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68336531316630613964306364333663369a06703c6672616d655f73797374656d3a3a5f5f47657442797465537472756374457865637574696f6e50686173653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68323138303262393830623333346530639b06703c6672616d655f73797374656d3a3a5f5f4765744279746553747275637445787472696e73696373526f6f743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68333131373865326139303164306635309c06693c6672616d655f73797374656d3a3a5f5f476574427974655374727563744163636f756e743c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68386561313265336264626535636137369d06456672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a68626466626630333830376631616636319e069c013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178696d756d426c6f636b4c656e67746844656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a68303265663366653630333561346535669f069d013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a45787472696e7369634261736557656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835623934353064346537323130363635a0069e013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a426c6f636b457865637574696f6e57656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839613765386561316361323764343865a10692013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a446257656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6866653034303734613637623134663162a2069c013c6672616d655f73797374656d3a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178696d756d426c6f636b57656967687444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832663333303361336535396365363436a3063b70616c6c65745f636f6e7472616374733a3a7761736d3a3a636f64655f63616368653a3a6c6f61643a3a6831393939343334323732646361353233a406aa0170616c6c65745f64656d6f63726163793a3a74797065733a3a5f3a3a3c696d706c207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f646520666f722070616c6c65745f64656d6f63726163793a3a74797065733a3a5265666572656e64756d5374617475733c426c6f636b4e756d6265722c486173682c42616c616e63653e3e3a3a656e636f64655f746f3a3a6862393137323034313462313038366635a5064170616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6866323964663330623038633836633037a6064370616c6c65745f6d656d626572736869703a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6835646331333063393561653063356366a706437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6836633466633039653364333864663661a8064a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a6835613261613431373162653338663437a9065d3c6672616d655f73797374656d3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6833643662316337306335303231333962aa0699013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a6368616e67655f6d656d626572735f736f727465643a3a6830353935366365616662323934356336ab068d013c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733c3c54206173206672616d655f73797374656d3a3a54726169743e3a3a4163636f756e7449643e3e3a3a7365745f7072696d653a3a6838336566366439663836303137343563ac062b616c6c6f633a3a736c6963653a3a6d657267655f736f72743a3a6833636639313337393965633965353439ad064b6672616d655f737570706f72743a3a7472616974733a3a4368616e67654d656d626572733a3a7365745f6d656d626572735f736f727465643a3a6839383135333962646438623262626161ae0668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6862356630623138363637326365383565af062d70616c6c65745f736f63696574793a3a7069636b5f7573697a653a3a6837343739633461336232356230643737b0063b70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a62756d705f7061796f75743a3a6839386439353436356264363863616235b1063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6866373338333839346538386334323162b206706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a6838363237653065643430373430393730b3065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863353830363663306264623464396537b4063e70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a73757370656e645f6d656d6265723a3a6866616665343765383366306564653932b5065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6831346538303361656533666439616162b606673c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a7472795f666f6c643a3a6832316461383965366161383535393933b706753c285475706c65456c656d656e74302c5475706c65456c656d656e743129206173206672616d655f737570706f72743a3a7472616974733a3a4f6e496e697469616c697a653c426c6f636b4e756d6265723e3e3a3a6f6e5f696e697469616c697a653a3a6830333761643364346366353234343365b8065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6863346639373934393861633137303563b9065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6834373166333530323666396361386231ba065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6837313634653061663836396463356234bb063970616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6862643838643265303762666533626239bc063b70616c6c65745f7375646f3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6866323765373566346433356638666136bd06643c70616c6c65745f7375646f3a3a5f5f476574427974655374727563744b65793c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6835666533643339363864366535653732be063e70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a6838626439623466356662663865626466bf064070616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a6831396166623964653934306131636366c0064970616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6833323064366162653830343462633962c10698013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6834346566393263616134313163623830c2069e013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a526f746174696f6e506572696f6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837353731653665353963383161313438c3069b013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a506572696f645370656e6444656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839616536316237323166633131323063c4069a013c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6178537472696b657344656661756c74427974654765747465723c542c493e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831626131666433373163303130343862c5063d70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6834316666376337643464373064633863c6063f70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6835623335363464653439663666616133c7064870616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a6831303639633234303865653738333566c80695013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4d6f64756c65496444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6839363964343463333261636534356236c9069a013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a54697046696e6465727346656544656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6863383661336631343061643137663666ca0698013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a5370656e64506572696f6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838343566613030653932383065336130cb0691013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a4275726e44656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6837313762333438363361383631316565cc0699013c70616c6c65745f74726561737572793a3a4d6f64756c653c543e3a3a6d6f64756c655f636f6e7374616e74735f6d657461646174613a3a50726f706f73616c426f6e6444656661756c74427974654765747465723c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6862373065636235383833306666313033cd06437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a6835383338386439623264613665653565ce0668636f72653a3a6f70733a3a66756e6374696f6e3a3a696d706c733a3a3c696d706c20636f72653a3a6f70733a3a66756e6374696f6e3a3a466e4d75743c413e20666f7220266d757420463e3a3a63616c6c5f6d75743a3a6837326264323932386338376534363531cf065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6833373163313531376437393539666637d0065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832323739653231343262613366333463d106493c6e6f64655f72756e74696d653a3a43616c6c20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a68333736613635376637383866316639642e31353034d2065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865653138306264333033636130313663d3065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866616135386431363235396463666462d4065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6866306235363637663762346264343139d5065c3c70616c6c65745f7375646f3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831376166616136333265626637393833d6063770616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a7075745f6269643a3a6831643330373763313363393765653438d706456672616d655f737570706f72743a3a7472616974733a3a456e737572654f726967696e3a3a656e737572655f6f726967696e3a3a6831663836393939653965313464616335d8063a70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e3a3a6164645f6d656d6265723a3a6861333839393863343961623430386131d906603c70616c6c65745f74726561737572793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864336431366161363130356134326138da06613c70616c6c65745f736f63696574793a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6864363964616136336130306665386264db063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6834653362623736613863613666363331dc066b3c73705f61726974686d657469633a3a66697865643132383a3a46697865643132382061732073705f61726974686d657469633a3a7472616974733a3a53617475726174696e673e3a3a73617475726174696e675f6d756c3a3a6831613530653032346332353132376262dd065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6832613534656366653262383037666630de06776672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a3c696d706c206672616d655f737570706f72743a3a73746f726167653a3a53746f726167654d61703c4b2c563e20666f7220473e3a3a696e736572743a3a6837346164333837356264353232303437df063d70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a7363686564756c655f6368616e67653a3a6866646636343030336636613135643862e0063c7061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a656e636f64653a3a6862616535666330343739363465313432e106683c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a73697a655f68696e743a3a6831396666356430383165346638376231e206633c636f72653a3a697465723a3a61646170746572733a3a4d61703c492c463e20617320636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723e3a3a6e6578743a3a6835383638636236336632353930666135e3063e636f72653a3a697465723a3a7472616974733a3a6974657261746f723a3a4974657261746f723a3a6e74683a3a6835326166653137346365323438663833e4063c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6832306435616365333761663234623235e5063e70616c6c65745f6772616e6470613a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6832396166353464643230343034646563e606703c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637443757272656e7453657449643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6838376431323432303135393731343235e7066b3c70616c6c65745f6772616e6470613a3a5f5f476574427974655374727563745374616c6c65643c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6831376438303138616533323166373233e806693c70616c6c65745f6772616e6470613a3a5f5f4765744279746553747275637453746174653c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6832363230386139336637396338633139e9063c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6863656665363931333838306262303962ea063e70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6830373865323861366264386533333737eb06703c70616c6c65745f73657373696f6e3a3a5f5f4765744279746553747275637443757272656e74496e6465783c543e206173206672616d655f6d657461646174613a3a44656661756c74427974653e3a3a64656661756c745f627974653a3a6865336438313432316530386163313232ec062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6839343863336665383135653764663132ed064770616c6c65745f636f6e7472616374733a3a7761736d3a3a707265706172653a3a436f6e74726163744d6f64756c653a3a6e65773a3a6861623435626538366235333337643233ee0648616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e3a3a696e736572743a3a6866623430333137376534626538373836ef063c7061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a66726f6d5f6d6f64756c653a3a6866333834373962663335336136613366f006537061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c654275696c6465723c463e3a3a7265736f6c76655f747970655f7265663a3a6834633266623438353162383736646366f106a9017061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a3c696d706c20636f72653a3a636f6e766572743a3a46726f6d3c7061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c6553636166666f6c643e20666f72207061726974795f7761736d3a3a656c656d656e74733a3a6d6f64756c653a3a4d6f64756c653e3a3a66726f6d3a3a6835306361373739666538313464623463f2062d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6834313530386166653865623432633038f306507061726974795f7761736d3a3a6275696c6465723a3a6d6f64756c653a3a4d6f64756c654275696c6465723c463e3a3a707573685f66756e6374696f6e3a3a6866363462363133383937383334613137f4062b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6833616534653964353339636535333539f5063c707761736d5f7574696c733a3a737461636b5f6865696768743a3a696e6a6563745f6c696d697465723a3a6839636130333231656531386331363338f6066b3c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6862313134326534323564636135643531f7065c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6865326666353434643965303731393036f8065f3c70616c6c65745f6772616e6470613a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6837663863363935396266643331333939f9065f3c70616c6c65745f73657373696f6e3a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6835373864323439636139613137316632fa063f70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a6832363535616164383839393866646332fb064170616c6c65745f617574686f72736869703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a6862366162333363643165613139343731fc0634636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6835363762363965366331393861366138fd062e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6862383736626461613861633862333565fe063c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6832393836656661313337343830313433ff0634636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a686138323232383231313635343238376680073f636f72653a3a736c6963653a3a736f72743a3a63686f6f73655f7069766f743a3a7b7b636c6f737572657d7d3a3a683738333761396232663631653834326481072e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a686362653437326364636564643931663782073c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6831643439353266326632616633653931830730636f72653a3a736c6963653a3a736f72743a3a73686966745f7461696c3a3a686562373833323164356566366339326284073b636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a7b7b636c6f737572657d7d3a3a6839663264373835626337393261303131850734636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a683566333032363664303130323665396486072e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a683263353261363266333433633333343987073c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a68373133646261306637393639363532668807623c70616c6c65745f617574686f72736869703a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a68616432623466393161303466386438658907753c70616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a43616c6c3c543e206173206672616d655f737570706f72743a3a7472616974733a3a47657443616c6c4e616d653e3a3a6765745f63616c6c5f6e616d65733a3a68323961313231653735316234333562318a075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68643034313164373637326466303531658b074a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a68383632383539636661633837343062328c075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68613735376630303463336164346130378d073d70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a63616c6c5f66756e6374696f6e733a3a68623832396330383263663265353362628e073f70616c6c65745f7265636f766572793a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a68303165333565646537383863616465628f074170616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a63616c6c5f66756e6374696f6e733a3a683464613663376338666466336334666290074370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a683033613166343366313736636537356691074370616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a73746f726167655f6d657461646174613a3a68663934633434326563663936303038619207437061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653a3a7573696e675f656e636f6465643a3a683536663833303332356336626564383693075170616c6c65745f72616e646f6d6e6573735f636f6c6c6563746976655f666c69703a3a4d6f64756c653c543e3a3a73746f726167655f6d657461646174613a3a683535303335613465326161353865656494074a3c58206173207061726974795f7363616c655f636f6465633a3a636f6465633a3a456e636f64653e3a3a7573696e675f656e636f6465643a3a683534323939643736623963323661616595075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a686263376264306561336335376635623796075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68626236373865393432336631613237339707706672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a646f75626c655f6d61703a3a53746f72616765446f75626c654d61703a3a73746f726167655f646f75626c655f6d61705f66696e616c5f6b65793a3a68613234653662393932343462623763629807603c70616c6c65745f7265636f766572793a3a4d6f64756c653c543e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a683533643035366435643235326332366399075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68623435343038346265653437316436649a075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68643535393733393936323038653838659b074470616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a66696e616c697a655f70726f706f73616c3a3a68616436343066333133306630313965359c075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68663838336661643664393038326338389d075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68356535616238393063626561343132399e075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a68626662363364353833396563376539619f074470616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e3a3a66696e616c697a655f70726f706f73616c3a3a6866643633623434313664643633303236a0075c6672616d655f737570706f72743a3a73746f726167653a3a67656e657261746f723a3a6d61703a3a53746f726167654d61703a3a73746f726167655f6d61705f66696e616c5f6b65793a3a6861663736336438386137366332316438a107643c70616c6c65745f636f6c6c6563746976653a3a4d6f64756c653c542c493e206173206672616d655f6d657461646174613a3a4d6f64756c654572726f724d657461646174613e3a3a6d657461646174613a3a6831343061333461373132356364386363a207683c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e697445787072206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6834633439393331653735616331303138a3076b3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6864356135626266333165343636323863a4077d3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a436f756e7465644c6973745772697465723c492c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6831666265366561303230383136373939a5076f3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a566172496e743332206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6862386538363632373939653530373036a6076f3c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a566172496e743634206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6831363563383135396232653962303266a7076c3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e697445787072206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6837303733363332303830643532303037a8076f3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6863656638303132636264353065663931a90737616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6865643330346464376366633233646363aa07443c7061726974795f7761736d3a3a696f3a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830363338666230393435646262316335ab07793c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a436f756e7465644c6973743c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6862363633343636326632653739666337ac076b3c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6833326532316261643239303066363766ad0786017061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a3c696d706c207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a6520666f7220616c6c6f633a3a737472696e673a3a537472696e673e3a3a646573657269616c697a653a3a6863353961393931616461356430623731ae07323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834666334636132316331623933643033af07783c7061726974795f7761736d3a3a656c656d656e74733a3a696d706f72745f656e7472793a3a526573697a61626c654c696d697473206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6832643663653261356166653563383933b0077c3c7061726974795f7761736d3a3a656c656d656e74733a3a696d706f72745f656e7472793a3a526573697a61626c654c696d697473206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6838626232643362346332336531633565b1076f3c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6837663765346430383832396631323139b207463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6833376132336136316462616631363131b307463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6863643738643132376462383834626331b407463c616c6c6f633a3a7665633a3a5665633c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6834663939323932346130383535613964b5074f7761736d695f76616c69646174696f6e3a3a636f6e746578743a3a4d6f64756c65436f6e746578744275696c6465723a3a707573685f676c6f62616c3a3a6862636338656463363736323264336163b607587761736d695f76616c69646174696f6e3a3a636f6e746578743a3a4d6f64756c65436f6e746578744275696c6465723a3a707573685f66756e635f747970655f696e6465783a3a6861356466303736306130303135376138b707397761736d695f76616c69646174696f6e3a3a76616c69646174655f6d656d6f72795f747970653a3a6831383633306138366563393738353763b807347761736d695f76616c69646174696f6e3a3a657870725f636f6e73745f747970653a3a6833613736663931623637613733323066b907553c7061726974795f7761736d3a3a656c656d656e74733a3a74797065733a3a56616c75655479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861643864386337663861313638323138ba0737616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6839613162383130373666393532313831bb074a7761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a737465703a3a6837376339326138323465313365383937bc07473c7761736d695f76616c69646174696f6e3a3a4572726f7220617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6864656161653436366361623262613537bd07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830613238336532663738663661326566be072d636f72653a3a736c6963653a3a736f72743a3a726563757273653a3a6831363439613438666466323361333234bf07457061726974795f7761736d3a3a656c656d656e74733a3a7365676d656e743a3a446174615365676d656e743a3a76616c75653a3a6866626639333864636633313437393639c007743c7061726974795f7761736d3a3a656c656d656e74733a3a7072696d6974697665733a3a56617255696e743332206173207061726974795f7761736d3a3a656c656d656e74733a3a446573657269616c697a653e3a3a646573657269616c697a653a3a6833623230373765376464326631363864c107713c7061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a437573746f6d53656374696f6e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6864663763623061633039343731666132c207713c7061726974795f7761736d3a3a656c656d656e74733a3a696e6465785f6d61703a3a496e6465784d61703c543e206173207061726974795f7761736d3a3a656c656d656e74733a3a53657269616c697a653e3a3a73657269616c697a653a3a6864666232373762626563613239623830c3074b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6865633837386535616238626531386461c4074b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6865656338373534646334383636656137c5074b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6839313737336537633930356339383138c6074b3c616c6c6f633a3a7665633a3a496e746f497465723c543e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6833333565616231613531386161623564c707457061726974795f7761736d3a3a656c656d656e74733a3a73656374696f6e3a3a53656374696f6e5265616465723a3a6e65773a3a6832623264323232373937343937323061c80734636f72653a3a736c6963653a3a736f72743a3a627265616b5f7061747465726e733a3a6836343538633738383030373433303233c9072e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6831306338313934323835623434626230ca073c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6864613432613230353866666131383664cb073b636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a7b7b636c6f737572657d7d3a3a6835383437313839323762303531653533cc07513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6832663135653939656239653139333630cd07553c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6832303532316635393734663134313935ce07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863383639356162343734343836336363cf07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864613136343061353937346565313763d007303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6830353832373464653465663439383937d107303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6865396662333236613732333063383332d207553c7061726974795f7761736d3a3a656c656d656e74733a3a74797065733a3a426c6f636b5479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837323362653966316562343863383163d307303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835366339366664633833326565393861d407303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835666561393361383663313330373437d507303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6866636266616465653635666130653233d607483c616c6c6f633a3a626f7865643a3a426f783c5b545d3e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6863633537623165633463306466373734d707593c7061726974795f7761736d3a3a656c656d656e74733a3a6f70733a3a496e737472756374696f6e20617320636f72653a3a636c6f6e653a3a436c6f6e653e3a3a636c6f6e653a3a6831323935353262336336633161383561d807303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6863373464613163386662353263386639d9072e636f72653a3a736c6963653a3a736f72743a3a68656170736f72743a3a6863663136636133313038386537343636da073c636f72653a3a736c6963653a3a736f72743a3a7061727469616c5f696e73657274696f6e5f736f72743a3a6831313032373164326234386463616666db0741707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a636f6d707574653a3a6837656330646464396561363763366134dc075a3c707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a4672616d6520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6831643937376433336462393035613166dd0746707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a537461636b3a3a6672616d653a3a6831636263656662616631333631356230de07453c636f72653a3a6f7074696f6e3a3a4f7074696f6e3c543e20617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6864626634366461626130636234616438df074b707761736d5f7574696c733a3a737461636b5f6865696768743a3a6d61785f6865696768743a3a537461636b3a3a706f705f76616c7565733a3a6863356261643934666164326137633337e0073f707761736d5f7574696c733a3a737461636b5f6865696768743a3a7265736f6c76655f66756e635f747970653a3a6835623034396663666265376561646530e107613c616c6c6f633a3a636f6c6c656374696f6e733a3a62747265653a3a6d61703a3a42547265654d61703c4b2c563e20617320636f72653a3a6f70733a3a64726f703a3a44726f703e3a3a64726f703a3a6835373163636462353465633063306339e207303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6834373738326234376365343162386331e30733636f72653a3a6f7074696f6e3a3a4f7074696f6e3c26543e3a3a636c6f6e65643a3a6833623861386631386663366664343632e40740707761736d5f7574696c733a3a737461636b5f6865696768743a3a636f6d707574655f737461636b5f636f73743a3a6861323533626530386134336531623837e507323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6837613135656265343936356665396133e6073a73705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6c73747269703a3a6836646436653963623432323733363663e7073773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6164643a3a6830316434306537663531376362383139e8073773705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6d756c3a3a6866643130333939633138306330393161e9074473705f61726974686d657469633a3a62696775696e743a3a42696755696e743a3a6469763a3a7b7b636c6f737572657d7d3a3a6866383462626664386539613033646631ea074b3c73705f61726974686d657469633a3a62696775696e743a3a42696755696e7420617320636f72653a3a636d703a3a4f72643e3a3a636d703a3a6834343461643533633863373732383630eb07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6837333938323135383866653231386330ec07513c616c6c6f633a3a7665633a3a5665633c543e20617320616c6c6f633a3a7665633a3a53706563457874656e643c542c493e3e3a3a66726f6d5f697465723a3a6861616431376235343262386136333034ed07413c73705f696e686572656e74733a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6866646363643030363831623962623332ee07323c265420617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a6834386262343837633064373131326537ef074273705f696f3a3a6c6f6767696e673a3a65787465726e5f686f73745f66756e6374696f6e5f696d706c733a3a6c6f673a3a6866343962313237633262386461396133f007573c73705f72756e74696d653a3a72756e74696d655f737472696e673a3a52756e74696d65537472696e6720617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839343732383631363335666331333066f107473c73705f72756e74696d653a3a44697370617463684572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6839393631343466363366333061303337f207347761736d695f76616c69646174696f6e3a3a66756e633a3a706f705f76616c75653a3a6838613630623536373166386263396664f307347761736d695f76616c69646174696f6e3a3a66756e633a3a706f705f6c6162656c3a3a6865333162373732616530303563363736f407347761736d695f76616c69646174696f6e3a3a66756e633a3a7465655f76616c75653a3a6837646138326332343962306562633331f507407761736d695f76616c69646174696f6e3a3a7574696c3a3a4c6f63616c733a3a747970655f6f665f6c6f63616c3a3a6838636138323766646134356339313330f607543c7761736d695f76616c69646174696f6e3a3a66756e633a3a537461636b56616c75655479706520617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6835353532326133316636303964363937f707537761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f6c6f61643a3a6830376132393432636464306365343338f807547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f73746f72653a3a6831323764353062613862376333643439f907547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f72656c6f703a3a6861343966626334643365306136373739fa07547761736d695f76616c69646174696f6e3a3a66756e633a3a46756e6374696f6e56616c69646174696f6e436f6e746578743a3a76616c69646174655f62696e6f703a3a6838656230653936636235643135343234fb073b616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a616c6c6f636174655f696e3a3a6831363031666261373561616639383461fc0737616c6c6f633a3a7261775f7665633a3a5261775665633c542c413e3a3a726573657276653a3a6830313230663136306336333962303561fd073b636f72653a3a736c6963653a3a3c696d706c205b545d3e3a3a636f70795f66726f6d5f736c6963653a3a6862656366363865633237636235336665fe072b636f72653a3a7074723a3a64726f705f696e5f706c6163653a3a6861626461346364333962343639396563ff07303c265420617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a68323235343564613034363464666239398008453c616c6c6f633a3a737472696e673a3a537472696e6720617320636f72653a3a666d743a3a446973706c61793e3a3a666d743a3a683430363536353032386339373630633381084c3c7761736d695f76616c69646174696f6e3a3a737461636b3a3a4572726f7220617320636f72653a3a666d743a3a44656275673e3a3a666d743a3a6861313263303261643833303862306162820838636f6d70696c65725f6275696c74696e733a3a696e743a3a6d756c3a3a5f5f6d756c7469333a3a6839373632626331636361303166383364830839636f6d70696c65725f6275696c74696e733a3a696e743a3a6d756c3a3a5f5f6d756c6f7469343a3a68323735656632666138626166616237318408085f5f6d756c7469338508095f5f6d756c6f7469348608095f5f756d6f6474693387082b636f6d70696c65725f6275696c74696e733a3a61626f72743a3a6837373662356362633663393964313163880839636f6d70696c65725f6275696c74696e733a3a696e743a3a736469763a3a5f5f6469767469333a3a68353431303861623133616630373236328908463c69363420617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a66726f6d5f756e7369676e65643a3a68623233353336366166363766393733388a08453c75363420617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a61626f7274696e675f6469763a3a68353339326136663336363336656339308b08453c75363420617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a61626f7274696e675f72656d3a3a68636165613162386434353561363334398c08453c69363420617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a7772617070696e675f6164643a3a68356438303838653933313037343366398d08453c69363420617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a7772617070696e675f6d756c3a3a68616366346631393365666533333565668e08473c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a66726f6d5f756e7369676e65643a3a68396361396438643435306530333130398f08463c7531323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a61626f7274696e675f6469763a3a68646461633866376335323365633534389008433c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a6d61785f76616c75653a3a68313965366462646366643839343564339108433c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a6d696e5f76616c75653a3a68396138626366656461353838656165339208463c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a7772617070696e675f6d756c3a3a68663762643232353766633537633430369308463c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a7772617070696e675f7375623a3a68323165393061666464326361353338329408463c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a496e743e3a3a61626f7274696e675f6469763a3a68313361346530633765653064303163399508423c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a4c61726765496e743e3a3a6c6f773a3a68633539396133336534633865356161339608433c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a4c61726765496e743e3a3a686967683a3a68666365633135386664353336366161629708493c6931323820617320636f6d70696c65725f6275696c74696e733a3a696e743a3a4c61726765496e743e3a3a66726f6d5f70617274733a3a68646135326234366661633734663438379808095f5f7564697674693399083a636f6d70696c65725f6275696c74696e733a3a696e743a3a756469763a3a5f5f756469767469333a3a68316538396139356663646439323031339a083d636f6d70696c65725f6275696c74696e733a3a696e743a3a756469763a3a5f5f756469766d6f647469343a3a68633262343431643430303733343161669b083a636f6d70696c65725f6275696c74696e733a3a696e743a3a756469763a3a5f5f756d6f647469333a3a68653963366462306266373836386263319c08085f5f6469767469339d08066d656d6370799e08076d656d6d6f76659f08066d656d736574a0080462636d70a1083b636f6d70696c65725f6275696c74696e733a3a696e743a3a73686966743a3a5f5f6173686c7469333a3a6838656231636163626365343565313733a2083b636f6d70696c65725f6275696c74696e733a3a696e743a3a73686966743a3a5f5f6c7368727469333a3a6861613765666137333665663233346637a308095f5f6173686c746933a408095f5f6c73687274693300550970726f64756365727302086c616e6775616765010452757374000c70726f6365737365642d62790105727573746325312e34352e302d6e696768746c79202866613531663831306520323032302d30342d323929", + "0x5f3e4907f716ac89b6347d15ececedcaa141c4fe67c2d11f4a10c6aca7a79a04b4def25cfda6ef3a00000000": "0xd8ff03bfc91b8e000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d49dd691c4fe7bf66772616e803919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195081918b9c078ba64f696d6f6e8000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x7932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f05c8ba6ac2a99ca6175646980482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc47bd1e6299d2e71c4c848a957ae243d7b9e42241d7cd91d001773b0b616d523dd80e13c6c2cab860b1234ef1b9ffc1526": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d650f0000c16ff286230f0000c16ff286230000", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195090ae3b675fd0a89f6175646980482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc469a5ec1b3cb6032ce536e31d5679de28c8dc79e36b29395413399edaec3e20fcca7205fb19776ed8ddb25d6f427ec40e": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde780f0000c16ff286230f0000c16ff286230000", + "0xe2e62dd81c48a88f73b6f6463555fd8e71cd3068e6118bfb392b798317f63a89d28ebd9aad2de6179ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809": "0x0000c16ff28623000000000000000000049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0x5f3e4907f716ac89b6347d15ececedcae1791577e4efcb083fdc3cb21e85b2e4": "0x00", "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c11874611da6d1f761ddf9bdb4c9d6e5303ebd41f61858d0a5647a1a7bfe089bf921be9": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0x5f3e4907f716ac89b6347d15ececedcaad811cd65a470ddc5f1d628ff055098211da6d1f761ddf9bdb4c9d6e5303ebd41f61858d0a5647a1a7bfe089bf921be9": "0x00000000", + "0xe2e62dd81c48a88f73b6f6463555fd8eba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e3180973474718090000c16ff28623000000000000000000", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x106e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f910600299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade987441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x00", + "0x2371e21684d2fae99bcb4d579242f74a8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b2a4e124620611833d1b252494468c2a68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950606e9687c0a4d75f696d6f6e80482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", + "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0xd503106e6f6465", + "0x5f3e4907f716ac89b6347d15ececedcaea07de2b8f010516dca3f7ef52f7ac5a": "0x040000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195003e77b7332307fb461756469806e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195050b3bd0c839f9eac6772616e807932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x109c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d6568655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x781ead1e2fa9ccb74b44c19d29cb2a7a4b5be3972927ae98cd3877523976a276", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a8d6d78917f3d243ed0a3d1dfb3878099c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x0ff6ffc06ff286230ff6ffc06ff2862300", "0x5f3e4907f716ac89b6347d15ececedcab49a2738eeb30896aacb8b3fb46471bd": "0x04000000", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x10f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d6568655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde789c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", - "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a0000000079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc401278c742b3436b1fdc6f422f6166f4cf5078209e15c31f4947506f71744409a": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d650f0000c16ff286230f0000c16ff286230000", + "0x5f3e4907f716ac89b6347d15ececedca308ce9615de0775a82f8a94dc3d285a1": "0x02", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x106e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106010000000000000000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f43780100000000000000482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a0100000000000000482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e0100000000000000", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x9ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe70c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0xc8dc79e36b29395413399edaec3e20fcca7205fb19776ed8ddb25d6f427ec40e", + "0x3a6772616e6470615f617574686f726974696573": "0x01109becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe969933201000000000000003919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef01000000000000005633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce44001000000000000007932cff431e748892fa48e10c63c17d30f80ca42e4de3921e641249cd7fa3c2f0100000000000000", + "0x5f3e4907f716ac89b6347d15ececedca682db92dde20a10d96d00ff0e9e221c0b4def25cfda6ef3a0000000054352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195088c3e18f0a370f936772616e809becad03e6dcac03cee07edebca5475314861492cdfc96a2144a67bbe9699332": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", + "0x5f3e4907f716ac89b6347d15ececedca422adb579f1dbf4f3886c5cfa3bb8cc49c1d737e05234a5ad3f96cf385e1f17b781ead1e2fa9ccb74b44c19d29cb2a7a4b5be3972927ae98cd3877523976a276": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d120f0000c16ff286230f0000c16ff286230000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95018afb0daf0c8654bf248b8e9f3ca3cf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x00000000030000c16ff28623000000000000000000000000000000000000000000000000000000c16ff286230000000000000000000000c16ff28623000000000000000000", + "0x5f3e4907f716ac89b6347d15ececedca3ed14b45ed20d054f05e37e2542cfe7079091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x9e42241d7cd91d001773b0b616d523dd80e13c6c2cab860b1234ef1b9ffc1526", "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a00000000c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x0ff6ffc06ff286230ff6ffc06ff2862300", - "0x5f3e4907f716ac89b6347d15ececedca0b6a45321efae92aea15e0740ec7afe7": "0x00000000", - "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98e54094c2d5af8ae10b91e1288f4f59f2946d7738f2c509b7effd909e5e9ba0ad": "0x00" + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e1690354352b71083d945a9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x00", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0x426e15054d267946093858132eb537f1a47a9ff5cd5bf4d848a80a0b1a947dc3": "0x00000000000000000000000000000000", + "0x8985776095addd4789fccbce8ca77b23ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc65018afb0daf0c8654bf248b8e9f3ca3cf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x047374616b696e67200000c16ff2862300000000000000000002", + "0x426e15054d267946093858132eb537f1ba7fb8745735dc3be2a2c61a72c39e78": "0x049ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6b2a4e124620611833d1b252494468c2a68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x047374616b696e67200000c16ff2862300000000000000000002", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb37441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x3919132b851ef0fd2dae42a7e734fe547af5a6b809006100f48944d7fae8e8ef00299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f437800299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6bed2903186223711a06d85784e730efd547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x047374616b696e67200000c16ff2862300000000000000000002", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950279056c0dd3fd147696d6f6e806e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", + "0x5f3e4907f716ac89b6347d15ececedca88dcde934c658227ee1dfafcd6e16903c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade9879091c57296b2634547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a7c05e469443baab617564698000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", + "0x5f3e4907f716ac89b6347d15ececedca42982b9d6c7acc99faa9094c912372c2b4def25cfda6ef3a000000007441588f5c9a91b3f26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0x426e15054d267946093858132eb537f1d0b4a3f7631f0c0e761898fe198211de": "0xe7030000", + "0x5f3e4907f716ac89b6347d15ececedca9220e172bed316605f73f1ff7b4ade98c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x00", + "0x5f3e4907f716ac89b6347d15ececedca487df464e44a534ba6b0cbb32407b587": "0x0000000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6a8d6d78917f3d243ed0a3d1dfb3878099c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12": "0x047374616b696e67200000c16ff2862300000000000000000002", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a831cc69a96025a90c389ecb19a25ff29ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809": "0x000000000100405f2954c5c535360000000000000000c040b571e8030000000000000000000000c16ff2862300000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195018823a93d5cac7d062616265806e7e4eb42cbd2e0ab4cae8708ce5509580b8c04d11f6758dbf686d50fe9f9106": "0x9c7a2ee14e565db0c69f78c7b4cd839fbf52b607d867e9e9c5a79042898a0d12", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195082216e38506cc6f7626162658000299981a2b92f878baaf5dbeba5c18d4e70f2a1fcd9c61b32ea18daf38f4378": "0xf26cdb14b5aec7b2789fd5ca80f979cef3761897ae1f37ffb3e154cbcc1c2663", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000": "0x000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x5f3e4907f716ac89b6347d15ececedca8bde0a0ea8864605e3b68ed9cb2da01bb4def25cfda6ef3a00000000c90f9b6dd26886b468655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78": "0x0ff6ffc06ff286230ff6ffc06ff2862300", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950414ee903f38cbde66772616e805633b70b80a6c8bb16270f82cca6d56b27ed7b76c8fd5af2986a25a4788ce440": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195057479bdad16c7a386261626580482dbd7297a39fa145c570552249c2ca9dd47e281f0c500c971b59c9dcdcd82e": "0x68655684472b743e456907b398d3a44c113f189e56d1bbfd55e889e295dfde78", + "0xf2794c22e353e9a839f12faab03a911be2f6cb0456905c189bcb0458f9440f13": "0x00000000", + "0x5f3e4907f716ac89b6347d15ececedca28dccb559b95c40168a1b2696581b5a7": "0x00000000000000000000000000000000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f218f26c73add634897550b4003b26bc6a831cc69a96025a90c389ecb19a25ff29ee5e5bdc0ec239eb164f865ecc345ce4c88e76ee002e0f7e318097347471809": "0x04706872656c6563740000c16ff2862300000000000000000001", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950dd81945454d561f36261626580482a3389a6cf42d8ed83888cfd920fec738ea30f97e44699ada7323f08c3380a": "0x547ff0ab649283a7ae01dbc2eb73932eba2fb09075e9485ff369082a2ff38d65" }, "childrenDefault": {} } diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index d256d116d38..b821eae2df5 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -83,7 +83,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 244, + spec_version: 245, impl_version: 3, apis: RUNTIME_API_VERSIONS, transaction_version: 1, -- GitLab From 303941324a74645a3c1fab859d9a7e1bda95bedd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 4 May 2020 19:40:29 +0200 Subject: [PATCH 127/167] Expose that `BasicQueue` expects blocking spawn (#5860) * Expose that `BasicQueue` expects blocking spawn Up to now `BasicQueue` expected a closure that to spawn a `Future`. This was expected to be a closure that spawns a blocking future. However, this wasn't documented anywhere. This pr introduces a new trait `SpawnBlocking` that exposes this requirement to the outside. * Feedback --- Cargo.lock | 1 + bin/node-template/node/src/service.rs | 17 +++++++------ bin/node/cli/src/service.rs | 14 +++++------ client/consensus/aura/src/lib.rs | 9 +++---- client/consensus/babe/src/lib.rs | 4 ++-- client/consensus/manual-seal/Cargo.toml | 1 + client/consensus/manual-seal/src/lib.rs | 4 ++-- client/consensus/pow/src/lib.rs | 7 +++--- client/network/src/service/tests.rs | 5 +--- client/network/test/src/block_import.rs | 11 ++++++--- client/network/test/src/lib.rs | 10 ++------ client/service/src/task_manager.rs | 17 ++++++++++--- .../common/src/import_queue/basic_queue.rs | 6 ++--- primitives/core/src/testing.rs | 24 +++++++++++++++++++ primitives/core/src/traits.rs | 8 +++++++ 15 files changed, 90 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index abfa181abf4..5764942a0d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6205,6 +6205,7 @@ dependencies = [ "serde", "sp-blockchain", "sp-consensus", + "sp-core", "sp-inherents", "sp-runtime", "sp-transaction-pool", diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index 51ebdbe1c1f..a52406b5f52 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -27,7 +27,7 @@ macro_rules! new_full_start { ($config:expr) => {{ use std::sync::Arc; use sp_consensus_aura::sr25519::AuthorityPair as AuraPair; - + let mut import_setup = None; let inherent_data_providers = sp_inherents::InherentDataProviders::new(); @@ -45,15 +45,16 @@ macro_rules! new_full_start { let select_chain = select_chain.take() .ok_or_else(|| sc_service::Error::SelectChainRequired)?; - let (grandpa_block_import, grandpa_link) = - sc_finality_grandpa::block_import(client.clone(), &(client.clone() as Arc<_>), select_chain)?; + let (grandpa_block_import, grandpa_link) = sc_finality_grandpa::block_import( + client.clone(), + &(client.clone() as Arc<_>), + select_chain, + )?; let aura_block_import = sc_consensus_aura::AuraBlockImport::<_, _, _, AuraPair>::new( grandpa_block_import.clone(), client.clone(), ); - let spawner = |future| spawn_task_handle.spawn_blocking("import-queue-worker", future); - let import_queue = sc_consensus_aura::import_queue::<_, _, _, AuraPair, _>( sc_consensus_aura::slot_duration(&*client)?, aura_block_import, @@ -61,7 +62,7 @@ macro_rules! new_full_start { None, client, inherent_data_providers.clone(), - spawner, + spawn_task_handle, )?; import_setup = Some((grandpa_block_import, grandpa_link)); @@ -208,8 +209,6 @@ pub fn new_light(config: Configuration) -> Result( sc_consensus_aura::slot_duration(&*client)?, grandpa_block_import, @@ -217,7 +216,7 @@ pub fn new_light(config: Configuration) -> Result BlockImport for AuraBlockImport( +pub fn import_queue( slot_duration: SlotDuration, block_import: I, justification_import: Option>, finality_proof_import: Option>, client: Arc, inherent_data_providers: InherentDataProviders, - spawner: F, + spawner: &S, ) -> Result>, sp_consensus::Error> where B: BlockT, C::Api: BlockBuilderApi + AuraApi> + ApiExt, @@ -805,7 +805,7 @@ pub fn import_queue( P: Pair + Send + Sync + 'static, P::Public: Clone + Eq + Send + Sync + Hash + Debug + Encode + Decode, P::Signature: Encode + Decode, - F: Fn(BoxFuture<'static, ()>) -> (), + S: sp_core::traits::SpawnBlocking, { register_aura_inherent_data_provider(&inherent_data_providers, slot_duration.get())?; initialize_authorities_cache(&*client)?; @@ -815,6 +815,7 @@ pub fn import_queue( inherent_data_providers, phantom: PhantomData, }; + Ok(BasicQueue::new( verifier, Box::new(block_import), diff --git a/client/consensus/babe/src/lib.rs b/client/consensus/babe/src/lib.rs index 4f8975d101d..678a33cbcc7 100644 --- a/client/consensus/babe/src/lib.rs +++ b/client/consensus/babe/src/lib.rs @@ -107,7 +107,7 @@ use sc_client_api::{ }; use sp_block_builder::BlockBuilder as BlockBuilderApi; -use futures::{prelude::*, future::BoxFuture}; +use futures::prelude::*; use log::{debug, info, log, trace, warn}; use sc_consensus_slots::{ SlotWorker, SlotInfo, SlotCompatible, StorageChanges, CheckedHeader, check_equivocation, @@ -1272,7 +1272,7 @@ pub fn import_queue( finality_proof_import: Option>, client: Arc, inherent_data_providers: InherentDataProviders, - spawner: impl Fn(BoxFuture<'static, ()>) -> (), + spawner: &impl sp_core::traits::SpawnBlocking, ) -> ClientResult>> where Inner: BlockImport> + Send + Sync + 'static, diff --git a/client/consensus/manual-seal/Cargo.toml b/client/consensus/manual-seal/Cargo.toml index 807c370edf3..b0a3c2bd72b 100644 --- a/client/consensus/manual-seal/Cargo.toml +++ b/client/consensus/manual-seal/Cargo.toml @@ -28,6 +28,7 @@ sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-dev sp-consensus = { package = "sp-consensus", path = "../../../primitives/consensus/common" , version = "0.8.0-dev"} sp-inherents = { path = "../../../primitives/inherents" , version = "2.0.0-dev"} sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-dev"} +sp-core = { path = "../../../primitives/core" , version = "2.0.0-dev"} sp-transaction-pool = { path = "../../../primitives/transaction-pool" , version = "2.0.0-dev"} [dev-dependencies] diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index b2020acb1f7..fefd3aa2d79 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -17,7 +17,7 @@ //! A manual sealing engine: the engine listens for rpc calls to seal blocks and create forks. //! This is suitable for a testing environment. -use futures::{prelude::*, future::BoxFuture}; +use futures::prelude::*; use sp_consensus::{ Environment, Proposer, ForkChoiceStrategy, BlockImportParams, BlockOrigin, SelectChain, import_queue::{BasicQueue, CacheKeyId, Verifier, BoxBlockImport}, @@ -68,7 +68,7 @@ impl Verifier for ManualSealVerifier { /// Instantiate the import queue for the manual seal consensus engine. pub fn import_queue( block_import: BoxBlockImport>, - spawner: impl Fn(BoxFuture<'static, ()>) -> () + spawner: &impl sp_core::traits::SpawnBlocking, ) -> BasicQueue> where Block: BlockT, diff --git a/client/consensus/pow/src/lib.rs b/client/consensus/pow/src/lib.rs index 5d504d8ffc0..8d17071f4c1 100644 --- a/client/consensus/pow/src/lib.rs +++ b/client/consensus/pow/src/lib.rs @@ -49,12 +49,13 @@ use sp_consensus::{ SelectChain, Error as ConsensusError, CanAuthorWith, RecordProof, BlockImport, BlockCheckParams, ImportResult, }; -use sp_consensus::import_queue::{BoxBlockImport, BasicQueue, Verifier, BoxJustificationImport, BoxFinalityProofImport}; +use sp_consensus::import_queue::{ + BoxBlockImport, BasicQueue, Verifier, BoxJustificationImport, BoxFinalityProofImport, +}; use codec::{Encode, Decode}; use sc_client_api; use log::*; use sp_timestamp::{InherentError as TIError, TimestampInherentData}; -use futures::future::BoxFuture; #[derive(derive_more::Display, Debug)] pub enum Error { @@ -462,7 +463,7 @@ pub fn import_queue( finality_proof_import: Option>, algorithm: Algorithm, inherent_data_providers: InherentDataProviders, - spawner: impl Fn(BoxFuture<'static, ()>) -> (), + spawner: &impl sp_core::traits::SpawnBlocking, ) -> Result< PowImportQueue, sp_consensus::Error diff --git a/client/network/src/service/tests.rs b/client/network/src/service/tests.rs index 6c38d1d8746..3bed660851b 100644 --- a/client/network/src/service/tests.rs +++ b/client/network/src/service/tests.rs @@ -80,15 +80,12 @@ fn build_test_full_node(config: config::NetworkConfiguration) } } - let threads_pool = futures::executor::ThreadPool::new().unwrap(); - let spawner = |future| threads_pool.spawn_ok(future); - let import_queue = Box::new(sp_consensus::import_queue::BasicQueue::new( PassThroughVerifier(false), Box::new(client.clone()), None, None, - spawner, + &sp_core::testing::SpawnBlockingExecutor::new(), )); let worker = NetworkWorker::new(config::Params { diff --git a/client/network/test/src/block_import.rs b/client/network/test/src/block_import.rs index 5f152fa1322..a77dec629b2 100644 --- a/client/network/test/src/block_import.rs +++ b/client/network/test/src/block_import.rs @@ -81,13 +81,18 @@ fn import_single_good_block_without_header_fails() { #[test] fn async_import_queue_drops() { + let executor = sp_core::testing::SpawnBlockingExecutor::new(); // Perform this test multiple times since it exhibits non-deterministic behavior. for _ in 0..100 { let verifier = PassThroughVerifier(true); - let threads_pool = futures::executor::ThreadPool::new().unwrap(); - let spawner = |future| threads_pool.spawn_ok(future); - let queue = BasicQueue::new(verifier, Box::new(substrate_test_runtime_client::new()), None, None, spawner); + let queue = BasicQueue::new( + verifier, + Box::new(substrate_test_runtime_client::new()), + None, + None, + &executor, + ); drop(queue); } } diff --git a/client/network/test/src/lib.rs b/client/network/test/src/lib.rs index 9c2c4e3bfdf..999c99f64a1 100644 --- a/client/network/test/src/lib.rs +++ b/client/network/test/src/lib.rs @@ -606,15 +606,12 @@ pub trait TestNetFactory: Sized { ); let verifier = VerifierAdapter::new(Arc::new(Mutex::new(Box::new(verifier) as Box<_>))); - let threads_pool = futures::executor::ThreadPool::new().unwrap(); - let spawner = |future| threads_pool.spawn_ok(future); - let import_queue = Box::new(BasicQueue::new( verifier.clone(), Box::new(block_import.clone()), justification_import, finality_proof_import, - spawner, + &sp_core::testing::SpawnBlockingExecutor::new(), )); let listen_addr = build_multiaddr![Memory(rand::random::())]; @@ -687,15 +684,12 @@ pub trait TestNetFactory: Sized { ); let verifier = VerifierAdapter::new(Arc::new(Mutex::new(Box::new(verifier) as Box<_>))); - let threads_pool = futures::executor::ThreadPool::new().unwrap(); - let spawner = |future| threads_pool.spawn_ok(future); - let import_queue = Box::new(BasicQueue::new( verifier.clone(), Box::new(block_import.clone()), justification_import, finality_proof_import, - spawner, + &sp_core::testing::SpawnBlockingExecutor::new(), )); let listen_addr = build_multiaddr![Memory(rand::random::())]; diff --git a/client/service/src/task_manager.rs b/client/service/src/task_manager.rs index e0db4c500ae..553ca9c326d 100644 --- a/client/service/src/task_manager.rs +++ b/client/service/src/task_manager.rs @@ -15,10 +15,10 @@ use std::{panic, pin::Pin, result::Result, sync::Arc}; use exit_future::Signal; -use log::{debug}; +use log::debug; use futures::{ Future, FutureExt, - future::{select, Either}, + future::{select, Either, BoxFuture}, compat::*, task::{Spawn, FutureObj, SpawnError}, }; @@ -62,7 +62,12 @@ impl SpawnTaskHandle { } /// Helper function that implements the spawning logic. See `spawn` and `spawn_blocking`. - fn spawn_inner(&self, name: &'static str, task: impl Future + Send + 'static, task_type: TaskType) { + fn spawn_inner( + &self, + name: &'static str, + task: impl Future + Send + 'static, + task_type: TaskType, + ) { let on_exit = self.on_exit.clone(); let metrics = self.metrics.clone(); @@ -119,6 +124,12 @@ impl Spawn for SpawnTaskHandle { } } +impl sp_core::traits::SpawnBlocking for SpawnTaskHandle { + fn spawn_blocking(&self, name: &'static str, future: BoxFuture<'static, ()>) { + self.spawn_blocking(name, future); + } +} + impl sc_client_api::CloneableSpawn for SpawnTaskHandle { fn clone(&self) -> Box { Box::new(Clone::clone(self)) diff --git a/primitives/consensus/common/src/import_queue/basic_queue.rs b/primitives/consensus/common/src/import_queue/basic_queue.rs index f39097ef3b3..f2b830e890e 100644 --- a/primitives/consensus/common/src/import_queue/basic_queue.rs +++ b/primitives/consensus/common/src/import_queue/basic_queue.rs @@ -15,7 +15,7 @@ // along with Substrate. If not, see . use std::{mem, pin::Pin, time::Duration, marker::PhantomData}; -use futures::{prelude::*, task::Context, task::Poll, future::BoxFuture}; +use futures::{prelude::*, task::Context, task::Poll}; use futures_timer::Delay; use sp_runtime::{Justification, traits::{Block as BlockT, Header as HeaderT, NumberFor}}; use sp_utils::mpsc::{TracingUnboundedSender, tracing_unbounded}; @@ -56,7 +56,7 @@ impl BasicQueue { block_import: BoxBlockImport, justification_import: Option>, finality_proof_import: Option>, - spawner: impl Fn(BoxFuture<'static, ()>) -> (), + spawner: &impl sp_core::traits::SpawnBlocking, ) -> Self { let (result_sender, result_port) = buffered_link::buffered_link(); let (future, worker_sender) = BlockImportWorker::new( @@ -67,7 +67,7 @@ impl BasicQueue { finality_proof_import, ); - spawner(future.boxed()); + spawner.spawn_blocking("basic-block-import-worker", future.boxed()); Self { sender: worker_sender, diff --git a/primitives/core/src/testing.rs b/primitives/core/src/testing.rs index 9e83090bcff..c2238111244 100644 --- a/primitives/core/src/testing.rs +++ b/primitives/core/src/testing.rs @@ -290,6 +290,30 @@ macro_rules! wasm_export_functions { }; } +/// An executor that supports spawning blocking futures in tests. +/// +/// Internally this just wraps a `ThreadPool` with a pool size of `8`. This +/// should ensure that we have enough threads in tests for spawning blocking futures. +#[cfg(feature = "std")] +#[derive(Clone)] +pub struct SpawnBlockingExecutor(futures::executor::ThreadPool); + +#[cfg(feature = "std")] +impl SpawnBlockingExecutor { + /// Create a new instance of `Self`. + pub fn new() -> Self { + let mut builder = futures::executor::ThreadPoolBuilder::new(); + Self(builder.pool_size(8).create().expect("Failed to create thread pool")) + } +} + +#[cfg(feature = "std")] +impl crate::traits::SpawnBlocking for SpawnBlockingExecutor { + fn spawn_blocking(&self, _: &'static str, future: futures::future::BoxFuture<'static, ()>) { + self.0.spawn_ok(future); + } +} + #[cfg(test)] mod tests { use super::*; diff --git a/primitives/core/src/traits.rs b/primitives/core/src/traits.rs index 1724f5e9877..cca1a8fa8cc 100644 --- a/primitives/core/src/traits.rs +++ b/primitives/core/src/traits.rs @@ -330,3 +330,11 @@ impl TaskExecutorExt { Self(spawn_handle) } } + +/// Something that can spawn a blocking future. +pub trait SpawnBlocking { + /// Spawn the given blocking future. + /// + /// The given `name` is used to identify the future in tracing. + fn spawn_blocking(&self, name: &'static str, future: futures::future::BoxFuture<'static, ()>); +} -- GitLab From 2b67057a020c4973b3af68a6868b1aa2b982e03d Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Mon, 4 May 2020 19:51:47 +0200 Subject: [PATCH 128/167] Correct BABE randomness by calculating InOut bytes directly in pallet (#5876) * vrf: remove Raw* types * babe: remove Raw* types * pallet-babe: switch representation of RawVRFOutput to Randomness * pallet-babe: calculate inout within the pallet * Remove make_transcript duplication * Bump spec version * Fix frame tests * and_then -> map * Always enable u64_backend * Fix nostd compile * fix import: should not use std * Remove unused definition of RawVRFOutput * Remove unused import of RuntimeDebug Co-authored-by: Gavin Wood --- Cargo.lock | 2 + bin/node/runtime/src/lib.rs | 4 +- client/consensus/babe/src/authorship.rs | 16 +-- client/consensus/babe/src/verification.rs | 4 +- frame/babe/Cargo.toml | 2 + frame/babe/src/lib.rs | 56 ++++++---- frame/babe/src/mock.rs | 41 ++++++-- frame/babe/src/tests.rs | 37 +++++-- primitives/consensus/babe/Cargo.toml | 2 + primitives/consensus/babe/src/digests.rs | 87 +++------------- primitives/consensus/babe/src/lib.rs | 17 ++++ primitives/consensus/vrf/Cargo.toml | 4 +- primitives/consensus/vrf/src/schnorrkel.rs | 113 +-------------------- 13 files changed, 145 insertions(+), 240 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5764942a0d9..8e8ef29b74e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4026,6 +4026,7 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "serde", + "sp-application-crypto", "sp-consensus-babe", "sp-consensus-vrf", "sp-core", @@ -7404,6 +7405,7 @@ dependencies = [ name = "sp-consensus-babe" version = "0.8.0-dev" dependencies = [ + "merlin", "parity-scale-codec", "sp-api", "sp-application-crypto", diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index b821eae2df5..ad22a9a52fc 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -83,8 +83,8 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 245, - impl_version: 3, + spec_version: 246, + impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, }; diff --git a/client/consensus/babe/src/authorship.rs b/client/consensus/babe/src/authorship.rs index 56841225ce4..1810f9f5bef 100644 --- a/client/consensus/babe/src/authorship.rs +++ b/client/consensus/babe/src/authorship.rs @@ -16,9 +16,8 @@ //! BABE authority selection and slot claiming. -use merlin::Transcript; use sp_consensus_babe::{ - AuthorityId, BabeAuthorityWeight, BABE_ENGINE_ID, BABE_VRF_PREFIX, + make_transcript, AuthorityId, BabeAuthorityWeight, BABE_VRF_PREFIX, SlotNumber, AuthorityPair, }; use sp_consensus_babe::digests::{ @@ -119,19 +118,6 @@ pub(super) fn secondary_slot_author( Some(&expected_author.0) } -pub(super) fn make_transcript( - randomness: &[u8], - slot_number: u64, - epoch: u64, -) -> Transcript { - let mut transcript = Transcript::new(&BABE_ENGINE_ID); - transcript.append_u64(b"slot number", slot_number); - transcript.append_u64(b"current epoch", epoch); - transcript.append_message(b"chain randomness", randomness); - transcript -} - - /// Claim a secondary slot if it is our turn to propose, returning the /// pre-digest to use when authoring the block, or `None` if it is not our turn /// to propose. diff --git a/client/consensus/babe/src/verification.rs b/client/consensus/babe/src/verification.rs index 1b89bbc643f..fd3c27be4f3 100644 --- a/client/consensus/babe/src/verification.rs +++ b/client/consensus/babe/src/verification.rs @@ -17,7 +17,7 @@ //! Verification for BABE headers. use sp_runtime::{traits::Header, traits::DigestItemFor}; use sp_core::{Pair, Public}; -use sp_consensus_babe::{AuthoritySignature, SlotNumber, AuthorityPair, AuthorityId}; +use sp_consensus_babe::{make_transcript, AuthoritySignature, SlotNumber, AuthorityPair, AuthorityId}; use sp_consensus_babe::digests::{ PreDigest, PrimaryPreDigest, SecondaryPlainPreDigest, SecondaryVRFPreDigest, CompatibleDigestItem @@ -25,7 +25,7 @@ use sp_consensus_babe::digests::{ use sc_consensus_slots::CheckedHeader; use log::{debug, trace}; use super::{find_pre_digest, babe_err, Epoch, BlockT, Error}; -use super::authorship::{make_transcript, calculate_primary_threshold, check_primary_threshold, secondary_slot_author}; +use super::authorship::{calculate_primary_threshold, check_primary_threshold, secondary_slot_author}; /// BABE verification parameters pub(super) struct VerificationParams<'a, B: 'a + BlockT> { diff --git a/frame/babe/Cargo.toml b/frame/babe/Cargo.toml index c94ec75b26a..631b4ac4d4a 100644 --- a/frame/babe/Cargo.toml +++ b/frame/babe/Cargo.toml @@ -15,6 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } @@ -36,6 +37,7 @@ std = [ "serde", "codec/std", "sp-std/std", + "sp-application-crypto/std", "frame-support/std", "sp-runtime/std", "sp-staking/std", diff --git a/frame/babe/src/lib.rs b/frame/babe/src/lib.rs index 7357ef75ffa..d43fa00e8f9 100644 --- a/frame/babe/src/lib.rs +++ b/frame/babe/src/lib.rs @@ -34,13 +34,14 @@ use sp_staking::{ SessionIndex, offence::{Offence, Kind}, }; +use sp_application_crypto::Public; use codec::{Encode, Decode}; use sp_inherents::{InherentIdentifier, InherentData, ProvideInherent, MakeFatalError}; use sp_consensus_babe::{ BABE_ENGINE_ID, ConsensusLog, BabeAuthorityWeight, SlotNumber, inherents::{INHERENT_IDENTIFIER, BabeInherentData}, - digests::{NextEpochDescriptor, RawPreDigest}, + digests::{NextEpochDescriptor, PreDigest}, }; use sp_consensus_vrf::schnorrkel; pub use sp_consensus_babe::{AuthorityId, VRF_OUTPUT_LENGTH, RANDOMNESS_LENGTH, PUBLIC_KEY_LENGTH}; @@ -102,7 +103,7 @@ impl EpochChangeTrigger for SameAuthoritiesForever { const UNDER_CONSTRUCTION_SEGMENT_LENGTH: usize = 256; -type MaybeVrf = Option; +type MaybeRandomness = Option; decl_storage! { trait Store for Module as Babe { @@ -147,11 +148,11 @@ decl_storage! { /// We reset all segments and return to `0` at the beginning of every /// epoch. SegmentIndex build(|_| 0): u32; - UnderConstruction: map hasher(twox_64_concat) u32 => Vec; + UnderConstruction: map hasher(twox_64_concat) u32 => Vec; /// Temporary value (cleared at block finalization) which is `Some` /// if per-block initialization has already been called for current block. - Initialized get(fn initialized): Option; + Initialized get(fn initialized): Option; /// How late the current block is compared to its parent. /// @@ -194,8 +195,8 @@ decl_module! { // that this block was the first in a new epoch, the changeover logic has // already occurred at this point, so the under-construction randomness // will only contain outputs from the right epoch. - if let Some(Some(vrf_output)) = Initialized::take() { - Self::deposit_vrf_output(&vrf_output); + if let Some(Some(randomness)) = Initialized::take() { + Self::deposit_randomness(&randomness); } // remove temporary "environment" entry from storage @@ -238,7 +239,7 @@ impl FindAuthor for Module { { for (id, mut data) in digests.into_iter() { if id == BABE_ENGINE_ID { - let pre_digest: RawPreDigest = RawPreDigest::decode(&mut data).ok()?; + let pre_digest: PreDigest = PreDigest::decode(&mut data).ok()?; return Some(pre_digest.authority_index()) } } @@ -415,17 +416,17 @@ impl Module { >::deposit_log(log.into()) } - fn deposit_vrf_output(vrf_output: &schnorrkel::RawVRFOutput) { + fn deposit_randomness(randomness: &schnorrkel::Randomness) { let segment_idx = ::get(); let mut segment = ::get(&segment_idx); if segment.len() < UNDER_CONSTRUCTION_SEGMENT_LENGTH { // push onto current segment: not full. - segment.push(*vrf_output); + segment.push(*randomness); ::insert(&segment_idx, &segment); } else { // move onto the next segment and update the index. let segment_idx = segment_idx + 1; - ::insert(&segment_idx, &vec![vrf_output.clone()]); + ::insert(&segment_idx, &vec![randomness.clone()]); ::put(&segment_idx); } } @@ -438,18 +439,18 @@ impl Module { return; } - let maybe_pre_digest: Option = >::digest() + let maybe_pre_digest: Option = >::digest() .logs .iter() .filter_map(|s| s.as_pre_runtime()) .filter_map(|(id, mut data)| if id == BABE_ENGINE_ID { - RawPreDigest::decode(&mut data).ok() + PreDigest::decode(&mut data).ok() } else { None }) .next(); - let maybe_vrf = maybe_pre_digest.and_then(|digest| { + let maybe_randomness: Option = maybe_pre_digest.and_then(|digest| { // on the first non-zero block (i.e. block #1) // this is where the first epoch (epoch #0) actually starts. // we need to adjust internal storage accordingly. @@ -478,17 +479,38 @@ impl Module { Lateness::::put(lateness); CurrentSlot::put(current_slot); - if let RawPreDigest::Primary(primary) = digest { + if let PreDigest::Primary(primary) = digest { // place the VRF output into the `Initialized` storage item // and it'll be put onto the under-construction randomness // later, once we've decided which epoch this block is in. - Some(primary.vrf_output) + // + // Reconstruct the bytes of VRFInOut using the authority id. + Authorities::get() + .get(primary.authority_index as usize) + .and_then(|author| { + schnorrkel::PublicKey::from_bytes(author.0.as_slice()).ok() + }) + .and_then(|pubkey| { + let transcript = sp_consensus_babe::make_transcript( + &Self::randomness(), + current_slot, + EpochIndex::get(), + ); + + primary.vrf_output.0.attach_input_hash( + &pubkey, + transcript + ).ok() + }) + .map(|inout| { + inout.make_bytes(&sp_consensus_babe::BABE_VRF_INOUT_CONTEXT) + }) } else { None } }); - Initialized::put(maybe_vrf); + Initialized::put(maybe_randomness); // enact epoch change, if necessary. T::EpochChangeTrigger::trigger::(now) @@ -577,7 +599,7 @@ impl pallet_session::OneSessionHandler for Module { fn compute_randomness( last_epoch_randomness: schnorrkel::Randomness, epoch_index: u64, - rho: impl Iterator, + rho: impl Iterator, rho_size_hint: Option, ) -> schnorrkel::Randomness { let mut s = Vec::with_capacity(40 + rho_size_hint.unwrap_or(0) * VRF_OUTPUT_LENGTH); diff --git a/frame/babe/src/mock.rs b/frame/babe/src/mock.rs index 9f029fd27f7..933c69c98ab 100644 --- a/frame/babe/src/mock.rs +++ b/frame/babe/src/mock.rs @@ -30,11 +30,12 @@ use frame_support::{ weights::Weight, }; use sp_io; -use sp_core::H256; -use sp_consensus_vrf::schnorrkel::{RawVRFOutput, RawVRFProof}; +use sp_core::{H256, U256, crypto::Pair}; +use sp_consensus_babe::AuthorityPair; +use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; impl_outer_origin!{ - pub enum Origin for Test where system = frame_system {} + pub enum Origin for Test where system = frame_system {} } type DummyValidatorId = u64; @@ -109,16 +110,20 @@ impl Trait for Test { type EpochChangeTrigger = crate::ExternalTrigger; } -pub fn new_test_ext(authorities: Vec) -> sp_io::TestExternalities { +pub fn new_test_ext(authorities_len: usize) -> (Vec, sp_io::TestExternalities) { + let pairs = (0..authorities_len).map(|i| { + AuthorityPair::from_seed(&U256::from(i).into()) + }).collect::>(); + let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); GenesisConfig { - authorities: authorities.into_iter().map(|a| (UintAuthorityId(a).to_public_key(), 1)).collect(), + authorities: pairs.iter().map(|a| (a.public(), 1)).collect(), }.assimilate_storage::(&mut t).unwrap(); - t.into() + (pairs, t.into()) } pub fn go_to_block(n: u64, s: u64) { - let pre_digest = make_pre_digest(0, s, RawVRFOutput([1; 32]), RawVRFProof([0xff; 64])); + let pre_digest = make_secondary_plain_pre_digest(0, s); System::initialize(&n, &Default::default(), &Default::default(), &pre_digest, InitKind::Full); System::set_block_number(n); if s > 1 { @@ -140,11 +145,11 @@ pub fn progress_to_block(n: u64) { pub fn make_pre_digest( authority_index: sp_consensus_babe::AuthorityIndex, slot_number: sp_consensus_babe::SlotNumber, - vrf_output: RawVRFOutput, - vrf_proof: RawVRFProof, + vrf_output: VRFOutput, + vrf_proof: VRFProof, ) -> Digest { - let digest_data = sp_consensus_babe::digests::RawPreDigest::Primary( - sp_consensus_babe::digests::RawPrimaryPreDigest { + let digest_data = sp_consensus_babe::digests::PreDigest::Primary( + sp_consensus_babe::digests::PrimaryPreDigest { authority_index, slot_number, vrf_output, @@ -155,6 +160,20 @@ pub fn make_pre_digest( Digest { logs: vec![log] } } +pub fn make_secondary_plain_pre_digest( + authority_index: sp_consensus_babe::AuthorityIndex, + slot_number: sp_consensus_babe::SlotNumber, +) -> Digest { + let digest_data = sp_consensus_babe::digests::PreDigest::SecondaryPlain( + sp_consensus_babe::digests::SecondaryPlainPreDigest { + authority_index, + slot_number, + } + ); + let log = DigestItem::PreRuntime(sp_consensus_babe::BABE_ENGINE_ID, digest_data.encode()); + Digest { logs: vec![log] } +} + pub type System = frame_system::Module; pub type Babe = Module; pub type Session = pallet_session::Module; diff --git a/frame/babe/src/tests.rs b/frame/babe/src/tests.rs index 24aba100178..af2ecd1e1a0 100644 --- a/frame/babe/src/tests.rs +++ b/frame/babe/src/tests.rs @@ -20,7 +20,8 @@ use super::*; use mock::*; use frame_support::traits::OnFinalize; use pallet_session::ShouldEndSession; -use sp_consensus_vrf::schnorrkel::{RawVRFOutput, RawVRFProof}; +use sp_core::crypto::IsWrappedBy; +use sp_consensus_vrf::schnorrkel::{VRFOutput, VRFProof}; const EMPTY_RANDOMNESS: [u8; 32] = [ 74, 25, 49, 128, 53, 97, 244, 49, @@ -37,14 +38,14 @@ fn empty_randomness_is_correct() { #[test] fn initial_values() { - new_test_ext(vec![0, 1, 2, 3]).execute_with(|| { + new_test_ext(4).1.execute_with(|| { assert_eq!(Babe::authorities().len(), 4) }) } #[test] fn check_module() { - new_test_ext(vec![0, 1, 2, 3]).execute_with(|| { + new_test_ext(4).1.execute_with(|| { assert!(!Babe::should_end_session(0), "Genesis does not change sessions"); assert!(!Babe::should_end_session(200000), "BABE does not include the block number in epoch calculations"); @@ -53,14 +54,29 @@ fn check_module() { #[test] fn first_block_epoch_zero_start() { - new_test_ext(vec![0, 1, 2, 3]).execute_with(|| { + let (pairs, mut ext) = new_test_ext(4); + + ext.execute_with(|| { let genesis_slot = 100; - let first_vrf = RawVRFOutput([1; 32]); + + let pair = sp_core::sr25519::Pair::from_ref(&pairs[0]).as_ref(); + let transcript = sp_consensus_babe::make_transcript( + &Babe::randomness(), + genesis_slot, + 0, + ); + let vrf_inout = pair.vrf_sign(transcript); + let vrf_randomness: sp_consensus_vrf::schnorrkel::Randomness = vrf_inout.0 + .make_bytes::<[u8; 32]>(&sp_consensus_babe::BABE_VRF_INOUT_CONTEXT); + let vrf_output = VRFOutput(vrf_inout.0.to_output()); + let vrf_proof = VRFProof(vrf_inout.1); + + let first_vrf = vrf_output; let pre_digest = make_pre_digest( 0, genesis_slot, first_vrf.clone(), - RawVRFProof([0xff; 64]), + vrf_proof, ); assert_eq!(Babe::genesis_slot(), 0); @@ -83,7 +99,7 @@ fn first_block_epoch_zero_start() { let header = System::finalize(); assert_eq!(SegmentIndex::get(), 0); - assert_eq!(UnderConstruction::get(0), vec![first_vrf]); + assert_eq!(UnderConstruction::get(0), vec![vrf_randomness]); assert_eq!(Babe::randomness(), [0; 32]); assert_eq!(NextRandomness::get(), [0; 32]); @@ -91,10 +107,9 @@ fn first_block_epoch_zero_start() { assert_eq!(pre_digest.logs.len(), 1); assert_eq!(header.digest.logs[0], pre_digest.logs[0]); - let authorities = Babe::authorities(); let consensus_log = sp_consensus_babe::ConsensusLog::NextEpochData( sp_consensus_babe::digests::NextEpochDescriptor { - authorities, + authorities: Babe::authorities(), randomness: Babe::randomness(), } ); @@ -107,7 +122,7 @@ fn first_block_epoch_zero_start() { #[test] fn authority_index() { - new_test_ext(vec![0, 1, 2, 3]).execute_with(|| { + new_test_ext(4).1.execute_with(|| { assert_eq!( Babe::find_author((&[(BABE_ENGINE_ID, &[][..])]).into_iter().cloned()), None, "Trivially invalid authorities are ignored") @@ -116,7 +131,7 @@ fn authority_index() { #[test] fn can_predict_next_epoch_change() { - new_test_ext(vec![]).execute_with(|| { + new_test_ext(0).1.execute_with(|| { assert_eq!(::EpochDuration::get(), 3); // this sets the genesis slot to 6; go_to_block(1, 6); diff --git a/primitives/consensus/babe/Cargo.toml b/primitives/consensus/babe/Cargo.toml index ba7e7fffb62..ca097d6a32d 100644 --- a/primitives/consensus/babe/Cargo.toml +++ b/primitives/consensus/babe/Cargo.toml @@ -14,6 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } +merlin = { version = "2.0", default-features = false } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } sp-consensus = { version = "0.8.0-dev", optional = true, path = "../common" } @@ -27,6 +28,7 @@ default = ["std"] std = [ "sp-application-crypto/std", "codec/std", + "merlin/std", "sp-std/std", "sp-api/std", "sp-consensus", diff --git a/primitives/consensus/babe/src/digests.rs b/primitives/consensus/babe/src/digests.rs index 141d6cf4bd7..24be9b1b145 100644 --- a/primitives/consensus/babe/src/digests.rs +++ b/primitives/consensus/babe/src/digests.rs @@ -22,19 +22,17 @@ use super::{AuthorityId, AuthorityIndex, SlotNumber, BabeAuthorityWeight, BabeEp #[cfg(feature = "std")] use sp_runtime::{DigestItem, generic::OpaqueDigestItemId}; #[cfg(feature = "std")] -use std::{fmt::Debug, convert::{TryFrom, TryInto}}; +use std::fmt::Debug; use codec::{Decode, Encode}; #[cfg(feature = "std")] use codec::Codec; use sp_std::vec::Vec; use sp_runtime::RuntimeDebug; -use sp_consensus_vrf::schnorrkel::{self, Randomness}; -#[cfg(feature = "std")] -use sp_consensus_vrf::schnorrkel::SignatureError; +use sp_consensus_vrf::schnorrkel::{Randomness, VRFOutput, VRFProof}; /// Raw BABE primary slot assignment pre-digest. #[derive(Clone, RuntimeDebug, Encode, Decode)] -pub struct RawPrimaryPreDigest { +pub struct PrimaryPreDigest { /// Authority index pub authority_index: super::AuthorityIndex, /// Slot number @@ -45,24 +43,6 @@ pub struct RawPrimaryPreDigest; - -#[cfg(feature = "std")] -impl TryFrom for PrimaryPreDigest { - type Error = SignatureError; - - fn try_from(raw: RawPrimaryPreDigest) -> Result { - Ok(PrimaryPreDigest { - authority_index: raw.authority_index, - slot_number: raw.slot_number, - vrf_output: raw.vrf_output.try_into()?, - vrf_proof: raw.vrf_proof.try_into()?, - }) - } -} - /// BABE secondary slot assignment pre-digest. #[derive(Clone, RuntimeDebug, Encode, Decode)] pub struct SecondaryPlainPreDigest { @@ -79,7 +59,7 @@ pub struct SecondaryPlainPreDigest { /// BABE secondary deterministic slot assignment with VRF outputs. #[derive(Clone, RuntimeDebug, Encode, Decode)] -pub struct RawSecondaryVRFPreDigest { +pub struct SecondaryVRFPreDigest { /// Authority index pub authority_index: super::AuthorityIndex, /// Slot number @@ -90,60 +70,38 @@ pub struct RawSecondaryVRFPreDigest; - -#[cfg(feature = "std")] -impl TryFrom for SecondaryVRFPreDigest { - type Error = SignatureError; - - fn try_from(raw: RawSecondaryVRFPreDigest) -> Result { - Ok(SecondaryVRFPreDigest { - authority_index: raw.authority_index, - slot_number: raw.slot_number, - vrf_output: raw.vrf_output.try_into()?, - vrf_proof: raw.vrf_proof.try_into()?, - }) - } -} - /// A BABE pre-runtime digest. This contains all data required to validate a /// block and for the BABE runtime module. Slots can be assigned to a primary /// (VRF based) and to a secondary (slot number based). #[derive(Clone, RuntimeDebug, Encode, Decode)] -pub enum RawPreDigest { +pub enum PreDigest { /// A primary VRF-based slot assignment. #[codec(index = "1")] - Primary(RawPrimaryPreDigest), + Primary(PrimaryPreDigest), /// A secondary deterministic slot assignment. #[codec(index = "2")] SecondaryPlain(SecondaryPlainPreDigest), /// A secondary deterministic slot assignment with VRF outputs. #[codec(index = "3")] - SecondaryVRF(RawSecondaryVRFPreDigest), + SecondaryVRF(SecondaryVRFPreDigest), } -#[cfg(feature = "std")] -/// A BABE pre-runtime digest for std. -pub type PreDigest = RawPreDigest; - -impl RawPreDigest { +impl PreDigest { /// Returns the slot number of the pre digest. pub fn authority_index(&self) -> AuthorityIndex { match self { - RawPreDigest::Primary(primary) => primary.authority_index, - RawPreDigest::SecondaryPlain(secondary) => secondary.authority_index, - RawPreDigest::SecondaryVRF(secondary) => secondary.authority_index, + PreDigest::Primary(primary) => primary.authority_index, + PreDigest::SecondaryPlain(secondary) => secondary.authority_index, + PreDigest::SecondaryVRF(secondary) => secondary.authority_index, } } /// Returns the slot number of the pre digest. pub fn slot_number(&self) -> SlotNumber { match self { - RawPreDigest::Primary(primary) => primary.slot_number, - RawPreDigest::SecondaryPlain(secondary) => secondary.slot_number, - RawPreDigest::SecondaryVRF(secondary) => secondary.slot_number, + PreDigest::Primary(primary) => primary.slot_number, + PreDigest::SecondaryPlain(secondary) => secondary.slot_number, + PreDigest::SecondaryVRF(secondary) => secondary.slot_number, } } @@ -151,25 +109,12 @@ impl RawPreDigest { /// of the chain. pub fn added_weight(&self) -> crate::BabeBlockWeight { match self { - RawPreDigest::Primary(_) => 1, - RawPreDigest::SecondaryPlain(_) | RawPreDigest::SecondaryVRF(_) => 0, + PreDigest::Primary(_) => 1, + PreDigest::SecondaryPlain(_) | PreDigest::SecondaryVRF(_) => 0, } } } -#[cfg(feature = "std")] -impl TryFrom for PreDigest { - type Error = SignatureError; - - fn try_from(raw: RawPreDigest) -> Result { - Ok(match raw { - RawPreDigest::Primary(primary) => PreDigest::Primary(primary.try_into()?), - RawPreDigest::SecondaryPlain(secondary) => PreDigest::SecondaryPlain(secondary), - RawPreDigest::SecondaryVRF(secondary) => PreDigest::SecondaryVRF(secondary.try_into()?), - }) - } -} - /// Information about the next epoch. This is broadcast in the first block /// of the epoch. #[derive(Decode, Encode, PartialEq, Eq, Clone, RuntimeDebug)] diff --git a/primitives/consensus/babe/src/lib.rs b/primitives/consensus/babe/src/lib.rs index 7cf9483e6f6..5f26349ef98 100644 --- a/primitives/consensus/babe/src/lib.rs +++ b/primitives/consensus/babe/src/lib.rs @@ -25,6 +25,7 @@ pub mod inherents; pub use sp_consensus_vrf::schnorrkel::{ Randomness, VRF_PROOF_LENGTH, VRF_OUTPUT_LENGTH, RANDOMNESS_LENGTH }; +pub use merlin::Transcript; use codec::{Encode, Decode}; use sp_std::vec::Vec; @@ -39,6 +40,9 @@ mod app { /// The prefix used by BABE for its VRF keys. pub const BABE_VRF_PREFIX: &[u8] = b"substrate-babe-vrf"; +/// BABE VRFInOut context. +pub static BABE_VRF_INOUT_CONTEXT: &[u8] = b"BabeVRFInOutContext"; + /// A Babe authority keypair. Necessarily equivalent to the schnorrkel public key used in /// the main Babe module. If that ever changes, then this must, too. #[cfg(feature = "std")] @@ -76,6 +80,19 @@ pub type BabeAuthorityWeight = u64; /// The weight of a BABE block. pub type BabeBlockWeight = u32; +/// Make a VRF transcript from given randomness, slot number and epoch. +pub fn make_transcript( + randomness: &Randomness, + slot_number: u64, + epoch: u64, +) -> Transcript { + let mut transcript = Transcript::new(&BABE_ENGINE_ID); + transcript.append_u64(b"slot number", slot_number); + transcript.append_u64(b"current epoch", epoch); + transcript.append_message(b"chain randomness", &randomness[..]); + transcript +} + /// An consensus log item for BABE. #[derive(Decode, Encode, Clone, PartialEq, Eq)] pub enum ConsensusLog { diff --git a/primitives/consensus/vrf/Cargo.toml b/primitives/consensus/vrf/Cargo.toml index 71b647df593..92d8a77cb4e 100644 --- a/primitives/consensus/vrf/Cargo.toml +++ b/primitives/consensus/vrf/Cargo.toml @@ -13,7 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { version = "1.0.0", package = "parity-scale-codec", default-features = false } -schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated"], optional = true } +schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"], default-features = false } sp-std = { version = "2.0.0-dev", path = "../../std", default-features = false } sp-core = { version = "2.0.0-dev", path = "../../core", default-features = false } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } @@ -22,7 +22,7 @@ sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../ru default = ["std"] std = [ "codec/std", - "schnorrkel", + "schnorrkel/std", "sp-std/std", "sp-core/std", "sp-runtime/std", diff --git a/primitives/consensus/vrf/src/schnorrkel.rs b/primitives/consensus/vrf/src/schnorrkel.rs index 265572dbdae..c1c2a7c21ab 100644 --- a/primitives/consensus/vrf/src/schnorrkel.rs +++ b/primitives/consensus/vrf/src/schnorrkel.rs @@ -16,72 +16,38 @@ //! Schnorrkel-based VRF. -use codec::{Encode, Decode}; -use sp_runtime::RuntimeDebug; +use codec::{Encode, Decode, EncodeLike}; +use sp_std::{convert::TryFrom, prelude::*}; +use sp_core::U512; use sp_std::ops::{Deref, DerefMut}; -#[cfg(feature = "std")] -use std::convert::TryFrom; -#[cfg(feature = "std")] -use codec::EncodeLike; -#[cfg(feature = "std")] use schnorrkel::errors::MultiSignatureStage; -#[cfg(feature = "std")] -use sp_core::U512; - -#[cfg(feature = "std")] -pub use schnorrkel::{SignatureError, vrf::{VRF_PROOF_LENGTH, VRF_OUTPUT_LENGTH}}; -/// The length of the VRF proof. -#[cfg(not(feature = "std"))] -pub const VRF_PROOF_LENGTH: usize = 64; - -/// The length of the VRF output. -#[cfg(not(feature = "std"))] -pub const VRF_OUTPUT_LENGTH: usize = 32; +pub use schnorrkel::{SignatureError, PublicKey, vrf::{VRF_PROOF_LENGTH, VRF_OUTPUT_LENGTH}}; /// The length of the Randomness. pub const RANDOMNESS_LENGTH: usize = VRF_OUTPUT_LENGTH; -/// Raw VRF output. -#[derive(Clone, Copy, Eq, PartialEq, RuntimeDebug, Encode, Decode)] -pub struct RawVRFOutput(pub [u8; VRF_OUTPUT_LENGTH]); - -impl Deref for RawVRFOutput { - type Target = [u8; VRF_OUTPUT_LENGTH]; - fn deref(&self) -> &Self::Target { &self.0 } -} - -impl DerefMut for RawVRFOutput { - fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } -} - /// VRF output type available for `std` environment, suitable for schnorrkel operations. -#[cfg(feature = "std")] #[derive(Clone, Debug, PartialEq, Eq)] pub struct VRFOutput(pub schnorrkel::vrf::VRFOutput); -#[cfg(feature = "std")] impl Deref for VRFOutput { type Target = schnorrkel::vrf::VRFOutput; fn deref(&self) -> &Self::Target { &self.0 } } -#[cfg(feature = "std")] impl DerefMut for VRFOutput { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } } -#[cfg(feature = "std")] impl Encode for VRFOutput { fn encode(&self) -> Vec { self.0.as_bytes().encode() } } -#[cfg(feature = "std")] impl EncodeLike for VRFOutput { } -#[cfg(feature = "std")] impl Decode for VRFOutput { fn decode(i: &mut R) -> Result { let decoded = <[u8; VRF_OUTPUT_LENGTH]>::decode(i)?; @@ -89,7 +55,6 @@ impl Decode for VRFOutput { } } -#[cfg(feature = "std")] impl TryFrom<[u8; VRF_OUTPUT_LENGTH]> for VRFOutput { type Error = SignatureError; @@ -98,91 +63,39 @@ impl TryFrom<[u8; VRF_OUTPUT_LENGTH]> for VRFOutput { } } -#[cfg(feature = "std")] -impl TryFrom for VRFOutput { - type Error = SignatureError; - - fn try_from(raw: RawVRFOutput) -> Result { - schnorrkel::vrf::VRFOutput::from_bytes(&raw.0).map(VRFOutput) - } -} - -#[cfg(feature = "std")] -impl From for RawVRFOutput { - fn from(output: VRFOutput) -> RawVRFOutput { - RawVRFOutput(output.to_bytes()) - } -} - -/// Raw VRF proof. -#[derive(Clone, Copy, Encode, Decode)] -pub struct RawVRFProof(pub [u8; VRF_PROOF_LENGTH]); - -impl Deref for RawVRFProof { - type Target = [u8; VRF_PROOF_LENGTH]; - fn deref(&self) -> &Self::Target { &self.0 } -} - -impl DerefMut for RawVRFProof { - fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } -} - -#[cfg(feature = "std")] -impl std::fmt::Debug for RawVRFProof { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{:?}", &self) - } -} - -impl core::cmp::PartialEq for RawVRFProof { - fn eq(&self, other: &Self) -> bool { - self == other - } -} - -impl core::cmp::Eq for RawVRFProof { } - /// VRF proof type available for `std` environment, suitable for schnorrkel operations. -#[cfg(feature = "std")] #[derive(Clone, Debug, PartialEq, Eq)] pub struct VRFProof(pub schnorrkel::vrf::VRFProof); -#[cfg(feature = "std")] impl PartialOrd for VRFProof { fn partial_cmp(&self, other: &Self) -> Option { Some(self.cmp(other)) } } -#[cfg(feature = "std")] impl Ord for VRFProof { fn cmp(&self, other: &Self) -> core::cmp::Ordering { U512::from(self.0.to_bytes()).cmp(&U512::from(other.0.to_bytes())) } } -#[cfg(feature = "std")] impl Deref for VRFProof { type Target = schnorrkel::vrf::VRFProof; fn deref(&self) -> &Self::Target { &self.0 } } -#[cfg(feature = "std")] impl DerefMut for VRFProof { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } } -#[cfg(feature = "std")] impl Encode for VRFProof { fn encode(&self) -> Vec { self.0.to_bytes().encode() } } -#[cfg(feature = "std")] impl EncodeLike for VRFProof { } -#[cfg(feature = "std")] impl Decode for VRFProof { fn decode(i: &mut R) -> Result { let decoded = <[u8; VRF_PROOF_LENGTH]>::decode(i)?; @@ -190,7 +103,6 @@ impl Decode for VRFProof { } } -#[cfg(feature = "std")] impl TryFrom<[u8; VRF_PROOF_LENGTH]> for VRFProof { type Error = SignatureError; @@ -199,23 +111,6 @@ impl TryFrom<[u8; VRF_PROOF_LENGTH]> for VRFProof { } } -#[cfg(feature = "std")] -impl TryFrom for VRFProof { - type Error = SignatureError; - - fn try_from(raw: RawVRFProof) -> Result { - schnorrkel::vrf::VRFProof::from_bytes(&raw.0).map(VRFProof) - } -} - -#[cfg(feature = "std")] -impl From for RawVRFProof { - fn from(output: VRFProof) -> RawVRFProof { - RawVRFProof(output.to_bytes()) - } -} - -#[cfg(feature = "std")] fn convert_error(e: SignatureError) -> codec::Error { use SignatureError::*; use MultiSignatureStage::*; -- GitLab From af70e66930e8094164579d016961d7092874e55d Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Mon, 4 May 2020 19:52:53 +0200 Subject: [PATCH 129/167] Refactor weight constants, Update to remove redundant overhead (#5884) * Move weight values to `frame_support` * more accurate comment * update balances * vesting * update util * Add weight to time constants * use weight constants in weights * update tests --- bin/node-template/runtime/src/lib.rs | 19 ++++-------- bin/node/executor/tests/basic.rs | 16 +++++----- bin/node/executor/tests/fees.rs | 4 +-- bin/node/executor/tests/submit_transaction.rs | 2 +- bin/node/runtime/src/lib.rs | 17 ++++------ frame/balances/src/lib.rs | 14 +++++---- frame/support/src/weights.rs | 31 +++++++++++++++++++ frame/utility/src/lib.rs | 28 ++++++++--------- frame/vesting/src/lib.rs | 22 ++++++------- 9 files changed, 87 insertions(+), 66 deletions(-) diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index 20780511aec..44332f61a15 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -34,7 +34,10 @@ pub use sp_runtime::{Permill, Perbill}; pub use frame_support::{ StorageValue, construct_runtime, parameter_types, traits::Randomness, - weights::{Weight, RuntimeDbWeight}, + weights::{ + Weight, + constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + }, }; /// Importing a template pallet @@ -122,20 +125,10 @@ pub fn native_version() -> NativeVersion { parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. - pub const MaximumBlockWeight: Weight = 2_000_000_000_000; - /// Executing 10,000 System remarks (no-op) txs takes ~1.26 seconds -> ~125 µs per tx - pub const ExtrinsicBaseWeight: Weight = 125_000_000; + pub const MaximumBlockWeight: Weight = 2 * WEIGHT_PER_SECOND; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; - /// This probably should not be changed unless you have specific - /// disk i/o conditions for the node. - pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000_000, // ~25 µs @ 200,000 items - write: 100_000_000, // ~100 µs @ 200,000 items - }; - /// Importing a block with 0 txs takes ~5 ms - pub const BlockExecutionWeight: Weight = 5_000_000_000; } impl system::Trait for Runtime { @@ -164,7 +157,7 @@ impl system::Trait for Runtime { /// Maximum weight of each block. type MaximumBlockWeight = MaximumBlockWeight; /// The weight of database operations that the runtime can invoke. - type DbWeight = DbWeight; + type DbWeight = RocksDbWeight; /// The weight of the overhead invoked on the block import process, independent of the /// extrinsics included in that block. type BlockExecutionWeight = BlockExecutionWeight; diff --git a/bin/node/executor/tests/basic.rs b/bin/node/executor/tests/basic.rs index 0cb3dea4207..caf3b7c0c7d 100644 --- a/bin/node/executor/tests/basic.rs +++ b/bin/node/executor/tests/basic.rs @@ -18,7 +18,7 @@ use codec::{Encode, Decode, Joiner}; use frame_support::{ StorageValue, StorageMap, traits::Currency, - weights::{GetDispatchInfo, DispatchInfo, DispatchClass}, + weights::{GetDispatchInfo, DispatchInfo, DispatchClass, constants::ExtrinsicBaseWeight}, }; use sp_core::{ NeverNativeValue, map, traits::Externalities, storage::{well_known_keys, Storage}, @@ -33,7 +33,7 @@ use frame_system::{self, EventRecord, Phase}; use node_runtime::{ Header, Block, UncheckedExtrinsic, CheckedExtrinsic, Call, Runtime, Balances, - System, TransactionPayment, Event, TransactionByteFee, ExtrinsicBaseWeight, + System, TransactionPayment, Event, TransactionByteFee, constants::currency::*, }; use node_primitives::{Balance, Hash}; @@ -359,9 +359,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(1), - // Balance Transfer 80_000_000 + 1 Read + 1 Write + // Balance Transfer 70_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } + DispatchInfo { weight: 70_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, @@ -416,9 +416,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(1), - // Balance Transfer 80_000_000 + 1 Read + 1 Write + // Balance Transfer 70_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } + DispatchInfo { weight: 70_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, @@ -440,9 +440,9 @@ fn full_native_block_import_works() { }, EventRecord { phase: Phase::ApplyExtrinsic(2), - // Balance Transfer 80_000_000 + 1 Read + 1 Write + // Balance Transfer 70_000_000 + 1 Read + 1 Write event: Event::frame_system(frame_system::RawEvent::ExtrinsicSuccess( - DispatchInfo { weight: 80_000_000 + 25_000_000 + 100_000_000, ..Default::default() } + DispatchInfo { weight: 70_000_000 + 25_000_000 + 100_000_000, ..Default::default() } )), topics: vec![], }, diff --git a/bin/node/executor/tests/fees.rs b/bin/node/executor/tests/fees.rs index 9c1b89d045f..c7d6bb34cd5 100644 --- a/bin/node/executor/tests/fees.rs +++ b/bin/node/executor/tests/fees.rs @@ -18,14 +18,14 @@ use codec::{Encode, Joiner}; use frame_support::{ StorageValue, StorageMap, traits::Currency, - weights::GetDispatchInfo, + weights::{GetDispatchInfo, constants::ExtrinsicBaseWeight}, }; use sp_core::{NeverNativeValue, map, storage::Storage}; use sp_runtime::{Fixed128, Perbill, traits::{Convert, BlakeTwo256}}; use node_runtime::{ CheckedExtrinsic, Call, Runtime, Balances, TransactionPayment, TransactionByteFee, WeightFeeCoefficient, - constants::currency::*, ExtrinsicBaseWeight, + constants::currency::*, }; use node_runtime::impls::LinearWeightToFee; use node_primitives::Balance; diff --git a/bin/node/executor/tests/submit_transaction.rs b/bin/node/executor/tests/submit_transaction.rs index ced85d2d4af..4c4e4b08550 100644 --- a/bin/node/executor/tests/submit_transaction.rs +++ b/bin/node/executor/tests/submit_transaction.rs @@ -230,7 +230,7 @@ fn submitted_transaction_should_be_valid() { let res = Executive::validate_transaction(source, extrinsic); assert_eq!(res.unwrap(), ValidTransaction { - priority: 1_410_740_000_000, + priority: 1_410_710_000_000, requires: vec![], provides: vec![(address, 0).encode()], longevity: 128, diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index ad22a9a52fc..e3613ea75ab 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -23,7 +23,10 @@ use sp_std::prelude::*; use frame_support::{ construct_runtime, parameter_types, debug, - weights::{Weight, RuntimeDbWeight}, + weights::{ + Weight, + constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, + }, traits::{Currency, Randomness, OnUnbalanced, Imbalance, LockIdentifier}, }; use sp_core::u32_trait::{_1, _2, _3, _4}; @@ -119,18 +122,10 @@ impl OnUnbalanced for DealWithFees { parameter_types! { pub const BlockHashCount: BlockNumber = 250; /// We allow for 2 seconds of compute with a 6 second average block time. - pub const MaximumBlockWeight: Weight = 2_000_000_000_000; - /// Executing 10,000 System remarks (no-op) txs takes ~1.26 seconds -> ~125 µs per tx - pub const ExtrinsicBaseWeight: Weight = 125_000_000; + pub const MaximumBlockWeight: Weight = 2 * WEIGHT_PER_SECOND; pub const MaximumBlockLength: u32 = 5 * 1024 * 1024; pub const Version: RuntimeVersion = VERSION; pub const AvailableBlockRatio: Perbill = Perbill::from_percent(75); - pub const DbWeight: RuntimeDbWeight = RuntimeDbWeight { - read: 25_000_000, // ~25 µs @ 200,000 items - write: 100_000_000, // ~100 µs @ 200,000 items - }; - /// Importing a block with 0 txs takes ~5 ms - pub const BlockExecutionWeight: Weight = 5_000_000_000; } impl frame_system::Trait for Runtime { @@ -146,7 +141,7 @@ impl frame_system::Trait for Runtime { type Event = Event; type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = DbWeight; + type DbWeight = RocksDbWeight; type BlockExecutionWeight = BlockExecutionWeight; type ExtrinsicBaseWeight = ExtrinsicBaseWeight; type MaximumBlockLength = MaximumBlockLength; diff --git a/frame/balances/src/lib.rs b/frame/balances/src/lib.rs index f3a6868722c..b1d88edb033 100644 --- a/frame/balances/src/lib.rs +++ b/frame/balances/src/lib.rs @@ -432,11 +432,11 @@ decl_module! { /// - `transfer_keep_alive` works the same way as `transfer`, but has an additional /// check that the transfer will not kill the origin account. /// --------------------------------- - /// - Base Weight: 80 µs, worst case scenario (account created, account removed) + /// - Base Weight: 73.64 µs, worst case scenario (account created, account removed) /// - DB Weight: 1 Read and 1 Write to destination account /// - Origin account is already in memory, so no DB operations for them. /// # - #[weight = T::DbWeight::get().reads_writes(1, 1) + 80_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + 70_000_000] pub fn transfer( origin, dest: ::Source, @@ -460,7 +460,9 @@ decl_module! { /// - Independent of the arguments. /// - Contains a limited number of reads and writes. /// --------------------- - /// - Base Weight: 32.6 µs + /// - Base Weight: + /// - Creating: 27.56 µs + /// - Killing: 35.11 µs /// - DB Weight: 1 Read, 1 Write to `who` /// # #[weight = T::DbWeight::get().reads_writes(1, 1) + 35_000_000] @@ -505,7 +507,7 @@ decl_module! { /// - Same as transfer, but additional read and write because the source account is /// not assumed to be in the overlay. /// # - #[weight = T::DbWeight::get().reads_writes(2, 2) + 80_000_000] + #[weight = T::DbWeight::get().reads_writes(2, 2) + 70_000_000] pub fn force_transfer( origin, source: ::Source, @@ -526,10 +528,10 @@ decl_module! { /// [`transfer`]: struct.Module.html#method.transfer /// # /// - Cheaper than transfer because account cannot be killed. - /// - Base Weight: 57.36 µs + /// - Base Weight: 51.4 µs /// - DB Weight: 1 Read and 1 Write to dest (sender is in overlay already) /// # - #[weight = T::DbWeight::get().reads_writes(1, 1) + 60_000_000] + #[weight = T::DbWeight::get().reads_writes(1, 1) + 50_000_000] pub fn transfer_keep_alive( origin, dest: ::Source, diff --git a/frame/support/src/weights.rs b/frame/support/src/weights.rs index 9a8faf0c914..1d3862b60fb 100644 --- a/frame/support/src/weights.rs +++ b/frame/support/src/weights.rs @@ -141,6 +141,37 @@ pub use sp_runtime::transaction_validity::TransactionPriority; /// Numeric range of a transaction weight. pub type Weight = u64; +/// These constants are specific to FRAME, and the current implementation of its various components. +/// For example: FRAME System, FRAME Executive, our FRAME support libraries, etc... +pub mod constants { + use super::{RuntimeDbWeight, Weight}; + use crate::parameter_types; + + pub const WEIGHT_PER_SECOND: Weight = 1_000_000_000_000; + pub const WEIGHT_PER_MILLIS: Weight = WEIGHT_PER_SECOND / 1000; // 1_000_000_000 + pub const WEIGHT_PER_MICROS: Weight = WEIGHT_PER_MILLIS / 1000; // 1_000_000 + pub const WEIGHT_PER_NANOS: Weight = WEIGHT_PER_MICROS / 1000; // 1_000 + + parameter_types! { + /// Importing a block with 0 txs takes ~5 ms + pub const BlockExecutionWeight: Weight = 5 * WEIGHT_PER_MILLIS; + /// Executing 10,000 System remarks (no-op) txs takes ~1.26 seconds -> ~125 µs per tx + pub const ExtrinsicBaseWeight: Weight = 125 * WEIGHT_PER_MICROS; + /// By default, Substrate uses RocksDB, so this will be the weight used throughout + /// the runtime. + pub const RocksDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 25 * WEIGHT_PER_MICROS, // ~25 µs @ 200,000 items + write: 100 * WEIGHT_PER_MICROS, // ~100 µs @ 200,000 items + }; + /// ParityDB can be enabled with a feature flag, but is still experimental. These weights + /// are available for brave runtime engineers who may want to try this out as default. + pub const ParityDbWeight: RuntimeDbWeight = RuntimeDbWeight { + read: 8 * WEIGHT_PER_MICROS, // ~8 µs @ 200,000 items + write: 50 * WEIGHT_PER_MICROS, // ~50 µs @ 200,000 items + }; + } +} + /// Means of weighing some particular kind of data (`T`). pub trait WeighData { /// Weigh the data `T` given by `target`. When implementing this for a dispatchable, `T` will be diff --git a/frame/utility/src/lib.rs b/frame/utility/src/lib.rs index 4fa001177b4..1ff71af5359 100644 --- a/frame/utility/src/lib.rs +++ b/frame/utility/src/lib.rs @@ -205,16 +205,16 @@ mod weight_of { use super::*; /// - Base Weight: - /// - Create: 59.2 + 0.096 * S µs - /// - Approve: 42.27 + .116 * S µs - /// - Complete: 50.91 + .232 * S µs + /// - Create: 46.55 + 0.089 * S µs + /// - Approve: 34.03 + .112 * S µs + /// - Complete: 40.36 + .225 * S µs /// - DB Weight: /// - Reads: Multisig Storage, [Caller Account] /// - Writes: Multisig Storage, [Caller Account] /// - Plus Call Weight pub fn as_multi(other_sig_len: usize, call_weight: Weight) -> Weight { call_weight - .saturating_add(60_000_000) + .saturating_add(45_000_000) .saturating_add((other_sig_len as Weight).saturating_mul(250_000)) .saturating_add(T::DbWeight::get().reads_writes(1, 1)) } @@ -236,7 +236,7 @@ decl_module! { /// - `calls`: The calls to be dispatched from the same origin. /// /// # - /// - Base weight: 15.64 + .987 * c µs + /// - Base weight: 14.39 + .987 * c µs /// - Plus the sum of the weights of the `calls`. /// - Plus one additional event. (repeat read/write) /// # @@ -280,7 +280,7 @@ decl_module! { /// The dispatch origin for this call must be _Signed_. /// /// # - /// - Base weight: 2.863 µs + /// - Base weight: 2.861 µs /// - Plus the weight of the `call` /// # #[weight = FunctionOf( @@ -339,9 +339,9 @@ decl_module! { /// `MultisigDepositBase + threshold * MultisigDepositFactor`. /// ------------------------------- /// - Base Weight: - /// - Create: 59.2 + 0.096 * S µs - /// - Approve: 42.27 + .116 * S µs - /// - Complete: 50.91 + .232 * S µs + /// - Create: 46.55 + 0.089 * S µs + /// - Approve: 34.03 + .112 * S µs + /// - Complete: 40.36 + .225 * S µs /// - DB Weight: /// - Reads: Multisig Storage, [Caller Account] /// - Writes: Multisig Storage, [Caller Account] @@ -471,8 +471,8 @@ decl_module! { /// `MultisigDepositBase + threshold * MultisigDepositFactor`. /// ---------------------------------- /// - Base Weight: - /// - Create: 56.3 + 0.107 * S - /// - Approve: 39.25 + 0.121 * S + /// - Create: 44.71 + 0.088 * S + /// - Approve: 31.48 + 0.116 * S /// - DB Weight: /// - Read: Multisig Storage, [Caller Account] /// - Write: Multisig Storage, [Caller Account] @@ -480,7 +480,7 @@ decl_module! { #[weight = FunctionOf( |args: (&u16, &Vec, &Option>, &[u8; 32])| { T::DbWeight::get().reads_writes(1, 1) - .saturating_add(60_000_000) + .saturating_add(45_000_000) .saturating_add((args.1.len() as Weight).saturating_mul(120_000)) }, DispatchClass::Normal, @@ -554,7 +554,7 @@ decl_module! { /// - I/O: 1 read `O(S)`, one remove. /// - Storage: removes one item. /// ---------------------------------- - /// - Base Weight: 46.71 + 0.09 * S + /// - Base Weight: 37.6 + 0.084 * S /// - DB Weight: /// - Read: Multisig Storage, [Caller Account] /// - Write: Multisig Storage, [Caller Account] @@ -562,7 +562,7 @@ decl_module! { #[weight = FunctionOf( |args: (&u16, &Vec, &Timepoint, &[u8; 32])| { T::DbWeight::get().reads_writes(1, 1) - .saturating_add(50_000_000) + .saturating_add(40_000_000) .saturating_add((args.1.len() as Weight).saturating_mul(100_000)) }, DispatchClass::Normal, diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index 05aee08c319..db58d76c87c 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -194,11 +194,11 @@ decl_module! { /// - Reads: Vesting Storage, Balances Locks, [Sender Account] /// - Writes: Vesting Storage, Balances Locks, [Sender Account] /// - Benchmark: - /// - Unlocked: 56.1 + .098 * l µs (min square analysis) - /// - Locked: 54.37 + .254 * l µs (min square analysis) - /// - Using 60 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Unlocked: 48.76 + .048 * l µs (min square analysis) + /// - Locked: 44.43 + .284 * l µs (min square analysis) + /// - Using 50 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 60_000_000 + T::DbWeight::get().reads_writes(2, 2)] + #[weight = 50_000_000 + T::DbWeight::get().reads_writes(2, 2)] fn vest(origin) -> DispatchResult { let who = ensure_signed(origin)?; Self::update_lock(who) @@ -219,11 +219,11 @@ decl_module! { /// - Reads: Vesting Storage, Balances Locks, Target Account /// - Writes: Vesting Storage, Balances Locks, Target Account /// - Benchmark: - /// - Unlocked: 58.09 + .104 * l µs (min square analysis) - /// - Locked: 55.35 + .255 * l µs (min square analysis) - /// - Using 60 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Unlocked: 44.3 + .294 * l µs (min square analysis) + /// - Locked: 48.16 + .103 * l µs (min square analysis) + /// - Using 50 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 60_000_000 + T::DbWeight::get().reads_writes(3, 3)] + #[weight = 50_000_000 + T::DbWeight::get().reads_writes(3, 3)] fn vest_other(origin, target: ::Source) -> DispatchResult { ensure_signed(origin)?; Self::update_lock(T::Lookup::lookup(target)?) @@ -244,10 +244,10 @@ decl_module! { /// - DbWeight: 3 Reads, 3 Writes /// - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account] /// - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account] - /// - Benchmark: 111.4 + .345 * l µs (min square analysis) - /// - Using 115 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. + /// - Benchmark: 100.3 + .365 * l µs (min square analysis) + /// - Using 100 µs fixed. Assuming less than 50 locks on any user, else we may want factor in number of locks. /// # - #[weight = 115_000_000 + T::DbWeight::get().reads_writes(3, 3)] + #[weight = 100_000_000 + T::DbWeight::get().reads_writes(3, 3)] pub fn vested_transfer( origin, target: ::Source, -- GitLab From c0ccc24d02080ab4fbb2c65440327fc72acb6c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Mon, 4 May 2020 21:37:22 +0200 Subject: [PATCH 130/167] Expose GRANDPA round state through RPC (#5375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * grandpa: wire up basic RPC call * grandpa: make it compile against GRANDPA with expose round state * grandpa: use shared voter state to expose RPC endpoint * grandpa: restructure into nested structs * grandpa: return background rounds too * grandpa: return error when endpoint not ready * grandpa: collect grandpa rpc deps * grandpa: decide to use concrete AuthorityId in finality-grandpa-rpc * grandpa: remove unncessary type annotation * grandpa: move error code to const * grandpa: remove unnecessary WIP comment * grandpa: remove Id type parameter for SharedVoterState * grandpa: update tests to add shared_voter_state in parameters * grandpa: remove old deprecated test * grandpa: fix getting the correct set_id * grandpa: make SharedVoterState a struct * grandpa: wrap shared_voter_state in rpc_setup * grandpa: replace spaces with tabs * grandpa: limit RwLock write attempt to 1 sec * grandpa: add missing doc comments and remove some pub * Apply suggestions from code review Co-Authored-By: Tomasz Drwięga Co-Authored-By: Hernando Castano * grandpa: update function name call after change in finality-grandpa * grandpa: group pub use and only export voter::report * grandpa: add missing docs * grandpa: extract out structs used for json serialization * grandpa: stick to u32 for fields intended for js * grandpa: move Error type to its own file * grandpa: group pub use better * Apply code review suggestion Co-authored-by: Bastian Köcher * grandpa: use correct version of finality-granpda in rpc crate * grandpa: add back basic rpc unit test * grandpa: replace SharedVoterState::new() with empty() * node: cleanup grandpa::SharedVoterState usage in macro * grandpa: remove VoterState error variant * grandpa: enable missing futures compat feature * grandpa: fix typo in error variant * grandpa: remove test_utils * grandpa: allow mocking rpc handler components * grandpa: rename serialized to report in rpc module * grandpa: add proper test for RPC * grandpa: update to finality-grandpa v0.12.1 Co-authored-by: André Silva Co-authored-by: Demi Obenour Co-authored-by: Tomasz Drwięga Co-authored-by: Hernando Castano Co-authored-by: Bastian Köcher --- Cargo.lock | 25 ++- bin/node-template/node/Cargo.toml | 1 + bin/node-template/node/src/service.rs | 7 +- bin/node/cli/Cargo.toml | 1 + bin/node/cli/src/service.rs | 28 +++- bin/node/rpc/Cargo.toml | 2 + bin/node/rpc/src/lib.rs | 26 +++- client/finality-grandpa/Cargo.toml | 4 +- client/finality-grandpa/rpc/Cargo.toml | 22 +++ client/finality-grandpa/rpc/src/error.rs | 47 ++++++ client/finality-grandpa/rpc/src/lib.rs | 169 +++++++++++++++++++++ client/finality-grandpa/rpc/src/report.rs | 159 +++++++++++++++++++ client/finality-grandpa/src/authorities.rs | 6 +- client/finality-grandpa/src/lib.rs | 67 +++++++- client/finality-grandpa/src/tests.rs | 7 +- 15 files changed, 552 insertions(+), 19 deletions(-) create mode 100644 client/finality-grandpa/rpc/Cargo.toml create mode 100644 client/finality-grandpa/rpc/src/error.rs create mode 100644 client/finality-grandpa/rpc/src/lib.rs create mode 100644 client/finality-grandpa/rpc/src/report.rs diff --git a/Cargo.lock b/Cargo.lock index 8e8ef29b74e..45fc16bca77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1352,9 +1352,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d7907cc24468e29b5d3ea2097e78104492b6650c55f96af1f14e7915dc155ad" +checksum = "5ab32971efbe776e46bfbc34d5b662d8e1de51fd14e26a2eba522c0f3470fc0f" dependencies = [ "either", "futures 0.3.4", @@ -3447,6 +3447,7 @@ dependencies = [ "pallet-timestamp", "pallet-transaction-payment", "parity-scale-codec", + "parking_lot 0.10.2", "platforms", "rand 0.7.3", "regex", @@ -3565,6 +3566,8 @@ dependencies = [ "sc-consensus-babe", "sc-consensus-babe-rpc", "sc-consensus-epochs", + "sc-finality-grandpa", + "sc-finality-grandpa-rpc", "sc-keystore", "sp-api", "sp-blockchain", @@ -3660,6 +3663,7 @@ dependencies = [ "futures 0.3.4", "log", "node-template-runtime", + "parking_lot 0.10.2", "sc-basic-authorship", "sc-cli", "sc-client-api", @@ -6400,6 +6404,23 @@ dependencies = [ "tokio 0.2.18", ] +[[package]] +name = "sc-finality-grandpa-rpc" +version = "0.8.0-dev" +dependencies = [ + "derive_more", + "finality-grandpa", + "futures 0.3.4", + "jsonrpc-core", + "jsonrpc-core-client", + "jsonrpc-derive", + "log", + "sc-finality-grandpa", + "serde", + "serde_json", + "sp-core", +] + [[package]] name = "sc-informant" version = "0.8.0-dev" diff --git a/bin/node-template/node/Cargo.toml b/bin/node-template/node/Cargo.toml index e8111c7c3be..030672ee6ff 100644 --- a/bin/node-template/node/Cargo.toml +++ b/bin/node-template/node/Cargo.toml @@ -19,6 +19,7 @@ name = "node-template" futures = "0.3.4" log = "0.4.8" structopt = "0.3.8" +parking_lot = "0.10.0" sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } diff --git a/bin/node-template/node/src/service.rs b/bin/node-template/node/src/service.rs index a52406b5f52..36555b5a223 100644 --- a/bin/node-template/node/src/service.rs +++ b/bin/node-template/node/src/service.rs @@ -10,7 +10,9 @@ use sp_inherents::InherentDataProviders; use sc_executor::native_executor_instance; pub use sc_executor::NativeExecutor; use sp_consensus_aura::sr25519::{AuthorityPair as AuraPair}; -use sc_finality_grandpa::{self, FinalityProofProvider as GrandpaFinalityProofProvider, StorageAndProofProvider}; +use sc_finality_grandpa::{ + FinalityProofProvider as GrandpaFinalityProofProvider, StorageAndProofProvider, SharedVoterState, +}; // Our native executor instance. native_executor_instance!( @@ -157,7 +159,8 @@ pub fn new_full(config: Configuration) -> Result {{ use std::sync::Arc; + type RpcExtension = jsonrpc_core::IoHandler; let mut import_setup = None; + let mut rpc_setup = None; let inherent_data_providers = sp_inherents::InherentDataProviders::new(); let builder = sc_service::ServiceBuilder::new_full::< @@ -88,6 +92,10 @@ macro_rules! new_full_start { .with_rpc_extensions(|builder| -> std::result::Result { let babe_link = import_setup.as_ref().map(|s| &s.2) .expect("BabeLink is present for full services or set up failed; qed."); + let grandpa_link = import_setup.as_ref().map(|s| &s.1) + .expect("GRANDPA LinkHalf is present for full services or set up failed; qed."); + let shared_authority_set = grandpa_link.shared_authority_set(); + let shared_voter_state = grandpa::SharedVoterState::empty(); let deps = node_rpc::FullDeps { client: builder.client().clone(), pool: builder.pool(), @@ -97,12 +105,17 @@ macro_rules! new_full_start { keystore: builder.keystore(), babe_config: sc_consensus_babe::BabeLink::config(babe_link).clone(), shared_epoch_changes: sc_consensus_babe::BabeLink::epoch_changes(babe_link).clone() - } + }, + grandpa: node_rpc::GrandpaDeps { + shared_voter_state: shared_voter_state.clone(), + shared_authority_set: shared_authority_set.clone(), + }, }; + rpc_setup = Some((shared_voter_state)); Ok(node_rpc::create_full(deps)) })?; - (builder, import_setup, inherent_data_providers) + (builder, import_setup, inherent_data_providers, rpc_setup) }} } @@ -128,7 +141,8 @@ macro_rules! new_full { $config.disable_grandpa, ); - let (builder, mut import_setup, inherent_data_providers) = new_full_start!($config); + let (builder, mut import_setup, inherent_data_providers, mut rpc_setup) = + new_full_start!($config); let service = builder .with_finality_proof_provider(|client, backend| { @@ -139,7 +153,10 @@ macro_rules! new_full { .build()?; let (block_import, grandpa_link, babe_link) = import_setup.take() - .expect("Link Half and Block Import are present for Full Services or setup failed before. qed"); + .expect("Link Half and Block Import are present for Full Services or setup failed before. qed"); + + let shared_voter_state = rpc_setup.take() + .expect("The SharedVoterState is present for Full Services or setup failed before. qed"); ($with_startup_data)(&block_import, &babe_link); @@ -240,6 +257,7 @@ macro_rules! new_full { telemetry_on_connect: Some(service.telemetry_on_connect_stream()), voting_rule: grandpa::VotingRulesBuilder::default().build(), prometheus_registry: service.prometheus_registry(), + shared_voter_state, }; // the GRANDPA voter task is considered infallible, i.e. diff --git a/bin/node/rpc/Cargo.toml b/bin/node/rpc/Cargo.toml index 76d9998831c..f0c5fc250b0 100644 --- a/bin/node/rpc/Cargo.toml +++ b/bin/node/rpc/Cargo.toml @@ -28,3 +28,5 @@ sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } +sc-finality-grandpa-rpc = { version = "0.8.0-dev", path = "../../../client/finality-grandpa/rpc" } diff --git a/bin/node/rpc/src/lib.rs b/bin/node/rpc/src/lib.rs index 297dc129aea..114179c0047 100644 --- a/bin/node/rpc/src/lib.rs +++ b/bin/node/rpc/src/lib.rs @@ -31,7 +31,7 @@ use std::{sync::Arc, fmt}; -use node_primitives::{Block, BlockNumber, AccountId, Index, Balance}; +use node_primitives::{Block, BlockNumber, AccountId, Index, Balance, Hash}; use node_runtime::UncheckedExtrinsic; use sp_api::ProvideRuntimeApi; use sp_transaction_pool::TransactionPool; @@ -42,6 +42,8 @@ use sp_consensus_babe::BabeApi; use sc_consensus_epochs::SharedEpochChanges; use sc_consensus_babe::{Config, Epoch}; use sc_consensus_babe_rpc::BabeRPCHandler; +use sc_finality_grandpa::{SharedVoterState, SharedAuthoritySet}; +use sc_finality_grandpa_rpc::GrandpaRpcHandler; /// Light client extra dependencies. pub struct LightDeps { @@ -65,6 +67,14 @@ pub struct BabeDeps { pub keystore: KeyStorePtr, } +/// Extra dependencies for GRANDPA +pub struct GrandpaDeps { + /// Voting round info. + pub shared_voter_state: SharedVoterState, + /// Authority set info. + pub shared_authority_set: SharedAuthoritySet, +} + /// Full client dependencies. pub struct FullDeps { /// The client instance to use. @@ -75,6 +85,8 @@ pub struct FullDeps { pub select_chain: SC, /// BABE specific dependencies. pub babe: BabeDeps, + /// GRANDPA specific dependencies. + pub grandpa: GrandpaDeps, } /// Instantiate all Full RPC extensions. @@ -102,13 +114,18 @@ pub fn create_full( client, pool, select_chain, - babe + babe, + grandpa, } = deps; let BabeDeps { keystore, babe_config, shared_epoch_changes, } = babe; + let GrandpaDeps { + shared_voter_state, + shared_authority_set, + } = grandpa; io.extend_with( SystemApi::to_delegate(FullSystem::new(client.clone(), pool)) @@ -127,6 +144,11 @@ pub fn create_full( BabeRPCHandler::new(client, shared_epoch_changes, keystore, babe_config, select_chain) ) ); + io.extend_with( + sc_finality_grandpa_rpc::GrandpaApi::to_delegate( + GrandpaRpcHandler::new(shared_authority_set, shared_voter_state) + ) + ); io } diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index 04c793b58e3..97dafc3d46b 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -42,11 +42,11 @@ sp-finality-tracker = { version = "2.0.0-dev", path = "../../primitives/finality sp-finality-grandpa = { version = "2.0.0-dev", path = "../../primitives/finality-grandpa" } prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -finality-grandpa = { version = "0.12.0", features = ["derive-codec"] } +finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } pin-project = "0.4.6" [dev-dependencies] -finality-grandpa = { version = "0.12.0", features = ["derive-codec", "test-helpers"] } +finality-grandpa = { version = "0.12.1", features = ["derive-codec", "test-helpers"] } sc-network = { version = "0.8.0-dev", path = "../network" } sc-network-test = { version = "0.8.0-dev", path = "../network/test" } sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } diff --git a/client/finality-grandpa/rpc/Cargo.toml b/client/finality-grandpa/rpc/Cargo.toml new file mode 100644 index 00000000000..f0c3580fe6e --- /dev/null +++ b/client/finality-grandpa/rpc/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "sc-finality-grandpa-rpc" +version = "0.8.0-dev" +authors = ["Parity Technologies "] +description = "RPC extensions for the GRANDPA finality gadget" +edition = "2018" +license = "GPL-3.0" + +[dependencies] +sc-finality-grandpa = { version = "0.8.0-dev", path = "../" } +finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } +jsonrpc-core = "14.0.3" +jsonrpc-core-client = "14.0.3" +jsonrpc-derive = "14.0.3" +futures = { version = "0.3.4", features = ["compat"] } +serde = { version = "1.0.105", features = ["derive"] } +serde_json = "1.0.50" +log = "0.4.8" +derive_more = "0.99.2" + +[dev-dependencies] +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } diff --git a/client/finality-grandpa/rpc/src/error.rs b/client/finality-grandpa/rpc/src/error.rs new file mode 100644 index 00000000000..2a5e6955e5e --- /dev/null +++ b/client/finality-grandpa/rpc/src/error.rs @@ -0,0 +1,47 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use crate::NOT_READY_ERROR_CODE; + +#[derive(derive_more::Display, derive_more::From)] +/// Top-level error type for the RPC handler +pub enum Error { + /// The GRANDPA RPC endpoint is not ready. + #[display(fmt = "GRANDPA RPC endpoint not ready")] + EndpointNotReady, + /// GRANDPA reports the authority set id to be larger than 32-bits. + #[display(fmt = "GRANDPA reports authority set id unreasonably large")] + AuthoritySetIdReportedAsUnreasonablyLarge, + /// GRANDPA reports voter state with round id or weights larger than 32-bits. + #[display(fmt = "GRANDPA reports voter state as unreasonably large")] + VoterStateReportsUnreasonablyLargeNumbers, +} + +impl From for jsonrpc_core::Error { + fn from(error: Error) -> Self { + jsonrpc_core::Error { + message: format!("{}", error).into(), + code: jsonrpc_core::ErrorCode::ServerError(NOT_READY_ERROR_CODE), + data: None, + } + } +} + +impl From for Error { + fn from(_error: std::num::TryFromIntError) -> Self { + Error::VoterStateReportsUnreasonablyLargeNumbers + } +} diff --git a/client/finality-grandpa/rpc/src/lib.rs b/client/finality-grandpa/rpc/src/lib.rs new file mode 100644 index 00000000000..e62bcf85b68 --- /dev/null +++ b/client/finality-grandpa/rpc/src/lib.rs @@ -0,0 +1,169 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! RPC API for GRANDPA. +#![warn(missing_docs)] + +use futures::{FutureExt, TryFutureExt}; +use jsonrpc_derive::rpc; + +mod error; +mod report; + +use report::{ReportAuthoritySet, ReportVoterState, ReportedRoundStates}; + +/// Returned when Grandpa RPC endpoint is not ready. +pub const NOT_READY_ERROR_CODE: i64 = 1; + +type FutureResult = + Box + Send>; + +/// Provides RPC methods for interacting with GRANDPA. +#[rpc] +pub trait GrandpaApi { + /// Returns the state of the current best round state as well as the + /// ongoing background rounds. + #[rpc(name = "grandpa_roundState")] + fn round_state(&self) -> FutureResult; +} + +/// Implements the GrandpaApi RPC trait for interacting with GRANDPA. +pub struct GrandpaRpcHandler { + authority_set: AuthoritySet, + voter_state: VoterState, +} + +impl GrandpaRpcHandler { + /// Creates a new GrandpaRpcHander instance. + pub fn new(authority_set: AuthoritySet, voter_state: VoterState) -> Self { + Self { + authority_set, + voter_state, + } + } +} + +impl GrandpaApi for GrandpaRpcHandler +where + VoterState: ReportVoterState + Send + Sync + 'static, + AuthoritySet: ReportAuthoritySet + Send + Sync + 'static, +{ + fn round_state(&self) -> FutureResult { + let round_states = ReportedRoundStates::from(&self.authority_set, &self.voter_state); + let future = async move { round_states }.boxed(); + Box::new(future.map_err(jsonrpc_core::Error::from).compat()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use jsonrpc_core::IoHandler; + use sc_finality_grandpa::{report, AuthorityId}; + use sp_core::crypto::Public; + use std::{collections::HashSet, convert::TryInto}; + + struct TestAuthoritySet; + struct TestVoterState; + struct EmptyVoterState; + + fn voters() -> HashSet { + let voter_id_1 = AuthorityId::from_slice(&[1; 32]); + let voter_id_2 = AuthorityId::from_slice(&[2; 32]); + + vec![voter_id_1, voter_id_2].into_iter().collect() + } + + impl ReportAuthoritySet for TestAuthoritySet { + fn get(&self) -> (u64, HashSet) { + (1, voters()) + } + } + + impl ReportVoterState for EmptyVoterState { + fn get(&self) -> Option> { + None + } + } + + impl ReportVoterState for TestVoterState { + fn get(&self) -> Option> { + let voter_id_1 = AuthorityId::from_slice(&[1; 32]); + let voters_best: HashSet<_> = vec![voter_id_1].into_iter().collect(); + + let best_round_state = report::RoundState { + total_weight: 100_u64.try_into().unwrap(), + threshold_weight: 67_u64.try_into().unwrap(), + prevote_current_weight: 50.into(), + prevote_ids: voters_best, + precommit_current_weight: 0.into(), + precommit_ids: HashSet::new(), + }; + + let past_round_state = report::RoundState { + total_weight: 100_u64.try_into().unwrap(), + threshold_weight: 67_u64.try_into().unwrap(), + prevote_current_weight: 100.into(), + prevote_ids: voters(), + precommit_current_weight: 100.into(), + precommit_ids: voters(), + }; + + let background_rounds = vec![(1, past_round_state)].into_iter().collect(); + + Some(report::VoterState { + background_rounds, + best_round: (2, best_round_state), + }) + } + } + + #[test] + fn uninitialized_rpc_handler() { + let handler = GrandpaRpcHandler::new(TestAuthoritySet, EmptyVoterState); + let mut io = IoHandler::new(); + io.extend_with(GrandpaApi::to_delegate(handler)); + + let request = r#"{"jsonrpc":"2.0","method":"grandpa_roundState","params":[],"id":1}"#; + let response = r#"{"jsonrpc":"2.0","error":{"code":1,"message":"GRANDPA RPC endpoint not ready"},"id":1}"#; + + assert_eq!(Some(response.into()), io.handle_request_sync(request)); + } + + #[test] + fn working_rpc_handler() { + let handler = GrandpaRpcHandler::new(TestAuthoritySet, TestVoterState); + let mut io = IoHandler::new(); + io.extend_with(GrandpaApi::to_delegate(handler)); + + let request = r#"{"jsonrpc":"2.0","method":"grandpa_roundState","params":[],"id":1}"#; + let response = "{\"jsonrpc\":\"2.0\",\"result\":{\ + \"background\":[{\ + \"precommits\":{\"currentWeight\":100,\"missing\":[]},\ + \"prevotes\":{\"currentWeight\":100,\"missing\":[]},\ + \"round\":1,\"thresholdWeight\":67,\"totalWeight\":100\ + }],\ + \"best\":{\ + \"precommits\":{\"currentWeight\":0,\"missing\":[\"5C62Ck4UrFPiBtoCmeSrgF7x9yv9mn38446dhCpsi2mLHiFT\",\"5C7LYpP2ZH3tpKbvVvwiVe54AapxErdPBbvkYhe6y9ZBkqWt\"]},\ + \"prevotes\":{\"currentWeight\":50,\"missing\":[\"5C7LYpP2ZH3tpKbvVvwiVe54AapxErdPBbvkYhe6y9ZBkqWt\"]},\ + \"round\":2,\"thresholdWeight\":67,\"totalWeight\":100\ + },\ + \"setId\":1\ + },\"id\":1}"; + + assert_eq!(io.handle_request_sync(request), Some(response.into())); + } +} diff --git a/client/finality-grandpa/rpc/src/report.rs b/client/finality-grandpa/rpc/src/report.rs new file mode 100644 index 00000000000..029fd4b46df --- /dev/null +++ b/client/finality-grandpa/rpc/src/report.rs @@ -0,0 +1,159 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +use std::{ + collections::{BTreeSet, HashSet}, + fmt::Debug, + ops::Add, +}; + +use serde::{Deserialize, Serialize}; + +use sc_finality_grandpa::{report, AuthorityId, SharedAuthoritySet, SharedVoterState}; + +use crate::error::Error; + +/// Utility trait to get reporting data for the current GRANDPA authority set. +pub trait ReportAuthoritySet { + fn get(&self) -> (u64, HashSet); +} + +/// Utility trait to get reporting data for the current GRANDPA voter state. +pub trait ReportVoterState { + fn get(&self) -> Option>; +} + +impl ReportAuthoritySet for SharedAuthoritySet +where + N: Add + Ord + Clone + Debug, + H: Clone + Debug + Eq, +{ + fn get(&self) -> (u64, HashSet) { + let current_voters: HashSet = self + .current_authorities() + .iter() + .map(|p| p.0.clone()) + .collect(); + + (self.set_id(), current_voters) + } +} + +impl ReportVoterState for SharedVoterState { + fn get(&self) -> Option> { + self.voter_state() + } +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct Prevotes { + current_weight: u32, + missing: BTreeSet, +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct Precommits { + current_weight: u32, + missing: BTreeSet, +} + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct RoundState { + round: u32, + total_weight: u32, + threshold_weight: u32, + prevotes: Prevotes, + precommits: Precommits, +} + +impl RoundState { + fn from( + round: u64, + round_state: &report::RoundState, + voters: &HashSet, + ) -> Result { + use std::convert::TryInto; + + let prevotes = &round_state.prevote_ids; + let missing_prevotes = voters.difference(&prevotes).cloned().collect(); + + let precommits = &round_state.precommit_ids; + let missing_precommits = voters.difference(&precommits).cloned().collect(); + + Ok(Self { + round: round.try_into()?, + total_weight: round_state.total_weight.get().try_into()?, + threshold_weight: round_state.threshold_weight.get().try_into()?, + prevotes: Prevotes { + current_weight: round_state.prevote_current_weight.0.try_into()?, + missing: missing_prevotes, + }, + precommits: Precommits { + current_weight: round_state.precommit_current_weight.0.try_into()?, + missing: missing_precommits, + }, + }) + } +} + +/// The state of the current best round, as well as the background rounds in a +/// form suitable for serialization. +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct ReportedRoundStates { + set_id: u32, + best: RoundState, + background: Vec, +} + +impl ReportedRoundStates { + pub fn from( + authority_set: &AuthoritySet, + voter_state: &VoterState, + ) -> Result + where + AuthoritySet: ReportAuthoritySet, + VoterState: ReportVoterState, + { + use std::convert::TryFrom; + + let voter_state = voter_state.get().ok_or(Error::EndpointNotReady)?; + + let (set_id, current_voters) = authority_set.get(); + let set_id = + u32::try_from(set_id).map_err(|_| Error::AuthoritySetIdReportedAsUnreasonablyLarge)?; + + let best = { + let (round, round_state) = voter_state.best_round; + RoundState::from(round, &round_state, ¤t_voters)? + }; + + let background = voter_state + .background_rounds + .iter() + .map(|(round, round_state)| RoundState::from(*round, round_state, ¤t_voters)) + .collect::, Error>>()?; + + Ok(Self { + set_id, + best, + background, + }) + } +} diff --git a/client/finality-grandpa/src/authorities.rs b/client/finality-grandpa/src/authorities.rs index 000c303af71..cb767574301 100644 --- a/client/finality-grandpa/src/authorities.rs +++ b/client/finality-grandpa/src/authorities.rs @@ -39,7 +39,7 @@ pub enum Error { } /// A shared authority set. -pub(crate) struct SharedAuthoritySet { +pub struct SharedAuthoritySet { inner: Arc>>, } @@ -67,12 +67,12 @@ where N: Add + Ord + Clone + Debug, } /// Get the current set ID. This is incremented every time the set changes. - pub(crate) fn set_id(&self) -> u64 { + pub fn set_id(&self) -> u64 { self.inner.read().set_id } /// Get the current authorities and their weights (for the current set ID). - pub(crate) fn current_authorities(&self) -> VoterSet { + pub fn current_authorities(&self) -> VoterSet { VoterSet::new(self.inner.read().current_authorities.iter().cloned()).expect( "current_authorities is non-empty and weights are non-zero; \ constructor and all mutating operations on `AuthoritySet` ensure this; \ diff --git a/client/finality-grandpa/src/lib.rs b/client/finality-grandpa/src/lib.rs index be00519f893..9b64be895d8 100644 --- a/client/finality-grandpa/src/lib.rs +++ b/client/finality-grandpa/src/lib.rs @@ -52,6 +52,8 @@ //! or prune any signaled changes based on whether the signaling block is //! included in the newly-finalized chain. +#![warn(missing_docs)] + use futures::prelude::*; use futures::StreamExt; use log::{debug, info}; @@ -72,6 +74,7 @@ use sp_core::Pair; use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedReceiver}; use sc_telemetry::{telemetry, CONSENSUS_INFO, CONSENSUS_DEBUG}; use serde_json; +use parking_lot::RwLock; use sp_finality_tracker; @@ -114,12 +117,14 @@ mod observer; mod until_imported; mod voting_rule; +pub use authorities::SharedAuthoritySet; pub use finality_proof::{FinalityProofProvider, StorageAndProofProvider}; pub use justification::GrandpaJustification; pub use light_import::light_block_import; pub use voting_rule::{ BeforeBestBlockBy, ThreeQuartersOfTheUnfinalizedChain, VotingRule, VotingRulesBuilder }; +pub use finality_grandpa::voter::report; use aux_schema::PersistentData; use environment::{Environment, VoterSetState}; @@ -203,7 +208,44 @@ type CommunicationOutH = finality_grandpa::voter::CommunicationOut< AuthorityId, >; -/// Configuration for the GRANDPA service. +/// Shared voter state for querying. +pub struct SharedVoterState { + inner: Arc + Sync + Send>>>>, +} + +impl SharedVoterState { + /// Create a new empty `SharedVoterState` instance. + pub fn empty() -> Self { + Self { + inner: Arc::new(RwLock::new(None)), + } + } + + fn reset( + &self, + voter_state: Box + Sync + Send>, + ) -> Option<()> { + let mut shared_voter_state = self + .inner + .try_write_for(Duration::from_secs(1))?; + + *shared_voter_state = Some(voter_state); + Some(()) + } + + /// Get the inner `VoterState` instance. + pub fn voter_state(&self) -> Option> { + self.inner.read().as_ref().map(|vs| vs.get()) + } +} + +impl Clone for SharedVoterState { + fn clone(&self) -> Self { + SharedVoterState { inner: self.inner.clone() } + } +} + +/// Configuration for the GRANDPA service #[derive(Clone)] pub struct Config { /// The expected duration for a message to be gossiped across the network. @@ -392,6 +434,7 @@ impl fmt::Display for CommandOrError { } } +/// Link between the block importer and the background voter. pub struct LinkHalf { client: Arc, select_chain: SC, @@ -399,6 +442,13 @@ pub struct LinkHalf { voter_commands_rx: TracingUnboundedReceiver>>, } +impl LinkHalf { + /// Get the shared authority set. + pub fn shared_authority_set(&self) -> &SharedAuthoritySet> { + &self.persistent_data.authority_set + } +} + /// Provider for the Grandpa authority set configured on the genesis block. pub trait GenesisAuthoritySetProvider { /// Get the authority set at the genesis block. @@ -620,6 +670,8 @@ pub struct GrandpaParams { pub voting_rule: VR, /// The prometheus metrics registry. pub prometheus_registry: Option, + /// The voter state is exposed at an RPC endpoint. + pub shared_voter_state: SharedVoterState, } /// Run a GRANDPA voter as a task. Provide configuration and a link to a @@ -644,6 +696,7 @@ pub fn run_grandpa_voter( telemetry_on_connect, voting_rule, prometheus_registry, + shared_voter_state, } = grandpa_params; // NOTE: we have recently removed `run_grandpa_observer` from the public @@ -704,6 +757,7 @@ pub fn run_grandpa_voter( persistent_data, voter_commands_rx, prometheus_registry, + shared_voter_state, ); let voter_work = voter_work @@ -734,6 +788,7 @@ impl Metrics { #[must_use] struct VoterWork, SC, VR> { voter: Pin>>> + Send>>, + shared_voter_state: SharedVoterState, env: Arc>, voter_commands_rx: TracingUnboundedReceiver>>, network: NetworkBridge, @@ -761,6 +816,7 @@ where persistent_data: PersistentData, voter_commands_rx: TracingUnboundedReceiver>>, prometheus_registry: Option, + shared_voter_state: SharedVoterState, ) -> Self { let metrics = match prometheus_registry.as_ref().map(Metrics::register) { Some(Ok(metrics)) => Some(metrics), @@ -791,6 +847,7 @@ where // `voter` is set to a temporary value and replaced below when // calling `rebuild_voter`. voter: Box::pin(future::pending()), + shared_voter_state, env, voter_commands_rx, network, @@ -858,6 +915,14 @@ where last_finalized, ); + // Repoint shared_voter_state so that the RPC endpoint can query the state + if let None = self.shared_voter_state.reset(voter.voter_state()) { + info!(target: "afg", + "Timed out trying to update shared GRANDPA voter state. \ + RPC endpoints may return stale data." + ); + } + self.voter = Box::pin(voter); }, VoterSetState::Paused { .. } => diff --git a/client/finality-grandpa/src/tests.rs b/client/finality-grandpa/src/tests.rs index 5d1c5b2c16c..5eafb3c15de 100644 --- a/client/finality-grandpa/src/tests.rs +++ b/client/finality-grandpa/src/tests.rs @@ -295,8 +295,6 @@ fn run_to_completion_with( ) -> u64 where F: FnOnce(Handle) -> Option>>> { - use parking_lot::RwLock; - let mut wait_for = Vec::new(); let highest_finalized = Arc::new(RwLock::new(0)); @@ -354,6 +352,7 @@ fn run_to_completion_with( telemetry_on_connect: None, voting_rule: (), prometheus_registry: None, + shared_voter_state: SharedVoterState::empty(), }; let voter = run_grandpa_voter(grandpa_params).expect("all in order with client and network"); @@ -485,6 +484,7 @@ fn finalize_3_voters_1_full_observer() { telemetry_on_connect: None, voting_rule: (), prometheus_registry: None, + shared_voter_state: SharedVoterState::empty(), }; voters.push(run_grandpa_voter(grandpa_params).expect("all in order with client and network")); @@ -648,6 +648,7 @@ fn transition_3_voters_twice_1_full_observer() { telemetry_on_connect: None, voting_rule: (), prometheus_registry: None, + shared_voter_state: SharedVoterState::empty(), }; let voter = run_grandpa_voter(grandpa_params).expect("all in order with client and network"); @@ -1072,6 +1073,7 @@ fn voter_persists_its_votes() { telemetry_on_connect: None, voting_rule: VotingRulesBuilder::default().build(), prometheus_registry: None, + shared_voter_state: SharedVoterState::empty(), }; let voter = run_grandpa_voter(grandpa_params) @@ -1417,6 +1419,7 @@ fn voter_catches_up_to_latest_round_when_behind() { telemetry_on_connect: None, voting_rule: (), prometheus_registry: None, + shared_voter_state: SharedVoterState::empty(), }; Box::pin(run_grandpa_voter(grandpa_params).expect("all in order with client and network")) -- GitLab From 9f51b41f4c4df11a9d190152b2807bf57bdcd60a Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Tue, 5 May 2020 13:50:42 +0200 Subject: [PATCH 131/167] Fix Reduce Equalise order in offhchain phragmen (#5892) --- frame/staking/src/lib.rs | 3 ++ frame/staking/src/mock.rs | 16 +++++++++-- frame/staking/src/offchain_election.rs | 10 +++---- frame/staking/src/tests.rs | 40 +++++++++++++------------- primitives/phragmen/src/lib.rs | 6 ++-- 5 files changed, 44 insertions(+), 31 deletions(-) diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index ca3fb51ecb7..489070dca02 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -2338,6 +2338,9 @@ impl Module { // candidates. let snapshot_length = >::decode_len() .map_err(|_| Error::::SnapshotUnavailable)?; + + // check the winner length only here and when we know the length of the snapshot validators + // length. let desired_winners = Self::validator_count().min(snapshot_length as u32); ensure!(winners.len() as u32 == desired_winners, Error::::PhragmenBogusWinnerCount); diff --git a/frame/staking/src/mock.rs b/frame/staking/src/mock.rs index a34f3425564..21400b0b8d4 100644 --- a/frame/staking/src/mock.rs +++ b/frame/staking/src/mock.rs @@ -834,7 +834,7 @@ pub(crate) fn horrible_phragmen_with_post_processing( // Ensure that this result is worse than seq-phragmen. Otherwise, it should not have been used // for testing. let score = { - let (_, _, better_score) = prepare_submission_with(true, |_| {}); + let (_, _, better_score) = prepare_submission_with(true, 0, |_| {}); let support = build_support_map::(&winners, &staked_assignment).0; let score = evaluate_support(&support); @@ -875,6 +875,7 @@ pub(crate) fn horrible_phragmen_with_post_processing( // cannot do it since we want to have `tweak` injected into the process. pub(crate) fn prepare_submission_with( do_reduce: bool, + iterations: usize, tweak: impl FnOnce(&mut Vec>), ) -> (CompactAssignments, Vec, PhragmenScore) { // run phragmen on the default stuff. @@ -882,14 +883,25 @@ pub(crate) fn prepare_submission_with( winners, assignments, } = Staking::do_phragmen::().unwrap(); - let winners = winners.into_iter().map(|(w, _)| w).collect::>(); + let winners = sp_phragmen::to_without_backing(winners); let stake_of = |who: &AccountId| -> VoteWeight { >::convert( Staking::slashable_balance_of(&who) ) }; + let mut staked = sp_phragmen::assignment_ratio_to_staked(assignments, stake_of); + let (mut support_map, _) = build_support_map::(&winners, &staked); + + if iterations > 0 { + sp_phragmen::equalize( + &mut staked, + &mut support_map, + Zero::zero(), + iterations, + ); + } // apply custom tweaks. awesome for testing. tweak(&mut staked); diff --git a/frame/staking/src/offchain_election.rs b/frame/staking/src/offchain_election.rs index 572703f895e..25686383193 100644 --- a/frame/staking/src/offchain_election.rs +++ b/frame/staking/src/offchain_election.rs @@ -168,13 +168,7 @@ pub fn prepare_submission( >::slashable_balance_of_vote_weight, ); - // reduce - if do_reduce { - reduce(&mut staked); - } - let (mut support_map, _) = build_support_map::(&winners, &staked); - // equalize a random number of times. let iterations_executed = match T::MaxIterations::get() { 0 => { @@ -194,6 +188,10 @@ pub fn prepare_submission( } }; + // reduce + if do_reduce { + reduce(&mut staked); + } // Convert back to ratio assignment. This takes less space. let low_accuracy_assignment = sp_phragmen::assignment_staked_to_ratio(staked); diff --git a/frame/staking/src/tests.rs b/frame/staking/src/tests.rs index f3dddc87ed7..73fcb6c2afe 100644 --- a/frame/staking/src/tests.rs +++ b/frame/staking/src/tests.rs @@ -2917,7 +2917,7 @@ mod offchain_phragmen { assert_eq!(Staking::era_election_status(), ElectionStatus::Open(12)); assert!(Staking::snapshot_validators().is_some()); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_ok!(Staking::submit_election_solution( Origin::signed(10), winners, @@ -2960,7 +2960,7 @@ mod offchain_phragmen { run_to_block(14); assert_eq!(Staking::era_election_status(), ElectionStatus::Open(12)); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_ok!(Staking::submit_election_solution( Origin::signed(10), winners, @@ -3007,7 +3007,7 @@ mod offchain_phragmen { // create all the indices just to build the solution. Staking::create_stakers_snapshot(); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); Staking::kill_stakers_snapshot(); assert_noop!( @@ -3036,7 +3036,7 @@ mod offchain_phragmen { run_to_block(12); // a good solution - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_ok!(Staking::submit_election_solution( Origin::signed(10), winners, @@ -3083,7 +3083,7 @@ mod offchain_phragmen { )); // a better solution - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_ok!(Staking::submit_election_solution( Origin::signed(10), winners, @@ -3189,7 +3189,7 @@ mod offchain_phragmen { ext.execute_with(|| { run_to_block(12); // put a good solution on-chain - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_ok!(Staking::submit_election_solution( Origin::signed(10), winners, @@ -3235,7 +3235,7 @@ mod offchain_phragmen { run_to_block(12); ValidatorCount::put(3); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); ValidatorCount::put(4); assert_eq!(winners.len(), 3); @@ -3266,7 +3266,7 @@ mod offchain_phragmen { run_to_block(12); ValidatorCount::put(3); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); ValidatorCount::put(4); assert_eq!(winners.len(), 3); @@ -3296,7 +3296,7 @@ mod offchain_phragmen { build_offchain_phragmen_test_ext(); run_to_block(12); - let (compact, winners, score) = prepare_submission_with(true, |_| {}); + let (compact, winners, score) = prepare_submission_with(true, 2, |_| {}); assert_eq!(winners.len(), 4); @@ -3325,7 +3325,7 @@ mod offchain_phragmen { assert_eq!(Staking::snapshot_nominators().unwrap().len(), 5 + 4); assert_eq!(Staking::snapshot_validators().unwrap().len(), 4); - let (mut compact, winners, score) = prepare_submission_with(true, |_| {}); + let (mut compact, winners, score) = prepare_submission_with(true, 2, |_| {}); // index 9 doesn't exist. compact.votes1.push((9, 2)); @@ -3358,7 +3358,7 @@ mod offchain_phragmen { assert_eq!(Staking::snapshot_nominators().unwrap().len(), 5 + 4); assert_eq!(Staking::snapshot_validators().unwrap().len(), 4); - let (mut compact, winners, score) = prepare_submission_with(true, |_| {}); + let (mut compact, winners, score) = prepare_submission_with(true, 2, |_| {}); // index 4 doesn't exist. compact.votes1.push((3, 4)); @@ -3391,7 +3391,7 @@ mod offchain_phragmen { assert_eq!(Staking::snapshot_nominators().unwrap().len(), 5 + 4); assert_eq!(Staking::snapshot_validators().unwrap().len(), 4); - let (compact, _, score) = prepare_submission_with(true, |_| {}); + let (compact, _, score) = prepare_submission_with(true, 2, |_| {}); // index 4 doesn't exist. let winners = vec![0, 1, 2, 4]; @@ -3424,7 +3424,7 @@ mod offchain_phragmen { assert_eq!(Staking::snapshot_nominators().unwrap().len(), 5 + 4); assert_eq!(Staking::snapshot_validators().unwrap().len(), 4); - let (compact, winners, score) = prepare_submission_with(true, |a| { + let (compact, winners, score) = prepare_submission_with(true, 2, |a| { a.iter_mut() .find(|x| x.who == 5) // all 3 cannot be among the winners. Although, all of them are validator @@ -3457,7 +3457,7 @@ mod offchain_phragmen { build_offchain_phragmen_test_ext(); run_to_block(12); - let (compact, winners, score) = prepare_submission_with(true, |a| { + let (compact, winners, score) = prepare_submission_with(true, 2, |a| { // mutate a self vote to target someone else. That someone else is still among the // winners a.iter_mut().find(|x| x.who == 11).map(|x| { @@ -3493,7 +3493,7 @@ mod offchain_phragmen { build_offchain_phragmen_test_ext(); run_to_block(12); - let (compact, winners, score) = prepare_submission_with(true, |a| { + let (compact, winners, score) = prepare_submission_with(true, 2, |a| { // Remove the self vote. a.retain(|x| x.who != 11); // add is as a new double vote @@ -3531,7 +3531,7 @@ mod offchain_phragmen { // Note: we don't reduce here to be able to tweak votes3. votes3 will vanish if you // reduce. - let (mut compact, winners, score) = prepare_submission_with(false, |_| {}); + let (mut compact, winners, score) = prepare_submission_with(false, 0, |_| {}); if let Some(c) = compact.votes3.iter_mut().find(|x| x.0 == 0) { // by default it should have been (0, [(2, 33%), (1, 33%)], 0) @@ -3573,7 +3573,7 @@ mod offchain_phragmen { build_offchain_phragmen_test_ext(); run_to_block(12); - let (compact, winners, score) = prepare_submission_with(false, |a| { + let (compact, winners, score) = prepare_submission_with(false, 0, |a| { // 3 only voted for 20 and 40. We add a fake vote to 30. The stake sum is still // correctly 100. a.iter_mut() @@ -3635,7 +3635,7 @@ mod offchain_phragmen { run_to_block(32); // a solution that has been prepared after the slash. - let (compact, winners, score) = prepare_submission_with(false, |a| { + let (compact, winners, score) = prepare_submission_with(false, 0, |a| { // no one is allowed to vote for 10, except for itself. a.into_iter() .filter(|s| s.who != 11) @@ -3654,7 +3654,7 @@ mod offchain_phragmen { )); // a wrong solution. - let (compact, winners, score) = prepare_submission_with(false, |a| { + let (compact, winners, score) = prepare_submission_with(false, 0, |a| { // add back the vote that has been filtered out. a.push(StakedAssignment { who: 1, @@ -3688,7 +3688,7 @@ mod offchain_phragmen { build_offchain_phragmen_test_ext(); run_to_block(12); - let (compact, winners, mut score) = prepare_submission_with(true, |_| {}); + let (compact, winners, mut score) = prepare_submission_with(true, 2, |_| {}); score[0] += 1; assert_noop!( diff --git a/primitives/phragmen/src/lib.rs b/primitives/phragmen/src/lib.rs index cf972eb1ed7..9aaa96150ff 100644 --- a/primitives/phragmen/src/lib.rs +++ b/primitives/phragmen/src/lib.rs @@ -599,11 +599,11 @@ pub fn evaluate_support( ) -> PhragmenScore { let mut min_support = ExtendedBalance::max_value(); let mut sum: ExtendedBalance = Zero::zero(); - // NOTE: this will probably saturate but using big num makes it even slower. We'll have to see. - // This must run on chain.. + // NOTE: The third element might saturate but fine for now since this will run on-chain and need + // to be fast. let mut sum_squared: ExtendedBalance = Zero::zero(); for (_, support) in support.iter() { - sum += support.total; + sum = sum.saturating_add(support.total); let squared = support.total.saturating_mul(support.total); sum_squared = sum_squared.saturating_add(squared); if support.total < min_support { -- GitLab From 318dc7afd7c7966af1355cb37b82f781ad5fe82a Mon Sep 17 00:00:00 2001 From: Marcio Diaz Date: Tue, 5 May 2020 13:54:51 +0200 Subject: [PATCH 132/167] Remove tx factory (#5890) * Remove tx factory files. * Remove unused imports. * Revert cargo lock. --- Cargo.lock | 19 --- Cargo.toml | 1 - bin/node/cli/Cargo.toml | 3 - bin/node/cli/src/cli.rs | 30 +--- bin/node/cli/src/command.rs | 52 +----- bin/node/cli/src/factory_impl.rs | 203 ------------------------ bin/node/cli/src/lib.rs | 2 - bin/node/cli/tests/factory.rs | 40 ----- bin/node/transaction-factory/Cargo.toml | 25 --- bin/node/transaction-factory/src/lib.rs | 167 ------------------- 10 files changed, 3 insertions(+), 539 deletions(-) delete mode 100644 bin/node/cli/src/factory_impl.rs delete mode 100644 bin/node/cli/tests/factory.rs delete mode 100644 bin/node/transaction-factory/Cargo.toml delete mode 100644 bin/node/transaction-factory/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 45fc16bca77..ecc37e9d158 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3437,7 +3437,6 @@ dependencies = [ "node-primitives", "node-rpc", "node-runtime", - "node-transaction-factory", "pallet-authority-discovery", "pallet-balances", "pallet-contracts", @@ -3763,24 +3762,6 @@ dependencies = [ "wabt", ] -[[package]] -name = "node-transaction-factory" -version = "0.8.0-dev" -dependencies = [ - "log", - "parity-scale-codec", - "sc-block-builder", - "sc-cli", - "sc-client-api", - "sc-service", - "sp-api", - "sp-block-builder", - "sp-blockchain", - "sp-consensus", - "sp-core", - "sp-runtime", -] - [[package]] name = "nodrop" version = "0.1.14" diff --git a/Cargo.toml b/Cargo.toml index 3882e96611e..d9ee8709d13 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,6 @@ members = [ "bin/node/rpc", "bin/node/runtime", "bin/node/testing", - "bin/node/transaction-factory", "bin/utils/subkey", "bin/utils/chain-spec-builder", "client/api", diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml index e1e93dea3f3..5b23a989cd0 100644 --- a/bin/node/cli/Cargo.toml +++ b/bin/node/cli/Cargo.toml @@ -97,7 +97,6 @@ node-executor = { version = "2.0.0-dev", path = "../executor" } # CLI-specific dependencies sc-cli = { version = "0.8.0-dev", optional = true, path = "../../../client/cli" } frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } -node-transaction-factory = { version = "0.8.0-dev", optional = true, path = "../transaction-factory" } node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } # WASM-specific dependencies @@ -126,7 +125,6 @@ platforms = "0.2.1" [build-dependencies] structopt = { version = "0.3.8", optional = true } -node-transaction-factory = { version = "0.8.0-dev", optional = true, path = "../transaction-factory" } node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } substrate-build-script-utils = { version = "2.0.0-dev", optional = true, path = "../../../utils/build-script-utils" } @@ -147,7 +145,6 @@ browser = [ cli = [ "node-executor/wasmi-errno", "node-inspect", - "node-transaction-factory", "sc-cli", "frame-benchmarking-cli", "sc-service/db", diff --git a/bin/node/cli/src/cli.rs b/bin/node/cli/src/cli.rs index 44b18fd7163..fa9a43ee684 100644 --- a/bin/node/cli/src/cli.rs +++ b/bin/node/cli/src/cli.rs @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use sc_cli::{ImportParams, RunCmd, SharedParams}; +use sc_cli::RunCmd; use structopt::StructOpt; /// An overarching CLI command definition. @@ -34,13 +34,6 @@ pub enum Subcommand { /// A set of base subcommands handled by `sc_cli`. #[structopt(flatten)] Base(sc_cli::Subcommand), - /// The custom factory subcommmand for manufacturing transactions. - #[structopt( - name = "factory", - about = "Manufactures num transactions from Alice to random accounts. \ - Only supported for development or local testnet." - )] - Factory(FactoryCmd), /// The custom inspect subcommmand for decoding blocks and extrinsics. #[structopt( @@ -53,24 +46,3 @@ pub enum Subcommand { #[structopt(name = "benchmark", about = "Benchmark runtime pallets.")] Benchmark(frame_benchmarking_cli::BenchmarkCmd), } - -/// The `factory` command used to generate transactions. -/// Please note: this command currently only works on an empty database! -#[derive(Debug, StructOpt, Clone)] -pub struct FactoryCmd { - /// Number of blocks to generate. - #[structopt(long = "blocks", default_value = "1")] - pub blocks: u32, - - /// Number of transactions to push per block. - #[structopt(long = "transactions", default_value = "8")] - pub transactions: u32, - - #[allow(missing_docs)] - #[structopt(flatten)] - pub shared_params: SharedParams, - - #[allow(missing_docs)] - #[structopt(flatten)] - pub import_params: ImportParams, -} diff --git a/bin/node/cli/src/command.rs b/bin/node/cli/src/command.rs index ab7d6ea65e8..91c6298c9fd 100644 --- a/bin/node/cli/src/command.rs +++ b/bin/node/cli/src/command.rs @@ -14,12 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -use crate::{chain_spec, factory_impl::FactoryState, service, Cli, FactoryCmd, Subcommand}; +use crate::{chain_spec, service, Cli, Subcommand}; use node_executor::Executor; use node_runtime::{Block, RuntimeApi}; -use node_transaction_factory::RuntimeAdapter; -use sc_cli::{CliConfiguration, ImportParams, Result, SharedParams, SubstrateCli}; -use sc_service::Configuration; +use sc_cli::{Result, SubstrateCli}; impl SubstrateCli for Cli { fn impl_name() -> &'static str { @@ -94,11 +92,6 @@ pub fn run() -> Result<()> { Ok(()) } } - Some(Subcommand::Factory(cmd)) => { - let runner = cli.create_runner(cmd)?; - - runner.sync_run(|config| cmd.run(config)) - } Some(Subcommand::Base(subcommand)) => { let runner = cli.create_runner(subcommand)?; @@ -106,44 +99,3 @@ pub fn run() -> Result<()> { } } } - -impl CliConfiguration for FactoryCmd { - fn shared_params(&self) -> &SharedParams { - &self.shared_params - } - - fn import_params(&self) -> Option<&ImportParams> { - Some(&self.import_params) - } -} - -impl FactoryCmd { - fn run(&self, config: Configuration) -> Result<()> { - match config.chain_spec.id() { - "dev" | "local" => {} - _ => return Err("Factory is only supported for development and local testnet.".into()), - } - - // Setup tracing. - if let Some(tracing_targets) = self.import_params.tracing_targets.as_ref() { - let subscriber = sc_tracing::ProfilingSubscriber::new( - self.import_params.tracing_receiver.into(), - tracing_targets, - ); - if let Err(e) = tracing::subscriber::set_global_default(subscriber) { - return Err(format!("Unable to set global default subscriber {}", e).into()); - } - } - - let factory_state = FactoryState::new(self.blocks, self.transactions); - - let service_builder = new_full_start!(config).0; - node_transaction_factory::factory( - factory_state, - service_builder.client(), - service_builder - .select_chain() - .expect("The select_chain is always initialized by new_full_start!; qed"), - ) - } -} diff --git a/bin/node/cli/src/factory_impl.rs b/bin/node/cli/src/factory_impl.rs deleted file mode 100644 index bc765353824..00000000000 --- a/bin/node/cli/src/factory_impl.rs +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright 2019-2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Implementation of the transaction factory trait, which enables -//! using the cli to manufacture transactions and distribute them -//! to accounts. - -use rand::{Rng, SeedableRng}; -use rand::rngs::StdRng; - -use codec::{Encode, Decode}; -use sp_keyring::sr25519::Keyring; -use node_runtime::{ - Call, CheckedExtrinsic, UncheckedExtrinsic, SignedExtra, BalancesCall, ExistentialDeposit, - MinimumPeriod -}; -use node_primitives::Signature; -use sp_core::{sr25519, crypto::Pair}; -use sp_runtime::{ - generic::Era, traits::{Block as BlockT, Header as HeaderT, SignedExtension, Verify, IdentifyAccount} -}; -use node_transaction_factory::RuntimeAdapter; -use sp_inherents::InherentData; -use sp_timestamp; -use sp_finality_tracker; - -type AccountPublic = ::Signer; - -pub struct FactoryState { - blocks: u32, - transactions: u32, - block_number: N, - index: u32, -} - -type Number = <::Header as HeaderT>::Number; - -impl FactoryState { - fn build_extra(index: node_primitives::Index, phase: u64) -> node_runtime::SignedExtra { - ( - frame_system::CheckVersion::new(), - frame_system::CheckGenesis::new(), - frame_system::CheckEra::from(Era::mortal(256, phase)), - frame_system::CheckNonce::from(index), - frame_system::CheckWeight::new(), - pallet_transaction_payment::ChargeTransactionPayment::from(0), - ) - } -} - -impl RuntimeAdapter for FactoryState { - type AccountId = node_primitives::AccountId; - type Balance = node_primitives::Balance; - type Block = node_primitives::Block; - type Phase = sp_runtime::generic::Phase; - type Secret = sr25519::Pair; - type Index = node_primitives::Index; - - type Number = Number; - - fn new( - blocks: u32, - transactions: u32, - ) -> FactoryState { - FactoryState { - blocks, - transactions, - block_number: 0, - index: 0, - } - } - - fn block_number(&self) -> u32 { - self.block_number - } - - fn blocks(&self) -> u32 { - self.blocks - } - - fn transactions(&self) -> u32 { - self.transactions - } - - fn set_block_number(&mut self, value: u32) { - self.block_number = value; - } - - fn transfer_extrinsic( - &mut self, - sender: &Self::AccountId, - key: &Self::Secret, - destination: &Self::AccountId, - amount: &Self::Balance, - version: u32, - genesis_hash: &::Hash, - prior_block_hash: &::Hash, - ) -> ::Extrinsic { - let phase = self.block_number() as Self::Phase; - let extra = Self::build_extra(self.index, phase); - self.index += 1; - - sign::(CheckedExtrinsic { - signed: Some((sender.clone(), extra)), - function: Call::Balances( - BalancesCall::transfer( - pallet_indices::address::Address::Id(destination.clone().into()), - (*amount).into() - ) - ) - }, key, (version, genesis_hash.clone(), prior_block_hash.clone(), (), (), ())) - } - - fn inherent_extrinsics(&self) -> InherentData { - let timestamp = (self.block_number as u64 + 1) * MinimumPeriod::get(); - - let mut inherent = InherentData::new(); - inherent.put_data(sp_timestamp::INHERENT_IDENTIFIER, ×tamp) - .expect("Failed putting timestamp inherent"); - inherent.put_data(sp_finality_tracker::INHERENT_IDENTIFIER, &self.block_number) - .expect("Failed putting finalized number inherent"); - inherent - } - - fn minimum_balance() -> Self::Balance { - ExistentialDeposit::get() - } - - fn master_account_id() -> Self::AccountId { - Keyring::Alice.to_account_id() - } - - fn master_account_secret() -> Self::Secret { - Keyring::Alice.pair() - } - - /// Generates a random `AccountId` from `seed`. - fn gen_random_account_id(seed: u32) -> Self::AccountId { - let pair: sr25519::Pair = sr25519::Pair::from_seed(&gen_seed_bytes(seed)); - AccountPublic::from(pair.public()).into_account() - } - - /// Generates a random `Secret` from `seed`. - fn gen_random_account_secret(seed: u32) -> Self::Secret { - let pair: sr25519::Pair = sr25519::Pair::from_seed(&gen_seed_bytes(seed)); - pair - } -} - -fn gen_seed_bytes(seed: u32) -> [u8; 32] { - let mut rng: StdRng = SeedableRng::seed_from_u64(seed as u64); - - let mut seed_bytes = [0u8; 32]; - for i in 0..32 { - seed_bytes[i] = rng.gen::(); - } - seed_bytes -} - -/// Creates an `UncheckedExtrinsic` containing the appropriate signature for -/// a `CheckedExtrinsics`. -fn sign( - xt: CheckedExtrinsic, - key: &sr25519::Pair, - additional_signed: ::AdditionalSigned, -) -> ::Extrinsic { - let s = match xt.signed { - Some((signed, extra)) => { - let payload = (xt.function, extra.clone(), additional_signed); - let signature = payload.using_encoded(|b| { - if b.len() > 256 { - key.sign(&sp_io::hashing::blake2_256(b)) - } else { - key.sign(b) - } - }).into(); - UncheckedExtrinsic { - signature: Some((pallet_indices::address::Address::Id(signed), signature, extra)), - function: payload.0, - } - } - None => UncheckedExtrinsic { - signature: None, - function: xt.function, - }, - }; - - let e = Encode::encode(&s); - Decode::decode(&mut &e[..]).expect("Failed to decode signed unchecked extrinsic") -} diff --git a/bin/node/cli/src/lib.rs b/bin/node/cli/src/lib.rs index 1e2c790bfa7..3c49f9176f1 100644 --- a/bin/node/cli/src/lib.rs +++ b/bin/node/cli/src/lib.rs @@ -37,8 +37,6 @@ mod browser; #[cfg(feature = "cli")] mod cli; #[cfg(feature = "cli")] -mod factory_impl; -#[cfg(feature = "cli")] mod command; #[cfg(feature = "browser")] diff --git a/bin/node/cli/tests/factory.rs b/bin/node/cli/tests/factory.rs deleted file mode 100644 index 2930cd52e2e..00000000000 --- a/bin/node/cli/tests/factory.rs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -#![cfg(unix)] - -use assert_cmd::cargo::cargo_bin; -use std::process::{Command, Stdio}; -use tempfile::tempdir; - -mod common; - -#[test] -fn factory_works() { - let base_path = tempdir().expect("could not create a temp dir"); - - let status = Command::new(cargo_bin("substrate")) - .stdout(Stdio::null()) - .args(&["factory", "--dev", "-d"]) - .arg(base_path.path()) - .status() - .unwrap(); - assert!(status.success()); - - // Make sure that the `dev` chain folder exists & `db` - assert!(base_path.path().join("chains/dev/").exists()); - assert!(base_path.path().join("chains/dev/db").exists()); -} diff --git a/bin/node/transaction-factory/Cargo.toml b/bin/node/transaction-factory/Cargo.toml deleted file mode 100644 index 5aa803a7e18..00000000000 --- a/bin/node/transaction-factory/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "node-transaction-factory" -version = "0.8.0-dev" -authors = ["Parity Technologies "] -edition = "2018" -license = "GPL-3.0" -homepage = "https://substrate.dev" -repository = "https://github.com/paritytech/substrate/" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] - -[dependencies] -sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } -codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -log = "0.4.8" -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/bin/node/transaction-factory/src/lib.rs b/bin/node/transaction-factory/src/lib.rs deleted file mode 100644 index 44cb178be15..00000000000 --- a/bin/node/transaction-factory/src/lib.rs +++ /dev/null @@ -1,167 +0,0 @@ -// Copyright 2019-2020 Parity Technologies (UK) Ltd. -// This file is part of Substrate. - -// Substrate is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Substrate is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Substrate. If not, see . - -//! Simple transaction factory which distributes tokens from a master -//! account to a specified number of newly created accounts. -//! -//! The factory currently only works on an empty database! - -use std::collections::HashMap; -use std::sync::Arc; -use std::cmp::PartialOrd; -use std::fmt::Display; - -use log::info; - -use sp_block_builder::BlockBuilder; -use sc_block_builder::BlockBuilderProvider; -use sp_api::{ProvideRuntimeApi, ApiExt, CallApiAt, TransactionFor}; -use sp_consensus::{ - BlockOrigin, BlockImportParams, InherentData, - ForkChoiceStrategy, SelectChain -}; -use sp_consensus::block_import::BlockImport; -use codec::{Decode, Encode}; -use sp_runtime::generic::BlockId; -use sp_runtime::traits::{ - Block as BlockT, Header as HeaderT, AtLeast32Bit, One, Zero, -}; -use sp_blockchain::HeaderBackend; - -pub trait RuntimeAdapter { - type AccountId: Display; - type Balance: Display + AtLeast32Bit + From; - type Block: BlockT; - type Index: Copy; - type Number: Display + PartialOrd + AtLeast32Bit + Zero + One; - type Phase: Copy; - type Secret; - - fn new(blocks: u32, transactions: u32) -> Self; - - fn blocks(&self) -> u32; - fn transactions(&self) -> u32; - - fn block_number(&self) -> u32; - fn set_block_number(&mut self, value: u32); - - fn transfer_extrinsic( - &mut self, - sender: &Self::AccountId, - key: &Self::Secret, - destination: &Self::AccountId, - amount: &Self::Balance, - version: u32, - genesis_hash: &::Hash, - prior_block_hash: &::Hash, - ) -> ::Extrinsic; - - fn inherent_extrinsics(&self) -> InherentData; - - fn minimum_balance() -> Self::Balance; - fn master_account_id() -> Self::AccountId; - fn master_account_secret() -> Self::Secret; - - fn gen_random_account_id(seed: u32) -> Self::AccountId; - fn gen_random_account_secret(seed: u32) -> Self::Secret; -} - -/// Manufactures transactions. The exact amount depends on `num` and `rounds`. -pub fn factory( - mut factory_state: RA, - client: &Arc, - select_chain: &Sc, -) -> sc_cli::Result<()> - where - Backend: sc_client_api::backend::Backend + Send, - Block: BlockT, - Client: BlockBuilderProvider + CallApiAt - + ProvideRuntimeApi + HeaderBackend, - Client::Api: BlockBuilder + ApiExt, - Sc: SelectChain, - RA: RuntimeAdapter, - Block::Hash: From, - for<'a> &'a Client: BlockImport>, -{ - let best_header: Result<::Header, sc_cli::Error> = - select_chain.best_chain().map_err(|e| format!("{:?}", e).into()); - let mut best_hash = best_header?.hash(); - let mut best_block_id = BlockId::::hash(best_hash); - let version = client.runtime_version_at(&best_block_id)?.spec_version; - let genesis_hash = client.hash(Zero::zero())? - .expect("Genesis block always exists; qed").into(); - - while factory_state.block_number() < factory_state.blocks() { - let from = (RA::master_account_id(), RA::master_account_secret()); - let amount = RA::minimum_balance(); - - let inherents = RA::inherent_extrinsics(&factory_state); - let inherents = client.runtime_api().inherent_extrinsics(&best_block_id, inherents) - .expect("Failed to create inherent extrinsics"); - - let tx_per_block = factory_state.transactions(); - - let mut block = client.new_block(Default::default()).expect("Failed to create new block"); - - for tx_num in 0..tx_per_block { - let seed = tx_num * (factory_state.block_number() + 1); - let to = RA::gen_random_account_id(seed); - - let transfer = factory_state.transfer_extrinsic( - &from.0, - &from.1, - &to, - &amount, - version, - &genesis_hash, - &best_hash, - ); - - info!("Pushing transfer {}/{} to {} into block.", tx_num + 1, tx_per_block, to); - - block.push( - Decode::decode(&mut &transfer.encode()[..]) - .expect("Failed to decode transfer extrinsic") - ).expect("Failed to push transfer extrinsic into block"); - } - - for inherent in inherents { - block.push(inherent).expect("Failed ..."); - } - - let block = block.build().expect("Failed to bake block").block; - - factory_state.set_block_number(factory_state.block_number() + 1); - - info!( - "Created block {} with hash {}.", - factory_state.block_number(), - best_hash, - ); - - best_hash = block.header().hash(); - best_block_id = BlockId::::hash(best_hash); - - let mut import = BlockImportParams::new(BlockOrigin::File, block.header().clone()); - import.body = Some(block.extrinsics().to_vec()); - import.fork_choice = Some(ForkChoiceStrategy::LongestChain); - (&**client).import_block(import, HashMap::new()).expect("Failed to import block"); - - info!("Imported block at {}", factory_state.block_number()); - } - - Ok(()) -} -- GitLab From a3b4fb4490783146f86f988a2c327c7bb6b8f314 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Tue, 5 May 2020 15:00:59 +0200 Subject: [PATCH 133/167] Remove BABE dependency in network (#5896) --- Cargo.lock | 1 - client/network/Cargo.toml | 1 - 2 files changed, 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ecc37e9d158..64e126f7390 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6476,7 +6476,6 @@ dependencies = [ "sp-arithmetic", "sp-blockchain", "sp-consensus", - "sp-consensus-babe", "sp-core", "sp-keyring", "sp-runtime", diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 56a4bda2b23..e31e0f31132 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -52,7 +52,6 @@ smallvec = "0.6.10" sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -- GitLab From 2bb06f1e7f89f54ded29477f1d92b41f861f7e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Tue, 5 May 2020 15:09:07 +0200 Subject: [PATCH 134/167] Use `storage::append` in the implementation of the storage types (#5889) * Start improving `storage_append` * Fix some stuff * Fix compilation * Update docs and add new test * More tests * Test kill + append --- Cargo.lock | 85 ++++++------ frame/benchmark/src/lib.rs | 2 +- frame/democracy/src/lib.rs | 5 +- frame/elections/src/lib.rs | 2 +- frame/scheduler/src/lib.rs | 24 ++-- frame/scored-pool/src/lib.rs | 9 +- frame/support/src/lib.rs | 4 +- .../src/storage/generator/double_map.rs | 48 +------ frame/support/src/storage/generator/map.rs | 40 +----- frame/support/src/storage/generator/value.rs | 51 +------ frame/support/src/storage/mod.rs | 110 +++++++--------- frame/support/test/tests/decl_storage.rs | 60 +++++---- frame/system/src/lib.rs | 12 +- primitives/core/src/testing.rs | 3 +- primitives/io/src/lib.rs | 9 +- primitives/state-machine/src/basic.rs | 4 +- primitives/state-machine/src/ext.rs | 124 +++++++++--------- primitives/storage/src/lib.rs | 20 +-- primitives/wasm-interface/src/lib.rs | 2 +- 19 files changed, 252 insertions(+), 362 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 64e126f7390..3fce87f7aaf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -126,15 +126,15 @@ dependencies = [ [[package]] name = "arbitrary" -version = "0.4.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1148c9b25d393a07c4cc3ef5dd30f82a40a1c261018c4a670611ed8e76cad3ea" +checksum = "75153c95fdedd7db9732dfbfc3702324a1627eec91ba56e37cd0ac78314ab2ed" [[package]] name = "arc-swap" -version = "0.4.6" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b585a98a234c46fc563103e9278c9391fde1f4e6850334da895d27edb9580f62" +checksum = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825" [[package]] name = "arrayref" @@ -280,9 +280,9 @@ dependencies = [ [[package]] name = "backtrace-sys" -version = "0.1.36" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78848718ee1255a2485d1309ad9cdecfc2e7d0362dd11c6829364c6b35ae1bc7" +checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" dependencies = [ "cc", "libc", @@ -452,9 +452,9 @@ dependencies = [ [[package]] name = "bs58" -version = "0.3.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb" +checksum = "b170cd256a3f9fa6b9edae3e44a7dfdfc77e8124dbc3e2612d75f9c3e2396dae" [[package]] name = "bstr" @@ -553,9 +553,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.51" +version = "1.0.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9384ca4b90c0ea47e19a5c996d6643a3e73dedf9b89c65efb67587e34da1bb" +checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" dependencies = [ "jobserver", ] @@ -1147,18 +1147,18 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0" +checksum = "a80e524ebf194285b57e5e7944018721c7fffc673253f5183f7accd88a2a3b0c" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.6.4" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce" +checksum = "2ed9afacaea0301eefb738c9deea725e6d53938004597cdc518a8cf9a7aa2f03" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -2001,9 +2001,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.11" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" +checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" dependencies = [ "libc", ] @@ -2156,9 +2156,9 @@ dependencies = [ [[package]] name = "hyper" -version = "0.13.5" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96816e1d921eca64d208a85aab4f7798455a8e34229ee5a88c935bdee1b78b14" +checksum = "ed6081100e960d9d74734659ffc9cc91daf1c0fc7aceb8eaa94ee1a3f5046f2e" dependencies = [ "bytes 0.5.4", "futures-channel", @@ -2187,7 +2187,7 @@ dependencies = [ "bytes 0.5.4", "ct-logs", "futures-util", - "hyper 0.13.5", + "hyper 0.13.4", "log", "rustls", "rustls-native-certs", @@ -3857,9 +3857,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" dependencies = [ "hermit-abi", "libc", @@ -4880,7 +4880,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e" dependencies = [ "lock_api", - "parking_lot_core 0.7.2", + "parking_lot_core 0.7.1", ] [[package]] @@ -4900,9 +4900,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.7.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3" +checksum = "0e136c1904604defe99ce5fd71a28d473fa60a12255d511aa78a9ddf11237aeb" dependencies = [ "cfg-if", "cloudabi", @@ -5604,9 +5604,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.3.7" +version = "1.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692" +checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" dependencies = [ "aho-corasick", "memchr", @@ -6545,7 +6545,7 @@ dependencies = [ "fnv", "futures 0.3.4", "futures-timer 3.0.2", - "hyper 0.13.5", + "hyper 0.13.4", "hyper-rustls", "log", "num_cpus", @@ -7959,9 +7959,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "structopt" -version = "0.3.14" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef" +checksum = "ff6da2e8d107dfd7b74df5ef4d205c6aebee0706c647f6bc6a2d5789905c00fb" dependencies = [ "clap", "lazy_static", @@ -7970,9 +7970,9 @@ dependencies = [ [[package]] name = "structopt-derive" -version = "0.4.7" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a" +checksum = "a489c87c08fbaf12e386665109dd13470dcc9c4583ea3e10dd2b4523e5ebd9ac" dependencies = [ "heck", "proc-macro-error", @@ -8122,7 +8122,7 @@ dependencies = [ "async-std", "derive_more", "futures-util", - "hyper 0.13.5", + "hyper 0.13.4", "log", "prometheus", "tokio 0.2.18", @@ -8404,9 +8404,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.13.4" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac193374347e7c263c5f547524f36ff8ec6702d56c8799c8331d26dffe8c1e" +checksum = "5a0338198966bde7feb14b011a33d404a62a6e03b843352c71512a2a002634b7" dependencies = [ "cfg-if", "doc-comment", @@ -8514,11 +8514,12 @@ dependencies = [ [[package]] name = "time" -version = "0.1.43" +version = "0.1.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" dependencies = [ "libc", + "redox_syscall", "winapi 0.3.8", ] @@ -9379,18 +9380,18 @@ dependencies = [ [[package]] name = "wast" -version = "14.0.0" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47b11c94c63d5365a76ea287f8e6e5b6050233fae4b2423aea2a1e126a385e17" +checksum = "5b20abd8b4a26f7e0d4dd5e357e90a3d555ec190e94472c9b2b27c5b9777f9ae" dependencies = [ "leb128", ] [[package]] name = "wat" -version = "1.0.15" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03db18bc33cff3859c296efbefdcc00763a644539feeadca3415a1cee8a2835d" +checksum = "51a615830ee3e7200b505c441fec09aac2f114deae69df52f215cb828ba112c4" dependencies = [ "wast", ] @@ -9472,9 +9473,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.5" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" dependencies = [ "winapi 0.3.8", ] diff --git a/frame/benchmark/src/lib.rs b/frame/benchmark/src/lib.rs index 6f7b074a9e6..037edc9d269 100644 --- a/frame/benchmark/src/lib.rs +++ b/frame/benchmark/src/lib.rs @@ -160,7 +160,7 @@ decl_module! { #[weight = 0] pub fn append_member_list(origin) { let who = ensure_signed(origin)?; - MyMemberList::::append(&[who])?; + MyMemberList::::append(who); } /// Encode a vector of accounts to bytes. diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index ddc3b36f4c8..d924ca9666f 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -168,7 +168,7 @@ use sp_runtime::{ DispatchResult, DispatchError, RuntimeDebug, traits::{Zero, Hash, Dispatchable, Saturating}, }; -use codec::{Ref, Encode, Decode}; +use codec::{Encode, Decode}; use frame_support::{ decl_module, decl_storage, decl_event, decl_error, ensure, Parameter, weights::{Weight, DispatchClass}, @@ -553,8 +553,7 @@ decl_module! { PublicPropCount::put(index + 1); >::insert(index, (value, &[&who][..])); - let new_prop = (index, proposal_hash, who); - >::append_or_put(&[Ref::from(&new_prop)][..]); + >::append((index, proposal_hash, who)); Self::deposit_event(RawEvent::Proposed(index, value)); } diff --git a/frame/elections/src/lib.rs b/frame/elections/src/lib.rs index 4e3fa9c75d9..a684ce3144d 100644 --- a/frame/elections/src/lib.rs +++ b/frame/elections/src/lib.rs @@ -886,7 +886,7 @@ impl Module { if set_len + 1 == VOTER_SET_SIZE { NextVoterSet::put(next + 1); } - >::append_or_insert(next, &[Some(who.clone())][..]) + >::append(next, Some(who.clone())); } } diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index a18a48da080..975331059b5 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -52,7 +52,7 @@ use frame_support::{ traits::{Get, schedule}, weights::{GetDispatchInfo, Weight}, }; -use frame_system::{self as system}; +use frame_system as system; /// Our pallet's configuration trait. All our types and constants go in here. If the /// pallet is dependent on specific other pallets, then their configuration traits @@ -123,7 +123,7 @@ decl_module! { .collect::>(); queued.sort_by_key(|(_, s)| s.priority); let mut result = 0; - let unused_items = queued.into_iter() + queued.into_iter() .enumerate() .scan(0, |cumulative_weight, (order, (index, s))| { *cumulative_weight += s.call.get_dispatch_info().weight; @@ -141,10 +141,10 @@ decl_module! { } let next = now + period; if let Some(ref id) = s.maybe_id { - let next_index = Agenda::::decode_len(now + period).unwrap_or(0) as u32; - Lookup::::insert(id, (next, next_index)); + let next_index = Agenda::::decode_len(now + period).unwrap_or(0); + Lookup::::insert(id, (next, next_index as u32)); } - Agenda::::append_or_insert(next, &[Some(s)][..]); + Agenda::::append(next, Some(s)); } else { if let Some(ref id) = s.maybe_id { Lookup::::remove(id); @@ -161,11 +161,11 @@ decl_module! { Some(Some(s)) } }) - .collect::>(); - if !unused_items.is_empty() { - let next = now + One::one(); - Agenda::::append_or_insert(next, &unused_items[..]); - } + .for_each(|unused| { + let next = now + One::one(); + Agenda::::append(next, unused); + }); + result } } @@ -186,7 +186,7 @@ impl schedule::Anon::Call> for Module // Remove one from the number of repetitions since we will schedule one now. .map(|(p, c)| (p, c - 1)); let s = Some(Scheduled { maybe_id: None, priority, call, maybe_periodic }); - Agenda::::append_or_insert(when, &[s][..]); + Agenda::::append(when, s); (when, Agenda::::decode_len(when).unwrap_or(1) as u32 - 1) } @@ -225,7 +225,7 @@ impl schedule::Named::Call> for Module .map(|(p, c)| (p, c - 1)); let s = Scheduled { maybe_id: Some(id.clone()), priority, call, maybe_periodic }; - Agenda::::append_or_insert(when, &[Some(s)][..]); + Agenda::::append(when, Some(s)); let index = Agenda::::decode_len(when).unwrap_or(1) as u32 - 1; let address = (when, index); Lookup::::insert(&id, &address); diff --git a/frame/scored-pool/src/lib.rs b/frame/scored-pool/src/lib.rs index 46eb73293b2..1ba999cc7c8 100644 --- a/frame/scored-pool/src/lib.rs +++ b/frame/scored-pool/src/lib.rs @@ -100,9 +100,7 @@ use frame_support::{ weights::Weight, }; use frame_system::{self as system, ensure_root, ensure_signed}; -use sp_runtime::{ - traits::{AtLeast32Bit, MaybeSerializeDeserialize, Zero, StaticLookup}, -}; +use sp_runtime::traits::{AtLeast32Bit, MaybeSerializeDeserialize, Zero, StaticLookup}; type BalanceOf = <>::Currency as Currency<::AccountId>>::Balance; type PoolT = Vec<(::AccountId, Option<>::Score>)>; @@ -276,10 +274,7 @@ decl_module! { // can be inserted as last element in pool, since entities with // `None` are always sorted to the end. - if let Err(e) = >::append(&[(who.clone(), None)]) { - T::Currency::unreserve(&who, deposit); - Err(e)? - } + >::append((who.clone(), Option::<>::Score>::None)); >::insert(&who, true); diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index b0e7395e9ff..5222e506d58 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -499,8 +499,8 @@ mod tests { let key2 = 18u32; DoubleMap::insert(&key1, &key2, &vec![1]); - DoubleMap::append(&key1, &key2, &[2, 3]).unwrap(); - assert_eq!(DoubleMap::get(&key1, &key2), &[1, 2, 3]); + DoubleMap::append(&key1, &key2, 2); + assert_eq!(DoubleMap::get(&key1, &key2), &[1, 2]); }); } diff --git a/frame/support/src/storage/generator/double_map.rs b/frame/support/src/storage/generator/double_map.rs index c7e4c10017e..2c18089d38b 100644 --- a/frame/support/src/storage/generator/double_map.rs +++ b/frame/support/src/storage/generator/double_map.rs @@ -16,8 +16,8 @@ use sp_std::prelude::*; use sp_std::borrow::Borrow; -use codec::{Ref, FullCodec, FullEncode, Decode, Encode, EncodeLike, EncodeAppend}; -use crate::{storage::{self, unhashed}, traits::Len, Never}; +use codec::{FullCodec, FullEncode, Decode, Encode, EncodeLike}; +use crate::{storage::{self, unhashed, StorageAppend}, traits::Len, Never}; use crate::hash::{StorageHasher, Twox128, ReversibleStorageHasher}; /// Generator for `StorageDoubleMap` used by `decl_storage`. @@ -245,53 +245,19 @@ impl storage::StorageDoubleMap for G where ret } - fn append( + fn append( k1: KArg1, k2: KArg2, - items: Items, - ) -> Result<(), &'static str> where - KArg1: EncodeLike, - KArg2: EncodeLike, - Item: Encode, - EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator - { - let final_key = Self::storage_double_map_final_key(k1, k2); - - let encoded_value = unhashed::get_raw(&final_key) - .unwrap_or_else(|| { - match G::from_query_to_optional_value(G::from_optional_value_to_query(None)) { - Some(value) => value.encode(), - None => Vec::new(), - } - }); - - let new_val = V::append_or_new( - encoded_value, - items, - ).map_err(|_| "Could not append given item")?; - unhashed::put_raw(&final_key, &new_val); - - Ok(()) - } - - fn append_or_insert( - k1: KArg1, - k2: KArg2, - items: Items, + item: EncodeLikeItem, ) where KArg1: EncodeLike, KArg2: EncodeLike, Item: Encode, EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator + V: StorageAppend, { - Self::append(Ref::from(&k1), Ref::from(&k2), items.clone()) - .unwrap_or_else(|_| Self::insert(k1, k2, items)); + let final_key = Self::storage_double_map_final_key(k1, k2); + sp_io::storage::append(&final_key, item.encode()); } fn decode_len(key1: KArg1, key2: KArg2) -> Result where diff --git a/frame/support/src/storage/generator/map.rs b/frame/support/src/storage/generator/map.rs index cc871072f5f..307e3b1c781 100644 --- a/frame/support/src/storage/generator/map.rs +++ b/frame/support/src/storage/generator/map.rs @@ -17,8 +17,8 @@ #[cfg(not(feature = "std"))] use sp_std::prelude::*; use sp_std::borrow::Borrow; -use codec::{FullCodec, FullEncode, Decode, Encode, EncodeLike, Ref, EncodeAppend}; -use crate::{storage::{self, unhashed}, traits::Len, Never}; +use codec::{FullCodec, FullEncode, Decode, Encode, EncodeLike}; +use crate::{storage::{self, unhashed, StorageAppend}, traits::Len, Never}; use crate::hash::{StorageHasher, Twox128, ReversibleStorageHasher}; /// Generator for `StorageMap` used by `decl_storage`. @@ -276,43 +276,15 @@ impl> storage::StorageMap G::from_optional_value_to_query(value) } - fn append(key: KeyArg, items: Items) -> Result<(), &'static str> + fn append(key: EncodeLikeKey, item: EncodeLikeItem) where - KeyArg: EncodeLike, + EncodeLikeKey: EncodeLike, Item: Encode, EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator, + V: StorageAppend, { let key = Self::storage_map_final_key(key); - let encoded_value = unhashed::get_raw(key.as_ref()) - .unwrap_or_else(|| { - match G::from_query_to_optional_value(G::from_optional_value_to_query(None)) { - Some(value) => value.encode(), - None => Vec::new(), - } - }); - - let new_val = V::append_or_new( - encoded_value, - items, - ).map_err(|_| "Could not append given item")?; - unhashed::put_raw(key.as_ref(), &new_val); - Ok(()) - } - - fn append_or_insert(key: KeyArg, items: Items) - where - KeyArg: EncodeLike, - Item: Encode, - EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator, - { - Self::append(Ref::from(&key), items.clone()) - .unwrap_or_else(|_| Self::insert(key, items)); + sp_io::storage::append(&key, item.encode()); } fn decode_len>(key: KeyArg) -> Result diff --git a/frame/support/src/storage/generator/value.rs b/frame/support/src/storage/generator/value.rs index dd9bbded4b8..f4119ba4617 100644 --- a/frame/support/src/storage/generator/value.rs +++ b/frame/support/src/storage/generator/value.rs @@ -14,12 +14,10 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . -#[cfg(not(feature = "std"))] -use sp_std::prelude::*; -use codec::{FullCodec, Encode, EncodeAppend, EncodeLike, Decode}; +use codec::{FullCodec, Encode, EncodeLike, Decode}; use crate::{ Never, - storage::{self, unhashed}, + storage::{self, unhashed, StorageAppend}, hash::{Twox128, StorageHasher}, traits::Len }; @@ -134,55 +132,16 @@ impl> storage::StorageValue for G { G::from_optional_value_to_query(value) } - /// Append the given items to the value in the storage. - /// - /// `T` is required to implement `codec::EncodeAppend`. - fn append(items: Items) -> Result<(), &'static str> + fn append(item: EncodeLikeItem) where Item: Encode, EncodeLikeItem: EncodeLike, - T: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator, + T: StorageAppend, { let key = Self::storage_value_final_key(); - let encoded_value = unhashed::get_raw(&key) - .unwrap_or_else(|| { - match G::from_query_to_optional_value(G::from_optional_value_to_query(None)) { - Some(value) => value.encode(), - None => Vec::new(), - } - }); - - let new_val = T::append_or_new( - encoded_value, - items, - ).map_err(|_| "Could not append given item")?; - unhashed::put_raw(&key, &new_val); - Ok(()) + sp_io::storage::append(&key, item.encode()); } - /// Safely append the given items to the value in the storage. If a codec error occurs, then the - /// old (presumably corrupt) value is replaced with the given `items`. - /// - /// `T` is required to implement `codec::EncodeAppend`. - fn append_or_put(items: Items) where - Item: Encode, - EncodeLikeItem: EncodeLike, - T: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator - { - Self::append(items.clone()).unwrap_or_else(|_| Self::put(items)); - } - - /// Read the length of the value in a fast way, without decoding the entire value. - /// - /// `T` is required to implement `Codec::DecodeLength`. - /// - /// Note that `0` is returned as the default value if no encoded value exists at the given key. - /// Therefore, this function cannot be used as a sign of _existence_. use the `::exists()` - /// function for this purpose. fn decode_len() -> Result where T: codec::DecodeLength, T: Len { let key = Self::storage_value_final_key(); diff --git a/frame/support/src/storage/mod.rs b/frame/support/src/storage/mod.rs index 3a811c20e36..902190302de 100644 --- a/frame/support/src/storage/mod.rs +++ b/frame/support/src/storage/mod.rs @@ -17,7 +17,7 @@ //! Stuff to do with the runtime's storage. use sp_std::{prelude::*, marker::PhantomData}; -use codec::{FullCodec, FullEncode, Encode, EncodeAppend, EncodeLike, Decode}; +use codec::{FullCodec, FullEncode, Encode, EncodeLike, Decode}; use crate::{traits::Len, hash::{Twox128, StorageHasher}}; pub mod unhashed; @@ -91,33 +91,18 @@ pub trait StorageValue { /// Append the given item to the value in the storage. /// - /// `T` is required to implement `codec::EncodeAppend`. - fn append(items: Items) -> Result<(), &'static str> - where - Item: Encode, - EncodeLikeItem: EncodeLike, - T: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator; - - /// Append the given items to the value in the storage. + /// `T` is required to implement [`StorageAppend`]. /// - /// `T` is required to implement `Codec::EncodeAppend`. - /// - /// Upon any failure, it replaces `items` as the new value (assuming that the previous stored - /// data is simply corrupt and no longer usable). - /// - /// ### WARNING + /// # Warning /// - /// use with care; if your use-case is not _exactly_ as what this function is doing, - /// you should use append and sensibly handle failure within the runtime code if it happens. - fn append_or_put(items: Items) where + /// If the storage item is not encoded properly, the storage item will be overwritten + /// and set to `[item]`. Any default value set for the storage item will be ignored + /// on overwrite. + fn append(item: EncodeLikeItem) + where Item: Encode, EncodeLikeItem: EncodeLike, - T: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator; - + T: StorageAppend; /// Read the length of the value in a fast way, without decoding the entire value. /// @@ -176,25 +161,18 @@ pub trait StorageMap { /// Append the given items to the value in the storage. /// /// `V` is required to implement `codec::EncodeAppend`. - fn append(key: KeyArg, items: Items) -> Result<(), &'static str> where - KeyArg: EncodeLike, - Item: Encode, - EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator; - - /// Safely append the given items to the value in the storage. If a codec error occurs, then the - /// old (presumably corrupt) value is replaced with the given `items`. /// - /// `V` is required to implement `codec::EncodeAppend`. - fn append_or_insert(key: KeyArg, items: Items) where - KeyArg: EncodeLike, + /// # Warning + /// + /// If the storage item is not encoded properly, the storage will be overwritten + /// and set to `[item]`. Any default value set for the storage item will be ignored + /// on overwrite. + fn append(key: EncodeLikeKey, item: EncodeLikeItem) + where + EncodeLikeKey: EncodeLike, Item: Encode, EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator; + V: StorageAppend; /// Read the length of the value in a fast way, without decoding the entire value. /// @@ -351,38 +329,23 @@ pub trait StorageDoubleMap { /// Append the given item to the value in the storage. /// - /// `V` is required to implement `codec::EncodeAppend`. - fn append( - k1: KArg1, - k2: KArg2, - items: Items, - ) -> Result<(), &'static str> - where - KArg1: EncodeLike, - KArg2: EncodeLike, - Item: Encode, - EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator, - Items::IntoIter: ExactSizeIterator; - - /// Safely append the given items to the value in the storage. If a codec error occurs, then the - /// old (presumably corrupt) value is replaced with the given `items`. + /// `V` is required to implement [`StorageAppend`]. /// - /// `V` is required to implement `codec::EncodeAppend`. - fn append_or_insert( + /// # Warning + /// + /// If the storage item is not encoded properly, the storage will be overwritten + /// and set to `[item]`. Any default value set for the storage item will be ignored + /// on overwrite. + fn append( k1: KArg1, k2: KArg2, - items: Items, - ) - where + item: EncodeLikeItem, + ) where KArg1: EncodeLike, KArg2: EncodeLike, Item: Encode, EncodeLikeItem: EncodeLike, - V: EncodeAppend, - Items: IntoIterator + Clone + EncodeLike, - Items::IntoIter: ExactSizeIterator; + V: StorageAppend; /// Read the length of the value in a fast way, without decoding the entire value. /// @@ -449,7 +412,6 @@ impl Iterator for PrefixIterator { /// Twox128(module_prefix) ++ Twox128(storage_prefix) /// ``` pub trait StoragePrefixedMap { - /// Module prefix. Used for generating final key. fn module_prefix() -> &'static [u8]; @@ -525,6 +487,22 @@ pub trait StoragePrefixedMap { } } +/// Marker trait that will be implemented for types that support the `storage::append` api. +/// +/// This trait is sealed. +pub trait StorageAppend: private::Sealed {} + +/// Provides `Sealed` trait to prevent implementing trait `StorageAppend` outside of this crate. +mod private { + use super::*; + + pub trait Sealed {} + + impl Sealed for Vec {} +} + +impl StorageAppend for Vec {} + #[cfg(test)] mod test { use sp_core::hashing::twox_128; diff --git a/frame/support/test/tests/decl_storage.rs b/frame/support/test/tests/decl_storage.rs index ea9b09f9d7b..77e538625a4 100644 --- a/frame/support/test/tests/decl_storage.rs +++ b/frame/support/test/tests/decl_storage.rs @@ -526,47 +526,55 @@ mod test_append_and_len { #[test] fn append_works() { TestExternalities::default().execute_with(|| { - let _ = MapVec::append(1, [1, 2, 3].iter()); - let _ = MapVec::append(1, [4, 5].iter()); + for val in &[1, 2, 3, 4, 5] { + MapVec::append(1, val); + } assert_eq!(MapVec::get(1), vec![1, 2, 3, 4, 5]); - let _ = JustVec::append([1, 2, 3].iter()); - let _ = JustVec::append([4, 5].iter()); + MapVec::remove(1); + MapVec::append(1, 1); + assert_eq!(MapVec::get(1), vec![1]); + + for val in &[1, 2, 3, 4, 5] { + JustVec::append(val); + } assert_eq!(JustVec::get(), vec![1, 2, 3, 4, 5]); + + JustVec::kill(); + JustVec::append(1); + assert_eq!(JustVec::get(), vec![1]); }); } #[test] - fn append_works_for_default() { + fn append_overwrites_invalid_data() { TestExternalities::default().execute_with(|| { - assert_eq!(JustVecWithDefault::get(), vec![6, 9]); - let _ = JustVecWithDefault::append([1].iter()); - assert_eq!(JustVecWithDefault::get(), vec![6, 9, 1]); - - assert_eq!(MapVecWithDefault::get(0), vec![6, 9]); - let _ = MapVecWithDefault::append(0, [1].iter()); - assert_eq!(MapVecWithDefault::get(0), vec![6, 9, 1]); - - assert_eq!(OptionVec::get(), None); - let _ = OptionVec::append([1].iter()); - assert_eq!(OptionVec::get(), Some(vec![1])); + let key = JustVec::hashed_key(); + // Set it to some invalid value. + frame_support::storage::unhashed::put_raw(&key, &*b"1"); + assert_eq!(JustVec::get(), Vec::new()); + assert_eq!(frame_support::storage::unhashed::get_raw(&key), Some(b"1".to_vec())); + + JustVec::append(1); + JustVec::append(2); + assert_eq!(JustVec::get(), vec![1, 2]); }); } #[test] - fn append_or_put_works() { + fn append_overwrites_default() { TestExternalities::default().execute_with(|| { - let _ = MapVec::append_or_insert(1, &[1, 2, 3][..]); - let _ = MapVec::append_or_insert(1, &[4, 5][..]); - assert_eq!(MapVec::get(1), vec![1, 2, 3, 4, 5]); + assert_eq!(JustVecWithDefault::get(), vec![6, 9]); + JustVecWithDefault::append(1); + assert_eq!(JustVecWithDefault::get(), vec![1]); - let _ = JustVec::append_or_put(&[1, 2, 3][..]); - let _ = JustVec::append_or_put(&[4, 5][..]); - assert_eq!(JustVec::get(), vec![1, 2, 3, 4, 5]); + assert_eq!(MapVecWithDefault::get(0), vec![6, 9]); + MapVecWithDefault::append(0, 1); + assert_eq!(MapVecWithDefault::get(0), vec![1]); - let _ = OptionVec::append_or_put(&[1, 2, 3][..]); - let _ = OptionVec::append_or_put(&[4, 5][..]); - assert_eq!(OptionVec::get(), Some(vec![1, 2, 3, 4, 5])); + assert_eq!(OptionVec::get(), None); + OptionVec::append(1); + assert_eq!(OptionVec::get(), Some(vec![1])); }); } diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 5a3097e62ef..50778e72221 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -116,7 +116,7 @@ use sp_runtime::{ use sp_core::{ChangesTrieConfiguration, storage::well_known_keys}; use frame_support::{ decl_module, decl_event, decl_storage, decl_error, Parameter, ensure, debug, - storage::{self, generator::StorageValue}, + storage, traits::{ Contains, Get, ModuleToIndex, OnNewAccount, OnKilledAccount, IsDeadAccount, Happened, StoredMap, EnsureOrigin, @@ -852,16 +852,10 @@ impl Module { old_event_count }; - // We use append api here to avoid bringing all events in the runtime when we push a - // new one in the list. - let encoded_event = event.encode(); - sp_io::storage::append(&Events::::storage_value_final_key()[..], encoded_event); + Events::::append(&event); for topic in topics { - // The same applies here. - if >::append(topic, &[(block_number, event_idx)]).is_err() { - return; - } + >::append(topic, &(block_number, event_idx)); } } diff --git a/primitives/core/src/testing.rs b/primitives/core/src/testing.rs index c2238111244..f818865d219 100644 --- a/primitives/core/src/testing.rs +++ b/primitives/core/src/testing.rs @@ -25,7 +25,6 @@ use crate::{ }; #[cfg(feature = "std")] use std::collections::HashSet; -use codec::Encode; /// Key type for generic Ed25519 key. pub const ED25519: KeyTypeId = KeyTypeId(*b"ed25"); /// Key type for generic Sr 25519 key. @@ -172,6 +171,8 @@ impl crate::traits::BareCryptoStore for KeyStore { key: &CryptoTypePublicPair, msg: &[u8], ) -> Result, BareCryptoStoreError> { + use codec::Encode; + match key.0 { ed25519::CRYPTO_ID => { let key_pair: ed25519::Pair = self diff --git a/primitives/io/src/lib.rs b/primitives/io/src/lib.rs index e4787dade0e..f5d692469f0 100644 --- a/primitives/io/src/lib.rs +++ b/primitives/io/src/lib.rs @@ -117,7 +117,14 @@ pub trait Storage { Externalities::clear_prefix(*self, prefix) } - /// Append to storage item (assumes it is in "Vec" format). + /// Append the encoded `value` to the storage item at `key`. + /// + /// The storage item needs to implement [`EncodeAppend`](codec::EncodeAppend). + /// + /// # Warning + /// + /// If the storage item does not support [`EncodeAppend`](codec::EncodeAppend) or + /// something else fails at appending, the storage item will be set to `[value]`. fn append(&mut self, key: &[u8], value: Vec) { self.storage_append(key.to_vec(), value); } diff --git a/primitives/state-machine/src/basic.rs b/primitives/state-machine/src/basic.rs index 4eb724ce689..450b1b316e5 100644 --- a/primitives/state-machine/src/basic.rs +++ b/primitives/state-machine/src/basic.rs @@ -262,8 +262,8 @@ impl Externalities for BasicExternalities { key: Vec, value: Vec, ) { - let previous = self.inner.top.entry(key).or_default(); - crate::ext::append_to_storage(previous, value).expect("Failed to append to storage"); + let current = self.inner.top.entry(key).or_default(); + crate::ext::StorageAppend::new(current).append(value); } fn chain_id(&self) -> u64 { 42 } diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 902763e6e9c..746e016a64e 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -30,7 +30,7 @@ use sp_core::{ }; use sp_trie::{trie_types::Layout, empty_child_trie_root}; use sp_externalities::{Extensions, Extension}; -use codec::{Compact, Decode, Encode}; +use codec::{Decode, Encode, EncodeAppend}; use std::{error, fmt, any::{Any, TypeId}}; use log::{warn, trace}; @@ -428,7 +428,7 @@ where &key, || backend.storage(&key).expect(EXT_NOT_ALLOWED_TO_FAIL).unwrap_or_default() ); - append_to_storage(current_value, value).expect(EXT_NOT_ALLOWED_TO_FAIL); + StorageAppend::new(current_value).append(value); } fn chain_id(&self) -> u64 { @@ -549,16 +549,24 @@ where fn wipe(&mut self) { self.overlay.discard_prospective(); - self.overlay.drain_storage_changes(&self.backend, None, Default::default(), self.storage_transaction_cache) - .expect(EXT_NOT_ALLOWED_TO_FAIL); + self.overlay.drain_storage_changes( + &self.backend, + None, + Default::default(), + self.storage_transaction_cache, + ).expect(EXT_NOT_ALLOWED_TO_FAIL); self.storage_transaction_cache.reset(); self.backend.wipe().expect(EXT_NOT_ALLOWED_TO_FAIL) } fn commit(&mut self) { self.overlay.commit_prospective(); - let changes = self.overlay.drain_storage_changes(&self.backend, None, Default::default(), self.storage_transaction_cache) - .expect(EXT_NOT_ALLOWED_TO_FAIL); + let changes = self.overlay.drain_storage_changes( + &self.backend, + None, + Default::default(), + self.storage_transaction_cache, + ).expect(EXT_NOT_ALLOWED_TO_FAIL); self.backend.commit( changes.transaction_storage_root, changes.transaction, @@ -567,65 +575,43 @@ where } } -fn extract_length_data(data: &[u8]) -> Result<(u32, usize, usize), &'static str> { - use codec::CompactLen; - - let len = u32::from( - Compact::::decode(&mut &data[..]) - .map_err(|_| "Incorrect updated item encoding")? - ); - let new_len = len - .checked_add(1) - .ok_or_else(|| "New vec length greater than `u32::max_value()`.")?; - - let encoded_len = Compact::::compact_len(&len); - let encoded_new_len = Compact::::compact_len(&new_len); - Ok((new_len, encoded_len, encoded_new_len)) -} +/// Implement `Encode` by forwarding the stored raw vec. +struct EncodeOpaqueValue(Vec); -pub fn append_to_storage( - self_encoded: &mut Vec, - value: Vec, -) -> Result<(), &'static str> { - // No data present, just encode the given input data. - if self_encoded.is_empty() { - Compact::from(1u32).encode_to(self_encoded); - self_encoded.extend(value); - return Ok(()); +impl Encode for EncodeOpaqueValue { + fn using_encoded R>(&self, f: F) -> R { + f(&self.0) } +} - let (new_len, encoded_len, encoded_new_len) = extract_length_data(&self_encoded)?; - - let replace_len = |dest: &mut Vec| { - Compact(new_len).using_encoded(|e| { - dest[..encoded_new_len].copy_from_slice(e); - }) - }; - - let append_new_elems = |dest: &mut Vec| dest.extend(&value[..]); - - // If old and new encoded len is equal, we don't need to copy the - // already encoded data. - if encoded_len == encoded_new_len { - replace_len(self_encoded); - append_new_elems(self_encoded); - - Ok(()) - } else { - let size = encoded_new_len + self_encoded.len() - encoded_len; - - let mut res = Vec::with_capacity(size + value.len()); - unsafe { res.set_len(size); } +/// Auxialiary structure for appending a value to a storage item. +pub(crate) struct StorageAppend<'a>(&'a mut Vec); - // Insert the new encoded len, copy the already encoded data and - // add the new element. - replace_len(&mut res); - res[encoded_new_len..size].copy_from_slice(&self_encoded[encoded_len..]); - append_new_elems(&mut res); - *self_encoded = res; +impl<'a> StorageAppend<'a> { + /// Create a new instance using the given `storage` reference. + pub fn new(storage: &'a mut Vec) -> Self { + Self(storage) + } - Ok(()) + /// Append the given `value` to the storage item. + /// + /// If appending fails, `[value]` is stored in the storage item. + pub fn append(&mut self, value: Vec) { + let value = vec![EncodeOpaqueValue(value)]; + + let item = std::mem::take(self.0); + + *self.0 = match Vec::::append_or_new(item, &value) { + Ok(item) => item, + Err(_) => { + log::error!( + target: "runtime", + "Failed to append value, resetting storage item to `[value]`.", + ); + value.encode() + } + }; } } @@ -902,4 +888,24 @@ mod tests { Some(Blake2Hasher::hash(&[31]).as_ref().to_vec()), ); } + + #[test] + fn storage_append_works() { + let mut data = Vec::new(); + let mut append = StorageAppend::new(&mut data); + append.append(1u32.encode()); + append.append(2u32.encode()); + drop(append); + + assert_eq!(Vec::::decode(&mut &data[..]).unwrap(), vec![1, 2]); + + // Initialize with some invalid data + let mut data = vec![1]; + let mut append = StorageAppend::new(&mut data); + append.append(1u32.encode()); + append.append(2u32.encode()); + drop(append); + + assert_eq!(Vec::::decode(&mut &data[..]).unwrap(), vec![1, 2]); + } } diff --git a/primitives/storage/src/lib.rs b/primitives/storage/src/lib.rs index ed90c4584b2..c3e8d35075a 100644 --- a/primitives/storage/src/lib.rs +++ b/primitives/storage/src/lib.rs @@ -22,8 +22,7 @@ use serde::{Serialize, Deserialize}; use sp_debug_derive::RuntimeDebug; -use sp_std::vec::Vec; -use sp_std::ops::{Deref, DerefMut}; +use sp_std::{vec::Vec, ops::{Deref, DerefMut}}; use ref_cast::RefCast; /// Storage key. @@ -334,10 +333,15 @@ impl ChildTrieParentKeyId { } } -#[test] -fn test_prefix_default_child_info() { - let child_info = ChildInfo::new_default(b"any key"); - let prefix = child_info.child_type().parent_prefix(); - assert!(prefix.starts_with(well_known_keys::CHILD_STORAGE_KEY_PREFIX)); - assert!(prefix.starts_with(well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX)); +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_prefix_default_child_info() { + let child_info = ChildInfo::new_default(b"any key"); + let prefix = child_info.child_type().parent_prefix(); + assert!(prefix.starts_with(well_known_keys::CHILD_STORAGE_KEY_PREFIX)); + assert!(prefix.starts_with(well_known_keys::DEFAULT_CHILD_STORAGE_KEY_PREFIX)); + } } diff --git a/primitives/wasm-interface/src/lib.rs b/primitives/wasm-interface/src/lib.rs index eda2ebb1b52..1601590e908 100644 --- a/primitives/wasm-interface/src/lib.rs +++ b/primitives/wasm-interface/src/lib.rs @@ -119,7 +119,7 @@ mod private { /// Something that can be wrapped in a wasm `Pointer`. /// /// This trait is sealed. -pub trait PointerType: Sized { +pub trait PointerType: Sized + private::Sealed { /// The size of the type in wasm. const SIZE: u32 = mem::size_of::() as u32; } -- GitLab From 35e3930cb1dd72a0f6c653fd1dceb3369f483937 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Tue, 5 May 2020 09:35:56 -0400 Subject: [PATCH 135/167] Remove extra backtick in comments (#5898) --- primitives/runtime/src/traits.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/primitives/runtime/src/traits.rs b/primitives/runtime/src/traits.rs index 9664deb51be..a8f4836e8e4 100644 --- a/primitives/runtime/src/traits.rs +++ b/primitives/runtime/src/traits.rs @@ -779,7 +779,7 @@ pub trait SignedExtension: Codec + Debug + Sync + Send + Clone + Eq + PartialEq /// Returns the list of unique identifier for this signed extension. /// - /// As a [`SignedExtension`] can be a tuple of [`SignedExtension`]`s we need to return a `Vec` + /// As a [`SignedExtension`] can be a tuple of [`SignedExtension`]s we need to return a `Vec` /// that holds all the unique identifiers. Each individual `SignedExtension` must return /// *exactly* one identifier. /// -- GitLab From 32aeccbc6a552f764c67b53f5027db06c1564a69 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Tue, 5 May 2020 16:21:00 +0200 Subject: [PATCH 136/167] Fix staking fuzzer + make it check in ci. (#5899) --- .gitlab-ci.yml | 8 +++---- frame/staking/Cargo.toml | 4 ++-- frame/staking/fuzzer/src/submit_solution.rs | 25 ++++++++++++++++----- frame/staking/src/testing_utils.rs | 2 +- 4 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5b6143bd932..16c77738c61 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -242,7 +242,7 @@ test-frame-staking: - $DEPLOY_TAG script: - cd frame/staking/ - - WASM_BUILD_NO_COLOR=1 time cargo test --release --verbose --no-default-features --features std + - WASM_BUILD_NO_COLOR=1 time cargo test --release --verbose --no-default-features --features "std testing-utils" - sccache -s test-frame-examples-compile-to-wasm: @@ -334,7 +334,7 @@ check-web-wasm: - time cargo build --target=wasm32-unknown-unknown -p sp-consensus - time cargo build --target=wasm32-unknown-unknown -p sc-telemetry # Note: the command below is a bit weird because several Cargo issues prevent us from compiling the node in a more straight-forward way. - - time cargo +nightly build --manifest-path=bin/node/cli/Cargo.toml --no-default-features --features "browser" --target=wasm32-unknown-unknown -Z features=itarget + - time cargo +nightly build --manifest-path=bin/node/cli/Cargo.toml --no-default-features --features browser --target=wasm32-unknown-unknown -Z features=itarget - sccache -s test-full-crypto-feature: @@ -400,14 +400,14 @@ build-linux-substrate: &build-binary - printf '\n# building node-template\n\n' - ./.maintain/node-template-release.sh ./artifacts/substrate/substrate-node-template.tar.gz - sccache -s - + build-linux-subkey: &build-subkey <<: *build-binary before_script: - mkdir -p ./artifacts/subkey script: - - cd ./bin/utils/subkey + - cd ./bin/utils/subkey - BUILD_DUMMY_WASM_BINARY=1 time cargo build --release --verbose - cd - - mv ./target/release/subkey ./artifacts/subkey/. diff --git a/frame/staking/Cargo.toml b/frame/staking/Cargo.toml index 354b8dd3063..3ee07b5dec8 100644 --- a/frame/staking/Cargo.toml +++ b/frame/staking/Cargo.toml @@ -16,7 +16,7 @@ serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../primitives/phragmen" } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io", default-features = false } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } @@ -44,7 +44,7 @@ pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../staking/rewar substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } frame-benchmarking = { version = "2.0.0-dev", path = "../benchmarking" } rand_chacha = { version = "0.2" } -parking_lot = "0.10.0" +parking_lot = "0.10.2" env_logger = "0.7.1" hex = "0.4" diff --git a/frame/staking/fuzzer/src/submit_solution.rs b/frame/staking/fuzzer/src/submit_solution.rs index 90d8fc56efc..cc897abac2d 100644 --- a/frame/staking/fuzzer/src/submit_solution.rs +++ b/frame/staking/fuzzer/src/submit_solution.rs @@ -23,8 +23,9 @@ use pallet_staking::testing_utils::{ USER, get_seq_phragmen_solution, get_weak_solution, setup_chain_stakers, set_validator_count, signed_account, }; -use frame_support::assert_ok; +use frame_support::{assert_ok, storage::StorageValue}; use sp_runtime::{traits::Dispatchable, DispatchError}; +use sp_core::offchain::{testing::TestOffchainExt, OffchainExt}; mod mock; @@ -40,8 +41,19 @@ enum Mode { WeakerSubmission, } -pub fn new_test_ext() -> Result { - frame_system::GenesisConfig::default().build_storage::().map(Into::into) +pub fn new_test_ext(iterations: u32) -> sp_io::TestExternalities { + let mut ext: sp_io::TestExternalities = frame_system::GenesisConfig::default().build_storage::().map(Into::into) + .expect("Failed to create test externalities."); + + let (offchain, offchain_state) = TestOffchainExt::new(); + + let mut seed = [0u8; 32]; + seed[0..4].copy_from_slice(&iterations.to_le_bytes()); + offchain_state.write().seed = seed; + + ext.register_extension(OffchainExt::new(offchain)); + + ext } fn main() { @@ -56,7 +68,7 @@ fn main() { loop { fuzz!(|data: (u32, u32, u32, u32, u32)| { let (mut num_validators, mut num_nominators, mut edge_per_voter, mut to_elect, mode_u32) = data; - let ext = new_test_ext(); + let mut ext = new_test_ext(5); let mode: Mode = unsafe { std::mem::transmute(mode_u32) }; num_validators = to_range(num_validators, 50, 1000); num_nominators = to_range(num_nominators, 50, 2000); @@ -73,7 +85,7 @@ fn main() { to_elect, ); - ext.unwrap_or_default().execute_with(|| { + ext.execute_with(|| { // initial setup set_validator_count::(to_elect); pallet_staking::testing_utils::init_active_era(); @@ -82,6 +94,7 @@ fn main() { num_nominators, edge_per_voter, ); + >::put(pallet_staking::ElectionStatus::Open(1)); println!("++ Chain setup done."); @@ -140,7 +153,7 @@ fn main() { Mode::WeakerSubmission => { assert_eq!( call.dispatch(caller.into()).unwrap_err().error, - DispatchError::Module { index: 0, error: 15, message: Some("PhragmenWeakSubmission") }, + DispatchError::Module { index: 0, error: 16, message: Some("PhragmenWeakSubmission") }, ); }, // NOTE: so exhaustive pattern doesn't work here.. maybe some rust issue? or due to `#[repr(u32)]`? diff --git a/frame/staking/src/testing_utils.rs b/frame/staking/src/testing_utils.rs index 229b1e2c969..ede14c8cf73 100644 --- a/frame/staking/src/testing_utils.rs +++ b/frame/staking/src/testing_utils.rs @@ -50,7 +50,7 @@ pub fn random(a: u32, b: u32) -> u32 { pub fn set_validator_count(to_elect: u32) { ValidatorCount::put(to_elect); MinimumValidatorCount::put(to_elect / 2); - >::put(ElectionStatus::Open(T::BlockNumber::from(1u32))); + >::put(ElectionStatus::Closed); } /// Build an account with the given index. -- GitLab From ba4eec2d8b10df59a5a26a484ce109d2f73a81fe Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Tue, 5 May 2020 16:21:12 +0200 Subject: [PATCH 137/167] Validate block bodies when syncing (#5894) --- client/network/src/protocol/sync.rs | 43 +++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/client/network/src/protocol/sync.rs b/client/network/src/protocol/sync.rs index 37af47011d5..b720ba0aefe 100644 --- a/client/network/src/protocol/sync.rs +++ b/client/network/src/protocol/sync.rs @@ -27,6 +27,7 @@ //! order to update it. //! +use codec::Encode; use blocks::BlockCollection; use sp_blockchain::{Error as ClientError, Info as BlockchainInfo, HeaderMetadata}; use sp_consensus::{BlockOrigin, BlockStatus, @@ -45,7 +46,7 @@ use log::{debug, trace, warn, info, error}; use sp_runtime::{ Justification, generic::BlockId, - traits::{Block as BlockT, Header, NumberFor, Zero, One, CheckedSub, SaturatedConversion} + traits::{Block as BlockT, Header, NumberFor, Zero, One, CheckedSub, SaturatedConversion, Hash, HashFor} }; use std::{fmt, ops::Range, collections::{HashMap, HashSet, VecDeque}, sync::Arc}; @@ -727,8 +728,10 @@ impl ChainSync { match &mut peer.state { PeerSyncState::DownloadingNew(start_block) => { self.blocks.clear_peer_download(&who); - self.blocks.insert(*start_block, blocks, who.clone()); + let start_block = *start_block; peer.state = PeerSyncState::Available; + validate_blocks::(&blocks, &who)?; + self.blocks.insert(start_block, blocks, who.clone()); self.blocks .drain(self.best_queued_number + One::one()) .into_iter() @@ -750,6 +753,7 @@ impl ChainSync { debug!(target: "sync", "Empty block response from {}", who); return Err(BadPeer(who, rep::NO_BLOCK)); } + validate_blocks::(&blocks, &who)?; blocks.into_iter().map(|b| { IncomingBlock { hash: b.hash, @@ -834,6 +838,7 @@ impl ChainSync { } } else { // When request.is_none() this is a block announcement. Just accept blocks. + validate_blocks::(&blocks, &who)?; blocks.into_iter().map(|b| { IncomingBlock { hash: b.hash, @@ -1500,6 +1505,40 @@ fn is_descendent_of(client: &T, base: &Block::Hash, block: &Block::Has Ok(ancestor.hash == *base) } +fn validate_blocks(blocks: &Vec>, who: &PeerId) -> Result<(), BadPeer> { + for b in blocks { + if let Some(header) = &b.header { + let hash = header.hash(); + if hash != b.hash { + debug!( + target:"sync", + "Bad header received from {}. Expected hash {:?}, got {:?}", + who, + b.hash, + hash, + ); + return Err(BadPeer(who.clone(), rep::BAD_BLOCK)) + } + } + if let (Some(header), Some(body)) = (&b.header, &b.body) { + let expected = *header.extrinsics_root(); + let got = HashFor::::ordered_trie_root(body.iter().map(Encode::encode).collect()); + if expected != got { + debug!( + target:"sync", + "Bad extrinsic root for a block {} received from {}. Expected {:?}, got {:?}", + b.hash, + who, + expected, + got, + ); + return Err(BadPeer(who.clone(), rep::BAD_BLOCK)) + } + } + } + Ok(()) +} + #[cfg(test)] mod test { use super::*; -- GitLab From 4c5ef66c26b1eb14cea238e96df0071a666b8bc3 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 5 May 2020 18:19:57 +0200 Subject: [PATCH 138/167] Add repository metadata to grandpa-rpc-crate (#5893) --- .gitlab-ci.yml | 6 +++--- client/finality-grandpa/rpc/Cargo.toml | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 16c77738c61..32af31c8b79 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -222,9 +222,9 @@ test-dependency-rules: unleash-check: stage: test <<: *docker-env - only: - - master - - tags + only: + - master + - tags script: - cargo install cargo-unleash ${CARGO_UNLEASH_INSTALL_PARAMS} - cargo unleash check ${CARGO_UNLEASH_PKG_DEF} diff --git a/client/finality-grandpa/rpc/Cargo.toml b/client/finality-grandpa/rpc/Cargo.toml index f0c3580fe6e..5f7ccc9218e 100644 --- a/client/finality-grandpa/rpc/Cargo.toml +++ b/client/finality-grandpa/rpc/Cargo.toml @@ -3,6 +3,7 @@ name = "sc-finality-grandpa-rpc" version = "0.8.0-dev" authors = ["Parity Technologies "] description = "RPC extensions for the GRANDPA finality gadget" +repository = "https://github.com/paritytech/substrate/" edition = "2018" license = "GPL-3.0" -- GitLab From 42a0e6300117c57134c50f69b3734b21d16ce3d1 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 5 May 2020 20:50:46 +0200 Subject: [PATCH 139/167] Release of Alpha.7 (#5904) --- .gitlab-ci.yml | 6 +- Cargo.lock | 324 +++++++++--------- bin/node-template/node/Cargo.toml | 40 +-- bin/node-template/pallets/template/Cargo.toml | 12 +- bin/node-template/runtime/Cargo.toml | 48 +-- bin/node/bench/Cargo.toml | 18 +- bin/node/browser-testing/Cargo.toml | 6 +- bin/node/cli/Cargo.toml | 114 +++--- bin/node/executor/Cargo.toml | 48 +-- bin/node/inspect/Cargo.toml | 14 +- bin/node/primitives/Cargo.toml | 8 +- bin/node/rpc-client/Cargo.toml | 6 +- bin/node/rpc/Cargo.toml | 38 +- bin/node/runtime/Cargo.toml | 112 +++--- bin/node/testing/Cargo.toml | 66 ++-- bin/utils/chain-spec-builder/Cargo.toml | 10 +- bin/utils/subkey/Cargo.toml | 18 +- client/api/Cargo.toml | 46 +-- client/authority-discovery/Cargo.toml | 22 +- client/basic-authorship/Cargo.toml | 24 +- client/block-builder/Cargo.toml | 20 +- client/chain-spec/Cargo.toml | 14 +- client/chain-spec/derive/Cargo.toml | 2 +- client/cli/Cargo.toml | 32 +- client/consensus/aura/Cargo.toml | 44 +-- client/consensus/babe/Cargo.toml | 52 +-- client/consensus/babe/rpc/Cargo.toml | 24 +- client/consensus/common/Cargo.toml | 10 +- client/consensus/epochs/Cargo.toml | 10 +- client/consensus/manual-seal/Cargo.toml | 20 +- client/consensus/pow/Cargo.toml | 22 +- client/consensus/slots/Cargo.toml | 20 +- client/consensus/uncles/Cargo.toml | 14 +- client/db/Cargo.toml | 26 +- client/executor/Cargo.toml | 32 +- client/executor/common/Cargo.toml | 12 +- client/executor/runtime-test/Cargo.toml | 12 +- client/executor/wasmi/Cargo.toml | 12 +- client/executor/wasmtime/Cargo.toml | 12 +- client/finality-grandpa/Cargo.toml | 50 +-- client/finality-grandpa/rpc/Cargo.toml | 6 +- client/informant/Cargo.toml | 12 +- client/keystore/Cargo.toml | 6 +- client/network-gossip/Cargo.toml | 8 +- client/network/Cargo.toml | 26 +- client/network/test/Cargo.toml | 20 +- client/offchain/Cargo.toml | 24 +- client/peerset/Cargo.toml | 4 +- client/rpc-api/Cargo.toml | 14 +- client/rpc-servers/Cargo.toml | 4 +- client/rpc/Cargo.toml | 42 +-- client/service/Cargo.toml | 66 ++-- client/service/test/Cargo.toml | 40 +-- client/state-db/Cargo.toml | 6 +- client/telemetry/Cargo.toml | 2 +- client/tracing/Cargo.toml | 4 +- client/transaction-pool/Cargo.toml | 24 +- client/transaction-pool/graph/Cargo.toml | 12 +- frame/assets/Cargo.toml | 14 +- frame/aura/Cargo.toml | 26 +- frame/authority-discovery/Cargo.toml | 22 +- frame/authorship/Cargo.toml | 18 +- frame/babe/Cargo.toml | 30 +- frame/balances/Cargo.toml | 18 +- frame/benchmark/Cargo.toml | 14 +- frame/benchmarking/Cargo.toml | 16 +- frame/collective/Cargo.toml | 18 +- frame/contracts/Cargo.toml | 26 +- frame/contracts/common/Cargo.toml | 6 +- frame/contracts/rpc/Cargo.toml | 16 +- frame/contracts/rpc/runtime-api/Cargo.toml | 10 +- frame/democracy/Cargo.toml | 22 +- frame/elections-phragmen/Cargo.toml | 22 +- frame/elections/Cargo.toml | 16 +- frame/evm/Cargo.toml | 18 +- frame/example-offchain-worker/Cargo.toml | 14 +- frame/example/Cargo.toml | 18 +- frame/executive/Cargo.toml | 26 +- frame/finality-tracker/Cargo.toml | 18 +- frame/generic-asset/Cargo.toml | 14 +- frame/grandpa/Cargo.toml | 22 +- frame/identity/Cargo.toml | 18 +- frame/im-online/Cargo.toml | 24 +- frame/indices/Cargo.toml | 18 +- frame/membership/Cargo.toml | 14 +- frame/metadata/Cargo.toml | 6 +- frame/nicks/Cargo.toml | 16 +- frame/offences/Cargo.toml | 18 +- frame/offences/benchmarking/Cargo.toml | 24 +- frame/randomness-collective-flip/Cargo.toml | 14 +- frame/recovery/Cargo.toml | 16 +- frame/scheduler/Cargo.toml | 16 +- frame/scored-pool/Cargo.toml | 16 +- frame/session/Cargo.toml | 22 +- frame/session/benchmarking/Cargo.toml | 26 +- frame/society/Cargo.toml | 16 +- frame/staking/Cargo.toml | 42 +-- frame/staking/fuzzer/Cargo.toml | 32 +- frame/staking/reward-curve/Cargo.toml | 4 +- frame/sudo/Cargo.toml | 14 +- frame/support/Cargo.toml | 24 +- frame/support/procedural/Cargo.toml | 4 +- frame/support/procedural/tools/Cargo.toml | 4 +- .../procedural/tools/derive/Cargo.toml | 2 +- frame/support/test/Cargo.toml | 12 +- frame/system/Cargo.toml | 16 +- frame/system/benchmarking/Cargo.toml | 16 +- frame/system/rpc/runtime-api/Cargo.toml | 4 +- frame/timestamp/Cargo.toml | 22 +- frame/transaction-payment/Cargo.toml | 20 +- frame/transaction-payment/rpc/Cargo.toml | 14 +- .../rpc/runtime-api/Cargo.toml | 10 +- frame/treasury/Cargo.toml | 18 +- frame/utility/Cargo.toml | 20 +- frame/vesting/Cargo.toml | 20 +- primitives/allocator/Cargo.toml | 8 +- primitives/api/Cargo.toml | 14 +- primitives/api/proc-macro/Cargo.toml | 2 +- primitives/api/test/Cargo.toml | 16 +- primitives/application-crypto/Cargo.toml | 8 +- primitives/application-crypto/test/Cargo.toml | 8 +- primitives/arithmetic/Cargo.toml | 6 +- primitives/arithmetic/fuzzer/Cargo.toml | 2 +- primitives/authority-discovery/Cargo.toml | 10 +- primitives/authorship/Cargo.toml | 8 +- primitives/block-builder/Cargo.toml | 10 +- primitives/blockchain/Cargo.toml | 10 +- primitives/chain-spec/Cargo.toml | 2 +- primitives/consensus/aura/Cargo.toml | 14 +- primitives/consensus/babe/Cargo.toml | 18 +- primitives/consensus/common/Cargo.toml | 16 +- primitives/consensus/pow/Cargo.toml | 10 +- primitives/consensus/vrf/Cargo.toml | 8 +- primitives/core/Cargo.toml | 14 +- primitives/database/Cargo.toml | 2 +- primitives/debug-derive/Cargo.toml | 2 +- primitives/externalities/Cargo.toml | 6 +- primitives/finality-grandpa/Cargo.toml | 10 +- primitives/finality-tracker/Cargo.toml | 6 +- primitives/inherents/Cargo.toml | 6 +- primitives/io/Cargo.toml | 16 +- primitives/keyring/Cargo.toml | 6 +- primitives/offchain/Cargo.toml | 10 +- primitives/panic-handler/Cargo.toml | 2 +- primitives/phragmen/Cargo.toml | 14 +- primitives/phragmen/compact/Cargo.toml | 2 +- primitives/phragmen/fuzzer/Cargo.toml | 12 +- primitives/rpc/Cargo.toml | 4 +- primitives/runtime-interface/Cargo.toml | 18 +- .../runtime-interface/proc-macro/Cargo.toml | 2 +- .../test-wasm-deprecated/Cargo.toml | 8 +- .../runtime-interface/test-wasm/Cargo.toml | 8 +- primitives/runtime-interface/test/Cargo.toml | 12 +- primitives/runtime/Cargo.toml | 16 +- primitives/sandbox/Cargo.toml | 10 +- primitives/serializer/Cargo.toml | 2 +- primitives/session/Cargo.toml | 10 +- primitives/staking/Cargo.toml | 6 +- primitives/state-machine/Cargo.toml | 12 +- primitives/std/Cargo.toml | 2 +- primitives/storage/Cargo.toml | 6 +- primitives/test-primitives/Cargo.toml | 6 +- primitives/timestamp/Cargo.toml | 10 +- primitives/tracing/Cargo.toml | 2 +- primitives/transaction-pool/Cargo.toml | 8 +- primitives/trie/Cargo.toml | 8 +- primitives/utils/Cargo.toml | 2 +- primitives/version/Cargo.toml | 6 +- primitives/wasm-interface/Cargo.toml | 4 +- test-utils/Cargo.toml | 2 +- test-utils/client/Cargo.toml | 22 +- test-utils/runtime/Cargo.toml | 54 +-- test-utils/runtime/client/Cargo.toml | 18 +- .../runtime/transaction-pool/Cargo.toml | 8 +- utils/browser/Cargo.toml | 12 +- utils/build-script-utils/Cargo.toml | 2 +- utils/fork-tree/Cargo.toml | 2 +- utils/frame/benchmarking-cli/Cargo.toml | 20 +- utils/frame/rpc/support/Cargo.toml | 10 +- utils/frame/rpc/system/Cargo.toml | 18 +- utils/prometheus/Cargo.toml | 2 +- 181 files changed, 1668 insertions(+), 1668 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 32af31c8b79..16c77738c61 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -222,9 +222,9 @@ test-dependency-rules: unleash-check: stage: test <<: *docker-env - only: - - master - - tags + only: + - master + - tags script: - cargo install cargo-unleash ${CARGO_UNLEASH_INSTALL_PARAMS} - cargo unleash check ${CARGO_UNLEASH_PKG_DEF} diff --git a/Cargo.lock b/Cargo.lock index 3fce87f7aaf..1ca9b54f89c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -586,7 +586,7 @@ dependencies = [ [[package]] name = "chain-spec-builder" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "ansi_term 0.12.1", "node-cli", @@ -1405,14 +1405,14 @@ checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] name = "fork-tree" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", ] [[package]] name = "frame-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -1428,7 +1428,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "parity-scale-codec", @@ -1445,7 +1445,7 @@ dependencies = [ [[package]] name = "frame-executive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -1465,7 +1465,7 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "11.0.0-dev" +version = "11.0.0-alpha.7" dependencies = [ "parity-scale-codec", "serde", @@ -1475,7 +1475,7 @@ dependencies = [ [[package]] name = "frame-support" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "bitmask", "frame-metadata", @@ -1500,7 +1500,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support-procedural-tools", "proc-macro2", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1521,7 +1521,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -1547,7 +1547,7 @@ dependencies = [ [[package]] name = "frame-system" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "criterion 0.2.11", "frame-support", @@ -1565,7 +1565,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -1580,7 +1580,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-api", @@ -3375,7 +3375,7 @@ dependencies = [ [[package]] name = "node-bench" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "fs_extra", @@ -3404,7 +3404,7 @@ dependencies = [ [[package]] name = "node-browser-testing" -version = "2.0.0" +version = "2.0.0-alpha.7" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -3421,7 +3421,7 @@ dependencies = [ [[package]] name = "node-cli" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "assert_cmd", "frame-benchmarking-cli", @@ -3494,7 +3494,7 @@ dependencies = [ [[package]] name = "node-executor" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "criterion 0.3.1", "frame-benchmarking", @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "node-inspect" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "log", @@ -3544,7 +3544,7 @@ dependencies = [ [[package]] name = "node-primitives" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "pretty_assertions", "sp-core", @@ -3554,7 +3554,7 @@ dependencies = [ [[package]] name = "node-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "jsonrpc-core", "node-primitives", @@ -3579,7 +3579,7 @@ dependencies = [ [[package]] name = "node-rpc-client" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "env_logger 0.7.1", "futures 0.1.29", @@ -3592,7 +3592,7 @@ dependencies = [ [[package]] name = "node-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-executive", @@ -3657,7 +3657,7 @@ dependencies = [ [[package]] name = "node-template" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "futures 0.3.4", "log", @@ -3686,7 +3686,7 @@ dependencies = [ [[package]] name = "node-template-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-executive", "frame-support", @@ -3718,7 +3718,7 @@ dependencies = [ [[package]] name = "node-testing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "criterion 0.3.1", "frame-support", @@ -3933,7 +3933,7 @@ dependencies = [ [[package]] name = "pallet-assets" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -3947,7 +3947,7 @@ dependencies = [ [[package]] name = "pallet-aura" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -3969,7 +3969,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -3987,7 +3987,7 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4003,7 +4003,7 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4025,7 +4025,7 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4041,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-benchmark" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4055,7 +4055,7 @@ dependencies = [ [[package]] name = "pallet-collective" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4072,7 +4072,7 @@ dependencies = [ [[package]] name = "pallet-contracts" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "assert_matches", "frame-support", @@ -4098,7 +4098,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -4107,7 +4107,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4126,7 +4126,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -4137,7 +4137,7 @@ dependencies = [ [[package]] name = "pallet-democracy" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4156,7 +4156,7 @@ dependencies = [ [[package]] name = "pallet-elections" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4172,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4191,7 +4191,7 @@ dependencies = [ [[package]] name = "pallet-evm" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "evm", "frame-support", @@ -4211,7 +4211,7 @@ dependencies = [ [[package]] name = "pallet-example" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4227,7 +4227,7 @@ dependencies = [ [[package]] name = "pallet-example-offchain-worker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-finality-tracker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-generic-asset" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4273,7 +4273,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4291,7 +4291,7 @@ dependencies = [ [[package]] name = "pallet-identity" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4308,7 +4308,7 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4327,7 +4327,7 @@ dependencies = [ [[package]] name = "pallet-indices" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4343,7 +4343,7 @@ dependencies = [ [[package]] name = "pallet-membership" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4357,7 +4357,7 @@ dependencies = [ [[package]] name = "pallet-nicks" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4372,7 +4372,7 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4388,7 +4388,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4406,7 +4406,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4420,7 +4420,7 @@ dependencies = [ [[package]] name = "pallet-recovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "enumflags2", "frame-support", @@ -4436,7 +4436,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4451,7 +4451,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4466,7 +4466,7 @@ dependencies = [ [[package]] name = "pallet-session" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4486,7 +4486,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4506,7 +4506,7 @@ dependencies = [ [[package]] name = "pallet-society" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4522,7 +4522,7 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "env_logger 0.7.1", "frame-benchmarking", @@ -4575,7 +4575,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4586,7 +4586,7 @@ dependencies = [ [[package]] name = "pallet-sudo" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4600,7 +4600,7 @@ dependencies = [ [[package]] name = "pallet-template" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4612,7 +4612,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4630,7 +4630,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4663,7 +4663,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "parity-scale-codec", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4692,7 +4692,7 @@ dependencies = [ [[package]] name = "pallet-utility" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-benchmarking", "frame-support", @@ -4708,7 +4708,7 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5832,7 +5832,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "bytes 0.5.4", "derive_more", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -5886,7 +5886,7 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "impl-trait-for-tuples", "sc-chain-spec-derive", @@ -5918,7 +5918,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5928,7 +5928,7 @@ dependencies = [ [[package]] name = "sc-cli" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "ansi_term 0.12.1", "app_dirs", @@ -5970,7 +5970,7 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "fnv", @@ -6008,7 +6008,7 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "blake2-rfc", "env_logger 0.7.1", @@ -6041,7 +6041,7 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6051,7 +6051,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "env_logger 0.7.1", @@ -6088,7 +6088,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "env_logger 0.7.1", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "futures 0.3.4", @@ -6162,7 +6162,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6174,7 +6174,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "derive_more", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "sc-consensus-pow" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "futures 0.3.4", @@ -6223,7 +6223,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -6244,7 +6244,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "log", "sc-client-api", @@ -6257,7 +6257,7 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "derive_more", @@ -6292,7 +6292,7 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "log", @@ -6308,7 +6308,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "log", "parity-scale-codec", @@ -6322,7 +6322,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "cranelift-codegen", @@ -6343,7 +6343,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "derive_more", @@ -6387,7 +6387,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "finality-grandpa", @@ -6404,7 +6404,7 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "ansi_term 0.12.1", "futures 0.3.4", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "hex", @@ -6435,7 +6435,7 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "async-std", @@ -6494,7 +6494,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "async-std", "futures 0.3.4", @@ -6537,7 +6537,7 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "bytes 0.5.4", "env_logger 0.7.1", @@ -6570,7 +6570,7 @@ dependencies = [ [[package]] name = "sc-peerset" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "futures 0.3.4", "libp2p", @@ -6583,7 +6583,7 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "assert_matches", "futures 0.1.29", @@ -6621,7 +6621,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "futures 0.3.4", @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "jsonrpc-core", "jsonrpc-http-server", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-service" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "exit-future", @@ -6767,7 +6767,7 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "env_logger 0.7.1", "log", @@ -6781,7 +6781,7 @@ dependencies = [ [[package]] name = "sc-telemetry" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "bytes 0.5.4", "futures 0.3.4", @@ -6802,7 +6802,7 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "erased-serde", "log", @@ -6817,7 +6817,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "assert_matches", "criterion 0.3.1", @@ -6840,7 +6840,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "assert_matches", "derive_more", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "sp-allocator" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "log", @@ -7220,7 +7220,7 @@ dependencies = [ [[package]] name = "sp-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "hash-db", "parity-scale-codec", @@ -7235,7 +7235,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7265,7 +7265,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "serde", @@ -7287,7 +7287,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "criterion 0.3.1", "integer-sqrt", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-api", @@ -7325,7 +7325,7 @@ dependencies = [ [[package]] name = "sp-authorship" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7335,7 +7335,7 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-api", @@ -7346,7 +7346,7 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "log", @@ -7361,7 +7361,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "serde", "serde_json", @@ -7369,7 +7369,7 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "derive_more", "futures 0.3.4", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-api", @@ -7404,7 +7404,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "merlin", "parity-scale-codec", @@ -7420,7 +7420,7 @@ dependencies = [ [[package]] name = "sp-consensus-pow" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-api", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -7442,7 +7442,7 @@ dependencies = [ [[package]] name = "sp-core" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "base58", "blake2-rfc", @@ -7487,7 +7487,7 @@ dependencies = [ [[package]] name = "sp-database" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -7495,7 +7495,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "environmental", "parity-scale-codec", @@ -7514,7 +7514,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "serde", @@ -7526,7 +7526,7 @@ dependencies = [ [[package]] name = "sp-finality-tracker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7535,7 +7535,7 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "parity-scale-codec", @@ -7546,7 +7546,7 @@ dependencies = [ [[package]] name = "sp-io" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "futures 0.3.4", "hash-db", @@ -7565,7 +7565,7 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "lazy_static", "sp-core", @@ -7575,7 +7575,7 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "sp-api", "sp-core", @@ -7585,7 +7585,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "backtrace", "log", @@ -7593,7 +7593,7 @@ dependencies = [ [[package]] name = "sp-phragmen" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "rand 0.7.3", @@ -7608,7 +7608,7 @@ dependencies = [ [[package]] name = "sp-phragmen-compact" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7629,7 +7629,7 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "serde", "serde_json", @@ -7638,7 +7638,7 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "hash256-std-hasher", "impl-trait-for-tuples", @@ -7660,7 +7660,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "primitive-types", @@ -7680,7 +7680,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "Inflector", "proc-macro-crate", @@ -7728,7 +7728,7 @@ dependencies = [ [[package]] name = "sp-sandbox" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "assert_matches", "parity-scale-codec", @@ -7742,7 +7742,7 @@ dependencies = [ [[package]] name = "sp-serializer" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "serde", "serde_json", @@ -7750,7 +7750,7 @@ dependencies = [ [[package]] name = "sp-session" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "sp-api", "sp-core", @@ -7760,7 +7760,7 @@ dependencies = [ [[package]] name = "sp-staking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -7769,7 +7769,7 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "hash-db", "hex-literal", @@ -7789,11 +7789,11 @@ dependencies = [ [[package]] name = "sp-std" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" [[package]] name = "sp-storage" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "impl-serde 0.2.3", "ref-cast", @@ -7816,7 +7816,7 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -7829,14 +7829,14 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "tracing", ] [[package]] name = "sp-transaction-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "derive_more", "futures 0.3.4", @@ -7850,7 +7850,7 @@ dependencies = [ [[package]] name = "sp-trie" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "criterion 0.2.11", "hash-db", @@ -7868,7 +7868,7 @@ dependencies = [ [[package]] name = "sp-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "futures 0.3.4", "futures-core", @@ -7878,7 +7878,7 @@ dependencies = [ [[package]] name = "sp-version" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "impl-serde 0.2.3", "parity-scale-codec", @@ -7889,7 +7889,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8004,7 +8004,7 @@ dependencies = [ [[package]] name = "subkey" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "clap", "derive_more", @@ -8045,7 +8045,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "chrono", "clear_on_drop", @@ -8071,14 +8071,14 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "platforms", ] [[package]] name = "substrate-frame-rpc-support" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "frame-support", "frame-system", @@ -8094,7 +8094,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" dependencies = [ "env_logger 0.7.1", "frame-system-rpc-runtime-api", @@ -8117,7 +8117,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" dependencies = [ "async-std", "derive_more", @@ -8226,7 +8226,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" [[package]] name = "substrate-wasm-builder" diff --git a/bin/node-template/node/Cargo.toml b/bin/node-template/node/Cargo.toml index 030672ee6ff..323fe07518b 100644 --- a/bin/node-template/node/Cargo.toml +++ b/bin/node-template/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-template" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Anonymous"] description = "Substrate Node template" edition = "2018" @@ -21,25 +21,25 @@ log = "0.4.8" structopt = "0.3.8" parking_lot = "0.10.0" -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } -sc-service = { version = "0.8.0-dev", path = "../../../client/service" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } -sc-network = { version = "0.8.0-dev", path = "../../../client/network" } -sc-consensus-aura = { version = "0.8.0-dev", path = "../../../client/consensus/aura" } -sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } -sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } -sp-finality-grandpa = { version = "2.0.0-dev", path = "../../../primitives/finality-grandpa" } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sc-basic-authorship = { path = "../../../client/basic-authorship", version = "0.8.0-dev"} +sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } +sc-service = { version = "0.8.0-alpha.7", path = "../../../client/service" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sc-network = { version = "0.8.0-alpha.7", path = "../../../client/network" } +sc-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../client/consensus/aura" } +sp-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/aura" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } +sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa" } +sp-finality-grandpa = { version = "2.0.0-alpha.7", path = "../../../primitives/finality-grandpa" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sc-basic-authorship = { path = "../../../client/basic-authorship", version = "0.8.0-alpha.7"} -node-template-runtime = { version = "2.0.0-dev", path = "../runtime" } +node-template-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } [build-dependencies] -substrate-build-script-utils = { version = "2.0.0-dev", path = "../../../utils/build-script-utils" } +substrate-build-script-utils = { version = "2.0.0-alpha.7", path = "../../../utils/build-script-utils" } diff --git a/bin/node-template/pallets/template/Cargo.toml b/bin/node-template/pallets/template/Cargo.toml index 01484c608cf..22da6f23153 100644 --- a/bin/node-template/pallets/template/Cargo.toml +++ b/bin/node-template/pallets/template/Cargo.toml @@ -2,7 +2,7 @@ authors = ['Anonymous'] edition = '2018' name = 'pallet-template' -version = "2.0.0-dev" +version = "2.0.0-alpha.7" license = "Unlicense" homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" @@ -16,26 +16,26 @@ codec = { package = "parity-scale-codec", version = "1.3.0", default-features = [dependencies.frame-support] default-features = false -version = "2.0.0-dev" +version = "2.0.0-alpha.7" path = "../../../../frame/support" [dependencies.frame-system] default-features = false -version = "2.0.0-dev" +version = "2.0.0-alpha.7" path = "../../../../frame/system" [dev-dependencies.sp-core] default-features = false -version = "2.0.0-dev" +version = "2.0.0-alpha.7" path = "../../../../primitives/core" [dev-dependencies.sp-io] default-features = false -version = "2.0.0-dev" +version = "2.0.0-alpha.7" path = "../../../../primitives/io" [dev-dependencies.sp-runtime] default-features = false -version = "2.0.0-dev" +version = "2.0.0-alpha.7" path = "../../../../primitives/runtime" diff --git a/bin/node-template/runtime/Cargo.toml b/bin/node-template/runtime/Cargo.toml index dfd517130b2..d71bf9c5757 100644 --- a/bin/node-template/runtime/Cargo.toml +++ b/bin/node-template/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-template-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Anonymous"] edition = "2018" license = "Unlicense" @@ -13,31 +13,31 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -aura = { version = "2.0.0-dev", default-features = false, package = "pallet-aura", path = "../../../frame/aura" } -balances = { version = "2.0.0-dev", default-features = false, package = "pallet-balances", path = "../../../frame/balances" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } -grandpa = { version = "2.0.0-dev", default-features = false, package = "pallet-grandpa", path = "../../../frame/grandpa" } -randomness-collective-flip = { version = "2.0.0-dev", default-features = false, package = "pallet-randomness-collective-flip", path = "../../../frame/randomness-collective-flip" } -sudo = { version = "2.0.0-dev", default-features = false, package = "pallet-sudo", path = "../../../frame/sudo" } -system = { version = "2.0.0-dev", default-features = false, package = "frame-system", path = "../../../frame/system" } -timestamp = { version = "2.0.0-dev", default-features = false, package = "pallet-timestamp", path = "../../../frame/timestamp" } -transaction-payment = { version = "2.0.0-dev", default-features = false, package = "pallet-transaction-payment", path = "../../../frame/transaction-payment" } -frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../../frame/executive" } +aura = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-aura", path = "../../../frame/aura" } +balances = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-balances", path = "../../../frame/balances" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } +grandpa = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-grandpa", path = "../../../frame/grandpa" } +randomness-collective-flip = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-randomness-collective-flip", path = "../../../frame/randomness-collective-flip" } +sudo = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-sudo", path = "../../../frame/sudo" } +system = { version = "2.0.0-alpha.7", default-features = false, package = "frame-system", path = "../../../frame/system" } +timestamp = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-timestamp", path = "../../../frame/timestamp" } +transaction-payment = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-transaction-payment", path = "../../../frame/transaction-payment" } +frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/executive" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/api" } -sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-dev"} -sp-consensus-aura = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/consensus/aura" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } -sp-inherents = { path = "../../../primitives/inherents", default-features = false, version = "2.0.0-dev"} -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/io" } -sp-offchain = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/offchain" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -sp-session = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/session" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/transaction-pool" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/version" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/api" } +sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-alpha.7"} +sp-consensus-aura = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/consensus/aura" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-inherents = { path = "../../../primitives/inherents", default-features = false, version = "2.0.0-alpha.7"} +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/io" } +sp-offchain = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/offchain" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/session" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/transaction-pool" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/version" } -template = { version = "2.0.0-dev", default-features = false, path = "../pallets/template", package = "pallet-template" } +template = { version = "2.0.0-alpha.7", default-features = false, path = "../pallets/template", package = "pallet-template" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/bin/node/bench/Cargo.toml b/bin/node/bench/Cargo.toml index 63cd44997ad..a04d6ba00fd 100644 --- a/bin/node/bench/Cargo.toml +++ b/bin/node/bench/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-bench" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Substrate node integration benchmarks." edition = "2018" @@ -10,20 +10,20 @@ license = "GPL-3.0" [dependencies] log = "0.4.8" -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -node-testing = { version = "2.0.0-dev", path = "../testing" } -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +node-testing = { version = "2.0.0-alpha.7", path = "../testing" } +sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api/" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } serde = "1.0.101" serde_json = "1.0.41" structopt = "0.3" derive_more = "0.99.2" kvdb = "0.5" kvdb-rocksdb = "0.7" -sp-trie = { version = "2.0.0-alpha.5", path = "../../../primitives/trie" } -sp-core = { version = "2.0.0-alpha.5", path = "../../../primitives/core" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } hash-db = "0.15.2" tempfile = "3.1.0" fs_extra = "1" diff --git a/bin/node/browser-testing/Cargo.toml b/bin/node/browser-testing/Cargo.toml index 4b8d08af90a..8be918708dc 100644 --- a/bin/node/browser-testing/Cargo.toml +++ b/bin/node/browser-testing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-browser-testing" -version = "2.0.0" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Tests for the in-browser light client." edition = "2018" @@ -17,5 +17,5 @@ wasm-bindgen-futures = "0.4.10" wasm-bindgen-test = "0.3.10" futures = "0.3.4" -node-cli = { path = "../cli", default-features = false, features = ["browser"] } -sc-rpc-api = { path = "../../../client/rpc-api" } +node-cli = { path = "../cli", default-features = false, features = ["browser"] , version = "2.0.0-alpha.7"} +sc-rpc-api = { path = "../../../client/rpc-api" , version = "0.8.0-alpha.7"} diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml index 5b23a989cd0..eabf2e48e34 100644 --- a/bin/node/cli/Cargo.toml +++ b/bin/node/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-cli" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Generic Substrate node implementation in Rust." build = "build.rs" @@ -46,74 +46,74 @@ tracing = "0.1.10" parking_lot = "0.10.0" # primitives -sp-authority-discovery = { version = "2.0.0-dev", path = "../../../primitives/authority-discovery" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } -grandpa-primitives = { version = "2.0.0-dev", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/timestamp" } -sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/finality-tracker" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sp-authority-discovery = { version = "2.0.0-alpha.7", path = "../../../primitives/authority-discovery" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } +grandpa-primitives = { version = "2.0.0-alpha.7", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/timestamp" } +sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/finality-tracker" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } # client dependencies -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-chain-spec = { version = "2.0.0-dev", path = "../../../client/chain-spec" } -sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } -sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } -sc-network = { version = "0.8.0-dev", path = "../../../client/network" } -sc-consensus-babe = { version = "0.8.0-dev", path = "../../../client/consensus/babe" } -grandpa = { version = "0.8.0-dev", package = "sc-finality-grandpa", path = "../../../client/finality-grandpa" } -sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../../../client/db" } -sc-offchain = { version = "2.0.0-dev", path = "../../../client/offchain" } -sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } -sc-basic-authorship = { version = "0.8.0-dev", path = "../../../client/basic-authorship" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } -sc-tracing = { version = "2.0.0-dev", path = "../../../client/tracing" } -sc-telemetry = { version = "2.0.0-dev", path = "../../../client/telemetry" } -sc-authority-discovery = { version = "0.8.0-dev", path = "../../../client/authority-discovery" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } +sc-chain-spec = { version = "2.0.0-alpha.7", path = "../../../client/chain-spec" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool" } +sc-network = { version = "0.8.0-alpha.7", path = "../../../client/network" } +sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe" } +grandpa = { version = "0.8.0-alpha.7", package = "sc-finality-grandpa", path = "../../../client/finality-grandpa" } +sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/db" } +sc-offchain = { version = "2.0.0-alpha.7", path = "../../../client/offchain" } +sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } +sc-basic-authorship = { version = "0.8.0-alpha.7", path = "../../../client/basic-authorship" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } +sc-tracing = { version = "2.0.0-alpha.7", path = "../../../client/tracing" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../../../client/telemetry" } +sc-authority-discovery = { version = "0.8.0-alpha.7", path = "../../../client/authority-discovery" } # frame dependencies -pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../frame/timestamp" } -pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } -frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } -pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } -pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../../frame/im-online" } -pallet-authority-discovery = { version = "2.0.0-dev", path = "../../../frame/authority-discovery" } -pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } +pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/timestamp" } +pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } +frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } +pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/im-online" } +pallet-authority-discovery = { version = "2.0.0-alpha.7", path = "../../../frame/authority-discovery" } +pallet-staking = { version = "2.0.0-alpha.7", path = "../../../frame/staking" } # node-specific dependencies -node-runtime = { version = "2.0.0-dev", path = "../runtime" } -node-rpc = { version = "2.0.0-dev", path = "../rpc" } -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -node-executor = { version = "2.0.0-dev", path = "../executor" } +node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +node-rpc = { version = "2.0.0-alpha.7", path = "../rpc" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +node-executor = { version = "2.0.0-alpha.7", path = "../executor" } # CLI-specific dependencies -sc-cli = { version = "0.8.0-dev", optional = true, path = "../../../client/cli" } -frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } -node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } +sc-cli = { version = "0.8.0-alpha.7", optional = true, path = "../../../client/cli" } +frame-benchmarking-cli = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/frame/benchmarking-cli" } +node-inspect = { version = "0.8.0-alpha.7", optional = true, path = "../inspect" } # WASM-specific dependencies wasm-bindgen = { version = "0.2.57", optional = true } wasm-bindgen-futures = { version = "0.4.7", optional = true } -browser-utils = { package = "substrate-browser-utils", path = "../../../utils/browser", optional = true, version = "0.8.0-dev"} +browser-utils = { package = "substrate-browser-utils", path = "../../../utils/browser", optional = true, version = "0.8.0-alpha.7"} [target.'cfg(target_arch="x86_64")'.dependencies] -node-executor = { version = "2.0.0-dev", path = "../executor", features = [ "wasmtime" ] } -sc-cli = { version = "0.8.0-dev", optional = true, path = "../../../client/cli", features = [ "wasmtime" ] } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service", features = [ "wasmtime" ] } +node-executor = { version = "2.0.0-alpha.7", path = "../executor", features = [ "wasmtime" ] } +sc-cli = { version = "0.8.0-alpha.7", optional = true, path = "../../../client/cli", features = [ "wasmtime" ] } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service", features = [ "wasmtime" ] } [dev-dependencies] -sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } -sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } -sc-consensus-babe = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../../client/consensus/babe" } -sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } +sc-consensus-babe = { version = "0.8.0-alpha.7", features = ["test-helpers"], path = "../../../client/consensus/babe" } +sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../../client/consensus/epochs" } sc-service-test = { version = "2.0.0-dev", path = "../../../client/service/test" } futures = "0.3.4" tempfile = "3.1.0" @@ -125,12 +125,12 @@ platforms = "0.2.1" [build-dependencies] structopt = { version = "0.3.8", optional = true } -node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } -frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } -substrate-build-script-utils = { version = "2.0.0-dev", optional = true, path = "../../../utils/build-script-utils" } +node-inspect = { version = "0.8.0-alpha.7", optional = true, path = "../inspect" } +frame-benchmarking-cli = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/frame/benchmarking-cli" } +substrate-build-script-utils = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/build-script-utils" } [build-dependencies.sc-cli] -version = "0.8.0-dev" +version = "0.8.0-alpha.7" package = "sc-cli" path = "../../../client/cli" optional = true diff --git a/bin/node/executor/Cargo.toml b/bin/node/executor/Cargo.toml index 99bd83bb4a2..dde1830837d 100644 --- a/bin/node/executor/Cargo.toml +++ b/bin/node/executor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-executor" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Substrate node implementation in Rust." edition = "2018" @@ -13,33 +13,33 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0" } -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -node-runtime = { version = "2.0.0-dev", path = "../runtime" } -sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } -sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } trie-root = "0.16.0" -frame-benchmarking = { version = "2.0.0-dev", path = "../../../frame/benchmarking" } +frame-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/benchmarking" } [dev-dependencies] criterion = "0.3.0" -frame-support = { version = "2.0.0-dev", path = "../../../frame/support" } -frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } -node-testing = { version = "2.0.0-dev", path = "../testing" } -pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } -pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } -pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } -pallet-im-online = { version = "2.0.0-dev", path = "../../../frame/im-online" } -pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } -pallet-session = { version = "2.0.0-dev", path = "../../../frame/session" } -pallet-timestamp = { version = "2.0.0-dev", path = "../../../frame/timestamp" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } -pallet-treasury = { version = "2.0.0-dev", path = "../../../frame/treasury" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } +frame-support = { version = "2.0.0-alpha.7", path = "../../../frame/support" } +frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } +node-testing = { version = "2.0.0-alpha.7", path = "../testing" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } +pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } +pallet-grandpa = { version = "2.0.0-alpha.7", path = "../../../frame/grandpa" } +pallet-im-online = { version = "2.0.0-alpha.7", path = "../../../frame/im-online" } +pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } +pallet-session = { version = "2.0.0-alpha.7", path = "../../../frame/session" } +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../../frame/timestamp" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } +pallet-treasury = { version = "2.0.0-alpha.7", path = "../../../frame/treasury" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } substrate-test-client = { version = "2.0.0-dev", path = "../../../test-utils/client" } wabt = "0.9.2" diff --git a/bin/node/inspect/Cargo.toml b/bin/node/inspect/Cargo.toml index 03d3a94b627..a723a3e829b 100644 --- a/bin/node/inspect/Cargo.toml +++ b/bin/node/inspect/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-inspect" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,10 +14,10 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.3.0" } derive_more = "0.99" log = "0.4.8" -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } structopt = "0.3.8" diff --git a/bin/node/primitives/Cargo.toml b/bin/node/primitives/Cargo.toml index 11959bde75c..41dbf58e703 100644 --- a/bin/node/primitives/Cargo.toml +++ b/bin/node/primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-primitives" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -11,11 +11,11 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } [dev-dependencies] -sp-serializer = { version = "2.0.0-dev", path = "../../../primitives/serializer" } +sp-serializer = { version = "2.0.0-alpha.7", path = "../../../primitives/serializer" } pretty_assertions = "0.6.1" [features] diff --git a/bin/node/rpc-client/Cargo.toml b/bin/node/rpc-client/Cargo.toml index 1df3590d1fe..1af16ce335b 100644 --- a/bin/node/rpc-client/Cargo.toml +++ b/bin/node/rpc-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-rpc-client" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,5 +16,5 @@ futures = "0.1.29" hyper = "0.12.35" jsonrpc-core-client = { version = "14.0.5", default-features = false, features = ["http"] } log = "0.4.8" -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } diff --git a/bin/node/rpc/Cargo.toml b/bin/node/rpc/Cargo.toml index f0c5fc250b0..76965e6e1a3 100644 --- a/bin/node/rpc/Cargo.toml +++ b/bin/node/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -11,22 +11,22 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } jsonrpc-core = "14.0.3" -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -node-runtime = { version = "2.0.0-dev", path = "../runtime" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -pallet-contracts-rpc = { version = "0.8.0-dev", path = "../../../frame/contracts/rpc/" } -pallet-transaction-payment-rpc = { version = "2.0.0-dev", path = "../../../frame/transaction-payment/rpc/" } -substrate-frame-rpc-system = { version = "2.0.0-dev", path = "../../../utils/frame/rpc/system" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } -sc-consensus-babe = { version = "0.8.0-dev", path = "../../../client/consensus/babe" } -sc-consensus-babe-rpc = { version = "0.8.0-dev", path = "../../../client/consensus/babe/rpc" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } -sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } -sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } -sc-finality-grandpa-rpc = { version = "0.8.0-dev", path = "../../../client/finality-grandpa/rpc" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +pallet-contracts-rpc = { version = "0.8.0-alpha.7", path = "../../../frame/contracts/rpc/" } +pallet-transaction-payment-rpc = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment/rpc/" } +substrate-frame-rpc-system = { version = "2.0.0-alpha.7", path = "../../../utils/frame/rpc/system" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe" } +sc-consensus-babe-rpc = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe/rpc" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } +sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../../client/consensus/epochs" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa" } +sc-finality-grandpa-rpc = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa/rpc" } diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index 9e39d9d24e1..35a4e8395d5 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -19,68 +19,68 @@ integer-sqrt = { version = "0.1.2" } serde = { version = "1.0.102", optional = true } # primitives -sp-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/authority-discovery" } -sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/consensus/babe" } -sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-dev"} -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/inherents" } -node-primitives = { version = "2.0.0-dev", default-features = false, path = "../primitives" } -sp-offchain = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/offchain" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } -sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../../primitives/keyring" } -sp-session = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/session" } -sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/transaction-pool" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/version" } +sp-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/authority-discovery" } +sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/consensus/babe" } +sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-alpha.7"} +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/inherents" } +node-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../primitives" } +sp-offchain = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/offchain" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/staking" } +sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../../primitives/keyring" } +sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/session" } +sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/transaction-pool" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/version" } # frame dependencies -frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../../frame/executive" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system" } -frame-system-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/benchmarking", optional = true } -frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/rpc/runtime-api/" } -pallet-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authority-discovery" } -pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authorship" } -pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../../frame/babe" } -pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../../../frame/balances" } -pallet-collective = { version = "2.0.0-dev", default-features = false, path = "../../../frame/collective" } -pallet-contracts = { version = "2.0.0-dev", default-features = false, path = "../../../frame/contracts" } -pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "../../../frame/contracts/common/" } -pallet-contracts-rpc-runtime-api = { version = "0.8.0-dev", default-features = false, path = "../../../frame/contracts/rpc/runtime-api/" } -pallet-democracy = { version = "2.0.0-dev", default-features = false, path = "../../../frame/democracy" } -pallet-elections-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../../frame/elections-phragmen" } -pallet-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../frame/finality-tracker" } -pallet-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../../frame/grandpa" } -pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../../frame/im-online" } -pallet-indices = { version = "2.0.0-dev", default-features = false, path = "../../../frame/indices" } -pallet-identity = { version = "2.0.0-dev", default-features = false, path = "../../../frame/identity" } -pallet-membership = { version = "2.0.0-dev", default-features = false, path = "../../../frame/membership" } -pallet-offences = { version = "2.0.0-dev", default-features = false, path = "../../../frame/offences" } -pallet-offences-benchmarking = { version = "2.0.0-dev", path = "../../../frame/offences/benchmarking", default-features = false, optional = true } -pallet-randomness-collective-flip = { version = "2.0.0-dev", default-features = false, path = "../../../frame/randomness-collective-flip" } -pallet-recovery = { version = "2.0.0-dev", default-features = false, path = "../../../frame/recovery" } -pallet-session = { version = "2.0.0-dev", features = ["historical"], path = "../../../frame/session", default-features = false } -pallet-session-benchmarking = { version = "2.0.0-dev", path = "../../../frame/session/benchmarking", default-features = false, optional = true } -pallet-staking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/staking" } -pallet-staking-reward-curve = { version = "2.0.0-dev", default-features = false, path = "../../../frame/staking/reward-curve" } -pallet-scheduler = { version = "2.0.0-dev", default-features = false, path = "../../../frame/scheduler" } -pallet-society = { version = "2.0.0-dev", default-features = false, path = "../../../frame/society" } -pallet-sudo = { version = "2.0.0-dev", default-features = false, path = "../../../frame/sudo" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../frame/timestamp" } -pallet-treasury = { version = "2.0.0-dev", default-features = false, path = "../../../frame/treasury" } -pallet-utility = { version = "2.0.0-dev", default-features = false, path = "../../../frame/utility" } -pallet-transaction-payment = { version = "2.0.0-dev", default-features = false, path = "../../../frame/transaction-payment" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../../frame/transaction-payment/rpc/runtime-api/" } -pallet-vesting = { version = "2.0.0-dev", default-features = false, path = "../../../frame/vesting" } +frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/executive" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system" } +frame-system-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system/benchmarking", optional = true } +frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system/rpc/runtime-api/" } +pallet-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/authority-discovery" } +pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/authorship" } +pallet-babe = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/babe" } +pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/balances" } +pallet-collective = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/collective" } +pallet-contracts = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/contracts" } +pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/contracts/common/" } +pallet-contracts-rpc-runtime-api = { version = "0.8.0-alpha.7", default-features = false, path = "../../../frame/contracts/rpc/runtime-api/" } +pallet-democracy = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/democracy" } +pallet-elections-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/elections-phragmen" } +pallet-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/finality-tracker" } +pallet-grandpa = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/grandpa" } +pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/im-online" } +pallet-indices = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/indices" } +pallet-identity = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/identity" } +pallet-membership = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/membership" } +pallet-offences = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/offences" } +pallet-offences-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/offences/benchmarking", default-features = false, optional = true } +pallet-randomness-collective-flip = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/randomness-collective-flip" } +pallet-recovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/recovery" } +pallet-session = { version = "2.0.0-alpha.7", features = ["historical"], path = "../../../frame/session", default-features = false } +pallet-session-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/session/benchmarking", default-features = false, optional = true } +pallet-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/staking" } +pallet-staking-reward-curve = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/staking/reward-curve" } +pallet-scheduler = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/scheduler" } +pallet-society = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/society" } +pallet-sudo = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/sudo" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/timestamp" } +pallet-treasury = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/treasury" } +pallet-utility = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/utility" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/transaction-payment" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/transaction-payment/rpc/runtime-api/" } +pallet-vesting = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/vesting" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } [dev-dependencies] -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } [features] default = ["std"] diff --git a/bin/node/testing/Cargo.toml b/bin/node/testing/Cargo.toml index af375c774de..500fc5d11f4 100644 --- a/bin/node/testing/Cargo.toml +++ b/bin/node/testing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-testing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Test utilities for Substrate node." edition = "2018" @@ -13,40 +13,40 @@ publish = true targets = ["x86_64-unknown-linux-gnu"] [dependencies] -pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } -sc-service = { version = "0.8.0-dev", features = ["test-helpers", "db"], path = "../../../client/service" } -sc-client-db = { version = "0.8.0-dev", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } +sc-service = { version = "0.8.0-alpha.7", features = ["test-helpers", "db"], path = "../../../client/service" } +sc-client-db = { version = "0.8.0-alpha.7", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api/" } codec = { package = "parity-scale-codec", version = "1.3.0" } -pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } -pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } -pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } -sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } -node-executor = { version = "2.0.0-dev", path = "../executor" } -node-primitives = { version = "2.0.0-dev", path = "../primitives" } -node-runtime = { version = "2.0.0-dev", path = "../runtime" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } -frame-support = { version = "2.0.0-dev", path = "../../../frame/support" } -pallet-session = { version = "2.0.0-dev", path = "../../../frame/session" } -pallet-society = { version = "2.0.0-dev", path = "../../../frame/society" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } -sc-executor = { version = "0.8.0-dev", path = "../../../client/executor", features = ["wasmtime"] } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } +pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } +pallet-grandpa = { version = "2.0.0-alpha.7", path = "../../../frame/grandpa" } +pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } +node-executor = { version = "2.0.0-alpha.7", path = "../executor" } +node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } +node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", path = "../../../frame/support" } +pallet-session = { version = "2.0.0-alpha.7", path = "../../../frame/session" } +pallet-society = { version = "2.0.0-alpha.7", path = "../../../frame/society" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +pallet-staking = { version = "2.0.0-alpha.7", path = "../../../frame/staking" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor", features = ["wasmtime"] } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } substrate-test-client = { version = "2.0.0-dev", path = "../../../test-utils/client" } -pallet-timestamp = { version = "2.0.0-dev", path = "../../../frame/timestamp" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } -pallet-treasury = { version = "2.0.0-dev", path = "../../../frame/treasury" } +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../../frame/timestamp" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } +pallet-treasury = { version = "2.0.0-alpha.7", path = "../../../frame/treasury" } wabt = "0.9.2" -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/finality-tracker" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/timestamp" } -sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } -sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/finality-tracker" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/timestamp" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } log = "0.4.8" tempfile = "3.1.0" fs_extra = "1" @@ -54,4 +54,4 @@ futures = "0.3.1" [dev-dependencies] criterion = "0.3.0" -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } +sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } diff --git a/bin/utils/chain-spec-builder/Cargo.toml b/bin/utils/chain-spec-builder/Cargo.toml index a6c2b671fe6..bdc84bf8726 100644 --- a/bin/utils/chain-spec-builder/Cargo.toml +++ b/bin/utils/chain-spec-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "chain-spec-builder" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -13,9 +13,9 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] ansi_term = "0.12.1" -sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } -sc-chain-spec = { version = "2.0.0-dev", path = "../../../client/chain-spec" } -node-cli = { version = "2.0.0-dev", path = "../../node/cli" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } +sc-chain-spec = { version = "2.0.0-alpha.7", path = "../../../client/chain-spec" } +node-cli = { version = "2.0.0-alpha.7", path = "../../node/cli" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } rand = "0.7.2" structopt = "0.3.8" diff --git a/bin/utils/subkey/Cargo.toml b/bin/utils/subkey/Cargo.toml index b0c642ec43e..ff76f8dd2af 100644 --- a/bin/utils/subkey/Cargo.toml +++ b/bin/utils/subkey/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "subkey" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,10 +12,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.1.29" -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -node-runtime = { version = "2.0.0-dev", path = "../../node/runtime" } -node-primitives = { version = "2.0.0-dev", path = "../../node/primitives" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +node-runtime = { version = "2.0.0-alpha.7", path = "../../node/runtime" } +node-primitives = { version = "2.0.0-alpha.7", path = "../../node/primitives" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } rand = "0.7.2" clap = "2.33.0" tiny-bip39 = "0.7" @@ -23,13 +23,13 @@ substrate-bip39 = "0.4.1" hex = "0.4.0" hex-literal = "0.2.1" codec = { package = "parity-scale-codec", version = "1.3.0" } -frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } -pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } +frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } rpassword = "4.0.1" itertools = "0.8.2" derive_more = { version = "0.99.2" } -sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } +sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } jsonrpc-core-client = { version = "14.0.3", features = ["http"] } hyper = "0.12.35" libp2p = "0.18.1" diff --git a/client/api/Cargo.toml b/client/api/Cargo.toml index 3e9cbc1a9db..d8809098561 100644 --- a/client/api/Cargo.toml +++ b/client/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-client-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -9,41 +9,41 @@ repository = "https://github.com/paritytech/substrate/" description = "Substrate client interfaces." documentation = "https://docs.rs/sc-client-api" +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } derive_more = { version = "0.99.2" } -sc-executor = { version = "0.8.0-dev", path = "../executor" } -sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } +sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } fnv = { version = "1.0.6" } futures = { version = "0.3.1" } hash-db = { version = "0.15.2", default-features = false } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } hex-literal = { version = "0.2.1" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } kvdb = "0.5.0" log = { version = "0.4.8" } parking_lot = "0.10.0" lazy_static = "1.4.0" -sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } -sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } -sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } +sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } [dev-dependencies] kvdb-memorydb = "0.5.0" sp-test-primitives = { version = "2.0.0-dev", path = "../../primitives/test-primitives" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 1a0c3d89afc..ba4149c6368 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-authority-discovery" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -23,21 +23,21 @@ futures = "0.3.4" futures-timer = "3.0.1" libp2p = { version = "0.18.1", default-features = false, features = ["secp256k1", "libp2p-websocket"] } log = "0.4.8" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} prost = "0.6.1" rand = "0.7.2" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-keystore = { version = "2.0.0-dev", path = "../keystore" } -sc-network = { version = "0.8.0-dev", path = "../network" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } serde_json = "1.0.41" -sp-authority-discovery = { version = "2.0.0-dev", path = "../../primitives/authority-discovery" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-authority-discovery = { version = "2.0.0-alpha.7", path = "../../primitives/authority-discovery" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } [dev-dependencies] env_logger = "0.7.0" quickcheck = "0.9.0" -sc-peerset = { version = "2.0.0-dev", path = "../peerset" } +sc-peerset = { version = "2.0.0-alpha.7", path = "../peerset" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client"} diff --git a/client/basic-authorship/Cargo.toml b/client/basic-authorship/Cargo.toml index a9ac58ef321..fd1d6408468 100644 --- a/client/basic-authorship/Cargo.toml +++ b/client/basic-authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-basic-authorship" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,20 +15,20 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4.8" futures = "0.3.4" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-dev", path = "../../primitives/inherents" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../primitives/inherents" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } tokio-executor = { version = "0.2.0-alpha.6", features = ["blocking"] } futures-timer = "3.0.1" [dev-dependencies] -sc-transaction-pool = { version = "2.0.0-dev", path = "../../client/transaction-pool" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../client/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } parking_lot = "0.10.0" diff --git a/client/block-builder/Cargo.toml b/client/block-builder/Cargo.toml index 15cc3c13934..f238640bae4 100644 --- a/client/block-builder/Cargo.toml +++ b/client/block-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-block-builder" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-block-builder = { version = "2.0.0-dev", path = "../../primitives/block-builder" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../primitives/block-builder" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } [dev-dependencies] substrate-test-runtime-client = { path = "../../test-utils/runtime/client" } -sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } diff --git a/client/chain-spec/Cargo.toml b/client/chain-spec/Cargo.toml index 6906b1ecdad..8b0b30a35c4 100644 --- a/client/chain-spec/Cargo.toml +++ b/client/chain-spec/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-chain-spec" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,12 +12,12 @@ description = "Substrate chain configurations." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-chain-spec-derive = { version = "2.0.0-dev", path = "./derive" } +sc-chain-spec-derive = { version = "2.0.0-alpha.7", path = "./derive" } impl-trait-for-tuples = "0.1.3" -sc-network = { version = "0.8.0-dev", path = "../network" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-chain-spec = { version = "2.0.0-dev", path = "../../primitives/chain-spec" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-chain-spec = { version = "2.0.0-alpha.7", path = "../../primitives/chain-spec" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } diff --git a/client/chain-spec/derive/Cargo.toml b/client/chain-spec/derive/Cargo.toml index 66058b3f729..22f96d489ff 100644 --- a/client/chain-spec/derive/Cargo.toml +++ b/client/chain-spec/derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-chain-spec-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 198a9df5b53..ab39436a202 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-cli" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Substrate CLI interface." edition = "2018" @@ -26,23 +26,23 @@ tokio = { version = "0.2.9", features = [ "signal", "rt-core", "rt-threaded" ] } futures = "0.3.4" fdlimit = "0.1.4" serde_json = "1.0.41" -sc-informant = { version = "0.8.0-dev", path = "../informant" } -sp-panic-handler = { version = "2.0.0-dev", path = "../../primitives/panic-handler" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../service" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } -substrate-prometheus-endpoint = { path = "../../utils/prometheus" , version = "0.8.0-dev"} -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sc-informant = { version = "0.8.0-alpha.7", path = "../informant" } +sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../primitives/panic-handler" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../service" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +substrate-prometheus-endpoint = { path = "../../utils/prometheus" , version = "0.8.0-alpha.7"} +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } names = "0.11.0" structopt = "0.3.8" -sc-tracing = { version = "2.0.0-dev", path = "../tracing" } +sc-tracing = { version = "2.0.0-alpha.7", path = "../tracing" } chrono = "0.4.10" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index 82196feac03..d618ed39cc6 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-aura" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Aura consensus algorithm for substrate" edition = "2018" @@ -12,36 +12,36 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } -sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } -sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } -sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } +sp-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/aura" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } derive_more = "0.99.2" futures = "0.3.4" futures-timer = "3.0.1" -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sc-keystore = { version = "2.0.0-dev", path = "../../keystore" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../keystore" } log = "0.4.8" parking_lot = "0.10.0" -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } -sp-version = { version = "2.0.0-dev", path = "../../../primitives/version" } -sc-consensus-slots = { version = "0.8.0-dev", path = "../slots" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } -sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-version = { version = "2.0.0-alpha.7", path = "../../../primitives/version" } +sc-consensus-slots = { version = "0.8.0-alpha.7", path = "../slots" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } [dev-dependencies] -sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } -sc-executor = { version = "0.8.0-dev", path = "../../executor" } -sc-network = { version = "0.8.0-dev", path = "../../network" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } +sc-network = { version = "0.8.0-alpha.7", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } env_logger = "0.7.0" tempfile = "3.1.0" diff --git a/client/consensus/babe/Cargo.toml b/client/consensus/babe/Cargo.toml index ddae8f84b7e..4959c051004 100644 --- a/client/consensus/babe/Cargo.toml +++ b/client/consensus/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-babe" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "BABE consensus algorithm for substrate" edition = "2018" @@ -14,30 +14,30 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } num-bigint = "0.2.3" num-rational = "0.2.2" num-traits = "0.2.8" serde = { version = "1.0.104", features = ["derive"] } -sp-version = { version = "2.0.0-dev", path = "../../../primitives/version" } -sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } -sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } -sc-keystore = { version = "2.0.0-dev", path = "../../keystore" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sc-consensus-epochs = { version = "0.8.0-dev", path = "../epochs" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-consensus-vrf = { version = "0.8.0-dev", path = "../../../primitives/consensus/vrf" } -sc-consensus-uncles = { version = "0.8.0-dev", path = "../uncles" } -sc-consensus-slots = { version = "0.8.0-dev", path = "../slots" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -fork-tree = { version = "2.0.0-dev", path = "../../../utils/fork-tree" } +sp-version = { version = "2.0.0-alpha.7", path = "../../../primitives/version" } +sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../keystore" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../epochs" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-consensus-vrf = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/vrf" } +sc-consensus-uncles = { version = "0.8.0-alpha.7", path = "../uncles" } +sc-consensus-slots = { version = "0.8.0-alpha.7", path = "../slots" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +fork-tree = { version = "2.0.0-alpha.7", path = "../../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" parking_lot = "0.10.0" @@ -49,13 +49,13 @@ pdqselect = "0.1.0" derive_more = "0.99.2" [dev-dependencies] -sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } -sc-executor = { version = "0.8.0-dev", path = "../../executor" } -sc-network = { version = "0.8.0-dev", path = "../../network" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } +sc-network = { version = "0.8.0-alpha.7", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } env_logger = "0.7.0" tempfile = "3.1.0" diff --git a/client/consensus/babe/rpc/Cargo.toml b/client/consensus/babe/rpc/Cargo.toml index 1856ff8bafe..0eacd98733e 100644 --- a/client/consensus/babe/rpc/Cargo.toml +++ b/client/consensus/babe/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-babe-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "RPC extensions for the BABE consensus algorithm" edition = "2018" @@ -12,24 +12,24 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-consensus-babe = { version = "0.8.0-dev", path = "../" } +sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-consensus-babe = { version = "0.8.0-dev", path = "../../../../primitives/consensus/babe" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../../primitives/consensus/babe" } serde = { version = "1.0.104", features=["derive"] } -sp-blockchain = { version = "2.0.0-dev", path = "../../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../../primitives/runtime" } -sc-consensus-epochs = { version = "0.8.0-dev", path = "../../epochs" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../../primitives/runtime" } +sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../epochs" } futures = { version = "0.3.4", features = ["compat"] } derive_more = "0.99.2" -sp-api = { version = "2.0.0-dev", path = "../../../../primitives/api" } -sp-consensus = { version = "0.8.0-dev", path = "../../../../primitives/consensus/common" } -sp-core = { version = "2.0.0-dev", path = "../../../../primitives/core" } -sc-keystore = { version = "2.0.0-dev", path = "../../../keystore" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../../primitives/api" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../../primitives/consensus/common" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../../primitives/core" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../../../keystore" } [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../../test-utils/runtime/client" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../../../primitives/application-crypto" } -sp-keyring = { version = "2.0.0-dev", path = "../../../../primitives/keyring" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../../primitives/application-crypto" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../../../primitives/keyring" } tempfile = "3.1.0" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index dae6f341d13..77f2a1db74b 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Collection of common consensus specific imlementations for Substr targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } diff --git a/client/consensus/epochs/Cargo.toml b/client/consensus/epochs/Cargo.toml index de14b5c6be6..57cab28f237 100644 --- a/client/consensus/epochs/Cargo.toml +++ b/client/consensus/epochs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-epochs" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Generic epochs-based utilities for consensus" edition = "2018" @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" -fork-tree = { version = "2.0.0-dev", path = "../../../utils/fork-tree" } -sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-dev"} -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sc-client-api = { path = "../../api" , version = "2.0.0-dev"} +fork-tree = { version = "2.0.0-alpha.7", path = "../../../utils/fork-tree" } +sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-alpha.7"} +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sc-client-api = { path = "../../api" , version = "2.0.0-alpha.7"} diff --git a/client/consensus/manual-seal/Cargo.toml b/client/consensus/manual-seal/Cargo.toml index b0a3c2bd72b..b83f29662e7 100644 --- a/client/consensus/manual-seal/Cargo.toml +++ b/client/consensus/manual-seal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-manual-seal" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Manual sealing engine for Substrate" edition = "2018" @@ -22,17 +22,17 @@ parking_lot = "0.10.0" serde = { version = "1.0", features=["derive"] } assert_matches = "1.3.0" -sc-client-api = { path = "../../../client/api" , version = "2.0.0-dev"} -sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-dev"} -sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-dev"} -sp-consensus = { package = "sp-consensus", path = "../../../primitives/consensus/common" , version = "0.8.0-dev"} -sp-inherents = { path = "../../../primitives/inherents" , version = "2.0.0-dev"} -sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-dev"} -sp-core = { path = "../../../primitives/core" , version = "2.0.0-dev"} -sp-transaction-pool = { path = "../../../primitives/transaction-pool" , version = "2.0.0-dev"} +sc-client-api = { path = "../../../client/api" , version = "2.0.0-alpha.7"} +sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-alpha.7"} +sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-alpha.7"} +sp-consensus = { package = "sp-consensus", path = "../../../primitives/consensus/common" , version = "0.8.0-alpha.7"} +sp-inherents = { path = "../../../primitives/inherents" , version = "2.0.0-alpha.7"} +sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-alpha.7"} +sp-core = { path = "../../../primitives/core" , version = "2.0.0-alpha.7"} +sp-transaction-pool = { path = "../../../primitives/transaction-pool" , version = "2.0.0-alpha.7"} [dev-dependencies] -sc-basic-authorship = { path = "../../basic-authorship" , version = "0.8.0-dev"} +sc-basic-authorship = { path = "../../basic-authorship" , version = "0.8.0-alpha.7"} substrate-test-runtime-client = { path = "../../../test-utils/runtime/client" , version = "2.0.0-dev"} substrate-test-runtime-transaction-pool = { path = "../../../test-utils/runtime/transaction-pool" , version = "2.0.0-dev"} tokio = { version = "0.2", features = ["rt-core", "macros"] } diff --git a/client/consensus/pow/Cargo.toml b/client/consensus/pow/Cargo.toml index 0c1cc9c12cd..d4a3e695dd6 100644 --- a/client/consensus/pow/Cargo.toml +++ b/client/consensus/pow/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-pow" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "PoW consensus algorithm for substrate" edition = "2018" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } -sp-consensus-pow = { version = "0.8.0-dev", path = "../../../primitives/consensus/pow" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sp-consensus-pow = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/pow" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } log = "0.4.8" futures = { version = "0.3.1", features = ["compat"] } -sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } +sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } derive_more = "0.99.2" diff --git a/client/consensus/slots/Cargo.toml b/client/consensus/slots/Cargo.toml index d39d5382557..4c9504de60e 100644 --- a/client/consensus/slots/Cargo.toml +++ b/client/consensus/slots/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-slots" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Generic slots-based utilities for consensus" edition = "2018" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } futures = "0.3.4" futures-timer = "3.0.1" parking_lot = "0.10.0" diff --git a/client/consensus/uncles/Cargo.toml b/client/consensus/uncles/Cargo.toml index 019c933a20e..fbb61116fe6 100644 --- a/client/consensus/uncles/Cargo.toml +++ b/client/consensus/uncles/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-uncles" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Generic uncle inclusion utilities for consensus" edition = "2018" @@ -12,10 +12,10 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-authorship = { version = "2.0.0-dev", path = "../../../primitives/authorship" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-authorship = { version = "2.0.0-alpha.7", path = "../../../primitives/authorship" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } log = "0.4.8" diff --git a/client/db/Cargo.toml b/client/db/Cargo.toml index 2df1836850c..8339d19b88b 100644 --- a/client/db/Cargo.toml +++ b/client/db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-client-db" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -23,21 +23,21 @@ parity-util-mem = { version = "0.6.1", default-features = false, features = ["st codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } blake2-rfc = "0.2.18" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sc-executor = { version = "0.8.0-dev", path = "../executor" } -sc-state-db = { version = "0.8.0-dev", path = "../state-db" } -sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } +sc-state-db = { version = "0.8.0-alpha.7", path = "../state-db" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } parity-db = { version = "0.1.2", optional = true } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } [dev-dependencies] -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } env_logger = "0.7.0" quickcheck = "0.9" diff --git a/client/executor/Cargo.toml b/client/executor/Cargo.toml index ef1b24ea711..86d3fef1264 100644 --- a/client/executor/Cargo.toml +++ b/client/executor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,22 +15,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } -sp-serializer = { version = "2.0.0-dev", path = "../../primitives/serializer" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } -sp-panic-handler = { version = "2.0.0-dev", path = "../../primitives/panic-handler" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } +sp-serializer = { version = "2.0.0-alpha.7", path = "../../primitives/serializer" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../primitives/panic-handler" } wasmi = "0.6.2" parity-wasm = "0.41.0" lazy_static = "1.4.0" -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sp-wasm-interface = { version = "2.0.0-dev", path = "../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-dev", path = "../../primitives/runtime-interface" } -sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } -sc-executor-common = { version = "0.8.0-dev", path = "common" } -sc-executor-wasmi = { version = "0.8.0-dev", path = "wasmi" } -sc-executor-wasmtime = { version = "0.8.0-dev", path = "wasmtime", optional = true } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../primitives/runtime-interface" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } +sc-executor-common = { version = "0.8.0-alpha.7", path = "common" } +sc-executor-wasmi = { version = "0.8.0-alpha.7", path = "wasmi" } +sc-executor-wasmtime = { version = "0.8.0-alpha.7", path = "wasmtime", optional = true } parking_lot = "0.10.0" log = "0.4.8" libsecp256k1 = "0.3.4" @@ -41,9 +41,9 @@ wabt = "0.9.2" hex-literal = "0.2.1" sc-runtime-test = { version = "2.0.0-dev", path = "runtime-test" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } test-case = "0.3.3" -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } [features] default = [ "std" ] diff --git a/client/executor/common/Cargo.toml b/client/executor/common/Cargo.toml index c27ed8db0ae..3a75edc7e08 100644 --- a/client/executor/common/Cargo.toml +++ b/client/executor/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-common" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -18,11 +18,11 @@ derive_more = "0.99.2" parity-wasm = "0.41.0" codec = { package = "parity-scale-codec", version = "1.3.0" } wasmi = "0.6.2" -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } -sp-serializer = { version = "2.0.0-dev", path = "../../../primitives/serializer" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } +sp-serializer = { version = "2.0.0-alpha.7", path = "../../../primitives/serializer" } [features] default = [] diff --git a/client/executor/runtime-test/Cargo.toml b/client/executor/runtime-test/Cargo.toml index b8ae805192d..860b964fca4 100644 --- a/client/executor/runtime-test/Cargo.toml +++ b/client/executor/runtime-test/Cargo.toml @@ -13,12 +13,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/io" } -sp-sandbox = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/sandbox" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -sp-allocator = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/allocator" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/io" } +sp-sandbox = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/sandbox" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-allocator = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/allocator" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/client/executor/wasmi/Cargo.toml b/client/executor/wasmi/Cargo.toml index 3180eebb4f5..5da84500302 100644 --- a/client/executor/wasmi/Cargo.toml +++ b/client/executor/wasmi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-wasmi" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,8 +16,8 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4.8" wasmi = "0.6.2" codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor-common = { version = "0.8.0-dev", path = "../common" } -sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } +sc-executor-common = { version = "0.8.0-alpha.7", path = "../common" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 3644c57e47b..ed7213224d7 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-wasmtime" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,11 +16,11 @@ log = "0.4.8" scoped-tls = "1.0" parity-wasm = "0.41.0" codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor-common = { version = "0.8.0-dev", path = "../common" } -sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } +sc-executor-common = { version = "0.8.0-alpha.7", path = "../common" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.1" } wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.1" } wasmtime-environ = "0.16" diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index 97dafc3d46b..46b5a9e700f 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-finality-grandpa" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" -fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } +fork-tree = { version = "2.0.0-alpha.7", path = "../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" log = "0.4.8" @@ -23,37 +23,37 @@ parking_lot = "0.10.0" rand = "0.7.2" assert_matches = "1.3.0" parity-scale-codec = { version = "1.3.0", features = ["derive"] } -sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } -sc-keystore = { version = "2.0.0-dev", path = "../keystore" } +sp-arithmetic = { version = "2.0.0-alpha.7", path = "../../primitives/arithmetic" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../client/consensus/common" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } serde_json = "1.0.41" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-inherents = { version = "2.0.0-dev", path = "../../primitives/inherents" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sc-network-gossip = { version = "0.8.0-dev", path = "../network-gossip" } -sp-finality-tracker = { version = "2.0.0-dev", path = "../../primitives/finality-tracker" } -sp-finality-grandpa = { version = "2.0.0-dev", path = "../../primitives/finality-grandpa" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} -sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-inherents = { version = "2.0.0-alpha.7", path = "../../primitives/inherents" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-network-gossip = { version = "0.8.0-alpha.7", path = "../network-gossip" } +sp-finality-tracker = { version = "2.0.0-alpha.7", path = "../../primitives/finality-tracker" } +sp-finality-grandpa = { version = "2.0.0-alpha.7", path = "../../primitives/finality-grandpa" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} +sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } pin-project = "0.4.6" [dev-dependencies] finality-grandpa = { version = "0.12.1", features = ["derive-codec", "test-helpers"] } -sc-network = { version = "0.8.0-dev", path = "../network" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } sc-network-test = { version = "0.8.0-dev", path = "../network/test" } -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/babe" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } env_logger = "0.7.0" tokio = { version = "0.2", features = ["rt-core"] } tempfile = "3.1.0" -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } diff --git a/client/finality-grandpa/rpc/Cargo.toml b/client/finality-grandpa/rpc/Cargo.toml index 5f7ccc9218e..b7d1406ce6d 100644 --- a/client/finality-grandpa/rpc/Cargo.toml +++ b/client/finality-grandpa/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-finality-grandpa-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "RPC extensions for the GRANDPA finality gadget" repository = "https://github.com/paritytech/substrate/" @@ -8,7 +8,7 @@ edition = "2018" license = "GPL-3.0" [dependencies] -sc-finality-grandpa = { version = "0.8.0-dev", path = "../" } +sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../" } finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.3" @@ -20,4 +20,4 @@ log = "0.4.8" derive_more = "0.99.2" [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } diff --git a/client/informant/Cargo.toml b/client/informant/Cargo.toml index f8e6ca85f95..00376f1030a 100644 --- a/client/informant/Cargo.toml +++ b/client/informant/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-informant" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Substrate informant." edition = "2018" @@ -17,8 +17,8 @@ futures = "0.3.4" log = "0.4.8" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } wasm-timer = "0.2" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../service" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../service" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } diff --git a/client/keystore/Cargo.toml b/client/keystore/Cargo.toml index f3419f55e1d..bd8f654fc45 100644 --- a/client/keystore/Cargo.toml +++ b/client/keystore/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-keystore" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,8 +15,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } hex = "0.4.0" rand = "0.7.2" serde_json = "1.0.41" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index c6714375fe3..ef14d1fff87 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Gossiping for the Substrate network protocol" name = "sc-network-gossip" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -19,9 +19,9 @@ futures-timer = "3.0.1" libp2p = { version = "0.18.1", default-features = false, features = ["websocket"] } log = "0.4.8" lru = "0.4.3" -sc-network = { version = "0.8.0-dev", path = "../network" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index e31e0f31132..7d51d76c151 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate network protocol" name = "sc-network" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -25,7 +25,7 @@ derive_more = "0.99.2" either = "1.5.3" erased-serde = "0.3.9" fnv = "1.0.6" -fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } +fork-tree = { version = "2.0.0-alpha.7", path = "../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" futures_codec = "0.3.3" @@ -38,23 +38,23 @@ lru = "0.4.0" nohash-hasher = "0.2.0" parking_lot = "0.10.0" pin-project = "0.4.6" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } prost = "0.6.1" rand = "0.7.2" -sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-peerset = { version = "2.0.0-dev", path = "../peerset" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sc-peerset = { version = "2.0.0-alpha.7", path = "../peerset" } serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" slog = { version = "2.5.2", features = ["nested-values"] } slog_derive = "0.2.0" smallvec = "0.6.10" -sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-arithmetic = { version = "2.0.0-alpha.7", path = "../../primitives/arithmetic" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } thiserror = "1" unsigned-varint = { version = "0.3.1", features = ["futures", "futures-codec"] } void = "1.0.2" @@ -73,7 +73,7 @@ env_logger = "0.7.0" libp2p = { version = "0.18.1", default-features = false, features = ["secio"] } quickcheck = "0.9.0" rand = "0.7.2" -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } sp-test-primitives = { version = "2.0.0-dev", path = "../../primitives/test-primitives" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 154694c692a..cbfd5ffaf18 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -13,23 +13,23 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-network = { version = "0.8.0-dev", path = "../" } +sc-network = { version = "0.8.0-alpha.7", path = "../" } log = "0.4.8" parking_lot = "0.10.0" futures = "0.3.4" futures-timer = "3.0.1" rand = "0.7.2" libp2p = { version = "0.18.1", default-features = false, features = ["libp2p-websocket"] } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } env_logger = "0.7.0" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } tempfile = "3.1.0" -sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../service" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index ac3a71ad0d9..212014c6c5e 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate offchain workers" name = "sc-offchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -13,23 +13,23 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] bytes = "0.5" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } fnv = "1.0.6" futures = "0.3.4" futures-timer = "3.0.1" log = "0.4.8" threadpool = "1.7" num_cpus = "1.10" -sp-offchain = { version = "2.0.0-dev", path = "../../primitives/offchain" } +sp-offchain = { version = "2.0.0-alpha.7", path = "../../primitives/offchain" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } rand = "0.7.2" -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sc-keystore = { version = "2.0.0-dev", path = "../keystore" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } [target.'cfg(not(target_os = "unknown"))'.dependencies] hyper = "0.13.2" @@ -38,9 +38,9 @@ hyper-rustls = "0.20" [dev-dependencies] env_logger = "0.7.0" fdlimit = "0.1.4" -sc-client-db = { version = "0.8.0-dev", default-features = true, path = "../db/" } -sc-transaction-pool = { version = "2.0.0-dev", path = "../../client/transaction-pool" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sc-client-db = { version = "0.8.0-alpha.7", default-features = true, path = "../db/" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../client/transaction-pool" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } tokio = "0.2" diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index d5aa08f2f49..8d686b66098 100644 --- a/client/peerset/Cargo.toml +++ b/client/peerset/Cargo.toml @@ -3,7 +3,7 @@ description = "Connectivity manager based on reputation" homepage = "http://parity.io" license = "GPL-3.0" name = "sc-peerset" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" repository = "https://github.com/paritytech/substrate/" @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.3.4" libp2p = { version = "0.18.1", default-features = false } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils"} +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils"} log = "0.4.8" serde_json = "1.0.41" wasm-timer = "0.2" diff --git a/client/rpc-api/Cargo.toml b/client/rpc-api/Cargo.toml index e0dac773bf0..50cf71ef3ed 100644 --- a/client/rpc-api/Cargo.toml +++ b/client/rpc-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc-api" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -21,11 +21,11 @@ jsonrpc-derive = "14.0.3" jsonrpc-pubsub = "14.0.3" log = "0.4.8" parking_lot = "0.10.0" -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } -sp-runtime = { path = "../../primitives/runtime" , version = "2.0.0-dev"} -sp-chain-spec = { path = "../../primitives/chain-spec" , version = "2.0.0-dev"} +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-runtime = { path = "../../primitives/runtime" , version = "2.0.0-alpha.7"} +sp-chain-spec = { path = "../../primitives/chain-spec" , version = "2.0.0-alpha.7"} serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -sp-rpc = { version = "2.0.0-dev", path = "../../primitives/rpc" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sp-rpc = { version = "2.0.0-alpha.7", path = "../../primitives/rpc" } diff --git a/client/rpc-servers/Cargo.toml b/client/rpc-servers/Cargo.toml index 345aff13d8d..f169417b51c 100644 --- a/client/rpc-servers/Cargo.toml +++ b/client/rpc-servers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc-server" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,7 +17,7 @@ pubsub = { package = "jsonrpc-pubsub", version = "14.0.3" } log = "0.4.8" serde = "1.0.101" serde_json = "1.0.41" -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } [target.'cfg(not(target_os = "unknown"))'.dependencies] http = { package = "jsonrpc-http-server", version = "14.0.3" } diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml index 66f7cb50e6d..5f4a365d095 100644 --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,37 +12,37 @@ description = "Substrate Client RPC" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-rpc-api = { version = "0.8.0-dev", path = "../rpc-api" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sc-rpc-api = { version = "0.8.0-alpha.7", path = "../rpc-api" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = { version = "0.3.1", features = ["compat"] } jsonrpc-pubsub = "14.0.3" log = "0.4.8" -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } rpc = { package = "jsonrpc-core", version = "14.0.3" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } serde_json = "1.0.41" -sp-session = { version = "2.0.0-dev", path = "../../primitives/session" } -sp-offchain = { version = "2.0.0-dev", path = "../../primitives/offchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sp-rpc = { version = "2.0.0-dev", path = "../../primitives/rpc" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sp-chain-spec = { version = "2.0.0-dev", path = "../../primitives/chain-spec" } -sc-executor = { version = "0.8.0-dev", path = "../executor" } -sc-block-builder = { version = "0.8.0-dev", path = "../../client/block-builder" } -sc-keystore = { version = "2.0.0-dev", path = "../keystore" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-session = { version = "2.0.0-alpha.7", path = "../../primitives/session" } +sp-offchain = { version = "2.0.0-alpha.7", path = "../../primitives/offchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-rpc = { version = "2.0.0-alpha.7", path = "../../primitives/rpc" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-chain-spec = { version = "2.0.0-alpha.7", path = "../../primitives/chain-spec" } +sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../client/block-builder" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } hash-db = { version = "0.15.2", default-features = false } parking_lot = "0.10.0" [dev-dependencies] assert_matches = "1.3.0" futures01 = { package = "futures", version = "0.1.29" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } tokio = "0.1.22" -sc-transaction-pool = { version = "2.0.0-dev", path = "../transaction-pool" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../transaction-pool" } diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index e5f6e229c70..c5b5fa7bfb8 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-service" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -39,38 +39,38 @@ hash-db = "0.15.2" serde = "1.0.101" serde_json = "1.0.41" sysinfo = "0.13.3" -sc-keystore = { version = "2.0.0-dev", path = "../keystore" } -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } -sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-session = { version = "2.0.0-dev", path = "../../primitives/session" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sc-network = { version = "0.8.0-dev", path = "../network" } -sc-chain-spec = { version = "2.0.0-dev", path = "../chain-spec" } -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../db" } +sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-session = { version = "2.0.0-alpha.7", path = "../../primitives/session" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-chain-spec = { version = "2.0.0-alpha.7", path = "../chain-spec" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../db" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor = { version = "0.8.0-dev", path = "../executor" } -sc-transaction-pool = { version = "2.0.0-dev", path = "../transaction-pool" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -sc-rpc-server = { version = "2.0.0-dev", path = "../rpc-servers" } -sc-rpc = { version = "2.0.0-dev", path = "../rpc" } -sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -sp-block-builder = { version = "2.0.0-dev", path = "../../primitives/block-builder" } +sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../transaction-pool" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sc-rpc-server = { version = "2.0.0-alpha.7", path = "../rpc-servers" } +sc-rpc = { version = "2.0.0-alpha.7", path = "../rpc" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../../primitives/block-builder" } -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } -sc-offchain = { version = "2.0.0-dev", path = "../offchain" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sc-offchain = { version = "2.0.0-alpha.7", path = "../offchain" } parity-multiaddr = { package = "parity-multiaddr", version = "0.7.3" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" , version = "0.8.0-dev"} -sc-tracing = { version = "2.0.0-dev", path = "../tracing" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" , version = "0.8.0-alpha.7"} +sc-tracing = { version = "2.0.0-alpha.7", path = "../tracing" } tracing = "0.1.10" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } @@ -84,6 +84,6 @@ procfs = '0.7.8' [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } -sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } -grandpa = { version = "0.8.0-dev", package = "sc-finality-grandpa", path = "../finality-grandpa" } -grandpa-primitives = { version = "2.0.0-dev", package = "sp-finality-grandpa", path = "../../primitives/finality-grandpa" } +sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/babe" } +grandpa = { version = "0.8.0-alpha.7", package = "sc-finality-grandpa", path = "../finality-grandpa" } +grandpa-primitives = { version = "2.0.0-alpha.7", package = "sp-finality-grandpa", path = "../../primitives/finality-grandpa" } diff --git a/client/service/test/Cargo.toml b/client/service/test/Cargo.toml index 0a270a8eac5..687987f429b 100644 --- a/client/service/test/Cargo.toml +++ b/client/service/test/Cargo.toml @@ -8,6 +8,9 @@ publish = false homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + [dependencies] hex-literal = "0.2.1" tempfile = "3.1.0" @@ -17,27 +20,24 @@ log = "0.4.8" env_logger = "0.7.0" fdlimit = "0.1.4" parking_lot = "0.10.0" -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } -sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } -sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } -sp-storage = { version = "2.0.0-dev", path = "../../../primitives/storage" } -sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../../db" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } +sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../../primitives/storage" } +sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../../db" } futures = { version = "0.3.1", features = ["compat"] } -sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } -sc-network = { version = "0.8.0-dev", path = "../../network" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../service" } +sc-network = { version = "0.8.0-alpha.7", path = "../../network" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sc-client-api = { version = "2.0.0-dev", path = "../../api" } -sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } -sc-executor = { version = "0.8.0-dev", path = "../../executor" } -sp-panic-handler = { version = "2.0.0-dev", path = "../../../primitives/panic-handler" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } +sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../../primitives/panic-handler" } parity-scale-codec = "1.3.0" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/client/state-db/Cargo.toml b/client/state-db/Cargo.toml index c2d2f2eb0ba..5eeb3f51b3f 100644 --- a/client/state-db/Cargo.toml +++ b/client/state-db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-state-db" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parking_lot = "0.10.0" log = "0.4.8" -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } parity-util-mem-derive = "0.1.0" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 0928d1d2a15..0f4be704a6a 100644 --- a/client/telemetry/Cargo.toml +++ b/client/telemetry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-telemetry" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Telemetry utils" edition = "2018" diff --git a/client/tracing/Cargo.toml b/client/tracing/Cargo.toml index 23f44fd0575..28e8f5bacab 100644 --- a/client/tracing/Cargo.toml +++ b/client/tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-tracing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -20,7 +20,7 @@ serde_json = "1.0.41" slog = { version = "2.5.2", features = ["nested-values"] } tracing-core = "0.1.7" -sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } [dev-dependencies] tracing = "0.1.10" diff --git a/client/transaction-pool/Cargo.toml b/client/transaction-pool/Cargo.toml index 6d4f69676c6..45bc20dcbfc 100644 --- a/client/transaction-pool/Cargo.toml +++ b/client/transaction-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-transaction-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -20,21 +20,21 @@ intervalier = "0.4.0" log = "0.4.8" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } parking_lot = "0.10.0" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} -sc-client-api = { version = "2.0.0-dev", path = "../api" } -sc-transaction-graph = { version = "2.0.0-dev", path = "./graph" } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-dev", path = "../../primitives/tracing" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} +sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sc-transaction-graph = { version = "2.0.0-alpha.7", path = "./graph" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-alpha.7", path = "../../primitives/tracing" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] assert_matches = "1.3.0" hex = "0.4" -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } substrate-test-runtime-transaction-pool = { version = "2.0.0-dev", path = "../../test-utils/runtime/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/transaction-pool/graph/Cargo.toml b/client/transaction-pool/graph/Cargo.toml index 842d54f920a..6d851fff43b 100644 --- a/client/transaction-pool/graph/Cargo.toml +++ b/client/transaction-pool/graph/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-transaction-graph" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -18,11 +18,11 @@ log = "0.4.8" parking_lot = "0.10.0" serde = { version = "1.0.101", features = ["derive"] } wasm-timer = "0.2" -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-utils = { version = "2.0.0-dev", path = "../../../primitives/utils" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../../primitives/utils" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } linked-hash-map = "0.5.2" diff --git a/frame/assets/Cargo.toml b/frame/assets/Cargo.toml index 4e09ea8aa51..efa7cf3df12 100644 --- a/frame/assets/Cargo.toml +++ b/frame/assets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-assets" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } # Needed for various traits. In our case, `OnFinalize`. -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } # Needed for type-safe access to storage DB. -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } # `system` module provides us with all sorts of useful stuff and macros depend on it being around. -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/aura/Cargo.toml b/frame/aura/Cargo.toml index 623cf80df7b..6b780f61c95 100644 --- a/frame/aura/Cargo.toml +++ b/frame/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-aura" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME AURA consensus pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -sp-consensus-aura = { path = "../../primitives/consensus/aura", default-features = false, version = "0.8.0-dev"} -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +sp-consensus-aura = { path = "../../primitives/consensus/aura", default-features = false, version = "0.8.0-alpha.7"} +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } [dev-dependencies] diff --git a/frame/authority-discovery/Cargo.toml b/frame/authority-discovery/Cargo.toml index 5f267b31595..bba62cbecea 100644 --- a/frame/authority-discovery/Cargo.toml +++ b/frame/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-authority-discovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME pallet for authority discovery" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../primitives/authority-discovery" } -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +sp-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/authority-discovery" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -pallet-session = { version = "2.0.0-dev", features = ["historical" ], path = "../session", default-features = false } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +pallet-session = { version = "2.0.0-alpha.7", features = ["historical" ], path = "../session", default-features = false } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } [features] default = ["std"] diff --git a/frame/authorship/Cargo.toml b/frame/authorship/Cargo.toml index 98776c0e00d..656dbd05ed0 100644 --- a/frame/authorship/Cargo.toml +++ b/frame/authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-authorship" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" description = "Block and Uncle Author tracking for the FRAME" authors = ["Parity Technologies "] edition = "2018" @@ -12,15 +12,15 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-authorship = { version = "2.0.0-dev", default-features = false, path = "../../primitives/authorship" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/authorship" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} impl-trait-for-tuples = "0.1.3" [features] diff --git a/frame/babe/Cargo.toml b/frame/babe/Cargo.toml index 631b4ac4d4a..413feae8bdf 100644 --- a/frame/babe/Cargo.toml +++ b/frame/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-babe" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,22 +14,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } -sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/babe" } -sp-consensus-vrf = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/vrf" } -sp-io = { path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } +sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/babe" } +sp-consensus-vrf = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/vrf" } +sp-io = { path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/balances/Cargo.toml b/frame/balances/Cargo.toml index 769e68112ce..8f30b059392 100644 --- a/frame/balances/Cargo.toml +++ b/frame/balances/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-balances" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../transaction-payment" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../transaction-payment" } [features] default = ["std"] diff --git a/frame/benchmark/Cargo.toml b/frame/benchmark/Cargo.toml index 0b506d12ec9..4d49eb5ac9e 100644 --- a/frame/benchmark/Cargo.toml +++ b/frame/benchmark/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-benchmark" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [features] default = ["std"] diff --git a/frame/benchmarking/Cargo.toml b/frame/benchmarking/Cargo.toml index 8089a2a3661..a45907cd974 100644 --- a/frame/benchmarking/Cargo.toml +++ b/frame/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,13 +15,13 @@ targets = ["x86_64-unknown-linux-gnu"] linregress = "0.1" paste = "0.1" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-api = { version = "2.0.0-dev", path = "../../primitives/api", default-features = false } -sp-runtime-interface = { version = "2.0.0-dev", path = "../../primitives/runtime-interface", default-features = false } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime", default-features = false } -sp-std = { version = "2.0.0-dev", path = "../../primitives/std", default-features = false } -sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-dev"} -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api", default-features = false } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../primitives/runtime-interface", default-features = false } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime", default-features = false } +sp-std = { version = "2.0.0-alpha.7", path = "../../primitives/std", default-features = false } +sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [features] default = [ "std" ] diff --git a/frame/collective/Cargo.toml b/frame/collective/Cargo.toml index 2107bf0b2f5..5cd22779de8 100644 --- a/frame/collective/Cargo.toml +++ b/frame/collective/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-collective" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/contracts/Cargo.toml b/frame/contracts/Cargo.toml index 4e1128000e3..d0bf3a5f435 100644 --- a/frame/contracts/Cargo.toml +++ b/frame/contracts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,23 +17,23 @@ pwasm-utils = { version = "0.12.0", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } parity-wasm = { version = "0.41.0", default-features = false } wasmi-validation = { version = "0.3.0", default-features = false } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-sandbox = { version = "0.8.0-dev", default-features = false, path = "../../primitives/sandbox" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "common" } -pallet-transaction-payment = { version = "2.0.0-dev", default-features = false, path = "../transaction-payment" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-sandbox = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/sandbox" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "common" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", default-features = false, path = "../transaction-payment" } [dev-dependencies] wabt = "0.9.2" assert_matches = "1.3.0" hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -pallet-timestamp = { version = "2.0.0-dev", path = "../timestamp" } -pallet-randomness-collective-flip = { version = "2.0.0-dev", path = "../randomness-collective-flip" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../timestamp" } +pallet-randomness-collective-flip = { version = "2.0.0-alpha.7", path = "../randomness-collective-flip" } [features] default = ["std"] diff --git a/frame/contracts/common/Cargo.toml b/frame/contracts/common/Cargo.toml index edf1867be0a..aef9da6201b 100644 --- a/frame/contracts/common/Cargo.toml +++ b/frame/contracts/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-primitives" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] # This crate should not rely on any of the frame primitives. codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } [features] default = ["std"] diff --git a/frame/contracts/rpc/Cargo.toml b/frame/contracts/rpc/Cargo.toml index 66d75759f1a..4b22041acd1 100644 --- a/frame/contracts/rpc/Cargo.toml +++ b/frame/contracts/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-rpc" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,14 +16,14 @@ codec = { package = "parity-scale-codec", version = "1.3.0" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-rpc = { version = "2.0.0-dev", path = "../../../primitives/rpc" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-rpc = { version = "2.0.0-alpha.7", path = "../../../primitives/rpc" } serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -pallet-contracts-primitives = { version = "2.0.0-dev", path = "../common" } -pallet-contracts-rpc-runtime-api = { version = "0.8.0-dev", path = "./runtime-api" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +pallet-contracts-primitives = { version = "2.0.0-alpha.7", path = "../common" } +pallet-contracts-rpc-runtime-api = { version = "0.8.0-alpha.7", path = "./runtime-api" } [dev-dependencies] serde_json = "1.0.41" diff --git a/frame/contracts/rpc/runtime-api/Cargo.toml b/frame/contracts/rpc/runtime-api/Cargo.toml index 81c6ce37601..adfd6c23dcb 100644 --- a/frame/contracts/rpc/runtime-api/Cargo.toml +++ b/frame/contracts/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-rpc-runtime-api" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "Runtime API definition required by Contracts RPC extensions." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/runtime" } -pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "../../common" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/runtime" } +pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../../common" } [features] default = ["std"] diff --git a/frame/democracy/Cargo.toml b/frame/democracy/Cargo.toml index 83caa671cee..deefe61aeb2 100644 --- a/frame/democracy/Cargo.toml +++ b/frame/democracy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-democracy" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -pallet-scheduler = { version = "2.0.0-dev", path = "../scheduler" } -sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-scheduler = { version = "2.0.0-alpha.7", path = "../scheduler" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } hex-literal = "0.2.1" [features] diff --git a/frame/elections-phragmen/Cargo.toml b/frame/elections-phragmen/Cargo.toml index f9d681b7608..6eb2effc142 100644 --- a/frame/elections-phragmen/Cargo.toml +++ b/frame/elections-phragmen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-elections-phragmen" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,19 +14,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../primitives/phragmen" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/phragmen" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } [dev-dependencies] -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -pallet-scheduler = { version = "2.0.0-dev", path = "../scheduler" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-scheduler = { version = "2.0.0-alpha.7", path = "../scheduler" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } [features] default = ["std"] diff --git a/frame/elections/Cargo.toml b/frame/elections/Cargo.toml index 407b5ccfdb1..31888764880 100644 --- a/frame/elections/Cargo.toml +++ b/frame/elections/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-elections" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/evm/Cargo.toml b/frame/evm/Cargo.toml index eaa5ae3e42b..83ebeb1e33f 100644 --- a/frame/evm/Cargo.toml +++ b/frame/evm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-evm" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } -pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } +pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } primitive-types = { version = "0.7.0", default-features = false, features = ["rlp"] } rlp = { version = "0.4", default-features = false } evm = { version = "0.16", default-features = false } diff --git a/frame/example-offchain-worker/Cargo.toml b/frame/example-offchain-worker/Cargo.toml index 30381adb49f..05947d7c311 100644 --- a/frame/example-offchain-worker/Cargo.toml +++ b/frame/example-offchain-worker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-example-offchain-worker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -13,13 +13,13 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } serde = { version = "1.0.101", optional = true } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } lite-json = { version = "0.1", default-features = false } [features] diff --git a/frame/example/Cargo.toml b/frame/example/Cargo.toml index d12b1e7c83f..4bfc1aeb71b 100644 --- a/frame/example/Cargo.toml +++ b/frame/example/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-example" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core", default-features = false } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core", default-features = false } [features] default = ["std"] diff --git a/frame/executive/Cargo.toml b/frame/executive/Cargo.toml index 3e0e1c938a8..da32b5132b0 100644 --- a/frame/executive/Cargo.toml +++ b/frame/executive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-executive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,22 +13,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/tracing" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } [dev-dependencies] hex-literal = "0.2.1" -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-io ={ path = "../../primitives/io", version = "2.0.0-dev"} -pallet-indices = { version = "2.0.0-dev", path = "../indices" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -pallet-transaction-payment = { version = "2.0.0-dev", path = "../transaction-payment" } -sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io ={ path = "../../primitives/io", version = "2.0.0-alpha.7"} +pallet-indices = { version = "2.0.0-alpha.7", path = "../indices" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../transaction-payment" } +sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } [features] default = ["std"] diff --git a/frame/finality-tracker/Cargo.toml b/frame/finality-tracker/Cargo.toml index 1b11fbea5ad..6f654475792 100644 --- a/frame/finality-tracker/Cargo.toml +++ b/frame/finality-tracker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-finality-tracker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,17 +16,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-tracker" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/finality-tracker" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/generic-asset/Cargo.toml b/frame/generic-asset/Cargo.toml index c19a7884b3e..4304441385f 100644 --- a/frame/generic-asset/Cargo.toml +++ b/frame/generic-asset/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-generic-asset" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Centrality Developers "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/grandpa/Cargo.toml b/frame/grandpa/Cargo.toml index 2e1dbc4deba..d3819652d1e 100644 --- a/frame/grandpa/Cargo.toml +++ b/frame/grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-grandpa" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-finality-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-grandpa" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } -pallet-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../finality-tracker" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-finality-grandpa = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/finality-grandpa" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } +pallet-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../finality-tracker" } [dev-dependencies] -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/identity/Cargo.toml b/frame/identity/Cargo.toml index f20a8c983df..0f43adbcb23 100644 --- a/frame/identity/Cargo.toml +++ b/frame/identity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-identity" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/im-online/Cargo.toml b/frame/im-online/Cargo.toml index 55e5a49d586..01a96c57021 100644 --- a/frame/im-online/Cargo.toml +++ b/frame/im-online/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-im-online" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME's I'm online pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } -pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../authorship" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../authorship" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [features] default = ["std", "pallet-session/historical"] diff --git a/frame/indices/Cargo.toml b/frame/indices/Cargo.toml index 515c0b478dd..3c006abbc18 100644 --- a/frame/indices/Cargo.toml +++ b/frame/indices/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-indices" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../primitives/keyring" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/keyring" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/membership/Cargo.toml b/frame/membership/Cargo.toml index 742cc124a29..b570718915d 100644 --- a/frame/membership/Cargo.toml +++ b/frame/membership/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-membership" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/metadata/Cargo.toml b/frame/metadata/Cargo.toml index 73418be9b2b..6e06680f8aa 100644 --- a/frame/metadata/Cargo.toml +++ b/frame/metadata/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-metadata" -version = "11.0.0-dev" +version = "11.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/nicks/Cargo.toml b/frame/nicks/Cargo.toml index fcb64731051..1590e7bf0e3 100644 --- a/frame/nicks/Cargo.toml +++ b/frame/nicks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-nicks" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/offences/Cargo.toml b/frame/offences/Cargo.toml index e0759325feb..43d8666ffda 100644 --- a/frame/offences/Cargo.toml +++ b/frame/offences/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-offences" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,18 +12,18 @@ description = "FRAME offences pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } +pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/offences/benchmarking/Cargo.toml b/frame/offences/benchmarking/Cargo.toml index de9d68dc804..5584fef6c5e 100644 --- a/frame/offences/benchmarking/Cargo.toml +++ b/frame/offences/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-offences-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } -pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../im-online" } -pallet-offences = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../offences" } -pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../../session" } -sp-io = { path = "../../../primitives/io", default-features = false, version = "2.0.0-dev"} +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/staking" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } +pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../im-online" } +pallet-offences = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../offences" } +pallet-staking = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../session" } +sp-io = { path = "../../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} [features] diff --git a/frame/randomness-collective-flip/Cargo.toml b/frame/randomness-collective-flip/Cargo.toml index 08d715899fb..5dad2af0c90 100644 --- a/frame/randomness-collective-flip/Cargo.toml +++ b/frame/randomness-collective-flip/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-randomness-collective-flip" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] safe-mix = { version = "1.0", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/recovery/Cargo.toml b/frame/recovery/Cargo.toml index de422678c37..ace82bd56d2 100644 --- a/frame/recovery/Cargo.toml +++ b/frame/recovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-recovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,15 +15,15 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/scheduler/Cargo.toml b/frame/scheduler/Cargo.toml index 8a511cd3894..166976a86af 100644 --- a/frame/scheduler/Cargo.toml +++ b/frame/scheduler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-scheduler" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -11,15 +11,15 @@ description = "FRAME example pallet" [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.2.0", default-features = false } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core", default-features = false } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core", default-features = false } [features] default = ["std"] diff --git a/frame/scored-pool/Cargo.toml b/frame/scored-pool/Cargo.toml index ae8def3dd39..143c07491fc 100644 --- a/frame/scored-pool/Cargo.toml +++ b/frame/scored-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-scored-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/session/Cargo.toml b/frame/session/Cargo.toml index b3ca1ad596c..7d1ab5123cf 100644 --- a/frame/session/Cargo.toml +++ b/frame/session/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-session" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,19 +14,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } -sp-trie = { optional = true, path = "../../primitives/trie", default-features = false, version = "2.0.0-dev"} -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } +sp-trie = { optional = true, path = "../../primitives/trie", default-features = false, version = "2.0.0-alpha.7"} +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } lazy_static = "1.4.0" [features] diff --git a/frame/session/benchmarking/Cargo.toml b/frame/session/benchmarking/Cargo.toml index a3994ab3790..e8fd3c915e6 100644 --- a/frame/session/benchmarking/Cargo.toml +++ b/frame/session/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-session-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,22 +12,22 @@ description = "FRAME sessions pallet benchmarking" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } -pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } -pallet-session = { version = "2.0.0-dev", default-features = false, path = "../../session" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } +pallet-staking = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } +pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../session" } [dev-dependencies] serde = { version = "1.0.101" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../../staking/reward-curve" } -sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} -pallet-timestamp = { version = "2.0.0-dev", path = "../../timestamp" } -pallet-balances = { version = "2.0.0-dev", path = "../../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../../staking/reward-curve" } +sp-io ={ path = "../../../primitives/io", version = "2.0.0-alpha.7"} +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../timestamp" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../balances" } [features] default = ["std"] diff --git a/frame/society/Cargo.toml b/frame/society/Cargo.toml index d79eb78b7d6..a59b7685d00 100644 --- a/frame/society/Cargo.toml +++ b/frame/society/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-society" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } rand_chacha = { version = "0.2", default-features = false } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/staking/Cargo.toml b/frame/staking/Cargo.toml index 3ee07b5dec8..7576a6f219d 100644 --- a/frame/staking/Cargo.toml +++ b/frame/staking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-staking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,35 +14,35 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../primitives/phragmen" } -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io", default-features = false } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-session = { version = "2.0.0-dev", features = ["historical"], path = "../session", default-features = false } -pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../authorship" } -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/phragmen" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io", default-features = false } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-alpha.7", features = ["historical"], path = "../session", default-features = false } +pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../authorship" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } static_assertions = "1.1.0" # Optional imports for tesing-utils feature -pallet-indices = { version = "2.0.0-dev", optional = true, path = "../indices", default-features = false } -sp-core = { version = "2.0.0-dev", optional = true, path = "../../primitives/core", default-features = false } +pallet-indices = { version = "2.0.0-alpha.7", optional = true, path = "../indices", default-features = false } +sp-core = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/core", default-features = false } rand = { version = "0.7.3", optional = true, default-features = false } # Optional imports for benchmarking -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } rand_chacha = { version = "0.2", default-features = false, optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -pallet-timestamp = { version = "2.0.0-dev", path = "../timestamp" } -pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../staking/reward-curve" } -substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } -frame-benchmarking = { version = "2.0.0-dev", path = "../benchmarking" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../timestamp" } +pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../staking/reward-curve" } +substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } +frame-benchmarking = { version = "2.0.0-alpha.7", path = "../benchmarking" } rand_chacha = { version = "0.2" } parking_lot = "0.10.2" env_logger = "0.7.1" diff --git a/frame/staking/fuzzer/Cargo.toml b/frame/staking/fuzzer/Cargo.toml index 34e956a3672..3df6db2d760 100644 --- a/frame/staking/fuzzer/Cargo.toml +++ b/frame/staking/fuzzer/Cargo.toml @@ -9,26 +9,26 @@ homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" description = "FRAME pallet staking fuzzing" +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + [dependencies] honggfuzz = "0.5" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -pallet-staking = { version = "2.0.0-alpha.5", path = "..", features = ["testing-utils"] } -pallet-staking-reward-curve = { version = "2.0.0-alpha.5", path = "../reward-curve" } -pallet-session = { version = "2.0.0-alpha.5", path = "../../session" } -pallet-indices = { version = "2.0.0-alpha.5", path = "../../indices" } -pallet-balances = { version = "2.0.0-alpha.5", path = "../../balances" } -pallet-timestamp = { version = "2.0.0-alpha.5", path = "../../timestamp" } -frame-system = { version = "2.0.0-alpha.5", path = "../../system" } -frame-support = { version = "2.0.0-alpha.5", path = "../../support" } -sp-std = { version = "2.0.0-alpha.5", path = "../../../primitives/std" } -sp-io ={ version = "2.0.0-alpha.5", path = "../../../primitives/io" } -sp-core = { version = "2.0.0-alpha.5", path = "../../../primitives/core" } -sp-phragmen = { version = "2.0.0-alpha.5", path = "../../../primitives/phragmen" } -sp-runtime = { version = "2.0.0-alpha.5", path = "../../../primitives/runtime" } +pallet-staking = { version = "2.0.0-alpha.7", path = "..", features = ["testing-utils"] } +pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../reward-curve" } +pallet-session = { version = "2.0.0-alpha.7", path = "../../session" } +pallet-indices = { version = "2.0.0-alpha.7", path = "../../indices" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../../balances" } +pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../timestamp" } +frame-system = { version = "2.0.0-alpha.7", path = "../../system" } +frame-support = { version = "2.0.0-alpha.7", path = "../../support" } +sp-std = { version = "2.0.0-alpha.7", path = "../../../primitives/std" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-phragmen = { version = "2.0.0-alpha.7", path = "../../../primitives/phragmen" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } [[bin]] name = "submit_solution" path = "src/submit_solution.rs" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/frame/staking/reward-curve/Cargo.toml b/frame/staking/reward-curve/Cargo.toml index b11d1cc0493..8848cce0951 100644 --- a/frame/staking/reward-curve/Cargo.toml +++ b/frame/staking/reward-curve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-staking-reward-curve" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -21,4 +21,4 @@ proc-macro2 = "1.0.6" proc-macro-crate = "0.1.4" [dev-dependencies] -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } diff --git a/frame/sudo/Cargo.toml b/frame/sudo/Cargo.toml index 25988b1fe30..e124324c970 100644 --- a/frame/sudo/Cargo.toml +++ b/frame/sudo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-sudo" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/support/Cargo.toml b/frame/support/Cargo.toml index 0168705da7e..05e55e68c99 100644 --- a/frame/support/Cargo.toml +++ b/frame/support/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,24 +15,24 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4" serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-metadata = { version = "11.0.0-dev", default-features = false, path = "../metadata" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../../primitives/arithmetic" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -frame-support-procedural = { version = "2.0.0-dev", path = "./procedural" } +frame-metadata = { version = "11.0.0-alpha.7", default-features = false, path = "../metadata" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/tracing" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/arithmetic" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +frame-support-procedural = { version = "2.0.0-alpha.7", path = "./procedural" } paste = "0.1.6" once_cell = { version = "1", default-features = false, optional = true } -sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } bitmask = { version = "0.5.0", default-features = false } impl-trait-for-tuples = "0.1.3" [dev-dependencies] pretty_assertions = "0.6.1" -frame-system = { version = "2.0.0-dev", path = "../system" } +frame-system = { version = "2.0.0-alpha.7", path = "../system" } [features] default = ["std"] diff --git a/frame/support/procedural/Cargo.toml b/frame/support/procedural/Cargo.toml index 55e55134321..6364149e548 100644 --- a/frame/support/procedural/Cargo.toml +++ b/frame/support/procedural/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] proc-macro = true [dependencies] -frame-support-procedural-tools = { version = "2.0.0-dev", path = "./tools" } +frame-support-procedural-tools = { version = "2.0.0-alpha.7", path = "./tools" } proc-macro2 = "1.0.6" quote = "1.0.3" syn = { version = "1.0.7", features = ["full"] } diff --git a/frame/support/procedural/tools/Cargo.toml b/frame/support/procedural/tools/Cargo.toml index f64ad9b1e66..88ab74a3c80 100644 --- a/frame/support/procedural/tools/Cargo.toml +++ b/frame/support/procedural/tools/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural-tools" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Proc macro helpers for procedural macros" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -frame-support-procedural-tools-derive = { version = "2.0.0-dev", path = "./derive" } +frame-support-procedural-tools-derive = { version = "2.0.0-alpha.7", path = "./derive" } proc-macro2 = "1.0.6" quote = "1.0.3" syn = { version = "1.0.7", features = ["full", "visit"] } diff --git a/frame/support/procedural/tools/derive/Cargo.toml b/frame/support/procedural/tools/derive/Cargo.toml index 75721508e8f..0c396582a40 100644 --- a/frame/support/procedural/tools/derive/Cargo.toml +++ b/frame/support/procedural/tools/derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural-tools-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/frame/support/test/Cargo.toml b/frame/support/test/Cargo.toml index 77899788d2d..55e2e70930c 100644 --- a/frame/support/test/Cargo.toml +++ b/frame/support/test/Cargo.toml @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-io ={ path = "../../../primitives/io", default-features = false , version = "2.0.0-dev"} -sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../../primitives/state-machine" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/inherents" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-io ={ path = "../../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../../primitives/state-machine" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/inherents" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } trybuild = "1.0.17" pretty_assertions = "0.6.1" rustversion = "1.0.0" diff --git a/frame/system/Cargo.toml b/frame/system/Cargo.toml index 0e90009a166..50d1090bb7a 100644 --- a/frame/system/Cargo.toml +++ b/frame/system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-dev"} -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] criterion = "0.2.11" -sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } [features] diff --git a/frame/system/benchmarking/Cargo.toml b/frame/system/benchmarking/Cargo.toml index 0518bd705dc..57394bff233 100644 --- a/frame/system/benchmarking/Cargo.toml +++ b/frame/system/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system-benchmarking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } [dev-dependencies] serde = { version = "1.0.101" } -sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} +sp-io ={ path = "../../../primitives/io", version = "2.0.0-alpha.7"} [features] default = ["std"] diff --git a/frame/system/rpc/runtime-api/Cargo.toml b/frame/system/rpc/runtime-api/Cargo.toml index 2097e112663..da276fe1f47 100644 --- a/frame/system/rpc/runtime-api/Cargo.toml +++ b/frame/system/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system-rpc-runtime-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Runtime API definition required by System RPC extensions." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } [features] diff --git a/frame/timestamp/Cargo.toml b/frame/timestamp/Cargo.toml index 7691421bbfe..2c0bef5e22e 100644 --- a/frame/timestamp/Cargo.toml +++ b/frame/timestamp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-timestamp" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,19 +16,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io", optional = true } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io", optional = true } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/transaction-payment/Cargo.toml b/frame/transaction-payment/Cargo.toml index a969f300868..4cc02b553c0 100644 --- a/frame/transaction-payment/Cargo.toml +++ b/frame/transaction-payment/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,17 +13,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "./rpc/runtime-api" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "./rpc/runtime-api" } [dev-dependencies] -sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } +sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } [features] default = ["std"] diff --git a/frame/transaction-payment/rpc/Cargo.toml b/frame/transaction-payment/rpc/Cargo.toml index 35f421915af..c4a7cddbca0 100644 --- a/frame/transaction-payment/rpc/Cargo.toml +++ b/frame/transaction-payment/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,10 +16,10 @@ codec = { package = "parity-scale-codec", version = "1.3.0" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sp-rpc = { version = "2.0.0-dev", path = "../../../primitives/rpc" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-rpc = { version = "2.0.0-alpha.7", path = "../../../primitives/rpc" } serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", path = "./runtime-api" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", path = "./runtime-api" } diff --git a/frame/transaction-payment/rpc/runtime-api/Cargo.toml b/frame/transaction-payment/rpc/runtime-api/Cargo.toml index 1170e043eea..173c245a547 100644 --- a/frame/transaction-payment/rpc/runtime-api/Cargo.toml +++ b/frame/transaction-payment/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment-rpc-runtime-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,11 +13,11 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../support" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../support" } [dev-dependencies] serde_json = "1.0.41" diff --git a/frame/treasury/Cargo.toml b/frame/treasury/Cargo.toml index c00ae225c1e..91d2594e170 100644 --- a/frame/treasury/Cargo.toml +++ b/frame/treasury/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-treasury" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/utility/Cargo.toml b/frame/utility/Cargo.toml index a830f8ab5b5..603d0ff8b71 100644 --- a/frame/utility/Cargo.toml +++ b/frame/utility/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-utility" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } [features] default = ["std"] diff --git a/frame/vesting/Cargo.toml b/frame/vesting/Cargo.toml index 79430990c32..1927bae88aa 100644 --- a/frame/vesting/Cargo.toml +++ b/frame/vesting/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-vesting" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,17 +15,17 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-dev", path = "../balances" } -sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } hex-literal = "0.2.1" [features] diff --git a/primitives/allocator/Cargo.toml b/primitives/allocator/Cargo.toml index 8530e0df0e7..398d5e6483a 100644 --- a/primitives/allocator/Cargo.toml +++ b/primitives/allocator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-allocator" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,9 +13,9 @@ documentation = "https://docs.rs/sp-allocator" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-dev", path = "../std", default-features = false } -sp-core = { version = "2.0.0-dev", path = "../core", default-features = false } -sp-wasm-interface = { version = "2.0.0-dev", path = "../wasm-interface", default-features = false } +sp-std = { version = "2.0.0-alpha.7", path = "../std", default-features = false } +sp-core = { version = "2.0.0-alpha.7", path = "../core", default-features = false } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../wasm-interface", default-features = false } log = { version = "0.4.8", optional = true } derive_more = { version = "0.99.2", optional = true } diff --git a/primitives/api/Cargo.toml b/primitives/api/Cargo.toml index 43decc4f6e6..821b17943dc 100644 --- a/primitives/api/Cargo.toml +++ b/primitives/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-api" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,12 +13,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-api-proc-macro = { version = "2.0.0-dev", path = "proc-macro" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../version" } -sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } +sp-api-proc-macro = { version = "2.0.0-alpha.7", path = "proc-macro" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../version" } +sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } hash-db = { version = "0.15.2", optional = true } [dev-dependencies] diff --git a/primitives/api/proc-macro/Cargo.toml b/primitives/api/proc-macro/Cargo.toml index a970b3e750a..3ea81d4f493 100644 --- a/primitives/api/proc-macro/Cargo.toml +++ b/primitives/api/proc-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-api-proc-macro" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/api/test/Cargo.toml b/primitives/api/test/Cargo.toml index a945399f1b6..39caebf7b53 100644 --- a/primitives/api/test/Cargo.toml +++ b/primitives/api/test/Cargo.toml @@ -12,22 +12,22 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", path = "../" } +sp-api = { version = "2.0.0-alpha.7", path = "../" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-version = { version = "2.0.0-dev", path = "../../version" } -sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-blockchain = { version = "2.0.0-dev", path = "../../blockchain" } -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } +sp-version = { version = "2.0.0-alpha.7", path = "../../version" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../blockchain" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } trybuild = "1.0.17" rustversion = "1.0.0" [dev-dependencies] criterion = "0.3.0" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-core = { version = "2.0.0-dev", path = "../../core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../core" } [[bench]] name = "bench" diff --git a/primitives/application-crypto/Cargo.toml b/primitives/application-crypto/Cargo.toml index be9e5e5a111..812a05e0dc6 100644 --- a/primitives/application-crypto/Cargo.toml +++ b/primitives/application-crypto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-application-crypto" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" description = "Provides facilities for generating application specific crypto wrapper types." @@ -14,11 +14,11 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } [features] default = [ "std" ] diff --git a/primitives/application-crypto/test/Cargo.toml b/primitives/application-crypto/test/Cargo.toml index 47b477ddd37..b99a51dfc39 100644 --- a/primitives/application-crypto/test/Cargo.toml +++ b/primitives/application-crypto/test/Cargo.toml @@ -13,8 +13,8 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-api = { version = "2.0.0-dev", path = "../../api" } -sp-application-crypto = { version = "2.0.0-dev", path = "../" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-application-crypto = { version = "2.0.0-alpha.7", path = "../" } diff --git a/primitives/arithmetic/Cargo.toml b/primitives/arithmetic/Cargo.toml index 70efb4ac4a8..d4ae60ac5e2 100644 --- a/primitives/arithmetic/Cargo.toml +++ b/primitives/arithmetic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-arithmetic" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,9 +17,9 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } integer-sqrt = "0.1.2" num-traits = { version = "0.2.8", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-debug-derive = { version = "2.0.0-dev", default-features = false, path = "../../primitives/debug-derive" } +sp-debug-derive = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/debug-derive" } primitive-types = { version = "0.7.0", default-features = false } [dev-dependencies] diff --git a/primitives/arithmetic/fuzzer/Cargo.toml b/primitives/arithmetic/fuzzer/Cargo.toml index f145c2cd904..fc4cb418405 100644 --- a/primitives/arithmetic/fuzzer/Cargo.toml +++ b/primitives/arithmetic/fuzzer/Cargo.toml @@ -14,7 +14,7 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-arithmetic = { version = "2.0.0-dev", path = ".." } +sp-arithmetic = { version = "2.0.0-alpha.7", path = ".." } honggfuzz = "0.5" primitive-types = "0.7.0" num-bigint = "0.2" diff --git a/primitives/authority-discovery/Cargo.toml b/primitives/authority-discovery/Cargo.toml index 32f67d5e6e0..d458c2393ae 100644 --- a/primitives/authority-discovery/Cargo.toml +++ b/primitives/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-authority-discovery" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Authority discovery primitives" edition = "2018" @@ -12,11 +12,11 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", default-features = false, version = "1.3.0" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/authorship/Cargo.toml b/primitives/authorship/Cargo.toml index 7bc01953ef8..c93ec6d71b1 100644 --- a/primitives/authorship/Cargo.toml +++ b/primitives/authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-authorship" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Authorship primitives" edition = "2018" @@ -12,9 +12,9 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/primitives/block-builder/Cargo.toml b/primitives/block-builder/Cargo.toml index 70bb5e12d37..a7d7aae86bb 100644 --- a/primitives/block-builder/Cargo.toml +++ b/primitives/block-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-block-builder" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "The block builder runtime api." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } [features] default = [ "std" ] diff --git a/primitives/blockchain/Cargo.toml b/primitives/blockchain/Cargo.toml index d5cf80b7751..56ba7383ff9 100644 --- a/primitives/blockchain/Cargo.toml +++ b/primitives/blockchain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-blockchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -19,7 +19,7 @@ lru = "0.4.0" parking_lot = "0.10.0" derive_more = "0.99.2" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-consensus = { version = "0.8.0-dev", path = "../consensus/common" } -sp-runtime = { version = "2.0.0-dev", path = "../runtime" } -sp-block-builder = { version = "2.0.0-dev", path = "../block-builder" } -sp-state-machine = { version = "0.8.0-dev", path = "../state-machine" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../consensus/common" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-block-builder = { version = "2.0.0-alpha.7", path = "../block-builder" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../state-machine" } diff --git a/primitives/chain-spec/Cargo.toml b/primitives/chain-spec/Cargo.toml index 585decc68d0..a98ee919373 100644 --- a/primitives/chain-spec/Cargo.toml +++ b/primitives/chain-spec/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-chain-spec" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/consensus/aura/Cargo.toml b/primitives/consensus/aura/Cargo.toml index 574b80bd3d3..e7a0b33ba6a 100644 --- a/primitives/consensus/aura/Cargo.toml +++ b/primitives/consensus/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-aura" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Primitives for Aura consensus" edition = "2018" @@ -12,13 +12,13 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../inherents" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../timestamp" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../inherents" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../timestamp" } [features] default = ["std"] diff --git a/primitives/consensus/babe/Cargo.toml b/primitives/consensus/babe/Cargo.toml index ca097d6a32d..b08b0f154f8 100644 --- a/primitives/consensus/babe/Cargo.toml +++ b/primitives/consensus/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-babe" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Primitives for BABE consensus" edition = "2018" @@ -12,16 +12,16 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } merlin = { version = "2.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } -sp-consensus = { version = "0.8.0-dev", optional = true, path = "../common" } -sp-consensus-vrf = { version = "0.8.0-dev", path = "../vrf", default-features = false } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../inherents" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } -sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../timestamp" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } +sp-consensus = { version = "0.8.0-alpha.7", optional = true, path = "../common" } +sp-consensus-vrf = { version = "0.8.0-alpha.7", path = "../vrf", default-features = false } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../inherents" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } +sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../timestamp" } [features] default = ["std"] diff --git a/primitives/consensus/common/Cargo.toml b/primitives/consensus/common/Cargo.toml index 7101dde2fc3..cbeb6961218 100644 --- a/primitives/consensus/common/Cargo.toml +++ b/primitives/consensus/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,15 +17,15 @@ targets = ["x86_64-unknown-linux-gnu"] derive_more = "0.99.2" libp2p = { version = "0.18.1", default-features = false } log = "0.4.8" -sp-core = { path= "../../core", version = "2.0.0-dev"} -sp-inherents = { version = "2.0.0-dev", path = "../../inherents" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-core = { path= "../../core", version = "2.0.0-alpha.7"} +sp-inherents = { version = "2.0.0-alpha.7", path = "../../inherents" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } futures = { version = "0.3.1", features = ["thread-pool"] } futures-timer = "3.0.1" -sp-std = { version = "2.0.0-dev", path = "../../std" } -sp-version = { version = "2.0.0-dev", path = "../../version" } -sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../utils" } +sp-std = { version = "2.0.0-alpha.7", path = "../../std" } +sp-version = { version = "2.0.0-alpha.7", path = "../../version" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } +sp-utils = { version = "2.0.0-alpha.7", path = "../../utils" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" serde = { version = "1.0", features = ["derive"] } diff --git a/primitives/consensus/pow/Cargo.toml b/primitives/consensus/pow/Cargo.toml index a7bcb6a000f..20661704ee2 100644 --- a/primitives/consensus/pow/Cargo.toml +++ b/primitives/consensus/pow/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-pow" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Primitives for Aura consensus" edition = "2018" @@ -12,10 +12,10 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/primitives/consensus/vrf/Cargo.toml b/primitives/consensus/vrf/Cargo.toml index 92d8a77cb4e..ff78cb4189f 100644 --- a/primitives/consensus/vrf/Cargo.toml +++ b/primitives/consensus/vrf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-vrf" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Primitives for VRF based consensus" edition = "2018" @@ -14,9 +14,9 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { version = "1.0.0", package = "parity-scale-codec", default-features = false } schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"], default-features = false } -sp-std = { version = "2.0.0-dev", path = "../../std", default-features = false } -sp-core = { version = "2.0.0-dev", path = "../../core", default-features = false } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } +sp-std = { version = "2.0.0-alpha.7", path = "../../std", default-features = false } +sp-core = { version = "2.0.0-alpha.7", path = "../../core", default-features = false } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } [features] default = ["std"] diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index 2ab23d23c4a..0026f3a01fb 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-core" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,7 +13,7 @@ documentation = "https://docs.rs/sp-core" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.8", default-features = false } serde = { version = "1.0.101", optional = true, features = ["derive"] } @@ -32,9 +32,9 @@ num-traits = { version = "0.2.8", default-features = false } zeroize = { version = "1.0.0", default-features = false } lazy_static = { version = "1.4.0", default-features = false, optional = true } parking_lot = { version = "0.10.0", optional = true } -sp-debug-derive = { version = "2.0.0-dev", path = "../debug-derive" } -sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } -sp-storage = { version = "2.0.0-dev", default-features = false, path = "../storage" } +sp-debug-derive = { version = "2.0.0-alpha.7", path = "../debug-derive" } +sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } +sp-storage = { version = "2.0.0-alpha.7", default-features = false, path = "../storage" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } futures = { version = "0.3.1", optional = true } @@ -49,10 +49,10 @@ twox-hash = { version = "1.5.0", default-features = false, optional = true } libsecp256k1 = { version = "0.3.2", default-features = false, features = ["hmac"], optional = true } merlin = { version = "2.0", default-features = false, optional = true } -sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../runtime-interface" } +sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime-interface" } [dev-dependencies] -sp-serializer = { version = "2.0.0-dev", path = "../serializer" } +sp-serializer = { version = "2.0.0-alpha.7", path = "../serializer" } pretty_assertions = "0.6.1" hex-literal = "0.2.1" rand = "0.7.2" diff --git a/primitives/database/Cargo.toml b/primitives/database/Cargo.toml index 2ab86de61d6..fd437a91e4a 100644 --- a/primitives/database/Cargo.toml +++ b/primitives/database/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-database" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/debug-derive/Cargo.toml b/primitives/debug-derive/Cargo.toml index a3e9d91fd28..f7ba39093a2 100644 --- a/primitives/debug-derive/Cargo.toml +++ b/primitives/debug-derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-debug-derive" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/externalities/Cargo.toml b/primitives/externalities/Cargo.toml index 9d7cd1df6b7..0fb4318a716 100644 --- a/primitives/externalities/Cargo.toml +++ b/primitives/externalities/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-externalities" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -13,7 +13,7 @@ documentation = "https://docs.rs/sp-externalities" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-storage = { version = "2.0.0-dev", path = "../storage" } -sp-std = { version = "2.0.0-dev", path = "../std" } +sp-storage = { version = "2.0.0-alpha.7", path = "../storage" } +sp-std = { version = "2.0.0-alpha.7", path = "../std" } environmental = { version = "1.1.1" } codec = { package = "parity-scale-codec", version = "1.3.0" } diff --git a/primitives/finality-grandpa/Cargo.toml b/primitives/finality-grandpa/Cargo.toml index b5ce970c0d8..0ea55d4daeb 100644 --- a/primitives/finality-grandpa/Cargo.toml +++ b/primitives/finality-grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-finality-grandpa" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/finality-tracker/Cargo.toml b/primitives/finality-tracker/Cargo.toml index a111c626752..96171fb3326 100644 --- a/primitives/finality-tracker/Cargo.toml +++ b/primitives/finality-tracker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-finality-tracker" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,8 +13,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } [features] default = ["std"] diff --git a/primitives/inherents/Cargo.toml b/primitives/inherents/Cargo.toml index 084d275882a..e1b21984bd4 100644 --- a/primitives/inherents/Cargo.toml +++ b/primitives/inherents/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-inherents" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,8 +15,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parking_lot = { version = "0.10.0", optional = true } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } derive_more = { version = "0.99.2", optional = true } diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index 93c8cc9d38b..d089765e13f 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-io" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,14 +16,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } hash-db = { version = "0.15.2", default-features = false } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } libsecp256k1 = { version = "0.3.4", optional = true } -sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } -sp-wasm-interface = { version = "2.0.0-dev", path = "../../primitives/wasm-interface", default-features = false } -sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../runtime-interface" } -sp-trie = { version = "2.0.0-dev", optional = true, path = "../../primitives/trie" } -sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } +sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../primitives/wasm-interface", default-features = false } +sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime-interface" } +sp-trie = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/trie" } +sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } log = { version = "0.4.8", optional = true } futures = { version = "0.3.1", features = ["thread-pool"], optional = true } parking_lot = { version = "0.10.0", optional = true } diff --git a/primitives/keyring/Cargo.toml b/primitives/keyring/Cargo.toml index 23e243239a5..6a7dd97ff53 100644 --- a/primitives/keyring/Cargo.toml +++ b/primitives/keyring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-keyring" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", path = "../core" } -sp-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } lazy_static = "1.4.0" strum = { version = "0.16.0", features = ["derive"] } diff --git a/primitives/offchain/Cargo.toml b/primitives/offchain/Cargo.toml index ddac54372ea..9b6773827dd 100644 --- a/primitives/offchain/Cargo.toml +++ b/primitives/offchain/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate offchain workers primitives" name = "sp-offchain" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -12,12 +12,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } [dev-dependencies] -sp-state-machine = { version = "0.8.0-alpha.5", default-features = false, path = "../state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", default-features = false, path = "../state-machine" } [features] default = ["std"] diff --git a/primitives/panic-handler/Cargo.toml b/primitives/panic-handler/Cargo.toml index b5adb9cb548..251d6e761e4 100644 --- a/primitives/panic-handler/Cargo.toml +++ b/primitives/panic-handler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-panic-handler" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/phragmen/Cargo.toml b/primitives/phragmen/Cargo.toml index 29fc0ed41e4..c0f5ebdd494 100644 --- a/primitives/phragmen/Cargo.toml +++ b/primitives/phragmen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-phragmen" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-phragmen-compact = { version = "2.0.0-dev", path = "./compact" } -sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../arithmetic" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-phragmen-compact = { version = "2.0.0-alpha.7", path = "./compact" } +sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../arithmetic" } [dev-dependencies] -substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } +substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } rand = "0.7.3" -sp-phragmen = { version = "2.0.0-dev", path = "." } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-phragmen = { version = "2.0.0-alpha.7", path = "." } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } [features] default = ["std"] diff --git a/primitives/phragmen/compact/Cargo.toml b/primitives/phragmen/compact/Cargo.toml index 386116f2683..cff5f5e7e34 100644 --- a/primitives/phragmen/compact/Cargo.toml +++ b/primitives/phragmen/compact/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-phragmen-compact" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/phragmen/fuzzer/Cargo.toml b/primitives/phragmen/fuzzer/Cargo.toml index a26e6e9f897..5364e74605c 100644 --- a/primitives/phragmen/fuzzer/Cargo.toml +++ b/primitives/phragmen/fuzzer/Cargo.toml @@ -10,10 +10,13 @@ description = "Fuzzer for phragmén implementation." documentation = "https://docs.rs/sp-phragmen-fuzzer" publish = false +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + [dependencies] -sp-phragmen = { version = "2.0.0-alpha.5", path = ".." } -sp-std = { version = "2.0.0-alpha.5", path = "../../std" } -sp-runtime = { version = "2.0.0-alpha.5", path = "../../runtime" } +sp-phragmen = { version = "2.0.0-alpha.7", path = ".." } +sp-std = { version = "2.0.0-alpha.7", path = "../../std" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } honggfuzz = "0.5" rand = { version = "0.7.3", features = ["std", "small_rng"] } @@ -24,6 +27,3 @@ path = "src/reduce.rs" [[bin]] name = "equalize" path = "src/equalize.rs" - -[package.metadata.docs.rs] -targets = ["x86_64-unknown-linux-gnu"] diff --git a/primitives/rpc/Cargo.toml b/primitives/rpc/Cargo.toml index 740b429c0c8..9db6dd53f84 100644 --- a/primitives/rpc/Cargo.toml +++ b/primitives/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-rpc" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,7 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", features = ["derive"] } -sp-core = { version = "2.0.0-dev", path = "../core" } +sp-core = { version = "2.0.0-alpha.7", path = "../core" } [dev-dependencies] serde_json = "1.0.41" diff --git a/primitives/runtime-interface/Cargo.toml b/primitives/runtime-interface/Cargo.toml index 1d0ae8f9512..902a43b2215 100644 --- a/primitives/runtime-interface/Cargo.toml +++ b/primitives/runtime-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime-interface" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,20 +13,20 @@ documentation = "https://docs.rs/sp-runtime-interface/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-wasm-interface = { version = "2.0.0-dev", path = "../wasm-interface", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../tracing" } -sp-runtime-interface-proc-macro = { version = "2.0.0-dev", path = "proc-macro" } -sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } +sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../wasm-interface", default-features = false } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../tracing" } +sp-runtime-interface-proc-macro = { version = "2.0.0-alpha.7", path = "proc-macro" } +sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } static_assertions = "1.0.0" primitive-types = { version = "0.7.0", default-features = false } [dev-dependencies] sp-runtime-interface-test-wasm = { version = "2.0.0-dev", path = "test-wasm" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } -sp-core = { version = "2.0.0-dev", path = "../core" } -sp-io = { version = "2.0.0-dev", path = "../io" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-core = { version = "2.0.0-alpha.7", path = "../core" } +sp-io = { version = "2.0.0-alpha.7", path = "../io" } rustversion = "1.0.0" trybuild = "1.0.23" diff --git a/primitives/runtime-interface/proc-macro/Cargo.toml b/primitives/runtime-interface/proc-macro/Cargo.toml index 28fe00cc390..146323718e1 100644 --- a/primitives/runtime-interface/proc-macro/Cargo.toml +++ b/primitives/runtime-interface/proc-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime-interface-proc-macro" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml b/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml index f992cad69b0..8314a7f65db 100644 --- a/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml +++ b/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml @@ -13,10 +13,10 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../io" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } +sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../io" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/primitives/runtime-interface/test-wasm/Cargo.toml b/primitives/runtime-interface/test-wasm/Cargo.toml index f9e64a5027a..eb851829ab0 100644 --- a/primitives/runtime-interface/test-wasm/Cargo.toml +++ b/primitives/runtime-interface/test-wasm/Cargo.toml @@ -13,10 +13,10 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../io" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } +sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../io" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/primitives/runtime-interface/test/Cargo.toml b/primitives/runtime-interface/test/Cargo.toml index 03f0122b220..2f73678300e 100644 --- a/primitives/runtime-interface/test/Cargo.toml +++ b/primitives/runtime-interface/test/Cargo.toml @@ -12,12 +12,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-dev", path = "../" } -sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } +sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } sp-runtime-interface-test-wasm = { version = "2.0.0-dev", path = "../test-wasm" } sp-runtime-interface-test-wasm-deprecated = { version = "2.0.0-dev", path = "../test-wasm-deprecated" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } -sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-core = { version = "2.0.0-dev", path = "../../core" } -sp-io = { version = "2.0.0-dev", path = "../../io" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } +sp-core = { version = "2.0.0-alpha.7", path = "../../core" } +sp-io = { version = "2.0.0-alpha.7", path = "../../io" } tracing = "0.1.13" diff --git a/primitives/runtime/Cargo.toml b/primitives/runtime/Cargo.toml index 030f0a61cbf..4eba56e881f 100644 --- a/primitives/runtime/Cargo.toml +++ b/primitives/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,23 +16,23 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } -sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../arithmetic" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../io" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } +sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../arithmetic" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../io" } log = { version = "0.4.8", optional = true } paste = "0.1.6" rand = { version = "0.7.2", optional = true } impl-trait-for-tuples = "0.1.3" -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } hash256-std-hasher = { version = "0.15.2", default-features = false } [dev-dependencies] serde_json = "1.0.41" rand = "0.7.2" -sp-state-machine = { version = "0.8.0-alpha.5", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } [features] bench = [] diff --git a/primitives/sandbox/Cargo.toml b/primitives/sandbox/Cargo.toml index a64854424ec..9f8263e68d5 100755 --- a/primitives/sandbox/Cargo.toml +++ b/primitives/sandbox/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-sandbox" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,10 +13,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] wasmi = { version = "0.6.2", optional = true } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-dev", default-features = false, path = "../io" } -sp-wasm-interface = { version = "2.0.0-dev", default-features = false, path = "../wasm-interface" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../io" } +sp-wasm-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../wasm-interface" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } [dev-dependencies] diff --git a/primitives/serializer/Cargo.toml b/primitives/serializer/Cargo.toml index 187c0e532fe..65682c6d331 100644 --- a/primitives/serializer/Cargo.toml +++ b/primitives/serializer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-serializer" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/session/Cargo.toml b/primitives/session/Cargo.toml index 6d210b341f4..ac9eddcc55c 100644 --- a/primitives/session/Cargo.toml +++ b/primitives/session/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-session" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,10 +12,10 @@ description = "Primitives for sessions" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } -sp-runtime = { version = "2.0.0-dev", optional = true, path = "../runtime" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-runtime = { version = "2.0.0-alpha.7", optional = true, path = "../runtime" } [features] default = [ "std" ] diff --git a/primitives/staking/Cargo.toml b/primitives/staking/Cargo.toml index 28907a75d39..3892ddd4a35 100644 --- a/primitives/staking/Cargo.toml +++ b/primitives/staking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-staking" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,8 +13,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } [features] default = ["std"] diff --git a/primitives/state-machine/Cargo.toml b/primitives/state-machine/Cargo.toml index 1d608ea6fcb..ed43b94d109 100644 --- a/primitives/state-machine/Cargo.toml +++ b/primitives/state-machine/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-state-machine" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Substrate State Machine" edition = "2018" @@ -18,17 +18,17 @@ parking_lot = "0.10.0" hash-db = "0.15.2" trie-db = "0.20.1" trie-root = "0.16.0" -sp-trie = { version = "2.0.0-dev", path = "../trie" } -sp-core = { version = "2.0.0-dev", path = "../core" } -sp-panic-handler = { version = "2.0.0-dev", path = "../panic-handler" } +sp-trie = { version = "2.0.0-alpha.7", path = "../trie" } +sp-core = { version = "2.0.0-alpha.7", path = "../core" } +sp-panic-handler = { version = "2.0.0-alpha.7", path = "../panic-handler" } codec = { package = "parity-scale-codec", version = "1.3.0" } num-traits = "0.2.8" rand = "0.7.2" -sp-externalities = { version = "0.8.0-dev", path = "../externalities" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../externalities" } [dev-dependencies] hex-literal = "0.2.1" -sp-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } [features] default = [] diff --git a/primitives/std/Cargo.toml b/primitives/std/Cargo.toml index 2b58167f17e..92e2bac30cd 100644 --- a/primitives/std/Cargo.toml +++ b/primitives/std/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-std" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/storage/Cargo.toml b/primitives/storage/Cargo.toml index 76174d13b03..364ed5d7315 100644 --- a/primitives/storage/Cargo.toml +++ b/primitives/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-storage" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" description = "Storage related primitives" @@ -13,11 +13,11 @@ documentation = "https://docs.rs/sp-storage/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } impl-serde = { version = "0.2.3", optional = true } ref-cast = "1.0.0" -sp-debug-derive = { version = "2.0.0-dev", path = "../debug-derive" } +sp-debug-derive = { version = "2.0.0-alpha.7", path = "../debug-derive" } [features] default = [ "std" ] diff --git a/primitives/test-primitives/Cargo.toml b/primitives/test-primitives/Cargo.toml index 386f7be17c9..e158d56473c 100644 --- a/primitives/test-primitives/Cargo.toml +++ b/primitives/test-primitives/Cargo.toml @@ -12,11 +12,11 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } [features] diff --git a/primitives/timestamp/Cargo.toml b/primitives/timestamp/Cargo.toml index 9de079d1a79..5780ec879ae 100644 --- a/primitives/timestamp/Cargo.toml +++ b/primitives/timestamp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-timestamp" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "Substrate core types and inherents for timestamps." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } impl-trait-for-tuples = "0.1.3" wasm-timer = { version = "0.2", optional = true } diff --git a/primitives/tracing/Cargo.toml b/primitives/tracing/Cargo.toml index 8eb3bc2beaa..09ac1f4ac68 100644 --- a/primitives/tracing/Cargo.toml +++ b/primitives/tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-tracing" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" diff --git a/primitives/transaction-pool/Cargo.toml b/primitives/transaction-pool/Cargo.toml index b33687246f7..80451163d61 100644 --- a/primitives/transaction-pool/Cargo.toml +++ b/primitives/transaction-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-transaction-pool" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -19,9 +19,9 @@ derive_more = { version = "0.99.2", optional = true } futures = { version = "0.3.1", optional = true } log = { version = "0.4.8", optional = true } serde = { version = "1.0.101", features = ["derive"], optional = true} -sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } -sp-utils = { version = "2.0.0-dev", default-features = false, path = "../utils" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-utils = { version = "2.0.0-alpha.7", default-features = false, path = "../utils" } [features] default = [ "std" ] diff --git a/primitives/trie/Cargo.toml b/primitives/trie/Cargo.toml index c010b3262d7..5faf67bf0fe 100644 --- a/primitives/trie/Cargo.toml +++ b/primitives/trie/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-trie" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] description = "Patricia trie stuff using a parity-scale-codec node format" repository = "https://github.com/paritytech/substrate/" @@ -18,19 +18,19 @@ harness = false [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } hash-db = { version = "0.15.2", default-features = false } trie-db = { version = "0.20.1", default-features = false } trie-root = { version = "0.16.0", default-features = false } memory-db = { version = "0.20.0", default-features = false } -sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } [dev-dependencies] trie-bench = "0.21.0" trie-standardmap = "0.15.2" criterion = "0.2.11" hex-literal = "0.2.1" -sp-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } [features] default = ["std"] diff --git a/primitives/utils/Cargo.toml b/primitives/utils/Cargo.toml index 79a3a331547..4157dba34c1 100644 --- a/primitives/utils/Cargo.toml +++ b/primitives/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/version/Cargo.toml b/primitives/version/Cargo.toml index 1d492ee41c4..d711cdec299 100644 --- a/primitives/version/Cargo.toml +++ b/primitives/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-version" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,8 +17,8 @@ targets = ["x86_64-unknown-linux-gnu"] impl-serde = { version = "0.2.3", optional = true } serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/wasm-interface/Cargo.toml b/primitives/wasm-interface/Cargo.toml index 8bea87d4902..23bffc94376 100644 --- a/primitives/wasm-interface/Cargo.toml +++ b/primitives/wasm-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-wasm-interface" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] wasmi = { version = "0.6.2", optional = true } impl-trait-for-tuples = "0.1.2" -sp-std = { version = "2.0.0-dev", path = "../std", default-features = false } +sp-std = { version = "2.0.0-alpha.7", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/test-utils/Cargo.toml b/test-utils/Cargo.toml index 43979be5532..c4d923b50cd 100644 --- a/test-utils/Cargo.toml +++ b/test-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-test-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/test-utils/client/Cargo.toml b/test-utils/client/Cargo.toml index 37c99292ec9..e4d0e83d72a 100644 --- a/test-utils/client/Cargo.toml +++ b/test-utils/client/Cargo.toml @@ -12,17 +12,17 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-dev", path = "../../client/api" } -sc-client-db = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../client/db" } -sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } -sc-executor = { version = "0.8.0-dev", path = "../../client/executor" } -sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } -sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../client/service" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../client/api" } +sc-client-db = { version = "0.8.0-alpha.7", features = ["test-helpers"], path = "../../client/db" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../client/executor" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../client/consensus/common" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../client/service" } futures = "0.3.4" hash-db = "0.15.2" -sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } diff --git a/test-utils/runtime/Cargo.toml b/test-utils/runtime/Cargo.toml index f4582d0b709..f2e9814d1ce 100644 --- a/test-utils/runtime/Cargo.toml +++ b/test-utils/runtime/Cargo.toml @@ -13,34 +13,34 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } -sp-consensus-aura = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/aura" } -sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/babe" } -sp-block-builder = { version = "2.0.0-dev", default-features = false, path = "../../primitives/block-builder" } +sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +sp-consensus-aura = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/aura" } +sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/babe" } +sp-block-builder = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/block-builder" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../frame/executive" } -sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } -sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../primitives/keyring" } +frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/executive" } +sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } +sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/keyring" } memory-db = { version = "0.20.0", default-features = false } -sp-offchain = { path = "../../primitives/offchain", default-features = false, version = "2.0.0-dev"} -sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } -sp-runtime-interface = { path = "../../primitives/runtime-interface", default-features = false, version = "2.0.0-dev"} -sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -frame-support = { version = "2.0.0-dev", default-features = false, path = "../../frame/support" } -sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } -sp-session = { version = "2.0.0-dev", default-features = false, path = "../../primitives/session" } -sp-api = { version = "2.0.0-dev", default-features = false, path = "../../primitives/api" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } -pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../frame/babe" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../frame/system" } -frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../frame/system/rpc/runtime-api" } -pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../frame/timestamp" } -sp-trie = { version = "2.0.0-dev", default-features = false, path = "../../primitives/trie" } -sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../primitives/transaction-pool" } +sp-offchain = { path = "../../primitives/offchain", default-features = false, version = "2.0.0-alpha.7"} +sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime-interface = { path = "../../primitives/runtime-interface", default-features = false, version = "2.0.0-alpha.7"} +sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/support" } +sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } +sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/session" } +sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/api" } +sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +pallet-babe = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/babe" } +frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/system" } +frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/system/rpc/runtime-api" } +pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/timestamp" } +sp-trie = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/trie" } +sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/transaction-pool" } trie-db = { version = "0.20.1", default-features = false } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } -sc-service = { version = "0.8.0-dev", default-features = false, optional = true, features = ["test-helpers"], path = "../../client/service" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, optional = true, features = ["test-helpers"], path = "../../client/service" } # 3rd party cfg-if = "0.1.10" @@ -48,10 +48,10 @@ log = { version = "0.4.8", optional = true } serde = { version = "1.0.101", optional = true, features = ["derive"] } [dev-dependencies] -sc-block-builder = { version = "0.8.0-dev", path = "../../client/block-builder" } -sc-executor = { version = "0.8.0-dev", path = "../../client/executor" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../client/block-builder" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../client/executor" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "./client" } -sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../utils/wasm-builder-runner" } diff --git a/test-utils/runtime/client/Cargo.toml b/test-utils/runtime/client/Cargo.toml index f622878404f..72d507b9aaf 100644 --- a/test-utils/runtime/client/Cargo.toml +++ b/test-utils/runtime/client/Cargo.toml @@ -12,16 +12,16 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } -sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } +sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } substrate-test-client = { version = "2.0.0-dev", path = "../../client" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } -sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } +sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } futures = "0.3.4" diff --git a/test-utils/runtime/transaction-pool/Cargo.toml b/test-utils/runtime/transaction-pool/Cargo.toml index 9ccf9d2e448..ace69374374 100644 --- a/test-utils/runtime/transaction-pool/Cargo.toml +++ b/test-utils/runtime/transaction-pool/Cargo.toml @@ -15,9 +15,9 @@ targets = ["x86_64-unknown-linux-gnu"] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../client" } parking_lot = "0.10.0" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } -sc-transaction-graph = { version = "2.0.0-dev", path = "../../../client/transaction-pool/graph" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sc-transaction-graph = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool/graph" } futures = { version = "0.3.1", features = ["compat"] } derive_more = "0.99.2" diff --git a/utils/browser/Cargo.toml b/utils/browser/Cargo.toml index 868f32e34ab..63f5467e9a9 100644 --- a/utils/browser/Cargo.toml +++ b/utils/browser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-browser-utils" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" authors = ["Parity Technologies "] description = "Utilities for creating a browser light-client." edition = "2018" @@ -22,11 +22,11 @@ js-sys = "0.3.34" wasm-bindgen = "0.2.57" wasm-bindgen-futures = "0.4.7" kvdb-web = "0.5" -sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } -sc-informant = { version = "0.8.0-dev", path = "../../client/informant" } -sc-service = { version = "0.8.0-dev", path = "../../client/service", default-features = false } -sc-network = { path = "../../client/network", version = "0.8.0-dev"} -sc-chain-spec = { path = "../../client/chain-spec", version = "2.0.0-dev"} +sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } +sc-informant = { version = "0.8.0-alpha.7", path = "../../client/informant" } +sc-service = { version = "0.8.0-alpha.7", path = "../../client/service", default-features = false } +sc-network = { path = "../../client/network", version = "0.8.0-alpha.7"} +sc-chain-spec = { path = "../../client/chain-spec", version = "2.0.0-alpha.7"} # Imported just for the `no_cc` feature clear_on_drop = { version = "0.2.3", features = ["no_cc"] } diff --git a/utils/build-script-utils/Cargo.toml b/utils/build-script-utils/Cargo.toml index 89c584808ab..6710a142621 100644 --- a/utils/build-script-utils/Cargo.toml +++ b/utils/build-script-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-build-script-utils" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/utils/fork-tree/Cargo.toml b/utils/fork-tree/Cargo.toml index c18826d16fe..24662dedf48 100644 --- a/utils/fork-tree/Cargo.toml +++ b/utils/fork-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fork-tree" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/utils/frame/benchmarking-cli/Cargo.toml b/utils/frame/benchmarking-cli/Cargo.toml index b02f42d7593..b71cc35ae3d 100644 --- a/utils/frame/benchmarking-cli/Cargo.toml +++ b/utils/frame/benchmarking-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-benchmarking-cli" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,15 +12,15 @@ description = "CLI for benchmarking FRAME" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -frame-benchmarking = { version = "2.0.0-dev", path = "../../../frame/benchmarking" } -sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } -sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } -sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } -sc-client-db = { version = "0.8.0-dev", path = "../../../client/db" } -sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } -sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } -sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +frame-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/benchmarking" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } +sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } +sc-client-db = { version = "0.8.0-alpha.7", path = "../../../client/db" } +sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } +sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } structopt = "0.3.8" codec = { version = "1.3.0", package = "parity-scale-codec" } diff --git a/utils/frame/rpc/support/Cargo.toml b/utils/frame/rpc/support/Cargo.toml index c635471bb93..a6b2209831e 100644 --- a/utils/frame/rpc/support/Cargo.toml +++ b/utils/frame/rpc/support/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-frame-rpc-support" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies ", "Andrew Dirksen "] edition = "2018" license = "GPL-3.0" @@ -17,10 +17,10 @@ jsonrpc-client-transports = { version = "14.0.5", default-features = false, feat jsonrpc-core = "14" codec = { package = "parity-scale-codec", version = "1" } serde = "1" -frame-support = { version = "2.0.0-dev", path = "../../../../frame/support" } -sp-storage = { version = "2.0.0-dev", path = "../../../../primitives/storage" } -sc-rpc-api = { version = "0.8.0-dev", path = "../../../../client/rpc-api" } +frame-support = { version = "2.0.0-alpha.7", path = "../../../../frame/support" } +sp-storage = { version = "2.0.0-alpha.7", path = "../../../../primitives/storage" } +sc-rpc-api = { version = "0.8.0-alpha.7", path = "../../../../client/rpc-api" } [dev-dependencies] -frame-system = { version = "2.0.0-dev", path = "../../../../frame/system" } +frame-system = { version = "2.0.0-alpha.7", path = "../../../../frame/system" } tokio = "0.2" diff --git a/utils/frame/rpc/system/Cargo.toml b/utils/frame/rpc/system/Cargo.toml index 7d57e6b9882..befb5ef5b6b 100644 --- a/utils/frame/rpc/system/Cargo.toml +++ b/utils/frame/rpc/system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-frame-rpc-system" -version = "2.0.0-dev" +version = "2.0.0-alpha.7" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "FRAME's system exposed over Substrate RPC" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-dev", path = "../../../../client/api" } +sc-client-api = { version = "2.0.0-alpha.7", path = "../../../../client/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = { version = "0.3.4", features = ["compat"] } jsonrpc-core = "14.0.3" @@ -20,14 +20,14 @@ jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" log = "0.4.8" serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-dev", path = "../../../../primitives/runtime" } -sp-api = { version = "2.0.0-dev", path = "../../../../primitives/api" } -frame-system-rpc-runtime-api = { version = "2.0.0-dev", path = "../../../../frame/system/rpc/runtime-api" } -sp-core = { version = "2.0.0-dev", path = "../../../../primitives/core" } -sp-blockchain = { version = "2.0.0-dev", path = "../../../../primitives/blockchain" } -sp-transaction-pool = { version = "2.0.0-dev", path = "../../../../primitives/transaction-pool" } +sp-runtime = { version = "2.0.0-alpha.7", path = "../../../../primitives/runtime" } +sp-api = { version = "2.0.0-alpha.7", path = "../../../../primitives/api" } +frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", path = "../../../../frame/system/rpc/runtime-api" } +sp-core = { version = "2.0.0-alpha.7", path = "../../../../primitives/core" } +sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../../primitives/blockchain" } +sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../../primitives/transaction-pool" } [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../../test-utils/runtime/client" } env_logger = "0.7.0" -sc-transaction-pool = { version = "2.0.0-dev", path = "../../../../client/transaction-pool" } +sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../../client/transaction-pool" } diff --git a/utils/prometheus/Cargo.toml b/utils/prometheus/Cargo.toml index 0b465409031..4eba264feb6 100644 --- a/utils/prometheus/Cargo.toml +++ b/utils/prometheus/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Endpoint to expose Prometheus metrics" name = "substrate-prometheus-endpoint" -version = "0.8.0-dev" +version = "0.8.0-alpha.7" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" -- GitLab From 83a6f1add7957160283ac5d7e627da06beb725d9 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 5 May 2020 20:52:10 +0200 Subject: [PATCH 140/167] Add Changelog --- docs/CHANGELOG.md | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index b0b9ca9f6c6..31e489ffe5d 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -6,9 +6,52 @@ The format is based on [Keep a Changelog]. ## Unreleased +## 2.0.0-alpha.6 -> 2.0.0-alpha.7 -## 2.0.0-alpha.5 -> 2.0.0-alpha.6 +Runtime +------- + +* Use `storage::append` in the implementation of the storage types (#5889) +* pallet-sudo: Store `DispatchResult` in `Sudid` event (#5804) +* Enable Offchain Equalise (#5683) +* Add support for custom runtime upgrade logic (#5782) +* Require `fn` token in `decl_storage` `get` (#5717) +* Child trie api changes BREAKING (#4857) +* Pass max-total to RewardRemainder on end_era (#5697) +* Transaction versioning in the RuntimeVersion (#5582) +* emit TipClosed event on success tip payout (#5656) + +Client +------ +* Adds `export-state` subcommand (#5842) +* Drop ClientProvider (#5823) +* Move spawning tasks from thread pools to Service's TaskManager for block importing (#5647) +* Reputation penalty for sending empty block response (#5814) +* Move sc-client into sc-service (#5502) +* Use new block requests protocol (#5760) +* Fix leak in stream notifications (#5739) +* network: Only insert global addresses into the DHT. (#5735) +* enum Pays for PaysFee (#5733) +* Migrate away from `SimpleDispatchInfo` (#5686) +* Child trie api changes BREAKING (#4857) +* subkey: compute and inspect a moduleid (#5676) +* Listen on ipv6 by default as well (#5677) +* Adjustments to Kademlia-related metrics (#5660) +* client/authority-discovery: Allow to be run by sentry node (#5568) +* Add alternative RPC methods to system_networkState (#5643) +* Several tweaks to networking Prometheus metrics (#5636) +* Use a Kademlia instance per `ProtocolId`. (#5045) +* Report tasks metrics to Prometheus (#5619) + +API +--- + +* Child trie api changes BREAKING (#4857) +* Pass max-total to RewardRemainder on end_era (#5697) +* Implement iter for doublemap (#5504) + +## 2.0.0-alpha.5 -> 2.0.0-alpha.6 Runtime ------- -- GitLab From 7217ab64596e7f5a876546a46d2499915bf645b2 Mon Sep 17 00:00:00 2001 From: Benjamin Kampmann Date: Tue, 5 May 2020 23:08:31 +0200 Subject: [PATCH 141/167] post release dev reset (#5911) --- Cargo.lock | 324 +++++++++--------- bin/node-template/node/Cargo.toml | 40 +-- bin/node-template/pallets/template/Cargo.toml | 12 +- bin/node-template/runtime/Cargo.toml | 48 +-- bin/node/bench/Cargo.toml | 18 +- bin/node/browser-testing/Cargo.toml | 6 +- bin/node/cli/Cargo.toml | 114 +++--- bin/node/executor/Cargo.toml | 48 +-- bin/node/inspect/Cargo.toml | 14 +- bin/node/primitives/Cargo.toml | 8 +- bin/node/rpc-client/Cargo.toml | 6 +- bin/node/rpc/Cargo.toml | 38 +- bin/node/runtime/Cargo.toml | 112 +++--- bin/node/testing/Cargo.toml | 66 ++-- bin/utils/chain-spec-builder/Cargo.toml | 10 +- bin/utils/subkey/Cargo.toml | 18 +- client/api/Cargo.toml | 40 +-- client/authority-discovery/Cargo.toml | 22 +- client/basic-authorship/Cargo.toml | 24 +- client/block-builder/Cargo.toml | 20 +- client/chain-spec/Cargo.toml | 14 +- client/chain-spec/derive/Cargo.toml | 2 +- client/cli/Cargo.toml | 32 +- client/consensus/aura/Cargo.toml | 44 +-- client/consensus/babe/Cargo.toml | 52 +-- client/consensus/babe/rpc/Cargo.toml | 24 +- client/consensus/common/Cargo.toml | 10 +- client/consensus/epochs/Cargo.toml | 10 +- client/consensus/manual-seal/Cargo.toml | 20 +- client/consensus/pow/Cargo.toml | 22 +- client/consensus/slots/Cargo.toml | 20 +- client/consensus/uncles/Cargo.toml | 14 +- client/db/Cargo.toml | 26 +- client/executor/Cargo.toml | 32 +- client/executor/common/Cargo.toml | 12 +- client/executor/runtime-test/Cargo.toml | 12 +- client/executor/wasmi/Cargo.toml | 12 +- client/executor/wasmtime/Cargo.toml | 12 +- client/finality-grandpa/Cargo.toml | 50 +-- client/finality-grandpa/rpc/Cargo.toml | 6 +- client/informant/Cargo.toml | 12 +- client/keystore/Cargo.toml | 6 +- client/network-gossip/Cargo.toml | 8 +- client/network/Cargo.toml | 26 +- client/network/test/Cargo.toml | 20 +- client/offchain/Cargo.toml | 24 +- client/peerset/Cargo.toml | 4 +- client/rpc-api/Cargo.toml | 14 +- client/rpc-servers/Cargo.toml | 4 +- client/rpc/Cargo.toml | 42 +-- client/service/Cargo.toml | 66 ++-- client/service/test/Cargo.toml | 34 +- client/state-db/Cargo.toml | 6 +- client/telemetry/Cargo.toml | 2 +- client/tracing/Cargo.toml | 4 +- client/transaction-pool/Cargo.toml | 24 +- client/transaction-pool/graph/Cargo.toml | 12 +- frame/assets/Cargo.toml | 14 +- frame/aura/Cargo.toml | 26 +- frame/authority-discovery/Cargo.toml | 22 +- frame/authorship/Cargo.toml | 18 +- frame/babe/Cargo.toml | 30 +- frame/balances/Cargo.toml | 18 +- frame/benchmark/Cargo.toml | 14 +- frame/benchmarking/Cargo.toml | 16 +- frame/collective/Cargo.toml | 18 +- frame/contracts/Cargo.toml | 26 +- frame/contracts/common/Cargo.toml | 6 +- frame/contracts/rpc/Cargo.toml | 16 +- frame/contracts/rpc/runtime-api/Cargo.toml | 10 +- frame/democracy/Cargo.toml | 22 +- frame/elections-phragmen/Cargo.toml | 22 +- frame/elections/Cargo.toml | 16 +- frame/evm/Cargo.toml | 18 +- frame/example-offchain-worker/Cargo.toml | 14 +- frame/example/Cargo.toml | 18 +- frame/executive/Cargo.toml | 26 +- frame/finality-tracker/Cargo.toml | 18 +- frame/generic-asset/Cargo.toml | 14 +- frame/grandpa/Cargo.toml | 22 +- frame/identity/Cargo.toml | 18 +- frame/im-online/Cargo.toml | 24 +- frame/indices/Cargo.toml | 18 +- frame/membership/Cargo.toml | 14 +- frame/metadata/Cargo.toml | 6 +- frame/nicks/Cargo.toml | 16 +- frame/offences/Cargo.toml | 18 +- frame/offences/benchmarking/Cargo.toml | 24 +- frame/randomness-collective-flip/Cargo.toml | 14 +- frame/recovery/Cargo.toml | 16 +- frame/scheduler/Cargo.toml | 16 +- frame/scored-pool/Cargo.toml | 16 +- frame/session/Cargo.toml | 22 +- frame/session/benchmarking/Cargo.toml | 26 +- frame/society/Cargo.toml | 16 +- frame/staking/Cargo.toml | 42 +-- frame/staking/fuzzer/Cargo.toml | 26 +- frame/staking/reward-curve/Cargo.toml | 4 +- frame/sudo/Cargo.toml | 14 +- frame/support/Cargo.toml | 24 +- frame/support/procedural/Cargo.toml | 4 +- frame/support/procedural/tools/Cargo.toml | 4 +- .../procedural/tools/derive/Cargo.toml | 2 +- frame/support/test/Cargo.toml | 12 +- frame/system/Cargo.toml | 16 +- frame/system/benchmarking/Cargo.toml | 16 +- frame/system/rpc/runtime-api/Cargo.toml | 4 +- frame/timestamp/Cargo.toml | 22 +- frame/transaction-payment/Cargo.toml | 20 +- frame/transaction-payment/rpc/Cargo.toml | 14 +- .../rpc/runtime-api/Cargo.toml | 10 +- frame/treasury/Cargo.toml | 18 +- frame/utility/Cargo.toml | 20 +- frame/vesting/Cargo.toml | 20 +- primitives/allocator/Cargo.toml | 8 +- primitives/api/Cargo.toml | 14 +- primitives/api/proc-macro/Cargo.toml | 2 +- primitives/api/test/Cargo.toml | 16 +- primitives/application-crypto/Cargo.toml | 8 +- primitives/application-crypto/test/Cargo.toml | 8 +- primitives/arithmetic/Cargo.toml | 6 +- primitives/arithmetic/fuzzer/Cargo.toml | 2 +- primitives/authority-discovery/Cargo.toml | 10 +- primitives/authorship/Cargo.toml | 8 +- primitives/block-builder/Cargo.toml | 10 +- primitives/blockchain/Cargo.toml | 10 +- primitives/chain-spec/Cargo.toml | 2 +- primitives/consensus/aura/Cargo.toml | 14 +- primitives/consensus/babe/Cargo.toml | 18 +- primitives/consensus/common/Cargo.toml | 16 +- primitives/consensus/pow/Cargo.toml | 10 +- primitives/consensus/vrf/Cargo.toml | 8 +- primitives/core/Cargo.toml | 14 +- primitives/database/Cargo.toml | 2 +- primitives/debug-derive/Cargo.toml | 2 +- primitives/externalities/Cargo.toml | 6 +- primitives/finality-grandpa/Cargo.toml | 10 +- primitives/finality-tracker/Cargo.toml | 6 +- primitives/inherents/Cargo.toml | 6 +- primitives/io/Cargo.toml | 16 +- primitives/keyring/Cargo.toml | 6 +- primitives/offchain/Cargo.toml | 10 +- primitives/panic-handler/Cargo.toml | 2 +- primitives/phragmen/Cargo.toml | 14 +- primitives/phragmen/compact/Cargo.toml | 2 +- primitives/phragmen/fuzzer/Cargo.toml | 6 +- primitives/rpc/Cargo.toml | 4 +- primitives/runtime-interface/Cargo.toml | 18 +- .../runtime-interface/proc-macro/Cargo.toml | 2 +- .../test-wasm-deprecated/Cargo.toml | 8 +- .../runtime-interface/test-wasm/Cargo.toml | 8 +- primitives/runtime-interface/test/Cargo.toml | 12 +- primitives/runtime/Cargo.toml | 16 +- primitives/sandbox/Cargo.toml | 10 +- primitives/serializer/Cargo.toml | 2 +- primitives/session/Cargo.toml | 10 +- primitives/staking/Cargo.toml | 6 +- primitives/state-machine/Cargo.toml | 12 +- primitives/std/Cargo.toml | 2 +- primitives/storage/Cargo.toml | 6 +- primitives/test-primitives/Cargo.toml | 6 +- primitives/timestamp/Cargo.toml | 10 +- primitives/tracing/Cargo.toml | 2 +- primitives/transaction-pool/Cargo.toml | 8 +- primitives/trie/Cargo.toml | 8 +- primitives/utils/Cargo.toml | 2 +- primitives/version/Cargo.toml | 6 +- primitives/wasm-interface/Cargo.toml | 4 +- test-utils/Cargo.toml | 2 +- test-utils/client/Cargo.toml | 22 +- test-utils/runtime/Cargo.toml | 54 +-- test-utils/runtime/client/Cargo.toml | 18 +- .../runtime/transaction-pool/Cargo.toml | 8 +- utils/browser/Cargo.toml | 12 +- utils/build-script-utils/Cargo.toml | 2 +- utils/fork-tree/Cargo.toml | 2 +- utils/frame/benchmarking-cli/Cargo.toml | 20 +- utils/frame/rpc/support/Cargo.toml | 10 +- utils/frame/rpc/system/Cargo.toml | 18 +- utils/prometheus/Cargo.toml | 2 +- 180 files changed, 1653 insertions(+), 1653 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ca9b54f89c..5edf5e1ceea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -586,7 +586,7 @@ dependencies = [ [[package]] name = "chain-spec-builder" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "ansi_term 0.12.1", "node-cli", @@ -1405,14 +1405,14 @@ checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] name = "fork-tree" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", ] [[package]] name = "frame-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -1428,7 +1428,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "parity-scale-codec", @@ -1445,7 +1445,7 @@ dependencies = [ [[package]] name = "frame-executive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -1465,7 +1465,7 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "11.0.0-alpha.7" +version = "11.0.0-dev" dependencies = [ "parity-scale-codec", "serde", @@ -1475,7 +1475,7 @@ dependencies = [ [[package]] name = "frame-support" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "bitmask", "frame-metadata", @@ -1500,7 +1500,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support-procedural-tools", "proc-macro2", @@ -1510,7 +1510,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate", @@ -1521,7 +1521,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -1547,7 +1547,7 @@ dependencies = [ [[package]] name = "frame-system" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "criterion 0.2.11", "frame-support", @@ -1565,7 +1565,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -1580,7 +1580,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-api", @@ -3375,7 +3375,7 @@ dependencies = [ [[package]] name = "node-bench" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "fs_extra", @@ -3404,7 +3404,7 @@ dependencies = [ [[package]] name = "node-browser-testing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -3421,7 +3421,7 @@ dependencies = [ [[package]] name = "node-cli" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "assert_cmd", "frame-benchmarking-cli", @@ -3494,7 +3494,7 @@ dependencies = [ [[package]] name = "node-executor" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "criterion 0.3.1", "frame-benchmarking", @@ -3528,7 +3528,7 @@ dependencies = [ [[package]] name = "node-inspect" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "log", @@ -3544,7 +3544,7 @@ dependencies = [ [[package]] name = "node-primitives" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "pretty_assertions", "sp-core", @@ -3554,7 +3554,7 @@ dependencies = [ [[package]] name = "node-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "jsonrpc-core", "node-primitives", @@ -3579,7 +3579,7 @@ dependencies = [ [[package]] name = "node-rpc-client" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "env_logger 0.7.1", "futures 0.1.29", @@ -3592,7 +3592,7 @@ dependencies = [ [[package]] name = "node-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-executive", @@ -3657,7 +3657,7 @@ dependencies = [ [[package]] name = "node-template" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "futures 0.3.4", "log", @@ -3686,7 +3686,7 @@ dependencies = [ [[package]] name = "node-template-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-executive", "frame-support", @@ -3718,7 +3718,7 @@ dependencies = [ [[package]] name = "node-testing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "criterion 0.3.1", "frame-support", @@ -3933,7 +3933,7 @@ dependencies = [ [[package]] name = "pallet-assets" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -3947,7 +3947,7 @@ dependencies = [ [[package]] name = "pallet-aura" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -3969,7 +3969,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -3987,7 +3987,7 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4003,7 +4003,7 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4025,7 +4025,7 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4041,7 +4041,7 @@ dependencies = [ [[package]] name = "pallet-benchmark" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4055,7 +4055,7 @@ dependencies = [ [[package]] name = "pallet-collective" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4072,7 +4072,7 @@ dependencies = [ [[package]] name = "pallet-contracts" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "assert_matches", "frame-support", @@ -4098,7 +4098,7 @@ dependencies = [ [[package]] name = "pallet-contracts-primitives" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -4107,7 +4107,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4126,7 +4126,7 @@ dependencies = [ [[package]] name = "pallet-contracts-rpc-runtime-api" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "pallet-contracts-primitives", "parity-scale-codec", @@ -4137,7 +4137,7 @@ dependencies = [ [[package]] name = "pallet-democracy" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4156,7 +4156,7 @@ dependencies = [ [[package]] name = "pallet-elections" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4172,7 +4172,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4191,7 +4191,7 @@ dependencies = [ [[package]] name = "pallet-evm" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "evm", "frame-support", @@ -4211,7 +4211,7 @@ dependencies = [ [[package]] name = "pallet-example" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4227,7 +4227,7 @@ dependencies = [ [[package]] name = "pallet-example-offchain-worker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4242,7 +4242,7 @@ dependencies = [ [[package]] name = "pallet-finality-tracker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4259,7 +4259,7 @@ dependencies = [ [[package]] name = "pallet-generic-asset" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4273,7 +4273,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4291,7 +4291,7 @@ dependencies = [ [[package]] name = "pallet-identity" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4308,7 +4308,7 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4327,7 +4327,7 @@ dependencies = [ [[package]] name = "pallet-indices" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4343,7 +4343,7 @@ dependencies = [ [[package]] name = "pallet-membership" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4357,7 +4357,7 @@ dependencies = [ [[package]] name = "pallet-nicks" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4372,7 +4372,7 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4388,7 +4388,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4406,7 +4406,7 @@ dependencies = [ [[package]] name = "pallet-randomness-collective-flip" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4420,7 +4420,7 @@ dependencies = [ [[package]] name = "pallet-recovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "enumflags2", "frame-support", @@ -4436,7 +4436,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4451,7 +4451,7 @@ dependencies = [ [[package]] name = "pallet-scored-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4466,7 +4466,7 @@ dependencies = [ [[package]] name = "pallet-session" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4486,7 +4486,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4506,7 +4506,7 @@ dependencies = [ [[package]] name = "pallet-society" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4522,7 +4522,7 @@ dependencies = [ [[package]] name = "pallet-staking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "env_logger 0.7.1", "frame-benchmarking", @@ -4575,7 +4575,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -4586,7 +4586,7 @@ dependencies = [ [[package]] name = "pallet-sudo" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4600,7 +4600,7 @@ dependencies = [ [[package]] name = "pallet-template" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4612,7 +4612,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4630,7 +4630,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -4646,7 +4646,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -4663,7 +4663,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "parity-scale-codec", @@ -4676,7 +4676,7 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4692,7 +4692,7 @@ dependencies = [ [[package]] name = "pallet-utility" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-benchmarking", "frame-support", @@ -4708,7 +4708,7 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "enumflags2", "frame-benchmarking", @@ -5832,7 +5832,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "bytes 0.5.4", "derive_more", @@ -5862,7 +5862,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -5886,7 +5886,7 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -5903,7 +5903,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "impl-trait-for-tuples", "sc-chain-spec-derive", @@ -5918,7 +5918,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -5928,7 +5928,7 @@ dependencies = [ [[package]] name = "sc-cli" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "ansi_term 0.12.1", "app_dirs", @@ -5970,7 +5970,7 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "fnv", @@ -6008,7 +6008,7 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "blake2-rfc", "env_logger 0.7.1", @@ -6041,7 +6041,7 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "sc-client-api", "sp-blockchain", @@ -6051,7 +6051,7 @@ dependencies = [ [[package]] name = "sc-consensus-aura" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "env_logger 0.7.1", @@ -6088,7 +6088,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "env_logger 0.7.1", @@ -6137,7 +6137,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "futures 0.3.4", @@ -6162,7 +6162,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "fork-tree", "parity-scale-codec", @@ -6174,7 +6174,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "derive_more", @@ -6203,7 +6203,7 @@ dependencies = [ [[package]] name = "sc-consensus-pow" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "futures 0.3.4", @@ -6223,7 +6223,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "futures 0.3.4", "futures-timer 3.0.2", @@ -6244,7 +6244,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "log", "sc-client-api", @@ -6257,7 +6257,7 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "derive_more", @@ -6292,7 +6292,7 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "log", @@ -6308,7 +6308,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "log", "parity-scale-codec", @@ -6322,7 +6322,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "cranelift-codegen", @@ -6343,7 +6343,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "derive_more", @@ -6387,7 +6387,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "finality-grandpa", @@ -6404,7 +6404,7 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "ansi_term 0.12.1", "futures 0.3.4", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "hex", @@ -6435,7 +6435,7 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "async-std", @@ -6494,7 +6494,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "async-std", "futures 0.3.4", @@ -6537,7 +6537,7 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "bytes 0.5.4", "env_logger 0.7.1", @@ -6570,7 +6570,7 @@ dependencies = [ [[package]] name = "sc-peerset" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "futures 0.3.4", "libp2p", @@ -6583,7 +6583,7 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "assert_matches", "futures 0.1.29", @@ -6621,7 +6621,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "futures 0.3.4", @@ -6644,7 +6644,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "jsonrpc-core", "jsonrpc-http-server", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "sc-service" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "exit-future", @@ -6767,7 +6767,7 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "env_logger 0.7.1", "log", @@ -6781,7 +6781,7 @@ dependencies = [ [[package]] name = "sc-telemetry" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "bytes 0.5.4", "futures 0.3.4", @@ -6802,7 +6802,7 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "erased-serde", "log", @@ -6817,7 +6817,7 @@ dependencies = [ [[package]] name = "sc-transaction-graph" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "assert_matches", "criterion 0.3.1", @@ -6840,7 +6840,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "assert_matches", "derive_more", @@ -7209,7 +7209,7 @@ dependencies = [ [[package]] name = "sp-allocator" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "log", @@ -7220,7 +7220,7 @@ dependencies = [ [[package]] name = "sp-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "hash-db", "parity-scale-codec", @@ -7235,7 +7235,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "blake2-rfc", "proc-macro-crate", @@ -7265,7 +7265,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "serde", @@ -7287,7 +7287,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "criterion 0.3.1", "integer-sqrt", @@ -7314,7 +7314,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-api", @@ -7325,7 +7325,7 @@ dependencies = [ [[package]] name = "sp-authorship" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7335,7 +7335,7 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-api", @@ -7346,7 +7346,7 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "log", @@ -7361,7 +7361,7 @@ dependencies = [ [[package]] name = "sp-chain-spec" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "serde", "serde_json", @@ -7369,7 +7369,7 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "derive_more", "futures 0.3.4", @@ -7391,7 +7391,7 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "parity-scale-codec", "sp-api", @@ -7404,7 +7404,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "merlin", "parity-scale-codec", @@ -7420,7 +7420,7 @@ dependencies = [ [[package]] name = "sp-consensus-pow" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "parity-scale-codec", "sp-api", @@ -7431,7 +7431,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -7442,7 +7442,7 @@ dependencies = [ [[package]] name = "sp-core" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "base58", "blake2-rfc", @@ -7487,7 +7487,7 @@ dependencies = [ [[package]] name = "sp-database" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "kvdb", "parking_lot 0.10.2", @@ -7495,7 +7495,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "proc-macro2", "quote 1.0.3", @@ -7504,7 +7504,7 @@ dependencies = [ [[package]] name = "sp-externalities" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "environmental", "parity-scale-codec", @@ -7514,7 +7514,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "serde", @@ -7526,7 +7526,7 @@ dependencies = [ [[package]] name = "sp-finality-tracker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-inherents", @@ -7535,7 +7535,7 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "parity-scale-codec", @@ -7546,7 +7546,7 @@ dependencies = [ [[package]] name = "sp-io" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "futures 0.3.4", "hash-db", @@ -7565,7 +7565,7 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "lazy_static", "sp-core", @@ -7575,7 +7575,7 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "sp-api", "sp-core", @@ -7585,7 +7585,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "backtrace", "log", @@ -7593,7 +7593,7 @@ dependencies = [ [[package]] name = "sp-phragmen" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "rand 0.7.3", @@ -7608,7 +7608,7 @@ dependencies = [ [[package]] name = "sp-phragmen-compact" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -7629,7 +7629,7 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "serde", "serde_json", @@ -7638,7 +7638,7 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "hash256-std-hasher", "impl-trait-for-tuples", @@ -7660,7 +7660,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "primitive-types", @@ -7680,7 +7680,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "Inflector", "proc-macro-crate", @@ -7728,7 +7728,7 @@ dependencies = [ [[package]] name = "sp-sandbox" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "assert_matches", "parity-scale-codec", @@ -7742,7 +7742,7 @@ dependencies = [ [[package]] name = "sp-serializer" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "serde", "serde_json", @@ -7750,7 +7750,7 @@ dependencies = [ [[package]] name = "sp-session" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "sp-api", "sp-core", @@ -7760,7 +7760,7 @@ dependencies = [ [[package]] name = "sp-staking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "parity-scale-codec", "sp-runtime", @@ -7769,7 +7769,7 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "hash-db", "hex-literal", @@ -7789,11 +7789,11 @@ dependencies = [ [[package]] name = "sp-std" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" [[package]] name = "sp-storage" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "impl-serde 0.2.3", "ref-cast", @@ -7816,7 +7816,7 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -7829,14 +7829,14 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "tracing", ] [[package]] name = "sp-transaction-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "derive_more", "futures 0.3.4", @@ -7850,7 +7850,7 @@ dependencies = [ [[package]] name = "sp-trie" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "criterion 0.2.11", "hash-db", @@ -7868,7 +7868,7 @@ dependencies = [ [[package]] name = "sp-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "futures 0.3.4", "futures-core", @@ -7878,7 +7878,7 @@ dependencies = [ [[package]] name = "sp-version" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "impl-serde 0.2.3", "parity-scale-codec", @@ -7889,7 +7889,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8004,7 +8004,7 @@ dependencies = [ [[package]] name = "subkey" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "clap", "derive_more", @@ -8045,7 +8045,7 @@ dependencies = [ [[package]] name = "substrate-browser-utils" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "chrono", "clear_on_drop", @@ -8071,14 +8071,14 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "platforms", ] [[package]] name = "substrate-frame-rpc-support" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "frame-support", "frame-system", @@ -8094,7 +8094,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" dependencies = [ "env_logger 0.7.1", "frame-system-rpc-runtime-api", @@ -8117,7 +8117,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" dependencies = [ "async-std", "derive_more", @@ -8226,7 +8226,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" [[package]] name = "substrate-wasm-builder" diff --git a/bin/node-template/node/Cargo.toml b/bin/node-template/node/Cargo.toml index 323fe07518b..030672ee6ff 100644 --- a/bin/node-template/node/Cargo.toml +++ b/bin/node-template/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-template" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Anonymous"] description = "Substrate Node template" edition = "2018" @@ -21,25 +21,25 @@ log = "0.4.8" structopt = "0.3.8" parking_lot = "0.10.0" -sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } -sc-service = { version = "0.8.0-alpha.7", path = "../../../client/service" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } -sc-network = { version = "0.8.0-alpha.7", path = "../../../client/network" } -sc-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../client/consensus/aura" } -sp-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/aura" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } -sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa" } -sp-finality-grandpa = { version = "2.0.0-alpha.7", path = "../../../primitives/finality-grandpa" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sc-basic-authorship = { path = "../../../client/basic-authorship", version = "0.8.0-alpha.7"} +sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } +sc-service = { version = "0.8.0-dev", path = "../../../client/service" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sc-network = { version = "0.8.0-dev", path = "../../../client/network" } +sc-consensus-aura = { version = "0.8.0-dev", path = "../../../client/consensus/aura" } +sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } +sp-finality-grandpa = { version = "2.0.0-dev", path = "../../../primitives/finality-grandpa" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sc-basic-authorship = { path = "../../../client/basic-authorship", version = "0.8.0-dev"} -node-template-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +node-template-runtime = { version = "2.0.0-dev", path = "../runtime" } [build-dependencies] -substrate-build-script-utils = { version = "2.0.0-alpha.7", path = "../../../utils/build-script-utils" } +substrate-build-script-utils = { version = "2.0.0-dev", path = "../../../utils/build-script-utils" } diff --git a/bin/node-template/pallets/template/Cargo.toml b/bin/node-template/pallets/template/Cargo.toml index 22da6f23153..01484c608cf 100644 --- a/bin/node-template/pallets/template/Cargo.toml +++ b/bin/node-template/pallets/template/Cargo.toml @@ -2,7 +2,7 @@ authors = ['Anonymous'] edition = '2018' name = 'pallet-template' -version = "2.0.0-alpha.7" +version = "2.0.0-dev" license = "Unlicense" homepage = "https://substrate.dev" repository = "https://github.com/paritytech/substrate/" @@ -16,26 +16,26 @@ codec = { package = "parity-scale-codec", version = "1.3.0", default-features = [dependencies.frame-support] default-features = false -version = "2.0.0-alpha.7" +version = "2.0.0-dev" path = "../../../../frame/support" [dependencies.frame-system] default-features = false -version = "2.0.0-alpha.7" +version = "2.0.0-dev" path = "../../../../frame/system" [dev-dependencies.sp-core] default-features = false -version = "2.0.0-alpha.7" +version = "2.0.0-dev" path = "../../../../primitives/core" [dev-dependencies.sp-io] default-features = false -version = "2.0.0-alpha.7" +version = "2.0.0-dev" path = "../../../../primitives/io" [dev-dependencies.sp-runtime] default-features = false -version = "2.0.0-alpha.7" +version = "2.0.0-dev" path = "../../../../primitives/runtime" diff --git a/bin/node-template/runtime/Cargo.toml b/bin/node-template/runtime/Cargo.toml index d71bf9c5757..dfd517130b2 100644 --- a/bin/node-template/runtime/Cargo.toml +++ b/bin/node-template/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-template-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Anonymous"] edition = "2018" license = "Unlicense" @@ -13,31 +13,31 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -aura = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-aura", path = "../../../frame/aura" } -balances = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-balances", path = "../../../frame/balances" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } -grandpa = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-grandpa", path = "../../../frame/grandpa" } -randomness-collective-flip = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-randomness-collective-flip", path = "../../../frame/randomness-collective-flip" } -sudo = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-sudo", path = "../../../frame/sudo" } -system = { version = "2.0.0-alpha.7", default-features = false, package = "frame-system", path = "../../../frame/system" } -timestamp = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-timestamp", path = "../../../frame/timestamp" } -transaction-payment = { version = "2.0.0-alpha.7", default-features = false, package = "pallet-transaction-payment", path = "../../../frame/transaction-payment" } -frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/executive" } +aura = { version = "2.0.0-dev", default-features = false, package = "pallet-aura", path = "../../../frame/aura" } +balances = { version = "2.0.0-dev", default-features = false, package = "pallet-balances", path = "../../../frame/balances" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } +grandpa = { version = "2.0.0-dev", default-features = false, package = "pallet-grandpa", path = "../../../frame/grandpa" } +randomness-collective-flip = { version = "2.0.0-dev", default-features = false, package = "pallet-randomness-collective-flip", path = "../../../frame/randomness-collective-flip" } +sudo = { version = "2.0.0-dev", default-features = false, package = "pallet-sudo", path = "../../../frame/sudo" } +system = { version = "2.0.0-dev", default-features = false, package = "frame-system", path = "../../../frame/system" } +timestamp = { version = "2.0.0-dev", default-features = false, package = "pallet-timestamp", path = "../../../frame/timestamp" } +transaction-payment = { version = "2.0.0-dev", default-features = false, package = "pallet-transaction-payment", path = "../../../frame/transaction-payment" } +frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../../frame/executive" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/api" } -sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-alpha.7"} -sp-consensus-aura = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/consensus/aura" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } -sp-inherents = { path = "../../../primitives/inherents", default-features = false, version = "2.0.0-alpha.7"} -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/io" } -sp-offchain = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/offchain" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/session" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/transaction-pool" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/version" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/api" } +sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-dev"} +sp-consensus-aura = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/consensus/aura" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-inherents = { path = "../../../primitives/inherents", default-features = false, version = "2.0.0-dev"} +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/io" } +sp-offchain = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/offchain" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-session = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/session" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/transaction-pool" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/version" } -template = { version = "2.0.0-alpha.7", default-features = false, path = "../pallets/template", package = "pallet-template" } +template = { version = "2.0.0-dev", default-features = false, path = "../pallets/template", package = "pallet-template" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/bin/node/bench/Cargo.toml b/bin/node/bench/Cargo.toml index a04d6ba00fd..809600b99f4 100644 --- a/bin/node/bench/Cargo.toml +++ b/bin/node/bench/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-bench" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Substrate node integration benchmarks." edition = "2018" @@ -10,20 +10,20 @@ license = "GPL-3.0" [dependencies] log = "0.4.8" -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -node-testing = { version = "2.0.0-alpha.7", path = "../testing" } -sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api/" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +node-testing = { version = "2.0.0-dev", path = "../testing" } +sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } serde = "1.0.101" serde_json = "1.0.41" structopt = "0.3" derive_more = "0.99.2" kvdb = "0.5" kvdb-rocksdb = "0.7" -sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } hash-db = "0.15.2" tempfile = "3.1.0" fs_extra = "1" diff --git a/bin/node/browser-testing/Cargo.toml b/bin/node/browser-testing/Cargo.toml index 8be918708dc..391f2fa2267 100644 --- a/bin/node/browser-testing/Cargo.toml +++ b/bin/node/browser-testing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-browser-testing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Tests for the in-browser light client." edition = "2018" @@ -17,5 +17,5 @@ wasm-bindgen-futures = "0.4.10" wasm-bindgen-test = "0.3.10" futures = "0.3.4" -node-cli = { path = "../cli", default-features = false, features = ["browser"] , version = "2.0.0-alpha.7"} -sc-rpc-api = { path = "../../../client/rpc-api" , version = "0.8.0-alpha.7"} +node-cli = { path = "../cli", default-features = false, features = ["browser"] , version = "2.0.0-dev"} +sc-rpc-api = { path = "../../../client/rpc-api" , version = "0.8.0-dev"} diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml index eabf2e48e34..5b23a989cd0 100644 --- a/bin/node/cli/Cargo.toml +++ b/bin/node/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-cli" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Generic Substrate node implementation in Rust." build = "build.rs" @@ -46,74 +46,74 @@ tracing = "0.1.10" parking_lot = "0.10.0" # primitives -sp-authority-discovery = { version = "2.0.0-alpha.7", path = "../../../primitives/authority-discovery" } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } -grandpa-primitives = { version = "2.0.0-alpha.7", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/timestamp" } -sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/finality-tracker" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sp-authority-discovery = { version = "2.0.0-dev", path = "../../../primitives/authority-discovery" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } +grandpa-primitives = { version = "2.0.0-dev", package = "sp-finality-grandpa", path = "../../../primitives/finality-grandpa" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/timestamp" } +sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/finality-tracker" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } # client dependencies -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } -sc-chain-spec = { version = "2.0.0-alpha.7", path = "../../../client/chain-spec" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool" } -sc-network = { version = "0.8.0-alpha.7", path = "../../../client/network" } -sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe" } -grandpa = { version = "0.8.0-alpha.7", package = "sc-finality-grandpa", path = "../../../client/finality-grandpa" } -sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/db" } -sc-offchain = { version = "2.0.0-alpha.7", path = "../../../client/offchain" } -sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } -sc-basic-authorship = { version = "0.8.0-alpha.7", path = "../../../client/basic-authorship" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } -sc-tracing = { version = "2.0.0-alpha.7", path = "../../../client/tracing" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../../../client/telemetry" } -sc-authority-discovery = { version = "0.8.0-alpha.7", path = "../../../client/authority-discovery" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } +sc-chain-spec = { version = "2.0.0-dev", path = "../../../client/chain-spec" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../../../client/transaction-pool" } +sc-network = { version = "0.8.0-dev", path = "../../../client/network" } +sc-consensus-babe = { version = "0.8.0-dev", path = "../../../client/consensus/babe" } +grandpa = { version = "0.8.0-dev", package = "sc-finality-grandpa", path = "../../../client/finality-grandpa" } +sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../../../client/db" } +sc-offchain = { version = "2.0.0-dev", path = "../../../client/offchain" } +sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } +sc-basic-authorship = { version = "0.8.0-dev", path = "../../../client/basic-authorship" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } +sc-tracing = { version = "2.0.0-dev", path = "../../../client/tracing" } +sc-telemetry = { version = "2.0.0-dev", path = "../../../client/telemetry" } +sc-authority-discovery = { version = "0.8.0-dev", path = "../../../client/authority-discovery" } # frame dependencies -pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/timestamp" } -pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } -frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } -pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/im-online" } -pallet-authority-discovery = { version = "2.0.0-alpha.7", path = "../../../frame/authority-discovery" } -pallet-staking = { version = "2.0.0-alpha.7", path = "../../../frame/staking" } +pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../frame/timestamp" } +pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } +frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } +pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } +pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../../frame/im-online" } +pallet-authority-discovery = { version = "2.0.0-dev", path = "../../../frame/authority-discovery" } +pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } # node-specific dependencies -node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } -node-rpc = { version = "2.0.0-alpha.7", path = "../rpc" } -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -node-executor = { version = "2.0.0-alpha.7", path = "../executor" } +node-runtime = { version = "2.0.0-dev", path = "../runtime" } +node-rpc = { version = "2.0.0-dev", path = "../rpc" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +node-executor = { version = "2.0.0-dev", path = "../executor" } # CLI-specific dependencies -sc-cli = { version = "0.8.0-alpha.7", optional = true, path = "../../../client/cli" } -frame-benchmarking-cli = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/frame/benchmarking-cli" } -node-inspect = { version = "0.8.0-alpha.7", optional = true, path = "../inspect" } +sc-cli = { version = "0.8.0-dev", optional = true, path = "../../../client/cli" } +frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } +node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } # WASM-specific dependencies wasm-bindgen = { version = "0.2.57", optional = true } wasm-bindgen-futures = { version = "0.4.7", optional = true } -browser-utils = { package = "substrate-browser-utils", path = "../../../utils/browser", optional = true, version = "0.8.0-alpha.7"} +browser-utils = { package = "substrate-browser-utils", path = "../../../utils/browser", optional = true, version = "0.8.0-dev"} [target.'cfg(target_arch="x86_64")'.dependencies] -node-executor = { version = "2.0.0-alpha.7", path = "../executor", features = [ "wasmtime" ] } -sc-cli = { version = "0.8.0-alpha.7", optional = true, path = "../../../client/cli", features = [ "wasmtime" ] } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service", features = [ "wasmtime" ] } +node-executor = { version = "2.0.0-dev", path = "../executor", features = [ "wasmtime" ] } +sc-cli = { version = "0.8.0-dev", optional = true, path = "../../../client/cli", features = [ "wasmtime" ] } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service", features = [ "wasmtime" ] } [dev-dependencies] -sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } -sc-consensus-babe = { version = "0.8.0-alpha.7", features = ["test-helpers"], path = "../../../client/consensus/babe" } -sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../../client/consensus/epochs" } +sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-consensus-babe = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../../client/consensus/babe" } +sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } sc-service-test = { version = "2.0.0-dev", path = "../../../client/service/test" } futures = "0.3.4" tempfile = "3.1.0" @@ -125,12 +125,12 @@ platforms = "0.2.1" [build-dependencies] structopt = { version = "0.3.8", optional = true } -node-inspect = { version = "0.8.0-alpha.7", optional = true, path = "../inspect" } -frame-benchmarking-cli = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/frame/benchmarking-cli" } -substrate-build-script-utils = { version = "2.0.0-alpha.7", optional = true, path = "../../../utils/build-script-utils" } +node-inspect = { version = "0.8.0-dev", optional = true, path = "../inspect" } +frame-benchmarking-cli = { version = "2.0.0-dev", optional = true, path = "../../../utils/frame/benchmarking-cli" } +substrate-build-script-utils = { version = "2.0.0-dev", optional = true, path = "../../../utils/build-script-utils" } [build-dependencies.sc-cli] -version = "0.8.0-alpha.7" +version = "0.8.0-dev" package = "sc-cli" path = "../../../client/cli" optional = true diff --git a/bin/node/executor/Cargo.toml b/bin/node/executor/Cargo.toml index dde1830837d..99bd83bb4a2 100644 --- a/bin/node/executor/Cargo.toml +++ b/bin/node/executor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-executor" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Substrate node implementation in Rust." edition = "2018" @@ -13,33 +13,33 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0" } -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +node-runtime = { version = "2.0.0-dev", path = "../runtime" } +sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } trie-root = "0.16.0" -frame-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/benchmarking" } +frame-benchmarking = { version = "2.0.0-dev", path = "../../../frame/benchmarking" } [dev-dependencies] criterion = "0.3.0" -frame-support = { version = "2.0.0-alpha.7", path = "../../../frame/support" } -frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } -node-testing = { version = "2.0.0-alpha.7", path = "../testing" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } -pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } -pallet-grandpa = { version = "2.0.0-alpha.7", path = "../../../frame/grandpa" } -pallet-im-online = { version = "2.0.0-alpha.7", path = "../../../frame/im-online" } -pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } -pallet-session = { version = "2.0.0-alpha.7", path = "../../../frame/session" } -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../../frame/timestamp" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } -pallet-treasury = { version = "2.0.0-alpha.7", path = "../../../frame/treasury" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } +frame-support = { version = "2.0.0-dev", path = "../../../frame/support" } +frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } +node-testing = { version = "2.0.0-dev", path = "../testing" } +pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } +pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } +pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } +pallet-im-online = { version = "2.0.0-dev", path = "../../../frame/im-online" } +pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } +pallet-session = { version = "2.0.0-dev", path = "../../../frame/session" } +pallet-timestamp = { version = "2.0.0-dev", path = "../../../frame/timestamp" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } +pallet-treasury = { version = "2.0.0-dev", path = "../../../frame/treasury" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } substrate-test-client = { version = "2.0.0-dev", path = "../../../test-utils/client" } wabt = "0.9.2" diff --git a/bin/node/inspect/Cargo.toml b/bin/node/inspect/Cargo.toml index a723a3e829b..03d3a94b627 100644 --- a/bin/node/inspect/Cargo.toml +++ b/bin/node/inspect/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-inspect" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,10 +14,10 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.3.0" } derive_more = "0.99" log = "0.4.8" -sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } structopt = "0.3.8" diff --git a/bin/node/primitives/Cargo.toml b/bin/node/primitives/Cargo.toml index 41dbf58e703..11959bde75c 100644 --- a/bin/node/primitives/Cargo.toml +++ b/bin/node/primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-primitives" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -11,11 +11,11 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } [dev-dependencies] -sp-serializer = { version = "2.0.0-alpha.7", path = "../../../primitives/serializer" } +sp-serializer = { version = "2.0.0-dev", path = "../../../primitives/serializer" } pretty_assertions = "0.6.1" [features] diff --git a/bin/node/rpc-client/Cargo.toml b/bin/node/rpc-client/Cargo.toml index 1af16ce335b..1df3590d1fe 100644 --- a/bin/node/rpc-client/Cargo.toml +++ b/bin/node/rpc-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-rpc-client" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,5 +16,5 @@ futures = "0.1.29" hyper = "0.12.35" jsonrpc-core-client = { version = "14.0.5", default-features = false, features = ["http"] } log = "0.4.8" -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } diff --git a/bin/node/rpc/Cargo.toml b/bin/node/rpc/Cargo.toml index 76965e6e1a3..f0c5fc250b0 100644 --- a/bin/node/rpc/Cargo.toml +++ b/bin/node/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -11,22 +11,22 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } jsonrpc-core = "14.0.3" -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -pallet-contracts-rpc = { version = "0.8.0-alpha.7", path = "../../../frame/contracts/rpc/" } -pallet-transaction-payment-rpc = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment/rpc/" } -substrate-frame-rpc-system = { version = "2.0.0-alpha.7", path = "../../../utils/frame/rpc/system" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } -sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe" } -sc-consensus-babe-rpc = { version = "0.8.0-alpha.7", path = "../../../client/consensus/babe/rpc" } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } -sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../../client/consensus/epochs" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa" } -sc-finality-grandpa-rpc = { version = "0.8.0-alpha.7", path = "../../../client/finality-grandpa/rpc" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +node-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +pallet-contracts-rpc = { version = "0.8.0-dev", path = "../../../frame/contracts/rpc/" } +pallet-transaction-payment-rpc = { version = "2.0.0-dev", path = "../../../frame/transaction-payment/rpc/" } +substrate-frame-rpc-system = { version = "2.0.0-dev", path = "../../../utils/frame/rpc/system" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sc-consensus-babe = { version = "0.8.0-dev", path = "../../../client/consensus/babe" } +sc-consensus-babe-rpc = { version = "0.8.0-dev", path = "../../../client/consensus/babe/rpc" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } +sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } +sc-consensus-epochs = { version = "0.8.0-dev", path = "../../../client/consensus/epochs" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sc-finality-grandpa = { version = "0.8.0-dev", path = "../../../client/finality-grandpa" } +sc-finality-grandpa-rpc = { version = "0.8.0-dev", path = "../../../client/finality-grandpa/rpc" } diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index 35a4e8395d5..9e39d9d24e1 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -19,68 +19,68 @@ integer-sqrt = { version = "0.1.2" } serde = { version = "1.0.102", optional = true } # primitives -sp-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/authority-discovery" } -sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/consensus/babe" } -sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-alpha.7"} -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/inherents" } -node-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../primitives" } -sp-offchain = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/offchain" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/staking" } -sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../../primitives/keyring" } -sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/session" } -sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/transaction-pool" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/version" } +sp-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/authority-discovery" } +sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/consensus/babe" } +sp-block-builder = { path = "../../../primitives/block-builder", default-features = false, version = "2.0.0-dev"} +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/inherents" } +node-primitives = { version = "2.0.0-dev", default-features = false, path = "../primitives" } +sp-offchain = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/offchain" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } +sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../../primitives/keyring" } +sp-session = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/session" } +sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/transaction-pool" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/version" } # frame dependencies -frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/executive" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system" } -frame-system-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system/benchmarking", optional = true } -frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/system/rpc/runtime-api/" } -pallet-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/authority-discovery" } -pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/authorship" } -pallet-babe = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/babe" } -pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/balances" } -pallet-collective = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/collective" } -pallet-contracts = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/contracts" } -pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/contracts/common/" } -pallet-contracts-rpc-runtime-api = { version = "0.8.0-alpha.7", default-features = false, path = "../../../frame/contracts/rpc/runtime-api/" } -pallet-democracy = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/democracy" } -pallet-elections-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/elections-phragmen" } -pallet-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/finality-tracker" } -pallet-grandpa = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/grandpa" } -pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/im-online" } -pallet-indices = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/indices" } -pallet-identity = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/identity" } -pallet-membership = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/membership" } -pallet-offences = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/offences" } -pallet-offences-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/offences/benchmarking", default-features = false, optional = true } -pallet-randomness-collective-flip = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/randomness-collective-flip" } -pallet-recovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/recovery" } -pallet-session = { version = "2.0.0-alpha.7", features = ["historical"], path = "../../../frame/session", default-features = false } -pallet-session-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/session/benchmarking", default-features = false, optional = true } -pallet-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/staking" } -pallet-staking-reward-curve = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/staking/reward-curve" } -pallet-scheduler = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/scheduler" } -pallet-society = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/society" } -pallet-sudo = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/sudo" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/timestamp" } -pallet-treasury = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/treasury" } -pallet-utility = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/utility" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/transaction-payment" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/transaction-payment/rpc/runtime-api/" } -pallet-vesting = { version = "2.0.0-alpha.7", default-features = false, path = "../../../frame/vesting" } +frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../../frame/executive" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system" } +frame-system-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/benchmarking", optional = true } +frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system/rpc/runtime-api/" } +pallet-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authority-discovery" } +pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../../../frame/authorship" } +pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../../frame/babe" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../../../frame/balances" } +pallet-collective = { version = "2.0.0-dev", default-features = false, path = "../../../frame/collective" } +pallet-contracts = { version = "2.0.0-dev", default-features = false, path = "../../../frame/contracts" } +pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "../../../frame/contracts/common/" } +pallet-contracts-rpc-runtime-api = { version = "0.8.0-dev", default-features = false, path = "../../../frame/contracts/rpc/runtime-api/" } +pallet-democracy = { version = "2.0.0-dev", default-features = false, path = "../../../frame/democracy" } +pallet-elections-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../../frame/elections-phragmen" } +pallet-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../frame/finality-tracker" } +pallet-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../../frame/grandpa" } +pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../../frame/im-online" } +pallet-indices = { version = "2.0.0-dev", default-features = false, path = "../../../frame/indices" } +pallet-identity = { version = "2.0.0-dev", default-features = false, path = "../../../frame/identity" } +pallet-membership = { version = "2.0.0-dev", default-features = false, path = "../../../frame/membership" } +pallet-offences = { version = "2.0.0-dev", default-features = false, path = "../../../frame/offences" } +pallet-offences-benchmarking = { version = "2.0.0-dev", path = "../../../frame/offences/benchmarking", default-features = false, optional = true } +pallet-randomness-collective-flip = { version = "2.0.0-dev", default-features = false, path = "../../../frame/randomness-collective-flip" } +pallet-recovery = { version = "2.0.0-dev", default-features = false, path = "../../../frame/recovery" } +pallet-session = { version = "2.0.0-dev", features = ["historical"], path = "../../../frame/session", default-features = false } +pallet-session-benchmarking = { version = "2.0.0-dev", path = "../../../frame/session/benchmarking", default-features = false, optional = true } +pallet-staking = { version = "2.0.0-dev", default-features = false, path = "../../../frame/staking" } +pallet-staking-reward-curve = { version = "2.0.0-dev", default-features = false, path = "../../../frame/staking/reward-curve" } +pallet-scheduler = { version = "2.0.0-dev", default-features = false, path = "../../../frame/scheduler" } +pallet-society = { version = "2.0.0-dev", default-features = false, path = "../../../frame/society" } +pallet-sudo = { version = "2.0.0-dev", default-features = false, path = "../../../frame/sudo" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../frame/timestamp" } +pallet-treasury = { version = "2.0.0-dev", default-features = false, path = "../../../frame/treasury" } +pallet-utility = { version = "2.0.0-dev", default-features = false, path = "../../../frame/utility" } +pallet-transaction-payment = { version = "2.0.0-dev", default-features = false, path = "../../../frame/transaction-payment" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../../frame/transaction-payment/rpc/runtime-api/" } +pallet-vesting = { version = "2.0.0-dev", default-features = false, path = "../../../frame/vesting" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } [dev-dependencies] -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } [features] default = ["std"] diff --git a/bin/node/testing/Cargo.toml b/bin/node/testing/Cargo.toml index 500fc5d11f4..af375c774de 100644 --- a/bin/node/testing/Cargo.toml +++ b/bin/node/testing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "node-testing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Test utilities for Substrate node." edition = "2018" @@ -13,40 +13,40 @@ publish = true targets = ["x86_64-unknown-linux-gnu"] [dependencies] -pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } -sc-service = { version = "0.8.0-alpha.7", features = ["test-helpers", "db"], path = "../../../client/service" } -sc-client-db = { version = "0.8.0-alpha.7", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api/" } +pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } +sc-service = { version = "0.8.0-dev", features = ["test-helpers", "db"], path = "../../../client/service" } +sc-client-db = { version = "0.8.0-dev", path = "../../../client/db/", features = ["kvdb-rocksdb", "parity-db"] } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api/" } codec = { package = "parity-scale-codec", version = "1.3.0" } -pallet-contracts = { version = "2.0.0-alpha.7", path = "../../../frame/contracts" } -pallet-grandpa = { version = "2.0.0-alpha.7", path = "../../../frame/grandpa" } -pallet-indices = { version = "2.0.0-alpha.7", path = "../../../frame/indices" } -sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } -node-executor = { version = "2.0.0-alpha.7", path = "../executor" } -node-primitives = { version = "2.0.0-alpha.7", path = "../primitives" } -node-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } -frame-support = { version = "2.0.0-alpha.7", path = "../../../frame/support" } -pallet-session = { version = "2.0.0-alpha.7", path = "../../../frame/session" } -pallet-society = { version = "2.0.0-alpha.7", path = "../../../frame/society" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -pallet-staking = { version = "2.0.0-alpha.7", path = "../../../frame/staking" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor", features = ["wasmtime"] } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } +pallet-contracts = { version = "2.0.0-dev", path = "../../../frame/contracts" } +pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } +pallet-indices = { version = "2.0.0-dev", path = "../../../frame/indices" } +sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } +node-executor = { version = "2.0.0-dev", path = "../executor" } +node-primitives = { version = "2.0.0-dev", path = "../primitives" } +node-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +frame-support = { version = "2.0.0-dev", path = "../../../frame/support" } +pallet-session = { version = "2.0.0-dev", path = "../../../frame/session" } +pallet-society = { version = "2.0.0-dev", path = "../../../frame/society" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } +sc-executor = { version = "0.8.0-dev", path = "../../../client/executor", features = ["wasmtime"] } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } substrate-test-client = { version = "2.0.0-dev", path = "../../../test-utils/client" } -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../../frame/timestamp" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } -pallet-treasury = { version = "2.0.0-alpha.7", path = "../../../frame/treasury" } +pallet-timestamp = { version = "2.0.0-dev", path = "../../../frame/timestamp" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } +pallet-treasury = { version = "2.0.0-dev", path = "../../../frame/treasury" } wabt = "0.9.2" -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/finality-tracker" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/timestamp" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/finality-tracker" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/timestamp" } +sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } +sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } log = "0.4.8" tempfile = "3.1.0" fs_extra = "1" @@ -54,4 +54,4 @@ futures = "0.3.1" [dev-dependencies] criterion = "0.3.0" -sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } +sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } diff --git a/bin/utils/chain-spec-builder/Cargo.toml b/bin/utils/chain-spec-builder/Cargo.toml index bdc84bf8726..a6c2b671fe6 100644 --- a/bin/utils/chain-spec-builder/Cargo.toml +++ b/bin/utils/chain-spec-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "chain-spec-builder" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -13,9 +13,9 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] ansi_term = "0.12.1" -sc-keystore = { version = "2.0.0-alpha.7", path = "../../../client/keystore" } -sc-chain-spec = { version = "2.0.0-alpha.7", path = "../../../client/chain-spec" } -node-cli = { version = "2.0.0-alpha.7", path = "../../node/cli" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sc-keystore = { version = "2.0.0-dev", path = "../../../client/keystore" } +sc-chain-spec = { version = "2.0.0-dev", path = "../../../client/chain-spec" } +node-cli = { version = "2.0.0-dev", path = "../../node/cli" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } rand = "0.7.2" structopt = "0.3.8" diff --git a/bin/utils/subkey/Cargo.toml b/bin/utils/subkey/Cargo.toml index ff76f8dd2af..b0c642ec43e 100644 --- a/bin/utils/subkey/Cargo.toml +++ b/bin/utils/subkey/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "subkey" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,10 +12,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.1.29" -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -node-runtime = { version = "2.0.0-alpha.7", path = "../../node/runtime" } -node-primitives = { version = "2.0.0-alpha.7", path = "../../node/primitives" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +node-runtime = { version = "2.0.0-dev", path = "../../node/runtime" } +node-primitives = { version = "2.0.0-dev", path = "../../node/primitives" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } rand = "0.7.2" clap = "2.33.0" tiny-bip39 = "0.7" @@ -23,13 +23,13 @@ substrate-bip39 = "0.4.1" hex = "0.4.0" hex-literal = "0.2.1" codec = { package = "parity-scale-codec", version = "1.3.0" } -frame-system = { version = "2.0.0-alpha.7", path = "../../../frame/system" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../../../frame/balances" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../../../frame/transaction-payment" } +frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } +pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } rpassword = "4.0.1" itertools = "0.8.2" derive_more = { version = "0.99.2" } -sc-rpc = { version = "2.0.0-alpha.7", path = "../../../client/rpc" } +sc-rpc = { version = "2.0.0-dev", path = "../../../client/rpc" } jsonrpc-core-client = { version = "14.0.3", features = ["http"] } hyper = "0.12.35" libp2p = "0.18.1" diff --git a/client/api/Cargo.toml b/client/api/Cargo.toml index d8809098561..a18068b8332 100644 --- a/client/api/Cargo.toml +++ b/client/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-client-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,34 +14,34 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } derive_more = { version = "0.99.2" } -sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } +sc-executor = { version = "0.8.0-dev", path = "../executor" } +sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } fnv = { version = "1.0.6" } futures = { version = "0.3.1" } hash-db = { version = "0.15.2", default-features = false } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } hex-literal = { version = "0.2.1" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } kvdb = "0.5.0" log = { version = "0.4.8" } parking_lot = "0.10.0" lazy_static = "1.4.0" -sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } +sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } +sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } [dev-dependencies] kvdb-memorydb = "0.5.0" diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index ba4149c6368..1a0c3d89afc 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-authority-discovery" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" @@ -23,21 +23,21 @@ futures = "0.3.4" futures-timer = "3.0.1" libp2p = { version = "0.18.1", default-features = false, features = ["secp256k1", "libp2p-websocket"] } log = "0.4.8" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} prost = "0.6.1" rand = "0.7.2" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sc-keystore = { version = "2.0.0-dev", path = "../keystore" } +sc-network = { version = "0.8.0-dev", path = "../network" } serde_json = "1.0.41" -sp-authority-discovery = { version = "2.0.0-alpha.7", path = "../../primitives/authority-discovery" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-authority-discovery = { version = "2.0.0-dev", path = "../../primitives/authority-discovery" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } [dev-dependencies] env_logger = "0.7.0" quickcheck = "0.9.0" -sc-peerset = { version = "2.0.0-alpha.7", path = "../peerset" } +sc-peerset = { version = "2.0.0-dev", path = "../peerset" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client"} diff --git a/client/basic-authorship/Cargo.toml b/client/basic-authorship/Cargo.toml index fd1d6408468..a9ac58ef321 100644 --- a/client/basic-authorship/Cargo.toml +++ b/client/basic-authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-basic-authorship" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,20 +15,20 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4.8" futures = "0.3.4" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../primitives/inherents" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-dev", path = "../../primitives/inherents" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } tokio-executor = { version = "0.2.0-alpha.6", features = ["blocking"] } futures-timer = "3.0.1" [dev-dependencies] -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../client/transaction-pool" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../../client/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } parking_lot = "0.10.0" diff --git a/client/block-builder/Cargo.toml b/client/block-builder/Cargo.toml index f238640bae4..15cc3c13934 100644 --- a/client/block-builder/Cargo.toml +++ b/client/block-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-block-builder" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../primitives/block-builder" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-block-builder = { version = "2.0.0-dev", path = "../../primitives/block-builder" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } [dev-dependencies] substrate-test-runtime-client = { path = "../../test-utils/runtime/client" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } +sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } diff --git a/client/chain-spec/Cargo.toml b/client/chain-spec/Cargo.toml index 8b0b30a35c4..6906b1ecdad 100644 --- a/client/chain-spec/Cargo.toml +++ b/client/chain-spec/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-chain-spec" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,12 +12,12 @@ description = "Substrate chain configurations." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-chain-spec-derive = { version = "2.0.0-alpha.7", path = "./derive" } +sc-chain-spec-derive = { version = "2.0.0-dev", path = "./derive" } impl-trait-for-tuples = "0.1.3" -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-chain-spec = { version = "2.0.0-alpha.7", path = "../../primitives/chain-spec" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-chain-spec = { version = "2.0.0-dev", path = "../../primitives/chain-spec" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } diff --git a/client/chain-spec/derive/Cargo.toml b/client/chain-spec/derive/Cargo.toml index 22f96d489ff..66058b3f729 100644 --- a/client/chain-spec/derive/Cargo.toml +++ b/client/chain-spec/derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-chain-spec-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index ab39436a202..198a9df5b53 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-cli" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Substrate CLI interface." edition = "2018" @@ -26,23 +26,23 @@ tokio = { version = "0.2.9", features = [ "signal", "rt-core", "rt-threaded" ] } futures = "0.3.4" fdlimit = "0.1.4" serde_json = "1.0.41" -sc-informant = { version = "0.8.0-alpha.7", path = "../informant" } -sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../primitives/panic-handler" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../service" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } -substrate-prometheus-endpoint = { path = "../../utils/prometheus" , version = "0.8.0-alpha.7"} -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sc-informant = { version = "0.8.0-dev", path = "../informant" } +sp-panic-handler = { version = "2.0.0-dev", path = "../../primitives/panic-handler" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../service" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +substrate-prometheus-endpoint = { path = "../../utils/prometheus" , version = "0.8.0-dev"} +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } names = "0.11.0" structopt = "0.3.8" -sc-tracing = { version = "2.0.0-alpha.7", path = "../tracing" } +sc-tracing = { version = "2.0.0-dev", path = "../tracing" } chrono = "0.4.10" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } diff --git a/client/consensus/aura/Cargo.toml b/client/consensus/aura/Cargo.toml index d618ed39cc6..82196feac03 100644 --- a/client/consensus/aura/Cargo.toml +++ b/client/consensus/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-aura" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Aura consensus algorithm for substrate" edition = "2018" @@ -12,36 +12,36 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } -sp-consensus-aura = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/aura" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } +sp-consensus-aura = { version = "0.8.0-dev", path = "../../../primitives/consensus/aura" } +sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } +sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } derive_more = "0.99.2" futures = "0.3.4" futures-timer = "3.0.1" -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../../keystore" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sc-keystore = { version = "2.0.0-dev", path = "../../keystore" } log = "0.4.8" parking_lot = "0.10.0" -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } -sp-version = { version = "2.0.0-alpha.7", path = "../../../primitives/version" } -sc-consensus-slots = { version = "0.8.0-alpha.7", path = "../slots" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +sp-version = { version = "2.0.0-dev", path = "../../../primitives/version" } +sc-consensus-slots = { version = "0.8.0-dev", path = "../slots" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } +sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } [dev-dependencies] -sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } -sc-network = { version = "0.8.0-alpha.7", path = "../../network" } +sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } +sc-executor = { version = "0.8.0-dev", path = "../../executor" } +sc-network = { version = "0.8.0-dev", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } env_logger = "0.7.0" tempfile = "3.1.0" diff --git a/client/consensus/babe/Cargo.toml b/client/consensus/babe/Cargo.toml index 4959c051004..ddae8f84b7e 100644 --- a/client/consensus/babe/Cargo.toml +++ b/client/consensus/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-babe" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "BABE consensus algorithm for substrate" edition = "2018" @@ -14,30 +14,30 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../primitives/application-crypto" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../../primitives/application-crypto" } num-bigint = "0.2.3" num-rational = "0.2.2" num-traits = "0.2.8" serde = { version = "1.0.104", features = ["derive"] } -sp-version = { version = "2.0.0-alpha.7", path = "../../../primitives/version" } -sp-io = { version = "2.0.0-alpha.7", path = "../../../primitives/io" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../../keystore" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../epochs" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-consensus-vrf = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/vrf" } -sc-consensus-uncles = { version = "0.8.0-alpha.7", path = "../uncles" } -sc-consensus-slots = { version = "0.8.0-alpha.7", path = "../slots" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -fork-tree = { version = "2.0.0-alpha.7", path = "../../../utils/fork-tree" } +sp-version = { version = "2.0.0-dev", path = "../../../primitives/version" } +sp-io = { version = "2.0.0-dev", path = "../../../primitives/io" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } +sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } +sc-keystore = { version = "2.0.0-dev", path = "../../keystore" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sc-consensus-epochs = { version = "0.8.0-dev", path = "../epochs" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-consensus-vrf = { version = "0.8.0-dev", path = "../../../primitives/consensus/vrf" } +sc-consensus-uncles = { version = "0.8.0-dev", path = "../uncles" } +sc-consensus-slots = { version = "0.8.0-dev", path = "../slots" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +fork-tree = { version = "2.0.0-dev", path = "../../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" parking_lot = "0.10.0" @@ -49,13 +49,13 @@ pdqselect = "0.1.0" derive_more = "0.99.2" [dev-dependencies] -sp-keyring = { version = "2.0.0-alpha.7", path = "../../../primitives/keyring" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } -sc-network = { version = "0.8.0-alpha.7", path = "../../network" } +sp-keyring = { version = "2.0.0-dev", path = "../../../primitives/keyring" } +sc-executor = { version = "0.8.0-dev", path = "../../executor" } +sc-network = { version = "0.8.0-dev", path = "../../network" } sc-network-test = { version = "0.8.0-dev", path = "../../network/test" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../service" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } +sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } env_logger = "0.7.0" tempfile = "3.1.0" diff --git a/client/consensus/babe/rpc/Cargo.toml b/client/consensus/babe/rpc/Cargo.toml index 0eacd98733e..1856ff8bafe 100644 --- a/client/consensus/babe/rpc/Cargo.toml +++ b/client/consensus/babe/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-babe-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "RPC extensions for the BABE consensus algorithm" edition = "2018" @@ -12,24 +12,24 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-consensus-babe = { version = "0.8.0-alpha.7", path = "../" } +sc-consensus-babe = { version = "0.8.0-dev", path = "../" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../../primitives/consensus/babe" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../../../primitives/consensus/babe" } serde = { version = "1.0.104", features=["derive"] } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../../primitives/runtime" } -sc-consensus-epochs = { version = "0.8.0-alpha.7", path = "../../epochs" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../../primitives/runtime" } +sc-consensus-epochs = { version = "0.8.0-dev", path = "../../epochs" } futures = { version = "0.3.4", features = ["compat"] } derive_more = "0.99.2" -sp-api = { version = "2.0.0-alpha.7", path = "../../../../primitives/api" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../../primitives/consensus/common" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../../primitives/core" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../../../keystore" } +sp-api = { version = "2.0.0-dev", path = "../../../../primitives/api" } +sp-consensus = { version = "0.8.0-dev", path = "../../../../primitives/consensus/common" } +sp-core = { version = "2.0.0-dev", path = "../../../../primitives/core" } +sc-keystore = { version = "2.0.0-dev", path = "../../../keystore" } [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../../test-utils/runtime/client" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../../../primitives/application-crypto" } -sp-keyring = { version = "2.0.0-alpha.7", path = "../../../../primitives/keyring" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../../../primitives/application-crypto" } +sp-keyring = { version = "2.0.0-dev", path = "../../../../primitives/keyring" } tempfile = "3.1.0" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 77f2a1db74b..dae6f341d13 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Collection of common consensus specific imlementations for Substr targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } diff --git a/client/consensus/epochs/Cargo.toml b/client/consensus/epochs/Cargo.toml index 57cab28f237..de14b5c6be6 100644 --- a/client/consensus/epochs/Cargo.toml +++ b/client/consensus/epochs/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-epochs" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Generic epochs-based utilities for consensus" edition = "2018" @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" -fork-tree = { version = "2.0.0-alpha.7", path = "../../../utils/fork-tree" } -sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-alpha.7"} -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sc-client-api = { path = "../../api" , version = "2.0.0-alpha.7"} +fork-tree = { version = "2.0.0-dev", path = "../../../utils/fork-tree" } +sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-dev"} +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sc-client-api = { path = "../../api" , version = "2.0.0-dev"} diff --git a/client/consensus/manual-seal/Cargo.toml b/client/consensus/manual-seal/Cargo.toml index b83f29662e7..b0a3c2bd72b 100644 --- a/client/consensus/manual-seal/Cargo.toml +++ b/client/consensus/manual-seal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-manual-seal" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Manual sealing engine for Substrate" edition = "2018" @@ -22,17 +22,17 @@ parking_lot = "0.10.0" serde = { version = "1.0", features=["derive"] } assert_matches = "1.3.0" -sc-client-api = { path = "../../../client/api" , version = "2.0.0-alpha.7"} -sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-alpha.7"} -sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-alpha.7"} -sp-consensus = { package = "sp-consensus", path = "../../../primitives/consensus/common" , version = "0.8.0-alpha.7"} -sp-inherents = { path = "../../../primitives/inherents" , version = "2.0.0-alpha.7"} -sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-alpha.7"} -sp-core = { path = "../../../primitives/core" , version = "2.0.0-alpha.7"} -sp-transaction-pool = { path = "../../../primitives/transaction-pool" , version = "2.0.0-alpha.7"} +sc-client-api = { path = "../../../client/api" , version = "2.0.0-dev"} +sc-transaction-pool = { path = "../../transaction-pool" , version = "2.0.0-dev"} +sp-blockchain = { path = "../../../primitives/blockchain" , version = "2.0.0-dev"} +sp-consensus = { package = "sp-consensus", path = "../../../primitives/consensus/common" , version = "0.8.0-dev"} +sp-inherents = { path = "../../../primitives/inherents" , version = "2.0.0-dev"} +sp-runtime = { path = "../../../primitives/runtime" , version = "2.0.0-dev"} +sp-core = { path = "../../../primitives/core" , version = "2.0.0-dev"} +sp-transaction-pool = { path = "../../../primitives/transaction-pool" , version = "2.0.0-dev"} [dev-dependencies] -sc-basic-authorship = { path = "../../basic-authorship" , version = "0.8.0-alpha.7"} +sc-basic-authorship = { path = "../../basic-authorship" , version = "0.8.0-dev"} substrate-test-runtime-client = { path = "../../../test-utils/runtime/client" , version = "2.0.0-dev"} substrate-test-runtime-transaction-pool = { path = "../../../test-utils/runtime/transaction-pool" , version = "2.0.0-dev"} tokio = { version = "0.2", features = ["rt-core", "macros"] } diff --git a/client/consensus/pow/Cargo.toml b/client/consensus/pow/Cargo.toml index d4a3e695dd6..0c1cc9c12cd 100644 --- a/client/consensus/pow/Cargo.toml +++ b/client/consensus/pow/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-pow" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "PoW consensus algorithm for substrate" edition = "2018" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../../primitives/block-builder" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } -sp-consensus-pow = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/pow" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-block-builder = { version = "2.0.0-dev", path = "../../../primitives/block-builder" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } +sp-consensus-pow = { version = "0.8.0-dev", path = "../../../primitives/consensus/pow" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } log = "0.4.8" futures = { version = "0.3.1", features = ["compat"] } -sp-timestamp = { version = "2.0.0-alpha.7", path = "../../../primitives/timestamp" } +sp-timestamp = { version = "2.0.0-dev", path = "../../../primitives/timestamp" } derive_more = "0.99.2" diff --git a/client/consensus/slots/Cargo.toml b/client/consensus/slots/Cargo.toml index 4c9504de60e..d39d5382557 100644 --- a/client/consensus/slots/Cargo.toml +++ b/client/consensus/slots/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-slots" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Generic slots-based utilities for consensus" edition = "2018" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../../telemetry" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sc-telemetry = { version = "2.0.0-dev", path = "../../telemetry" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } futures = "0.3.4" futures-timer = "3.0.1" parking_lot = "0.10.0" diff --git a/client/consensus/uncles/Cargo.toml b/client/consensus/uncles/Cargo.toml index fbb61116fe6..019c933a20e 100644 --- a/client/consensus/uncles/Cargo.toml +++ b/client/consensus/uncles/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-consensus-uncles" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Generic uncle inclusion utilities for consensus" edition = "2018" @@ -12,10 +12,10 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-authorship = { version = "2.0.0-alpha.7", path = "../../../primitives/authorship" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../../primitives/inherents" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-authorship = { version = "2.0.0-dev", path = "../../../primitives/authorship" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-inherents = { version = "2.0.0-dev", path = "../../../primitives/inherents" } log = "0.4.8" diff --git a/client/db/Cargo.toml b/client/db/Cargo.toml index 8339d19b88b..2df1836850c 100644 --- a/client/db/Cargo.toml +++ b/client/db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-client-db" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -23,21 +23,21 @@ parity-util-mem = { version = "0.6.1", default-features = false, features = ["st codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } blake2-rfc = "0.2.18" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } -sc-state-db = { version = "0.8.0-alpha.7", path = "../state-db" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sc-executor = { version = "0.8.0-dev", path = "../executor" } +sc-state-db = { version = "0.8.0-dev", path = "../state-db" } +sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } parity-db = { version = "0.1.2", optional = true } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } [dev-dependencies] -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } env_logger = "0.7.0" quickcheck = "0.9" diff --git a/client/executor/Cargo.toml b/client/executor/Cargo.toml index 86d3fef1264..ef1b24ea711 100644 --- a/client/executor/Cargo.toml +++ b/client/executor/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,22 +15,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } -sp-serializer = { version = "2.0.0-alpha.7", path = "../../primitives/serializer" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } -sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../primitives/panic-handler" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } +sp-serializer = { version = "2.0.0-dev", path = "../../primitives/serializer" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-panic-handler = { version = "2.0.0-dev", path = "../../primitives/panic-handler" } wasmi = "0.6.2" parity-wasm = "0.41.0" lazy_static = "1.4.0" -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../primitives/runtime-interface" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } -sc-executor-common = { version = "0.8.0-alpha.7", path = "common" } -sc-executor-wasmi = { version = "0.8.0-alpha.7", path = "wasmi" } -sc-executor-wasmtime = { version = "0.8.0-alpha.7", path = "wasmtime", optional = true } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-dev", path = "../../primitives/runtime-interface" } +sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } +sc-executor-common = { version = "0.8.0-dev", path = "common" } +sc-executor-wasmi = { version = "0.8.0-dev", path = "wasmi" } +sc-executor-wasmtime = { version = "0.8.0-dev", path = "wasmtime", optional = true } parking_lot = "0.10.0" log = "0.4.8" libsecp256k1 = "0.3.4" @@ -41,9 +41,9 @@ wabt = "0.9.2" hex-literal = "0.2.1" sc-runtime-test = { version = "2.0.0-dev", path = "runtime-test" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } test-case = "0.3.3" -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } [features] default = [ "std" ] diff --git a/client/executor/common/Cargo.toml b/client/executor/common/Cargo.toml index 3a75edc7e08..c27ed8db0ae 100644 --- a/client/executor/common/Cargo.toml +++ b/client/executor/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-common" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -18,11 +18,11 @@ derive_more = "0.99.2" parity-wasm = "0.41.0" codec = { package = "parity-scale-codec", version = "1.3.0" } wasmi = "0.6.2" -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } -sp-serializer = { version = "2.0.0-alpha.7", path = "../../../primitives/serializer" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } +sp-serializer = { version = "2.0.0-dev", path = "../../../primitives/serializer" } [features] default = [] diff --git a/client/executor/runtime-test/Cargo.toml b/client/executor/runtime-test/Cargo.toml index 860b964fca4..b8ae805192d 100644 --- a/client/executor/runtime-test/Cargo.toml +++ b/client/executor/runtime-test/Cargo.toml @@ -13,12 +13,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/io" } -sp-sandbox = { version = "0.8.0-alpha.7", default-features = false, path = "../../../primitives/sandbox" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -sp-allocator = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/allocator" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/io" } +sp-sandbox = { version = "0.8.0-dev", default-features = false, path = "../../../primitives/sandbox" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-allocator = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/allocator" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/client/executor/wasmi/Cargo.toml b/client/executor/wasmi/Cargo.toml index 5da84500302..3180eebb4f5 100644 --- a/client/executor/wasmi/Cargo.toml +++ b/client/executor/wasmi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-wasmi" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,8 +16,8 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4.8" wasmi = "0.6.2" codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor-common = { version = "0.8.0-alpha.7", path = "../common" } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } +sc-executor-common = { version = "0.8.0-dev", path = "../common" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index ed7213224d7..3644c57e47b 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-executor-wasmtime" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,11 +16,11 @@ log = "0.4.8" scoped-tls = "1.0" parity-wasm = "0.41.0" codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor-common = { version = "0.8.0-alpha.7", path = "../common" } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/wasm-interface" } -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime-interface" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-allocator = { version = "2.0.0-alpha.7", path = "../../../primitives/allocator" } +sc-executor-common = { version = "0.8.0-dev", path = "../common" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-interface" } +sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.1" } wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.1" } wasmtime-environ = "0.16" diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index 46b5a9e700f..97dafc3d46b 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-finality-grandpa" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" -fork-tree = { version = "2.0.0-alpha.7", path = "../../utils/fork-tree" } +fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" log = "0.4.8" @@ -23,37 +23,37 @@ parking_lot = "0.10.0" rand = "0.7.2" assert_matches = "1.3.0" parity-scale-codec = { version = "1.3.0", features = ["derive"] } -sp-arithmetic = { version = "2.0.0-alpha.7", path = "../../primitives/arithmetic" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../client/consensus/common" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } +sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sc-keystore = { version = "2.0.0-dev", path = "../keystore" } serde_json = "1.0.41" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-inherents = { version = "2.0.0-alpha.7", path = "../../primitives/inherents" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sc-network-gossip = { version = "0.8.0-alpha.7", path = "../network-gossip" } -sp-finality-tracker = { version = "2.0.0-alpha.7", path = "../../primitives/finality-tracker" } -sp-finality-grandpa = { version = "2.0.0-alpha.7", path = "../../primitives/finality-grandpa" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} -sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-inherents = { version = "2.0.0-dev", path = "../../primitives/inherents" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sc-network-gossip = { version = "0.8.0-dev", path = "../network-gossip" } +sp-finality-tracker = { version = "2.0.0-dev", path = "../../primitives/finality-tracker" } +sp-finality-grandpa = { version = "2.0.0-dev", path = "../../primitives/finality-grandpa" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} +sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } pin-project = "0.4.6" [dev-dependencies] finality-grandpa = { version = "0.12.1", features = ["derive-codec", "test-helpers"] } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } +sc-network = { version = "0.8.0-dev", path = "../network" } sc-network-test = { version = "0.8.0-dev", path = "../network/test" } -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/babe" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } env_logger = "0.7.0" tokio = { version = "0.2", features = ["rt-core"] } tempfile = "3.1.0" -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } diff --git a/client/finality-grandpa/rpc/Cargo.toml b/client/finality-grandpa/rpc/Cargo.toml index b7d1406ce6d..5f7ccc9218e 100644 --- a/client/finality-grandpa/rpc/Cargo.toml +++ b/client/finality-grandpa/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-finality-grandpa-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "RPC extensions for the GRANDPA finality gadget" repository = "https://github.com/paritytech/substrate/" @@ -8,7 +8,7 @@ edition = "2018" license = "GPL-3.0" [dependencies] -sc-finality-grandpa = { version = "0.8.0-alpha.7", path = "../" } +sc-finality-grandpa = { version = "0.8.0-dev", path = "../" } finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.3" @@ -20,4 +20,4 @@ log = "0.4.8" derive_more = "0.99.2" [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } diff --git a/client/informant/Cargo.toml b/client/informant/Cargo.toml index 00376f1030a..f8e6ca85f95 100644 --- a/client/informant/Cargo.toml +++ b/client/informant/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-informant" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Substrate informant." edition = "2018" @@ -17,8 +17,8 @@ futures = "0.3.4" log = "0.4.8" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } wasm-timer = "0.2" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../service" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../service" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } diff --git a/client/keystore/Cargo.toml b/client/keystore/Cargo.toml index bd8f654fc45..f3419f55e1d 100644 --- a/client/keystore/Cargo.toml +++ b/client/keystore/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-keystore" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,8 +15,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] derive_more = "0.99.2" -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } hex = "0.4.0" rand = "0.7.2" serde_json = "1.0.41" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index ef14d1fff87..c6714375fe3 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Gossiping for the Substrate network protocol" name = "sc-network-gossip" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -19,9 +19,9 @@ futures-timer = "3.0.1" libp2p = { version = "0.18.1", default-features = false, features = ["websocket"] } log = "0.4.8" lru = "0.4.3" -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 7d51d76c151..e31e0f31132 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate network protocol" name = "sc-network" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -25,7 +25,7 @@ derive_more = "0.99.2" either = "1.5.3" erased-serde = "0.3.9" fnv = "1.0.6" -fork-tree = { version = "2.0.0-alpha.7", path = "../../utils/fork-tree" } +fork-tree = { version = "2.0.0-dev", path = "../../utils/fork-tree" } futures = "0.3.4" futures-timer = "3.0.1" futures_codec = "0.3.3" @@ -38,23 +38,23 @@ lru = "0.4.0" nohash-hasher = "0.2.0" parking_lot = "0.10.0" pin-project = "0.4.6" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-alpha.7", path = "../../utils/prometheus" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.8.0-dev", path = "../../utils/prometheus" } prost = "0.6.1" rand = "0.7.2" -sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sc-peerset = { version = "2.0.0-alpha.7", path = "../peerset" } +sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sc-peerset = { version = "2.0.0-dev", path = "../peerset" } serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" slog = { version = "2.5.2", features = ["nested-values"] } slog_derive = "0.2.0" smallvec = "0.6.10" -sp-arithmetic = { version = "2.0.0-alpha.7", path = "../../primitives/arithmetic" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +sp-arithmetic = { version = "2.0.0-dev", path = "../../primitives/arithmetic" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } thiserror = "1" unsigned-varint = { version = "0.3.1", features = ["futures", "futures-codec"] } void = "1.0.2" @@ -73,7 +73,7 @@ env_logger = "0.7.0" libp2p = { version = "0.18.1", default-features = false, features = ["secio"] } quickcheck = "0.9.0" rand = "0.7.2" -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } sp-test-primitives = { version = "2.0.0-dev", path = "../../primitives/test-primitives" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../test-utils/runtime" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index cbfd5ffaf18..154694c692a 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -13,23 +13,23 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-network = { version = "0.8.0-alpha.7", path = "../" } +sc-network = { version = "0.8.0-dev", path = "../" } log = "0.4.8" parking_lot = "0.10.0" futures = "0.3.4" futures-timer = "3.0.1" rand = "0.7.2" libp2p = { version = "0.18.1", default-features = false, features = ["libp2p-websocket"] } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/babe" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../../primitives/consensus/babe" } env_logger = "0.7.0" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } tempfile = "3.1.0" -sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../service" } +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index 212014c6c5e..ac3a71ad0d9 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate offchain workers" name = "sc-offchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -13,23 +13,23 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] bytes = "0.5" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } fnv = "1.0.6" futures = "0.3.4" futures-timer = "3.0.1" log = "0.4.8" threadpool = "1.7" num_cpus = "1.10" -sp-offchain = { version = "2.0.0-alpha.7", path = "../../primitives/offchain" } +sp-offchain = { version = "2.0.0-dev", path = "../../primitives/offchain" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } rand = "0.7.2" -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sc-keystore = { version = "2.0.0-dev", path = "../keystore" } [target.'cfg(not(target_os = "unknown"))'.dependencies] hyper = "0.13.2" @@ -38,9 +38,9 @@ hyper-rustls = "0.20" [dev-dependencies] env_logger = "0.7.0" fdlimit = "0.1.4" -sc-client-db = { version = "0.8.0-alpha.7", default-features = true, path = "../db/" } -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../client/transaction-pool" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } +sc-client-db = { version = "0.8.0-dev", default-features = true, path = "../db/" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../../client/transaction-pool" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } tokio = "0.2" diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index 8d686b66098..d5aa08f2f49 100644 --- a/client/peerset/Cargo.toml +++ b/client/peerset/Cargo.toml @@ -3,7 +3,7 @@ description = "Connectivity manager based on reputation" homepage = "http://parity.io" license = "GPL-3.0" name = "sc-peerset" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" repository = "https://github.com/paritytech/substrate/" @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.3.4" libp2p = { version = "0.18.1", default-features = false } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils"} +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils"} log = "0.4.8" serde_json = "1.0.41" wasm-timer = "0.2" diff --git a/client/rpc-api/Cargo.toml b/client/rpc-api/Cargo.toml index 50cf71ef3ed..e0dac773bf0 100644 --- a/client/rpc-api/Cargo.toml +++ b/client/rpc-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc-api" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -21,11 +21,11 @@ jsonrpc-derive = "14.0.3" jsonrpc-pubsub = "14.0.3" log = "0.4.8" parking_lot = "0.10.0" -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } -sp-runtime = { path = "../../primitives/runtime" , version = "2.0.0-alpha.7"} -sp-chain-spec = { path = "../../primitives/chain-spec" , version = "2.0.0-alpha.7"} +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-runtime = { path = "../../primitives/runtime" , version = "2.0.0-dev"} +sp-chain-spec = { path = "../../primitives/chain-spec" , version = "2.0.0-dev"} serde = { version = "1.0.101", features = ["derive"] } serde_json = "1.0.41" -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -sp-rpc = { version = "2.0.0-alpha.7", path = "../../primitives/rpc" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sp-rpc = { version = "2.0.0-dev", path = "../../primitives/rpc" } diff --git a/client/rpc-servers/Cargo.toml b/client/rpc-servers/Cargo.toml index f169417b51c..345aff13d8d 100644 --- a/client/rpc-servers/Cargo.toml +++ b/client/rpc-servers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc-server" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,7 +17,7 @@ pubsub = { package = "jsonrpc-pubsub", version = "14.0.3" } log = "0.4.8" serde = "1.0.101" serde_json = "1.0.41" -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } [target.'cfg(not(target_os = "unknown"))'.dependencies] http = { package = "jsonrpc-http-server", version = "14.0.3" } diff --git a/client/rpc/Cargo.toml b/client/rpc/Cargo.toml index 5f4a365d095..66f7cb50e6d 100644 --- a/client/rpc/Cargo.toml +++ b/client/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,37 +12,37 @@ description = "Substrate Client RPC" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-rpc-api = { version = "0.8.0-alpha.7", path = "../rpc-api" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } +sc-rpc-api = { version = "0.8.0-dev", path = "../rpc-api" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = { version = "0.3.1", features = ["compat"] } jsonrpc-pubsub = "14.0.3" log = "0.4.8" -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } rpc = { package = "jsonrpc-core", version = "14.0.3" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } serde_json = "1.0.41" -sp-session = { version = "2.0.0-alpha.7", path = "../../primitives/session" } -sp-offchain = { version = "2.0.0-alpha.7", path = "../../primitives/offchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sp-rpc = { version = "2.0.0-alpha.7", path = "../../primitives/rpc" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sp-chain-spec = { version = "2.0.0-alpha.7", path = "../../primitives/chain-spec" } -sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../client/block-builder" } -sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } +sp-session = { version = "2.0.0-dev", path = "../../primitives/session" } +sp-offchain = { version = "2.0.0-dev", path = "../../primitives/offchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-rpc = { version = "2.0.0-dev", path = "../../primitives/rpc" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-chain-spec = { version = "2.0.0-dev", path = "../../primitives/chain-spec" } +sc-executor = { version = "0.8.0-dev", path = "../executor" } +sc-block-builder = { version = "0.8.0-dev", path = "../../client/block-builder" } +sc-keystore = { version = "2.0.0-dev", path = "../keystore" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } hash-db = { version = "0.15.2", default-features = false } parking_lot = "0.10.0" [dev-dependencies] assert_matches = "1.3.0" futures01 = { package = "futures", version = "0.1.29" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } tokio = "0.1.22" -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../transaction-pool" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../transaction-pool" } diff --git a/client/service/Cargo.toml b/client/service/Cargo.toml index c5b5fa7bfb8..e5f6e229c70 100644 --- a/client/service/Cargo.toml +++ b/client/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-service" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -39,38 +39,38 @@ hash-db = "0.15.2" serde = "1.0.101" serde_json = "1.0.41" sysinfo = "0.13.3" -sc-keystore = { version = "2.0.0-alpha.7", path = "../keystore" } -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../primitives/trie" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-session = { version = "2.0.0-alpha.7", path = "../../primitives/session" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sc-network = { version = "0.8.0-alpha.7", path = "../network" } -sc-chain-spec = { version = "2.0.0-alpha.7", path = "../chain-spec" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../db" } +sc-keystore = { version = "2.0.0-dev", path = "../keystore" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-trie = { version = "2.0.0-dev", path = "../../primitives/trie" } +sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-session = { version = "2.0.0-dev", path = "../../primitives/session" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sc-network = { version = "0.8.0-dev", path = "../network" } +sc-chain-spec = { version = "2.0.0-dev", path = "../chain-spec" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../db" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-executor = { version = "0.8.0-alpha.7", path = "../executor" } -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../transaction-pool" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -sc-rpc-server = { version = "2.0.0-alpha.7", path = "../rpc-servers" } -sc-rpc = { version = "2.0.0-alpha.7", path = "../rpc" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../block-builder" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../../primitives/block-builder" } +sc-executor = { version = "0.8.0-dev", path = "../executor" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../transaction-pool" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sc-rpc-server = { version = "2.0.0-dev", path = "../rpc-servers" } +sc-rpc = { version = "2.0.0-dev", path = "../rpc" } +sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } +sp-block-builder = { version = "2.0.0-dev", path = "../../primitives/block-builder" } -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } -sc-offchain = { version = "2.0.0-alpha.7", path = "../offchain" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } +sc-offchain = { version = "2.0.0-dev", path = "../offchain" } parity-multiaddr = { package = "parity-multiaddr", version = "0.7.3" } -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" , version = "0.8.0-alpha.7"} -sc-tracing = { version = "2.0.0-alpha.7", path = "../tracing" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" , version = "0.8.0-dev"} +sc-tracing = { version = "2.0.0-dev", path = "../tracing" } tracing = "0.1.10" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } @@ -84,6 +84,6 @@ procfs = '0.7.8' [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } -sp-consensus-babe = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/babe" } -grandpa = { version = "0.8.0-alpha.7", package = "sc-finality-grandpa", path = "../finality-grandpa" } -grandpa-primitives = { version = "2.0.0-alpha.7", package = "sp-finality-grandpa", path = "../../primitives/finality-grandpa" } +sp-consensus-babe = { version = "0.8.0-dev", path = "../../primitives/consensus/babe" } +grandpa = { version = "0.8.0-dev", package = "sc-finality-grandpa", path = "../finality-grandpa" } +grandpa-primitives = { version = "2.0.0-dev", package = "sp-finality-grandpa", path = "../../primitives/finality-grandpa" } diff --git a/client/service/test/Cargo.toml b/client/service/test/Cargo.toml index 687987f429b..094f6bcff04 100644 --- a/client/service/test/Cargo.toml +++ b/client/service/test/Cargo.toml @@ -20,24 +20,24 @@ log = "0.4.8" env_logger = "0.7.0" fdlimit = "0.1.4" parking_lot = "0.10.0" -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } -sp-trie = { version = "2.0.0-alpha.7", path = "../../../primitives/trie" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../../primitives/storage" } -sc-client-db = { version = "0.8.0-alpha.7", default-features = false, path = "../../db" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } +sp-trie = { version = "2.0.0-dev", path = "../../../primitives/trie" } +sp-storage = { version = "2.0.0-dev", path = "../../../primitives/storage" } +sc-client-db = { version = "0.8.0-dev", default-features = false, path = "../../db" } futures = { version = "0.3.1", features = ["compat"] } -sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../service" } -sc-network = { version = "0.8.0-alpha.7", path = "../../network" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../service" } +sc-network = { version = "0.8.0-dev", path = "../../network" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../../test-utils/runtime" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../api" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../block-builder" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../executor" } -sp-panic-handler = { version = "2.0.0-alpha.7", path = "../../../primitives/panic-handler" } +sc-client-api = { version = "2.0.0-dev", path = "../../api" } +sc-block-builder = { version = "0.8.0-dev", path = "../../block-builder" } +sc-executor = { version = "0.8.0-dev", path = "../../executor" } +sp-panic-handler = { version = "2.0.0-dev", path = "../../../primitives/panic-handler" } parity-scale-codec = "1.3.0" diff --git a/client/state-db/Cargo.toml b/client/state-db/Cargo.toml index 5eeb3f51b3f..c2d2f2eb0ba 100644 --- a/client/state-db/Cargo.toml +++ b/client/state-db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-state-db" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parking_lot = "0.10.0" log = "0.4.8" -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } parity-util-mem-derive = "0.1.0" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 0f4be704a6a..0928d1d2a15 100644 --- a/client/telemetry/Cargo.toml +++ b/client/telemetry/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-telemetry" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Telemetry utils" edition = "2018" diff --git a/client/tracing/Cargo.toml b/client/tracing/Cargo.toml index 28e8f5bacab..23f44fd0575 100644 --- a/client/tracing/Cargo.toml +++ b/client/tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-tracing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -20,7 +20,7 @@ serde_json = "1.0.41" slog = { version = "2.5.2", features = ["nested-values"] } tracing-core = "0.1.7" -sc-telemetry = { version = "2.0.0-alpha.7", path = "../telemetry" } +sc-telemetry = { version = "2.0.0-dev", path = "../telemetry" } [dev-dependencies] tracing = "0.1.10" diff --git a/client/transaction-pool/Cargo.toml b/client/transaction-pool/Cargo.toml index 45bc20dcbfc..6d4f69676c6 100644 --- a/client/transaction-pool/Cargo.toml +++ b/client/transaction-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-transaction-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -20,21 +20,21 @@ intervalier = "0.4.0" log = "0.4.8" parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } parking_lot = "0.10.0" -prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-alpha.7"} -sc-client-api = { version = "2.0.0-alpha.7", path = "../api" } -sc-transaction-graph = { version = "2.0.0-alpha.7", path = "./graph" } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-alpha.7", path = "../../primitives/tracing" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../primitives/transaction-pool" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../primitives/utils" } +prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} +sc-client-api = { version = "2.0.0-dev", path = "../api" } +sc-transaction-graph = { version = "2.0.0-dev", path = "./graph" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", path = "../../primitives/tracing" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] assert_matches = "1.3.0" hex = "0.4" -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } substrate-test-runtime-transaction-pool = { version = "2.0.0-dev", path = "../../test-utils/runtime/transaction-pool" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/transaction-pool/graph/Cargo.toml b/client/transaction-pool/graph/Cargo.toml index 6d851fff43b..842d54f920a 100644 --- a/client/transaction-pool/graph/Cargo.toml +++ b/client/transaction-pool/graph/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sc-transaction-graph" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -18,11 +18,11 @@ log = "0.4.8" parking_lot = "0.10.0" serde = { version = "1.0.101", features = ["derive"] } wasm-timer = "0.2" -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../../primitives/utils" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-utils = { version = "2.0.0-dev", path = "../../../primitives/utils" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } linked-hash-map = "0.5.2" diff --git a/frame/assets/Cargo.toml b/frame/assets/Cargo.toml index efa7cf3df12..4e09ea8aa51 100644 --- a/frame/assets/Cargo.toml +++ b/frame/assets/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-assets" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } # Needed for various traits. In our case, `OnFinalize`. -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } # Needed for type-safe access to storage DB. -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } # `system` module provides us with all sorts of useful stuff and macros depend on it being around. -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/aura/Cargo.toml b/frame/aura/Cargo.toml index 6b780f61c95..623cf80df7b 100644 --- a/frame/aura/Cargo.toml +++ b/frame/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-aura" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME AURA consensus pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -sp-consensus-aura = { path = "../../primitives/consensus/aura", default-features = false, version = "0.8.0-alpha.7"} -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +sp-consensus-aura = { path = "../../primitives/consensus/aura", default-features = false, version = "0.8.0-dev"} +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } [dev-dependencies] diff --git a/frame/authority-discovery/Cargo.toml b/frame/authority-discovery/Cargo.toml index bba62cbecea..5f267b31595 100644 --- a/frame/authority-discovery/Cargo.toml +++ b/frame/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-authority-discovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME pallet for authority discovery" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-authority-discovery = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/authority-discovery" } -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +sp-authority-discovery = { version = "2.0.0-dev", default-features = false, path = "../../primitives/authority-discovery" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -pallet-session = { version = "2.0.0-alpha.7", features = ["historical" ], path = "../session", default-features = false } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +pallet-session = { version = "2.0.0-dev", features = ["historical" ], path = "../session", default-features = false } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } [features] default = ["std"] diff --git a/frame/authorship/Cargo.toml b/frame/authorship/Cargo.toml index 656dbd05ed0..98776c0e00d 100644 --- a/frame/authorship/Cargo.toml +++ b/frame/authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-authorship" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" description = "Block and Uncle Author tracking for the FRAME" authors = ["Parity Technologies "] edition = "2018" @@ -12,15 +12,15 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/authorship" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-authorship = { version = "2.0.0-dev", default-features = false, path = "../../primitives/authorship" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} impl-trait-for-tuples = "0.1.3" [features] diff --git a/frame/babe/Cargo.toml b/frame/babe/Cargo.toml index 413feae8bdf..631b4ac4d4a 100644 --- a/frame/babe/Cargo.toml +++ b/frame/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-babe" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,22 +14,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } -sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/babe" } -sp-consensus-vrf = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/vrf" } -sp-io = { path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } +sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/babe" } +sp-consensus-vrf = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/vrf" } +sp-io = { path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/balances/Cargo.toml b/frame/balances/Cargo.toml index 8f30b059392..769e68112ce 100644 --- a/frame/balances/Cargo.toml +++ b/frame/balances/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-balances" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../transaction-payment" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../transaction-payment" } [features] default = ["std"] diff --git a/frame/benchmark/Cargo.toml b/frame/benchmark/Cargo.toml index 4d49eb5ac9e..0b506d12ec9 100644 --- a/frame/benchmark/Cargo.toml +++ b/frame/benchmark/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-benchmark" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [features] default = ["std"] diff --git a/frame/benchmarking/Cargo.toml b/frame/benchmarking/Cargo.toml index a45907cd974..8089a2a3661 100644 --- a/frame/benchmarking/Cargo.toml +++ b/frame/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,13 +15,13 @@ targets = ["x86_64-unknown-linux-gnu"] linregress = "0.1" paste = "0.1" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-api = { version = "2.0.0-alpha.7", path = "../../primitives/api", default-features = false } -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../../primitives/runtime-interface", default-features = false } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime", default-features = false } -sp-std = { version = "2.0.0-alpha.7", path = "../../primitives/std", default-features = false } -sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-api = { version = "2.0.0-dev", path = "../../primitives/api", default-features = false } +sp-runtime-interface = { version = "2.0.0-dev", path = "../../primitives/runtime-interface", default-features = false } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime", default-features = false } +sp-std = { version = "2.0.0-dev", path = "../../primitives/std", default-features = false } +sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-dev"} +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [features] default = [ "std" ] diff --git a/frame/collective/Cargo.toml b/frame/collective/Cargo.toml index 5cd22779de8..2107bf0b2f5 100644 --- a/frame/collective/Cargo.toml +++ b/frame/collective/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-collective" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/contracts/Cargo.toml b/frame/contracts/Cargo.toml index d0bf3a5f435..4e1128000e3 100644 --- a/frame/contracts/Cargo.toml +++ b/frame/contracts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,23 +17,23 @@ pwasm-utils = { version = "0.12.0", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } parity-wasm = { version = "0.41.0", default-features = false } wasmi-validation = { version = "0.3.0", default-features = false } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-sandbox = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/sandbox" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "common" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", default-features = false, path = "../transaction-payment" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-sandbox = { version = "0.8.0-dev", default-features = false, path = "../../primitives/sandbox" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "common" } +pallet-transaction-payment = { version = "2.0.0-dev", default-features = false, path = "../transaction-payment" } [dev-dependencies] wabt = "0.9.2" assert_matches = "1.3.0" hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../timestamp" } -pallet-randomness-collective-flip = { version = "2.0.0-alpha.7", path = "../randomness-collective-flip" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-timestamp = { version = "2.0.0-dev", path = "../timestamp" } +pallet-randomness-collective-flip = { version = "2.0.0-dev", path = "../randomness-collective-flip" } [features] default = ["std"] diff --git a/frame/contracts/common/Cargo.toml b/frame/contracts/common/Cargo.toml index aef9da6201b..edf1867be0a 100644 --- a/frame/contracts/common/Cargo.toml +++ b/frame/contracts/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-primitives" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] # This crate should not rely on any of the frame primitives. codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } [features] default = ["std"] diff --git a/frame/contracts/rpc/Cargo.toml b/frame/contracts/rpc/Cargo.toml index 4b22041acd1..66d75759f1a 100644 --- a/frame/contracts/rpc/Cargo.toml +++ b/frame/contracts/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-rpc" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,14 +16,14 @@ codec = { package = "parity-scale-codec", version = "1.3.0" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-rpc = { version = "2.0.0-alpha.7", path = "../../../primitives/rpc" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-rpc = { version = "2.0.0-dev", path = "../../../primitives/rpc" } serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -pallet-contracts-primitives = { version = "2.0.0-alpha.7", path = "../common" } -pallet-contracts-rpc-runtime-api = { version = "0.8.0-alpha.7", path = "./runtime-api" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +pallet-contracts-primitives = { version = "2.0.0-dev", path = "../common" } +pallet-contracts-rpc-runtime-api = { version = "0.8.0-dev", path = "./runtime-api" } [dev-dependencies] serde_json = "1.0.41" diff --git a/frame/contracts/rpc/runtime-api/Cargo.toml b/frame/contracts/rpc/runtime-api/Cargo.toml index adfd6c23dcb..81c6ce37601 100644 --- a/frame/contracts/rpc/runtime-api/Cargo.toml +++ b/frame/contracts/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-contracts-rpc-runtime-api" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "Runtime API definition required by Contracts RPC extensions." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/runtime" } -pallet-contracts-primitives = { version = "2.0.0-alpha.7", default-features = false, path = "../../common" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/runtime" } +pallet-contracts-primitives = { version = "2.0.0-dev", default-features = false, path = "../../common" } [features] default = ["std"] diff --git a/frame/democracy/Cargo.toml b/frame/democracy/Cargo.toml index deefe61aeb2..83caa671cee 100644 --- a/frame/democracy/Cargo.toml +++ b/frame/democracy/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-democracy" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -pallet-scheduler = { version = "2.0.0-alpha.7", path = "../scheduler" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-scheduler = { version = "2.0.0-dev", path = "../scheduler" } +sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } hex-literal = "0.2.1" [features] diff --git a/frame/elections-phragmen/Cargo.toml b/frame/elections-phragmen/Cargo.toml index 6eb2effc142..f9d681b7608 100644 --- a/frame/elections-phragmen/Cargo.toml +++ b/frame/elections-phragmen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-elections-phragmen" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,19 +14,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/phragmen" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../primitives/phragmen" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } [dev-dependencies] -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -pallet-scheduler = { version = "2.0.0-alpha.7", path = "../scheduler" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-scheduler = { version = "2.0.0-dev", path = "../scheduler" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } [features] default = ["std"] diff --git a/frame/elections/Cargo.toml b/frame/elections/Cargo.toml index 31888764880..407b5ccfdb1 100644 --- a/frame/elections/Cargo.toml +++ b/frame/elections/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-elections" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] hex-literal = "0.2.1" -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/evm/Cargo.toml b/frame/evm/Cargo.toml index 83ebeb1e33f..eaa5ae3e42b 100644 --- a/frame/evm/Cargo.toml +++ b/frame/evm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-evm" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } -pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } primitive-types = { version = "0.7.0", default-features = false, features = ["rlp"] } rlp = { version = "0.4", default-features = false } evm = { version = "0.16", default-features = false } diff --git a/frame/example-offchain-worker/Cargo.toml b/frame/example-offchain-worker/Cargo.toml index 05947d7c311..30381adb49f 100644 --- a/frame/example-offchain-worker/Cargo.toml +++ b/frame/example-offchain-worker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-example-offchain-worker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -13,13 +13,13 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } serde = { version = "1.0.101", optional = true } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } lite-json = { version = "0.1", default-features = false } [features] diff --git a/frame/example/Cargo.toml b/frame/example/Cargo.toml index 4bfc1aeb71b..d12b1e7c83f 100644 --- a/frame/example/Cargo.toml +++ b/frame/example/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-example" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core", default-features = false } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core", default-features = false } [features] default = ["std"] diff --git a/frame/executive/Cargo.toml b/frame/executive/Cargo.toml index da32b5132b0..3e0e1c938a8 100644 --- a/frame/executive/Cargo.toml +++ b/frame/executive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-executive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,22 +13,22 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/tracing" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } [dev-dependencies] hex-literal = "0.2.1" -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-io ={ path = "../../primitives/io", version = "2.0.0-alpha.7"} -pallet-indices = { version = "2.0.0-alpha.7", path = "../indices" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -pallet-transaction-payment = { version = "2.0.0-alpha.7", path = "../transaction-payment" } -sp-version = { version = "2.0.0-alpha.7", path = "../../primitives/version" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io ={ path = "../../primitives/io", version = "2.0.0-dev"} +pallet-indices = { version = "2.0.0-dev", path = "../indices" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-transaction-payment = { version = "2.0.0-dev", path = "../transaction-payment" } +sp-version = { version = "2.0.0-dev", path = "../../primitives/version" } [features] default = ["std"] diff --git a/frame/finality-tracker/Cargo.toml b/frame/finality-tracker/Cargo.toml index 6f654475792..1b11fbea5ad 100644 --- a/frame/finality-tracker/Cargo.toml +++ b/frame/finality-tracker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-finality-tracker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,17 +16,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/finality-tracker" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-tracker" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/generic-asset/Cargo.toml b/frame/generic-asset/Cargo.toml index 4304441385f..c19a7884b3e 100644 --- a/frame/generic-asset/Cargo.toml +++ b/frame/generic-asset/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-generic-asset" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Centrality Developers "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/grandpa/Cargo.toml b/frame/grandpa/Cargo.toml index d3819652d1e..2e1dbc4deba 100644 --- a/frame/grandpa/Cargo.toml +++ b/frame/grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-grandpa" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-finality-grandpa = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/finality-grandpa" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } -pallet-finality-tracker = { version = "2.0.0-alpha.7", default-features = false, path = "../finality-tracker" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-finality-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-grandpa" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } +pallet-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../finality-tracker" } [dev-dependencies] -sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/identity/Cargo.toml b/frame/identity/Cargo.toml index 0f43adbcb23..f20a8c983df 100644 --- a/frame/identity/Cargo.toml +++ b/frame/identity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-identity" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,16 +15,16 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/im-online/Cargo.toml b/frame/im-online/Cargo.toml index 01a96c57021..55e5a49d586 100644 --- a/frame/im-online/Cargo.toml +++ b/frame/im-online/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-im-online" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,20 +12,20 @@ description = "FRAME's I'm online pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } -pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../authorship" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../authorship" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../session" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../session" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [features] default = ["std", "pallet-session/historical"] diff --git a/frame/indices/Cargo.toml b/frame/indices/Cargo.toml index 3c006abbc18..515c0b478dd 100644 --- a/frame/indices/Cargo.toml +++ b/frame/indices/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-indices" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/keyring" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../primitives/keyring" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/membership/Cargo.toml b/frame/membership/Cargo.toml index b570718915d..742cc124a29 100644 --- a/frame/membership/Cargo.toml +++ b/frame/membership/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-membership" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/metadata/Cargo.toml b/frame/metadata/Cargo.toml index 6e06680f8aa..73418be9b2b 100644 --- a/frame/metadata/Cargo.toml +++ b/frame/metadata/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-metadata" -version = "11.0.0-alpha.7" +version = "11.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,8 +14,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/nicks/Cargo.toml b/frame/nicks/Cargo.toml index 1590e7bf0e3..fcb64731051 100644 --- a/frame/nicks/Cargo.toml +++ b/frame/nicks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-nicks" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/offences/Cargo.toml b/frame/offences/Cargo.toml index 43d8666ffda..e0759325feb 100644 --- a/frame/offences/Cargo.toml +++ b/frame/offences/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-offences" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,18 +12,18 @@ description = "FRAME offences pallet" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } serde = { version = "1.0.101", optional = true } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/offences/benchmarking/Cargo.toml b/frame/offences/benchmarking/Cargo.toml index 5584fef6c5e..de9d68dc804 100644 --- a/frame/offences/benchmarking/Cargo.toml +++ b/frame/offences/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-offences-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/staking" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } -pallet-im-online = { version = "2.0.0-alpha.7", default-features = false, path = "../../im-online" } -pallet-offences = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../offences" } -pallet-staking = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../session" } -sp-io = { path = "../../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } +pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../im-online" } +pallet-offences = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../offences" } +pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../../session" } +sp-io = { path = "../../../primitives/io", default-features = false, version = "2.0.0-dev"} [features] diff --git a/frame/randomness-collective-flip/Cargo.toml b/frame/randomness-collective-flip/Cargo.toml index 5dad2af0c90..08d715899fb 100644 --- a/frame/randomness-collective-flip/Cargo.toml +++ b/frame/randomness-collective-flip/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-randomness-collective-flip" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] safe-mix = { version = "1.0", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } [features] default = ["std"] diff --git a/frame/recovery/Cargo.toml b/frame/recovery/Cargo.toml index ace82bd56d2..de422678c37 100644 --- a/frame/recovery/Cargo.toml +++ b/frame/recovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-recovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,15 +15,15 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/scheduler/Cargo.toml b/frame/scheduler/Cargo.toml index 166976a86af..8a511cd3894 100644 --- a/frame/scheduler/Cargo.toml +++ b/frame/scheduler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-scheduler" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "Unlicense" @@ -11,15 +11,15 @@ description = "FRAME example pallet" [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.2.0", default-features = false } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core", default-features = false } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core", default-features = false } [features] default = ["std"] diff --git a/frame/scored-pool/Cargo.toml b/frame/scored-pool/Cargo.toml index 143c07491fc..ae8def3dd39 100644 --- a/frame/scored-pool/Cargo.toml +++ b/frame/scored-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-scored-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/session/Cargo.toml b/frame/session/Cargo.toml index 7d1ab5123cf..b3ca1ad596c 100644 --- a/frame/session/Cargo.toml +++ b/frame/session/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-session" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,19 +14,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../timestamp" } -sp-trie = { optional = true, path = "../../primitives/trie", default-features = false, version = "2.0.0-alpha.7"} -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../timestamp" } +sp-trie = { optional = true, path = "../../primitives/trie", default-features = false, version = "2.0.0-dev"} +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../../primitives/application-crypto" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-application-crypto = { version = "2.0.0-dev", path = "../../primitives/application-crypto" } lazy_static = "1.4.0" [features] diff --git a/frame/session/benchmarking/Cargo.toml b/frame/session/benchmarking/Cargo.toml index e8fd3c915e6..a3994ab3790 100644 --- a/frame/session/benchmarking/Cargo.toml +++ b/frame/session/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-session-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,22 +12,22 @@ description = "FRAME sessions pallet benchmarking" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } -pallet-staking = { version = "2.0.0-alpha.7", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } -pallet-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../session" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } +pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } +pallet-session = { version = "2.0.0-dev", default-features = false, path = "../../session" } [dev-dependencies] serde = { version = "1.0.101" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../../staking/reward-curve" } -sp-io ={ path = "../../../primitives/io", version = "2.0.0-alpha.7"} -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../timestamp" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../../balances" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../../staking/reward-curve" } +sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} +pallet-timestamp = { version = "2.0.0-dev", path = "../../timestamp" } +pallet-balances = { version = "2.0.0-dev", path = "../../balances" } [features] default = ["std"] diff --git a/frame/society/Cargo.toml b/frame/society/Cargo.toml index a59b7685d00..d79eb78b7d6 100644 --- a/frame/society/Cargo.toml +++ b/frame/society/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-society" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,16 +14,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-io ={ path = "../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } rand_chacha = { version = "0.2", default-features = false } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/staking/Cargo.toml b/frame/staking/Cargo.toml index 7576a6f219d..3ee07b5dec8 100644 --- a/frame/staking/Cargo.toml +++ b/frame/staking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-staking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,35 +14,35 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-phragmen = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/phragmen" } -sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io", default-features = false } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-staking = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/staking" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-session = { version = "2.0.0-alpha.7", features = ["historical"], path = "../session", default-features = false } -pallet-authorship = { version = "2.0.0-alpha.7", default-features = false, path = "../authorship" } -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-phragmen = { version = "2.0.0-dev", default-features = false, path = "../../primitives/phragmen" } +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io", default-features = false } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-session = { version = "2.0.0-dev", features = ["historical"], path = "../session", default-features = false } +pallet-authorship = { version = "2.0.0-dev", default-features = false, path = "../authorship" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } static_assertions = "1.1.0" # Optional imports for tesing-utils feature -pallet-indices = { version = "2.0.0-alpha.7", optional = true, path = "../indices", default-features = false } -sp-core = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/core", default-features = false } +pallet-indices = { version = "2.0.0-dev", optional = true, path = "../indices", default-features = false } +sp-core = { version = "2.0.0-dev", optional = true, path = "../../primitives/core", default-features = false } rand = { version = "0.7.3", optional = true, default-features = false } # Optional imports for benchmarking -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } rand_chacha = { version = "0.2", default-features = false, optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../timestamp" } -pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../staking/reward-curve" } -substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } -frame-benchmarking = { version = "2.0.0-alpha.7", path = "../benchmarking" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-timestamp = { version = "2.0.0-dev", path = "../timestamp" } +pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../staking/reward-curve" } +substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } +frame-benchmarking = { version = "2.0.0-dev", path = "../benchmarking" } rand_chacha = { version = "0.2" } parking_lot = "0.10.2" env_logger = "0.7.1" diff --git a/frame/staking/fuzzer/Cargo.toml b/frame/staking/fuzzer/Cargo.toml index 3df6db2d760..812e5b2fc1d 100644 --- a/frame/staking/fuzzer/Cargo.toml +++ b/frame/staking/fuzzer/Cargo.toml @@ -15,19 +15,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] honggfuzz = "0.5" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -pallet-staking = { version = "2.0.0-alpha.7", path = "..", features = ["testing-utils"] } -pallet-staking-reward-curve = { version = "2.0.0-alpha.7", path = "../reward-curve" } -pallet-session = { version = "2.0.0-alpha.7", path = "../../session" } -pallet-indices = { version = "2.0.0-alpha.7", path = "../../indices" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../../balances" } -pallet-timestamp = { version = "2.0.0-alpha.7", path = "../../timestamp" } -frame-system = { version = "2.0.0-alpha.7", path = "../../system" } -frame-support = { version = "2.0.0-alpha.7", path = "../../support" } -sp-std = { version = "2.0.0-alpha.7", path = "../../../primitives/std" } -sp-io ={ version = "2.0.0-alpha.7", path = "../../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-phragmen = { version = "2.0.0-alpha.7", path = "../../../primitives/phragmen" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +pallet-staking = { version = "2.0.0-dev", path = "..", features = ["testing-utils"] } +pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../reward-curve" } +pallet-session = { version = "2.0.0-dev", path = "../../session" } +pallet-indices = { version = "2.0.0-dev", path = "../../indices" } +pallet-balances = { version = "2.0.0-dev", path = "../../balances" } +pallet-timestamp = { version = "2.0.0-dev", path = "../../timestamp" } +frame-system = { version = "2.0.0-dev", path = "../../system" } +frame-support = { version = "2.0.0-dev", path = "../../support" } +sp-std = { version = "2.0.0-dev", path = "../../../primitives/std" } +sp-io ={ version = "2.0.0-dev", path = "../../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-phragmen = { version = "2.0.0-dev", path = "../../../primitives/phragmen" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } [[bin]] name = "submit_solution" diff --git a/frame/staking/reward-curve/Cargo.toml b/frame/staking/reward-curve/Cargo.toml index 8848cce0951..b11d1cc0493 100644 --- a/frame/staking/reward-curve/Cargo.toml +++ b/frame/staking/reward-curve/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-staking-reward-curve" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -21,4 +21,4 @@ proc-macro2 = "1.0.6" proc-macro-crate = "0.1.4" [dev-dependencies] -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } diff --git a/frame/sudo/Cargo.toml b/frame/sudo/Cargo.toml index e124324c970..25988b1fe30 100644 --- a/frame/sudo/Cargo.toml +++ b/frame/sudo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-sudo" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,14 +14,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/support/Cargo.toml b/frame/support/Cargo.toml index 05e55e68c99..0168705da7e 100644 --- a/frame/support/Cargo.toml +++ b/frame/support/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,24 +15,24 @@ targets = ["x86_64-unknown-linux-gnu"] log = "0.4" serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-metadata = { version = "11.0.0-alpha.7", default-features = false, path = "../metadata" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/tracing" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/arithmetic" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -frame-support-procedural = { version = "2.0.0-alpha.7", path = "./procedural" } +frame-metadata = { version = "11.0.0-dev", default-features = false, path = "../metadata" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../../primitives/tracing" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../../primitives/arithmetic" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +frame-support-procedural = { version = "2.0.0-dev", path = "./procedural" } paste = "0.1.6" once_cell = { version = "1", default-features = false, optional = true } -sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } bitmask = { version = "0.5.0", default-features = false } impl-trait-for-tuples = "0.1.3" [dev-dependencies] pretty_assertions = "0.6.1" -frame-system = { version = "2.0.0-alpha.7", path = "../system" } +frame-system = { version = "2.0.0-dev", path = "../system" } [features] default = ["std"] diff --git a/frame/support/procedural/Cargo.toml b/frame/support/procedural/Cargo.toml index 6364149e548..55e55134321 100644 --- a/frame/support/procedural/Cargo.toml +++ b/frame/support/procedural/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] proc-macro = true [dependencies] -frame-support-procedural-tools = { version = "2.0.0-alpha.7", path = "./tools" } +frame-support-procedural-tools = { version = "2.0.0-dev", path = "./tools" } proc-macro2 = "1.0.6" quote = "1.0.3" syn = { version = "1.0.7", features = ["full"] } diff --git a/frame/support/procedural/tools/Cargo.toml b/frame/support/procedural/tools/Cargo.toml index 88ab74a3c80..f64ad9b1e66 100644 --- a/frame/support/procedural/tools/Cargo.toml +++ b/frame/support/procedural/tools/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural-tools" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Proc macro helpers for procedural macros" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -frame-support-procedural-tools-derive = { version = "2.0.0-alpha.7", path = "./derive" } +frame-support-procedural-tools-derive = { version = "2.0.0-dev", path = "./derive" } proc-macro2 = "1.0.6" quote = "1.0.3" syn = { version = "1.0.7", features = ["full", "visit"] } diff --git a/frame/support/procedural/tools/derive/Cargo.toml b/frame/support/procedural/tools/derive/Cargo.toml index 0c396582a40..75721508e8f 100644 --- a/frame/support/procedural/tools/derive/Cargo.toml +++ b/frame/support/procedural/tools/derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-support-procedural-tools-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/frame/support/test/Cargo.toml b/frame/support/test/Cargo.toml index 55e2e70930c..77899788d2d 100644 --- a/frame/support/test/Cargo.toml +++ b/frame/support/test/Cargo.toml @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", default-features = false, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-io ={ path = "../../../primitives/io", default-features = false , version = "2.0.0-alpha.7"} -sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../../primitives/state-machine" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/inherents" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-io ={ path = "../../../primitives/io", default-features = false , version = "2.0.0-dev"} +sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../../primitives/state-machine" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/inherents" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } trybuild = "1.0.17" pretty_assertions = "0.6.1" rustversion = "1.0.0" diff --git a/frame/system/Cargo.toml b/frame/system/Cargo.toml index 50d1090bb7a..0e90009a166 100644 --- a/frame/system/Cargo.toml +++ b/frame/system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-alpha.7"} -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { path = "../../primitives/io", default-features = false, version = "2.0.0-dev"} +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] criterion = "0.2.11" -sp-externalities = { version = "0.8.0-alpha.7", path = "../../primitives/externalities" } +sp-externalities = { version = "0.8.0-dev", path = "../../primitives/externalities" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } [features] diff --git a/frame/system/benchmarking/Cargo.toml b/frame/system/benchmarking/Cargo.toml index 57394bff233..0518bd705dc 100644 --- a/frame/system/benchmarking/Cargo.toml +++ b/frame/system/benchmarking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system-benchmarking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,16 +13,16 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/runtime" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../../benchmarking" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../system" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../support" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } [dev-dependencies] serde = { version = "1.0.101" } -sp-io ={ path = "../../../primitives/io", version = "2.0.0-alpha.7"} +sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} [features] default = ["std"] diff --git a/frame/system/rpc/runtime-api/Cargo.toml b/frame/system/rpc/runtime-api/Cargo.toml index da276fe1f47..2097e112663 100644 --- a/frame/system/rpc/runtime-api/Cargo.toml +++ b/frame/system/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-system-rpc-runtime-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "Runtime API definition required by System RPC extensions." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } [features] diff --git a/frame/timestamp/Cargo.toml b/frame/timestamp/Cargo.toml index 2c0bef5e22e..7691421bbfe 100644 --- a/frame/timestamp/Cargo.toml +++ b/frame/timestamp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-timestamp" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,19 +16,19 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io", optional = true } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/timestamp" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io", optional = true } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../primitives/timestamp" } impl-trait-for-tuples = "0.1.3" [dev-dependencies] -sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/transaction-payment/Cargo.toml b/frame/transaction-payment/Cargo.toml index 4cc02b553c0..a969f300868 100644 --- a/frame/transaction-payment/Cargo.toml +++ b/frame/transaction-payment/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,17 +13,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "./rpc/runtime-api" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "./rpc/runtime-api" } [dev-dependencies] -sp-io = { version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } [features] default = ["std"] diff --git a/frame/transaction-payment/rpc/Cargo.toml b/frame/transaction-payment/rpc/Cargo.toml index c4a7cddbca0..35f421915af 100644 --- a/frame/transaction-payment/rpc/Cargo.toml +++ b/frame/transaction-payment/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,10 +16,10 @@ codec = { package = "parity-scale-codec", version = "1.3.0" } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sp-rpc = { version = "2.0.0-alpha.7", path = "../../../primitives/rpc" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-rpc = { version = "2.0.0-dev", path = "../../../primitives/rpc" } serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-alpha.7", path = "./runtime-api" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +pallet-transaction-payment-rpc-runtime-api = { version = "2.0.0-dev", path = "./runtime-api" } diff --git a/frame/transaction-payment/rpc/runtime-api/Cargo.toml b/frame/transaction-payment/rpc/runtime-api/Cargo.toml index 173c245a547..1170e043eea 100644 --- a/frame/transaction-payment/rpc/runtime-api/Cargo.toml +++ b/frame/transaction-payment/rpc/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-transaction-payment-rpc-runtime-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,11 +13,11 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/api" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/api" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../../support" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../support" } [dev-dependencies] serde_json = "1.0.41" diff --git a/frame/treasury/Cargo.toml b/frame/treasury/Cargo.toml index 91d2594e170..c00ae225c1e 100644 --- a/frame/treasury/Cargo.toml +++ b/frame/treasury/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-treasury" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,17 +14,17 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -pallet-balances = { version = "2.0.0-alpha.7", default-features = false, path = "../balances" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../balances" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-io ={ version = "2.0.0-alpha.7", path = "../../primitives/io" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } +sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } [features] default = ["std"] diff --git a/frame/utility/Cargo.toml b/frame/utility/Cargo.toml index 603d0ff8b71..a830f8ab5b5 100644 --- a/frame/utility/Cargo.toml +++ b/frame/utility/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-utility" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,18 +14,18 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } [features] default = ["std"] diff --git a/frame/vesting/Cargo.toml b/frame/vesting/Cargo.toml index 1927bae88aa..79430990c32 100644 --- a/frame/vesting/Cargo.toml +++ b/frame/vesting/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pallet-vesting" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,17 +15,17 @@ targets = ["x86_64-unknown-linux-gnu"] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } enumflags2 = { version = "0.6.2" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../support" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../system" } -frame-benchmarking = { version = "2.0.0-alpha.7", default-features = false, path = "../benchmarking", optional = true } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } [dev-dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -pallet-balances = { version = "2.0.0-alpha.7", path = "../balances" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../primitives/storage" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +sp-storage = { version = "2.0.0-dev", path = "../../primitives/storage" } hex-literal = "0.2.1" [features] diff --git a/primitives/allocator/Cargo.toml b/primitives/allocator/Cargo.toml index 398d5e6483a..8530e0df0e7 100644 --- a/primitives/allocator/Cargo.toml +++ b/primitives/allocator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-allocator" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,9 +13,9 @@ documentation = "https://docs.rs/sp-allocator" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-alpha.7", path = "../std", default-features = false } -sp-core = { version = "2.0.0-alpha.7", path = "../core", default-features = false } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../wasm-interface", default-features = false } +sp-std = { version = "2.0.0-dev", path = "../std", default-features = false } +sp-core = { version = "2.0.0-dev", path = "../core", default-features = false } +sp-wasm-interface = { version = "2.0.0-dev", path = "../wasm-interface", default-features = false } log = { version = "0.4.8", optional = true } derive_more = { version = "0.99.2", optional = true } diff --git a/primitives/api/Cargo.toml b/primitives/api/Cargo.toml index 821b17943dc..43decc4f6e6 100644 --- a/primitives/api/Cargo.toml +++ b/primitives/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-api" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,12 +13,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-api-proc-macro = { version = "2.0.0-alpha.7", path = "proc-macro" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../version" } -sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } +sp-api-proc-macro = { version = "2.0.0-dev", path = "proc-macro" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../version" } +sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } hash-db = { version = "0.15.2", optional = true } [dev-dependencies] diff --git a/primitives/api/proc-macro/Cargo.toml b/primitives/api/proc-macro/Cargo.toml index 3ea81d4f493..a970b3e750a 100644 --- a/primitives/api/proc-macro/Cargo.toml +++ b/primitives/api/proc-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-api-proc-macro" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/api/test/Cargo.toml b/primitives/api/test/Cargo.toml index 39caebf7b53..a945399f1b6 100644 --- a/primitives/api/test/Cargo.toml +++ b/primitives/api/test/Cargo.toml @@ -12,22 +12,22 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", path = "../" } +sp-api = { version = "2.0.0-dev", path = "../" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-version = { version = "2.0.0-alpha.7", path = "../../version" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../blockchain" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } +sp-version = { version = "2.0.0-dev", path = "../../version" } +sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } +sp-blockchain = { version = "2.0.0-dev", path = "../../blockchain" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } trybuild = "1.0.17" rustversion = "1.0.0" [dev-dependencies] criterion = "0.3.0" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-core = { version = "2.0.0-alpha.7", path = "../../core" } +sp-core = { version = "2.0.0-dev", path = "../../core" } [[bench]] name = "bench" diff --git a/primitives/application-crypto/Cargo.toml b/primitives/application-crypto/Cargo.toml index 812a05e0dc6..be9e5e5a111 100644 --- a/primitives/application-crypto/Cargo.toml +++ b/primitives/application-crypto/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-application-crypto" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" description = "Provides facilities for generating application specific crypto wrapper types." @@ -14,11 +14,11 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } [features] default = [ "std" ] diff --git a/primitives/application-crypto/test/Cargo.toml b/primitives/application-crypto/test/Cargo.toml index b99a51dfc39..47b477ddd37 100644 --- a/primitives/application-crypto/test/Cargo.toml +++ b/primitives/application-crypto/test/Cargo.toml @@ -13,8 +13,8 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../test-utils/runtime/client" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../api" } -sp-application-crypto = { version = "2.0.0-alpha.7", path = "../" } +sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } +sp-api = { version = "2.0.0-dev", path = "../../api" } +sp-application-crypto = { version = "2.0.0-dev", path = "../" } diff --git a/primitives/arithmetic/Cargo.toml b/primitives/arithmetic/Cargo.toml index d4ae60ac5e2..70efb4ac4a8 100644 --- a/primitives/arithmetic/Cargo.toml +++ b/primitives/arithmetic/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-arithmetic" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,9 +17,9 @@ targets = ["x86_64-unknown-linux-gnu"] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } integer-sqrt = "0.1.2" num-traits = { version = "0.2.8", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-debug-derive = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/debug-derive" } +sp-debug-derive = { version = "2.0.0-dev", default-features = false, path = "../../primitives/debug-derive" } primitive-types = { version = "0.7.0", default-features = false } [dev-dependencies] diff --git a/primitives/arithmetic/fuzzer/Cargo.toml b/primitives/arithmetic/fuzzer/Cargo.toml index fc4cb418405..f145c2cd904 100644 --- a/primitives/arithmetic/fuzzer/Cargo.toml +++ b/primitives/arithmetic/fuzzer/Cargo.toml @@ -14,7 +14,7 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-arithmetic = { version = "2.0.0-alpha.7", path = ".." } +sp-arithmetic = { version = "2.0.0-dev", path = ".." } honggfuzz = "0.5" primitive-types = "0.7.0" num-bigint = "0.2" diff --git a/primitives/authority-discovery/Cargo.toml b/primitives/authority-discovery/Cargo.toml index d458c2393ae..32f67d5e6e0 100644 --- a/primitives/authority-discovery/Cargo.toml +++ b/primitives/authority-discovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-authority-discovery" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Authority discovery primitives" edition = "2018" @@ -12,11 +12,11 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", default-features = false, version = "1.3.0" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/authorship/Cargo.toml b/primitives/authorship/Cargo.toml index c93ec6d71b1..7bc01953ef8 100644 --- a/primitives/authorship/Cargo.toml +++ b/primitives/authorship/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-authorship" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Authorship primitives" edition = "2018" @@ -12,9 +12,9 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/primitives/block-builder/Cargo.toml b/primitives/block-builder/Cargo.toml index a7d7aae86bb..70bb5e12d37 100644 --- a/primitives/block-builder/Cargo.toml +++ b/primitives/block-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-block-builder" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "The block builder runtime api." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } [features] default = [ "std" ] diff --git a/primitives/blockchain/Cargo.toml b/primitives/blockchain/Cargo.toml index 56ba7383ff9..d5cf80b7751 100644 --- a/primitives/blockchain/Cargo.toml +++ b/primitives/blockchain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-blockchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -19,7 +19,7 @@ lru = "0.4.0" parking_lot = "0.10.0" derive_more = "0.99.2" codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-consensus = { version = "0.8.0-alpha.7", path = "../consensus/common" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } -sp-block-builder = { version = "2.0.0-alpha.7", path = "../block-builder" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../state-machine" } +sp-consensus = { version = "0.8.0-dev", path = "../consensus/common" } +sp-runtime = { version = "2.0.0-dev", path = "../runtime" } +sp-block-builder = { version = "2.0.0-dev", path = "../block-builder" } +sp-state-machine = { version = "0.8.0-dev", path = "../state-machine" } diff --git a/primitives/chain-spec/Cargo.toml b/primitives/chain-spec/Cargo.toml index a98ee919373..585decc68d0 100644 --- a/primitives/chain-spec/Cargo.toml +++ b/primitives/chain-spec/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-chain-spec" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/consensus/aura/Cargo.toml b/primitives/consensus/aura/Cargo.toml index e7a0b33ba6a..574b80bd3d3 100644 --- a/primitives/consensus/aura/Cargo.toml +++ b/primitives/consensus/aura/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-aura" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Primitives for Aura consensus" edition = "2018" @@ -12,13 +12,13 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../inherents" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../timestamp" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../inherents" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../timestamp" } [features] default = ["std"] diff --git a/primitives/consensus/babe/Cargo.toml b/primitives/consensus/babe/Cargo.toml index b08b0f154f8..ca097d6a32d 100644 --- a/primitives/consensus/babe/Cargo.toml +++ b/primitives/consensus/babe/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-babe" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Primitives for BABE consensus" edition = "2018" @@ -12,16 +12,16 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } merlin = { version = "2.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } -sp-consensus = { version = "0.8.0-alpha.7", optional = true, path = "../common" } -sp-consensus-vrf = { version = "0.8.0-alpha.7", path = "../vrf", default-features = false } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../inherents" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } -sp-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../timestamp" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } +sp-consensus = { version = "0.8.0-dev", optional = true, path = "../common" } +sp-consensus-vrf = { version = "0.8.0-dev", path = "../vrf", default-features = false } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../inherents" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } +sp-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../timestamp" } [features] default = ["std"] diff --git a/primitives/consensus/common/Cargo.toml b/primitives/consensus/common/Cargo.toml index cbeb6961218..7101dde2fc3 100644 --- a/primitives/consensus/common/Cargo.toml +++ b/primitives/consensus/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,15 +17,15 @@ targets = ["x86_64-unknown-linux-gnu"] derive_more = "0.99.2" libp2p = { version = "0.18.1", default-features = false } log = "0.4.8" -sp-core = { path= "../../core", version = "2.0.0-alpha.7"} -sp-inherents = { version = "2.0.0-alpha.7", path = "../../inherents" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +sp-core = { path= "../../core", version = "2.0.0-dev"} +sp-inherents = { version = "2.0.0-dev", path = "../../inherents" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } futures = { version = "0.3.1", features = ["thread-pool"] } futures-timer = "3.0.1" -sp-std = { version = "2.0.0-alpha.7", path = "../../std" } -sp-version = { version = "2.0.0-alpha.7", path = "../../version" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } -sp-utils = { version = "2.0.0-alpha.7", path = "../../utils" } +sp-std = { version = "2.0.0-dev", path = "../../std" } +sp-version = { version = "2.0.0-dev", path = "../../version" } +sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } +sp-utils = { version = "2.0.0-dev", path = "../../utils" } codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } parking_lot = "0.10.0" serde = { version = "1.0", features = ["derive"] } diff --git a/primitives/consensus/pow/Cargo.toml b/primitives/consensus/pow/Cargo.toml index 20661704ee2..a7bcb6a000f 100644 --- a/primitives/consensus/pow/Cargo.toml +++ b/primitives/consensus/pow/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-pow" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Primitives for Aura consensus" edition = "2018" @@ -12,10 +12,10 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../api" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../api" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/primitives/consensus/vrf/Cargo.toml b/primitives/consensus/vrf/Cargo.toml index ff78cb4189f..92d8a77cb4e 100644 --- a/primitives/consensus/vrf/Cargo.toml +++ b/primitives/consensus/vrf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-consensus-vrf" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Primitives for VRF based consensus" edition = "2018" @@ -14,9 +14,9 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { version = "1.0.0", package = "parity-scale-codec", default-features = false } schnorrkel = { version = "0.9.1", features = ["preaudit_deprecated", "u64_backend"], default-features = false } -sp-std = { version = "2.0.0-alpha.7", path = "../../std", default-features = false } -sp-core = { version = "2.0.0-alpha.7", path = "../../core", default-features = false } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../runtime" } +sp-std = { version = "2.0.0-dev", path = "../../std", default-features = false } +sp-core = { version = "2.0.0-dev", path = "../../core", default-features = false } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../runtime" } [features] default = ["std"] diff --git a/primitives/core/Cargo.toml b/primitives/core/Cargo.toml index 0026f3a01fb..2ab23d23c4a 100644 --- a/primitives/core/Cargo.toml +++ b/primitives/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-core" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,7 +13,7 @@ documentation = "https://docs.rs/sp-core" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.8", default-features = false } serde = { version = "1.0.101", optional = true, features = ["derive"] } @@ -32,9 +32,9 @@ num-traits = { version = "0.2.8", default-features = false } zeroize = { version = "1.0.0", default-features = false } lazy_static = { version = "1.4.0", default-features = false, optional = true } parking_lot = { version = "0.10.0", optional = true } -sp-debug-derive = { version = "2.0.0-alpha.7", path = "../debug-derive" } -sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } -sp-storage = { version = "2.0.0-alpha.7", default-features = false, path = "../storage" } +sp-debug-derive = { version = "2.0.0-dev", path = "../debug-derive" } +sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } +sp-storage = { version = "2.0.0-dev", default-features = false, path = "../storage" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } futures = { version = "0.3.1", optional = true } @@ -49,10 +49,10 @@ twox-hash = { version = "1.5.0", default-features = false, optional = true } libsecp256k1 = { version = "0.3.2", default-features = false, features = ["hmac"], optional = true } merlin = { version = "2.0", default-features = false, optional = true } -sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime-interface" } +sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../runtime-interface" } [dev-dependencies] -sp-serializer = { version = "2.0.0-alpha.7", path = "../serializer" } +sp-serializer = { version = "2.0.0-dev", path = "../serializer" } pretty_assertions = "0.6.1" hex-literal = "0.2.1" rand = "0.7.2" diff --git a/primitives/database/Cargo.toml b/primitives/database/Cargo.toml index fd437a91e4a..2ab86de61d6 100644 --- a/primitives/database/Cargo.toml +++ b/primitives/database/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-database" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/debug-derive/Cargo.toml b/primitives/debug-derive/Cargo.toml index f7ba39093a2..a3e9d91fd28 100644 --- a/primitives/debug-derive/Cargo.toml +++ b/primitives/debug-derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-debug-derive" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/externalities/Cargo.toml b/primitives/externalities/Cargo.toml index 0fb4318a716..9d7cd1df6b7 100644 --- a/primitives/externalities/Cargo.toml +++ b/primitives/externalities/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-externalities" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -13,7 +13,7 @@ documentation = "https://docs.rs/sp-externalities" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-storage = { version = "2.0.0-alpha.7", path = "../storage" } -sp-std = { version = "2.0.0-alpha.7", path = "../std" } +sp-storage = { version = "2.0.0-dev", path = "../storage" } +sp-std = { version = "2.0.0-dev", path = "../std" } environmental = { version = "1.1.1" } codec = { package = "parity-scale-codec", version = "1.3.0" } diff --git a/primitives/finality-grandpa/Cargo.toml b/primitives/finality-grandpa/Cargo.toml index 0ea55d4daeb..b5ce970c0d8 100644 --- a/primitives/finality-grandpa/Cargo.toml +++ b/primitives/finality-grandpa/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-finality-grandpa" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,12 +14,12 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/finality-tracker/Cargo.toml b/primitives/finality-tracker/Cargo.toml index 96171fb3326..a111c626752 100644 --- a/primitives/finality-tracker/Cargo.toml +++ b/primitives/finality-tracker/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-finality-tracker" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,8 +13,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } [features] default = ["std"] diff --git a/primitives/inherents/Cargo.toml b/primitives/inherents/Cargo.toml index e1b21984bd4..084d275882a 100644 --- a/primitives/inherents/Cargo.toml +++ b/primitives/inherents/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-inherents" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,8 +15,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] parking_lot = { version = "0.10.0", optional = true } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } derive_more = { version = "0.99.2", optional = true } diff --git a/primitives/io/Cargo.toml b/primitives/io/Cargo.toml index d089765e13f..93c8cc9d38b 100644 --- a/primitives/io/Cargo.toml +++ b/primitives/io/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-io" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,14 +16,14 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } hash-db = { version = "0.15.2", default-features = false } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } libsecp256k1 = { version = "0.3.4", optional = true } -sp-state-machine = { version = "0.8.0-alpha.7", optional = true, path = "../../primitives/state-machine" } -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../../primitives/wasm-interface", default-features = false } -sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime-interface" } -sp-trie = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/trie" } -sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } +sp-state-machine = { version = "0.8.0-dev", optional = true, path = "../../primitives/state-machine" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../../primitives/wasm-interface", default-features = false } +sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../runtime-interface" } +sp-trie = { version = "2.0.0-dev", optional = true, path = "../../primitives/trie" } +sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } log = { version = "0.4.8", optional = true } futures = { version = "0.3.1", features = ["thread-pool"], optional = true } parking_lot = { version = "0.10.0", optional = true } diff --git a/primitives/keyring/Cargo.toml b/primitives/keyring/Cargo.toml index 6a7dd97ff53..23e243239a5 100644 --- a/primitives/keyring/Cargo.toml +++ b/primitives/keyring/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-keyring" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,7 +14,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", path = "../core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-core = { version = "2.0.0-dev", path = "../core" } +sp-runtime = { version = "2.0.0-dev", path = "../runtime" } lazy_static = "1.4.0" strum = { version = "0.16.0", features = ["derive"] } diff --git a/primitives/offchain/Cargo.toml b/primitives/offchain/Cargo.toml index 9b6773827dd..ebd0fa12d41 100644 --- a/primitives/offchain/Cargo.toml +++ b/primitives/offchain/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Substrate offchain workers primitives" name = "sp-offchain" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" @@ -12,12 +12,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } [dev-dependencies] -sp-state-machine = { version = "0.8.0-alpha.7", default-features = false, path = "../state-machine" } +sp-state-machine = { version = "0.8.0-dev", default-features = false, path = "../state-machine" } [features] default = ["std"] diff --git a/primitives/panic-handler/Cargo.toml b/primitives/panic-handler/Cargo.toml index 251d6e761e4..b5adb9cb548 100644 --- a/primitives/panic-handler/Cargo.toml +++ b/primitives/panic-handler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-panic-handler" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/phragmen/Cargo.toml b/primitives/phragmen/Cargo.toml index c0f5ebdd494..29fc0ed41e4 100644 --- a/primitives/phragmen/Cargo.toml +++ b/primitives/phragmen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-phragmen" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -14,15 +14,15 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.0.0", default-features = false, features = ["derive"] } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-phragmen-compact = { version = "2.0.0-alpha.7", path = "./compact" } -sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../arithmetic" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-phragmen-compact = { version = "2.0.0-dev", path = "./compact" } +sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../arithmetic" } [dev-dependencies] -substrate-test-utils = { version = "2.0.0-alpha.7", path = "../../test-utils" } +substrate-test-utils = { version = "2.0.0-dev", path = "../../test-utils" } rand = "0.7.3" -sp-phragmen = { version = "2.0.0-alpha.7", path = "." } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } +sp-phragmen = { version = "2.0.0-dev", path = "." } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } [features] default = ["std"] diff --git a/primitives/phragmen/compact/Cargo.toml b/primitives/phragmen/compact/Cargo.toml index cff5f5e7e34..386116f2683 100644 --- a/primitives/phragmen/compact/Cargo.toml +++ b/primitives/phragmen/compact/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-phragmen-compact" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/phragmen/fuzzer/Cargo.toml b/primitives/phragmen/fuzzer/Cargo.toml index 5364e74605c..7f7aef1961d 100644 --- a/primitives/phragmen/fuzzer/Cargo.toml +++ b/primitives/phragmen/fuzzer/Cargo.toml @@ -14,9 +14,9 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-phragmen = { version = "2.0.0-alpha.7", path = ".." } -sp-std = { version = "2.0.0-alpha.7", path = "../../std" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } +sp-phragmen = { version = "2.0.0-dev", path = ".." } +sp-std = { version = "2.0.0-dev", path = "../../std" } +sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } honggfuzz = "0.5" rand = { version = "0.7.3", features = ["std", "small_rng"] } diff --git a/primitives/rpc/Cargo.toml b/primitives/rpc/Cargo.toml index 9db6dd53f84..740b429c0c8 100644 --- a/primitives/rpc/Cargo.toml +++ b/primitives/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-rpc" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,7 +13,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", path = "../core" } +sp-core = { version = "2.0.0-dev", path = "../core" } [dev-dependencies] serde_json = "1.0.41" diff --git a/primitives/runtime-interface/Cargo.toml b/primitives/runtime-interface/Cargo.toml index 902a43b2215..1d0ae8f9512 100644 --- a/primitives/runtime-interface/Cargo.toml +++ b/primitives/runtime-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime-interface" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,20 +13,20 @@ documentation = "https://docs.rs/sp-runtime-interface/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-wasm-interface = { version = "2.0.0-alpha.7", path = "../wasm-interface", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-tracing = { version = "2.0.0-alpha.7", default-features = false, path = "../tracing" } -sp-runtime-interface-proc-macro = { version = "2.0.0-alpha.7", path = "proc-macro" } -sp-externalities = { version = "0.8.0-alpha.7", optional = true, path = "../externalities" } +sp-wasm-interface = { version = "2.0.0-dev", path = "../wasm-interface", default-features = false } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-tracing = { version = "2.0.0-dev", default-features = false, path = "../tracing" } +sp-runtime-interface-proc-macro = { version = "2.0.0-dev", path = "proc-macro" } +sp-externalities = { version = "0.8.0-dev", optional = true, path = "../externalities" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } static_assertions = "1.0.0" primitive-types = { version = "0.7.0", default-features = false } [dev-dependencies] sp-runtime-interface-test-wasm = { version = "2.0.0-dev", path = "test-wasm" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } -sp-core = { version = "2.0.0-alpha.7", path = "../core" } -sp-io = { version = "2.0.0-alpha.7", path = "../io" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } +sp-core = { version = "2.0.0-dev", path = "../core" } +sp-io = { version = "2.0.0-dev", path = "../io" } rustversion = "1.0.0" trybuild = "1.0.23" diff --git a/primitives/runtime-interface/proc-macro/Cargo.toml b/primitives/runtime-interface/proc-macro/Cargo.toml index 146323718e1..28fe00cc390 100644 --- a/primitives/runtime-interface/proc-macro/Cargo.toml +++ b/primitives/runtime-interface/proc-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime-interface-proc-macro" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml b/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml index 8314a7f65db..f992cad69b0 100644 --- a/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml +++ b/primitives/runtime-interface/test-wasm-deprecated/Cargo.toml @@ -13,10 +13,10 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../io" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } +sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../io" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/primitives/runtime-interface/test-wasm/Cargo.toml b/primitives/runtime-interface/test-wasm/Cargo.toml index eb851829ab0..f9e64a5027a 100644 --- a/primitives/runtime-interface/test-wasm/Cargo.toml +++ b/primitives/runtime-interface/test-wasm/Cargo.toml @@ -13,10 +13,10 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../io" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../core" } +sp-runtime-interface = { version = "2.0.0-dev", default-features = false, path = "../" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../io" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../core" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../../utils/wasm-builder-runner" } diff --git a/primitives/runtime-interface/test/Cargo.toml b/primitives/runtime-interface/test/Cargo.toml index 2f73678300e..03f0122b220 100644 --- a/primitives/runtime-interface/test/Cargo.toml +++ b/primitives/runtime-interface/test/Cargo.toml @@ -12,12 +12,12 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-runtime-interface = { version = "2.0.0-alpha.7", path = "../" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } +sp-runtime-interface = { version = "2.0.0-dev", path = "../" } +sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } sp-runtime-interface-test-wasm = { version = "2.0.0-dev", path = "../test-wasm" } sp-runtime-interface-test-wasm-deprecated = { version = "2.0.0-dev", path = "../test-wasm-deprecated" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../runtime" } -sp-core = { version = "2.0.0-alpha.7", path = "../../core" } -sp-io = { version = "2.0.0-alpha.7", path = "../../io" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } +sp-runtime = { version = "2.0.0-dev", path = "../../runtime" } +sp-core = { version = "2.0.0-dev", path = "../../core" } +sp-io = { version = "2.0.0-dev", path = "../../io" } tracing = "0.1.13" diff --git a/primitives/runtime/Cargo.toml b/primitives/runtime/Cargo.toml index 4eba56e881f..dcb0e226009 100644 --- a/primitives/runtime/Cargo.toml +++ b/primitives/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-runtime" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -16,23 +16,23 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } -sp-arithmetic = { version = "2.0.0-alpha.7", default-features = false, path = "../arithmetic" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../io" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } +sp-arithmetic = { version = "2.0.0-dev", default-features = false, path = "../arithmetic" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../io" } log = { version = "0.4.8", optional = true } paste = "0.1.6" rand = { version = "0.7.2", optional = true } impl-trait-for-tuples = "0.1.3" -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } hash256-std-hasher = { version = "0.15.2", default-features = false } [dev-dependencies] serde_json = "1.0.41" rand = "0.7.2" -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } [features] bench = [] diff --git a/primitives/sandbox/Cargo.toml b/primitives/sandbox/Cargo.toml index 9f8263e68d5..a64854424ec 100755 --- a/primitives/sandbox/Cargo.toml +++ b/primitives/sandbox/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-sandbox" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,10 +13,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] wasmi = { version = "0.6.2", optional = true } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../io" } -sp-wasm-interface = { version = "2.0.0-alpha.7", default-features = false, path = "../wasm-interface" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-io = { version = "2.0.0-dev", default-features = false, path = "../io" } +sp-wasm-interface = { version = "2.0.0-dev", default-features = false, path = "../wasm-interface" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } [dev-dependencies] diff --git a/primitives/serializer/Cargo.toml b/primitives/serializer/Cargo.toml index 65682c6d331..187c0e532fe 100644 --- a/primitives/serializer/Cargo.toml +++ b/primitives/serializer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-serializer" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/session/Cargo.toml b/primitives/session/Cargo.toml index ac9eddcc55c..6d210b341f4 100644 --- a/primitives/session/Cargo.toml +++ b/primitives/session/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-session" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,10 +12,10 @@ description = "Primitives for sessions" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } -sp-runtime = { version = "2.0.0-alpha.7", optional = true, path = "../runtime" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-runtime = { version = "2.0.0-dev", optional = true, path = "../runtime" } [features] default = [ "std" ] diff --git a/primitives/staking/Cargo.toml b/primitives/staking/Cargo.toml index 3892ddd4a35..28907a75d39 100644 --- a/primitives/staking/Cargo.toml +++ b/primitives/staking/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-staking" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -13,8 +13,8 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } [features] default = ["std"] diff --git a/primitives/state-machine/Cargo.toml b/primitives/state-machine/Cargo.toml index ed43b94d109..1d608ea6fcb 100644 --- a/primitives/state-machine/Cargo.toml +++ b/primitives/state-machine/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-state-machine" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Substrate State Machine" edition = "2018" @@ -18,17 +18,17 @@ parking_lot = "0.10.0" hash-db = "0.15.2" trie-db = "0.20.1" trie-root = "0.16.0" -sp-trie = { version = "2.0.0-alpha.7", path = "../trie" } -sp-core = { version = "2.0.0-alpha.7", path = "../core" } -sp-panic-handler = { version = "2.0.0-alpha.7", path = "../panic-handler" } +sp-trie = { version = "2.0.0-dev", path = "../trie" } +sp-core = { version = "2.0.0-dev", path = "../core" } +sp-panic-handler = { version = "2.0.0-dev", path = "../panic-handler" } codec = { package = "parity-scale-codec", version = "1.3.0" } num-traits = "0.2.8" rand = "0.7.2" -sp-externalities = { version = "0.8.0-alpha.7", path = "../externalities" } +sp-externalities = { version = "0.8.0-dev", path = "../externalities" } [dev-dependencies] hex-literal = "0.2.1" -sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../runtime" } [features] default = [] diff --git a/primitives/std/Cargo.toml b/primitives/std/Cargo.toml index 92e2bac30cd..2b58167f17e 100644 --- a/primitives/std/Cargo.toml +++ b/primitives/std/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-std" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/storage/Cargo.toml b/primitives/storage/Cargo.toml index 364ed5d7315..76174d13b03 100644 --- a/primitives/storage/Cargo.toml +++ b/primitives/storage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-storage" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" description = "Storage related primitives" @@ -13,11 +13,11 @@ documentation = "https://docs.rs/sp-storage/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } serde = { version = "1.0.101", optional = true, features = ["derive"] } impl-serde = { version = "0.2.3", optional = true } ref-cast = "1.0.0" -sp-debug-derive = { version = "2.0.0-alpha.7", path = "../debug-derive" } +sp-debug-derive = { version = "2.0.0-dev", path = "../debug-derive" } [features] default = [ "std" ] diff --git a/primitives/test-primitives/Cargo.toml b/primitives/test-primitives/Cargo.toml index e158d56473c..386f7be17c9 100644 --- a/primitives/test-primitives/Cargo.toml +++ b/primitives/test-primitives/Cargo.toml @@ -12,11 +12,11 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../application-crypto" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } serde = { version = "1.0.101", optional = true, features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } [features] diff --git a/primitives/timestamp/Cargo.toml b/primitives/timestamp/Cargo.toml index 5780ec879ae..9de079d1a79 100644 --- a/primitives/timestamp/Cargo.toml +++ b/primitives/timestamp/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-timestamp" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,11 +12,11 @@ description = "Substrate core types and inherents for timestamps." targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../inherents" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../inherents" } impl-trait-for-tuples = "0.1.3" wasm-timer = { version = "0.2", optional = true } diff --git a/primitives/tracing/Cargo.toml b/primitives/tracing/Cargo.toml index 09ac1f4ac68..8eb3bc2beaa 100644 --- a/primitives/tracing/Cargo.toml +++ b/primitives/tracing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-tracing" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" diff --git a/primitives/transaction-pool/Cargo.toml b/primitives/transaction-pool/Cargo.toml index 80451163d61..b33687246f7 100644 --- a/primitives/transaction-pool/Cargo.toml +++ b/primitives/transaction-pool/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-transaction-pool" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -19,9 +19,9 @@ derive_more = { version = "0.99.2", optional = true } futures = { version = "0.3.1", optional = true } log = { version = "0.4.8", optional = true } serde = { version = "1.0.101", features = ["derive"], optional = true} -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } -sp-utils = { version = "2.0.0-alpha.7", default-features = false, path = "../utils" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-utils = { version = "2.0.0-dev", default-features = false, path = "../utils" } [features] default = [ "std" ] diff --git a/primitives/trie/Cargo.toml b/primitives/trie/Cargo.toml index 5faf67bf0fe..c010b3262d7 100644 --- a/primitives/trie/Cargo.toml +++ b/primitives/trie/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-trie" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] description = "Patricia trie stuff using a parity-scale-codec node format" repository = "https://github.com/paritytech/substrate/" @@ -18,19 +18,19 @@ harness = false [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } hash-db = { version = "0.15.2", default-features = false } trie-db = { version = "0.20.1", default-features = false } trie-root = { version = "0.16.0", default-features = false } memory-db = { version = "0.20.0", default-features = false } -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../core" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } [dev-dependencies] trie-bench = "0.21.0" trie-standardmap = "0.15.2" criterion = "0.2.11" hex-literal = "0.2.1" -sp-runtime = { version = "2.0.0-alpha.7", path = "../runtime" } +sp-runtime = { version = "2.0.0-dev", path = "../runtime" } [features] default = ["std"] diff --git a/primitives/utils/Cargo.toml b/primitives/utils/Cargo.toml index 4157dba34c1..79a3a331547 100644 --- a/primitives/utils/Cargo.toml +++ b/primitives/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/primitives/version/Cargo.toml b/primitives/version/Cargo.toml index d711cdec299..1d492ee41c4 100644 --- a/primitives/version/Cargo.toml +++ b/primitives/version/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-version" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -17,8 +17,8 @@ targets = ["x86_64-unknown-linux-gnu"] impl-serde = { version = "0.2.3", optional = true } serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../std" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } [features] default = ["std"] diff --git a/primitives/wasm-interface/Cargo.toml b/primitives/wasm-interface/Cargo.toml index 23bffc94376..8bea87d4902 100644 --- a/primitives/wasm-interface/Cargo.toml +++ b/primitives/wasm-interface/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sp-wasm-interface" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] wasmi = { version = "0.6.2", optional = true } impl-trait-for-tuples = "0.1.2" -sp-std = { version = "2.0.0-alpha.7", path = "../std", default-features = false } +sp-std = { version = "2.0.0-dev", path = "../std", default-features = false } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } [features] diff --git a/test-utils/Cargo.toml b/test-utils/Cargo.toml index c4d923b50cd..43979be5532 100644 --- a/test-utils/Cargo.toml +++ b/test-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-test-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/test-utils/client/Cargo.toml b/test-utils/client/Cargo.toml index e4d0e83d72a..37c99292ec9 100644 --- a/test-utils/client/Cargo.toml +++ b/test-utils/client/Cargo.toml @@ -12,17 +12,17 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-alpha.7", path = "../../client/api" } -sc-client-db = { version = "0.8.0-alpha.7", features = ["test-helpers"], path = "../../client/db" } -sp-consensus = { version = "0.8.0-alpha.7", path = "../../primitives/consensus/common" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../client/executor" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../client/consensus/common" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, features = ["test-helpers"], path = "../../client/service" } +sc-client-api = { version = "2.0.0-dev", path = "../../client/api" } +sc-client-db = { version = "0.8.0-dev", features = ["test-helpers"], path = "../../client/db" } +sp-consensus = { version = "0.8.0-dev", path = "../../primitives/consensus/common" } +sc-executor = { version = "0.8.0-dev", path = "../../client/executor" } +sc-consensus = { version = "0.8.0-dev", path = "../../client/consensus/common" } +sc-service = { version = "0.8.0-dev", default-features = false, features = ["test-helpers"], path = "../../client/service" } futures = "0.3.4" hash-db = "0.15.2" -sp-keyring = { version = "2.0.0-alpha.7", path = "../../primitives/keyring" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-core = { version = "2.0.0-alpha.7", path = "../../primitives/core" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../primitives/runtime" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../primitives/blockchain" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-core = { version = "2.0.0-dev", path = "../../primitives/core" } +sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } +sp-blockchain = { version = "2.0.0-dev", path = "../../primitives/blockchain" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } diff --git a/test-utils/runtime/Cargo.toml b/test-utils/runtime/Cargo.toml index f2e9814d1ce..f4582d0b709 100644 --- a/test-utils/runtime/Cargo.toml +++ b/test-utils/runtime/Cargo.toml @@ -13,34 +13,34 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-application-crypto = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/application-crypto" } -sp-consensus-aura = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/aura" } -sp-consensus-babe = { version = "0.8.0-alpha.7", default-features = false, path = "../../primitives/consensus/babe" } -sp-block-builder = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/block-builder" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } +sp-consensus-aura = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/aura" } +sp-consensus-babe = { version = "0.8.0-dev", default-features = false, path = "../../primitives/consensus/babe" } +sp-block-builder = { version = "2.0.0-dev", default-features = false, path = "../../primitives/block-builder" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -frame-executive = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/executive" } -sp-inherents = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/inherents" } -sp-keyring = { version = "2.0.0-alpha.7", optional = true, path = "../../primitives/keyring" } +frame-executive = { version = "2.0.0-dev", default-features = false, path = "../../frame/executive" } +sp-inherents = { version = "2.0.0-dev", default-features = false, path = "../../primitives/inherents" } +sp-keyring = { version = "2.0.0-dev", optional = true, path = "../../primitives/keyring" } memory-db = { version = "0.20.0", default-features = false } -sp-offchain = { path = "../../primitives/offchain", default-features = false, version = "2.0.0-alpha.7"} -sp-core = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/core" } -sp-std = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/std" } -sp-runtime-interface = { path = "../../primitives/runtime-interface", default-features = false, version = "2.0.0-alpha.7"} -sp-io = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/io" } -frame-support = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/support" } -sp-version = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/version" } -sp-session = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/session" } -sp-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/api" } -sp-runtime = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/runtime" } -pallet-babe = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/babe" } -frame-system = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/system" } -frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/system/rpc/runtime-api" } -pallet-timestamp = { version = "2.0.0-alpha.7", default-features = false, path = "../../frame/timestamp" } -sp-trie = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/trie" } -sp-transaction-pool = { version = "2.0.0-alpha.7", default-features = false, path = "../../primitives/transaction-pool" } +sp-offchain = { path = "../../primitives/offchain", default-features = false, version = "2.0.0-dev"} +sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } +sp-runtime-interface = { path = "../../primitives/runtime-interface", default-features = false, version = "2.0.0-dev"} +sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-support = { version = "2.0.0-dev", default-features = false, path = "../../frame/support" } +sp-version = { version = "2.0.0-dev", default-features = false, path = "../../primitives/version" } +sp-session = { version = "2.0.0-dev", default-features = false, path = "../../primitives/session" } +sp-api = { version = "2.0.0-dev", default-features = false, path = "../../primitives/api" } +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../frame/babe" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../frame/system" } +frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../frame/system/rpc/runtime-api" } +pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../frame/timestamp" } +sp-trie = { version = "2.0.0-dev", default-features = false, path = "../../primitives/trie" } +sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../primitives/transaction-pool" } trie-db = { version = "0.20.1", default-features = false } parity-util-mem = { version = "0.6.1", default-features = false, features = ["primitive-types"] } -sc-service = { version = "0.8.0-alpha.7", default-features = false, optional = true, features = ["test-helpers"], path = "../../client/service" } +sc-service = { version = "0.8.0-dev", default-features = false, optional = true, features = ["test-helpers"], path = "../../client/service" } # 3rd party cfg-if = "0.1.10" @@ -48,10 +48,10 @@ log = { version = "0.4.8", optional = true } serde = { version = "1.0.101", optional = true, features = ["derive"] } [dev-dependencies] -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../client/block-builder" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../client/executor" } +sc-block-builder = { version = "0.8.0-dev", path = "../../client/block-builder" } +sc-executor = { version = "0.8.0-dev", path = "../../client/executor" } substrate-test-runtime-client = { version = "2.0.0-dev", path = "./client" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../primitives/state-machine" } +sp-state-machine = { version = "0.8.0-dev", path = "../../primitives/state-machine" } [build-dependencies] wasm-builder-runner = { version = "1.0.5", package = "substrate-wasm-builder-runner", path = "../../utils/wasm-builder-runner" } diff --git a/test-utils/runtime/client/Cargo.toml b/test-utils/runtime/client/Cargo.toml index 72d507b9aaf..f622878404f 100644 --- a/test-utils/runtime/client/Cargo.toml +++ b/test-utils/runtime/client/Cargo.toml @@ -12,16 +12,16 @@ publish = false targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sp-consensus = { version = "0.8.0-alpha.7", path = "../../../primitives/consensus/common" } -sc-block-builder = { version = "0.8.0-alpha.7", path = "../../../client/block-builder" } +sp-consensus = { version = "0.8.0-dev", path = "../../../primitives/consensus/common" } +sc-block-builder = { version = "0.8.0-dev", path = "../../../client/block-builder" } substrate-test-client = { version = "2.0.0-dev", path = "../../client" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } substrate-test-runtime = { version = "2.0.0-dev", path = "../../runtime" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../primitives/api" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../primitives/api" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } codec = { package = "parity-scale-codec", version = "1.3.0" } -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../client/api" } -sc-consensus = { version = "0.8.0-alpha.7", path = "../../../client/consensus/common" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } +sc-client-api = { version = "2.0.0-dev", path = "../../../client/api" } +sc-consensus = { version = "0.8.0-dev", path = "../../../client/consensus/common" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } futures = "0.3.4" diff --git a/test-utils/runtime/transaction-pool/Cargo.toml b/test-utils/runtime/transaction-pool/Cargo.toml index ace69374374..9ccf9d2e448 100644 --- a/test-utils/runtime/transaction-pool/Cargo.toml +++ b/test-utils/runtime/transaction-pool/Cargo.toml @@ -15,9 +15,9 @@ targets = ["x86_64-unknown-linux-gnu"] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../client" } parking_lot = "0.10.0" codec = { package = "parity-scale-codec", version = "1.3.0" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../primitives/blockchain" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../primitives/transaction-pool" } -sc-transaction-graph = { version = "2.0.0-alpha.7", path = "../../../client/transaction-pool/graph" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../primitives/blockchain" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../primitives/transaction-pool" } +sc-transaction-graph = { version = "2.0.0-dev", path = "../../../client/transaction-pool/graph" } futures = { version = "0.3.1", features = ["compat"] } derive_more = "0.99.2" diff --git a/utils/browser/Cargo.toml b/utils/browser/Cargo.toml index 63f5467e9a9..868f32e34ab 100644 --- a/utils/browser/Cargo.toml +++ b/utils/browser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-browser-utils" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" authors = ["Parity Technologies "] description = "Utilities for creating a browser light-client." edition = "2018" @@ -22,11 +22,11 @@ js-sys = "0.3.34" wasm-bindgen = "0.2.57" wasm-bindgen-futures = "0.4.7" kvdb-web = "0.5" -sp-database = { version = "2.0.0-alpha.7", path = "../../primitives/database" } -sc-informant = { version = "0.8.0-alpha.7", path = "../../client/informant" } -sc-service = { version = "0.8.0-alpha.7", path = "../../client/service", default-features = false } -sc-network = { path = "../../client/network", version = "0.8.0-alpha.7"} -sc-chain-spec = { path = "../../client/chain-spec", version = "2.0.0-alpha.7"} +sp-database = { version = "2.0.0-dev", path = "../../primitives/database" } +sc-informant = { version = "0.8.0-dev", path = "../../client/informant" } +sc-service = { version = "0.8.0-dev", path = "../../client/service", default-features = false } +sc-network = { path = "../../client/network", version = "0.8.0-dev"} +sc-chain-spec = { path = "../../client/chain-spec", version = "2.0.0-dev"} # Imported just for the `no_cc` feature clear_on_drop = { version = "0.2.3", features = ["no_cc"] } diff --git a/utils/build-script-utils/Cargo.toml b/utils/build-script-utils/Cargo.toml index 6710a142621..89c584808ab 100644 --- a/utils/build-script-utils/Cargo.toml +++ b/utils/build-script-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-build-script-utils" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/utils/fork-tree/Cargo.toml b/utils/fork-tree/Cargo.toml index 24662dedf48..c18826d16fe 100644 --- a/utils/fork-tree/Cargo.toml +++ b/utils/fork-tree/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fork-tree" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" diff --git a/utils/frame/benchmarking-cli/Cargo.toml b/utils/frame/benchmarking-cli/Cargo.toml index b71cc35ae3d..b02f42d7593 100644 --- a/utils/frame/benchmarking-cli/Cargo.toml +++ b/utils/frame/benchmarking-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "frame-benchmarking-cli" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,15 +12,15 @@ description = "CLI for benchmarking FRAME" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -frame-benchmarking = { version = "2.0.0-alpha.7", path = "../../../frame/benchmarking" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../primitives/core" } -sc-service = { version = "0.8.0-alpha.7", default-features = false, path = "../../../client/service" } -sc-cli = { version = "0.8.0-alpha.7", path = "../../../client/cli" } -sc-client-db = { version = "0.8.0-alpha.7", path = "../../../client/db" } -sc-executor = { version = "0.8.0-alpha.7", path = "../../../client/executor" } -sp-externalities = { version = "0.8.0-alpha.7", path = "../../../primitives/externalities" } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../primitives/runtime" } -sp-state-machine = { version = "0.8.0-alpha.7", path = "../../../primitives/state-machine" } +frame-benchmarking = { version = "2.0.0-dev", path = "../../../frame/benchmarking" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sc-service = { version = "0.8.0-dev", default-features = false, path = "../../../client/service" } +sc-cli = { version = "0.8.0-dev", path = "../../../client/cli" } +sc-client-db = { version = "0.8.0-dev", path = "../../../client/db" } +sc-executor = { version = "0.8.0-dev", path = "../../../client/executor" } +sp-externalities = { version = "0.8.0-dev", path = "../../../primitives/externalities" } +sp-runtime = { version = "2.0.0-dev", path = "../../../primitives/runtime" } +sp-state-machine = { version = "0.8.0-dev", path = "../../../primitives/state-machine" } structopt = "0.3.8" codec = { version = "1.3.0", package = "parity-scale-codec" } diff --git a/utils/frame/rpc/support/Cargo.toml b/utils/frame/rpc/support/Cargo.toml index a6b2209831e..c635471bb93 100644 --- a/utils/frame/rpc/support/Cargo.toml +++ b/utils/frame/rpc/support/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-frame-rpc-support" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies ", "Andrew Dirksen "] edition = "2018" license = "GPL-3.0" @@ -17,10 +17,10 @@ jsonrpc-client-transports = { version = "14.0.5", default-features = false, feat jsonrpc-core = "14" codec = { package = "parity-scale-codec", version = "1" } serde = "1" -frame-support = { version = "2.0.0-alpha.7", path = "../../../../frame/support" } -sp-storage = { version = "2.0.0-alpha.7", path = "../../../../primitives/storage" } -sc-rpc-api = { version = "0.8.0-alpha.7", path = "../../../../client/rpc-api" } +frame-support = { version = "2.0.0-dev", path = "../../../../frame/support" } +sp-storage = { version = "2.0.0-dev", path = "../../../../primitives/storage" } +sc-rpc-api = { version = "0.8.0-dev", path = "../../../../client/rpc-api" } [dev-dependencies] -frame-system = { version = "2.0.0-alpha.7", path = "../../../../frame/system" } +frame-system = { version = "2.0.0-dev", path = "../../../../frame/system" } tokio = "0.2" diff --git a/utils/frame/rpc/system/Cargo.toml b/utils/frame/rpc/system/Cargo.toml index befb5ef5b6b..7d57e6b9882 100644 --- a/utils/frame/rpc/system/Cargo.toml +++ b/utils/frame/rpc/system/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-frame-rpc-system" -version = "2.0.0-alpha.7" +version = "2.0.0-dev" authors = ["Parity Technologies "] edition = "2018" license = "GPL-3.0" @@ -12,7 +12,7 @@ description = "FRAME's system exposed over Substrate RPC" targets = ["x86_64-unknown-linux-gnu"] [dependencies] -sc-client-api = { version = "2.0.0-alpha.7", path = "../../../../client/api" } +sc-client-api = { version = "2.0.0-dev", path = "../../../../client/api" } codec = { package = "parity-scale-codec", version = "1.3.0" } futures = { version = "0.3.4", features = ["compat"] } jsonrpc-core = "14.0.3" @@ -20,14 +20,14 @@ jsonrpc-core-client = "14.0.5" jsonrpc-derive = "14.0.3" log = "0.4.8" serde = { version = "1.0.101", features = ["derive"] } -sp-runtime = { version = "2.0.0-alpha.7", path = "../../../../primitives/runtime" } -sp-api = { version = "2.0.0-alpha.7", path = "../../../../primitives/api" } -frame-system-rpc-runtime-api = { version = "2.0.0-alpha.7", path = "../../../../frame/system/rpc/runtime-api" } -sp-core = { version = "2.0.0-alpha.7", path = "../../../../primitives/core" } -sp-blockchain = { version = "2.0.0-alpha.7", path = "../../../../primitives/blockchain" } -sp-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../../primitives/transaction-pool" } +sp-runtime = { version = "2.0.0-dev", path = "../../../../primitives/runtime" } +sp-api = { version = "2.0.0-dev", path = "../../../../primitives/api" } +frame-system-rpc-runtime-api = { version = "2.0.0-dev", path = "../../../../frame/system/rpc/runtime-api" } +sp-core = { version = "2.0.0-dev", path = "../../../../primitives/core" } +sp-blockchain = { version = "2.0.0-dev", path = "../../../../primitives/blockchain" } +sp-transaction-pool = { version = "2.0.0-dev", path = "../../../../primitives/transaction-pool" } [dev-dependencies] substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../../../test-utils/runtime/client" } env_logger = "0.7.0" -sc-transaction-pool = { version = "2.0.0-alpha.7", path = "../../../../client/transaction-pool" } +sc-transaction-pool = { version = "2.0.0-dev", path = "../../../../client/transaction-pool" } diff --git a/utils/prometheus/Cargo.toml b/utils/prometheus/Cargo.toml index 4eba264feb6..0b465409031 100644 --- a/utils/prometheus/Cargo.toml +++ b/utils/prometheus/Cargo.toml @@ -1,7 +1,7 @@ [package] description = "Endpoint to expose Prometheus metrics" name = "substrate-prometheus-endpoint" -version = "0.8.0-alpha.7" +version = "0.8.0-dev" license = "GPL-3.0" authors = ["Parity Technologies "] edition = "2018" -- GitLab From e0dee27e009c517a10beda0ae7e733c933492ca9 Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 6 May 2020 10:52:44 +0200 Subject: [PATCH 142/167] client/authority-discovery: Do not double encode signature (#5901) Previously, when publishing ones address onto the DHT, the signature signing those addresses would be SCALE encoded twice. This commit removes the second encoding and adjusts the tests to catch future regressions. --- client/authority-discovery/src/lib.rs | 8 +- client/authority-discovery/src/tests.rs | 115 ++++++++++++------------ primitives/core/src/traits.rs | 6 +- 3 files changed, 66 insertions(+), 63 deletions(-) diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index e5b7c986a44..bc76c143314 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -58,7 +58,7 @@ use futures::task::{Context, Poll}; use futures::{Future, FutureExt, ready, Stream, StreamExt}; use futures_timer::Delay; -use codec::{Decode, Encode}; +use codec::Decode; use error::{Error, Result}; use log::{debug, error, log_enabled}; use prometheus_endpoint::{Counter, CounterVec, Gauge, Opts, U64, register}; @@ -262,16 +262,16 @@ where ) .map_err(|_| Error::Signing)?; - for (sign_result, key) in signatures.iter().zip(keys) { + for (sign_result, key) in signatures.into_iter().zip(keys) { let mut signed_addresses = vec![]; // sign_with_all returns Result signature // is generated for a public key that is supported. // Verify that all signatures exist for all provided keys. - let signature = sign_result.as_ref().map_err(|_| Error::MissingSignature(key.clone()))?; + let signature = sign_result.map_err(|_| Error::MissingSignature(key.clone()))?; schema::SignedAuthorityAddresses { addresses: serialized_addresses.clone(), - signature: Encode::encode(&signature), + signature, } .encode(&mut signed_addresses) .map_err(Error::EncodingProto)?; diff --git a/client/authority-discovery/src/tests.rs b/client/authority-discovery/src/tests.rs index c9b5e392d82..c13bca894c6 100644 --- a/client/authority-discovery/src/tests.rs +++ b/client/authority-discovery/src/tests.rs @@ -162,8 +162,8 @@ sp_api::mock_impl_runtime_apis! { } } -#[derive(Default)] struct TestNetwork { + peer_id: PeerId, // Whenever functions on `TestNetwork` are called, the function arguments are added to the // vectors below. pub put_value_call: Arc)>>>, @@ -171,6 +171,17 @@ struct TestNetwork { pub set_priority_group_call: Arc)>>>, } +impl Default for TestNetwork { + fn default() -> Self { + TestNetwork { + peer_id: PeerId::random(), + put_value_call: Default::default(), + get_value_call: Default::default(), + set_priority_group_call: Default::default(), + } + } +} + impl NetworkProvider for TestNetwork { fn set_priority_group( &self, @@ -193,11 +204,11 @@ impl NetworkProvider for TestNetwork { impl NetworkStateInfo for TestNetwork { fn local_peer_id(&self) -> PeerId { - PeerId::random() + self.peer_id.clone() } fn external_addresses(&self) -> Vec { - vec![] + vec!["/ip6/2001:db8::".parse().unwrap()] } } @@ -225,18 +236,21 @@ fn new_registers_metrics() { } #[test] -fn publish_ext_addresses_puts_record_on_dht() { +fn request_addresses_of_others_triggers_dht_get_query() { + let _ = ::env_logger::try_init(); let (_dht_event_tx, dht_event_rx) = channel(1000); - let network: Arc = Arc::new(Default::default()); - let key_store = KeyStore::new(); - let public = key_store - .write() - .sr25519_generate_new(key_types::AUTHORITY_DISCOVERY, None) - .unwrap(); + + // Generate authority keys + let authority_1_key_pair = AuthorityPair::from_seed_slice(&[1; 32]).unwrap(); + let authority_2_key_pair = AuthorityPair::from_seed_slice(&[2; 32]).unwrap(); + let test_api = Arc::new(TestApi { - authorities: vec![public.into()], + authorities: vec![authority_1_key_pair.public(), authority_2_key_pair.public()], }); + let network: Arc = Arc::new(Default::default()); + let key_store = KeyStore::new(); + let mut authority_discovery = AuthorityDiscovery::new( test_api, network.clone(), @@ -246,27 +260,38 @@ fn publish_ext_addresses_puts_record_on_dht() { None, ); - authority_discovery.publish_ext_addresses().unwrap(); + authority_discovery.request_addresses_of_others().unwrap(); - // Expect authority discovery to put a new record onto the dht. - assert_eq!(network.put_value_call.lock().unwrap().len(), 1); + // Expect authority discovery to request new records from the dht. + assert_eq!(network.get_value_call.lock().unwrap().len(), 2); } #[test] -fn request_addresses_of_others_triggers_dht_get_query() { +fn publish_discover_cycle() { let _ = ::env_logger::try_init(); - let (_dht_event_tx, dht_event_rx) = channel(1000); - // Generate authority keys - let authority_1_key_pair = AuthorityPair::from_seed_slice(&[1; 32]).unwrap(); - let authority_2_key_pair = AuthorityPair::from_seed_slice(&[2; 32]).unwrap(); + // Node A publishing its address. - let test_api = Arc::new(TestApi { - authorities: vec![authority_1_key_pair.public(), authority_2_key_pair.public()], - }); + let (_dht_event_tx, dht_event_rx) = channel(1000); let network: Arc = Arc::new(Default::default()); + let node_a_multiaddr = { + let peer_id = network.local_peer_id(); + let address = network.external_addresses().pop().unwrap(); + + address.with(libp2p::core::multiaddr::Protocol::P2p( + peer_id.into(), + )) + }; + let key_store = KeyStore::new(); + let node_a_public = key_store + .write() + .sr25519_generate_new(key_types::AUTHORITY_DISCOVERY, None) + .unwrap(); + let test_api = Arc::new(TestApi { + authorities: vec![node_a_public.into()], + }); let mut authority_discovery = AuthorityDiscovery::new( test_api, @@ -277,22 +302,22 @@ fn request_addresses_of_others_triggers_dht_get_query() { None, ); - authority_discovery.request_addresses_of_others().unwrap(); + authority_discovery.publish_ext_addresses().unwrap(); - // Expect authority discovery to request new records from the dht. - assert_eq!(network.get_value_call.lock().unwrap().len(), 2); -} + // Expect authority discovery to put a new record onto the dht. + assert_eq!(network.put_value_call.lock().unwrap().len(), 1); -#[test] -fn handle_dht_events_with_value_found_should_call_set_priority_group() { - let _ = ::env_logger::try_init(); + let dht_event = { + let (key, value) = network.put_value_call.lock().unwrap().pop().unwrap(); + sc_network::DhtEvent::ValueFound(vec![(key, value)]) + }; - // Create authority discovery. + // Node B discovering node A's address. let (mut dht_event_tx, dht_event_rx) = channel(1000); - let key_pair = AuthorityPair::from_seed_slice(&[1; 32]).unwrap(); let test_api = Arc::new(TestApi { - authorities: vec![key_pair.public()], + // Make sure node B identifies node A as an authority. + authorities: vec![node_a_public.into()], }); let network: Arc = Arc::new(Default::default()); let key_store = KeyStore::new(); @@ -306,32 +331,10 @@ fn handle_dht_events_with_value_found_should_call_set_priority_group() { None, ); - // Create sample dht event. - - let authority_id_1 = hash_authority_id(key_pair.public().as_ref()); - let address_1: Multiaddr = "/ip6/2001:db8::".parse().unwrap(); - - let mut serialized_addresses = vec![]; - schema::AuthorityAddresses { - addresses: vec![address_1.to_vec()], - } - .encode(&mut serialized_addresses) - .unwrap(); - - let signature = key_pair.sign(serialized_addresses.as_ref()).encode(); - let mut signed_addresses = vec![]; - schema::SignedAuthorityAddresses { - addresses: serialized_addresses, - signature, - } - .encode(&mut signed_addresses) - .unwrap(); - - let dht_event = sc_network::DhtEvent::ValueFound(vec![(authority_id_1, signed_addresses)]); dht_event_tx.try_send(dht_event).unwrap(); - // Make authority discovery handle the event. let f = |cx: &mut Context<'_>| -> Poll<()> { + // Make authority discovery handle the event. if let Poll::Ready(e) = authority_discovery.handle_dht_events(cx) { panic!("Unexpected error: {:?}", e); } @@ -343,7 +346,7 @@ fn handle_dht_events_with_value_found_should_call_set_priority_group() { network.set_priority_group_call.lock().unwrap()[0], ( "authorities".to_string(), - HashSet::from_iter(vec![address_1.clone()].into_iter()) + HashSet::from_iter(vec![node_a_multiaddr.clone()].into_iter()) ) ); diff --git a/primitives/core/src/traits.rs b/primitives/core/src/traits.rs index cca1a8fa8cc..133a4a4e195 100644 --- a/primitives/core/src/traits.rs +++ b/primitives/core/src/traits.rs @@ -120,7 +120,7 @@ pub trait BareCryptoStore: Send + Sync { /// Given a list of public keys, find the first supported key and /// sign the provided message with that key. /// - /// Returns a tuple of the used key and the signature + /// Returns a tuple of the used key and the SCALE encoded signature. fn sign_with_any( &self, id: KeyTypeId, @@ -144,8 +144,8 @@ pub trait BareCryptoStore: Send + Sync { /// Provided a list of public keys, sign a message with /// each key given that the key is supported. /// - /// Returns a list of `Result`s each representing the signature of each key or - /// a BareCryptoStoreError for non-supported keys. + /// Returns a list of `Result`s each representing the SCALE encoded + /// signature of each key or a BareCryptoStoreError for non-supported keys. fn sign_with_all( &self, id: KeyTypeId, -- GitLab From 24486f52929e9e518eeccbc6ad6da70e9e5bdf8a Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 6 May 2020 11:30:54 +0200 Subject: [PATCH 143/167] client: Replace `unsafe_rpc_expose` with an `RpcMethods` enum (#5729) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * client: Replace `unsafe_rpc_expose` with an `RpcMethods` enum which can be either Default, Safe or Unsafe. The idea is to have the following: | | --rpc-external=false | --rpc-external=true | |--------------------- |------------------- |----------------- | | --rpc-methods=Default | | unsafe calls denied | | --rpc-methods=Safe | unsafe calls denied | unsafe calls denied | | --rpc-methods=Unsafe | | | Since the previous `unsafe-rpc-expose` option was confusing. * client: Only warn against exposing externally unsafe RPC method set * Apply suggestions from code review Co-Authored-By: Cecile Tonglet * cli: Rephrase doc comment for rpc_methods config * Improve debuggability of build_spec_works ...by printing to stderr the stderr of the command. This is normally suppressed for succesful tests but not for failing ones - if that's the case then it's useful to see the test failure reason inline rather than having to execute the command separately ourselves. * Rename RpcMethods::{Default => Auto} variant * Update bin/node/cli/tests/build_spec_works.rs Co-authored-by: Benjamin Kampmann Co-authored-by: Cecile Tonglet Co-authored-by: Bastian Köcher --- client/cli/src/arg_enums.rs | 25 +++++++++++++++ client/cli/src/commands/mod.rs | 4 +-- client/cli/src/commands/run_cmd.rs | 50 ++++++++++++++++++------------ client/cli/src/config.rs | 13 ++++---- client/service/src/config.rs | 22 +++++++++++-- client/service/src/lib.rs | 16 +++++----- client/service/test/src/lib.rs | 2 +- utils/browser/src/lib.rs | 2 +- 8 files changed, 95 insertions(+), 39 deletions(-) diff --git a/client/cli/src/arg_enums.rs b/client/cli/src/arg_enums.rs index f0eeca4c8be..c146a168860 100644 --- a/client/cli/src/arg_enums.rs +++ b/client/cli/src/arg_enums.rs @@ -122,6 +122,31 @@ impl ExecutionStrategy { } } +arg_enum! { + /// Available RPC methods. + #[allow(missing_docs)] + #[derive(Debug, Copy, Clone, PartialEq)] + pub enum RpcMethods { + // Expose every RPC method only when RPC is listening on `localhost`, + // otherwise serve only safe RPC methods. + Auto, + // Allow only a safe subset of RPC methods. + Safe, + // Expose every RPC method (even potentially unsafe ones). + Unsafe, + } +} + +impl Into for RpcMethods { + fn into(self) -> sc_service::config::RpcMethods { + match self { + RpcMethods::Auto => sc_service::config::RpcMethods::Auto, + RpcMethods::Safe => sc_service::config::RpcMethods::Safe, + RpcMethods::Unsafe => sc_service::config::RpcMethods::Unsafe, + } + } +} + arg_enum! { /// Database backend #[allow(missing_docs)] diff --git a/client/cli/src/commands/mod.rs b/client/cli/src/commands/mod.rs index 5312336c760..d2bab5bca07 100644 --- a/client/cli/src/commands/mod.rs +++ b/client/cli/src/commands/mod.rs @@ -296,9 +296,9 @@ macro_rules! substrate_cli_subcommands { } } - fn unsafe_rpc_expose(&self) -> $crate::Result { + fn rpc_methods(&self) -> $crate::Result { match self { - $($enum::$variant(cmd) => cmd.unsafe_rpc_expose()),* + $($enum::$variant(cmd) => cmd.rpc_methods()),* } } diff --git a/client/cli/src/commands/run_cmd.rs b/client/cli/src/commands/run_cmd.rs index 3365c7a27a2..f7cec61df1b 100644 --- a/client/cli/src/commands/run_cmd.rs +++ b/client/cli/src/commands/run_cmd.rs @@ -14,6 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Substrate. If not, see . +use crate::arg_enums::RpcMethods; use crate::error::{Error, Result}; use crate::params::ImportParams; use crate::params::KeystoreParams; @@ -80,16 +81,24 @@ pub struct RunCmd { /// Listen to all RPC interfaces. /// /// Same as `--rpc-external`. - #[structopt(long = "unsafe-rpc-external")] + #[structopt(long)] pub unsafe_rpc_external: bool, - /// Don't deny potentially unsafe RPCs when listening on external interfaces. + /// RPC methods to expose. /// - /// Default is false. This allows exposing RPC methods publicly (same as `--unsafe-{rpc,ws}-external` ) - /// but will allow doing so even on validator nodes, which is prohibited by default. - /// Please do this if you know what you're doing. - #[structopt(long = "unsafe-rpc-expose")] - pub unsafe_rpc_expose: bool, + /// - `Unsafe`: Exposes every RPC method. + /// - `Safe`: Exposes only a safe subset of RPC methods, denying unsafe RPC methods. + /// - `Auto`: Acts as `Safe` if RPC is served externally, e.g. when `--{rpc,ws}-external` is passed, + /// otherwise acts as `Unsafe`. + #[structopt( + long, + value_name = "METHOD SET", + possible_values = &RpcMethods::variants(), + case_insensitive = true, + default_value = "Auto", + verbatim_doc_comment + )] + pub rpc_methods: RpcMethods, /// Listen to all Websocket interfaces. /// @@ -406,7 +415,7 @@ impl CliConfiguration for RunCmd { let interface = rpc_interface( self.rpc_external, self.unsafe_rpc_external, - self.unsafe_rpc_expose, + self.rpc_methods, self.validator )?; @@ -417,15 +426,15 @@ impl CliConfiguration for RunCmd { let interface = rpc_interface( self.ws_external, self.unsafe_ws_external, - self.unsafe_rpc_expose, + self.rpc_methods, self.validator )?; Ok(Some(SocketAddr::new(interface, self.ws_port.unwrap_or(9944)))) } - fn unsafe_rpc_expose(&self) -> Result { - Ok(self.unsafe_rpc_expose) + fn rpc_methods(&self) -> Result { + Ok(self.rpc_methods.into()) } fn transaction_pool(&self) -> Result { @@ -462,23 +471,26 @@ pub fn is_node_name_valid(_name: &str) -> std::result::Result<(), &str> { fn rpc_interface( is_external: bool, is_unsafe_external: bool, - is_unsafe_rpc_expose: bool, + rpc_methods: RpcMethods, is_validator: bool, ) -> Result { - if is_external && is_validator && !is_unsafe_rpc_expose { + if is_external && is_validator && rpc_methods != RpcMethods::Unsafe { return Err(Error::Input( "--rpc-external and --ws-external options shouldn't be \ - used if the node is running as a validator. Use `--unsafe-rpc-external` if you understand \ - the risks. See the options description for more information." + used if the node is running as a validator. Use `--unsafe-rpc-external` \ + or `--rpc-methods=unsafe` if you understand the risks. See the options \ + description for more information." .to_owned(), )); } if is_external || is_unsafe_external { - log::warn!( - "It isn't safe to expose RPC publicly without a proxy server that filters \ - available set of RPC methods." - ); + if rpc_methods == RpcMethods::Unsafe { + log::warn!( + "It isn't safe to expose RPC publicly without a proxy server that filters \ + available set of RPC methods." + ); + } Ok(Ipv4Addr::UNSPECIFIED.into()) } else { diff --git a/client/cli/src/config.rs b/client/cli/src/config.rs index 5c4a84247b0..f2a6715cf2f 100644 --- a/client/cli/src/config.rs +++ b/client/cli/src/config.rs @@ -27,8 +27,8 @@ use names::{Generator, Name}; use sc_client_api::execution_extensions::ExecutionStrategies; use sc_service::config::{ Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration, - NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, Role, TaskType, - TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod, + NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, Role, RpcMethods, + TaskType, TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod, }; use sc_service::{ChainSpec, TracingReceiver}; use std::future::Future; @@ -265,10 +265,11 @@ pub trait CliConfiguration: Sized { Ok(Default::default()) } - /// Returns `Ok(true) if potentially unsafe RPC is to be exposed. + /// Returns the RPC method set to expose. /// - /// By default this is `false`. - fn unsafe_rpc_expose(&self) -> Result { + /// By default this is `RpcMethods::Auto` (unsafe RPCs are denied iff + /// `{rpc,ws}_external` returns true, respectively). + fn rpc_methods(&self) -> Result { Ok(Default::default()) } @@ -449,7 +450,7 @@ pub trait CliConfiguration: Sized { execution_strategies: self.execution_strategies(is_dev)?, rpc_http: self.rpc_http()?, rpc_ws: self.rpc_ws()?, - unsafe_rpc_expose: self.unsafe_rpc_expose()?, + rpc_methods: self.rpc_methods()?, rpc_ws_max_connections: self.rpc_ws_max_connections()?, rpc_cors: self.rpc_cors(is_dev)?, prometheus_config: self.prometheus_config()?, diff --git a/client/service/src/config.rs b/client/service/src/config.rs index e1adc02e9a4..e0de85b56d5 100644 --- a/client/service/src/config.rs +++ b/client/service/src/config.rs @@ -59,8 +59,6 @@ pub struct Configuration { pub wasm_method: WasmExecutionMethod, /// Execution strategies. pub execution_strategies: ExecutionStrategies, - /// Whether potentially unsafe RPC is considered safe to be exposed. - pub unsafe_rpc_expose: bool, /// RPC over HTTP binding address. `None` if disabled. pub rpc_http: Option, /// RPC over Websockets binding address. `None` if disabled. @@ -69,6 +67,8 @@ pub struct Configuration { pub rpc_ws_max_connections: Option, /// CORS settings for HTTP & WS servers. `None` if all origins are allowed. pub rpc_cors: Option>, + /// RPC methods to expose (by default only a safe subset or all of them). + pub rpc_methods: RpcMethods, /// Prometheus endpoint configuration. `None` if disabled. pub prometheus_config: Option, /// Telemetry service URL. `None` if disabled. @@ -171,3 +171,21 @@ impl Configuration { self.role.to_string() } } + +/// Available RPC methods. +#[derive(Debug, Copy, Clone)] +pub enum RpcMethods { + /// Expose every RPC method only when RPC is listening on `localhost`, + /// otherwise serve only safe RPC methods. + Auto, + /// Allow only a safe subset of RPC methods. + Safe, + /// Expose every RPC method (even potentially unsafe ones). + Unsafe, +} + +impl Default for RpcMethods { + fn default() -> RpcMethods { + RpcMethods::Auto + } +} diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 742e5b29aaa..4e979ebb179 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -64,7 +64,7 @@ pub use self::builder::{ ServiceBuilder, ServiceBuilderCommand, TFullClient, TLightClient, TFullBackend, TLightBackend, TFullCallExecutor, TLightCallExecutor, }; -pub use config::{Configuration, Role, PruningMode, DatabaseConfig, TaskType}; +pub use config::{Configuration, DatabaseConfig, PruningMode, Role, RpcMethods, TaskType}; pub use sc_chain_spec::{ ChainSpec, GenericChainSpec, Properties, RuntimeGenesis, Extension as ChainSpecExtension, NoExtension, ChainType, @@ -551,12 +551,12 @@ fn start_rpc_servers sc_rpc_server::RpcHandler, unsafe_rpc_expose: bool) -> sc_rpc::DenyUnsafe { + fn deny_unsafe(addr: &Option, methods: &RpcMethods) -> sc_rpc::DenyUnsafe { let is_exposed_addr = addr.map(|x| x.ip().is_loopback()).unwrap_or(false); - if is_exposed_addr && !unsafe_rpc_expose { - sc_rpc::DenyUnsafe::Yes - } else { - sc_rpc::DenyUnsafe::No + match (is_exposed_addr, methods) { + | (_, RpcMethods::Unsafe) + | (false, RpcMethods::Auto) => sc_rpc::DenyUnsafe::No, + _ => sc_rpc::DenyUnsafe::Yes } } @@ -566,7 +566,7 @@ fn start_rpc_servers sc_rpc_server::RpcHandler sc_rpc_server::RpcHandler Date: Wed, 6 May 2020 14:12:11 +0300 Subject: [PATCH 144/167] update light aux storage when GRANDPA set changes (#5861) --- client/finality-grandpa/src/finality_proof.rs | 39 ++---- client/finality-grandpa/src/light_import.rs | 118 +++++++++++++++--- 2 files changed, 110 insertions(+), 47 deletions(-) diff --git a/client/finality-grandpa/src/finality_proof.rs b/client/finality-grandpa/src/finality_proof.rs index c52cc8fc90f..bf3662aba36 100644 --- a/client/finality-grandpa/src/finality_proof.rs +++ b/client/finality-grandpa/src/finality_proof.rs @@ -219,7 +219,7 @@ pub struct FinalityEffects { /// 2) headers sub-chain (B; F] if B != F; /// 3) proof of GRANDPA::authorities() if the set changes at block F. #[derive(Debug, PartialEq, Encode, Decode)] -struct FinalityProofFragment { +pub(crate) struct FinalityProofFragment { /// The hash of block F for which justification is provided. pub block: Header::Hash, /// Justification of the block F. @@ -425,26 +425,7 @@ pub(crate) fn prove_finality, J>( /// /// Returns the vector of headers that MUST be validated + imported /// AND if at least one of those headers is invalid, all other MUST be considered invalid. -pub(crate) fn check_finality_proof( - blockchain: &B, - current_set_id: u64, - current_authorities: AuthorityList, - authorities_provider: &dyn AuthoritySetForFinalityChecker, - remote_proof: Vec, -) -> ClientResult> - where - NumberFor: BlockNumberOps, - B: BlockchainBackend, -{ - do_check_finality_proof::<_, _, GrandpaJustification>( - blockchain, - current_set_id, - current_authorities, - authorities_provider, - remote_proof) -} - -fn do_check_finality_proof( +pub(crate) fn check_finality_proof( blockchain: &B, current_set_id: u64, current_authorities: AuthorityList, @@ -605,7 +586,7 @@ pub(crate) mod tests { use super::*; use sp_core::crypto::Public; - type FinalityProof = super::FinalityProof
; + pub(crate) type FinalityProof = super::FinalityProof
; impl AuthoritySetForFinalityProver for (GetAuthorities, ProveAuthorities) where @@ -621,7 +602,7 @@ pub(crate) mod tests { } } - struct ClosureAuthoritySetForFinalityChecker(pub Closure); + pub(crate) struct ClosureAuthoritySetForFinalityChecker(pub Closure); impl AuthoritySetForFinalityChecker for ClosureAuthoritySetForFinalityChecker where @@ -887,7 +868,7 @@ pub(crate) mod tests { blockchain.insert(header(4).hash(), header(4), None, None, NewBlockState::Final).unwrap(); blockchain.insert(header(5).hash(), header(5), None, None, NewBlockState::Final).unwrap(); blockchain.insert(header(6).hash(), header(6), None, None, NewBlockState::Final).unwrap(); - let effects = do_check_finality_proof::<_, _, TestJustification>( + let effects = check_finality_proof::<_, _, TestJustification>( &blockchain, 0, auth3, @@ -915,7 +896,7 @@ pub(crate) mod tests { let blockchain = test_blockchain(); // when we can't decode proof from Vec - do_check_finality_proof::<_, _, TestJustification>( + check_finality_proof::<_, _, TestJustification>( &blockchain, 1, vec![(AuthorityId::from_slice(&[3u8; 32]), 1u64)], @@ -929,7 +910,7 @@ pub(crate) mod tests { let blockchain = test_blockchain(); // when decoded proof has zero length - do_check_finality_proof::<_, _, TestJustification>( + check_finality_proof::<_, _, TestJustification>( &blockchain, 1, vec![(AuthorityId::from_slice(&[3u8; 32]), 1u64)], @@ -944,7 +925,7 @@ pub(crate) mod tests { // when intermediate (#0) fragment has non-empty unknown headers let authorities = vec![(AuthorityId::from_slice(&[3u8; 32]), 1u64)]; - do_check_finality_proof::<_, _, TestJustification>( + check_finality_proof::<_, _, TestJustification>( &blockchain, 1, authorities.clone(), @@ -969,7 +950,7 @@ pub(crate) mod tests { // when intermediate (#0) fragment has empty authorities proof let authorities = vec![(AuthorityId::from_slice(&[3u8; 32]), 1u64)]; - do_check_finality_proof::<_, _, TestJustification>( + check_finality_proof::<_, _, TestJustification>( &blockchain, 1, authorities.clone(), @@ -994,7 +975,7 @@ pub(crate) mod tests { let initial_authorities = vec![(AuthorityId::from_slice(&[3u8; 32]), 1u64)]; let next_authorities = vec![(AuthorityId::from_slice(&[4u8; 32]), 1u64)]; - let effects = do_check_finality_proof::<_, _, TestJustification>( + let effects = check_finality_proof::<_, _, TestJustification>( &blockchain, 1, initial_authorities.clone(), diff --git a/client/finality-grandpa/src/light_import.rs b/client/finality-grandpa/src/light_import.rs index dd80dd82743..7b860bc34d2 100644 --- a/client/finality-grandpa/src/light_import.rs +++ b/client/finality-grandpa/src/light_import.rs @@ -319,7 +319,7 @@ fn do_import_finality_proof( { let authority_set_id = data.authority_set.set_id(); let authorities = data.authority_set.authorities(); - let finality_effects = crate::finality_proof::check_finality_proof( + let finality_effects = crate::finality_proof::check_finality_proof::<_, _, J>( backend.blockchain(), authority_set_id, authorities, @@ -359,7 +359,7 @@ fn do_import_finality_proof( .expect_block_number_from_id(&BlockId::Hash(finality_effects.block)) .map_err(|e| ConsensusError::ClientImport(e.to_string()))?; do_finalize_block( - client, + client.clone(), data, finalized_block_hash, finalized_block_number, @@ -372,6 +372,14 @@ fn do_import_finality_proof( finality_effects.new_authorities, ); + // store new authorities set + require_insert_aux( + &client, + LIGHT_AUTHORITY_SET_KEY, + &data.authority_set, + "authority set", + )?; + Ok((finalized_block_hash, finalized_block_number)) } @@ -564,13 +572,30 @@ fn on_post_finalization_error(error: ClientError, value_type: &str) -> Consensus #[cfg(test)] pub mod tests { use super::*; - use sp_consensus::{ForkChoiceStrategy, BlockImport}; + use sp_consensus::{import_queue::CacheKeyId, ForkChoiceStrategy, BlockImport}; use sp_finality_grandpa::AuthorityId; use sp_core::{H256, crypto::Public}; - use sc_client_api::in_mem::Blockchain as InMemoryAuxStore; + use sc_client_api::{in_mem::Blockchain as InMemoryAuxStore, StorageProof}; use substrate_test_runtime_client::runtime::{Block, Header}; use crate::tests::TestApi; - use crate::finality_proof::tests::TestJustification; + use crate::finality_proof::{ + FinalityProofFragment, + tests::{TestJustification, ClosureAuthoritySetForFinalityChecker}, + }; + + struct OkVerifier; + + impl Verifier for OkVerifier { + fn verify( + &mut self, + origin: BlockOrigin, + header: Header, + _justification: Option, + _body: Option::Extrinsic>>, + ) -> Result<(BlockImportParams, Option)>>), String> { + Ok((BlockImportParams::new(origin, header), None)) + } + } pub struct NoJustificationsImport( pub GrandpaLightBlockImport @@ -666,9 +691,12 @@ pub mod tests { fn import_block( new_cache: HashMap>, justification: Option, - ) -> ImportResult { - let (client, _backend) = substrate_test_runtime_client::new_light(); - let client = Arc::new(client); + ) -> ( + ImportResult, + substrate_test_runtime_client::client::Client, + Arc, + ) { + let (client, backend) = substrate_test_runtime_client::new_light(); let mut import_data = LightImportData { last_finalized: Default::default(), authority_set: LightAuthoritySet::genesis(vec![(AuthorityId::from_slice(&[1; 32]), 1)]), @@ -687,17 +715,21 @@ pub mod tests { block.justification = justification; block.fork_choice = Some(ForkChoiceStrategy::LongestChain); - do_import_block::<_, _, _, TestJustification>( - &*client, - &mut import_data, - block, - new_cache, - ).unwrap() + ( + do_import_block::<_, _, _, TestJustification>( + &client, + &mut import_data, + block, + new_cache, + ).unwrap(), + client, + backend, + ) } #[test] fn finality_proof_not_required_when_consensus_data_does_not_changes_and_no_justification_provided() { - assert_eq!(import_block(HashMap::new(), None), ImportResult::Imported(ImportedAux { + assert_eq!(import_block(HashMap::new(), None).0, ImportResult::Imported(ImportedAux { clear_justification_requests: false, needs_justification: false, bad_justification: false, @@ -710,7 +742,7 @@ pub mod tests { #[test] fn finality_proof_not_required_when_consensus_data_does_not_changes_and_correct_justification_provided() { let justification = TestJustification((0, vec![(AuthorityId::from_slice(&[1; 32]), 1)]), Vec::new()).encode(); - assert_eq!(import_block(HashMap::new(), Some(justification)), ImportResult::Imported(ImportedAux { + assert_eq!(import_block(HashMap::new(), Some(justification)).0, ImportResult::Imported(ImportedAux { clear_justification_requests: false, needs_justification: false, bad_justification: false, @@ -724,7 +756,7 @@ pub mod tests { fn finality_proof_required_when_consensus_data_changes_and_no_justification_provided() { let mut cache = HashMap::new(); cache.insert(well_known_cache_keys::AUTHORITIES, vec![AuthorityId::from_slice(&[2; 32])].encode()); - assert_eq!(import_block(cache, None), ImportResult::Imported(ImportedAux { + assert_eq!(import_block(cache, None).0, ImportResult::Imported(ImportedAux { clear_justification_requests: false, needs_justification: false, bad_justification: false, @@ -740,7 +772,7 @@ pub mod tests { let mut cache = HashMap::new(); cache.insert(well_known_cache_keys::AUTHORITIES, vec![AuthorityId::from_slice(&[2; 32])].encode()); assert_eq!( - import_block(cache, Some(justification)), + import_block(cache, Some(justification)).0, ImportResult::Imported(ImportedAux { clear_justification_requests: false, needs_justification: false, @@ -797,4 +829,54 @@ pub mod tests { assert_eq!(data.authority_set.authorities(), vec![(AuthorityId::from_slice(&[42; 32]), 2)]); assert_eq!(data.consensus_changes.pending_changes(), &[(42, Default::default())]); } + + #[test] + fn authority_set_is_updated_on_finality_proof_import() { + let initial_set_id = 0; + let initial_set = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + let updated_set = vec![(AuthorityId::from_slice(&[2; 32]), 2)]; + let babe_set_signal = vec![AuthorityId::from_slice(&[42; 32])].encode(); + + // import block #1 without justification + let mut cache = HashMap::new(); + cache.insert(well_known_cache_keys::AUTHORITIES, babe_set_signal); + let (_, client, backend) = import_block(cache, None); + + // import finality proof for block #1 + let hash = client.block_hash(1).unwrap().unwrap(); + let mut verifier = OkVerifier; + let mut import_data = LightImportData { + last_finalized: Default::default(), + authority_set: LightAuthoritySet::genesis(initial_set.clone()), + consensus_changes: ConsensusChanges::empty(), + }; + + // import finality proof + do_import_finality_proof::<_, _, _, TestJustification>( + &client, + backend, + &ClosureAuthoritySetForFinalityChecker( + |_, _, _| Ok(updated_set.clone()) + ), + &mut import_data, + Default::default(), + Default::default(), + vec![ + FinalityProofFragment::
{ + block: hash, + justification: TestJustification( + (initial_set_id, initial_set.clone()), + Vec::new(), + ).encode(), + unknown_headers: Vec::new(), + authorities_proof: Some(StorageProof::new(vec![])), + }, + ].encode(), + &mut verifier, + ).unwrap(); + + // verify that new authorities set has been saved to the aux storage + let data = load_aux_import_data(Default::default(), &client, &TestApi::new(initial_set)).unwrap(); + assert_eq!(data.authority_set.authorities(), updated_set); + } } -- GitLab From 80e4417f1bbece16ec4c577d22dfb8c3e48a1375 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Drwi=C4=99ga?= Date: Wed, 6 May 2020 14:27:47 +0200 Subject: [PATCH 145/167] Benchmarks for offences pallet. (#5851) * really rough mock runtime * start to work on offences * Make sure to start the session. * Update to latest master. * Add verify. * Fix on_initialize benchmark. * Add grandpa offence. * Add Babe offence benchmarking. * Enable babe test. * Address review grumbles. * Address review grumbles. * Address review grumbles part 1/2 * use currency trait * features * Check events explicitly. * Auto-impl tuple converter. * Removed dead code. * add test feature flag * dont use std Co-authored-by: Shawn Tabrizi --- Cargo.lock | 7 + frame/babe/src/lib.rs | 13 +- frame/grandpa/src/lib.rs | 19 +- frame/offences/benchmarking/Cargo.toml | 35 ++- frame/offences/benchmarking/src/lib.rs | 334 ++++++++++++++++++++---- frame/offences/benchmarking/src/mock.rs | 214 +++++++++++++++ frame/staking/src/lib.rs | 6 + primitives/staking/src/offence.rs | 2 - 8 files changed, 556 insertions(+), 74 deletions(-) create mode 100644 frame/offences/benchmarking/src/mock.rs diff --git a/Cargo.lock b/Cargo.lock index 5edf5e1ceea..fad0e21d690 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4393,11 +4393,18 @@ dependencies = [ "frame-benchmarking", "frame-support", "frame-system", + "pallet-babe", + "pallet-balances", + "pallet-grandpa", "pallet-im-online", "pallet-offences", "pallet-session", "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", "parity-scale-codec", + "serde", + "sp-core", "sp-io", "sp-runtime", "sp-staking", diff --git a/frame/babe/src/lib.rs b/frame/babe/src/lib.rs index d43fa00e8f9..dc704b5bcc3 100644 --- a/frame/babe/src/lib.rs +++ b/frame/babe/src/lib.rs @@ -18,7 +18,7 @@ //! from VRF outputs and manages epoch transitions. #![cfg_attr(not(feature = "std"), no_std)] -#![forbid(unused_must_use, unsafe_code, unused_variables, unused_must_use)] +#![warn(unused_must_use, unsafe_code, unused_variables, unused_must_use)] use pallet_timestamp; @@ -268,19 +268,18 @@ impl pallet_session::ShouldEndSession for Module { } } -// TODO [slashing]: @marcio use this, remove the dead_code annotation. /// A BABE equivocation offence report. /// /// When a validator released two or more blocks at the same slot. -struct BabeEquivocationOffence { +pub struct BabeEquivocationOffence { /// A babe slot number in which this incident happened. - slot: u64, + pub slot: u64, /// The session index in which the incident happened. - session_index: SessionIndex, + pub session_index: SessionIndex, /// The size of the validator set at the time of the offence. - validator_set_count: u32, + pub validator_set_count: u32, /// The authority that produced the equivocation. - offender: FullIdentification, + pub offender: FullIdentification, } impl Offence for BabeEquivocationOffence { diff --git a/frame/grandpa/src/lib.rs b/frame/grandpa/src/lib.rs index aa5db8849fe..5827d2f195b 100644 --- a/frame/grandpa/src/lib.rs +++ b/frame/grandpa/src/lib.rs @@ -456,23 +456,24 @@ impl pallet_finality_tracker::OnFinalizationStalled fo /// A round number and set id which point on the time of an offence. #[derive(Copy, Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode)] -struct GrandpaTimeSlot { +pub struct GrandpaTimeSlot { // The order of these matters for `derive(Ord)`. - set_id: SetId, - round: RoundNumber, + /// Grandpa Set ID. + pub set_id: SetId, + /// Round number. + pub round: RoundNumber, } -// TODO [slashing]: Integrate this. /// A grandpa equivocation offence report. -struct GrandpaEquivocationOffence { +pub struct GrandpaEquivocationOffence { /// Time slot at which this incident happened. - time_slot: GrandpaTimeSlot, + pub time_slot: GrandpaTimeSlot, /// The session index in which the incident happened. - session_index: SessionIndex, + pub session_index: SessionIndex, /// The size of the validator set at the time of the offence. - validator_set_count: u32, + pub validator_set_count: u32, /// The authority which produced this equivocation. - offender: FullIdentification, + pub offender: FullIdentification, } impl Offence for GrandpaEquivocationOffence { diff --git a/frame/offences/benchmarking/Cargo.toml b/frame/offences/benchmarking/Cargo.toml index de9d68dc804..7b998176eb0 100644 --- a/frame/offences/benchmarking/Cargo.toml +++ b/frame/offences/benchmarking/Cargo.toml @@ -13,31 +13,44 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false } - -sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } -sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } -sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../../benchmarking" } -frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../../support" } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../system" } +pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../babe" } +pallet-balances = { version = "2.0.0-dev", default-features = false, path = "../../balances" } +pallet-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../grandpa" } pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../im-online" } pallet-offences = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../offences" } -pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } pallet-session = { version = "2.0.0-dev", default-features = false, path = "../../session" } +pallet-staking = { version = "2.0.0-dev", default-features = false, features = ["runtime-benchmarks"], path = "../../staking" } sp-io = { path = "../../../primitives/io", default-features = false, version = "2.0.0-dev"} +sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/staking" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/std" } +[dev-dependencies] +codec = { package = "parity-scale-codec", version = "1.3.0", features = ["derive"] } +pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../../staking/reward-curve" } +pallet-timestamp = { version = "2.0.0-dev", path = "../../timestamp" } +serde = { version = "1.0.101" } +sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } +sp-io ={ path = "../../../primitives/io", version = "2.0.0-dev"} [features] default = ["std"] std = [ - "sp-runtime/std", - "sp-std/std", - "sp-staking/std", "frame-benchmarking/std", "frame-support/std", "frame-system/std", - "pallet-offences/std", + "pallet-babe/std", + "pallet-balances/std", + "pallet-grandpa/std", "pallet-im-online/std", - "pallet-staking/std", + "pallet-offences/std", "pallet-session/std", + "pallet-staking/std", + "sp-runtime/std", + "sp-staking/std", + "sp-std/std", + "sp-io/std", ] diff --git a/frame/offences/benchmarking/src/lib.rs b/frame/offences/benchmarking/src/lib.rs index a88714a89a7..a0e05a74d58 100644 --- a/frame/offences/benchmarking/src/lib.rs +++ b/frame/offences/benchmarking/src/lib.rs @@ -18,28 +18,32 @@ #![cfg_attr(not(feature = "std"), no_std)] +mod mock; + use sp_std::prelude::*; use sp_std::vec; -use frame_system::RawOrigin; +use frame_system::{RawOrigin, Module as System, Trait as SystemTrait}; use frame_benchmarking::{benchmarks, account}; use frame_support::traits::{Currency, OnInitialize}; -use sp_runtime::{Perbill, traits::{Convert, StaticLookup}}; -use sp_staking::offence::ReportOffence; +use sp_runtime::{Perbill, traits::{Convert, StaticLookup, Saturating, UniqueSaturatedInto}}; +use sp_staking::offence::{ReportOffence, Offence, OffenceDetails}; +use pallet_balances::{Trait as BalancesTrait}; +use pallet_babe::BabeEquivocationOffence; +use pallet_grandpa::{GrandpaEquivocationOffence, GrandpaTimeSlot}; use pallet_im_online::{Trait as ImOnlineTrait, Module as ImOnline, UnresponsivenessOffence}; use pallet_offences::{Trait as OffencesTrait, Module as Offences}; +use pallet_session::historical::{Trait as HistoricalTrait, IdentificationTuple}; +use pallet_session::{Trait as SessionTrait, SessionManager}; use pallet_staking::{ Module as Staking, Trait as StakingTrait, RewardDestination, ValidatorPrefs, - Exposure, IndividualExposure, ElectionStatus + Exposure, IndividualExposure, ElectionStatus, MAX_NOMINATIONS, Event as StakingEvent }; -use pallet_session::Trait as SessionTrait; -use pallet_session::historical::{Trait as HistoricalTrait, IdentificationTuple}; const SEED: u32 = 0; -const MAX_USERS: u32 = 1000; const MAX_REPORTERS: u32 = 100; const MAX_OFFENDERS: u32 = 100; const MAX_NOMINATORS: u32 = 100; @@ -47,15 +51,54 @@ const MAX_DEFERRED_OFFENCES: u32 = 100; pub struct Module(Offences); -pub trait Trait: SessionTrait + StakingTrait + OffencesTrait + ImOnlineTrait + HistoricalTrait {} +pub trait Trait: + SessionTrait + + StakingTrait + + OffencesTrait + + ImOnlineTrait + + HistoricalTrait + + BalancesTrait + + IdTupleConvert +{} + +/// A helper trait to make sure we can convert `IdentificationTuple` coming from historical +/// and the one required by offences. +pub trait IdTupleConvert { + /// Convert identification tuple from `historical` trait to the one expected by `offences`. + fn convert(id: IdentificationTuple) -> ::IdentificationTuple; +} -fn create_offender(n: u32, nominators: u32) -> Result { +impl IdTupleConvert for T where + ::IdentificationTuple: From> +{ + fn convert(id: IdentificationTuple) -> ::IdentificationTuple { + id.into() + } +} + +type LookupSourceOf = <::Lookup as StaticLookup>::Source; +type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; + +struct Offender { + pub controller: T::AccountId, + pub stash: T::AccountId, + pub nominator_stashes: Vec, +} + +fn bond_amount() -> BalanceOf { + T::Currency::minimum_balance().saturating_mul(10_000.into()) +} + +fn create_offender(n: u32, nominators: u32) -> Result, &'static str> { let stash: T::AccountId = account("stash", n, SEED); let controller: T::AccountId = account("controller", n, SEED); - let controller_lookup: ::Source = T::Lookup::unlookup(controller.clone()); + let controller_lookup: LookupSourceOf = T::Lookup::unlookup(controller.clone()); let reward_destination = RewardDestination::Staked; - let amount = T::Currency::minimum_balance(); - + let raw_amount = bond_amount::(); + // add twice as much balance to prevent the account from being killed. + let free_amount = raw_amount.saturating_mul(2.into()); + T::Currency::make_free_balance_be(&stash, free_amount); + let amount: BalanceOf = raw_amount.into(); Staking::::bond( RawOrigin::Signed(stash.clone()).into(), controller_lookup.clone(), @@ -69,27 +112,29 @@ fn create_offender(n: u32, nominators: u32) -> Result::validate(RawOrigin::Signed(controller.clone()).into(), validator_prefs)?; let mut individual_exposures = vec![]; - + let mut nominator_stashes = vec![]; // Create n nominators for i in 0 .. nominators { let nominator_stash: T::AccountId = account("nominator stash", n * MAX_NOMINATORS + i, SEED); let nominator_controller: T::AccountId = account("nominator controller", n * MAX_NOMINATORS + i, SEED); - let nominator_controller_lookup: ::Source = T::Lookup::unlookup(nominator_controller.clone()); + let nominator_controller_lookup: LookupSourceOf = T::Lookup::unlookup(nominator_controller.clone()); + T::Currency::make_free_balance_be(&nominator_stash, free_amount.into()); Staking::::bond( RawOrigin::Signed(nominator_stash.clone()).into(), nominator_controller_lookup.clone(), - amount, + amount.clone(), reward_destination, )?; - let selected_validators: Vec<::Source> = vec![controller_lookup.clone()]; + let selected_validators: Vec> = vec![controller_lookup.clone()]; Staking::::nominate(RawOrigin::Signed(nominator_controller.clone()).into(), selected_validators)?; individual_exposures.push(IndividualExposure { - who: nominator_controller.clone(), + who: nominator_stash.clone(), value: amount.clone(), }); + nominator_stashes.push(nominator_stash.clone()); } let exposure = Exposure { @@ -100,76 +145,275 @@ fn create_offender(n: u32, nominators: u32) -> Result::add_era_stakers(current_era.into(), stash.clone().into(), exposure); - Ok(controller) + Ok(Offender { controller, stash, nominator_stashes }) } -fn make_offenders(num_offenders: u32, num_nominators: u32) -> Result>, &'static str> { - let mut offenders: Vec = vec![]; +fn make_offenders(num_offenders: u32, num_nominators: u32) -> Result< + (Vec>, Vec>), + &'static str +> { + Staking::::new_session(0); + let mut offenders = vec![]; for i in 0 .. num_offenders { - let offender = create_offender::(i, num_nominators)?; + let offender = create_offender::(i + 1, num_nominators)?; offenders.push(offender); } - Ok(offenders.iter() - .map(|id| - ::ValidatorIdOf::convert(id.clone()) + Staking::::start_session(0); + + let id_tuples = offenders.iter() + .map(|offender| + ::ValidatorIdOf::convert(offender.controller.clone()) .expect("failed to get validator id from account id")) .map(|validator_id| ::FullIdentificationOf::convert(validator_id.clone()) .map(|full_id| (validator_id, full_id)) .expect("failed to convert validator id to full identification")) - .collect::>>()) + .collect::>>(); + Ok((id_tuples, offenders)) } -benchmarks! { - _ { - let u in 1 .. MAX_USERS => (); - let r in 1 .. MAX_REPORTERS => (); - let o in 1 .. MAX_OFFENDERS => (); - let n in 1 .. MAX_NOMINATORS => (); - let d in 1 .. MAX_DEFERRED_OFFENCES => (); +#[cfg(test)] +fn check_events::Event>>(expected: I) { + let events = System::::events() .into_iter() + .map(|frame_system::EventRecord { event, .. }| event).collect::>(); + let expected = expected.collect::>(); + let lengths = (events.len(), expected.len()); + let length_mismatch = if lengths.0 != lengths.1 { + fn pretty(header: &str, ev: &[D]) { + println!("{}", header); + for (idx, ev) in ev.iter().enumerate() { + println!("\t[{:04}] {:?}", idx, ev); + } + } + pretty("--Got:", &events); + pretty("--Expected:", &expected); + format!("Mismatching length. Got: {}, expected: {}", lengths.0, lengths.1) + } else { Default::default() }; + + for (idx, (a, b)) in events.into_iter().zip(expected).enumerate() { + assert_eq!(a, b, "Mismatch at: {}. {}", idx, length_mismatch); } - report_offence { - let r in ...; - let o in ...; - let n in ...; + if !length_mismatch.is_empty() { + panic!(length_mismatch); + } +} - let mut reporters = vec![]; +benchmarks! { + _ { } + + report_offence_im_online { + let r in 1 .. MAX_REPORTERS; + // we skip 1 offender, because in such case there is no slashing + let o in 2 .. MAX_OFFENDERS; + let n in 0 .. MAX_NOMINATORS.min(MAX_NOMINATIONS as u32); + // Make r reporters + let mut reporters = vec![]; for i in 0 .. r { let reporter = account("reporter", i, SEED); reporters.push(reporter); } - - let offenders = make_offenders::(o, n).expect("failed to create offenders"); + + // make sure reporters actually get rewarded + Staking::::set_slash_reward_fraction(Perbill::one()); + + let (offenders, raw_offenders) = make_offenders::(o, n)?; let keys = ImOnline::::keys(); + let validator_set_count = keys.len() as u32; + let slash_fraction = UnresponsivenessOffence::::slash_fraction( + offenders.len() as u32, validator_set_count, + ); let offence = UnresponsivenessOffence { session_index: 0, - validator_set_count: keys.len() as u32, + validator_set_count, offenders, }; + assert_eq!(System::::event_count(), 0); + }: { + let _ = ::ReportUnresponsiveness::report_offence( + reporters.clone(), + offence + ); + } + verify { + // make sure the report was not deferred + assert!(Offences::::deferred_offences().is_empty()); + let slash_amount = slash_fraction * bond_amount::().unique_saturated_into() as u32; + let reward_amount = slash_amount * (1 + n) / 2; + let mut slash_events = raw_offenders.into_iter() + .flat_map(|offender| { + core::iter::once(offender.stash).chain(offender.nominator_stashes.into_iter()) + }) + .map(|stash| ::Event::from( + StakingEvent::::Slash(stash, BalanceOf::::from(slash_amount)) + )) + .collect::>(); + let reward_events = reporters.into_iter() + .flat_map(|reporter| vec![ + frame_system::Event::::NewAccount(reporter.clone()).into(), + ::Event::from( + pallet_balances::Event::::Endowed(reporter.clone(), (reward_amount / r).into()) + ).into() + ]); + + // rewards are applied after first offender and it's nominators + let slash_rest = slash_events.split_off(1 + n as usize); + + // make sure that all slashes have been applied + #[cfg(test)] + check_events::( + std::iter::empty() + .chain(slash_events.into_iter().map(Into::into)) + .chain(reward_events) + .chain(slash_rest.into_iter().map(Into::into)) + .chain(std::iter::once(::Event::from( + pallet_offences::Event::Offence( + UnresponsivenessOffence::::ID, + 0_u32.to_le_bytes().to_vec(), + true + ) + ).into())) + ); + } + + report_offence_grandpa { + let r in 1 .. MAX_REPORTERS; + let n in 0 .. MAX_NOMINATORS.min(MAX_NOMINATIONS as u32); + let o = 1; + + // Make r reporters + let mut reporters = vec![]; + for i in 0 .. r { + let reporter = account("reporter", i, SEED); + reporters.push(reporter); + } + + // make sure reporters actually get rewarded + Staking::::set_slash_reward_fraction(Perbill::one()); + + let (mut offenders, raw_offenders) = make_offenders::(o, n)?; + let keys = ImOnline::::keys(); + + let offence = GrandpaEquivocationOffence { + time_slot: GrandpaTimeSlot { set_id: 0, round: 0 }, + session_index: 0, + validator_set_count: keys.len() as u32, + offender: T::convert(offenders.pop().unwrap()), + }; + assert_eq!(System::::event_count(), 0); + }: { + let _ = Offences::::report_offence(reporters, offence); + } + verify { + // make sure the report was not deferred + assert!(Offences::::deferred_offences().is_empty()); + // make sure that all slashes have been applied + assert_eq!( + System::::event_count(), 0 + + 1 // offence + + 2 * r // reporter (reward + endowment) + + o // offenders slashed + + o * n // nominators slashed + ); + } + report_offence_babe { + let r in 1 .. MAX_REPORTERS; + let n in 0 .. MAX_NOMINATORS.min(MAX_NOMINATIONS as u32); + let o = 1; + + // Make r reporters + let mut reporters = vec![]; + for i in 0 .. r { + let reporter = account("reporter", i, SEED); + reporters.push(reporter); + } + + // make sure reporters actually get rewarded + Staking::::set_slash_reward_fraction(Perbill::one()); + + let (mut offenders, raw_offenders) = make_offenders::(o, n)?; + let keys = ImOnline::::keys(); + + let offence = BabeEquivocationOffence { + slot: 0, + session_index: 0, + validator_set_count: keys.len() as u32, + offender: T::convert(offenders.pop().unwrap()), + }; + assert_eq!(System::::event_count(), 0); }: { - let _ = ::ReportUnresponsiveness::report_offence(reporters, offence); + let _ = Offences::::report_offence(reporters, offence); + } + verify { + // make sure the report was not deferred + assert!(Offences::::deferred_offences().is_empty()); + // make sure that all slashes have been applied + assert_eq!( + System::::event_count(), 0 + + 1 // offence + + 2 * r // reporter (reward + endowment) + + o // offenders slashed + + o * n // nominators slashed + ); } on_initialize { - let d in ...; + let d in 1 .. MAX_DEFERRED_OFFENCES; + let o = 10; + let n = 100; Staking::::put_election_status(ElectionStatus::Closed); let mut deferred_offences = vec![]; + let offenders = make_offenders::(o, n)?.0; + let offence_details = offenders.into_iter() + .map(|offender| OffenceDetails { + offender: T::convert(offender), + reporters: vec![], + }) + .collect::>(); for i in 0 .. d { - deferred_offences.push((vec![], vec![], 0u32)); + let fractions = offence_details.iter() + .map(|_| Perbill::from_percent(100 * (i + 1) / MAX_DEFERRED_OFFENCES)) + .collect::>(); + deferred_offences.push((offence_details.clone(), fractions.clone(), 0u32)); } Offences::::set_deferred_offences(deferred_offences); - + assert!(!Offences::::deferred_offences().is_empty()); }: { - Offences::::on_initialize(u.into()); + Offences::::on_initialize(0.into()); + } + verify { + // make sure that all deferred offences were reported with Ok status. + assert!(Offences::::deferred_offences().is_empty()); + assert_eq!( + System::::event_count(), d * (0 + + o // offenders slashed + + o * n // nominators slashed + )); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::mock::{new_test_ext, Test}; + use frame_support::assert_ok; + + #[test] + fn test_benchmarks() { + new_test_ext().execute_with(|| { + assert_ok!(test_benchmark_report_offence_im_online::()); + assert_ok!(test_benchmark_report_offence_grandpa::()); + assert_ok!(test_benchmark_report_offence_babe::()); + assert_ok!(test_benchmark_on_initialize::()); + }); } } diff --git a/frame/offences/benchmarking/src/mock.rs b/frame/offences/benchmarking/src/mock.rs new file mode 100644 index 00000000000..20cf337d442 --- /dev/null +++ b/frame/offences/benchmarking/src/mock.rs @@ -0,0 +1,214 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Mock file for offences benchmarking. + +#![cfg(test)] + +use super::*; +use frame_support::parameter_types; +use frame_system as system; +use sp_runtime::{ + SaturatedConversion, + traits::{IdentityLookup, Block as BlockT}, + testing::{Header, UintAuthorityId}, +}; + + +type AccountId = u64; +type AccountIndex = u32; +type BlockNumber = u64; +type Balance = u64; + +impl frame_system::Trait for Test { + type Origin = Origin; + type Index = AccountIndex; + type BlockNumber = BlockNumber; + type Call = Call; + type Hash = sp_core::H256; + type Hashing = ::sp_runtime::traits::BlakeTwo256; + type AccountId = AccountId; + type Lookup = IdentityLookup; + type Header = sp_runtime::testing::Header; + type Event = Event; + type BlockHashCount = (); + type MaximumBlockWeight = (); + type DbWeight = (); + type AvailableBlockRatio = (); + type MaximumBlockLength = (); + type Version = (); + type ModuleToIndex = (); + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (Balances,); + type BlockExecutionWeight = (); + type ExtrinsicBaseWeight = (); +} +parameter_types! { + pub const ExistentialDeposit: Balance = 10; +} +impl pallet_balances::Trait for Test { + type Balance = Balance; + type Event = Event; + type DustRemoval = (); + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 5; +} +impl pallet_timestamp::Trait for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; +} +impl pallet_session::historical::Trait for Test { + type FullIdentification = pallet_staking::Exposure; + type FullIdentificationOf = pallet_staking::ExposureOf; +} + +sp_runtime::impl_opaque_keys! { + pub struct SessionKeys { + pub foo: sp_runtime::testing::UintAuthorityId, + } +} + +pub struct TestSessionHandler; +impl pallet_session::SessionHandler for TestSessionHandler { + const KEY_TYPE_IDS: &'static [sp_runtime::KeyTypeId] = &[]; + + fn on_genesis_session(_validators: &[(AccountId, Ks)]) {} + + fn on_new_session( + _: bool, + _: &[(AccountId, Ks)], + _: &[(AccountId, Ks)], + ) {} + + fn on_disabled(_: usize) {} +} + +parameter_types! { + pub const Period: u64 = 1; + pub const Offset: u64 = 0; +} + +impl pallet_session::Trait for Test { + type SessionManager = pallet_session::historical::NoteHistoricalRoot; + type Keys = SessionKeys; + type ShouldEndSession = pallet_session::PeriodicSessions; + type NextSessionRotation = pallet_session::PeriodicSessions; + type SessionHandler = TestSessionHandler; + type Event = Event; + type ValidatorId = AccountId; + type ValidatorIdOf = pallet_staking::StashOf; + type DisabledValidatorsThreshold = (); +} +pallet_staking_reward_curve::build! { + const I_NPOS: sp_runtime::curve::PiecewiseLinear<'static> = curve!( + min_inflation: 0_025_000, + max_inflation: 0_100_000, + ideal_stake: 0_500_000, + falloff: 0_050_000, + max_piece_count: 40, + test_precision: 0_005_000, + ); +} +parameter_types! { + pub const RewardCurve: &'static sp_runtime::curve::PiecewiseLinear<'static> = &I_NPOS; + pub const MaxNominatorRewardedPerValidator: u32 = 64; +} + +pub type Extrinsic = sp_runtime::testing::TestXt; + +pub struct CurrencyToVoteHandler; +impl Convert for CurrencyToVoteHandler { + fn convert(x: u64) -> u64 { + x + } +} +impl Convert for CurrencyToVoteHandler { + fn convert(x: u128) -> u64 { + x.saturated_into() + } +} + +impl pallet_staking::Trait for Test { + type Currency = Balances; + type UnixTime = pallet_timestamp::Module; + type CurrencyToVote = CurrencyToVoteHandler; + type RewardRemainder = (); + type Event = Event; + type Slash = (); + type Reward = (); + type SessionsPerEra = (); + type SlashDeferDuration = (); + type SlashCancelOrigin = frame_system::EnsureRoot; + type BondingDuration = (); + type SessionInterface = Self; + type RewardCurve = RewardCurve; + type NextNewSession = Session; + type ElectionLookahead = (); + type Call = Call; + type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; + type UnsignedPriority = (); + type MaxIterations = (); +} + +impl pallet_im_online::Trait for Test { + type AuthorityId = UintAuthorityId; + type Event = Event; + type SessionDuration = Period; + type ReportUnresponsiveness = Offences; + type UnsignedPriority = (); +} + +impl pallet_offences::Trait for Test { + type Event = Event; + type IdentificationTuple = pallet_session::historical::IdentificationTuple; + type OnOffenceHandler = Staking; +} + +impl frame_system::offchain::SendTransactionTypes for Test where Call: From { + type Extrinsic = Extrinsic; + type OverarchingCall = Call; +} + +impl crate::Trait for Test {} + +pub type Block = sp_runtime::generic::Block; +pub type UncheckedExtrinsic = sp_runtime::generic::UncheckedExtrinsic; + +frame_support::construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic + { + System: system::{Module, Call, Event}, + Balances: pallet_balances::{Module, Call, Storage, Config, Event}, + Staking: pallet_staking::{Module, Call, Config, Storage, Event, ValidateUnsigned}, + Session: pallet_session::{Module, Call, Storage, Event, Config}, + ImOnline: pallet_im_online::{Module, Call, Storage, Event, ValidateUnsigned, Config}, + Offences: pallet_offences::{Module, Call, Storage, Event}, + } +); + +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = frame_system::GenesisConfig::default().build_storage::().unwrap(); + sp_io::TestExternalities::new(t) +} diff --git a/frame/staking/src/lib.rs b/frame/staking/src/lib.rs index 489070dca02..534222ebdfd 100644 --- a/frame/staking/src/lib.rs +++ b/frame/staking/src/lib.rs @@ -2895,6 +2895,12 @@ impl Module { pub fn put_election_status(status: ElectionStatus::) { >::put(status); } + + #[cfg(feature = "runtime-benchmarks")] + pub fn set_slash_reward_fraction(fraction: Perbill) { + SlashRewardFraction::put(fraction); + } + } /// In this implementation `new_session(session)` must be called before `end_session(session-1)` diff --git a/primitives/staking/src/offence.rs b/primitives/staking/src/offence.rs index 584f3a75ea3..5becfeab75c 100644 --- a/primitives/staking/src/offence.rs +++ b/primitives/staking/src/offence.rs @@ -26,8 +26,6 @@ use crate::SessionIndex; /// The kind of an offence, is a byte string representing some kind identifier /// e.g. `b"im-online:offlin"`, `b"babe:equivocatio"` -// TODO [slashing]: Is there something better we can have here that is more natural but still -// flexible? as you see in examples, they get cut off with long names. pub type Kind = [u8; 16]; /// Number of times the offence of this authority was already reported in the past. -- GitLab From 6c5db7c30b3b4c292ff64d4a2df81cb318be014f Mon Sep 17 00:00:00 2001 From: Max Inden Date: Wed, 6 May 2020 14:56:46 +0200 Subject: [PATCH 146/167] client/network-gossip/bridge: Use bounded channel (#5748) * client/network-gossip/bridge: Use bounded channel Instead of returning an unbounded channel on `GossipEngine::messages_for` return a bounded channel. For now the channel length is determined by the amount of past messages cached in the `ConsensusGossip`. With a bounded channel, one can't just fire-and-forget style send into it, but has to first check whether the channel is ready. Thus this commit restructures `GossipEngine::poll` and introduces a `ForwardingState` into `GossipEngine`. * client/network-gossip/bridge: Add quickcheck for different size channels --- Cargo.lock | 3 +- client/network-gossip/Cargo.toml | 3 +- client/network-gossip/src/bridge.rs | 390 +++++++++++++++++++++++----- 3 files changed, 332 insertions(+), 64 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fad0e21d690..56fa41cb08e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6509,9 +6509,10 @@ dependencies = [ "libp2p", "log", "lru", + "quickcheck", + "rand 0.7.3", "sc-network", "sp-runtime", - "sp-utils", "substrate-test-runtime-client", "wasm-timer", ] diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index c6714375fe3..4b02a6f70e8 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -21,9 +21,10 @@ log = "0.4.8" lru = "0.4.3" sc-network = { version = "0.8.0-dev", path = "../network" } sp-runtime = { version = "2.0.0-dev", path = "../../primitives/runtime" } -sp-utils = { version = "2.0.0-dev", path = "../../primitives/utils" } wasm-timer = "0.2" [dev-dependencies] async-std = "1.5" +quickcheck = "0.9.0" +rand = "0.7.2" substrate-test-runtime-client = { version = "2.0.0-dev", path = "../../test-utils/runtime/client" } diff --git a/client/network-gossip/src/bridge.rs b/client/network-gossip/src/bridge.rs index 26e49fce8a8..df2a5c8e7e9 100644 --- a/client/network-gossip/src/bridge.rs +++ b/client/network-gossip/src/bridge.rs @@ -20,13 +20,13 @@ use crate::state_machine::{ConsensusGossip, TopicNotification, PERIODIC_MAINTENA use sc_network::{Event, ReputationChange}; use futures::prelude::*; +use futures::channel::mpsc::{channel, Sender, Receiver}; use libp2p::PeerId; use log::trace; use sp_runtime::{traits::Block as BlockT, ConsensusEngineId}; -use sp_utils::mpsc::{tracing_unbounded, TracingUnboundedSender, TracingUnboundedReceiver}; use std::{ borrow::Cow, - collections::{HashMap, hash_map::Entry}, + collections::{HashMap, VecDeque}, pin::Pin, sync::Arc, task::{Context, Poll}, @@ -43,7 +43,23 @@ pub struct GossipEngine { /// Incoming events from the network. network_event_stream: Pin + Send>>, /// Outgoing events to the consumer. - message_sinks: HashMap>>, + message_sinks: HashMap>>, + /// Buffered messages (see [`ForwardingState`]). + forwarding_state: ForwardingState, +} + +/// A gossip engine receives messages from the network via the `network_event_stream` and forwards +/// them to upper layers via the `message sinks`. In the scenario where messages have been received +/// from the network but a subscribed message sink is not yet ready to receive the messages, the +/// messages are buffered. To model this process a gossip engine can be in two states. +enum ForwardingState { + /// The gossip engine is currently not forwarding any messages and will poll the network for + /// more messages to forward. + Idle, + /// The gossip engine is in the progress of forwarding messages and thus will not poll the + /// network for more messages until it has send all current messages into the subscribed message + /// sinks. + Busy(VecDeque<(B::Hash, TopicNotification)>), } impl Unpin for GossipEngine {} @@ -69,6 +85,7 @@ impl GossipEngine { network_event_stream, message_sinks: HashMap::new(), + forwarding_state: ForwardingState::Idle, } } @@ -96,12 +113,19 @@ impl GossipEngine { /// Get data of valid, incoming messages for a topic (but might have expired meanwhile). pub fn messages_for(&mut self, topic: B::Hash) - -> TracingUnboundedReceiver + -> Receiver { - let (tx, rx) = tracing_unbounded("mpsc_gossip_messages_for"); - - for notification in self.state_machine.messages_for(topic) { - tx.unbounded_send(notification).expect("receiver known to be live; qed"); + let past_messages = self.state_machine.messages_for(topic).collect::>(); + // The channel length is not critical for correctness. By the implementation of `channel` + // each sender is guaranteed a single buffer slot, making it a non-rendezvous channel and + // thus preventing direct dead-locks. A minimum channel length of 10 is an estimate based on + // the fact that despite `NotificationsReceived` having a `Vec` of messages, it only ever + // contains a single message. + let (mut tx, rx) = channel(usize::max(past_messages.len(), 10)); + + for notification in past_messages{ + tx.try_send(notification) + .expect("receiver known to be live, and buffer size known to suffice; qed"); } self.message_sinks.entry(topic).or_default().push(tx); @@ -152,65 +176,106 @@ impl Future for GossipEngine { fn poll(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll { let this = &mut *self; - loop { - match this.network_event_stream.poll_next_unpin(cx) { - Poll::Ready(Some(event)) => match event { - Event::NotificationStreamOpened { remote, engine_id: msg_engine_id, role } => { - if msg_engine_id != this.engine_id { - continue; + 'outer: loop { + match &mut this.forwarding_state { + ForwardingState::Idle => { + match this.network_event_stream.poll_next_unpin(cx) { + Poll::Ready(Some(event)) => match event { + Event::NotificationStreamOpened { remote, engine_id, role } => { + if engine_id != this.engine_id { + continue; + } + this.state_machine.new_peer(&mut *this.network, remote, role); + } + Event::NotificationStreamClosed { remote, engine_id } => { + if engine_id != this.engine_id { + continue; + } + this.state_machine.peer_disconnected(&mut *this.network, remote); + }, + Event::NotificationsReceived { remote, messages } => { + let messages = messages.into_iter().filter_map(|(engine, data)| { + if engine == this.engine_id { + Some(data.to_vec()) + } else { + None + } + }).collect(); + + let to_forward = this.state_machine.on_incoming( + &mut *this.network, + remote, + messages, + ); + + this.forwarding_state = ForwardingState::Busy(to_forward.into()); + }, + Event::Dht(_) => {} } - this.state_machine.new_peer(&mut *this.network, remote, role); + // The network event stream closed. Do the same for [`GossipValidator`]. + Poll::Ready(None) => return Poll::Ready(()), + Poll::Pending => break, } - Event::NotificationStreamClosed { remote, engine_id: msg_engine_id } => { - if msg_engine_id != this.engine_id { + } + ForwardingState::Busy(to_forward) => { + let (topic, notification) = match to_forward.pop_front() { + Some(n) => n, + None => { + this.forwarding_state = ForwardingState::Idle; continue; } - this.state_machine.peer_disconnected(&mut *this.network, remote); - }, - Event::NotificationsReceived { remote, messages } => { - let messages = messages.into_iter().filter_map(|(engine, data)| { - if engine == this.engine_id { - Some(data.to_vec()) - } else { - None + }; + + let sinks = match this.message_sinks.get_mut(&topic) { + Some(sinks) => sinks, + None => { + continue; + }, + }; + + // Make sure all sinks for the given topic are ready. + for sink in sinks.iter_mut() { + match sink.poll_ready(cx) { + Poll::Ready(Ok(())) => {}, + // Receiver has been dropped. Ignore for now, filtered out in (1). + Poll::Ready(Err(_)) => {}, + Poll::Pending => { + // Push back onto queue for later. + to_forward.push_front((topic, notification)); + break 'outer; } - }).collect(); + } + } - let to_forward = this.state_machine.on_incoming( - &mut *this.network, - remote, - messages, - ); + // Filter out all closed sinks. + sinks.retain(|sink| !sink.is_closed()); // (1) - for (topic, notification) in to_forward { - if let Entry::Occupied(mut entry) = this.message_sinks.entry(topic) { - trace!( - target: "gossip", - "Pushing consensus message to sinks for {}.", topic, - ); - entry.get_mut().retain(move |sink| { - if let Err(e) = sink.unbounded_send(notification.clone()) { - trace!( - target: "gossip", - "Error broadcasting message notification: {:?}", e, - ); - } - !sink.is_closed() - }); - if entry.get().is_empty() { - entry.remove_entry(); - } - } + if sinks.is_empty() { + this.message_sinks.remove(&topic); + continue; + } + + trace!( + target: "gossip", + "Pushing consensus message to sinks for {}.", topic, + ); + + // Send the notification on each sink. + for sink in sinks { + match sink.start_send(notification.clone()) { + Ok(()) => {}, + Err(e) if e.is_full() => unreachable!( + "Previously ensured that all sinks are ready; qed.", + ), + // Receiver got dropped. Will be removed in next iteration (See (1)). + Err(_) => {}, } - }, - Event::Dht(_) => {} + } } - // The network event stream closed. Do the same for [`GossipValidator`]. - Poll::Ready(None) => return Poll::Ready(()), - Poll::Pending => break, } } + while let Poll::Ready(()) = this.periodic_maintenance_interval.poll_unpin(cx) { this.periodic_maintenance_interval.reset(PERIODIC_MAINTENANCE_INTERVAL); this.state_machine.tick(&mut *this.network); @@ -229,9 +294,12 @@ impl Future for GossipEngine { mod tests { use async_std::task::spawn; use crate::{ValidationResult, ValidatorContext}; - use futures::{channel::mpsc::{channel, Sender}, executor::block_on_stream}; + use futures::{channel::mpsc::{unbounded, UnboundedSender}, executor::{block_on, block_on_stream}, future::poll_fn}; + use quickcheck::{Arbitrary, Gen, QuickCheck}; + use rand::Rng; use sc_network::ObservedRole; use sp_runtime::{testing::H256, traits::{Block as BlockT}}; + use std::convert::TryInto; use std::sync::{Arc, Mutex}; use substrate_test_runtime_client::runtime::Block; use super::*; @@ -243,12 +311,12 @@ mod tests { #[derive(Clone, Default)] struct TestNetworkInner { - event_senders: Vec>, + event_senders: Vec>, } impl Network for TestNetwork { fn event_stream(&self) -> Pin + Send>> { - let (tx, rx) = channel(100); + let (tx, rx) = unbounded(); self.inner.lock().unwrap().event_senders.push(tx); Box::pin(rx) @@ -301,7 +369,7 @@ mod tests { // Drop network event stream sender side. drop(network.inner.lock().unwrap().event_senders.pop()); - futures::executor::block_on(futures::future::poll_fn(move |ctx| { + block_on(poll_fn(move |ctx| { if let Poll::Pending = gossip_engine.poll_unpin(ctx) { panic!( "Expected gossip engine to finish on first poll, given that \ @@ -339,7 +407,7 @@ mod tests { engine_id: engine_id.clone(), role: ObservedRole::Authority, } - ).unwrap(); + ).expect("Event stream is unbounded; qed."); let messages = vec![vec![1], vec![2]]; let events = messages.iter().cloned().map(|m| { @@ -350,7 +418,7 @@ mod tests { }).collect::>(); // Send first event before subscribing. - event_sender.start_send(events[0].clone()).unwrap(); + event_sender.start_send(events[0].clone()).expect("Event stream is unbounded; qed."); let mut subscribers = vec![]; for _ in 0..2 { @@ -358,7 +426,7 @@ mod tests { } // Send second event after subscribing. - event_sender.start_send(events[1].clone()).unwrap(); + event_sender.start_send(events[1].clone()).expect("Event stream is unbounded; qed."); spawn(gossip_engine); @@ -379,4 +447,202 @@ mod tests { } } } + + #[test] + fn forwarding_to_different_size_and_topic_channels() { + #[derive(Clone, Debug)] + struct ChannelLengthAndTopic{ + length: usize, + topic: H256, + } + + impl Arbitrary for ChannelLengthAndTopic { + fn arbitrary(g: &mut G) -> Self { + Self { + length: g.gen_range(0, 100), + // Make sure channel topics and message topics overlap by choosing a small + // range. + topic: H256::from_low_u64_ne(g.gen_range(0, 10)), + } + } + } + + #[derive(Clone, Debug)] + struct Message { + topic: H256, + } + + impl Arbitrary for Message{ + fn arbitrary(g: &mut G) -> Self { + Self { + // Make sure channel topics and message topics overlap by choosing a small + // range. + topic: H256::from_low_u64_ne(g.gen_range(0, 10)), + } + } + } + + /// Validator that always returns `ProcessAndKeep` interpreting the first 32 bytes of data + /// as the message topic. + struct TestValidator; + + impl Validator for TestValidator { + fn validate( + &self, + _context: &mut dyn ValidatorContext, + _sender: &PeerId, + data: &[u8], + ) -> ValidationResult { + ValidationResult::ProcessAndKeep(H256::from_slice(&data[0..32])) + } + } + + fn prop(channels: Vec, notifications: Vec>) { + let engine_id = [1, 2, 3, 4]; + let remote_peer = PeerId::random(); + let network = TestNetwork::default(); + + let num_channels_per_topic = channels.iter() + .fold(HashMap::new(), |mut acc, ChannelLengthAndTopic { topic, .. }| { + acc.entry(topic).and_modify(|e| *e += 1).or_insert(1); + acc + }); + + let expected_msgs_per_topic_all_chan = notifications.iter() + .fold(HashMap::new(), |mut acc, messages| { + for message in messages { + acc.entry(message.topic).and_modify(|e| *e += 1).or_insert(1); + } + acc + }) + .into_iter() + // Messages are cloned for each channel with the corresponding topic, thus multiply + // with the amount of channels per topic. If there is no channel for a given topic, + // don't expect any messages for the topic to be received. + .map(|(topic, num)| (topic, num_channels_per_topic.get(&topic).unwrap_or(&0) * num)) + .collect::>(); + + let mut gossip_engine = GossipEngine::::new( + network.clone(), + engine_id.clone(), + "my_protocol".as_bytes(), + Arc::new(TestValidator{}), + ); + + // Create channels. + let (txs, mut rxs) = channels.iter() + .map(|ChannelLengthAndTopic { length, topic }| { + (topic.clone(), channel(*length)) + }) + .fold((vec![], vec![]), |mut acc, (topic, (tx, rx))| { + acc.0.push((topic, tx)); acc.1.push((topic, rx)); + acc + }); + + // Insert sender sides into `gossip_engine`. + for (topic, tx) in txs { + match gossip_engine.message_sinks.get_mut(&topic) { + Some(entry) => entry.push(tx), + None => {gossip_engine.message_sinks.insert(topic, vec![tx]);}, + } + } + + + let mut event_sender = network.inner.lock() + .unwrap() + .event_senders + .pop() + .unwrap(); + + // Register the remote peer. + event_sender.start_send( + Event::NotificationStreamOpened { + remote: remote_peer.clone(), + engine_id: engine_id.clone(), + role: ObservedRole::Authority, + } + ).expect("Event stream is unbounded; qed."); + + // Send messages into the network event stream. + for (i_notification, messages) in notifications.iter().enumerate() { + let messages = messages.into_iter().enumerate() + .map(|(i_message, Message { topic })| { + // Embed the topic in the first 256 bytes of the message to be extracted by + // the [`TestValidator`] later on. + let mut message = topic.as_bytes().to_vec(); + + // Make sure the message is unique via `i_notification` and `i_message` to + // ensure [`ConsensusBridge`] does not deduplicate it. + message.push(i_notification.try_into().unwrap()); + message.push(i_message.try_into().unwrap()); + + (engine_id, message.into()) + }).collect(); + + event_sender.start_send(Event::NotificationsReceived { + remote: remote_peer.clone(), + messages, + }).expect("Event stream is unbounded; qed."); + } + + let mut received_msgs_per_topic_all_chan = HashMap::::new(); + + // Poll both gossip engine and each receiver and track the amount of received messages. + block_on(poll_fn(|cx| { + loop { + if let Poll::Ready(()) = gossip_engine.poll_unpin(cx) { + unreachable!( + "Event stream sender side is not dropped, thus gossip engine does not \ + terminate", + ); + } + + let mut progress = false; + + for (topic, rx) in rxs.iter_mut() { + match rx.poll_next_unpin(cx) { + Poll::Ready(Some(_)) => { + progress = true; + received_msgs_per_topic_all_chan.entry(*topic) + .and_modify(|e| *e += 1) + .or_insert(1); + }, + Poll::Ready(None) => unreachable!( + "Sender side of channel is never dropped", + ), + Poll::Pending => {}, + } + } + + if !progress { + break; + } + } + Poll::Ready(()) + })); + + // Compare amount of expected messages with amount of received messages. + for (expected_topic, expected_num) in expected_msgs_per_topic_all_chan.iter() { + assert_eq!( + received_msgs_per_topic_all_chan.get(&expected_topic).unwrap_or(&0), + expected_num, + ); + } + for (received_topic, received_num) in expected_msgs_per_topic_all_chan.iter() { + assert_eq!( + expected_msgs_per_topic_all_chan.get(&received_topic).unwrap_or(&0), + received_num, + ); + } + } + + // Past regressions. + prop(vec![], vec![vec![Message{ topic: H256::default()}]]); + prop( + vec![ChannelLengthAndTopic {length: 71, topic: H256::default()}], + vec![vec![Message{ topic: H256::default()}]], + ); + + QuickCheck::new().quickcheck(prop as fn(_, _)) + } } -- GitLab From 413c4d0734ee57a0e6195951165460500d1d84bc Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Wed, 6 May 2020 15:27:18 +0200 Subject: [PATCH 147/167] Fix wrong task name (#5917) --- client/service/src/builder.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/service/src/builder.rs b/client/service/src/builder.rs index be9c10631eb..68abf8e3cdd 100644 --- a/client/service/src/builder.rs +++ b/client/service/src/builder.rs @@ -1023,7 +1023,7 @@ ServiceBuilder< }); spawn_handle.spawn( - "telemetry-on-block", + "on-transaction-imported", events, ); } -- GitLab From 3f27afa8640138c9942ceb09016da47ab7a5afaa Mon Sep 17 00:00:00 2001 From: Cecile Tonglet Date: Wed, 6 May 2020 15:28:00 +0200 Subject: [PATCH 148/167] Improve error message when essential task failed (#5918) * Initial commit Forked at: 24486f52929e9e518eeccbc6ad6da70e9e5bdf8a Parent branch: origin/master * Improve error message when essential task failed --- client/service/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/service/src/lib.rs b/client/service/src/lib.rs index 4e979ebb179..1c0f8ced742 100644 --- a/client/service/src/lib.rs +++ b/client/service/src/lib.rs @@ -255,7 +255,7 @@ where let essential_task = std::panic::AssertUnwindSafe(task) .catch_unwind() .map(move |_| { - error!("Essential task failed. Shutting down service."); + error!("Essential task `{}` failed. Shutting down service.", name); let _ = essential_failed.send(()); }); -- GitLab From 24b7f7287dc99663ff6e44ba50de1ff150f4852b Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Wed, 6 May 2020 18:33:48 +0300 Subject: [PATCH 149/167] add state trace (#5924) --- primitives/state-machine/src/ext.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 746e016a64e..1cd4f01e7b5 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -420,6 +420,12 @@ where key: Vec, value: Vec, ) { + trace!(target: "state", "{:04x}: Append({}) {}", + self.id, + HexDisplay::from(&key), + HexDisplay::from(&value), + ); + let _guard = sp_panic_handler::AbortGuard::force_abort(); self.mark_dirty(); -- GitLab From d21c2e5c0fd777a0664ddaf422de10c885872427 Mon Sep 17 00:00:00 2001 From: Marcio Diaz Date: Wed, 6 May 2020 17:37:02 +0200 Subject: [PATCH 150/167] Fix saturating_mul (#5925) --- primitives/arithmetic/src/traits.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/primitives/arithmetic/src/traits.rs b/primitives/arithmetic/src/traits.rs index 6b5e3244646..4201a41364b 100644 --- a/primitives/arithmetic/src/traits.rs +++ b/primitives/arithmetic/src/traits.rs @@ -123,7 +123,7 @@ pub trait Saturating { fn saturating_pow(self, exp: usize) -> Self; } -impl Saturating for T { +impl Saturating for T { fn saturating_add(self, o: Self) -> Self { ::saturating_add(self, o) } @@ -133,7 +133,14 @@ impl Saturating } fn saturating_mul(self, o: Self) -> Self { - self.checked_mul(&o).unwrap_or_else(Bounded::max_value) + self.checked_mul(&o) + .unwrap_or_else(|| + if (self < T::zero()) != (o < T::zero()) { + Bounded::min_value() + } else { + Bounded::max_value() + } + ) } fn saturating_pow(self, exp: usize) -> Self { -- GitLab From a2512e837003db3d3267764283edf31cf95a206c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= <123550+andresilva@users.noreply.github.com> Date: Wed, 6 May 2020 17:25:51 +0100 Subject: [PATCH 151/167] grandpa: report equivocations (#3868) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * session: runtime api for generating session membership proofs * grandpa: add runtime api for creating equivocation report txs * grandpa: submit signed equivocation report transactions * grandpa: use proper equivocation report type * grandpa: report equivocations * grandpa: validate equivocation proof * grandpa: update to finality-grandpa 0.9.1 * grandpa: fix encoding of session membership proof * grandpa: initialize set id session mapping for genesis session * grandpa: fix bug in set_id session validation * fix compilation * cleanup from merge conflicts * cleanup crate tomls * grandpa: refactor equivocation handling to separate trait * node-template: fix compilation * fix test compilation * bump finality-grandpa to v0.10.2 * rpc: fix runtime version test * CHERRY-PICK #4200: Add documentation to SubmitSignedTransaction and actually make it work Squashed commit of the following: commit dc8d71c3f0967e9721181e1c0d0d2b3cedbfc306 Author: Tomasz Drwięga Date: Tue Dec 3 16:29:33 2019 +0100 Split the method to avoid confusing type error message. commit 0c4c0378ff3857603f38aad3ba6ca9ea85eb8da2 Author: Tomasz Drwięga Date: Tue Dec 3 16:19:55 2019 +0100 Make accounts optional, fix logic. commit d715f645ab03dd63dc61901956b3802d6d39db5d Author: Tomasz Drwięga Date: Tue Dec 3 10:06:20 2019 +0100 Remove warning. commit 3f38218aa88a8a49557f26f77842fb8a46b5358b Merge: f85b89032 368318c9b Author: Tomasz Drwięga Date: Tue Dec 3 07:08:05 2019 +0100 Merge branch 'master' into td-signed-transactions commit f85b89032481aa4e3a791255dbd1c2672e2caf29 Merge: f8c954038 d8d5da2c6 Author: Tomasz Drwięga Date: Mon Dec 2 13:57:25 2019 +0100 Merge branch 'master' into td-signed-transactions commit f8c9540383e6e7481576476d341fea8e4937d1c7 Author: Tomasz Drwięga Date: Mon Nov 25 17:34:52 2019 +0100 Forgotten import. commit a645b90d6b785b36df52524d4c935a598da33402 Author: Tomasz Drwięga Date: Mon Nov 25 17:32:10 2019 +0100 Fix naming and bounds. commit bc28c60593c30c4f53a76df92f0c4546a29bc901 Author: Tomasz Drwięga Date: Mon Nov 25 17:01:05 2019 +0100 Add documentation to signed transactions and actually make them work. * grandpa: skip block initialization on report submission method * primitives: allow transaction pool access by default for offchain calls * grandpa: unused parameters * grandpa: remove unused method * grandpa: enable equivocation reporting * grandpa: add workaround for parameter encoding * grandpa: fix localized_payload calls in tests * fix submit_report_equivocation_extrinsic in runtimes * node: fix submit transaction test compilation * node: bump spec_version * rpc: fix api version test * grandpa: allow custom equivocation offence type * grandpa: add test for authorities::next_change_height * grandpa: cleanup report_equivocation function * node: move reporting app crypto to node-primitives * grandpa: move equivocation traits to own module * grandpa: rename app-crypto crate import * grandpa: export equivocation types * node: bump spec_version * grandpa: rename EquivocationReport to EquivocationProof * grandpa: add missing docs to primitives * grandpa: add missing docs to equivocation * node: fix compilation * grandpa: add missing docs to pallet * node: bump spec_version * fix whitespace * grandpa: return error on offence reporting * grandpa: expose session and validator count in proofs through traits * grandpa: use strong key in module KeyOwnerProofSystem * grandpa: move key ownership proof to grandpa runtime api * grandpa: remove unnecessary cloning when checking equivocation proof * grandpa: make report_equivocation a method in Environment * support: implement KeyOwnerProofSystem for () * grandpa: move KeyOwnerProofSystem to module trait * test-utils: fix runtime compilation * grandpa: fix test compilation * grandpa: fix test compilation after merge * grandpa: simplify transaction submission types * grandpa: validate equivocation report in signed extension * client: fix test * node: use ValidateEquivocationReport signed extension * grandpa: expose key ownership proof under opaque type * grandpa: better docs on key ownership proofs * grandpa: add note about signed extension * grandpa: add ValidateEquivocationReport::new * grandpa: remove skip_initialize_block from runtime api * grandpa: use new offchain transaction submission API * grandpa: take set_id in generate_key_ownership_proof * grandpa: update to finality-grandpa v0.12.2 * grandpa: cleanup usages of AuthoritySet::current * grandpa: fix test * grandpa: add mocking utilities for equivocation reporting * grandpa: add test for equivocation reporting * grandpa: move SetIdSession initialization * grandpa: add more tests * node: enable historical session manager * node: bump spec_version * node: use strong key types in KeyOwnerProofSystem definitions * grandpa: export GrandpaEquivocationOffence type --- Cargo.lock | 25 +- bin/node-template/runtime/src/lib.rs | 45 +- bin/node/cli/Cargo.toml | 5 +- bin/node/cli/src/service.rs | 4 +- bin/node/primitives/Cargo.toml | 6 + bin/node/primitives/src/lib.rs | 31 ++ bin/node/runtime/src/lib.rs | 67 ++- bin/node/testing/src/keyring.rs | 1 + bin/utils/subkey/Cargo.toml | 1 + bin/utils/subkey/src/main.rs | 2 + client/finality-grandpa/Cargo.toml | 4 +- client/finality-grandpa/rpc/Cargo.toml | 2 +- client/finality-grandpa/src/authorities.rs | 188 +++++++- client/finality-grandpa/src/aux_schema.rs | 6 +- .../src/communication/gossip.rs | 2 +- .../finality-grandpa/src/communication/mod.rs | 86 +--- .../src/communication/tests.rs | 4 +- client/finality-grandpa/src/environment.rs | 124 ++++- client/finality-grandpa/src/justification.rs | 3 +- client/finality-grandpa/src/lib.rs | 11 +- client/finality-grandpa/src/observer.rs | 1 + client/finality-grandpa/src/tests.rs | 18 +- frame/grandpa/Cargo.toml | 13 +- frame/grandpa/src/equivocation.rs | 406 ++++++++++++++++ frame/grandpa/src/lib.rs | 188 +++++--- frame/grandpa/src/mock.rs | 453 ++++++++++++++++-- frame/grandpa/src/tests.rs | 368 +++++++++++++- frame/session/Cargo.toml | 2 + frame/session/src/historical.rs | 67 +-- frame/support/src/lib.rs | 3 +- frame/support/src/traits.rs | 15 + primitives/core/src/lib.rs | 7 +- primitives/finality-grandpa/Cargo.toml | 10 +- primitives/finality-grandpa/src/lib.rs | 295 +++++++++++- primitives/session/Cargo.toml | 13 +- primitives/session/src/lib.rs | 31 +- test-utils/runtime/Cargo.toml | 2 + test-utils/runtime/src/lib.rs | 28 +- 38 files changed, 2245 insertions(+), 292 deletions(-) create mode 100644 frame/grandpa/src/equivocation.rs diff --git a/Cargo.lock b/Cargo.lock index 56fa41cb08e..3d5d7ef092d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1352,9 +1352,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.12.1" +version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab32971efbe776e46bfbc34d5b662d8e1de51fd14e26a2eba522c0f3470fc0f" +checksum = "1f4682570188cd105606e621b9992e580f717c15f8cd1b7d106b59f1c6e54680" dependencies = [ "either", "futures 0.3.4", @@ -3440,6 +3440,7 @@ dependencies = [ "pallet-authority-discovery", "pallet-balances", "pallet-contracts", + "pallet-grandpa", "pallet-im-online", "pallet-indices", "pallet-staking", @@ -3546,7 +3547,10 @@ dependencies = [ name = "node-primitives" version = "2.0.0-dev" dependencies = [ + "frame-system", + "parity-scale-codec", "pretty_assertions", + "sp-application-crypto", "sp-core", "sp-runtime", "sp-serializer", @@ -4275,16 +4279,25 @@ dependencies = [ name = "pallet-grandpa" version = "2.0.0-dev" dependencies = [ + "finality-grandpa", "frame-support", "frame-system", + "pallet-balances", "pallet-finality-tracker", + "pallet-offences", "pallet-session", + "pallet-staking", + "pallet-staking-reward-curve", + "pallet-timestamp", "parity-scale-codec", "serde", + "sp-application-crypto", "sp-core", "sp-finality-grandpa", "sp-io", + "sp-keyring", "sp-runtime", + "sp-session", "sp-staking", "sp-std", ] @@ -4486,6 +4499,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", + "sp-session", "sp-staking", "sp-std", "sp-trie", @@ -7524,10 +7538,13 @@ dependencies = [ name = "sp-finality-grandpa" version = "2.0.0-dev" dependencies = [ + "finality-grandpa", + "log", "parity-scale-codec", "serde", "sp-api", "sp-application-crypto", + "sp-core", "sp-runtime", "sp-std", ] @@ -7760,9 +7777,11 @@ dependencies = [ name = "sp-session" version = "2.0.0-dev" dependencies = [ + "parity-scale-codec", "sp-api", "sp-core", "sp-runtime", + "sp-staking", "sp-std", ] @@ -8027,6 +8046,7 @@ dependencies = [ "node-primitives", "node-runtime", "pallet-balances", + "pallet-grandpa", "pallet-transaction-payment", "parity-scale-codec", "rand 0.7.3", @@ -8181,6 +8201,7 @@ dependencies = [ "sp-consensus-aura", "sp-consensus-babe", "sp-core", + "sp-finality-grandpa", "sp-inherents", "sp-io", "sp-keyring", diff --git a/bin/node-template/runtime/src/lib.rs b/bin/node-template/runtime/src/lib.rs index 44332f61a15..8261577586e 100644 --- a/bin/node-template/runtime/src/lib.rs +++ b/bin/node-template/runtime/src/lib.rs @@ -9,17 +9,17 @@ include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); use sp_std::prelude::*; -use sp_core::OpaqueMetadata; +use sp_core::{crypto::KeyTypeId, OpaqueMetadata}; use sp_runtime::{ ApplyExtrinsicResult, generic, create_runtime_str, impl_opaque_keys, MultiSignature, transaction_validity::{TransactionValidity, TransactionSource}, }; use sp_runtime::traits::{ - BlakeTwo256, Block as BlockT, IdentityLookup, Verify, ConvertInto, IdentifyAccount + BlakeTwo256, Block as BlockT, IdentityLookup, Verify, ConvertInto, IdentifyAccount, NumberFor, }; use sp_api::impl_runtime_apis; use sp_consensus_aura::sr25519::AuthorityId as AuraId; -use grandpa::AuthorityList as GrandpaAuthorityList; +use grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList}; use grandpa::fg_primitives; use sp_version::RuntimeVersion; #[cfg(feature = "std")] @@ -32,8 +32,8 @@ pub use timestamp::Call as TimestampCall; pub use balances::Call as BalancesCall; pub use sp_runtime::{Permill, Perbill}; pub use frame_support::{ - StorageValue, construct_runtime, parameter_types, - traits::Randomness, + construct_runtime, parameter_types, StorageValue, + traits::{KeyOwnerProofSystem, Randomness}, weights::{ Weight, constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, @@ -188,6 +188,19 @@ impl aura::Trait for Runtime { impl grandpa::Trait for Runtime { type Event = Event; + type Call = Call; + + type KeyOwnerProofSystem = (); + + type KeyOwnerProof = + >::Proof; + + type KeyOwnerIdentification = >::IdentificationTuple; + + type HandleEquivocation = (); } parameter_types! { @@ -360,7 +373,7 @@ impl_runtime_apis! { fn decode_session_keys( encoded: Vec, - ) -> Option, sp_core::crypto::KeyTypeId)>> { + ) -> Option, KeyTypeId)>> { opaque::SessionKeys::decode_into_raw_public_keys(&encoded) } } @@ -369,5 +382,25 @@ impl_runtime_apis! { fn grandpa_authorities() -> GrandpaAuthorityList { Grandpa::grandpa_authorities() } + + fn submit_report_equivocation_extrinsic( + _equivocation_proof: fg_primitives::EquivocationProof< + ::Hash, + NumberFor, + >, + _key_owner_proof: fg_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: fg_primitives::SetId, + _authority_id: GrandpaId, + ) -> Option { + // NOTE: this is the only implementation possible since we've + // defined our key owner proof type as a bottom type (i.e. a type + // with no values). + None + } } } diff --git a/bin/node/cli/Cargo.toml b/bin/node/cli/Cargo.toml index 5b23a989cd0..de38ac66e54 100644 --- a/bin/node/cli/Cargo.toml +++ b/bin/node/cli/Cargo.toml @@ -85,8 +85,9 @@ pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../../../frame/support" } pallet-im-online = { version = "2.0.0-dev", default-features = false, path = "../../../frame/im-online" } -pallet-authority-discovery = { version = "2.0.0-dev", path = "../../../frame/authority-discovery" } -pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } +pallet-authority-discovery = { version = "2.0.0-dev", path = "../../../frame/authority-discovery" } +pallet-staking = { version = "2.0.0-dev", path = "../../../frame/staking" } +pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } # node-specific dependencies node-runtime = { version = "2.0.0-dev", path = "../runtime" } diff --git a/bin/node/cli/src/service.rs b/bin/node/cli/src/service.rs index e7c9a240ae6..7e27d57063e 100644 --- a/bin/node/cli/src/service.rs +++ b/bin/node/cli/src/service.rs @@ -613,6 +613,7 @@ mod tests { let check_nonce = frame_system::CheckNonce::from(index); let check_weight = frame_system::CheckWeight::new(); let payment = pallet_transaction_payment::ChargeTransactionPayment::from(0); + let validate_grandpa_equivocation = pallet_grandpa::ValidateEquivocationReport::new(); let extra = ( check_version, check_genesis, @@ -620,11 +621,12 @@ mod tests { check_nonce, check_weight, payment, + validate_grandpa_equivocation, ); let raw_payload = SignedPayload::from_raw( function, extra, - (version, genesis_hash, genesis_hash, (), (), ()) + (version, genesis_hash, genesis_hash, (), (), (), ()) ); let signature = raw_payload.using_encoded(|payload| { signer.sign(payload) diff --git a/bin/node/primitives/Cargo.toml b/bin/node/primitives/Cargo.toml index 11959bde75c..e69b626b542 100644 --- a/bin/node/primitives/Cargo.toml +++ b/bin/node/primitives/Cargo.toml @@ -11,6 +11,9 @@ repository = "https://github.com/paritytech/substrate/" targets = ["x86_64-unknown-linux-gnu"] [dependencies] +codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } +frame-system = { version = "2.0.0-dev", default-features = false, path = "../../../frame/system" } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/application-crypto" } sp-core = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/core" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../../primitives/runtime" } @@ -21,6 +24,9 @@ pretty_assertions = "0.6.1" [features] default = ["std"] std = [ + "codec/std", + "frame-system/std", + "sp-application-crypto/std", "sp-core/std", "sp-runtime/std", ] diff --git a/bin/node/primitives/src/lib.rs b/bin/node/primitives/src/lib.rs index 97e8f50c271..c6180b31f7e 100644 --- a/bin/node/primitives/src/lib.rs +++ b/bin/node/primitives/src/lib.rs @@ -62,3 +62,34 @@ pub type Header = generic::Header; pub type Block = generic::Block; /// Block ID. pub type BlockId = generic::BlockId; + +/// App-specific crypto used for reporting equivocation/misbehavior in BABE and +/// GRANDPA. Any rewards for misbehavior reporting will be paid out to this +/// account. +pub mod report { + use super::{Signature, Verify}; + use frame_system::offchain::AppCrypto; + use sp_core::crypto::KeyTypeId; + + /// Key type for the reporting module. Used for reporting BABE and GRANDPA + /// equivocations. + pub const KEY_TYPE: KeyTypeId = KeyTypeId(*b"fish"); + + mod app { + use sp_application_crypto::{app_crypto, sr25519}; + app_crypto!(sr25519, super::KEY_TYPE); + } + + /// Identity of the equivocation/misbehavior reporter. + pub type ReporterId = app::Public; + + /// An `AppCrypto` type to allow submitting signed transactions using the reporting + /// application key as signer. + pub struct ReporterAppCrypto; + + impl AppCrypto<::Signer, Signature> for ReporterAppCrypto { + type RuntimeAppPublic = ReporterId; + type GenericSignature = sp_core::sr25519::Signature; + type GenericPublic = sp_core::sr25519::Public; + } +} diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index e3613ea75ab..294aac8ae39 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -27,9 +27,13 @@ use frame_support::{ Weight, constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight, WEIGHT_PER_SECOND}, }, - traits::{Currency, Randomness, OnUnbalanced, Imbalance, LockIdentifier}, + traits::{Currency, Imbalance, KeyOwnerProofSystem, OnUnbalanced, Randomness, LockIdentifier}, +}; +use sp_core::{ + crypto::KeyTypeId, + u32_trait::{_1, _2, _3, _4}, + OpaqueMetadata, }; -use sp_core::u32_trait::{_1, _2, _3, _4}; pub use node_primitives::{AccountId, Signature}; use node_primitives::{AccountIndex, Balance, BlockNumber, Hash, Index, Moment}; use sp_api::impl_runtime_apis; @@ -41,18 +45,18 @@ use sp_runtime::curve::PiecewiseLinear; use sp_runtime::transaction_validity::{TransactionValidity, TransactionSource, TransactionPriority}; use sp_runtime::traits::{ self, BlakeTwo256, Block as BlockT, StaticLookup, SaturatedConversion, - ConvertInto, OpaqueKeys, + ConvertInto, OpaqueKeys, NumberFor, }; use sp_version::RuntimeVersion; #[cfg(any(feature = "std", test))] use sp_version::NativeVersion; -use sp_core::OpaqueMetadata; -use pallet_grandpa::AuthorityList as GrandpaAuthorityList; +use pallet_grandpa::{AuthorityId as GrandpaId, AuthorityList as GrandpaAuthorityList}; use pallet_grandpa::fg_primitives; use pallet_im_online::sr25519::AuthorityId as ImOnlineId; use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId; use pallet_transaction_payment_rpc_runtime_api::RuntimeDispatchInfo; use pallet_contracts_rpc_runtime_api::ContractExecResult; +use pallet_session::{historical as pallet_session_historical}; use sp_inherents::{InherentData, CheckInherentsResult}; #[cfg(any(feature = "std", test))] @@ -86,7 +90,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // and set impl_version to 0. If only runtime // implementation changes and behavior does not, then leave spec_version as // is and increment impl_version. - spec_version: 246, + spec_version: 247, impl_version: 0, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -271,7 +275,7 @@ impl pallet_session::Trait for Runtime { type ValidatorId = ::AccountId; type ValidatorIdOf = pallet_staking::StashOf; type ShouldEndSession = Babe; - type SessionManager = Staking; + type SessionManager = pallet_session::historical::NoteHistoricalRoot; type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type DisabledValidatorsThreshold = DisabledValidatorsThreshold; @@ -529,6 +533,7 @@ impl frame_system::offchain::CreateSignedTransaction for R frame_system::CheckNonce::::from(nonce), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(tip), + pallet_grandpa::ValidateEquivocationReport::::new(), ); let raw_payload = SignedPayload::new(call, extra).map_err(|e| { debug::warn!("Unable to create signed payload: {:?}", e); @@ -572,6 +577,24 @@ impl pallet_authority_discovery::Trait for Runtime {} impl pallet_grandpa::Trait for Runtime { type Event = Event; + type Call = Call; + + type KeyOwnerProofSystem = Historical; + + type KeyOwnerProof = + >::Proof; + + type KeyOwnerIdentification = >::IdentificationTuple; + + type HandleEquivocation = pallet_grandpa::EquivocationHandler< + Self::KeyOwnerIdentification, + node_primitives::report::ReporterAppCrypto, + Runtime, + Offences, + >; } parameter_types! { @@ -693,6 +716,7 @@ construct_runtime!( ImOnline: pallet_im_online::{Module, Call, Storage, Event, ValidateUnsigned, Config}, AuthorityDiscovery: pallet_authority_discovery::{Module, Call, Config}, Offences: pallet_offences::{Module, Call, Storage, Event}, + Historical: pallet_session_historical::{Module}, RandomnessCollectiveFlip: pallet_randomness_collective_flip::{Module, Call, Storage}, Identity: pallet_identity::{Module, Call, Storage, Event}, Society: pallet_society::{Module, Call, Storage, Event, Config}, @@ -720,6 +744,7 @@ pub type SignedExtra = ( frame_system::CheckNonce, frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, + pallet_grandpa::ValidateEquivocationReport, ); /// Unchecked extrinsic type as expected by this runtime. pub type UncheckedExtrinsic = generic::UncheckedExtrinsic; @@ -792,6 +817,32 @@ impl_runtime_apis! { fn grandpa_authorities() -> GrandpaAuthorityList { Grandpa::grandpa_authorities() } + + fn submit_report_equivocation_extrinsic( + equivocation_proof: fg_primitives::EquivocationProof< + ::Hash, + NumberFor, + >, + key_owner_proof: fg_primitives::OpaqueKeyOwnershipProof, + ) -> Option<()> { + let key_owner_proof = key_owner_proof.decode()?; + + Grandpa::submit_report_equivocation_extrinsic( + equivocation_proof, + key_owner_proof, + ) + } + + fn generate_key_ownership_proof( + _set_id: fg_primitives::SetId, + authority_id: GrandpaId, + ) -> Option { + use codec::Encode; + + Historical::prove((fg_primitives::KEY_TYPE, authority_id)) + .map(|p| p.encode()) + .map(fg_primitives::OpaqueKeyOwnershipProof::new) + } } impl sp_consensus_babe::BabeApi for Runtime { @@ -880,7 +931,7 @@ impl_runtime_apis! { fn decode_session_keys( encoded: Vec, - ) -> Option, sp_core::crypto::KeyTypeId)>> { + ) -> Option, KeyTypeId)>> { SessionKeys::decode_into_raw_public_keys(&encoded) } } diff --git a/bin/node/testing/src/keyring.rs b/bin/node/testing/src/keyring.rs index 5eebc09f4b7..7ed2b36502e 100644 --- a/bin/node/testing/src/keyring.rs +++ b/bin/node/testing/src/keyring.rs @@ -74,6 +74,7 @@ pub fn signed_extra(nonce: Index, extra_fee: Balance) -> SignedExtra { frame_system::CheckNonce::from(nonce), frame_system::CheckWeight::new(), pallet_transaction_payment::ChargeTransactionPayment::from(extra_fee), + pallet_grandpa::ValidateEquivocationReport::new(), ) } diff --git a/bin/utils/subkey/Cargo.toml b/bin/utils/subkey/Cargo.toml index b0c642ec43e..7f50f4546ce 100644 --- a/bin/utils/subkey/Cargo.toml +++ b/bin/utils/subkey/Cargo.toml @@ -26,6 +26,7 @@ codec = { package = "parity-scale-codec", version = "1.3.0" } frame-system = { version = "2.0.0-dev", path = "../../../frame/system" } pallet-balances = { version = "2.0.0-dev", path = "../../../frame/balances" } pallet-transaction-payment = { version = "2.0.0-dev", path = "../../../frame/transaction-payment" } +pallet-grandpa = { version = "2.0.0-dev", path = "../../../frame/grandpa" } rpassword = "4.0.1" itertools = "0.8.2" derive_more = { version = "0.99.2" } diff --git a/bin/utils/subkey/src/main.rs b/bin/utils/subkey/src/main.rs index 22706ebd822..754a2611bcd 100644 --- a/bin/utils/subkey/src/main.rs +++ b/bin/utils/subkey/src/main.rs @@ -708,6 +708,7 @@ fn create_extrinsic( frame_system::CheckNonce::::from(i), frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(f), + pallet_grandpa::ValidateEquivocationReport::::new(), ) }; let raw_payload = SignedPayload::from_raw( @@ -720,6 +721,7 @@ fn create_extrinsic( (), (), (), + (), ), ); let signature = raw_payload.using_encoded(|payload| signer.sign(payload)).into_runtime(); diff --git a/client/finality-grandpa/Cargo.toml b/client/finality-grandpa/Cargo.toml index 97dafc3d46b..9b5d787f889 100644 --- a/client/finality-grandpa/Cargo.toml +++ b/client/finality-grandpa/Cargo.toml @@ -42,11 +42,11 @@ sp-finality-tracker = { version = "2.0.0-dev", path = "../../primitives/finality sp-finality-grandpa = { version = "2.0.0-dev", path = "../../primitives/finality-grandpa" } prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus", version = "0.8.0-dev"} sc-block-builder = { version = "0.8.0-dev", path = "../block-builder" } -finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } +finality-grandpa = { version = "0.12.2", features = ["derive-codec"] } pin-project = "0.4.6" [dev-dependencies] -finality-grandpa = { version = "0.12.1", features = ["derive-codec", "test-helpers"] } +finality-grandpa = { version = "0.12.2", features = ["derive-codec", "test-helpers"] } sc-network = { version = "0.8.0-dev", path = "../network" } sc-network-test = { version = "0.8.0-dev", path = "../network/test" } sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } diff --git a/client/finality-grandpa/rpc/Cargo.toml b/client/finality-grandpa/rpc/Cargo.toml index 5f7ccc9218e..175a4ccfe8e 100644 --- a/client/finality-grandpa/rpc/Cargo.toml +++ b/client/finality-grandpa/rpc/Cargo.toml @@ -9,7 +9,7 @@ license = "GPL-3.0" [dependencies] sc-finality-grandpa = { version = "0.8.0-dev", path = "../" } -finality-grandpa = { version = "0.12.1", features = ["derive-codec"] } +finality-grandpa = { version = "0.12.2", features = ["derive-codec"] } jsonrpc-core = "14.0.3" jsonrpc-core-client = "14.0.3" jsonrpc-derive = "14.0.3" diff --git a/client/finality-grandpa/src/authorities.rs b/client/finality-grandpa/src/authorities.rs index cb767574301..80c1f4ad3fe 100644 --- a/client/finality-grandpa/src/authorities.rs +++ b/client/finality-grandpa/src/authorities.rs @@ -100,15 +100,17 @@ pub(crate) struct Status { /// A set of authorities. #[derive(Debug, Clone, Encode, Decode, PartialEq)] pub(crate) struct AuthoritySet { + /// The current active authorities. pub(crate) current_authorities: AuthorityList, - set_id: u64, - // Tree of pending standard changes across forks. Standard changes are - // enacted on finality and must be enacted (i.e. finalized) in-order across - // a given branch + /// The current set id. + pub(crate) set_id: u64, + /// Tree of pending standard changes across forks. Standard changes are + /// enacted on finality and must be enacted (i.e. finalized) in-order across + /// a given branch pub(crate) pending_standard_changes: ForkTree>, - // Pending forced changes across different forks (at most one per fork). - // Forced changes are enacted on block depth (not finality), for this reason - // only one forced change should exist per fork. + /// Pending forced changes across different forks (at most one per fork). + /// Forced changes are enacted on block depth (not finality), for this reason + /// only one forced change should exist per fork. pending_forced_changes: Vec>, } @@ -162,9 +164,55 @@ where H: PartialEq, impl AuthoritySet where - N: Add + Ord + Clone + Debug, - H: Clone + Debug + N: Add + Ord + Clone + Debug, + H: Clone + Debug, { + /// Returns the block hash and height at which the next pending change in + /// the given chain (i.e. it includes `best_hash`) was signalled, `None` if + /// there are no pending changes for the given chain. + /// + /// This is useful since we know that when a change is signalled the + /// underlying runtime authority set management module (e.g. session module) + /// has updated its internal state (e.g. a new session started). + pub(crate) fn next_change( + &self, + best_hash: &H, + is_descendent_of: &F, + ) -> Result, fork_tree::Error> + where + F: Fn(&H, &H) -> Result, + E: std::error::Error, + { + let mut forced = None; + for change in &self.pending_forced_changes { + if is_descendent_of(&change.canon_hash, best_hash)? { + forced = Some((change.canon_hash.clone(), change.canon_height.clone())); + break; + } + } + + let mut standard = None; + for (_, _, change) in self.pending_standard_changes.roots() { + if is_descendent_of(&change.canon_hash, best_hash)? { + standard = Some((change.canon_hash.clone(), change.canon_height.clone())); + break; + } + } + + let earliest = match (forced, standard) { + (Some(forced), Some(standard)) => Some(if forced.1 < standard.1 { + forced + } else { + standard + }), + (Some(forced), None) => Some(forced), + (None, Some(standard)) => Some(standard), + (None, None) => None, + }; + + Ok(earliest) + } + fn add_standard_change( &mut self, pending: PendingChange, @@ -922,6 +970,128 @@ mod tests { ); } + #[test] + fn next_change_works() { + let current_authorities = vec![(AuthorityId::from_slice(&[1; 32]), 1)]; + + let mut authorities = AuthoritySet { + current_authorities: current_authorities.clone(), + set_id: 0, + pending_standard_changes: ForkTree::new(), + pending_forced_changes: Vec::new(), + }; + + let new_set = current_authorities.clone(); + + // We have three pending changes with 2 possible roots that are enacted + // immediately on finality (i.e. standard changes). + let change_a0 = PendingChange { + next_authorities: new_set.clone(), + delay: 0, + canon_height: 5, + canon_hash: "hash_a0", + delay_kind: DelayKind::Finalized, + }; + + let change_a1 = PendingChange { + next_authorities: new_set.clone(), + delay: 0, + canon_height: 10, + canon_hash: "hash_a1", + delay_kind: DelayKind::Finalized, + }; + + let change_b = PendingChange { + next_authorities: new_set.clone(), + delay: 0, + canon_height: 4, + canon_hash: "hash_b", + delay_kind: DelayKind::Finalized, + }; + + // A0 (#5) <- A10 (#8) <- A1 (#10) <- best_a + // B (#4) <- best_b + let is_descendent_of = is_descendent_of(|base, hash| match (*base, *hash) { + ("hash_a0", "hash_a1") => true, + ("hash_a0", "best_a") => true, + ("hash_a1", "best_a") => true, + ("hash_a10", "best_a") => true, + ("hash_b", "best_b") => true, + _ => false, + }); + + // add the three pending changes + authorities + .add_pending_change(change_b, &is_descendent_of) + .unwrap(); + authorities + .add_pending_change(change_a0, &is_descendent_of) + .unwrap(); + authorities + .add_pending_change(change_a1, &is_descendent_of) + .unwrap(); + + // the earliest change at block `best_a` should be the change at A0 (#5) + assert_eq!( + authorities + .next_change(&"best_a", &is_descendent_of) + .unwrap(), + Some(("hash_a0", 5)), + ); + + // the earliest change at block `best_b` should be the change at B (#4) + assert_eq!( + authorities + .next_change(&"best_b", &is_descendent_of) + .unwrap(), + Some(("hash_b", 4)), + ); + + // we apply the change at A0 which should prune it and the fork at B + authorities + .apply_standard_changes("hash_a0", 5, &is_descendent_of, false) + .unwrap(); + + // the next change is now at A1 (#10) + assert_eq!( + authorities + .next_change(&"best_a", &is_descendent_of) + .unwrap(), + Some(("hash_a1", 10)), + ); + + // there's no longer any pending change at `best_b` fork + assert_eq!( + authorities + .next_change(&"best_b", &is_descendent_of) + .unwrap(), + None, + ); + + // we a forced change at A10 (#8) + let change_a10 = PendingChange { + next_authorities: new_set.clone(), + delay: 0, + canon_height: 8, + canon_hash: "hash_a10", + delay_kind: DelayKind::Best { + median_last_finalized: 0, + }, + }; + + authorities + .add_pending_change(change_a10, &static_is_descendent_of(false)) + .unwrap(); + + // it should take precedence over the change at A1 (#10) + assert_eq!( + authorities + .next_change(&"best_a", &is_descendent_of) + .unwrap(), + Some(("hash_a10", 8)), + ); + } + #[test] fn maintains_authority_list_invariants() { // empty authority lists are invalid diff --git a/client/finality-grandpa/src/aux_schema.rs b/client/finality-grandpa/src/aux_schema.rs index c217bc328a9..e4e8a980420 100644 --- a/client/finality-grandpa/src/aux_schema.rs +++ b/client/finality-grandpa/src/aux_schema.rs @@ -154,7 +154,7 @@ fn migrate_from_version0( None => (0, genesis_round()), }; - let set_id = new_set.current().0; + let set_id = new_set.set_id; let base = last_round_state.prevote_ghost .expect("state is for completed round; completed rounds must have a prevote ghost; qed."); @@ -201,7 +201,7 @@ fn migrate_from_version1( backend, AUTHORITY_SET_KEY, )? { - let set_id = set.current().0; + let set_id = set.set_id; let completed_rounds = |number, state, base| CompletedRounds::new( CompletedRound { @@ -312,7 +312,7 @@ pub(crate) fn load_persistent( .expect("state is for completed round; completed rounds must have a prevote ghost; qed."); VoterSetState::live( - set.current().0, + set.set_id, &set, base, ) diff --git a/client/finality-grandpa/src/communication/gossip.rs b/client/finality-grandpa/src/communication/gossip.rs index afa65817025..183ffc65e83 100644 --- a/client/finality-grandpa/src/communication/gossip.rs +++ b/client/finality-grandpa/src/communication/gossip.rs @@ -814,7 +814,7 @@ impl Inner { return Action::Discard(cost::UNKNOWN_VOTER); } - if let Err(()) = super::check_message_sig::( + if let Err(()) = sp_finality_grandpa::check_message_signature( &full.message.message, &full.message.id, &full.message.signature, diff --git a/client/finality-grandpa/src/communication/mod.rs b/client/finality-grandpa/src/communication/mod.rs index c75fe251e78..16af54986a0 100644 --- a/client/finality-grandpa/src/communication/mod.rs +++ b/client/finality-grandpa/src/communication/mod.rs @@ -610,30 +610,6 @@ impl> Clone for NetworkBridge { } } -/// Encode round message localized to a given round and set id. -pub(crate) fn localized_payload( - round: RoundNumber, - set_id: SetIdNumber, - message: &E, -) -> Vec { - let mut buf = Vec::new(); - localized_payload_with_buffer(round, set_id, message, &mut buf); - buf -} - -/// Encode round message localized to a given round and set id using the given -/// buffer. The given buffer will be cleared and the resulting encoded payload -/// will always be written to the start of the buffer. -pub(crate) fn localized_payload_with_buffer( - round: RoundNumber, - set_id: SetIdNumber, - message: &E, - buf: &mut Vec, -) { - buf.clear(); - (message, round, set_id).encode_to(buf) -} - /// Type-safe wrapper around a round number. #[derive(Debug, Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Encode, Decode)] pub struct Round(pub RoundNumber); @@ -642,48 +618,6 @@ pub struct Round(pub RoundNumber); #[derive(Debug, Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Encode, Decode)] pub struct SetId(pub SetIdNumber); -/// Check a message signature by encoding the message as a localized payload and -/// verifying the provided signature using the expected authority id. -pub(crate) fn check_message_sig( - message: &Message, - id: &AuthorityId, - signature: &AuthoritySignature, - round: RoundNumber, - set_id: SetIdNumber, -) -> Result<(), ()> { - check_message_sig_with_buffer::( - message, - id, - signature, - round, - set_id, - &mut Vec::new(), - ) -} - -/// Check a message signature by encoding the message as a localized payload and -/// verifying the provided signature using the expected authority id. -/// The encoding necessary to verify the signature will be done using the given -/// buffer, the original content of the buffer will be cleared. -pub(crate) fn check_message_sig_with_buffer( - message: &Message, - id: &AuthorityId, - signature: &AuthoritySignature, - round: RoundNumber, - set_id: SetIdNumber, - buf: &mut Vec, -) -> Result<(), ()> { - let as_public = id.clone(); - localized_payload_with_buffer(round, set_id, message, buf); - - if AuthorityPair::verify(signature, buf, &as_public) { - Ok(()) - } else { - debug!(target: "afg", "Bad signature on message from {:?}", id); - Err(()) - } -} - /// A sink for outgoing messages to the network. Any messages that are sent will /// be replaced, as appropriate, according to the given `HasVoted`. /// NOTE: The votes are stored unsigned, which means that the signatures need to @@ -731,16 +665,14 @@ impl Sink> for OutgoingMessages } // when locals exist, sign messages on import - if let Some((ref pair, ref local_id)) = self.locals { - let encoded = localized_payload(self.round, self.set_id, &msg); - let signature = pair.sign(&encoded[..]); - + if let Some((ref pair, _)) = self.locals { let target_hash = msg.target().0.clone(); - let signed = SignedMessage:: { - message: msg, - signature, - id: local_id.clone(), - }; + let signed = sp_finality_grandpa::sign_message( + msg, + pair, + self.round, + self.set_id, + ); let message = GossipMessage::Vote(VoteMessage:: { message: signed.clone(), @@ -828,7 +760,7 @@ fn check_compact_commit( use crate::communication::gossip::Misbehavior; use finality_grandpa::Message as GrandpaMessage; - if let Err(()) = check_message_sig_with_buffer::( + if let Err(()) = sp_finality_grandpa::check_message_signature_with_buffer( &GrandpaMessage::Precommit(precommit.clone()), id, sig, @@ -916,7 +848,7 @@ fn check_catch_up( for (msg, id, sig) in messages { signatures_checked += 1; - if let Err(()) = check_message_sig_with_buffer::( + if let Err(()) = sp_finality_grandpa::check_message_signature_with_buffer( &msg, id, sig, diff --git a/client/finality-grandpa/src/communication/tests.rs b/client/finality-grandpa/src/communication/tests.rs index 883fdb4f26f..273804f7a45 100644 --- a/client/finality-grandpa/src/communication/tests.rs +++ b/client/finality-grandpa/src/communication/tests.rs @@ -226,7 +226,7 @@ fn good_commit_leads_to_relay() { let target_number = 500; let precommit = finality_grandpa::Precommit { target_hash: target_hash.clone(), target_number }; - let payload = super::localized_payload( + let payload = sp_finality_grandpa::localized_payload( round, set_id, &finality_grandpa::Message::Precommit(precommit.clone()) ); @@ -374,7 +374,7 @@ fn bad_commit_leads_to_report() { let target_number = 500; let precommit = finality_grandpa::Precommit { target_hash: target_hash.clone(), target_number }; - let payload = super::localized_payload( + let payload = sp_finality_grandpa::localized_payload( round, set_id, &finality_grandpa::Message::Precommit(precommit.clone()) ); diff --git a/client/finality-grandpa/src/environment.rs b/client/finality-grandpa/src/environment.rs index 1c11c52468d..1db1bcbb8d4 100644 --- a/client/finality-grandpa/src/environment.rs +++ b/client/finality-grandpa/src/environment.rs @@ -25,14 +25,14 @@ use parity_scale_codec::{Decode, Encode}; use futures::prelude::*; use futures_timer::Delay; use parking_lot::RwLock; -use sp_blockchain::{HeaderBackend, Error as ClientError, HeaderMetadata}; use std::marker::PhantomData; use sc_client_api::{backend::{Backend, apply_aux}, utils::is_descendent_of}; use finality_grandpa::{ - BlockNumberOps, Equivocation, Error as GrandpaError, round::State as RoundState, + BlockNumberOps, Error as GrandpaError, round::State as RoundState, voter, voter_set::VoterSet, }; +use sp_blockchain::{HeaderBackend, HeaderMetadata, Error as ClientError}; use sp_core::Pair; use sp_runtime::generic::BlockId; use sp_runtime::traits::{ @@ -53,7 +53,10 @@ use crate::consensus_changes::SharedConsensusChanges; use crate::justification::GrandpaJustification; use crate::until_imported::UntilVoteTargetImported; use crate::voting_rule::VotingRule; -use sp_finality_grandpa::{AuthorityId, AuthoritySignature, SetId, RoundNumber}; +use sp_finality_grandpa::{ + AuthorityId, AuthoritySignature, Equivocation, EquivocationProof, + GrandpaApi, RoundNumber, SetId, +}; use prometheus_endpoint::{Gauge, U64, register, PrometheusError}; type HistoricalVotes = finality_grandpa::HistoricalVotes< @@ -124,7 +127,7 @@ impl CompletedRounds { let mut rounds = Vec::with_capacity(NUM_LAST_COMPLETED_ROUNDS); rounds.push(genesis); - let voters = voters.current().1.iter().map(|(a, _)| a.clone()).collect(); + let voters = voters.current_authorities.iter().map(|(a, _)| a.clone()).collect(); CompletedRounds { rounds, set_id, voters } } @@ -403,7 +406,7 @@ pub(crate) struct Environment, SC, pub(crate) _phantom: PhantomData, } -impl, SC, VR> Environment { +impl, SC, VR> Environment { /// Updates the voter set state using the given closure. The write lock is /// held during evaluation of the closure and the environment's voter set /// state is set to its result if successful. @@ -430,6 +433,98 @@ impl, SC, VR> Environment Environment +where + Block: BlockT, + BE: Backend, + C: crate::ClientForGrandpa, + C::Api: GrandpaApi, + N: NetworkT, + SC: SelectChain + 'static, +{ + /// Report the given equivocation to the GRANDPA runtime module. This method + /// generates a session membership proof of the offender and then submits an + /// extrinsic to report the equivocation. In particular, the session membership + /// proof must be generated at the block at which the given set was active which + /// isn't necessarily the best block if there are pending authority set changes. + fn report_equivocation( + &self, + equivocation: Equivocation>, + ) -> Result<(), Error> { + let is_descendent_of = is_descendent_of(&*self.client, None); + + let best_header = self.select_chain + .best_chain() + .map_err(|e| Error::Blockchain(e.to_string()))?; + + let authority_set = self.authority_set.inner().read(); + + // block hash and number of the next pending authority set change in the + // given best chain. + let next_change = authority_set + .next_change(&best_header.hash(), &is_descendent_of) + .map_err(|e| Error::Safety(e.to_string()))?; + + // find the hash of the latest block in the current set + let current_set_latest_hash = match next_change { + Some((_, n)) if n.is_zero() => { + return Err(Error::Safety( + "Authority set change signalled at genesis.".to_string(), + )) + } + // the next set starts at `n` so the current one lasts until `n - 1`. if + // `n` is later than the best block, then the current set is still live + // at best block. + Some((_, n)) if n > *best_header.number() => best_header.hash(), + Some((h, _)) => { + // this is the header at which the new set will start + let header = self.client.header(BlockId::Hash(h))?.expect( + "got block hash from registered pending change; \ + pending changes are only registered on block import; qed.", + ); + + // its parent block is the last block in the current set + *header.parent_hash() + } + // there is no pending change, the latest block for the current set is + // the best block. + None => best_header.hash(), + }; + + // generate key ownership proof at that block + let key_owner_proof = match self.client + .runtime_api() + .generate_key_ownership_proof( + &BlockId::Hash(current_set_latest_hash), + authority_set.set_id, + equivocation.offender().clone(), + ) + .map_err(Error::Client)? + { + Some(proof) => proof, + None => { + debug!(target: "afg", "Equivocation offender is not part of the authority set."); + return Ok(()); + } + }; + + // submit equivocation report at **best** block + let equivocation_proof = EquivocationProof::new( + authority_set.set_id, + equivocation, + ); + + self.client.runtime_api() + .submit_report_equivocation_extrinsic( + &BlockId::Hash(best_header.hash()), + equivocation_proof, + key_owner_proof, + ).map_err(Error::Client)?; + + Ok(()) + } +} + impl finality_grandpa::Chain> for Environment @@ -437,7 +532,7 @@ where Block: 'static, BE: Backend, C: crate::ClientForGrandpa, - N: NetworkT + 'static + Send, + N: NetworkT + 'static + Send, SC: SelectChain + 'static, VR: VotingRule, NumberFor: BlockNumberOps, @@ -451,7 +546,7 @@ where // signaled asynchronously. therefore the voter could still vote in the next round // before activating the new set. the `authority_set` is updated immediately thus we // restrict the voter based on that. - if self.set_id != self.authority_set.inner().read().current().0 { + if self.set_id != self.authority_set.set_id() { return None; } @@ -579,7 +674,8 @@ where Block: 'static, B: Backend, C: crate::ClientForGrandpa + 'static, - N: NetworkT + 'static + Send + Sync, + C::Api: GrandpaApi, + N: NetworkT + 'static + Send + Sync, SC: SelectChain + 'static, VR: VotingRule, NumberFor: BlockNumberOps, @@ -925,19 +1021,23 @@ where fn prevote_equivocation( &self, _round: RoundNumber, - equivocation: ::finality_grandpa::Equivocation, Self::Signature> + equivocation: finality_grandpa::Equivocation, Self::Signature>, ) { warn!(target: "afg", "Detected prevote equivocation in the finality worker: {:?}", equivocation); - // nothing yet; this could craft misbehavior reports of some kind. + if let Err(err) = self.report_equivocation(equivocation.into()) { + warn!(target: "afg", "Error reporting prevote equivocation: {:?}", err); + } } fn precommit_equivocation( &self, _round: RoundNumber, - equivocation: Equivocation, Self::Signature> + equivocation: finality_grandpa::Equivocation, Self::Signature>, ) { warn!(target: "afg", "Detected precommit equivocation in the finality worker: {:?}", equivocation); - // nothing yet + if let Err(err) = self.report_equivocation(equivocation.into()) { + warn!(target: "afg", "Error reporting precommit equivocation: {:?}", err); + } } } diff --git a/client/finality-grandpa/src/justification.rs b/client/finality-grandpa/src/justification.rs index ebce90f2c18..cbaa2cb4415 100644 --- a/client/finality-grandpa/src/justification.rs +++ b/client/finality-grandpa/src/justification.rs @@ -26,7 +26,6 @@ use sp_runtime::traits::{NumberFor, Block as BlockT, Header as HeaderT}; use sp_finality_grandpa::AuthorityId; use crate::{Commit, Error}; -use crate::communication; /// A GRANDPA justification for block finality, it includes a commit message and /// an ancestry proof including all headers routing all precommit target blocks @@ -132,7 +131,7 @@ impl GrandpaJustification { let mut buf = Vec::new(); let mut visited_hashes = HashSet::new(); for signed in self.commit.precommits.iter() { - if let Err(_) = communication::check_message_sig_with_buffer::( + if let Err(_) = sp_finality_grandpa::check_message_signature_with_buffer( &finality_grandpa::Message::Precommit(signed.precommit.clone()), &signed.id, &signed.signature, diff --git a/client/finality-grandpa/src/lib.rs b/client/finality-grandpa/src/lib.rs index 9b64be895d8..ac677bf3f32 100644 --- a/client/finality-grandpa/src/lib.rs +++ b/client/finality-grandpa/src/lib.rs @@ -62,9 +62,10 @@ use sc_client_api::{ LockImportRun, BlockchainEvents, CallExecutor, ExecutionStrategy, Finalizer, TransactionFor, ExecutorProvider, }; -use sp_blockchain::{HeaderBackend, Error as ClientError, HeaderMetadata}; use parity_scale_codec::{Decode, Encode}; use prometheus_endpoint::{PrometheusError, Registry}; +use sp_api::ProvideRuntimeApi; +use sp_blockchain::{HeaderBackend, Error as ClientError, HeaderMetadata}; use sp_runtime::generic::BlockId; use sp_runtime::traits::{NumberFor, Block as BlockT, DigestFor, Zero}; use sc_keystore::KeyStorePtr; @@ -134,8 +135,7 @@ use communication::{NetworkBridge, Network as NetworkT}; use sp_finality_grandpa::{AuthorityList, AuthorityPair, AuthoritySignature, SetId}; // Re-export these two because it's just so damn convenient. -pub use sp_finality_grandpa::{AuthorityId, ScheduledChange}; -use sp_api::ProvideRuntimeApi; +pub use sp_finality_grandpa::{AuthorityId, GrandpaApi, ScheduledChange}; use std::marker::PhantomData; #[cfg(test)] @@ -143,6 +143,7 @@ mod tests; /// A GRANDPA message for a substrate chain. pub type Message = finality_grandpa::Message<::Hash, NumberFor>; + /// A signed message. pub type SignedMessage = finality_grandpa::SignedMessage< ::Hash, @@ -687,6 +688,7 @@ pub fn run_grandpa_voter( NumberFor: BlockNumberOps, DigestFor: Encode, C: ClientForGrandpa + 'static, + C::Api: GrandpaApi, { let GrandpaParams { mut config, @@ -802,6 +804,7 @@ where Block: BlockT, B: Backend + 'static, C: ClientForGrandpa + 'static, + C::Api: GrandpaApi, N: NetworkT + Sync, NumberFor: BlockNumberOps, SC: SelectChain + 'static, @@ -971,7 +974,6 @@ where voters, set_id: new.set_id, voter_set_state: self.env.voter_set_state.clone(), - // Fields below are simply transferred and not updated. client: self.env.client.clone(), select_chain: self.env.select_chain.clone(), config: self.env.config.clone(), @@ -1013,6 +1015,7 @@ where NumberFor: BlockNumberOps, SC: SelectChain + 'static, C: ClientForGrandpa + 'static, + C::Api: GrandpaApi, VR: VotingRule + Clone + 'static, { type Output = Result<(), Error>; diff --git a/client/finality-grandpa/src/observer.rs b/client/finality-grandpa/src/observer.rs index ac67675fef8..ab06f06280c 100644 --- a/client/finality-grandpa/src/observer.rs +++ b/client/finality-grandpa/src/observer.rs @@ -175,6 +175,7 @@ where select_chain: _, persistent_data, voter_commands_rx, + .. } = link; let network = NetworkBridge::new( diff --git a/client/finality-grandpa/src/tests.rs b/client/finality-grandpa/src/tests.rs index 5eafb3c15de..64e5b0545b5 100644 --- a/client/finality-grandpa/src/tests.rs +++ b/client/finality-grandpa/src/tests.rs @@ -40,7 +40,7 @@ use parity_scale_codec::Decode; use sp_runtime::traits::{Block as BlockT, Header as HeaderT, HashFor}; use sp_runtime::generic::{BlockId, DigestItem}; use sp_core::{H256, crypto::Public}; -use sp_finality_grandpa::{GRANDPA_ENGINE_ID, AuthorityList, GrandpaApi}; +use sp_finality_grandpa::{GRANDPA_ENGINE_ID, AuthorityList, EquivocationProof, GrandpaApi, OpaqueKeyOwnershipProof}; use sp_state_machine::{InMemoryBackend, prove_read, read_proof_check}; use authorities::AuthoritySet; @@ -214,6 +214,20 @@ sp_api::mock_impl_runtime_apis! { fn grandpa_authorities(&self) -> AuthorityList { self.inner.genesis_authorities.clone() } + + fn submit_report_equivocation_extrinsic( + _equivocation_proof: EquivocationProof, + _key_owner_proof: OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: SetId, + _authority_id: AuthorityId, + ) -> Option { + None + } } } @@ -1664,7 +1678,7 @@ fn imports_justification_for_regular_blocks_on_import() { }; let msg = finality_grandpa::Message::Precommit(precommit.clone()); - let encoded = communication::localized_payload(round, set_id, &msg); + let encoded = sp_finality_grandpa::localized_payload(round, set_id, &msg); let signature = peers[0].sign(&encoded[..]).into(); let precommit = finality_grandpa::SignedPrecommit { diff --git a/frame/grandpa/Cargo.toml b/frame/grandpa/Cargo.toml index 2e1dbc4deba..649b4053d05 100644 --- a/frame/grandpa/Cargo.toml +++ b/frame/grandpa/Cargo.toml @@ -14,8 +14,10 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] serde = { version = "1.0.101", optional = true, features = ["derive"] } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } +sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../../primitives/application-crypto" } sp-core = { version = "2.0.0-dev", default-features = false, path = "../../primitives/core" } sp-finality-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-grandpa" } +sp-session = { version = "2.0.0-dev", default-features = false, path = "../../primitives/session" } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } @@ -25,15 +27,24 @@ pallet-session = { version = "2.0.0-dev", default-features = false, path = "../s pallet-finality-tracker = { version = "2.0.0-dev", default-features = false, path = "../finality-tracker" } [dev-dependencies] -sp-io ={ version = "2.0.0-dev", path = "../../primitives/io" } +grandpa = { package = "finality-grandpa", version = "0.12.2", features = ["derive-codec"] } +sp-io = { version = "2.0.0-dev", path = "../../primitives/io" } +sp-keyring = { version = "2.0.0-dev", path = "../../primitives/keyring" } +pallet-balances = { version = "2.0.0-dev", path = "../balances" } +pallet-offences = { version = "2.0.0-dev", path = "../offences" } +pallet-staking = { version = "2.0.0-dev", path = "../staking" } +pallet-staking-reward-curve = { version = "2.0.0-dev", path = "../staking/reward-curve" } +pallet-timestamp = { version = "2.0.0-dev", path = "../timestamp" } [features] default = ["std"] std = [ "serde", "codec/std", + "sp-application-crypto/std", "sp-core/std", "sp-finality-grandpa/std", + "sp-session/std", "sp-std/std", "frame-support/std", "sp-runtime/std", diff --git a/frame/grandpa/src/equivocation.rs b/frame/grandpa/src/equivocation.rs new file mode 100644 index 00000000000..f9ae4302167 --- /dev/null +++ b/frame/grandpa/src/equivocation.rs @@ -0,0 +1,406 @@ +// Copyright 2017-2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! +//! An opt-in utility module for reporting equivocations. +//! +//! This module defines an offence type for GRANDPA equivocations +//! and some utility traits to wire together: +//! - a key ownership proof system (e.g. to prove that a given authority was +//! part of a session); +//! - a system for reporting offences; +//! - a system for signing and submitting transactions; +//! +//! These can be used in an offchain context in order to submit equivocation +//! reporting extrinsics (from the client that's running the GRANDPA protocol). +//! And in a runtime context, so that the GRANDPA module can validate the +//! equivocation proofs in the extrinsic and report the offences. +//! + +use sp_std::prelude::*; + +use codec::{self as codec, Decode, Encode}; +use frame_support::{debug, dispatch::IsSubType, traits::KeyOwnerProofSystem}; +use frame_system::offchain::{AppCrypto, CreateSignedTransaction, Signer}; +use sp_finality_grandpa::{EquivocationProof, RoundNumber, SetId}; +use sp_runtime::{ + traits::{DispatchInfoOf, SignedExtension}, + transaction_validity::{ + InvalidTransaction, TransactionValidity, TransactionValidityError, ValidTransaction, + }, + DispatchResult, Perbill, +}; +use sp_staking::{ + offence::{Kind, Offence, OffenceError, ReportOffence}, + SessionIndex, +}; + +/// Ensure that equivocation reports are only processed if valid. +#[derive(Encode, Decode, Clone, Eq, PartialEq)] +pub struct ValidateEquivocationReport(sp_std::marker::PhantomData); + +impl Default for ValidateEquivocationReport { + fn default() -> ValidateEquivocationReport { + ValidateEquivocationReport::new() + } +} + +impl ValidateEquivocationReport { + pub fn new() -> ValidateEquivocationReport { + ValidateEquivocationReport(Default::default()) + } +} + +impl sp_std::fmt::Debug for ValidateEquivocationReport { + fn fmt(&self, f: &mut sp_std::fmt::Formatter) -> sp_std::fmt::Result { + write!(f, "ValidateEquivocationReport") + } +} + +/// Custom validity error used when validating equivocation reports. +#[derive(Debug)] +#[repr(u8)] +pub enum ReportEquivocationValidityError { + /// The proof provided in the report is not valid. + InvalidEquivocationProof = 1, + /// The proof provided in the report is not valid. + InvalidKeyOwnershipProof = 2, + /// The set id provided in the report is not valid. + InvalidSetId = 3, + /// The session index provided in the report is not valid. + InvalidSession = 4, +} + +impl From for TransactionValidityError { + fn from(e: ReportEquivocationValidityError) -> TransactionValidityError { + TransactionValidityError::from(InvalidTransaction::Custom(e as u8)) + } +} + +impl SignedExtension for ValidateEquivocationReport +where + ::Call: IsSubType, T>, +{ + const IDENTIFIER: &'static str = "ValidateEquivocationReport"; + type AccountId = T::AccountId; + type Call = ::Call; + type AdditionalSigned = (); + type Pre = (); + + fn additional_signed( + &self, + ) -> sp_std::result::Result { + Ok(()) + } + + fn validate( + &self, + _who: &Self::AccountId, + call: &Self::Call, + _info: &DispatchInfoOf, + _len: usize, + ) -> TransactionValidity { + let (equivocation_proof, key_owner_proof) = match call.is_sub_type() { + Some(super::Call::report_equivocation(equivocation_proof, key_owner_proof)) => { + (equivocation_proof, key_owner_proof) + } + _ => return Ok(ValidTransaction::default()), + }; + + // validate the key ownership proof extracting the id of the offender. + if let None = T::KeyOwnerProofSystem::check_proof( + ( + sp_finality_grandpa::KEY_TYPE, + equivocation_proof.offender().clone(), + ), + key_owner_proof.clone(), + ) { + return Err(ReportEquivocationValidityError::InvalidKeyOwnershipProof.into()); + } + + // we check the equivocation within the context of its set id (and + // associated session). + let set_id = equivocation_proof.set_id(); + let session_index = key_owner_proof.session(); + + // validate equivocation proof (check votes are different and + // signatures are valid). + if let Err(_) = sp_finality_grandpa::check_equivocation_proof(equivocation_proof.clone()) { + return Err(ReportEquivocationValidityError::InvalidEquivocationProof.into()); + } + + // fetch the current and previous sets last session index. on the + // genesis set there's no previous set. + let previous_set_id_session_index = if set_id == 0 { + None + } else { + let session_index = + if let Some(session_id) = >::session_for_set(set_id - 1) { + session_id + } else { + return Err(ReportEquivocationValidityError::InvalidSetId.into()); + }; + + Some(session_index) + }; + + let set_id_session_index = + if let Some(session_id) = >::session_for_set(set_id) { + session_id + } else { + return Err(ReportEquivocationValidityError::InvalidSetId.into()); + }; + + // check that the session id for the membership proof is within the + // bounds of the set id reported in the equivocation. + if session_index > set_id_session_index || + previous_set_id_session_index + .map(|previous_index| session_index <= previous_index) + .unwrap_or(false) + { + return Err(ReportEquivocationValidityError::InvalidSession.into()); + } + + Ok(ValidTransaction::default()) + } +} + +/// A trait with utility methods for handling equivocation reports in GRANDPA. +/// The offence type is generic, and the trait provides , reporting an offence +/// triggered by a valid equivocation report, and also for creating and +/// submitting equivocation report extrinsics (useful only in offchain context). +pub trait HandleEquivocation { + /// The offence type used for reporting offences on valid equivocation reports. + type Offence: GrandpaOffence; + + /// Report an offence proved by the given reporters. + fn report_offence( + reporters: Vec, + offence: Self::Offence, + ) -> Result<(), OffenceError>; + + /// Create and dispatch an equivocation report extrinsic. + fn submit_equivocation_report( + equivocation_proof: EquivocationProof, + key_owner_proof: T::KeyOwnerProof, + ) -> DispatchResult; +} + +impl HandleEquivocation for () { + type Offence = GrandpaEquivocationOffence; + + fn report_offence( + _reporters: Vec, + _offence: GrandpaEquivocationOffence, + ) -> Result<(), OffenceError> { + Ok(()) + } + + fn submit_equivocation_report( + _equivocation_proof: EquivocationProof, + _key_owner_proof: T::KeyOwnerProof, + ) -> DispatchResult { + Ok(()) + } +} + +/// Generic equivocation handler. This type implements `HandleEquivocation` +/// using existing subsystems that are part of frame (type bounds described +/// below) and will dispatch to them directly, it's only purpose is to wire all +/// subsystems together. +pub struct EquivocationHandler> { + _phantom: sp_std::marker::PhantomData<(I, C, S, R, O)>, +} + +impl Default for EquivocationHandler { + fn default() -> Self { + Self { + _phantom: Default::default(), + } + } +} + +impl HandleEquivocation + for EquivocationHandler +where + // A signed transaction creator. Used for signing and submitting equivocation reports. + T: super::Trait + CreateSignedTransaction>, + // Application-specific crypto bindings. + C: AppCrypto, + // The offence type that should be used when reporting. + O: GrandpaOffence, + // A system for reporting offences after valid equivocation reports are + // processed. + R: ReportOffence, +{ + type Offence = O; + + fn report_offence(reporters: Vec, offence: O) -> Result<(), OffenceError> { + R::report_offence(reporters, offence) + } + + fn submit_equivocation_report( + equivocation_proof: EquivocationProof, + key_owner_proof: T::KeyOwnerProof, + ) -> DispatchResult { + use frame_system::offchain::SendSignedTransaction; + + let signer = Signer::::all_accounts(); + if !signer.can_sign() { + return Err( + "No local accounts available. Consider adding one via `author_insertKey` RPC.", + )?; + } + + let results = signer.send_signed_transaction(|_account| { + super::Call::report_equivocation(equivocation_proof.clone(), key_owner_proof.clone()) + }); + + for (acc, res) in &results { + match res { + Ok(()) => debug::info!("[{:?}] Submitted GRANDPA equivocation report.", acc.id), + Err(e) => debug::error!( + "[{:?}] Error submitting equivocation report: {:?}", + acc.id, + e + ), + } + } + + Ok(()) + } +} + +/// A round number and set id which point on the time of an offence. +#[derive(Copy, Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode)] +pub struct GrandpaTimeSlot { + // The order of these matters for `derive(Ord)`. + /// Grandpa Set ID. + pub set_id: SetId, + /// Round number. + pub round: RoundNumber, +} + +/// A grandpa equivocation offence report. +#[allow(dead_code)] +pub struct GrandpaEquivocationOffence { + /// Time slot at which this incident happened. + pub time_slot: GrandpaTimeSlot, + /// The session index in which the incident happened. + pub session_index: SessionIndex, + /// The size of the validator set at the time of the offence. + pub validator_set_count: u32, + /// The authority which produced this equivocation. + pub offender: FullIdentification, +} + +/// An interface for types that will be used as GRANDPA offences and must also +/// implement the `Offence` trait. This trait provides a constructor that is +/// provided all available data during processing of GRANDPA equivocations. +pub trait GrandpaOffence: Offence { + /// Create a new GRANDPA offence using the given equivocation details. + fn new( + session_index: SessionIndex, + validator_set_count: u32, + offender: FullIdentification, + set_id: SetId, + round: RoundNumber, + ) -> Self; +} + +impl GrandpaOffence + for GrandpaEquivocationOffence +{ + fn new( + session_index: SessionIndex, + validator_set_count: u32, + offender: FullIdentification, + set_id: SetId, + round: RoundNumber, + ) -> Self { + GrandpaEquivocationOffence { + session_index, + validator_set_count, + offender, + time_slot: GrandpaTimeSlot { set_id, round }, + } + } +} + +impl Offence + for GrandpaEquivocationOffence +{ + const ID: Kind = *b"grandpa:equivoca"; + type TimeSlot = GrandpaTimeSlot; + + fn offenders(&self) -> Vec { + vec![self.offender.clone()] + } + + fn session_index(&self) -> SessionIndex { + self.session_index + } + + fn validator_set_count(&self) -> u32 { + self.validator_set_count + } + + fn time_slot(&self) -> Self::TimeSlot { + self.time_slot + } + + fn slash_fraction(offenders_count: u32, validator_set_count: u32) -> Perbill { + // the formula is min((3k / n)^2, 1) + let x = Perbill::from_rational_approximation(3 * offenders_count, validator_set_count); + // _ ^ 2 + x.square() + } +} + +/// A trait to get a session number the `MembershipProof` belongs to. +pub trait GetSessionNumber { + fn session(&self) -> SessionIndex; +} + +/// A trait to get the validator count at the session the `MembershipProof` +/// belongs to. +pub trait GetValidatorCount { + fn validator_count(&self) -> sp_session::ValidatorCount; +} + +impl GetSessionNumber for frame_support::Void { + fn session(&self) -> SessionIndex { + Default::default() + } +} + +impl GetValidatorCount for frame_support::Void { + fn validator_count(&self) -> sp_session::ValidatorCount { + Default::default() + } +} + +impl GetSessionNumber for sp_session::MembershipProof { + fn session(&self) -> SessionIndex { + self.session() + } +} + +impl GetValidatorCount for sp_session::MembershipProof { + fn validator_count(&self) -> sp_session::ValidatorCount { + self.validator_count() + } +} diff --git a/frame/grandpa/src/lib.rs b/frame/grandpa/src/lib.rs index 5827d2f195b..16aebe335f9 100644 --- a/frame/grandpa/src/lib.rs +++ b/frame/grandpa/src/lib.rs @@ -31,27 +31,65 @@ pub use sp_finality_grandpa as fg_primitives; use sp_std::prelude::*; -use codec::{self as codec, Encode, Decode}; -use frame_support::{decl_event, decl_storage, decl_module, decl_error, storage}; -use sp_runtime::{ - DispatchResult, generic::{DigestItem, OpaqueDigestItemId}, traits::Zero, Perbill, -}; -use sp_staking::{ - SessionIndex, - offence::{Offence, Kind}, -}; + +use codec::{self as codec, Decode, Encode}; +pub use fg_primitives::{AuthorityId, AuthorityList, AuthorityWeight, VersionedAuthorityList}; use fg_primitives::{ - GRANDPA_AUTHORITIES_KEY, GRANDPA_ENGINE_ID, ScheduledChange, ConsensusLog, SetId, RoundNumber, + ConsensusLog, EquivocationProof, ScheduledChange, SetId, GRANDPA_AUTHORITIES_KEY, + GRANDPA_ENGINE_ID, +}; +use frame_support::{ + decl_error, decl_event, decl_module, decl_storage, storage, traits::KeyOwnerProofSystem, + Parameter, }; -pub use fg_primitives::{AuthorityId, AuthorityList, AuthorityWeight, VersionedAuthorityList}; use frame_system::{self as system, ensure_signed, DigestOf}; +use sp_runtime::{ + generic::{DigestItem, OpaqueDigestItemId}, + traits::Zero, + DispatchResult, KeyTypeId, +}; +use sp_staking::SessionIndex; +mod equivocation; mod mock; mod tests; +pub use equivocation::{ + EquivocationHandler, GetSessionNumber, GetValidatorCount, GrandpaEquivocationOffence, + GrandpaOffence, GrandpaTimeSlot, HandleEquivocation, ValidateEquivocationReport, +}; + pub trait Trait: frame_system::Trait { /// The event type of this module. type Event: From + Into<::Event>; + + /// The function call. + type Call: From>; + + /// The proof of key ownership, used for validating equivocation reports. + /// The proof must include the session index and validator count of the + /// session at which the equivocation occurred. + type KeyOwnerProof: Parameter + GetSessionNumber + GetValidatorCount; + + /// The identification of a key owner, used when reporting equivocations. + type KeyOwnerIdentification: Parameter; + + /// A system for proving ownership of keys, i.e. that a given key was part + /// of a validator set, needed for validating equivocation reports. + type KeyOwnerProofSystem: KeyOwnerProofSystem< + (KeyTypeId, AuthorityId), + Proof = Self::KeyOwnerProof, + IdentificationTuple = Self::KeyOwnerIdentification, + >; + + /// The equivocation handling subsystem, defines methods to report an + /// offence (after the equivocation has been validated) and for submitting a + /// transaction to report an equivocation (from an offchain context). + /// NOTE: when enabling equivocation handling (i.e. this type isn't set to + /// `()`) you must add the `equivocation::ValidateEquivocationReport` signed + /// extension to the runtime's `SignedExtra` definition, otherwise + /// equivocation reports won't be properly validated. + type HandleEquivocation: HandleEquivocation; } /// A stored pending change, old format. @@ -173,7 +211,9 @@ decl_storage! { } add_extra_genesis { config(authorities): AuthorityList; - build(|config| Module::::initialize_authorities(&config.authorities)) + build(|config| { + Module::::initialize(&config.authorities) + }) } } @@ -183,11 +223,49 @@ decl_module! { fn deposit_event() = default; - /// Report some misbehavior. + /// Report voter equivocation/misbehavior. This method will verify the + /// equivocation proof and validate the given key ownership proof + /// against the extracted offender. If both are valid, the offence + /// will be reported. + /// + /// Since the weight is 0 in order to avoid DoS pre-validation is implemented in a + /// `SignedExtension`. #[weight = 0] - fn report_misbehavior(origin, _report: Vec) { - ensure_signed(origin)?; - // FIXME: https://github.com/paritytech/substrate/issues/1112 + fn report_equivocation( + origin, + equivocation_proof: EquivocationProof, + key_owner_proof: T::KeyOwnerProof, + ) { + let reporter_id = ensure_signed(origin)?; + + let (session_index, validator_set_count) = ( + key_owner_proof.session(), + key_owner_proof.validator_count(), + ); + + // we have already checked this proof in `SignedExtension`, we to + // check it again to get the full identification of the offender. + let offender = + T::KeyOwnerProofSystem::check_proof( + (fg_primitives::KEY_TYPE, equivocation_proof.offender().clone()), + key_owner_proof, + ).ok_or("Invalid key ownership proof.")?; + + // the set id and round when the offence happened + let set_id = equivocation_proof.set_id(); + let round = equivocation_proof.round(); + + // report to the offences module rewarding the sender. + T::HandleEquivocation::report_offence( + vec![reporter_id], + >::Offence::new( + session_index, + validator_set_count, + offender, + set_id, + round, + ), + ).map_err(|_| "Duplicate offence report.")?; } fn on_finalize(block_number: T::BlockNumber) { @@ -351,7 +429,9 @@ impl Module { >::deposit_log(log.into()); } - fn initialize_authorities(authorities: &AuthorityList) { + // Perform module initialization, abstracted so that it can be called either through genesis + // config builder or through `on_genesis_session`. + fn initialize(authorities: &AuthorityList) { if !authorities.is_empty() { assert!( Self::grandpa_authorities().is_empty(), @@ -359,6 +439,25 @@ impl Module { ); Self::set_grandpa_authorities(authorities); } + + // NOTE: initialize first session of first set. this is necessary + // because we only update this `on_new_session` which isn't called + // for the genesis session. + SetIdSession::insert(0, 0); + } + + /// Submits an extrinsic to report an equivocation. This method will sign an + /// extrinsic with a call to `report_equivocation` with any reporting keys + /// available in the keystore and will push the transaction to the pool. + /// Only useful in an offchain context. + pub fn submit_report_equivocation_extrinsic( + equivocation_proof: EquivocationProof, + key_owner_proof: T::KeyOwnerProof, + ) -> Option<()> { + T::HandleEquivocation::submit_equivocation_report(equivocation_proof, key_owner_proof) + .ok()?; + + Some(()) } } @@ -411,7 +510,7 @@ impl pallet_session::OneSessionHandler for Module where I: Iterator { let authorities = validators.map(|(_, k)| (k, 1)).collect::>(); - Self::initialize_authorities(&authorities); + Self::initialize(&authorities); } fn on_new_session<'a, I: 'a>(changed: bool, validators: I, _queued_validators: I) @@ -453,56 +552,3 @@ impl pallet_finality_tracker::OnFinalizationStalled fo >::put((further_wait, median)); } } - -/// A round number and set id which point on the time of an offence. -#[derive(Copy, Clone, PartialOrd, Ord, Eq, PartialEq, Encode, Decode)] -pub struct GrandpaTimeSlot { - // The order of these matters for `derive(Ord)`. - /// Grandpa Set ID. - pub set_id: SetId, - /// Round number. - pub round: RoundNumber, -} - -/// A grandpa equivocation offence report. -pub struct GrandpaEquivocationOffence { - /// Time slot at which this incident happened. - pub time_slot: GrandpaTimeSlot, - /// The session index in which the incident happened. - pub session_index: SessionIndex, - /// The size of the validator set at the time of the offence. - pub validator_set_count: u32, - /// The authority which produced this equivocation. - pub offender: FullIdentification, -} - -impl Offence for GrandpaEquivocationOffence { - const ID: Kind = *b"grandpa:equivoca"; - type TimeSlot = GrandpaTimeSlot; - - fn offenders(&self) -> Vec { - vec![self.offender.clone()] - } - - fn session_index(&self) -> SessionIndex { - self.session_index - } - - fn validator_set_count(&self) -> u32 { - self.validator_set_count - } - - fn time_slot(&self) -> Self::TimeSlot { - self.time_slot - } - - fn slash_fraction( - offenders_count: u32, - validator_set_count: u32, - ) -> Perbill { - // the formula is min((3k / n)^2, 1) - let x = Perbill::from_rational_approximation(3 * offenders_count, validator_set_count); - // _ ^ 2 - x.square() - } -} diff --git a/frame/grandpa/src/mock.rs b/frame/grandpa/src/mock.rs index 3ef78e75711..f307f17fd4d 100644 --- a/frame/grandpa/src/mock.rs +++ b/frame/grandpa/src/mock.rs @@ -18,41 +18,85 @@ #![cfg(test)] -use sp_runtime::{Perbill, DigestItem, traits::IdentityLookup, testing::{Header, UintAuthorityId}}; +use crate::{ + equivocation::ValidateEquivocationReport, AuthorityId, AuthorityList, Call as GrandpaCall, + ConsensusLog, Module, Trait, +}; +use ::grandpa as finality_grandpa; +use codec::Encode; +use frame_support::{ + impl_outer_dispatch, impl_outer_event, impl_outer_origin, parameter_types, + traits::{KeyOwnerProofSystem, OnFinalize, OnInitialize}, + weights::{DispatchInfo, Weight}, +}; +use pallet_staking::EraIndex; +use sp_core::{crypto::KeyTypeId, H256}; +use sp_finality_grandpa::{RoundNumber, SetId, GRANDPA_ENGINE_ID}; use sp_io; -use frame_support::{impl_outer_origin, impl_outer_event, parameter_types, weights::Weight}; -use sp_core::H256; -use codec::{Encode, Decode}; -use crate::{AuthorityId, AuthorityList, GenesisConfig, Trait, Module, ConsensusLog}; -use sp_finality_grandpa::GRANDPA_ENGINE_ID; +use sp_keyring::Ed25519Keyring; +use sp_runtime::{ + curve::PiecewiseLinear, + impl_opaque_keys, + testing::{Header, TestXt, UintAuthorityId}, + traits::{ + Convert, Extrinsic as ExtrinsicT, Header as _, IdentityLookup, OpaqueKeys, + SaturatedConversion, SignedExtension, + }, + transaction_validity::TransactionValidityError, + DigestItem, Perbill, +}; +use sp_staking::SessionIndex; use frame_system as system; -impl_outer_origin!{ - pub enum Origin for Test where system = frame_system {} +use pallet_balances as balances; +use pallet_offences as offences; +use pallet_session as session; +use pallet_staking as staking; +use pallet_timestamp as timestamp; + +impl_outer_origin! { + pub enum Origin for Test {} } -pub fn grandpa_log(log: ConsensusLog) -> DigestItem { - DigestItem::Consensus(GRANDPA_ENGINE_ID, log.encode()) +impl_outer_dispatch! { + pub enum Call for Test where origin: Origin { + grandpa::Grandpa, + staking::Staking, + } } -// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted. -#[derive(Clone, PartialEq, Eq, Debug, Decode, Encode)] -pub struct Test; +impl_opaque_keys! { + pub struct TestSessionKeys { + pub grandpa_authority: super::Module, + } +} -impl Trait for Test { - type Event = TestEvent; +impl_outer_event! { + pub enum TestEvent for Test { + system, + balances, + grandpa, + offences, + session, + staking, + } } + +#[derive(Clone, Eq, PartialEq)] +pub struct Test; + parameter_types! { pub const BlockHashCount: u64 = 250; pub const MaximumBlockWeight: Weight = 1024; pub const MaximumBlockLength: u32 = 2 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::one(); } + impl frame_system::Trait for Test { type Origin = Origin; type Index = u64; type BlockNumber = u64; - type Call = (); + type Call = Call; type Hash = H256; type Hashing = sp_runtime::traits::BlakeTwo256; type AccountId = u64; @@ -68,20 +112,220 @@ impl frame_system::Trait for Test { type AvailableBlockRatio = AvailableBlockRatio; type Version = (); type ModuleToIndex = (); - type AccountData = (); + type AccountData = balances::AccountData; type OnNewAccount = (); type OnKilledAccount = (); } +impl system::offchain::SendTransactionTypes for Test +where + Call: From, +{ + type OverarchingCall = Call; + type Extrinsic = TestXt; +} + +parameter_types! { + pub const Period: u64 = 1; + pub const Offset: u64 = 0; + pub const DisabledValidatorsThreshold: Perbill = Perbill::from_percent(17); +} + +/// Custom `SessionHandler` since we use `TestSessionKeys` as `Keys`. +impl session::Trait for Test { + type Event = TestEvent; + type ValidatorId = u64; + type ValidatorIdOf = staking::StashOf; + type ShouldEndSession = session::PeriodicSessions; + type NextSessionRotation = session::PeriodicSessions; + type SessionManager = session::historical::NoteHistoricalRoot; + type SessionHandler = ::KeyTypeIdProviders; + type Keys = TestSessionKeys; + type DisabledValidatorsThreshold = DisabledValidatorsThreshold; +} + +impl session::historical::Trait for Test { + type FullIdentification = staking::Exposure; + type FullIdentificationOf = staking::ExposureOf; +} + +parameter_types! { + pub const ExistentialDeposit: u128 = 1; +} + +impl balances::Trait for Test { + type Balance = u128; + type DustRemoval = (); + type Event = TestEvent; + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; +} + +parameter_types! { + pub const MinimumPeriod: u64 = 3; +} + +impl timestamp::Trait for Test { + type Moment = u64; + type OnTimestampSet = (); + type MinimumPeriod = MinimumPeriod; +} + +pallet_staking_reward_curve::build! { + const REWARD_CURVE: PiecewiseLinear<'static> = curve!( + min_inflation: 0_025_000u64, + max_inflation: 0_100_000, + ideal_stake: 0_500_000, + falloff: 0_050_000, + max_piece_count: 40, + test_precision: 0_005_000, + ); +} + +parameter_types! { + pub const SessionsPerEra: SessionIndex = 3; + pub const BondingDuration: EraIndex = 3; + pub const SlashDeferDuration: EraIndex = 0; + pub const AttestationPeriod: u64 = 100; + pub const RewardCurve: &'static PiecewiseLinear<'static> = &REWARD_CURVE; + pub const MaxNominatorRewardedPerValidator: u32 = 64; + pub const ElectionLookahead: u64 = 0; + pub const StakingUnsignedPriority: u64 = u64::max_value() / 2; +} + +pub struct CurrencyToVoteHandler; + +impl Convert for CurrencyToVoteHandler { + fn convert(x: u128) -> u128 { + x + } +} + +impl Convert for CurrencyToVoteHandler { + fn convert(x: u128) -> u64 { + x.saturated_into() + } +} + +impl staking::Trait for Test { + type RewardRemainder = (); + type CurrencyToVote = CurrencyToVoteHandler; + type Event = TestEvent; + type Currency = Balances; + type Slash = (); + type Reward = (); + type SessionsPerEra = SessionsPerEra; + type BondingDuration = BondingDuration; + type SlashDeferDuration = SlashDeferDuration; + type SlashCancelOrigin = system::EnsureRoot; + type SessionInterface = Self; + type UnixTime = timestamp::Module; + type RewardCurve = RewardCurve; + type MaxNominatorRewardedPerValidator = MaxNominatorRewardedPerValidator; + type NextNewSession = Session; + type ElectionLookahead = ElectionLookahead; + type Call = Call; + type UnsignedPriority = StakingUnsignedPriority; + type MaxIterations = (); +} + +impl offences::Trait for Test { + type Event = TestEvent; + type IdentificationTuple = session::historical::IdentificationTuple; + type OnOffenceHandler = Staking; +} + +impl Trait for Test { + type Event = TestEvent; + type Call = Call; + + type KeyOwnerProofSystem = Historical; + + type KeyOwnerProof = + >::Proof; + + type KeyOwnerIdentification = >::IdentificationTuple; + + type HandleEquivocation = super::EquivocationHandler< + Self::KeyOwnerIdentification, + reporting_keys::ReporterAppCrypto, + Test, + Offences, + >; +} + +pub mod reporting_keys { + use sp_core::crypto::KeyTypeId; + + pub const KEY_TYPE: KeyTypeId = KeyTypeId(*b"test"); + + mod app { + use sp_application_crypto::{app_crypto, ed25519}; + app_crypto!(ed25519, super::KEY_TYPE); + + impl sp_runtime::traits::IdentifyAccount for Public { + type AccountId = u64; + fn into_account(self) -> Self::AccountId { + super::super::Grandpa::grandpa_authorities() + .iter() + .map(|(k, _)| k) + .position(|b| *b == self.0.clone().into()) + .unwrap() as u64 + } + } + } + + pub type ReporterId = app::Public; + + pub struct ReporterAppCrypto; + impl frame_system::offchain::AppCrypto + for ReporterAppCrypto + { + type RuntimeAppPublic = ReporterId; + type GenericSignature = sp_core::ed25519::Signature; + type GenericPublic = sp_core::ed25519::Public; + } +} + +type Extrinsic = TestXt; + +impl system::offchain::CreateSignedTransaction for Test +where + Call: From, +{ + fn create_transaction>( + call: Call, + _public: reporting_keys::ReporterId, + _account: ::AccountId, + nonce: ::Index, + ) -> Option<(Call, ::SignaturePayload)> { + Some((call, (nonce, ()))) + } +} + +impl frame_system::offchain::SigningTypes for Test { + type Public = reporting_keys::ReporterId; + type Signature = sp_core::ed25519::Signature; +} + mod grandpa { pub use crate::Event; } -impl_outer_event!{ - pub enum TestEvent for Test { - system, - grandpa, - } +pub type Balances = pallet_balances::Module; +pub type Historical = pallet_session::historical::Module; +pub type Offences = pallet_offences::Module; +pub type Session = pallet_session::Module; +pub type Staking = pallet_staking::Module; +pub type System = frame_system::Module; +pub type Timestamp = pallet_timestamp::Module; +pub type Grandpa = Module; + +pub fn grandpa_log(log: ConsensusLog) -> DigestItem { + DigestItem::Consensus(GRANDPA_ENGINE_ID, log.encode()) } pub fn to_authorities(vec: Vec<(u64, u64)>) -> AuthorityList { @@ -90,13 +334,164 @@ pub fn to_authorities(vec: Vec<(u64, u64)>) -> AuthorityList { .collect() } -pub fn new_test_ext(authorities: Vec<(u64, u64)>) -> sp_io::TestExternalities { - let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); - GenesisConfig { - authorities: to_authorities(authorities), - }.assimilate_storage::(&mut t).unwrap(); +pub fn extract_keyring(id: &AuthorityId) -> Ed25519Keyring { + let mut raw_public = [0; 32]; + raw_public.copy_from_slice(id.as_ref()); + Ed25519Keyring::from_raw_public(raw_public).unwrap() +} + +pub fn new_test_ext(vec: Vec<(u64, u64)>) -> sp_io::TestExternalities { + new_test_ext_raw_authorities(to_authorities(vec)) +} + +pub fn new_test_ext_raw_authorities(authorities: AuthorityList) -> sp_io::TestExternalities { + let mut t = frame_system::GenesisConfig::default() + .build_storage::() + .unwrap(); + + // stashes are the index. + let session_keys: Vec<_> = authorities + .iter() + .enumerate() + .map(|(i, (k, _))| { + ( + i as u64, + i as u64, + TestSessionKeys { + grandpa_authority: AuthorityId::from(k.clone()), + }, + ) + }) + .collect(); + + // controllers are the index + 1000 + let stakers: Vec<_> = (0..authorities.len()) + .map(|i| { + ( + i as u64, + i as u64 + 1000, + 10_000, + staking::StakerStatus::::Validator, + ) + }) + .collect(); + + let balances: Vec<_> = (0..authorities.len()) + .map(|i| (i as u64, 10_000_000)) + .collect(); + + // NOTE: this will initialize the grandpa authorities + // through OneSessionHandler::on_genesis_session + session::GenesisConfig:: { keys: session_keys } + .assimilate_storage(&mut t) + .unwrap(); + + balances::GenesisConfig:: { balances } + .assimilate_storage(&mut t) + .unwrap(); + + let staking_config = staking::GenesisConfig:: { + stakers, + validator_count: 8, + force_era: staking::Forcing::ForceNew, + minimum_validator_count: 0, + invulnerables: vec![], + ..Default::default() + }; + + staking_config.assimilate_storage(&mut t).unwrap(); + t.into() } -pub type System = frame_system::Module; -pub type Grandpa = Module; +pub fn start_session(session_index: SessionIndex) { + let mut parent_hash = System::parent_hash(); + + for i in Session::current_index()..session_index { + Staking::on_finalize(System::block_number()); + System::set_block_number((i + 1).into()); + Timestamp::set_timestamp(System::block_number() * 6000); + + // In order to be able to use `System::parent_hash()` in the tests + // we need to first get it via `System::finalize` and then set it + // the `System::initialize`. However, it is needed to be taken into + // consideration that finalizing will prune some data in `System` + // storage including old values `BlockHash` if that reaches above + // `BlockHashCount` capacity. + if System::block_number() > 1 { + let hdr = System::finalize(); + parent_hash = hdr.hash(); + } + + System::initialize( + &(i as u64 + 1), + &parent_hash, + &Default::default(), + &Default::default(), + Default::default(), + ); + + Session::on_initialize(System::block_number()); + System::on_initialize(System::block_number()); + } + + assert_eq!(Session::current_index(), session_index); +} + +pub fn start_era(era_index: EraIndex) { + start_session((era_index * 3).into()); + assert_eq!(Staking::current_era(), Some(era_index)); +} + +pub fn initialize_block(number: u64, parent_hash: H256) { + System::initialize( + &number, + &parent_hash, + &Default::default(), + &Default::default(), + Default::default(), + ); +} + +pub fn report_equivocation( + equivocation_proof: sp_finality_grandpa::EquivocationProof, + key_owner_proof: sp_session::MembershipProof, +) -> Result, TransactionValidityError> { + let inner = GrandpaCall::report_equivocation(equivocation_proof, key_owner_proof); + let call = Call::Grandpa(inner.clone()); + + ValidateEquivocationReport::::new().validate(&0, &call, &DispatchInfo::default(), 0)?; + + Ok(inner) +} + +pub fn generate_equivocation_proof( + set_id: SetId, + vote1: (RoundNumber, H256, u64, &Ed25519Keyring), + vote2: (RoundNumber, H256, u64, &Ed25519Keyring), +) -> sp_finality_grandpa::EquivocationProof { + let signed_prevote = |round, hash, number, keyring: &Ed25519Keyring| { + let prevote = finality_grandpa::Prevote { + target_hash: hash, + target_number: number, + }; + + let prevote_msg = finality_grandpa::Message::Prevote(prevote.clone()); + let payload = sp_finality_grandpa::localized_payload(round, set_id, &prevote_msg); + let signed = keyring.sign(&payload).into(); + (prevote, signed) + }; + + let (prevote1, signed1) = signed_prevote(vote1.0, vote1.1, vote1.2, vote1.3); + let (prevote2, signed2) = signed_prevote(vote2.0, vote2.1, vote2.2, vote2.3); + + sp_finality_grandpa::EquivocationProof::new( + set_id, + sp_finality_grandpa::Equivocation::Prevote(finality_grandpa::Equivocation { + round_number: vote1.0, + identity: vote1.3.public().into(), + first: (prevote1, signed1), + second: (prevote2, signed2), + }), + ) +} diff --git a/frame/grandpa/src/tests.rs b/frame/grandpa/src/tests.rs index b583c31968d..898c6758356 100644 --- a/frame/grandpa/src/tests.rs +++ b/frame/grandpa/src/tests.rs @@ -18,23 +18,18 @@ #![cfg(test)] -use sp_runtime::{testing::{H256, Digest}, traits::Header}; -use frame_support::traits::OnFinalize; +use super::*; use crate::mock::*; -use frame_system::{EventRecord, Phase}; use codec::{Decode, Encode}; use fg_primitives::ScheduledChange; -use super::*; - -fn initialize_block(number: u64, parent_hash: H256) { - System::initialize( - &number, - &parent_hash, - &Default::default(), - &Default::default(), - Default::default(), - ); -} +use frame_support::{ + assert_err, assert_ok, + traits::{Currency, OnFinalize}, +}; +use frame_system::{EventRecord, Phase}; +use sp_core::H256; +use sp_keyring::Ed25519Keyring; +use sp_runtime::{testing::Digest, traits::Header}; #[test] fn authorities_change_logged() { @@ -319,3 +314,348 @@ fn time_slot_have_sane_ord() { ]; assert!(FIXTURE.windows(2).all(|f| f[0] < f[1])); } + +fn test_authorities() -> AuthorityList { + let authorities = vec![ + Ed25519Keyring::Alice, + Ed25519Keyring::Bob, + Ed25519Keyring::Charlie, + ]; + + authorities + .into_iter() + .map(|id| (id.public().into(), 1u64)) + .collect() +} + +#[test] +fn report_equivocation_current_set_works() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + assert_eq!(Staking::current_era(), Some(0)); + assert_eq!(Session::current_index(), 0); + + start_era(1); + + let authorities = Grandpa::grandpa_authorities(); + + // make sure that all authorities have the same balance + for i in 0..authorities.len() { + assert_eq!(Balances::total_balance(&(i as u64)), 10_000_000); + assert_eq!(Staking::slashable_balance_of(&(i as u64)), 10_000); + + assert_eq!( + Staking::eras_stakers(1, i as u64), + pallet_staking::Exposure { + total: 10_000, + own: 10_000, + others: vec![], + }, + ); + } + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + let equivocation_keyring = extract_keyring(equivocation_key); + + let set_id = Grandpa::current_set_id(); + + // generate an equivocation proof, with two votes in the same round for + // different block hashes signed by the same key + let equivocation_proof = generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &equivocation_keyring), + ); + + // create the key ownership proof + let key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap(); + + // report the equivocation and the tx should be dispatched successfully + let inner = report_equivocation(equivocation_proof, key_owner_proof).unwrap(); + assert_ok!(Grandpa::dispatch(inner, Origin::signed(1))); + + start_era(2); + + // check that the balance of 0-th validator is slashed 100%. + assert_eq!(Balances::total_balance(&0), 10_000_000 - 10_000); + assert_eq!(Staking::slashable_balance_of(&0), 0); + + assert_eq!( + Staking::eras_stakers(2, 0), + pallet_staking::Exposure { + total: 0, + own: 0, + others: vec![], + }, + ); + + // check that the balances of all other validators are left intact. + for i in 1..authorities.len() { + assert_eq!(Balances::total_balance(&(i as u64)), 10_000_000); + assert_eq!(Staking::slashable_balance_of(&(i as u64)), 10_000); + + assert_eq!( + Staking::eras_stakers(2, i as u64), + pallet_staking::Exposure { + total: 10_000, + own: 10_000, + others: vec![], + }, + ); + } + }); +} + +#[test] +fn report_equivocation_old_set_works() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + start_era(1); + + let authorities = Grandpa::grandpa_authorities(); + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + + // create the key ownership proof in the "old" set + let key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap(); + + start_era(2); + + // make sure that all authorities have the same balance + for i in 0..authorities.len() { + assert_eq!(Balances::total_balance(&(i as u64)), 10_000_000); + assert_eq!(Staking::slashable_balance_of(&(i as u64)), 10_000); + + assert_eq!( + Staking::eras_stakers(2, i as u64), + pallet_staking::Exposure { + total: 10_000, + own: 10_000, + others: vec![], + }, + ); + } + + let equivocation_keyring = extract_keyring(equivocation_key); + + let set_id = Grandpa::current_set_id(); + + // generate an equivocation proof for the old set, + let equivocation_proof = generate_equivocation_proof( + set_id - 1, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &equivocation_keyring), + ); + + // report the equivocation using the key ownership proof generated on + // the old set, the tx should be dispatched successfully + let inner = report_equivocation(equivocation_proof, key_owner_proof).unwrap(); + assert_ok!(Grandpa::dispatch(inner, Origin::signed(1))); + + start_era(3); + + // check that the balance of 0-th validator is slashed 100%. + assert_eq!(Balances::total_balance(&0), 10_000_000 - 10_000); + assert_eq!(Staking::slashable_balance_of(&0), 0); + + assert_eq!( + Staking::eras_stakers(3, 0), + pallet_staking::Exposure { + total: 0, + own: 0, + others: vec![], + }, + ); + + // check that the balances of all other validators are left intact. + for i in 1..authorities.len() { + assert_eq!(Balances::total_balance(&(i as u64)), 10_000_000); + assert_eq!(Staking::slashable_balance_of(&(i as u64)), 10_000); + + assert_eq!( + Staking::eras_stakers(3, i as u64), + pallet_staking::Exposure { + total: 10_000, + own: 10_000, + others: vec![], + }, + ); + } + }); +} + +#[test] +fn report_equivocation_invalid_set_id() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + start_era(1); + + let authorities = Grandpa::grandpa_authorities(); + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + let equivocation_keyring = extract_keyring(equivocation_key); + + let key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap(); + + let set_id = Grandpa::current_set_id(); + + // generate an equivocation for a future set + let equivocation_proof = generate_equivocation_proof( + set_id + 1, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &equivocation_keyring), + ); + + // it should be filtered by the signed extension validation + assert_err!( + report_equivocation(equivocation_proof, key_owner_proof), + equivocation::ReportEquivocationValidityError::InvalidSetId, + ); + }); +} + +#[test] +fn report_equivocation_invalid_session() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + start_era(1); + + let authorities = Grandpa::grandpa_authorities(); + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + let equivocation_keyring = extract_keyring(equivocation_key); + + // generate a key ownership proof at set id = 1 + let key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap(); + + start_era(2); + + let set_id = Grandpa::current_set_id(); + + // generate an equivocation proof at set id = 2 + let equivocation_proof = generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &equivocation_keyring), + ); + + // report an equivocation for the current set using an key ownership + // proof from the previous set, the session should be invalid. + assert_err!( + report_equivocation(equivocation_proof, key_owner_proof), + equivocation::ReportEquivocationValidityError::InvalidSession, + ); + }); +} + +#[test] +fn report_equivocation_invalid_key_owner_proof() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + start_era(1); + let authorities = Grandpa::grandpa_authorities(); + + let invalid_owner_authority_index = 1; + let invalid_owner_key = &authorities[invalid_owner_authority_index].0; + + // generate a key ownership proof for the authority at index 1 + let invalid_key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &invalid_owner_key)).unwrap(); + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + let equivocation_keyring = extract_keyring(equivocation_key); + + let set_id = Grandpa::current_set_id(); + + // generate an equivocation proof for the authority at index 0 + let equivocation_proof = generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &equivocation_keyring), + ); + + // we need to start a new era otherwise the key ownership proof won't be + // checked since the authorities are part of the current session + start_era(2); + + // report an equivocation for the current set using a key ownership + // proof for a different key than the one in the equivocation proof. + assert_err!( + report_equivocation(equivocation_proof, invalid_key_owner_proof), + equivocation::ReportEquivocationValidityError::InvalidKeyOwnershipProof, + ); + }); +} + +#[test] +fn report_equivocation_invalid_equivocation_proof() { + let authorities = test_authorities(); + + new_test_ext_raw_authorities(authorities).execute_with(|| { + start_era(1); + + let authorities = Grandpa::grandpa_authorities(); + + let equivocation_authority_index = 0; + let equivocation_key = &authorities[equivocation_authority_index].0; + let equivocation_keyring = extract_keyring(equivocation_key); + + // generate a key ownership proof at set id = 1 + let key_owner_proof = + Historical::prove((sp_finality_grandpa::KEY_TYPE, &equivocation_key)).unwrap(); + + let set_id = Grandpa::current_set_id(); + + let assert_invalid_equivocation_proof = |equivocation_proof| { + assert_err!( + report_equivocation(equivocation_proof, key_owner_proof.clone()), + equivocation::ReportEquivocationValidityError::InvalidEquivocationProof, + ); + }; + + start_era(2); + + // both votes target the same block number and hash, + // there is no equivocation. + assert_invalid_equivocation_proof(generate_equivocation_proof( + set_id, + (1, H256::zero(), 10, &equivocation_keyring), + (1, H256::zero(), 10, &equivocation_keyring), + )); + + // votes targetting different rounds, there is no equivocation. + assert_invalid_equivocation_proof(generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (2, H256::random(), 10, &equivocation_keyring), + )); + + // votes signed with different authority keys + assert_invalid_equivocation_proof(generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &Ed25519Keyring::Charlie), + )); + + // votes signed with a key that isn't part of the authority set + assert_invalid_equivocation_proof(generate_equivocation_proof( + set_id, + (1, H256::random(), 10, &equivocation_keyring), + (1, H256::random(), 10, &Ed25519Keyring::Dave), + )); + }); +} diff --git a/frame/session/Cargo.toml b/frame/session/Cargo.toml index b3ca1ad596c..9237f0a16f6 100644 --- a/frame/session/Cargo.toml +++ b/frame/session/Cargo.toml @@ -16,6 +16,7 @@ serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } +sp-session = { version = "2.0.0-dev", default-features = false, path = "../../primitives/session" } sp-staking = { version = "2.0.0-dev", default-features = false, path = "../../primitives/staking" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } @@ -38,6 +39,7 @@ std = [ "sp-std/std", "frame-support/std", "sp-runtime/std", + "sp-session/std", "sp-staking/std", "pallet-timestamp/std", "sp-trie/std", diff --git a/frame/session/src/historical.rs b/frame/session/src/historical.rs index f9990dd1e8a..d9711ecf9d3 100644 --- a/frame/session/src/historical.rs +++ b/frame/session/src/historical.rs @@ -27,16 +27,15 @@ use sp_std::prelude::*; use codec::{Encode, Decode}; -use sp_runtime::{KeyTypeId, RuntimeDebug}; +use sp_runtime::KeyTypeId; use sp_runtime::traits::{Convert, OpaqueKeys}; +use sp_session::{MembershipProof, ValidatorCount}; use frame_support::{decl_module, decl_storage}; use frame_support::{Parameter, print}; use sp_trie::{MemoryDB, Trie, TrieMut, Recorder, EMPTY_PREFIX}; use sp_trie::trie_types::{TrieDBMut, TrieDB}; use super::{SessionIndex, Module as SessionModule}; -type ValidatorCount = u32; - /// Trait necessary for the historical module. pub trait Trait: super::Trait { /// Full identification of the validator. @@ -126,7 +125,7 @@ impl crate::SessionManager for NoteHistoricalRoot::generate_for(new_validators) { Ok(trie) => >::insert(new_index, &(trie.root, count)), Err(reason) => { @@ -253,54 +252,58 @@ impl ProvingTrie { } -/// Proof of ownership of a specific key. -#[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebug)] -pub struct Proof { - session: SessionIndex, - trie_nodes: Vec>, -} - -impl Proof { - /// Returns a session this proof was generated for. - pub fn session(&self) -> SessionIndex { - self.session - } -} - impl> frame_support::traits::KeyOwnerProofSystem<(KeyTypeId, D)> for Module { - type Proof = Proof; + type Proof = MembershipProof; type IdentificationTuple = IdentificationTuple; fn prove(key: (KeyTypeId, D)) -> Option { let session = >::current_index(); - let validators = >::validators().into_iter() + let validators = >::validators() + .into_iter() .filter_map(|validator| { T::FullIdentificationOf::convert(validator.clone()) .map(|full_id| (validator, full_id)) - }); + }) + .collect::>(); + + let count = validators.len() as ValidatorCount; + let trie = ProvingTrie::::generate_for(validators).ok()?; let (id, data) = key; - - trie.prove(id, data.as_ref()).map(|trie_nodes| Proof { - session, - trie_nodes, - }) + trie.prove(id, data.as_ref()) + .map(|trie_nodes| MembershipProof { + session, + trie_nodes, + validator_count: count, + }) } - fn check_proof(key: (KeyTypeId, D), proof: Proof) -> Option> { + fn check_proof(key: (KeyTypeId, D), proof: Self::Proof) -> Option> { let (id, data) = key; if proof.session == >::current_index() { - >::key_owner(id, data.as_ref()).and_then(|owner| - T::FullIdentificationOf::convert(owner.clone()).map(move |id| (owner, id)) - ) + >::key_owner(id, data.as_ref()).and_then(|owner| { + T::FullIdentificationOf::convert(owner.clone()).and_then(move |id| { + let count = >::validators().len() as ValidatorCount; + + if count != proof.validator_count { + return None; + } + + Some((owner, id)) + }) + }) } else { - let (root, _) = >::get(&proof.session)?; - let trie = ProvingTrie::::from_nodes(root, &proof.trie_nodes); + let (root, count) = >::get(&proof.session)?; + + if count != proof.validator_count { + return None; + } + let trie = ProvingTrie::::from_nodes(root, &proof.trie_nodes); trie.query(id, data.as_ref()) } } diff --git a/frame/support/src/lib.rs b/frame/support/src/lib.rs index 5222e506d58..6bad5985abc 100644 --- a/frame/support/src/lib.rs +++ b/frame/support/src/lib.rs @@ -33,6 +33,7 @@ pub use serde; pub use sp_std; #[doc(hidden)] pub use codec; +use codec::{Decode, Encode}; #[cfg(feature = "std")] #[doc(hidden)] pub use once_cell; @@ -237,7 +238,7 @@ macro_rules! assert_ok { /// The void type - it cannot exist. // Oh rust, you crack me up... -#[derive(Clone, Eq, PartialEq, RuntimeDebug)] +#[derive(Clone, Decode, Encode, Eq, PartialEq, RuntimeDebug)] pub enum Void {} #[cfg(feature = "std")] diff --git a/frame/support/src/traits.rs b/frame/support/src/traits.rs index 3d5a3403a97..eaf94f44f86 100644 --- a/frame/support/src/traits.rs +++ b/frame/support/src/traits.rs @@ -288,6 +288,21 @@ pub trait KeyOwnerProofSystem { fn check_proof(key: Key, proof: Self::Proof) -> Option; } +impl KeyOwnerProofSystem for () { + // The proof and identification tuples is any bottom type to guarantee that the methods of this + // implementation can never be called or return anything other than `None`. + type Proof = crate::Void; + type IdentificationTuple = crate::Void; + + fn prove(_key: Key) -> Option { + None + } + + fn check_proof(_key: Key, _proof: Self::Proof) -> Option { + None + } +} + /// Handler for when some currency "account" decreased in balance for /// some reason. /// diff --git a/primitives/core/src/lib.rs b/primitives/core/src/lib.rs index 8d5ad7daaec..9da56018e95 100644 --- a/primitives/core/src/lib.rs +++ b/primitives/core/src/lib.rs @@ -110,8 +110,11 @@ impl ExecutionContext { match self { Importing | Syncing | BlockConstruction => offchain::Capabilities::none(), - // Enable keystore by default for offchain calls. CC @bkchr - OffchainCall(None) => [offchain::Capability::Keystore][..].into(), + // Enable keystore and transaction pool by default for offchain calls. + OffchainCall(None) => [ + offchain::Capability::Keystore, + offchain::Capability::TransactionPool, + ][..].into(), OffchainCall(Some((_, capabilities))) => *capabilities, } } diff --git a/primitives/finality-grandpa/Cargo.toml b/primitives/finality-grandpa/Cargo.toml index b5ce970c0d8..378f715ecca 100644 --- a/primitives/finality-grandpa/Cargo.toml +++ b/primitives/finality-grandpa/Cargo.toml @@ -16,18 +16,24 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] sp-application-crypto = { version = "2.0.0-dev", default-features = false, path = "../application-crypto" } codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +grandpa = { package = "finality-grandpa", version = "0.12.2", default-features = false, features = ["derive-codec"] } +log = { version = "0.4.8", optional = true } serde = { version = "1.0.101", optional = true, features = ["derive"] } sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } +sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../runtime" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } [features] default = ["std"] std = [ "sp-application-crypto/std", "codec/std", - "sp-std/std", + "grandpa/std", + "log", "serde", "sp-api/std", + "sp-core/std", "sp-runtime/std", + "sp-std/std", ] diff --git a/primitives/finality-grandpa/src/lib.rs b/primitives/finality-grandpa/src/lib.rs index 9dcb1c2363c..a84ce57c8d1 100644 --- a/primitives/finality-grandpa/src/lib.rs +++ b/primitives/finality-grandpa/src/lib.rs @@ -23,11 +23,18 @@ extern crate alloc; #[cfg(feature = "std")] use serde::Serialize; + use codec::{Encode, Decode, Input, Codec}; -use sp_runtime::{ConsensusEngineId, RuntimeDebug}; +use sp_runtime::{ConsensusEngineId, RuntimeDebug, traits::NumberFor}; use sp_std::borrow::Cow; use sp_std::vec::Vec; +#[cfg(feature = "std")] +use log::debug; + +/// Key type for GRANDPA module. +pub const KEY_TYPE: sp_core::crypto::KeyTypeId = sp_application_crypto::key_types::GRANDPA; + mod app { use sp_application_crypto::{app_crypto, key_types::GRANDPA, ed25519}; app_crypto!(ed25519, GRANDPA); @@ -157,6 +164,242 @@ impl ConsensusLog { } } +/// Proof of voter misbehavior on a given set id. Misbehavior/equivocation in +/// GRANDPA happens when a voter votes on the same round (either at prevote or +/// precommit stage) for different blocks. Proving is achieved by collecting the +/// signed messages of conflicting votes. +#[derive(Clone, Debug, Decode, Encode, PartialEq)] +pub struct EquivocationProof { + set_id: SetId, + equivocation: Equivocation, +} + +impl EquivocationProof { + /// Create a new `EquivocationProof` for the given set id and using the + /// given equivocation as proof. + pub fn new(set_id: SetId, equivocation: Equivocation) -> Self { + EquivocationProof { + set_id, + equivocation, + } + } + + /// Returns the set id at which the equivocation occurred. + pub fn set_id(&self) -> SetId { + self.set_id + } + + /// Returns the round number at which the equivocation occurred. + pub fn round(&self) -> RoundNumber { + match self.equivocation { + Equivocation::Prevote(ref equivocation) => equivocation.round_number, + Equivocation::Precommit(ref equivocation) => equivocation.round_number, + } + } + + /// Returns the authority id of the equivocator. + pub fn offender(&self) -> &AuthorityId { + self.equivocation.offender() + } +} + +/// Wrapper object for GRANDPA equivocation proofs, useful for unifying prevote +/// and precommit equivocations under a common type. +#[derive(Clone, Debug, Decode, Encode, PartialEq)] +pub enum Equivocation { + /// Proof of equivocation at prevote stage. + Prevote(grandpa::Equivocation, AuthoritySignature>), + /// Proof of equivocation at precommit stage. + Precommit(grandpa::Equivocation, AuthoritySignature>), +} + +impl From, AuthoritySignature>> + for Equivocation +{ + fn from( + equivocation: grandpa::Equivocation< + AuthorityId, + grandpa::Prevote, + AuthoritySignature, + >, + ) -> Self { + Equivocation::Prevote(equivocation) + } +} + +impl From, AuthoritySignature>> + for Equivocation +{ + fn from( + equivocation: grandpa::Equivocation< + AuthorityId, + grandpa::Precommit, + AuthoritySignature, + >, + ) -> Self { + Equivocation::Precommit(equivocation) + } +} + +impl Equivocation { + /// Returns the authority id of the equivocator. + pub fn offender(&self) -> &AuthorityId { + match self { + Equivocation::Prevote(ref equivocation) => &equivocation.identity, + Equivocation::Precommit(ref equivocation) => &equivocation.identity, + } + } +} + +/// Verifies the equivocation proof by making sure that both votes target +/// different blocks and that its signatures are valid. +pub fn check_equivocation_proof(report: EquivocationProof) -> Result<(), ()> +where + H: Clone + Encode + PartialEq, + N: Clone + Encode + PartialEq, +{ + // NOTE: the bare `Prevote` and `Precommit` types don't share any trait, + // this is implemented as a macro to avoid duplication. + macro_rules! check { + ( $equivocation:expr, $message:expr ) => { + // if both votes have the same target the equivocation is invalid. + if $equivocation.first.0.target_hash == $equivocation.second.0.target_hash && + $equivocation.first.0.target_number == $equivocation.second.0.target_number + { + return Err(()); + } + + // check signatures on both votes are valid + check_message_signature( + &$message($equivocation.first.0), + &$equivocation.identity, + &$equivocation.first.1, + $equivocation.round_number, + report.set_id, + )?; + + check_message_signature( + &$message($equivocation.second.0), + &$equivocation.identity, + &$equivocation.second.1, + $equivocation.round_number, + report.set_id, + )?; + + return Ok(()); + }; + } + + match report.equivocation { + Equivocation::Prevote(equivocation) => { + check!(equivocation, grandpa::Message::Prevote); + } + Equivocation::Precommit(equivocation) => { + check!(equivocation, grandpa::Message::Precommit); + } + } +} + +/// Encode round message localized to a given round and set id. +pub fn localized_payload(round: RoundNumber, set_id: SetId, message: &E) -> Vec { + let mut buf = Vec::new(); + localized_payload_with_buffer(round, set_id, message, &mut buf); + buf +} + +/// Encode round message localized to a given round and set id using the given +/// buffer. The given buffer will be cleared and the resulting encoded payload +/// will always be written to the start of the buffer. +pub fn localized_payload_with_buffer( + round: RoundNumber, + set_id: SetId, + message: &E, + buf: &mut Vec, +) { + buf.clear(); + (message, round, set_id).encode_to(buf) +} + +/// Check a message signature by encoding the message as a localized payload and +/// verifying the provided signature using the expected authority id. +pub fn check_message_signature( + message: &grandpa::Message, + id: &AuthorityId, + signature: &AuthoritySignature, + round: RoundNumber, + set_id: SetId, +) -> Result<(), ()> +where + H: Encode, + N: Encode, +{ + check_message_signature_with_buffer(message, id, signature, round, set_id, &mut Vec::new()) +} + +/// Check a message signature by encoding the message as a localized payload and +/// verifying the provided signature using the expected authority id. +/// The encoding necessary to verify the signature will be done using the given +/// buffer, the original content of the buffer will be cleared. +pub fn check_message_signature_with_buffer( + message: &grandpa::Message, + id: &AuthorityId, + signature: &AuthoritySignature, + round: RoundNumber, + set_id: SetId, + buf: &mut Vec, +) -> Result<(), ()> +where + H: Encode, + N: Encode, +{ + localized_payload_with_buffer(round, set_id, message, buf); + + #[cfg(not(feature = "std"))] + let verify = || { + use sp_application_crypto::RuntimeAppPublic; + id.verify(&buf, signature) + }; + + #[cfg(feature = "std")] + let verify = || { + use sp_application_crypto::Pair; + AuthorityPair::verify(signature, &buf, &id) + }; + + if verify() { + Ok(()) + } else { + #[cfg(feature = "std")] + debug!(target: "afg", "Bad signature on message from {:?}", id); + + Err(()) + } +} + +/// Localizes the message to the given set and round and signs the payload. +#[cfg(feature = "std")] +pub fn sign_message( + message: grandpa::Message, + pair: &AuthorityPair, + round: RoundNumber, + set_id: SetId, +) -> grandpa::SignedMessage +where + H: Encode, + N: Encode, +{ + use sp_core::Pair; + + let encoded = localized_payload(round, set_id, &message); + let signature = pair.sign(&encoded[..]); + + grandpa::SignedMessage { + message, + signature, + id: pair.public(), + } +} + /// WASM function call to check for pending changes. pub const PENDING_CHANGE_CALL: &str = "grandpa_pending_change"; /// WASM function call to get current GRANDPA authorities. @@ -211,6 +454,29 @@ impl<'a> Decode for VersionedAuthorityList<'a> { } } +/// An opaque type used to represent the key ownership proof at the runtime API +/// boundary. The inner value is an encoded representation of the actual key +/// ownership proof which will be parameterized when defining the runtime. At +/// the runtime API boundary this type is unknown and as such we keep this +/// opaque representation, implementors of the runtime API will have to make +/// sure that all usages of `OpaqueKeyOwnershipProof` refer to the same type. +#[derive(Decode, Encode, PartialEq)] +pub struct OpaqueKeyOwnershipProof(Vec); + +impl OpaqueKeyOwnershipProof { + /// Create a new `OpaqueKeyOwnershipProof` using the given encoded + /// representation. + pub fn new(inner: Vec) -> OpaqueKeyOwnershipProof { + OpaqueKeyOwnershipProof(inner) + } + + /// Try to decode this `OpaqueKeyOwnershipProof` into the given concrete key + /// ownership proof type. + pub fn decode(self) -> Option { + codec::Decode::decode(&mut &self.0[..]).ok() + } +} + sp_api::decl_runtime_apis! { /// APIs for integrating the GRANDPA finality gadget into runtimes. /// This should be implemented on the runtime side. @@ -230,5 +496,32 @@ sp_api::decl_runtime_apis! { /// used to finalize descendants of this block (B+1, B+2, ...). The block B itself /// is finalized by the authorities from block B-1. fn grandpa_authorities() -> AuthorityList; + + /// Submits an extrinsic to report an equivocation. The caller must + /// provide the equivocation proof and a key ownership proof (should be + /// obtained using `generate_key_ownership_proof`). This method will + /// sign the extrinsic with any reporting keys available in the keystore + /// and will push the transaction to the pool. + /// Only useful in an offchain context. + fn submit_report_equivocation_extrinsic( + equivocation_proof: EquivocationProof>, + key_owner_proof: OpaqueKeyOwnershipProof, + ) -> Option<()>; + + /// Generates a proof of key ownership for the given authority in the + /// given set. An example usage of this module is coupled with the + /// session historical module to prove that a given authority key is + /// tied to a given staking identity during a specific session. Proofs + /// of key ownership are necessary for submitting equivocation reports. + /// NOTE: even though the API takes a `set_id` as parameter the current + /// implementations ignore this parameter and instead rely on this + /// method being called at the correct block height, i.e. any point at + /// which the given set id is live on-chain. Future implementations will + /// instead use indexed data through an offchain worker, not requiring + /// older states to be available. + fn generate_key_ownership_proof( + set_id: SetId, + authority_id: AuthorityId, + ) -> Option; } } diff --git a/primitives/session/Cargo.toml b/primitives/session/Cargo.toml index 6d210b341f4..df20a3832cf 100644 --- a/primitives/session/Cargo.toml +++ b/primitives/session/Cargo.toml @@ -12,11 +12,20 @@ description = "Primitives for sessions" targets = ["x86_64-unknown-linux-gnu"] [dependencies] +codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false, features = ["derive"] } sp-api = { version = "2.0.0-dev", default-features = false, path = "../api" } -sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } sp-core = { version = "2.0.0-dev", default-features = false, path = "../core" } +sp-std = { version = "2.0.0-dev", default-features = false, path = "../std" } +sp-staking = { version = "2.0.0-dev", default-features = false, path = "../staking" } sp-runtime = { version = "2.0.0-dev", optional = true, path = "../runtime" } [features] default = [ "std" ] -std = [ "sp-api/std", "sp-std/std", "sp-runtime", "sp-core/std" ] +std = [ + "codec/std", + "sp-api/std", + "sp-core/std", + "sp-std/std", + "sp-staking/std", + "sp-runtime/std", +] diff --git a/primitives/session/src/lib.rs b/primitives/session/src/lib.rs index 8e2a68d0509..720dfbfcadd 100644 --- a/primitives/session/src/lib.rs +++ b/primitives/session/src/lib.rs @@ -18,14 +18,17 @@ #![cfg_attr(not(feature = "std"), no_std)] -use sp_std::vec::Vec; +use codec::{Encode, Decode}; #[cfg(feature = "std")] use sp_runtime::{generic::BlockId, traits::Block as BlockT}; #[cfg(feature = "std")] use sp_api::ProvideRuntimeApi; +use sp_core::RuntimeDebug; use sp_core::crypto::KeyTypeId; +use sp_staking::SessionIndex; +use sp_std::vec::Vec; sp_api::decl_runtime_apis! { /// Session keys runtime api. @@ -46,6 +49,32 @@ sp_api::decl_runtime_apis! { } } +/// Number of validators in a given session. +pub type ValidatorCount = u32; + +/// Proof of membership of a specific key in a given session. +#[derive(Encode, Decode, Clone, Eq, PartialEq, Default, RuntimeDebug)] +pub struct MembershipProof { + /// The session index on which the specific key is a member. + pub session: SessionIndex, + /// Trie nodes of a merkle proof of session membership. + pub trie_nodes: Vec>, + /// The validator count of the session on which the specific key is a member. + pub validator_count: ValidatorCount, +} + +impl MembershipProof { + /// Returns a session this proof was generated for. + pub fn session(&self) -> SessionIndex { + self.session + } + + /// Returns the validator count of the session this proof was generated for. + pub fn validator_count(&self) -> ValidatorCount { + self.validator_count + } +} + /// Generate the initial session keys with the given seeds, at the given block and store them in /// the client's keystore. #[cfg(feature = "std")] diff --git a/test-utils/runtime/Cargo.toml b/test-utils/runtime/Cargo.toml index f4582d0b709..00aa1575291 100644 --- a/test-utils/runtime/Cargo.toml +++ b/test-utils/runtime/Cargo.toml @@ -36,6 +36,7 @@ pallet-babe = { version = "2.0.0-dev", default-features = false, path = "../../f frame-system = { version = "2.0.0-dev", default-features = false, path = "../../frame/system" } frame-system-rpc-runtime-api = { version = "2.0.0-dev", default-features = false, path = "../../frame/system/rpc/runtime-api" } pallet-timestamp = { version = "2.0.0-dev", default-features = false, path = "../../frame/timestamp" } +sp-finality-grandpa = { version = "2.0.0-dev", default-features = false, path = "../../primitives/finality-grandpa" } sp-trie = { version = "2.0.0-dev", default-features = false, path = "../../primitives/trie" } sp-transaction-pool = { version = "2.0.0-dev", default-features = false, path = "../../primitives/transaction-pool" } trie-db = { version = "0.20.1", default-features = false } @@ -88,6 +89,7 @@ std = [ "frame-system/std", "pallet-timestamp/std", "sc-service", + "sp-finality-grandpa/std", "sp-trie/std", "sp-transaction-pool/std", "trie-db/std", diff --git a/test-utils/runtime/src/lib.rs b/test-utils/runtime/src/lib.rs index 745eb8f7458..1003a0c593d 100644 --- a/test-utils/runtime/src/lib.rs +++ b/test-utils/runtime/src/lib.rs @@ -33,14 +33,15 @@ use sp_trie::trie_types::{TrieDB, TrieDBMut}; use sp_api::{decl_runtime_apis, impl_runtime_apis}; use sp_runtime::{ - ApplyExtrinsicResult, create_runtime_str, Perbill, impl_opaque_keys, + create_runtime_str, impl_opaque_keys, + ApplyExtrinsicResult, Perbill, transaction_validity::{ TransactionValidity, ValidTransaction, TransactionValidityError, InvalidTransaction, TransactionSource, }, traits::{ BlindCheckable, BlakeTwo256, Block as BlockT, Extrinsic as ExtrinsicT, - GetNodeBlockType, GetRuntimeBlockType, Verify, IdentityLookup, + GetNodeBlockType, GetRuntimeBlockType, NumberFor, Verify, IdentityLookup, }, }; use sp_version::RuntimeVersion; @@ -671,6 +672,29 @@ cfg_if! { } } + impl sp_finality_grandpa::GrandpaApi for Runtime { + fn grandpa_authorities() -> sp_finality_grandpa::AuthorityList { + Vec::new() + } + + fn submit_report_equivocation_extrinsic( + _equivocation_proof: sp_finality_grandpa::EquivocationProof< + ::Hash, + NumberFor, + >, + _key_owner_proof: sp_finality_grandpa::OpaqueKeyOwnershipProof, + ) -> Option<()> { + None + } + + fn generate_key_ownership_proof( + _set_id: sp_finality_grandpa::SetId, + _authority_id: sp_finality_grandpa::AuthorityId, + ) -> Option { + None + } + } + impl frame_system_rpc_runtime_api::AccountNonceApi for Runtime { fn account_nonce(_account: AccountId) -> Index { 0 -- GitLab From d2627c48acbdf08f411f2a998876c6acb97ce92a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 6 May 2020 23:16:54 +0200 Subject: [PATCH 152/167] Make `Digest` support `StorageAppend` (#5922) * Make `Digest` support `StorageAppend` This adds support for `StorageAppend` to `Digest`. Digest is just a wrapper around a `Vec` and we abuse the fact that SCALE does not puts any special marker into the encoding for structs. So, we can just append to the encoded Digest. A test is added that ensures, if the `Digest` format ever changes, we remove this optimization. * Update weight * Update frame/support/src/storage/mod.rs Co-authored-by: Alexander Popiak * Update frame/system/src/lib.rs Co-authored-by: Alexander Popiak Co-authored-by: Alexander Popiak --- client/finality-grandpa/src/light_import.rs | 6 +-- frame/support/src/storage/mod.rs | 47 ++++++++++++++++++++- frame/system/src/lib.rs | 8 ++-- primitives/runtime/src/generic/digest.rs | 10 +++-- 4 files changed, 58 insertions(+), 13 deletions(-) diff --git a/client/finality-grandpa/src/light_import.rs b/client/finality-grandpa/src/light_import.rs index 7b860bc34d2..e9ca94ce982 100644 --- a/client/finality-grandpa/src/light_import.rs +++ b/client/finality-grandpa/src/light_import.rs @@ -18,9 +18,7 @@ use std::collections::HashMap; use std::sync::Arc; use log::{info, trace, warn}; use parking_lot::RwLock; -use sc_client_api::{ - backend::{AuxStore, Backend, Finalizer, TransactionFor}, -}; +use sc_client_api::backend::{AuxStore, Backend, Finalizer, TransactionFor}; use sp_blockchain::{HeaderBackend, Error as ClientError, well_known_cache_keys}; use parity_scale_codec::{Encode, Decode}; use sp_consensus::{ @@ -220,7 +218,7 @@ impl LightAuthoritySet { /// Set new authorities set. pub fn update(&mut self, set_id: u64, authorities: AuthorityList) { self.set_id = set_id; - std::mem::replace(&mut self.authorities, authorities); + self.authorities = authorities; } } diff --git a/frame/support/src/storage/mod.rs b/frame/support/src/storage/mod.rs index 902190302de..cdbdcbc6ffa 100644 --- a/frame/support/src/storage/mod.rs +++ b/frame/support/src/storage/mod.rs @@ -19,6 +19,7 @@ use sp_std::{prelude::*, marker::PhantomData}; use codec::{FullCodec, FullEncode, Encode, EncodeLike, Decode}; use crate::{traits::Len, hash::{Twox128, StorageHasher}}; +use sp_runtime::generic::{Digest, DigestItem}; pub mod unhashed; pub mod hashed; @@ -499,15 +500,22 @@ mod private { pub trait Sealed {} impl Sealed for Vec {} + impl Sealed for Digest {} } impl StorageAppend for Vec {} +/// We abuse the fact that SCALE does not put any marker into the encoding, i.e. +/// we only encode the internal vec and we can append to this vec. We have a test that ensures +/// that if the `Digest` format ever changes, we need to remove this here. +impl StorageAppend> for Digest {} + #[cfg(test)] mod test { + use super::*; use sp_core::hashing::twox_128; use sp_io::TestExternalities; - use crate::storage::{unhashed, StoragePrefixedMap}; + use generator::StorageValue as _; #[test] fn prefixed_map_works() { @@ -582,4 +590,41 @@ mod test { assert_eq!(unhashed::get(&key_after[..]), Some(33u64)); }); } + + // This test ensures that the Digest encoding does not change without being noticied. + #[test] + fn digest_storage_append_works_as_expected() { + TestExternalities::default().execute_with(|| { + struct Storage; + impl generator::StorageValue> for Storage { + type Query = Digest; + + fn module_prefix() -> &'static [u8] { + b"MyModule" + } + + fn storage_prefix() -> &'static [u8] { + b"Storage" + } + + fn from_optional_value_to_query(v: Option>) -> Self::Query { + v.unwrap() + } + + fn from_query_to_optional_value(v: Self::Query) -> Option> { + Some(v) + } + } + + Storage::append(DigestItem::ChangesTrieRoot(1)); + Storage::append(DigestItem::Other(Vec::new())); + + let value = unhashed::get_raw(&Storage::storage_value_final_key()).unwrap(); + + let expected = Digest { + logs: vec![DigestItem::ChangesTrieRoot(1), DigestItem::Other(Vec::new())], + }; + assert_eq!(Digest::decode(&mut &value[..]).unwrap(), expected); + }); + } } diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index 50778e72221..eca1b3291eb 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -993,13 +993,11 @@ impl Module { /// Deposits a log and ensures it matches the block's log data. /// /// # - /// - `O(D)` where `D` length of `Digest` - /// - 1 storage mutation (codec `O(D)`). + /// - `O(1)` + /// - 1 storage write (codec `O(1)`) /// # pub fn deposit_log(item: DigestItemOf) { - let mut l = >::get(); - l.push(item); - >::put(l); + >::append(item); } /// Get the basic externalities for this module, useful for tests. diff --git a/primitives/runtime/src/generic/digest.rs b/primitives/runtime/src/generic/digest.rs index dad3e1fc26b..44c1559aaa0 100644 --- a/primitives/runtime/src/generic/digest.rs +++ b/primitives/runtime/src/generic/digest.rs @@ -28,18 +28,22 @@ use sp_core::{ChangesTrieConfiguration, RuntimeDebug}; /// Generic header digest. #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug)] #[cfg_attr(feature = "std", derive(Serialize, Deserialize, parity_util_mem::MallocSizeOf))] -pub struct Digest { +pub struct Digest { /// A list of logs in the digest. + #[cfg_attr( + feature = "std", + serde(bound(serialize = "Hash: codec::Codec", deserialize = "Hash: codec::Codec")) + )] pub logs: Vec>, } -impl Default for Digest { +impl Default for Digest { fn default() -> Self { Digest { logs: Vec::new(), } } } -impl Digest { +impl Digest { /// Get reference to all digest items. pub fn logs(&self) -> &[DigestItem] { &self.logs -- GitLab From b292de78ba9b4a987baab517943ccdf97db595ad Mon Sep 17 00:00:00 2001 From: Dan Forbes Date: Wed, 6 May 2020 14:22:35 -0700 Subject: [PATCH 153/167] Fix docs (#5928) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix docs * Update frame/support/src/dispatch.rs Prettier link Co-authored-by: Bastian Köcher * Update primitives/runtime/src/traits.rs Prettier link Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- client/block-builder/src/lib.rs | 2 +- frame/elections-phragmen/src/lib.rs | 2 +- frame/support/procedural/src/lib.rs | 8 ++++---- frame/support/src/dispatch.rs | 4 ++-- frame/transaction-payment/src/lib.rs | 4 ++-- primitives/consensus/common/src/lib.rs | 2 +- primitives/core/src/crypto.rs | 2 +- primitives/phragmen/src/reduce.rs | 2 +- primitives/runtime/src/traits.rs | 2 +- primitives/state-machine/src/overlayed_changes.rs | 6 +++--- utils/fork-tree/src/lib.rs | 4 ++-- utils/wasm-builder-runner/src/lib.rs | 2 +- 12 files changed, 20 insertions(+), 20 deletions(-) diff --git a/client/block-builder/src/lib.rs b/client/block-builder/src/lib.rs index 480a759e30d..2154a1f5f26 100644 --- a/client/block-builder/src/lib.rs +++ b/client/block-builder/src/lib.rs @@ -17,7 +17,7 @@ //! Substrate block builder //! //! This crate provides the [`BlockBuilder`] utility and the corresponding runtime api -//! [`BlockBuilder`](api::BlockBuilder).Error +//! [`BlockBuilder`](sp_block_builder::BlockBuilder).Error //! //! The block builder utility is used in the node as an abstraction over the runtime api to //! initialize a block, to push extrinsics and to finalize a block. diff --git a/frame/elections-phragmen/src/lib.rs b/frame/elections-phragmen/src/lib.rs index 6cb10f54c7a..040ef00ac27 100644 --- a/frame/elections-phragmen/src/lib.rs +++ b/frame/elections-phragmen/src/lib.rs @@ -65,7 +65,7 @@ //! //! ##### Renouncing candidacy. //! -//! All candidates, elected or not, can renounce their candidacy. A call to [`renounce_candidacy`] +//! All candidates, elected or not, can renounce their candidacy. A call to [`Module::renounce_candidacy`] //! will always cause the candidacy bond to be refunded. //! //! Note that with the members being the default candidates for the next round and votes persisting diff --git a/frame/support/procedural/src/lib.rs b/frame/support/procedural/src/lib.rs index a9662f530a5..17b1efdcd48 100644 --- a/frame/support/procedural/src/lib.rs +++ b/frame/support/procedural/src/lib.rs @@ -144,12 +144,12 @@ use proc_macro::TokenStream; /// /// * `#vis`: Set the visibility of the structure. `pub` or nothing. /// * `#name`: Name of the storage item, used as a prefix in storage. -/// * [optional] `get(fn #getter)`: Implements the function #getter to `Module`. -/// * [optional] `config(#field_name)`: `field_name` is optional if get is set. +/// * \[optional\] `get(fn #getter)`: Implements the function #getter to `Module`. +/// * \[optional\] `config(#field_name)`: `field_name` is optional if get is set. /// Will include the item in `GenesisConfig`. -/// * [optional] `build(#closure)`: Closure called with storage overlays. +/// * \[optional\] `build(#closure)`: Closure called with storage overlays. /// * `#type`: Storage type. -/// * [optional] `#default`: Value returned when none. +/// * \[optional\] `#default`: Value returned when none. /// /// Storage items are accessible in multiple ways: /// diff --git a/frame/support/src/dispatch.rs b/frame/support/src/dispatch.rs index 081574726a6..df887fa2c42 100644 --- a/frame/support/src/dispatch.rs +++ b/frame/support/src/dispatch.rs @@ -106,7 +106,7 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// ### Shorthand Example /// /// The macro automatically expands a shorthand function declaration to return the -/// [`DispatchResult`] type. These functions are the same: +/// [`DispatchResult`](dispatch::DispatchResult) type. These functions are the same: /// /// ``` /// # #[macro_use] @@ -133,7 +133,7 @@ impl Parameter for T where T: Codec + EncodeLike + Clone + Eq + fmt::Debug {} /// ### Consuming only portions of the annotated static weight /// /// Per default a callable function consumes all of its static weight as declared via -/// the #[weight] attribute. However, there are use cases where only a portion of this +/// the #\[weight\] attribute. However, there are use cases where only a portion of this /// weight should be consumed. In that case the static weight is charged pre dispatch and /// the difference is refunded post dispatch. /// diff --git a/frame/transaction-payment/src/lib.rs b/frame/transaction-payment/src/lib.rs index fdcb9122a25..f6334c658ac 100644 --- a/frame/transaction-payment/src/lib.rs +++ b/frame/transaction-payment/src/lib.rs @@ -24,10 +24,10 @@ //! chance to be included by the transaction queue. //! //! Additionally, this module allows one to configure: -//! - The mapping between one unit of weight to one unit of fee via [`WeightToFee`]. +//! - The mapping between one unit of weight to one unit of fee via [`Trait::WeightToFee`]. //! - A means of updating the fee for the next block, via defining a multiplier, based on the //! final state of the chain at the end of the previous block. This can be configured via -//! [`FeeMultiplierUpdate`] +//! [`Trait::FeeMultiplierUpdate`] #![cfg_attr(not(feature = "std"), no_std)] diff --git a/primitives/consensus/common/src/lib.rs b/primitives/consensus/common/src/lib.rs index 09dc031dc9b..9f338ad1d4e 100644 --- a/primitives/consensus/common/src/lib.rs +++ b/primitives/consensus/common/src/lib.rs @@ -152,7 +152,7 @@ pub trait Proposer { /// /// # Return /// - /// Returns a future that resolves to a [`Proposal`] or to [`Self::Error`]. + /// Returns a future that resolves to a [`Proposal`] or to [`Error`]. fn propose( &mut self, inherent_data: InherentData, diff --git a/primitives/core/src/crypto.rs b/primitives/core/src/crypto.rs index a76110c7147..44d43c3a442 100644 --- a/primitives/core/src/crypto.rs +++ b/primitives/core/src/crypto.rs @@ -873,7 +873,7 @@ pub trait Pair: CryptoType + Sized + Clone + Send + Sync + 'static { /// Interprets the string `s` in order to generate a key pair. /// - /// See [`from_string_with_seed`](Self::from_string_with_seed) for more extensive documentation. + /// See [`from_string_with_seed`](Pair::from_string_with_seed) for more extensive documentation. #[cfg(feature = "std")] fn from_string(s: &str, password_override: Option<&str>) -> Result { Self::from_string_with_seed(s, password_override).map(|x| x.0) diff --git a/primitives/phragmen/src/reduce.rs b/primitives/phragmen/src/reduce.rs index ac4441ddc0e..7153a9383c3 100644 --- a/primitives/phragmen/src/reduce.rs +++ b/primitives/phragmen/src/reduce.rs @@ -639,7 +639,7 @@ fn reduce_all(assignments: &mut Vec>) -> u32 num_changed } -/// Reduce the given [`PhragmenResult`]. This removes redundant edges from without changing the +/// Reduce the given [`Vec>`]. This removes redundant edges from without changing the /// overall backing of any of the elected candidates. /// /// Returns the number of edges removed. diff --git a/primitives/runtime/src/traits.rs b/primitives/runtime/src/traits.rs index a8f4836e8e4..59c2ed64e0c 100644 --- a/primitives/runtime/src/traits.rs +++ b/primitives/runtime/src/traits.rs @@ -1301,7 +1301,7 @@ impl Printable for Tuple { } } -/// Something that can convert a [`BlockId`] to a number or a hash. +/// Something that can convert a [`BlockId`](crate::generic::BlockId) to a number or a hash. #[cfg(feature = "std")] pub trait BlockIdTo { /// The error type that will be returned by the functions. diff --git a/primitives/state-machine/src/overlayed_changes.rs b/primitives/state-machine/src/overlayed_changes.rs index f7773a8211e..3816bb732aa 100644 --- a/primitives/state-machine/src/overlayed_changes.rs +++ b/primitives/state-machine/src/overlayed_changes.rs @@ -98,9 +98,9 @@ pub struct StorageChanges { /// Offchain state changes to write to the offchain database. pub offchain_storage_changes: OffchainOverlayedChanges, /// A transaction for the backend that contains all changes from - /// [`main_storage_changes`](Self::main_storage_changes) and from - /// [`child_storage_changes`](Self::child_storage_changes). - /// [`offchain_storage_changes`](Self::offchain_storage_changes). + /// [`main_storage_changes`](StorageChanges::main_storage_changes) and from + /// [`child_storage_changes`](StorageChanges::child_storage_changes). + /// [`offchain_storage_changes`](StorageChanges::offchain_storage_changes). pub transaction: Transaction, /// The storage root after applying the transaction. pub transaction_storage_root: H::Out, diff --git a/utils/fork-tree/src/lib.rs b/utils/fork-tree/src/lib.rs index ba7e519ddf1..be543e135f1 100644 --- a/utils/fork-tree/src/lib.rs +++ b/utils/fork-tree/src/lib.rs @@ -306,7 +306,7 @@ impl ForkTree where } } - /// Same as [`find_node_where`](Self::find_node_where), but returns mutable reference. + /// Same as [`find_node_where`](ForkTree::find_node_where), but returns mutable reference. pub fn find_node_where_mut( &mut self, hash: &H, @@ -331,7 +331,7 @@ impl ForkTree where Ok(None) } - /// Same as [`find_node_where`](Self::find_node_where), but returns indexes. + /// Same as [`find_node_where`](ForkTree::find_node_where), but returns indexes. pub fn find_node_index_where( &self, hash: &H, diff --git a/utils/wasm-builder-runner/src/lib.rs b/utils/wasm-builder-runner/src/lib.rs index 0e4b1421f88..cea7d38641c 100644 --- a/utils/wasm-builder-runner/src/lib.rs +++ b/utils/wasm-builder-runner/src/lib.rs @@ -169,7 +169,7 @@ impl WasmBuilderSelectSource { /// 3. Select the source of the `wasm-builder` crate using the methods of /// [`WasmBuilderSelectSource`]. /// 4. Set additional `RUST_FLAGS` or a different name for the file containing the WASM code -/// using methods of [`Self`]. +/// using methods of [`WasmBuilder`]. /// 5. Build the WASM binary using [`Self::build`]. pub struct WasmBuilder { /// Where should we pull the `wasm-builder` crate from. -- GitLab From 048aa1f54d216bba9e6fbac1e00eae091efed3b5 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 7 May 2020 09:24:07 +0200 Subject: [PATCH 154/167] unify spacing on state trace logs (#5932) --- primitives/state-machine/src/ext.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/primitives/state-machine/src/ext.rs b/primitives/state-machine/src/ext.rs index 1cd4f01e7b5..9d0eead69ea 100644 --- a/primitives/state-machine/src/ext.rs +++ b/primitives/state-machine/src/ext.rs @@ -420,7 +420,7 @@ where key: Vec, value: Vec, ) { - trace!(target: "state", "{:04x}: Append({}) {}", + trace!(target: "state", "{:04x}: Append {}={}", self.id, HexDisplay::from(&key), HexDisplay::from(&value), @@ -444,7 +444,7 @@ where fn storage_root(&mut self) -> Vec { let _guard = sp_panic_handler::AbortGuard::force_abort(); if let Some(ref root) = self.storage_transaction_cache.transaction_storage_root { - trace!(target: "state", "{:04x}: Root (cached) {}", + trace!(target: "state", "{:04x}: Root(cached) {}", self.id, HexDisplay::from(&root.as_ref()), ); @@ -470,7 +470,7 @@ where .unwrap_or( empty_child_trie_root::>() ); - trace!(target: "state", "{:04x}: ChildRoot({}) (cached) {}", + trace!(target: "state", "{:04x}: ChildRoot({})(cached) {}", self.id, HexDisplay::from(&storage_key), HexDisplay::from(&root.as_ref()), @@ -518,7 +518,7 @@ where .unwrap_or( empty_child_trie_root::>() ); - trace!(target: "state", "{:04x}: ChildRoot({}) (no change) {}", + trace!(target: "state", "{:04x}: ChildRoot({})(no_change) {}", self.id, HexDisplay::from(&storage_key.as_ref()), HexDisplay::from(&root.as_ref()), -- GitLab From 6c55cbb726f041f011a1033ed0dda3b3c6c652bf Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 7 May 2020 11:47:23 +0200 Subject: [PATCH 155/167] Extend Schedule Pallet for Root Scheduling/Canceling (#5907) * Add root dispatch to scheduler * Move encode operation upwards * fix benchmark * extend extrinsics * add some clarifying comments * start to add benchmarking * finish weights * remove double encode * bump spec * Update weights * more accurate weights * bump base weight --- bin/node/runtime/Cargo.toml | 1 + bin/node/runtime/src/lib.rs | 1 + frame/democracy/src/benchmarking.rs | 2 +- frame/democracy/src/lib.rs | 4 +- frame/scheduler/Cargo.toml | 4 +- frame/scheduler/src/benchmarking.rs | 158 +++++++++++++ frame/scheduler/src/lib.rs | 339 ++++++++++++++++++++++------ frame/support/src/traits.rs | 4 +- 8 files changed, 435 insertions(+), 78 deletions(-) create mode 100644 frame/scheduler/src/benchmarking.rs diff --git a/bin/node/runtime/Cargo.toml b/bin/node/runtime/Cargo.toml index 9e39d9d24e1..00d1c6dd722 100644 --- a/bin/node/runtime/Cargo.toml +++ b/bin/node/runtime/Cargo.toml @@ -148,6 +148,7 @@ runtime-benchmarks = [ "pallet-elections-phragmen/runtime-benchmarks", "pallet-identity/runtime-benchmarks", "pallet-im-online/runtime-benchmarks", + "pallet-scheduler/runtime-benchmarks", "pallet-society/runtime-benchmarks", "pallet-staking/runtime-benchmarks", "pallet-timestamp/runtime-benchmarks", diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index 294aac8ae39..b8d2c51e27c 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -967,6 +967,7 @@ impl_runtime_apis! { add_benchmark!(params, batches, b"identity", Identity); add_benchmark!(params, batches, b"im-online", ImOnline); add_benchmark!(params, batches, b"offences", OffencesBench::); + add_benchmark!(params, batches, b"scheduler", Scheduler); add_benchmark!(params, batches, b"session", SessionBench::); add_benchmark!(params, batches, b"staking", Staking); add_benchmark!(params, batches, b"system", SystemBench::); diff --git a/frame/democracy/src/benchmarking.rs b/frame/democracy/src/benchmarking.rs index 4459a1aaa54..9896f987edf 100644 --- a/frame/democracy/src/benchmarking.rs +++ b/frame/democracy/src/benchmarking.rs @@ -69,7 +69,7 @@ fn add_referendum(n: u32) -> Result { ); let referendum_index: ReferendumIndex = ReferendumCount::get() - 1; let _ = T::Scheduler::schedule_named( - (DEMOCRACY_ID, referendum_index), + (DEMOCRACY_ID, referendum_index).encode(), 0.into(), None, 63, diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index d924ca9666f..df1ea0d5317 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -832,7 +832,7 @@ decl_module! { #[weight = (0, DispatchClass::Operational)] fn cancel_queued(origin, which: ReferendumIndex) { ensure_root(origin)?; - T::Scheduler::cancel_named((DEMOCRACY_ID, which)) + T::Scheduler::cancel_named((DEMOCRACY_ID, which).encode()) .map_err(|_| Error::::ProposalMissing)?; } @@ -1659,7 +1659,7 @@ impl Module { }); if T::Scheduler::schedule_named( - (DEMOCRACY_ID, index), + (DEMOCRACY_ID, index).encode(), when, None, 63, diff --git a/frame/scheduler/Cargo.toml b/frame/scheduler/Cargo.toml index 8a511cd3894..6cc9161eea4 100644 --- a/frame/scheduler/Cargo.toml +++ b/frame/scheduler/Cargo.toml @@ -11,13 +11,14 @@ description = "FRAME example pallet" [dependencies] serde = { version = "1.0.101", optional = true } codec = { package = "parity-scale-codec", version = "1.2.0", default-features = false } -frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking" } frame-support = { version = "2.0.0-dev", default-features = false, path = "../support" } frame-system = { version = "2.0.0-dev", default-features = false, path = "../system" } sp-runtime = { version = "2.0.0-dev", default-features = false, path = "../../primitives/runtime" } sp-std = { version = "2.0.0-dev", default-features = false, path = "../../primitives/std" } sp-io = { version = "2.0.0-dev", default-features = false, path = "../../primitives/io" } +frame-benchmarking = { version = "2.0.0-dev", default-features = false, path = "../benchmarking", optional = true } + [dev-dependencies] sp-core = { version = "2.0.0-dev", path = "../../primitives/core", default-features = false } @@ -33,3 +34,4 @@ std = [ "sp-io/std", "sp-std/std" ] +runtime-benchmarks = ["frame-benchmarking"] diff --git a/frame/scheduler/src/benchmarking.rs b/frame/scheduler/src/benchmarking.rs new file mode 100644 index 00000000000..ac9c19f7c3d --- /dev/null +++ b/frame/scheduler/src/benchmarking.rs @@ -0,0 +1,158 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Substrate. + +// Substrate is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Substrate is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Substrate. If not, see . + +//! Scheduler pallet benchmarking. + +#![cfg(feature = "runtime-benchmarks")] + +use super::*; +use sp_std::{vec, prelude::*}; +use frame_system::RawOrigin; +use frame_support::{ensure, traits::OnInitialize}; +use frame_benchmarking::benchmarks; + +use crate::Module as Scheduler; +use frame_system::Module as System; + +const MAX_SCHEDULED: u32 = 50; + +// Add `n` named items to the schedule +fn fill_schedule (when: T::BlockNumber, n: u32) -> Result<(), &'static str> { + // Essentially a no-op call. + let call = frame_system::Call::set_storage(vec![]); + for i in 0..n { + // Named schedule is strictly heavier than anonymous + Scheduler::::do_schedule_named( + i.encode(), + when, + // Add periodicity + Some((T::BlockNumber::one(), 100)), + // HARD_DEADLINE priority means it gets executed no matter what + 0, + call.clone().into(), + )?; + } + ensure!(Agenda::::get(when).len() == n as usize, "didn't fill schedule"); + Ok(()) +} + +benchmarks! { + _ { } + + schedule { + let s in 0 .. MAX_SCHEDULED; + let when = T::BlockNumber::one(); + let periodic = Some((T::BlockNumber::one(), 100)); + let priority = 0; + // Essentially a no-op call. + let call = Box::new(frame_system::Call::set_storage(vec![]).into()); + + fill_schedule::(when, s)?; + }: _(RawOrigin::Root, when, periodic, priority, call) + verify { + ensure!( + Agenda::::get(when).len() == (s + 1) as usize, + "didn't add to schedule" + ); + } + + cancel { + let s in 1 .. MAX_SCHEDULED; + let when: T::BlockNumber = 2.into(); + + fill_schedule::(when, s)?; + assert_eq!(Agenda::::get(when).len(), s as usize); + }: _(RawOrigin::Root, when, 0) + verify { + ensure!( + Lookup::::get(0.encode()).is_none(), + "didn't remove from lookup" + ); + // Removed schedule is NONE + ensure!( + Agenda::::get(when)[0].is_none(), + "didn't remove from schedule" + ); + } + + schedule_named { + let s in 0 .. MAX_SCHEDULED; + let id = s.encode(); + let when = T::BlockNumber::one(); + let periodic = Some((T::BlockNumber::one(), 100)); + let priority = 0; + // Essentially a no-op call. + let call = Box::new(frame_system::Call::set_storage(vec![]).into()); + + fill_schedule::(when, s)?; + }: _(RawOrigin::Root, id, when, periodic, priority, call) + verify { + ensure!( + Agenda::::get(when).len() == (s + 1) as usize, + "didn't add to schedule" + ); + } + + cancel_named { + let s in 1 .. MAX_SCHEDULED; + let when = T::BlockNumber::one(); + + fill_schedule::(when, s)?; + }: _(RawOrigin::Root, 0.encode()) + verify { + ensure!( + Lookup::::get(0.encode()).is_none(), + "didn't remove from lookup" + ); + // Removed schedule is NONE + ensure!( + Agenda::::get(when)[0].is_none(), + "didn't remove from schedule" + ); + } + + on_initialize { + let s in 0 .. MAX_SCHEDULED; + let when = T::BlockNumber::one(); + fill_schedule::(when, s)?; + }: { Scheduler::::on_initialize(T::BlockNumber::one()); } + verify { + assert_eq!(System::::event_count(), s); + // Next block should have all the schedules again + ensure!( + Agenda::::get(when + T::BlockNumber::one()).len() == s as usize, + "didn't append schedule" + ); + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::tests::{new_test_ext, Test}; + use frame_support::assert_ok; + + #[test] + fn test_benchmarks() { + new_test_ext().execute_with(|| { + assert_ok!(test_benchmark_schedule::()); + assert_ok!(test_benchmark_cancel::()); + assert_ok!(test_benchmark_schedule_named::()); + assert_ok!(test_benchmark_cancel_named::()); + assert_ok!(test_benchmark_on_initialize::()); + }); + } +} diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index 975331059b5..87b5aafdf3e 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -44,15 +44,18 @@ // Ensure we're `no_std` when compiling for Wasm. #![cfg_attr(not(feature = "std"), no_std)] +mod benchmarking; + use sp_std::prelude::*; use codec::{Encode, Decode}; use sp_runtime::{RuntimeDebug, traits::{Zero, One}}; use frame_support::{ - dispatch::{Dispatchable, DispatchResult, Parameter}, decl_module, decl_storage, decl_event, + decl_module, decl_storage, decl_event, decl_error, + dispatch::{Dispatchable, DispatchError, DispatchResult, Parameter}, traits::{Get, schedule}, weights::{GetDispatchInfo, Weight}, }; -use frame_system as system; +use frame_system::{self as system, ensure_root}; /// Our pallet's configuration trait. All our types and constants go in here. If the /// pallet is dependent on specific other pallets, then their configuration traits @@ -67,7 +70,7 @@ pub trait Trait: system::Trait { type Origin: From>; /// The aggregated call type. - type Call: Parameter + Dispatchable::Origin> + GetDispatchInfo; + type Call: Parameter + Dispatchable::Origin> + GetDispatchInfo + From>; /// The maximum weight that may be scheduled per block for any dispatchables of less priority /// than `schedule::HARD_DEADLINE`. @@ -105,16 +108,112 @@ decl_storage! { decl_event!( pub enum Event where ::BlockNumber { - Scheduled(BlockNumber), + Scheduled(BlockNumber, u32), + Canceled(BlockNumber, u32), Dispatched(TaskAddress, Option>, DispatchResult), } ); +decl_error! { + pub enum Error for Module { + /// Failed to schedule a call + FailedToSchedule, + /// Failed to cancel a scheduled call + FailedToCancel, + } +} + decl_module! { // Simple declaration of the `Module` type. Lets the macro know what its working on. pub struct Module for enum Call where origin: ::Origin { fn deposit_event() = default; + /// Anonymously schedule a task. + /// + /// # + /// - S = Number of already scheduled calls + /// - Base Weight: 22.29 + .126 * S µs + /// - DB Weight: + /// - Read: Agenda + /// - Write: Agenda + /// - Will use base weight of 25 which should be good for up to 30 scheduled calls + /// # + #[weight = 25_000_000 + T::DbWeight::get().reads_writes(1, 1)] + fn schedule(origin, + when: T::BlockNumber, + maybe_periodic: Option>, + priority: schedule::Priority, + call: Box<::Call>, + ) { + ensure_root(origin)?; + let _ = Self::do_schedule(when, maybe_periodic, priority, *call); + } + + /// Cancel an anonymously scheduled task. + /// + /// # + /// - S = Number of already scheduled calls + /// - Base Weight: 22.15 + 2.869 * S µs + /// - DB Weight: + /// - Read: Agenda + /// - Write: Agenda, Lookup + /// - Will use base weight of 100 which should be good for up to 30 scheduled calls + /// # + #[weight = 100_000_000 + T::DbWeight::get().reads_writes(1, 2)] + fn cancel(origin, when: T::BlockNumber, index: u32) { + ensure_root(origin)?; + Self::do_cancel((when, index))?; + } + + /// Schedule a named task. + /// + /// # + /// - S = Number of already scheduled calls + /// - Base Weight: 29.6 + .159 * S µs + /// - DB Weight: + /// - Read: Agenda, Lookup + /// - Write: Agenda, Lookup + /// - Will use base weight of 35 which should be good for more than 30 scheduled calls + /// # + #[weight = 35_000_000 + T::DbWeight::get().reads_writes(2, 2)] + fn schedule_named(origin, + id: Vec, + when: T::BlockNumber, + maybe_periodic: Option>, + priority: schedule::Priority, + call: Box<::Call>, + ) { + ensure_root(origin)?; + Self::do_schedule_named(id, when, maybe_periodic, priority, *call)?; + } + + /// Cancel a named scheduled task. + /// + /// # + /// - S = Number of already scheduled calls + /// - Base Weight: 24.91 + 2.907 * S µs + /// - DB Weight: + /// - Read: Agenda, Lookup + /// - Write: Agenda, Lookup + /// - Will use base weight of 100 which should be good for up to 30 scheduled calls + /// # + #[weight = 100_000_000 + T::DbWeight::get().reads_writes(2, 2)] + fn cancel_named(origin, id: Vec) { + ensure_root(origin)?; + Self::do_cancel_named(id)?; + } + + /// Execute the scheduled calls + /// + /// # + /// - S = Number of already scheduled calls + /// - N = Named scheduled calls + /// - P = Periodic Calls + /// - Base Weight: 9.243 + 23.45 * S µs + /// - DB Weight: + /// - Read: Agenda + Lookup * N + Agenda(Future) * P + /// - Write: Agenda + Lookup * N + Agenda(future) * P + /// # fn on_initialize(now: T::BlockNumber) -> Weight { let limit = T::MaximumWeight::get(); let mut queued = Agenda::::take(now).into_iter() @@ -122,14 +221,32 @@ decl_module! { .filter_map(|(index, s)| s.map(|inner| (index as u32, inner))) .collect::>(); queued.sort_by_key(|(_, s)| s.priority); - let mut result = 0; + let base_weight: Weight = T::DbWeight::get().reads_writes(1, 2) // Agenda + Agenda(next) + .saturating_add(10_000_000); // Base Weight + let mut total_weight: Weight = 0; queued.into_iter() .enumerate() - .scan(0, |cumulative_weight, (order, (index, s))| { - *cumulative_weight += s.call.get_dispatch_info().weight; + .scan(base_weight, |cumulative_weight, (order, (index, s))| { + *cumulative_weight = cumulative_weight + .saturating_add(s.call.get_dispatch_info().weight) + .saturating_add(25_000_000); // Base multiplier + + if s.maybe_id.is_some() { + // Remove/Modify Lookup + *cumulative_weight = cumulative_weight.saturating_add(T::DbWeight::get().writes(1)); + } + if s.maybe_periodic.is_some() { + // Read/Write Agenda for future block + *cumulative_weight = cumulative_weight.saturating_add(T::DbWeight::get().reads_writes(1, 1)); + } + Some((order, index, *cumulative_weight, s)) }) .filter_map(|(order, index, cumulative_weight, mut s)| { + // We allow a scheduled call if any is true: + // - It's priority is `HARD_DEADLINE` + // - It does not push the weight past the limit. + // - It is the first item in the schedule if s.priority <= schedule::HARD_DEADLINE || cumulative_weight <= limit || order == 0 { let r = s.call.clone().dispatch(system::RawOrigin::Root.into()); let maybe_id = s.maybe_id.clone(); @@ -140,6 +257,7 @@ decl_module! { s.maybe_periodic = None; } let next = now + period; + // If scheduled is named, place it's information in `Lookup` if let Some(ref id) = s.maybe_id { let next_index = Agenda::::decode_len(now + period).unwrap_or(0); Lookup::::insert(id, (next, next_index as u32)); @@ -155,7 +273,7 @@ decl_module! { maybe_id, r.map(|_| ()).map_err(|e| e.error) )); - result = cumulative_weight; + total_weight = cumulative_weight; None } else { Some(Some(s)) @@ -166,20 +284,18 @@ decl_module! { Agenda::::append(next, unused); }); - result + total_weight } } } -impl schedule::Anon::Call> for Module { - type Address = TaskAddress; - - fn schedule( +impl Module { + fn do_schedule( when: T::BlockNumber, maybe_periodic: Option>, priority: schedule::Priority, call: ::Call - ) -> Self::Address { + ) -> TaskAddress { // sanitize maybe_periodic let maybe_periodic = maybe_periodic .filter(|p| p.1 > 1 && !p.0.is_zero()) @@ -187,35 +303,33 @@ impl schedule::Anon::Call> for Module .map(|(p, c)| (p, c - 1)); let s = Some(Scheduled { maybe_id: None, priority, call, maybe_periodic }); Agenda::::append(when, s); - (when, Agenda::::decode_len(when).unwrap_or(1) as u32 - 1) + let index = Agenda::::decode_len(when).unwrap_or(1) as u32 - 1; + Self::deposit_event(RawEvent::Scheduled(when, index)); + (when, index) } - fn cancel((when, index): Self::Address) -> Result<(), ()> { + fn do_cancel((when, index): TaskAddress) -> Result<(), DispatchError> { if let Some(s) = Agenda::::mutate(when, |agenda| agenda.get_mut(index as usize).and_then(Option::take)) { if let Some(id) = s.maybe_id { - Lookup::::remove(id) + Lookup::::remove(id); } + Self::deposit_event(RawEvent::Canceled(when, index)); Ok(()) } else { - Err(()) + Err(Error::::FailedToCancel)? } } -} -impl schedule::Named::Call> for Module { - type Address = TaskAddress; - - fn schedule_named( - id: impl Encode, + fn do_schedule_named( + id: Vec, when: T::BlockNumber, maybe_periodic: Option>, priority: schedule::Priority, call: ::Call, - ) -> Result { - // determine id and ensure it is unique - let id = id.encode(); + ) -> Result, DispatchError> { + // ensure id it is unique if Lookup::::contains_key(&id) { - return Err(()) + return Err(Error::::FailedToSchedule)? } // sanitize maybe_periodic @@ -229,28 +343,65 @@ impl schedule::Named::Call> for Module let index = Agenda::::decode_len(when).unwrap_or(1) as u32 - 1; let address = (when, index); Lookup::::insert(&id, &address); + Self::deposit_event(RawEvent::Scheduled(when, index)); Ok(address) } - fn cancel_named(id: impl Encode) -> Result<(), ()> { - if let Some((when, index)) = id.using_encoded(|d| Lookup::::take(d)) { + fn do_cancel_named(id: Vec) -> Result<(), DispatchError> { + if let Some((when, index)) = Lookup::::take(id) { let i = index as usize; Agenda::::mutate(when, |agenda| if let Some(s) = agenda.get_mut(i) { *s = None }); + Self::deposit_event(RawEvent::Canceled(when, index)); Ok(()) } else { - Err(()) + Err(Error::::FailedToCancel)? } } } +impl schedule::Anon::Call> for Module { + type Address = TaskAddress; + + fn schedule( + when: T::BlockNumber, + maybe_periodic: Option>, + priority: schedule::Priority, + call: ::Call + ) -> Self::Address { + Self::do_schedule(when, maybe_periodic, priority, call) + } + + fn cancel((when, index): Self::Address) -> Result<(), ()> { + Self::do_cancel((when, index)).map_err(|_| ()) + } +} + +impl schedule::Named::Call> for Module { + type Address = TaskAddress; + + fn schedule_named( + id: Vec, + when: T::BlockNumber, + maybe_periodic: Option>, + priority: schedule::Priority, + call: ::Call, + ) -> Result { + Self::do_schedule_named(id, when, maybe_periodic, priority, call).map_err(|_| ()) + } + + fn cancel_named(id: Vec) -> Result<(), ()> { + Self::do_cancel_named(id).map_err(|_| ()) + } +} + #[cfg(test)] mod tests { use super::*; use frame_support::{ impl_outer_event, impl_outer_origin, impl_outer_dispatch, parameter_types, assert_ok, - traits::{OnInitialize, OnFinalize, schedule::{Anon, Named}}, - weights::{DispatchClass, FunctionOf, Pays} + traits::{OnInitialize, OnFinalize}, + weights::{DispatchClass, FunctionOf, Pays, constants::RocksDbWeight}, }; use sp_core::H256; // The testing primitives are very useful for avoiding having to work with signatures @@ -331,7 +482,7 @@ mod tests { pub struct Test; parameter_types! { pub const BlockHashCount: u64 = 250; - pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockWeight: Weight = 2_000_000_000_000; pub const MaximumBlockLength: u32 = 2 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::one(); } @@ -348,7 +499,7 @@ mod tests { type Event = (); type BlockHashCount = BlockHashCount; type MaximumBlockWeight = MaximumBlockWeight; - type DbWeight = (); + type DbWeight = RocksDbWeight; type BlockExecutionWeight = (); type ExtrinsicBaseWeight = (); type MaximumBlockLength = MaximumBlockLength; @@ -362,14 +513,11 @@ mod tests { impl logger::Trait for Test { type Event = (); } - parameter_types! { - pub const MaximumWeight: Weight = 10_000; - } impl Trait for Test { type Event = (); type Origin = Origin; type Call = Call; - type MaximumWeight = MaximumWeight; + type MaximumWeight = MaximumBlockWeight; } type System = system::Module; type Logger = logger::Module; @@ -377,7 +525,7 @@ mod tests { // This function basically just builds a genesis storage key/value store according to // our desired mockup. - fn new_test_ext() -> sp_io::TestExternalities { + pub fn new_test_ext() -> sp_io::TestExternalities { let t = system::GenesisConfig::default().build_storage::().unwrap(); t.into() } @@ -393,7 +541,7 @@ mod tests { #[test] fn basic_scheduling_works() { new_test_ext().execute_with(|| { - Scheduler::schedule(4, None, 127, Call::Logger(logger::Call::log(42, 1000))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(42, 1000))); run_to_block(3); assert!(logger::log().is_empty()); run_to_block(4); @@ -407,7 +555,7 @@ mod tests { fn periodic_scheduling_works() { new_test_ext().execute_with(|| { // at #4, every 3 blocks, 3 times. - Scheduler::schedule(4, Some((3, 3)), 127, Call::Logger(logger::Call::log(42, 1000))); + Scheduler::do_schedule(4, Some((3, 3)), 127, Call::Logger(logger::Call::log(42, 1000))); run_to_block(3); assert!(logger::log().is_empty()); run_to_block(4); @@ -429,12 +577,12 @@ mod tests { fn cancel_named_scheduling_works_with_normal_cancel() { new_test_ext().execute_with(|| { // at #4. - Scheduler::schedule_named(1u32, 4, None, 127, Call::Logger(logger::Call::log(69, 1000))).unwrap(); - let i = Scheduler::schedule(4, None, 127, Call::Logger(logger::Call::log(42, 1000))); + Scheduler::do_schedule_named(1u32.encode(), 4, None, 127, Call::Logger(logger::Call::log(69, 1000))).unwrap(); + let i = Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(42, 1000))); run_to_block(3); assert!(logger::log().is_empty()); - assert_ok!(Scheduler::cancel_named(1u32)); - assert_ok!(Scheduler::cancel(i)); + assert_ok!(Scheduler::do_cancel_named(1u32.encode())); + assert_ok!(Scheduler::do_cancel(i)); run_to_block(100); assert!(logger::log().is_empty()); }); @@ -444,17 +592,17 @@ mod tests { fn cancel_named_periodic_scheduling_works() { new_test_ext().execute_with(|| { // at #4, every 3 blocks, 3 times. - Scheduler::schedule_named(1u32, 4, Some((3, 3)), 127, Call::Logger(logger::Call::log(42, 1000))).unwrap(); + Scheduler::do_schedule_named(1u32.encode(), 4, Some((3, 3)), 127, Call::Logger(logger::Call::log(42, 1000))).unwrap(); // same id results in error. - assert!(Scheduler::schedule_named(1u32, 4, None, 127, Call::Logger(logger::Call::log(69, 1000))).is_err()); + assert!(Scheduler::do_schedule_named(1u32.encode(), 4, None, 127, Call::Logger(logger::Call::log(69, 1000))).is_err()); // different id is ok. - Scheduler::schedule_named(2u32, 8, None, 127, Call::Logger(logger::Call::log(69, 1000))).unwrap(); + Scheduler::do_schedule_named(2u32.encode(), 8, None, 127, Call::Logger(logger::Call::log(69, 1000))).unwrap(); run_to_block(3); assert!(logger::log().is_empty()); run_to_block(4); assert_eq!(logger::log(), vec![42u32]); run_to_block(6); - assert_ok!(Scheduler::cancel_named(1u32)); + assert_ok!(Scheduler::do_cancel_named(1u32.encode())); run_to_block(100); assert_eq!(logger::log(), vec![42u32, 69u32]); }); @@ -463,8 +611,9 @@ mod tests { #[test] fn scheduler_respects_weight_limits() { new_test_ext().execute_with(|| { - Scheduler::schedule(4, None, 127, Call::Logger(logger::Call::log(42, 6000))); - Scheduler::schedule(4, None, 127, Call::Logger(logger::Call::log(69, 6000))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + // 69 and 42 do not fit together run_to_block(4); assert_eq!(logger::log(), vec![42u32]); run_to_block(5); @@ -475,8 +624,9 @@ mod tests { #[test] fn scheduler_respects_hard_deadlines_more() { new_test_ext().execute_with(|| { - Scheduler::schedule(4, None, 0, Call::Logger(logger::Call::log(42, 6000))); - Scheduler::schedule(4, None, 0, Call::Logger(logger::Call::log(69, 6000))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + // With base weights, 69 and 42 should not fit together, but do because of hard deadlines run_to_block(4); assert_eq!(logger::log(), vec![42u32, 69u32]); }); @@ -485,8 +635,8 @@ mod tests { #[test] fn scheduler_respects_priority_ordering() { new_test_ext().execute_with(|| { - Scheduler::schedule(4, None, 1, Call::Logger(logger::Call::log(42, 6000))); - Scheduler::schedule(4, None, 0, Call::Logger(logger::Call::log(69, 6000))); + Scheduler::do_schedule(4, None, 1, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); run_to_block(4); assert_eq!(logger::log(), vec![69u32, 42u32]); }); @@ -495,31 +645,76 @@ mod tests { #[test] fn scheduler_respects_priority_ordering_with_soft_deadlines() { new_test_ext().execute_with(|| { - Scheduler::schedule(4, None, 255, Call::Logger(logger::Call::log(42, 5000))); - Scheduler::schedule(4, None, 127, Call::Logger(logger::Call::log(69, 5000))); - Scheduler::schedule(4, None, 126, Call::Logger(logger::Call::log(2600, 6000))); + Scheduler::do_schedule(4, None, 255, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 3))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 126, Call::Logger(logger::Call::log(2600, MaximumBlockWeight::get() / 2))); + + // 2600 does not fit with 69 or 42, but has higher priority, so will go through run_to_block(4); assert_eq!(logger::log(), vec![2600u32]); + // 69 and 42 fit together run_to_block(5); assert_eq!(logger::log(), vec![2600u32, 69u32, 42u32]); }); } #[test] - fn initialize_weight_is_correct() { + fn on_initialize_weight_is_correct() { + new_test_ext().execute_with(|| { + let base_weight: Weight = ::DbWeight::get().reads_writes(1, 2) + 10_000_000; + let base_multiplier = 25_000_000; + let named_multiplier = ::DbWeight::get().writes(1); + let periodic_multiplier = ::DbWeight::get().reads_writes(1, 1); + + // Named + assert_ok!(Scheduler::do_schedule_named(1u32.encode(), 1, None, 255, Call::Logger(logger::Call::log(3, MaximumBlockWeight::get() / 3)))); + // Anon Periodic + Scheduler::do_schedule(1, Some((1000, 3)), 128, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 3))); + // Anon + Scheduler::do_schedule(1, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + // Named Periodic + assert_ok!(Scheduler::do_schedule_named(2u32.encode(), 1, Some((1000, 3)), 126, Call::Logger(logger::Call::log(2600, MaximumBlockWeight::get() / 2)))); + + // Will include the named periodic only + let actual_weight = Scheduler::on_initialize(1); + let call_weight = MaximumBlockWeight::get() / 2; + assert_eq!(actual_weight, call_weight + base_weight + base_multiplier + named_multiplier + periodic_multiplier); + assert_eq!(logger::log(), vec![2600u32]); + + // Will include anon and anon periodic + let actual_weight = Scheduler::on_initialize(2); + let call_weight = MaximumBlockWeight::get() / 2 + MaximumBlockWeight::get() / 3; + assert_eq!(actual_weight, call_weight + base_weight + base_multiplier * 2 + periodic_multiplier); + assert_eq!(logger::log(), vec![2600u32, 69u32, 42u32]); + + // Will include named only + let actual_weight = Scheduler::on_initialize(3); + let call_weight = MaximumBlockWeight::get() / 3; + assert_eq!(actual_weight, call_weight + base_weight + base_multiplier + named_multiplier); + assert_eq!(logger::log(), vec![2600u32, 69u32, 42u32, 3u32]); + + // Will contain none + let actual_weight = Scheduler::on_initialize(4); + assert_eq!(actual_weight, 0); + }); + } + + #[test] + fn root_calls_works() { new_test_ext().execute_with(|| { - Scheduler::schedule(1, None, 255, Call::Logger(logger::Call::log(3, 1000))); - Scheduler::schedule(1, None, 128, Call::Logger(logger::Call::log(42, 5000))); - Scheduler::schedule(1, None, 127, Call::Logger(logger::Call::log(69, 5000))); - Scheduler::schedule(1, None, 126, Call::Logger(logger::Call::log(2600, 6000))); - let weight = Scheduler::on_initialize(1); - assert_eq!(weight, 6000); - let weight = Scheduler::on_initialize(2); - assert_eq!(weight, 10000); - let weight = Scheduler::on_initialize(3); - assert_eq!(weight, 1000); - let weight = Scheduler::on_initialize(4); - assert_eq!(weight, 0); + let call = Box::new(Call::Logger(logger::Call::log(69, 1000))); + let call2 = Box::new(Call::Logger(logger::Call::log(42, 1000))); + assert_ok!(Scheduler::schedule_named(Origin::ROOT, 1u32.encode(), 4, None, 127, call)); + assert_ok!(Scheduler::schedule(Origin::ROOT, 4, None, 127, call2)); + run_to_block(3); + // Scheduled calls are in the agenda. + assert_eq!(Agenda::::get(4).len(), 2); + assert!(logger::log().is_empty()); + assert_ok!(Scheduler::cancel_named(Origin::ROOT, 1u32.encode())); + assert_ok!(Scheduler::cancel(Origin::ROOT, 4, 1)); + // Scheduled calls are made NONE, so should not effect state + run_to_block(100); + assert!(logger::log().is_empty()); }); } } diff --git a/frame/support/src/traits.rs b/frame/support/src/traits.rs index eaf94f44f86..0230937fc49 100644 --- a/frame/support/src/traits.rs +++ b/frame/support/src/traits.rs @@ -1241,7 +1241,7 @@ pub mod schedule { /// /// - `id`: The identity of the task. This must be unique and will return an error if not. fn schedule_named( - id: impl Encode, + id: Vec, when: BlockNumber, maybe_periodic: Option>, priority: Priority, @@ -1255,7 +1255,7 @@ pub mod schedule { /// /// NOTE: This guaranteed to work only *before* the point that it is due to be executed. /// If it ends up being delayed beyond the point of execution, then it cannot be cancelled. - fn cancel_named(id: impl Encode) -> Result<(), ()>; + fn cancel_named(id: Vec) -> Result<(), ()>; } } -- GitLab From 12184df506fe10cd9396639c679c4e2c9d3929c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 7 May 2020 11:47:38 +0200 Subject: [PATCH 156/167] Revert "Update wasmtime (#5822)" (#5935) This reverts commit c4285c95ff862a6233abea2902d69aed84b818df. We found some bugs that we first need to fix. --- Cargo.lock | 142 ++++++++--------- client/executor/src/integration_tests/mod.rs | 10 +- client/executor/wasmtime/Cargo.toml | 10 +- client/executor/wasmtime/src/host.rs | 2 +- client/executor/wasmtime/src/imports.rs | 145 +++++++++--------- .../executor/wasmtime/src/instance_wrapper.rs | 48 ++---- .../src/instance_wrapper/globals_snapshot.rs | 7 +- client/executor/wasmtime/src/runtime.rs | 2 +- 8 files changed, 168 insertions(+), 198 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3d5d7ef092d..4b7e16eedf4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -300,12 +300,6 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" -[[package]] -name = "base64" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" - [[package]] name = "bincode" version = "1.2.1" @@ -727,18 +721,18 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4425bb6c3f3d2f581c650f1a1fdd3196a975490149cf59bea9d34c3bea79eda" +checksum = "45a9c21f8042b9857bda93f6c1910b9f9f24100187a3d3d52f214a34e3dc5818" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d166b289fd30062ee6de86284750fc3fe5d037c6b864b3326ce153239b0626e1" +checksum = "7853f77a6e4a33c67a69c40f5e1bb982bd2dc5c4a22e17e67b65bbccf9b33b2e" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -747,7 +741,6 @@ dependencies = [ "cranelift-entity", "gimli", "log", - "regalloc", "serde", "smallvec 1.3.0", "target-lexicon", @@ -756,9 +749,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c9fb2306a36d41c5facd4bf3400bc6c157185c43a96eaaa503471c34c5144b" +checksum = "084cd6d5fb0d1da28acd72c199471bfb09acc703ec8f3bf07b1699584272a3b9" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -766,24 +759,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44e0cfe9b1f97d9f836bca551618106c7d53b93b579029ecd38e73daa7eb689e" +checksum = "701b599783305a58c25027a4d73f2d6b599b2d8ef3f26677275f480b4d51e05d" [[package]] name = "cranelift-entity" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926a73c432e5ba9c891171ff50b75e7d992cd76cd271f0a0a0ba199138077472" +checksum = "b88e792b28e1ebbc0187b72ba5ba880dad083abe9231a99d19604d10c9e73f38" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e45f82e3446dd1ebb8c2c2f6a6b0e6cd6cd52965c7e5f7b1b35e9a9ace31ccde" +checksum = "518344698fa6c976d853319218415fdfb4f1bc6b42d0b2e2df652e55dff1f778" dependencies = [ "cranelift-codegen", "log", @@ -793,9 +786,9 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488b5d481bb0996a143e55a9d1739ef425efa20d4a5e5e98c859a8573c9ead9a" +checksum = "32daf082da21c0c05d93394ff4842c2ab7c4991b1f3186a1d952f8ac660edd0b" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -804,9 +797,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.63.0" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00aa8dde71fd9fdb1958e7b0ef8f524c1560e2c6165e4ea54bc302b40551c161" +checksum = "e2aa816f554a3ef739a5d17ca3081a1f8983f04c944ea8ff60fb8d9dd8cd2d7b" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1284,10 +1277,11 @@ dependencies = [ [[package]] name = "faerie" -version = "0.15.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfef65b0e94693295c5d2fe2506f0ee6f43465342d4b5331659936aee8b16084" +checksum = "74b9ed6159e4a6212c61d9c6a86bee01876b192a64accecf58d5b5ae3b667b52" dependencies = [ + "anyhow", "goblin", "indexmap", "log", @@ -2730,7 +2724,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f7f3f79f060864db0317cc47641b7d35276dee52a0ffa91553fbd0c153863a3" dependencies = [ - "base64 0.11.0", + "base64", "byteorder 1.3.4", "bytes 0.5.4", "fnv", @@ -3871,13 +3865,16 @@ dependencies = [ [[package]] name = "object" -version = "0.18.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5666bbb90bc4d1e5bdcb26c0afda1822d25928341e9384ab187a9b37ab69e36" +checksum = "ea44a4fd660ab0f38434934ca0212e90fbeaaee54126ef20a3451c30c95bafae" dependencies = [ "flate2", + "goblin", + "parity-wasm 0.41.0", + "scroll", "target-lexicon", - "wasmparser", + "uuid", ] [[package]] @@ -5612,17 +5609,6 @@ dependencies = [ "syn 1.0.17", ] -[[package]] -name = "regalloc" -version = "0.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" -dependencies = [ - "log", - "rustc-hash", - "smallvec 1.3.0", -] - [[package]] name = "regex" version = "1.3.6" @@ -5727,7 +5713,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" dependencies = [ - "base64 0.11.0", + "base64", "blake2b_simd", "constant_time_eq", "crossbeam-utils", @@ -5766,7 +5752,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64 0.11.0", + "base64", "log", "ring", "sct", @@ -7215,7 +7201,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b" dependencies = [ - "base64 0.11.0", + "base64", "bytes 0.5.4", "flate2", "futures 0.3.4", @@ -8278,9 +8264,9 @@ version = "1.0.5" [[package]] name = "substrate-wasmtime" -version = "0.16.0-threadsafe.1" +version = "0.13.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b8f9558e3fe7018b9aeac2aba318664dd7b15e307de11b09f58240695688a96" +checksum = "9e512629525ecfe43bffe1f3d9e6bb0f08bf01155288ef27fcaae4ea086e4a9d" dependencies = [ "anyhow", "backtrace", @@ -8290,20 +8276,20 @@ dependencies = [ "region", "rustc-demangle", "substrate-wasmtime-jit", - "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", "wasmparser", "wasmtime-environ", + "wasmtime-profiling", "wat", "winapi 0.3.8", ] [[package]] name = "substrate-wasmtime-jit" -version = "0.16.0-threadsafe.1" +version = "0.13.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b681b90a8d48b9535e4287c02e5aef6c72228ff45cbb60b4d195a762cc0770" +checksum = "a20de5564886d2bcffdd351c9cd114ceb50758aa58eac3cedb14faabf7f93b91" dependencies = [ "anyhow", "cfg-if", @@ -8312,44 +8298,23 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli", - "log", "more-asserts", "region", - "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", "thiserror", "wasmparser", "wasmtime-debug", "wasmtime-environ", + "wasmtime-profiling", "winapi 0.3.8", ] -[[package]] -name = "substrate-wasmtime-profiling" -version = "0.16.0-threadsafe.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cb99b24e771de6c20b380fdf2d26ffc2c20701892c540830beb83af98bb3b7" -dependencies = [ - "anyhow", - "cfg-if", - "gimli", - "lazy_static", - "libc", - "object", - "scroll", - "serde", - "substrate-wasmtime-runtime", - "target-lexicon", - "wasmtime-environ", -] - [[package]] name = "substrate-wasmtime-runtime" -version = "0.16.0-threadsafe.1" +version = "0.13.0-threadsafe.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaccd27cc466bd2904aa14f984f642083037bf5b47e251ccaf1009aed0a2a185" +checksum = "6d08846f04293a7fc27eeb30f06262ca2e1b4ee20f5192cec1f3ce201e08ceb8" dependencies = [ "backtrace", "cc", @@ -8362,6 +8327,7 @@ dependencies = [ "region", "thiserror", "wasmtime-environ", + "wasmtime-profiling", "winapi 0.3.8", ] @@ -9119,6 +9085,12 @@ dependencies = [ "percent-encoding 2.1.0", ] +[[package]] +name = "uuid" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" + [[package]] name = "vcpkg" version = "0.2.8" @@ -9364,9 +9336,9 @@ checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" [[package]] name = "wasmtime-debug" -version = "0.16.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39ba645aee700b29ff0093028b4123556dd142a74973f04ed6225eedb40e77d" +checksum = "9d3d007436043bf55ec252d2f4dc1d35834157b5e2f148da839ca502e611cfe1" dependencies = [ "anyhow", "faerie", @@ -9380,12 +9352,12 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.16.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed54fd9d64dfeeee7c285fd126174a6b5e6d4efc7e5a1566fdb635e60ff6a74e" +checksum = "80f3dea0e60c076dd0da27fa10c821323903c9554c617ed32eaab8e7a7e36c89" dependencies = [ "anyhow", - "base64 0.12.0", + "base64", "bincode", "cranelift-codegen", "cranelift-entity", @@ -9407,6 +9379,22 @@ dependencies = [ "zstd", ] +[[package]] +name = "wasmtime-profiling" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "984d29c8add3381e60d649f4e3e2a501da900fc2d2586e139502eec32fe0ebc8" +dependencies = [ + "gimli", + "goblin", + "lazy_static", + "libc", + "object", + "scroll", + "serde", + "target-lexicon", +] + [[package]] name = "wast" version = "13.0.0" diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 932e2e3a1e9..2e62e060157 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -92,8 +92,9 @@ fn call_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert!( - format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:missing_external") + WasmExecutionMethod::Compiled => assert_eq!( + &format!("{:?}", e), + "\"Wasm execution trapped: call to a missing function env:missing_external\"" ), } } @@ -120,8 +121,9 @@ fn call_yet_another_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `yet_another_missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert!( - format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:yet_another_missing_external") + WasmExecutionMethod::Compiled => assert_eq!( + &format!("{:?}", e), + "\"Wasm execution trapped: call to a missing function env:yet_another_missing_external\"" ), } } diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 3644c57e47b..5b1c3841410 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,11 +21,11 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.1" } -wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.1" } -wasmtime-environ = "0.16" -cranelift-wasm = "0.63" -cranelift-codegen = "0.63" +wasmtime = { package = "substrate-wasmtime", version = "0.13.0-threadsafe.1" } +wasmtime_runtime = { package = "substrate-wasmtime-runtime", version = "0.13.0-threadsafe.1" } +wasmtime-environ = "0.12.0" +cranelift-wasm = "0.59.0" +cranelift-codegen = "0.59.0" [dev-dependencies] assert_matches = "1.3.0" diff --git a/client/executor/wasmtime/src/host.rs b/client/executor/wasmtime/src/host.rs index 8c481e95c43..29187ac6633 100644 --- a/client/executor/wasmtime/src/host.rs +++ b/client/executor/wasmtime/src/host.rs @@ -117,7 +117,7 @@ impl<'a> SandboxCapabilities for HostContext<'a> { return Err("Supervisor function returned unexpected result!".into()); } } - Err(err) => Err(err.to_string().into()), + Err(err) => Err(err.message().to_string().into()), } } } diff --git a/client/executor/wasmtime/src/imports.rs b/client/executor/wasmtime/src/imports.rs index 2d9794b7eda..48299ffd62d 100644 --- a/client/executor/wasmtime/src/imports.rs +++ b/client/executor/wasmtime/src/imports.rs @@ -18,8 +18,9 @@ use crate::state_holder; use sc_executor_common::error::WasmError; use sp_wasm_interface::{Function, Value, ValueType}; use std::any::Any; +use std::rc::Rc; use wasmtime::{ - Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, + Callable, Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, Trap, Val, }; @@ -52,11 +53,11 @@ pub fn resolve_imports( let resolved = match import_ty.name() { "memory" => { memory_import_index = Some(externs.len()); - resolve_memory_import(module, &import_ty, heap_pages)? + resolve_memory_import(module, import_ty, heap_pages)? } _ => resolve_func_import( module, - &import_ty, + import_ty, host_functions, allow_missing_func_imports, )?, @@ -130,7 +131,7 @@ fn resolve_func_import( { Some(host_func) => host_func, None if allow_missing_func_imports => { - return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, &func_ty)); + return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, func_ty)); } None => { return Err(WasmError::Other(format!( @@ -162,58 +163,6 @@ struct HostFuncHandler { host_func: &'static dyn Function, } -fn call_static( - static_func: &'static dyn Function, - wasmtime_params: &[Val], - wasmtime_results: &mut [Val], -) -> Result<(), wasmtime::Trap> { - let unwind_result = state_holder::with_context(|host_ctx| { - let mut host_ctx = host_ctx.expect( - "host functions can be called only from wasm instance; - wasm instance is always called initializing context; - therefore host_ctx cannot be None; - qed - ", - ); - // `into_value` panics if it encounters a value that doesn't fit into the values - // available in substrate. - // - // This, however, cannot happen since the signature of this function is created from - // a `dyn Function` signature of which cannot have a non substrate value by definition. - let mut params = wasmtime_params.iter().cloned().map(into_value); - - std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { - static_func.execute(&mut host_ctx, &mut params) - })) - }); - - let execution_result = match unwind_result { - Ok(execution_result) => execution_result, - Err(err) => return Err(Trap::new(stringify_panic_payload(err))), - }; - - match execution_result { - Ok(Some(ret_val)) => { - debug_assert!( - wasmtime_results.len() == 1, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - wasmtime_results[0] = into_wasmtime_val(ret_val); - Ok(()) - } - Ok(None) => { - debug_assert!( - wasmtime_results.len() == 0, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - Ok(()) - } - Err(msg) => Err(Trap::new(msg)), - } -} - impl HostFuncHandler { fn new(host_func: &'static dyn Function) -> Self { Self { @@ -222,17 +171,66 @@ impl HostFuncHandler { } fn into_extern(self, module: &Module) -> Extern { - let host_func = self.host_func; let func_ty = wasmtime_func_sig(self.host_func); - let func = Func::new(module.store(), func_ty, - move |_, params, result| { - call_static(host_func, params, result) - } - ); + let func = Func::new(module.store(), func_ty, Rc::new(self)); Extern::Func(func) } } +impl Callable for HostFuncHandler { + fn call( + &self, + wasmtime_params: &[Val], + wasmtime_results: &mut [Val], + ) -> Result<(), wasmtime::Trap> { + let unwind_result = state_holder::with_context(|host_ctx| { + let mut host_ctx = host_ctx.expect( + "host functions can be called only from wasm instance; + wasm instance is always called initializing context; + therefore host_ctx cannot be None; + qed + ", + ); + // `into_value` panics if it encounters a value that doesn't fit into the values + // available in substrate. + // + // This, however, cannot happen since the signature of this function is created from + // a `dyn Function` signature of which cannot have a non substrate value by definition. + let mut params = wasmtime_params.iter().cloned().map(into_value); + + std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + self.host_func.execute(&mut host_ctx, &mut params) + })) + }); + + let execution_result = match unwind_result { + Ok(execution_result) => execution_result, + Err(err) => return Err(Trap::new(stringify_panic_payload(err))), + }; + + match execution_result { + Ok(Some(ret_val)) => { + debug_assert!( + wasmtime_results.len() == 1, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + wasmtime_results[0] = into_wasmtime_val(ret_val); + Ok(()) + } + Ok(None) => { + debug_assert!( + wasmtime_results.len() == 0, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + Ok(()) + } + Err(msg) => Err(Trap::new(msg)), + } + } +} + /// A `Callable` handler for missing functions. struct MissingHostFuncHandler { module: String, @@ -247,18 +245,25 @@ impl MissingHostFuncHandler { } } - fn into_extern(self, wasmtime_module: &Module, func_ty: &FuncType) -> Extern { - let Self { module, name } = self; - let func = Func::new(wasmtime_module.store(), func_ty.clone(), - move |_, _, _| Err(Trap::new(format!( - "call to a missing function {}:{}", - module, name - ))) - ); + fn into_extern(self, module: &Module, func_ty: &FuncType) -> Extern { + let func = Func::new(module.store(), func_ty.clone(), Rc::new(self)); Extern::Func(func) } } +impl Callable for MissingHostFuncHandler { + fn call( + &self, + _wasmtime_params: &[Val], + _wasmtime_results: &mut [Val], + ) -> Result<(), wasmtime::Trap> { + Err(Trap::new(format!( + "call to a missing function {}:{}", + self.module, self.name + ))) + } +} + fn wasmtime_func_sig(func: &dyn Function) -> wasmtime::FuncType { let params = func .signature() diff --git a/client/executor/wasmtime/src/instance_wrapper.rs b/client/executor/wasmtime/src/instance_wrapper.rs index bf01896809e..469668802f1 100644 --- a/client/executor/wasmtime/src/instance_wrapper.rs +++ b/client/executor/wasmtime/src/instance_wrapper.rs @@ -26,7 +26,7 @@ use sc_executor_common::{ util::{WasmModuleInfo, DataSegmentsSnapshot}, }; use sp_wasm_interface::{Pointer, WordSize, Value}; -use wasmtime::{Store, Instance, Module, Memory, Table, Val, Func, Extern, Global}; +use wasmtime::{Store, Instance, Module, Memory, Table, Val}; mod globals_snapshot; @@ -88,35 +88,6 @@ pub struct InstanceWrapper { _not_send_nor_sync: marker::PhantomData<*const ()>, } -fn extern_memory(extern_: &Extern) -> Option<&Memory> { - match extern_ { - Extern::Memory(mem) => Some(mem), - _ => None, - } -} - - -fn extern_global(extern_: &Extern) -> Option<&Global> { - match extern_ { - Extern::Global(glob) => Some(glob), - _ => None, - } -} - -fn extern_table(extern_: &Extern) -> Option<&Table> { - match extern_ { - Extern::Table(table) => Some(table), - _ => None, - } -} - -fn extern_func(extern_: &Extern) -> Option<&Func> { - match extern_ { - Extern::Func(func) => Some(func), - _ => None, - } -} - impl InstanceWrapper { /// Create a new instance wrapper from the given wasm module. pub fn new(module_wrapper: &ModuleWrapper, imports: &Imports, heap_pages: u32) -> Result { @@ -125,7 +96,8 @@ impl InstanceWrapper { let memory = match imports.memory_import_index { Some(memory_idx) => { - extern_memory(&imports.externs[memory_idx]) + imports.externs[memory_idx] + .memory() .expect("only memory can be at the `memory_idx`; qed") .clone() } @@ -158,7 +130,8 @@ impl InstanceWrapper { .instance .get_export(name) .ok_or_else(|| Error::from(format!("Exported method {} is not found", name)))?; - let entrypoint = extern_func(&export) + let entrypoint = export + .func() .ok_or_else(|| Error::from(format!("Export {} is not a function", name)))?; match (entrypoint.ty().params(), entrypoint.ty().results()) { (&[wasmtime::ValType::I32, wasmtime::ValType::I32], &[wasmtime::ValType::I64]) => {} @@ -191,7 +164,8 @@ impl InstanceWrapper { .get_export("__heap_base") .ok_or_else(|| Error::from("__heap_base is not found"))?; - let heap_base_global = extern_global(&heap_base_export) + let heap_base_global = heap_base_export + .global() .ok_or_else(|| Error::from("__heap_base is not a global"))?; let heap_base = heap_base_global @@ -209,7 +183,7 @@ impl InstanceWrapper { None => return Ok(None), }; - let global = extern_global(&global).ok_or_else(|| format!("`{}` is not a global", name))?; + let global = global.global().ok_or_else(|| format!("`{}` is not a global", name))?; match global.get() { Val::I32(val) => Ok(Some(Value::I32(val))), @@ -227,7 +201,8 @@ fn get_linear_memory(instance: &Instance) -> Result { .get_export("memory") .ok_or_else(|| Error::from("memory is not exported under `memory` name"))?; - let memory = extern_memory(&memory_export) + let memory = memory_export + .memory() .ok_or_else(|| Error::from("the `memory` export should have memory type"))? .clone(); @@ -238,8 +213,7 @@ fn get_linear_memory(instance: &Instance) -> Result { fn get_table(instance: &Instance) -> Option
{ instance .get_export("__indirect_function_table") - .as_ref() - .and_then(extern_table) + .and_then(|export| export.table()) .cloned() } diff --git a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs index 8707390b9fe..a6ab3fed604 100644 --- a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs +++ b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs @@ -21,7 +21,6 @@ use sc_executor_common::{ use sp_wasm_interface::Value; use cranelift_codegen::ir; use cranelift_wasm::GlobalIndex; -use wasmtime_runtime::{ExportGlobal, Export}; /// A snapshot of a global variables values. This snapshot can be used later for restoring the /// values to the preserved state. @@ -44,9 +43,11 @@ impl GlobalsSnapshot { for global_idx in instance_wrapper.imported_globals_count..instance_wrapper.globals_count { let (def, global) = match handle.lookup_by_declaration( - &wasmtime_environ::EntityIndex::Global(GlobalIndex::from_u32(global_idx)), + &wasmtime_environ::Export::Global(GlobalIndex::from_u32(global_idx)), ) { - Export::Global(ExportGlobal { definition, global, .. }) => (definition, global), + wasmtime_runtime::Export::Global { + definition, global, .. + } => (definition, global), _ => unreachable!("only globals can be returned for a global request"), }; diff --git a/client/executor/wasmtime/src/runtime.rs b/client/executor/wasmtime/src/runtime.rs index a2ad3bada4b..0289188ba11 100644 --- a/client/executor/wasmtime/src/runtime.rs +++ b/client/executor/wasmtime/src/runtime.rs @@ -158,7 +158,7 @@ fn perform_call( Err(trap) => { return Err(Error::from(format!( "Wasm execution trapped: {}", - trap + trap.message() ))); } } -- GitLab From 57755970f357e18af744fa4cce9f04953c1eaa83 Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Thu, 7 May 2020 12:49:30 +0200 Subject: [PATCH 157/167] Use header cache for blockhain cache (#5929) --- client/db/src/cache/mod.rs | 23 ++++++++++++++------ client/db/src/changes_tries_storage.rs | 4 +++- client/db/src/lib.rs | 9 ++++---- client/db/src/light.rs | 10 +++++---- primitives/blockchain/src/header_metadata.rs | 11 ++++------ 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/client/db/src/cache/mod.rs b/client/db/src/cache/mod.rs index 8d3e1f358b3..f2d357ca9ec 100644 --- a/client/db/src/cache/mod.rs +++ b/client/db/src/cache/mod.rs @@ -20,7 +20,7 @@ use std::{sync::Arc, collections::{HashMap, hash_map::Entry}}; use parking_lot::RwLock; use sc_client_api::blockchain::{well_known_cache_keys::{self, Id as CacheKeyId}, Cache as BlockchainCache}; -use sp_blockchain::Result as ClientResult; +use sp_blockchain::{Result as ClientResult, HeaderMetadataCache}; use sp_database::{Database, Transaction}; use codec::{Encode, Decode}; use sp_runtime::generic::BlockId; @@ -78,6 +78,7 @@ impl CacheItemT for T where T: Clone + Decode + Encode + PartialEq {} /// Database-backed blockchain data cache. pub struct DbCache { cache_at: HashMap, self::list_storage::DbStorage>>, + header_metadata_cache: Arc>, db: Arc>, key_lookup_column: u32, header_column: u32, @@ -90,6 +91,7 @@ impl DbCache { /// Create new cache. pub fn new( db: Arc>, + header_metadata_cache: Arc>, key_lookup_column: u32, header_column: u32, cache_column: u32, @@ -99,6 +101,7 @@ impl DbCache { Self { cache_at: HashMap::new(), db, + header_metadata_cache, key_lookup_column, header_column, cache_column, @@ -348,18 +351,24 @@ impl BlockchainCache for DbCacheSync { at: &BlockId, ) -> ClientResult, Block::Hash), Option<(NumberFor, Block::Hash)>, Vec)>> { let mut cache = self.0.write(); + let header_metadata_cache = cache.header_metadata_cache.clone(); let cache = cache.get_cache(*key)?; let storage = cache.storage(); let db = storage.db(); let columns = storage.columns(); let at = match *at { BlockId::Hash(hash) => { - let header = utils::require_header::( - &**db, - columns.key_lookup, - columns.header, - BlockId::Hash(hash.clone()))?; - ComplexBlockId::new(hash, *header.number()) + match header_metadata_cache.header_metadata(hash) { + Some(metadata) => ComplexBlockId::new(hash, metadata.number), + None => { + let header = utils::require_header::( + &**db, + columns.key_lookup, + columns.header, + BlockId::Hash(hash.clone()))?; + ComplexBlockId::new(hash, *header.number()) + } + } }, BlockId::Number(number) => { let hash = utils::require_header::( diff --git a/client/db/src/changes_tries_storage.rs b/client/db/src/changes_tries_storage.rs index 985251f403d..958e6e39f48 100644 --- a/client/db/src/changes_tries_storage.rs +++ b/client/db/src/changes_tries_storage.rs @@ -24,7 +24,7 @@ use parking_lot::RwLock; use sp_blockchain::{Error as ClientError, Result as ClientResult}; use sp_trie::MemoryDB; use sc_client_api::backend::PrunableStateChangesTrieStorage; -use sp_blockchain::{well_known_cache_keys, Cache as BlockchainCache}; +use sp_blockchain::{well_known_cache_keys, Cache as BlockchainCache, HeaderMetadataCache}; use sp_core::{ChangesTrieConfiguration, ChangesTrieConfigurationRange, convert_hash}; use sp_core::storage::PrefixedStorageKey; use sp_database::Transaction; @@ -114,6 +114,7 @@ impl DbChangesTrieStorage { /// Create new changes trie storage. pub fn new( db: Arc>, + header_metadata_cache: Arc>, meta_column: u32, changes_tries_column: u32, key_lookup_column: u32, @@ -137,6 +138,7 @@ impl DbChangesTrieStorage { min_blocks_to_keep, cache: DbCacheSync(RwLock::new(DbCache::new( db.clone(), + header_metadata_cache, key_lookup_column, header_column, cache_column, diff --git a/client/db/src/lib.rs b/client/db/src/lib.rs index 5edfcb046f6..d1eb10ea316 100644 --- a/client/db/src/lib.rs +++ b/client/db/src/lib.rs @@ -368,7 +368,7 @@ pub struct BlockchainDb { db: Arc>, meta: Arc, Block::Hash>>>, leaves: RwLock>>, - header_metadata_cache: HeaderMetadataCache, + header_metadata_cache: Arc>, } impl BlockchainDb { @@ -379,7 +379,7 @@ impl BlockchainDb { db, leaves: RwLock::new(leaves), meta: Arc::new(RwLock::new(meta)), - header_metadata_cache: HeaderMetadataCache::default(), + header_metadata_cache: Arc::new(HeaderMetadataCache::default()), }) } @@ -505,7 +505,7 @@ impl HeaderMetadata for BlockchainDb { type Error = sp_blockchain::Error; fn header_metadata(&self, hash: Block::Hash) -> Result, Self::Error> { - self.header_metadata_cache.header_metadata(hash).or_else(|_| { + self.header_metadata_cache.header_metadata(hash).map_or_else(|| { self.header(BlockId::hash(hash))?.map(|header| { let header_metadata = CachedHeaderMetadata::from(&header); self.header_metadata_cache.insert_header_metadata( @@ -514,7 +514,7 @@ impl HeaderMetadata for BlockchainDb { ); header_metadata }).ok_or(ClientError::UnknownBlock(format!("header not found in db: {}", hash))) - }) + }, Ok) } fn insert_header_metadata(&self, hash: Block::Hash, metadata: CachedHeaderMetadata) { @@ -831,6 +831,7 @@ impl Backend { let offchain_storage = offchain::LocalStorage::new(db.clone()); let changes_tries_storage = DbChangesTrieStorage::new( db, + blockchain.header_metadata_cache.clone(), columns::META, columns::CHANGES_TRIE, columns::KEY_LOOKUP, diff --git a/client/db/src/light.rs b/client/db/src/light.rs index edc7f8fc552..849b439424d 100644 --- a/client/db/src/light.rs +++ b/client/db/src/light.rs @@ -62,7 +62,7 @@ pub struct LightStorage { db: Arc>, meta: RwLock, Block::Hash>>, cache: Arc>, - header_metadata_cache: HeaderMetadataCache, + header_metadata_cache: Arc>, #[cfg(not(target_os = "unknown"))] io_stats: FrozenForDuration, @@ -84,8 +84,10 @@ impl LightStorage { fn from_kvdb(db: Arc>) -> ClientResult { let meta = read_meta::(&*db, columns::HEADER)?; + let header_metadata_cache = Arc::new(HeaderMetadataCache::default()); let cache = DbCache::new( db.clone(), + header_metadata_cache.clone(), columns::KEY_LOOKUP, columns::HEADER, columns::CACHE, @@ -97,7 +99,7 @@ impl LightStorage { db, meta: RwLock::new(meta), cache: Arc::new(DbCacheSync(RwLock::new(cache))), - header_metadata_cache: HeaderMetadataCache::default(), + header_metadata_cache, #[cfg(not(target_os = "unknown"))] io_stats: FrozenForDuration::new(std::time::Duration::from_secs(1)), }) @@ -188,7 +190,7 @@ impl HeaderMetadata for LightStorage { type Error = ClientError; fn header_metadata(&self, hash: Block::Hash) -> Result, Self::Error> { - self.header_metadata_cache.header_metadata(hash).or_else(|_| { + self.header_metadata_cache.header_metadata(hash).map_or_else(|| { self.header(BlockId::hash(hash))?.map(|header| { let header_metadata = CachedHeaderMetadata::from(&header); self.header_metadata_cache.insert_header_metadata( @@ -197,7 +199,7 @@ impl HeaderMetadata for LightStorage { ); header_metadata }).ok_or(ClientError::UnknownBlock(format!("header not found in db: {}", hash))) - }) + }, Ok) } fn insert_header_metadata(&self, hash: Block::Hash, metadata: CachedHeaderMetadata) { diff --git a/primitives/blockchain/src/header_metadata.rs b/primitives/blockchain/src/header_metadata.rs index bdc2b09eea4..b7df03187db 100644 --- a/primitives/blockchain/src/header_metadata.rs +++ b/primitives/blockchain/src/header_metadata.rs @@ -239,19 +239,16 @@ impl Default for HeaderMetadataCache { } } -impl HeaderMetadata for HeaderMetadataCache { - type Error = String; - - fn header_metadata(&self, hash: Block::Hash) -> Result, Self::Error> { +impl HeaderMetadataCache { + pub fn header_metadata(&self, hash: Block::Hash) -> Option> { self.cache.write().get(&hash).cloned() - .ok_or("header metadata not found in cache".to_owned()) } - fn insert_header_metadata(&self, hash: Block::Hash, metadata: CachedHeaderMetadata) { + pub fn insert_header_metadata(&self, hash: Block::Hash, metadata: CachedHeaderMetadata) { self.cache.write().put(hash, metadata); } - fn remove_header_metadata(&self, hash: Block::Hash) { + pub fn remove_header_metadata(&self, hash: Block::Hash) { self.cache.write().pop(&hash); } } -- GitLab From 78fc362add0277bb56bbbaa7818c1f473f5adde5 Mon Sep 17 00:00:00 2001 From: Nikolay Volf Date: Thu, 7 May 2020 13:50:07 +0300 Subject: [PATCH 158/167] change to vecdeque (#5937) --- client/network/src/behaviour.rs | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index d6949b491c8..171acc9562a 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -29,7 +29,7 @@ use libp2p::swarm::{NetworkBehaviourAction, NetworkBehaviourEventProcess, PollPa use log::debug; use sp_consensus::{BlockOrigin, import_queue::{IncomingBlock, Origin}}; use sp_runtime::{traits::{Block as BlockT, NumberFor}, ConsensusEngineId, Justification}; -use std::{borrow::Cow, iter, task::{Context, Poll}, time::Duration}; +use std::{borrow::Cow, collections::VecDeque, iter, task::{Context, Poll}, time::Duration}; /// General behaviour of the network. Combines all protocols together. #[derive(NetworkBehaviour)] @@ -51,7 +51,7 @@ pub struct Behaviour { /// Queue of events to produce for the outside. #[behaviour(ignore)] - events: Vec>, + events: VecDeque>, /// Role of our local node, as originally passed from the configuration. #[behaviour(ignore)] @@ -118,7 +118,7 @@ impl Behaviour { block_requests, finality_proof_requests, light_client_handler, - events: Vec::new(), + events: VecDeque::new(), role, } } @@ -183,7 +183,7 @@ impl Behaviour { engine_id, role, }; - self.events.push(BehaviourOut::Event(ev)); + self.events.push_back(BehaviourOut::Event(ev)); } } @@ -241,26 +241,26 @@ Behaviour { fn inject_event(&mut self, event: CustomMessageOutcome) { match event { CustomMessageOutcome::BlockImport(origin, blocks) => - self.events.push(BehaviourOut::BlockImport(origin, blocks)), + self.events.push_back(BehaviourOut::BlockImport(origin, blocks)), CustomMessageOutcome::JustificationImport(origin, hash, nb, justification) => - self.events.push(BehaviourOut::JustificationImport(origin, hash, nb, justification)), + self.events.push_back(BehaviourOut::JustificationImport(origin, hash, nb, justification)), CustomMessageOutcome::FinalityProofImport(origin, hash, nb, proof) => - self.events.push(BehaviourOut::FinalityProofImport(origin, hash, nb, proof)), + self.events.push_back(BehaviourOut::FinalityProofImport(origin, hash, nb, proof)), CustomMessageOutcome::BlockRequest { target, request } => { match self.block_requests.send_request(&target, request) { block_requests::SendRequestOutcome::Ok => { - self.events.push(BehaviourOut::RequestStarted { + self.events.push_back(BehaviourOut::RequestStarted { peer: target, protocol: self.block_requests.protocol_name().to_vec(), }); }, block_requests::SendRequestOutcome::Replaced { request_duration, .. } => { - self.events.push(BehaviourOut::RequestFinished { + self.events.push_back(BehaviourOut::RequestFinished { peer: target.clone(), protocol: self.block_requests.protocol_name().to_vec(), request_duration, }); - self.events.push(BehaviourOut::RequestStarted { + self.events.push_back(BehaviourOut::RequestStarted { peer: target, protocol: self.block_requests.protocol_name().to_vec(), }); @@ -275,7 +275,7 @@ Behaviour { CustomMessageOutcome::NotificationStreamOpened { remote, protocols, roles } => { let role = reported_roles_to_observed_role(&self.role, &remote, roles); for engine_id in protocols { - self.events.push(BehaviourOut::Event(Event::NotificationStreamOpened { + self.events.push_back(BehaviourOut::Event(Event::NotificationStreamOpened { remote: remote.clone(), engine_id, role: role.clone(), @@ -284,14 +284,14 @@ Behaviour { }, CustomMessageOutcome::NotificationStreamClosed { remote, protocols } => for engine_id in protocols { - self.events.push(BehaviourOut::Event(Event::NotificationStreamClosed { + self.events.push_back(BehaviourOut::Event(Event::NotificationStreamClosed { remote: remote.clone(), engine_id, })); }, CustomMessageOutcome::NotificationsReceived { remote, messages } => { let ev = Event::NotificationsReceived { remote, messages }; - self.events.push(BehaviourOut::Event(ev)); + self.events.push_back(BehaviourOut::Event(ev)); }, CustomMessageOutcome::PeerNewBest(peer_id, number) => { self.light_client_handler.update_best_block(&peer_id, number); @@ -305,14 +305,14 @@ impl NetworkBehaviourEventProcess) { match event { block_requests::Event::AnsweredRequest { peer, total_handling_time } => { - self.events.push(BehaviourOut::AnsweredRequest { + self.events.push_back(BehaviourOut::AnsweredRequest { peer, protocol: self.block_requests.protocol_name().to_vec(), build_time: total_handling_time, }); }, block_requests::Event::Response { peer, original_request, response, request_duration } => { - self.events.push(BehaviourOut::RequestFinished { + self.events.push_back(BehaviourOut::RequestFinished { peer: peer.clone(), protocol: self.block_requests.protocol_name().to_vec(), request_duration, @@ -324,7 +324,7 @@ impl NetworkBehaviourEventProcess NetworkBehaviourEventProcess { // There doesn't exist any mechanism to report timeouts yet, so we process them by // disconnecting the node. - self.events.push(BehaviourOut::RequestFinished { + self.events.push_back(BehaviourOut::RequestFinished { peer: peer.clone(), protocol: self.block_requests.protocol_name().to_vec(), request_duration, @@ -396,20 +396,20 @@ impl NetworkBehaviourEventProcess self.substrate.add_discovered_nodes(iter::once(peer_id)); } DiscoveryOut::ValueFound(results) => { - self.events.push(BehaviourOut::Event(Event::Dht(DhtEvent::ValueFound(results)))); + self.events.push_back(BehaviourOut::Event(Event::Dht(DhtEvent::ValueFound(results)))); } DiscoveryOut::ValueNotFound(key) => { - self.events.push(BehaviourOut::Event(Event::Dht(DhtEvent::ValueNotFound(key)))); + self.events.push_back(BehaviourOut::Event(Event::Dht(DhtEvent::ValueNotFound(key)))); } DiscoveryOut::ValuePut(key) => { - self.events.push(BehaviourOut::Event(Event::Dht(DhtEvent::ValuePut(key)))); + self.events.push_back(BehaviourOut::Event(Event::Dht(DhtEvent::ValuePut(key)))); } DiscoveryOut::ValuePutFailed(key) => { - self.events.push(BehaviourOut::Event(Event::Dht(DhtEvent::ValuePutFailed(key)))); + self.events.push_back(BehaviourOut::Event(Event::Dht(DhtEvent::ValuePutFailed(key)))); } DiscoveryOut::RandomKademliaStarted(protocols) => { for protocol in protocols { - self.events.push(BehaviourOut::RandomKademliaStarted(protocol)); + self.events.push_back(BehaviourOut::RandomKademliaStarted(protocol)); } } } @@ -418,8 +418,8 @@ impl NetworkBehaviourEventProcess impl Behaviour { fn poll(&mut self, _: &mut Context, _: &mut impl PollParameters) -> Poll>> { - if !self.events.is_empty() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(self.events.remove(0))) + if let Some(event) = self.events.pop_front() { + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)) } Poll::Pending -- GitLab From ba0593deefd8caae6bf29a6de1beda1efbb33642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 7 May 2020 12:50:25 +0200 Subject: [PATCH 159/167] Merge Substrate master before checking Polkadot companion (#5916) * Merge Substrate master before checking Polkadot companion * Also merge polkadot/master into the companion pr branch * Set email and user name --- .maintain/gitlab/check_polkadot_companion_build.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.maintain/gitlab/check_polkadot_companion_build.sh b/.maintain/gitlab/check_polkadot_companion_build.sh index eb4c6440f46..c2ecf8cb6a0 100755 --- a/.maintain/gitlab/check_polkadot_companion_build.sh +++ b/.maintain/gitlab/check_polkadot_companion_build.sh @@ -39,15 +39,22 @@ substrate's branch. if it can't find anything, it will uses master instead EOT +# Set the user name and email to make merging work +git config --global user.name 'CI system' +git config --global user.email '<>' SUBSTRATE_PATH=$(pwd) +# Merge master into our branch before building Polkadot to make sure we don't miss +# any commits that are required by Polkadot. +git merge origin/master + # Clone the current Polkadot master branch into ./polkadot. git clone --depth 1 https://github.com/paritytech/polkadot.git cd polkadot -# either it's a pull request then check for a companion otherwise use +# either it's a pull request then check for a companion otherwise use # polkadot:master if expr match "${CI_COMMIT_REF_NAME}" '^[0-9]\+$' >/dev/null then @@ -78,12 +85,14 @@ then boldprint "companion pr specified/detected: #${pr_companion}" git fetch --depth 1 origin refs/pull/${pr_companion}/head:pr/${pr_companion} git checkout pr/${pr_companion} + git merge origin/master else pr_ref="$(grep -Po '"ref"\s*:\s*"\K(?!master)[^"]*' "${pr_data_file}")" if git fetch --depth 1 origin "$pr_ref":branch/"$pr_ref" 2>/dev/null then boldprint "companion branch detected: $pr_ref" git checkout branch/"$pr_ref" + git merge origin/master else boldprint "no companion branch found - building polkadot:master" fi -- GitLab From 8ddc9b0f8c3dde46ced0722926d3631299272151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 7 May 2020 14:32:27 +0200 Subject: [PATCH 160/167] Relase `wasm-builder` and `wasm-builder-runner` (#5934) --- Cargo.lock | 4 ++-- utils/wasm-builder-runner/Cargo.toml | 2 +- utils/wasm-builder/Cargo.toml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4b7e16eedf4..6c7b9a9a4bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8245,7 +8245,7 @@ version = "2.0.0-dev" [[package]] name = "substrate-wasm-builder" -version = "1.0.9" +version = "1.0.10" dependencies = [ "atty", "build-helper", @@ -8260,7 +8260,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder-runner" -version = "1.0.5" +version = "1.0.6" [[package]] name = "substrate-wasmtime" diff --git a/utils/wasm-builder-runner/Cargo.toml b/utils/wasm-builder-runner/Cargo.toml index c8cbeb169ea..75e55b35b47 100644 --- a/utils/wasm-builder-runner/Cargo.toml +++ b/utils/wasm-builder-runner/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-wasm-builder-runner" -version = "1.0.5" +version = "1.0.6" authors = ["Parity Technologies "] description = "Runner for substrate-wasm-builder" edition = "2018" diff --git a/utils/wasm-builder/Cargo.toml b/utils/wasm-builder/Cargo.toml index 1aa38a790c2..ca31cd15934 100644 --- a/utils/wasm-builder/Cargo.toml +++ b/utils/wasm-builder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "substrate-wasm-builder" -version = "1.0.9" +version = "1.0.10" authors = ["Parity Technologies "] description = "Utility for building WASM binaries" edition = "2018" -- GitLab From 6b66b17749142a9060b609cfdd699de5f75f9eb7 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Thu, 7 May 2020 14:33:33 +0200 Subject: [PATCH 161/167] Update System Weights (#5888) * Update system weights * Use maximum block weight for scheduler * Update offences to use full block * Move weight inside if statement * Add one read to offences `on_initialize` * Delete factory test * Revert "Delete factory test" This reverts commit 8f95aacd63a028ef1b415185b45367b4140d86fd. * Revert "Add one read to offences `on_initialize`" This reverts commit 7df7ebc73625ed79b14086f13c247d4058ee87d6. * Revert "Move weight inside if statement" This reverts commit 87277d07913a7d1868eeee85ef4673f51ee4013b. * Revert "Update offences to use full block" This reverts commit 0bbe0ce18e9419b032157f7d37dea6481078cdc0. * Use scheduler in Sudo * Apply suggestions from code review Co-authored-by: Alexander Popiak * Revert "Use scheduler in Sudo" This reverts commit 95bd2768dfea100bdf682cf4fe6c0f46e8e1f66e. * remove max extrinsic weight (it does nothing useful) * fix tests * introduce `sudo_unchecked_weight` * bump spec version * scheduler 80 percent of maximum * Update `set_changes_trie_config` weight * Update bin/node/runtime/src/lib.rs * Update frame/democracy/src/tests.rs * Update tests.rs * update based on feedback Co-authored-by: Alexander Popiak --- bin/node/runtime/src/lib.rs | 4 +- frame/democracy/src/lib.rs | 2 +- frame/democracy/src/tests.rs | 10 +- frame/scheduler/src/lib.rs | 37 +++---- frame/sudo/src/lib.rs | 26 ++++- frame/system/benchmarking/src/lib.rs | 2 +- frame/system/src/lib.rs | 140 ++++++++++++--------------- 7 files changed, 118 insertions(+), 103 deletions(-) diff --git a/bin/node/runtime/src/lib.rs b/bin/node/runtime/src/lib.rs index b8d2c51e27c..a67f4855ac5 100644 --- a/bin/node/runtime/src/lib.rs +++ b/bin/node/runtime/src/lib.rs @@ -175,14 +175,14 @@ impl pallet_utility::Trait for Runtime { } parameter_types! { - pub const MaximumWeight: Weight = 2_000_000; + pub const MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * MaximumBlockWeight::get(); } impl pallet_scheduler::Trait for Runtime { type Event = Event; type Origin = Origin; type Call = Call; - type MaximumWeight = MaximumWeight; + type MaximumWeight = MaximumSchedulerWeight; } parameter_types! { diff --git a/frame/democracy/src/lib.rs b/frame/democracy/src/lib.rs index df1ea0d5317..a182907aba2 100644 --- a/frame/democracy/src/lib.rs +++ b/frame/democracy/src/lib.rs @@ -1252,7 +1252,7 @@ decl_module! { } /// Enact a proposal from a referendum. For now we just make the weight be the maximum. - #[weight = frame_system::Module::::max_extrinsic_weight(DispatchClass::Normal)] + #[weight = T::MaximumBlockWeight::get()] fn enact_proposal(origin, proposal_hash: T::Hash, index: ReferendumIndex) -> DispatchResult { ensure_root(origin)?; Self::do_enact_proposal(proposal_hash, index) diff --git a/frame/democracy/src/tests.rs b/frame/democracy/src/tests.rs index 076eb66d6bb..a835a0ff6ee 100644 --- a/frame/democracy/src/tests.rs +++ b/frame/democracy/src/tests.rs @@ -77,7 +77,7 @@ impl_outer_event! { pub struct Test; parameter_types! { pub const BlockHashCount: u64 = 250; - pub const MaximumBlockWeight: Weight = 1024; + pub const MaximumBlockWeight: Weight = 1_000_000; pub const MaximumBlockLength: u32 = 2 * 1024; pub const AvailableBlockRatio: Perbill = Perbill::one(); } @@ -106,14 +106,16 @@ impl frame_system::Trait for Test { type OnKilledAccount = (); } parameter_types! { - pub const ExistentialDeposit: u64 = 1; - pub const MaximumWeight: u32 = 1000000; + pub const MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * MaximumBlockWeight::get(); } impl pallet_scheduler::Trait for Test { type Event = Event; type Origin = Origin; type Call = Call; - type MaximumWeight = MaximumWeight; + type MaximumWeight = MaximumSchedulerWeight; +} +parameter_types! { + pub const ExistentialDeposit: u64 = 1; } impl pallet_balances::Trait for Test { type Balance = u64; diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index 87b5aafdf3e..48595073784 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -513,11 +513,14 @@ mod tests { impl logger::Trait for Test { type Event = (); } + parameter_types! { + pub const MaximumSchedulerWeight: Weight = Perbill::from_percent(80) * MaximumBlockWeight::get(); + } impl Trait for Test { type Event = (); type Origin = Origin; type Call = Call; - type MaximumWeight = MaximumBlockWeight; + type MaximumWeight = MaximumSchedulerWeight; } type System = system::Module; type Logger = logger::Module; @@ -611,8 +614,8 @@ mod tests { #[test] fn scheduler_respects_weight_limits() { new_test_ext().execute_with(|| { - Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); - Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(42, MaximumSchedulerWeight::get() / 2))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumSchedulerWeight::get() / 2))); // 69 and 42 do not fit together run_to_block(4); assert_eq!(logger::log(), vec![42u32]); @@ -624,8 +627,8 @@ mod tests { #[test] fn scheduler_respects_hard_deadlines_more() { new_test_ext().execute_with(|| { - Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); - Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(42, MaximumSchedulerWeight::get() / 2))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumSchedulerWeight::get() / 2))); // With base weights, 69 and 42 should not fit together, but do because of hard deadlines run_to_block(4); assert_eq!(logger::log(), vec![42u32, 69u32]); @@ -635,8 +638,8 @@ mod tests { #[test] fn scheduler_respects_priority_ordering() { new_test_ext().execute_with(|| { - Scheduler::do_schedule(4, None, 1, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 2))); - Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 1, Call::Logger(logger::Call::log(42, MaximumSchedulerWeight::get() / 2))); + Scheduler::do_schedule(4, None, 0, Call::Logger(logger::Call::log(69, MaximumSchedulerWeight::get() / 2))); run_to_block(4); assert_eq!(logger::log(), vec![69u32, 42u32]); }); @@ -645,9 +648,9 @@ mod tests { #[test] fn scheduler_respects_priority_ordering_with_soft_deadlines() { new_test_ext().execute_with(|| { - Scheduler::do_schedule(4, None, 255, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 3))); - Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); - Scheduler::do_schedule(4, None, 126, Call::Logger(logger::Call::log(2600, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(4, None, 255, Call::Logger(logger::Call::log(42, MaximumSchedulerWeight::get() / 3))); + Scheduler::do_schedule(4, None, 127, Call::Logger(logger::Call::log(69, MaximumSchedulerWeight::get() / 2))); + Scheduler::do_schedule(4, None, 126, Call::Logger(logger::Call::log(2600, MaximumSchedulerWeight::get() / 2))); // 2600 does not fit with 69 or 42, but has higher priority, so will go through run_to_block(4); @@ -667,29 +670,29 @@ mod tests { let periodic_multiplier = ::DbWeight::get().reads_writes(1, 1); // Named - assert_ok!(Scheduler::do_schedule_named(1u32.encode(), 1, None, 255, Call::Logger(logger::Call::log(3, MaximumBlockWeight::get() / 3)))); + assert_ok!(Scheduler::do_schedule_named(1u32.encode(), 1, None, 255, Call::Logger(logger::Call::log(3, MaximumSchedulerWeight::get() / 3)))); // Anon Periodic - Scheduler::do_schedule(1, Some((1000, 3)), 128, Call::Logger(logger::Call::log(42, MaximumBlockWeight::get() / 3))); + Scheduler::do_schedule(1, Some((1000, 3)), 128, Call::Logger(logger::Call::log(42, MaximumSchedulerWeight::get() / 3))); // Anon - Scheduler::do_schedule(1, None, 127, Call::Logger(logger::Call::log(69, MaximumBlockWeight::get() / 2))); + Scheduler::do_schedule(1, None, 127, Call::Logger(logger::Call::log(69, MaximumSchedulerWeight::get() / 2))); // Named Periodic - assert_ok!(Scheduler::do_schedule_named(2u32.encode(), 1, Some((1000, 3)), 126, Call::Logger(logger::Call::log(2600, MaximumBlockWeight::get() / 2)))); + assert_ok!(Scheduler::do_schedule_named(2u32.encode(), 1, Some((1000, 3)), 126, Call::Logger(logger::Call::log(2600, MaximumSchedulerWeight::get() / 2)))); // Will include the named periodic only let actual_weight = Scheduler::on_initialize(1); - let call_weight = MaximumBlockWeight::get() / 2; + let call_weight = MaximumSchedulerWeight::get() / 2; assert_eq!(actual_weight, call_weight + base_weight + base_multiplier + named_multiplier + periodic_multiplier); assert_eq!(logger::log(), vec![2600u32]); // Will include anon and anon periodic let actual_weight = Scheduler::on_initialize(2); - let call_weight = MaximumBlockWeight::get() / 2 + MaximumBlockWeight::get() / 3; + let call_weight = MaximumSchedulerWeight::get() / 2 + MaximumSchedulerWeight::get() / 3; assert_eq!(actual_weight, call_weight + base_weight + base_multiplier * 2 + periodic_multiplier); assert_eq!(logger::log(), vec![2600u32, 69u32, 42u32]); // Will include named only let actual_weight = Scheduler::on_initialize(3); - let call_weight = MaximumBlockWeight::get() / 3; + let call_weight = MaximumSchedulerWeight::get() / 3; assert_eq!(actual_weight, call_weight + base_weight + base_multiplier + named_multiplier); assert_eq!(logger::log(), vec![2600u32, 69u32, 42u32, 3u32]); diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index d19c92358c2..2e7a53140fe 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -92,7 +92,7 @@ use sp_runtime::{DispatchResult, traits::{StaticLookup, Dispatchable}}; use frame_support::{ Parameter, decl_module, decl_event, decl_storage, decl_error, ensure, }; -use frame_support::weights::{GetDispatchInfo, FunctionOf, Pays}; +use frame_support::weights::{Weight, GetDispatchInfo, FunctionOf, Pays}; use frame_system::{self as system, ensure_signed}; pub trait Trait: frame_system::Trait { @@ -134,6 +134,30 @@ decl_module! { Self::deposit_event(RawEvent::Sudid(res.map(|_| ()).map_err(|e| e.error))); } + /// Authenticates the sudo key and dispatches a function call with `Root` origin. + /// This function does not check the weight of the call, and instead allows the + /// Sudo user to specify the weight of the call. + /// + /// The dispatch origin for this call must be _Signed_. + /// + /// # + /// - O(1). + /// - The weight of this call is defined by the caller. + /// # + #[weight = FunctionOf( + |(_, &weight): (&Box<::Call>,&Weight,)| weight, + |(call, _): (&Box<::Call>,&Weight,)| call.get_dispatch_info().class, + Pays::Yes, + )] + fn sudo_unchecked_weight(origin, call: Box<::Call>, _weight: Weight) { + // This is a public call, so we ensure that the origin is some signed account. + let sender = ensure_signed(origin)?; + ensure!(sender == Self::key(), Error::::RequireSudo); + + let res = call.dispatch(frame_system::RawOrigin::Root.into()); + Self::deposit_event(RawEvent::Sudid(res.map(|_| ()).map_err(|e| e.error))); + } + /// Authenticates the current sudo key and sets the given AccountId (`new`) as the new sudo key. /// /// The dispatch origin for this call must be _Signed_. diff --git a/frame/system/benchmarking/src/lib.rs b/frame/system/benchmarking/src/lib.rs index b9b9619c09b..22e6dba8427 100644 --- a/frame/system/benchmarking/src/lib.rs +++ b/frame/system/benchmarking/src/lib.rs @@ -134,7 +134,7 @@ benchmarks! { let value = storage::unhashed::get_raw(&last_key).ok_or("No value stored")?; assert_eq!(value, last_key); - }: _(RawOrigin::Root, prefix) + }: _(RawOrigin::Root, prefix, p) verify { assert_eq!(storage::unhashed::get_raw(&last_key), None); } diff --git a/frame/system/src/lib.rs b/frame/system/src/lib.rs index eca1b3291eb..8346b727b25 100644 --- a/frame/system/src/lib.rs +++ b/frame/system/src/lib.rs @@ -512,8 +512,10 @@ decl_module! { /// /// # /// - `O(1)` + /// - Base Weight: 0.665 µs, independent of remark length. + /// - No DB operations. /// # - #[weight = 0] + #[weight = 700_000] fn remark(origin, _remark: Vec) { ensure_signed(origin)?; } @@ -523,8 +525,10 @@ decl_module! { /// # /// - `O(1)` /// - 1 storage write. + /// - Base Weight: 1.405 µs + /// - 1 write to HEAP_PAGES /// # - #[weight = (0, DispatchClass::Operational)] + #[weight = (T::DbWeight::get().writes(1) + 1_500_000, DispatchClass::Operational)] fn set_heap_pages(origin, pages: u64) { ensure_root(origin)?; storage::unhashed::put_raw(well_known_keys::HEAP_PAGES, &pages.encode()); @@ -537,8 +541,10 @@ decl_module! { /// - 1 storage write (codec `O(C)`). /// - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is expensive). /// - 1 event. + /// The weight of this function is dependent on the runtime, but generally this is very expensive. + /// We will treat this as a full block. /// # - #[weight = (200_000_000, DispatchClass::Operational)] + #[weight = (T::MaximumBlockWeight::get(), DispatchClass::Operational)] pub fn set_code(origin, code: Vec) { Self::can_set_code(origin, &code)?; @@ -552,8 +558,9 @@ decl_module! { /// - `O(C)` where `C` length of `code` /// - 1 storage write (codec `O(C)`). /// - 1 event. + /// The weight of this function is dependent on the runtime. We will treat this as a full block. /// # - #[weight = (200_000_000, DispatchClass::Operational)] + #[weight = (T::MaximumBlockWeight::get(), DispatchClass::Operational)] pub fn set_code_without_checks(origin, code: Vec) { ensure_root(origin)?; storage::unhashed::put_raw(well_known_keys::CODE, &code); @@ -563,11 +570,14 @@ decl_module! { /// Set the new changes trie configuration. /// /// # - /// - `O(D)` where `D` length of `Digest` + /// - `O(1)` /// - 1 storage write or delete (codec `O(1)`). - /// - 1 call to `deposit_log`: `O(D)` (which depends on the length of `Digest`) + /// - 1 call to `deposit_log`: Uses `append` API, so O(1) + /// - Base Weight: 7.218 µs + /// - DB Weight: + /// - Writes: Changes Trie, System Digest /// # - #[weight = (20_000_000, DispatchClass::Operational)] + #[weight = (T::DbWeight::get().writes(2) + 10_000_000, DispatchClass::Operational)] pub fn set_changes_trie_config(origin, changes_trie_config: Option) { ensure_root(origin)?; match changes_trie_config.clone() { @@ -589,8 +599,17 @@ decl_module! { /// # /// - `O(I)` where `I` length of `items` /// - `I` storage writes (`O(1)`). + /// - Base Weight: 0.568 * i µs + /// - Writes: Number of items /// # - #[weight = (0, DispatchClass::Operational)] + #[weight = FunctionOf( + |(items,): (&Vec,)| { + T::DbWeight::get().writes(items.len() as Weight) + .saturating_add((items.len() as Weight).saturating_mul(600_000)) + }, + DispatchClass::Operational, + Pays::Yes, + )] fn set_storage(origin, items: Vec) { ensure_root(origin)?; for i in &items { @@ -601,10 +620,19 @@ decl_module! { /// Kill some items from storage. /// /// # - /// - `O(VK)` where `V` length of `keys` and `K` length of one key - /// - `V` storage deletions. + /// - `O(IK)` where `I` length of `keys` and `K` length of one key + /// - `I` storage deletions. + /// - Base Weight: .378 * i µs + /// - Writes: Number of items /// # - #[weight = (0, DispatchClass::Operational)] + #[weight = FunctionOf( + |(keys,): (&Vec,)| { + T::DbWeight::get().writes(keys.len() as Weight) + .saturating_add((keys.len() as Weight).saturating_mul(400_000)) + }, + DispatchClass::Operational, + Pays::Yes, + )] fn kill_storage(origin, keys: Vec) { ensure_root(origin)?; for key in &keys { @@ -614,12 +642,24 @@ decl_module! { /// Kill all storage items with a key that starts with the given prefix. /// + /// **NOTE:** We rely on the Root origin to provide us the number of subkeys under + /// the prefix we are removing to accurately calculate the weight of this function. + /// /// # /// - `O(P)` where `P` amount of keys with prefix `prefix` /// - `P` storage deletions. + /// - Base Weight: 0.834 * P µs + /// - Writes: Number of subkeys + 1 /// # - #[weight = (0, DispatchClass::Operational)] - fn kill_prefix(origin, prefix: Key) { + #[weight = FunctionOf( + |(_, &subkeys): (&Key, &u32)| { + T::DbWeight::get().writes(Weight::from(subkeys) + 1) + .saturating_add((Weight::from(subkeys) + 1).saturating_mul(850_000)) + }, + DispatchClass::Operational, + Pays::Yes, + )] + fn kill_prefix(origin, prefix: Key, _subkeys: u32) { ensure_root(origin)?; storage::unhashed::kill_prefix(&prefix); } @@ -630,8 +670,11 @@ decl_module! { /// # /// - `O(1)` /// - 1 storage read and deletion. + /// -------------------- + /// Base Weight: 8.626 µs + /// No DB Read or Write operations because caller is already in overlay /// # - #[weight = (25_000_000, DispatchClass::Operational)] + #[weight = (10_000_000, DispatchClass::Operational)] fn suicide(origin) { let who = ensure_signed(origin)?; let account = Account::::get(&who); @@ -874,23 +917,6 @@ impl Module { AllExtrinsicsWeight::get().unwrap_or_default() } - /// Get the quota ratio of each dispatch class type. This indicates that all operational and mandatory - /// dispatches can use the full capacity of any resource, while user-triggered ones can consume - /// a portion. - pub fn get_dispatch_limit_ratio(class: DispatchClass) -> Perbill { - match class { - DispatchClass::Operational | DispatchClass::Mandatory - => ::one(), - DispatchClass::Normal => T::AvailableBlockRatio::get(), - } - } - - /// The maximum weight of an allowable extrinsic. Only one of these could exist in a block. - pub fn max_extrinsic_weight(class: DispatchClass) -> Weight { - let limit = Self::get_dispatch_limit_ratio(class) * T::MaximumBlockWeight::get(); - limit - (T::BlockExecutionWeight::get() + T::ExtrinsicBaseWeight::get()) - } - pub fn all_extrinsics_len() -> u32 { AllExtrinsicsLen::get().unwrap_or_default() } @@ -1257,7 +1283,11 @@ impl CheckWeight where /// dispatches can use the full capacity of any resource, while user-triggered ones can consume /// a portion. fn get_dispatch_limit_ratio(class: DispatchClass) -> Perbill { - Module::::get_dispatch_limit_ratio(class) + match class { + DispatchClass::Operational | DispatchClass::Mandatory + => ::one(), + DispatchClass::Normal => T::AvailableBlockRatio::get(), + } } /// Checks if the current extrinsic can fit into the block with respect to block weight limits. @@ -1680,7 +1710,7 @@ pub(crate) mod tests { use sp_std::cell::RefCell; use sp_core::H256; use sp_runtime::{traits::{BlakeTwo256, IdentityLookup, SignedExtension}, testing::Header, DispatchError}; - use frame_support::{impl_outer_origin, parameter_types, assert_ok, assert_err}; + use frame_support::{impl_outer_origin, parameter_types, assert_ok}; impl_outer_origin! { pub enum Origin for Test where system = super {} @@ -2082,47 +2112,6 @@ pub(crate) mod tests { }) } - #[test] - fn max_extrinsic_weight_is_allowed_but_nothing_more() { - // Dispatch Class Normal - new_test_ext().execute_with(|| { - let one = DispatchInfo { weight: 1, ..Default::default() }; - let max = DispatchInfo { weight: System::max_extrinsic_weight(DispatchClass::Normal), ..Default::default() }; - let len = 0_usize; - - assert_ok!(CheckWeight::::do_pre_dispatch(&max, len)); - assert_err!( - CheckWeight::::do_pre_dispatch(&one, len), - InvalidTransaction::ExhaustsResources, - ); - // Weight should be 75% of 1024 (max block weight) - assert_eq!(System::all_extrinsics_weight(), 768); - }); - - // Dispatch Class Operational - new_test_ext().execute_with(|| { - let one = DispatchInfo { - weight: 1, - class: DispatchClass::Operational, - ..Default::default() - }; - let max = DispatchInfo { - weight: System::max_extrinsic_weight(DispatchClass::Operational), - class: DispatchClass::Operational, - ..Default::default() - }; - let len = 0_usize; - - assert_ok!(CheckWeight::::do_pre_dispatch(&max, len)); - assert_err!( - CheckWeight::::do_pre_dispatch(&one, len), - InvalidTransaction::ExhaustsResources, - ); - // Weight should be 100% of max block weight - assert_eq!(System::all_extrinsics_weight(), ::MaximumBlockWeight::get()); - }); - } - #[test] fn mandatory_extrinsic_doesnt_care_about_limits() { new_test_ext().execute_with(|| { @@ -2156,9 +2145,6 @@ pub(crate) mod tests { // 10 is taken for block execution weight // So normal extrinsic can be 758 weight (-5 for base extrinsic weight) // And Operational can be 256 to produce a full block (-5 for base) - - assert_eq!(System::max_extrinsic_weight(DispatchClass::Normal), 753); - let max_normal = DispatchInfo { weight: 753, ..Default::default() }; let rest_operational = DispatchInfo { weight: 251, class: DispatchClass::Operational, ..Default::default() }; -- GitLab From c889f826bf7ce4b8e32beffbe61a3e73ce2e9487 Mon Sep 17 00:00:00 2001 From: thiolliere Date: Thu, 7 May 2020 14:52:56 +0200 Subject: [PATCH 162/167] Fix and add benchs for democracy pallet (#5897) * fix and add benchs * Update frame/democracy/src/benchmarking.rs Co-authored-by: Alexander Popiak * bump spec version * Revert "bump spec version" This reverts commit 01233117dee575490bc71a4730cdc4351a4013ad. Co-authored-by: Alexander Popiak --- frame/democracy/src/benchmarking.rs | 39 +++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/frame/democracy/src/benchmarking.rs b/frame/democracy/src/benchmarking.rs index 9896f987edf..d5611384654 100644 --- a/frame/democracy/src/benchmarking.rs +++ b/frame/democracy/src/benchmarking.rs @@ -19,7 +19,10 @@ use super::*; use frame_benchmarking::{benchmarks, account}; -use frame_support::traits::{Currency, Get, EnsureOrigin, OnInitialize}; +use frame_support::{ + IterableStorageMap, + traits::{Currency, Get, EnsureOrigin, OnInitialize}, +}; use frame_system::{RawOrigin, Module as System, self, EventRecord}; use sp_runtime::traits::{Bounded, One}; @@ -296,13 +299,14 @@ benchmarks! { // Worst case scenario, we external propose a previously blacklisted proposal external_propose { let p in 1 .. MAX_PROPOSALS; + let v in 1 .. MAX_VETOERS; let origin = T::ExternalOrigin::successful_origin(); let proposal_hash = T::Hashing::hash_of(&p); // Add proposal to blacklist with block number 0 Blacklist::::insert( proposal_hash, - (T::BlockNumber::zero(), vec![T::AccountId::default()]) + (T::BlockNumber::zero(), vec![T::AccountId::default(); v as usize]) ); let call = Call::::external_propose(proposal_hash); @@ -467,6 +471,36 @@ benchmarks! { } } + on_initialize_no_launch_no_maturing { + let r in 1 .. MAX_REFERENDUMS; + + for i in 0..r { + add_referendum::(i)?; + } + + for (key, mut info) in ReferendumInfoOf::::iter() { + if let ReferendumInfo::Ongoing(ref mut status) = info { + status.end += 100.into(); + } + ReferendumInfoOf::::insert(key, info); + } + + assert_eq!(Democracy::::referendum_count(), r, "referenda not created"); + assert_eq!(Democracy::::lowest_unbaked(), 0, "invalid referenda init"); + + }: { Democracy::::on_initialize(0.into()) } + verify { + // All should be on going + for i in 0 .. r { + if let Some(value) = ReferendumInfoOf::::get(i) { + match value { + ReferendumInfo::Finished { .. } => return Err("Referendum has been finished"), + ReferendumInfo::Ongoing(_) => (), + } + } + } + } + activate_proxy { let u in 1 .. MAX_USERS; @@ -986,6 +1020,7 @@ mod tests { assert_ok!(test_benchmark_cancel_queued::()); assert_ok!(test_benchmark_on_initialize_external::()); assert_ok!(test_benchmark_on_initialize_public::()); + assert_ok!(test_benchmark_on_initialize_no_launch_no_maturing::()); assert_ok!(test_benchmark_open_proxy::()); assert_ok!(test_benchmark_activate_proxy::()); assert_ok!(test_benchmark_close_proxy::()); -- GitLab From e7457b1eb9980596301fe1afd36478a6725157ef Mon Sep 17 00:00:00 2001 From: Pierre Krieger Date: Thu, 7 May 2020 15:07:52 +0200 Subject: [PATCH 163/167] Disconnect node after sync request cancelled (#5945) --- client/network/src/behaviour.rs | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 171acc9562a..5a5dd838031 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -320,19 +320,10 @@ impl NetworkBehaviourEventProcess { - // There doesn't exist any mechanism to report cancellations yet. - // We would normally disconnect the node, but this event happens as the result of - // a disconnect, so there's nothing more to do. - self.events.push_back(BehaviourOut::RequestFinished { - peer, - protocol: self.block_requests.protocol_name().to_vec(), - request_duration, - }); - } + block_requests::Event::RequestCancelled { peer, request_duration, .. } | block_requests::Event::RequestTimeout { peer, request_duration, .. } => { - // There doesn't exist any mechanism to report timeouts yet, so we process them by - // disconnecting the node. + // There doesn't exist any mechanism to report cancellations or timeouts yet, so + // we process them by disconnecting the node. self.events.push_back(BehaviourOut::RequestFinished { peer: peer.clone(), protocol: self.block_requests.protocol_name().to_vec(), -- GitLab From c32b328585ed2a3e849cc08d8defc87194cb79d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 7 May 2020 22:07:46 +0200 Subject: [PATCH 164/167] Make sure `config_mut` returns a mutable reference (#5942) --- client/cli/src/runner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/cli/src/runner.rs b/client/cli/src/runner.rs index 3b75dc4bc12..10e98906bfa 100644 --- a/client/cli/src/runner.rs +++ b/client/cli/src/runner.rs @@ -248,7 +248,7 @@ impl Runner { } /// Get a mutable reference to the node Configuration - pub fn config_mut(&mut self) -> &Configuration { + pub fn config_mut(&mut self) -> &mut Configuration { &mut self.config } } -- GitLab From b096036932c46a0b9da543fb826be20224a45bc7 Mon Sep 17 00:00:00 2001 From: Wei Tang Date: Thu, 7 May 2020 22:10:57 +0200 Subject: [PATCH 165/167] Remove "simple declaration of the `Module` type" comments (#5944) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove "simple declaration of the `Module` type" comments * Bump runtime impl version * Update bin/node/runtime/src/lib.rs Co-authored-by: Bastian Köcher Co-authored-by: Bastian Köcher --- frame/identity/src/lib.rs | 2 +- frame/nicks/src/lib.rs | 2 +- frame/scheduler/src/lib.rs | 3 +-- frame/sudo/src/lib.rs | 2 +- frame/vesting/src/lib.rs | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/frame/identity/src/lib.rs b/frame/identity/src/lib.rs index fad6b0f00ba..194a190ce62 100644 --- a/frame/identity/src/lib.rs +++ b/frame/identity/src/lib.rs @@ -558,7 +558,7 @@ mod weight_for { } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what it's working on. + /// Identity module declaration. pub struct Module for enum Call where origin: T::Origin { /// The amount held on deposit for a registered identity. const BasicDeposit: BalanceOf = T::BasicDeposit::get(); diff --git a/frame/nicks/src/lib.rs b/frame/nicks/src/lib.rs index 8ded9408d92..3088e7b68da 100644 --- a/frame/nicks/src/lib.rs +++ b/frame/nicks/src/lib.rs @@ -109,7 +109,7 @@ decl_error! { } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what it's working on. + /// Nicks module declaration. pub struct Module for enum Call where origin: T::Origin { type Error = Error; diff --git a/frame/scheduler/src/lib.rs b/frame/scheduler/src/lib.rs index 48595073784..029e1fd138d 100644 --- a/frame/scheduler/src/lib.rs +++ b/frame/scheduler/src/lib.rs @@ -124,7 +124,7 @@ decl_error! { } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what its working on. + /// Scheduler module declaration. pub struct Module for enum Call where origin: ::Origin { fn deposit_event() = default; @@ -437,7 +437,6 @@ mod tests { } } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what its working on. pub struct Module for enum Call where origin: ::Origin { fn deposit_event() = default; diff --git a/frame/sudo/src/lib.rs b/frame/sudo/src/lib.rs index 2e7a53140fe..21ae841c792 100644 --- a/frame/sudo/src/lib.rs +++ b/frame/sudo/src/lib.rs @@ -104,7 +104,7 @@ pub trait Trait: frame_system::Trait { } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what it's working on. + /// Sudo module declaration. pub struct Module for enum Call where origin: T::Origin { type Error = Error; diff --git a/frame/vesting/src/lib.rs b/frame/vesting/src/lib.rs index db58d76c87c..6d1b88efbcd 100644 --- a/frame/vesting/src/lib.rs +++ b/frame/vesting/src/lib.rs @@ -172,7 +172,7 @@ decl_error! { } decl_module! { - // Simple declaration of the `Module` type. Lets the macro know what it's working on. + /// Vesting module declaration. pub struct Module for enum Call where origin: T::Origin { type Error = Error; -- GitLab From f2cc6299be31d43de98cd8bf65ec03ee8a10d982 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Fri, 8 May 2020 05:18:32 -0400 Subject: [PATCH 166/167] Fix light clients in manual seal nodes (#5955) * WIP * WIP --- client/consensus/manual-seal/src/lib.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/client/consensus/manual-seal/src/lib.rs b/client/consensus/manual-seal/src/lib.rs index fefd3aa2d79..c59bd61a973 100644 --- a/client/consensus/manual-seal/src/lib.rs +++ b/client/consensus/manual-seal/src/lib.rs @@ -42,7 +42,6 @@ pub use self::{ error::Error, rpc::{EngineCommand, CreatedBlock}, }; -use sc_client_api::{TransactionFor, Backend}; /// The verifier for the manual seal engine; instantly finalizes. struct ManualSealVerifier; @@ -66,17 +65,17 @@ impl Verifier for ManualSealVerifier { } /// Instantiate the import queue for the manual seal consensus engine. -pub fn import_queue( - block_import: BoxBlockImport>, +pub fn import_queue( + block_import: BoxBlockImport, spawner: &impl sp_core::traits::SpawnBlocking, -) -> BasicQueue> +) -> BasicQueue where Block: BlockT, - B: Backend + 'static, + Transaction: Send + Sync + 'static, { BasicQueue::new( ManualSealVerifier, - Box::new(block_import), + block_import, None, None, spawner, -- GitLab From 7817e5719e1be7e1c7ffacf2de76a8fd6307480a Mon Sep 17 00:00:00 2001 From: Arkadiy Paronyan Date: Fri, 8 May 2020 22:22:54 +0200 Subject: [PATCH 167/167] Bump wasmtime again (#5950) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update wasmtime (#5822) * update wasmtime * update tests * Update client/executor/wasmtime/src/host.rs Co-Authored-By: Bastian Köcher * wip * use master-candidate * update with patches * update versions Co-authored-by: Bastian Köcher * Bump version * Added parallel execution test Co-authored-by: Nikolay Volf Co-authored-by: Bastian Köcher --- Cargo.lock | 158 ++++++++++-------- client/executor/src/integration_tests/mod.rs | 32 +++- client/executor/wasmtime/Cargo.toml | 10 +- client/executor/wasmtime/src/host.rs | 2 +- client/executor/wasmtime/src/imports.rs | 145 ++++++++-------- .../executor/wasmtime/src/instance_wrapper.rs | 48 ++++-- .../src/instance_wrapper/globals_snapshot.rs | 9 +- client/executor/wasmtime/src/runtime.rs | 2 +- 8 files changed, 231 insertions(+), 175 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c7b9a9a4bd..42e0ed9db71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -300,6 +300,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" +[[package]] +name = "base64" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5ca2cd0adc3f48f9e9ea5a6bbdf9ccc0bfade884847e484d452414c7ccffb3" + [[package]] name = "bincode" version = "1.2.1" @@ -721,18 +727,18 @@ checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" [[package]] name = "cranelift-bforest" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a9c21f8042b9857bda93f6c1910b9f9f24100187a3d3d52f214a34e3dc5818" +checksum = "d4425bb6c3f3d2f581c650f1a1fdd3196a975490149cf59bea9d34c3bea79eda" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7853f77a6e4a33c67a69c40f5e1bb982bd2dc5c4a22e17e67b65bbccf9b33b2e" +checksum = "d166b289fd30062ee6de86284750fc3fe5d037c6b864b3326ce153239b0626e1" dependencies = [ "byteorder 1.3.4", "cranelift-bforest", @@ -741,6 +747,7 @@ dependencies = [ "cranelift-entity", "gimli", "log", + "regalloc", "serde", "smallvec 1.3.0", "target-lexicon", @@ -749,9 +756,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084cd6d5fb0d1da28acd72c199471bfb09acc703ec8f3bf07b1699584272a3b9" +checksum = "02c9fb2306a36d41c5facd4bf3400bc6c157185c43a96eaaa503471c34c5144b" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -759,24 +766,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "701b599783305a58c25027a4d73f2d6b599b2d8ef3f26677275f480b4d51e05d" +checksum = "44e0cfe9b1f97d9f836bca551618106c7d53b93b579029ecd38e73daa7eb689e" [[package]] name = "cranelift-entity" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b88e792b28e1ebbc0187b72ba5ba880dad083abe9231a99d19604d10c9e73f38" +checksum = "926a73c432e5ba9c891171ff50b75e7d992cd76cd271f0a0a0ba199138077472" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518344698fa6c976d853319218415fdfb4f1bc6b42d0b2e2df652e55dff1f778" +checksum = "e45f82e3446dd1ebb8c2c2f6a6b0e6cd6cd52965c7e5f7b1b35e9a9ace31ccde" dependencies = [ "cranelift-codegen", "log", @@ -786,9 +793,9 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32daf082da21c0c05d93394ff4842c2ab7c4991b1f3186a1d952f8ac660edd0b" +checksum = "488b5d481bb0996a143e55a9d1739ef425efa20d4a5e5e98c859a8573c9ead9a" dependencies = [ "cranelift-codegen", "raw-cpuid", @@ -797,9 +804,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.59.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2aa816f554a3ef739a5d17ca3081a1f8983f04c944ea8ff60fb8d9dd8cd2d7b" +checksum = "00aa8dde71fd9fdb1958e7b0ef8f524c1560e2c6165e4ea54bc302b40551c161" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -807,7 +814,7 @@ dependencies = [ "log", "serde", "thiserror", - "wasmparser", + "wasmparser 0.51.4", ] [[package]] @@ -1277,11 +1284,10 @@ dependencies = [ [[package]] name = "faerie" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b9ed6159e4a6212c61d9c6a86bee01876b192a64accecf58d5b5ae3b667b52" +checksum = "dfef65b0e94693295c5d2fe2506f0ee6f43465342d4b5331659936aee8b16084" dependencies = [ - "anyhow", "goblin", "indexmap", "log", @@ -2724,7 +2730,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f7f3f79f060864db0317cc47641b7d35276dee52a0ffa91553fbd0c153863a3" dependencies = [ - "base64", + "base64 0.11.0", "byteorder 1.3.4", "bytes 0.5.4", "fnv", @@ -3865,16 +3871,11 @@ dependencies = [ [[package]] name = "object" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea44a4fd660ab0f38434934ca0212e90fbeaaee54126ef20a3451c30c95bafae" +checksum = "e5666bbb90bc4d1e5bdcb26c0afda1822d25928341e9384ab187a9b37ab69e36" dependencies = [ - "flate2", - "goblin", - "parity-wasm 0.41.0", - "scroll", "target-lexicon", - "uuid", ] [[package]] @@ -5609,6 +5610,17 @@ dependencies = [ "syn 1.0.17", ] +[[package]] +name = "regalloc" +version = "0.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b27b256b41986ac5141b37b8bbba85d314fbf546c182eb255af6720e07e4f804" +dependencies = [ + "log", + "rustc-hash", + "smallvec 1.3.0", +] + [[package]] name = "regex" version = "1.3.6" @@ -5713,7 +5725,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" dependencies = [ - "base64", + "base64 0.11.0", "blake2b_simd", "constant_time_eq", "crossbeam-utils", @@ -5752,7 +5764,7 @@ version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1" dependencies = [ - "base64", + "base64 0.11.0", "log", "ring", "sct", @@ -7201,7 +7213,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c9dab3f95c9ebdf3a88268c19af668f637a3c5039c2c56ff2d40b1b2d64a25b" dependencies = [ - "base64", + "base64 0.11.0", "bytes 0.5.4", "flate2", "futures 0.3.4", @@ -8264,9 +8276,9 @@ version = "1.0.6" [[package]] name = "substrate-wasmtime" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e512629525ecfe43bffe1f3d9e6bb0f08bf01155288ef27fcaae4ea086e4a9d" +checksum = "7b40a6f3d5d3c00754e348863fead4f37763c32eedf950f5b23df87769882311" dependencies = [ "anyhow", "backtrace", @@ -8276,20 +8288,20 @@ dependencies = [ "region", "rustc-demangle", "substrate-wasmtime-jit", + "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", - "wasmparser", + "wasmparser 0.52.2", "wasmtime-environ", - "wasmtime-profiling", "wat", "winapi 0.3.8", ] [[package]] name = "substrate-wasmtime-jit" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20de5564886d2bcffdd351c9cd114ceb50758aa58eac3cedb14faabf7f93b91" +checksum = "09712de4f56a2c2912bee7763b0877d17d72cfb2237987d63ab78956907e7692" dependencies = [ "anyhow", "cfg-if", @@ -8298,23 +8310,44 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", + "gimli", + "log", "more-asserts", "region", + "substrate-wasmtime-profiling", "substrate-wasmtime-runtime", "target-lexicon", "thiserror", - "wasmparser", + "wasmparser 0.52.2", "wasmtime-debug", "wasmtime-environ", - "wasmtime-profiling", "winapi 0.3.8", ] +[[package]] +name = "substrate-wasmtime-profiling" +version = "0.16.0-threadsafe.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31505dd221f001634a54ea51472bc0058bcbde9186eaf8dd31d0859638121385" +dependencies = [ + "anyhow", + "cfg-if", + "gimli", + "lazy_static", + "libc", + "object", + "scroll", + "serde", + "substrate-wasmtime-runtime", + "target-lexicon", + "wasmtime-environ", +] + [[package]] name = "substrate-wasmtime-runtime" -version = "0.13.0-threadsafe.1" +version = "0.16.0-threadsafe.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d08846f04293a7fc27eeb30f06262ca2e1b4ee20f5192cec1f3ce201e08ceb8" +checksum = "3708081f04d9216d4dee487abf94872065f930cf82e287bd0c5bdb57895460ba" dependencies = [ "backtrace", "cc", @@ -8327,7 +8360,6 @@ dependencies = [ "region", "thiserror", "wasmtime-environ", - "wasmtime-profiling", "winapi 0.3.8", ] @@ -9085,12 +9117,6 @@ dependencies = [ "percent-encoding 2.1.0", ] -[[package]] -name = "uuid" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" - [[package]] name = "vcpkg" version = "0.2.8" @@ -9334,11 +9360,17 @@ version = "0.51.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aeb1956b19469d1c5e63e459d29e7b5aa0f558d9f16fcef09736f8a265e6c10a" +[[package]] +name = "wasmparser" +version = "0.52.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "733954023c0b39602439e60a65126fd31b003196d3a1e8e4531b055165a79b31" + [[package]] name = "wasmtime-debug" -version = "0.12.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d3d007436043bf55ec252d2f4dc1d35834157b5e2f148da839ca502e611cfe1" +checksum = "d39ba645aee700b29ff0093028b4123556dd142a74973f04ed6225eedb40e77d" dependencies = [ "anyhow", "faerie", @@ -9346,18 +9378,18 @@ dependencies = [ "more-asserts", "target-lexicon", "thiserror", - "wasmparser", + "wasmparser 0.51.4", "wasmtime-environ", ] [[package]] name = "wasmtime-environ" -version = "0.12.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f3dea0e60c076dd0da27fa10c821323903c9554c617ed32eaab8e7a7e36c89" +checksum = "ed54fd9d64dfeeee7c285fd126174a6b5e6d4efc7e5a1566fdb635e60ff6a74e" dependencies = [ "anyhow", - "base64", + "base64 0.12.0", "bincode", "cranelift-codegen", "cranelift-entity", @@ -9374,27 +9406,11 @@ dependencies = [ "sha2", "thiserror", "toml", - "wasmparser", + "wasmparser 0.51.4", "winapi 0.3.8", "zstd", ] -[[package]] -name = "wasmtime-profiling" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984d29c8add3381e60d649f4e3e2a501da900fc2d2586e139502eec32fe0ebc8" -dependencies = [ - "gimli", - "goblin", - "lazy_static", - "libc", - "object", - "scroll", - "serde", - "target-lexicon", -] - [[package]] name = "wast" version = "13.0.0" diff --git a/client/executor/src/integration_tests/mod.rs b/client/executor/src/integration_tests/mod.rs index 2e62e060157..886860d7feb 100644 --- a/client/executor/src/integration_tests/mod.rs +++ b/client/executor/src/integration_tests/mod.rs @@ -92,9 +92,8 @@ fn call_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:missing_external") ), } } @@ -121,9 +120,8 @@ fn call_yet_another_not_existing_function(wasm_method: WasmExecutionMethod) { "\"Trap: Trap { kind: Host(Other(\\\"Function `yet_another_missing_external` is only a stub. Calling a stub is not allowed.\\\")) }\"" ), #[cfg(feature = "wasmtime")] - WasmExecutionMethod::Compiled => assert_eq!( - &format!("{:?}", e), - "\"Wasm execution trapped: call to a missing function env:yet_another_missing_external\"" + WasmExecutionMethod::Compiled => assert!( + format!("{:?}", e).contains("Wasm execution trapped: call to a missing function env:yet_another_missing_external") ), } } @@ -623,3 +621,25 @@ fn heap_is_reset_between_calls(wasm_method: WasmExecutionMethod) { // Cal it a second time to check that the heap was freed. instance.call("check_and_set_in_heap", ¶ms).unwrap(); } + +#[test_case(WasmExecutionMethod::Interpreted)] +#[cfg_attr(feature = "wasmtime", test_case(WasmExecutionMethod::Compiled))] +fn parallel_execution(wasm_method: WasmExecutionMethod) { + let threads: Vec<_> = (0..8).map(|_| std::thread::spawn(move || { + let mut ext = TestExternalities::default(); + let mut ext = ext.ext(); + assert_eq!( + call_in_wasm( + "test_twox_128", + &[0], + wasm_method.clone(), + &mut ext, + ).unwrap(), + hex!("99e9d85137db46ef4bbea33613baafd5").to_vec().encode(), + ); + })).collect(); + + for t in threads.into_iter() { + t.join().unwrap(); + } +} diff --git a/client/executor/wasmtime/Cargo.toml b/client/executor/wasmtime/Cargo.toml index 5b1c3841410..0864c19bf0f 100644 --- a/client/executor/wasmtime/Cargo.toml +++ b/client/executor/wasmtime/Cargo.toml @@ -21,11 +21,11 @@ sp-wasm-interface = { version = "2.0.0-dev", path = "../../../primitives/wasm-in sp-runtime-interface = { version = "2.0.0-dev", path = "../../../primitives/runtime-interface" } sp-core = { version = "2.0.0-dev", path = "../../../primitives/core" } sp-allocator = { version = "2.0.0-dev", path = "../../../primitives/allocator" } -wasmtime = { package = "substrate-wasmtime", version = "0.13.0-threadsafe.1" } -wasmtime_runtime = { package = "substrate-wasmtime-runtime", version = "0.13.0-threadsafe.1" } -wasmtime-environ = "0.12.0" -cranelift-wasm = "0.59.0" -cranelift-codegen = "0.59.0" +wasmtime = { package = "substrate-wasmtime", version = "0.16.0-threadsafe.2" } +wasmtime-runtime = { package = "substrate-wasmtime-runtime", version = "0.16.0-threadsafe.2" } +wasmtime-environ = "0.16" +cranelift-wasm = "0.63" +cranelift-codegen = "0.63" [dev-dependencies] assert_matches = "1.3.0" diff --git a/client/executor/wasmtime/src/host.rs b/client/executor/wasmtime/src/host.rs index 29187ac6633..8c481e95c43 100644 --- a/client/executor/wasmtime/src/host.rs +++ b/client/executor/wasmtime/src/host.rs @@ -117,7 +117,7 @@ impl<'a> SandboxCapabilities for HostContext<'a> { return Err("Supervisor function returned unexpected result!".into()); } } - Err(err) => Err(err.message().to_string().into()), + Err(err) => Err(err.to_string().into()), } } } diff --git a/client/executor/wasmtime/src/imports.rs b/client/executor/wasmtime/src/imports.rs index 48299ffd62d..2d9794b7eda 100644 --- a/client/executor/wasmtime/src/imports.rs +++ b/client/executor/wasmtime/src/imports.rs @@ -18,9 +18,8 @@ use crate::state_holder; use sc_executor_common::error::WasmError; use sp_wasm_interface::{Function, Value, ValueType}; use std::any::Any; -use std::rc::Rc; use wasmtime::{ - Callable, Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, + Extern, ExternType, Func, FuncType, ImportType, Limits, Memory, MemoryType, Module, Trap, Val, }; @@ -53,11 +52,11 @@ pub fn resolve_imports( let resolved = match import_ty.name() { "memory" => { memory_import_index = Some(externs.len()); - resolve_memory_import(module, import_ty, heap_pages)? + resolve_memory_import(module, &import_ty, heap_pages)? } _ => resolve_func_import( module, - import_ty, + &import_ty, host_functions, allow_missing_func_imports, )?, @@ -131,7 +130,7 @@ fn resolve_func_import( { Some(host_func) => host_func, None if allow_missing_func_imports => { - return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, func_ty)); + return Ok(MissingHostFuncHandler::new(import_ty).into_extern(module, &func_ty)); } None => { return Err(WasmError::Other(format!( @@ -163,6 +162,58 @@ struct HostFuncHandler { host_func: &'static dyn Function, } +fn call_static( + static_func: &'static dyn Function, + wasmtime_params: &[Val], + wasmtime_results: &mut [Val], +) -> Result<(), wasmtime::Trap> { + let unwind_result = state_holder::with_context(|host_ctx| { + let mut host_ctx = host_ctx.expect( + "host functions can be called only from wasm instance; + wasm instance is always called initializing context; + therefore host_ctx cannot be None; + qed + ", + ); + // `into_value` panics if it encounters a value that doesn't fit into the values + // available in substrate. + // + // This, however, cannot happen since the signature of this function is created from + // a `dyn Function` signature of which cannot have a non substrate value by definition. + let mut params = wasmtime_params.iter().cloned().map(into_value); + + std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { + static_func.execute(&mut host_ctx, &mut params) + })) + }); + + let execution_result = match unwind_result { + Ok(execution_result) => execution_result, + Err(err) => return Err(Trap::new(stringify_panic_payload(err))), + }; + + match execution_result { + Ok(Some(ret_val)) => { + debug_assert!( + wasmtime_results.len() == 1, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + wasmtime_results[0] = into_wasmtime_val(ret_val); + Ok(()) + } + Ok(None) => { + debug_assert!( + wasmtime_results.len() == 0, + "wasmtime function signature, therefore the number of results, should always \ + correspond to the number of results returned by the host function", + ); + Ok(()) + } + Err(msg) => Err(Trap::new(msg)), + } +} + impl HostFuncHandler { fn new(host_func: &'static dyn Function) -> Self { Self { @@ -171,63 +222,14 @@ impl HostFuncHandler { } fn into_extern(self, module: &Module) -> Extern { + let host_func = self.host_func; let func_ty = wasmtime_func_sig(self.host_func); - let func = Func::new(module.store(), func_ty, Rc::new(self)); - Extern::Func(func) - } -} - -impl Callable for HostFuncHandler { - fn call( - &self, - wasmtime_params: &[Val], - wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - let unwind_result = state_holder::with_context(|host_ctx| { - let mut host_ctx = host_ctx.expect( - "host functions can be called only from wasm instance; - wasm instance is always called initializing context; - therefore host_ctx cannot be None; - qed - ", - ); - // `into_value` panics if it encounters a value that doesn't fit into the values - // available in substrate. - // - // This, however, cannot happen since the signature of this function is created from - // a `dyn Function` signature of which cannot have a non substrate value by definition. - let mut params = wasmtime_params.iter().cloned().map(into_value); - - std::panic::catch_unwind(std::panic::AssertUnwindSafe(|| { - self.host_func.execute(&mut host_ctx, &mut params) - })) - }); - - let execution_result = match unwind_result { - Ok(execution_result) => execution_result, - Err(err) => return Err(Trap::new(stringify_panic_payload(err))), - }; - - match execution_result { - Ok(Some(ret_val)) => { - debug_assert!( - wasmtime_results.len() == 1, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - wasmtime_results[0] = into_wasmtime_val(ret_val); - Ok(()) - } - Ok(None) => { - debug_assert!( - wasmtime_results.len() == 0, - "wasmtime function signature, therefore the number of results, should always \ - correspond to the number of results returned by the host function", - ); - Ok(()) + let func = Func::new(module.store(), func_ty, + move |_, params, result| { + call_static(host_func, params, result) } - Err(msg) => Err(Trap::new(msg)), - } + ); + Extern::Func(func) } } @@ -245,25 +247,18 @@ impl MissingHostFuncHandler { } } - fn into_extern(self, module: &Module, func_ty: &FuncType) -> Extern { - let func = Func::new(module.store(), func_ty.clone(), Rc::new(self)); + fn into_extern(self, wasmtime_module: &Module, func_ty: &FuncType) -> Extern { + let Self { module, name } = self; + let func = Func::new(wasmtime_module.store(), func_ty.clone(), + move |_, _, _| Err(Trap::new(format!( + "call to a missing function {}:{}", + module, name + ))) + ); Extern::Func(func) } } -impl Callable for MissingHostFuncHandler { - fn call( - &self, - _wasmtime_params: &[Val], - _wasmtime_results: &mut [Val], - ) -> Result<(), wasmtime::Trap> { - Err(Trap::new(format!( - "call to a missing function {}:{}", - self.module, self.name - ))) - } -} - fn wasmtime_func_sig(func: &dyn Function) -> wasmtime::FuncType { let params = func .signature() diff --git a/client/executor/wasmtime/src/instance_wrapper.rs b/client/executor/wasmtime/src/instance_wrapper.rs index 469668802f1..bf01896809e 100644 --- a/client/executor/wasmtime/src/instance_wrapper.rs +++ b/client/executor/wasmtime/src/instance_wrapper.rs @@ -26,7 +26,7 @@ use sc_executor_common::{ util::{WasmModuleInfo, DataSegmentsSnapshot}, }; use sp_wasm_interface::{Pointer, WordSize, Value}; -use wasmtime::{Store, Instance, Module, Memory, Table, Val}; +use wasmtime::{Store, Instance, Module, Memory, Table, Val, Func, Extern, Global}; mod globals_snapshot; @@ -88,6 +88,35 @@ pub struct InstanceWrapper { _not_send_nor_sync: marker::PhantomData<*const ()>, } +fn extern_memory(extern_: &Extern) -> Option<&Memory> { + match extern_ { + Extern::Memory(mem) => Some(mem), + _ => None, + } +} + + +fn extern_global(extern_: &Extern) -> Option<&Global> { + match extern_ { + Extern::Global(glob) => Some(glob), + _ => None, + } +} + +fn extern_table(extern_: &Extern) -> Option<&Table> { + match extern_ { + Extern::Table(table) => Some(table), + _ => None, + } +} + +fn extern_func(extern_: &Extern) -> Option<&Func> { + match extern_ { + Extern::Func(func) => Some(func), + _ => None, + } +} + impl InstanceWrapper { /// Create a new instance wrapper from the given wasm module. pub fn new(module_wrapper: &ModuleWrapper, imports: &Imports, heap_pages: u32) -> Result { @@ -96,8 +125,7 @@ impl InstanceWrapper { let memory = match imports.memory_import_index { Some(memory_idx) => { - imports.externs[memory_idx] - .memory() + extern_memory(&imports.externs[memory_idx]) .expect("only memory can be at the `memory_idx`; qed") .clone() } @@ -130,8 +158,7 @@ impl InstanceWrapper { .instance .get_export(name) .ok_or_else(|| Error::from(format!("Exported method {} is not found", name)))?; - let entrypoint = export - .func() + let entrypoint = extern_func(&export) .ok_or_else(|| Error::from(format!("Export {} is not a function", name)))?; match (entrypoint.ty().params(), entrypoint.ty().results()) { (&[wasmtime::ValType::I32, wasmtime::ValType::I32], &[wasmtime::ValType::I64]) => {} @@ -164,8 +191,7 @@ impl InstanceWrapper { .get_export("__heap_base") .ok_or_else(|| Error::from("__heap_base is not found"))?; - let heap_base_global = heap_base_export - .global() + let heap_base_global = extern_global(&heap_base_export) .ok_or_else(|| Error::from("__heap_base is not a global"))?; let heap_base = heap_base_global @@ -183,7 +209,7 @@ impl InstanceWrapper { None => return Ok(None), }; - let global = global.global().ok_or_else(|| format!("`{}` is not a global", name))?; + let global = extern_global(&global).ok_or_else(|| format!("`{}` is not a global", name))?; match global.get() { Val::I32(val) => Ok(Some(Value::I32(val))), @@ -201,8 +227,7 @@ fn get_linear_memory(instance: &Instance) -> Result { .get_export("memory") .ok_or_else(|| Error::from("memory is not exported under `memory` name"))?; - let memory = memory_export - .memory() + let memory = extern_memory(&memory_export) .ok_or_else(|| Error::from("the `memory` export should have memory type"))? .clone(); @@ -213,7 +238,8 @@ fn get_linear_memory(instance: &Instance) -> Result { fn get_table(instance: &Instance) -> Option
{ instance .get_export("__indirect_function_table") - .and_then(|export| export.table()) + .as_ref() + .and_then(extern_table) .cloned() } diff --git a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs index a6ab3fed604..602c780f720 100644 --- a/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs +++ b/client/executor/wasmtime/src/instance_wrapper/globals_snapshot.rs @@ -21,6 +21,7 @@ use sc_executor_common::{ use sp_wasm_interface::Value; use cranelift_codegen::ir; use cranelift_wasm::GlobalIndex; +use wasmtime_runtime::{ExportGlobal, Export}; /// A snapshot of a global variables values. This snapshot can be used later for restoring the /// values to the preserved state. @@ -37,17 +38,15 @@ impl GlobalsSnapshot { pub fn take(instance_wrapper: &InstanceWrapper) -> Result { // EVIL: // Usage of an undocumented function. - let handle = instance_wrapper.instance.handle().clone(); + let handle = unsafe { instance_wrapper.instance.handle().clone() }; let mut preserved_mut_globals = vec![]; for global_idx in instance_wrapper.imported_globals_count..instance_wrapper.globals_count { let (def, global) = match handle.lookup_by_declaration( - &wasmtime_environ::Export::Global(GlobalIndex::from_u32(global_idx)), + &wasmtime_environ::EntityIndex::Global(GlobalIndex::from_u32(global_idx)), ) { - wasmtime_runtime::Export::Global { - definition, global, .. - } => (definition, global), + Export::Global(ExportGlobal { definition, global, .. }) => (definition, global), _ => unreachable!("only globals can be returned for a global request"), }; diff --git a/client/executor/wasmtime/src/runtime.rs b/client/executor/wasmtime/src/runtime.rs index 0289188ba11..a2ad3bada4b 100644 --- a/client/executor/wasmtime/src/runtime.rs +++ b/client/executor/wasmtime/src/runtime.rs @@ -158,7 +158,7 @@ fn perform_call( Err(trap) => { return Err(Error::from(format!( "Wasm execution trapped: {}", - trap.message() + trap ))); } } -- GitLab